o
    e>                     @   s  d dl Zd dlZd dlZd dlmZmZmZ d dlmZ d dl	m
Z
 ddlmZmZmZmZmZmZ dd eD ZejejejejfZejejfejejfejejffZejejffZed d d	d	ed
d
ddedddded	d	ddgZdd eD Zej !deej !dedd Z"ej j#ej$dkddej !deej !dd dgdd Z%ej j#ej$dk ddej !dedd Z&ej j#ej$dk ddej !deej !deej !dg ddd Z'ej !d e(dd	ej !d!ed"d# Z)ej !d!ed$d% Z*ej !d!ed&d' Z+ej !d!ed(d) Z,ej !d*e(d+ej !d!ed,d- Z-ej !d*e(d+ej !d!ed.d/ Z.ej !d!ed0d1 Z/ej !d e(dd+ej !d!ed2d3 Z0ej !d e(dd+ej !d!ed4d5 Z1ej j#ej$dkddej !d!eej !dd dgd6d7 Z2ej j#ej$dk ddej !d!ed8d9 Z3ej j#ej$dk ddej !d!ed:d; Z4ej j#ej$dk ddej !d e(dd	ej !d!eej !dd dgd<d= Z5ej j#ej$dk ddej !d!ed>d? Z6ej j#ej$dk ddej !d*e(d+ej !d!ed@dA Z7ej j#ej$dk ddej !d*e(d+ej !d!edBdC Z8ej j#ej$dk ddej !d e(dd+ej !d!edDdE Z9ej j#ej$dFk dGdej !d e(dddHdI Z:ej j#ej$dFk dGddJdK Z;ej j#ej$dFk dGddLdM Z<ej j#ej$dFk dGdej !dNdOd eD dPd eD  dQdR Z=ej j#ej$dk ddej !dSedTdTd	d	ed dUdVdgd edWfedTdTd	d	ed dUdVdgdTedWfedTdTd	d	ed dUdVdgdeg dXfedTdTd	d	ed dUdVdgdeg dYfedTdTd	d	ed dUdVdgdZe fgd[d\ Z>ej j#ej$dk ddd]d^ Z?dS )_    N)GeometryGeometryCollectionPolygon)UnsupportedGEOSVersionError)assert_geometries_equal   )	all_typesemptygeometry_collectionmulti_polygonpointpolygonc                 C   s   g | ]}t |d ks|qS )   )shapelyZget_type_id).0g r   QD:\Projects\ConvertPro\env\Lib\site-packages\shapely/tests/test_set_operations.py
<listcomp>   s    r         r      	   
   c                 C   s&   g | ]}t |s|ttfvr|qS r   )r   Zis_emptyr   r   )r   geomr   r   r   r   (   s    afuncc                 C   s|   |t jkr|tkrt jdkr| jtjjdd ||t	}t
|ts%J |||gt	}|jdks3J t
|d ts<J d S )N)      r   z*https://github.com/libgeos/geos/issues/797reasonr   r   )r   
differencer
   geos_versionnodeZ
add_markerpytestmarkZxfailr   
isinstancer   shape)requestr   r   actualr   r   r   test_set_operation_array/   s   


r+   )r   r   r   zGEOS >= 3.9r   	grid_sizec                 C   s@   t jtdd | tt| W d    d S 1 sw   Y  d S Nz*grid_size parameter requires GEOS >= 3.9.0matchr%   raisesr   r   )r   r,   r   r   r   &test_set_operations_prec_not_supportedB   s
   "r2   z
