a
    ¬<bŠŽ  ã                   @   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% d dl&m'Z' d dl(m)Z* d dl+m,Z, d dl-m.Z.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`S )aé    )Ú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)ÚUndecidable)Ú_asa)Úcartes)ÚraisesÚwarnsÚwarns_deprecated_sympyÚ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sFJ ‚tdˆ dˆ  d ƒttdtd	dƒƒtdtd
dƒƒƒks„J ‚tdˆ  ˆ d dddttddƒtddƒƒks¸J ‚tdˆ ˆ ƒttddƒtddƒƒksâJ ‚tˆˆ ƒttddƒtdd	ƒƒks
J ‚tt	dˆ  ˆ dƒdˆdttddƒtddƒƒksBJ ‚tˆd ƒttddƒtddƒƒksjJ ‚tdˆ d ˆdttddƒtddƒƒksšJ ‚tˆƒttddƒtddƒƒks¾J ‚tdˆ ˆdttddƒtddƒƒksêJ ‚tˆˆdttddƒtddƒƒksJ ‚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=   ún/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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   r   r   r"   Ú
ValueErrorr=   r=   )r0   r1   r%   r(   r>   Útest_object_from_equation   s.    .ÿ
ÿ
*(ÿ(0$,(rD   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    rE   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`J ‚t| |ƒ t||ƒ¡td ks‚J ‚t tt	dddƒt	dddƒƒtt	dddƒt	dddƒƒ¡t
tdƒd ƒksÎJ ‚d S )Nr4   r:   r2   é   r   r5   )r   Zorthogonal_directionÚoriginrE   r   Zangle_betweenZevalfr   r   r   r   r
   )r0   r1   Úor=   r=   r>   Útest_angle_between<   s    ÿ
ÿ"ÿÿrI   c                  C   s`   t ddd} t dtd d}|  |¡t d ks4J ‚| | ¡td ksJJ ‚|  | ¡dks\J ‚d S )N©r   r   r   ©Zangle©r4   r:   r:   )r   r   Zclosing_anglerB   r=   r=   r>   Útest_closing_angleG   s
    rM   c                  C   sR   t tddƒtddƒƒ} t tddƒtddƒƒ}|  |¡tdtdƒ d ƒksNJ ‚d S )Nr4   r:   r2   r5   )r   r   Zsmallest_angle_betweenr   r
   rB   r=   r=   r>   Útest_smallest_angleO   s    rN   c                  C   sv   t tddƒtddƒƒ} |  ¡ dks&J ‚ttddƒtddƒƒ} |  ¡ dksLJ ‚ttddƒtddƒƒ} |  ¡ dksrJ ‚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_svgr   r   )r0   r=   r=   r>   Útest_svgU   s    rO   c                  C   s˜  t tdddƒtdddƒƒ} ttttƒtttƒƒ}| ¡ |v s@J ‚tdtd d ¡ tt	d t	d ƒksjJ ‚t
ddƒ ¡ tdt	 ddt	  ƒks’J ‚|  |  ¡ ¡|  ¡ ks¬J ‚tdg d	¢d
 ¡ tt	d dt	 d dt	 d ƒksäJ ‚ttdddƒtdddƒƒjttjtjtjƒksJ ‚tttttƒttttƒƒjtdƒttt d ƒ ksRJ ‚tddƒ ¡ tt	d dt	 d dt	 d ƒks†J ‚ttdd„ ƒ d S )Nr   r4   ©r4   r4   rF   rK   ©r:   r2   r:   ©r4   r4   r4   ©r4   r:   r2   ©Údirection_ratior2   ©r:   r2   rF   c                   S   s   t tdfdƒ t¡S )Nr4   rQ   )r   r%   Úarbitrary_pointr=   r=   r=   r>   r?   m   r@   z&test_arbitrary_point.<locals>.<lambda>)r   r   r   r   r+   r,   rW   r   r   r-   r   Úperpendicular_segmentr   r   Úmidpointr   ÚHalfÚlengthr
   r"   rC   ©Úl1Úl2r=   r=   r>   Útest_arbitrary_point^   s&    ÿ(ÿÿ
