o
    Jf                     @   s>  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 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 ejddd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zedd  Zd!d" Zej j!e
d#k d$d%d&Z"e"d'd( Z#ej j!e
d)k oe
d#k oej$d*k d+d,d-d. Z%dS )/    N)wktPoint)geos_version)shapely20_todo)dumpdumpsloadloadsmodule)scopec                   C   s
   t ddS )N333333?333333@r    r   r   i/home/deployuser/azure_apps/autowriter/venv/lib/python3.10/site-packages/shapely/tests/legacy/test_wkb.py
some_point   s   
r   c                 C   s   t |  dS )Nzutf-8)binasciib2a_hexupperdecodevaluer   r   r   bin2hex   s   r   c                 C   s
   t | S N)r   a2b_hexr   r   r   r   hex2bin   s   
r   c                 C   s   | r| d dv rt d| r| d dvrt dt| d t|dd \}dd	d
| }d	ddtj }||kr<|S ttj||  ddd| gt||  t|dd R  S )ab  Re-pack a hex WKB value to native endianness if needed

    This routine does not understand WKB format, so it must be provided a
    struct module format string, without initial indicator character ("@=<>!"),
    which will be interpreted as big- or little-endian with standard sizes
    depending on the endian flag in the first byte of the value.
    r   z@=<>!z1Initial indicator character, one of @=<>!, in fmtcbBzMissing endian flag in fmtN   ><)r      )littlebigr    )r   r   )
ValueErrorstructunpackr   sys	byteorderr   pack)fmtr   	hexendianhexordersysorderr   r   r   	hostorder   s"   	r-   c                 C   sD   t | }t|tddksJ t | dd}t|tddks J d S )NBIdd*0101000000333333333333F33F3333333333330B40i  sridBIIdd20101000020E6100000333333333333F33F3333333333330B40r   r   r-   r   resultr   r   r   test_dumps_srid9   s   
r7   c                 C   sZ   t | }t|tddksJ t | dd}t|dksJ t | dd}t|dks+J d S )Nr.   r/   F
big_endianT*00000000013FF3333333333333400B333333333333r4   r5   r   r   r   test_dumps_endiannessD   s   
r;   c                 C   s"   t | dd}|tddksJ d S )NThexr.   r/   )r   r-   r5   r   r   r   test_dumps_hexO   s   r>   c                  C   s   t td} t| tsJ | jd d  dgksJ t| }t|tddks(J t| dd}t|tddks9J t| dd	}t|tdd
ksJJ d S )Nr3   )r   r   r.   r/   T)include_sridr2   i4l  r0   20101000020346C0000333333333333F33F3333333333330B40)r
   r   
isinstancer   coordsr   r   r-   )geomr6   r   r   r   test_loads_sridT   s   

rD   c                 C   s    t t| dddd| ksJ d S )NTr<   )r
   r   )r   r   r   r   test_loads_hexj   s    rE   c                 C   s   | d}t|d}t| | W d    n1 sw   Y  t|d}t|}W d    n1 s3w   Y  | |ks>J d S )Ntest.wkbwbrbjoinopenr   r	   r   tmpdirfilefile_pointerrestoredr   r   r   test_dump_load_binaryn   s   

rQ   c                 C   s   | d}t|d}t| |dd W d    n1 sw   Y  t|d}t|dd}W d    n1 s7w   Y  | |ksBJ d S )NrF   wTr<   rrI   rL   r   r   r   test_dump_load_hexx   s   
rT   c              	   C   s   | d}t|d}t| |dd W d   n1 sw   Y  tt* t|d}t| W d   n1 s;w   Y  W d   dS W d   dS 1 sSw   Y  dS )z<Asserts that reading a binary file as text (hex mode) fails.rF   rR   Tr<   NrH   )rJ   rK   r   pytestraises	TypeErrorr	   )r   rM   rN   rO   r   r   r   test_dump_hex_load_binary   s   

"rX   c              	   C   s  | d}t|d}t| | W d   n1 sw   Y  tjdkrGt|d}t|dd}W d   n1 s:w   Y  | |ksEJ dS ttt	f, t|d}t|dd W d   n1 sew   Y  W d   dS W d   dS 1 s}w   Y  dS )z<Asserts that reading a text file (hex mode) as binary fails.rF   rG   Nwin32rS   Tr<   )
rJ   rK   r   r&   platformr	   rU   rV   UnicodeEncodeErrorUnicodeDecodeErrorrL   r   r   r   test_dump_binary_load_hex   s"   

"r]   )      r   zGEOS >= 3.8.0 is requiredT)reasonstrictc                  C   sh   t d} t| dd}|d d dksJ td|dd  }t|dks'J tdd	 |D s2J d S )
NzPOINT EMPTYFr8   is      z<2dr   c                 s   s    | ]}t |V  qd S r   )mathisnan).0valr   r   r   	<genexpr>   s    z#test_point_empty.<locals>.<genexpr>)r   r
   r   r$   r%   lenall)gr6   rB   r   r   r   test_point_empty   s   
rj   )r^   	   r   darwinzGEOS >= 3.9.0 is required)r`   c                  C   s"   t d} | jtddksJ d S )NzPOINT Z EMPTYBIddd:0101000080000000000000F87F000000000000F87F000000000000F87F)r   r
   wkb_hexr-   )ri   r   r   r   test_point_z_empty   s   
rp   )&r   rb   r$   r&   rU   shapelyr   shapely.geometryr   shapely.geosr   shapely.tests.legacy.conftestr   shapely.wkbr   r   r	   r
   fixturer   r   r   r-   r7   r;   r>   rD   rE   rQ   rT   rX   r]   markxfailrequires_geos_380rj   rZ   rp   r   r   r   r   <module>   sH    





