U
    Ý@·f¦”  ã                   @   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=   úB/tmp/pip-unpacked-wheel-6uje5nh9/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ƒƒ¡st‚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st‚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   )Z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	$#
