U
    ZÊ¹j¦”  ã                   @   s˜  d dl mZmZmZmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlm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 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#m$Z$m%Z%m&Z& d dl'm(Z( d dl)m*Z+ d dl,m-Z- d dl.m/Z/m0Z0 e
ddd�Z1e
ddd�Z2e
ddd�Z3e
ddd�Z4e
ddd�Z5e
ddd�Z6e
ddd�Z7eddd�\Z8Z9eddd�Z:dd„ Z;dd„ Z<dd„ Z=d d!„ Z>d"d#„ Z?d$d%„ Z@d&d'„ ZAd(d)„ ZBd*d+„ ZCd,d-„ ZDd.d/„ ZEd0d1„ ZFd2d3„ ZGd4d5„ ZHd6d7„ ZId8d9„ ZJd:d;„ ZKd<d=„ ZLd>d?„ ZMd@dA„ ZNdBdC„ ZOdDdE„ ZPdFdG„ ZQdHdI„ ZRdJdK„ ZSdLdM„ ZTdNdO„ ZUdPdQ„ ZVdRdS„ ZWdTdU„ ZXdVdW„ ZYdXdY„ ZZdZd[„ Z[d\d]„ Z\d^d_„ Z]d`da„ Z^dbdc„ Z_ddS )eé    )ÚFloatÚRationalÚooÚpi)ÚEq)ÚS)ÚSymbolÚsymbols)Úsqrt)ÚacosÚcosÚsin)ÚEmptySet)Úsimplify)Útan)ÚCircleÚGeometryErrorÚLineÚPointÚRayÚSegmentÚTriangleÚintersectionÚPoint3DÚLine3DÚRay3DÚ	Segment3DÚPoint2DÚLine2DÚPlane)ÚUndecidable)Ú_asa)Úcartes)ÚraisesÚwarnsÚxT©ÚrealÚyÚzÚkÚx1Úy1Útúa,bÚmc                      sz  ddl m‰m‰m‰ m‰ tdˆ ˆ d ƒttddƒtddƒƒksFt‚tdˆ dˆ  d ƒttdt	d	dƒƒtdt	d
dƒƒƒks„t‚tdˆ  ˆ d ddd�ttddƒtddƒƒks¸t‚tdˆ ˆ ƒttddƒtddƒƒksât‚tˆˆ ƒttddƒtdd	ƒƒk�s
t‚tt
dˆ  ˆ dƒdˆd�ttddƒtddƒƒk�sBt‚tˆd ƒttddƒtddƒƒk�sjt‚tdˆ d ˆd�ttddƒtddƒƒk�sšt‚tˆƒttddƒtddƒƒk�s¾t‚tdˆ ˆd�ttddƒtddƒƒk�sêt‚tˆˆd�ttddƒtddƒƒk�st‚tt‡‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ d S )Nr   )r%   r(   ÚaÚbé   é   iîÿÿÿé   iëÿÿÿé   éÿÿÿÿéüÿÿÿr0   r1   ©r%   r(   éýÿÿÿé   )r(   )r%   c                      s   t ˆ ˆ ƒS ©N©r   © r8   r=   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/geometry/tests/test_line.pyÚ<lambda>/   ó    z+test_object_from_equation.<locals>.<lambda>c                      s   t ˆ ˆ ddd�S ©Nr0   r1   r8   r<   r=   ©r0   r1   r=   r>   r?   0   r@   c                      s   t ˆˆ  ƒS r;   r<   r=   r8   r=   r>   r?   1   r@   c                      s   t ˆˆ  ddd�S rA   r<   r=   rB   r=   r>   r?   2   r@   c                      s   t ˆ d d ˆ ƒS )Nr4   r:   r<   r=   r8   r=   r>   r?   3   r@   )Z	sympy.abcr%   r(   r0   r1   r   r   r   ÚAssertionErrorr   r   r#   Ú
ValueErrorr=   r=   )r0   r1   r%   r(   r>   Útest_object_from_equation   s4    . ÿ
 ÿ
*( ÿ(0$,(rE   c                 C   s&   t dƒ}| | |   k o |k S   S )z.Test if two floating point values are 'equal'.z1.0E-10)r   )r0   r1   Zt_floatr=   r=   r>   Úfeq6   s    rF   c               	   C   s  t ddddƒ} | j}| j}tt tt ddƒt ddƒƒtt ddƒt ddƒƒ¡ ¡ t ¡ d ƒs`t‚t| |ƒ t||ƒ¡td ks‚t‚t	dddƒ}t
 t
|t	dddƒƒt
|t	dddƒƒ¡ttdƒd ƒksÊt‚t
 t
|t	dddƒƒt
t	dddƒ|ƒ¡ttdƒ d ƒk�s
t‚d S )Nr4   r:   r2   é   r   r5   )r   Zorthogonal_directionÚoriginrF   r   Zangle_betweenZevalfr   rC   r   r   r   r
   )r0   r1   Úor)   r=   r=   r>   Útest_angle_between<   s(    ÿ
ÿ"ÿÿÿÿrJ   c                  C   s`   t ddd�} t dtd d�}|  |¡t d ks4t‚| | ¡td ksJt‚|  | ¡dks\t‚d S )N©r   r   r   ©Zangle©r4   r:   r:   )r   r   Zclosing_anglerC   rB   r=   r=   r>   Útest_closing_angleK   s
    rN   c                  C   sR   t tddƒtddƒƒ} t tddƒtddƒƒ}|  |¡tdtdƒ d ƒksNt‚d S )Nr4   r:   r2   r5   )r   r   Zsmallest_angle_betweenr   r
   rC   rB   r=   r=   r>   Útest_smallest_angleS   s    rO   c                  C   sv   t tddƒtddƒƒ} |  ¡ dks&t‚ttddƒtddƒƒ} |  ¡ dksLt‚ttddƒtddƒƒ} |  ¡ dksrt‚d S )	Nr4   r:   zï<path fill-rule="evenodd" fill="#66cc99" stroke="#555555" stroke-width="2.0" opacity="0.6" d="M 1.00000000000000,1.00000000000000 L 1.00000000000000,2.00000000000000" marker-start="url(#markerReverseArrow)" marker-end="url(#markerArrow)"/>r   zš<path fill-rule="evenodd" fill="#66cc99" stroke="#555555" stroke-width="2.0" opacity="0.6" d="M 1.00000000000000,0 L 1.00000000000000,1.00000000000000" />r2   r5   zé<path fill-rule="evenodd" fill="#66cc99" stroke="#555555" stroke-width="2.0" opacity="0.6" d="M 2.00000000000000,3.00000000000000 L 3.00000000000000,5.00000000000000" marker-start="url(#markerCircle)" marker-end="url(#markerArrow)"/>)r   r   Z_svgrC   r   r   )r0   r=   r=   r>   Útest_svgY   s    rP   c                  C   sš  t tdddƒtdddƒƒ} ttttƒtttƒƒ}| ¡ |ks@t‚tdt	d d� ¡ tt
