
    (&h;                         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 Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z' G d d           Z(d! Z) G d" d#          Z*dS )$zPolygons and Linear Rings    N)
LinearRing
LineStringPointPolygon)CoordinateSequence)TopologicalError)loadsc                  H    t                      j        d d          g k    sJ d S Nr   coords     ^/var/www/html/reinick/venv/lib/python3.11/site-packages/shapely/tests/geometry/test_polygon.pytest_empty_linearring_coordsr      s)    <<qqq!R''''''r   c                      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rings     r   (test_linearring_from_coordinate_sequencer      sq    FFFO:::;;D;qqq>_,,,,:::;;D;qqq>_,,,,,,r   c                      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   s     r   test_linearring_from_pointsr      sZ    FFFOuS#c3sCIJJD;qqq>_,,,,,,r   c                      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   s      r   &test_linearring_from_closed_linestringr)   "   sv    ===FfDdDt{q    ;qqq>V####>\))))))r   c                      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'   s      r   (test_linearring_from_unclosed_linestringr,   +   s~    ===FfSbSk""DdDt{q    ;qqq>V####>\))))))r   c                      g d} t          |           }|j        rJ t          j        t                    5  t          |           d d d            d S # 1 swxY w Y   d S )N)r   r   r   )r   is_validpytestraisesr   r   r   r(   s     r   test_linearring_from_invalidr2   4   s    111FfD}	'	(	(  4                 s   AAAc                      ddg} t          |           }t          j        t          d          5  t	          |           d d d            d S # 1 swxY w Y   d S )Nr   r   zrequires at least 4 coordinates)match)r   r/   r0   
ValueErrorr   r1   s     r   )test_linearring_from_too_short_linestringr6   <   s     *%FfD	z)J	K	K	K  4                 s   AAAc                  V    g d} t          |           }|j        d d          | k    sJ d S )Nr   r   r   r   s     r   test_linearring_from_linearringr9   E   s;    ===FfD;qqq>V######r   c                  n    g d} d | D             }t          |          }|j        d d          | k    sJ d S )Nr!   c              3      K   | ]}|V  d S r   r   .0coords     r   	<genexpr>z1test_linearring_from_generator.<locals>.<genexpr>M   "      
%
%U5
%
%
%
%
%
%r   r   )r   genr   s      r   test_linearring_from_generatorrB   K   sL    ===F
%
%f
%
%
%Cc??D;qqq>V######r   c                  (   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    sJ d S r   )r   is_empty
isinstancer   r   r   s    r   test_linearring_from_emptyrG   R   s    <<D=dk#566666;qqq>Rb>>D=dk#566666;qqq>Rr   c                  ~    g d} t          t          j        |                     }|j        d d          g dk    sJ d S )Nr!   )r   nparrayr   r8   s     r   test_linearring_from_numpyrK   ^   sL    ===Fbhv&&''D;qqq>MMMMMMMMMr   c                      ddl m}  t          g d          }t          j        |j                  }t          j        g d          } | ||           d S )Nr   )assert_array_equalr   r   )numpy.testingrM   r   rI   asarrayr   )rM   r   raexpecteds       r   test_numpy_linearring_coordsrR   f   sh    000000:::;;D	DK	 	 BzJJJKKHr8$$$$$r   c                  j    t                      } t          j        | j                  j        dk    sJ d S )N)r      )r   rI   rO   r   shaperF   s    r   "test_numpy_empty_linearring_coordsrV   o   s1    <<D:dk""(F222222r   c                      t          g d          } t          j        dt                    }| g|d d <   |d         | k    sJ d S )Nr      r   )r   rI   emptyobject)geomars     r   test_numpy_object_arrayr]   t   sK    77788D	!V		BFBqqqEa5D======r   c                  "   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    sJ t          |j                  dk    sJ d S )Nr   r   r   r   exteriorr   r%   	interiors)r   polygons     r   %test_polygon_from_coordinate_sequencerc   {   s    ===F :::;;G"111%////w !!Q&&&&:::;;G"111%////w !!Q&&&&&&r   c                     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    sJ t          |j                  d	k    sJ t          |j        d         j                  dk    sJ t          |j        d         j                  d
k    sJ d S )Nr         ?rg   rg         ?ri   ri   ri   rg   rX   r      )r   r   )r   
   )rn   rn   )rn   r   rm   )rX   rX   )rT   rX   )rT   rT   )rX   rT   ro   )   rq   )rq   r#   )r#   rl   )rl   r#   )rl   rq   rp   rT      r_   )r   rb   holess      r   0test_polygon_from_coordinate_sequence_with_holesrt      sI   ===F fSSSTUUG"111%////w !!Q&&&&w #*++q0000 :99F000888E fe$$G"111%////w !!Q&&&&w #*++q0000w #*++q000000r   c                  d   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    sJ t	          |j                  dk    sJ t          d          D ]5}|j        |         j        d d          ||         j        d d          k    sJ 6d S )Nr!   r   r   )     Q@g      ^@)g     a@r   r         N@      T@)r{   r{   )rw   rz   ry         >@      $@)g      I@r   )g      D@r~   r}   )     V@rn   )g     [@r   )g      Y@r~   )r   r   rq   )r   r   r`   r   r%   ra   range)r   r   rb   shellrs   is         r   test_polygon_from_linearringr      se   ===FfDdmmG"111%////w !!Q&&&& LLLMMEKKKLLKKKLLKKKLLE
 eU##G"111%aaa8888w !!Q&&&&1XX D D #*111-q1CCCCCCD Dr   c                      g d} t          |           }t          |          }|j        j        d d          | k    sJ t          | d d                   }t          |          }|j        j        d d          | k    sJ d S )Nr!   r+   )r   r   r`   r   )r   r(   rb   s      r   test_polygon_from_linestringr      s    ===FfDdmmG"111%//// fSbSk""DdmmG"111%//////r   c                      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   r`   r   )rb   r   s     r   test_polygon_from_pointsr      s_    uS#c3sCIJJGFFFO"111%888888r   c                     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"   re   rl   rX   r   )r   r%   r`   r   ra   )r   rb   copys      r   test_polygon_from_polygonr      s    ===FfSSSTUUG 7Dt}#$$))))t~!####t~a '((A------r   c                      t          j        t                    5  t          ddgddgg           d d d            d S # 1 swxY w Y   d S )NrX   rT   rq   )r/   r0   r5   r   r   r   r   test_polygon_from_invalidr      s    	z	"	" " "!Q!Q !!!" " " " " " " " " " " " " " " " " "s   =AAc                      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   rD   r`   r   )rb   s    r   test_polygon_from_emptyr      sz    iiG"111%++++bkkG"111%++++++r   c                      t          j        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   rl   r   )rI   rJ   r   r%   r`   r   ra   )arb   s     r   test_polygon_from_numpyr      s    
