o
    h                     @   sn   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mZm	Z	m
Z
mZ d dlmZ G dd de jZdS )    N)geos_version)TopologicalError)GeometryCollection
LineString
MultiPointPointPolygon)loadsc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )OperationsTestCasec                 C   s  t dd}|jdksJ |jdksJ |t ddtdks"J t|jt s*J |t ddj	s5J t|
dts?J t|j
dddtsKJ td}td	}|jdd
d}||dsbJ td}td}|jddd}||dsyJ t|jt sJ t|t ddt sJ t|t ddtsJ t|jtsJ t|t ddtsJ t| t sJ t| t sJ | | ksJ t|jt sJ d S )Ng        g      g;f?g      $@    )	quad_segszRPOLYGON ((120 120, 140 199, 160 200, 180 199, 220 120, 122 122, 121 121, 120 120))z@POLYGON ((120 120, 140 199, 160 200, 180 199, 220 120, 120 120))F)preserve_topologygMbP?ziPOLYGON ((80 200, 240 200, 240 60, 80 60, 80 200),(120 120, 220 120, 180 199, 160 200, 140 199, 120 120))T   )r   arealengthdistancepytestapprox
isinstanceenvelopeintersectionis_emptybufferr   r	   simplifyequals_exactconvex_hull
differencesymmetric_differencer   boundaryr   unionrepresentative_pointpoint_on_surfacecentroid)selfpointpexpecteds r)   _/var/www/html/scripts/venv/lib/python3.10/site-packages/shapely/tests/legacy/test_operations.pytest_operations   sB   
z"OperationsTestCase.test_operationsc                 C   s   t ddt dddksJ td}|jrJ tdk r<tttj	f || W d    d S 1 s5w   Y  d S ||dksEJ d S )Nr   r   	FF0FFF0F2zUPOLYGON ((40 100, 80 100, 80 60, 40 60, 40 100), (60 60, 80 60, 80 40, 60 40, 60 60)))      r   	2FFF1FFF2)
r   relater	   is_validr   r   raisesr   shapelyGEOSException)r$   invalid_polygonr)   r)   r*   test_relateK   s   
"zOperationsTestCase.test_relatec                 C   s<   t dd}tg d}||}||t ddksJ d S )Nr   ))   r   )r7      )r-   r8   r-   r8   )r   r   hausdorff_distancer   )r$   r%   liner   r)   r)   r*   test_hausdorff_distance[   s   

z*OperationsTestCase.test_hausdorff_distancec                 C   s   t ddg}tdd}|jddd}||ksJ td}|js!J |jddd}|js-J td	}tjtd
d |jddd W d    d S 1 sKw   Y  d S )N)r   r   )r   r7   r   g      ?g      ?T)
normalizedzLINESTRING EMPTYzPOLYGON EMPTYzincorrect geometry type)match)r   r   interpolater	   r   r   r2   	TypeError)r$   	test_lineknown_pointinterpolated_point
empty_linepolygonr)   r)   r*   test_interpolateb   s   


"z#OperationsTestCase.test_interpolatec                 C   sF   t dd}| }||ksJ td}| }td}||ks!J d S )Nr   z(MULTILINESTRING ((1 1, 0 0), (1 1, 1 2))z(MULTILINESTRING ((1 1, 1 2), (0 0, 1 1)))r   	normalizer	   )r$   r%   resultr:   r'   r)   r)   r*   test_normalizet   s   
z!OperationsTestCase.test_normalizeN)__name__
__module____qualname__r+   r6   r;   rE   rH   r)   r)   r)   r*   r
      s    >r
   )unittestr   r3   r   shapely.errorsr   shapely.geometryr   r   r   r   r   shapely.wktr	   TestCaser
   r)   r)   r)   r*   <module>   s    