a
    t@8b\  ć                   @   sŲ   d dl mZmZ d dlmZ d dl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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 )é    )Ś
DerivativeŚFunction)ŚS)ŚSymbol)Śexp)Śsqrt)
ŚPointŚPoint2DŚLineŚPolygonŚSegmentŚconvex_hullŚintersectionŚcentroidŚPoint3DŚLine3D)ŚidiffŚclosest_pointsŚfarthest_pointsŚ_ordered_pointsŚare_coplanar)Śsolve)Śraisesc                     sd  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sJ |t|| gd
 ” ks J t|| d
 ” |ksŗJ d td  d	 d   | | t|| d ”  ”sųJ d fddt|| D v sJ t| |  | |gt| d ksJJ t|t	| t	  |d t	|  |d  ks J t|| t	  || g| t|  t	 ksąJ 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   © ś=lib/python3.9/site-packages/sympy/geometry/tests/test_util.pyŚ
<listcomp>   ó    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$    " $.V@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sJ t tddtddtddtdddd	d
tddtddgksÜJ d S )Nr   c                   S   s   t tdddS ©Nr   r!   )r   r   r'   r'   r'   r(   Ś<lambda>%   r*   z#test_intersection.<locals>.<lambda>©r   r   ©r   r   )é’’’’r   )r+   r   )r   r+   T)Zpairwiser+   )Zslope)r   r   r   Ś	TypeErrorr   r
   r'   r'   r'   r(   Śtest_intersection#   s6    
ż’ż
ż’żü’ür4   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sfJ d S )Nc                   S   s   t tdddS r.   )r   r   r'   r'   r'   r(   r/   9   r*   z"test_convex_hull.<locals>.<lambda>©)r+   r2   )r+   éž’’’)r!   r2   )éū’’’r6   )é   éü’’’F)Zpolygonr7   r6   r+   r2   r!   r8   r9   )r   r3   r   Śdictr	   )Śpointsr'   r'   r(   Śtest_convex_hull8   s    "žr<   c                  C   sĘ   t ddd} |  dd”}t| |tddd ks4J tdd} tdd	}t| |td
td d ksjJ ttddtddtddd ksJ ttddtddtddtddd ksĀJ d S )Nr0   )é
   r   )r=   r=   r   é   é(   r!   r1   )r   r   r+   r   )r   Ś	translater   r   r   r   )ŚpŚqr'   r'   r(   Śtest_centroid@   s    

"(rC   c                     s6  ddl m}  ddlm} ttfD ]}|tkr4t 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 |t|dD }t | d  }\}}| |”|ksJ |t|ks@J q@t }t|dkrÖ| t
| dd| dd” qØt|}|dd ||dD }t | d  }\}}| |”|ks"J |t|ks J q t
ddt
ddt
tjtdd   }}}dd ||||fdD }t||||ksJ t||||ks¦J g d¢}t| t
ddt
dd
fhksŅJ g d¢}t| t
ddt
ddfhksžJ tddt
ddt
ddfhks$J tt	d d  d S )!Nr   )Śrandint)Śsubsetsc                      s    t ddt ddS )Nr   ©r	   r'   ©Śfuncr'   r(   r/   U   r*   z5test_farthest_points_closest_points.<locals>.<lambda>r!   r+   r   r=   r    r2   r   T)Zpositivec                 S   s   g | ]}t |qS r'   rF   )r%   Śar'   r'   r(   r)   e   r*   z7test_farthest_points_closest_points.<locals>.<listcomp>c                 s   s   | ]\}}|  |”V  qd S ©N©Śdistance©r%   ŚiŚjr'   r'   r(   Ś	<genexpr>h   r*   z6test_farthest_points_closest_points.<locals>.<genexpr>é   éd   c                 s   s   | ]\}}|  |”V  qd S rJ   rK   rM   r'   r'   r(   rP   s   r*   c                 S   s   h | ]\}}t ||fqS r'   )r   rM   r'   r'   r(   Ś	<setcomp>{   s   ’z6test_farthest_points_closest_points.<locals>.<setcomp>)©r+   r+   )r+   r   )r!   r+   )r7   r   )r8   r    r7   r8   r5   r6   r9   rT   r0   c                   S   s   t dS )NrT   )r   r'   r'   r'   r(   r/      r*   )Zsympy.core.randomrD   Zsympy.utilities.iterablesrE   ŚminŚmaxr   r   r   Ś
ValueErrorr	   r   ŚsetŚlistrL   r   ŚlenŚaddr   ZHalfr   )rD   rE   ZhowZp1Zp2Zp3Zp4Zp5Śdupr   Śsr;   Śdr,   rI   ŚbŚcr'   rG   r(   Ś#test_farthest_points_closest_pointsK   s^    $( "’
’’’’ra   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sxJ t| |dksJ d S )	Nr"   r   r+   r2   r6   r!   é	   F)r   r   r
   r	   r   )rI   r_   r`   r^   r'   r'   r(   Śtest_are_coplanar   s    rc   N)&Zsympy.core.functionr   r   Zsympy.core.singletonr   Zsympy.core.symbolr   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   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-   r4   r<   rC   ra   rc   r'   r'   r'   r(   Ś<module>   s   0A