MNNAajjGw&''1,,,,"111% * * *     w !!Q&&&&&&r   c                  x    g d} d | D             }t          |          }|j        j        d d          | k    sJ d S )Nr!   c              3      K   | ]}|V  d S r   r   r<   s     r   r?   z.test_polygon_from_generator.<locals>.<genexpr>   r@   r   )r   r`   r   )r   rA   rb   s      r   test_polygon_from_generatorr      sQ    ===F
%
%f
%
%
%CcllG"111%//////r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestPolygonc                     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 )Nr   rl   r   r#   r+   T)r   r%   r   is_ring)selfr   r   s      r   test_linearringzTestPolygon.test_linearring   s     B&!!4;1$$$${1~Q////{1~R0000|t######r   c                 4   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    sJ |j        d         dk    sJ |j        du sJ t          |j                  dk    sJ |j        }d }d }t          |          }|j        }t          |j                  dk    sJ |j        d         |j        d         k    sJ |j        d         dk    sJ |j        du sJ d }t          |dg          }t          |j        j                  dk    sJ t          |j        d         j                  dk    sJ t          j        t                    5  |j        d          d d d            n# 1 swxY w Y   t          j        t                    5  |j         d d d            n# 1 swxY w Y   |j        d	d
dk    sJ d S )Nr   rl   r   r#   r   Tre   rX   r   )r   )rf   rh   rj   rk   rf   )typecoordinates)r   r%   r`   r   rE   r   r   ra   wkbload_wkbr/   r0   
IndexErrorNotImplementedError__geo_interface__)r   r   rb   r   datas        r   test_polygonzTestPolygon.test_polygon  s   A &//7#*++q0000 '*J777774;1$$$${1~Q////{1~++++|t####7$%%**** {4..4;1$$$${1~Q////{1~++++|t#### IJ
 
 7#*++q00007$Q'.//14444]:&& 	! 	!a  	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! ].// 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 (-
 -
 
 
 
 
 
 
