o
    Jfb                     @   s  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m	Z	m
Z
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 deddd Zed	ed
Zded  Zded  Zded  Zded  Zded  Zded  Zded  Z ded  Z!dZ"e j#dddgdddZ$e j#ddddgdddidddZ%e j#dddd d!gdd"d#iddd$d d%gd&dgd'd%gd(dggdd%d#d)ddd*d+d%gd,d%gd,dgd+dgd+d%gggdd-d.id#d)dgd/ddZ&e'ddZ(e'd d!ge)d d%gd&dgd'd%gd(dgge*d+d%gd,d%gd,dgd+dgd+d%gggZ+d0d1 Z,d2d3 Z-d4d5 Z.d6d7 Z/d8d9 Z0d:d; Z1ej23d<ed=d> Z4ej23d?d@dAdB Z5dCdD Z6dEdF Z7dGdH Z8dIdJ Z9dKdL Z:dMdN Z;dOdP Z<ej23d<eej23dQdRdSgej23dTd dUgdVdW Z=ej23d<e
 e	 e e fdXdY Z>dZd[ Z?d\d] Z@d^d_ ZAd`da ZBdbdc ZCddde ZDej2jEejFdfk dgdhej23d?g didjdk ZGdldm ZHej2jEejFdfk dndhdodp ZIej2jEejFdfkdqdhdrds ZJdtdu ZKdvdw ZLej2jEejFdfkdxdhdydz ZMej2jEejFdfk dgdhd{d| ZNd}d~ ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUej2jEejFdk ddhdd ZVej2jEejFdk ddhdd ZWej2jEejFdkddhdd ZXej23deefeefeYegefeYegefeZegefeZegefeZeYegge feZeYegge fgdd Z[ej2j\ejFdd dkddhej23deefeYegefeZegefeZeYegge!fgdd Z]ej2j\ejFdk ddhej23deefeYegefeZegefeZeYegge fgdd Z^ej23ded dfed dfeddfeddfeddfeddfe ddfe!ddfgdd Z_dd Z`ej23d<eeef dd Zaej23d<eeef dd Zbej2jEejFdk ddhej23de$e(fe%e(fe&eZe+fe$gd e(gd fde$dge(dgfgdd Zcej2jEejFdk ddhdd Zdej2jEejFdk ddhdd Zeej2jEejFdk ddhdd Zfej2jEejFdk ddhdd Zgej2jEejFdk ddhej23de$e(fe$gd e(gd fde$dge(dgfgdd Zhej2jEejFdk ddhej23dg ddd Ziej2jEejFdk ddhdd Zjej2jEejFdk ddhej23d<eeYeegeZeegeZeZegeggdd Zkej2jEejFdk ddhej23d<eddÄ ZldS )    N)GeometryCollection
LineStringPointPolygon)UnsupportedGEOSVersionError)assert_geometries_equal)	all_typesempty_pointempty_point_zpointpoint_zs      <2d      ?z<dnan   s        s            s          s            s          s                  s               Z01030000000100000002000000507daec600b1354100de02498e5e3d41306ea321fcb03541a011a53d905e3d41r   gffffff_@g333333$@)typecoordinates   indentFeaturenamezDinagat Islands)r   geometry
propertiesFeatureCollectiong     Y@g333333?prop0value0r   g        g     Y@g      Z@g     @Z@)prop1r   r   g      Y@g     @Y@thisthat)r   featuresc                  C   8   t dd} t d}t||  t d}t||  d S )N   POINT (1 1)s   POINT (1 1))shapelypointsfrom_wktr   expectedactual r,   a/home/deployuser/azure_apps/autowriter/venv/lib/python3.10/site-packages/shapely/tests/test_io.pytest_from_wkt\   s
   


