Ë
    7^(h#/  ã                   óÆ   — d dl mZmZmZmZmZmZmZ d dlm	Z	m
Z
mZmZ d dlmZmZ d dlmZmZ 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„ Zd„ Z d„ Z!d„ Z"d„ Z#y)é    )ÚSymbolÚsymbolsÚsinÚcosÚMatrixÚzerosÚsimplify)ÚPointÚReferenceFrameÚdynamicsymbolsÚDyadic)ÚinertiaÚBody)ÚraisesÚwarns_deprecated_sympyc            
      ó@  — t        «       5  t        d«      } d d d «        j                  dk(  sJ ‚| j                  g k(  sJ ‚t	        d«      }|j                  | j                  d«       | j                  }| j                  }|j                  |«      |j                  |«      k(  sJ ‚| j                  t        d«      k(  sJ ‚t        d«      \  }}}t        d«      \  }}}	| j                  t        | j                  ||||||	«      | j                  fk(  sJ ‚y # 1 sw Y   ŒþxY w)NÚbodyÚbody_masscenterr   Ú	body_masszbody_ixx body_iyy body_izzzbody_ixy body_iyz body_izx)r   r   ÚnameÚloadsr
   Úset_velÚframeÚ
masscenterÚvelÚmassr   r   r   )
r   ÚpointÚcomr   ÚixxÚiyyÚizzÚixyÚiyzÚizxs
             úe/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/physics/mechanics/tests/test_body.pyÚtest_defaultr&      s
  € Ü	Ó	!ñ Ü�F‹|ˆ÷à�9‰9˜ÒÐÐØ�:‰:˜ÒÐÐÜÐ#Ó$€EØ	‡M�M�$—*‘*˜aÔ Ø
�/‰/€CØ�J‰J€EØ�7‰7�5‹>˜UŸY™Y uÓ-Ò-Ð-Ð-Ø�9‰9œ˜{Ó+Ò+Ð+Ð+ÜÐ8Ó9�M€CˆˆcÜÐ8Ó9�M€CˆˆcØ�<‰<œG D§J¡J°°S¸#¸sÀCÈÓMØ ŸO™Oð-ò -ð -ñ -÷ð ús   ‹DÄDc                  óz  — t        d«      } t        d«      }t        d«      }t        |ddd«      }t	        «       5  t        d| |||«      }d d d «       j                  }|j                  }| j                  |d«       |j                  |«      | j                  |«      k(  sJ ‚|j                  |«      | j                  |«      k(  sJ ‚|j                  |k(  sJ ‚|j                  || fk(  sJ ‚|j                  sJ ‚t        |d«      sJ ‚t        |d«      sJ ‚t        |d	«      sJ ‚t        |d
«      sJ ‚y # 1 sw Y   ŒèxY w)NÚrigidbody_masscenterÚrigidbody_massÚrigidbody_frameé   r   Úrigidbody_bodyr   r   r   r   )r
   r   r   r   r   r   r   r   r   r   Úpos_fromr   Úis_rigidbodyÚhasattr)r(   r)   r*   Úbody_inertiaÚ
