o
    oh                     @   s  d dl Z d dlmZ d dl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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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 )    N)Float)
DerivativeFunction)S)Symbol)expcossintancoshsinh)sqrt)PointPoint2DLinePolygonSegmentconvex_hullintersectioncentroidPoint3DLine3DRayEllipse)idiffclosest_pointsfarthest_points_ordered_pointsare_coplanar)solve)raisesc                     s"  t dddt ddd} t ddd}td}td}d | d  d	 }d
 d | d  d  | d  }|t|| dksHJ t|| d|t|| gdksTJ 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 t|  |d  ksJ t|| t  || g| t|  t ksJ t|| t  | |g|  t|t   ksJ t|| ||gt|ks1J | dt	 d  d  t
d  dtd    }t|| dt	 t dt
d   dt
  td d  dt   dt	 d   dd   ksJ d S )NxT)realytfg                  r   c                    s   g | ]}| d  qS )r+   )diffequals).0solexplicitr!    r/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/geometry/tests/test_util.py
<listcomp>   s    ztest_idiff.<locals>.<listcomp>i
   i   )r   r   r   r   subsr   r/   r   r   r	   r
   r   r   r   )r#   r$   r%   r&   circansfxyr4   r2   r5   
test_idiff   s<   $$ ",Z>H8:,

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} t ttddtddttdd| ddd	d
d j	}|t
tddddj	ksJ tdd} t ttddtddttdd| ddd	d
d j	}|t
tddddj	ksJ |d jdksJ |d jdksJ d S )Nr   c                   S      t tdddS Nr   r+   )r   r   r4   r4   r4   r5   <lambda>+       z#test_intersection.<locals>.<lambda>r   r   r'   r   )r   )r*   r   )r   r*   T)pairwiser*   )slopeg      @gMbP?rD   g-C6J?g333333g       @)centerhradiusvradiusgj6gG?gpF)evaluater(   r-   5   r8   )r   r   r    	TypeErrorr   r   r   r   r   coordinatespytestapproxr   _prec)Rcc2r4   r4   r5   test_intersection)   sr   






rT   c                  C   sh   t tdd  g d} t| i dditddtdd	td
d	tddgtddtddgfks2J d S )Nc                   S   r>   r?   )r   r   r4   r4   r4   r5   r@   P   rA   z"test_convex_hull.<locals>.<lambda>)r*   rD   )r*   )r+   rD   )rV   )   polygonFrW   rV   r*   rD   r+   rX   rY   )r    rL   r   r   )pointsr4   r4   r5   test_convex_hullO   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 )NrB   )r7   r   )r7   r7   r   r8   (   r+   rC   )r'   r'   r*   r'   )r   	translater   r   r   r   )pqr4   r4   r5   test_centroidW   s   

"(4ra   c                     s8  ddl m}  ddlm} ttfD ]	}|tk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 |t|dD }t | d  }\}}|||ksJ |t|ksJ qt }t|dkr|t
| dd| dd t|dkst|}|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sIJ t||||ksTJ g d}t| t
ddt
dd
fhksjJ g d}t| t
ddt
ddfhksJ 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   r4   funcr4   r5   r@   l   s    z5test_farthest_points_closest_points.<locals>.<lambda>r+   r*   r'   r7   r(   rD   r!   T)positivec                 S   s   g | ]}t |qS r4   rd   )r0   ar4   r4   r5   r6   |   s    z7test_farthest_points_closest_points.<locals>.<listcomp>c                 s       | ]
\}}| |V  qd S Ndistancer0   ijr4   r4   r5   	<genexpr>       z6test_farthest_points_closest_points.<locals>.<genexpr>   d   c                 s   ri   rj   rk   rm   r4   r4   r5   rp      rq   c                 S   s   h | ]
\}}t ||fqS r4   )r   rm   r4   r4   r5   	<setcomp>   s    z6test_farthest_points_closest_points.<locals>.<setcomp>)r*   r*   )r*   r'   )r+   r*   )rW   r'   )rX   r(   rW   rX   rU   rV   rY   ru   rB   c                   S   s   t dS )Nru   )r   r4   r4   r4   r5   r@      s    )sympy.core.randomrb   sympy.utilities.iterablesrc   minmaxr   r   r    
ValueErrorr   r   setlistrl   r   lenaddr   Halfr   )rb   rc   howp1p2p3p4p5dupr!   sr[   dr;   rh   brR   r4   re   r5   #test_farthest_points_closest_pointsb   s`   $("
r   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*   rD   rV   r+   	   F)r   r   r   r   r   )rh   r   rR   r   r4   r4   r5   test_are_coplanar   s   r   )0rN   sympy.core.numbersr   sympy.core.functionr   r   sympy.core.singletonr   sympy.core.symbolr   sympy.functionsr   r   r	   r
   r   r   (sympy.functions.elementary.miscellaneousr   sympy.geometryr   r   r   r   r   r   r   r   r   r   r   r   sympy.geometry.utilr   r   r   r   r   sympy.solvers.solversr   sympy.testing.pytestr    r=   rT   r\   ra   r   r   r4   r4   r4   r5   <module>   s"     8&A