o
    Jf;                     @   s8  d 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 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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/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'G d7d8 d8Z(d9d: Z)G d;d< d<Z*dS )=zPolygons and Linear Rings
    N)
LinearRing
LineStringPointPolygon)CoordinateSequence)TopologicalError)loadsc                   C   s   t  jd d  g ksJ d S Nr   coords r   r   o/home/deployuser/azure_apps/autowriter/venv/lib/python3.10/site-packages/shapely/tests/geometry/test_polygon.pytest_empty_linearring_coords   s   r   c                  C   sP   g d} t g d}|jd d  | ksJ t g d}|jd d  | ks&J d S )N        r   r         ?r   r   r   r   r   r   r
   expected_coordsringr   r   r   (test_linearring_from_coordinate_sequence   s
   r   c                  C   sB   g d} t tddtddtddg}|jd d  | ksJ d S )Nr   r   r   )r   r   r   r   r   r   r   test_linearring_from_points   s    r   c                  C   sR   g d} t | }t|}t|jdksJ |jd d  | ks J |jdks'J d S )Nr   r   r   r   r      r   r   r   lenr   	geom_typer   liner   r   r   r   &test_linearring_from_closed_linestring"   s   r#   c                  C   sZ   g d} t | d d }t|}t|jdksJ |jd d  | ks$J |jdks+J d S )Nr   r   r   r   r!   r   r   r   (test_linearring_from_unclosed_linestring+   s   r%   c                  C   sR   g d} t | }|jrJ tt t| W d    d S 1 s"w   Y  d S )N)r   r   r   )r   is_validpytestraisesr   r   r   r"   r   r   r   test_linearring_from_invalid4   s   

"r*   c                  C   sL   ddg} t | }tjtdd t| W d    d S 1 sw   Y  d S )Nr   r   zrequires at least 4 coordinates)match)r   r'   r(   
ValueErrorr   r)   r   r   r   )test_linearring_from_too_short_linestring<   s
   
"r-   c                  C   s*   g d} t | }|jd d  | ksJ d S )Nr   r
   r   r   r   r   r   test_linearring_from_linearringE   s   r/   c                  C   s8   g d} dd | D }t |}|jd d  | ksJ d S )Nr   c                 s       | ]}|V  qd S r	   r   .0coordr   r   r   	<genexpr>M       z1test_linearring_from_generator.<locals>.<genexpr>r
   )r   genr   r   r   r   test_linearring_from_generatorK   s   r7   c                  C   sr   t  } | jsJ t| jtsJ | jd d  g ksJ t g } | js$J t| jts,J | jd d  g ks7J d S r	   )r   is_empty
isinstancer   r   r   r   r   r   test_linearring_from_emptyR   s   

r;   c                  C   s4   g d} t t| }|jd d  g dksJ d S )Nr   )r   nparrayr   r.   r   r   r   test_linearring_from_numpy^   s   r>   c                  C   s@   ddl m}  tg d}t|j}tg d}| || d S )Nr   )assert_array_equalr   r   )numpy.testingr?   r   r<   asarrayr   )r?   r   raexpectedr   r   r   test_numpy_linearring_coordsf   s
   rD   c                  C   s    t  } t| jjdksJ d S )N)r      )r   r<   rA   r   shaper:   r   r   r   "test_numpy_empty_linearring_coordso   s   rG   c                  C   s:   t g d} tdt}| g|d d < |d | ksJ d S )Nr      r   )r   r<   emptyobject)geomarr   r   r   test_numpy_object_arrayt   s   rM   c                  C   sx   g d} t g d}|jjd d  | ksJ t|jdksJ t g d}|jjd d  | ks1J t|jdks:J d S )Nr   r   r   r   exteriorr   r   	interiors)r   polygonr   r   r   %test_polygon_from_coordinate_sequence{   s   rR   c                  C   s   g d} t | g dg}|jjd d  | ksJ t|jdks!J t|jd jdks-J g d} g dg dg}t | |}|jjd d  | ksJJ t|jd	ksSJ t|jd jdks_J t|jd jd
