o
    *Ī®cj  ć                   @   s¼  d dl mZmZmZmZ d dlmZ d dlmZm	Z	 d dl
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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$m%Z%m&Z& d d
l'm(Z( d dl)m*Z*m+Z+ d dl,m-Z- dd Z.e%dd Z/dd Z0dd Z1d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/d0 Z?d1d2 Z@d3d4 ZAd5d6 ZBd7d8 ZCd9d: ZDd;d< ZEd=d> ZFd?S )@é    )ŚFloatŚRationalŚooŚpi)ŚS)ŚSymbolŚsymbols)ŚAbs)Śsqrt)ŚacosŚcosŚsin)Śtan)ŚCircleŚEllipseŚGeometryErrorŚPointŚPoint2DŚPolygonŚRayŚRegularPolygonŚSegmentŚTriangleŚare_similarŚconvex_hullŚintersectionŚLineŚRay2D)ŚraisesŚslowŚwarns)Śverify_numerically)ŚradŚdeg)Ś	integratec                 C   s&   t d}| | |   k o|k S   S )z.Test if two floating point values are 'equal'.z1.0E-10)r   )ŚaŚbŚt_float© r(   śH/tmp/pip-target-vg8gfxp4/lib/python/sympy/geometry/tests/test_polygon.pyŚfeq   s   r*   c            &         s  t ddd t dddt ddd} t ddd}t ddd}t ddd}t d	dd}tj}td
d
tdd
tdd}}}t|||}	ttd
d
td
d
ksRJ t|tdd
|||	ks`J ttdd
||||	ksnJ t|||tdd
|	ks|J t|tdd
|||	ksJ t||tdd|||	ksJ ttddtddtddtddtddtddtddtddtddtddtddtddtddttddtddtddtddksåJ ttd
d
tddtdd
tddtddtd
d}
ttdd
tddtd
d
td
dtddtdd}ttd
d
tdd
tddtdd}ttd
d
tddtddtdd
}ttd
d
tddtd
d}ttddtddtddtdd}tt t| |t||}tt t||t| |}ttd
d
tddtdd
tdd}ttd
dtddtd
d
tdd
}ttd
d
ddd}ttd
d
dd
dd}ttddtdd}|
|ksĪJ t|
jdksŲJ t|
j	dksāJ |
j
ddtd  td  td! ksųJ |
jd"ks J |
 ” rJ td#d$d%d&d' ” d(u sJ | ” sJ | ” s$J |j}|td
d
 td ks5J |td
d td ksCJ | t ”d u sPJ | tdd”s[J | td
d
”d(u shJ | tdd
”d(u suJ |
 ttd)d)d”d(u sJ |
 ttd)ddd”d(u sJ | d” d
dgks£J | ttddtd*d*tdd*”dtd ks¾J | ttdd!tdd!td!d+tdd+”dksŁJ ttd,d-' ttd
d
tdd
tdd ttd
d
td
dtdd” W d    n	1 s
w   Y  t|tttd
d
tddtd
dks'J t|
t|ks2J t|t|ks=J t|t|ksHJ |ttddtd
dtd
d
ks\J ttddtd
dtd
d
|v spJ |td
dkszJ td
d|v sJ | d.” t d.ddd
”td
d
ksJ tt fd/d0 | |”tdtd1d2tdtd3dgks»J |jd
ksĆJ |ttd
d
ddd
ksŅJ ||ksŁJ |j d
 tdd
ksęJ |jd
 td
d
ksóJ | !td ” |j d
 td
dksJ ttd
d
dd}
ttd
d
dd}tt"d4d0  tt"d5d0  ttd6d0  |
|ks5J |
j#ttdd ksBJ |
j$ttdd ksOJ |j%dt&td  ks]J |j'|
j'  krotd
d
ksrJ  J |
j(|
j)  krdksJ  J |j*ttd
d
dksJ |j+ttd
d
|j%ks”J |j,|j%  krøddtd  d ks»J  J | !td ” |j}|td
d dt d ksÕJ |
 ” sÜJ |
j-d
ksäJ |
 td
d
”sļJ |
 td7d
”d(u süJ | td
d8”sJ |
 !td ” |
j-td ksJ |
j d
 tddtd ks)J |
jD ]!}t.|tr@|td
d
ks>J q,|ddtd fv sLJ q,|
td
d
ksXJ |
|ks_J |
}|
 /td ”ttd
d
ddttdd kszJ |
|ksJ |
jd9td d: dt0td   ksJ |
j1d;ttd d! tdd!  ks­J |
 2dd”t|
j3|
j)d |
j4|
j-ksĆJ td<dd 2dd”ttdd
td
dtdd
td
dksćJ t5|
t6|
ksīJ |j}t7|td
d
  8” t9d=sJ t7|tdd  8” t9d>sJ t7|tdd  8” t9d?s$J t7|tdd
  8” t9d@s5J |j}t7|td
d
  8” t9d=sIJ t7|tdd  8” t9d>sZJ t7|tdd  8” t9d?skJ t7|tdd
  8” t9d@s|J td
d
}
tdd
}td
d}t|
||}t|
|ttddttdAd}t|
t|d
td
|}|j	}t|
||
t|
||
  krÉt:|
|ksĢJ  J tt"dBd0  t|
|
|
|
ksŽJ t||d |d t:||d ksņJ |jtdCdksżJ | ;” sJ | ;” d(u sJ | ;” sJ |
|v sJ |j	d
 |v s%J t:d<dD|v s/J tdd|vs9J | ” s@J t7|j|
  8” t 8” d sQJ | <” d(u sZJ | <” saJ | <” d(u sjJ t=||d(u stJ t=||s|J t=||d(u sJ | >td
d
”d(u sJ | >|”d(u sJ | ?” } | |
 t:|
ttddtddks¶J | ?” | t:tdd
ttdddtd d ksÓJ td
|}| ?” | t:|t|tdd  d
ksļJ dEdFtd  dG }!|j@t|!|!ksJ |j,|j+j)  krddtd d  ksJ  J |j,|j+j)  kr5dtd d ks8J  J |j,|j+j)  krT|d dtd tA|  ksWJ  J |jB|j	d  dtd d ksjJ |jC|j	d  tDdCtd dHtd d ksJ |j*j3td)d)ksJ |jE}"|jFttddtddks¤J |"|
 t:|
ttddtddks¹J |jE|
 t:|
t|d |d ksĶJ t|"|
 |"| |"| |jFgksąJ |jGttd)d
td
d)td)d)ksõJ |jHttd)d
td
d)td)d)k	s
J |jHttd
d
td
d)td)d)k	sJ |jI}#|#|
 t:|
ttddtddk	s7J |#|  J|d
 ”	sCJ |#| |d k	sNJ |jK|
k	sVJ tdI}	|	jKtdJk	sdJ tt|  L”  dk	sqJ tt|# L”  dk	s~J tt|" L”  dk	sJ ttd
d
tdd
tddtd
d}
ttd
tdd tdtdd tdtdKd td
tdKd }ttddtddtdd}ttddttdd dtdtdd }t||}$tdd}%	 |
 |$”|k	süJ |
 |%”d
k
sJ | |$”tdd k
sJ | |%”tdd k
s"J 	 ttd,d- |
 |”|d k
s6J W d    n	1 
sAw   Y  |
 |”tdd k
sTJ ttd,d-! | |”tdd ttddC d  k
ssJ W d    d S 1 
sw   Y  d S )LNŚxT©ŚrealŚyŚqŚuŚvŚwŚx1r   é   é   é   é’’’’éü’’’é   iõ’’’éń’’’gffffff@gffffff!ĄgĶĢĢĢĢĢ Ąéž’’’é   éż’’’é
   é   é   é   é÷’’’)Śng      @é   é   é   )r7   r6   )r4   r7   ©r4   r6   ©r7   r7   ©r5   r   Fē      @é   é   ś1Polygons may intersect producing erroneous output)ŚmatchŚtc                      s$   t t dtdt  d”S )Nr   r+   )r   r   Śarbitrary_pointr(   ©r+   r.   r(   r)   Ś<lambda>~   s    ’ztest_polygon.<locals>.<lambda>i¬’’’é   é!   c                   S   s   t tddtddtddS ©Nr   r6   ©r   r   r(   r(   r(   r)   rR      s
    ’’c                   S   ó   t tddddS ©Nr   r6   r4   rV   r(   r(   r(   r)   rR      ó    c                   S   rW   )Nr   r6   rJ   rV   r(   r(   r(   r)   rR      rY   é   g@i’’’iā  é   ©r   r   z0.7853981633974483z1.2490457723982544z1.8925468811915388z2.3561944901923449éK   c                   S   s   t tddS )Nr   )r   r   r(   r(   r(   r)   rR   ×   s    é   ©r6   r   éś   é}   é2   éū’’’zćTriangle(
    Point(100080156402737/5000000000000, 79782624633431/500000000000),
    Point(39223884078253/2000000000000, 156345163124289/1000000000000),
    Point(31241359188437/1250000000000, 338338270939941/1000000000000000))z¼Point(-78066086905059984021699779471538701955848721853/80368430960602242240789074233100000000000000,20151573611150265741278060334545897615974257/160736861921204484481578148466200000000000)é	   )Mr   r   ŚHalfr   r   r   r   ŚlenŚargsŚsidesŚ	perimeterr
   ŚareaŚ	is_convexŚanglesr   Śencloses_pointŚenclosesr   r   Śplot_intervalŚdistancer    ŚUserWarningŚhashrP   Śsubsr   Ś
ValueErrorr   r   r   ŚverticesŚspinr   Śinterior_angleŚexterior_angleŚapothemr   ŚcircumcenterŚcircumradiusŚradiusŚcircumcircleŚincircleŚinradiusŚrotationŚ
isinstanceŚrotater   ŚlengthŚscaleŚcenterŚ_nŚreprŚstrr*   Śevalfr   r   Śis_rightŚis_equilateralr   Ś
is_similarŚ	bisectorsŚincenterr	   ŚexradiiŚ	excentersr   ŚmediansŚcentroidŚmedialŚnine_point_circleŚ	altitudesŚequalsŚorthocenterŚvalues)&r/   r0   r1   r2   r3   Śhalfr%   r&   ŚcrO   Śp1Śp2Śp3Śp4Śp5Śp6Śp7Śp8Śp9Śp10Śp11Śp12ŚrŚdict5Śdict1ŚvarŚp1_oldrl   Śt1Śt2Śt3Śs1r   ŚicŚmr   Śpt1Śpt2r(   rQ   r)   Śtest_polygon   s4  " ż$üżżžžžžžžžž,
’ "’

’$’
’’’ž0((
’0*$4 "
2,,

’$
’""""""""


"6("’"’
.62>&4"*(&*’’*ž  žžž

’ž’2$žr“   c                  C   sŖ  t ddt ddt ddt ddt ddt ddt ddt ddt ddt d	dt d
dg} t| d | d | d | d | d
 | d }|  | d ” t ddt ddt ddt ddg}t|d |d }t| |ksmJ t|  |ksuJ t| d | d ksJ t| d | d t| d | d ksJ t| d gd  | d ks¤J tt ddtt ddt ddtt dddd	g tt ddt ddt d	dt ddksÓJ d S )Nrc   r7   r;   r6   r=   r   r4   r5   r@   r?   rd   r>   iÓ’’’i«’’’éU   é   ič’’’)r   r   Śappendr   r   r   )ŚpŚchŚ	another_pŚch2r(   r(   r)   Śtest_convex_hullO  s*    (ž*’(
ž$żr¼   c                  C   s   t tddtddtddtddttjtj} |  tdtj”du s&J |  ttjtj”du s4J |  ttddtj”du sDJ d S )Nr   r6   Fr5   r@   T)r   r   r   re   rn   r   )Śsr(   r(   r)   Śtest_enclosesk  s   "’$r¾   c                   C   sĘ   t ddt tddtddtddksJ t ddt tddtddtd	tdd ks0J t d
dt tddtddttdd tdd ksNJ t ddd u sWJ ttddksaJ d S )N)r5   r@   rA   )Śsssr   r5   r@   )é   r4   rĄ   )Śasar4   r6   )r6   é-   r4   )Śsas)r6   r4   rA   é“   )r   r   r
   r#   r"   r(   r(   r(   r)   Śtest_triangle_kwargsu  s   ’$’,’rÅ   c                  C   sŌ   t ddt tjtddt ddg} t ddt dtddt dd	g}t|   d
dd”t| ks2J tddd d
dd”tt ddt dd	t ddt ddksRJ tddd d
d
”ttddd
ddkshJ d S )Nr   r6   r@   r8   iö’’’r=   iŪ’’’r;   éł’’’r4   r5   )r@   rA   r\   éś’’’ió’’’)	r   r   re   r   r   r   r   r   r   )ŚptsŚpts_outr(   r(   r)   Śtest_transform  s   $"$’’rŹ   c            	      C   sf  t ddd} t ddd}t d}t d}td|f|d}t| |}| |”}| |”j}| |”j}t||s9J td	d
d tdtd”t	tddtddtddksWJ td	d
d tdtd”t	tddtddtddksuJ td	d
d tddd”t	tddtddtddksJ td	d
d tddd”t	tddtddtddks±J d S )Nr+   Tr,   r.   r&   r±   r   ©Śsloper_   )r4   r   )r4   r4   rI   rA   r@   r4   )r   r5   r7   r;   r6   r?   )
r   r   r   ŚreflectŚperpendicular_segmentr   r!   r   r   r   )	r+   r.   r&   r±   Ślrø   r§   ŚdpŚdrr(   r(   r)   Śtest_reflect  s,   

’’’’rŅ   c                  C   sn  t ddt ddt dd} }}tt ddt ddt ddt dd}tt ddt ddt ddt dd}tt ddt ddt dd	t ddt d
d}t| ||}| ” | tt ddt dtdd kskJ | ” tdd ttddttt	dtd d d dt
t	dtd d d  ksJ | ” tdd ttddtdtddtt	dtd d d  dt
t	dtd d d    d  tddt
t	dtd d d  dtt	dtd d d    d d ksżJ | ” tdd ttddtdtt	tdd d td   dtt	tdd  d td   ks5J d S )Nr   r6   r4   r5   r7   rA   r@   rE   r<   é   iķ’’’rD   rd   é   rc   r¶   )r   r   r   r   r   r
   r   r   r   r   r   r   )r   r   r   rø   r/   ŚpolyrO   r(   r(   r)   Śtest_bisectors   s6   "&&..<
’2’’$’’’’’J’rÖ   c                   C   sJ   t tddtddtddjtdtdd  dtdd  ks#J d S rX   )r   r   r   r
   r(   r(   r(   r)   Śtest_incenter°  s    ’r×   c                   C   s,   t tddtddtddjdksJ d S )Nr   r@   r5   r6   )r   r   r   r(   r(   r(   r)   Śtest_inradius“  s   ,rŲ   c                   C   sP   t tddtddtddjttdtd dtd dtd ks&J d S )Nr   r4   )r   r   r~   r   r
   r(   r(   r(   r)   Śtest_incircle·  s   &’rŁ   c                  C   sB   t tddtddtdd} | j| jd  dtd ksJ d S )Nr   r?   r4   r;   r>   )r   r   r   rh   r
   ©rO   r(   r(   r)   Śtest_exradii»  s   $rŪ   c                  C   sP   t tddtddtdd} | jtdd ttddttjtjks&J d S rU   )r   r   r   r   r   re   rŚ   r(   r(   r)   Śtest_mediansæ  s   2rÜ   c                   C   sN   t tddtddtddjt ttjdttjtjtdtjks%J d S rU   )r   r   r   r   re   r(   r(   r(   r)   Śtest_medialĆ  s   $’rŻ   c                   C   sL   t tddtddtddjtttddtddtdd ks$J d S )Nr   r6   r@   r4   )r   r   r   r   r   r   r
   r(   r(   r(   r)   Śtest_nine_point_circleĒ  s   "’rŽ   c                   C   sŠ   t tddtddtddjttddttjtjksJ t tddtddtddtd jtddtd d ks@J t tddtddtd	djtttd
ddttddtddksfJ d S )Nr   r6   r>   rA   r5   r@   rĒ   r7   r=   é@   r<   ić’’’rK   rĘ   r4   )	r   r   Ś	eulerliner   r   r   re   r
   r   r(   r(   r(   r)   Śtest_eulerlineĖ  s   ’&’&’rį   c                  C   sP  t tddtddtdd} ttddtddtddtdtddttjdtddtdd}|  |”ttdddttdtddtddttddtddgksYJ | | ”ttdddttddtdtddttddtddgksJ |  tdd”tddgksJ |  tdd	”g ksJ | t	d
d”tddtddttdddtddgks»J | t	dd”g ksĒJ | 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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tddtddttddtdtddttdtddttjtddttddtddtttjtddtddttddtddgksmJ | t tdd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d”g ks¦J d S )Nr   r6   rc   r8   rA   g¹ær5   éō’’’iÕ’’’)rā   r   ©rL   r   )rā   rL   )rL   rL   )r=   r@   r_   )r   r7   r;   r7   r>   r<   r?   )rā   r:   )r   r   r   r   r   re   r   r   r   r   r   r   r   )Śpoly1Śpoly2r(   r(   r)   Śtest_intersectionÓ  sN   ž
ž
ž 
’’
’(’"ū"*
’ rę   c                     s   t dtdddd   d”tddiksJ tdd	d
d} |  d”ddtd  iks3J tt fdd tt fdd d S )NrO   r\   )r   r6   )r6   r6   r_   )g      ą?r6   r5   rE   rG   )r4   r@   ©r@   r   rĒ   rA   c                      s      d”S )N)rA   r?   )Śparameter_valuer(   ©ŚsqrO   r(   r)   rR   ü  s    z&test_parameter_value.<locals>.<lambda>c                      s      ttddd”S rU   )rč   r   r   r(   ré   r(   r)   rR   ż  s    )r   r   rč   r   r
   r   rt   )r/   r(   ré   r)   Śtest_parameter_valueõ  s   $rė   c                     sĄ   t tddtddtddtddtddtdd} td|  ”d| j   fddttd  D tddtddtddtddtddtddtddtddgks^J d S )Nr   r>   rA   rO   c                    s   g | ]
}   | ”qS r(   )rs   )Ś.0Śi©ŚDELTAŚptrO   r(   r)   Ś
<listcomp>  s    z$test_issue_12966.<locals>.<listcomp>r6   )r   r   r   rP   ri   ŚrangeŚint)rÕ   r(   rī   r)   Śtest_issue_12966   s   "’

   žrō   c                  C   s  t d\} }g d¢\}}}d}d| d  d }t| d td|d|f | ddf}tdt|d |d|f | ddf}t| t||d|f | ddf}	t|||}
||
 |”d  dks^J ||
 |”d  dkskJ |	|
 |”d  dksxJ g d¢\}}}}t| d td|ddf | ddf}tdt|d |ddf | ddf}t| t||ddf | ddf}	t||||}|| |”d  dksČJ || |”d  dksÕJ |	| |”d  dksāJ ttddd	d
}| ” dtd
 td dtd
 td dfksJ d S )Nśx, y)r\   rē   ©r   r4   r\   r6   r@   r4   r   )r\   rē   ©r@   r4   rö   rA   r5   iS  é    )r   r$   r   Śsecond_moment_of_arear   r   r
   r   )r+   r.   r   r   r   rø   Śeq_yŚI_yyŚI_xxŚI_xyŚtriangler   Ś	rectangler§   r(   r(   r)   Śtest_second_moment_of_area  s*   $$ $$ <r   c                  C   st  t ddd\} }td| df| |fd|f}| ” | |d  d | d | d fks+J | | d |d	 f”d
|  |d  d | d  | d fksKJ tdddd}| ” dksZJ td| df| d |f}| ” d	|  |d  d | d | d fks~J | | d |d f”d|  |d  d d| d  | d fksJ tddd}| ” tdd td d fksøJ d S )Nśa, bT©Śpositiver\   r   r4   rE   r5   r@   r=   rų   rd   )é(   r   )r  rĄ   )r   rĄ   )i  ip  éQ   é   r?   iē’’’i  rc   i   rć   )rL   rĄ   i@  i  )r   r   Śfirst_moment_of_arear   )r%   r&   r   r   r(   r(   r)   Śtest_first_moment-  s   ,@0B*r  c                  C   sP  t ddd\} }t d\}}td|fd| df| |f}| t||”| |d  d | d	 |  | d | d |  d	 |  fksCJ | ” | d | d | |d  d  ksYJ tdd
d}| ” tddtdtdd fkssJ | ” dtd td ksJ tddddd}| ” tddtddfksJ | ” tddks¦J d S )Nr  Tr  rõ   r   r\   r5   rL   r4   r6   r?   rA   rE   é   )r6   rE   )r5   r@   )r@   r?   )r<   r6   iē’’i­  iĪŁ’’i  ióh’’éü   )	r   r   Śsection_modulusr   Śpolar_second_moment_of_arear   r   r
   r   )r%   r&   r+   r.   r’   ŚconvexŚconcaver(   r(   r)   Ś4test_section_modulus_and_polar_second_moment_of_area@  s   P,(  r  c                     s¦  t ddtddfddtddfddd	td
tdddf}  | ”d } | ”d }|t ttddtddtdtddttddtddttddtddtdtddttddtddttdddtddtdtdd	ks{J |t tddttddtddttddtddtddttddtddttddtddtddtddttdddtdtdd
ksČJ ttdddd td
dd”}|d t tdtd d dtd d tddtd tddtd tddtddtd  ddtd  ksJ |d t tddtdtd d dtd d tddtd  ddtd  tddtd tddtd ksVJ d\ }d|fd
 df |fg\}}}}t |||| td|fdd”\}}|d ksJ |t tddtddtddtddksJ  td
dd”\}	}
|	t tddtddtddtddksĄJ |
d ksĒJ tt fdd d S ) NrH   r6   rA   r4   rG   r5   r÷   )rA   r5   )r7   r5   r\   rd   r   rB   rS   rĒ   r  r	  rL   rE   r<   r7   r;   r@   r?   rĖ   r=   )r[   r>   r>   r[   c                      s     td fdd”S )Nr   rĖ   )Ścut_sectionr   r(   ©r%   rø   r(   r)   rR   s  s    z"test_cut_section.<locals>.<lambda>)	r   r   r   r  r   r   r
   r   rt   )rĻ   r   r   r½   r&   r¬   r­   r®   Śt4r   r   r(   r  r)   Śtest_cut_sectionP  s>   (66$
ż4@
ž88’0@’ 00r  c                  C   sņ   t tddtddtdd} |  ” dksJ |  ” dksJ |  ” dks'J t tddtddtdd}| ” dks>J | ” dksFJ | ” dksNJ t tddtddtdtd	}| ” dksgJ | ” dksoJ | ” dkswJ d S )
Nr   rA   r4   r@   TFr?   r5   é   )r   r   Śis_isoscelesŚ
is_scalener   r
   )r   r   r   r(   r(   r)   Śtest_type_of_triangleu  s   "r  c                  C   s,  t tddtddtddtdd} t tddtddtdd}|  |”tdd ks/J t tddtddtddtdd}ttddd |  |”dksSJ W d    n1 s]w   Y  t tddtddttjtj}ttddd | | ”dksJ W d    d S 1 sw   Y  d S )Nr   r6   r4   rM   F)rN   Śtest_stacklevelr7   )r   r   Ś_do_poly_distancer
   r    rq   r   re   )Śsquare1Ś	triangle1Śsquare2Ś	triangle2r(   r(   r)   Śtest_do_poly_distance  s   &&’ž"’"žr  N)GŚsympy.core.numbersr   r   r   r   Śsympy.core.singletonr   Śsympy.core.symbolr   r   Ś$sympy.functions.elementary.complexesr	   Ś(sympy.functions.elementary.miscellaneousr
   Ś(sympy.functions.elementary.trigonometricr   r   r   r   Śsympy.geometryr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Śsympy.testing.pytestr   r   r    Śsympy.core.randomr!   Śsympy.geometry.polygonr"   r#   Śsympy.integrals.integralsr$   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>   sP    D
  :

""%