s$   +GG	G	)G==HHc                 V    t                      }|j        dk    sJ |j        dk    sJ d S )NzLINEARRING EMPTYr   )r   wktlength)r   r_nulls     r   test_linearring_emptyz!TestPolygon.test_linearring_empty4  s8    z/////}######r   c                     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   rq   r   )r   r   r   r   r   r   )r   _ndimr   r`   )r   r   rb   gies        r   test_dimensionszTestPolygon.test_dimensions:  s     V&//}!!!!&-  %
 
 
 
 
 w!|||| -  %
 
 
 
 
 
 
r   c                    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    sJ 	 t          |j	        d	         j                  g d
k    sJ t          t          |j	        d	                             d          j        j                            }t          |          dk    sJ t          |                    d          j        j                  }t          |t                    sJ d S )Nr   r         r   r   r   )r   r   r   r   r   r   r   rX   )	quad_segs)      пrg   r         ?      r   r   rg   r   r   )r   r   r   r   r   rT   )r   listboundaryr   r   bufferr`   rE   areara   nextiterr%   )r   pecxys       r   test_attribute_chainsz!TestPolygon.test_attribute_chainsW  s    FFFGGAJ%&& +
 +
 +
 
 
 
 
 %S//(((::CJKK"d##### >>>IIIJ
 
 v~~~~	 AKN)** /
 /
 /
 
 
 
 
 $q{1~,,Q//8?@@AA2ww!|||| !((1++&-.."d#######r   c                     t          dd          }t          g d          }t          g d          }t                      }t                      }||k    sJ ||k    sJ ||k    sJ ||k    sJ |J d S )Nr   r   )r   r   )r   point1polygon1polygon2polygon_empty1polygon_empty2s         r   test_empty_equalityzTestPolygon.test_empty_equality  s     q!MMMNNMMMNN  !!!!////>))))8####)))))r   c                     d\  }}}}||f||f||f||fg}t          |          t          j        ||||          k    sJ d S )N)iLi   Z   )r   from_bounds)r   xminyminxmaxymaxr   s         r   test_from_boundszTestPolygon.test_from_bounds  s\    !3dD$,ttTlT4LIv'"5dD$"M"MMMMMMMr   c                 T    t                      }|j        t                      k    sJ d S r   )r   r`   r   )r   r   s     r   test_empty_polygon_exteriorz'TestPolygon.test_empty_polygon_exterior  s(    IIzZ\\))))))r   N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r      s        $ $ $0
 0
 0
d$ $ $
 
 
:&$ &$ &$P* * * N N N
* * * * *r   r   c                     t          g d          } t          j        t                    5  g d| _        d d d            n# 1 swxY w Y   t          j        t
                    5  d| j        d<   d d d            d S # 1 swxY w Y   d S )Nr   )r   )       @r   )r   r   r   r   )r   r/   r0   AttributeErrorr   	TypeErrorrF   s    r   test_linearring_immutabler     s	   FFFGGD	~	&	& ; ;:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 
