
    Le=                     P   d dl Z d dlZd dlZd dlmZ ddlmZmZm	Z	 ddl
mZmZmZmZ ddlmZmZmZ ddlmZ d	d
lmZ d	dlmZmZmZmZ d	dlmZmZmZ d	dlm Z m!Z!  G d de          Z" G d de"e          Z# G d de"e          Z$ G d de          Z% G d dee          Z&dS )    N)Version   )CompositeOverlayElement	traversal)isfinite
match_spec	max_rangeunique_iterator)RGBImageRaster   )categorical_legend   )	PointPlot)ColorbarPlotElementPlot
LegendPlotOverlayPlot)GridPlotMPLPlotmpl_rc_context)get_raster_arraympl_versionc                        e Zd Z ej        dd          Z ej        dd          Z ej        de	e
ef          Z ej        dd	          Z ej        d
d          Z ed          Zd fd	Zd Z xZS )RasterBasePlotequalz
        Raster elements respect the aspect ratio of the
        Images by default but may be set to an explicit
        aspect ratio or to 'square'.defaultdocN
        Optional missing-data value for integer data.
        If non-None, data with this value will be replaced with NaN so
        that it is transparent (by default) when plotted.r   r    class_F-
        Whether to show legend for the plot.Tz?
        Whether to situate the image relative to other plots. imshowsinglecombinedc                     t                                          |||          }| j        s|dvr|S t          |t                    r|j                                        S |j        S )N)r)   data)superget_extentssituate_axes
isinstancer   boundslbrtextents)selfelementranges
range_typekwargsr2   	__class__s         =lib/python3.11/site-packages/holoviews/plotting/mpl/raster.pyr-   zRasterBasePlot.get_extents'   sg    ''%%gvzBB 	#
2F F FN'' 	#>&&(((?"    c                     dS )N)NN )r3   r4   r5   s      r9   _compute_tickszRasterBasePlot._compute_ticks0   s    zr:   r)   )__name__
__module____qualname__param	ParameteraspectIntegernodataClassSelectorintfloattuplepaddingBooleanshow_legendr.   dict_plot_methodsr-   r=   __classcell__r8   s   @r9   r   r      s       U_W 3( ) ) )F
 U]4 .= > > >F
 "e!!S%4GHHHG%- 40 1 1 1K !5= 4B C C CL D)))M# # # # # #      r:   r   c                   X     e Zd Z ej        ddi          Zg dZ fdZd Zd Z	 xZ
S )
RasterPlotNaNtransparentr    )alphacmapinterpolationvisible	filterradclimsnormc                      t                      j        |i | | j        j        t          k    r| j         | _        d S d S N)r,   __init__hmaptyper   invert_yaxis)r3   argsr7   r8   s      r9   r`   zRasterPlot.__init__;   sJ    $)&)))9>V##$($5 5D $#r:   c                    |                      ||          \  }}t          |t                    r|                    dd            t	          |          }t          |          t          u r/|j        \  }}}	}
| j        r|d d d d df         }nA|d d d         }n5|j	        
                                \  }}}	}
| j        r|d d dd d df         }| j        r>t          |t                    r|                    g d          n|j        }|||
|	f\  }}}	}
|j        d         }|                     ||||           ||	||
g|d<   d|d<   |g|||dfS )	NrX   r   r   r   r   extentupperoriginxticksyticks)r=   r/   r   popr   rb   r   r2   invert_axesr0   r1   	transposeTvdims_norm_kwargs)r3   r4   r5   stylerl   rm   r+   lbrtvdims               r9   get_datazRasterPlot.get_data@   s   ,,Wf==gs## 	$IIfd###((==F"" JAq!Q "AAAtttG}DDbDz ,,..JAq!Q (DDbD$$B$J' 	$0:7C0H0HT4>>))),,,dfDAq!JAq!Q}Q'65$777aA,h!hvu6BBBBr:   c                 @   | j         d         }|                     |||          \  }}}|d         \  }	}
}}|                    |d                    |                    |	|
||f           |                    |d         |d         f           d|v r|d         |_        |S )Nartistrh   r   vminvmaxr]   )handlesrz   set_data
set_extentset_climr]   r3   keyaxisr4   r5   rt   imr+   axis_kwargsru   rw   rv   rx   s                r9   update_handleszRasterPlot.update_handles]   s    \(##'==&%#H#H e[8_
1a
DG
q!Ql###
U6]E&M2333U??FmBGr:   )r?   r@   rA   rB   Dictclipping_colors
style_optsr`   rz   r   rP   rQ   s   @r9   rS   rS   4   s         ej%)?@@@O0 0 0J6 6 6 6 6
C C C:
 
 
 
 
 
 
r:   rS   c                   2     e Zd Zg dZd Z fdZd Z xZS )RGBPlot)rW   rY   rZ   r[   c                    |                      ||          \  }}t          |          }|j                                        \  }}}	}
| j        r2|d d dd d df         }|                    g d          }|||
|	f\  }}}	}
t          d |||	|
fD                       r	||	||
g|d<   d|d<   |j        d d         dk    rt          j	        d	d
          }|g|||dfS )Nrf   rg   c              3   4   K   | ]}t          |          V  d S r_   )r   ).0es     r9   	<genexpr>z#RGBPlot.get_data.<locals>.<genexpr>v   s(      11qx{{111111r:   rh   ri   rj   r   )r   r   )r   r      uint8)dtyperk   )
