o
    8VaI                     @   s  d dl mZmZ d dlmZ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 d dlmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlm Z  d	d
 Z!dd Z"e dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dd Z*dd Z+dd  Z,d!d" Z-d#d$ Z.d%S )&    )sqrtAbs)SRational)	decomposebest_origindistance_to_sidepolytope_integrate
point_sorthyperplane_parametersmain_integrate3dmain_integratepolygon_integratelineseg_integrateintegration_reductionintegration_reduction_dynamic	is_vertex)	Segment2D)Polygon)PointPoint2D)xyz)slowc                   C   s  t tdtiks
J t td dtd iksJ t tt dtt iks&J t tt dtt iks4J t td t ttd dksEJ t dtd  dt  d ddt dtd  dksaJ t td dt t  dtd dt t  iks{J t d	td  t dt  td  td t  d ddt t d	td  td ttd   d
ksJ t tdthksJ t td dtd hksJ t tt dtt hksJ t tt dtthksJ t td t dttd hksJ t dtd  dt  d dddt dtd  hksJ t td dt t  dtd dt t hks)J t d	td  t dt  td  td t  d ddtdt d	td  ttd  td hks[J d S )N      r   r            r   r   r      	   )r   r   r   r"   T)r   r   r    r$   r$   D/usr/lib/python3/dist-packages/sympy/integrals/tests/test_intpoly.pytest_decompose   s(   "842,":44&r&   c                  C   s  t d td  t d td   dt  td  t d t  } ttddtdd}tttdd dttdd d}ttdtdd tdtdd }ttddtdd}ttddtdd}ttddtdd}tdd|| d	ks{J td
d|td tdd dfksJ tdd|td dtdd fksJ tdd|td t d  dksJ tdd|td t d  d
ksJ tdd|td t d  dksJ tdd|td t d  d
ksJ d S )Nr      r       r   r"   r   )r   r   r   r"   )r   r   )r   r   r   r   r#   )r   r   r   r   r   r   )expr1l1l2l3l4l5l6r$   r$   r%   test_best_origin*   s   <&&&&"""&r2   c                  C   s  t ttddtddtddddksJ t ttddtddtddtddtt tddks5J t ttddtddtdddtd  dt  td	dksVJ t ttddtdtdttdtdttddddksxJ ttddttd d tjttd d tdd tddttdd tdd ttdd tj} t | dtdtd d ksJ t g d
ddksJ t g dtt tddksJ t g ddtd  dt  td	dksJ t ddtdfdftddfdfdgddksJ tddtd d fdfdtdd ftddtdd ftdftjtdd ftdfdtdd ftjtd d fdfg} t | dtdtd d ks_J t ttddtddtddtddtddddks~J t ttddtddtddtddtddtddddksJ t g dddksJ t g dddksJ ttddtddtddtddtddtddtdd }t |td tt  td  td!d" ksJ ttd#d$td%d&td'd(td)d*td+d,}t |td tt  td  td-d. ksJ ttd/d0td1d2td3d4td5d6}t |td tt  td  td7d" ksJJ ttd8d9td:d;td<d=td>d?td@dA}t |td tt  td  tdBdC ksyJ ttddtddtdd}g }tdD t tdE td   dtd  tdF   }td td  td td   dtdG   }tdG tdD t  tdF td   td td   }	|	|||	f t ||dGdH}
|
| tdIdJksJ |
| tdKdLksJ |
|	 tdMdNksJ t ttddtddtddtddddHi ddddttjtd td  tj
dD td tj
d td tj
d ttjttd  tj
d td tj
d td tj
d td t tj
d td t tj
dF tt tj
d td tj
d td tj
d ttd  tj
dF ksJ g dOg dPg dQg dRg dSg dTg dUg}t |dtdVksJ g dWg dXg dYg dZg d[g d\g d]g}g d^g d_g d`g dag dbg dcg ddg deg dfg	}dgdhdidjtj
d tj
d tj
d fgg dkg dlg dmg dng dog dpg dqg}t |td td  tt  td  tdrdks6J t |td td  tt  td  tdsdt ksRJ t |td td  tt  td  tdudv ksnJ tjtd ddfdtj
td dfddtjtd fddtj
td fdtjtd dftj
td ddfgg dwg dxg dyg dzg d{g d|g d}g d~g	}t |dtdd ksJ g dg dg dg dg dg dg dg dg dg dg dg dg dg}tt |dd dk sJ td td  td  }g g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d}tt ||d dk sJ g g dg dg dg dg dg dg dg dg dg d¢g dâg dĢg dŢg dƢg dǢg dȢg dɢg dʢg dˢg d̢g d͢g d΢g dϢg dТg dѢg dҢg dӢg dԢg dբg d֢g dע}tt ||d dk sPJ g g d٢g dڢg dۢg dܢg dݢg dޢg dߢg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dhg dig djg dkg dlg dmg dng dog dpg dqg drg dsg dtg dug dvg dwg dxg dyg dzg d{g d|g d}g d~g dg dg dg dg dg dg dg dg dg dg dg dg dg dg d}tt |dd dk 	sJ tt ||d dk 	sJ t |td tt gddHtt dtd td dtd ik	sJ t |ddHddtdtd tt dtd tdtd tt dtd td dtd td dtd tdtd tt dtd td dtd i
k
sOJ d S (  Nr   r   r   r   r"   r'      (   iY)r   r   )r   r   r   r7   r   )r5   r   r   r   r   r   r   r8   ))r;   r"   ))r   r7   ))r>   r7   r5   r8   r7   r6   r=   )r6   r   r:   )r   r7   r   r*   r   )r9   r   )r@   rB   ))r7   r   r   r<   ))r7   r7   r   rA   gQ?gX9vgףp=
gPngT㥛 gʡEg(\gKgHzG	g1Zdg}?5^@gL7A`?gS@l   le4_9 l     QJgX9v>@gK7@gB`"?g
ףp=
g{Gz
gZd;O	zGagzGg-FgZd;?l   ;U(h*Y l     gQgh|?5gtV
g;O@gbX9gMg~jtgh|?5	l   Euj g5^I?grh|gFxg+@gʡE?gjt@gQ@g333333gMڿgNbX9l   K[+r l    J)r#   r    r   
   Z
max_degreei$iR  iP    iti  )r   r   r   )r   r3   r3   )r3   r3   r3   )r"   r3   r   )r   r3   r   )r3   r   r3   )r"   r   r   )r   r   r3   )r   r   r"   r   )r"   r   r'   r3   )r   r    r'   r   )r   r3   r'   r    )r   r   r   r    )r   r   r"   r3      rG   r   r   r'   r   r'   r   r   r'   r'   r'   r   r   r'   r   r'   r'   r'   r   r'   r'   r'   )r"   r    r3   r   )r   r'   r    r"   )r'   r   r3   r    )r   r   r'   r   )r   r   r   r"   )r   r3   r   r   )rG   rM   )r'   r   r   )r"   r   r   )r"   r'   r   rK   rJ   rN   )r'   r   r'   )r"   r   r'   )r"   r'   r'   rL   )r3      r'   r   )r   r    r3   r   )r'   r   r"   r   r   r   )rQ   rD   r   r'   )rD   r#   r"   r   )r#   r   r   r"   )r   r    r   r   )r    r   r#   rD   rQ   r3   rG   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   i	=  i+  r(   %   i  )r"   r   r'   )r"   r'   r   )r"   r   r   )r"   r   r   )r   r   r   )r   r   r'   )r   r   r   )r'   r   r   ))gaI{Կr   F8?)gaI{?r   F8ۿ)Sr   ׈?0?)S?r   ׈?0)r[   P/7ӿrV   )r[   P/7?rV   )rY   r\   rW   )rY   r]   rW   )aI{Ŀ      rY   )r^         ?rY   )aI{?r_   r[   )ra   r`   r[   )rW   r\   r[   )rW   r]   r[   )Sпa-!r?rW   )rb   a-!rȿrW   )S?rc   rV   )re   rd   rV   )rV   r\   rY   )rV   r]   rY   )r(   r"   r   r3      )   r    r   r"      )r#   r3   r   r    r   )   r   r   r      )   r'   r   r      )rQ   r   r   r'   rD   )r   rl   r   ri   r#   )rD   rh   r"   r(   rQ   )rf   rj   r   rQ   r(   )rh   rD   r'   rk   rg   )rj   rf   r3   r#   ri   )rl   r   r    rg   rk   gZ?g-q=))r   g;fr   )r   g;f?r   )ب/h?;fֿHH~?)rm   ;f?ro   )%D?SN%D?)rq   SN?rs   )HH~??z5˿HH~??)ru   z5?rw   )[ $?rn   %D׿)ry   rp   rz   )ro   r   rz   )HH~?ӿrv   ro   )r{   rx   ro   )rw   r   rs   )~E?rr   r   )r|   rt   r   )rs   r   ro   )~Eڿrr   r   )r}   rt   r   )orv   r   )r~   rx   r   )o?rv   r   )r   rx   r   )rz   r   rw   )[ $߿rn   rs   )r   rp   rs   )%Dǿrr   rz   )r   rt   rz   )ب/hrn   rw   )r   rp   rw   )r   rD   rf   )   rD   r   )rf   rh   r   )r   rh   r   )rf   rD   r   )r   rD   r   )r   rh   rf   )r   rh   r   )r   r   rl   )   r   r   )r   rl   rF   )rF   r   r   )   r'   r"   )r"   r'      )   r   r"   )r"   r   r   )   rl   r   )r   r   r   )r'   r      )r   r   r'   )r3   r   rk   )rg   r   r3   )r3   rk      )r   rg   r3   )rj   r#   r    )r    r#   ri   )   rj   r    )r    ri   r   )r   r(   rk   )rg   r(   r   )rj   rQ   r#   )r#   rQ   ri   )rQ   rj   r   )r   ri   rQ   )r   rk   r(   )r(   rg   r   )r   rF   rl   )r   r   r   )r   r   r   )r   rF   r   gÜ?gư>))r^   r_   ys)r^   r`   r   )ra   r_   ys?)ra   r`   r   )rX   r   r   )rZ   r   r   )rb   wr^   )rb   w?r^   )re   r   ra   )re   r   ra   )rW   r\   r   )rW   r]   r   )rV   r\   r   )rV   r]   r   )r   r_   ra   )r   r`   ra   )r   r_   r^   )r   r`   r^   )F8r   r^   )F8?r   ra   )ri   rD   r"   r    )rh   rl   r   r   )ri   r   r   rD   )r"   rl   rh   r    )ri   r    rh   r   )r   rl   r"   rD   )r3   r   rQ   ri   )r   r#   rl   r(   )rQ   r#   r   ri   )r3   r(   rl   r   )r   r(   r3   ri   )rQ   r   rl   r#   )r   rj   rQ   r    )rg   r'   r   r(   )r   r(   r   rj   )rQ   r'   rg   r    )r   r    rg   r(   )r   r'   rQ   rj   )r3   rD   rk   r   )rh   r#   r'   rf   )rk   r#   rh   r   )r3   rf   r'   rD   )rh   rf   r3   r   )rk   rD   r'   r#   )rj   rk   r   r   )rf   rg   r"   r   )rj   r   r"   rk   )r   rg   rf   r   )rj   r   rf   r   )r"   rg   r   rk   g      ?)\)r   r   O)r   r   O@)r   Tͻr   )r   r   r   )r   Tͻ@r   )r   r   r   )wVnTͻr   )r   r   r   )r   Tͻ?r   )r   r   r   )wVn@r   r   )r   r   r   )r   r   r   )r   r   r   )r   ~jr   )r   r   r   )r   ~j@r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )k)#r   V)r   r   r   )k)#@r   V?)r   r   r   )1*Tͻ r   )r   Tͻ @r   )1*@r   r   )r   r   r   )gr,Er   q
)gr,E@r   q
@)r   r   r   )r   r   r   )r   r   r   )r   r   r   )A(`Rr   r   )r   r   r   )A(`R@r   r   )r   r   r   )Vr   r   )r   r   r   )r   r   r   )V@r   r   )r   r   r   )r   r   r   )r,Er   r   )r   r   r   )r,E?r   r   )r   r   r   )ysr   r   )r   r   re   )ys?r   r   )r   r   rb   )r   r   r   )r   r   r   )r   r   rb   )r   r   r   )r   r   rb   )r   r   r   )r   r   r   )r   r   r   )r   r   re   )r   r   r   )r   r   re   )r   r   r   )r   r   r   )r   r   r   )r   r_   r   )r   r`   r   )r   Tͻr   )r   r   r   )r   r   r   )r   Tͻ@r   )r   r_   r   )r   r`   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )rW   r   r   )rW   r   re   )rW   r   r   )rW   r   re   )rb   r   r   )rb   r   r   )re   r   r   )re   r   r   )rV   r   r   )rV   r   rb   )rV   r   r   )rV   r   rb   )r#   B   /   ),   >   M   )r   [   1   )!   r   S   )r"   r   T   )r(   r   5   )$   r   r   )r   r   r   )I   r   r   )rk   r   .   )r   @   +   )rf   :   H   )r   r   3   )rQ   r   J   )r   r   r   )<   r   r   )#   r   r   )r   r   r   )rl   r   r   )O   r   N   )r3   8   r4   )L   r   Q   )r   r   K   )r   r4   r   )   r   r   )*   r   r   ))   r   r   )rh   r   r   )rF   r   r   )r   Y   G   )r   r   r   )rg   r   U   )rj   r   r   )A   r   r   )r   r   r   )"   r   r   )r'   r   r   )    r   r   )rD   r   0   )-   r   r   )r    r   r   )ri   r   r   )rU   r   r   )F   r   r   )r   r   r   )X   r   r   )&   C   r   )r   r   r   )9   r   r   )r   r   r   );   r   W   )rl   r   r   )?   r   r   )rg   r   r   )4   r   r   )'   r   r   )r   r   r4   )7   r   r   )r   r   r   )   r4   E   )rh   r   r   )R   r   r   )r    r   r   )Z   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )6   r   D   )r'   r   r   )2   r   r   )r"   r   r   )r   r   r   )r   r   r4   )r   r   r   )r   r   r   )r   r4   r   )r   r   V   )r#   r   r   )P   r   r   )rQ   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )rk   r   r   )=   r   r   )r   r   r   )r   r   r   )r   r   r   )rU   r   r   )r   r   r   )r   r   r   )rF   r   r   )rD   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   )rj   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )rU   r   r   )r   r   r   )r   r   r   )rf   r   r   )ri   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r3   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   )r   r   r   )r   r   r   )ri   r   r   )r   r   r4   )r'   r   r   )r   r   r   )r3   r4   r   )r   r   r   )r   r   r   )r   r   r   )rg   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   )r   r   r   )rk   r   r   )r   r   r   )rD   r   r   )rF   r   r   )r   r   r   )r   r   r   )r"   r   r   )r   r   r4   )r   r   r   )rl   r   r   )r   r4   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )rQ   r   r   )rj   r   r   )r   r   r   )rh   r   r   )r   r   r   )rf   r   r   )r   r   r   )r   r   r   )r   r   r   gfI@g1:o@i5  }   iq  )r	   r   r   r   r   r   r   r   HalfextendZOner   ZNegativeOner   )ZhexagonZfig1Zfig2Zfig3Zfig4Ztripolysr+   Zexpr2Zexpr3Zresult_dictZcube1Zcube2Zcube3Zcube4Z
octahedronZgreat_stellated_dodecahedronexprZoctahedron_five_compoundZcube_five_compoundZechidnahedronr$   r$   r%   test_polytope_integrate=   sF  "*"
$











