
    eA                     :   d dl Z d dlZd dlZd dl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 dd
lmZ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  G d de          Z G d de          Z G d de          Z G d de          Z  G d de          Z!dS )    N)CustomJSHoverDatetimeAxis   )cartesian_productdimension_sanitizerisfinite)Raster   )categorical_legend   )	PointPlot)ColorbarPlot
LegendPlot)BokehOverlaySelectionDisplay)base_propertiesfill_propertiesline_propertiesmpl_to_bokeh)bokeh33bokeh34	colormeshc                   
    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eddgz   ZeZ ed          Z e            Zd Z fdZ fdZd Z xZS )
RasterPlotNaNtransparentdefaultN
        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   docr   r   class_F-
        Whether to show legend for the plot.cmapalphaimagesinglec                    |j         \  }}|j        df|j        dfg}|j        }|                    |d         j        df           |dd          D ]6}t	          |j                  }|                    |j        d| df           7|i fS )N$x$yr   @imager   z@{})kdimspprint_labelvdimsappendr   name)selfelementxdimydimtooltipsr0   vdimvnames           ?lib/python3.11/site-packages/holoviews/plotting/bokeh/raster.py_hover_optszRasterPlot._hover_opts'   s    ]
d&-0A4/HIq.9:::!""I 	B 	BD'	22EOOT.e@AAAA|    c                 T   t                                          ||           | j                            d          }|rt	          |j        t                    sd S | j        d         }| j        d         }d}g t          |j                  }}|j        D ]\  }	}
t	          |t                    r4|
dk    r.t          |                    d                    }||d<   |
d	z  }
t	          |t                    r4|
d
k    r.t          |                    d                    }||d
<   |
d	z  }
|                    |	|
f           t          sOd}|D ]J}||         }
t	          |
t                    r+|
                                dk    rt          |          ||<   K||_        ||_        d S )Nhoverxaxisyaxisz
        var {ax} = special_vars.{ax};
        var date = new Date({ax});
        return date.toISOString().slice(0, 19).replace('T', ' ')
        r*   x)ax)codez{custom}r+   yz
            if (value === -9223372036854776) {
                return "NaN"
            } else {
                const date = new Date(value);
                return date.toISOString().slice(0, 19).replace('T', ' ')
            }
            datetime)super_postprocess_hoverhandlesget
isinstancer7   listdict
formattersr   r   formatr1   r   strlower)r3   renderersourcer>   r?   r@   rC   r7   rM   r2   	formatterxhoveryhoverdatetime_codekey	__class__s                  r:   rG   zRasterPlot._postprocess_hover1   s   ""8V444  )) 	*U^T:: 	FW%W%
  "4(8#9#9*!& 		/ 		/T9%.. (93D3D&DKK3K,?,?@@@#)
4 Z'	%.. (93D3D&DKK3K,?,?@@@#)
4 Z'	OOT9-.... 	HM " H H&sO	i-- H)//2C2Cz2Q2Q&3&G&G&GJsO!%r<   c                      t                      j        |i | | j        j        t          k    r| j         | _        d S d S N)rF   __init__hmaptyper	   invert_yaxis)r3   argskwargsrX   s      r:   r[   zRasterPlot.__init__\   sJ    $)&)))9>V##$($5 5D $#r<   c                    t          ddddd          }|j        d         }|                     ||||          |d<   d	|v r|d	         |d
<   | j        ri ||fS t	          |          t
          u r|j        \  }}}}	| j        r|||	|f\  }}}}	n0|j        	                                \  }}}}	| j        r|||	|f\  }}}}	|	|z
  ||z
  }}
