o
    h                     @   s  d dl Z d dlZd dlZd dlZd dlm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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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Z*dZ+e*e+B Z,d	Z-d
Z.e-e. Z/e0dddddZ1e0de2dZ3e0ddde3d  Z4e0ddde*B e3d  Z5e0ddde+B e3d  Z6e0ddde,B e3d  Z7e0dddde4 Z8e0ddde*B de5 Z9e0ddde+B de6 Z:e0ddde,B de7 Z;e0dddde4 Z<e0ddde*B de5 Z=e0ddde+B de6 Z>e0ddde,B de7 Z?e0dddde8 Z@e0ddde*B de9 ZAe0ddde+B de: ZBe0ddde,B de; ZCdZDe jEdddgdddZFe jEddddgdddidddZGe jEd 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ZHe	IddZJe	Id!d"ge	Kd!d&gd'dgd(d&gd)dgge	Ld,d&gd-d&gd-dgd,dgd,d&gggZMd1d2 ZNd3d4 ZOejPQd5dd6eRd7fd8d9d:eSd;fd9d6ed;fd9d<eTd=fd>d?d6ed@fd?d:eSd@fdAdBd:eSdCfdDdEd6edFfdEd:eSdFfgdGdH ZUejPjVe	jWdIk dJdKejPQdLg dMdNdO ZXejPjVe	jWdIkdPdKdQdR ZYejPQdSedTdU ZZejPQdVdWdXdY Z[ejPQdVdZd[d\ Z\d]d^ Z]d_d` Z^dadb Z_ejPQdcdd6eRd7fd8d9d6eddfd9d:eSddfd9d<eTd=fdedfd6edgfdfd:eSdgfeDdhddfeDd6edifeDd:eSdifgdjdk Z`ejPjVe	jWdIk dJdKejPQdldmdneDdofgdpdq ZaejPjVe	jWdIkdPdKdrds ZbejPQdSeejPQdtdudvgejPQdwd dgdxdy ZcejPQdSeejPQdtdudvgejPQdwd dgdzd{ ZdejPjVe	jWd|k d}dKejPQdSeejPQdtdudvgejPQdwd dgd~d ZeejPjVe	jWd|k d}dKejPQdSeejPQdtdudvgejPQdwd dgdd ZfejPQdSe e e e
 fdd ZgejPQdddd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd ZpejPQdVg ddd Zqdd Zrdd ZsejPQdSedd ed dgdd ZtejPQdSedd ed dgdd ZuejPQdSed d deddgeg deg deg dg dgeddgeeddgeddggee)eg dge