rigid_bodyr   r   s          r%   Útest_custom_rigid_bodyr2      sS  € ä Ð!7Ó8ÐÜÐ,Ó-€NÜ$Ð%6Ó7€OÜ˜?¨A¨q°!Ó4€LÜ	Ó	!ñ IÜÐ*Ð,@Ø(¨/¸<óIˆ
÷Ið ×
Ñ
€CØ×Ñ€EØ× Ñ  °!Ô4Ø�7‰7�5‹>Ð1×5Ñ5°eÓ<Ò<Ð<Ð<Ø�<‰<˜ÓÐ 4× =Ñ =¸cÓ BÒBÐBÐBà�?‰?˜nÒ,Ð,Ð,Ø×Ñ ,Ð0DÐ!EÒEÐEÐEà×"Ò"Ð"Ð"ä�:˜|Ô,Ð,Ð,Ü�:˜vÔ&Ð&Ð&Ü�:˜wÔ'Ð'Ð'Ü�:˜yÔ)Ð)Ñ)÷#Ið Iús   ºD1Ä1D:c                  ó²  — t        d«      } t        d«      }t        d«      }t        «       5  t	        d| ||«      }d d d «       j
                  }|j                  }| j                  |d«       |j                  |«      | j                  |«      k(  sJ ‚|j                  |«      | j                  |«      k(  sJ ‚|j                  |k(  sJ ‚t        |d«      rJ ‚t        |d«      sJ ‚t        |d«      sJ ‚t        |d	«      sJ ‚|j                  t        d«      |j
                  fk(  sJ ‚|j                  t        d«      k(  sJ ‚|j                  rJ ‚t        |d
d
d
«      |_        |j                  t        |d
d
d
«      k(  sJ ‚|j                  sJ ‚t        «       5  t	        d|¬«      }d d d «       |j                  rJ ‚|j
                  j!                  d|j"                  «      }|t        |j                  dd
d
«      z  }||f|_        |j                  ||fk(  sJ ‚|j                  t        d«      k(  sJ ‚|j                  sJ ‚y # 1 sw Y   �ŒxY w# 1 sw Y   ŒªxY w)NÚparticle_masscenterÚparticle_massÚparticle_frameÚparticle_bodyr   Ú_inertiar   r   r   r+   )r   r   )r
   r   r   r   r   r   r   r   r   r-   r   r/   r   r   Úcentral_inertiar.   Ú	locatenewÚx)r4   r5   r6   r7   r   r   r   Úpoint_inertias           r%   Útest_particle_bodyr=   3   s\  € äÐ 5Ó6ÐÜ˜?Ó+€MÜ#Ð$4Ó5€NÜ	Ó	!ñ <Ü˜_Ð.AØ*¨Nó<ˆ÷<ð ×
"Ñ
"€CØ×Ñ€EØ×Ñ °Ô2Ø�7‰7�5‹>Ð0×4Ñ4°UÓ;Ò;Ð;Ð;Ø�<‰<˜ÓÐ 3× <Ñ <¸SÓ AÒAÐAÐAà×Ñ Ò.Ð.Ð.Ü�} jÔ1Ð1Ð1Ü�= 'Ô*Ð*Ð*Ü�= ,Ô/Ð/Ð/Ü�= &Ô)Ð)Ð)Ø× Ñ ¤V¨A£Y°×0HÑ0HÐ$IÒIÐIÐIØ×(Ñ(¬F°1«IÒ5Ð5Ð5Ø×)Ò)Ð)Ð)ä$+¨N¸A¸qÀ!Ó$D€MÔ!Ø×(Ñ(¬G°NÀAÀqÈ!Ó,LÒLÐLÐLØ×%Ò%Ð%Ð%ä	Ó	!ñ BÜ˜_°=ÔAˆ÷Bà×)Ò)Ð)Ð)Ø×$Ñ$×.Ñ.¨w¸¿¹ÓH€EØ!¤G¨M×,?Ñ,?ÀÀAÀqÓ$IÑI€MØ*¨EÐ2€MÔØ× Ñ  ]°EÐ$:Ò:Ð:Ð:Ø×(Ñ(¬F°1«IÒ5Ð5Ð5Ø×%Ò%Ð%Ñ%÷=<ñ <ú÷,Bð Bús   ¬I ÆIÉ I
ÉIc                  óÞ  — t        d«      } t        d«      }t        d«      }t        «       5  t	        d| ||«      }d d d «       t        d«      }|j
                  j                  z  }|j                  ||j                  «       t        |j                  «      dk(  sJ ‚|j                  j                  |j                  dz   d«      }|j                  |j
                  d«       |j                  d   d   }|j
                  }|j                  |«      |j                  |«      k(  sJ ‚|j                  |«      |j                  |«      k(  sJ ‚|j                  d   d   |k(  sJ ‚y # 1 sw Y   �Œ)xY w)	Nr4   r5   r6   r7   Úar+   Ú_point0r   )r
   r   r   r   r   r   r;   Úapply_forcer   Úlenr   r:   Ú_namer   r   r-   )	r4   r5   r6   r7   r?   Úforce_vectorr   Úforce_pointr   s	            r%   Útest_particle_body_add_forcerF   Y   s\  € äÐ 5Ó6ÐÜ˜?Ó+€MÜ#Ð$4Ó5€NÜ	Ó	!ñ <Ü˜_Ð.AØ*¨Nó<ˆ÷<ô 	ˆs‹€AØ�}×*Ñ*×,Ñ,Ñ,€LØ×Ñ˜l¨M×,DÑ,DÔEÜˆ}×"Ñ"Ó# qÒ(Ð(Ð(Ø×$Ñ$×.Ñ.Ø×Ñ˜iÑ'¨ó,€Eà	‡M�M�-×%Ñ% qÔ)Ø×%Ñ% aÑ(¨Ñ+€Kà×Ñ€EØ�?‰?˜5Ó! U§Y¡Y¨uÓ%5Ò5Ð5Ð5Ø×Ñ Ó,°·±¸{Ó0KÒKÐKÐKà×Ñ˜qÑ! !Ñ$¨Ò4Ð4Ñ4÷#<ñ <ús   ¬E"Å"E,c                  óè  ‡	‡
— t        d«      } t        d«      }t        d«      }t        |ddd«      }t	        «       5  t        d| |||«      Š
d d d «       t        d«      }t        d«      }‰
j                  j                  d	|‰
j                  j                  z  «      }|j                  ‰
j                  d«       |‰
j                  j                  z  Š	‰
j                  ‰	|«       t        ‰
j                  «      dk(  sJ ‚‰
j                  d   d   }‰
j                  }|j                  |«      |j                  |«      k(  sJ ‚|j!                  |«      |j!                  |«      k(  sJ ‚‰
j                  d   d   ‰	k(  sJ ‚‰
j                  ‰	«       t        ‰
j                  «      d
k(  sJ ‚‰
j                  d   d   ‰	k(  sJ ‚t#        t$        ˆ	ˆ
fd„«       t#        t$        ˆ
fd„«       y # 1 sw Y   �Œ�xY w)Nr(   r)   r*   r+   r   r,   ÚlÚFaÚrigidbody_body_point0é   c                  ó(   •— ‰j                  ‰ d«      S ©Nr   ©rA   )rD   r1   s   €€r%   ú<lambda>z%test_body_add_force.<locals>.<lambda>�   s   ø€ ˜j×4Ñ4°\ÀAÓF€ ó    c                  ó&   •— ‰ j                  d«      S rM   rN   )r1   s   €r%   rO   z%test_body_add_force.<locals>.<lambda>‘   s   ø€ ˜j×4Ñ4°QÓ7€ rP   )r
   r   r   r   r   r   r   r:   r   r;   r   ÚzrA   rB   r   r   r-   r   Ú	TypeError)r(   r)   r*   r0   rH   rI   r   rE   r   rD   r1   s            @@r%   Útest_body_add_forcerT   r   sÝ  ù€ ä Ð!7Ó8ÐÜÐ,Ó-€NÜ$Ð%6Ó7€OÜ˜?¨A¨q°!Ó4€LÜ	Ó	!ñ IÜÐ*Ð,@Ø(¨/¸<óIˆ
÷Iô 	ˆs‹€AÜ	�‹€BØ×!Ñ!×+Ñ+ØØ	ˆJ×Ñ×ÑÑó €Eð 
‡M�M�*×"Ñ" AÔ&Ø˜
×(Ñ(×*Ñ*Ñ*€Là×Ñ˜<¨Ô/Üˆz×ÑÓ  AÒ%Ð%Ð%Ø×"Ñ" 1Ñ% aÑ(€KØ×Ñ€EØ�?‰?˜5Ó! U§Y¡Y¨uÓ%5Ò5Ð5Ð5Ø×Ñ Ó,°·±¸{Ó0KÒKÐKÐKØ×Ñ˜AÑ˜qÑ! \Ò1Ð1Ð1à×Ñ˜<Ô(Üˆz×ÑÓ  AÒ%Ð%Ð%Ø×Ñ˜AÑ˜qÑ! \Ò1Ð1Ð1ä
Œ9ÔFÔGÜ
Œ9Ó7Õ8÷3Iñ Iús   ¼G'Ç'G1c                  óB  ‡— t        «       5  t        d«      Šd d d «       ‰j                  j                  } ‰j	                  | «       t        ‰j                  «      dk(  sJ ‚‰j                  d   ‰j                  | fk(  sJ ‚t        t        ˆfd„«       y # 1 sw Y   Œ~xY w)Nr   r+   r   c                  ó&   •— ‰ j                  d«      S rM   )Úapply_torque)r   s   €r%   rO   z&test_body_add_torque.<locals>.<lambda>›   s   ø€ ˜d×/Ñ/°Ó2€ rP   )	r   r   r   r;   rW   rB   r   r   rS   )Útorque_vectorr   s    @r%   Útest_body_add_torquerY   “   s‚   ø€ Ü	Ó	!ñ Ü�F‹|ˆ÷à—J‘J—L‘L€MØ×Ñ�mÔ$äˆt�z‰z‹?˜aÒÐÐØ�:‰:�a‰=˜TŸZ™Z¨Ð7Ò7Ð7Ð7Ü
Œ9Ó2Õ3÷ð ús   ŒBÂBc                  ó’  — t        «       5  t        d«      } d d d «       t        d«      }t        «       5  t        d|¬«      }d d d «        j                  j	                  ||j
                  «       | j                  «      |j
                  k(  sJ ‚| j                  |«      |j
                  k(  sJ ‚y # 1 sw Y   Œ›xY w# 1 sw Y   Œ|xY w©NÚAÚNÚB©r   )r   r   r   r   r   rR   Úmasscenter_vel©r\   r]   r^   s      r%   Útest_body_masscenter_velrb   �   s©   € Ü	Ó	!ñ Ü�‹Iˆ÷ä�sÓ€AÜ	Ó	!ñ Ü�˜AÔˆ÷à‡L�L×Ñ˜˜AŸC™CÔ Ø×Ñ˜AÓ !§#¡#Ò%Ð%Ð%Ø×Ñ˜AÓ !§#¡#Ò%Ð%Ñ%÷ð ú÷ð ús   ‹B1´B=Â1B:Â=Cc                  óÔ  — t        «       5  t        d«      } d d d «       t        d«      }t        «       5  t        d|¬«      }d d d «        j                  j	                  ||j
                  «       | j                  «      |j
                  k(  sJ ‚|j                  | «      |j
                   k(  sJ ‚| j                  |«      |j
                  k(  sJ ‚y # 1 sw Y   Œ¼xY w# 1 sw Y   Œ�xY wr[   )r   r   r   r   Úset_ang_velÚyÚ
ang_vel_inra   s      r%   Útest_body_ang_velrg   §   s¿   € Ü	Ó	!ñ Ü�‹Iˆ÷ä�sÓ€AÜ	Ó	!ñ Ü�˜AÔˆ÷à‡G�G×Ñ˜˜1Ÿ3™3ÔØ�<‰<˜‹?˜aŸc™cÒ!Ð!Ð!Ø�<‰<˜‹?˜qŸs™s˜dÒ"Ð"Ð"Ø�<‰<˜‹?˜aŸc™cÒ!Ð!Ñ!÷ð ú÷ð ús   ‹C´CÃCÃC'c                  ó4  — t        «       5  t        d«      } t        d«      }d d d «        j                  j                  j                  |j                  j                  d«       | j                  |«      t        t        d«      t        d«      dgt        d«       t        d«      dgg d¢g«      k(  sJ ‚| j                  |j                  «      t        t        d«      t        d«      dgt        d«       t        d«      dgg d¢g«      k(  sJ ‚y # 1 sw Y   ŒíxY w)Nr\   r^   é
   r   )r   r   r+   )	r   r   r   Úorient_axisrR   Údcmr   r   r   )r\   r^   s     r%   Útest_body_dcmrl   ²   sÝ   € Ü	Ó	!ñ Ü�‹IˆÜ�‹Iˆ÷ð ‡G�G×Ñ˜Ÿ™ §¡§¡¨BÔ/Ø�5‰5�‹8”v¤ B£¬¨R«°!Ð4¼¸B»°xÄÀRÃÈ!Ð6LÊiÐXÓYÒYÐYÐYØ�5‰5�—‘‹>œV¤c¨"£g¬s°2«w¸Ð%:¼cÀ"»g¸XÄsÈ2ÃwÐPQÐ<RÒT]Ð$^Ó_Ò_Ð_Ñ_÷ð ús   ‹DÄDc                  ó  — t        d«      } t        «       5  t        d| ¬«      }d d d «       j                  | j                  k(  sJ ‚|j                  | j                  k(  sJ ‚|j
                  | j
                  k(  sJ ‚y # 1 sw Y   Œ[xY w)Nr]   r^   r_   )r   r   r   r;   re   rR   )r]   r^   s     r%   Útest_body_axisrn   º   so   € Ü�sÓ€AÜ	Ó	!ñ Ü�˜AÔˆ÷à�3‰3�!—#‘#Š:Ðˆ:Ø�3‰3�!—#‘#Š:Ðˆ:Ø�3‰3�!—#‘#Š:Ð‰:÷	ð ús   –A>Á>Bc                  ód  — t        d«      \  } }t        d«      }t        «       5  t        d«      }d d d «       | j                  z  }||j
                  z  }|j                  ||«       |j                  ||fgk(  sJ ‚|j                  ||«       |j                  |||z   fgk(  sJ ‚y # 1 sw Y   ŒwxY w)Nza bÚPr^   )r   r
   r   r   r;   re   rA   r   )r?   Úbrp   r^   Úf1Úf2s         r%   Ú#test_apply_force_multiple_one_pointrt   Â   s¦   € Ü�5‹>�D€A€qÜˆc‹
€AÜ	Ó	!ñ Ü�‹Iˆ÷à	
ˆ1�3‰3‰€BØ	
ˆ1�3‰3‰€BØ‡M�M�"�aÔØ�7‰7˜˜2�w�iÒÐÐØ‡M�M�"�aÔØ�7‰7˜˜2˜b™5�z�lÒ"Ð"Ñ"÷ð ús   ¤B&Â&B/c                  óB  — t        d«      \  } }t        d«      \  }}}}t        d«      }t        d«      }t        «       5  t	        d«      }t	        d«      }	d d d «       t        d«      }
|j                  j                  ||j                  z  «       |j                  	j                  ||	j                  z  «       | |z  |
j                  z  }|j                  |||	|«       |j                  ||fgk(  sJ ‚|	j                  || fgk(  sJ ‚|j                  |z  |
j                  z  }|	j                  |z  |
j                  z  }|j                  |«       |	j                  |«       |j                  ||f|j                  |fgk(  sJ ‚|	j                  || f|	j                  |fgk(  sJ ‚||
j                  z  }|j                  ||	¬«       |j                  ||f|j                  ||z   fgk(  sJ ‚|	j                  || f|	j                  | |z   fgk(  sJ ‚y # 1 sw Y   �ŒÀxY w)	Nzf gz	q x v1 v2ÚP1ÚP2ÚB1ÚB2r]   ©Úreaction_body)r   r   r
   r   r   r   r   r   r;   rR   rA   r   r   re   r   )ÚfÚgÚqr;   Úv1Úv2rv   rw   rx   ry   r]   ÚforceÚg1Úg2Úforce2s                  r%   Útest_apply_forcer…   Î   sò  € Ü�5‹>�D€A€qÜ! +Ó.�L€A€qˆ"ˆbÜ	ˆt‹€BÜ	ˆt‹€BÜ	Ó	!ñ Ü�$‹ZˆÜ�$‹Zˆ÷ô 	�sÓ€Aà‡J�Jˆr�x‰x˜˜BŸD™D™Ô!Ø‡J�Jˆr�x‰x˜˜BŸD™D™Ô!Øˆa‰C�—‘‰G€Eà‡N�N�5˜"˜b "Ô%Ø�8‰8˜˜U˜�}Ò$Ð$Ð$Ø�8‰8˜˜e˜V˜�~Ò%Ð%Ð%à	�‰�‰�1—3‘3‰€BØ	�‰�‰�1—3‘3‰€Bà‡N�N�2ÔØ‡N�N�2Ôà�8‰8˜˜E˜
 R§]¡]°BÐ$7Ð8Ò8Ð8Ð8Ø�8‰8˜˜e˜V˜ r§}¡}°bÐ&9Ð:Ò:Ð:Ð:àˆq�s‰s‰U€Fà‡N�N�6¨€NÔ,à�8‰8˜˜U˜ b§m¡m°V¸B±YÐ%?Ð@Ò@Ð@Ð@Ø�8‰8˜˜e˜V˜ r§}¡}°v°g¸b±jÐ&AÐBÒBÐBÑB÷7ñ ús   ¿HÈHc                  óô  — t        d«      } t        d«      }t        «       5  t        d«      }t        d«      }d d d «       t	        d«      }| |z  |j
                  z  }j                  |«       |j                  |j                  |fgk(  sJ ‚|j                  |j                  | fgk(  sJ ‚| |j                  z  }|j                  |«       |j                  |j                  ||z   fgk(  sJ ‚y # 1 sw Y   Œ·xY w)NÚtr~   rx   ry   r]   )
r   r   r   r   r   r;   rW   r   r   re   )r‡   r~   rx   ry   r]   ÚtorqueÚtorque2s          r%   Útest_apply_torquerŠ   ð   sæ   € Ü�‹€AÜ�sÓ€AÜ	Ó	!ñ Ü�$‹ZˆÜ�$‹Zˆ÷ô 	�sÓ€AØˆq‰S�—‘‰W€Fà‡O�O�F˜BÔØ�8‰8˜Ÿ™ 6Ð*Ð+Ò+Ð+Ð+Ø�8‰8˜Ÿ™ F 7Ð+Ð,Ò,Ð,Ð,à�—‘‰e€GØ‡O�O�GÔØ�8‰8˜Ÿ™ 6¨'¡>Ð2Ð3Ò3Ð3Ñ3÷ð ús   ¡C.Ã.C7c                  ó0  — t        d«      } t        d«      }t        «       5  t        d«      }d d d «       | j                  z  }|j                  ||«       |j                  ||fgk(  sJ ‚|j                  «        |j                  g k(  sJ ‚y # 1 sw Y   Œ`xY w)Nr?   rp   r^   )r   r
   r   r   rR   rA   r   Úclear_loads)r?   rp   r^   r�   s       r%   Útest_clear_loadr�     s„   € Ü�‹€AÜˆc‹
