a
    1$e\                     @   s  d Z ddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlZddlmZ ddlmZ zddlZW n ey   dZY n0 dddddd	d
dddd
Zejsejrejrdd ejD Zndd ejD Zee Zejee edZ n
d\ZZZ dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd!d"Z'd#d$ Z(d%d& Z)dd'd(Z*dd)d*Z+d+d, Z,d-d. Z-d/d0 Z.d1d2 Z/d3d4 Z0d5d6 Z1dd7d8Z2d9d: Z3d;d< Z4d=d> Z5d?d@ Z6dAdB Z7dCdD Z8dEdF Z9dGdH Z:dIdJ Z;dKdL Z<dMdN Z=dOdP Z>dQdR Z?dSdT Z@dUdV ZAdWdX ZBdYdZ ZCd[d\ ZDd]d^ ZEddbdcZFddde ZGddgdhZHdidj ZIdkdl ZJdmdn ZKdodp ZLdqdr ZMdsdt ZNdudv ZOdwdx ZPdydz ZQd{d| ZRd}d~ ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dddZ_dddZ`dddZadddZbdddZcdd Zddd Zedd Zfdd ZgdddZhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd ZodS )z
Compatibility shim for the vectorized geometry operations.

Uses PyGEOS if available/set, otherwise loops through Shapely geometries.

    N)BaseGeometry   )_compatPoint
LineString
LinearRingPolygonZ
MultiPointZMultiLineStringZMultiPolygonZGeometryCollection)
MISSINGZNAGZPOINTZ
LINESTRINGZ
LINEARRINGZPOLYGONZ
MULTIPOINTZMULTILINESTRINGZMULTIPOLYGONZGEOMETRYCOLLECTIONc                 C   s   i | ]}|j t|j qS  value_namesname.0pr
   r
   Q/var/www/html/django/DPS/env/lib/python3.9/site-packages/geopandas/_vectorized.py
<dictcomp>+       r   c                 C   s   i | ]}|j t|j qS r
   r   r   r
   r
   r   r   -   r   dtype)NNNc                 C   s:   | du rdS t | tr$t| r$dS | tju r2dS dS dS )z
    Check if scalar value is NA-like (None, np.nan or pd.NA).

    Custom version that only works for scalars (returning True or False),
    as `pd.isna` also works for array-like input returning a boolean array.
    NTF)
isinstancefloatnpisnanpdZNA)r   r
   r
   r   isna4   s    
