
    MZd"                         d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ ej<                  Zd Z d Z!d Z"d Z#d Z$d Z%d Z&y)    )expand)symbols)cossin)Matrix)trigsimp)PinJointJointsMethodBodyKanesMethodPrismaticJointLagrangesMethodinertia)dynamicsymbolsReferenceFrame)raises)zeros)lambdify)solvec                  |   t        d      } t        d      }t        d| |      }t        d      \  }}t        d      \  }}| j	                  || j
                  z         t        | |      }|j                  | j                  k(  sJ |j                  || gk(  sJ |j                  | j                  || j                  j
                  z  fgk(  sJ |j                  t        |g      k(  sJ |j                  t        |g      k(  sJ |j                  t        ||j                         z
  g      k(  sJ |j!                         }|t        | |j                         z  gg      k(  sJ |j"                  t        |gdgg      k(  sJ |j$                  t        ddgd|gg      k(  sJ t'        |j(                  t*              sJ y )NPCP1zC_ixx gz
q_P1, u_P1r      )r   r	   r   r   apply_forceyr
   framebodiesloads
masscenterqr   ukdesdiff	form_eomsforcing_fullmass_matrix_full
isinstancemethodr   )	r   r   PinC_ixxgr!   r"   r)   solns	            Q/usr/lib/python3/dist-packages/sympy/physics/mechanics/tests/test_jointsmethod.pytest_jointsmethodr/      s   S	AS	A
4A
Cy!HE1,'DAqMM!ACC%!S!F<<177"""==QF"""<<Q\\1QWWYY;7888888vqc{"""88vqc{""";;&!affh,0000D6UF1668O,-....&1#s"4444""fq!fq%j-A&BBBBfmm[111    c                     t        d      t        d      } t        d      }t        d      \  }}t        d| |      t        d| ||      t	        t
        fd       t        d| |      t        d| ||      t	        t
        fd	       t        d| ||      t        d| |||      t	        t
        fd
       y )Nr   r   Tzq ur   P2c                      t               S Nr
   r   r   r3   s   r.   <lambda>z?test_jointmethod_duplicate_coordinates_speeds.<locals>.<lambda>-       |Ar26 r0   )speedsc                      t               S r5   r6   r7   s   r.   r8   z?test_jointmethod_duplicate_coordinates_speeds.<locals>.<lambda>1   r9   r0   c                      t               S r5   r6   r7   s   r.   r8   z?test_jointmethod_duplicate_coordinates_speeds.<locals>.<lambda>5   r9   r0   )r   r   r	   r   r   
ValueError)r   r2   r!   r"   r   r   r3   s       @@@r.   -test_jointmethod_duplicate_coordinates_speedsr>   &   s    S	AS	AS	A% DAq	$1a	 B	aA	&B
:67	$1Q	'B	a1	-B
:67	$1a	#B	aAq	)B
:67r0   c                     t        d      \  } }t        d      \  }}t        d      \  }}}t        d      }t        d|      }t        d|      }	t        d|||| | |j                  z  |j
                  	      }
t        d
||	||| |	j                  z  |j
                  	      }|j                  ||z  |j                  z         |	j                  ||z  |j                  z         t        ||
|      }|j                          t        |j                        t        g dg dddd|dz  z  |z  t        |      z  d|dz  z  |z  z   |dz  |z  t        |      z  |dz  |z  z   gdd|dz  |z  t        |      z  |dz  |z  z   |dz  |z  gg      k(  sJ t        |j                        t        t        |g|g| |z  |z  t        | |z         t        |       z   z  ||z  |z  t        |       z  z
  |dz  |z  d|z  |z   z  |z  t        |      z  z   g| |z  |z  t        | |z         z  |dz  |z  |dz  z  t        |      z  z
  gg            k(  sJ y )Nzq1 q2zu1 u2zm l gr   r   massRJ1r:   coordinateschild_point
joint_axisJ2)r   r   r   r   )r   r   r   r   r         )r   r   r   r	   xzr   r
   r%   r   r'   r   r   r   r&   r   )q1q2u1u2mlr,   r   PartPPartRrC   rH   r)   s                r.   $test_complete_simple_double_pendulumrU   7   s   G$FBG$FBgGAq!S	A1E1E	$5 bjQSS
