
    |Le6                         d dl mZ d dlZd dlmZ d dlmZ d dlm	Z	 	 d dl
Z
n# e$ r dZ
Y nw xY w G d de          Z G d d	e          Zd
 Zd Zd ZdS )    )memoizeN)_build_map_onto_pixel_for_line)_GeometryLikengjitc                   :    e Zd Zed             Zed             ZdS )GeopandasPolygonGeomc                     ddl m} |fS )Nr   )GeometryDtype)geopandas.arrayr   )selfr   s     9lib/python3.11/site-packages/datashader/glyphs/polygon.pygeom_dtypesz GeopandasPolygonGeom.geom_dtypes   s    111111    c                     |                      |          }t          ||          }t          |||||          }	t          |	|          | j        dfd	}
|
S )NTc                     |\  }}}}|\  }	}
}}|  || d         j         d d                   z   }|         j        } |||||	|
|||g	|R   d S Nr      shapearrayaggsdfvtbounds
plot_startsxtxsytyxminxmaxyminymaxaggs_and_cols
geom_array	geom_nameinfoperform_extend_cpus                  r   extendz2GeopandasPolygonGeom._build_extend.<locals>.extend"       NBB%+"D$d 44DGM"1",=#>#>>MI,JBBdD$ +     r   T)expand_aggs_and_colsr   _build_draw_polygon(_build_extend_geopandas_polygon_geometrygeometryr   x_mappery_mapperr)   append_antialias_stage_2_antialias_stage_2_funcsr.   map_onto_pixeldraw_polygonr+   r(   r*   s      `       @@r   _build_extendz"GeopandasPolygonGeom._build_extend   s      $88@@7(KK*NHh8L
 
 F.
 
 M	
	 
	 
	 
	 
	 
	 
	 
	 r   N__name__
