o
    oÇh¦”  ã                   @   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                      sn  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ˆd ƒttddƒtddƒƒks²J ‚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=   úr/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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   ó    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   rC   c                      s   t ˆ d d ˆ ƒS )Nr4   r:   r<   r=   r8   r=   r>   r?   3   ó    )Ú	sympy.abcr%   r(   r0   r1   r   r   r   r   r   r#   Ú
ValueErrorr=   r=   )r0   r1   r%   r(   r>   Útest_object_from_equation   s.   .
ÿ
ÿ*&
ÿ&."*(rG   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   Út_floatr=   r=   r>   Úfeq6   s   rI   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dddƒ}t	 t	|tdddƒƒt	|tdddƒƒ¡t
tdƒd ƒkseJ ‚t	 t	|tdddƒƒt	tdddƒ|ƒ¡t
tdƒ d ƒks„J ‚d S )Nr4   r:   r2   é   r   r5   )r   Úorthogonal_directionÚoriginrI   r   Úangle_betweenÚevalfr   r   r   r   r
   )r0   r1   Úor)   r=   r=   r>   Útest_angle_between<   s(   ÿÿ"ÿÿÿÿrP   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   ©Úangle©r4   r:   r:   )r   r   Úclosing_anglerB   r=   r=   r>   Útest_closing_angleK   s
   rV   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 )Nr4   r:   r2   r5   )r   r   Úsmallest_angle_betweenr   r
   rB   r=   r=   r>   Útest_smallest_angleS   s   &rX   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 )	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   Ú_svgr   r   )r0   r=   r=   r>   Útest_svgY   s   rZ   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   r4   ©r4   r4   rJ   rR   ©r:   r2   r:   ©r4   r4   r4   ©r4   r:   r2   ©Údirection_ratior2   ©r:   r2   rJ   c                   S   s   t tdfdƒ t¡S )Nr4   r\   )r   r%   Úarbitrary_pointr=   r=   r=   r>   r?   q   rD   z&test_arbitrary_point.<locals>.<lambda>)r   r   r   r   r+   r,   rb   r   r   r-   r   Úperpendicular_segmentr   r   Úmidpointr   ÚHalfÚlengthr
   r#   rF   ©Úl1Úl2r=   r=   r>   Útest_arbitrary_pointb   s&   ÿ(ÿÿ8ÿrj   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   r4   Fr5   r9   )r   r   r+   Úare_concurrentr   rg   r=   r=   r>   Útest_are_concurrent_2dt   s   *.rl   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   r4   FT)r   r   r   rk   r+   r,   )Úp1rh   Ú
parallel_1Ú
parallel_2r=   r=   r>   Útest_are_concurrent_3d~   s   *ÿÿrq   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   )ÚsubsetsrT   r4   r2   r5   r:   r^   )r4   r:   rJ   é   )r4   r:   r2   rJ   )r4   r:   r2   r5   é   rJ   )ÚcontainsÚdistanceÚequalsÚparallel_lineÚperpendicular_linerc   Ú
projectionr   N)	Úsympy.utilities.iterablesrr   r   r   r   r   r   Úgetattrr   )rr   Ú	singles2dÚ	doubles2dÚl2dÚ	singles3dÚ	doubles3dÚl3dÚ	singles4dÚ	doubles4dÚl4dÚtest_singleÚpÚfuncr=   r=   r>   Útest_argumentsŠ   s<   



ÿ
ÿ
ÿÿr‰   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   r4   éÐ  r[   ©Úslope©r:   r:   rT   )r4   r4   r4   r:   r:   r6   éþÿÿÿFr5   ©r   r4   r   ©r4   r4   r   ©r4   r   r   rQ   rR   r2   rJ   ©r6   r4   )r6   r6   )r4   r6   ©r   r4   ©r   r6   éûÿÿÿé
   )r   r   Úrandom_pointr   r+   r   r   ÚboundsÚscaler,   Ú
xdirectionr   ÚZeroÚInfinityÚNegativeInfinityÚ
ydirectionrd   re   rf   r
   rŒ   ÚsourceÚcoefficientsr%   Úsubsr   Úranger(   ÚhashÚplot_intervalr-   )rn   Úp2Úp10Úp_r3Úp_r4rh   Úl3Úl4Úr1Úr2Ús1Úp_s1ÚrÚ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   r4   r6   r5   r]   ra   r_   r2   rJ   )r4   r5   rt   r:   rs   é   r^   r‘   rŽ   )r   r+   r   r   r   Údirection_cosiner,   rš   r   rœ   rž   Ú
