o
    Jf$B                     @   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ignore_invalidmulti_polygonpointpolygonc                 C   s   g | ]}t |d ks|qS )   )shapelyget_type_id).0g r   m/home/deployuser/azure_apps/autowriter/venv/lib/python3.10/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   is_emptyr   r
   )r   geomr   r   r   r   .   s    afuncc                 C   s   |t ju r| jdkrt | dkrt jdkrtd || t}t|t	s'J || | gt}|j
dks5J t|d t	s>J d S )Nr   r   )   r   r   z(GEOS 3.9.5 crashes with mixed collectionr   r   )r   
difference	geom_typeget_num_geometriesgeos_versionpytestxfailr   
isinstancer   shape)r   r   actualr   r   r   test_set_operation_array5   s   




r)   )r   r   r   zGEOS >= 3.9)reason	grid_size   c                 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_supportedG   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_sizeQ   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   set_precisionequals	normalizeall)r   r   r+   r(   bpoint2expectedr   r   r   test_set_operation_prec_arrayZ   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   r9   )r@   r   related_funcr(   r>   ir   r   r   test_set_operation_reduce_1diml   s
   rF   c                 C   s.   t dd}| |d d g}t ||sJ d S )Nr,   )r   Pointr9   )r   rD   r   r(   r   r   r   %test_set_operation_reduce_single_geomw   s   rH   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   rD   datar(   r   r   r   test_set_operation_reduce_axis~   s   rP   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   )dtype)r   r   r   rI   r   r,   )npr   objecttolist)r   rD   arr_empty_2Dr   r   r   test_set_operation_reduce_empty   s
   rV   none_positionr   c                 C   s@   t d d }||d  | |}|t d t d }t|| d S Nr   r   r,   rB   insertr   r   rD   rW   	test_datar(   r>   r   r   r   "test_set_operation_reduce_one_none   s
   r]   c                 C   sL   t d d }||d  ||d  | |}|t d t d }t|| d S rX   rY   r[   r   r   r   "test_set_operation_reduce_two_none   s   r^   c                 C   s   | t d gt ks
J d S N)r   r   rD   r   r   r   (test_set_operation_reduce_some_none_len2   s   ra   c                 C   s   t |d g|  tg  d S r_   r   r   r@   r   rD   r   r   r   "test_set_operation_reduce_all_none   s   rd   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,   rI   r   )rT   r   rc   r   r   r   &test_set_operation_reduce_all_none_arr   s   (,re   c                 C   sB   t jtdd | ttg| W d    d S 1 sw   Y  d S r-   r0   )r   rD   r+   r   r   r   ,test_set_operation_prec_reduce_not_supported   s
   "rf   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
   "rg   c                 C   s"   | t t gtjd}|d u sJ d S Nr4   )r   rR   nan)r   rD   r(   r   r   r   ,test_set_operation_prec_reduce_grid_size_nan   s   rj   c                 C   sR   |t d |  |d}t d }td| D ]}||t | |d}qt||s'J d S )Nr4   r   r,   rA   )r@   r   rD   r+   r(   r>   rE   r   r   r   #test_set_operation_prec_reduce_1dim   s
   rk   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+   rJ   r   r   rK   rL   rM   rN   r   r   r   #test_set_operation_prec_reduce_axis   s   rl   c                 C   sH   t d d }||d  | |dd}|t d t d dd}t|| d S Nr   r,   r4   r   rY   r[   r   r   r   'test_set_operation_prec_reduce_one_none   s
   rn   c                 C   sT   t d d }||d  ||d  | |dd}|t d t d dd}t|| d S rm   rY   r[   r   r   r   'test_set_operation_prec_reduce_two_none  s   ro   c                 C   s    t |d g|  ddtg  d S )Nr,   r4   rb   rc   r   r   r   'test_set_operation_prec_reduce_all_none  s    rp   )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 separately 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r:   )r   boxcoverage_union_allrC   coverage_unionr   )r@   r\   r(   r>   rE   r   r   r   test_coverage_union_reduce_1dim  s   	rv   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   rs   )r   rE   jr   r   r   ,  s   $ z>test_coverage_union_reduce_axis.<locals>.<listcomp>.<listcomp>r   )rC   )r   r   rw   r   r   ,  s   " z3test_coverage_union_reduce_axis.<locals>.<listcomp>r   rI   r   r   r,   rK   rL   )rC   r   rt   r&   r   r'   )rO   r(   r   r   r   test_coverage_union_reduce_axis)  s   ry   c                  C   s   t g d} t g d}tjdkr't| |}t| |g}t||dd d S tjtjdd t| | W d    d S 1 sAw   Y  d S )N)r,   r,   r,   r   r   r   )r   r,   rz   )r{   )g?r,   )r   r,   )r   r   r{   r      r   Trr   z6CoverageUnion cannot process incorrectly noded inputs.r.   )	r   r   r#   ru   multipolygonsr   r$   r1   GEOSException)r   otherresultr>   r   r   r   &test_coverage_union_overlapping_inputs7  s   
"r   zgeom_1, geom_2c                 C   s   g | ]}t |gqS r   )r   )r   non_polygonr   r   r   r   N  s    c                 C   s   g | ]}t D ]}||gqqS r   )non_polygon_types)r   non_polygon_1non_polygon_2r   r   r   r   P  s    c                    s  t jdkra fdd  | } |}t|dkr@||kr@t  t | |}W d    n1 s1w   Y  | |ks>J d S tjt jdd t | | W d    d S 1 sZw   Y  d S tjt jdd t | | W d    d S 1 s{w   Y  d S )Nr}   c                    sH   t | dr| jst }| jD ]} | | O }q|S | jdddhS )NgeomsMulti
LinearRing
LineString)hasattrr   setr   r!   lstripreplace)r   gtseffective_geom_typesr   r   r   Y  s   
zDtest_coverage_union_non_polygon_inputs.<locals>.effective_geom_typesr,   z Overlay input is mixed-dimensionr.   z)Unhandled geometry type in CoverageUnion.)r   r#   lenr	   ru   r$   r1   r   )geom_1geom_2geom_types_1geom_types_2r   r   r   r   &test_coverage_union_non_polygon_inputsJ  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   r|   r   )r   )r   r   )r   r   r|   r   d   c                 C   s"   t j| |d}t ||sJ d S rh   )r   	union_allr9   )r   r+   r>   r(   r   r   r   test_union_all_precu  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   rs   unary_unionr   r9   )r   r(   r>   r   r   r   test_uary_union_alias  s    r   )@numpyrR   r$   r   r   r   r   shapely.errorsr   shapely.testingr   shapely.tests.commonr   r   r	   r
   r   r   all_single_typesr    intersectionsymmetric_differenceunionSET_OPERATIONSintersection_allsymmetric_difference_allr   REDUCE_SET_OPERATIONSREDUCE_SET_OPERATIONS_PRECrs   rB   r   markparametrizer)   skipifr#   r2   r7   r?   rC   rF   rH   rP   rV   r]   r^   ra   rd   re   rf   rg   rj   rk   rl   rn   ro   rp   rv   ry   r   r   r   r   r   r   r   r   <module>   s    

	

	


	

	



<