o
    Zqi;                     @   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   j/home/app/PaddleOCR-VL/.venv_paddleocr/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   Z	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   Z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   .0Zcoordr   r   r   	<genexpr>M       z1test_linearring_from_generator.<locals>.<genexpr>r
   )r   genr   r   r   r   test_linearring_from_generatorK   s   r4   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   

r8   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   )Znumpy.testingr<   r   r9   asarrayr   )r<   r   raexpectedr   r   r   test_numpy_linearring_coordsf   s
   r@   c                  C   s    t  } t| jjdksJ d S )N)r      )r   r9   r=   r   shaper7   r   r   r   "test_numpy_empty_linearring_coordso   s   rC   c                  C   s:   t g d} tdt}| g|d d < |d | ksJ d S )Nr      r   )r   r9   emptyobject)Zgeomarr   r   r   test_numpy_object_arrayt   s   rH   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   rM   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         ?rP   rP         ?rR   rR   rR   rP   rD   r      )r   r   )r   
   )rW   rW   )rW   r   rV   )rD   rD   )rA   rD   )rA   rA   )rD   rA   rX   )   rZ   )rZ   r   )r   rU   )rU   r   )rU   rZ   rY   rA      rI   )r   rL   holesr   r   r   0test_polygon_from_coordinate_sequence_with_holes   s   
r]   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@)rc   rc   )r_   rb   ra         >@      $@)g      I@rg   )g      D@rf   re   )     V@rW   )g     [@rg   )g      Y@rf   )ri   rg   rZ   )r   r   rJ   r   r   rK   range)r   r   rL   shellr\   ir   r   r   test_polygon_from_linearring   s    



",rm   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   rJ   r   )r   r!   rL   r   r   r   test_polygon_from_linestring   s   rn   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   rJ   r   )rL   r   r   r   r   test_polygon_from_points   s    ro   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   rN   rU   rD   r   )r   r   rJ   r   rK   )r   rL   copyr   r   r   test_polygon_from_polygon   s   rr   c                   C   sD   t t tddgddgg W d    d S 1 sw   Y  d S )NrD   rA   rZ   )r%   r&   r*   r   r   r   r   r   test_polygon_from_invalid   s   "rs   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   r5   rJ   r   )rL   r   r   r   test_polygon_from_empty   s   

rt   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   rU   r   )r9   r:   r   r   rJ   r   rK   )arL   r   r   r   test_polygon_from_numpy   s
   
rw   c                  C   s:   g d} dd | D }t |}|jjd d  | ksJ d S )Nr   c                 s   r.   r	   r   r/   r   r   r   r1      r2   z.test_polygon_from_generator.<locals>.<genexpr>)r   rJ   r   )r   r3   rL   r   r   r   test_polygon_from_generator   s   rx   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 )Nrp   rU   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 )Nrp   rU   r   r   r   TrN   rD   r   )ru   )rO   rQ   rS   rT   rO   )typecoordinates)r   r   rJ   r   r6   r   rz   rK   Zwkbload_wkbr%   r&   
IndexErrorNotImplementedError__geo_interface__)r{   r   rL   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   Zwktlength)r{   Zr_nullr   r   r   test_linearring_empty4  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   rZ   r~   )r   r   r   r   r   r   )r   Z_ndimr   rJ   )r{   r   rL   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jdddjj}t|ts'J t g dg dg}|jdks8J 	 t|j	d	 jg d
ksGJ t
t|j	d	 djj}t|dks]J t|djj}t|tsmJ d S )Nr   r         r   r   r   )r   r   r   r   r   r   r   rD   )Z	quad_segs)      пrP   r         ?      r   r   rP   r   r   )r   r   r   r   r   rA   )r   listboundaryr   r   bufferrJ   r6   arearK   nextiterr   )r{   pecZxyr   r   r   test_attribute_chainsW  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{   Zpoint1Zpolygon1Zpolygon2Zpolygon_empty1Z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   Zfrom_bounds)r{   ZxminZyminZxmaxZ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   rJ   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   ry      s    
2(ry   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 )Nrp   )r   )       @r   )r   r   r   r   )r   r%   r&   AttributeErrorr   	TypeErrorr7   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 )Nr^   r`   rd   rh   rZ   )r   r   rj   rK   equalsr%   r&   r   )r{   rk   r\   grl   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   rK   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 )Nr^   r`   rd   rh   c                 S      g | ]	\}}| |qS r   r   r0   rv   br   r   r   
<listcomp>      z?TestLinearRingGetItem.test_slice_linearring.<locals>.<listcomp>rD   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   rA   c                 S   r   r   r   r   r   r   r   r     r   rZ   )r   r   ziprK   all)r{   rk   r\   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__numpyr9   r%   Zshapelyr   r   r   r   Zshapely.coordsr   Zshapely.errorsr   Zshapely.wkbr   r   r   r   r   r"   r$   r(   r+   r-   r4   r8   r;   r@   rC   rH   rM   r]   rm   rn   ro   rr   rs   rt   rw   rx   ry   r   r   r   r   r   r   <module>   sF    
				
 #
