
    e+                        d dl mZ ddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZ ddl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 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 G d de          Zej        d         Zeee<   eee<   eee<   eee<   eee<   eee	<   eee<   eee
<   dS )     )WeakValueDictionary   )Tiles)	BoundsXBoundsXYBoundsYRangeXRangeXYRangeYSelection1DSelectionXYStream   )_trace_to_subplotc                   ,     e Zd ZdZ fdZ fdZ xZS )PlotlyCallbackMetaClassz
    Metaclass for PlotlyCallback classes.

    We want each callback class to keep track of all of the instances of the class.
    Using a meta class here lets us keep the logic for instance tracking in one place.
    c                 t    t                                          |||           t                      | _        d S N)super__init__r   	instances)clsnamebasesattrs	__class__s       Clib/python3.11/site-packages/holoviews/plotting/plotly/callbacks.pyr   z PlotlyCallbackMetaClass.__init__   s2    ue,,, ,--    c                 b     t                      j        |i |}|| j        |j        j        <   |S r   )r   __call__r   plot	trace_uid)r   argskwargsinstr   s       r   r    z PlotlyCallbackMetaClass.__call__    s6    uww000 .2di)*r   )__name__
__module____qualname____doc__r   r    __classcell__)r   s   @r   r   r      s[         . . . . .	 	 	 	 	 	 	 	 	r   r   c                   @    e Zd Zd Zed             Zed             ZdS )PlotlyCallbackc                 >    || _         || _        || _        d | _        d S r   )r!   streamssource
last_event)selfr!   r.   r/   paramss        r   r   zPlotlyCallback.__init__.   s"    	r   c                    |                      |||          }g }|                                D ]p\  }}|| j        v rb| j        |         }	 ||j        k    }	n# t          $ r d}	Y nw xY w|	r=||_        |j        D ]$}
 |
j        di | |                    |
           %q	 t          j	        |           d S # t          $ r}|d }~ww xY w)NF )
#get_event_data_from_property_updateitemsr   r0   	Exceptionr.   updateappendr   trigger)r   propertyproperty_valuefig_dict
event_datar.   r"   stream_datacb	unchangedstreames               r   #update_streams_from_property_updatez2PlotlyCallback.update_streams_from_property_update4   s%   <<nh
 

 &0&6&6&8&8 	+ 	+"I{CM))]9-& +r} <II  & & & %III&  + j + +F!FM00K000NN6****	N7##### 	 	 	G	s*   
AA%$A% B6 6
C CCc                     t           r   )NotImplementedError)r   r;   r<   r=   s       r   r5   z2PlotlyCallback.get_event_data_from_property_updateM   s    !!r   N)r&   r'   r(   r   classmethodrD   r5   r4   r   r   r,   r,   ,   sY             [0 " " [" " "r   r,   )	metaclassc                   *    e Zd ZdgZed             ZdS )Selection1DCallbackselected_datac                    |                     dg           }i }|rN|d         D ]E}|                    |d         g            ||d                                      |d                    Fi }t          |          D ]D\  }}	|	                     dd           }
|                     |g           }t	          |          ||
<   E|S )NdatapointscurveNumberpointNumberuid)index)get
setdefaultr9   	enumeratedict)r   r;   rK   r=   traces
point_indspointr>   	trace_indtracer"   	new_indexs               r   r5   z7Selection1DCallback.get_event_data_from_property_updateU   s     fb))
 
 	N&x0 N N%%eM&:B???5/077m8LMMMM
 )& 1 1 	: 	:Iu		%..I"y"55I$(y$9$9$9Jy!!r   N)r&   r'   r(   callback_propertiesrG   r5   r4   r   r   rJ   rJ   R   s6        *+  [  r   rJ   c                   ^    e Zd ZdgZdZdZed             Zed             Zed             Z	dS )BoundsCallbackrK   Fc                    |                     dg           }i }|D ]n}|                     dd           }| j        r| j        rt          d           }n2| j        rt          d           }n| j        rt          d           }ni }|||<   o|pi                      di           }	|                     |	||           |                     |	||           |S )NrM   rQ   boundsboundsxboundsyrange)rS   rd   rf   rV   update_event_data_xyaxisupdate_event_data_mapbox)