€AÜ	Ó	!ñ Ü�‹Iˆ÷àˆa�c‰c‰E€EØ‡M�M�%˜ÔØ�7‰7˜˜5�z�lÒ"Ð"Ð"Ø‡M�M„OØ�7‰7�bŠ=Ð‰=÷ð ús   ¡BÂBc                  ó\  — t        d«      } t        d«      }t        «       5  t        d«      }d d d «       j                  }|j                  }|j                  || «       |j                  ||«       |j                  | |f||fgk(  sJ ‚|j                  |«       |j                  | |fgk(  sJ ‚|j                  |j                  |«      «       |j                  | |f|j                  |j                  |«      fgk(  sJ ‚|j                  «        |j                  | |fgk(  sJ ‚y # 1 sw Y   ŒöxY w)Nrv   rw   r^   )r
   r   r   r;   re   rA   r   Úremove_loadrW   Úcrossr   )rv   rw   r^   rr   rs   s        r%   Útest_remove_loadr‘     s
  € Ü	ˆt‹€BÜ	ˆt‹€BÜ	Ó	!ñ Ü�‹Iˆ÷à	
�‰€BØ	
�‰€BØ‡M�M�"�bÔØ‡M�M�"�bÔØ�7‰7˜˜B�x " b Ð*Ò*Ð*Ð*Ø‡M�M�"ÔØ�7‰7˜˜B�x�jÒ Ð Ð Ø‡N�N�2—8‘8˜B“<Ô Ø�7‰7˜˜B�x !§'¡'¨2¯8©8°B«<Ð!8Ð9Ò9Ð9Ð9Ø‡M�M„OØ�7‰7˜˜B�x�jÒ Ð Ñ ÷ð ús   ¡D"Ä"D+c                  óp  — t        «       5  t        d«      } t        d«      }t        d«      }t        d«      }ddd«       t        d«      \  }}t        d«      \  }}}}	t        d«      \  }
}j	                  |
 j
                  z  «       | j	                  ||z  | j
                  z  |¬	«       | j	                  ||j                  «       z  | j
                  z  |¬	«       j	                  |j                  |z  | j                  z  «       j	                  |j                  |z  | j                  z  «       |j                  |	|z  | j                  z  |¬	«       |j                  || j                  z  «       |j                  |j                  |
