o
    à8VaÌŠ  ã                   @   sH  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 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( edd	d
Z)edd	d
Z*edd	d
Z+edd	d
Z,edd	d
Z-edd	d
Z.edd	d
Z/edd	d
\Z0Z1edd	d
Z2dd„ Z3dd„ Z4dd„ Z5dd„ Z6dd„ Z7dd„ Z8dd „ Z9d!d"„ Z:d#d$„ Z;d%d&„ Z<d'd(„ Z=d)d*„ Z>d+d,„ Z?d-d.„ Z@d/d0„ ZAd1d2„ ZBd3d4„ ZCd5d6„ ZDd7d8„ ZEd9d:„ ZFd;d<„ ZGd=d>„ ZHd?d@„ ZIdAdB„ ZJdCdD„ ZKdEdF„ ZLdGdH„ ZMdIdJ„ ZNdKdL„ ZOdMdN„ ZPdOdP„ ZQdQdR„ ZRdSdT„ ZSdUdV„ ZTdWdX„ ZUdYS )Zé    )ÚEqÚRationalÚFloatÚSÚSymbolÚcosÚooÚpiÚsimplifyÚsinÚsqrtÚsymbolsÚacos)Útan)ÚCircleÚGeometryErrorÚLineÚPointÚRayÚSegmentÚTriangleÚintersectionÚPoint3DÚLine3DÚRay3DÚ	Segment3DÚPoint2DÚLine2D)ÚUndecidable)Ú_asa)Úcartes)ÚraisesÚwarnsÚxT©ÚrealÚyÚzÚkÚx1Úy1Útúa,bÚmc                      sÊ  ddl m‰m‰m‰ m‰ tdˆ ˆ d ƒttddƒtddƒƒks#J ‚tdˆ dˆ  d ƒttdtd	dƒƒtdtd
dƒƒƒksBJ ‚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sqJ ‚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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„ƒ t
t‡ ‡fdd„ƒ t
t‡‡fdd„ƒ d S )Nr   )r#   r&   ÚaÚbé   é   iîÿÿÿé   iëÿÿÿé   éÿÿÿÿéüÿÿÿr.   r/   ©r#   r&   éýÿÿÿc                      ó   t ˆ ƒS ©N©r   © )r#   r;   ú@/usr/lib/python3/dist-packages/sympy/geometry/tests/test_line.pyÚ<lambda>    ó    z+test_object_from_equation.<locals>.<lambda>c                      r8   r9   r:   r;   )r&   r;   r<   r=   !   r>   c                      s   t ˆ ˆ ƒS r9   r:   r;   r6   r;   r<   r=   "   ó    c                      s   t ˆ ˆ dddS ©Nr.   r/   r6   r:   r;   ©r.   r/   r;   r<   r=   #   ó    c                      s   t ˆˆ  ƒS r9   r:   r;   r6   r;   r<   r=   $   r?   c                      s   t ˆˆ  dddS r@   r:   r;   rA   r;   r<   r=   %   rB   c                      s   t ˆ d d ˆ ƒS )Nr2   é   r:   r;   r6   r;   r<   r=   &   ó    )Z	sympy.abcr#   r&   r.   r/   r   r   r   r   r   r!   Ú
ValueErrorr;   r;   )r.   r/   r#   r&   r<   Útest_object_from_equation   s   .>4*&6rF   c                 C   s&   t dƒ}| | |   k o|k S   S )z.Test if two floating point values are 'equal'.z1.0E-10)r   )r.   r/   Zt_floatr;   r;   r<   Úfeq)   s   rG   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 ƒs0J ‚t| |ƒ t||ƒ¡td ksAJ ‚t tt	dddƒt	dddƒƒtt	dddƒt	dddƒƒ¡t
tdƒd ƒksgJ ‚d S )Nr2   rC   r0   é   r   r3   )r   Zorthogonal_directionÚoriginrG   r   Zangle_betweenZevalfr	   r   r   r   r   )r.   r/   Úor;   r;   r<   Útest_angle_between/   s   ÿÿ"ÿÿrK   c                  C   s`   t ddd} t dtd d}|  |¡t d ksJ ‚| | ¡td ks%J ‚|  | ¡dks.J ‚d S )N©r   r   r   ©Zangle©r2   rC   rC   )r   r	   Zclosing_anglerA   r;   r;   r<   Útest_closing_angle:   s
   rO   c                  C   sR   t tddƒtddƒƒ} t tddƒtddƒƒ}|  |¡tdtdƒ d ƒks'J ‚d S )Nr2   rC   r0   r3   )r   r   Zsmallest_angle_betweenr   r   rA   r;   r;   r<   Útest_smallest_angleB   s   &rP   c                  C   sv   t tddƒtddƒƒ} |  ¡ dksJ ‚ttddƒtddƒƒ} |  ¡ dks&J ‚ttddƒtddƒƒ} |  ¡ dks9J ‚d S )	Nr2   rC   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" />r0   r3   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   )r.   r;   r;   r<   Útest_svgH   s   rQ   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s5J ‚t