zdirectionr   r›   r`   rd   re   )	rn   r¥   Úp3Úp5rh   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d
d t
| tdddƒƒ 	t ddƒ¡d
u sœJ ‚W d   ƒ n	1 s§w   Y  ttd
d | 	t ddƒ¡d
u sÀJ ‚W d   ƒ d S 1 sÌw   Y  d S )Nr   rJ   r6   r4   r2   r:   r   r‘   TFr“   rQ   r[   )r4   r2   r   rT   )r:   r5   )r2   r2   )r2   r5   éöÿÿÿ©r   r   r   ©Útest_stacklevelç      ð?)r   r   r   r   r   r0   r1   r   r   ru   r   r%   r(   r)   r$   ÚUserWarning)rn   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, zr:   r2   )r	   r   r   r   ru   )ÚuÚvÚwr)   r¿   r‡   r=   r=   r>   Útest_contains_nonreal_symbolsS  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   r4   rQ   r:   r2   r6   r’   r“   ©r4   r   r[   r   ç      ø?rJ   )	r   r   re   r   r   rv   r   r   r
   )rn   r¥   Úhalfr­   Ús2r¯   r=   r=   r>   Útest_distance_2dZ  s.   


 ,"",rÉ   c                   C   sJ   t tdd tddƒtddƒksJ ‚W d   ƒ d S 1 sw   Y  d S )NFr»   r[   )r:   r4   r:   r   )r$   r¾   r   r=   r=   r=   r>   Útest_dimension_normalizationw  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ƒ tddƒ¡dksZJ ‚tddƒ tddƒ¡dksjJ ‚tddƒ tddƒ¡dkszJ ‚tddƒ td
dƒ¡dksŠJ ‚tddƒ t	ddƒ¡dksšJ ‚tddƒ t	d
d
ƒ¡dksªJ ‚tddƒ t	ddƒ¡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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   r4   r2   r:   rs   rº   r6   )r:   r:   r:   )r4   r6   r4   r   r‘   ©r   r4   r:   )r–   r   r   )r–   r4   r:   ©r   r4   r4   )r:   r   r   ©r   r   r4   )r4   r4   r2   )r6   r6   r6   r]   )r4   r4   r:   )r6   r6   r:   rJ   rÆ   r9   é	   éN   )
r   r   r   r   re   r   rv   r
   r   r   )rn   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ƒƒ¡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   r4   )r   r5   r‹   r6   r:   r2   r½   Fr•   TrQ   r“   )r   r   r/   r+   ry   Úargsrw   r,   rx   rv   Úabsr
   r   r   r   r-   r   re   rc   r   )rn   r¥   rh   ri   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   r4   r8   r:   r2   rJ   )
r   r   r+   r   Úequationr%   r(   r   r,   r)   )rn   r¥   rh   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   r4   r2   rJ   r:   ç      à?g      Ð?r¹   r–   r•   r5   r6   rQ   )r2   r   rÅ   )r:   r   )rJ   r   )r5   r   ©rŽ   r   rÆ   éx   r²   é4   r7   é   éZ   é-   r[   rT   )r–   r–   r   T)rJ   rJ   )r   r+   r,   r   r   r   r   rx   r   r   r   Úasar   r   r   r   r
   ru   )rn   r¥   rµ   Úp4rh   r©   r«   r¬   Úr4Úr6Úr7r­   rÈ   Ú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Ü   r2   r:   r²   é   r   r4   T)r   r   r   r
   r   r   ru   )Úx0r+   Úx2r%   r(   r=   r=   r>   Útest_line_intersectionR  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   r4   r2   rJ   r:   r6   rË   )r   r:   r2   rÌ   rQ   r“   )r   r   r   r   r   r+   rx   r-   )rn   r¥   rh   ri   r«   r¬   r­   r=   r=   r>   Útest_intersection_3d[  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   r4   FrJ   )	r   r+   r   r   r,   Úis_parallelrx   r   rÑ   )rn   r¥   rµ   ri   Úl2_1r=   r=   r>   Útest_is_parallel  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 rm   )	r   r   r+   r,   Úis_perpendicularr—   rc   r   r   )rn   r¥   rh   ri   Úl1_1r‡   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| |ƒ¡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 )NrŠ   r:   r4   r   FT)r   r™   r   r   r   r   Ú
is_similarr   )rn   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   rf   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shJ ‚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sJ ‚tt ddƒt ddƒƒ 	|¡tt ddƒt ddƒƒks¸J ‚| 	|¡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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sUJ ‚| 	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sJ ‚| 	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   r4   r:   rÖ   rŽ   rJ   r6   r2   r5   r•   r¹   )r   r   r+   r   r   r   r   r   r,   rz   r   r   r   rw   )	rn   r¥   rµ   rh   ri   r©   r«   r­   rÈ   r=   r=   r>   Útest_projection¿  s6   
04660,88,88JJ"0ró   c                  C   s¼   t dddƒt dddƒt dddƒ} }}t| |ƒ}| |¡}|j|ks%J ‚|j|v s,J ‚t ddƒt ddƒt ddƒ} }}t| |ƒ}| |¡}|j|ksNJ ‚|jj|| |¡ jks\J ‚d S )Nr   r:   r2   rJ   rŽ   )r   r   ry   rn   r¥   Ú	directionÚunitrz   )rn   r¥   rµ   r¿   r‡   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}|  ¡  |¡s;J ‚|  |¡ t | j|ƒ¡sIJ ‚|  |d ¡ |¡sUJ ‚d S )Nr   r4   r2   r:   r6   rÅ   )	r   r   r   r   re   r   rd   Úperpendicular_bisectorrw   )r­   ÚalineÚ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 ©Nr[   r4   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 )Nr:   r   )r   r=   ©ÚdÚsr=   r>   r?     rC   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   r4   )r   r   rz   r   r=   r=   r=   r>   r?     s    )r	   r   r#   Ú	TypeErrorrF   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 )Nr[   rJ   rR   r   r:   rT   rÅ   r9   r5   g      @r“   g      @g      @)r:   r4   r   g333333@r4   r–   g®Gáz@r]   )rJ   rJ   rJ   r_   r^   r2   )r   r   r   r
   r   r   r   r=   r=   r=   r>   Útest_ray_generation  s8    """&ÿÿÿÿ
ÿ
ÿ&004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s0J ‚d S )Nr   r‹   )
r   r   r%   r(   r   r*   r)   r
   r   r   )ÚcircleÚlineÚ_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 ]\} }| ˆ ˆƒ}|ˆˆƒ}| |¡| |¡ks$J ‚q
d S )Nr:   )r"   r   r   r   r   )ÚfÚgrh   ri   ©r0   r1   Úcr   r=   r>   Ú_check+  s
   

ýztest_issue_2941.<locals>._check))rŽ   rŽ   r×   )rQ   r[   ))rŽ   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   rs   )r5   rs   c                      s   ˆ   dˆ¡S )NrQ   )Úparameter_valuer=   ©r¿   r-   r=   r>   r?   >  r@   z&test_parameter_value.<locals>.<lambda>)r   r   r   r  r#   rF   )rn   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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   r4   r6   )rº   rÍ   )rQ   rÅ   r:   )Úrepeat)r   r   Ú	bisectorsr"   r   r   r   )r«   r¬   Ú
bisectionsÚansrh   ri   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s(J ‚d S )Nrs   r5   r   iúÿÿÿr6   gffffffþ?)r   r   r   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s)J ‚tdd	ƒ}td
dƒ d¡}t| |¡d ƒdksCJ ‚td
dƒ d¡}| |¡rRJ ‚d S )Nr   r4   g\Âõ(\ï?gHáz®Gé?r:   g¸…ëQ¸æ?zPoint2D(0.82, 0.82)rQ   r[   r’   r”   zPoint2D(-0.33, -0.33))g      à¿rÖ   )r   r   ÚnÚstrr   r   r   )r«   r¬   rh   ri   r=   r=   r>   Útest_issue_12598U  s   
r  N)`Úsympy.core.numbersr   r   r   r   Úsympy.core.relationalr   Úsympy.core.singletonr   Úsympy.core.symbolr   r	   Ú(sympy.functions.elementary.miscellaneousr
   Ú(sympy.functions.elementary.trigonometricr   r   r   Ú
sympy.setsr   Úsympy.simplify.simplifyr   r   Úsympy.geometryr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úsympy.geometry.liner    Úsympy.geometry.polygonr!   rÝ   r{   r"   Úsympy.testing.pytestr#   r$   r%   r(   r)   r*   r+   r,   r-   r0   r1   r/   rG   rI   rP   rV   rX   rZ   rj   rl   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=   r>   Ú<module>   sx    D	
%M-*0"j	$#