||z  z
  ||j                  «       z  z
  | j
                  z  fgk(  sJ ‚|j                  |j                  |j                  |z  | j                  z  f|j                  ||	|z  z   | j                  z  fgk(  sJ ‚|j                  |j                  |j                  |z  | j                  z  f|j                  |	 |z  | j                  z  fgk(  sJ ‚| j                  | j                  ||j                  «       z  ||z  z   | j
                  z  fgk(  sJ ‚y# 1 sw Y   �ŒuxY w)
zXExample based on: https://pydy.readthedocs.io/en/latest/examples/multidof-holonomic.htmlÚWr^   rp   rq   Nzq1 q2zk c g kTzF Trz   )r   r   r   r   rA   r;   Údiffr   re   rW   rR   r   r   r   )r“   r^   rp   rq   Úq1Úq2ÚkÚcr}   ÚkTÚFÚTs               r%   Ú9test_apply_loads_on_multi_degree_freedom_holonomic_systemrœ     s7  € ä	Ó	!ñ Ü�‹IˆÜ�‹IˆÜ�‹IˆÜ�‹Iˆ÷	ô
 ˜GÓ$�F€BˆÜ˜*Ó%�K€A€qˆ!ˆRÜ˜%Ó �D€A€qð ‡M�M�!�A—C‘C‘%ÔØ‡M�M�!�B‘$�q—s‘s‘(¨!€MÔ,Ø‡M�M�!�B—G‘G“I‘+˜aŸc™c‘/°€MÔ3Ø‡M�M�!—&‘&˜‘(˜1Ÿ3™3‘,ÔØ‡M�M�!—&‘&˜‘(˜1Ÿ3™3‘,Ôð ‡N�N�2�b‘5˜Ÿ™‘9¨A€NÔ.Ø‡N�N�1�Q—S‘S‘5Ôà�7‰7˜Ÿ™ q¨1¨R©4¡x°!°B·G±G³I±+Ñ'=¸q¿s¹sÑ&BÐCÐDÒDÐDÐDØ�7‰7˜Ÿ™ a§f¡f¨Q¡h¨q¯s©s¡lÐ3°a·g±gÀÀBÀrÁEÁ	È1Ï3É3¹Ð5OÐPÒPÐPÐPØ�7‰7˜Ÿ™ a§f¡f¨Q¡h¨q¯s©s¡lÐ3°a·g±gÀ¸sÀ2¹vÀaÇcÁc¹zÐ5JÐKÒKÐKÐKØ�7‰7˜Ÿ™ q¨¯©«¡{°Q°r±TÑ'9¸1¿3¹3Ñ&>Ð?Ð@Ò@Ð@Ñ@÷/ñ ús   ‹-J+Ê+J5c            
      ó  — t        d«      } t        d«      \  }}}}}}t        | |||«      }t        d«      }|j	                  d|| j
                  z  || j                  z  z   «      }	t        «       5  t        d|| ||¬«      }
