
    |Le6                       d dl mZ d dlmZ d dl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Zdd	lmZ n# e$ r dZdZY nw xY w	 d d
lmZ n# e$ r  ed          ZY nw xY w	 d dlZn# e$ r dZY nw xY wd 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 )    )annotations)VersionN)memoize)Glyph)isrealngjit)cuda   )	cuda_argsGeometryDtypec                   t          | t          j                  rjt          t          j                  t          d          k    r |                     t          j                  S |                     t          j                  S | j	        S )Nz22.02)na_value)fillna)

isinstancecudfSeriesr   __version__to_cupynpnanto_gpu_arrayvalues)ss    8lib/python3.11/site-packages/datashader/glyphs/points.pyr   r      si    !T[!! 4#$$(8(88899bf9--->>>000 x    c                      e Zd Zd Zed             Zed             Zed             Zd Zed             Z	ed             Z
d Zd	 Zd
 Zed             ZdS )_GeometryLikec                "    || _         d | _        d S N)geometry_cached_bounds)selfr!   s     r   __init__z_GeometryLike.__init__)   s     "r   c                    dS N    r#   s    r   ndimsz_GeometryLike.ndims-       qr   c                    | j         fS r    r!   r)   s    r   inputsz_GeometryLike.inputs1   s    r   c                &    t           r	ddlm} |fS dS )Nr   r   r(   )spatialpandasspatialpandas.geometryr   r#   r   s     r   geom_dtypesz_GeometryLike.geom_dtypes5   s*     	<<<<<<!##2r   c           	         t          |t          | j                           | j                  sKt	          d                    | j        d                    d | j        D                                           d S )Nz>{col} must be an array with one of the following types: {typs}z, c              3  $   K   | ]}|j         V  d S r    )__name__).0typs     r   	<genexpr>z)_GeometryLike.validate.<locals>.<genexpr>B   s$      "L"LC3<"L"L"L"L"L"Lr   )coltyps)r   strr!   r3   
ValueErrorformatjoinr#   	in_dshapes     r   validatez_GeometryLike.validate=   s    )C$6$679IJJ 	PWW"L"L4;K"L"L"LLL X    	 	r   c                    dS )Nxr(   r)   s    r   x_labelz_GeometryLike.x_labelE       sr   c                    dS )Nyr(   r)   s    r   y_labelz_GeometryLike.y_labelI   rF   r   c                    | j         gS r    r-   r)   s    r   required_columnsz_GeometryLike.required_columnsM   s    r   c                    || j                  }t          |j        t                    r$| j        |j        | _        | j        d d d         }n|j        j        }|                     |          S Nr
   )	r!   r   dtypegpd_GeometryDtyper"   total_boundsarraytotal_bounds_xmaybe_expand_boundsr#   dfr:   boundss       r   compute_x_boundsz_GeometryLike.compute_x_boundsP   sl    ci!233 	."*&)&6#(1-FF Y-F''///r   c                    || j                  }t          |j        t                    r$| j        |j        | _        | j        dd d         }n|j        j        }|                     |          S Nr'   r
   )	r!   r   rN   rO   r"   rP   rQ   total_bounds_yrS   rT   s       r   compute_y_boundsz_GeometryLike.compute_y_bounds\   sl    ci!233 	."*&)&6#(A.FF Y-F''///r   c                    || j                  j        }|d         |d         f}|d         |d         f}|                     |          |                     |          fS )Nr   r
   r'      )r!   rP   rS   )r#   ddfrP   	x_extents	y_extentss        r   compute_bounds_daskz!_GeometryLike.compute_bounds_daskh   sa    4=)6!!_l1o6	!!_l1o6	((33((335 	5r   N)r6   