e'ed d dge
e
ed d dgged d ejvfdged d ejvfdddge
ed d ed d dggdd Zwdd Zxdd Zydd ZzejPjVe	jWd|k d}dKdd Z{dd Z|dd Z}ejPjVe	jWd|k d}dKdd Z~dd Zdd Zdd ZddÄ Zddń ZddǄ ZddɄ Zdd˄ Zdd̈́ ZejPjVe	jWdk ddKddф ZejPjVe	jWd|k d}dKddӄ ZejPjVe	jWdk ddKddՄ ZejPjVe	jWdkddKddׄ ZejPQdejee4ddڍejee4ddڍejee4ddڍejee4ddڍeje!e8ddڍeje#e8ddڍeje"e8ddڍeje$e8ddڍeje	ege<ddڍeje	ege<ddڍeje	ege<ddڍeje	ege<ddڍeje	e!ge@ddڍeje	e#ge@ddڍeje	e"ge@ddڍeje	e$ge@ddڍgdd ZejPQdejee5ddڍejee5ddڍeje#e9ddڍeje$e9ddڍeje	ege=ddڍeje	ege=ddڍeje	e#geAddڍeje	e$geAddڍgdd ZejPjVe	jWd|k d}dKejPQdejee6ddڍeje"e:ddڍeje	ege>ddڍeje	e"geBddڍgdd ZejPjVe	jWd|k d}dKejPQdejee7ddڍeje$e;ddڍeje	ege?ddڍeje	e$geCddڍgdd ZejPQdejee4ddڍeje!e8ddڍeje	ege<ddڍeje	e!ge@ddڍgdd ZejPQdeje4d dddڍeje5d dddڍeje8ddddڍeje9ddddڍeje<ddddڍeje=ddddڍeje@ddddڍejeAddddڍgdd ZejPjVe	jWd|k d}dKejPQdeje6d d dڍeje:dddڍeje>dddڍejeBdddڍgdd ZejPjVe	jWd|k d}dKejPQdeje7d ddڍeje;dddڍeje?dddڍejeCdd	dڍgd
d Zdd ZejPQdSee'ef dd ZejPQdSedd ZejPjVe	jWd|k d}dKejPQdSedd ZejPjVe	jWd|k d}dKejPQdSedd ZejPQdSee'ef dd ZejPjVe	jWdk ddKejPQdejeFeJddڍejeGeJddڍejeHe	eMddڍejeFgd eJgd ddڍejddddڍejeFdgeJdgd dڍgd!d" ZejPjVe	jWdk ddKd#d$ ZejPjVe	jWdk ddKd%d& ZejPjVe	jWdk ddKd'd( ZejPjVe	jWdk ddKd)d* ZejPjVe	jWdk d+dKejPQd,ejeFeJddڍejeFgd eJgd ddڍejddddڍejeFdgeJdgd dڍgd-d. ZejPjVe	jWdk d+dKejPQd/g d0d1d2 ZejPjVe	jWdk d+dKd3d4 ZejPjVe	jWd5k d6dKejPQdSee	ee%ge	ee%ge	e	ege%ggd7d8 ZejPjVe	jWdk ddKejPQdSed9d: ZdS (;      N)nullcontext)	GeometryCollectionGEOSException
LinearRing
LineStringMultiLineString
MultiPointMultiPolygonPointPolygon)UnsupportedGEOSVersionError)assert_geometries_equal)	all_typesall_types_mall_types_zall_types_zmempty_pointempty_point_mempty_point_zempty_point_zm)equal_geometries_abnormally_yield_unequalmulti_point_emptymulti_point_empty_mmulti_point_empty_zmulti_point_empty_zmpointpoint_mpoint_zpoint_zm	polygon_zl        i   @  i  <BI2d         ?z<dnanz<BI         z<BII   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@)prop1r3   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 rA   P/var/www/html/scripts/venv/lib/python3.10/site-packages/shapely/tests/test_io.pytest_from_wkt   s
   


rC   c                   C      t d d u s	J d S N)r;   r=   rA   rA   rA   rB   test_from_wkt_none      rF   zwkt, on_invalid, error, messageraise!Expected bytes or string, got int) ignoreNNrJ   warnz+Expected word but encountered end of streamunsupported_optionnot a valid option)LINESTRING (0 0)rK   NNrO   zmust contain 0 or >1 elements)NOT A WKT STRINGrK   NNrP   zUnknown type: 'NOT')POLYGON ((0 0, 0 0))rK   NNrQ   zInvalid number of pointsc                 C      |dkrt j||d}n|dkrt j||d}n|dkr t }nt j||d}| tj| |d}|d u s7J W d    d S 1 sBw   Y  d S NrL   matchrH   rK   
on_invalid)pytestwarnsraisesr   r;   r=   )wktrW   errormessagehandlerresultrA   rA   rB   test_from_wkt_on_invalid   s   "r`   )r&      r   z/on_invalid='fix' not supported with GEOS < 3.11)reasonzwkt, expected_wkt)	)rJ   N)rO   N)rP   N)rQ   N)zPOLYGON ((0 0, 1 1, 0 1))zPOLYGON ((0 0, 1 1, 0 1, 0 0)))zPOLYGON ((0 0, 1 1))zPOLYGON ((0 0, 1 1, 0 0)))z3MULTIPOLYGON (((5 5, 6 6, 6 5, 5 5)), ((0 0, 0 0)))N)z3MULTIPOLYGON (((5 5, 6 6, 6 5, 5 5)), ((0 0, 1 1)))z8MULTIPOLYGON (((5 5, 6 6, 6 5, 5 5)), ((0 0, 1 1, 0 0))))zIGEOMETRYCOLLECTION (POLYGON ((5 5, 6 6, 6 5, 5 5)), POLYGON ((0 0, 0 0)))Nc                 C   $   t j| dd}t ||ksJ dS z[Tests for on_invalid="fix".

    Geometries that cannot be fixed are returned as None.
    fixrV   N)r;   r=   to_wkt)r[   expected_wktgeomrA   rA   rB   test_from_wkt_on_invalid_fix   s   ri   z/on_invalid='fix' is supported with GEOS >= 3.11c                  C   B   t jtdd tjddd} W d   dS 1 sw   Y  dS )/on_invalid="fix" not supported with GEOS < 3.110on_invalid='fix' only supported for GEOS >= 3.11rT   rJ   re   rV   N)rX   rZ   