GEOS < 3.9c                 C   sD   t jtdd | ttdgd W d    d S 1 sw   Y  d S Nz.grid_size parameter only accepts scalar valuesr.   r   r,   r%   r1   
ValueErrorr   )r   r   r   r   +test_set_operation_prec_nonscalar_grid_sizeL   s
   "r7   )r   r   r   c                 C   s   || | gt |d}|jdksJ t|d tsJ tj| |d}tjt |d}|||g|}tt|t| s>J d S )Nr4   r!   r   )	r   r(   r'   r   r   Zset_precisionequals	normalizeall)r   r   r,   r*   bZpoint2expectedr   r   r   test_set_operation_prec_arrayU   s   $r=   nzfunc, related_funcc                 C   sJ   |t d |  }t d }td| D ]	}||t | }qt||s#J d S )Nr   r   reduce_test_dataranger   r8   )r>   r   related_funcr*   r<   ir   r   r   test_set_operation_reduce_1dimg   s
   rD   c                 C   s.   t dd}| |d d g}t ||sJ d S )Nr   )r   ZPointr8   )r   rB   r   r*   r   r   r   %test_set_operation_reduce_single_geomr   s   rE   c                 C   s|   t gd gd }| |d d}t|tsJ | |dd}|jdks"J | |dd}|jdks/J | |dd}|jdks<J d S )	Nr   r   axisr   r!   r   r   r   r'   r   r(   r   rB   datar*   r   r   r   test_set_operation_reduce_axisy   s   rM   c                 C   sr   | t jdtdtksJ t jdtd}| |tksJ | |dd tgd ks+J | |dd g ks7J d S )N)r   )Zdtype)r   r   r   rF   r   r   )npr	   objecttolist)r   rB   Zarr_empty_2Dr   r   r   test_set_operation_reduce_empty   s
   rQ   none_positionr   c                 C   s@   t d d }||d  | |}|t d t d }t|| d S Nr   r   r   r@   insertr   r   rB   rR   	test_datar*   r<   r   r   r   "test_set_operation_reduce_one_none   s
   rX   c                 C   sL   t d d }||d  ||d  | |}|t d t d }t|| d S rS   rT   rV   r   r   r   "test_set_operation_reduce_two_none   s   rY   c                 C   s   | t d gt ks
J d S N)r	   r   rB   r   r   r   (test_set_operation_reduce_some_none_len2   s   r\   c                 C   s   t |d g|  tg  d S rZ   r   r   r>   r   rB   r   r   r   "test_set_operation_reduce_all_none   s   r_   c                 C   sT   |d g|  gd dd  ttgksJ |d gd g|  dd  ttgks(J d S )Nr   r   rF   r   )rP   r	   r^   r   r   r   &test_set_operation_reduce_all_none_arr   s   (,r`   c                 C   sB   t jtdd | ttg| W d    d S 1 sw   Y  d S r-   r0   )r   rB   r,   r   r   r   ,test_set_operation_prec_reduce_not_supported   s
   "ra   c                 C   sF   t jtdd | ttgdgd W d    d S 1 sw   Y  d S r3   r5   r[   r   r   r   2test_set_operation_prec_reduce_nonscalar_grid_size   s
   "rb   c                 C   s"   | t t gtjd}|d u sJ d S Nr4   )r   rN   nan)r   rB   r*   r   r   r   ,test_set_operation_prec_reduce_grid_size_nan   s   re   c                 C   sR   |t d |  |d}t d }td| D ]}||t | |d}qt||s'J d S )Nr4   r   r   r?   )r>   r   rB   r,   r*   r<   rC   r   r   r   #test_set_operation_prec_reduce_1dim   s
   rf   c                 C   s   t gd gd }| |dd d}t|tsJ | |ddd}|jdks$J | |ddd}|jdks2J | |ddd}|jdks@J d S )	Nr   r   r   )r,   rG   r   r!   rH   rI   rJ   rK   r   r   r   #test_set_operation_prec_reduce_axis   s   rg   c                 C   sH   t d d }||d  | |dd}|t d t d dd}t|| d S Nr   r   r4   r   rT   rV   r   r   r   'test_set_operation_prec_reduce_one_none   s
   ri   c                 C   sT   t d d }||d  ||d  | |dd}|t d t d dd}t|| d S rh   rT   rV   r   r   r   'test_set_operation_prec_reduce_two_none   s   rj   c                 C   s    t |d g|  ddtg  d S )Nr   r4   r]   r^   r   r   r   'test_set_operation_prec_reduce_all_none  s    rk   )r      r   z