ddƒ ¡ tdt	 ddt	  ƒksIJ ‚|  |  ¡ ¡|  ¡ ksVJ ‚tdg d	¢d
 ¡ tt	d dt	 d dt	 d ƒksrJ ‚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s§J ‚tddƒ ¡ tt	d dt	 d dt	 d ƒksÀJ ‚ttdd„ ƒ d S )Nr   r2   ©r2   r2   rH   rM   ©rC   r0   rC   ©r2   r2   r2   ©r2   rC   r0   ©Údirection_ratior0   ©rC   r0   rH   c                   S   s   t tdfdƒ t¡S )Nr2   rS   )r   r#   Úarbitrary_pointr;   r;   r;   r<   r=   `   rD   z&test_arbitrary_point.<locals>.<lambda>)r   r   r   r   r)   r*   rY   r   r	   r+   r   Úperpendicular_segmentr   r   Úmidpointr   ÚHalfÚlengthr   r!   rE   ©Úl1Úl2r;   r;   r<   Útest_arbitrary_pointQ   s&   ÿ(ÿÿ8ÿra   c               
   C   s¾   t tddƒtddƒƒ} t tttƒttdt ƒƒ}t  | ¡du s!J ‚t  | |¡s)J ‚t  | | | |¡s3J ‚t  | |t tdtƒttddƒtƒƒ¡sHJ ‚t  | t tddƒtt tƒƒ|¡du s]J ‚d S )Nr   r2   Fr3   r7   )r   r   r)   Úare_concurrentr   r^   r;   r;   r<   Útest_are_concurrent_2dc   s   *.rc   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 s2J ‚t |tt tttƒt tttƒƒ¡du sGJ ‚t |t| t tttƒƒtt tttƒt tdt dƒƒ¡du sfJ ‚t ||¡du spJ ‚d S ©Nr   r2   FT)r   r   r   rb   r)   r*   )Úp1r_   Z
parallel_1Z
parallel_2r;   r;   r<   Útest_are_concurrent_3dm   s   *ÿÿrf   c                  C   sb  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|Ž  qc|
D ]}|D ]	}t||ƒ|ƒ qpql|D ]}t|Ž  q}|
D ]}|D ]	}t||ƒ|ƒ qŠq†|D ]}t|Ž  q—|
D ]}|D ]	}t|	|ƒ|ƒ q¤q dS )z”Functions accepting `Point` objects in `geometry`
    should also accept tuples, lists, and generators and
    automatically convert them to points.r   )ÚsubsetsrN   r2   r0   r3   rC   rU   )r2   rC   rH   é   )r2   rC   r0   rH   )r2   rC   r0   r3   é   rH   )ÚcontainsÚdistanceÚequalsÚparallel_lineÚperpendicular_linerZ   Ú
projectionr   N)	Úsympyrg   r   r   r   r   r   Úgetattrr   )rg   Z	singles2dZ	doubles2dZl2dZ	singles3dZ	doubles3dZl3dZ	singles4dZ	doubles4dZl4dZtest_singleÚpÚfuncr;   r;   r<   Útest_argumentsy   s<   