r=   r   r0   r1   ro   rp   allshapenpzeros)r3   r4   r5   rt   rl   rm   r+   ru   rv   rw   rx   s              r9   rz   zRGBPlot.get_datan   s   ,,Wf==((^((**
1a 	$"ddd
#D>>))),,DAq!JAq!Q11Q1aL11111 	+ !QlE(O!h:bqb>V##8IW555Dvu6BBBBr:   c           	         t                                          |||          }dt          j        vs| j        s|S 	 t          | j        | j                  }n# t          $ r |cY S w xY w||S d | j	        
                                                                D             }t          |f|| j        | j        | j        dd|| _        | j                                         |S )Nzholoviews.operation.datashader)backendc                 D    i | ]\  }}|                     d           ||S )legend)
startswith)r   kvs      r9   
<dictcomp>z(RGBPlot.init_artists.<locals>.<dictcomp>   s0    ```$!QV^I_I_`A```r:   r   )r   figkeys
dimensionsoverlaid)r,   init_artistssysmodulesrM   r   current_framer   	ExceptionrB   valuesitemsr   stater   r   _legend_plotinitialize_plot)r3   ax	plot_argsplot_kwargsr   r   legend_paramsr8   s          r9   r   zRGBPlot.init_artists}   s
   ''&&r9kBB+3;>>dFV>N	'(:DLQQQFF 	 	 	NNN	>N``$**;*;*=*=*C*C*E*E```%f C24:+/9/0C C4AC C 	))+++s   A A('A(c                     | j         d         }|                     |||          \  }}}|d         \  }	}
}}|                    |d                    |                    |	|
||f           |S )Nr|   rh   r   )r   rz   r   r   r   s                r9   r   zRGBPlot.update_handles   sq    \(##'==&%#H#H e[8_
1a
DG
q!Ql###r:   )r?   r@   rA   r   rz   r   r   rP   rQ   s   @r9   r   r   j   sd        CCCJC C C    "      r:   r   c                       e Zd Z ej        ddi          Z ej        dd          Z ej        de	e
ef          Z ej        d	d
          Zg dZ ed          Zd Zd ZdS )QuadMeshPlotrT   rU   rV   Nr"   r   r   r#   Fr%   )
rW   rX   r\   
edgecolorsr]   shading
linestyles
linewidthshatchrZ   
pcolormeshr'   c                 F  	
                      dd          }t          j                            |t          j        t          j        |                              }j                            j        d                   
|	                    d          dk    		
fdj        D             }| j
        r|d d d	         }|j        }||gz   }
