o
    Jf_                     @   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&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 Z0ej+,de"eeeee egdd Z1dd Z2ej+,de"eee$gdd Z3ej+,deee egdd Z4dd Z5d d! Z6d"d# Z7d$d% Z8d&d' Z9d(d) Z:e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 ZAd2d3 ZBd4d5 ZCej+j?ej@d+k d,d-d6d7 ZDej+j?ej@d+k d,d-d8d9 ZEej+,ded:d; ZFd<d= ZGej+,deeHejIejIef d>d? ZJej+,dedd@ dAdB ZKej+,dedCdD ZLej+,dedd@ dEdF ZMej+,dedGdH ZNdIdJ ZOdKdL ZPej+,de"eeee$e eeeeeeQdgeReQdggdMdN ZSdOdP ZTdQdR ZUdSdT ZVej+,ddggeggeggeeggfdUdV ZWej+,de"ee$gdWdX ZXej+,dddgg gdYdZ ZYej+,dd[d[gd\gd]d^ ZZej+,de"eeee$e eeeeedgd_d` Z[dadb Z\dcdd Z]ej+,ddgge$gggdedf Z^ej+j?ej@dgk dhd-didj Z_ej+j?ej@dgk dhd-dkdl Z`ej+j?ej@dgk dhd-ej+,dmdndodp Zaej+j?ej@dgk dhd-dqdr Zbej+j?ej@dgk dhd-ej+,dmdndsdt Zcej+j?ej@dgk dhd-ej+,dmdndudv Zdej+j?ej@dgk dhd-dwdx Zeej+j?ej@dgk dhd-dydz Zfej+,d{e	g d|d}e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d}e 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d}e 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d}e	 fej=e	g dde	g dej+j?ej@dk dd-d.e	g dde	 fgdd Zgej+j?ej@dgk dhd-dd Zhej+,dddgdd Ziej+j?ej@dkdd-dd Zjej+,deQd d/gdd[gdd Zkdd Zleme"egZnej+j?ej@dk dd-Zoej+,de"e"fe#e"fej=eeeod.ej=eeeod.eefeefej=eeeod.ej=eeeod.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enenfeenfgdd Zpej+,de"e#fe#e#fej=eeeod.ej=eeeod.eefeefej=eeeod.ej=eeeod.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enefeefgdd Zqd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ignore_invalid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+   g/home/deployuser/azure_apps/autowriter/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&   get_num_interior_ringsr   r   r(   r)   r+   r+   r,   test_get_num_interior_rings,   s   r1   c                  C   r"   )Nr#   )
r/   r/   r/   r/      r/   r2   r2   r   r   )r&   get_num_geometriesr   r(   r)   r+   r+   r,   test_get_num_geometries1   r.   r4   geomc                 C   &   t | g d}t | sJ d S N)r   r2   )r&   	get_point
is_missingallr5   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/   r2      )r&   r'   r9   r   r:   r;   r5   nr*   r+   r+   r,   test_get_pointF   s   
rC   c                 C   s    t | }t | sJ d S r#   )r&   get_exterior_ringr:   r;   r<   r+   r+   r,   "test_get_exterior_ring_non_polygonN   s   
rE   c                  C   s(   t ttg} t | dk sJ d S Nr2   )r&   rD   r   r   get_type_idr;   r)   r+   r+   r,   test_get_exterior_ring_   s   rH   c                 C   r6   r7   )r&   get_interior_ringr:   r;   r<   r+   r+   r,   "test_get_interior_ring_non_polygond   s   rJ   c                  C   s@   t tg d} t| d | d  t | dd  sJ d S N)r   r8   r/   r   r/   r2   r@   )r&   rI   r   r   r:   r;   r)   r+   r+   r,   test_get_interior_ringu   s   rM   c                 C   s@   t | g d}t|d |d  t |dd  sJ d S rK   )r&   get_geometryr   r:   r;   r<   r+   r+   r,   test_get_geometry_simple{   s   rO   c                 C   r>   r?   )r&   r3   rN   r   r:   r;   rA   r+   r+   r,   test_get_geometry_collection   s   
rP   c                  C   "   t t } | g dksJ d S )N)	r   r/   r2   r$   r@   r%         rS   )r&   rG   r   r(   r)   r+   r+   r,   test_get_type_id      rT   c                  C   rQ   )N)	r   r/   r/   r2   r   r/   r2   r/   r8   )r&   get_dimensionsr   r(   r)   r+   r+   r,   test_get_dimensions   rU   rW   c                  C   s(   t ttd g } | g dksJ d S )N)r2   r$   r8   )r&   get_coordinate_dimensionr   r   r(   r)   r+   r+   r,   test_get_coordinate_dimension   s   rY   c                  C   r"   )Nr#   )
r/   r$   r%   r%   r2   r2   
   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   r8   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$   rS   r   z