ValueErrorr;   r=   _rA   rA   rB   -test_from_wkt_on_invalid_fix_unsupported_geos   
   "rp   rh   c                 C   sd   t | }t |}t| r+tt t||  W d    d S 1 s$w   Y  d S t||  d S rE   )r;   rf   r=   r   rX   rZ   AssertionErrorr   )rh   r[   r@   rA   rA   rB   test_from_wkt_all_types   s   

"rs   r[   )POINT EMPTYzLINESTRING EMPTYzPOLYGON EMPTYzGEOMETRYCOLLECTION EMPTYc                 C   sD   t | }t | sJ t | sJ t || ks J d S rE   )r;   r=   is_geometryallis_emptyrf   )r[   rh   rA   rA   rB   test_from_wkt_empty   s   
rx   )zCIRCULARSTRING(1 3,2 4,3 1)z4COMPOUNDCURVE(CIRCULARSTRING(1 3,2 4,3 1),(3 1,0 0))zCURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0,2 1,2 3,4 3),(4 3,4 5,1 4,0 0)),CIRCULARSTRING(1.7 1,1.4 0.4,1.6 0.4,1.6 0.5,1.7 1))zhMULTICURVE((0 0,5 5),COMPOUNDCURVE((-1 -1,0 0),CIRCULARSTRING(0 0,1 1,2 0)),CIRCULARSTRING(4 0,4 4,8 4))zMULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0,4 0,4 4,0 4,0 0),(1 1,3 3,3 1,1 1)),((10 10,14 12,11 10,10 10),(11 11,11.5 11,11 11.5,11 11)))c                 C      t jdkr$tjtdd t |  W d    d S 1 sw   Y  d S tjt jjdd t |  W d    d S 1 s>w   Y  d S )Nr&      r   4Nonlinear geometry types are not currently supportedrT   zUnknown type)r;   geos_versionrX   rZ   NotImplementedErrorr=   errorsr   r[   rA   rA   rB   #test_from_wkt_nonlinear_unsupported   s   
""r   c                  C   s$   t dd} t t}t||  d S Nr"   )r;   r<   from_wkbPOINT11_WKBr   r>   rA   rA   rB   test_from_wkb  s   
r   c                  C   r9   )Nr"   *0101000000000000000000F03F000000000000F03Fs*   0101000000000000000000F03F000000000000F03F)r;   r<   r   r   r>   rA   rA   rB   test_from_wkb_hex  s
   


