o
    i_                     @   s	  d dl Z d dlZd dlZd dlZd dlmZmZ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mZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& dd	 Z'd
d Z(dd Z)ej*+de!e#eeeegdd Z,ej*+deegdd Z-ej*+de!eeeeeegdd Z.dd Z/ej*+de!eeeeeegdd Z0dd Z1ej*+de!eee#gdd Z2ej*+deeeegdd Z3dd  Z4d!d" Z5d#d$ Z6d%d& Z7d'd( Z8d)d* Z9ej*+d+ej:ej;ej<ej=ej*j>ej?d,k d-d.d/gej*+dedd d0d1 Z@d2d3 ZAd4d5 ZBej*j>ej?d,k d-d.d6d7 ZCej*j>ej?d,k d-d.d8d9 ZDej*+ded:d; ZEd<d= ZFej*+deeGejHejHef d>d? ZIej*+dedd@ dAdB ZJej*+dedCdD ZKej*+dedd@ dEdF ZLej*+dedGdH ZMdIdJ ZNdKdL ZOdMdN ZPdOdP ZQej*+de!eeee#eeeeeeeRdgeSeRdggdQdR ZTdSdT ZUdUdV ZVdWdX ZWej*+ddggeggeggeeggfdYdZ ZXej*+de!ee#gd[d\ ZYej*+dddgg gd]d^ ZZej*+dd_d_gd`gdadb Z[ej*+de!eeee#eeeeeedgdcdd Z\dedf Z]dgdh Z^ej*+ddgge#gggdidj Z_ej*j>ej?dkk dld.dmdn Z`ej*j>ej?dkk dld.dodp Zaej*j>ej?dkk dld.ej*+dqdrdsdt Zbej*j>ej?dkk dld.dudv Zcej*j>ej?dkk dld.ej*+dqdrdwdx Zdej*j>ej?dkk dld.ej*+dqdrdydz Zeej*j>ej?dkk dld.d{d| Zfej*j>ej?dkk dld.d}d~ Zgej*+de	g ddee	g de	g dgfej<e	g dde	g dej*j>ej?dk dd.d/e	g ddee	g de	g dgfeddgde fej<eddgdeddgej*j>ej?dk dd.d/eddgdeddgfej<eg dde ej*j>ej?dkdd.d/ej<eg ddeg dej*j>ej?dk dd.d/ej<eg ddeg dej*j>ej?dk dd.d/e	g dde	 fej<e	g dde	g dej*j>ej?dk dd.d/e	g dde	 fgdd Zhej*j>ej?dkk dld.dd Ziej*+dddgdd Zjej*j>ej?dkdd.dd Zkej*+deRd dgdd_gdd Zldd Zmene!egZoej*j>ej?dk dd.Zpej*+de!e!fe"e!fej<eeepd/ej<eeepd/eefeefej<eeepd/ej<eeepd/e#e#fe&e#fe$e$fe%e$feefeefeefeefeefe efeoeofeeofgdd Zqej*+de!e"fe"e"fej<eeepd/ej<eeepd/eefeefej<eeepd/ej<eeepd/e#e&fe&e&fe$e%fe%e%feefeefeefeefee fe e feoefeefgdd ZrdS )    N)
LinearRing
LineStringMultiPolygonPointPolygon)assert_geometries_equal   )	all_types)empty)empty_line_stringempty_line_string_zempty_pointempty_point_zempty_polygongeometry_collectiongeometry_collection_zline_stringline_string_nanline_string_zlinear_ringmulti_line_stringmulti_line_string_zmulti_pointmulti_point_zmulti_polygonmulti_polygon_zpointpoint_zpolygonpolygon_with_holepolygon_with_hole_z	polygon_zc                  C   &   t td  } | g dksJ d S )NN)
r         r   r   r   r   r   r   r   )shapelyget_num_pointsr	   tolistactual r+   V/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/shapely/tests/test_geometry.pytest_get_num_points'      r-   c                  C   s*   t ttd f } |  g dksJ d S )N)r   r   r   r   r   r   r   r   r   r   r   )r&   get_num_interior_ringsr	   r   r(   r)   r+   r+   r,   test_get_num_interior_rings,   s   r0   c                  C   r"   )Nr#   )
r   r   r   r      r   r1   r1   r   r   )r&   get_num_geometriesr	   r(   r)   r+   r+   r,   test_get_num_geometries1   r.   r3   geomc                 C   &   t | g d}t | sJ d S N)r   r1   )r&   	get_point
is_missingallr4   r*   r+   r+   r,   test_get_point_non_linestring6   s   r<   c                 C   V   t | }t | d| ||d  g}t|d |d  t |dd  s)J d S Nr   r   r1      )r&   r'   r8   r   r9   r:   r4   nr*   r+   r+   r,   test_get_pointF   s   
rB   c                 C   s    t | }t | sJ d S r#   )r&   get_exterior_ringr9   r:   r;   r+   r+   r,   "test_get_exterior_ring_non_polygonN   s   
rD   c                  C   s(   t ttg} t | dk sJ d S Nr1   )r&   rC   r   r   get_type_idr:   r)   r+   r+   r,   test_get_exterior_ring_   s   rG   c                 C   r5   r6   )r&   get_interior_ringr9   r:   r;   r+   r+   r,   "test_get_interior_ring_non_polygond   s   rI   c                  C   s@   t tg d} t| d | d  t | dd  sJ d S N)r   r7   r   r   r   r1   r?   )r&   rH   r   r   r9   r:   r)   r+   r+   r,   test_get_interior_ringu   s   rL   c                 C   s@   t | g d}t|d |d  t |dd  sJ d S rJ   )r&   get_geometryr   r9   r:   r;   r+   r+   r,   test_get_geometry_simple{   s   rN   c                 C   r=   r>   )r&   r2   rM   r   r9   r:   r@   r+   r+   r,   test_get_geometry_collection   s   
rO   c                  C   "   t t } | g dksJ d S )N)	r   r   r1   r$   r?   r%         rR   )r&   rF   r	   r(   r)   r+   r+   r,   test_get_type_id      rS   c                  C   rP   )N)	r   r   r   r1   r   r   r1   r   r7   )r&   get_dimensionsr	   r(   r)   r+   r+   r,   test_get_dimensions   rT   rV   c                  C   s(   t ttd g } | g dksJ d S )N)r1   r$   r7   )r&   get_coordinate_dimensionr   r   r(   r)   r+   r+   r,   test_get_coordinate_dimension   s   rX   c                  C   r"   )Nr#   )
r   r$   r%   r%   r1   r1   
   r$   r   r   )r&   get_num_coordinatesr	   r(   r)   r+   r+   r,   test_get_num_coordinates   r.   r[   c                  C   s&   t td  } | g dksJ dS )z;All geometry types have no SRID by default; None returns -1r#   )