d d d «       
j                  |	«      }t        | |||dz  z  z   |||dz  z  z   |||dz  |dz  z   z  z   | |z  |z  ¬«      }||k(  sJ ‚t        d	«      }|j                  | | j                  d
«       t        |
j                  |	|«      |z
  j                  |«      «      t        dd«      k(  sJ ‚t        d«      }|j	                  d|| j
                  z  || j                  z  z   «      }	t        «       5  t        d||| ¬«      }d d d «       j                  |	| «      }t        | ||dz  z  ||dz  z  ||dz  |dz  z   z  | |z  |z  ¬«      }|j                  rJ ‚||k(  sJ ‚y # 1 sw Y   �ŒqxY w# 1 sw Y   ŒmxY w)Nr]   zm, I_x, I_y, I_z, a, bÚoÚpÚR)r   r   r   r9   rK   )r"   r\   r+   é   rp   )r   r   r   )r   r   r   r
   r:   r;   re   r   r   Úparallel_axisrj   rR   r	   Ú	to_matrixr   r.   )r]   ÚmÚIxÚIyÚIzr?   rq   ÚIorž   rŸ   r    ÚIpÚIp_expectedr\   rp   s                  r%   Útest_parallel_axisr«   9  s"  € Ü�sÓ€AÜ!Ð":Ó;Ñ€A€rˆ2ˆr�1�aÜ	��B˜˜BÓ	€Bäˆc‹