t          |g|g|g|
g          }t          |j        d          D ]\  }}|dk    rd| j        vr n|                    |d          }|j        j        dk    r|                    t           j                  }d|j        v r t!          j        t           j        gg          }| j        t	          |          t
          u z  r|j        }|dk    rdnt-          |j                  }|g||<   |||fS )Nr&   rA   rD   dwdhr&   rA   rD   rb   rc   r   color_mapperr%   global_alpha)rA   rD   rb   rc   r
   r>   Fflatb)rL   r0   _get_colormapperstatic_sourcer]   r	   extentsinvert_axesboundslbrt	enumeraterH   dimension_valuesdtypekindastypenpint8shapearraynanTr   r2   )r3   r4   rangesstylemappingval_dimlri   rtrc   rb   datair8   imgrW   s                    r:   get_datazRasterPlot.get_dataa   s   WstEEE-" $ 5 5gwPU V Vne$)'NE.! 	&w%%==F"" JAq!Q (1aZ
1a ,,..JAq!Q (1aZ
1a1acBqcaSbTrd333 22 	 	GAt1uu44**15*99Cy~$$jj))CI~~hz**4==F#:; e!VV'')<TY)G)GCDIIgu%%r<   )__name__
__module____qualname__paramDictclipping_colorsIntegernodataClassSelectorintfloattuplepaddingBooleanshow_legendr   
style_opts_nonvectorized_stylesrL   _plot_methodsr   selection_displayr;   rG   r[   r   __classcell__rX   s   @r:   r   r      s        ej%)?@@@OU]4 .= > > >F
 "e!!S%4GHHHG%- 40 1 1 1K !FG#44J&D(((M4466  )& )& )& )& )&V6 6 6 6 6
#& #& #& #& #& #& #&r<   r   c                        e Zd Z ej        deeef          Zdge	z   Z
e
Z ed          Z e            Z fdZd Z fdZd	 Z xZS )
RGBPlotr   r!   r%   
image_rgbar'   c                 J     t                      j        |fi | d | _        d S rZ   )rF   r[   _legend_plot)r3   r\   paramsrX   s      r:   r[   zRGBPlot.__init__   s0    ((((( r<   c                 @    |j         \  }}|j        df|j        dfdgi fS )Nr*   r+   )RGBAr,   )r.   r/   )r3   r4   r5   r6   s       r:   r;   zRGBPlot._hover_opts   s7    ]
d"D)D,=t+D"$%'( 	(r<   c                 *   t                                          ||||           dt          j        v r| j        sd S 	 t          || j                  }n# t          $ r Y d S w xY w|d S d | j        	                                
                                D             }t          |fg dd|| _        | j                            |           | j        j        d         j                            d           | j        j        d	         | j        d
<   d S )Nzholoviews.operation.datashader)backendc                 D    i | ]\  }}|                     d           ||S )legend)
startswith).0kvs      r:   
<dictcomp>z(RGBPlot._init_glyphs.<locals>.<dictcomp>   s>     4 4 4$!QLL224A 4 4 4r<   r   )keysoverlaid)plotglyph_renderer	hv_legendcolor_color_mapperrgb_color_mapper)rF   _init_glyphssysmodulesr   r   r   	Exceptionr   valuesitemsr   r   initialize_plotrH   tagsr1   )r3   r   r4   r{   rR   r   legend_paramsrX   s          r:   r   zRGBPlot._init_glyphs   s4   T7FF;;;0CK??DDT?F	'FFFFF 	 	 	FF	>F4 4$**;*;*=*=*C*C*E*E 4 4 4%fS2SS]SS))t)444!"238??LLL+/+<+DEY+Z'(((s   A 
A#"A#c                    t          ddddd          }d|v r|d         |d<   | j        ri ||fS t          j        fd	j        D                       }t          j        |          }d
||<   |j        dk    rr|j        r|                                nt          j	        }|j
        j        dk    r|dk    r|dz  }|j        rN|                                d
k     s|dk    r0| j                            d           t          j        |d
d          }|j
        j        dk    r|                    t          j                  }|j        d         dk    r:t          j        |j        d d         dd          }t          j        ||g          }|j        \  }	}
}|j        d         s|                                }|                    t          j                                      |	|
f          }d
||                    d          <   j                                        \  }}}}| j        r|j        }||||f\  }}}}||z
  ||z
  }}d