r.   c                   C      t d d u s	J d S N)r&   r(   r,   r,   r,   r-   test_from_wkt_nonee      r1   c                   C   s   t jtdd td W d    n1 sw   Y  t jtjdd td W d    n1 s4w   Y  t jtjdd td W d    d S 1 sRw   Y  d S )N!Expected bytes or string, got intmatchr$   z+Expected word but encountered end of stream zUnknown type: 'NOT'NOT A WKT STRING)pytestraises	TypeErrorr&   r(   GEOSExceptionr,   r,   r,   r-   test_from_wkt_exceptionsj   s   "r<   c                   C   s~   t jtdd tjddd W d    n1 sw   Y  t jtdd tjddd W d    d S 1 s8w   Y  d S )NzInvalid WKTr4   r6   warn
on_invalidr7   )r8   warnsWarningr&   r(   r,   r,   r,   r-   test_from_wkt_warn_on_invalidw   s   "rB   c                   C   s   t   t d tjddd W d    n1 sw   Y  t   t d tjddd W d    d S 1 s<w   Y  d S )Nerrorr6   ignorer>   r7   )warningscatch_warningssimplefilterr&   r(   r,   r,   r,   r-   test_from_wkb_ignore_on_invalid   s   



"rH   c                   C   B   t jtdd tjddd W d    d S 1 sw   Y  d S Nnot a valid optionr4          unsupported_optionr>   )r8   r9   
ValueErrorr&   r(   r,   r,   r,   r-   +test_from_wkt_on_invalid_unsupported_option      "rO   geomc                 C   s"   t | }t |}t||  d S r0   )r&   to_wktr(   r   )rQ   wktr+   r,   r,   r-   test_from_wkt_all_types   s   

rT   rS   )POINT EMPTYzLINESTRING EMPTYPOLYGON EMPTYzGEOMETRYCOLLECTION EMPTYc                 C   sD   t | }t | sJ t | sJ t || ks J d S r0   )r&   r(   is_geometryallis_emptyrR   )rS   rQ   r,   r,   r-   test_from_wkt_empty   s   
rZ   c                  C   s$   t dd} t t}t||  d S Nr$   )r&   r'   from_wkbPOINT11_WKBr   r)   r,   r,   r-   test_from_wkb   s   
r^   c                  C   r#   )Nr$   *0101000000000000000000F03F000000000000F03Fs*   0101000000000000000000F03F000000000000F03F)r&   r'   r\   r   r)   r,   r,   r-   test_from_wkb_hex   s
   