€AØ	�‰�C˜˜QŸS™S™ 1 q§s¡s¡7Ñ*Ó+€AÜ	Ó	!ñ IÜ� ¨!°!ÀRÔHˆ÷Ià	
�‰˜Ó	€BÜ˜!˜R ! a¨¡d¡(™]¨B°°Q¸±T±©MØ˜q A q¡D¨1¨a©4¡KÑ0Ñ0°q°b¸1±f¸q±jôB€Kà�ÒÐÐä�sÓ€AØ‡M�M�!�Q—S‘S˜!ÔÜØ	
�‰˜˜AÓ	 Ñ	,×7Ñ7¸Ó:ó<Ü?DÀQÈ»{òKð Kð Kô 	ˆc‹
€AØ	�‰�C˜˜QŸS™S™ 1 q§s¡s¡7Ñ*Ó+€AÜ	Ó	!ñ 5Ü� ¨°!Ô4ˆ÷5à	
�‰˜˜AÓ	€BÜ˜!˜Q  a¡™Z¨¨Q°!©V©°Q¸!¸q¹&À1ÈÁ6¹/Ñ5JØ ˜b 1™f q™jô*€Kà�~Š~ÐÐØ�ÒÐÑ÷)Iñ Iú÷5ð 5ús   Á0G0ÆG=Ç0G:Ç=HN)$Úsympyr   r   r   r   r   r   r	   Úsympy.physics.vectorr
   r   r   r   Úsympy.physics.mechanicsr   r   Úsympy.testing.pytestr   r   r&   r2   r=   rF   rT   rY   rb   rg   rl   rn   rt   r…   rŠ   r�   r‘   rœ   r«   © rP   r%   ú<module>r±      s{   ð÷*÷ *ñ *ç NÓ Nß 1ß ?ò-ò"*ò4#&òL5ò29òB4ò&ò	"ò`òò
#ò CòD4ò"	ò!ò"Aó8rP   