r   r   r   r   r   r   r   r   r   r7   N)r&   get_sridr	   r(   r)   r+   r+   r,   test_get_srid   s   r]   c                  C   s4   t td} t tdksJ t | dksJ d S )Ni  r   )r&   set_sridr   r\   r)   r+   r+   r,   test_get_set_srid   s   r_   func)r$   rR   r   z
GEOS < 3.7)reason)marksc                 C   s   t | |s	J d S r#   )npisnan)r`   r4   r+   r+   r,   test_get_xyz_no_point   s   re   c                   C   "   t ttg ddgksJ d S )Ng       @)r&   get_xr   r   r(   r+   r+   r+   r,   
test_get_x      "rh   c                   C   rf   )Ng      @)r&   get_yr   r   r(   r+   r+   r+   r,   
test_get_y   ri   rk   c                   C   s   t tg dgksJ d S )Ng      @)r&   get_zr   r(   r+   r+   r+   r,   
test_get_z   s   rm   c                   C   s   t tts
J d S r#   )rc   rd   r&   rl   r   r+   r+   r+   r,   test_get_z_2d      rn   c                 C   s   t t| }t||  d S r#   )r&   from_wktstrr   r;   r+   r+   r,   test_new_from_wkt   s   rr   c                  C   sH   t dd} tt |  jd7  _W d    d S 1 sw   Y  d S )Nr1   r   )r   pytestraisesAttributeError_geom)r   r+   r+   r,   test_adapt_ptr_raises   s   
"rw   c                 C   s$   t | t t| dd ksJ d S )Nc                 S      | S r#   r+   xr+   r+   r,   <lambda>       z&test_hash_same_equal.<locals>.<lambda>hashr&   	transformr4   r+   r+   r,   test_hash_same_equal   s   $r   r7   c                 C   s$   t | t t| dd ksJ d S )Nc                 S      | d S Nr   r+   ry   r+   r+   r,   r{          z*test_hash_same_not_equal.<locals>.<lambda>r}   r   r+   r+   r,   test_hash_same_not_equal   s   $r   c                 C   s   | t | dd ksJ d S )Nc                 S   rx   r#   r+   ry   r+   r+   r,   r{      r|   ztest_eq.<locals>.<lambda>r&   r   r   r+   r+   r,   test_eq      r   c                 C   s   | t | dd ksJ d S )Nc                 S   r   r   r+   ry   r+   r+   r,   r{      r   ztest_neq.<locals>.<lambda>r   r   r+   r+   r,   test_neq   r   r   c                 C   s(   | t | dd h}t|dksJ d S )Nc                 S   rx   r#   r+   ry   r+   r+   r,   r{      r|   z!test_set_unique.<locals>.<lambda>r   )r&   r   len)r4   ar+   r+   r,   test_set_unique   s   r   c                   C   s   t t ksJ d S r#   r   r+   r+   r+   r,   test_eq_nan      r   c                   C   s   t t krJ d S r#   r   r+   r+   r+   r,   test_neq_nan   r   r   c                  C   s<   t ttjtjgtjtjgggd } t| dksJ d S )NrY   )setr&   linestringsrc   nanr   r   r+   r+   r,   test_set_nan   s   (r   c                  C   s"   t tgd } t| dksJ d S )NrY   r   )r   r   r   r   r+   r+   r,   test_set_nan_same_objects  s   r   c                 C   sR   t | }|dkrg }n	t | td|}t | }t||ks"J t|| d S Nr   )r&   r2   rM   range	get_partsr   r   )r4   expected_num_partsexpected_partspartsr+   r+   r,   test_get_parts  s   