r   c                 C   s   | d u rd S t jr6t js6tjj| j} tjj	
| S t| rZt| dkrZtjdS t| dkrttjt| S tjt| S d S )Nr   POINT EMPTY   )compatPYGEOS_SHAPELY_COMPATSHAPELY_GE_20shapelygeoslgeosGEOSGeom_cloneZ_ptrgeometrybasegeom_factorypygeosis_emptyget_type_idwktloadsr   wkbto_wkbgeomr
   r
   r   _pygeos_to_shapelyE   s    r2   c                 C   sF   | d u rd S t jrt| S | jr6| jdkr6tdS t| jS d S )Nr   r   )	r   r    r)   from_shapelyr*   	geom_typefrom_wktfrom_wkbr.   r0   r
   r
   r   _shapely_to_pygeos[   s    

r7   c                 C   s  t jrt jrt| tjs`tjt| td}t 	  | |dd< W d   qd1 sT0    Y  n| }zt
|W S  ty   Y n0 g }| D ]}t jrt|t
jr|| qt|trt jr|t| n
|| qt|drtj|}t jr
|t| n
|| qt|r,|d qtd|qt jrRtj|tdS tjt| td}t 	  ||dd< W d   n1 s0    Y  |S dS )zx
    Convert a list or array of shapely objects to an object-dtype numpy
    array of validated geometry elements.

    r   NZ__geo_interface__z)Input must be valid geometry objects: {0})r   
USE_PYGEOSr    r   r   ndarrayemptylenobjectignore_shapely2_warningsr)   r3   	TypeErrorZGeometryappendr   r7   hasattrr"   r&   shaper   formatarray)dataZarroutr1   aoutr
   r
   r   r3   j   s@    	
,


,r3   c                 C   sb   t jrZtjt| td}t  & dd | D |d d < W d    n1 sL0    Y  |S | S d S )Nr   c                 S   s   g | ]}t |qS r
   )r2   r   r1   r
   r
   r   
<listcomp>   r   zto_shapely.<locals>.<listcomp>)r   r8   r   r:   r;   r<   r=   rD   rE   r
   r
   r   
to_shapely   s    
4rJ   c                 C   s   t jrt| S t jr t| S g }| D ]:}t|sTt|rTtjj	|t
|td}nd}|| q(tjt| td}t   ||dd< W d   n1 s0    Y  |S )zH
    Convert a list or array of WKB objects to a np.ndarray[geoms].
    )hexNr   )r   USE_SHAPELY_20r"   r6   r8   r)   r   r;   r.   r-   r   strr?   r   r:   r<   r=   rD   rE   r1   rF   r
   r
   r   r6      s    


*r6   Fc                 K   sl   t jrtj| fd|i|S t jr8tj| fd|i|S |rLdd | D }ndd | D }tj|tdS d S )NrK   c                 S   s   g | ]}|d ur|j nd qS N)Zwkb_hexrG   r
   r
   r   rH      r   zto_wkb.<locals>.<listcomp>c                 S   s   g | ]}|d ur|j nd qS rO   )r.   rG   r
   r
   r   rH      r   r   )	r   rL   r"   r/   r8   r)   r   rC   r<   )rD   rK   kwargsrE   r
   r
   r   r/      s    r/   c                 C   s   t jrt| S t jr t| S g }| D ]D}t|s^t|r^t|t	rP|
d}tj|}nd}|| q(tjt| td}t   ||dd< W d   n1 s0    Y  |S )zH
    Convert a list or array of WKT objects to a np.ndarray[geoms].
    zutf-8Nr   )r   rL   r"   r5   r8   r)   r   r;   r   bytesdecoder,   r-   r?   r   r:   r<   r=   rN   r
   r
   r   r5      s     




*r5   c                 K   sP   t jrtj| fi |S t jr0tj| fi |S dd | D }tj|tdS d S )Nc                 S   s   g | ]}|d ur|j nd qS rO   )r,   rG   r
   r
   r   rH      r   zto_wkt.<locals>.<listcomp>r   )	r   rL   r"   to_wktr8   r)   r   rC   r<   )rD   rP   rE   r
   r
   r   rS      s    rS   c                 C   sh   t | t |kstd|d urPt |t | ks8tddd t| ||D }ndd t| |D }|S )Nz$x and y arrays must be equal length.z'z array must be same length as x and y.c                 S   s"   g | ]\}}}t j|||qS r
   r"   r&   r   )r   ijkr
   r
   r   rH      r   z#_points_from_xy.<locals>.<listcomp>c                 S   s   g | ]\}}t j||qS r
   rT   )r   rU   rV   r
   r
   r   rH      r   )r;   
ValueErrorzip)xyzr1   r
   r
   r   _points_from_xy   s    r]   c                 C   s   t j| dd} t j|dd}|d ur2t j|dd}tjrFt| ||S tjrZt| ||S t| ||}t j	t
| td}t  ||d d < W d    n1 s0    Y  |S d S )Nfloat64r   )r   Zasarrayr   rL   r"   Zpointsr8   r)   r]   r:   r;   r<   r=   )rZ   r[   r\   rE   rF   r
   r
   r   points_from_xy   s    
*r_   c                 K   s0   t |trt|gd }tt| ||fi |S )Nr   )r   r   r3   getattrr)   )opleftrightrP   r
   r
   r   _binary_method  s    
rd   c                    s  t trdtjt|td}t ,  fdd|D |dd< W d   n1 sV0    Y  |S t tjrt|tkrd	t|t}t
|tjt|td}t 0  fddt|D |dd< W d   n1 s0    Y  |S td	t|tdS )zApply geometry-valued operation

    Supports:

    -   difference
    -   symmetric_difference
    -   intersection
    -   union

    Parameters
    ----------
    op: string
    right: np.array[geoms] or single shapely BaseGeoemtry
    r   c                    s.   g | ]&}|d ur&d ur&t | nd qS rO   r`   r   sra   rc   r
   r   rH   2  s   z_binary_geo.<locals>.<listcomp>N5Lengths of inputs do not match. Left: {0}, Right: {1}c                    s2   g | ]*\}}|d ur*|d ur*t | |nd qS rO   re   r   Z	this_elemZ