d t
d ƒksjt‚tddƒ ¡ tdt
 ddt
  ƒks’t‚|  |  ¡ ¡|  ¡ ks¬t‚tdddd	gd
� ¡ tt
d dt
 d d	t
 d ƒksæt‚ttdddƒtdddƒƒjttjtjtjƒk�st‚tttttƒttttƒƒjtd	ƒttt d ƒ k�sTt‚tddƒ ¡ tt
d dt
 d d	t
 d ƒk�sˆt‚ttdd„ ƒ d S )Nr   r4   ©r4   r4   rG   rL   ©r:   r2   r:   ©r4   r4   r4   r2   ©Údirection_ratio)r:   r2   rG   c                   S   s   t tdfdƒ t¡S )Nr4   rR   )r   r%   Úarbitrary_pointr=   r=   r=   r>   r?   q   r@   z&test_arbitrary_point.<locals>.<lambda>)r   r   r   r   r+   r,   rV   rC   r   r   r-   r   Úperpendicular_segmentr   r   Úmidpointr   ÚHalfÚlengthr
   r#   rD   ©Úl1Úl2r=   r=   r>   Útest_arbitrary_pointb   s&    ÿ(ÿÿ
:ÿ
r^   c               
   C   s¾   t tddƒtddƒƒ} t tttƒttdt ƒƒ}t  | ¡dksBt‚t  | |¡sRt‚t  | | | |¡sft‚t  | |t tdtƒttddƒtƒƒ¡s�t‚t  | t tddƒtt tƒƒ|¡dksºt‚d S )Nr   r4   Fr5   r9   )r   r   r+   Úare_concurrentrC   r   r[   r=   r=   r>   Útest_are_concurrent_2dt   s    *r`   c               
   C   sä   t dddƒ} t| t dddƒƒ}tt dddƒt dddƒƒ}tt dddƒt dddƒƒ}t |¡dksdt‚t |tt tttƒt tttƒƒ¡dksŽt‚t |t| t tttƒƒtt tttƒt tdt dƒƒ¡dksÌt‚t ||¡dksàt‚d S ©Nr   r4   FT)r   r   r   r_   rC   r+   r,   )Úp1r\   Z
parallel_1Z
parallel_2r=   r=   r>   Útest_are_concurrent_3d~   s    *ÿÿrc   c                  C   s€  ddl m}  dddgtddƒf}| |dƒ}ttddƒtddƒƒ}dddd	gtddd
ƒf}| |dƒ}ttdddƒtdddƒƒ}dddddgtddddƒf}| |dƒ}ttdddd	ƒtddddƒƒ}	ddddddddg}
|D ]}t|Ž  qØ|
D ]}|D ]}t||ƒ|ƒ qòqê|D ]}t|Ž  �q|
D ] }|D ]}t||ƒ|ƒ �q(�q |D ]}t|Ž  �qF|
D ] }|D ]}t|	|ƒ|ƒ �qb�qZdS )z”Functions accepting `Point` objects in `geometry`
    should also accept tuples, lists, and generators and
    automatically convert them to points.r   )ÚsubsetsrM   r4   r2   r5   r:   )r4   r:   r2   rG   é   )r4   r:   r2   rG   é   ÚcontainsÚdistanceÚequalsÚparallel_lineÚperpendicular_linerW   Ú
projectionr   N)	Úsympy.utilities.iterablesrd   r   r   r   r   r   Úgetattrr   )rd   Z	singles2dZ	doubles2dZl2dZ	singles3dZ	doubles3dZl3dZ	singles4dZ	doubles4dZl4dZtest_singleÚpÚfuncr=   r=   r>   Útest_argumentsŠ   s:    


 ÿ
rq   c                  C   sÀ  t ddƒ} t ddƒ}t ddƒ}t| |ƒ ¡ }t|| ƒ ¡ }t| |ƒ}tt ttƒt tdt ƒƒ}t| t ddƒƒ}t| t ddƒƒ}tt ddƒ| ƒ}	t| |ƒ}
|
 ¡ }tddd�tddƒksºt‚tdtd�tddƒksÔt‚tdtd�jdksêt‚tdt d�tddƒk�st‚t| |ƒ 	d	d¡t| t d	dƒƒk�s0t‚t| |ƒt| |ƒk�sJt‚t| |ƒt|| ƒk�sdt‚|tt ttƒt t
t
ƒƒk�s„t‚||k�s’t‚t| |ƒt|| ƒk�s¬t‚t| |ƒ| k�sÀt‚| |k�sÎt‚| |k�sÜt‚|
t| |ƒk�sðt‚tt ddƒt ddƒƒtt ddƒt dd	ƒƒk�s"t‚tt ddƒt dd	ƒƒtt ddƒt ddƒƒk�sTt‚tt ddƒt dd	ƒƒjtjk�sxt‚tt ddƒt dd	ƒƒjtjk�sœt‚tt ddƒt d
d	ƒƒjtjk�sÀt‚tt ddƒt d	dƒƒjtjk�sät‚tt ddƒt d	d	ƒƒjtjk�st‚tt ddƒt d	dƒƒjtjk�s,t‚||
kdk�s>t‚t| |ƒ|
k�sRt‚tt ttƒt tdt ƒƒt| t d
dƒƒk�s‚t‚t| |ƒjt tjtjƒk�s¢t‚t| t t tƒƒjtd	td	  ƒk�sÌt‚|jdk�sÜt‚|jtk�sìt‚|jdk�süt‚t| t ddƒƒjtk�st‚t|j| ¡ ƒj|jk�s6t‚t|	j|	 ¡ ƒj|	jk�sTt‚tt dd
ƒt| t ddƒƒ ¡ ƒjt| t ddƒƒjk�sŽt‚|jdk�sžt‚tt tft d td fƒjdk�sÈt‚t| t ddƒƒjdk�sät‚tdtd�}| tdt d ¡tddƒk�st‚| tdt d ¡tddƒk�s8t‚| tt d ¡tddƒk�sZt‚| ttd	 ¡tddƒk�szt‚| tt d	 ¡tddƒk�sœt‚tddƒD ]}| ¡ |k�s¦t‚�q¦|j| jk�rÜ|j| jk�sàt‚|j|jk�rü|j|jk�s t‚| j|j  k�r|jk�rBn n | j|j  k�r@|jk�sFn t‚t|
ƒtt|| ƒƒk�sbt‚|
 ¡ tddgk�szt‚t| |ƒ ¡ tddgk�s˜t‚tdtd d� ¡ tddgk�s¼t‚d S )Nr   r4   éÐ  rQ   ©Úslope©r:   r:   rM   )r4   r4   r4   r:   r:   r6   éþÿÿÿFr5   ©r   r4   r   ©r4   r4   r   ©r4   r   r   rK   rL   r2   rG   ©r6   r4   )r6   r6   )r4   r6   ©r   r4   ©r   r6   éûÿÿÿé
   ) r   r   Úrandom_pointr   r+   r   rC   r   ZboundsÚscaler,   Ú
xdirectionr   ÚZeroÚInfinityÚNegativeInfinityÚ
ydirectionrX   rY   rZ   r
   rt   ÚsourceZcoefficientsr%   Úsubsr   Úranger(   ÚhashZplot_intervalr-   )rb   Úp2Zp10Zp_r3Zp_r4r\   Úl3Úl4Úr1Úr2Ús1Zp_s1ÚrÚindr=   r=   r>   Útest_basic_properties_2d¯   s€    




( 22$$$$$$0 *:*$$" "  Fr’   c            	      C   s0  t dddƒ} t dddƒ}t tttƒ}t tdt dƒ}t| |ƒ}t||ƒ}t| t dddƒƒ}t| |ƒ}t| |ƒ}tddddgd	�tt dddƒt dddƒƒksžt‚tdddd
gd	�tt dddƒt dddƒƒksÎt‚tddddgd	�tt dddƒt dddƒƒksþt‚tt dddƒt dddƒƒjdddgk�s*t‚tt| t dddƒƒƒt| t dddƒƒk�sXt‚ttt dddƒt dddƒƒƒt| t dddƒƒk�sŽt‚t| |ƒt|| ƒk�s¨t‚||k�s¶t‚|t|t tttƒƒk�sÒt‚||k�sàt‚tt dddƒt dddƒƒtt dddƒt dddƒƒk�st‚tt dddƒt dddƒƒtt dddƒt dddƒƒk�sTt‚tt dddƒt dddƒƒjt	j
k�s|t‚tt dddƒt dddƒƒjt	j
k�s¤t‚tt dddƒt dddƒƒjt	j
k�sÌt‚tt dddƒt dddƒƒjt	jk�sôt‚tt dddƒt dddƒƒjt	jk�st‚tt dddƒt dddƒƒjt	jk�sDt‚tt dddƒt dddƒƒjt	jk�slt‚tt dddƒt dddƒƒjt	jk�s”t‚tt dddƒt dddƒƒjt	jk�s¼t‚| |k�sÊt‚| |k�sØt‚|jdddgk�sît‚|jt t	jt	jt	jƒk�st‚t| t dddƒƒjt	jk�s,t‚d S )Nr   r4   r6   r5   rS   r:   r2   rG   rT   rf   re   é   rv   )r   r+   r   r   r   rC   Zdirection_cosiner,   r�   r   rƒ   r…   Z
zdirectionr„   r‚   rU   rX   rY   )	rb   rŠ   Úp3Zp5r\   r‹   r�   Úr3r�   r=   r=   r>   Útest_basic_properties_3dü   sF    



000,.6::(((((((((r–   c               	   C   sŒ  t ddƒ} t| t ddƒƒ}t| tdddƒƒ}t| tdddƒƒ}t| tdddƒƒ}tt ddƒt ddƒƒ}t dtt d ƒtdtfdtfƒksŽt‚t tt d dƒttdftdfƒks¶t‚tdddƒt	ddƒksÐt‚tdddƒt	ddƒksêt‚t	tdddƒtdddƒƒ 
g ¡d	k�st‚t	tdddƒtdddƒƒ 
t	tdddƒtdddƒƒ¡d
k�sTt‚| 
t ddƒ¡d	k�snt‚| 
d¡d	k�s‚t‚| 
d¡d
k�s–t‚| 
| ¡d	k�sªt‚| 
d¡d	k�s¾t‚| 
d¡d
k�sÒt‚| 
tddƒ¡d	k�sìt‚| 
tddƒ¡d
k�st‚| 
tddƒ¡d	k�s t‚| 
tddƒ¡d
k�s:t‚| 
t	| tdddƒƒ¡d	k�s\t‚| 
t	tdddƒtdddƒƒ¡d
k�s†t‚| 
tdddƒ¡d	k�s¢t‚| 
tdddƒ¡d	k�s¾t‚ttdddƒtdddƒƒ 
g ¡d
k�sèt‚tdtttfƒ 
dt dt dt f¡�st‚ttd
d��. t| tdddƒƒ 
t ddƒ¡d
k�sLt‚W 5 Q R X ttd
d��  | 
t ddƒ¡d
k�s~t‚W 5 Q R X d S )Nr   rG   r6   r4   r2   r:   rw   ry   TFr{   rK   rQ   )r4   r2   ru   rM   )r:   r5   )r2   r2   )r2   r5   éöÿÿÿ©r   r   r   ©Ztest_stacklevelç      ð?)r   r   r   r   r   r0   r1   r   rC   r   rg   r   r%   r(   r)   r$   ÚUserWarning)rb   r�   r�   rŽ   r•   Úlr=   r=   r>   Útest_contains)  sH    
((*ÿÿ
"**.2r�   c                  C   sf   t dƒ\} }}}tt| |ƒt||ƒƒ}t| tddƒ |d  |tddƒ |d  ƒ}| |¡sbt‚d S )Nz
u, v, w, zr:   r2   )r	   r   r   r   rg   rC   )ÚuÚvÚwr)   rœ   ro   r=   r=   r>   Útest_contains_nonreal_symbolsS  s    .r¡   c                  C   sL  t ddƒ} t ddƒ}tj}tt ddƒt ddƒƒ}tt ||ƒt ddƒƒ}t| |ƒ}| t ddƒ¡dksht‚| d¡dkszt‚| t ddƒ¡d| d ksšt‚| t tdƒd tdƒd ƒ¡d| ksÆt‚t| |ƒ t ddƒ¡t	dƒksèt‚t| |ƒ t ddƒ¡t	dƒk�st‚t| |ƒ t ddƒ¡dk�s,t‚t| |ƒ d¡t	dƒk�sJt‚tddƒ | ¡dk�sdt‚tddƒ |¡dk�s~t‚tdd	ƒ | ¡dk�s˜t‚tdd	ƒ |¡dk�s²t‚| t ddƒ¡t	dƒk�sÐt‚| t ddƒ¡dk�sêt‚| t ddƒ¡t	dƒk�st‚td
dƒ t ddƒ¡dt	dƒ d k�s4t‚| d
¡dk�sHt‚d S )Nr   r4   rK   r:   r2   r6   rz   r{   ©r4   r   rQ   ru   ç      ø?rG   )
r   r   rY   r   r   rh   rC   r   r   r
   )rb   rŠ   Zhalfr�   Ús2r�   r=   r=   r>   Útest_distance_2dZ  s.    


 ,"$ ,r¥   c                	   C   s4   t tdd�� tddƒtddƒks&t‚W 5 Q R X d S )NFr™   rQ   )r:   r4   r:   rx   )r$   r›   r   rC   r=   r=   r=   r>   Útest_dimension_normalizationw  s    r¦   c                  C   sl  t dddƒt dddƒ } }t tdƒd tdƒd tdƒd ƒ}tt dddƒt dddƒƒ}tt tjtjtjƒt dddƒƒ}t| |ƒ}| | ¡dks”t‚| | ¡tdƒd ks®t‚| |¡dtdƒ d ksÌt‚| d¡dksÞt‚| d¡tdƒd ksøt‚| | ¡dk�st‚| | ¡tdƒd k�s(t‚| |¡dtdƒ d k�sHt‚| d¡dk�s\t‚| d¡tdƒd k�sxt‚t	| |ƒ t dddƒ¡dtdƒ d k�s¦t‚t	| |ƒ t dddƒ¡dtdƒ d k�sÔt‚t	| |ƒ t dddƒ¡dk�söt‚t	| |ƒ d¡dk�st‚t	| |ƒ d	¡dtdƒ d k�s6t‚t	dd
ƒ | ¡dk�sPt‚t	dd
ƒ |¡tdƒk�snt‚t	ddƒ | ¡dk�sˆt‚t	ddƒ |¡tdƒk�s¦t‚t	ddƒ t	ddƒ¡dk�sÆt‚t	ddƒ t	ddƒ¡dk�sæt‚t	ddƒ t	ddƒ¡dk�st‚t	ddƒ t	d
dƒ¡dk�s&t‚t	ddƒ t
ddƒ¡dk�sFt‚t	ddƒ t
d
d
ƒ¡dk�sft‚t	ddƒ t
ddƒ¡dk�s†t‚| t dddƒ¡tdƒk�s¦t‚| t dddƒ¡dk�sÂt‚| d¡tdƒk�sÚt‚| d¡dk�sît‚tddƒ d¡dtdƒ d k�st‚tddƒ t dddƒ¡tdƒd k�s>t‚tddƒ t dddƒ¡tdƒd k�sht‚d S )Nr   r4   r2   r:   re   r˜   r6   )r:   r:   r:   )r4   r6   r4   rw   ry   ©r   r4   r:   )r~   r   r   )r~   r4   r:   ©r   r4   r4   )r:   r   r   ©r   r   r4   )r4   r4   r2   )r6   r6   r6   rS   )r4   r4   r:   )r6   r6   r:   rG   r£   r9   é	   éN   )r   r   r   r   rY   r   rh   rC   r
   r   r   )rb   rŠ   r”   r�   r¤   r�   r=   r=   r>   Útest_distance_3d|  sL    $ 
 .."&        &*r¬   c                  C   s  t ddƒ} t ddƒ}t| |ƒ}tdtd�}tt ttƒt tdt ƒƒ}| | j¡ tt ddƒt ddƒƒ¡slt‚| | ¡ tt ddƒt ddƒƒ¡s’t‚tt ttƒt ttƒƒ 	t t tƒ¡ tt t tƒt t dt t ƒƒ¡sÞt‚| 	| j¡ tt ddƒt ddƒƒ¡�st‚| 	| ¡ tt ddƒt ddƒƒ¡�s0t‚| 
t ddƒ¡dttd ƒ ttd d ƒ   d¡�slt‚t| tdddƒƒ t ddƒ¡d	k�s”t‚ttdddƒtdddƒƒ ttd
ddƒtdddƒƒ¡dk�sÔt‚ttdddƒtdddƒƒ t| tdddƒƒ¡d	k�st‚t| tdddƒƒ t ddƒ¡d	k�s4t‚t| tdddƒƒ t| tdddƒƒ¡dk�sdt‚tdttfƒ t dddƒ¡ ttdddƒttjtjdƒƒ¡�s¦t‚tdttfƒ t dddƒ¡ tdtjtjfƒ¡�sÜt‚t| tdddƒƒ t ddƒ¡d	k�st‚d S )Nr   r4   )r   r5   rs   r6   r:   r2   rš   Fr}   TrK   r{   )r   r   r/   r+   rk   Úargsri   rC   r,   rj   rh   Úabsr
   r   r   r   r-   r   rY   rW   r   )rb   rŠ   r\   r]   r‹   r=   r=   r>   Útest_equals¬  s.    


(&$ ÿ*(<(@8(0ÿ
6r¯   c                  C   s  t ddƒ} t ddƒ}t| |ƒ}tt ttƒt tdt ƒƒ}t| ¡ ƒtt tt fksXt‚t| ¡ ƒtt tt fksxt‚t| ¡ ƒtt tt fks˜t‚t| ¡ ƒtt tt fks¸t‚t| t ddƒƒjttd�tksÚt‚t| t ddƒƒ ¡ tksöt‚tt ddƒt ddƒƒ ¡ td k�st‚t|t ddƒƒ ¡ td k�s@t‚tt tttƒt t	t	t	ƒƒ ¡ t t t t
 fk�sxt‚tt dddƒt dddƒƒ ¡ t t d t t
 d fk�s¸t‚tt dddƒt dddƒƒ ¡ td t t
 d fk�sòt‚tt dddƒt dddƒƒ ¡ td t t
 d fk�s,t‚tt dddƒt dddƒƒ ¡ t t d t
d fk�sft‚tt dddƒt dddƒƒ ¡ td td fk�sšt‚tt dddƒt dddƒƒ ¡ td t
d fk�sÎt‚tt dddƒt dddƒƒ ¡ td t
d fk�st‚d S )Nr   r4   r8   r:   r2   rG   )r   r   r+   r   Zequationr%   r(   rC   r   r,   r)   )rb   rŠ   r\   r‹   r=   r=   r>   Útest_equationÆ  sH    


    "("ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿr°   c               
   C   sª  t ddƒ} t ddƒ}t ttƒ}t ttƒ}t| |ƒ}tt ddƒt ddƒƒ}tt ddƒt ddƒƒ}tt ddƒt ddƒƒ}t| |ƒ}tt ddƒt ddƒƒ}	tt ddƒt ddƒƒ}
t| |ƒ}tt ddƒt ddƒƒ}tt ddƒt ddƒƒ}t|| ƒ| gksôt‚t|t tdt ƒƒg k�st‚t|t||ƒƒ|gt||ƒgfk�s:t‚t|| t tdt ƒ¡ƒg k�s^t‚t||ƒ|gk�stt‚t||ƒ|gk�sŠt‚t||ƒ|gk�s t‚t||ƒ|gk�s¶t‚ttt dd	ƒt d	d	ƒƒtt d
d
ƒt d
dƒƒƒg k�sît‚t||ƒ|gk�st‚t|tt ddƒt ddƒƒƒtt ddƒt ddƒƒgk�s>t‚t|tt ddƒt ddƒƒƒt ddƒgk�slt‚t|tt ddƒt ddƒƒƒtt ddƒt ddƒƒgk�s¦t‚| |¡|gk�s¼t‚| tt ddƒt ddƒƒ¡g k�sât‚| tt ddƒt ddƒƒ¡t| t ddƒƒgk�st‚| t|| ƒ¡|gk�s2t‚t|| ƒ |	¡g k�sLt‚| |
¡|
 |¡  k�rr|
gk�sxn t‚t	ddƒ t	ddƒ¡t	ddƒgk�s t‚t	ddƒ t	ddƒ¡t	ddƒgk�sÈt‚tt ddƒt ddƒƒ tt ddƒt ddƒƒ¡tt ddƒt ddƒƒgk�st‚t
ddƒ t
ddƒ¡t
ddƒgk�s<t‚t
ddƒ t
ddƒ¡t
ddƒgk�sdt‚t
ddƒ t
ddƒ¡tdƒgk�sŠt‚t
ddƒ t
ddƒ¡t
ddƒgk�s²t‚t
ddƒ t
ddƒ¡t
ddƒgk�sÚt‚t
ddƒ t
ddƒ¡tddƒgk�st‚| tt ddƒt ddƒƒ¡t ddƒgk�s0t‚| tt ddƒt ddƒƒ¡tt ddƒ|ƒgk�sdt‚| tt ddƒt ddƒƒ¡g k�sŠt‚| tt ddƒ| ƒ¡| gk�s¬t‚| tt ddƒt ddƒƒ¡t| t ddƒƒgk�sàt‚| tt ddƒt ddƒƒ¡g k�st‚| |¡|gk�st‚| |¡|gk�s2t‚tdddƒtt ddƒt ddƒt dtdt d ƒ tdt d ƒ dtdƒ tdt d ƒ tdt d ƒ ƒƒk�sªt‚tddƒ tddƒ¡t ddƒgk�sÒt‚tddƒ tddƒ¡t ddƒgk�sút‚tddƒ tddƒ¡t ddƒgk�s"t‚tddƒ tddƒ¡t ddƒgk�sJt‚tddƒ tddƒ¡d k�sjt‚tddƒtddƒk�s„t‚| tdd!ƒ¡t ddƒgk�s¦t‚d S )"Nr   r4   r2   rG   r:   ç      à?g      Ð?r—   r~   r}   r5   r6   rK   )r2   r   r¢   )r:   r   )rG   r   )r5   r   ©rv   r   r£   éx   r“   é4   r7   é   éZ   é-   rQ   rM   )r~   r~   ru   T)rG   rG   )r   r+   r,   r   r   r   r   rC   rj   r   r   r   Úasar   r   r   r   r
   rg   )rb   rŠ   r”   Zp4r\   r‹   r�   rŽ   Zr4Zr6Zr7r�   r¤   Zs3r=   r=   r>   Útest_intersection_2dè  s¸    






($8:.:&4,((,ÿ

ÿ
ÿ

ÿ
ÿ

ÿÿ

ÿ
ÿ

ÿ
ÿ

ÿ
ÿ
.4&"4&
$*ÿýÿ
(((( r¹   c                  C   s†   t ttddƒ ƒ} tdƒ}| d }d|  | |  d|  d| |  |d  g\}}ttddƒtdtdƒ ƒƒ t||ƒ¡d	ks‚t‚d S )
Né   r·   r2   r:   r“   é   r   r4   T)r   r   r   r
   r   r   rg   rC   )Zx0r+   Zx2r%   r(   r=   r=   r>   Útest_line_intersectionR  s
    0r¼   c                  C   s.  t dddƒ} t dddƒ}t| |ƒ}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dƒt dddƒƒ}t|| ƒ| gksžt‚t|t tdt dƒƒg ks¼t‚t|| | ¡ƒtt dddƒt dddƒƒgksìt‚t||ƒ|gk�st‚t||ƒ|gk�st‚t||ƒ|gk�s.t‚t|tt dddƒt dddƒƒƒt dddƒgk�sbt‚t|tt dddƒt dddƒƒƒtt dddƒt dddƒƒgk�s¤t‚ttt dddƒt dddƒƒtt dddƒt dddƒƒƒt dddƒgk�sît‚t|tt dddƒt dddƒƒƒtt dddƒt dddƒƒgk�s0t‚t||ƒ|gk�sFt‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡t dddƒgk�s�t‚tddƒ tdd	ƒ¡t dddƒgk�sºt‚td
ttfƒ tdttfƒ¡t ttƒgk�sêt‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡g k�s*t‚d S )Nr   r4   r2   rG   r:   r6   r§   )r   r:   r2   r¨   rK   r{   )	r   r   r   r   r   rC   r+   rj   r-   )rb   rŠ   r\   r]   r�   rŽ   r�   r=   r=   r>   Útest_intersection_3d[  s@    
04ÿ4ÿ
ÿ
4ÿ
*
ÿ
r½   c               	   C   sò  t dddƒ} t dddƒ}t tttƒ}ttttƒtttƒƒ}ttttƒttdt ƒƒ}t ttddƒtddƒƒ|¡svt‚t |ttttƒttdt ƒƒ¡dks t‚t || tt tƒ¡¡s¾t‚t || tddƒ¡¡sÚt‚t| |ƒ t| |ƒ¡sôt‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡dk�s4t‚t| |ƒ |¡tt tttƒt td td td ƒƒk�spt‚t| |ƒ |j	¡tt tttƒt td td td ƒƒk�s®t‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡dk�sît‚d S )Nr   r4   FrG   )
r   r+   r   r   r,   Zis_parallelrC   rj   r   r­   )rb   rŠ   r”   r]   Zl2_1r=   r=   r>   Útest_is_parallel  s$    "*@ÿ$ÿ
r¾   c               	   C   sL  t ddƒ} t ddƒ}t| |ƒ}tt ttƒt ttƒƒ}t| t t tƒƒ}t ||¡sVt‚t ||¡dksjt‚| ¡ }| |¡|ks„t‚t tt	dddƒt	dddƒƒtt	dddƒt	dddƒƒ¡dksÄt‚t tt	dddƒt	dddƒƒtt	dddƒt	dddƒƒ¡dk�st‚t tt	dddƒt	dddƒƒtt	tttƒt	tttƒƒ¡dk�sHt‚d S ra   )
r   r   r+   r,   Zis_perpendicularrC   r   rW   r   r   )rb   rŠ   r\   r]   Zl1_1ro   r=   r=   r>   Útest_is_perpendicular”  s0    


ÿÿÿÿ
ÿÿr¿   c                  C   sÐ   t ddƒ} |  dd¡}ttdddƒtdddƒƒ}tt ddƒt ddƒƒ}tt ddƒ| ƒ}| t| |ƒ¡sjt‚| |¡dks|t‚| ttdddƒtdddƒƒ¡dks¤t‚| ttdddƒtdddƒƒ¡dksÌt‚d S )Nrr   r:   r4   r   FT)	r   r€   r   r   r   r   Z
is_similarrC   r   )rb   rŠ   r�   rŽ   r�   r=   r=   r>   Útest_is_similar©  s    
(rÀ   c                  C   s„   t ttttƒttttƒƒ} ttddƒtddƒƒjtks:t‚| jt	dƒt	tt d ƒ ks\t‚t
tdddƒtdddƒƒjtks€t‚d S )Nr   r4   r2   r:   )r   r   r+   r,   r   r   rZ   r   rC   r
   r   )r¤   r=   r=   r>   Útest_length¸  s     "rÁ   c            	   	   C   s  t ddƒ} tdddƒ}t t tƒ}t| t ddƒƒ}ttdddƒtdddƒƒ}t|tdddƒƒ}tt ddƒt ddƒƒ}ttddƒtddƒƒ}ttddƒtddƒƒ}tt ttƒt ttƒƒ 	t ttƒ¡t ttƒksÐt
‚tt ttƒt tdt ƒƒ 	t ddƒ¡t tdƒk�st
‚tt ddƒt ddƒƒ 	|¡tt ddƒt ddƒƒk�s>t
‚tt ddƒt ddƒƒ 	|¡tt ddƒt ddƒƒk�svt
‚| 	|¡tk�sŠt
‚| 	|¡| k�sžt
‚| 	t| t dd	ƒƒ¡tt ddƒt ddƒƒk�sÐt
‚| 	t| t ddƒƒ¡| k�sðt
‚| 	tt ddƒt ddƒƒ¡t ddƒk�st
‚| 	tt ddƒt dd
ƒƒ¡tt ddƒt ddƒƒk�sTt
‚| 	tt dd	ƒt d
dƒƒ¡tt ddƒt ddƒƒk�sŒt
‚| 	tt ddƒt ddƒƒ¡t ddƒk�s¸t
‚| 	tt ddƒt dd
ƒƒ¡tt ddƒt ddƒƒk�sðt
‚| 	tt dd	ƒt d
dƒƒ¡tt ddƒt ddƒƒk�s(t
‚| 	t|tdd	dƒƒ¡ttdddƒttddƒtddƒtddƒƒƒk�srt
‚| 	t|tdddƒƒ¡ttdddƒttddƒtddƒtddƒƒƒk�s¼t
‚| 	td	d	dƒ¡td	dƒk�sÞt
‚| 	ttdddƒtdddƒƒ¡ |¡�s
t
‚d S )Nr   r4   r:   r±   rv   rG   r6   r2   r5   r}   r—   )r   r   r+   r   r   r   r   r   r,   rl   rC   r   r   r   ri   )	rb   rŠ   r”   r\   r]   r‹   r�   r�   r¤   r=   r=   r>   Útest_projection¿  s6    
06882 ,88,88JJ"rÂ   c                  C   s¼   t dddƒt dddƒt dddƒ  } }}t| |ƒ}| |¡}|j|ksJt‚|j|ksXt‚t ddƒt ddƒt ddƒ  } }}t| |ƒ}| |¡}|j|ksœt‚|jj|| |¡ jks¸t‚d S )Nr   r:   r2   rG   rv   )	r   r   rk   rb   rC   rŠ   Ú	directionÚunitrl   )rb   rŠ   r”   rœ   ro   r=   r=   r>   Útest_perpendicular_lineâ  s    (

"

rÅ   c                  C   s®   t tddƒtddƒƒ} tttjtjƒttddƒtddƒƒƒ}t ttjtjƒttddƒtddƒƒƒj}|  ¡  |¡svt	‚|  |¡ t | j|ƒ¡s’t	‚|  |d ¡ |¡sªt	‚d S )Nr   r4   r2   r:   r6   r¢   )
r   r   r   r   rY   r   rX   Zperpendicular_bisectorri   rC   )r�   ZalineZon_liner=   r=   r>   Útest_perpendicular_bisectorò  s    &(rÆ   c                     sª   t ddd�\‰ } tˆ df| dfƒ‰ttdd„ ƒ ttdd„ ƒ tt‡ ‡fdd„ƒ ttd	d„ ƒ ttd
d„ ƒ ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ d S )Nr.   Tr&   r   c                   S   s
   t ddƒS ©NrQ   r4   r<   r=   r=   r=   r>   r?      r@   ztest_raises.<locals>.<lambda>c                   S   s   t tddƒtddƒƒS ©Nr   )r   r   r=   r=   r=   r>   r?     r@   c                      s   t dˆ  dƒˆkS )Nr:   r   )r   r=   ©ÚdÚsr=   r>   r?     r@   c                   S   s   t tddƒƒS )Nrš   )r   r   r=   r=   r=   r>   r?     r@   c                   S   s   t tdddƒtdddƒƒS rÈ   ©r   r   r=   r=   r=   r>   r?     r@   c                   S   s
   t ddƒS rÇ   )r   r=   r=   r=   r>   r?     r@   c                   S   s   t tdddƒƒS rÈ   rÌ   r=   r=   r=   r>   r?     r@   c                   S   s
   t ddƒS rÇ   )r   r=   r=   r=   r>   r?     r@   c                   S   s(   t tddƒtddƒƒ ttddƒdƒ¡S )Nr   r4   )r   r   rl   r   r=   r=   r=   r>   r?     s   ÿ)r	   r   r#   Ú	TypeErrorrD   r    r   )Úer=   rÉ   r>   Útest_raisesü  s    rÏ   c                
   C   sž  t dtd d�t ddƒkst‚t dtd d�t ddƒks<t‚t dt d d�t ddƒks\t‚t ddt d d�t ddƒks~t‚t dd	t d d�t ddƒks t‚t dd
t d d�t ddƒksÂt‚t dtd�t ddƒksÜt‚t ddt d�t ddƒksút‚t ddt d�t ddƒk�st‚t ddd�t ddƒk�s6t‚t ddt d�t tddƒtdtd	ƒ tdtd	ƒ d ƒ d tdtd	ƒ d ƒd  d td	ƒ ƒƒk�s¤t‚t ddt d�t tddƒtddtdt ƒ ƒƒk�sÜt‚t dd	d�t dddtd	ƒ fƒk�st‚tddddgd�ttdddƒtd	d	d	ƒƒk�s6t‚tddddgd�ttdddƒtdddƒƒk�sht‚tddddgd�ttdddƒtdddƒƒk�sšt‚d S )NrQ   rG   rL   ru   r:   rM   r¢   r9   r5   g      @r{   g      @g      @)r:   r4   r   g333333@r4   r~   g®Gáz@rS   rT   r2   )r   r   rC   r   r
   r   r   r   r=   r=   r=   r>   Útest_ray_generation  s8     """ &ÿÿÿÿÿÿ(22rÐ   c                  C   sd   t ttdƒtƒ} ttttƒdd�}ttt tt  ƒ}| | ¡t	t| tƒt	t| tƒgks`t
‚d S )Nr   rs   )r   r   r%   r(   r   r*   r)   r
   r   r   rC   )ÚcircleÚlineZ_sr=   r=   r>   Útest_issue_7814#  s    rÓ   c                     s:   ‡ ‡‡‡fdd„} d\‰‰d\‰ ‰| ƒ  d\‰‰| ƒ  d S )Nc                     sN   t tttfgd Ž D ]4\} }| ˆ ˆƒ}|ˆˆƒ}| |¡| |¡kst‚qd S )Nr:   )r"   r   r   r   r   rC   )ÚfÚgr\   r]   ©r0   r1   ÚcrÊ   r=   r>   Ú_check+  s    

