
    \h                     b   S SK JrJrJrJr  S SKJr  S SKJr  S SK	J
r
Jr  S SKJr  S SKJrJrJr  S SKJr  S SKJr  S S	KJr  S S
KJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  S SK'J(r(  S SK)J*r+  S SK,J-r-  S SK.J/r/J0r0  \
" SSS9r1\
" SSS9r2\
" SSS9r3\
" SSS9r4\
" SSS9r5\
" SSS9r6\
" SSS9r7\" SSS9u  r8r9\" SSS9r:S r;S r<S r=S r>S r?S r@S  rAS! rBS" rCS# rDS$ rES% rFS& rGS' rHS( rIS) rJS* rKS+ rLS, rMS- rNS. rOS/ rPS0 rQS1 rRS2 rSS3 rTS4 rUS5 rVS6 rWS7 rXS8 rYS9 rZS: r[S; r\S< r]S= r^S> r_g?)@    )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                    ^ ^^^ SSK JmJmJm Jm  [        ST-  T-   S-   5      [        [        SS5      [        SS5      5      :X  d   e[        ST-  ST-  -   S-   5      [        [        S[        S	S5      5      [        S[        S
S5      5      5      :X  d   e[        ST -  T-   S-   SSS9[        [        SS5      [        SS5      5      :X  d   e[        ST-  T-   5      [        [        SS5      [        SS5      5      :X  d   e[        TT-   5      [        [        SS5      [        SS	5      5      :X  d   e[        [        ST -  T-   S5      STS9[        [        SS5      [        SS5      5      :X  d   e[        TS-
  5      [        [        SS5      [        SS5      5      :X  d   e[        ST-  S-
  TS9[        [        SS5      [        SS5      5      :X  d   e[        T5      [        [        SS5      [        SS5      5      :X  d   e[        ST-  TS9[        [        SS5      [        SS5      5      :X  d   e[        TTS9[        [        SS5      [        SS5      5      :X  d   e[        [        UU4S j5        [        [        U U4S j5        [        [        UU4S j5        [        [        U U4S j5        [        [        UU4S j5        g )Nr   )r&   r)   ab      i   i   r2   r3   r&   r)      )r)   )r&   c                      > [        T T-  5      $ Nr   r:   s   V/var/www/auris/envauris/lib/python3.13/site-packages/sympy/geometry/tests/test_line.py<lambda>+test_object_from_equation.<locals>.<lambda>/       tAE{    c                      > [        T T-  SSS9$ Nr2   r3   r:   r?   r2   r3   s   r@   rA   rB   0       tAESC8rD   c                      > [        TT -  5      $ r>   r?   r:   s   r@   rA   rB   1   rC   rD   c                      > [        TT -  SSS9$ rF   r?   rG   s   r@   rA   rB   2   rH   rD   c                  ,   > [        T S-   S-  T-   5      $ )Nr6   r<   r?   r:   s   r@   rA   rB   3   s    tQUQJN3rD   )	sympy.abcr&   r)   r2   r3   r   r   r   r   r   r$   
ValueError)r2   r3   r&   r)   s   @@@@r@   test_object_from_equationrN      sl   $$!a"3C!IIII!a!ea F8B?#WQQ%@%B B B B!a"s+v3C0* * * *!a=F71a='!R.AAAAA;&A2????1Q37C C1-3C2* * * * A;&A1>>>>!a11wq!}!EEEE7fWQ]GAqM::::!q>VGAqM71a=AAAAQ<6'!Q-A????
:*+
:89
:*+
:89
:34rD   c                 H    [        S5      nU* X-
  s=:  =(       a    U:  $ s  $ )z.Test if two floating point values are 'equal'.z1.0E-10)r   )r2   r3   t_floats      r@   feqrQ   6   s)    IG8ae%%g%%%%rD   c                  L   [        SSSS5      n U R                  nU R                  n[        [        R
                  " [	        [        SS5      [        SS5      5      [	        [        SS5      [        SS5      5      5      R                  5       [        R                  " 5       S-  5      (       d   e[	        X5      R                  [	        X5      5      [        S-  :X  d   e[        SSS5      n[        R
                  " [        U[        SSS5      5      [        U[        SSS5      5      5      [        [        S5      S-  5      :X  d   e[        R
                  " [        U[        SSS5      5      [        [        SSS5      U5      5      [        [        S5      * S-  5      :X  d   eg )Nr6   r<   r4      r   r7   )r   orthogonal_directionoriginrQ   r   angle_betweenevalfr   r   r   r   r   )r2   r3   or*   s       r@   test_angle_betweenrY   <   sp   aAqA	A	At!!$uQ{E!QK"@"&uQ{E!QK"@BBG%'288:XY>[ [ [ [:##DJ/269991aAq'!Q*: ; &q'!Q*: ;=@DT!Wq[@QR R R q'!Q*: ; &wq!Q'7 ;=@Dd1gXPQ\@RS S SrD   c                      [        SSS9n [        S[        S-  S9nU R                  U5      [        * S-  :X  d   eUR                  U 5      [        S-  :X  d   eU R                  U 5      S:X  d   eg )Nr   r   r   angler6   r<   r<   )r   r   closing_anglerG   s     r@   test_closing_angler`   K   sm    F!AF"Q$A??1"Q&&&??1A%%%??1"""rD   c                      [        [        SS5      [        SS5      5      n [        [        SS5      [        SS5      5      nU R                  U5      [        S[	        S5      -  S-  5      :X  d   eg )Nr6   r<   r4   r7   )r   r   smallest_angle_betweenr   r   rG   s     r@   test_smallest_anglerc   S   s\    U1a[%1+&AU1a[q!%A##A&$qay{*;;;;rD   c                  H   [        [        SS5      [        SS5      5      n U R                  5       S:X  d   e[        [        SS5      [        SS5      5      n U R                  5       S:X  d   e[	        [        SS5      [        SS5      5      n U R                  5       S:X  d   eg )	Nr6   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" />r4   r7   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   )r2   s    r@   test_svgrf   Y   s    U1a[q!%A668  I  I  I  IaE!QK(A668  t  t  t  tE!QKq!%A668  C  C  C  CrD   c                     [        [        SSS5      [        SSS5      5      n [        [        [        [        5      [        [
        [
        5      5      nUR                  5       U;   d   e[        S[        S-  S9R                  5       [        [        S-   [        S-   5      :X  d   e[        SS5      R                  5       [        S[        -   SS[        -  -   5      :X  d   eU R                  U R                  5       5      U R                  5       :X  d   e[        S/ S	QS
9R                  5       [        [        S-   S[        -  S-   S[        -  S-   5      :X  d   e[        [        SSS5      [        SSS5      5      R                  [        [        R                   [        R                   [        R                   5      :X  d   e[        [        [        [        [        5      [        [
        [
        [
        5      5      R"                  [%        S5      [%        [        [
        -
  S-  5      -  :X  d   e[        SS5      R                  5       [        [        S-   S[        -  S-   S[        -  S-   5      :X  d   e['        [(        S 5        g )Nr   r6   r6   r6   rS   r\   r<   r4   r<   r6   r6   r6   r6   r<   r4   direction_ratior4   r<   r4   rS   c                  L    [        [        S4S5      R                  [        5      $ )Nr6   ri   )r   r&   arbitrary_point rD   r@   rA   &test_arbitrary_point.<locals>.<lambda>q   s    aVV 4 D DQ GrD   )r   r   r   r   r,   r-   rp   r   r   r.   r   perpendicular_segmentr   r   midpointr   Halflengthr   r$   rM   l1l2s     r@   test_arbitrary_pointrz   b   s   	1a '!Q"2	3B	eBmU2r]	+B2%%%vR!V$446QA  66"224a!eQQY8OOOO##B$6$6$89R=O=O=QQQQI6FFH1q5!a%!)QUQY/0 0 0WQ1%wq!Q'78AA166166166*+ + +WRR('"b"*=>EEaSWY[^`Y`efXfSgIggggY	*::<1q5!a%!)QUQY/0 0 0
:GIrD   c                  z   [        [        SS5      [        SS5      5      n [        [        [        [        5      [        [        S[        -   5      5      n[         R                  " U 5      SL d   e[         R                  " X5      (       d   e[         R                  " X X5      (       d   e[         R                  " X[        [        S[        5      [        [	        SS5      [        5      5      5      (       d   e[         R                  " U [        [        SS5      [        [        * [        5      5      U5      SL d   eg )Nr   r6   Fr7   r;   )r   r   r,   are_concurrentr   rw   s     r@   test_are_concurrent_2dr}   t   s    	eAqk5A;	'B	eBmU2q2v.	/Br"e+++r&&&&rr....rtE!RL%QQS:T'UVVVVr4aUB3^#DbIURRRrD   c                     [        SSS5      n [        U [        SSS5      5      n[        [        SSS5      [        SSS5      5      n[        [        SSS5      [        SSS5      5      n[        R                  " U5      SL d   e[        R                  " U[        [        [        [        [        5      [        [
        [
        [
        5      5      5      SL d   e[        R                  " U[        U [        [        [        [        5      5      [        [        [        [        [        5      [        [        S[        -   S5      5      5      SL d   e[        R                  " X#5      SL d   eg Nr   r6   FT)r   r   r   r|   r,   r-   )p1rx   
parallel_1
parallel_2s       r@   test_are_concurrent_3dr   ~   s    	Aq	B	b'!Q"	#B1a('!Q*:;J1a('!Q*:;J  $---  T'"b"*=wr2r?R%STX]]]]  VBB0C%D!%gb"b&972q2vq;Q!RTW[\ \ \  8EAAArD   c            	         SSK Jn   SSS/[        SS5      4nU " US5      n[        [	        SS5      [	        SS5      5      nS/ S	Q[        SSS
5      4nU " US5      n[        [        SSS5      [        SSS5      5      nS/ SQ[        SSSS5      4nU " US5      n[        [        SSSS5      [        SSSS5      5      n	/ SQn
U H  n[        U6   M     U
 H  nU H  n[        X<5      " U5        M     M     U H  n[        U6   M     U
 H  nU H  n[        Xl5      " U5        M     M     U H  n[        U6   M     U
 H  nU H  n[        X5      " U5        M     M     g)zFunctions accepting `Point` objects in `geometry`
should also accept tuples, lists, and generators and
automatically convert them to points.r   )subsetsr^   r6   r4   r7   r<   rk   )r6   r<   rS      )r6   r<   r4   rS   )r6   r<   r4   r7      rS   )containsdistanceequalsparallel_lineperpendicular_liners   
projectionr   N)	sympy.utilities.iterablesr   r   r   r   r   r   getattrr   )r   	singles2d	doubles2dl2d	singles3d	doubles3dl3d	singles4d	doubles4dl4dtest_singlepfuncs                r@   test_argumentsr      se    2!Qq!-I	1%I
wq!}gam
,CIuQ1~6I	1%I
wq!QAq!1
2C|U1aA->?I	1%I
uQ1a %1a"3
4C1K
 ACq!   
 ACq!   a ACq!  rD   c            
         [        SS5      n [        SS5      n[        SS5      n[        X5      R                  5       n[        X5      R                  5       n[        X5      n[        [        [        [        5      [        [        S[        -   5      5      n[        U [        SS5      5      n[        U [        SS5      5      n[        [        SS5      U 5      n	[        X5      n
U
R                  5       n[        SSS9[        SS5      :X  d   e[        S[        S9[        SS5      :X  d   e[        S[        S9R                  S:X  d   e[        S[        * S9[        SS5      :X  d   e[        X5      R                  S	S5      [        U [        S	S5      5      :X  d   e[        X5      [        X5      :X  d   e[        X5      [        X5      :w  d   eU[        [        [        [        5      [        [        [        5      5      :w  d   eXV:w  d   e[        X5      [        X 5      :w  d   e[        X5      U :w  d   eX;   d   eX;  d   eU
[        X5      ;   d   e[        [        SS5      [        SS5      5      [        [        SS5      [        SS	5      5      ;   d   e[        [        SS5      [        SS	5      5      [        [        SS5      [        SS5      5      ;   d   e[        [        SS5      [        SS	5      5      R                  [        R                  :X  d   e[        [        SS5      [        SS	5      5      R                  [        R                  :X  d   e[        [        SS5      [        S
S	5      5      R                  [        R                  :X  d   e[        [        SS5      [        S	S5      5      R                  [        R                  :X  d   e[        [        SS5      [        S	S	5      5      R                  [        R                  :X  d   e[        [        SS5      [        S	S5      5      R                  [        R                  :X  d   eX;   SL d   e[        X5      U
;   d   e[        [        [        [        5      [        [        S[        -   5      5      [        U [        S
S5      5      :w  d   e[        X5      R                   [        [        R"                  [        R"                  5      :X  d   e[        U [        [        * [        5      5      R$                  ['        S	[        S	-  -  5      :X  d   eUR(                  S:X  d   eUR(                  [        L d   eUR(                  S:X  d   e[        U [        SS5      5      R(                  [        L d   e[        UR*                  UR                  5       5      R(                  UR(                  :X  d   e[        U	R*                  U	R                  5       5      R(                  U	R(                  :X  d   e[        [        SS
5      [        U [        SS5      5      R                  5       5      R(                  [        U [        SS5      5      R(                  :X  d   eUR,                  S:X  d   e[        [.        * [.        4[.        * S-   [.        S-
  45      R,                  S:X  d   e[        U [        SS5      5      R,                  S:X  d   e[        S[.        S9nUR1                  [.        S[2        -  S-  5      [        SS5      :X  d   eUR1                  [.        S[2        -  S-  5      [        SS5      :X  d   eUR1                  [.        [2        * S-  5      [        SS5      :X  d   eUR1                  [.        [2        S	-  5      [        SS5      :X  d   eUR1                  [.        [2        * S	-  5      [        SS5      :X  d   e[5        SS5       H  nUR                  5       U;   a  M   e   UR.                  U R.                  :  a  UR6                  U R6                  :  d   eUR.                  UR.                  ::  a  UR6                  UR6                  ::  d   eU R.                  UR.                  s=::  a  UR.                  ::  a2  O   eU R6                  UR6                  s=::  a  UR6                  ::  d   e   e[9        U
5      [9        [        X 5      5      :w  d   eU
R;                  5       [<        SS/:X  d   e[        X5      R;                  5       [<        SS/:X  d   e[        S[2        S-  S9R;                  5       [<        SS/:X  d   eg )Nr   r6     rh   sloper<   r<   r^   )r6   r6   r6   r<   r<   r8   Fr7   r   r6   r   r6   r6   r   r6   r   r   r[   r\   r4   rS   r8   r6   )r8   r8   )r6   r8   r   r6   r   r8   
   )r   r   random_pointr   r,   r   r   boundsscaler-   
xdirectionr   ZeroInfinityNegativeInfinity
ydirectionrt   ru   rv   r   r   sourcecoefficientsr&   subsr   ranger)   hashplot_intervalr.   )r   p2p10p_r3p_r4rx   l3l4r1r2s1p_s1rinds                 r@   test_basic_properties_2dr      sl   	q!B	q!B
d
Cr;##%Dr;##%D	bB	eBmU2q2v.	/B	b%1+	B	Rq!	B	U1a["	B		B??Da D$8888b!T&&%9999b!((L888rc"d66&::::<a#tBa'<<<<<4<'''<4<'''eBmU2r]33338O8=DM)))=B8O8<<buQ{E!QK(CaU1a[,IIIIuQ{E!QK(CaU1a[,IIIIuQ{E!QK(33qvv===uQ{E!QK(33qzzAAAuQ{E"aL)448J8JJJJuQ{E!QK(33qvv===uQ{E!QK(33qzzAAAuQ{E!RL)448J8JJJJH2?b   uR}eBB/0CE"aL4IIII2?##uQVVQVV'<<<<2ubS"~&--a27m1DDDD88q==88r>>88q==E!QK &&",,,		2??,-33rxx???		2??,-33rxx???5B<U1a[!9!F!F!HIOOSZ[]_defhi_jSkSqSqqqq??i'''!Q1"q&!a%)66)CCCE!QK --:::F!A66!QVaZ C$888866!QVaZ C$999966!bS1WVW!555566!R!VFF 333366!bS1WVW!5555Q{ B&&&  66RTT>dffn,,66RTT>dffn,,44466"SUU">>rtttvv'>'>>>'>>>8tGC,----!Q***=&&(QAJ666vR!V$224Ar
BBBrD   c            
      2   [        SSS5      n [        SSS5      n[        [        [        [        5      n[        [        S[        -   S5      n[        X5      n[        X#5      n[        U [        SSS5      5      n[        X5      n[	        X5      n[        S/ SQS9[        [        SSS5      [        SS	S5      5      :X  d   e[        S/ S
QS9[        [        SSS5      [        SSS5      5      :X  d   e[        S/ SQS9[        [        SSS5      [        SSS	5      5      :X  d   e[        [        SSS5      [        SSS5      5      R
                  / SQ:X  d   e[        [        U [        SSS5      5      5      [        U [        SSS5      5      :X  d   e[        [        [        SSS5      [        SSS5      5      5      [        U [        SSS5      5      :X  d   e[        X5      [        X5      :w  d   eXE:w  d   eU[        U[        [        [        [        5      5      :w  d   eXv:w  d   e[        [        SSS5      [        SSS5      5      [        [        SSS5      [        SSS5      5      ;   d   e[        [        SSS5      [        SSS5      5      [        [        SSS5      [        SSS5      5      ;   d   e[        [        SSS5      [        SSS5      5      R                  [        R                  :X  d   e[        [        SSS5      [        SSS5      5      R                  [        R                  :X  d   e[        [        SSS5      [        SSS5      5      R                  [        R                  :X  d   e[        [        SSS5      [        SSS5      5      R                  [        R                  :X  d   e[        [        SSS5      [        SSS5      5      R                  [        R                  :X  d   e[        [        SSS5      [        SSS5      5      R                  [        R                  :X  d   e[        [        SSS5      [        SSS5      5      R                  [        R                  :X  d   e[        [        SSS5      [        SSS5      5      R                  [        R                  :X  d   e[        [        SSS5      [        SSS5      5      R                  [        R                  :X  d   eX;   d   eX;  d   eUR                  / SQ:X  d   eUR                  [        [        R                   [        R                   [        R                   5      :X  d   e[        U [        SSS5      5      R                  [        R                  L d   eg )Nr   r6   r8   r7   rj   rn   rl   r4   rS   )r6   r7   r   r<   r      rk   r   r   )r   r,   r   r   r   direction_cosiner-   r   r   r   r   
zdirectionr   r   rm   rt   ru   )	r   r   p3p5rx   r   r   r3r   s	            r@   test_basic_properties_3dr      s   	Aq	B	Aq	B	R	B	QVQ	B	B	B	r72q!$	%B	rB	2	B)Y76'!QPQBRT[\]_`bcTd;eeee)Y76'!QPQBRT[\]_`bcTd;eeee)Y76'!QPQBRT[\]_`bcTd;eeee'!Q"GAq!$45FF)SSS&WQ1-./6"gaA>N3OOOO1a('!Q*:;<b'RSUVXYJZ@[[[[">VB^+++8O8GBB/00008O8Aq!71a#34gaA>NPWXY[\^_P`8aaaaAq!71a#34gaA>NPWXY[\^_P`8aaaaAq!71a#34??1::MMMAq!71a#34??1::MMMAq!71a#34??1::MMMAq!72q!#45@@ADVDVVVVAq!71b!#45@@ADVDVVVVAq!71a#45@@ADVDVVVVAq!71a#34??166IIIAq!71a#34??166IIIAq!71a#34??166III8O8<<***;;'!&&!&&!&&9999WQ2&'22a6H6HHHHrD   c            
      $	   [        SS5      n [        U [        SS5      5      n[        U [        SSS5      5      n[        U [        SSS5      5      n[        U [        SSS5      5      n[	        [        SS5      [        SS5      5      n[        S[
        [        -   S-  5      [        S[
        4S[        45      ;   d   e[        [
        [        -   S-  S5      [        [
        S4[        S45      ;   d   e[        SSS5      [        SS5      ;   d   e[        SSS5      [        SS5      ;   d   e[        [        SSS5      [        SSS5      5      R                  / 5      S	L d   e[        [        SSS5      [        SSS5      5      R                  [        [        SSS5      [        SSS5      5      5      S
L d   eUR                  [        SS5      5      S	L d   eUR                  S5      S	L d   eUR                  S5      S
L d   eUR                  U 5      S	L d   eUR                  S5      S	L d   eUR                  S5      S
L d   eUR                  [        SS5      5      S	L d   eUR                  [        SS5      5      S
L d   eUR                  [        SS5      5      S	L d   eUR                  [        SS5      5      S
L d   eUR                  [        U [        SSS5      5      5      S	L d   eUR                  [        [        SSS5      [        SSS5      5      5      S
L d   eUR                  [        SSS5      5      S	L d   eUR                  [        SSS5      5      S	L d   e[        [        SSS5      [        SSS5      5      R                  / 5      S
L d   e[        S[        [        [        45      R                  S[        -  S[        -  S[        -  45      (       d   e[        [        S
S9   [        U [        SSS5      5      R                  [        SS5      5      S
L d   e S S S 5        [        [        S
S9   UR                  [        SS5      5      S
L d   e S S S 5        g ! , (       d  f       NG= f! , (       d  f       g = f)Nr   rS   r8   r6   r4   r<   r   r   TFr   r[   rh   )r6   r4   r   r^   )r<   r7   )r4   r4   )r4   r7   r   r   r   test_stacklevel      ?)r   r   r   r   r   r2   r3   r   r   r   r   r&   r)   r*   r%   UserWarning)r   r   r   r   r   ls         r@   test_containsr   )  s   	q!BBaA	r71a$	%B	r71a#	$B	r71a#	$BU1a[%1+&AQUaK GQFQF$;;;;!a%1a GQFQF$;;;;1ayI>>>>1ayI>>>>WQ1%wq!Q'78AA"EMMMWQ1%wq!Q'78AA'!Q"GAq!$457:?@ @ @ ::eAqk"d***::f%%%::f&&&::b>T!!!::f%%%::f&&&::gff-.$666::gff-.%777::c&&)*d222::c&&)*e333;;yWQ3%789TAAA;;yAq!171a3CDENNN;;wq!Q'(D000;;wq!Q'(D000Aq!71a#34==bAUJJJ)aAY'00!a%QA1FGGGG	{E	2b'!Q*+44U3_ENNN 
3 
{E	2{{5c?+u444 
3	2 
3	2 
3	2s   86Q0!R0
Q>
Rc                      [        S5      u  pp#[        [        X5      [        X5      5      n[        U [        SS5      -  US-  -   U[        SS5      -  US-  -   5      nUR	                  U5      (       d   eg )Nz
u, v, w, zr<   r4   )r
   r   r   r   r   )uvwr*   r   r   s         r@   test_contains_nonreal_symbolsr   S  sj    &JA!aU1[)AaA1$aA&61&<=A::a===rD   c                  $   [        SS5      n [        SS5      n[        R                  n[        [        SS5      [        SS5      5      n[        [        X"5      [        SS5      5      n[	        X5      nUR                  [        SS5      5      S:X  d   eUR                  S5      S:X  d   eUR                  [        SS5      5      SU-  S-  :X  d   eUR                  [        [        S5      S-  [        S5      S-  5      5      SU-  :X  d   e[        X5      R                  [        SS5      5      [        S5      :X  d   e[        X5      R                  [        SS5      5      [        S5      :X  d   e[        X5      R                  [        SS5      5      S:X  d   e[        X5      R                  S5      [        S5      :X  d   e[        SS5      R                  U 5      S:X  d   e[        SS5      R                  U5      S:X  d   e[        SS	5      R                  U 5      S:X  d   e[        SS	5      R                  U5      S:X  d   eUR                  [        SS5      5      [        S5      :X  d   eUR                  [        SS5      5      S:X  d   eUR                  [        SS5      5      [        S5      :X  d   e[	        S
S5      R                  [        SS5      5      S[        S5      -  S-  :X  d   eUR                  S
5      S:X  d   eg )Nr   r6   r[   r<   r4   r8   r   r   r6   r   rh   r         ?rS   )	r   r   ru   r   r   r   r   r   r   )r   r   halfr   s2r   s         r@   test_distance_2dr   Z  s   	q!B	q!B66D	q!eAqk	*B	t"E!QK	0BBA;;uQ{#q(((;;v!###;;uQ{#qDy1}444;;uXa[1_hqkAo>?19LLL<  r1.$q'999<  q".$q'999<  q!-222<  )T!W444((,111((,111((,111((,111::eBm$Q///::eAqk"a'''::eBl#tAw...vv''c16!d1g+/III::f"""rD   c                      [        [        SS9   [        SS5      [        SS5      :X  d   e S S S 5        g ! , (       d  f       g = f)NFr   rh   )r<   r6   r<   r   )r%   r   r   rq   rD   r@   test_dimension_normalizationr   w  s4    	{E	269%Y	)BBBB 
3	2	2s	   6
Ac                     [        SSS5      [        SSS5      p[        [        S5      S-  [        S5      S-  [        S5      S-  5      n[        [        SSS5      [        SSS5      5      n[        [        [        R                  [        R                  [        R                  5      [        SSS5      5      n[        X5      nUR                  U 5      S:X  d   eUR                  U 5      [        S5      S-  :X  d   eUR                  U5      S[        S5      -  S-  :X  d   eUR                  S5      S:X  d   eUR                  S5      [        S5      S-  :X  d   eUR                  U 5      S:X  d   eUR                  U 5      [        S5      S-  :X  d   eUR                  U5      S[        S5      -  S-  :X  d   eUR                  S5      S:X  d   eUR                  S5      [        S5      S-  :X  d   e[        X5      R                  [        SSS5      5      S[        S5      -  S-  :X  d   e[        X5      R                  [        SSS5      5      S[        S5      -  S-  :X  d   e[        X5      R                  [        SSS5      5      S:X  d   e[        X5      R                  S5      S:X  d   e[        X5      R                  S	5      S[        S5      -  S-  :X  d   e[        SS
5      R                  U 5      S:X  d   e[        SS
5      R                  U5      [        S5      :X  d   e[        SS5      R                  U 5      S:X  d   e[        SS5      R                  U5      [        S5      :X  d   e[        SS5      R                  [        SS5      5      S:X  d   e[        SS5      R                  [        SS5      5      S:X  d   e[        SS5      R                  [        SS5      5      S:X  d   e[        SS5      R                  [        S
S5      5      S:X  d   e[        SS5      R                  [        SS5      5      S:X  d   e[        SS5      R                  [        S
S
5      5      S:X  d   e[        SS5      R                  [        SS5      5      S:X  d   eUR                  [        SSS5      5      [        S5      :X  d   eUR                  [        SSS5      5      S:X  d   eUR                  S5      [        S5      :X  d   eUR                  S5      S:X  d   e[        SS5      R                  S5      S[        S5      -  S-  :X  d   e[        SS5      R                  [        SSS5      5      [        S5      S-  :X  d   e[        SS5      R                  [        SSS5      5      [        S5      S-  :X  d   eg )Nr   r6   r4   r<   r   r   r8   )r<   r<   r<   )r6   r8   r6   r   r   r   r6   r<   )r   r   r   )r   r6   r<   r   r6   r6   )r<   r   r   r   r   r6   )r6   r6   r4   )r8   r8   r8   rj   )r6   r6   r<   )r8   r8   r<   rS   r   r;   	   N   )
r   r   r   r   ru   r   r   r   r   r    )r   r   r   r   r   r   s         r@   test_distance_3dr   |  s!   Q1wq!Q/	!q(1+/8A;?	CB	71a#WQ1%5	6B	71661661662GAq!4D	EBbA;;r?a;;r?d1gk)));;r?a$q'kAo---;;y!Q&&&;;y!T!Wq[000;;r?a;;r?d1gk)));;r?a$q'kAo---;;y!Q&&&;;y!T!Wq[000">""72q!#45T!WqHHH">""71b!#45T!WqHHH">""71a#34999">""9-222">"":.!d1g+/AAA)Y'004999)Y'004Q???)Y'004999)Y'004Q???)Y'00	91MNRSSSS)Y'00	91MNRSSSS)Y'00
J1OPTUUUU)Y'00	91MNRSSSS)Y'00y)1LMQRRRR)Y'00y)1LMQRRRR)Y'00y)1LMQRRRR::gb"b)*d1g555::gaA&'1,,,::l#tAw...::i A%%%I&//<DGaOOOI&//R0DERSWXXXXI&//Q0BCtBxRS|SSSrD   c            
      	   [        SS5      n [        SS5      n[        X5      n[        S[        S9n[        [        [        [        5      [        [        S[        -   5      5      nUR	                  U R
                  5      R                  [        [        SS5      [        SS5      5      5      (       d   eUR	                  U 5      R                  [        [        SS5      [        SS5      5      5      (       d   e[        [        [        [        5      [        [        [        5      5      R                  [        [        * [        5      5      R                  [        [        [        * [        5      [        [        * S[        -  [        -
  5      5      5      (       d   eUR                  U R
                  5      R                  [        [        SS5      [        SS5      5      5      (       d   eUR                  U 5      R                  [        [        SS5      [        SS5      5      5      (       d   eUR                  [        SS5      5      S[        [        S-   5      -  [        [        S-  S-   5      -  -
  R                  S5      (       d   e[        U [        SSS5      5      R                  [        SS5      5      S	L d   e[        [        SSS5      [        SSS5      5      R                  [        [        S
SS5      [        SSS5      5      5      SL d   e[        [        SSS5      [        SSS5      5      R                  [        U [        SSS5      5      5      S	L d   e[        U [        SSS5      5      R                  [        SS5      5      S	L d   e[        U [        SSS5      5      R                  [        U [        SSS5      5      5      SL d   e[        S[        [        45      R	                  [        SSS5      5      R                  [        [        SSS5      [        [         R"                  [         R"                  S5      5      5      (       d   e[        S[        [        45      R%                  [        SSS5      5      R                  ['        S[         R"                  [         R"                  45      5      (       d   e[        U [        SSS5      5      R                  [        SS5      5      S	L d   eg )Nr   r6   )r   r7   r   r8   r<   r4   r   Fr   Tr[   r   )r   r   r0   r,   r   argsr   r-   r   r   absr   r   r   r   r.   r   ru   rs   r   )r   r   rx   ry   r   s        r@   test_equalsr     s   	q!B	q!B	bB	fA	B	eBmU2q2v.	/B  )00eAqk5B<1PQQQQ  $++Dq!eArl,KLLLLb"uR}-;;E2#rNKtE2#rNE2#q2v{$;<=> > >BGG$++Dq!eArl,KLLLLB&&tE!QKq"'FGGGGKKa$q3q1u:~Q!VaZ8H'HHPPQRSSSS"gaA&'..uS#?5HHH'!Q"GAq!$45<<VGBPQSTDUW^_acdfgWh=ijnrrrr'!Q"GAq!$45<<VBPQSTVWHX=YZ^ccccWQ2&'..uS#?5HHHWQ2&'..uRAr9J/KLPTTTT&1a&!44U1a^DKKwq!Q!;<> > > >&1a&!77aAGNNyY_bcbhbhjkjpjpaqOrssss"gaA&'..uS#?5HHHrD   c                     [        SS5      n [        SS5      n[        X5      n[        [        [        [        5      [        [        S[        -   5      5      n[        UR	                  5       5      [
        [        -
  [        [
        -
  4;   d   e[        UR	                  5       5      [
        [        -
  [        [
        -
  4;   d   e[        UR	                  5       5      [
        [        -
  [        [
        -
  4;   d   e[        UR	                  5       5      [
        [        -
  [        [
        -
  4;   d   e[        U [        SS5      5      R	                  [
        [        S9[        :X  d   e[        U [        SS5      5      R	                  5       [
        :X  d   e[        [        SS5      [        SS5      5      R	                  5       [
        S-
  :X  d   e[        U[        SS5      5      R	                  5       [        S-
  :X  d   e[        [        [        [        [        5      [        [        [        [        5      5      R	                  5       [
        * [        -   [
        * [        -   4:X  d   e[        [        SSS5      [        SSS5      5      R	                  5       [
        * [        -   S-
  [
        * [        -   S-
  4:X  d   e[        [        SSS5      [        SSS5      5      R	                  5       [
        S-
  [        * [        -   S-
  4:X  d   e[        [        SSS5      [        SSS5      5      R	                  5       [        S-
  [
        * [        -   S-
  4:X  d   e[        [        SSS5      [        SSS5      5      R	                  5       [
        * [        -   S-
  [        S-
  4:X  d   e[        [        SSS5      [        SSS5      5      R	                  5       [
        S-
  [        S-
  4:X  d   e[        [        SSS5      [        SSS5      5      R	                  5       [
        S-
  [        S-
  4:X  d   e[        [        SSS5      [        SSS5      5      R	                  5       [        S-
  [        S-
  4:X  d   eg )Nr   r6   r:   r<   r4   rS   )
r   r   r,   r   equationr&   r)   r   r-   r*   )r   r   rx   r   s       r@   test_equationr     s   	q!B	q!B	bB	eBmU2q2v.	/BBKKM"q1ua!en444BKKM"q2vrAv&6666BKKM"q1ua!en444BKKM"q2vrAv&6666E!QK ))A)3q888E!QK ))+q000aU1a[)224A===E!QK ))+q1u444%B#U2r2%6 

(*!a!a() ) )%1a.%1a. 

(*!a!aR!VaZ01 1 1%1a.%1a. 

(*QQ
+, , ,%1a.%1a. 

(*QQ
+, , ,%1a.%1a. 

(*!a!QU+, , ,%1a.%1a. 

(*QA' ' '%1a.%1a. 

(*QA' ' '%1a.%1a. 

(*QA' ' 'rD   c                     [        SS5      n [        SS5      n[        [        [        5      n[        [        [        5      n[        X5      n[        [        SS5      [        SS5      5      n[	        [        SS5      [        SS5      5      n[	        [        SS5      [        SS5      5      n[	        X5      n[	        [        SS5      [        SS5      5      n	[	        [        SS5      [        SS5      5      n
[        X5      n[        [        SS5      [        SS5      5      n[        [        SS5      [        SS5      5      n[        X@5      U /:X  d   e[        U[        [        S[        -   5      5      / :X  d   e[        U[        X#5      5      U/[        X#5      /4;   d   e[        XDR                  [        [        S[        -   5      5      5      / :X  d   e[        XU5      U/:X  d   e[        XW5      U/:X  d   e[        X]5      U/:X  d   e[        X5      U/:X  d   e[        [        [        SS	5      [        S	S	5      5      [        [        S
S
5      [        S
S5      5      5      / :X  d   e[        Xu5      U/:X  d   e[        U[	        [        SS5      [        SS5      5      5      [        [        SS5      [        SS5      5      /:X  d   e[        U[	        [        SS5      [        SS5      5      5      [        SS5      /:X  d   e[        U[        [        SS5      [        SS5      5      5      [        [        SS5      [        SS5      5      /:X  d   eUR                  U5      U/:X  d   eUR                  [        [        SS5      [        SS5      5      5      / :X  d   eUR                  [        [        SS5      [        SS5      5      5      [        U [        SS5      5      /:X  d   eUR                  [	        X5      5      U/:X  d   e[	        X5      R                  U	5      / :X  d   eUR                  U
5      U
R                  U5      s=:X  a  U
/:X  d   e   e[        SS5      R                  [        SS5      5      [        SS5      /:X  d   e[        SS5      R                  [        SS5      5      [        SS5      /:X  d   e[	        [        SS5      [        SS5      5      R                  [	        [        SS5      [        SS5      5      5      [        [        SS5      [        SS5      5      /:X  d   e[        SS5      R                  [        SS5      5      [        SS5      /:X  d   e[        SS5      R                  [        SS5      5      [        SS5      /:X  d   e[        SS5      R                  [        SS5      5      [        S5      /:X  d   e[        SS5      R                  [        SS5      5      [        SS5      /:X  d   e[        SS5      R                  [        SS5      5      [        SS5      /:X  d   e[        SS5      R                  [        SS5      5      [        SS5      /:X  d   eUR                  [        [        SS5      [        SS5      5      5      [        SS5      /:X  d   eUR                  [        [        SS5      [        SS5      5      5      [        [        SS5      U5      /:X  d   eUR                  [        [        SS5      [        SS5      5      5      / :X  d   eUR                  [        [        SS5      U 5      5      U /:X  d   eUR                  [        [        SS5      [        SS5      5      5      [        U [        SS5      5      /:X  d   eUR                  [        [        SS5      [        SS5      5      5      / :X  d   eUR                  U5      U/:X  d   eUR                  U5      U/:X  d   e[        SSS5      [        [        SS5      [        SS5      [        S[        S[        -  S-  5      -  [        S[        -  S-  5      -  S[!        S5      -  [        S[        -  S-  5      -  [        S[        -  S-  5      -  5      5      :X  d   e[        SS5      R                  [	        SS5      5      [        SS5      /:X  d   e[        SS5      R                  [        SS5      5      [        SS5      /:X  d   e[	        SS5      R                  [	        SS5      5      [        SS5      /:X  d   e[	        SS5      R                  [        SS5      5      [        SS5      /:X  d   e[	        SS5      R#                  [        SS5      5      S L d   e[        SS5      [        SS5      ;   d   eUR                  [	        SS!5      5      [        SS5      /:X  d   eg )"Nr   r6   r4   rS   r<         ?g      ?r   r   r   r7   r8   r[   )r4   r   r   )r<   r   )rS   r   )r7   r   r   r   r   x   r   4   r9      Z   -   rh   r^   )r   r   r   T)rS   rS   )r   r,   r-   r   r   r   r   r   r   r   r   asar   r   r   r   r   r   )r   r   r   p4rx   r   r   r   r4r6r7r   r   s3s                 r@   test_intersection_2dr     s	   	q!B	q!B	r2B	r2B	bB	eAqk5A;	'B	U1a[%1+	&B	U1a[%1+	&B	RB	U1a[%1+	&B	U3_eAqk	*B	B	tT"E#sO	4B	q!eAqk	*BB4'''E"a"f-."444DL)rdT"\N-CCCC,,U2q2v->?@BFFFB4'''B4'''B4'''B4'''c2b">bRTW\]_abWc@deikkkkB4'''CaU1a[9:wuQPQ{TYZ[]^T_?`>aaaaCaU2r];<q!MMMGE!QKq!=>75QRTU;X]^_abXcCdBeeee??22$&&&??75A;a<=CCC??75R=%S/BCPRTYZ]_bTcHdGeeee??3r;'B4///r;##B'2---??2"//""5="===== --eFF.CDvW]I^H____ --eFF.CDvW]I^H____uQ{E!QK(55c%1+uQPR|6TUE!QKq!-./ / / VV$11&&!#'0'@&AB B BVV$11&&!#'0'@&AB B BVV$11&&!#'.v&78 8 8VV$11&&!#'0'@&AB B BVV$11'6"$(1&&(A'BC C CVV$11'6"$(/17 7 7??75A;a<=%1+NNN??75c?E#sODE'RWX[]`RaceJfIgggg??75A;a<=CCC??75R="562$>>>??75R=%S/BCPRTYZ]_bTcHdGeeee??4aU1a[9:b@@@??22$&&&??22$&&&sAr?Q{Q{R#b2gl++c!b&2+.>>a[3rBw|#44s1r6B;7GGIJJ J J ,,S-@AeAqk]RRR,,WVV-DE%PQST+VVVvv++C,?@U1a[MQQQvv++GFF,CDqRSUUUvx ))'&&*ABdJJJ66"d68&<<<<??3vv./E!QK=@@@rD   c            	      *   [        [        [        SS5      -  5      n [        S5      nU S-  nSU -  X-   -  SU -  SU-  U-  -
  US-
  -  /u  p4[	        [        SS5      [        S[        S5      * 5      5      R                  [        X45      5      S	L d   eg )
N   r   r4   r<   r      r   r6   T)r   r   r   r   r   r   r   )x0r,   x2r&   r)   s        r@   test_line_intersectionr  R  s    	RR  	!B	aB	QBbD"'NRUQrT"W_rAv67DAaU1tAwh/099%+F$NNNrD   c                     [        SSS5      n [        SSS5      n[        X5      n[        [        SSS5      [        SSS5      5      n[        [        SSS5      [        SSS5      5      n[        [        SSS5      [        SSS5      5      n[        [        SSS5      [        SSS5      5      n[	        X 5      U /:X  d   e[	        U[        [
        S[
        -   S5      5      / :X  d   e[	        X"R                  U 5      5      [        [        SSS5      [        SSS5      5      /:X  d   e[	        X55      U/:X  d   e[	        X65      U/:X  d   e[	        XS5      U/:X  d   e[	        U[        [        SSS5      [        SSS5      5      5      [        SSS5      /:X  d   e[	        U[        [        SSS5      [        SSS5      5      5      [        [        SSS5      [        SSS5      5      /:X  d   e[	        [        [        SSS5      [        SSS5      5      [        [        SSS5      [        SSS5      5      5      [        SSS5      /:X  d   e[	        U[        [        SSS5      [        SSS5      5      5      [        [        SSS5      [        SSS5      5      /:X  d   e[	        Xe5      U/:X  d   e[        [        SSS5      [        SSS5      5      R	                  [        [        SSS5      [        SSS5      5      5      [        SSS5      /:X  d   e[        SS5      R	                  [        SS	5      5      [        SSS5      /:X  d   e[        S
[        [        45      R	                  [        S[        [        45      5      [        [        [        5      /:X  d   e[        [        SSS5      [        SSS5      5      R	                  [        [        SSS5      [        SSS5      5      5      / :X  d   eg )Nr   r6   r4   rS   r<   r8   r   )r   r<   r4   r   r[   r   )r   r   r   r   r   r,   r   r.   )r   r   rx   ry   r   r   r   s          r@   test_intersection_3dr  [  s   	Aq	B	Aq	B	B	1a '!Q"2	3B	wq!QAq!1	2B	wq!QAq!1	2B	71a#WQ1%5	6BB4'''GBB23r999,,R01fWQ1=MwWXZ[]^O_6`5aaaaB4'''B4'''B4'''E'!Q"2GBB4GHIgVWYZ\]N^M____IgaA&61a8HIJ'!Q"GAq!$45O7 7 7 7gaA.Aq0ABE'RSUVXYJZ\cdegikl\mDnoq!Q ! ! !E'!Q"2GAq!4DEFgaA&1a(89:; ; ;B4''''!Q"GAq!$45BB6'RSUVXYJZ\cdeghjk\lCmnAq!  )Y'44VIy5QRW^_`bcefWgVhhhh&1a&!..vfq!f/EFAqM?   Aq!71a#34AA%PQSTVWHXZabcegijZkBlmqssssrD   c                  p   [        SSS5      n [        SSS5      n[        [        [        [        5      n[        [        [        [        5      [        [        [        5      5      n[        [        [        [        5      [        [        S[        -   5      5      n[        R
                  " [        [        SS5      [        SS5      5      U5      (       d   e[        R
                  " U[        [        [        [        5      [        [        S[        -   5      5      5      SL d   e[        R
                  " X3R                  [        [        * [        5      5      5      (       d   e[        R
                  " XDR                  [        SS5      5      5      (       d   e[        X5      R                  [        X5      5      (       d   e[        [        SSS5      [        SSS5      5      R                  [        [        SSS5      [        SSS5      5      5      SL d   e[        X5      R                  U5      [        [        [        [        [        5      [        [        S-   [        S-   [        S-   5      5      :X  d   e[        X5      R                  UR                  5      [        [        [        [        [        5      [        [        S-   [        S-   [        S-   5      5      :X  d   e[        [        SSS5      [        SSS5      5      R                  [        [        SSS5      [        SSS5      5      5      SL d   eg )Nr   r6   FrS   )	r   r,   r   r   r-   is_parallelr   r   r   )r   r   r   ry   l2_1s        r@   test_is_parallelr    sw   	Aq	B	Aq	B	R	B	eBmU2r]	+Bb"uRR01DDq!eAqk:B????BU2r]E"a"f4E FG5PPPB 0 0sB @AAAAD"4"4U1a["ABBBB">%%fRn5555'!Q"GAq!$45AA&QRTUWXIY[bcdfgij[kBlmqvvvv">''+vgb"b6I6=b1fb1fbSTf6U0W W W W">''0'"b"%wrAvrAvrAv'FGH H H'!Q"GAq!$45AA&QRTUWXIY[bcdfgij[kBlmqvvvvrD   c                     [        SS5      n [        SS5      n[        X5      n[        [        [        [        5      [        [        [        5      5      n[        U [        [        * [        5      5      n[        R                  " X$5      (       d   e[        R                  " X#5      SL d   eUR                  5       nUR                  U5      U:X  d   e[        R                  " [        [        SSS5      [        SSS5      5      [        [        SSS5      [        SSS5      5      5      SL d   e[        R                  " [        [        SSS5      [        SSS5      5      [        [        SSS5      [        SSS5      5      5      SL d   e[        R                  " [        [        SSS5      [        SSS5      5      [        [        [        [        [        5      [        [        [        [        5      5      5      SL d   eg r   )	r   r   r,   r-   is_perpendicularr   rs   r   r   )r   r   rx   ry   l1_1r   s         r@   test_is_perpendicularr    s   	q!B	q!B	bB	eBmU2r]	+BE2#rN#D  ****  (E111
A##A&!+++""6'!Q*:GAq!<L#M#)'!Q*:GAq!<L#MORVW W W""6'!Q*:GAq!<L#M#)'!Q*:GAq!<L#MORWX X X""6'!Q*:GAq!<L#M#)'"b"*=wr2r?R#SUX]^ ^ ^rD   c            
      6   [        SS5      n U R                  SS5      n[        [        SSS5      [        SSS5      5      n[	        [        SS5      [        SS5      5      n[        [        SS5      U 5      nUR                  [        X5      5      (       d   eUR                  U5      SL d   eUR                  [        [        SSS5      [        SSS5      5      5      SL d   eUR                  [        [        SSS5      [        SSS5      5      5      SL d   eg )Nr   r<   r6   r   FT)r   r   r   r   r   r   
is_similarr   )r   r   r   r   r   s        r@   test_is_similarr    s    	tT	B	!QB	wq!QAq!1	2B	U1a[%1+	&B	q!b	!B==))))==%%%==1a 0'!Q2BCDLLL==1a 0'!Q2BCDMMMrD   c                     [        [        [        [        [        5      [        [        [        [        5      5      n [	        [        SS5      [        SS5      5      R                  [        L d   eU R                  [        S5      [        [        [        -
  S-  5      -  :X  d   e[        [        SSS5      [        SSS5      5      R                  [        L d   eg )Nr   r6   r4   r<   )
r   r   r,   r-   r   r   rv   r   r   r   )r   s    r@   test_lengthr    s    	72r2&B(;	<BaU1a[)00B66699Q$RA~"66666'!Q"GAq!$45<<BBBrD   c                  
   [        SS5      n [        SSS5      n[        [        * [        5      n[        U [        SS5      5      n[	        [        SSS5      [        SSS5      5      n[	        U[        SSS5      5      n[        [        SS5      [        SS5      5      n[        [        SS5      [        SS5      5      n[        [        SS5      [        SS5      5      n[        [        [        [        5      [        [        [        5      5      R                  [        [        [        5      5      [        [        [        5      :X  d   e[        [        [        [        5      [        [        S[        -   5      5      R                  [        SS5      5      [        [        S5      :X  d   e[        [        SS5      [        SS5      5      R                  U5      [        [        SS5      [        SS5      5      :X  d   e[        [        SS5      [        SS5      5      R                  U5      [        [        SS5      [        SS5      5      :X  d   eUR                  U5      [        :X  d   eUR                  U5      U :X  d   eUR                  [        U [        SS	5      5      5      [        [        SS5      [        SS5      5      :X  d   eUR                  [        U [        SS5      5      5      U :X  d   eUR                  [        [        SS5      [        SS5      5      5      [        SS5      :X  d   eUR                  [        [        SS5      [        SS
5      5      5      [        [        SS5      [        SS5      5      :X  d   eUR                  [        [        SS	5      [        S
S5      5      5      [        [        SS5      [        SS5      5      :X  d   eUR                  [        [        SS5      [        SS5      5      5      [        SS5      :X  d   eUR                  [        [        SS5      [        SS
5      5      5      [        [        SS5      [        SS5      5      :X  d   eUR                  [        [        SS	5      [        S
S5      5      5      [        [        SS5      [        SS5      5      :X  d   eUR                  [        U[        SS	S5      5      5      [        [        SSS5      [        [        SS5      [        SS5      [        SS5      5      5      :X  d   eUR                  [        U[        SSS5      5      5      [        [        SSS5      [        [        SS5      [        SS5      [        SS5      5      5      :X  d   eUR                  [        S	S	S5      5      [        S	S5      :X  d   eUR                  [	        [        SSS5      [        SSS5      5      5      R                  U5      (       d   eg )Nr   r6   r<   r   r   rS   r8   r4   r7   r   r   )r   r   r,   r   r   r   r   r   r-   r   r   r   r   r   )	r   r   r   rx   ry   r   r   r   r   s	            r@   test_projectionr    s   	q!B	Aq	B	sBB	b%1+	B	1a '!Q"2	3B	GAq!$	%B	U1a[%1+	&B	A1	.B	A3	0Bb"uR}-88r2G5QSUW=XXXb"uRR01<<U1a[IUSUWX\YYY5Q<q!-88<bRSV[\]_`Va@bbbb5A;b!-88<aQRUZ[]_`Ua@bbbb==(((=="""==Rr1./3uQ{E!QK3PPPP==Rr1./2555==U1a[%B-89U1a[HHH==U1a[%B-89WU1a[RWXY[\R]=^^^^==r1uR~>?75QRTU;X]^_abXcCdddd==U1a[%B-89U1a[HHH==U1a[%B-89WU1a[RWXY[\R]=^^^^==r1uR~>?75QRTU;X]^_abXcCdddd==r72q!#456%1a@PRYZbcdfgZhjrstvwjx  {C  DE  GH  {I  SJ  ;K  K  K  K==r72q!#456%1a@PRYZbcdfgZhjrstvwjx  {C  DE  GH  {I  SJ  ;K  K  K  K==Aq)*gam;;;==1a 0'!Q2BCDKKBOOOOrD   c                     [        SSS5      [        SSS5      [        SSS5      p!n [        X5      nUR                  U5      nUR                  U:X  d   eUR                  U;   d   e[        SS5      [        SS5      [        SS5      p!n [        X5      nUR                  U5      nUR                  U:X  d   eUR
                  R                  X#R                  U5      -
  R                  :X  d   eg )Nr   r<   r4   rS   r   )r   r   r   r   r   	directionunitr   )r   r   r   r   r   s        r@   test_perpendicular_liner    s    q!Qq!Qr1aBBRA	R A442::44199q!eAqk5Q<BBRA	R A442::;;\\"%5 5;;;;;rD   c            
         [        [        SS5      [        SS5      5      n [        [        [        R                  [        R                  5      [        [        SS5      [        SS5      5      5      n[        [        [        R                  [        R                  5      [        [        SS5      [        SS5      5      5      R                  nU R                  5       R                  U5      (       d   eU R                  U5      R                  [        U R                  U5      5      (       d   eU R                  US-   5      R                  U5      (       d   eg )Nr   r6   r4   r<   r8   r   )	r   r   r   r   ru   r   rt   perpendicular_bisectorr   )r   alineon_lines      r@   test_perpendicular_bisectorr     s    	q!eAqk	*Bqvvqvv&hq!nhr1o(NOEeAFFAFF+U8Aq>8BPQ?-ST]]G$$&--e4444$$W-44WR[['5RSSSS$$Wv%56==eDDDDrD   c                  |  ^^ [        SSS9u  mn [        TS4U S45      m[        [        S 5        [        [        S 5        [        [
        UU4S j5        [        [        S 5        [        [        S	 5        [        [        S
 5        [        [        S 5        [        [        S 5        [        [        S 5        g )Nr/   Tr'   r   c                      [        SS5      $ Nrh   r6   r?   rq   rD   r@   rA   test_raises.<locals>.<lambda>   s
    d61orD   c                  B    [        [        SS5      [        SS5      5      $ Nr   )r   r   rq   rD   r@   rA   r$    s    tE!QKq!=rD   c                  (   > [        ST -  S5      T;   $ )Nr<   r   )r   )dss   r@   rA   r$    s    a!eQ1 4rD   c                  ,    [        [        SS5      5      $ )Nr   )r   r   rq   rD   r@   rA   r$    s    uU3_5rD   c                  F    [        [        SSS5      [        SSS5      5      $ r&  r   r   rq   rD   r@   rA   r$    s    vgaA&61a8HIrD   c                      [        SS5      $ r#  )r   rq   rD   r@   rA   r$    s    fVQ/rD   c                  .    [        [        SSS5      5      $ r&  r,  rq   rD   r@   rA   r$    s    vgaA&67rD   c                      [        SS5      $ r#  )r   rq   rD   r@   rA   r$    s
    c&!nrD   c                      [        [        SS5      [        SS5      5      R                  [        [        SS5      S5      5      $ )Nr   r6   )r   r   r   r   rq   rD   r@   rA   r$    s3    $uQ{E!QK"@JveAqk1-.#/rD   )r
   r   r$   	TypeErrorrM   r!   r   )er(  r)  s    @@r@   test_raisesr3    s    5t$DAqAAA
9-.
:=>
;45
:56
:IJ
9/0
:78
9,-
= / 0rD   c                     [        S[        S-  S9[        SS5      :X  d   e[        S[        S-  S9[        SS5      :X  d   e[        S[        * S-  S9[        SS5      :X  d   e[        SS[        -  S-  S9[        SS5      :X  d   e[        SS	[        -  S-  S9[        SS5      :X  d   e[        SS
[        -  S-  S9[        SS5      :X  d   e[        S[        S9[        SS5      :X  d   e[        SS[        -  S9[        SS5      :X  d   e[        SS[        -  S9[        SS5      :X  d   e[        SSS9[        SS5      :X  d   e[        SS[        -  S9[        [        SS5      [        S[        S	5      * [        S[        S	5      -  S-   5      -  S-  [        S[        S	5      -  S-   5      S-  -
  S-   [        S	5      -   5      5      :X  d   e[        SS[        -  S9[        [        SS5      [        SS[	        S[        -  5      -   5      5      :X  d   e[        SS	S9[        SSS[	        S	5      -   45      :X  d   e[        S/ SQS9[        [        SSS5      [        S	S	S	5      5      :X  d   e[        S/ SQS9[        [        SSS5      [        SSS5      5      :X  d   e[        S/ SQS9[        [        SSS5      [        SSS5      5      :X  d   eg )Nrh   rS   r\   r   r<   r^   r   r;   r7   g      @r   g      @g      @)r<   r6   r   g333333@r6   r   gGz@rj   )rS   rS   rS   rl   rk   r4   )r   r   r   r   r   r   r   rq   rD   r@   test_ray_generationr5    s   vR!V$FF(;;;;vR!V$FF(;;;;vbS1W%VV)<<<<vR"Wq[)S-@@@@vQVaZ(C,????vS2X\*c&&.AAAAvR C$7777vS2X&#ff*====vS2X&#ff*====vQ3vv#6666vTBY'3uQ{/4Qa4DQRGVXHXCY8Y\]8]`d34tAw;3CaEGHaI 9IKL9MOSTUw9W 0X,Y Y Y Y vTBY'3uQ{/4QCr	N8J/K,M M M MvQ3v1s1v:#????I6%1a@PRYZ[]^`aRb:ccccI6%1a@PRYZ[]^`aRb:ccccI6%1a@PRYZ[]^`aRb:ccccrD   c                  F   [        [        [        S5      [        5      n [	        [        [
        [        5      SS9n[        [        [        -
  [        [        -   -  5      nUR                  U 5      [        [        U-   [        5      [        [        U-
  [        5      /:X  d   eg )Nr   r   )
r   r   r&   r)   r   r+   r*   r   r   r   )circleline_ss      r@   test_issue_7814r:  #  sp    E!QK#Fa1%D	q1uq1uo	BV$R);WQVQ=O(PPPPrD   c                  X   ^^^^ UUUU4S jn Su  mmSu  mmU " 5         Su  mmU " 5         g )Nc                     > [        [        [        [        4/S-  6  H=  u  pU " TT5      nU" TT5      nUR	                  U5      UR	                  U5      :X  a  M=   e   g )Nr<   )r#   r   r   r   r   )fgrx   ry   r2   r3   cr(  s       r@   _checktest_issue_2941.<locals>._check+  sY    dC12Q67DA1aB1aB??2&"//"*==== 8rD   ))r   r   r   )r[   rh   ))r   r;   r   rq   )r@  r2   r3   r?  r(  s    @@@@r@   test_issue_2941rB  *  s4    > > DAqDAq
HDAq
HrD   c                     ^^ [        S5      m[        SS5      [        SS5      p[        X5      mTR                  ST5      TS0:X  d   e[	        [
        UU4S j5        g )Nr.   r   r6   r7   r   )r7   r   c                  (   > T R                  ST5      $ )Nr[   )parameter_value)r   r.   s   r@   rA   &test_parameter_value.<locals>.<lambda>>  s    q00;rD   )r	   r   r   rE  r$   rM   )r   r   r   r.   s     @@r@   test_parameter_valuerG  9  sR    sA1a[%1+RAVQ'Aq6111
:;<rD   c            
      P   [        [        SSS5      [        SSS5      5      n [        [        SSS5      [        SSS5      5      nU R                  U5      nU[        [        SSS5      [        SSS5      5      [        [        SSS5      [        SSS5      5      /:X  d   e[        [        SSS5      [        SSS5      5      [        [        SSS5      [        SSS5      5      /nSnSn[        [        [
        [        4SS9 H"  u  pgU" U6 R                  U" U6 5      U:X  a  M"   e   g )Nr   r6   r8   )r   r   )r[   r   r<   )repeat)r   r   	bisectorsr#   r   r   r   )r   r   
bisectionsansrx   ry   r2   r3   s           r@   test_bisectorsrM  A  s   	1a '!Q"2	3B	1a '!Q"2	3Bb!J&Aq!171a3CDwq!QB!235 5 5 5'!Q"GAq!$45wq!QQ!235C	B	Bgs+A6"v2'3... 7rD   c                      [        [        SSS5      [        SSS5      5      n [        [        SSS5      [        SSS5      5      nU R                  U5      [        SSS5      /:X  d   eg )Nr   r7   r   ir8   gffffff?)r   r   r   rG   s     r@   test_issue_8615rO  O  sa    wq!QB!23Awq"e$gaQ&78A>>!B!2 3333rD   c                      [        [        SS5      [        SS5      R                  S5      5      n [        [        SS5      [        SS5      R                  S5      5      n[        U R	                  U5      S   5      S:X  d   e[        SS	5      n[        S
S5      R                  S5      n[        UR	                  U5      S   5      S:X  d   e[        S
S5      R                  S5      nUR	                  U5      (       a   eg )Nr   r6   g\(\?gHzG?r<   gQ?zPoint2D(0.82, 0.82)r[   rh   r   r   zPoint2D(-0.33, -0.33))g      r   )r   r   nstrr   r   r   )r   r   rx   ry   s       r@   test_issue_12598rS  U  s    	U1a[%d+--a0	1B	U1a[%d+--a0	1Brr"1%&*????	ff	B	'	"	$	$Q	'Brr"1%&*AAAA	+	&	(	(	+Br"""""rD   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.   r2   r3   r0   rN   rQ   rY   r`   rc   rf   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r   r3  r5  r:  rB  rG  rM  rO  rS  rq   rD   r@   <module>r`     s   8 8 $ " / 9 E E  , 8     , . , . 3T
3T
3T
3TDtDt
3Tu4 1Cd50&S#<CJ$S	B""JJCZ*IZ'5T#:C
-T`I4'DMATO!tHw*^*NC PF< E0 d.Q=/4#rD   