
    \ho:                         S SK Jr  S SK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JrJrJrJrJrJr  S SKJr  \S 5       rg	)
    )pi)symbols)sqrt)acossincos)Matrix)ReferenceFramedynamicsymbolsKanesMethodinertiaPoint	RigidBodydot)slowc                    ^l [        S5      u  pp#[        SS5      u  pEpg[        S5      u  ppp[        SS5      u  pnnnn[        S5      u  nnnn[        S5      u  nnn[        S5      u  nnnn[        S5      u  nn n!n"[        S5      u  n#n$n%n&[        S	5      u  n'n(n)n*[        S
5      u  n+n,n-n.[        S5      n/U/R                  SSU U/R                  /5      n0U0R                  SSUU0R
                  /5      n1U1R                  SSUU-   U1R                  /5      n2[        S5      n3U2R                  SSU* U2R                  /5      n4U2R                  SSUU2R
                  /5      n5U5R                  SSU* U5R                  /5      n6[        S5      n7[        S5      n8U8R                  SUU1R                  -  5      n9U9R                  SUU2R                  -  5      n:U9R                  SU* U2R
                  -  UU2R                  -  -   5      n;U:R                  SU* U5R
                  -  UU5R                  -  -   5      n<U:R                  SUU5R
                  -  UU5R                  -  -   5      n=U=R                  SU[        U5R                  U0R                  5      U5R                  -  U0R                  -
  R                  5       -  5      n>U0R                  U/UU0R                  -  5        U1R                  U0U	U1R
                  -  5        U3R                  U2U
U2R                  -  5        U2R                  U1UU2R                  -  5        U5R                  U2UU5R
                  -  5        U7R                  U5UU5R                  -  5        U8R                  U/S5        U9R                  U8U/U35        U:R                  U9U/U25        U;R                  U9U/U25        U<R                  U:U/U55        U=R                  U:U/U55        U>R                  U=U/U75        [        U4U"U#U$SSU%5      U;4n?[        U6U&U'U(SSU)5      U<4n@[        U2UUU5      U94nA[        U5U U!U 5      U=4nB[        SU;U2U+U?5      nC[        SU<U5U,U@5      nD[        SU9U3U.UA5      nE[        S U=U7U-UB5      nFXH-
  XY-
  Xk-
  X|-
  /nGU>R!                  U/5      U0R
                  -  U>R!                  U/5      U0R                  -  U>R!                  U/5      U0R                  -  /nHU>R#                  U85      U0R                  -  /nIU;U+* U*-  U0R                  -  4U<U,* U*-  U0R                  -  4U=U-* U*-  U0R                  -  4U9U.* U*-  U0R                  -  4/nJUCUDUEUF/nK[%        U/XU/U/UIXU/XU/UHUGS!S"9	nLULR'                  UKUJ5      u  nMnNS#nOS$nP[(        S%-  [(        S&-  -
  R+                  5       nQS'nRUR[-        UQ5      -  UP[/        UQ5      -  -
  * R+                  5       nSS(nTS#nUS)nVS)nWS*nXUT[-        UQ5      -  USUPUO-
  [/        UQ5      -  -
  -
  R+                  5       nYUVUO-
  UU[-        UQ5      -  [/        UQ5      -  -
  [-        UQ5      -  R+                  5       nZUU[-        UQ5      -  UVUO-
  UU[-        UQ5      -  [/        UQ5      -  -
  [/        UQ5      -  -   R+                  5       n[UXUP-
  n\UTUW-
  n][1        U\S%-  U]S%-  -   5      R+                  5       n^UT[/        UQ5      -  UPUO-
  [-        UQ5      -  -
  R+                  5       n_USU^[-        [(        S%-  UQ-
  [3        U\U^-  5      -
  5      -  -   R+                  5       n`U^[/        [(        S%-  UQ-
  [3        U\U^-  5      -
  5      -  U_-
  R+                  5       na[        S+5      nb0 UUP_UUO_UUQ_UUS_UU__UUY_UUa_UU`_UUZ_UU[_US,_US-_U S._U!S/_U&S0_U'S1_U(S2_0 U)S3_U"S4_U#S5_U$S6_U%S7_U,S8_U+S9_U-S:_U.S%_U*S;_U S_US_US_US_US_U	S_U
UbUO-  _EUSUSUUbUP-  0EncULR5                  S<0 UR7                  5       S_U	R7                  5       S_U
R7                  5       S_UR7                  5       S_UR7                  5       S_UR7                  5       S_US_U	S_U
UbUO-  _US_US_UUbUP-  _U S_US_US_US_S!S=9u  ndnenfUdR9                  Uc5      ngUeR9                  Uc5      nhUgR+                  5       ngUhR+                  5       nhUgR;                  / S>Q/ S>Q5      nd[=        / S?Q/ S@QSASBUbS%-  -  SC-
  SDUb-  SEUb-  /SFSGUbS%-  -  SH-   SIUb-  SJUb-  //5      niSKml[?        SL5       HD  njWiRA                  WbUj5      WdRA                  UbUj5      -
  nk[C        Ul4SM jUk 5       5      (       a  MD   e   g )NNzq1 q2 q4 q5   zu1 u2 u3 u4 u5 u6zWFrad WRrad htangle forkoffsetzforklength framelength forkcg1zforkcg3 framecg1 framecg3 Iwr11zIwr22 Iwf11 Iwf22 Iframe11z"Iframe22 Iframe33 Iframe31 Ifork11zIfork22 Ifork33 Ifork31 gzmframe mfork mwf mwrNYAxisRFrameWR	TempFrameForkTempForkWFWR_contWR_mcSteerFrame_mcFork_mcWF_mcWF_contr   	BodyFrameBodyForkBodyWRBodyWFCRAMER)q_indq_dependentconfiguration_constraintsu_indu_dependentvelocity_constraintskd_eqsconstraint_solverg333333?gffffff?   
   g{Gz?gRQ?g?gffffff?vg?߮?gQ?gCl?gQ?g)"*?gQ?gwJ|?g<~?gffffff"@   gffffff@g333333   U      gQ#@T)A_and_Bop_pointlinear_solver)r   r2   r8      )r   r         ?r   )r   r   r   r=   g'^"@gltggWI?g>g{_*'տgE_p'@g%g>@gHj@gaGͭg-q=   c              3   @   >#    U  H  n[        U5      T:  v   M     g 7f)N)abs).0xepss     `/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/mechanics/tests/test_kane3.py	<genexpr>test_bicycle.<locals>.<genexpr>;  s     /A3q6C<s   )"r   r   r
   	orientnewzrB   yr   	locatenewr   	normalizeset_ang_velset_velv2pt_theoryr   r   velpos_fromr   kanes_equationsr   evalfr   r   r   r   	linearizediffxreplaceextractr	   rangesubsall)mq1q2q4q5q1dq2dq4dq5du1u2u3u4u5u6u1du2du3du4du5du6dWFradWRradhtangle
forkoffset
forklengthframelengthforkcg1forkcg3framecg1framecg3Iwr11Iwr22Iwf11Iwf22Iframe11Iframe22Iframe33Iframe31Ifork11Ifork22Ifork33Ifork31gmframemforkmwfmwrr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Frame_IFork_IWR_IWF_Ir%   r&   r'   r(   kdconlist_speedconlist_coordFLBLKMfrfrstarPaperRadRearPaperRadFrontHTA
TrailPaperrakePaperWbPaperFrameCgXPaperFrameCgZPaperForkCgXPaperForkCgZFrameLengthFrameCGNorm
FrameCGPartempatempbtempc
PaperForkL
ForkCGNorm	ForkCGParr4   val_dictAB_A_sB_sResierrorrC   sm                                                                                                               @rD   test_bicycler      s   , $M2NBB'q9Cc+,?@BBB#12Eq#I Cc3S )00P(Q%E5':'./O'P$JW)01R)S&GXx$+,H$I!E5%,34X,Y)Hh'#*+F#G GWgq%&<=FE3 	sA	C"acc+A	C"acc+AKK"w,)<=E		BVwh5HII??66B=9D~~j&G8TVV2DEH		B IGguqss{3EOOG[577%:;EzX:+?-5-?,@ AHooi7TVV);+2TVV+;*< =GOOGZ$&&%8:;N%NOEooi#dffacc2BTVV2K23##367@y{*C DG MM!R!##XMM!R!##XNN5"uww,'	aegg&UBK(NN4dff%
 OOAq	gq"%	eQ&5)q$'	eQ%q"% y(Hh1hOQYZGh'1aI7SFE5%/7DD%.6D +xHIWdE6BHxC6FxC6F (CHch	1B [[^acc)7;;q>ACC+?QRSRURUAUVM %%g.45M fWq[133&
'	5&1*qss"#	q133	q133
!B Xvv	.B 
Qrrl2,=&
(B %%b"-LR (+L'+M(*Qb(8'?'?'AC'+J*4SX*=}SQTX?U*V(W'^'^'`D'+G'*M'*M'*L'*L(/C(8$l@Z\_`c\d?d:d(e'l'l'nK)6)E}UXY\U]G]_bcf_gFg)gilmpiq(q'x'x'zK(5C(@MT`D`cpsvwzs{c{  B  CF  G  dG  EG  KN  OR  KS  DS  )S  (Z  (Z  (\J(4}(DE(/(<E(,UAXeQh->(?'F'F'HE(/C(8-:TVYZ]V^9^(^'e'e'gJ(,ec"Q$s(4eCT:T6U.U(V']']'_J(-RT#XtE%K?P4P0Q(QR\(\'c'c'eI 	A$'} $'|$'$' D$' J	$'
 [$' $' $' +$' *$' v$' t$' v$' t$' $' $'  !$'" #$'$ #%$'& "'$'( #)$'* $+$', q-$'. /$'0 Q1$'2 Q3$'4 45$'6 A7$'8 A9$': A;$'< A=$'> A?$'@ AA$'B A$C$'D AAA%I$'H\ ll
 GGIq	

 GGIq
 GGIq
 GGIq
 GGIq
 GGIq
 
 
 L 
 
 
 M!
  !
" #
$ %
& '
* /  GAq!: **X
C
**X
C
))+C
))+C 	L,/A }}#%71%<?P%PRdefRfhz{|h|}#'8A'=@P'PTdefTfiz{|i|} @C C1XA1-//////     N)sympy.core.numbersr   sympy.core.symbolr   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   r   r   sympy.matrices.denser	   sympy.physics.mechanicsr
   r   r   r   r   r   r   sympy.testing.pytestr   r    r   rD   <module>r      sA    ! % 9 C C '* * * & n0 n0r   