
    sg)                         d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZmZ ddlmZ  edd	      Z ed
      Z ed      Z ed      Z G d d      Z G d d      Zy)zFTests for the ``sympy.physics.mechanics.wrapping_geometry.py`` module.    N)	IntegerRationalSSymbolacoscospisinsqrt)Eq)PointReferenceFrameWrappingCylinderWrappingSpheredynamicsymbolssimplifyrTpositivexqNc                   (
   e Zd Zed        Zeej                  j                  dej                   e
d      ez  ej                  z  g      d               Zeej                  j                  deej                  z  eej                  z  ej                  feej                  z  eej                  z  ej                   ez  ez  feej                  z  eej                   z  eez  feej                   z  eej                  z  eez  feej                  z  e ed      z  ej                   z  ej                  ej                  z   z   edd      ez  ez  fe ed      z  ej                   z  ej                  ej                  z   z  e ed      z   edd      z  ej                  ej                  z   ej(                  z   z  e e ed	       edd      z        z  fg      d
               Zeej                  j                  deej                  z  eej                  z  ej                  ej                  feej                  z  e ej                  z  ej                   ej                  feej                  z   ed      dz  ez  ej                  z   ed      dz  ez  ej                  z  z
  ej                   ed      dz  ej                  z   ed      dz  ej                  z  z   feej                  z  edz  ej                  z   ed      dz  ez  ej                  z  z   ej                   ed      dz  ej                  z  dej                  z  z
  feej                  z   ed      dz  ez  ej                  z   ed      dz  ez  ej                  z  z   ej                   ed      dz  ej                  z   ed      dz  ej                  z  z
  fg      d               Zeej                  j                  deej                  z  e ee      z  ej                  z  e ee      z  ej                  z  z   g      d               Zeej                  j                  deej                  z  e ej                  z  fe ej                  z  eej                  z  fe ee      z  ej                  z  e ee      z  ej                  z  z   e  ee      z  ej                  z  e ee      z  ej                  z  z
  fg      d               Zy)TestWrappingSpherec                      t        dd      } t        d      }t        | |      }t        |t              sJ t	        |d      sJ |j
                  | k(  sJ t	        |d      sJ |j                  |k(  sJ y )Nr   Tr   pOradiuspoint)r   r   r   
isinstancehasattrr   r   )r   r   spheres      g/var/www/html/venv/lib/python3.12/site-packages/sympy/physics/mechanics/tests/test_wrapping_geometry.pytest_valid_constructorz)TestWrappingSphere.test_valid_constructor#   sw    3&4[2&&.111vx(((}}!!!vw'''||r!!!    position   c                 H   t        dd      }t        d      }t        ||      }t        d      }|j                  ||        t        d      }|j                  ||        d}t	        j
                  t        |      5  |j                  ||       d d d        y # 1 sw Y   y xY w	Nr   Tr   r   p1p2z'point .* does not lie on the surface of)match)r   r   r   set_pospytestraises
ValueErrorgeodesic_length)r&   r   r   r"   r*   r+   	error_msgs          r#   1test_geodesic_length_point_not_on_surface_invalidzDTestWrappingSphere.test_geodesic_length_point_not_on_surface_invalid.   s     3&4[2&4[


2x 4[


2x >	]]:Y7 	+""2r*	+ 	+ 	+s   <BB!z position_1, position_2, expected            c                    t        dd      }t        d      }t        ||      }t        d      }|j                  ||        t        d      }|j                  ||       t	        t        |j                  ||      |            sJ y Nr   Tr   r   r*   r+   )r   r   r   r-   r   r   r1   )
position_1
position_2expectedr   r   r"   r*   r+   s           r#   test_geodesic_lengthz'TestWrappingSphere.test_geodesic_length>   su    " 3&4[2&4[


2z"4[


2z"611"b98DEEEr%   z*position_1, position_2, vector_1, vector_2      ?c                     t        dd      }t        d      }t        ||      }t        d      }|j                  ||        t        d      }|j                  ||       ||f}	|j	                  ||      |	k(  sJ y r9   )r   r   r   r-   geodesic_end_vectors)
r:   r;   vector_1vector_2r   r   r"   r*   r+   r<   s
             r#   test_geodesic_end_vectorsz,TestWrappingSphere.test_geodesic_end_vectorsZ   sx    6 3&4[2&4[