__module____qualname__propertyr   r   r:    r   r   r	   r	      sH            X    W  r   r	   c                   :    e Zd Zed             Zed             ZdS )PolygonGeomc                     ddl m}m} ||fS )Nr   )PolygonDtypeMultiPolygonDtype)spatialpandas.geometryrD   rE   )r   rD   rE   s      r   r   zPolygonGeom.geom_dtypes4   s&    JJJJJJJJ...r   c                     |                      |          }t          ||          }t          |||||          }	t          |	|          | j        dfd	}
|
S )NTc                     |\  }}}}|\  }	}
}}|  || d         j         d d                   z   }|         j        } |||||	|
|||g	|R   d S r   r   r   s                  r   r+   z)PolygonGeom._build_extend.<locals>.extendG   r,   r   r-   )r.   r   r/   _build_extend_polygon_geometryr1   r2   s      `       @@r   r:   zPolygonGeom._build_extend9   s      $88@@7(KK*NHh8L
 
 <.
 
 M	
	 
	 
	 
	 
	 
	 
	 
	 r   Nr;   r@   r   r   rB   rB   1   sJ         / / X/   W  r   rB   c                 H     t           | fd                        }|S )Nc                    |                     t          j                   |                     t          j                   |                     d           |                     d           |
|	d         z  }|
|	d         z  }t          j        |||d                   }t          j        ||dz   |d                   }t          j        |||d                   }t          j        ||dz   |d                   }||k     s||k    s||k     s||k    rdS  2||||||||t	          ||          t	          ||          
  
        \  }} 2||||||||t          ||          t          ||          
  
        \  }}|dz  }|dz  }||z
  dk    r||z
  dk    r 1| ||g|R   dS ||z
  dk    r?t          t          ||          dz   t	          ||                    D ]} 1| ||g|R   dS ||z
  dk    r?t          t          ||          dz   t	          ||                    D ]} 1| ||g|R   dS d}t          t          |	          dz
            D ]}|
|	|         z  }|
|	|dz            z  } t          || dz
  d          D ]}!||!         }"||!dz            }#||!dz            }$||!dz            }% 3|"          |z  |z   dz
  }& 4|#          |z  |z   dz
  }' 3|$          |z  |z   dz
  }( 4|%          |z  |z   dz
  })|)|'k    r"|&||df<   |'||df<   |(||df<   |)||df<   d||<   n)|)|'k     r"|&||df<   |'||df<   |(||df<   |)||df<   d||<   n|dz  }Ґ|}*t          ||          D ]}|                     d           t          ||          D ]}d}+t          |*          D ]}||         dk    r||df         }&||df         }(||df         }'||df         })|'|k    s|)|k     s|&|k     r|(|k     rd||<   U||&k    r||(k    r|+||         z  }+m|&|z
  },|'|z
  }-|(|z
  }.|)|z
  }/|.|-z  |/|,z  z
  }0|0dk     s|0dk    r||         r|+||         z  }+d||<   |+dk    r 1| ||g|R   ׌dS )zBDraw a polygon using a winding-number scan-line algorithm
        r      r   N   g      ?)fillnpnanminmaxrangelen)5ir   r   r    r!   r"   r#   r$   r%   offsetsoffset_multipliervaluesxsysyincreasingeligibler&   start_index
stop_index	poly_xmin	poly_ymin	poly_xmax	poly_ymaxstartxistartyistopxistopyiyixieijstartstopkx0y0x1y1x0cy0cx1cy1c	num_edgeswinding_numberaxaybxbybxar5   r8   r3   r4   s5                                                    r   r9   z)_build_draw_polygon.<locals>.draw_polygonW   s    	
a (
2&wr{2
F6+j":;<<	F6+/*Q">?@@	F6+j":;<<	F6+/*Q">?@@	 	D 0 0t##y4'7'7F *>BD$d	4  #i"6"6
 
 (BD$d	4  #i"6"6
 
 	!! W""(8Q'>'>F1gw77777Fw1$$C0014c'66J6JKK 7 7q'2666666Fw1$$C0014c'66J6JKK 7 7q"g666666F s7||a'(( 	 	A%gaj0E$WQU^3D5$(A..  AYAE]AE]AE] hrllR'",s2hrllR'",s2hrllR'",s2hrllR'",s299 #Br1uI #Br1uI #Br1uI #Br1uI&'KOO3YY #Br1uI #Br1uI #Br1uI #Br1uI&(KOO a9> 	(( 9	6 9	6BMM!GV,, 66 66!"	** .% .%B|q(( ! RU)CRU)CRU)CRU)C
 r		S2XX #bS2XX () SyyR3YY '+b/9 !2X 2X !2X 2X  "Bwb077saxxKOx*k"o=NN ,-HRL$!Q&& F1b"5}5555m669	6 9	6r   r   )r5   r8   r3   r4   r.   r9   s   ````  r   r/   r/   V   sT    
R6 R6 R6 R6 R6 R6 R6  UR6h r   c                 T     dd l fd}t          | fd                        |S )Nr   c	                                         |          }
|
d         }|j        j        j        j        fvrt	          dt          |                     |
d                                         }|j        j        k    r|
d         \  }}}n,|
d         \  }}t          j        t          |                    } | |||||||||||g|	R   d S )Nr   zSCanvas.polygons supports GeoPandas geometry types of POLYGON and MULTIPOLYGON, not rL   r   )
to_ragged_arrayGeometryTypePOLYGONMULTIPOLYGON
ValueErrorreprravelrP   arangerU   )r   r   r    r!   r"   r#   r$   r%   r1   r&   raggedgeometry_typecoordsoffsets0offsets1offsets2extend_cpu_numbashapelys                   r   
extend_cpuz<_build_extend_geopandas_polygon_geometry.<locals>.extend_cpu   s
    ((22q	!5!=w?S?` aaa-M**- -. . . ""G0===+1!9(Hh!'HhyX//HBD$dHh	
3@	
 	
 	
 	
 	
 	
r   c                 z   d}t          |          dz
  }t          |          D ]u}|