y	!	! $ $#A$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s#   
AAA%A==BBc                        e Zd Zd Zd Zd ZdS )TestLinearRingGetItemc                    t          g d          }t          g d          t          g d          t          g d          g}t          ||          }t          dd          D ]*}|j        |                             ||                   sJ +t          j        t                    5  |j        d          d d d            n# 1 swxY w Y   t          j        t                    5  |j        d          d d d            d S # 1 swxY w Y   d S )Nrv   rx   r|   r   rq   )r   r   r   ra   equalsr/   r0   r   )r   r   rs   gr   s        r   test_index_linearringz+TestLinearRingGetItem.test_index_linearring  s   PPPQQOOOPPOOOPPOOOPP

 E5!!r1 	3 	3A;q>((q222222]:&& 	 	KNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	 	KOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   (CC	C&DDDc                    t                      }t          j        t                    5  |j        d          d d d            n# 1 swxY w Y   t          j        t
                    5  |j        d          d d d            d S # 1 swxY w Y   d S )Nr   r   )r   r/   r0   r   ra   r   )r   r   s     r   test_index_linearring_miscz0TestLinearRingGetItem.test_index_linearring_misc  s    II]:&& 	 	KNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9%% 	 	K	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   AA	A&BBBc                    t          g d          }t          g d          t          g d          t          g d          g}t          ||          }d t          |j        dd          |dd                    D             }t	          |          sJ d t          |j        d d         |d d                   D             }t	          |          sJ d	 t          |j        d d d         |d d d                   D             }t	          |          sJ d
 t          |j        d d d         |d d d                   D             }t	          |          sJ d t          |j        d d         |d d                   D             }t	          |          sJ |j        dd          |dd          cxk    rg k    sn J d S )Nrv   rx   r|   r   c                 >    g | ]\  }}|                     |          S r   r   r=   r   bs      r   
<listcomp>z?TestLinearRingGetItem.test_slice_linearring.<locals>.<listcomp>  &    GGGVaQXXa[[GGGr   rX   c                 >    g | ]\  }}|                     |          S r   r   r   s      r   r   z?TestLinearRingGetItem.test_slice_linearring.<locals>.<listcomp>  &    IIIVaQXXa[[IIIr   r+   c                 >    g | ]\  }}|                     |          S r   r   r   s      r   r   z?TestLinearRingGetItem.test_slice_linearring.<locals>.<listcomp>  s&    KKKVaQXXa[[KKKr   c                 >    g | ]\  }}|                     |          S r   r   r   s      r   r   z?TestLinearRingGetItem.test_slice_linearring.<locals>.<listcomp>  r   r   rT   c                 >    g | ]\  }}|                     |          S r   r   r   s      r   r   z?TestLinearRingGetItem.test_slice_linearring.<locals>.<listcomp>  r   r   rq   )r   r   zipra   all)r   r   rs   r   ts        r   test_slice_linearringz+TestLinearRingGetItem.test_slice_linearring  s   PPPQQOOOPPOOOPPOOOPP

 E5!!GGs1;qrr?E!""I'F'FGGG1vvIIs1;ss+;U3B3Z'H'HIII1vvKKs1;ttt+<eDDbDk'J'JKKK1vvIIs1;sss+;U33Q3Z'H'HIII1vvGGs1;rr?E"1"I'F'FGGG1vv{122%)1111r11111111r   N)r   r   r   r   r   r  r   r   r   r   r     sA            2 2 2 2 2r   r   )+__doc__numpyrI   r/   shapelyr   r   r   r   shapely.coordsr   shapely.errorsr   shapely.wkbr	   r   r   r   r   r)   r,   r2   r6   r9   rB   rG   rK   rR   rV   r]   rc   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r	     sZ          : : : : : : : : : : : : - - - - - - + + + + + + ) ) ) ) ) )( ( (- - -- - -* * ** * *    $ $ $$ $ $	  	  	 N N N% % %3 3 3
  
' 
' 
'1 1 1,D D D,	0 	0 	09 9 9. . ." " ", , ,' ' '0 0 0_* _* _* _* _* _* _* _*D$ $ $)2 )2 )2 )2 )2 )2 )2 )2 )2 )2r   