2z"4[


2z"h'**2r2h>>>r%   c                 @   t        dd      }t        d      }t        ||      }t        d      }|j                  ||        t        d      }|j                  ||        t	        j
                  t              5  |j                  ||      }d d d        y # 1 sw Y   y xY wr9   r   r   r   r-   r.   r/   r0   r@   )r&   r   r   r"   r*   r+   _s          r#   ,test_geodesic_end_vectors_invalid_coincidentz?TestWrappingSphere.test_geodesic_end_vectors_invalid_coincident   s     3&4[2&4[


2x 4[


2x ]]:& 	4++B3A	4 	4 	4   8BBzposition_1, position_2c                 @   t        dd      }t        d      }t        ||      }t        d      }|j                  ||        t        d      }|j                  ||       t	        j
                  t              5  |j                  ||      }d d d        y # 1 sw Y   y xY wr9   rE   )r:   r;   r   r   r"   r*   r+   rF   s           r#   8test_geodesic_end_vectors_invalid_diametrically_oppositezKTestWrappingSphere.test_geodesic_end_vectors_invalid_diametrically_opposite   s      3&4[2&4[


2z"4[


2z"]]:& 	4++B3A	4 	4 	4rH   N)__name__
__module____qualname__staticmethodr$   r.   markparametrizer   Zeror   r   r   r   r3   yHalfr	   r   r   zr   r=   rC   r   r   r
   rG   rJ    r%   r#   r   r   !   s   " " [[Z!&&'!*Q,qss2B)CD+ E + [[*qssUAaccE166"qssUAaccE166"9Q;'qssUAqssdFBqD!tVQqssUBqD!qssUAd1gIaff$accACCi0(1a.2CA2EF$q'	!&& !##),$q'	(1a.(!##)acc/:$tAwx1~-..	