ÿ
ÿ
ÿÿrt   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sjJ ‚tdtdjdksuJ ‚tdt dtddƒksƒJ ‚t| |ƒ d	d¡t| t d	dƒƒks–J ‚t| |ƒt| |ƒks¢J ‚t| |ƒt|| ƒks®J ‚|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 sJ ‚tt ddƒt dd	ƒƒj
tjks1J ‚tt ddƒt dd	ƒƒj
tjksCJ ‚tt ddƒt d
d	ƒƒj
tjksUJ ‚tt ddƒt d	dƒƒjtjksgJ ‚tt ddƒt d	d	ƒƒjtjksyJ ‚tt ddƒt d	dƒƒjtjks‹J ‚||
v du s”J ‚t| |ƒ|
v sžJ ‚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sJ ‚t|	j|	 ¡ ƒj|	jksJ ‚tt dd
ƒt| t ddƒƒ ¡ ƒjt| t ddƒƒjks<J ‚|jdksDJ ‚tt tft d td fƒjdksYJ ‚t| t ddƒƒjdksgJ ‚tdtd}| tdt d ¡tddƒksJ ‚| tdt d ¡tddƒks‘J ‚| tt d ¡tddƒks¢J ‚| ttd	 ¡tddƒks²J ‚| 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rn J ‚| j|j  kr|jksJ ‚ J ‚t|
ƒtt|| ƒƒks(J ‚|
 ¡ tddgks4J ‚t| |ƒ ¡ tddgksCJ ‚tdtd d ¡ tddgksUJ ‚d S )Nr   r2   éÐ  rR   ©Úslope©rC   rC   rN   )r2   r2   r2   rC   rC   r4   éþÿÿÿFr3   ©r   r2   r   ©r2   r2   r   ©r2   r   r   rL   rM   r0   rH   ©r4   r2   )r4   r4   )r2   r4   ©r   r2   )r   r4   éûÿÿÿé
   )r   r   Úrandom_pointr   r)   r   r   ZboundsÚscaler*   Ú
xdirectionr   ÚZeroÚInfinityÚNegativeInfinityÚ
ydirectionr[   r\   r]   r   rw   ÚsourceZcoefficientsr#   Zsubsr	   Úranger&   ÚhashZplot_intervalr+   )re   Úp2Zp10Zp_r3Zp_r4r_   Úl3Úl4Úr1Úr2Ús1Zp_s1ÚrZindr;   r;   r<   Útest_basic_properties_2dž   s€   




&22$$$$$$0 *:*$$" "  J(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sNJ ‚tdg d
¢dtt dddƒt dddƒƒkseJ ‚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sJ ‚tt| t dddƒƒƒt| t dddƒƒks¦J ‚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 sJ ‚tt dddƒt dddƒƒjtj	ks3J ‚tt dddƒt dddƒƒj
tj	ksGJ ‚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soJ ‚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 ‚| |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   r2   r4   r3   rT   rX   rV   r0   rH   )r2   r3   ri   rC   rh   é   rU   r|   ry   )r   r)   r   r   r   Zdirection_cosiner*   rƒ   r   r…   r‡   Z
zdirectionr†   r„   rW   r[   r\   )	re   r‹   Úp3Zp5r_   rŒ   rŽ   Úr3r   r;   r;   r<   Útest_basic_properties_3dë   sF   



...(,4::((((((((($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 sGJ ‚t tt d dƒttdftdfƒv s[J ‚tdddƒtddƒv shJ ‚tdddƒtddƒv suJ ‚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 s¨J ‚| 	t ddƒ¡d	u s´J ‚| 	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 s9J ‚| 	tdddƒ¡d	u sGJ ‚| 	tdddƒ¡d	u sUJ ‚ttdddƒtdddƒƒ 	g ¡d
u sjJ ‚t
dtttfƒ 	dt dt dt f¡sJ ‚ttƒ t
| tdddƒƒ 	t ddƒ¡d
u sšJ ‚W d   ƒ n	1 s¥w   Y  ttƒ | 	t ddƒ¡d
u s¼J ‚W d   ƒ d S 1 sÈw   Y  d S )Nr   rH   r4   r2   r0   rC   rz   r|   TFr~   rL   rR   )r2   r0   rx   rN   )rC   r3   )r0   r0   )r0   r3   éöÿÿÿ©r   r   r   ç      ð?)r   r   r   r   r   r.   r/   r   r   rj   r   r#   r&   r'   r"   ÚUserWarning)re   r‘   rŽ   r   r•   Úlr;   r;   r<   Útest_contains  sL   
(((ÿÿ"**.
*ÿ
$ÿrœ   c                  C   sf   t dƒ\} }}}tt| |ƒt||ƒƒ}t| tddƒ |d  |tddƒ |d  ƒ}| |¡s1J ‚d S )Nz
u, v, w, zrC   r0   )r   r   r   r   rj   )ÚuÚvÚwr'   r›   rr   r;   r;   r<   Útest_contains_nonreal_symbolsB  s   .r    c                  C   s8  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s4J ‚| d¡dks=J ‚| t ddƒ¡d| d ksMJ ‚| t tdƒd tdƒd ƒ¡d| kscJ ‚t| |ƒ t ddƒ¡tdƒkstJ ‚t| |ƒ t ddƒ¡tdƒks…J ‚t| |ƒ t ddƒ¡dks”J ‚t| |ƒ d¡tdƒks¢J ‚tddƒ | ¡dks®J ‚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sJ ‚| d
¡dksJ ‚d S )Nr   r2   rL   rC   r0   r4   r}   r~   ©r2   r   rR   rx   ç      ø?rH   )	r   r   r\   r   r   rk   r   r   r   )re   r‹   Zhalfr   Ús2r‘   r;   r;   r<   Útest_distance_2dI  s.   


 ,"",r¤   c                   C   sF   t tƒ tddƒtddƒksJ ‚W d   ƒ d S 1 sw   Y  d S )NrR   )rC   r2   rC   r{   )r"   rš   r   r;   r;   r;   r<   Útest_dimension_normalizationf  s   
