o
    i`                     @   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               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 )Nr   POINT (1 1)s   POINT (1 1))shapelypointsfrom_wktr   expectedactual r,   P/var/www/edux/Edux_v2/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_nonef      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_exceptionsk   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_invalidx   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 EMPTYz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   
rY   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   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} | 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"   

"rd   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[   ra   rb   r,   r,   r-   "test_from_wkb_warn_on_invalid_warn   s   "re   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[   ra   rb   r,   r,   r-   &test_from_wkb_ignore_on_invalid_ignore   s   



"rf   c                   C   rI   rJ   )r8   r9   rN   r&   r[   r,   r,   r,   r-   +test_from_wkb_on_invalid_unsupported_option   rP   rg   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hexri   )	r&   get_type_idGeometryType
LINEARRINGr8   skipto_wkbr[   r   )rQ   rh   ri   wkbr+   r,   r,   r-   test_from_wkb_all_types   s
   

rr   c                 C   sN   t | }t |} t |  sJ t |  sJ t | |ks%J d S r0   )r&   rp   r[   rV   rW   rX   )rQ   rq   r,   r,   r-   test_from_wkb_empty   s
   

rs   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_precisionru   zPOINT (1.000 1.000)r&   r'   rR   r   r+   r,   r,   r-   test_to_wkt  s   
ry   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)rw   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   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      rz   )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_empty+  s   r   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 r0   )r&   rR   r(   )rS   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   rR   endswith)
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   rR   rQ   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 r0   )r&   r   r
   r   r8   r9   rN   rR   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nparanger   lenr   )rQ   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   ri   r&   r'   rp   r\   rx   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   Trj   0101000000000000000000F03Fr   r&   r'   rp   )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{   ri   r   r}   r,   r,   r-   test_to_wkb_3D  s
   r   c                   C   r/   r0   )r&   rp   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   rz   otherflavor)r8   r9   r:   r&   rp   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*010100000000000000000000000000000000000000Trt   zPOINT (0 0)r   rj   )rk   include_sridri     )r   ri   r   r   z<u4)
r&   r[   rR   rp   r'   set_sridr   int32
frombufferitem)ewkbrq   r+   r   point_with_sridrc   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)ri   r   isoe9030000)r&   rp   r   rk   )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&   rp   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&   rp   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&   rp   r   r   isnanstructunpackrW   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[   rX   rl   geos_versionget_coordinate_dimension)rq   expected_typeexpected_dimrQ   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
   rp   r[   get_srid)r*   rq   r+   r,   r,   r-   test_to_wkb_point_empty_sridG  s   
r   c                 C   s"   t | }tt || dd d S )Nr   )	tolerance)pickledumpsr   loadsrQ   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 r0   )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 )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_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 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   rW   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 rZ   )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&   rl   rm   rn   r8   ro   r   r   r   )rQ   r   r+   r,   r,   r-   test_geojson_all_types  s
   


r   )lr   r   r   rE   numpyr   r8   r&   r   r   r   r   shapely.errorsr   shapely.testingr   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_WKBra   r   r   GEOJSON_FEATUREGEOJSON_FEATURECOLECTIONr'   r   r   polygonsGEOJSON_COLLECTION_EXPECTEDr.   r1   r<   rB   rH   rO   markparametrizerT   rY   r]   r_   r`   rd   re   rf   rg   rr   rs   ry   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   	'+  		


	
	



	



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