kskJ d S )Nr         ?rU   rU         ?rW   rW   rW   rU   rH   r      )r   r   )r   
   )r\   r\   )r\   r   r[   )rH   rH   )rE   rH   )rE   rE   )rH   rE   r]   )   r_   )r_   r   )r   rZ   )rZ   r   )rZ   r_   r^   rE      rN   )r   rQ   holesr   r   r   0test_polygon_from_coordinate_sequence_with_holes   s   
rb   c                  C   s   g d} t | }t|}|jjd d  | ksJ t|jdks!J t g d}t g dt g dt g dg}t||}|jjd d  |jd d  ksNJ t|jdksWJ tdD ]}|j| jd d  || jd d  ksrJ q[d S )Nr   r   r   )     Q@g      ^@)g     a@r   r         N@      T@)rh   rh   )rd   rg   rf         >@      $@)g      I@rl   )g      D@rk   rj   )     V@r\   )g     [@rl   )g      Y@rk   )rn   rl   r_   )r   r   rO   r   r   rP   range)r   r   rQ   shellra   ir   r   r   test_polygon_from_linearring   s    



",rr   c                  C   sd   g d} t | }t|}|jjd d  | ksJ t | d d }t|}|jjd d  | ks0J d S )Nr   r$   )r   r   rO   r   )r   r"   rQ   r   r   r   test_polygon_from_linestring   s   rs   c                  C   sD   t tddtddtddg} g d}| jjd d  |ks J d S )Nr   r   r   )r   r   rO   r   )rQ   r   r   r   r   test_polygon_from_points   s    rt   c                  C   sb   g d} t | g dg}t |}t|jjdksJ t|jdks#J t|jd jdks/J d S )Nr   r   r   r   rS   rZ   rH   r   )r   r   rO   r   rP   )r   rQ   copyr   r   r   test_polygon_from_polygon   s   rw   c                   C   sD   t t tddgddgg W d    d S 1 sw   Y  d S )NrH   rE   r_   )r'   r(   r,   r   r   r   r   r   test_polygon_from_invalid   s   "rx   c                  C   sV   t  } | jsJ | jjd d  g ksJ t g } | jsJ | jjd d  g ks)J d S r	   )r   r8   rO   r   )rQ   r   r   r   test_polygon_from_empty   s   

ry   c                  C   sX   t d} t| }t|jjdksJ |jjd d  g dks!J t|jdks*J d S )Nr   r   r   r   r   rZ   r   )r<   r=   r   r   rO   r   rP   )arQ   r   r   r   test_polygon_from_numpy   s
   