rt          j        |          |d
<   j        d         }|                     |||           t          |          |i fS )Nr   F)flat)maskr   r   gouraudc           	      N    g | ]!}j                             |d           "S )T)orderedexpandededges)	interfacecoords)r   dr   r4   r   s     r9   
<listcomp>z)QuadMeshPlot.get_data.<locals>.<listcomp>   sN     * * * #**7At4<E + K K * * *r:   rf   locs)dimension_valuesr   maarraylogical_notr   r   	irregularkdimsgetro   rq   concatenaterr   rs   rJ   )r3   r4   r5   rt   zdatar+   r   
cmesh_datary   r   r   s    `       @@r9   rz   zQuadMeshPlot.get_data   s5   (((77u{{5r~bk%6H6H'I'I{JJ$..wa8HII		)$$	1* * * * * *"=* * *  	DDbD\F6Dtf_
 	3N622E&M}Q'65$777Z  %++r:   c                    |                     dd           } |j        |i |}| j                            d          }|rt          t          d          k     r|                    |j                   t          |d          r'|	                    |
                                           |                    |                                           |                    |           n|r|                    |           ||dS )Nr   cbarz3.1	set_array)r|   r   )rn   r   r   r   r   r   set_normr]   hasattrr   	get_arrayr   get_climupdate_normal)r3   r   r   r   r   r|   colorbars          r9   r   zQuadMeshPlot.init_artists   s    vt,,	9[99<##F++ 	+genn44fk***x-- 7""6#3#3#5#5666foo//000""6**** 	+""6*** $///r:   )r?   r@   rA   rB   r   r   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r   rN   rO   rz   r   r<   r:   r9   r   r      s         ej%)?@@@OU]4 .= > > >F
 "e!!S%4GHHHG%- 40 1 1 1KB B BJ D---M, , ,&0 0 0 0 0r:   r   c                      e Zd ZdZ ej        dd          Z ej        d          Z ej        d          Z	 ej        d          Z
 ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z  ej        d          Z! ej        d          Z" ej        d          Z# ej        d          Z$ ej        d          Z% ej        d          Z& ej        d          Z' ej        d          Z( ej        d          Z) ej        d          Z* ej        d          Z+ ej        d          Z,	 	 dd
Z-d Z.ddZ/d Z0e1dd            Z2e1dd            Z3d Z4d Z5d Z6dS )RasterGridPlotz
    RasterGridPlot evenly spaces out plots of individual projections on
    a grid, even when they differ in size. Since this class uses a single
    axis to generate all the individual plots it is much faster than the
    equivalent using subplots.
    g?zC
        The amount of padding as a fraction of the total Grid sizer   rf   )
precedenceNFr   c                 `   |d u | _         | j         rt          j        |          \  }}t          j        | f||d| || _        d| _        d| _        || _        d| _	        || _
        |j        dk    rt          |                                 \  }}	n|                                }d g}	t          t                              |                    | _        t          t                              |	                    | _        g g c| _        | _        |j        \  | _        | _        |                                 | _        |                     |d |d          \  }
}
| _        |                                 | _        | j        \  }}}
}
}
}
| j        dk    rt=          ||z            | _        g | _        d S )N)r   r   r   Fr   )create_axesr   ) 	top_levelr   unique_dimkeysr   r`   layoutcyclic_indexzorder
layout_numr   ra   ndimszipr   listrN   fromkeys_xkeys_ykeys_xticks_yticksr   rowscols	_get_size
fig_inches_create_subplots_compute_bordersborder_extentsrD   rI   streams)r3   r   r   r   r   r5   r   paramsxkeysykeys_widthheights                r9   r`   zRasterGridPlot.__init__  s   > 	@(7??JJ*4JJ6JJJ$	<!.LE55KKMMEFE4==//004==//00%'"dl%|	49..** 11&$TY1ZZ1dk"3355$($7!vq!Q;'!!f--DK r:   c                     d S r_   r<   r3   r   s     r9   _finalize_artistzRasterGridPlot._finalize_artist%  s    r:   r)   c                 V    |dk    rt           j        fdz  S | j        \  }}}}}}dd||fS )Nhardr   r   )r   nanr   )r3   viewr5   r6   r7   r   r   r   s           r9   r-   zRasterGridPlot.get_extents(  s?    F9Q;$($7!vq!Q1eV$$r:   c                 ,    t          j        | |          S r_   )r   
_get_framer   s     r9   r  zRasterGridPlot._get_frame/  s    "4---r:   c                    | j         \  }}}}}}| j        d         }|                     | j        ||          }i | j        d<   ||}	}t          | j                  D ]B\  }
}||
         }t          | j                  D ]\  }}||         }| j        j        dk    r| j        	                    ||fd           n| j        	                    |d            j
        di fdt          | j        |          D             }t          j        t                    rj                                        d         nj        }|rt%          |          nd }|                     ||          }|                     |d          | j                 } | j        d         j        |fd|||z   |	|	|z   fi|}|j        d         j        }t1          ||          	                    ||                    |                    d	         }|                    |           ||                    d
           || j        d         ||f<   |	||z   z  }	|