ztest_issue_2941.<locals>._check))rv   rv   r²   )rK   rQ   ))rv   r9   r²   r=   )rØ   r=   rÖ   r>   Útest_issue_2941*  s    rÙ   c                     sX   t dƒ‰tddƒtddƒ } }t| |ƒ‰ ˆ  dˆ¡ˆdiks@t‚tt‡ ‡fdd„ƒ d S )	Nr-   r   r4   r5   re   )r5   re   c                      s   ˆ   dˆ¡S )NrK   )Úparameter_valuer=   ©rœ   r-   r=   r>   r?   >  r@   z&test_parameter_value.<locals>.<lambda>)r   r   r   rÚ   rC   r#   rD   )rb   rŠ   r=   rÛ   r>   Útest_parameter_value9  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dƒtdddƒƒgkszt‚t tdddƒtdddƒƒt tdddƒtdddƒƒg}d}d}ttttfdd�D ]"\}}||Ž  ||Ž ¡|ksÈt‚qÈd S )Nr   r4   r6   )r˜   r©   )rK   r¢   r:   )Úrepeat)r   r   Z	bisectorsrC   r"   r   r   r   )r�   rŽ   Z
bisectionsZansr\   r]   r0   r1   r=   r=   r>   Útest_bisectorsA  s    
ÿ
ÿrÞ   c                  C   sT   t tdddƒtdddƒƒ} t tdddƒtdddƒƒ}|  |¡tdddƒgksPt‚d S )Nre   r5   r   iúÿÿÿr6   gffffffþ?)r   r   r   rC   rB   r=   r=   r>   Útest_issue_8615O  s    rß   c                  C   s¨   t tddƒtddƒ d¡ƒ} t tddƒtddƒ d¡ƒ}t|  |¡d ƒdksRt‚tdd	ƒ}td
dƒ d¡}t| |¡d ƒdks†t‚td
dƒ d¡}| |¡r¤t‚d S )Nr   r4   g\�Âõ(\ï?gHáz®Gé?r:   g¸…ëQ¸æ?zPoint2D(0.82, 0.82)rK   rQ   rz   r|   zPoint2D(-0.33, -0.33))g      à¿r±   )r   r   ÚnÚstrr   rC   r   r   )r�   rŽ   r\   r]   r=   r=   r>   Útest_issue_12598U  s    
râ   N)`Zsympy.core.numbersr   r   r   r   Zsympy.core.relationalr   Zsympy.core.singletonr   Zsympy.core.symbolr   r	   Z(sympy.functions.elementary.miscellaneousr
   Z(sympy.functions.elementary.trigonometricr   r   r   Z
sympy.setsr   Zsympy.simplify.simplifyr   r   Zsympy.geometryr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsympy.geometry.liner    Zsympy.geometry.polygonr!   r¸   rm   r"   Zsympy.testing.pytestr#   r$   r%   r(   r)   r*   r+   r,   r-   r0   r1   r/   rE   rF   rJ   rN   rO   rP   r^   r`   rc   rq   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>   Ú<module>   sv   D	
%M-*0"j	$#