|j        v r t          j        dt          j                  }t          |g|g|g|g|g          }|||fS )Nr&   rA   rD   rb   rc   rd   r%   rf   c                 >    g | ]}                     |d           S Frg   rq   r   dr4   s     r:   
<listcomp>z$RGBPlot.get_data.<locals>.<listcomp>   s<     1 1 1 !11!%1@@ 1 1 1r<   r   r   fr      zaClipping input data to the valid range for RGB data ([0..1] for floats or [0..255] for integers).uint8r
   )rr   C_CONTIGUOUS)r   r   ) rL   rk   ru   dstackr0   isnanndimsizemaxry   rr   rs   minr   warningclipr2   rt   r   rw   fullflagscopyviewuint32reshapeanyrn   ro   rm   rz   zeros)r3   r4   r{   r|   r}   r   nan_maskimg_maxr%   NM_r   ri   r   r   rc   rb   r   s    `                 r:   r   zRGBPlot.get_data   s   WstEEEe$)'NE.! 	&w%%i 1 1 1 1")-1 1 1 2 2 8C==H8q==#&87cggiiiGy~$$A#gx +SWWYY]]gmm
"" $G H H H gc1c**y~((jj**y|q  	"1"s'BBBie--iGAq!9^, !hhjj(((++33QF;;C !HLL ^((**
1a 	$%CAq!JAq!Q1acB	>>(6333C3%A31#2$B4@@@gu%%r<   )r   r   r   r   r   r   r   r   r   r   r   r   rL   r   r   r   r[   r;   r   r   r   r   s   @r:   r   r      s        !e!!S%4GHHHG_,J&D---M4466! ! ! ! !( ( (
[ [ [ [ ["3& 3& 3& 3& 3& 3& 3&r<   r   c                        e Zd Z ed          Z ej        dg dd          Z ej        dd	          Z	 ej        d
d	          Z
 ej        d          Z fdZ	 	 d fd	Zd Zd Z xZS )ImageStackPlotimage_stackr'   eq_hist)linearlogr   z?
        Color normalization to be applied during colormapping.)r   objectsr    r   )r   r   )r   rn   r   
   r   c                     ddl m} ddlm} t	                                          ||||          \  }} |d| j        | j        | j                  }	 ||	          }
d|
i}d|v r|d         |d	<   ||fS )
Nr   )WeightedStackColorMapper)varying_alpha_palettez#000)colornstart_alpha	end_alpha)palettealpha_mapperr   	nan_color)	bokeh.modelsr   bokeh.palettesr   rF   _get_cmapper_opts
num_colorsr   r   )r3   lowhighfactorscolorsr   r   AlphaMapperr   r   r   optsrX   s               r:   r   z ImageStackPlot._get_cmapper_opts   s    999999888888223gvNNQ''o(n	
 
 
 #{7333-F?? &uD'--r<   Nre   c	           
      J   t                                          ||||||||          }	t          |j                  }
t          |	j                  |
z  }t          j        |
          |z  }t          j        |	j                  |                                         |	_        |	S )N)r   r   groupr2   )	rF   rj   lenr0   r   ru   arangerx   tolist)r3   eldimr4   r{   r|   r   r   r   r2   cmappernum_elements	step_sizeindicesrX   s                r:   rj   zImageStackPlot._get_colormapper  s    ''**7FE7T + 
 
 7=))((L8	)L))I5(7?33G<CCEEr<   c                     t          ddddd          }                                d d         \  }}}                     |||          |d<   t          j         fd	j        D                       }j                                        \  }	}
}} j        r|
|	||f\  }	}
}}|	g}|
g}||
z
  ||	z
  }} j	        r||	}}	|g} j
        r||
}}
|g}t          |g|||g|g          }|||fS )
Nr&   rA   rD   rb   rc   rd   r   re   c                     g | ]I}j         s                    |d           n(                    |d                                           JS r   )rm   rq   	transpose)r   vdr4   r3   s     r:   r   z+ImageStackPlot.get_data.<locals>.<listcomp>  sn     
 
 
  #FG$$Re$444))"5)99CCEE
 
 
r<   )rL   
dimensionsrj   ru   r   r0   rn   ro   rm   invert_xaxisr^   )r3   r4   r{   r|   r}   rA   rD   zr   r   ri   r   r   rc   rb   r   s   ``              r:   r   zImageStackPlot.get_data  sW   WstEEE$$&&rr*1a"&"7"77FE"R"Ri 
 
 
 
 
 m	
 
 
   ^((**
1a 	$Aq!JAq!QCCQAB 	aqAA 	aqAA3%1rdt<<<gu%%r<   c                     t           rE|j        \  }}d                    d |j        D                       }|j        df|j        df|dfgi fS |j        \  }}|j        df|j        dfgi fS )Nz, c                     g | ]	}|j         
S  )r/   )r   r   s     r:   r   z.ImageStackPlot._hover_opts.<locals>.<listcomp>4  s    DDDanDDDr<   r*   r+   r,   )r   r.   joinr0   r/   )r3   r4   r5   r6   r8   s        r:   r;   zImageStackPlot._hover_opts.  s      	N JD$99DDgmDDDEED&-0A4/H4QYJZ[]___ JD$&-0A4/HI2MMr<   )NNNre   )r   r   r   rL   r   r   ObjectSelectorcnormr   r   r   r   r   rj   r   r;   r   r   s   @r:   r   r      s       D...M E <X<X<X _B C C CE  %-(;;;Kc(;;;Ir***J. . . . .& GK7E
 
 
 
 
 
& & &>
N 
N 
N 
N 
N 
N 
Nr<   r   c                        e Zd Z fdZ xZS )HSVPlotc                 T    t                                          |j        ||          S rZ   )rF   r   rgb)r3   r4   r{   r|   rX   s       r:   r   zHSVPlot.get_data=  s!    wwVU;;;r<   )r   r   r   r   r   r   s   @r:   r  r  ;  s8        < < < < < < < < <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 e            Zdgez   ez   ez   ZeZ ed          Zd ZddZd ZdS )QuadMeshPlotr   r   r   Nr   r   r   r!   Fr#   r$   quadr'   c           
                                          d d         \  }}}| j        r||}}|                     |||          }|j        |d}j                            |          pj                            |          }|rt          dd|          }	ndd|dd	d
}	| j        ri |	|fS t          |j                  t          |j                  }}	                    |d          }
i }|r6j
        }| j        r|d d d         }fd|D             \  }}t          ||          \  }}| j        r|
j                                        n|
                                }g g }}g }g g }}t          |||          D ])\  }}}|d d         |d d         }}t          |          rt!          t          |                    rt!          t          |                    r|                    t%          |                     |                    t%          |                     |                    d           d| j        v rN|                    |                                           |                    |                                           |                    d           +t+          j        |          }d|d||j        ||         i}d| j        v rM| j        s|                     |d          }t+          j        |          ||<   t+          j        |          ||<   n/j                            |dd          j                            |dd          }}t3          |d d         |d d         gd          \  }}t3          |dd          |dd          gd          \  }}| j        r|
                                n|
j                                        }d|d|t          |j                  |d	|d|i}d| j        v rL| j        sE|                               }	                    |          ||<   	                    |          ||<   |                    |           ||	|fS )Nr   )field	transformxsys)r  r  
fill_colorleftrighttopbottom)r  r  r  r  r   Frg   r   c              3   T   K   | ]"}j                             |d d           V  #dS )T)expandededgesN)	interfacecoordsr   s     r:   	<genexpr>z(QuadMeshPlot.get_data.<locals>.<genexpr>r  sQ       # # %,,Wa$d,SS # # # # # #r<   Tr>   )	irregular)r#  ordered)r   r   )r  rm   rj   r2   r$  r'  rL   rk   r   rq   r.   r   rz   flattenzipr   allr1   rK   rH   meanru   rx   _collect_hover_datar%  r   update)r3   r4   r{   r|   rA   rD   r	  r   r'  r}   zdata
hover_datadimsXYzvalsXSYSmaskxcycr  r  zvalr   x0y0x1y1s    `                           r:   r   zQuadMeshPlot.get_dataW  s   $$&&rr*1a(AqQ''7FEBBF99&00!<< =&00!<< 	 	9dt@@@GG%%,#x9 9G  	&w%%"16**,?,G,G1(((77
 +	<=D2TTrT
# # # #!# # #DAqQ??DAq)-)9NEGOO%%%u}}EBDB #Aq% 0 0 
' 
'BCRC"SbS'BD>> 'c(2,,&7&7 'C<M<M 'IId2hh'''IId2hh'''KK%%%$,..		"'')),,,		"'')),,,KK&&&&8D>>D"dBd<D$,&&) ;!%!9!9#TT ": "; ";J "
1 "
1'..wt.TT'..wt.TT B '3B3CRC'9EEEFB&122122'7dCCCFB'+'7NEMMOOOUW__=N=NEB-@-H-H%b%-D $,&&t/A&!55g>>
 ' 8 8 ; ;
1 ' 8 8 ; ;
1JWe##r<   r  c                 F   |r| j         n| j          }                                dd         }fd|D             }i }t          ||          D ]Q\  }}	|r|	j                                        n|	                                }
|
|         |t          |j                  <   R|S )a  
        Returns a dict mapping hover dimension names to flattened arrays.

        Note that `Quad` glyphs are used when given 1-D coords but `Patches` are
        used for "irregular" 2-D coords, and Bokeh inserts data into these glyphs
        in the opposite order such that the relationship b/w the `invert_axes`
        parameter and the need to transpose the arrays before flattening is
        reversed.
        r   Nc                 >    g | ]}                     |d           S r   r   )r   	hover_dimr4   s     r:   r   z4QuadMeshPlot._collect_hover_data.<locals>.<listcomp>  s<     3 3 3# ..yu.EE 3 3 3r<   )rm   r  r*  rz   r)  r   r2   )r3   r4   r7  r'  r  
hover_dims
hover_valsr0  hdimhvalshdats    `         r:   r-  z QuadMeshPlot._collect_hover_data  s     )2KD$$4;K7K	''))!""-
3 3 3 3'13 3 3

z:66 	D 	DKD%(1F57??$$$u}}D9=dJ*495566r<   c                     t          |          }t          |fi |}d|v r |j        di |}n |j        di |}| j        r*d| j        v r!|                     || j        d                    ||j        fS )z/
        Returns a Bokeh glyph object.
        r  re   r  )r   rL   patchesr  colorbarrH   _draw_colorbarglyph)r3   r   r}   
propertiesrQ   s        r:   _init_glyphzQuadMeshPlot._init_glyph  s     "*--
*0000
7??#t|11j11HH ty..:..H= 	D^t|;;dl>&BCCC''r<   )r  F)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rL   r   r   r-  rM  r  r<   r:   r  r  A  s         ej%)?@@@OU]4 .= > > >F
 "e!!S%4GHHHG%- 40 1 1 1K 5466O+o=OJ&D'''MG$ G$ G$R   *( ( ( ( (r<   r  )"r   numpyru   r   r   r   r   	core.utilr   r   r   r4   r	   utilr   chartr   r   r   	selectionr   stylesr   r   r   r   r   r   r   r   r   r   r  r  r  r<   r:   <module>rT     s   



      4 4 4 4 4 4 4 4 I I I I I I I I I I       % % % % % %       - - - - - - - - 3 3 3 3 3 3 S S S S S S S S S S S S - - - - - - - - - -s& s& s& s& s& s& s& s&lY& Y& Y& Y& Y&j Y& Y& Y&xUN UN UN UN UNZ UN UN UNp< < < < <g < < <@( @( @( @( @(< @( @( @( @( @(r<   