dk    r#| j                            |	|z
  |dz  z
             |}	|||z   z  }| j                            ||z
  |dz  z
             D|                                 } | j         |fd|i|S )Nrf   projsr   c                 8    i | ]\  }}|j         v |j        |S r<   )r   name)r   r   valvmaps      r9   r   z2RasterGridPlot.initialize_plot.<locals>.<dictcomp>C  s3     &8 &8 &8fa'(DJ '(fc'6r:   rt   r   rh   r   r)   Fg       @r5   r<   )!r   r   compute_rangesr   r   	enumerater   r   r   r   selectr   r   
issubclassrb   r   lastr   r   lookup_optionsr   r&   rr   r
  r	   ranger   set_visibler   appendr   _get_axis_kwargs_finalize_axis)r3   r5   r   b_wb_hwidthsheightsr   xyxidxxkeywyidxykeyhpaner+   optsplotcdimvalranger7   r  s                          @r9   r   zRasterGridPlot.initialize_plot3  s   *.*='1c3im$$T[#v>> "WC1#DK00 	, 	,JD$tA'44 4 4
dDM;$q((;??D$<>>DD;??466D"t{ 9 9 &8 &8 &8 &8DOUX@Y@Y &8 &8 &8 9 91;DIGW1X1Xgty''))"--^b^g15?'---4,,T3??**499$:KL2t|F+24XX1Q31Q3XSWXXz!})%dF3377djj>N>NOOPZ[h'''<$$U+++6:W%tTl3QW199L''#ad
333ASLAL#ad
++++&&(("t"3@@v@@@@r:   c                 f   |                      |          }|                     | j        ||          }| j        D ]}| j        D ]}| j        d         ||f         }| j        j        dk    r||fn|f}|j                            |d           }|rk|	                    d           t          |t                    r|                                d         n|}	t          |	          }
|                    |
           |	                    d           ̌|                                 } | j        |fd|i|S )Nr  r   Tr   Fr5   )r  r  r   r   r   r   r   r+   r   r  r/   r   r   r   r   r  r  )r3   r   r5   gridr  r"  r&  grid_keyr4   imgr+   r7   s               r9   update_framezRasterGridPlot.update_frameZ  sM   s##$$T[#v>>K 	, 	,D 