||         ||dz            dz            }t          t          |          dz
            D ]7}|	||                  }|	||dz                     }t          |||z
  dz
            }8vt          j        |dft          j        t          j                  }t          j        |dft          j        t          j                  }t          j        |t          j                  }t          j	        |t          j                  }t          |          D ]v}|
||         ||dz            dz            }t          t          |          dz
            D ]8}||         }||dz            } || ||||||||	||dz            d|||||g|R   9wd S Nr   rL   r   dtype
rU   rT   rS   rP   fullrQ   float32zerosint8ones)r   r   r    r!   r"   r#   r$   r%   r   r   r   r   r&   	max_edgesn_multipolygonsrV   polygon_indsrk   rl   rm   rZ   r[   r\   r]   r9   s                           r   r   zB_build_extend_geopandas_polygon_geometry.<locals>.extend_cpu_numba  s   
 	h--!+'' 	= 	=A#HQKQ!0C$CDL3|,,q011 = = a1QU 34	4%<!+;<<		=
 Wi^RV2:>>>Wi^RV2:>>>hy888 79BG444'' 	S 	SA#HQKQ!0C$CDL3|,,q011 S S$Q#AE*QBBdD$$U4!8^4a"BKSDQS S S S SS	S 	Sr   )r   r   )r9   r.   r   r   r   s   `  @@r   r0   r0      sk     NNN
 
 
 
 
 
, S S S S  US8 r   c                 H     fd}t           | fd                        |S )Nc	                    |j         }
|                                }|j        }|j        |j                            ||||f          }n$t          j        dt          |          d          }t          |          dk    r|\  }}}n&|\  }}t          j        t          |                    } | ||||||||
|||||g|	R   d S )Nr   uint32r   rN   )	buffer_valuesisnabuffer_offsets_sindexsindex
intersectsrP   r   rU   )r   r   r    r!   r"   r#   r$   r%   r1   r&   rY   missingrW   eligible_indsr   r   r   r   s                    r   r   z2_build_extend_polygon_geometry.<locals>.extend_cpu0  s     '--//)' %O66dD$7OPPMM IaXhGGGMw<<1+2(Hh ")HhyX//HBD$dGXx=	
KX	
 	
 	
 	
 	
 	
r   c                 r   d}t          |
          dk    r|D ]}|	|         r||
|         |
|dz            dz            }t          t          |          dz
            D ]:}|||                  }|||dz                     }t          |||z
  dz
  dz            };t          j        |dft          j        t          j                  }t          j        |dft          j        t          j                  }t          j        |t          j                  }t          j	        |t          j                  }|D ]}|	|         r||
|         |
|dz            dz            }t          t          |          dz
            D ]8}||         }||dz            } || ||||||||||dz            d|||||g|R   9d S r   r   )r   r   r    r!   r"   r#   r$   r%   rY   r   r   r   r   r   r&   r   rV   r   rk   rl   rm   rZ   r[   r\   r]   r9   s                            r   r   z8_build_extend_polygon_geometry.<locals>.extend_cpu_numbaL  s    	x==1" H H1: 'HQUOa4G(GHs<001455 H HA$\!_5E#LQ$78D #Iuq0@Q/F G GIIH
 Wi^RV2:>>>Wi^RV2:>>>hy888 79BG444 	L 	LAqz #HQKQ!0C$CDL3|,,q011 L L$Q#AE*QBBdD$%eD1Hn5q&[(L=JL L L L L	L	L 	Lr   r   )r9   r.   r   r   s   `  @r   rI   rI   -  s[    
 
 
 
 
8 $L $L $L $L  U$LL r   )toolzr   numpyrP   datashader.glyphs.liner   datashader.glyphs.pointsr   datashader.utilsr   spatialpandas	Exceptionr	   rB   r/   r0   rI   r@   r   r   <module>r      s(             A A A A A A 2 2 2 2 2 2 " " " " " "   MMM         =      F" " " " "- " " "JW W Wt: : :zG G G G Gs   # --