other_elemra   r
   r   rH   ?  s   Type not known: {0} vs {1})r   r   r   r:   r;   r<   r   r=   r9   rB   rX   rY   r>   type)ra   rb   rc   rD   msgr
   rh   r   _binary_geo  s(    

,

,ro   c                    s   t tr0 fdd|D }tj|tdS t tjrf fddt|D }tj|tdS tdt	|t	dS )a[  Binary operation on np.array[geoms] that returns a boolean ndarray

    Supports:

    -  contains
    -  disjoint
    -  intersects
    -  touches
    -  crosses
    -  within
    -  overlaps
    -  covers
    -  covered_by
    -  equals

    Parameters
    ----------
    op: string
    right: np.array[geoms] or single shapely BaseGeoemtry
    c                    s4   g | ],}|d ur,t |g R i ndqS NFre   rf   argsrP   ra   rc   r
   r   rH   c  s   z%_binary_predicate.<locals>.<listcomp>r   c                    s@   g | ]8\}}|d u s8|d u s8t ||g R i ndqS rp   re   rj   rr   rP   ra   r
   r   rH   i  s   rl   N)
r   r   r   rC   boolr9   rY   r>   rB   rm   )ra   rb   rc   rr   rP   rD   r
   rq   r   _binary_predicateJ  s    
ru   c                    s   t tr0 fdd|D }tj|tdS t tjrt|tkrhdt|t}t| fddt	|D }tj|tdS t
dt|tdS ):Binary operation on np.array[geoms] that returns a ndarrayc                    sB   g | ]:}|d u s8|j s8j s8t|g R i ntjqS rO   r*   r`   r   nanrf   rq   r
   r   rH   {  s   z$_binary_op_float.<locals>.<listcomp>r   ri   c                    sN   g | ]F\}}|d u p|j |d u p$|j B sDt||g R i ntjqS rO   rw   rj   rs   r
   r   rH     s   rl   N)r   r   r   rC   r   r9   r;   rB   rX   rY   r>   rm   )ra   rb   rc   rr   rP   rD   rn   r
   rq   r   _binary_op_floatt  s     
ry   c                    s   dkrt jt}ndkr&dt}ntdttr` fdd|D }t j||dS tt jrt	|t	krd
t	|t	}t| fd	dt|D }t j||dS td

t|tdS )rv   projectrelateNzwrong opc                    s4   g | ],}|d ur,t |g R i nqS rO   re   rf   rr   rP   
null_valuera   rc   r
   r   rH     s   z_binary_op.<locals>.<listcomp>r   ri   c                    s@   g | ]8\}}|d u s8|d u s8t ||g R i nqS rO   re   rj   )rr   rP   r}   ra   r
   r   rH     s   rl   )r   rx   r   r<   AssertionErrorr   r   rC   r9   r;   rB   rX   rY   r>   rm   )ra   rb   rc   rr   rP   r   rD   rn   r
   r|   r   
