o
    Jf                     @   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|
ddtsJJ td}td}|jdd	d
}||dsaJ td}td}|jddd
}||dsxJ 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      $@    zRPOLYGON ((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(   p/home/deployuser/azure_apps/autowriter/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_relateJ   s   
"zOperationsTestCase.test_relatec                 C   s<   t dd}tg d}||}||t ddksJ d S )Nr   ))   r   )r6      )r,   r7   r,   r7   )r   r   hausdorff_distancer   )r#   r$   liner   r(   r(   r)   test_hausdorff_distanceY   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   r6   r   g      ?g      ?T)
normalizedzLINESTRING EMPTYzPOLYGON EMPTYzincorrect geometry type)match)r   r   interpolater	   r   r   r1   	TypeError)r#   	test_lineknown_pointinterpolated_point
empty_linepolygonr(   r(   r)   test_interpolate`   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$   resultr9   r&   r(   r(   r)   test_normalizer   s   
z!OperationsTestCase.test_normalizeN)__name__
__module____qualname__r*   r5   r:   rD   rG   r(   r(   r(   r)   r
      s    =r
   )unittestr   r2   r   shapely.errorsr   shapely.geometryr   r   r   r   r   shapely.wktr	   TestCaser
   r(   r(   r(   r)   <module>   s    