r`   c                   C   r/   r0   )r&   r\   r,   r,   r,   r-   test_from_wkb_none   r2   ra   c                  C   s   t jtdd td W d    n1 sw   Y  t jtjdd td} | d u s0J W d    n1 s:w   Y  t jtjdd tt} | d u sSJ W d    d S 1 s^w   Y  d S )Nr3   r4   r$   z]Unexpected EOF parsing WKB|ParseException: Input buffer is smaller than requested object sizerL   z4Points of LinearRing do not form a closed linestring)r8   r9   r:   r&   r\   r;   INVALID_WKBresultr,   r,   r-   test_from_wkb_exceptions   s"   

"re   c                  C   s   t jtdd tjddd} | d u sJ W d    n1 sw   Y  t jtdd tjtdd} | d u s9J W d    d S 1 sDw   Y  d S )NzInvalid WKBr4   rL   r=   r>   )r8   r@   rA   r&   r\   rb   rc   r,   r,   r-   "test_from_wkb_warn_on_invalid_warn   s   "rf   c                  C   s   t   t d tjddd} | d u sJ W d    n1 s!w   Y  t   t d tjtdd} | d u s=J W d    d S 1 sHw   Y  d S )NrC   rL   rD   r>   )rE   rF   rG   r&   r\   rb   rc   r,   r,   r-   &test_from_wkb_ignore_on_invalid_ignore   s   



"rg   c                   C   rI   rJ   )r8   r9   rN   r&   r\   r,   r,   r,   r-   +test_from_wkb_on_invalid_unsupported_option   rP   rh   use_hexFT
byte_orderr$   c                 C   sD   t | t jjkrtd t j| ||d}t |}t||  d S )Nz$Linearrings are not preserved in WKBhexrj   )	r&   get_type_idGeometryType
LINEARRINGr8   skipto_wkbr\   r   )rQ   ri   rj   wkbr+   r,   r,   r-   test_from_wkb_all_types   s
   

rs   c                 C   sN   t | }t |} t |  sJ t |  sJ t | |ks%J d S r0   )r&   rq   r\   rW   rX   rY   )rQ   rr   r,   r,   r-   test_from_wkb_empty   s
   

rt   c                  C   s\   t dd} t | }|dksJ t j| dd}|dksJ t j| ddd}|dks,J d S )	Nr$   r%   FtrimzPOINT (1.000000 1.000000)r   )rounding_precisionrv   zPOINT (1.000 1.000)r&   r'   rR   r   r+   r,   r,   r-   test_to_wkt  s   
rz   c                  C   sv   t ddd} t | }|dksJ t j| dd}|dksJ t j| dd}|dks,J t j| dd}|d	ks9J d S )
Nr$   zPOINT Z (1 1 1)r   output_dimensionr   r%   T)old_3dzPOINT (1 1 1)rx   r   r+   r,   r,   r-   test_to_wkt_3D  s   
r   c                   C   r/   r0   )r&   rR   r,   r,   r,   r-   test_to_wkt_none  r2   r   c                  C   s>   g d} t | }t jdk rg d} tt || ksJ d S )N)POINT Z EMPTYNPOLYGON Z EMPTYr   	   r   )rU   NrV   )r&   r(   geos_versionlistrR   )	empty_wktempty_geomsr,   r,   r-   test_to_wkt_array_with_empty_z"  s
   

r   c                   C   st   t t td W d    n1 sw   Y  t tj tjtdd W d    d S 1 s3w   Y  d S )Nr$      r{   )r8   r9   r:   r&   rR   r;   r   r,   r,   r,   r-   test_to_wkt_exceptions+  s   "r   c                   C   s   t tdks	J d S )NrU   )r&   rR   r	   r,   r,   r,   r-   test_to_wkt_point_empty3  s   r   r   z5Empty geometries have no dimensionality on GEOS < 3.9)reason)r   zLINESTRING Z EMPTYzLINEARRING Z EMPTYr   c                 C   s   t t | | ksJ d S r0   )r&   rR   r(   )rS   r,   r,   r-   test_to_wkt_empty_z7  s   r   c                  C   s&   t ttg} t | dsJ d S )Nz(POINT EMPTY, POINT (2 3)))r&   geometrycollectionsr	   r   rR   endswith)
collectionr,   r,   r-   /test_to_wkt_geometrycollection_with_point_emptyH  s   r   z4MULTIPOINT (EMPTY, (2 3)) only works for GEOS >= 3.9c                  C   s8   t ttg} t jdkrd}nd}t | |ksJ d S )N)r      r   zMULTIPOINT (EMPTY, (2 3))zMULTIPOINT (EMPTY, 2 3))r&   multipointsr	   r   r   rR   )rQ   r*   r,   r,   r-   'test_to_wkt_multipoint_with_point_emptyO  s
   
r   z6MULTIPOINT (EMPTY, 2 3) gives ValueError on GEOS < 3.9c                  C   sH   t ttg} tt t |  W d    d S 1 sw   Y  d S r0   )r&   r   r	   r   r8   r9   rN   rR   rQ   r,   r,   r-   .test_to_wkt_multipoint_with_point_empty_errors]  s   "r   c                   C      t tdksJ d S )Nz<POINT (2 3)>)reprr   r,   r,   r,   r-   	test_reprh  s   r   c                  C   sB   t tdtd} t| }t|dksJ |dsJ d S )Ni  P   z...>)r&   linestringsnparanger   lenr   )rQ   representationr,   r,   r-   test_repr_max_lengthl  s   r   z5MULTIPOINT (EMPTY, 2 3) gives Exception on GEOS < 3.9c                  C   s"   t ttg} t| dksJ d S )Nz,<shapely.MultiPoint Exception in WKT writer>)r&   r   r   r	   r   r   r,   r,   r-   %test_repr_multipoint_with_point_emptyt  s   r   c                   C   r   )Nz<POINT Z EMPTY>)r   r
   r,   r,   r,   r-   test_repr_point_z_empty~  s   r   c                  C   s*   t dd} t j| dd}|tksJ d S )Nr$   rj   r&   r'   rq   r]   ry   r,   r,   r-   test_to_wkb  s   r   c                  C   sD   t dd} t j| ddd}d}d}d}||| d|  ks J d S )Nr$   Trk   0101000000000000000000F03Fr   r&   r'   rq   )r   r+   le
point_typecoordr,   r,   r-   test_to_wkb_hex  s   r   c                  C   sH   t ddd} t j| dd}|dksJ t j| ddd}|tks"J d S )Nr$   r   s           ?      ?      ?r   r|   rj   r   r~   r,   r,   r-   test_to_wkb_3D  s
   r   c                   C   r/   r0   )r&   rq   r,   r,   r,   r-   test_to_wkb_none  r2   r   c                   C   s   t t td W d    n1 sw   Y  t tj tjtdd W d    n1 s2w   Y  t t tjtdd W d    d S 1 sOw   Y  d S )Nr$   r   r{   otherflavor)r8   r9   r:   r&   rq   r;   r   rN   r,   r,   r,   r-   test_to_wkb_exceptions  s   "r   c                  C   sx   t dd} d}d}d}d}t j| dd|| d|  ksJ t j| d	d||d d d
  d|d d d
   ks:J d S )Nr          s      s         ?r$   r   r   r   r   )r   ber   r   r   r,   r,   r-   test_to_wkb_byte_order  s   ":r   c                  C   s   d} d}t | }t j|dddksJ t j|ddd|ks J t j|dddd| ks-J t dd}t |td	}t j|ddd
}t|dd d	 d	ksTJ d S )N201010000200400000000000000000000000000000000000000*010100000000000000000000000000000000000000Tru   zPOINT (0 0)r$   rk   )rl   include_sridrj     )r   rj   r   r   z<u4)
r&   r\   rR   rq   r'   set_sridr   int32
frombufferitem)ewkbrr   r+   r   point_with_sridrd   r,   r,   r-   test_to_wkb_srid  s   
$r   )r   
   r   zGEOS < 3.10.0c                  C   sz   t jtdd} |  dd dksJ t jtddd} |  dd dks'J t jtddd} |  dd d	ks;J d S )
Nr$   r   r   r   01000080extended)rj   r   isoe9030000)r&   rq   r   rl   )r+   r,   r,   r-   test_to_wkb_flavor  s   r   c                   C   sD   t jtdd tjtddd W d    d S 1 sw   Y  d S )Nzcannot be used togetherr4   Tr   )r   r   )r8   r9   rN   r&   rq   r   r,   r,   r,   r-   test_to_wkb_flavor_srid  s   "r   c                   C   s>   t t tjtdd W d    d S 1 sw   Y  d S )Nr   r   )r8   r9   r   r&   rq   r   r,   r,   r,   r-   #test_to_wkb_flavor_unsupported_geos  s   "r   zgeom,expectedc                 C   v   t j| ddd}d}t|| }t||| ksJ |d | |d | ks(J ttd||d   s9J d S )Nr   r$   r      r   r&   rq   r   r   isnanstructunpackrX   rQ   r*   r+   coordinate_lengthheader_lengthr,   r,   r-   test_to_wkb_point_empty_2d  s   &r   )r      z'GEOS==3.8 never outputs 3D empty pointsc                 C   r   )Nr   r$   r      z<3dr   r   r,   r,   r-   test_to_wkb_point_empty_3d  s   &r   )r   r   r   z=GEOS<3.8 always outputs 3D empty points if output_dimension=3c                 C   r   )Nr   r$   r   r   r   r   r   r,   r,   r-   'test_to_wkb_point_empty_2d_output_dim_3   s   &r   zwkb,expected_type,expected_dim   c                 C   sN   t | }t |sJ t ||ksJ t jdkr#t ||ks%J d S d S )Nr   )r&   r\   rY   rm   r   get_coordinate_dimension)rr   expected_typeexpected_dimrQ   r,   r,   r-   test_from_wkb_point_empty=  s   

r   c                  C   s:   t td} t j| dd}t |}t |dksJ d S )Ni  T)r   )r&   r   r	   rq   r\   get_srid)r*   rr   r+   r,   r,   r-   test_to_wkb_point_empty_sridT  s   
r   c                 C   s"   t | }tt || dd d S )Nr   )	tolerance)pickledumpsr   loadsrQ   pickledr,   r,   r-   test_pickle[  s   
r   c                 C   s2   t | d} t| }t t|dksJ d S )Nr   )r&   r   r   r   r   r   r   r,   r,   r-   test_pickle_with_srida  s   
r   )r   r   r$   zGEOS < 3.10.1zgeojson,expected)NNc                 C   s   t | }t|| d S r0   )r&   from_geojsonr   )geojsonr*   r+   r,   r,   r-   test_from_geojsonh  s   
r   c                   C   s`  t jtdd td W d    n1 sw   Y  t jtjdd td W d    n1 s4w   Y  t jtjdd td W d    n1 sQw   Y  t jtjdd td	 W d    n1 snw   Y  t jtjd
d td W d    n1 sw   Y  t jtjd
d td W d    d S 1 sw   Y  d S )Nr3   r4   r$   zError parsing JSONr6   zUnknown geometry typez){"type": "NoGeometry", "coordinates": []}ztype must be array, but is nullz+{"type": "LineString", "coordinates": null}zkey 'type' not foundz${"geometry": null, "properties": []}z{"no": "geojson"})r8   r9   r:   r&   r   r;   r,   r,   r,   r-   test_from_geojson_exceptions|  s$   "r   c                   C   sJ   t jtdd tjdddd u sJ W d    d S 1 sw   Y  d S )NzInvalid GeoJSONr4   r6   r=   r>   )r8   r@   rA   r&   r   r,   r,   r,   r-   !test_from_geojson_warn_on_invalid  s   "r   c                   C   sN   t   t d tjdddd u sJ W d    d S 1 s w   Y  d S )NrC   r6   rD   r>   )rE   rF   rG   r&   r   r,   r,   r,   r-   #test_from_geojson_ignore_on_invalid  s   