_binary_op  s.    
r   c                 O   s   t |}g }|D ]@}|d u s"|jr(|}nttj| |g|R i |}|| qtjt|t	d}t
  ||d d < W d    n1 s0    Y  t|S )Nr   )rJ   r*   r`   r"   Zaffinityr?   r   r:   r;   r<   r   r=   r3   )ra   rb   rr   rP   rE   r1   resrD   r
   r
   r   _affinity_method  s    
*r   c                    s,    fdd|D }t j|t t dS )z%Unary operation that returns a Seriesc                    s   g | ]}t | qS r
   re   rG   r}   ra   r
   r   rH     r   z_unary_op.<locals>.<listcomp>r   )r   rC   r   rm   )ra   rb   r}   rD   r
   r   r   	_unary_op  s    r   c                 C   s2   t jrt| S t jr t| S td| ddS d S )Nis_validFr}   )r   rL   r"   r   r8   r)   r   rD   r
   r
   r   r     s
    

r   c                 C   s2   t jrt| S t jr t| S td| ddS d S )Nr*   Fr   )r   rL   r"   r*   r8   r)   r   r   r
   r
   r   r*     s
    

r*   c                 C   s2   t jrt| S t jr t| S td| ddS d S )N	is_simpleFr   )r   rL   r"   r   r8   r)   r   r   r
   r
   r   r     s
    

r   c                 C   s   dt | v rtjdtdd tjr<t| tt| B S g }| D ]T}|d u r\|	d qD|j dkrv|	|j
j qD|j dv r|	|j qD|	d qDtj|tdS d S )Nr   zwis_ring currently returns True for Polygons, which is not correct. This will be corrected to False in a future release.   
stacklevelF)r   r   r   )r4   warningswarnFutureWarningr   r8   r)   is_ringget_exterior_ringr?   exteriorr   rC   rt   )rD   resultsr1   r
   r
   r   r     s$    

r   c                 C   s2   t jrt| S t jr t| S td| ddS d S )N	is_closedFr   )r   rL   r"   r   r8   r)   r   r   r
   r
   r   r     s
    

r   c                 C   s2   t jrt| S t jr t| S td| ddS d S )Nhas_zFr   )r   rL   r"   r   r8   r)   r   r   r
   r
   r   r     s
    

r   c                 C   sR   t jr t| }ttt| S t jr@t	| }ttt| S t
d| d dS d S )Nr4   r   )r   rL   r"   r+   geometry_type_valuesr   Zsearchsortedgeometry_type_idsr8   r)   r   )rD   r   r
   r
   r   r4   &  s    

r4   c                 C   s4   t jrt| S t jr t| S td| tjdS d S )Narear   )	r   rL   r"   r   r8   r)   r   r   rx   r   r
   r
   r   r   1  s
    

r   c                 C   s4   t jrt| S t jr t| S td| tjdS d S )Nlengthr   )	r   rL   r"   r   r8   r)   r   r   rx   r   r
   r
   r   r   :  s
    

r   c                    sX   t jt|td}t *  fdd|D |dd< W d   n1 sJ0    Y  |S )z+Unary operation that returns new geometriesr   c                    s   g | ]}t | d qS rO   re   rG   rk   r
   r   rH   N  r   z_unary_geo.<locals>.<listcomp>N)r   r:   r;   r<   r   r=   )ra   rb   rr   rP   rD   r
   rk   r   
_unary_geoH  s    
8r   c                 C   s.   t jrt| S t jr t| S td| S d S )Nboundary)r   rL   r"   r   r8   r)   r   r   r
   r
   r   r   R  s
    

r   c                 C   s.   t jrt| S t jr t| S td| S d S )Ncentroid)r   rL   r"   r   r8   r)   r   r   r
   r
   r   r   [  s
    

r   c                 K   sd   t jrtj| fi |S t jrNt jrNtjddd t	tjt
| fi |S tdtj dd S )NzPyGEOS does not support concave_hull, and Shapely >= 2 is installed, thus using Shapely and not PyGEOS for calculating the concave_hull.   r   $shapely >= 2.0 is required, version  is installed)r   rL   r"   concave_hullr8   r!   r   r   r)   r3   rJ   NotImplementedError__version__)rD   rP   r
   r
   r   r   d  s    r   c                 C   s.   t jrt| S t jr t| S td| S d S )Nconvex_hull)r   rL   r"   r   r8   r)   r   r   r
   r
   r   r   u  s
    

r   c                 C   s>   t jrt| ||S t jr(t| ||S tdtj dd S N.shapely >= 2.0 or PyGEOS is required, version r   )r   rL   r"   delaunay_trianglesr8   r)   r   r   )rD   	toleranceZ
only_edgesr
   r
   r   r   ~  s    r   c                 C   s.   t jrt| S t jr t| S td| S d S )Nenvelope)r   rL   r"   r   r8   r)   r   r   r
   r
   r   r     s
    

r   c                 C   s.   t jrt| S t jr t| S td| S d S )Nminimum_rotated_rectangle)r   rL   r"   Zoriented_enveloper8   r)   r   r   r
   r
   r   r     s
    

r   c                 C   s.   t jrt| S t jr t| S td| S d S )Nr   )r   rL   r"   r   r8   r)   r   r   r
   r
   r   r     s
    

r   c                 C   s6   t jrt| S t jr t| S tdtj dd S r   )r   rL   r"   extract_unique_pointsr8   r)   r   r   r   r
   r
   r   r     s    

r      round      @c                 C   sH   t jrtj| ||||dS t jr2t| ||||S tdtj dd S )N)distance	quad_segs
join_stylemitre_limitr   r   )r   rL   r"   offset_curver8   r)   r   r   )rD   r   r   r   r   r
   r
   r   r     s    r   c                 C   s   t | } d}g }| D ]6}t|dd }|d ur<|t| qd}|d  q|r^tjddd tjt| t	d} t
  || d d < W d    n1 s0    Y  | S )NF	interiorsTzUOnly Polygon objects have interior rings. For other geometry types, None is returned.r   r   r   )rJ   r`   r?   listr   r   r   r:   r;   r<   r   r=   )rD   Zhas_non_polyZinner_ringsr1   Zinterior_ring_seqr
   r
   r   r     s$    
