o
    8Va                     @   s   d dl mZmZmZmZmZmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ dd Zdd	 Zd
d Zdd Zdd Z dd Z!dS )    )Symbolsqrt
DerivativeSFunctionexp)
PointPoint2DLinePolygonSegmentconvex_hullintersectioncentroidPoint3DLine3D)idiffclosest_pointsfarthest_points_ordered_pointsare_coplanar)solve)raisesc                     sZ  t dddt ddd} t ddd}td}td}d | d  d	 }d
 d | d   | d  }|t|| d ksAJ |t|| gd ksOJ t|| d |ks\J d td  d	 d   || t|| d  s{J d fddt|| D v sJ t| |  | |gt| d ksJ t|t	| t	  |d t	|  |d  ksJ t|| t	  || g| t|  t	 ksJ t|| t	  | |g|  t	 t|  ksJ t|| ||gt|ks+J d S )NxT)realytfg               r   c                    s   g | ]}| d  qS )r#   )Zdiffequals).0ZsolZexplicitr    @/usr/lib/python3/dist-packages/sympy/geometry/tests/test_util.py
<listcomp>   s    ztest_idiff.<locals>.<listcomp>   )
r   r   r   Zsimplifyr   Zsubsr   r%   r   r   )r   r   r   r   Zcircansr(   r'   r)   
test_idiff	   s$     ",T>H<r-   c                   C   s   t tddg ksJ ttdd  t tddtddtddd	d
tddtddgks/J t tddtddtddd	d
tddtddgksLJ t tddtddtddtdddd	d
tddtddgksnJ d S )Nr   c                   S      t tdddS Nr   r#   )r   r   r(   r(   r(   r)   <lambda>!       z#test_intersection.<locals>.<lambda>r   r   r   r   )r   )r+   r   )r   r+   T)pairwiser+   )Zslope)r   r   r   	TypeErrorr   r
   r(   r(   r(   r)   test_intersection   s6   

r7   c                  C   sj   t tdd  g d} t| i tddtddtdd	td
d	tddgtddtddgfks3J d S )Nc                   S   r.   r/   )r   r   r(   r(   r(   r)   r0   5   r1   z"test_convex_hull.<locals>.<lambda>)r+   r4   )r+   )r#   r4   )r9   )   F)Zpolygonr:   r9   r+   r4   r#   r;   r<   )r   r6   r   dictr	   )pointsr(   r(   r)   test_convex_hull4   s   "r?   c                  C   s   t ddd} | dd}t| |tddd ksJ tdd} tdd	}t| |td
td d ks5J ttddtddtddd ksIJ ttddtddtddtddd ksaJ d S )Nr2   )
   r   )r@   r@   r      (   r#   r3   )r   r   r+   r   )r   	translater   r   r   r   )pqr(   r(   r)   test_centroid<   s   

"(4rF   c                     s*  ddl m}  ddlm} ttfD ]}|tu rt nt tt	 fdd t
ddt
ddt
ddg}t
ddt
ddt
ddg}t
ddt
ddt
dd	g}t
ddt
ddt
d
dg}t
ddt
ddt
ddg}t
ddt
ddt
ddt
ddg}tddd}	dd |	df|	d df|	d dffD }
||||||
|fD ])}|dd ||dD }t | d  }\}}|||k |t|ksJ qt }t|dkr|t
| dd| dd t|dkst|}|dd ||dD }t | d  }\}}|||k |t|ksJ qt
ddt
ddt
tjtdd }}}dd ||||fdD }t||||ksBJ t||||ksMJ g d}t| t
ddt
dd
fhkscJ g d}t| t
ddt
ddfhksyJ tddt
ddt
ddfhksJ tt	d d  d S )!Nr   )randint)subsetsc                      s    t ddt ddS )Nr   r	   r(   funcr(   r)   r0   Q   s    z5test_farthest_points_closest_points.<locals>.<lambda>r#   r+   r   r@   r    r4   r   T)Zpositivec                 S   s   g | ]}t |qS r(   rI   )r&   ar(   r(   r)   r*   a   s    z7test_farthest_points_closest_points.<locals>.<listcomp>c                 s       | ]
\}}| |V  qd S Ndistancer&   ijr(   r(   r)   	<genexpr>d       z6test_farthest_points_closest_points.<locals>.<genexpr>   d   c                 s   rM   rN   rO   rQ   r(   r(   r)   rT   o   rU   c                 S   s   h | ]
\}}t ||fqS r(   )r   rQ   r(   r(   r)   	<setcomp>w   s    z6test_farthest_points_closest_points.<locals>.<setcomp>)r+   r+   )r+   r   )r#   r+   )r:   r   )r;   r    r:   r;   r8   r9   r<   rY   r2   c                   S   s   t dS )NrY   )r   r(   r(   r(   r)   r0      s    )ZrandomrG   Zsympy.utilities.iterablesrH   minmaxr   r   r   
ValueErrorr	   r   listrP   r   setlenaddr   ZHalfr   )rG   rH   ZhowZp1Zp2Zp3Zp4Zp5dupr   sr>   dr,   rL   bcr(   rJ   r)   #test_farthest_points_closest_pointsG   s`   $("
rf   c                  C   s   t tdddtddd} t tdddtddd}t tdddtddd}ttddtdd}t| ||dks<J t| |dksEJ d S )	Nr"   r   r+   r4   r9   r#   	   F)r   r   r
   r	   r   )rL   rd   re   rc   r(   r(   r)   test_are_coplanar   s   rh   N)"Zsympyr   r   r   r   r   r   Zsympy.geometryr   r	   r
   r   r   r   r   r   r   r   Zsympy.geometry.utilr   r   r   r   r   Zsympy.solvers.solversr   Zsympy.testing.pytestr   r-   r7   r?   rF   rf   rh   r(   r(   r(   r)   <module>   s     0A