__module____qualname__r$   propertyr*   r.   r3   rB   rE   rI   rK   rW   r[   r   ra   r(   r   r   r   r   (   s       # # #   X     X    X     X   X  
0 
0 
0
0 
0 
0 5 5 W5 5 5r   r   c                      e Zd ZdZd Zed             Zed             Zd Zed             Z	ed             Z
d Zd	 Zd
 Zed             ZdS )
_PointLikez%Shared methods between Point and Linec                "    || _         || _        d S r    rD   rH   )r#   rD   rH   s      r   r$   z_PointLike.__init__t   s    r   c                    dS r&   r(   r)   s    r   r*   z_PointLike.ndimsx   r+   r   c                    | j         | j        fS r    rh   r)   s    r   r.   z_PointLike.inputs|   s    r   c                    t          |j        t          | j                                     st	          d          t          |j        t          | j                                     st	          d          d S )Nzx must be realzy must be real)r   measurer<   rD   r=   rH   r@   s     r   rB   z_PointLike.validate   sj    i'DF455 	/-...	)#df++677 	/-...	/ 	/r   c                    | j         S r    )rD   r)   s    r   rE   z_PointLike.x_label   	    vr   c                    | j         S r    )rH   r)   s    r   rI   z_PointLike.y_label   rn   r   c                    | j         | j        gS r    rh   r)   s    r   rK   z_PointLike.required_columns   s    r   c                l    |                      || j                           }|                     |          S r    )_compute_boundsrD   rS   r#   rU   rV   s      r   rW   z_PointLike.compute_x_bounds   /    %%bj11''///r   c                l    |                      || j                           }|                     |          S r    )rr   rH   rS   rs   s      r   r[   z_PointLike.compute_y_bounds   rt   r   c                    |                      fd                                          }t          j        |d d df                   t          j        |d d df                   f}t          j        |d d df                   t          j        |d d df                   f}                     |                               |          fS )Nc           	        t          j        t          j        | j                 j                                                  t          j        | j                 j                                                  t          j        | j                 j                                                  t          j        | j                 j                                                  gg          S r    )r   rQ   nanminrD   r   itemnanmaxrH   )rU   r#   s    r   <lambda>z0_PointLike.compute_bounds_dask.<locals>.<lambda>   s    "(Ibj'((--//Ibj'((--//Ibj'((--//Ibj'((--//	51 42 +
 +
 r   r   r'   r
   r]   )map_partitionscomputer   rx   rz   rS   )r#   r^   rr_   r`   s   `    r   ra   z_PointLike.compute_bounds_dask   s       
  
  
  
  
 799 	
 Ia1g&&	!AAAqD'(:(::	Ia1g&&	!AAAqD'(:(::	((33((335 	5r   N)r6   rb   rc   __doc__r$   rd   r*   r.   rB   rE   rI   rK   rW   r[   r   ra   r(   r   r   rf   rf   r   s        //     X     X / / /   X   X     0 0 00 0 0 5 5 W5 5 5r   rf   c                  (    e Zd ZdZed             ZdS )PointaW  A point, with center at ``x`` and ``y``.

    Points map each record to a single bin.
    Points falling exactly on the upper bounds are treated as a special case,
    mapping into the previous bin rather than being cropped off.

    Parameters
    ----------
    x, y : str
        Column names for the x and y coordinates of each point.
    c                b  	
 | j         | j        t          |                               fd                        t          |                               fd                        	t          j        |                               fd                        
	
fd}|S )Nc                6   |	|          }|
|          }||cxk    r|k    rxn d S ||cxk    r|k    rin d S t           |          |z  |z             }t           |          |z  |z             }||k    r|dz
  n|||k    r|dz
  n|}} | ||g|R   d S d S d S r&   int)isxtxsytyxminxmaxyminymaxxsysxxmaxyymaxaggs_and_colsrD   rH   xxyyxiyiappendx_mappery_mappers                       r   _perform_extend_pointsz3Point._build_extend.<locals>._perform_extend_points   s    
 1A1A !!!!T!!!!!!(9(9(9(9T(9(9(9(9(9(9!r)B.//!r)B.//%'5[[%''b%'5[[%''b q"b1=111111 "!(9(9r   c                l    t          |j        d                   D ]} || |||||||||	|
|g|R   d S )Nr   )rangeshaper   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                 r   
extend_cpuz'Point._build_extend.<locals>.extend_cpu   sx     28A;'' M M&&q"b"b$dD')2ueM>KM M M M MM Mr   c                    t          j        d          }||j        d         k     r || |||||||||	|
|g|R   d S d S )Nr'   r   )r	   gridr   r   s                 r   extend_cudaz(Point._build_extend.<locals>.extend_cuda   sv     	!A28A;&&q"b"b$dD')2ueM>KM M M M M M r   c                   | d         j         d d         \  }}|  || d         j         d d                   z   }|\  }}}	}
|\  }}}}t          ret          |t          j                  rKt	          |                   }t	          |                   }t          |j         d                            }n|         j        }|         j        }} ||||	|
||||||||g|R   d S )Nr   r
   )r   r   r   	DataFramer   r   )aggsrU   vtrV   r   r   r   r   r   r   r   r   r   r   r   r   r   	do_extendr   r   infox_namey_names                     r   extendz#Point._build_extend.<locals>.extend   s   7=!,LE5 44DGM"1",=#>#>>MNBB%+"D$d '