r   c                   C   rD   rE   )r;   r   rA   rA   rA   rB   test_from_wkb_none$  rG   r   zwkb, on_invalid, error, messagezUnexpected EOF parsing WKB)       rK   NNr   ParseExceptionrK   z4Points of LinearRing do not form a closed linestringc                 C   rR   rS   )rX   rY   rZ   r   r;   r   )wkbrW   r\   r]   r^   r_   rA   rA   rB   test_from_wkb_on_invalid)  s   "r   zwkb, expected_wkt)    N)r   Nz[POLYGON ((1421568.7761 1924750.2852, 1421564.1314 1924752.2408, 1421568.7761 1924750.2852))c                 C   rc   rd   )r;   r   rf   )r   rg   rh   rA   rA   rB   test_from_wkb_on_invalid_fixR  s   r   c                  C   rj   )rk   rl   rT   r   re   rV   N)rX   rZ   rm   r;   r   rn   rA   rA   rB   -test_from_wkb_on_invalid_fix_unsupported_geosj  rq   r   use_hexFT
byte_orderc                 C   D   t | t jjkrtd t j| ||d}t |}t||  d S Nz$Linearrings are not preserved in WKBhexr   	r;   get_type_idGeometryType
LINEARRINGrX   skipto_wkbr   r   rh   r   r   r   r@   rA   rA   rB   test_from_wkb_all_typesv  
   

r   c                 C   r   r   r   r   rA   rA   rB   test_from_wkb_all_types_z  r   r   r&      r   z,M coordinates not supported with GEOS < 3.12c                 C   r   r   r   r   rA   rA   rB   test_from_wkb_all_types_m  
   

r   c                 C   r   r   r   r   rA   rA   rB   test_from_wkb_all_types_zm  r   r   c                 C   sN   t | }t |} t |  sJ t |  sJ t | |ks%J d S rE   )r;   r   r   ru   rv   rw   )rh   r   rA   rA   rB   test_from_wkb_empty  s
   