:B	$uRR bjUWW
>B 
ac!##g	ac!##g!R$F
&))*fl6B78!Qq!tVAXc"g=MPQRSUVRVPVWXPX=XZ[]^Z^_`Z`adegahZhklnokopqkqZq6r78!QT!VCG^aQRdSTf=TVWYZVZ[\V\6]6_ /` ` ` ` F''(HVbTB41"Q$q&RUVX[]V]R^adegahRhJi+,Q3q5R=K9;<a461R4"9;Mb;PQTUWQX;XKY JZ,-2a46#b2g,+>AaAcRTgAU+U*V=X 6Y -Z Z Z Zr0   c                  R   t        d      \  } }}}t        d      \  }}}}}t        d      }	t        d|      }
t        d|      }t        d|	|
| |      }t        d	|
|||      }|	j	                  || z  |	j
                  z  |

       |	j	                  ||z  |	j
                  z  |

       |
j	                  ||z  |	j
                  z  |
       |
j	                  ||z  |	j
                  z  |
       t        |	||      }|j                          |j                  }|j                  }|j                  |      }t        |d         t        | | z  ||z  z
  ||z  z   ||z  z   |z        k(  sJ t        |d         t        || z  ||z  z   d|z  |z  z
  d|z  |z  z
  |z        k(  sJ y )Nzq1 q2 u1 u2zm c1 c2 k1 k2WB1r@   B2rC   )rE   r:   rH   )reaction_bodyr   r   rI   )r   r   r   r   r   rK   r
   r%   mass_matrixforcingLUsolver   )rM   rN   rO   rP   rQ   c1c2k1k2rW   rX   rY   rC   rH   r)   MMr\   rhss                     r.   test_two_dof_jointsrd   Q   s   #M2NBB0Ar2r2S	A	d	B	d	B	aB	?B	b""R	@BMM"R%)2M.MM"R%)2M.NN2b59BN/NN2b59BN/!R$F
			BnnG
**W
C#a&>VbS2XR%7"r'%ABG%KQ$NOOOO#a&>VR"WrBw%6R"%Dq$&H')+H, &,/0%1 2 2 2 2r0   c            	         t        d      \  } }}t        d      }t        d|      }t        d      }t        d|||j	                  t
              ||  |j                  z  |j                        }| |z  | z  t        |      z  |_	        t        ||      }|j                  t               |j                         }|d   | t        |      z  | z  k(  sJ y )	Nzl m gr   br@   r!   r   rD   r   )r   r   r   r	   r$   trK   rL   r   potential_energyr
   r%   r   rc   r   )	rR   rQ   r,   r   rf   r!   r   r)   rc   s	            r.   test_simple_pedulumri   f   s    gGAq!S	ASqAsAa166!9!R!##X!##	7Aq1s1v-A!QF
_%
**,Cq6aRAYq[   r0   c                     t        d      \	  } }}}}}}}}t        d      \  }	}
}}t        d      }t        d      }t        d| |t	        |||d            }t        d||t	        ||||            }t        d	      }t        d
|||	|| |j                  z  |j                        }t        d|||
|||z
  |j                  z  |j                        }|j                  | |z  |j                  z         |j                  ||z  |j                  z         t        |||      }|j                          |j                  }|j                  }|j                  |      }d|z  |z  |z  t        |
      z  t        |
      z  d|z  |z  |z  t        |
      z  t        |
      z  z   ||z  | z  t        |	      z  z
  ||z  |z  t        |	      z  z
  ||t        |
      dz  z  z   |t        |
      dz  z  z   |dz  | z  z   |dz  |z  z   z  }|d   |z
  j!                         dk(  sJ ||z
  |dz  z  t        |
      z  t        |
      z  |z  }|d   |z
  j!                         dk(  sJ y )Nz)mA, mB, lA, lB, IAxx, IBxx, IByy, IBzz, gztheta phi omega alphaABrodr   )rA   r   central_inertiaplater   rC   )rE   r:   rF   rG   rH   )rE   r:   parent_pointrG   rI   r   )r   r   r   r   r   r	   rL   r   r   r
   r%   r[   r\   r]   r   r   simplify)mAmBlAlBIAxxIBxxIByyIBzzr,   thetaphiomegaalphark   rl   rm   ro   r   rC   rH   r)   rb   r\   rc   xds                            r.   test_chaos_pendulumr   s   s   078c0d-BBD$dA-.EFE3usAsA
u2Q4q8Q
RCrGAtTSW<XYES	A	$3E%!cCEEkacc
;B	$UE "R3550SUU
DB OOBqDH	bd133h!R$F
			BnnG
**W
C
t)e
e
#c#h
.S
9AHu<Lu<TWZ[^W_<_H= 2v{SZ/023b&2+E
2JKOSVZC!W P"SXq[0P135q52:P>@BA
PK
LB FRK!!#q(((
+	!CH	,s3x	7$	>BFRK!!#q(((r0   c                    ) t        d      \  } }}}}}t        d      \  }}}}	}
t        d      }||||	fD cg c]  }t        |dd|
|dz  z  dz         }}t	        d||
|z  |d         }t	        d	|
|z  |d
         }t	        d|