r|   c                  C   s:   g d} dd | D }t |}|jjd d  | ksJ d S )Nr   c                 s   r0   r	   r   r1   r   r   r   r4      r5   z.test_polygon_from_generator.<locals>.<genexpr>)r   rO   r   )r   r6   rQ   r   r   r   test_polygon_from_generator   s   r}   c                   @   sL   e Z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S )TestPolygonc                 C   s`   d}t |}t|jdksJ |jd |jd ksJ |jd |jd ks'J |jdu s.J d S )Nru   rZ   r   r   r$   T)r   r   r   is_ring)selfr   r   r   r   r   test_linearring   s   zTestPolygon.test_linearringc                 C   s  d}t |}t|jjdksJ t|jtsJ |j}t|jdks$J |jd |jd ks0J |jd dks9J |jdu s@J t|jdksIJ |j}d }d }t	|}|j}t|jdks`J |jd |jd kslJ |jd dksuJ |jdu s|J d }t |dg}t|jjdksJ t|jd jdksJ t
t |jd  W d    n1 sw   Y  t
t |j W d    n1 sw   Y  |jd	d
dksJ d S )Nru   rZ   r   r   r   TrS   rH   r   )rz   )rT   rV   rX   rY   rT   )typecoordinates)r   r   rO   r   r9   r   r   rP   wkbload_wkbr'   r(   
IndexErrorNotImplementedError__geo_interface__)r   r   rQ   r   datar   r   r   test_polygon  sF   zTestPolygon.test_polygonc                 C   s&   t  }|jdks
J |jdksJ d S )NzLINEARRING EMPTYr   )r   wktlength)r   r_nullr   r   r   test_linearring_empty5  s   z!TestPolygon.test_linearring_emptyc                 C   s^   d}t |}|jdksJ |j}|d dksJ |j}|jdks"J |j}|d dks-J d S )N)r   r   r   r   r   r   r   r   r   r   r   r   r_   r   )r   r   r   r   r   r   )r   _ndimr   rO   )r   r   rQ   gier   r   r   test_dimensions;  s   
zTestPolygon.test_dimensionsc                 C   s   t g d}t|jjg dksJ ttddddjj}t|ts&J t g dg dg}|jdks7J 	 t|j	d jg d	ksFJ t|j	d djjd }t
|d
ks\J t|djj}t|tslJ d S )Nr   r         r   r   r   )r   r   r   r   r   r   r   rH   )      пrU   r         ?      r   r   rU   r   r   )r   r   r   r   r   rE   )r   listboundaryr   r   bufferrO   r9   arearP   r   )r   pecxyr   r   r   test_attribute_chainsY  s   z!TestPolygon.test_attribute_chainsc                 C   sn   t dd}tg d}tg d}t }t }||ksJ ||ks#J ||ks)J ||ks/J |d us5J d S )Nr   r   )r   r   )r   point1polygon1polygon2polygon_empty1polygon_empty2r   r   r   test_empty_equality  s   
zTestPolygon.test_empty_equalityc                 C   sH   d\}}}}||f||f||f||fg}t |t ||||ks"J d S )N)iLi   Z   )r   from_bounds)r   xminyminxmaxymaxr   r   r   r   test_from_bounds  s    zTestPolygon.test_from_boundsc                 C   s   t  }|jt ksJ d S r	   )r   rO   r   )r   r   r   r   r   test_empty_polygon_exterior  s   z'TestPolygon.test_empty_polygon_exteriorN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r~      s    2)r~   c                  C   sz   t g d} tt g d| _W d    n1 sw   Y  tt d| jd< W d    d S 1 s6w   Y  d S )Nru   )r   )       @r   )r   r   r   r   )r   r'   r(   AttributeErrorr   	TypeErrorr:   r   r   r   test_linearring_immutable  s   "r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestLinearRingGetItemc                 C   s   t g d}t g dt g dt g dg}t||}tddD ]}|j| || s/J q!tt |jd  W d    n1 sEw   Y  tt |jd  W d    d S 1 s`w   Y  d S )Nrc   re   ri   rm   r_   )r   r   ro   rP   equalsr'   r(   r   )r   rp   ra   grq   r   r   r   test_index_linearring  s   



"z+TestLinearRingGetItem.test_index_linearringc                 C   st   t  }tt |jd  W d    n1 sw   Y  tt |jd  W d    d S 1 s3w   Y  d S )Nr   r   )r   r'   r(   r   rP   r   )r   r   r   r   r   test_index_linearring_misc  s   "z0TestLinearRingGetItem.test_index_linearring_miscc                 C   sl  t g d}t g dt g dt g dg}t||}dd t|jdd  |dd  D }t|s5J dd t|jd d	 |d d	 D }t|sNJ d
d t|jd d d	 |d d d	 D }t|siJ dd t|jd d d |d d d D }t|sJ dd t|jd d |d d D }t|sJ |jdd  |dd    krg ksJ  J d S )Nrc   re   ri   rm   c                 S      g | ]	\}}| |qS r   r   r2   r{   br   r   r   
<listcomp>      z?TestLinearRingGetItem.test_slice_linearring.<locals>.<listcomp>rH   c                 S   r   r   r   r   r   r   r   r     r   r$   c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   rE   c                 S   r   r   r   r   r   r   r   r     r   r_   )r   r   ziprP   all)r   rp   ra   r   tr   r   r   test_slice_linearring  s"   



&&**&2z+TestLinearRingGetItem.test_slice_linearringN)r   r   r   r   r   r   r   r   r   r   r     s    r   )+__doc__numpyr<   r'   shapelyr   r   r   r   shapely.coordsr   shapely.errorsr   shapely.wkbr   r   r   r   r   r#   r%   r*   r-   r/   r7   r;   r>   rD   rG   rM   rR   rb   rr   rs   rt   rw   rx   ry   r|   r}   r~   r   r   r   r   r   r   <module>   sF    
				
 &
