
    gpa                         d Z ddlZddlmZmZmZmZ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 ddlmZ d Z G d d          Z G d	 d
          Z G d d          ZdS )z<Tests for the ``sympy.physics.mechanics.pathway.py`` module.    N)RationalSymbolcospisinsqrt)ForceLinearPathwayObstacleSetPathwayPathwayBasePointReferenceFrameWrappingCylinderWrappingGeometryBaseWrappingPathwayWrappingSpheredynamicsymbols)simplifyc                     d | D             S )Nc                 r    g | ]4}|                     |j        |j                                                  5S  )	__class__locationvectorr   ).0loads     f/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/physics/mechanics/tests/test_pathway.py
<listcomp>z#_simplify_loads.<locals>.<listcomp>   sF        	t}dk&:&:&<&<==      r   )loadss    r   _simplify_loadsr!      s#        r   c            
       D   e Zd Zd Zeej                            d ed           ed          fi fg          d                         Z	eej                            d ed          f ed           ed           ed          fg          d                         Z
eej                            dd	 ed          f ed          d	fg          d
                         Z ej        d          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd	S )TestLinearPathwayc                 >    t          t          t                    sJ d S N)
issubclassr
   r   selfs    r   test_is_pathway_base_subclassz/TestLinearPathway.test_is_pathway_base_subclass&   s    -5555555r   zargs, kwargspApBc                    | \  }}t          | i |}t          |t                     sJ t          |d          sJ t          |j                  dk    sJ |j        d         |u sJ |j        d         |u sJ t          |j        d         t
                    sJ |j        d         j        dk    sJ t          |j        d         t
                    sJ |j        d         j        dk    sJ d S )Nattachments   r      r*   r+   )r
   