"ÿr¥   c                  C   sz  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sJJ ‚| | ¡tdƒd ksWJ ‚| |¡dtdƒ d ksfJ ‚| d¡dksoJ ‚| d¡tdƒd ks|J ‚| | ¡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 ‚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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sJJ ‚| t dddƒ¡tdƒksZJ ‚| t dddƒ¡dkshJ ‚| d¡tdƒkstJ ‚| d¡dks~J ‚tddƒ d¡dtdƒ d ks‘J ‚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   r2   r0   rC   rh   r˜   r4   )rC   rC   rC   )r2   r4   r2   rz   r|   )r4   r4   r4   rT   )r2   r2   rC   )r4   r4   rC   rH   r¢   r7   é	   éN   )	r   r   r   r   r\   r   rk   r   r   )re   r‹   r”   r   r£   r‘   r;   r;   r<   Útest_distance_3dk  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ƒƒ¡s6J ‚| | ¡ tt ddƒt ddƒƒ¡sIJ ‚tt ttƒt ttƒƒ t t tƒ¡ tt t tƒt t dt t ƒƒ¡soJ ‚| | j¡ tt ddƒt ddƒƒ¡sƒJ ‚| | ¡ tt ddƒt ddƒƒ¡s–J ‚| 	t ddƒ¡dt
td ƒ ttd d ƒ   d¡s³J ‚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 sJ ‚t| tdddƒƒ t| tdddƒƒ¡du s-J ‚tdttfƒ t dddƒ¡ ttdddƒttjtjdƒƒ¡sNJ ‚tdttfƒ t dddƒ¡ tdtjtjfƒ¡siJ ‚t| tdddƒƒ t ddƒ¡d	u s}J ‚d S )Nr   r2   )r   r3   rv   r4   rC   r0   r™   Fr   TrL   r~   )r   r   r-   r)   rn   Úargsrl   r*   rm   rk   Úabsr   r   r   r   r+   r   r\   rZ   r   )re   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v s,J ‚t| ¡ ƒtt tt fv s<J ‚t| ¡ ƒtt tt fv sLJ ‚t| ¡ ƒtt tt fv s\J ‚t| t ddƒƒjttdtksmJ ‚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s¹J ‚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s.J ‚tt dddƒt dddƒƒ ¡ td td fksHJ ‚tt dddƒt dddƒƒ ¡ td t	d fksbJ ‚tt dddƒt dddƒƒ ¡ td t	d fks|J ‚d S )Nr   r2   r6   rC   r0   rH   )
r   r   r)   r
   Zequationr#   r&   r   r*   r'   )re   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szJ ‚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s¶J ‚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s-J ‚t|tt ddƒt ddƒƒƒtt ddƒt ddƒƒgksJJ ‚| |¡|gksUJ ‚| tt ddƒt ddƒƒ¡g kshJ ‚| tt ddƒt ddƒƒ¡t| t ddƒƒgks‚J ‚| t|| ƒ¡|gksJ ‚t|| ƒ |	¡g ksJ ‚| |