GEOS < 3.7)reason)marksr/   c                 C   s   t | |s	J d S r#   )npisnan)ra   r5   r+   r+   r,   test_get_xyz_no_point   s   rf   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      "ri   c                   C   rg   )Ng      @)r&   get_yr   r   r(   r+   r+   r+   r,   
test_get_y   rj   rl   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   rn   c                   C   s   t tts
J d S r#   )rd   re   r&   rm   r   r+   r+   r+   r,   test_get_z_2d      ro   c                 C   s   t t| }t||  d S r#   )r&   from_wktstrr   r<   r+   r+   r,   test_new_from_wkt   s   rs   c                  C   sH   t dd} tt |  jd7  _W d    d S 1 sw   Y  d S )Nr2   r/   )r   pytestraisesAttributeError_geom)r   r+   r+   r,   test_adapt_ptr_raises   s   
"rx   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r5   r+   r+   r,   test_hash_same_equal   s   $r   r8   c                 C   s$   t | t t| dd ksJ d S )Nc                 S      | d S Nr/   r+   rz   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   ry   r#   r+   rz   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+   rz   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   ry   r#   r+   rz   r+   r+   r,   r|      r}   z!test_set_unique.<locals>.<lambda>r/   )r&   r   len)r5   ar+   r+   r,   test_set_unique   s   r   c                  C   sb   t   tttjtjgtjtjgggd } W d    n1 s"w   Y  t| dks/J d S )NrZ   )r   setr&   linestringsrd   nanr   r   r+   r+   r,   test_set_nan   s   *r   c                  C   s"   t tgd } t| dksJ d S )NrZ   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&   r3   rN   range	get_partsr   r   )r5   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   )rd   arrayr
   r   r   r   r   r&   r3   appendrN   r   r   r   )r5   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   r3   rN   r   r   r   r   rd   asarrayr   )r5   r   r   r   expected_subpartsr   r   subpartsr+   r+   r,   (test_get_parts_geometry_collection_multi3  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)rd   r   r   r   r   	enumerater   r&   r3   r   rN   r   r   r   array_equalr5   r   expected_indexr   r   jr   indexr+   r+   r,   test_get_parts_return_indexJ  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rt   ru   
ValueErrorr&   r   r   r+   r+   r,   !test_get_parts_invalid_dimensionsY  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_multic  s   r   c                 C   s   t t| dksJ d S r   )r   r&   r   r   r+   r+   r,   test_get_parts_Nonei  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   )rt   ru   	TypeErrorr&   r   r   r+   r+   r,   test_get_parts_invalid_geometryn  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&   rG   GeometryTypePOLYGONis_empty	get_ringsr   rD   )r5   ringsr+   r+   r,   test_get_ringst  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 )Nr2   r   r/   )r&   r   r   r   rD   rI   )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   )rd   r   r   r   r   r   r&   r   r   rD   r   r0   rI   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$   rR   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#   )rd   r;   re   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  rp   r   c                   C   s    t tddtjd u sJ d S )Nr   )r&   r   r   rd   r   r+   r+   r+   r,    test_set_precision_grid_size_nan  r   r   zgeometry,mode,expected)r2   r2   r@   r2   )g	@r$   r@   r@   r2   r@   )gffffff@r$   r   r   )r   r   r$   r$   r   )r   r   r   r   r   )r   r   r   r   r   r   r   )r$   rZ   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_intersectioni  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   rt   warnsUserWarningr&   r   r   r   r   )r   r*   r+   r+   r,   set_precision_preserve_topologyz     
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   )rt   ru   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)rd   
empty_liker   r&   r:   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 rF   )r&   r   rX   r   r5   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_3drX   r   r  r+   r+   r,   test_force_3d  s   r  )rr   numpyrd   rt   r&   r   r   r   r   r   shapely.testingr   shapely.tests.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!   r-   r1   r4   markparametrizer=   rC   rE   rH   rJ   rM   rO   rP   rT   rW   rY   r\   r^   r`   rh   rk   paramrm   skipifr   rf   ri   rl   rn   ro   rs   rx   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   geometry_collection_2empty_geom_markr  r  r+   r+   r+   r,   <module>   s   h

































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

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

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

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