2t~66 'BvJ''BvJ'''	"(1+(>(>?		Z&Z&&	IBBdD$BuO\     r   )rD   rH   r   expand_aggs_and_colsr	   jit)r#   r   r   r   r   _antialias_stage_2_antialias_stage_2_funcsr   r   r   r   r   r   s    ````   @@@@@r   _build_extendzPoint._build_extend   s    			"	"6	*	*	2 	2 	2 	2 	2 	2 
+	* 
	2  
		"	"6	*	*	M 	M 	M 	M 
+	* 
	M 
		"	"6	*	*	M 	M 	M 	M 
+	* 
	M	 	 	 	 	 	 	 	 	& r   N)r6   rb   rc   r   r   r   r(   r   r   r   r      s9        
 
 ; ; W; ; ;r   r   c                  :    e Zd Zed             Zed             ZdS )MultiPointGeoPandasc                    ddl m} |fS )Nr   r   )geopandas.arrayr   r2   s     r   r3   zMultiPointGeoPandas.geom_dtypes   s    111111r   c                R  	
 dd l | j        t          |                               fd                        	
fd}t          |                               fd                        	t          |                               fd                        
|S )Nr   c                <   |
|         }|
|dz            }||cxk    r|k    rxn d S ||cxk    r|	k    rin d S t           |          |z  |z             }t           |          |z  |z             }||k    r|dz
  n|||	k    r|dz
  n|}} | ||g|R   d S d S d S r&   r   r   jr   r   r   r   r   r   r   r   r   r   rD   rH   r   r   r   r   r   r   r   s                     r   r   zAMultiPointGeoPandas._build_extend.<locals>._perform_extend_points     
 q	Aq1uA !!!!T!!!!!!(9(9(9(9T(9(9(9(9(9(9!r)B.//!r)B.//$%II"q&&2$%II"q&&2  q"b1=111111 "!(9(9r   c                   |  || d         j         d d                   z   }|\  }}}}|\  }	}
}}|         j        }                    |          }|d         }|j        j        j        j        fvrt          dt          |                     |d                                         }|j        j        k    r |||||	|
|||g	|R   d S |d         d         } |||||	|
||||g
|R   d S )Nr   r
   zMCanvas.points supports GeoPandas geometry types of POINT and MULTIPOINT, not r'   )	r   rQ   to_ragged_arrayGeometryType
MULTIPOINTPOINTr=   reprravel)r   rU   r   rV   r   r   r   r   r   r   r   r   r   r!   raggedgeometry_typecoordsoffsetsextend_multipoint_cpuextend_point_cpugeometry_namer   shapelys                     r   r   z1MultiPointGeoPandas._build_extend.<locals>.extend  s_    44DGM"1",=#>#>>MNBB%+"D$d-(.H,,X66F"1IMW%9%DgFZF`$aaa 1..1 12 2 2 AY__&&F 4 :::  RRtT4`R_`````` )A,%%BD$dFG]N[] ] ] ] ] ]r   c
                    t          t          |	          dz
            D ]>}|	|         }|	|dz            }t          ||          D ]} |d|z  | ||||||||g|
R   ?d S rY   )r   len)r   r   r   r   r   r   r   r   r   r   r   r   startstopr   r   s                  r   r   z@MultiPointGeoPandas._build_extend.<locals>.extend_multipoint_cpu,  s    
 3w<<!+,,  
qs|ud++  A**1Q3BBdD$Q^     r   c	                |    t          |          dz  }
t          |
          D ]} |d|z  | ||||||||g|	R   d S rM   )r   r   )r   r   r   r   r   r   r   r   r   r   nr   r   s               r   r   z;MultiPointGeoPandas._build_extend.<locals>.extend_point_cpu9  sv     Fq A1XX  &&qsBBD$dFMZ     r   )r   r!   r   r   )r#   r   r   r   r   r   r   r   r   r   r   r   r   s    ````   @@@@@r   r   z!MultiPointGeoPandas._build_extend   s   
 				"	"6	*	*	2 	2 	2 	2 	2 	2 