¡|
 |¡  kr±|
gks´J ‚ 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s*J ‚t	ddƒ t	ddƒ¡t
dƒgks=J ‚t	ddƒ t	ddƒ¡t	ddƒgksQJ ‚t	ddƒ t	ddƒ¡t	ddƒgkseJ ‚t	ddƒ t	ddƒ¡t
ddƒgksyJ ‚| tt ddƒt ddƒƒ¡t ddƒgksJ ‚| 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 ‚| 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sJ ‚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sMJ ‚tddƒ tddƒ¡t ddƒgksaJ ‚tddƒ tddƒ¡t ddƒgksuJ ‚tddƒ tddƒ¡t ddƒgks‰J ‚tddƒ tddƒ¡t ddƒgksJ ‚tddƒ tddƒ¡d u s­J ‚tddƒtddƒv sºJ ‚| tdd!ƒ¡t ddƒgksËJ ‚d S )"Nr   r2   r0   rH   rC   g      à?g      Ð?r—   r€   r   r3   r4   rL   )r0   r   r¡   )rC   r   )rH   r   )r3   r   ©ry   r   r¢   éx   r“   é4   r5   é   éZ   é-   rR   rN   )r€   r€   rx   T)rH   rH   )r   r)   r*   r   r   r   r   rm   r   r   r   Úasar   r   r	   r   r   rj   )re   r‹   r”   Zp4r_   rŒ   rŽ   r   Zr4Zr6Zr7r   r£   Zs3r;   r;   r<   Útest_intersection_2dÎ  s¸   






&"6:.:&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 sAJ ‚d S )
Né   r²   r0   rC   r“   é   r   r2   T)r   r	   r   r   r   r   rj   )Zx0r)   Zx2r#   r&   r;   r;   r<   Útest_line_intersection8  s
   04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sOJ ‚t|t tdt dƒƒg ks^J ‚t|| | ¡ƒtt dddƒt dddƒƒgksvJ ‚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s­J ‚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sJ ‚t||ƒ|gksJ ‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡t dddƒgksBJ ‚tddƒ tdd	ƒ¡t dddƒgksWJ ‚td
ttfƒ tdttfƒ¡t ttƒgksoJ ‚tt dddƒt dddƒƒ tt dddƒt dddƒƒ¡g ksJ ‚d S )Nr   r2   r0   rH   rC   r4   )r   r2   rC   )r   rC   r0   )r   r2   r2   rL   r~   )r   r   r   r   r   r)   rm   r+   )re   r‹   r_   r`   rŽ   r   r   r;   r;   r<   Útest_intersection_3dA  s@   
02
ÿ4ÿ
ÿ4
ÿ*

ÿD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ƒƒ|¡s;J ‚t |ttttƒttdt ƒƒ¡du sPJ ‚t || tt tƒ¡¡s_J ‚t || tddƒ¡¡smJ ‚t| |ƒ t| |ƒ¡szJ ‚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 tttƒt td td td ƒƒks¶J ‚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   r2   FrH   )	r   r)   r   r   r*   Zis_parallelrm   r   r©   )re   r‹   r”   r`   Zl2_1r;   r;   r<   Útest_is_parallele  s$   "*>
ÿ$ÿBr¹   c               	   C   sH  t ddƒ} t ddƒ}t| |ƒ}tt ttƒt ttƒƒ}t| t t tƒƒ}t ||¡s+J ‚t ||¡du s5J ‚| ¡ }| |¡|ksBJ ‚t ttdddƒtdddƒƒttdddƒtdddƒƒ¡du sbJ ‚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 s¢J ‚d S rd   )	r   r   r)   r*   Zis_perpendicularr   rZ   r   r   )re   r‹   r_   r`   Zl1_1rr   r;   r;   r<   Útest_is_perpendicularz  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| |ƒ¡s5J ‚| |¡du s>J ‚| ttdddƒtdddƒƒ¡du sRJ ‚| ttdddƒtdddƒƒ¡du sfJ ‚d S )Nru   rC   r2   r   FT)r   r‚   r   r   r   r   Z
is_similarr   )re   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   r2   r0   rC   )
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 ttƒt ttƒƒ t ttƒ¡t ttƒksRJ ‚tt ttƒt tdt ƒƒ t ddƒ¡t tdƒkslJ ‚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 ‚| |¡| 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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 ddƒks5J ‚| tt ddƒt dd	ƒƒ¡tt ddƒt ddƒƒksQJ ‚| tt ddƒt d	d
ƒƒ¡tt ddƒt ddƒƒksmJ ‚| t	|tdddƒƒ¡t	tdddƒtt
ddƒ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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   r2   rC   ry   rH   r4   r0   r3   r   r—   )r   r   r)   r   r   r   r*   ro   r   r   r   rl   )re   r‹   r”   r_   r`   rŒ   rŽ   r;   r;   r<   Útest_projection¥  s0   
04660*88,88JJ"0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}|  ¡  |¡s;J ‚|  |¡ t | j|ƒ¡sIJ ‚|  |d ¡ |¡sUJ ‚d S )Nr   r2   r0   rC   r4   r¡   )	r   r   r   r   r\   r   r[   Zperpendicular_bisectorrl   )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   ó
   t ddƒS ©NrR   r2   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=   Ó  s    c                      s   t dˆ  dƒˆv S )NrC   r   )r   r;   ©ÚdÚsr;   r<   r=   Ô  rB   c                   S   s   t tddƒƒS )Nr™   )r   r   r;   r;   r;   r<   r=   Õ  s    c                   S   s   t tdddƒtdddƒƒS rÂ   ©r   r   r;   r;   r;   r<   r=   Ö  s    c                   S   r¿   rÀ   )r   r;   r;   r;   r<   r=   ×  rÁ   c                   S   s   t tdddƒƒS rÂ   rÆ   r;   r;   r;   r<   r=   Ø  s    c                   S   r¿   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   r2   )r   r   ro   r   r;   r;   r;   r<   r=   Ú  s    )r   r   r!   Ú	TypeErrorrE   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sPJ ‚t dd