"r   c                   C   sB   t jtdd tjtdd W d    d S 1 sw   Y  d S )NrK   r4   rM   r>   )r8   r9   rN   r&   r   GEOJSON_GEOMETRYr,   r,   r,   r-   /test_from_geojson_on_invalid_unsupported_option  s   "r   zGEOS < 3.10zexpected,geometryc                 C   s*   t j| dd}t|t|ksJ d S )Nr   r   )r&   
to_geojsonr   rX   asarray)r   r*   r+   r,   r,   r-   test_to_geojson  s   r   r   )Nr   r   c                 C   sD   | d u rdnd}t jt t| |d}tjt| d}||ks J d S )N),:)r   z: )r   
separatorsr   )jsonr   r   r   r&   r   GEOJSON_GEOMETRY_EXPECTED)r   r   r*   r+   r,   r,   r-   test_to_geojson_indent  s   r   c                   C   s:   t t td W d    d S 1 sw   Y  d S r[   )r8   r9   r:   r&   r   r,   r,   r,   r-   test_to_geojson_exceptions  s   "r   c                 C   s>   t t t| sJ W d    d S 1 sw   Y  d S r0   )r8   r9   rN   r&   r   r   r,   r,   r-   test_to_geojson_point_empty  s   "r   c                 C   s>   t | t jjkrtd t | }t |}t||  d S )Nz(Linearrings are not preserved in GeoJSON)	r&   rm   rn   ro   r8   rp   r   r   r   )rQ   r   r+   r,   r,   r-   test_geojson_all_types  s
   


r   )mr   r   r   rE   numpyr   r8   r&   r   r   r   r   shapely.errorsr   shapely.testingr   shapely.tests.commonr   r	   r
   r   r   packr]   floatNANPOINT_NAN_WKBPOINTZ_NAN_WKBMULTIPOINT_NAN_WKBMULTIPOINTZ_NAN_WKBGEOMETRYCOLLECTION_NAN_WKBGEOMETRYCOLLECTIONZ_NAN_WKBNESTED_COLLECTION_NAN_WKBNESTED_COLLECTIONZ_NAN_WKBrb   r   r   GEOJSON_FEATUREGEOJSON_FEATURECOLECTIONr'   r   r   polygonsGEOJSON_COLLECTION_EXPECTEDr.   r1   r<   rB   rH   rO   markparametrizerT   rZ   r^   r`   ra   re   rf   rg   rh   rs   rt   rz   r   r   r   r   r   skipifr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   xfailr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r,   r,   r-   <module>   s   	'+  		


	
		




	













		
