o
    ec                     @   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d0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+d1d2 Z,d3d4 Z-d5d6 Z.d7d8 Z/d9d: Z0d;d< Z1ej23d=ed>d? Z4ej23d@dAdBdC Z5dDdE Z6dFdG Z7dHdI Z8dJdK Z9dLdM Z:dNdO Z;dPdQ Z<ej23d=eej23dRdSdTgej23dUd dgdVdW Z=ej23d=e
 e	 e e fdXdY Z>dZd[ Z?d\d] Z@d^d_ ZAd`da ZBdbdc ZCej2jDejEddk dedfej23d@g dgdhdi ZFdjdk ZGej2jDejEddk dldfdmdn ZHej2jDejEddkdodfdpdq ZIdrds ZJdtdu ZKej2jDejEddkdvdfdwdx ZLej2jDejEddk dedfdydz ZMd{d| ZNd}d~ ZOdd ZPdd ZQdd ZRdd ZSdd ZTej2jDejEdk ddfdd ZUej2jDejEdk ddfdd ZVej2jDejEdkddfdd ZWej23deefeefeXegefeXegefeYegefeYegefeYeXegge feYeXegge fgdd ZZej2j[ejEdd dkddfej23deefeXegefeYegefeYeXegge!fgdd Z\ej2j[ejEdk ddfej23deefeXegefeYegefeYeXe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 Z`ej23d=eeef dd Zaej2jDejEdk ddfej23de$e(fe%e(fe&eYe+fe$gd e(gd fde$dge(dgfgdd Zbej2jDejEdk ddfdd Zcej2jDejEdk ddfdd Zdej2jDejEdk ddfdd Zeej2jDejEdk ddfdd Zfej2jDejEdk ddfej23de$e(fe$gd e(gd fde$dge(dgfgdd Zgej2jDejEdk ddfej23dg ddd Zhej2jDejEdk ddfdd Ziej2jDejEdk ddfej23d=eeXeegeYeegeYeYegeggdd Zjej2jDejEdk ddfej23d=edd Zkd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               ZZ01030000000100000002000000507daec600b1354100de02498e5e3d41306ea321fcb03541a011a53d905e3d41r   gffffff_@g333333$@)typeZcoordinates   indentZFeaturenamezDinagat Islands)r   geometry
propertiesZFeatureCollectiong     Y@g333333?prop0Zvalue0r   g        g     Y@g      Z@g     @Z@)Zprop1r   r   g      Y@g     @Y@thisthat)r   featuresc                  C   8   t dd} t d}t||  t d}t||  d S )Nr   POINT (1 1)s   POINT (1 1))shapelypointsfrom_wktr   expectedactual r&   ED:\Projects\ConvertPro\env\Lib\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_nonef      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    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_exceptionsk   s   "r6   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 WKTr.   r0   warnZ
on_invalidr1   )r2   warnsWarningr    r"   r&   r&   r&   r'   test_from_wkt_warn_on_invalidx   s   "r;   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errorr0   ignorer8   r1   )warningscatch_warningssimplefilterr    r"   r&   r&   r&   r'   test_from_wkb_ignore_on_invalid   s   



"rA   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 optionr.          unsupported_optionr8   )r2   r3   
ValueErrorr    r"   r&   r&   r&   r'   +test_from_wkt_on_invalid_unsupported_option      "rH   geomc                 C   s"   t | }t |}t||  d S r*   )r    to_wktr"   r   )rJ   wktr%   r&   r&   r'   test_from_wkt_all_types   s   

rM   rL   )POINT EMPTYzLINESTRING EMPTYzPOLYGON EMPTYzGEOMETRYCOLLECTION EMPTYc                 C   sD   t | }t | sJ t | sJ t || ks J d S r*   )r    r"   is_geometryallis_emptyrK   )rL   rJ   r&   r&   r'   test_from_wkt_empty   s   
rR   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   
rV   c                  C   r   )Nr   Z*0101000000000000000000F03F000000000000F03Fs*   0101000000000000000000F03F000000000000F03F)r    r!   rT   r   r#   r&   r&   r'   test_from_wkb_hex   s
   