+	* 
	2	] 	] 	] 	] 	] 	] 	] 	] 	], 
		"	"6	*	*		 		 		 		 
+	* 
		 
		"	"6	*	*	 	 	 	 
+	* 
	 r   Nr6   rb   rc   rd   r3   r   r   r(   r   r   r   r      sM            X  E E WE E Er   r   c                  :    e Zd Zed             Zed             ZdS )MultiPointGeometryc                    ddl m}m} ||fS )Nr   )
PointDtypeMultiPointDtype)r1   r   r   )r#   r   r   s      r   r3   zMultiPointGeometry.geom_dtypesH  s%    FFFFFFFF?**r   c                F  	
 | j         t          |                               fd                        t          |                               fd                        
t          |                               fd                        		
fd}|S )Nc                <   |
|         }|
|dz            }||cxk    r|k    rxn d S ||cxk    r|	k    rin d S t           |          |z  |z             }t           |          |z  |z             }||k    r|dz
  n|||	k    r|dz
  n|}} | ||g|R   d S d S d S r&   r   r   s                     r   r   z@MultiPointGeometry._build_extend.<locals>._perform_extend_pointsR  r   r   c                T    |
D ]#}|	|         du r |d|z  | ||||||||g|R   $d S )NTr
   r(   )r   r   r   r   r   r   r   r   r   missingeligible_indsr   r   r   s                r   r   z:MultiPointGeometry._build_extend.<locals>.extend_point_cpuc  ss     #  1:%%&&q1ub"b"dD$*     r   c                    |D ]G}|	|         du r|
|         }|
|dz            }t          ||d          D ]} ||| ||||||||g|R   Hd S )NTr'   r
   )r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                    r   r   z?MultiPointGeometry._build_extend.<locals>.extend_multipoint_cpuq  s     # 	 	1:%%
q1u~udA..  A**1b"b"dD$!.    	 	r   c                   ddl m} |  || d         j        d d                   z   }|\  }}}}	|\  }
}}}|         j        }|j        |j                            |
|||f          }n$t          j        dt          |          d          }|
                                }t          ||          r|j        } ||||	|
||||||g|R   d S |j        }|j        d         } ||||	|
|||||||g|R   d S )Nr   )
PointArrayr
   uint32)rN   )r1   r   r   rQ   _sindexsindex
intersectsr   aranger   isnar   flat_valuesbuffer_valuesbuffer_offsets)r   rU   r   rV   r   r   r   r   r   r   r   r   r   r   r!   r   r   r   r   r   r   r   r   s                      r   r   z0MultiPointGeometry._build_extend.<locals>.extend  ss   999999 44DGM"1",=#>#>>MNBB%+"D$d-(.H+ !) : :D$d;S T T !#	!S]]( K K KmmooG(J// !-  BD$dG]5B     
 "/"1!4%%BD$dGWm>K     r   )r!   r   r   )r#   r   r   r   r   r   r   r   r   r   r   r   s    ````   @@@@r   r   z MultiPointGeometry._build_extendM  s    			"	"6	*	*	2 	2 	2 	2 	2 	2 
+	* 
	2 
		"	"6	*	*
	 
	 
	 
	 
+	* 

	 
		"	"6	*	*	 	 	 	 
+	* 
	 	  	  	  	  	  	  	  	D r   Nr   r(   r   r   r   r   E  sO         + + X+ V V WV V Vr   r   )
__future__r   packaging.versionr   numpyr   toolzr   datashader.glyphs.glyphr   datashader.utilsr   r   numbar	   r   transfer_functions._cuda_utilsr   	Exceptionr   r   rO   ImportErrortyper0   r   r   rf   r   r   r   r(   r   r   <module>r      sa   " " " " " " % % % % % %           ) ) ) ) ) ) * * * * * * * *      KKK:::::::   DIII#BBBBBBB # # #T

#   MMM  G5 G5 G5 G5 G5E G5 G5 G5T55 55 55 55 55 55 55 55pH H H H HJ H H HVM M M M M- M M M`_ _ _ _ _ _ _ _ _ _s3   
7 	AAA A! A!%A* *A43A4