t d dt ddƒksaJ ‚t dtdt ddƒksnJ ‚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s™J ‚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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sEJ ‚d S )NrR   rH   rM   rx   rC   rN   r¡   r7   r3   g      @r~   g      @g      @)rC   r2   r   g333333@r2   r€   g®Gáz@rT   )rH   rH   rH   rV   rU   r0   )r   r	   r   r   r   r   r   r;   r;   r;   r<   Útest_ray_generationÞ  s8    """&ÿÿÿÿ
ÿ
ÿ&004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s6J ‚d S )Nr   rv   )	r   r   r#   r&   r   r(   r'   r   r   )ZcircleÚliner;   r;   r<   Útest_symbolic_intersectõ  s   NrÌ   c                     s:   ‡ ‡‡‡fdd„} d\‰‰d\‰ ‰| ƒ  d\‰‰| ƒ  d S )Nc                     sN   t tttfgd Ž D ]\} }| ˆ ˆƒ}|ˆˆƒ}| |¡| |¡ks$J ‚q
d S )NrC   )r    r   r   r   r   )ÚfÚgr_   r`   ©r.   r/   ÚcrÄ   r;   r<   Ú_checký  s
   

ýztest_issue_2941.<locals>._check))ry   ry   r­   )rL   rR   ))ry   r7   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   r2   r3   rh   )r3   rh   c                      s   ˆ   dˆ¡S )NrL   )Úparameter_valuer;   ©r›   r+   r;   r<   r=     r?   z&test_parameter_value.<locals>.<lambda>)r   r   r   rÓ   r!   rE   )re   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s=J ‚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suJ ‚qdd S )Nr   r2   r4   )r˜   )r   r   r2   )rL   r¡   rC   )Úrepeat)r   r   Z	bisectorsr    r   r   r   )rŽ   r   Z
bisectionsZansr_   r`   r.   r/   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s(J ‚d S )Nrh   r3   r   iúÿÿÿr4   gffffffþ?)r   r   r   rA   r;   r;   r<   Útest_issue_8615!  s    rØ   N)Vrp   r   r   r   r   r   r   r   r	   r
   r   r   r   r   Z(sympy.functions.elementary.trigonometricr   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³   Zsympy.utilities.iterablesr    Zsympy.testing.pytestr!   r"   r#   r&   r'   r(   r)   r*   r+   r.   r/   r-   rF   rG   rK   rO   rP   rQ   ra   rc   rf   rt   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>   sf   < @	
%M-*'"j	$