r   r   )r010800000003000000000000000000F03F0000000000000840000000000000004000000000000010400000000000000840000000000000F03F01090000200E16000002000000010800000003000000000000000000F03F0000000000000840000000000000004000000000000010400000000000000840000000000000F03F0102000000020000000000000000000840000000000000F03F00000000000000000000000000000000"  010A0000200E1600000200000001090000000200000001080000000500000000000000000000000000000000000000000000000000004000000000000000000000000000000040000000000000F03F00000000000000400000000000000840000000000000104000000000000008400102000000040000000000000000001040000000000000084000000000000010400000000000001440000000000000F03F000000000000104000000000000000000000000000000000010800000005000000333333333333FB3F000000000000F03F666666666666F63F9A9999999999D93F9A9999999999F93F9A9999999999D93F9A9999999999F93F000000000000E03F333333333333FB3F000000000000F03F  010B000000030000000102000000020000000000000000000000000000000000000000000000000014400000000000001440010900000002000000010200000002000000000000000000F0BF000000000000F0BF0000000000000000000000000000000001080000000300000000000000000000000000000000000000000000000000F03F000000000000F03F00000000000000400000000000000000010800000003000000000000000000104000000000000000000000000000001040000000000000104000000000000020400000000000001040  010C00000002000000010A000000020000000108000000050000000000000000000000000000000000000000000000000010400000000000000000000000000000104000000000000010400000000000000000000000000000104000000000000000000000000000000000010200000004000000000000000000F03F000000000000F03F000000000000084000000000000008400000000000000840000000000000F03F000000000000F03F000000000000F03F01030000000200000004000000000000000000244000000000000024400000000000002C40000000000000284000000000000026400000000000002440000000000000244000000000000024400400000000000000000026400000000000002640000000000000274000000000000026400000000000002640000000000000274000000000000026400000000000002640c                 C   ry   )Nrz   r|   rT   zUnknown WKB type)r;   r}   rX   rZ   r~   r   r   r   )r   rA   rA   rB   #test_from_wkb_nonlinear_unsupported  s   
""r   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_precisionr   zPOINT (1.000 1.000))r;   r<   rf   r   r@   rA   rA   rB   test_to_wkt  s   
r   c                  C   s   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s1J t jd
krAt j| dddksCJ d S d S )Nr"   r%   r&   POINT Z (1 2 3)output_dimensionPOINT (1 2)Told_3dPOINT (1 2 3)r   r'   )r;   r<   rf   r}   r   rA   rA   rB   test_to_wkt_z  s   
r   c                  C   s   t d} t j| dddksJ t jdk r6t | dksJ t j| dddks)J t j| dd	d
ks4J d S t | dks?J t j| dddksJJ t j| dddksUJ t j| dd	dks`J d S )NzPOINT M (1 2 4)r%   r   r   r   zPOINT Z (1 2 4)r&   Tr   zPOINT (1 2 4)r'   r;   r=   rf   r}   r   rA   rA   rB   test_to_wkt_m  s   

r   c                  C   s   t d} t j| dddksJ t j| dddksJ t jdk r6t | dks)J t j| dd	d
ks4J d S t | dks?J t j| dddksJJ t j| dd	dksUJ d S )NzPOINT ZM (1 2 3 4)r%   r   r   r&   r   r   Tr   r   r'   zPOINT (1 2 3 4)r   r   rA   rA   rB   test_to_wkt_zm  s   

r   c                   C   rD   rE   )r;   rf   rA   rA   rA   rB   test_to_wkt_none  rG   r   c                  C   s,   g d} t | }tt || ksJ d S )N)POINT Z EMPTYNPOLYGON Z EMPTY)r;   r=   listrf   )	empty_wktempty_geomsrA   rA   rB   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   )rX   rZ   	TypeErrorr;   rf   r   r   rA   rA   rA   rB   test_to_wkt_exceptions  s   "r   c                   C   s   t tdks	J d S )Nrt   )r;   rf   r   rA   rA   rA   rB   test_to_wkt_point_empty!  s   r   )r   zLINESTRING Z EMPTYzLINEARRING Z EMPTYr   c                 C   s   t t | | ksJ d S rE   )r;   rf   r=   r   rA   rA   rB   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   rf   endswith)
collectionrA   rA   rB   /test_to_wkt_geometrycollection_with_point_empty2  s   r   c                  C   s8   t ttg} t jdkrd}nd}t | |ksJ d S )Nr   zMULTIPOINT (EMPTY, (2 3))zMULTIPOINT (EMPTY, 2 3))r;   multipointsr   r   r}   rf   )rh   r?   rA   rA   rB   'test_to_wkt_multipoint_with_point_empty9  s
   
r   g}Ô%ITc                 C   s   t |  dt| vsJ d S )NException in WKT writer)r;   rf   reprrh   rA   rA   rB   test_to_wkt_large_float_okC  s   
r   \nTc                 C   st   t jdkr| t t | sJ d S tjtdd t |  W d    n1 s+w   Y  dt| v s8J d S )Nrz   z(WKT output of coordinates greater than.*rT   r   )	r;   r}   equalsr=   rf   rX   rZ   rm   r   r   rA   rA   rB   test_to_wkt_large_floatJ  s   
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   c              
   C   sR   zt |  W n ty" } zt|dsJ W Y d }~nd }~ww t|  d S )Nz&WKT output of coordinates greater than)r;   rf   rm   str
startswithr   )rh   erA   rA   rB   #test_to_wkt_large_float_3d_no_crashX  s   r   c                   C   s"   t jtddddddksJ d S )Nr   r   r%   r   POINT (0 0))r;   rf   r
   rA   rA   rA   rB   test_to_wkt_large_float_skip_z|  s   "r   c                   C   s"   t jtdddddsJ d S )Nr   r   Fr   zPOINT ()r;   rf   r
   r   rA   rA   rA   rB   test_to_wkt_large_float_no_trim  s   "r   c                   C   $   t tdksJ t tdksJ d S )Nz<POINT (2 3)>z<POINT Z (2 3 4)>)r   r   r   rA   rA   rA   rB   	test_repr  s   r   c                   C   r   )Nz<POINT M (2 3 5)>z<POINT ZM (2 3 4 5)>)r   r   r   rA   rA   rA   rB   test_repr_m     r   c                  C   sB   t tdtd} t| }t|dksJ |dsJ d S )Nr    P   z...>)r;   linestringsnparanger   lenr   )rh   representationrA   rA   rB   test_repr_max_length  s   r   c                   C   s   t tdksJ d S )Nz<POINT Z EMPTY>)r   r   rA   rA   rA   rB   test_repr_point_z_empty  s   r   c                   C   r   )Nz<POINT M EMPTY>z<POINT ZM EMPTY>)r   r   r   rA   rA   rA   rB   test_repr_point_m_empty  r   r   c                  C   s*   t dd} t j| dd}|tksJ d S )Nr"   r   )r;   r<   r   r   r   rA   rA   rB   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"   Tr   0101000000000000000000F03Fr%   r;   r<   r   )r   r@   le
point_typecoordrA   rA   rB   test_to_wkb_hex  s   r   c                  C   s   t ddd} tddddd}tdddtB ddd}t j| dd	|ks'J t j| ddd
|ks3J t j| ddd
|ks?J t jdkrPt j| ddd
|ksRJ d S d S )Nr"   r%   r&   r!   r#          @<BI3d      @r   r   r   r   r'   )r;   r<   structpackEWKBZr   r}   )r   expected_wkbexpected_wkb_zrA   rA   rB   test_to_wkb_z  s   
r  c               
   C   s   t tdddtB ddd} tddddd}tdddtB ddd}t jdk r+|}t j| dd|ks6J t j| d	dd
|ksBJ t j| ddd
|ksNJ t jdkr_t j| ddd
|ksaJ d S d S )Nr   r"   r#   r         @r!   r   r   r%   r   r&   r'   )r;   r   r   r   EWKBMr}   r   )r   r   expected_wkb_mrA   rA   rB   test_to_wkb_m  s   

r  c                  C   s   t tdddtB dddd} tddddd}tdddtB ddd}tdddtB dddd}t jd	k r9|}t j| dd
|ksDJ t j| ddd|ksPJ t j| ddd|ks\J t jd	krmt j| ddd|ksoJ d S d S )Nz<BI4dr"   r#   r   r   r  r!   r   r   r   r%   r   r&   r'   )r;   r   r   r   EWKBZMr   r}   r   )r   r   r   expected_wkb_zmrA   rA   rB   test_to_wkb_zm  s    

r  c                   C   rD   rE   )r;   r   rA   rA   rA   rB   test_to_wkb_none  rG   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)rX   rZ   r   r;   r   r   r   rm   rA   rA   rA   rB   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   rA   rA   rB   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*010100000000000000000000000000000000000000Tr   r   r"   r   )r   include_sridr     )r  r   r   	   z<u4)
r;   r   rf   r   r<   set_sridr   int32
frombufferitem)ewkbr   r@   r   point_with_sridr_   rA   rA   rB   test_to_wkb_srid	  s   
$r  )r&   r   r   zGEOS < 3.10.0c                  C   s   t jtdd} |  dd tddtB  ksJ t jtddd} |  dd tddtB  ks7J t jtddd} |  dd tddtB  ksSJ d S )	Nr"   r   r%   r   <Iextendedr   r  iso)r;   r   r   r   r   r   r   ISOWKBZr@   rA   rA   rB   test_to_wkb_flavor  s   ((,r%  c                  C   s   t jtdd} |  dd tddtB  ksJ t jtddd} |  dd tddtB  ks7J t jtdd} |  dd tddt	B  ksRJ t jtddd} |  dd tddt
B  ksnJ d S )Nr"   r   r%   r   r  r"  r!  )r;   r   r   r   r   r   r  ISOWKBMr   r  ISOWKBZMr$  rA   rA   rB   test_to_wkb_m_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 togetherrT   Tr"  )r  r  )rX   rZ   rm   r;   r   r   rA   rA   rA   rB   test_to_wkb_flavor_srid7  s   "r)  c                   C   s>   t t tjtdd W d    d S 1 sw   Y  d S )Nr"  r  )rX   rZ   r   r;   r   r   rA   rA   rA   rB   #test_to_wkb_flavor_unsupported_geos=  s   "r*  zgeom,expectedrt   )idr   zPOINT M EMPTYzPOINT ZM EMPTYzMULTIPOINT EMPTYzMULTIPOINT Z EMPTYzMULTIPOINT M EMPTYzMULTIPOINT ZM EMPTYz GEOMETRYCOLLECTION (POINT EMPTY)z"GEOMETRYCOLLECTION (POINT Z EMPTY)z"GEOMETRYCOLLECTION (POINT M EMPTY)z#GEOMETRYCOLLECTION (POINT ZM EMPTY)z%GEOMETRYCOLLECTION (MULTIPOINT EMPTY)z'GEOMETRYCOLLECTION (MULTIPOINT Z EMPTY)z'GEOMETRYCOLLECTION (MULTIPOINT M EMPTY)z(GEOMETRYCOLLECTION (MULTIPOINT ZM EMPTY)c                 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      <2dr;   r   r   r   isnanr   unpackrv   rh   r?   r@   coordinate_lengthheader_lengthrA   rA   rB   test_to_wkb_point_empty_2dC  s   F&r5  c                 C   r,  Nr&   r"   r      z<3dr/  r2  rA   rA   rB   test_to_wkb_point_empty_z  s   &&r8  c                 C   r,  r6  r/  r2  rA   rA   rB   test_to_wkb_point_empty_m     &r9  c                 C   r,  )Nr'   r"   r       z<4dr/  r2  rA   rA   rB   test_to_wkb_point_empty_zm  r:  r<  c                 C   r,  )Nr&   r"   r   r-  r.  r/  r2  rA   rA   rB   'test_to_wkb_point_empty_2d_output_dim_3  s   &r=  zwkb,expected_type,expected_dim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_WKBc                 C   s@   t | }t |sJ t ||ksJ t ||ksJ d S rE   )r;   r   rw   r   get_coordinate_dimension)r   expected_typeexpected_dimrh   rA   rA   rB   test_from_wkb_point_empty.  s   
rI  zwkb,expected_typePOINTM_NAN_WKBMULTIPOINTM_NAN_WKBGEOMETRYCOLLECTIONM_NAN_WKBNESTED_COLLECTIONM_NAN_WKBc                 C   s\   t | }t |sJ t ||ksJ t |dksJ t |r%J t |s,J d S )Nr&   r;   r   rw   r   rF  has_zhas_mr   rG  rh   rA   rA   rB   test_from_wkb_point_empty_mE  s   
rR  POINTZM_NAN_WKBMULTIPOINTZM_NAN_WKBGEOMETRYCOLLECTIONZM_NAN_WKBNESTED_COLLECTIONZM_NAN_WKBc                 C   s\   t | }t |sJ t ||ksJ t |dksJ t |s%J t |s,J d S )Nr'   rN  rQ  rA   rA   rB   test_from_wkb_point_empty_zm\  s   
rW  c                  C   s:   t td} t j| dd}t |}t |dksJ d S )Ni  T)r  )r;   r  r   r   r   get_srid)r?   r   r@   rA   rA   rB   test_to_wkb_point_empty_sridu  s   
rY  c                 C   s"   t | }tt || dd d S Nr   	tolerance)pickledumpsr   loadsrh   pickledrA   rA   rB   test_pickle|  s   
rb  c                 C   sN   t | }t |}t|| dd |js|jsJ tjdkr#|jr%J d S d S )Nr   r[  r   )	r]  r^  r_  r   rw   rO  r;   r}   rP  rh   ra  r@   rA   rA   rB   test_pickle_z  s   




rd  c                 C   sD   t | }t |}t|| dd |jrJ |js|js J d S d S rZ  )r]  r^  r_  r   rO  rw   rP  rc  rA   rA   rB   test_pickle_m  s   



re  c                 C   sD   t | }t |}t|| dd |js|jsJ |js J d S d S rZ  )r]  r^  r_  r   rw   rO  rP  rc  rA   rA   rB   test_pickle_zm  s   



rf  c                 C   s2   t | d} t| }t t|dksJ d S )Nr  )r;   r  r]  r^  rX  r_  r`  rA   rA   rB   test_pickle_with_srid  s   
rg  )r&   r   r"   zGEOS < 3.10.1zgeojson,expectedGEOJSON_GEOMETRYGEOJSON_FEATUREGEOJSON_FEATURECOLECTIONGEOJSON_GEOMETRYx2NoneGEOJSON_GEOMETRY_Nonec                 C   s   t | }t|| d S rE   )r;   from_geojsonr   )geojsonr?   r@   rA   rA   rB   test_from_geojson  s   
rp  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 )NrI   rT   r"   zError parsing JSONrJ   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"})rX   rZ   r   r;   rn  r   rA   rA   rA   rB   test_from_geojson_exceptions  s$   "rq  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 GeoJSONrT   rJ   rL   rV   )rX   rY   Warningr;   rn  rA   rA   rA   rB   !test_from_geojson_warn_on_invalid  s   "rs  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\   rJ   rK   rV   )warningscatch_warningssimplefilterr;   rn  rA   rA   rA   rB   #test_from_geojson_ignore_on_invalid  s   