isinstancehasattrlenr-   r   name)argskwargspointApointBinstances        r   test_valid_constructorz(TestLinearPathway.test_valid_constructor)   s     $1&11(M22222x/////8'((A----#A&&0000#A&&0000(.q1599999#A&+t3333(.q1599999#A&+t333333r   r-   pZc                 |    t          j        t                    5  t          |  }d d d            d S # 1 swxY w Y   d S r%   )pytestraises
ValueErrorr
   r-   _s     r   )test_invalid_attachments_incorrect_numberz;TestLinearPathway.test_invalid_attachments_incorrect_number=   s     ]:&& 	, 	,{+A	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,   
155Nc                 |    t          j        t                    5  t          |  }d d d            d S # 1 swxY w Y   d S r%   )r<   r=   	TypeErrorr
   r?   s     r   "test_invalid_attachments_not_pointz4TestLinearPathway.test_invalid_attachments_not_pointI   s     ]9%% 	, 	,{+A	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,rB   Tautousec                    t          d          | _        t          d          | _        t          d          | _        t          | j        | j                  | _        t          d          | _        t          d          | _	        t          d          | _
        t          dd          | _        t          dd          | _        t          dd          | _        t          d          | _        d S )	NNr*   r+   q1q2q3r/   F)r   rI   r   r*   r+   r
   pathwayr   rJ   rK   rL   q1dq2dq3dr   rM   r'   s    r   _linear_pathway_fixturez)TestLinearPathway._linear_pathway_fixtureU   s    $$++++$TWdg66 && && &&!$**!$**!$**r   c                    t          | j        | j                  }t          j        t
                    5  d |_        d d d            n# 1 swxY w Y   t          j        t                    5  d |j        d<   d d d            n# 1 swxY w Y   t          j        t                    5  d |j        d<   d d d            d S # 1 swxY w Y   d S Nr   r/   )r
   r*   r+   r<   r=   AttributeErrorr-   rD   r(   r8   s     r   test_properties_are_immutablez/TestLinearPathway.test_properties_are_immutablec   su    $'22]>** 	( 	(#'H 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(]9%% 	+ 	+&*H #	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+]9%% 	+ 	+&*H #	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s5   AAA,BB
B'B??CCc                 h    t          | j        | j                  }d}t          |          |k    sJ d S )NzLinearPathway(pA, pB))r
   r*   r+   reprr(   rN   expecteds      r   	test_reprzTestLinearPathway.test_reprl   s7    11*G}}((((((r   c                     | j                             | j        d| j        j        z             | j        j        dk    sJ d S Nr.   )r+   set_posr*   rI   xrN   lengthr'   s    r   test_static_pathway_lengthz,TestLinearPathway.test_static_pathway_lengthq   s>    468,,,|"a''''''r   c                     | j                             | j        d| j        j        z             | j        j        dk    sJ d S Nr.   r   )r+   r_   r*   rI   r`   rN   extension_velocityr'   s    r   &test_static_pathway_extension_velocityz8TestLinearPathway.test_static_pathway_extension_velocityu   s>    468,,,|.!333333r   c                    | j                             | j        d| j        j        z             | j        | j         | j        j        z  f| j         | j        | j        j        z  fg}| j                            | j                  |k    sJ d S r^   )r+   r_   r*   rI   r`   rM   rN   to_loadsr(   r[   s     r   test_static_pathway_to_loadsz.TestLinearPathway.test_static_pathway_to_loadsy   s    468,,,Whtvx'(WdfTVXo&
 |$$TV,,888888r   c                     | j                             | j        d| j        z  | j        j        z             dt          | j        dz            z  }| j        j        |k    sJ d S r^   )	r+   r_   r*   rJ   rI   r`   r   rN   ra   ri   s     r   test_2D_pathway_lengthz(TestLinearPathway.test_2D_pathway_length   s]    47468!3444T$'1*%%%|"h......r   c                     | j                             | j        d| j        z  | j        j        z             dt          | j        dz            z  | j        z  | j        z  }| j        j	        |k    sJ d S r^   )
r+   r_   r*   rJ   rI   r`   r   rO   rN   re   ri   s     r   "test_2D_pathway_extension_velocityz4TestLinearPathway.test_2D_pathway_extension_velocity   sk    47468!3444T$'1*%%%dh.tw6|.(::::::r   c                    | j                             | j        d| j        z  | j        j        z             | j        | j         | j        t          | j        dz            z  z  | j        j        z  f| j         | j        | j        t          | j        dz            z  z  | j        j        z  fg}| j        	                    | j                  |k    sJ d S r^   )
r+   r_   r*   rJ   rI   r`   rM   r   rN   rh   ri   s     r   test_2D_pathway_to_loadsz*TestLinearPathway.test_2D_pathway_to_loads   s    47468!3444Wh$twz*:*: :;DFHDEWdfdgTWaZ(8(889$&(BC
 |$$TV,,888888r   c                 h   | j                             | j        | j        | j        j        z  | j        | j        j        z  z
  d| j        z  | j        j	        z  z              t          | j        dz  | j        dz  z   d| j        dz  z  z             }t          | j        j        |z
            dk    sJ d S Nr.      r   )r+   r_   r*   rJ   rI   r`   rK   yrL   zr   r   rN   ra   ri   s     r   test_3D_pathway_lengthz(TestLinearPathway.test_3D_pathway_length   s    GGDFHtwtvx//!DG)DFH2DD	
 	
 	
 
TWaZ/!DGQJ,>??+h6771<<<<<<r   c                    | j                             | j        | j        | j        j        z  | j        | j        j        z  z
  d| j        z  | j        j	        z  z              t          | j        dz  | j        dz  z   d| j        dz  z  z             }| j        | j        z  |z  | j        | j        z  |z  z   d| j        z  | j        z  |z  z   }t          | j        j        |z
            dk    sJ d S rr   )r+   r_   r*   rJ   rI   r`   rK   rt   rL   ru   r   rO   rP   rQ   r   rN   re   )r(   ra   r[   s      r   "test_3D_pathway_extension_velocityz4TestLinearPathway.test_3D_pathway_extension_velocity   s    GGDFHtwtvx//!DG)DFH2DD	
 	
 	
 dgqj47A:-$'1*<==GDHV#gdhv%&i '( 	
 7(BCCqHHHHHHr   c                    | j                             | j        | j        | j        j        z  | j        | j        j        z  z
  d| j        z  | j        j	        z  z              t          | j        dz  | j        dz  z   d| j        dz  z  z             }| j         | j        z  | j        j        z  |z  | j        | j        z  | j        j        z  |z  z   d| j        z  | j        z  | j        j	        z  |z  z
  }| j        | j        z  | j        j        z  |z  | j        | j        z  | j        j        z  |z  z
  d| j        z  | j        z  | j        j	        z  |z  z   }| j        |f| j         |fg}| j                            | j                  |k    sJ d S )Nr.   rs   )r+   r_   r*   rJ   rI   r`   rK   rt   rL   ru   r   rM   rN   rh   )r(   ra   pO_forcepI_forcer[   s        r   test_3D_pathway_to_loadsz*TestLinearPathway.test_3D_pathway_to_loads   s   GGDFHtwtvx//!DG)DFH2DD	
 	
 	
 dgqj47A:-$'1*<==fHTWTVX%f,fTWnTVX%f,-htwtvx'./ 	 F47N468#F*fTWnTVX%f,-htwtvx'./ 	 WhWh
 |$$TV,,888888r   )__name__
__module____qualname__r)   staticmethodr<   markparametrizer   r9   rA   rE   fixturerR   rW   r\   rb   rf   rj   rl   rn   rp   rv   rx   r|   r   r   r   r#   r#   $   s(       6 6 6 [eDkk55;;',	
 4 4  \4 [U4[[OU4[[%%++uuT{{3	
 , ,  \, [55;;U4[[$	
 , ,  \, V^D!!!  "!+ + +) ) )
( ( (4 4 49 9 9/ / /
; ; ;
9 9 9= = =I I I9 9 9 9 9r   r#   c            
       L   e Zd Zd Zeej                            ddd dD             fdd dD             fd	d
 dD             fdd dD             fg          d                         Zeej                            d e	d          g e	d           e	d          gg          d                         Z
eej                            dd e	d           e	d          f e	d          d e	d          f e	d           e	d          dfg          d                         Zd Zeej                            dd dD             dfd dD             dfd dD             dfg          d                         Z ej        d !          d"             Zd# Zd$ Zd% Zd& Zd' Zd( ZdS ))TestObstacleSetPathwayc                 >    t          t          t                    sJ d S r%   )r&   r   r   r'   s    r   r)   z4TestObstacleSetPathway.test_is_pathway_base_subclass   s    ,k:::::::r   znum_attachments, attachments   c                 ,    g | ]}t          |          S r   r   r   r3   s     r   r   z!TestObstacleSetPathway.<listcomp>       <<<t<<<r   )pOr*   pIrs   c                 ,    g | ]}t          |          S r   r   r   s     r   r   z!TestObstacleSetPathway.<listcomp>       BBBtBBBr   )r   r*   r+   r      c                 ,    g | ]}t          |          S r   r   r   s     r   r   z!TestObstacleSetPathway.<listcomp>       HHHtHHHr   )r   r*   r+   pCr      c                 ,    g | ]}t          |          S r   r   r   s     r   r   z!TestObstacleSetPathway.<listcomp>   s    NNNtNNNr   )r   r*   r+   r   pDr   c                     t          | }t          |t                     sJ t          |d          sJ t          |j                  | k    sJ |j        D ]}t          |t
                    sJ d S )Nr-   )r   r0   r1   r2   r-   r   )num_attachmentsr-   r8   
attachments       r   r9   z-TestObstacleSetPathway.test_valid_constructor   s     &{3($677777x/////8'((O;;;;". 	1 	1Jj%000000	1 	1r   r-   r   r   c                 |    t          j        t                    5  t          |  }d d d            d S # 1 swxY w Y   d S r%   )r<   r=   r>   r   r?   s     r   5test_invalid_constructor_attachments_incorrect_numberzLTestObstacleSetPathway.test_invalid_constructor_attachments_incorrect_number   s     ]:&& 	1 	1"K0A	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1rB   Nr*   c                 |    t          j        t                    5  t          |  }d d d            d S # 1 swxY w Y   d S r%   r<   r=   rD   r   r?   s     r   .test_invalid_constructor_attachments_not_pointzETestObstacleSetPathway.test_invalid_constructor_attachments_not_point   s     ]9%% 	. 	.-A	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.rB   c                 J   t          t          d          t          d          t          d                    }t          j        t                    5  d |_        d d d            n# 1 swxY w Y   t          j        t                    5  d |j        d<   d d d            n# 1 swxY w Y   t          j        t                    5  d |j        d<   d d d            n# 1 swxY w Y   t          j        t                    5  d |j        d<   d d d            d S # 1 swxY w Y   d S )Nr   r*   r   r   r/   )r   r   r<   r=   rU   r-   rD   r(   rN   s     r   rW   z4TestObstacleSetPathway.test_properties_are_immutable   s   $U4[[%++uT{{KK]>** 	' 	'"&G	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	']9%% 	* 	*%)G"	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*]9%% 	* 	*%)G"	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*]9%% 	+ 	+&*G#	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+sH   A&&A*-A*
B!!B%(B%CC #C  DDDzattachments, expectedc                 ,    g | ]}t          |          S r   r   r   s     r   r   z!TestObstacleSetPathway.<listcomp>   r   r   zObstacleSetPathway(pO, pA, pI)c                 ,    g | ]}t          |          S r   r   r   s     r   r   z!TestObstacleSetPathway.<listcomp>   r   r   z"ObstacleSetPathway(pO, pA, pB, pI)c                 ,    g | ]}t          |          S r   r   r   s     r   r   z!TestObstacleSetPathway.<listcomp>  r   r   z&ObstacleSetPathway(pO, pA, pB, pC, pI)c                 B    t          |  }t          |          |k    sJ d S r%   )r   rY   )r-   r[   rN   s      r   r\   z TestObstacleSetPathway.test_repr   s+    & %k2G}}((((((r   TrF   c                 H   t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          dd          | _	        t          d          | _        d S )	NrI   r   r   r*   r+   qr/   rM   )r   rI   r   r   r   r*   r+   r   r   qdr   rM   r'   s    r   _obstacle_set_pathway_fixturez4TestObstacleSetPathway._obstacle_set_pathway_fixture  sv    $$++++++++$$ a((r   c                    | j                             | j        | j        j                   | j                            | j        | j        j                   | j                            | j        | j        j                   t          | j        | j         | j        | j                  }|j
        ddt          d          z  z   k    sJ d S )Nr/   r.   )r*   r_   r   rI   r`   r+   rt   r   ru   r   ra   r   r   s     r   rb   z1TestObstacleSetPathway.test_static_pathway_length  s    *********$TWdgtwHH~Qa[000000r   c                 h   | j                             | j        | j        j                   | j                            | j        | j        j                   | j                            | j        | j        j                   t          | j        | j         | j        | j                  }|j
        dk    sJ d S Nr   )r*   r_   r   rI   r`   r+   rt   r   ru   r   re   r   s     r   rf   z=TestObstacleSetPathway.test_static_pathway_extension_velocity  s    *********$TWdgtwHH)Q......r   c                 \   | j                             | j        | j        j                   | j                            | j        | j        j                   | j                            | j        | j        j                   t          | j        | j         | j        | j                  }t          | j        | j         | j        j        z            t          | j         | j        | j        j        z            t          | j         | j        t          d          z  dz  | j        j        | j        j        z
  z            t          | j        | j        t          d          z  dz  | j        j        | j        j        z
  z            t          | j        | j        t          d          z  dz  | j        j        | j        j        z
  z            t          | j        | j        t          d          z  dz  | j        j        | j        j        z
  z            g}|                    | j                  |k    sJ d S r^   )r*   r_   r   rI   r`   r+   rt   r   ru   r   r	   rM   r   rh   rZ   s      r   rj   z3TestObstacleSetPathway.test_static_pathway_to_loads&  s   *********$TWdgtwHH$'DF7TVX-..$'46DFH,--$'46DGG+a/468dfh3FGHH$'46DGG+a/468dfh3FGHH$'46DGG+a/468dfh3FGHH$'46DGG+a/468dfh3FGHH
 ''8333333r   c                 
   | j                             | j        | j        j        | j        j        z               | j                            | j        t          | j                  | j        j        z  t          | j                  dz   | j        j        z  z
             | j
                            | j        t          | j                  | j        j        z  t          | j                  dz
  | j        j        z  z              t          | j        | j         | j        | j
                  }dt          d          z  t          ddt          | j                  z  z             z   }|j        |z
                                  dk    sJ d S Nr/   r.   r   )r*   r_   r   rI   r`   rt   r+   r   r   r   r   r   r   ra   r   rZ   s      r   rl   z-TestObstacleSetPathway.test_2D_pathway_length5  s4   468dfh#6!7888GS[[468+s46{{Q$&(.JJ	
 	
 	
 	GS[[468+s46{{Q$&(.JJ	
 	
 	
 %TWdgtwHHtAww;a!CKK-&7!8!88)3355::::::r   c                 @   | j                             | j        | j        j        | j        j        z               | j                            | j        t          | j                  | j        j        z  t          | j                  dz   | j        j        z  z
             | j
                            | j        t          | j                  | j        j        z  t          | j                  dz
  | j        j        z  z              t          | j        | j         | j        | j
                  }t          d          t          | j                  z  | j        z   dt          t          | j                  dz             z  z  }|j        |z
                                  dk    sJ d S r   )r*   r_   r   rI   r`   rt   r+   r   r   r   r   r   r   r   re   r   rZ   s      r   rn   z9TestObstacleSetPathway.test_2D_pathway_extension_velocityA  sI   468dfh#6!7888GS[[468+s46{{Q$&(.JJ	
 	
 	
 	GS[[468+s46{{Q$&(.JJ	
 	
 	
 %TWdgtwHH1ggDF+dg56!d3tv;;QR?>S>S:ST*X5??AAQFFFFFFr   c           
      4   | j                             | j        | j        j        | j        j        z               | j                            | j        t          | j                  | j        j        z  t          | j                  dz   | j        j        z  z
             | j
                            | j        t          | j                  | j        j        z  t          | j                  dz
  | j        j        z  z              t          | j        | j         | j        | j
                  }t          d          dz  | j        j        | j        j        z   z  }t          dt          | j                  z  dz              dz  | j        j        z  t          d          t          | j                  z  dt          t          | j                  dz             z  z  | j        j        z  z   }t          | j        t          dz  z             | j        j        z  t          | j        t          dz  z             | j        j        z  z
  }t          | j        | j        |z            t          | j         | j         |z            t          | j         | j        |z            t          | j        | j         |z            t          | j        | j        |z            t          | j
        | j         |z            g}t!          |                    | j                            |k    sJ d S )Nr/   r.   rs   )r*   r_   r   rI   r`   rt   r+   r   r   r   r   r   r   r   r	   rM   r!   rh   )r(   rN   pO_pA_force_vecpA_pB_force_vecpB_pI_force_vecr[   s         r   rp   z/TestObstacleSetPathway.test_2D_pathway_to_loadsM  sw   468dfh#6!7888GS[[468+s46{{Q$&(.JJ	
 	
 	
 	GS[[468+s46{{Q$&(.JJ	
 	
 	
 %TWdgtwHHq''A+DFH)<=1s46{{?Q&'''!+dfh61ggDF#q4DFa+@+@'@ADFHLM 	 dfr!tm,,tvx7#dfr!tm:L:Ltvx:WW$'46O344$'DF7_455$'46O344$'DF7_455$'46O344$'DF7_455
 w//7788HDDDDDDr   )r}   r~   r   r)   r   r<   r   r   r9   r   r   r   rW   r\   r   r   rb   rf   rj   rl   rn   rp   r   r   r   r   r      s       ; ; ; [&<<);<<<=BB)ABBBCHH)GHHHINN)MNNNO		
 1 1  \1 [
%++teeDkk23 1 1	  \
1 [55;;d,U4[[$d,U4[[%%++t,	
 . .  \.	+ 	+ 	+ [ =<);<<<0
 CB)ABBB4
 IH)GHHH8	
 ") )#  \$) V^D!!!  "!1 1 1/ / /4 4 4
; 
; 
;
G 
G 
GE E E E Er   r   c                      e Zd Zd Z ej        d          d             Zd Zej        	                    d e
d          f e
d           e
d           e
d	          fg          d
             Zeej        	                    dd e
d          f e
d          dfg          d                         Zd Zej        	                    d ed           ed           ed           ed          j        g          d             Zd Zd Zd Zed             Zej        	                    dddedz  fd ed          dz   ed           dz  dfdez  dz  fd edd           ed          dz  dfedz  fg          d             Zej        	                    ddd edd          ez  fdd efd defd ed          dz   ed           dz  dfd!ez  dz  fd edd           ed          dz  dfedz  fd ed           edd          z   ed            edd          z  df ed ed!d          ez  dz  z             fd edd           ed           edd          z  df ed edd          ez  dz  z             fg          d"             Zej        	                    d#d$d ed           edd          z   ed            edd          z  dffd edd           ed           edd          z  dffg          d%             Zej        	                    d#d$d&d'd ed          dz   ed           dz  dffd edd           ed          dz  dffd ed           edd          z   ed           dz  dffd edd           ed          dz  dffg          d(             Zej        	                    d)d*d ed          dz   ed           dz  dfd ed          dz   ed          dz  dfd+ ed          dz  z
   ed           dz  dffd edd           ed          dz  dfd ed          dz   edd           df ed           dz   edd          dz
  dfff          d,             Zej        	                    d)d*d-d.d ed          dz   ed           dz  dfd  ed           dz   ed           dz  dfd ed          dz  z    ed          dz  dffd edd           ed          dz  dfd ed          dz   edd           df ed           dz   edd          dz
  dffd ed          dz   ed          dz  dfd ed          dz   ed           dz  df ed           dz   ed          dz  dz
  dffd/d ed          dz   ed           dz  dfd0ez   ed1d2edz  z  z             z  dd ed1d2edz  z  z             z  fd0 ed          z  ez  d ed1d2edz  z  z             z  z  d0 ed          z  ez  d ed1d2edz  z  z             z  z  d3 ed1d2edz  z  z             z  fd! ed          dz   z  ez  d ed1d2edz  z  z             z  z  d! ed          z  ez  d ed1d2edz  z  z             z  z  dfff          d4             Z d5 Z!d6 Z"d7 Z#dS )8TestWrappingPathwayc                 >    t          t          t                    sJ d S r%   )r&   r   r   r'   s    r   r)   z1TestWrappingPathway.test_is_pathway_base_subclassi  s    /;7777777r   TrF   c                    t          d          | _        t          d          | _        t          dd          | _        t          d          | _        t          d          | _        | j        j        | _	        t          | j        | j                  | _        t          | j        | j        | j	                  | _        t          | j        | j        | j                  | _        t          d          | _        d S )	Nr*   r+   rT)positiver   rI   rM   )r   r*   r+   r   r   r   r   rI   ru   axr   spherer   cylinderr   rN   rM   r'   s    r   _wrapping_pathway_fixturez-TestWrappingPathway._wrapping_pathway_fixturel  s    ++++d+++++$$&($TVTW55($'BB&twGGr   c                 4   t          | j        | j        | j                  }t	          |t                     sJ t          |d          sJ t          |j                  dk    sJ t	          |j        d         t                    sJ |j        d         | j        k    sJ t	          |j        d         t                    sJ |j        d         | j        k    sJ t          |d          sJ t	          |j	        t                    sJ |j	        | j        k    sJ d S )Nr-   r.   r   r/   geometry)r   r*   r+   r   r0   r1   r2   r-   r   r   r   rV   s     r   r9   z*TestWrappingPathway.test_valid_constructory  s   "47DGT]CC(O44444x/////8'((A----(.q1599999#A&$'1111(.q1599999#A&$'1111x,,,,,(+-ABBBBB DM111111r   r-   r*   r+   r:   c                     t          j        t                    5  t          g || j        R  }d d d            d S # 1 swxY w Y   d S r%   )r<   r=   rD   r   r   )r(   r-   r@   s      r   r   zITestWrappingPathway.test_invalid_constructor_attachments_incorrect_number  s     ]9%% 	= 	=<<dm<<<A	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   ;??Nc                 |    t          j        t                    5  t          |  }d d d            d S # 1 swxY w Y   d S r%   r   r?   s     r   r   zBTestWrappingPathway.test_invalid_constructor_attachments_not_point  s     ]9%% 	. 	.-A	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.rB   c                     t          j        t                    5  t          | j        | j                  }d d d            d S # 1 swxY w Y   d S r%   r<   r=   rD   r   r*   r+   )r(   r@   s     r   1test_invalid_constructor_geometry_is_not_suppliedzETestWrappingPathway.test_invalid_constructor_geometry_is_not_supplied  s    ]9%% 	2 	211A	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   AA	Ar   r   r   rI   c                     t          j        t                    5  t          | j        | j        |          }d d d            d S # 1 swxY w Y   d S r%   r   )r(   r   r@   s      r   "test_invalid_geometry_not_geometryz6TestWrappingPathway.test_invalid_geometry_not_geometry  s     ]9%% 	< 	<(;;A	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   AA
Ac                    t          j        t                    5  | j        | j        j        d<   d d d            n# 1 swxY w Y   t          j        t                    5  | j        | j        j        d<   d d d            d S # 1 swxY w Y   d S rT   )r<   r=   rD   r+   rN   r-   r*   r'   s    r   &test_attachments_property_is_immutablez:TestWrappingPathway.test_attachments_property_is_immutable  s    ]9%% 	2 	2*.'DL$Q'	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2]9%% 	2 	2*.'DL$Q'	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   ;??BBBc                     t          j        t                    5  d | j        _        d d d            d S # 1 swxY w Y   d S r%   )r<   r=   rU   rN   r   r'   s    r   #test_geometry_property_is_immutablez7TestWrappingPathway.test_geometry_property_is_immutable  s    ]>** 	) 	)$(DL!	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   488c                 P    d| j         d}t          | j                  |k    sJ d S )Nz!WrappingPathway(pA, pB, geometry=))r   rY   rN   ri   s     r   r\   zTestWrappingPathway.test_repr  sC    ++ + + 	 DL!!X------r   c                 P    t          d t          | |          D                       S )Nc              3   &   K   | ]\  }}||z  V  d S r%   r   r   magunits      r   	<genexpr>z9TestWrappingPathway._expand_pos_to_vec.<locals>.<genexpr>  s*      ??d3t8??????r   )sumzip)posframes     r   _expand_pos_to_vecz&TestWrappingPathway._expand_pos_to_vec  s'    ??s3??????r   zpA_vec, pB_vec, factorr/   r   r   r   r/   r   r.   r   r   rs   r/   c                    |                      || j                  }|                      || j                  }| j                            | j        | j        |z             | j                            | j        | j        |z             t          | j        | j        | j                  }|| j        z  }t          |j
        |z
            dk    sJ d S r   )r   rI   r*   r_   r   r   r+   r   r   r   ra   r(   pA_vecpB_vecfactorrN   r[   s         r   $test_static_pathway_on_sphere_lengthz8TestWrappingPathway.test_static_pathway_on_sphere_length  s     ((88((88//////!$'47DK@@$&=122a777777r   r   r   r   r   c                    |                      || j                  }|                      || j                  }| j                            | j        | j        |z             | j                            | j        | j        |z             t          | j        | j        | j                  }|t          | j        dz            z  }t          |j        |z
            dk    sJ d S rd   )r   rI   r*   r_   r   r   r+   r   r   r   r   ra   r   s         r   &test_static_pathway_on_cylinder_lengthz:TestWrappingPathway.test_static_pathway_on_cylinder_length  s    * ((88((88//////!$'47DMBB$tvqy//)122a777777r   zpA_vec, pB_vec)r   r   c                 l   |                      || j                  }|                      || j                  }| j                            | j        | j        |z             | j                            | j        | j        |z             t          | j        | j        | j                  }|j	        dk    sJ d S r   )
r   rI   r*   r_   r   r   r+   r   r   re   r(   r   r   rN   s       r   0test_static_pathway_on_sphere_extension_velocityzDTestWrappingPathway.test_static_pathway_on_sphere_extension_velocity  s     ((88((88//////!$'47DK@@)Q......r   )r   r   )r   r   c                 l   |                      || j                  }|                      || j                  }| j                            | j        | j        |z             | j                            | j        | j        |z             t          | j        | j        | j                  }|j	        dk    sJ d S r   )
r   rI   r*   r_   r   r   r+   r   r   re   r   s       r   2test_static_pathway_on_cylinder_extension_velocityzFTestWrappingPathway.test_static_pathway_on_cylinder_extension_velocity  s     ((88((88//////!$'47DMBB)Q......r   zApA_vec, pB_vec, pA_vec_expected, pB_vec_expected, pO_vec_expected)r   r   r   r   )r   r   r   r   c                    |                      || j                  }|                      || j                  }| j                            | j        | j        |z             | j                            | j        | j        |z             t          | j        | j        | j                  }t          d t          || j                  D                       }t          d t          || j                  D                       }t          d t          || j                  D                       }t          | j        | j        | j        dz  t          | j        dz            z  z  |z            t          | j        | j        | j        dz  t          | j        dz            z  z  |z            t          | j        | j        | j        dz  t          | j        dz            z  z  |z            g}|                    | j                  |k    sJ d S )Nc              3   &   K   | ]\  }}||z  V  d S r%   r   r   s      r   r   zMTestWrappingPathway.test_static_pathway_on_sphere_to_loads.<locals>.<genexpr>7  ;       
 
$#tCH
 
 
 
 
 
r   c              3   &   K   | ]\  }}||z  V  d S r%   r   r   s      r   r   zMTestWrappingPathway.test_static_pathway_on_sphere_to_loads.<locals>.<genexpr>:  r   r   c              3   &   K   | ]\  }}||z  V  d S r%   r   r   s      r   r   zMTestWrappingPathway.test_static_pathway_on_sphere_to_loads.<locals>.<genexpr>=  r   r   r   r   )r   rI   r*   r_   r   r   r+   r   r   r   r   r	   rM   r   rh   )r(   r   r   pA_vec_expectedpB_vec_expectedpO_vec_expectedrN   r[   s           r   &test_static_pathway_on_sphere_to_loadsz:TestWrappingPathway.test_static_pathway_on_sphere_to_loads  s   8 ((88((88//////!$'47DK@@ 
 
(+OTV(D(D
 
 
 
 
  
 
(+OTV(D(D
 
 
 
 
  
 
(+OTV(D(D
 
 
 
 
 $'464619T$&!)__#<=oMNN$'464619T$&!)__#<=oMNN$'464619T$&!)__#<=oMNN

 ''8333333r   )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         c                    |                      || j                  }|                      || j                  }| j                            | j        | j        |z             | j                            | j        | j        |z             t          | j        | j        | j                  }| j	        |                      || j                  z  }| j	        |                      || j                  z  }| j	        |                      || j                  z  }	t          | j        |          t          | j        |          t          | j        |	          g}
t          |                    | j	                            |
k    sJ d S r%   )r   rI   r*   r_   r   r   r+   r   r   rM   r	   r!   rh   )r(   r   r   r   r   r   rN   pA_force_expectedpB_force_expectedpO_force_expectedr[   s              r   (test_static_pathway_on_cylinder_to_loadsz<TestWrappingPathway.test_static_pathway_on_cylinder_to_loadsG  sk   j ((88((88//////!$'47DMBB F4#:#:?;?6$C $C C F4#:#:?;?6$C $C C F4#:#:?;?6$C $C C $',--$',--$',--

 w//7788HDDDDDDr   c                    t          d          }| j        | j        j        z  }| j        t	          |          | j        j        z  t          |          | j        j        z  z   z  }| j                            | j	        |           | j
                            | j	        |           | j        t          |dz            z  }t          | j        j        |z
            dk    sJ d S )Nr   r.   r   )r   r   rI   r`   r   r   rt   r*   r_   r   r+   r   r   rN   ra   )r(   r   pA_pospB_posr[   s        r   "test_2D_pathway_on_cylinder_lengthz6TestWrappingPathway.test_2D_pathway_on_cylinder_length  s    3Q3q66$&(?:;((((((6$q!t**$+h6771<<<<<<r   c                    t          d          }t          dd          }| j        | j        j        z  }| j        t	          |          | j        j        z  t          |          | j        j        z  z   z  }| j                            | j	        |           | j
                            | j	        |           | j        t          |dz            |z  z  |z  }t          | j        j        |z
            dk    sJ d S )Nr   r/   r.   r   )r   r   rI   r`   r   r   rt   r*   r_   r   r+   r   r   rN   re   )r(   r   r   r   r   r[   s         r   .test_2D_pathway_on_cylinder_extension_velocityzBTestWrappingPathway.test_2D_pathway_on_cylinder_extension_velocity  s    3C##Q3q66$&(?:;((((((641::a<(+7(BCCqHHHHHHr   c                 f   t          d          }| j        | j        j        z  }| j        t	          |          | j        j        z  t          |          | j        j        z  z   z  }| j                            | j	        |           | j
                            | j	        |           | j        | j        j        z  }| j        t          |          | j        j        z  t	          |          | j        j        z  z
  z  }| j        t          |           | j        j        z  t	          |          dz
  | j        j        z  z   z  }t          | j        |          t          | j
        |          t          | j	        |          g}t          | j                            | j                            }||k    sJ d S )Nr   r/   )r   r   rI   r`   r   r   rt   r*   r_   r   r+   rM   r	   r!   rN   rh   )	r(   r   r   r   pA_forcepB_forcerz   r[   r    s	            r   $test_2D_pathway_on_cylinder_to_loadsz8TestWrappingPathway.test_2D_pathway_on_cylinder_to_loads  sX   3Q3q66$&(?:;((((((6$&(?63q66$&(?SVVDFH_<=6CFF7468+s1vvz468.CCD$'8$$$'8$$$'8$$
   5 5df = =>>      r   )$r}   r~   r   r)   r<   r   r   r9   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   g  s*
       8 8 8 V^D!!!
 
 "!
2 2 2 [U4[[OU4[[%%++uuT{{3	
 = = = [55;;U4[[$	
 . .  \.2 2 2 [F3KKN3N3N3!		
 < < <2 2 2) ) ). . . @ @ \@ [ 	2a4(aTT!WWHQJ2AbDF;!QaA61=	
 8 8 8 [ 	88Aq>>"#45
B'B'aTT!WWHQJ2AbDF;!QaA61=a!Q'$$q''((1a..)@!DQ((1a..+a//00 !Qa!Q!7;Q((1a..+a//00	
 (8 8) (8 ["a!Q/$$q''((1a..1H!LM!Qa!Q)?CD	
 / / / ["##aTT!WWHQJ23!QaA67a!Q/$$q''!Q?@!QaA67	
 / / / [KEaTT!WWHQJ*aDDGGAIq)dd1ggai$$q''!Q/ !QaA.aXXa^^OQ/$q''!XXa^^a/3	
 (4 4) (4< [KEEFaTT!WWHQJ*$q''!dd1ggXaZ+TT!WWQYQ	1- !QaA.aXXa^^OQ/$q''!XXa^^a/3 aDDGGAIq)aTT!WWHQJ*$q''!TT!WWQY]A. EaTT!WWHQJ*BttBBEM***Aqb2b!e8m1D1D/DEttAwwJrM1TT"r"a%x-%8%8#89ttAwwJrM1TT"r"a%x-%8%8#89ttBBEM*** ttAww{OB&$$rBr1uH}*=*=(=>dd1ggIbL!DDbQh$7$7"785)	
, ,ZE E[, ,ZE6= = =I I I! ! ! ! !r   r   )__doc__r<   sympyr   r   r   r   r   r   sympy.physics.mechanicsr	   r
   r   r   r   r   r   r   r   r   r   sympy.simplify.simplifyr   r!   r#   r   r   r   r   r   <module>r     s   B B                                          - , , , , ,  X9 X9 X9 X9 X9 X9 X9 X9veE eE eE eE eE eE eE eEPL! L! L! L! L! L! L! L! L! L!r   