*r           c                 C   s\   t jrtj| |dS t jrFt jrFtjddd t	tjt
| |dS tdtj dd S )Nr   zPyGEOS does not support remove_repeated_points, and Shapely >= 2 is installed, thus using Shapely and not PyGEOS to remove repeated points.r   r   r   r   )r   rL   r"   remove_repeated_pointsr8   r!   r   r   r)   r3   rJ   r   r   )rD   r   r
   r
   r   r     s    r   c                 C   sh   t jrt| S tjt| td}t  & dd | D |d d < W d    n1 sV0    Y  |S d S )Nr   c                 S   s    g | ]}|d ur|  nd qS rO   )representative_pointrG   r
   r
   r   rH     s   z(representative_point.<locals>.<listcomp>)	r   r8   r)   Zpoint_on_surfacer   r:   r;   r<   r=   rI   r
   r
   r   r     s    

,r   c                 C   s6   t jrt| S t jr t| S tdtj dd S r   )r   rL   r"   minimum_bounding_circler8   r)   r   r   r   r
   r
   r   r     s    

r   c                 C   s6   t jrt| S t jr t| S tdtj dd S r   )r   rL   r"   minimum_bounding_radiusr8   r)   r   r   r   r
   r
   r   r   	  s    

r   c                 C   s:   t jrt| |S t jr$t| |S tdtj dd S r   )r   rL   r"   
segmentizer8   r)   r   r   )rD   Zmax_segment_lengthr
   r
   r   r     s    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Ncovers)r   rL   r"   r   r8   rd   ru   rD   otherr
   r
   r   r   &  s
    r   c                 C   s0   t jrt| |S t jr$td| |S tdd S )N
covered_byz6covered_by is only implemented for pygeos, not shapely)r   rL   r"   r   r8   rd   r   r   r
   r
   r   r   /  s    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Ncontains)r   rL   r"   r   r8   rd   ru   r   r
   r
   r   r   :  s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Ncrosses)r   rL   r"   r   r8   rd   ru   r   r
   r
   r   r   C  s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Ndisjoint)r   rL   r"   r   r8   rd   ru   r   r
   r
   r   r   L  s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Nequals)r   rL   r"   r   r8   rd   ru   r   r
   r
   r   r   U  s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )N
intersects)r   rL   r"   r   r8   rd   ru   r   r
   r
   r   r   ^  s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Noverlaps)r   rL   r"   r   r8   rd   ru   r   r
   r
   r   r   g  s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Ntouches)r   rL   r"   r   r8   rd   ru   r   r
   r
   r   r   p  s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Nwithin)r   rL   r"   r   r8   rd   ru   r   r
   r
   r   r   y  s
    r   c                 C   s@   t jrtj| ||dS t jr,td| ||dS td| ||dS d S )Nr   equals_exact)r   rL   r"   r   r8   rd   ru   )rD   r   r   r
   r
   r   r     s
    r   c                    sz   t jrt|  S tjt| td}t  0  fdd| D |d d < W d    n1 sh0    Y  |S d S )Nr   c              	      s,   g | ]$}|d ur$t j| nd qS rO   )r"   opsclip_by_rectrf   xmaxxminymaxyminr
   r   rH     s   z clip_by_rect.<locals>.<listcomp>)	r   r8   r)   r   r   r:   r;   r<   r=   )rD   r   r   r   r   Zclipped_geometriesr
   r   r   r     s    