F  
F [[4Wa!##gqssACC(Wqb133hacc*ACCQ	A#d1gai!macc&99Q	ACC$q'!)acc/1	 ACCAd1gai!macc11Q	ACC#)+	 ACCQ	A#d1gai!macc&99Q	ACC$q'!)acc/1		
2?3 4? [[	
QSS!c!f*qss"QQZ!##%5564	 
4 [[ Wqb133hR!##Xq133wCF
QSS 1s1v:#33SVacc!AAJ$44	

4
 4r%   r   c                      e Zd Zed        Zeej                  j                  dej                  dfe
ej                  z  dfe
ej                  z  dfe
ej                  ej                  z   j                         z  df ed      e
z  ej                  z  dfe
ej                   ej                  z   z  dfe
 ed      ej                   z  ej                  z   z  df ed      ej                   z  e
 ed      ej                  z  ej                  z   j                         z  z   dfe
 ee      ej                  z   ee      ej                  z  z   z  dfg	      d               Zeej                  j                  dej                   ed      e
z  ej                  z  g      d               Zeej                  j                  d	ej                   e
ej                  z  e
ej                  z  ej                  fej                   e
ej                  z  ej                   e
ej                  z  z   ej,                  fej                   e
ej                  z  e ej                   z  e
ej                  z  z    eedz        fej                    e
ej                  z  eej                   z  e
ej                  z  z    eedz        fej                   e
ej                  z  e
ej                  z  ej0                  ez   ee
dz        z  fej                    e
ej                  z  e
ej                  z   ed
      ej0                  z  ez   ee
dz        z  fej                   e
ej                  z  e
ej                  z   ed
      ej0                  z  ez   ee
dz        z  fej                    e
ej                  z  e
ej                  z  ej0                  ez   ee
dz        z  fej                   e
ej                  z  e
 ee      ej                  z   ee      ej                  z  z   z   ee
dz  edz  z        fej                    e
ej                  z  e
 ee      ej                  z   ee      ej                  z  z   z   ee
dz   ed      ez  ez
  dz  z        fg
      d               Zeej                  j                  dej                  e
ej                   z  e
ej                  z  ej                  ej                   fej                  e
ej                   z  e
 ej                   z  ej                  ej                  fej                  e
 ej                   z  e
ej                   z  ej                   ej                   fej                   e
ej                   z  e
 ej                   z  ej                   ej                   fej                   e
 ej                   z  e
ej                   z  ej                  ej                  fej                  e
ej                   z  e
 ej                  z  ej                  ej                    fej                  e
ej                  z   ed      dz  e
z  ej                   z   ed      dz  e
z  ej                  z  z
  ej                     ed       dz  ej                   z   ed      dz  ej                  z  z
  fej                  e
ej                   z  e
dz  ej                   z   ed
      dz  e
z  ej                  z  z   ej                   ed
      dz  ej                   z  dej                  z  z
  fej                  e
ej                   z   ed      dz  e
z  ej                   z   ed      dz  e
z  ej                  z  z   ej                   ed      dz  ej                   z   ed      dz  ej                  z  z
  fej                  e
ej                   z  e
ej                   z  ej                  z   ej                  ej                   fej                  e
ej                   z  e
ej                  z  edz  e
z  ej                  z  z    ed      dz  ej                  z   ed      dz  ej                  z  z    ed      dz  ej                   z   ed      dz  ej                  z  z
  fej                  e
ej                   z  e
 ee      z  ej                   z  e
 ee      z  ej                  z  z   ej                   ee      ej                   z   ee      ej                  z  z
  fg      d               Zeej                  j                  dej                  e
ej                   z  fej                  e
 ee      z  ej                   z  e
 ee      z  ej                  z  z   ej                  z   fg      d               Zy)TestWrappingCylinderc                  j   t        d      } t        dd      }t        d      }t        ||| j                        }t        |t              sJ t        |d      sJ |j                  |k(  sJ t        |d      sJ |j                  |k(  sJ t        |d      sJ |j                  | j                  k(  sJ y )	Nr   r   Tr   r   r   r   axis)
r   r   r   r   r   r    r!   r   r   rY   )r   r   r   cylinders       r#   r$   z+TestWrappingCylinder.test_valid_constructor   s    33&4[#Ar133/($4555x***!###x)))~~###x(((}}###r%   zposition, expectedFTr'   c                     t        dd      }t        d      }t        ||t        j                        }t        d      }|j                  ||        |j                  |      |u sJ y )Nr   Tr   r   r*   )r   r   r   r   r   r-   point_on_surface)r&   r<   r   r   rZ   r*   s         r#   test_point_is_on_surfacez-TestWrappingCylinder.test_point_is_on_surface   s[      3&4[#Ar133/4[


2x ((,888r%   r&   c                 f   t        dd      }t        d      }t        ||t        j                        }t        d      }|j                  ||        t        d      }|j                  ||        d}t        j                  t        |      5  |j                  ||       d d d        y # 1 sw Y   y xY wr)   )
r   r   r   r   r   r-   r.   r/   r0   r1   )r&   r   r   rZ   r*   r+   r2   s          r#   r3   zFTestWrappingCylinder.test_geodesic_length_point_not_on_surface_invalid   s     3&4[#Ar133/4[


2x 4[


2x >	]]:Y7 	-$$R,	- 	- 	-s   B''B0z&axis, position_1, position_2, expectedr6   c                    t        dd      }t        d      }t        |||       }t        d      }|j                  ||       t        d      }|j                  ||       t	        t        |j                  ||      |            sJ y r9   )r   r   r   r-   r   r   r1   )	rY   r:   r;   r<   r   r   rZ   r*   r+   s	            r#   r=   z)TestWrappingCylinder.test_geodesic_length   sw    * 3&4[#Ar404[