GEOS < 3.8c                 C   sz   t ddddt ddddt ddddg}t |d|  }|d }td| D ]
}t ||| }q)t||dd dS )z
    This is tested seperately from other set operations as it differs in two ways:
      1. It expects only non-overlapping polygons
      2. It expects GEOS 3.8.0+
    r   r   r   r   NT)r9   )r   boxcoverage_union_allrA   coverage_unionr   )r>   rW   r*   r<   rC   r   r   r   test_coverage_union_reduce_1dim  s   	rp   c                  C   s   dd t dD } tj| d d}t|tsJ tj| dd}|jdks%J tj| dd}|jdks3J tj| d	d}|jdksAJ d S )
Nc                    s"   g | ]  fd dt dD qS )c              	      s$   g | ]}t | |d   d  qS )r   )r   rm   )r   rC   jr   r   r   '  s   $ z>test_coverage_union_reduce_axis.<locals>.<listcomp>.<listcomp>r   )rA   )r   r   rq   r   r   '  s   " z3test_coverage_union_reduce_axis.<locals>.<listcomp>r   rF   r   r!   r   rH   rI   )rA   r   rn   r'   r   r(   )rL   r*   r   r   r   test_coverage_union_reduce_axis$  s   rs   c                  C   sV   t g d} tjtjdd t| t g d W d    d S 1 s$w   Y  d S )N)r   r   r   r   r   r   )r   r   rt   z6CoverageUnion cannot process incorrectly noded inputs.r.   )ru   )g?r   )r   r   )r   r   ru   )r   r%   r1   r   GEOSExceptionro   r   r   r   r   &test_coverage_union_overlapping_inputs2  s   "ry   zgeom_1, geom_2c                 C   s   g | ]}t |gqS r   rx   )r   Znon_polygonr   r   r   r   D  s    c                 C   s   g | ]}t D ]}||gqqS r   )non_polygon_types)r   Znon_polygon_1Znon_polygon_2r   r   r   r   F  s    c                 C   sB   t jtjdd t| | W d    d S 1 sw   Y  d S )Nz)Unhandled geometry type in CoverageUnion.r.   )r%   r1   r   rw   ro   )Zgeom_1Zgeom_2r   r   r   &test_coverage_union_non_polygon_inputs@  s
   "r{   zgeom,grid_size,expected皙?皙?ffffff@)	r   r}   r   r   )r~   r   )r~   r}   )r   r}   )r   r|   )r|   r|   )r|   r}   r   )r   r   r   )r   r   )r   r   )r   r   rv   r   )r   )r   r   )r   r   rv   r   d   c                 C   s"   t j| |d}t ||sJ d S rc   )r   	union_allr8   )r   r,   r<   r*   r   r   r   test_union_all_precT  s   >r   c                  C   sP   t ddddt ddddg} t j| dd}t j| dd}t ||s&J d S )	Nr|   r   r   r}   r~   r   r   r4   )r   rm   Zunary_unionr   r8   )Zgeomsr*   r<   r   r   r   test_uary_union_alias  s    r   )@numpyrN   r%   r   r   r   r   Zshapely.errorsr   Zshapely.testingr   commonr   r	   r
   r   r   r   Zall_single_typesr"   intersectionsymmetric_differenceunionZSET_OPERATIONSZintersection_allZsymmetric_difference_allr   ZREDUCE_SET_OPERATIONSZREDUCE_SET_OPERATIONS_PRECrm   r@   rz   r&   Zparametrizer+   Zskipifr#   r2   r7   r=   rA   rD   rE   rM   rQ   rX   rY   r\   r_   r`   ra   rb   re   rf   rg   ri   rj   rk   rp   rs   ry   r{   r   r   r   r   r   r   <module>   s    
	

	


	

	



<