,r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )N
difference)r   rL   r"   r   r8   rd   ro   r   r
   r
   r   r     s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Nintersection)r   rL   r"   r   r8   rd   ro   r   r
   r
   r   r     s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Nsymmetric_difference)r   rL   r"   r   r8   rd   ro   r   r
   r
   r   r     s
    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Nunion)r   rL   r"   r   r8   rd   ro   r   r
   r
   r   r     s
    r   c                 C   s:   t jrt| |S t jr$td| |S tdtj dd S )Nshortest_liner   r   )r   rL   r"   r   r8   rd   r   r   r   r
   r
   r   r     s    r   c                 C   s4   t jrt| |S t jr$td| |S td| |S d S )Nr   )r   rL   r"   r   r8   rd   ry   r   r
   r
   r   r     s
    r   c                 K   sR   t jrtj| |fd|i|S t jr<td| |fd|i|S tdtj dd S )Ndensifyhausdorff_distancer   r   )r   rL   r"   r   r8   rd   r   r   rD   r   r   rP   r
   r
   r   r     s    r   c                 K   sR   t jrtj| |fd|i|S t jr<td| |fd|i|S tdtj dd S )Nr   frechet_distancer   r   )r   rL   r"   r   r8   rd   r   r   r   r
   r
   r   r     s    r      c                    s0  t jr>t jr$tj|  fdiS tj|  fdiS nt jr\tj|  fdiS tjt	| t
d}t tjrt	 t	| krtdt  2 fddt|  D |d d < W d    n1 s0    Y  |S t  .  fdd| D |d d < W d    n1 s0    Y  |S d S )Nr   Zquadsegsr   BLength of distance sequence does not match length of the GeoSeriesc                    s0   g | ](\}}|d ur(|j |fi  nd qS rO   bufferr   r1   dist)rP   
resolutionr
   r   rH     s   zbuffer.<locals>.<listcomp>c                    s,   g | ]$}|d ur$|j  fi nd qS rO   r   rG   r   rP   r   r
   r   rH     s   )r   rL   ZSHAPELY_G_20a1r"   r   r8   r)   r   r:   r;   r<   r   r9   rX   r=   rY   )rD   r   r   rP   rE   r
   r   r   r     s,    
,
.r   c                    s$  t jrtj|  dS t jrTztj|  dW S  tyP   tj|  d Y S 0 ntjt	| t
d}t tjrt	 t	| krtdt  0 fddt|  D |d d < W d    n1 s0    Y  |S t  ,  fdd| D |d d < W d    n1 s0    Y  |S d S )N
normalized	normalizer   r   c                    s   g | ]\}}|j | d qS r   interpolater   r   r
   r   rH   0  s   zinterpolate.<locals>.<listcomp>c                    s   g | ]}|j  d qS r   r   rG   r   r   r
   r   rH   7  s   )r   rL   r"   Zline_interpolate_pointr8   r)   r>   r   r:   r;   r<   r   r9   rX   r=   rY   )rD   r   r   rE   r
   r   r   r     s.    

,
.r   Tc                    s   t jrtj|  dS t jr,tj|  dS tjt| t	d}t 
 ,  fdd| D |d d < W d    n1 sx0    Y  |S d S )Npreserve_topologyr   c                    s   g | ]}|j  d qS )r   )simplifyrG   r   r   r
   r   rH   G  s   zsimplify.<locals>.<listcomp>)r   rL   r"   r   r8   r)   r   r:   r;   r<   r=   )rD   r   r   rE   r
   r   r   r   =  s    
,r   c                 C   sd   ddl m}m} ddlm} ddlm} ||jj_	||g|jj_
|| j}|j|j| ||S )zS
    Small helper function for now because it is not yet available in Shapely.
    r   )c_intc_void_p)r(   )r$   )ctypesr   r   shapely.geometry.baser(   shapely.geosr$   Z_lgeosZGEOSNormalize_rrestypeargtypesr%   Z_geomZgeos_handle)r1   r   r   r(   r$   Zgeom_clonedr
   r
   r   _shapely_normalizeN  s    
r   c                 C   st   t jrt| S t jr t| S tjt| t	d}t 
 & dd | D |d d < W d    n1 sf0    Y  |S )Nr   c                 S   s    g | ]}|d ur|  nd qS rO   r   rG   r
   r
   r   rH   g  r   znormalize.<locals>.<listcomp>)r   rL   r"   r   r8   r)   r   r:   r;   r<   r=   rI   r
   r
   r   r   _  s    


4r   c                 C   st   t jrt| S t jr t| S tjt| t	d}t 
 & dd | D |d d < W d    n1 sf0    Y  |S )Nr   c                 S   s$   g | ]}|d urt j|nd qS rO   )r"   Z