|z  |d         }t	        d|
|	z  |d         }t        d||| ||j                  |dz  |j                  z  | dz  |j                  z        }t        d|||||j                  |dz  |j                  z  | dz  |j                  z        }t        d|||||j                  |dz  |j                  z  |	 dz  |j                  z        }|j                  j                  |j                        |dz  |j                  z  z   |	dz  |j                  z  z   }t        |j                  |j                        |j                  |j                        g      }t        ||||      }t         j                  }t        |j                   | j#                  |      |j#                  |      |j#                  |      g      }|j#                  |      j%                  |      }t'        |j(                  | g|g||g||g|j                   |||j*                  |j,                  
      }|j/                         \  }}|t1        d
      k(  sJ t        ||||	|
g      }t        | ||g      }t        |||g      } t3        ||f|j4                        }!t3        || |f|j6                        }"t3        || |f|      }#g d}$g d}%g d}&t        g dg dg dg      }'t        dgdgdgg      }(d)t9        )fd |#|%|&|$      D              sJ t9        )fdt         |!|%|$            |'z
  D              sJ t9        )fd t         |"|%|&|$            |(z
  D              sJ y c c}w )!Nz
q1:4, u1:4z	l1:5, rhoNr   rJ      Link1)r   rA   rn   Link2r   )rA   rn   Link3rI   Link4rC   )rE   r:   rG   rp   rF   rH   J3)	q_indu_indq_dependentu_dependentkd_eqsconfiguration_constraintsvelocity_constraints	forcelistr   )gp=
ף?gQ?gzG?g(\?i  )g @gtM)L?gF!8@)g?g68[ƿgൄ?)gDwCA@g_'@gY>)g    gTB?gv1?)g_r=
ףg0 Sg;?gLgd`Egop]?g|=c              3   :   K   | ]  }t        |      k    y wr5   abs.0rK   epss     r.   	<genexpr>z@test_four_bar_linkage_with_manual_constraints.<locals>.<genexpr>   s     Fs1v|F   c              3   :   K   | ]  }t        |      k    y wr5   r   r   s     r.   r   z@test_four_bar_linkage_with_manual_constraints.<locals>.<genexpr>   s      >s1v| >r   c              3   :   K   | ]  }t        |      k    y wr5   r   r   s     r.   r   z@test_four_bar_linkage_with_manual_constraints.<locals>.<genexpr>   s      Is1v| Ir   )r   r   r   r   r   r	   rL   rK   r    pos_fromr   dotr   r
   _tr   r#   r$   subsr   r   r   r   kanes_equationsr   r   r[   r\   all)*rM   rN   q3rO   rP   u3l1l2l3l4rhor   rR   inertiaslink1link2link3link4joint1joint2joint3loopfhr)   rg   qdotsfhdkanefrfrspr!   r"   eval_meval_feval_fhdp_valsq_valsu_vals
mass_checkforcing_checkr   s*                                            @r.   -test_four_bar_linkage_with_manual_constraintsr      s   +L9BBB!+.BBCsA>@"b"=MN1aqAv!23NHNb(1+NEsRx!EEsRx!EEsRx!EEeU2%''!Vegg%B37UWW3DFF eU2%''!Vegg%B37UWW3DFF eU2%''!Vegg%B37UWW3DFF $$U%5%56!Vegg "Q 01D 
%''"DHHUWW$56	7B%8FA&++
BGGAJ
CDE
''!*//%
 Cv||B4t$&8"b$kkR,/6<<$mm	-D
 ""$GBq>> 	BB$%AB|AB|Aq!fd../Fq!Qi.FAq	3'H*F9F<F 211	2 3J /0././1 2M CFXfff%EFFFF >vff-.;> > > > Ivfff56FI I I Iw Os   O(N)'sympy.core.functionr   sympy.core.symbolr   (sympy.functions.elementary.trigonometricr   r   sympy.matrices.denser   sympy.simplify.trigsimpr   sympy.physics.mechanicsr	   r
   r   r   r   r   r   sympy.physics.vectorr   r   sympy.testing.pytestr   sympy.core.backendr   sympy.utilities.lambdifyr   sympy.solvers.solversr   r   rg   r/   r>   rU   rd   ri   r   r    r0   r.   <module>r      si    & % ? ' ,N N N ? ' $ - ' 2(8"Z42*!)@AIr0   