"rw  c                   C   sB   t jtdd tjtdd W d    d S 1 sw   Y  d S )NrN   rT   rM   rV   )rX   rZ   rm   r;   rn  rh  rA   rA   rA   rB   /test_from_geojson_on_invalid_unsupported_option  s   "rx  zGEOS < 3.10zexpected,geometryc                 C   s*   t j| dd}t|t|ksJ d S )Nr'   r,   )r;   
to_geojsonr   rv   asarray)r0   r?   r@   rA   rA   rB   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_  rh  r;   ry  GEOJSON_GEOMETRY_EXPECTED)r-   r~  r?   r@   rA   rA   rB   test_to_geojson_indent  s   r  c                   C   s:   t t td W d    d S 1 sw   Y  d S r   )rX   rZ   r   r;   ry  rA   rA   rA   rB   test_to_geojson_exceptions  s   "r  r&   r   r%   zGEOS < 3.10.2c                 C   s   |  tt| sJ d S rE   )r   r;   rn  ry  r   rA   rA   rB   test_to_geojson_point_empty#  s   r  c                 C   s   t | }|t jjkrtd n| jr$|t jjkr$t jdk r$td t 	| }t 
|}|jr3J t | |g}| rF| sDJ d S t||  d S )Nz(Linearrings are not preserved in GeoJSONr  zGEOS < 3.10.2 with POINT EMPTY)r;   r   r   r   rX   r   rw   POINTr}   ry  rn  rO  anyrv   r   )rh   type_idro  r@   geoms_are_emptyrA   rA   rB   test_geojson_all_types3  s   





r  )r  r]  r   rt  
contextlibr   numpyr   rX   r;   r   r   r   r   r   r   r	   r
   r   shapely.errorsr   shapely.testingr   shapely.tests.commonr   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   floatNANr>  r?  rJ  rS  r@  rA  rK  rT  rB  rC  rL  rU  rD  rE  rM  rV  INVALID_WKBr^  rh  ri  rj  r<   r  r   polygonsGEOJSON_COLLECTION_EXPECTEDrC   rF   markparametrizer   rr  rm   r`   skipifr}   ri   rp   rs   rx   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  r  r  r	  r  r  r  r%  r(  r)  r*  paramr   r5  r8  r9  r<  r=  rI  rR  rW  rY  rb  rd  re  rf  rg  rp  rq  rs  rw  rx  r{  r  r  r   r  r  rA   rA   rA   rB   <module>   s   ,P	'+  		









	




	







	

	

	











	













E




%









	


			