:ÿ
r_   c               
   C   s¾   t tddƒtddƒƒ} t tttƒttdt ƒƒ}t  | ¡du sBJ ‚t  | |¡sRJ ‚t  | | | |¡sfJ ‚t  | |t tdtƒttddƒtƒƒ¡sJ ‚t  | t tddƒtt tƒƒ|¡du sºJ ‚d S )Nr   r4   Fr5   r9   )r   r   r+   Úare_concurrentr   r\   r=   r=   r>   Útest_are_concurrent_2dp   s    *ra   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u sdJ ‚t |tt tttƒt tttƒƒ¡du sŽJ ‚t |t| t tttƒƒtt tttƒt tdt dƒƒ¡du sÌJ ‚t ||¡du sàJ ‚d S ©Nr   r4   FT)r   r   r   r`   r+   r,   )Úp1r]   Z
parallel_1Z
parallel_2r=   r=   r>   Útest_are_concurrent_3dz   s    *ÿÿrd   c                  C   sl  ddl m}  dddgtddƒf}| |dƒ}ttddƒtddƒƒ}dg d	¢tddd
ƒf}| |dƒ}ttdddƒtdddƒƒ}dg d¢tddddƒf}| |dƒ}ttddddƒtddddƒƒ}	g d¢}
|D ]}t|Ž  qÆ|
D ]}|D ]}t||ƒ|ƒ qàqØ|D ]}t|Ž  qú|
D ] }|D ]}t||ƒ|ƒ qq|D ]}t|Ž  q2|
D ] }|D ]}t|	|ƒ|ƒ qNqFdS )z”Functions accepting `Point` objects in `geometry`
    should also accept tuples, lists, and generators and
    automatically convert them to points.r   )ÚsubsetsrL   r4   r2   r5   r:   rS   )r4   r:   rF   é   )r4   r:   r2   rF   )r4   r:   r2   r5   é   rF   )ÚcontainsÚdistanceÚequalsÚparallel_lineÚperpendicular_linerX   Ú
projectionr   N)	Úsympy.utilities.iterablesre   r   r   r   r   r   Úgetattrr   )re   Z	singles2dZ	doubles2dZl2dZ	singles3dZ	doubles3dZl3dZ	singles4dZ	doubles4dZl4dZtest_singleÚpÚfuncr=   r=   r>   Útest_arguments†   s4    




rr   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ºJ ‚tdtdtddƒksÔJ ‚tdtdjdksêJ ‚tdt dtddƒksJ ‚t| |ƒ d	d¡t| t d	dƒƒks0J ‚t| |ƒt| |ƒksJJ ‚t| |ƒt|| ƒksdJ ‚|tt ttƒt t	t	ƒƒks„J ‚||ks’J ‚t| |ƒt|| ƒks¬J ‚t| |ƒ| ksÀJ ‚| |v sÎJ ‚| |vsÜJ ‚|
t| |ƒv sðJ ‚tt ddƒt ddƒƒtt ddƒt dd	ƒƒv s"J ‚tt ddƒt dd	ƒƒtt ddƒt ddƒƒv sTJ ‚tt ddƒt dd	ƒƒj
tjksxJ ‚tt ddƒt dd	ƒƒj
tjksœJ ‚tt ddƒt d
d	ƒƒj
tjksÀJ ‚tt ddƒt d	dƒƒjtjksäJ ‚tt ddƒt d	d	ƒƒjtjksJ ‚tt ddƒt d	dƒƒjtjks,J ‚||
v du s>J ‚t| |ƒ|
v sRJ ‚tt ttƒt tdt ƒƒt| t d
dƒƒks‚J ‚t| |ƒjt tjtjƒks¢J ‚t| t t tƒƒjtd	td	  ƒksÌJ ‚|jdksÜJ ‚|jtu sìJ ‚|jdksüJ ‚t| t ddƒƒjtu sJ ‚t|j| ¡ ƒj|jks6J ‚t|	j|	 ¡ ƒj|	jksTJ ‚tt dd
ƒt| t ddƒƒ ¡ ƒjt| t ddƒƒjksŽJ ‚|jdksžJ ‚tt tft d td fƒjdksÈJ ‚t| t ddƒƒjdksäJ ‚tdtd}| tdt d ¡tddƒksJ ‚| tdt d ¡tddƒks8J ‚| tt d ¡tddƒksZJ ‚| ttd	 ¡tddƒkszJ ‚| tt d	 ¡tddƒksœJ ‚tddƒD ]}| ¡ |v s¦J ‚q¦|j| jkrÜ|j| jksàJ ‚|j|jkrü|j|jks J ‚| j|j  kr|jkrBn n | j|j  kr@|jksFn J ‚t|
ƒtt|| ƒƒksbJ ‚|
 ¡ tddgkszJ ‚t| |ƒ ¡ tddgks˜J ‚tdtd d ¡ tddgks¼J ‚d S )Nr   r4   éÐ  rP   ©Úslope©r:   r:   rL   )r4   r4   r4   r:   r:   r6   éþÿÿÿFr5   ©r   r4   r   ©r4   r4   r   ©r4   r   r   rJ   rK   r2   rF   ©r6   r4   )r6   r6   )r4   r6   ©r   r4   )r   r6   éûÿÿÿé
   )r   r   Úrandom_pointr   r+   r   r   ZboundsÚscaler,   Ú
xdirectionr   ÚZeroÚInfinityÚNegativeInfinityÚ
ydirectionrY   rZ   r[   r
   ru   ÚsourceZcoefficientsr%   Úsubsr   Úranger(   ÚhashZplot_intervalr-   )rc   Ú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   s&  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g d¢dtt dddƒt dd	dƒƒksœJ ‚tdg d
¢dtt dddƒt dddƒƒksÊJ ‚tdg d¢dtt dddƒt ddd	ƒƒksøJ ‚tt dddƒt dddƒƒjg d¢ks"J ‚tt| t dddƒƒƒt| t dddƒƒksPJ ‚ttt dddƒt dddƒƒƒt| t dddƒƒks†J ‚t| |ƒt|| ƒks J ‚||ks®J ‚|t|t tttƒƒksÊJ ‚||ksØJ ‚tt dddƒt dddƒƒtt dddƒt dddƒƒv sJ ‚tt dddƒt dddƒƒtt dddƒt dddƒƒv sLJ ‚tt dddƒt dddƒƒjtj	kstJ ‚tt dddƒt dddƒƒj
tj	ksœJ ‚tt dddƒt dddƒƒjtj	ksÄJ ‚tt dddƒt dddƒƒjtjksìJ ‚tt dddƒt dddƒƒj
tjksJ ‚tt dddƒt dddƒƒjtjks<J ‚tt dddƒt dddƒƒjtjksdJ ‚tt dddƒt dddƒƒj
tjksŒJ ‚tt dddƒt dddƒƒjtjks´J ‚| |v sÂJ ‚| |vsÐJ ‚|jg d¢ksäJ ‚|jt tjtjtjƒksJ ‚t| t dddƒƒjtju s"J ‚d S )Nr   r4   r6   r5   rR   rV   rT   r2   rF   )r4   r5   rg   r:   rf   é   rS   rz   rw   )r   r+   r   r   r   Zdirection_cosiner,   r   r   rƒ   r…   Z
zdirectionr„   r‚   rU   rY   rZ   )	rc   rŠ   Úp3Zp5r]   r‹   r   Úr3r   r=   r=   r>   Útest_basic_properties_3dø   sF    



...*.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ƒv sŽJ ‚t tt d dƒttdftdfƒv s¶J ‚tdddƒtddƒv sÐJ ‚tdddƒtddƒv sêJ ‚ttdddƒtdddƒƒ 	g ¡d	u sJ ‚ttdddƒtdddƒƒ 	ttdddƒtdddƒƒ¡d
u sTJ ‚| 	t ddƒ¡d	u snJ ‚| 	d¡d	u s‚J ‚| 	d¡d
u s–J ‚| 	| ¡d	u sªJ ‚| 	d¡d	u s¾J ‚| 	d¡d
u sÒJ ‚| 	tddƒ¡d	u sìJ ‚| 	tddƒ¡d
u sJ ‚| 	tddƒ¡d	u s J ‚| 	tddƒ¡d
u s:J ‚| 	t| tdddƒƒ¡d	u s\J ‚| 	ttdddƒtdddƒƒ¡d
u s†J ‚| 	tdddƒ¡d	u s¢J ‚| 	tdddƒ¡d	u s¾J ‚ttdddƒtdddƒƒ 	g ¡d
u sèJ ‚t
dtttfƒ 	dt dt dt f¡sJ ‚ttd
d8 t
| tdddƒƒ 	t ddƒ¡d
u sLJ ‚W d   ƒ n1 sb0    Y  ttd
d* | 	t ddƒ¡d
u s”J ‚W d   ƒ n1 sª0    Y  d S )Nr   rF   r6   r4   r2   r:   rx   rz   TFr|   rJ   rP   )r4   r2   rv   rL   )r:   r5   )r2   r2   )r2   r5   éöÿÿÿ©r   r   r   ©Ztest_stacklevelç      ð?)r   r   r   r   r   r0   r1   r   r   rh   r   r%   r(   r)   r#   ÚUserWarning)rc   r   r   rŽ   r•   Úlr=   r=   r>   Útest_contains%  sH    
((*ÿÿ
"**.Hr   c                  C   sf   t dƒ\} }}}tt| |ƒt||ƒƒ}t| tddƒ |d  |tddƒ |d  ƒ}| |¡sbJ ‚d S )Nz
u, v, w, zr:   r2   )r	   r   r   r   rh   )ÚuÚvÚwr)   rœ   rp   r=   r=   r>   Útest_contains_nonreal_symbolsO  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shJ ‚| d¡dkszJ ‚| t ddƒ¡d| d ksšJ ‚| t tdƒd tdƒd ƒ¡d| ksÆJ ‚t| |ƒ t ddƒ¡tdƒksèJ ‚t| |ƒ t ddƒ¡tdƒksJ ‚t| |ƒ t ddƒ¡dks,J ‚t| |ƒ d¡tdƒksJJ ‚tddƒ | ¡dksdJ ‚tddƒ |¡dks~J ‚tdd	ƒ | ¡dks˜J ‚tdd	ƒ |¡dks²J ‚| t ddƒ¡tdƒksÐJ ‚| t ddƒ¡dksêJ ‚| t ddƒ¡tdƒksJ ‚td
dƒ t ddƒ¡dtdƒ d ks4J ‚| d
¡dksHJ ‚d S )Nr   r4   rJ   r:   r2   r6   r{   r|   ©r4   r   rP   rv   ç      ø?rF   )	r   r   rZ   r   r   ri   r   r   r
   )rc   rŠ   Zhalfr   Ús2r   r=   r=   r>   Útest_distance_2dV  s.    


 ,"$ ,r¥   c                   C   sH   t tdd( tddƒtddƒks&J ‚W d   ƒ n1 s:0    Y  d S )NFr™   rP   )r:   r4   r:   ry   )r#   r›   r   r=   r=   r=   r>   Útest_dimension_normalizations  s    r¦   c                  C   sŒ  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”J ‚| | ¡tdƒd ks®J ‚| |¡dtdƒ d ksÌJ ‚| d¡dksÞJ ‚| d¡tdƒd ksøJ ‚| | ¡dksJ ‚| | ¡tdƒd ks(J ‚| |¡dtdƒ d ksHJ ‚| d¡dks\J ‚| d¡tdƒd ksxJ ‚t| |ƒ t dddƒ¡dtdƒ d ks¦J ‚t| |ƒ t dddƒ¡dtdƒ d ksÔJ ‚t| |ƒ t dddƒ¡dksöJ ‚t| |ƒ d¡dksJ ‚t| |ƒ d	¡dtdƒ d ks6J ‚tdd
ƒ | ¡dksPJ ‚tdd
ƒ |¡tdƒksnJ ‚tddƒ | ¡dksˆJ ‚tddƒ |¡tdƒks¦J ‚| t dddƒ¡tdƒksÆJ ‚| t dddƒ¡dksâJ ‚| d¡tdƒksúJ ‚| d¡dksJ ‚tddƒ d¡dtdƒ d ks4J ‚tddƒ t dddƒ¡tdƒd ks^J ‚tddƒ t dddƒ¡tdƒd ksˆJ ‚d S )Nr   r4   r2   r:   rf   r˜   r6   )r:   r:   r:   )r4   r6   r4   rx   rz   )r6   r6   r6   rR   )r4   r4   r:   )r6   r6   r:   rF   r£   r9   é	   éN   )	r   r   r   r   rZ   r   ri   r
   r   )rc   rŠ   r”   r   r¤   r   r=   r=   r>   Útest_distance_3dx  s>    $ 
 .."& &*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ƒƒ¡slJ ‚| | ¡ tt ddƒt ddƒƒ¡s’J ‚tt ttƒt ttƒƒ t t tƒ¡ tt t tƒt t dt t ƒƒ¡sÞJ ‚| | j¡ tt ddƒt ddƒƒ¡sJ ‚| | ¡ tt ddƒt ddƒƒ¡s0J ‚| 	t ddƒ¡dt
td ƒ ttd d ƒ   d¡slJ ‚t| tdddƒƒ t ddƒ¡d	u s”J ‚ttdddƒtdddƒƒ ttd
ddƒtdddƒƒ¡du sÔJ ‚ttdddƒtdddƒƒ t| tdddƒƒ¡d	u sJ ‚t| tdddƒƒ t ddƒ¡d	u s4J ‚t| tdddƒƒ t| tdddƒƒ¡du sdJ ‚tdttfƒ t dddƒ¡ ttdddƒttjtjdƒƒ¡s¦J ‚tdttfƒ t dddƒ¡ tdtjtjfƒ¡sÜJ ‚t| tdddƒƒ t ddƒ¡d	u sJ ‚d S )Nr   r4   )r   r5   rt   r6   r:   r2   rš   Fr}   TrJ   r|   )r   r   r/   r+   rl   Úargsrj   r,   rk   ri   Úabsr
   r   r   r   r-   r   rZ   rX   r   )rc   rŠ   r]   r^   r‹   r=   r=   r>   Útest_equalsŸ  s.    


(&$ ÿ*(<(@8(0ÿ
6r¬   c                  C   sf  t ddƒ} t ddƒ}t| |ƒ}tt ttƒt tdt ƒƒ}t| ¡ ƒtt tt fv sXJ ‚t| ¡ ƒtt tt fv sxJ ‚t| ¡ ƒtt tt fv s˜J ‚t| ¡ ƒtt tt fv s¸J ‚t| t ddƒƒjttdtksÚJ ‚t| t ddƒƒ ¡ tksöJ ‚tt ddƒt ddƒƒ ¡ td ksJ ‚t|t ddƒƒ ¡ td ks@J ‚tt tttƒt tttƒƒ ¡ t t t t	 fksxJ ‚tt dddƒt dddƒƒ ¡ t t d t t	 d fks¸J ‚tt dddƒt dddƒƒ ¡ td t t	 d fksòJ ‚tt dddƒt dddƒƒ ¡ td t t	 d fks,J ‚tt dddƒt dddƒƒ ¡ t t d t	d fksfJ ‚tt dddƒt dddƒƒ ¡ td td fksšJ ‚tt dddƒt dddƒƒ ¡ td t	d fksÎJ ‚tt dddƒt dddƒƒ ¡ td t	d fksJ ‚t
ƒ H tt dddƒt dddƒƒjddtd t	d fksBJ ‚W d   ƒ n1 sX0    Y  d S )	Nr   r4   r8   r:   r2   rF   r*   )r*   )r   r   r+   r   Zequationr%   r(   r   r,   r)   r$   )rc   rŠ   r]   r‹   r=   r=   r>   Útest_equation¹  sT    


    "("ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿÿ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ôJ ‚t|t tdt ƒƒg ksJ ‚t|t||ƒƒ|gt||ƒgfv s:J ‚t|| t tdt ƒ¡ƒg ks^J ‚t||ƒ|gkstJ ‚t||ƒ|gksŠJ ‚t||ƒ|gks J ‚t||ƒ|gks¶J ‚ttt dd	ƒt d	d	ƒƒtt d
d
ƒt d
dƒƒƒg ksîJ ‚t||ƒ|gksJ ‚t|tt ddƒt ddƒƒƒtt ddƒt ddƒƒgks>J ‚t|tt ddƒt ddƒƒƒt ddƒgkslJ ‚t|tt ddƒt ddƒƒƒtt ddƒt ddƒƒgks¦J ‚| |¡|gks¼J ‚| tt ddƒt ddƒƒ¡g ksâJ ‚| tt ddƒt ddƒƒ¡t| t ddƒƒgksJ ‚| t|| ƒ¡|gks2J ‚t|| ƒ |	¡g ksLJ ‚| |
¡|
 |¡  krr|
gksxn J ‚tddƒ tddƒ¡tddƒgks J ‚tddƒ tddƒ¡tddƒgksÈJ ‚tt ddƒt ddƒƒ tt ddƒt ddƒƒ¡tt ddƒt ddƒƒgksJ ‚t	ddƒ t	ddƒ¡t	ddƒgks<J ‚t	ddƒ t	ddƒ¡t	ddƒgksdJ ‚t	ddƒ t	ddƒ¡t
dƒgksŠJ ‚t	ddƒ t	ddƒ¡t	ddƒgks²J ‚t	ddƒ t	ddƒ¡t	ddƒgksÚJ ‚t	ddƒ t	ddƒ¡t
ddƒgksJ ‚| tt ddƒt ddƒƒ¡t ddƒgks0J ‚| tt ddƒt ddƒƒ¡tt ddƒ|ƒgksdJ ‚| tt ddƒt ddƒƒ¡g ksŠJ ‚| tt ddƒ| ƒ¡| gks¬J ‚| tt ddƒt ddƒƒ¡t| t ddƒƒgksàJ ‚| tt ddƒt ddƒƒ¡g ksJ ‚| |¡|gksJ ‚| |¡|gks2J ‚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ªJ ‚tddƒ tddƒ¡t ddƒgksÒJ ‚tddƒ tddƒ¡t ddƒgksúJ ‚tddƒ tddƒ¡t ddƒgks"J ‚tddƒ tddƒ¡t ddƒgksJJ ‚tddƒ tddƒ¡d u sjJ ‚tddƒtddƒv s„J ‚| tdd!ƒ¡t ddƒgks¦J ‚d S )"Nr   r4   r2   rF   r:   ç      à?g      Ð?r—   r~   r}   r5   r6   rJ   )r2   r   r¢   )r:   r   )rF   r   )r5   r   ©rw   r   r£   éx   r“   é4   r7   é   éZ   é-   rP   rL   )r~   r~   rv   T)rF   rF   )r   r+   r,   r   r   r   r   rk   r   r   r   Úasar   r   r   r   r
   rh   )rc   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	u s‚J ‚d S )
Né   r´   r2   r:   r“   é   r   r4   T)r   r   r   r
   r   r   rh   )Zx0r+   Zx2r%   r(   r=   r=   r>   Útest_line_intersectionI  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žJ ‚t|t tdt dƒƒg ks¼J ‚t|| | ¡ƒtt dddƒt dddƒƒgksìJ ‚t||ƒ|gksJ ‚t||ƒ|gksJ ‚t||ƒ|gks.J ‚t|tt dddƒt dddƒƒƒt dddƒgksbJ ‚t|tt dddƒt dddƒƒƒtt dddƒt dddƒƒgks¤J ‚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îJ ‚t|tt dddƒt dddƒƒƒtt dddƒt dddƒƒgks0J ‚t||ƒ|gksFJ ‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡t dddƒgksJ ‚tddƒ tdd	ƒ¡t dddƒgksºJ ‚td
ttfƒ tdttfƒ¡t ttƒgksêJ ‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡g ks*J ‚d S )Nr   r4   r2   rF   r:   r6   )r   r4   r:   )r   r:   r2   )r   r4   r4   rJ   r|   )r   r   r   r   r   r+   rk   r-   )rc   rŠ   r]   r^   r   rŽ   r   r=   r=   r>   Útest_intersection_3dR  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ƒƒ|¡svJ ‚t |ttttƒttdt ƒƒ¡du s J ‚t || tt tƒ¡¡s¾J ‚t || tddƒ¡¡sÚJ ‚t| |ƒ t| |ƒ¡sôJ ‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡du s4J ‚t| |ƒ |¡tt tttƒt td td td ƒƒkspJ ‚t| |ƒ |j¡tt tttƒt td td td ƒƒks®J ‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡du sîJ ‚d S )Nr   r4   FrF   )	r   r+   r   r   r,   Zis_parallelrk   r   rª   )rc   rŠ   r”   r^   Zl2_1r=   r=   r>   Útest_is_parallelv  s$    "*@ÿ$ÿ
r»   c               	   C   sL  t ddƒ} t ddƒ}t| |ƒ}tt ttƒt ttƒƒ}t| t t tƒƒ}t ||¡sVJ ‚t ||¡du sjJ ‚| ¡ }| |¡|ks„J ‚t ttdddƒtdddƒƒttdddƒtdddƒƒ¡du sÄJ ‚t ttdddƒtdddƒƒttdddƒtdddƒƒ¡du sJ ‚t ttdddƒtdddƒƒtttttƒttttƒƒ¡du sHJ ‚d S rb   )	r   r   r+   r,   Zis_perpendicularr   rX   r   r   )rc   rŠ   r]   r^   Zl1_1rp   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| |ƒ¡sjJ ‚| |¡du s|J ‚| ttdddƒtdddƒƒ¡du s¤J ‚| ttdddƒtdddƒƒ¡du sÌJ ‚d S )Nrs   r:   r4   r   FT)r   r€   r   r   r   r   Z
is_similarr   )rc   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u s:J ‚| jtdƒttt d ƒ ks\J ‚t	tdddƒtdddƒƒjtu s€J ‚d S )Nr   r4   r2   r:   )
r   r   r+   r,   r   r   r[   r   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ÐJ ‚tt ttƒt tdt ƒƒ 	t ddƒ¡t tdƒksJ ‚tt ddƒt ddƒƒ 	|¡tt ddƒt ddƒƒks>J ‚tt ddƒt ddƒƒ 	|¡tt ddƒt ddƒƒksvJ ‚| 	|¡t
ksŠJ ‚| 	|¡| ksžJ ‚| 	t| t dd	ƒƒ¡tt ddƒt ddƒƒksÐJ ‚| 	t| t ddƒƒ¡| ksðJ ‚| 	tt ddƒt ddƒƒ¡t ddƒksJ ‚| 	tt ddƒt dd
ƒƒ¡tt ddƒt ddƒƒksTJ ‚| 	tt dd	ƒt d
dƒƒ¡tt ddƒt ddƒƒksŒJ ‚| 	tt ddƒt ddƒƒ¡t ddƒks¸J ‚| 	tt ddƒt dd
ƒƒ¡tt ddƒt ddƒƒksðJ ‚| 	tt dd	ƒt d
dƒƒ¡tt ddƒt ddƒƒks(J ‚| 	t|tdd	dƒƒ¡ttdddƒttddƒtddƒtddƒƒƒksrJ ‚| 	t|tdddƒƒ¡ttdddƒttddƒtddƒtddƒƒƒks¼J ‚| 	td	d	dƒ¡td	dƒksÞJ ‚| 	ttdddƒtdddƒƒ¡ |¡s
J ‚d S )Nr   r4   r:   r®   rw   rF   r6   r2   r5   r}   r—   )r   r   r+   r   r   r   r   r   r,   rm   r   r   r   rj   )	rc   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 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}|  ¡  |¡svJ ‚|  |¡ t | j|ƒ¡s’J ‚|  |d ¡ |¡sªJ ‚d S )Nr   r4   r2   r:   r6   r¢   )	r   r   r   r   rZ   r   rY   Zperpendicular_bisectorrj   )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 ©NrP   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ƒˆv 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   rm   r   r=   r=   r=   r>   r?   ð  s   ÿ)r	   r   r"   Ú	TypeErrorrC   r   r   )Úer=   rÃ   r>   Útest_raisesä  s    rÉ   c                
   C   s˜  t dtd dt ddƒksJ ‚t dtd dt ddƒks<J ‚t dt d dt ddƒks\J ‚t ddt d dt ddƒks~J ‚t dd	t d dt ddƒks J ‚t dd
t d dt ddƒksÂJ ‚t dtdt ddƒksÜJ ‚t ddt dt ddƒksúJ ‚t ddt dt ddƒksJ ‚t dddt ddƒks6J ‚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¤J ‚t ddt dt tddƒtddtdt ƒ ƒƒksÜJ ‚t dd	dt dddtd	ƒ fƒksJ ‚tdg d¢dttdddƒtd	d	d	ƒƒks4J ‚tdg d¢dttdddƒtdddƒƒksdJ ‚tdg d¢dttdddƒtdddƒƒks”J ‚d S )NrP   rF   rK   rv   r:   rL   r¢   r9   r5   g      @r|   g      @g      @)r:   r4   r   g333333@r4   r~   g®Gáz@rR   )rF   rF   rF   rT   rS   r2   )r   r   r   r
   r   r   r   r=   r=   r=   r>   Útest_ray_generationô  s8     """ &ÿÿÿÿÿÿ(00rÊ   c                  C   sp   t ttdƒtƒ} ttttƒdd}| | ¡ttttt tt  ƒ tƒttttt tt  ƒ tƒgkslJ ‚d S )Nr   rt   )	r   r   r%   r(   r   r*   r)   r   r
   )ZcircleÚliner=   r=   r>   Útest_symbolic_intersect  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J ‚qd S )Nr:   )r!   r   r   r   r   )ÚfÚgr]   r^   ©r0   r1   ÚcrÄ   r=   r>   Ú_check  s    

ztest_issue_2941.<locals>._check))rw   rw   r¯   )rJ   rP   ))rw   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@J ‚tt‡ ‡fdd„ƒ d S )	Nr-   r   r4   r5   rf   )r5   rf   c                      s   ˆ   dˆ¡S )NrJ   )Úparameter_valuer=   ©rœ   r-   r=   r>   r?   &  r@   z&test_parameter_value.<locals>.<lambda>)r   r   r   rÓ   r"   rC   )rc   rŠ   r=   rÔ   r>   Útest_parameter_value!  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szJ ‚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ÈJ ‚qÈd S )Nr   r4   r6   )r˜   )r   r   r4   )rJ   r¢   r:   )Úrepeat)r   r   Z	bisectorsr!   r   r   r   )r   rŽ   Z
bisectionsZansr]   r^   r0   r1   r=   r=   r>   Útest_bisectors)  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sPJ ‚d S )Nrf   r5   r   iúÿÿÿr6   gffffffþ?)r   r   r   rB   r=   r=   r>   Útest_issue_86157  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   Zsympy.geometry.liner   Zsympy.geometry.polygonr    rµ   rn   r!   Zsympy.testing.pytestr"   r#   r$   r%   r(   r)   r*   r+   r,   r-   r0   r1   r/   rD   rE   rI   rM   rN   rO   r_   ra   rd   rr   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>   sr   @	
%M-*'&j	$$