r   r;   rK   r=   rW   r>   r[   r"   r?   
range_datas
             r   r5   z2BoundsCallback.get_event_data_from_property_updateq   s    fb)) 
 	0 	0E		%..I{ !s{ !"$/// !"4000 !"4000 $/Jy!!#)r..w;;
$$ZDDD$$ZDDDr   c                 \   |D ]'}|                     dd          }|                     dd           }t          j         |d           ddgk    rK|                     dd          }|                     dd          }||v r||v r||         d         ||         d         ||         d	         ||         d	         f}	| j        r| j        rt	          |	
          }
nN| j        rt	          |	d         |	d         f          }
n(| j        rt	          |	d	         |	d         f          }
ni }
|
||<   )d S )NtypescatterrQ   xaxisyaxisxyr   r   ra      rc   r   re   )rS   r   rd   rf   rV   )r   rj   rW   r>   r[   
trace_typer"   xrefyref
new_boundsr?   s              r   rh   z'BoundsCallback.update_event_data_xyaxis   s`     	4 	4E6955J		%..I $Z667G:LLL99Wc**D99Wc**Dz!!dj&8&8t$Q'D)9!)<t$Q'D)9!)<

 ; %3; %"&j"9"9"9KK[ %"&
1z!}/M"N"N"NKK[ %"&
1z!}/M"N"N"NKK"$K(3
9%3	4 	4r   c                    |D ]\}|                     dd          }|                     dd           }t          j         |d           dgk    rJ|                     dd          }||v r||         d         d         ||         d         d         g}||         d         d         ||         d         d         g}	t          j        ||	          \  }
}|
d         |d         |
d         |d         f}| j        r| j        rt          |          }nN| j        rt          |d         |d	         f
          }n(| j        rt          |d         |d         f          }ni }|||<   ^d S )Nrl   rm   rQ   mapboxsubplotr   r   ra   rr   rc   r   re   )rS   r   r   lon_lat_to_easting_northingrd   rf   rV   )r   rj   rW   r>   r[   rs   r"   
mapbox_ref
lon_bounds
lat_boundseastingnorthingrv   r?   s                 r   ri   z'BoundsCallback.update_event_data_mapbox   s     	4 	4E6955J		%..I $Z668*DD9h77JZ''(4Q7:Jz<RST<UVW<XY
(4Q7:Jz<RST<UVW<XY
$)$EjR\$]$]!%aj(1+wqz8A;O
; %3; %"&j"9"9"9KK[ %"&
1z!}/M"N"N"NKK[ %"&
1z!}/M"N"N"NKK"$K(3
9%1	4 	4r   N)
r&   r'   r(   r]   rd   rf   rG   r5   rh   ri   r4   r   r   r_   r_   l   sv        *+GG  [0 4 4 [4: 4 4 [4 4 4r   r_   c                       e Zd ZdZdZdS )BoundsXYCallbackTN)r&   r'   r(   rd   rf   r4   r   r   r   r              GGGGr   r   c                       e Zd ZdZdS )BoundsXCallbackTN)r&   r'   r(   rd   r4   r   r   r   r              GGGr   r   c                       e Zd ZdZdS )BoundsYCallbackTN)r&   r'   r(   rf   r4   r   r   r   r      r   r   r   c                   `    e Zd ZddgZdZdZed             Zed             Zed             Z	dS )RangeCallbackviewportrelayout_dataFc                     |                     dg           }|dk    r|                     ||          }n|                     ||          }|S )NrM   r   )rS   build_event_data_from_viewport#build_event_data_from_relayout_data)r   r;   r<   r=   rW   r>   s         r   r5   z1RangeCallback.get_event_data_from_property_update   sR    fb))z!!;;FNSSJJ@@XXJr   c                    i }|D ]M}|                     dd          }|                     dd           }t          j         |d           ddgk    rK|                     dd                              dd          }|                     dd                              dd          }| d}	| d}
|sd }d }n~|	|v r/|
|v r+t          ||	                   }t          ||
                   }nK|	d	z   |v rB|	d
z   |v r;|
d	z   |v r4|
d
z   |v r-||	d	z            ||	d
z            f}||
d	z            ||
d
z            f}n.i }| j        r||d<   | j        r||d<   |||<   O|S )Nrl   rm   rQ   rn   ro   rp   rq   z.rangez[0]z[1]x_rangey_range)rS   r   replacetupler   r   )r   rW   r<   r>   r[   rs   r"   rn   ro   xpropypropr   r   r?   s                 r   r   z,RangeCallback.build_event_data_from_viewport   s    
  	0  	0E6955J		%..I $Z667G:LLLIIgs++33CAAEIIgs++33CAAE$$$E$$$E! .((Un-D-Du 566u 566.00UU]n5T5TEM^338W8W)%%-8PU9VW)%%-8.QV:WXK{ 1)0I&{ 1)0I&$/Jy!!r   c                    i }|D ]A}|                     dd          }|                     dd           }t          j         |d           dgk    rJ|                     dd          }|dz   }|sd }	d }
nd|                     |i           v r||         d         }|\  \  }}\  }}\  }}\  }}t          ||          }t          ||          }t          ||          }t          ||          }t	          j        ||g||g          \  }	}
t          |	          }	t          |
          }
n"i }| j        r|	|d<   | j        r|
|d	<   |||<   C|S )
Nrl   scattermapboxrQ   rx   ry   z	._derivedcoordinatesr   r   )	rS   r   minmaxr   rz   r   r   r   )r   rW   r<   r>   r[   rs   r"   
subplot_idderived_propr   r   coordslon_top_leftlat_top_leftlon_top_rightlat_top_rightlon_bottom_rightlat_bottom_rightlon_bottom_leftlat_bottom_leftlon_left	lon_right
lat_bottomlat_topr?   s                            r   r   z1RangeCallback.build_event_data_from_relayout_data
  s    
 (	0 (	0E6?;;J		%..I $Z668*DD9h77J%3L! ."4"4\2"F"FFF'5mD 8>5-,/-5"$43/?|_==/?@@	 2BCC
lM::#(#Dy)J+@$ $   ....K{ 1)0I&{ 1)0I&$/Jy!!r   N)
r&   r'   r(   r]   r   r   rG   r5   r   r   r4   r   r   r   r      sy        %7GG  [ $ $ [$L - - [- - -r   r   c                       e Zd ZdZdZdS )RangeXYCallbackTN)r&   r'   r(   r   r   r4   r   r   r   r   ;  r   r   r   c                       e Zd ZdZdS )RangeXCallbackTN)r&   r'   r(   r   r4   r   r   r   r   @  r   r   r   c                       e Zd ZdZdS )RangeYCallbackTN)r&   r'   r(   r   r4   r   r   r   r   D  r   r   r   plotlyN)weakrefr   elementr   r.   r   r   r   r	   r
   r   r   r   r   utilr   rl   r   r,   rJ   r_   r   r   r   r   r   r   r   
_callbacks	callbacksr4   r   r   <module>r      s   ' ' ' ' ' '      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 $ # # # # #    d   4#" #" #" #" #"6 #" #" #" #"L    .   4W4 W4 W4 W4 W4^ W4 W4 W4t    ~   
    n       n   e e e e eN e e eP    m   
    ]       ]    h'	,	+ )	+ &	( $	' $	' $	' "	& "	&   r   