, 
,|G,dD\:+/;+<q+@+@D$<<tg)--$77 ,$$T***1;GEU1V1Vc'..**1--\cC+C00DMM$''''$$U++++
, &&(("t"3@@v@@@@r:   c                    | j         j        d         | j         j        dk    r| j         j        d         nd | j        fd| j        D             f}| j        fd| j        D             f}t          g||          S )Nr   r   c                 :    g | ]}                     |          S r<   pprint_value)r   ru   xdims     r9   r   z3RasterGridPlot._get_axis_kwargs.<locals>.<listcomp>r  s'     K K K!!2!21!5!5 K K Kr:   c                 B    g | ]}r                     |          nd S ) r0  )r   ru   ydims     r9   r   z3RasterGridPlot._get_axis_kwargs.<locals>.<listcomp>s  sA     !7 !7 !7%& :>!E!2!21!5!5!52 !7 !7 !7r:   )r   rl   rm   )r   r   r   r   r   r   r   rN   )r3   rl   rm   r2  r5  s      @@r9   r  zRasterGridPlot._get_axis_kwargso  s    { #'+{'81'<'<t{ ##$, K K K Kt{ K K KL, !7 !7 !7 !7*.+!7 !7 !7 8d|F6JJJJr:   c                    
  j         j        }d d 
 fdt           j                             d                    D             }|dk    r5
 fdt           j                             d                    D             }n/t	           j                             
t          g                    g}d |D             }d |D             }t          j        |          t          j        |          }}| j	        z  t          |          dz   z  }| j	        z  t          |          dz   z  }	|| j	        z  z  }|| j	        z  z  }||||	||fS )	Nc                 ,    |                      d          S )Nr   r  r  s    r9   <lambda>z1RasterGridPlot._compute_borders.<locals>.<lambda>z  s    QWWQZZ r:   c                 ,    |                      d          S Nr   r8  r9  s    r9   r:  z1RasterGridPlot._compute_borders.<locals>.<lambda>{  s    aggajj r:   c                     g | ]:}t          j        |d d f                             t          g                    ;S r_   r
   r   traverser   )r   r  r3   width_fns     r9   r   z3RasterGridPlot._compute_borders.<locals>.<listcomp>|  sX     T T T #4;q!!!t#4#=#=h	#R#RSS T T Tr:   r   r   c                     g | ]:}t          j        d d |f                             t          g                    ;S r_   r>  )r   r  	height_fnr3   s     r9   r   z3RasterGridPlot._compute_borders.<locals>.<listcomp>  sX     Y Y Y"# (AAAqD(9(B(B9wi(X(XYY Y Y Yr:   c                 0    g | ]}|d          |d         z
  S r   r   r<   r   rh   s     r9   r   z3RasterGridPlot._compute_borders.<locals>.<listcomp>  s%    BBB&&)F1I%BBBr:   c                 0    g | ]}|d          |d         z
  S rD  r<   rE  s     r9   r   z3RasterGridPlot._compute_borders.<locals>.<listcomp>  s%    DDD66!9VAY&DDDr:   )r   r   r   r   r
   r?  r   r   sumrK   len)r3   r   width_extentsheight_extentsr  r  r   r   border_widthborder_heightrB  r@  s   `         @@r9   r   zRasterGridPlot._compute_bordersx  s   !''((	T T T T T"1$+2N2Nq2Q2Q"R"RT T T199Y Y Y Y Y'6t{7S7STU7V7V'W'WY Y YNN ((<(<Y	(R(RSSTNBBMBBBDD^DDDvwvdl*S[[];,s7||A~>t|##&%%flM67JJr:   c                 H    t          t          | j                  dg          S r<  )maxrH  r   )r3   s    r9   __len__zRasterGridPlot.__len__  s    C	NNA&'''r:   )NNFNr   r>   r_   )7r?   r@   rA   __doc__rB   NumberrK   rC   apply_extentsapply_rangesapply_ticksbatchedbgcolordata_aspectdefault_spanhooksro   invert_xaxisrc   invert_zaxislabelledlegend_colslegend_labelslegend_positionlegend_optslegend_limitlogxlogylogz	show_gridstyle_groupingxlimylimzlimrl   
xformatterrm   
yformatterztickszaxis	zrotation
zformatterxlabelylabelzlabelr`   r   r-   r  r   r   r-  r  r   rO  r<   r:   r9   r   r      s         el3 -F G G GG $EOr222M"5?b111L!%/R000Keo,,,Geo,,,G!%/R000K"5?b111LEOr***E!%/R000K"5?b111L"5?b111L"5?b111Lu"---H!%/R000K#EOr222M%eo444O!%/R000K"5?b111L5?b)))D5?b)))D5?b)))D2...I$U_333N5?b)))D5?b)))D5?b)))DU_+++F B///JU_+++F B///JU_+++FEOr***E2...I B///JU_+++FU_+++FU_+++F VZ   B  % % % %. . . $A $A $A ^$AL A A A ^A(K K KK K K,( ( ( ( (r:   r   )'r   numpyr   rB   packaging.versionr   corer   r   r   	core.utilr   r	   r
   r   element.rasterr   r   r   utilr   chartr   r4   r   r   r   r   r&  r   r   r   r   r   r   rS   r   r   r   r<   r:   r9   <module>rz     s   



      % % % % % % 8 8 8 8 8 8 8 8 8 8 I I I I I I I I I I I I 0 0 0 0 0 0 0 0 0 0 % % % % % %       G G G G G G G G G G G G 3 3 3 3 3 3 3 3 3 3 / / / / / / / /         [      F3 3 3 3 3 3 3 3l* * * * *nj * * *Z40 40 40 40 40< 40 40 40nA( A( A( A( A(X{ A( A( A( A( A(r:   