0,4	

$
$

$

$$$


...///000111222333444555666777888999:::;<

   !!!"""###$$$%%%&
\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz{{{{||||}}}}~~~~                                                                 	  	  	  	  
&

462r   c                  C   s   t tddtddtddgtddtddtddgks J tddd} t| tt tddks4J t| tt dd	tddksDJ d S )
Nr   r   r   r   r=   r*   r7   r   T)Z	clockwise)r
   r   r   r   r	   r   r   r   )fig6r$   r$   r%   test_point_sort  s   $r   c                  C   s   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| td tt  td  tdd ks:J t tddtddtddtddtdd}t|td tt  td  tdd kshJ d S ) Ng)\g9vgMbXgJ+?gT㥛 
gX9v?gq=
ףpgp=
ף g/$
@gB`"g$C@rC   gGzg\(\@g&1g9v
r   l   #ShK6. l     ^OWg/$g1Zg|?5^g/$@gGzgX9vgMb@gy&1gZd;@gd;O?l   QMQ@ l    0{
)r   r   r	   r   r   r   )Zfig5r   r$   r$   r%   !test_polytopes_intersecting_sides  s   

r   c                  C   s   t dddd} dtttt td t ttd  g}t| |ddddttjttjtt tdd	td t tdd
ttd  tdd
iksEJ d S )Nr   r;   r*   r=   r   r   r"   rE   r   r3   )r   r   r   r	   r   r   r   )polygonr   r$   r$   r%   test_max_degree  s
   $Dr   c                  C   s   g dg dg dg dg dg dg dg} | d }| d	d  }t ||}td	|||d
ks1J td	|||d	dd	d
ttddttddttddiksOJ d S )NrI   r   r3   r    r"   r"   r    r'   r   r    r3   r   r'   r   r'   r   r   r"   r   r   r   r   r   r3   r   r   r   irE   ir   )r   r   r   r   r   r   )cubeverticesZfaces	hp_paramsr$   r$   r%   test_main_integrate3d  s   
$r  c               	   C   s~   t ddd} | j}t| }ttd td  ||tddks J ttd td  ||ddd	d	dd
ttddtdiks=J d S )Nr)   )r'   r"   r*   r   iE  r3   r   rE   r   r'   r   r"   rD   )r   sidesr   r   r   r   r   )trianglefacetsr   r$   r$   r%   test_main_integrate  s   &r  c                  C   sn   g dg dg dg dg dg dg dg} | d }| dd  }| d	 }t |d
dgd	||dd	dks5J d S )NrI   r   r   r   r   r   r   r   r   rS   r'   i)r   )r   Zfacetr  r   r$   r$   r%   test_polygon_integrate(  s   $r  c                  C   s*   d} t | ddgdtd d ksJ d S )NrG   rT   rS   rR   r   )r   r   )Zpointr$   r$   r%   test_distance_to_side3  s   &r  c                  C   sD   g d} ddg}t | d|dddksJ t | d|dddks J d S )N)rK   rO   rP   rL   rK   rO   r   r   r'   )r   )r   Zline_segr$   r$   r%   test_lineseg_integrate8  s   r  c                  C   sx   t tddtddtdd} | j}t| d \}}t|d||dttfddks*J t|d||dttfddks:J d S )Nr   r"   r'   r   )r   r   r  r   r   r   r   )r  r  abr$   r$   r%   test_integration_reduction?  s
    $r  c                  C   s   t tddtddtdd} | j}t| d \}}|d jd }g dg dtdddgtddd gg}t|d||tdttfddd||dtdd	ksLJ t|d||ddttfddd||ddksbJ d S )
Nr   r"   r'   r   )r   r   r   r   )r   r   r   r'   rk   r   r   )	r   r   r  r   Zpointsr   r   r   r   )r  r  r	  r
  Zx0Zmonomial_valuesr$   r$   r%   "test_integration_reduction_dynamicG  s"   

r  c                   C   sZ   t ddu sJ t ddu sJ t tdddu sJ t ddu s#J t ddu s+J d S )Nr   F)r   r"   Tr"   )r   r"   r   )r   r"   r   r'   )r   r   r$   r$   r$   r%   test_is_vertexU  s
   r  N)/Zsympyr   r   Z
sympy.corer   r   Zsympy.integrals.intpolyr   r   r   r	   r
   r   r   r   r   r   r   r   r   Zsympy.geometry.liner   Zsympy.geometry.polygonr   Zsympy.geometry.pointr   r   Z	sympy.abcr   r   r   Zsympy.testing.pytestr   r&   r2   r   r   r   r   r  r  r  r  r  r  r  r  r$   r$   r$   r%   <module>   s4    <
   8		