r   c                  C   sv   t d ttttg} g }| D ]}tdt|D ]}|	t
|| qqt| }t|t|ks4J t|| d S r   )rc   arrayr   r   r   r   r   r&   r2   appendrM   r   r   r   )r4   r   gir   r+   r+   r,   test_get_parts_array,  s   
r   c                  C   s   t tttg} t | }t | td|}t | }t	||ks#J t
|| g }t|D ]}tdt |D ]}|t || q9q/t |}t	|t	|ksUJ t
|| dS )zOn the first pass, the individual Multi* geometry objects are returned
    from the collection.  On the second pass, the individual singular geometry
    objects within those are returned.
    r   N)r&   geometrycollectionsr   r   r   r2   rM   r   r   r   r   rc   asarrayr   )r4   r   r   r   expected_subpartsr   r   subpartsr+   r+   r,   (test_get_parts_geometry_collection_multi:  s   



r   c                  C   s   t tttg} g }g }t| D ]\}}tdt|D ]}|	t
|| |	| qqtj| dd\}}t|t|ksAJ t|| t ||sNJ d S Nr   T)return_index)rc   r   r   r   r   	enumerater   r&   r2   r   rM   r   r   r   array_equalr4   r   expected_indexr   r   jr   indexr+   r+   r,   test_get_parts_return_indexQ  s   
r   c                 C   >   t jtdd t|  W d   dS 1 sw   Y  dS zOnly 1D inputs are supportedzArray should be one dimensionalmatchNrs   rt   
ValueErrorr&   r   r   r+   r+   r,   !test_get_parts_invalid_dimensions`  s   "r   c                 C   s   t | t|  dS )z?Non-multipart geometries should be returned identical to inputsN)r   r&   r   r   r+   r+   r,   test_get_parts_non_multij  s   r   c                 C   s   t t| dksJ d S r   )r   r&   r   r   r+   r+   r,   test_get_parts_Nonep  s   r   foo*   c                 C   s>   t jtdd t|  W d    d S 1 sw   Y  d S )Nz*One of the arguments is of incorrect type.r   )rs   rt   	TypeErrorr&   r   r   r+   r+   r,   test_get_parts_invalid_geometryu  s   "r   c                 C   sn   t | t jjkst | rt | }t|dksJ d S t | }t|dks*J |d t | ks5J d S Nr   r   )r&   rF   GeometryTypePOLYGONis_empty	get_ringsr   rC   )r4   ringsr+   r+   r,   test_get_rings{  s   

r   c                  C   sL   t t} t| dksJ | d t tksJ | d t tdks$J d S )Nr1   r   r   )r&   r   r   r   rC   rH   )r   r+   r+   r,   test_get_rings_holes  s   
r   c                  C   s   t td ttg} g }g }t| D ]4\}}|d u st|rq|t	| || t
dt|D ]}|t|| || q4qtj| dd\}}t|t|ksYJ t|| t ||sfJ d S r   )rc   r   r   r   r   r   r&   r   r   rC   r   r/   rH   r   r   r   r   r   r+   r+   r,   test_get_rings_return_index  s    

r   c                 C   r   r   r   r   r+   r+   r,   !test_get_rings_invalid_dimensions  s   "r   )r$   rQ   r   z
GEOS < 3.6c                  C   sh   t ttttf } t|  }|dgt|  ksJ t	| d}t| }|dgt|  ks2J d S r   )
r	   r   r   r   r   r&   get_precisionr(   r   set_precision)
geometriesr*   geometryr+   r+   r,   test_get_precision  s   r   c                   C   s    t t td gsJ d S r#   )rc   r:   rd   r&   r   r+   r+   r+   r,   test_get_precision_none      r   mode)valid_output	pointwisekeep_collapsedc                 C   s   t dd}t|dksJ tj|d| d}t|dksJ t|| tj|d| d}t|dks5J t|t dd t|t dd d S )N?r   r   r   )r   r&   r   r   r   )r   initial_geometryr   r+   r+   r,   test_set_precision  s   

r   c                  C   sH   t tg dd} t| tg d t | d} t| tg d d S )N)r   r   r   r   r   r   r   r   r   )r   r   r   )r&   r   r   r   )r   r+   r+   r,   test_set_precision_drop_coords  s   r   c                 C   st   t  , t d tjtdddd| d}t|dksJ t|tddd W d    d S 1 s3w   Y  d S )Nignorer   r   r   )warningscatch_warningssimplefilterr&   r   r   r   r   )r   r   r+   r+   r,   test_set_precision_z  s   

"r   c                 C   sR   t   t d tjtd| d}t|t W d    d S 1 s"w   Y  d S )Nr   r   r   )r   r   r   r&   r   r   r   )r   r*   r+   r+   r,   test_set_precision_nan  s
   

"r   c                   C   s   t d dd u s
J d S r   )r&   r   r+   r+   r+   r,   test_set_precision_none  ro   r   c                   C   s    t tddtjd u sJ d S )Nr   )r&   r   r   rc   r   r+   r+   r+   r,    test_set_precision_grid_size_nan  r   r   zgeometry,mode,expected)r1   r1   r?   r1   )g	@r$   r?   r?   r1   r?   )gffffff@r$   r   r   )r   r   r$   r$   r   )r   r   r   r   r   )r   r   r   r   r   r   r   )r$   rY   r   z%pointwise does not work pre-GEOS 3.10r   r   皙?r   )r   )r   r   r   )r   r   r   zSegfaults on GEOS 3.10.0)r   r   r   r   r   )r   r   r   z7this collapsed into an invalid linearring pre-GEOS 3.10c                 C   sV   t j| d|d}t jdk r!t t |t t |ksJ dS tt || dS )zILines and polygons collapse to empty geometries if vertices are too closer   r   r$   	   r   N)r&   r   geos_versionto_wkt	normalizer   force_2d)r   r   expectedr*   r+   r+   r,   test_set_precision_collapse  s   a
r   c                  C   s   t t dddd} t t dddd}t t | |dks#J t | d} t |d}t | |}t |dks>J t|tddg d	S )
zHOperations should use the most precise presision grid size of the inputsr   r   g      ?g      ?g      ?r   r   )r   r   N)r&   r   boxr   intersectionr   r   r   )box1box2outr+   r+   r,   test_set_precision_intersectionp  s   r   preserve_topologyFTc                 C   sX   t t tjtddgd| d}W d    n1 sw   Y  tt|t  d S )Nr   r         ?)r   rs   warnsUserWarningr&   r   r   r   r   )r   r*   r+   r+   r,   set_precision_preserve_topology     
r   zGEOS >= 3.10c                  C   sX   t t tjtddgddd} W d    n1 sw   Y  tt| t  d S )Nr   r   r   r   r   r   r)   r+   r+   r,   set_precision_pointwise_pre_310  r   r   flagsr?   c                 C   sD   t ttf tjtd|  W d    d S 1 sw   Y  d S )Nr   )rs   rt   r   r   r&   libr   r   )r   r+   r+   r,   set_precision_illegal_flags  s   "r  c                  C   s*   t t ddg} t|  sJ dS )z(Compatibility with empty_like, see GH373N)rc   
empty_liker   r&   r9   r:   )r   r+   r+   r,   
test_empty  s   r  r   z8Empty points don't have a dimensionality before GEOS 3.9zgeom,expectedc                 C   s*   t | }t |dksJ t|| d S rE   )r&   r   rW   r   r4   r   r*   r+   r+   r,   test_force_2d  s   
r  c                 C   s.   t j| dd}t |dksJ t|| d S )Nr?   )zr$   )r&   force_3drW   r   r  r+   r+   r,   test_force_3d  s   r	  )sr   numpyrc   rs   r&   r   r   r   r   r   shapely.testingr   commonr	   r
   empty_geometry_collectionr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r-   r0   r3   markparametrizer<   rB   rD   rG   rI   rL   rN   rO   rS   rV   rX   r[   r]   r_   rg   rj   paramrl   skipifr   re   rh   rk   rm   rn   rr   rw   pointsr   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   geometry_collection_2empty_geom_markr  r	  r+   r+   r+   r,   <module>   s   d
















































	







_