2z"4[


2z"833B;XFGGGr%   z0axis, position_1, position_2, vector_1, vector_2r>   c                    t        dd      }t        d      }t        |||       }t        d      }|j                  ||       t        d      }	|	j                  ||       ||f}
t	        d |j                  ||	      D              }||
k(  sJ y )Nr   Tr   r   r*   r+   c              3   <   K   | ]  }|j                           y w)Nr   ).0
end_vectors     r#   	<genexpr>zATestWrappingCylinder.test_geodesic_end_vectors.<locals>.<genexpr>Q  s!      
 !
s   )r   r   r   r-   tupler@   )rY   r:   r;   rA   rB   r   r   rZ   r*   r+   r<   end_vectorss               r#   rC   z.TestWrappingCylinder.test_geodesic_end_vectors
  s    z 3&4[#Ar404[


2z"4[


2z"h' 
&;;BC
 

 h&&&r%   zaxis, positionc                 B   t        dd      }t        d      }t        |||       }t        d      }|j                  ||       t        d      }|j                  ||       t	        j
                  t              5  |j                  ||      }d d d        y # 1 sw Y   y xY wr9   )r   r   r   r-   r.   r/   r0   r@   )rY   r&   r   r   rZ   r*   r+   rF   s           r#   rG   zATestWrappingCylinder.test_geodesic_end_vectors_invalid_coincidentX  s     3&4[#Ar404[


2x 4[


2x ]]:& 	6--b"5A	6 	6 	6s   9BBN)rK   rL   rM   rN   r$   r.   rO   rP   r   rQ   r   r   rR   rT   	normalizer   r   r   r   r
   r]   r3   Oner   rS   r	   r=   rC   rG   rU   r%   r#   rW   rW      sv   $ $ [[VVUOqssUDMqssUDMacc	$$&&-QZ\!##u%acc	]D!
133$%t,QZ^aACC!##!5 @ @ BBBDIAqss
SVACCZ'($/
	
9 9 [[Z!&&'!*Q,qss2B)CD- E - [[0SS!ACC%133'SS!ACC%quaee,SS!ACC%!ACC!ACC%ad4ccT1QSS5!ACC%!ACC%-ad4SS!ACC%133r	$q!t* 45ccT1QSS5!ACC%AFF!22!5d1a4j!@ASS!ACC%133
166 1" 4T!Q$Z ?@ccT1QSS5!ACC%41:!56SS!ACC%CF133JQ34d1a419oFae3q6!##:Aqss
*+QT71:b=1,q001	
&
H' (
H [[:SS!acc'1qss7ACC-SS!acc'A28QSS!##.SS1"qss(AGaccTACC40ccT1qss7QBHqssdQSSD1ccTA28QWacc133/SS!acc'A28QSS133$/ACCQ	A#d1gai!macc&99##q'	!acc!DGAIO3 ACCAd1gai!macc11Q	ACC#)+ ACCQ	A#d1gai!macc&99Q	ACC$q'!)acc/1 ACCACC!## ACCACC"Q$(QSS.(Q	ACC$q'!)acc/1Q	ACC$q'!)acc/1 ACCCF
QSS 1s1v:#33As1v|+U1	
4j'k4 l'0 [[SS!acc'NSS!c!f*qss"QQZ!##%55;<	
6 6r%   rW   )__doc__r.   sympyr   r   r   r   r   r   r	   r
   r   sympy.core.relationalr   sympy.physics.mechanicsr   r   r   r   r   sympy.simplify.simplifyr   r   r   r   r   r   rW   rU   r%   r#   <module>ro      sr    L 
 
 
 %  - 3
3K33M4 M4`z6 z6r%   