rW   c                   C   r)   r*   )r    rT   r&   r&   r&   r'   test_from_wkb_none   r,   rX   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 )Nr-   r.   r   z]Unexpected EOF parsing WKB|ParseException: Input buffer is smaller than requested object sizerE   z4Points of LinearRing do not form a closed linestring)r2   r3   r4   r    rT   r5   INVALID_WKBresultr&   r&   r'   test_from_wkb_exceptions   s"   

"r\   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 WKBr.   rE   r7   r8   )r2   r9   r:   r    rT   rY   rZ   r&   r&   r'   "test_from_wkb_warn_on_invalid_warn   s   "r]   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 )Nr<   rE   r=   r8   )r>   r?   r@   r    rT   rY   rZ   r&   r&   r'   &test_from_wkb_ignore_on_invalid_ignore   s   



"r^   c                   C   rB   rC   )r2   r3   rG   r    rT   r&   r&   r&   r'   +test_from_wkb_on_invalid_unsupported_option   rI   r_   use_hexFT
byte_orderc                 C   sD   t | t jjkrtd t j| ||d}t |}t||  d S )Nz$Linearrings are not preserved in WKBhexra   )	r    get_type_idGeometryType
LINEARRINGr2   skipto_wkbrT   r   )rJ   r`   ra   wkbr%   r&   r&   r'   test_from_wkb_all_types   s
   

rj   c                 C   sN   t | }t |} t |  sJ t |  sJ t | |ks%J d S r*   )r    rh   rT   rO   rP   rQ   )rJ   ri   r&   r&   r'   test_from_wkb_empty   s
   

rk   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   )Zrounding_precisionrm   zPOINT (1.000 1.000)r    r!   rK   r   r%   r&   r&   r'   test_to_wkt  s   
rp   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)Zold_3dzPOINT (1 1 1)rn   r   r%   r&   r&   r'   test_to_wkt_3D  s   
rt   c                   C   r)   r*   )r    rK   r&   r&   r&   r'   test_to_wkt_none  r,   ru   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      rq   )r2   r3   r4   r    rK   r5   r   r&   r&   r&   r'   test_to_wkt_exceptions#  s   "rw   c                   C   s   t tdks	J d S )NrN   )r    rK   r
   r&   r&   r&   r'   test_to_wkt_point_empty+  s   rx   r   	   r   z5Empty geometries have no dimensionality on GEOS < 3.9)reason)zPOINT Z EMPTYzLINESTRING Z EMPTYzLINEARRING Z EMPTYzPOLYGON Z EMPTYc                 C   s   t t | | ksJ d S r*   )r    rK   r"   )rL   r&   r&   r'   test_to_wkt_empty_z/  s   r|   c                  C   s&   t ttg} t | dsJ d S )Nz(POINT EMPTY, POINT (2 3)))r    geometrycollectionsr
   r   rK   endswith)Z
collectionr&   r&   r'   /test_to_wkt_geometrycollection_with_point_empty@  s   r   z2MULTIPOINT (EMPTY, 2 3) only works for GEOS >= 3.9c                  C   s$   t ttg} t | dksJ d S )NzMULTIPOINT (EMPTY, 2 3))r    multipointsr
   r   rK   rJ   r&   r&   r'   'test_to_wkt_multipoint_with_point_emptyG  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 r*   )r    r   r
   r   r2   r3   rG   rK   r   r&   r&   r'   .test_to_wkt_multipoint_with_point_empty_errorsP  s   "r   c                   C      t tdksJ d S )Nz<POINT (2 3)>)reprr   r&   r&   r&   r'   	test_repr[  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npZaranger   lenr~   )rJ   Zrepresentationr&   r&   r'   test_repr_max_length_  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_emptyg  s   r   c                   C   r   )Nz<POINT Z EMPTY>)r   r   r&   r&   r&   r'   test_repr_point_z_emptyq  s   r   c                  C   s*   t dd} t j| dd}|tksJ d S )Nr   ra   r    r!   rh   rU   ro   r&   r&   r'   test_to_wkby  s   r   c                  C   sD   t dd} t j| ddd}d}d}d}||| d|  ks J d S )Nr   Trb   Z01Z01000000Z000000000000F03Fr   r    r!   rh   )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   rr   ra   r   rs   r&   r&   r'   test_to_wkb_3D  s
   r   c                   C   r)   r*   )r    rh   r&   r&   r&   r'   test_to_wkb_none  r,   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   rv   rq   otherflavor)r2   r3   r4   r    rh   r5   r   rG   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 )NZ201010000200400000000000000000000000000000000000000Z*010100000000000000000000000000000000000000Trl   zPOINT (0 0)r   rb   )rc   include_sridra     )r   ra   rv   rz   z<u4)
r    rT   rK   rh   r!   set_sridr   Zint32Z
frombufferitem)Zewkbri   r%   r   Zpoint_with_sridr[   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   Z01000080extended)ra   r   isoZe9030000)r    rh   r   rc   )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 togetherr.   Tr   )r   r   )r2   r3   rG   r    rh   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   )r2   r3   r   r    rh   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    rh   r   r   isnanstructunpackrP   rJ   r$   r%   Z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 )Nry   )r    rT   rQ   rd   geos_versionZget_coordinate_dimension)ri   expected_typeZexpected_dimrJ   r&   r&   r'   test_from_wkb_point_empty0  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
   rh   rT   get_srid)r$   ri   r%   r&   r&   r'   test_to_wkb_point_empty_sridG  s   
r   c                 C   s"   t | }tt || dd d S )Nr   )Z	tolerance)pickledumpsr   loadsrJ   Zpickledr&   r&   r'   test_pickleN  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_sridT  s   
r   )r   r   r   zGEOS < 3.10.1zgeojson,expected)NNc                 C   s   t | }t|| d S r*   )r    from_geojsonr   )geojsonr$   r%   r&   r&   r'   test_from_geojson[  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 )Nr-   r.   r   zError parsing JSONr0   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"})r2   r3   r4   r    r   r5   r&   r&   r&   r'   test_from_geojson_exceptionso  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 GeoJSONr.   r0   r7   r8   )r2   r9   r:   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 )Nr<   r0   r=   r8   )r>   r?   r@   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 )NrD   r.   rF   r8   )r2   r3   rG   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   rP   Z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 rS   )r2   r3   r4   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 r*   )r2   r3   rG   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    rd   re   rf   r2   rg   r   r   r   )rJ   r   r%   r&   r&   r'   test_geojson_all_types  s
   


r   )lr   r   r   r>   numpyr   r2   r    r   r   r   r   Zshapely.errorsr   Zshapely.testingr   commonr	   r
   r   r   r   packrU   floatZNANZPOINT_NAN_WKBZPOINTZ_NAN_WKBZMULTIPOINT_NAN_WKBZMULTIPOINTZ_NAN_WKBZGEOMETRYCOLLECTION_NAN_WKBZGEOMETRYCOLLECTIONZ_NAN_WKBZNESTED_COLLECTION_NAN_WKBZNESTED_COLLECTIONZ_NAN_WKBrY   r   r   ZGEOJSON_FEATUREZGEOJSON_FEATURECOLECTIONr!   r   r   ZpolygonsZGEOJSON_COLLECTION_EXPECTEDr(   r+   r6   r;   rA   rH   markZparametrizerM   rR   rV   rW   rX   r\   r]   r^   r_   rj   rk   rp   rt   ru   rw   rx   Zskipifr   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r}   r   Zxfailr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r&   r'   <module>   s   	'+  		


	
	



	



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