validation
make_validrG   r
   r
   r   rH   s  s   zmake_valid.<locals>.<listcomp>)r   rL   r"   r   r8   r)   r   r:   r;   r<   r=   rI   r
   r
   r   r   k  s    


,r   c                 C   s6   t jrt| S t jr t| S tdtj dd S r   )r   rL   r"   reverser8   r)   r   r   r   r
   r
   r   r   z  s    

r   c                 C   sh   t jrtj| ||dS t jrTztj| ||dW S  tyP   tj| ||d Y S 0 ntd| ||dS d S )Nr   r   rz   )r   rL   r"   Zline_locate_pointr8   r)   r>   r   )rD   r   r   r
   r
   r   rz     s    rz   c                 C   s:   t jrt| |S t| } t|tjr.t|}td| |S )Nr{   )	r   rL   r"   r{   rJ   r   r   r9   r   r   r
   r
   r   r{     s    r{   c                 C   s   d}t jr<t| } | d u s"| jr6tj|tdd d S | S nbt jrlt	t
| }|d u rhtj|tdd |S dd | D } | rtj| S tj|tdd d S d S )Nz`unary_union` returned None due to all-None GeoSeries. In future, `unary_union` will return 'GEOMETRYCOLLECTION EMPTY' instead.r   r   c                 S   s   g | ]}|d ur|qS rO   r
   )r   gr
   r
   r   rH     r   zunary_union.<locals>.<listcomp>)r   rL   r"   Z	union_allr*   r   r   r   r8   r2   r)   r   unary_union)rD   Zwarning_msgresultr
   r
   r   r     s<    
r   c                 C   s4   t jrt| S t jr t| S td| tjdS d S )NrZ   r   )	r   rL   r"   get_xr8   r)   r   r   rx   r   r
   r
   r   r     s
    

r   c                 C   s4   t jrt| S t jr t| S td| tjdS d S )Nr[   r   )	r   rL   r"   get_yr8   r)   r   r   rx   r   r
   r
   r   r     s
    

r   c                 C   sF   t jrt| S t jr t| S dd | D } tj| tt	dS d S )Nc                 S   s   g | ]}|j r|jntjqS r
   )r   r\   r   rx   rG   r
   r
   r   rH     r   zget_z.<locals>.<listcomp>r   )
r   rL   r"   get_zr8   r)   r   rC   r   r   r   r
   r
   r   r     s    

r   c                 C   sR   t jrt| S t jr t| S t| dkr:tjdddS t	dd | D }|S )Nr   )r   r   r^   r   c                 S   s4   g | ],}|d u s|j s|jntjtjtjtjfqS rO   )r*   boundsr   rx   rG   r
   r
   r   rH     s   zbounds.<locals>.<listcomp>)
r   rL   r"   r   r8   r)   r;   r   r:   rC   )rD   r   r
   r
   r   r     s    

r   c                 C   sp  t jst jrt jr0t| }ddlm}m} nt| }ddlm}m} t	| }|| |  dd}||d d df |d d df }|| |  
 t|j|| < || | dd}||d d df |d d df |d d df }|| | 
 t|j||< |S ddlm}	 t| }
tj|
td	}t|
D ]0}| | }t|rV|||< n|	||||< q6|S d S )
Nr   )get_coordinatesset_coordinatesF)Z	include_zr   Tr   )	transformr   )r   rL   r8   r"   r   r   r   r)   r   Z
empty_likecopyrC   Tshapely.opsr   r;   r:   r<   ranger   )rD   funcr   r   r   r   ZcoordsZnew_coords_zZcoords_zr   nrU   r1   r
   r
   r   r     s.    


""0

r   )F)N)N)F)r   r   r   )r   )N)N)r   )F)T)F)p__doc__r   numpyr   Zpandasr   r"   Zshapely.geometryr   r  Zshapely.validationZshapely.wkbZshapely.wktr   r    r   r   r)   ImportErrorr#   r   rL   r8   ZGeometryTypeZtype_mappingr   keysr   rC   valuesr<   r   r   r2   r7   r3   rJ   r6   r/   r5   rS   r]   r_   rd   ro   ru   ry   r   r   r   r   r*   r   r   r   r   r4   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rz   r{   r   r   r   r   r   r   r
   r
   r
   r   <module>   s   

5




-* &
						
						

														


&


	,		
