o
    …º¥gÏ(  ã                   @   sB  d dl mZ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mZmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZ edƒ\ZZZ Z!Z"edƒZ#e# $dd	ee#j%g¡Z&e& $d
d	ee&j'g¡Z(e( $dd	e e(j)g¡Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1dd„ Z2dd„ Z3dd„ Z4d d!„ Z5d"S )#é    )ÚsinÚcosÚtanÚpiÚsymbolsÚMatrixÚSÚFunction)ÚParticleÚPointÚReferenceFrameÚ	RigidBody)	Úangular_momentumÚdynamicsymbolsÚkinetic_energyÚlinear_momentumÚouterÚpotential_energyÚmsubsÚfind_dynamicsymbolsÚ
Lagrangian)Úcenter_of_massÚ_validate_coordinatesÚ_parse_linear_solver)ÚraisesÚwarns_deprecated_sympyzq1 q2 q3 q4 q5ÚNÚAÚAxisÚBÚCc                     s¼   t dƒ‰tdƒ} |  ˆdˆj ¡ tˆjˆjƒ}td| ˆd|| fƒ‰ tdƒ}td|dƒ‰ˆj ˆd	ˆj ¡ t	t
‡ ‡fd
d„ƒ t	t
‡‡fdd„ƒ tˆˆ ˆƒd	ˆj dˆj  ks\J ‚d S )Nr   ÚAcé   r   é   ÚPÚPaé   é
   c                      ó   t ˆ ˆ ˆƒS ©N©r   © ©r   r%   r+   úc/var/www/visachat/venv/lib/python3.10/site-packages/sympy/physics/mechanics/tests/test_functions.pyÚ<lambda>   ó    z&test_linear_momentum.<locals>.<lambda>c                      r(   r)   r*   r+   ©r   r%   r+   r-   r.      r/   iô  )r   r   Úset_velÚyr   Úxr   r
   Úpointr   Ú	TypeErrorr   )r!   ÚIr$   r+   ©r   r   r%   r-   Útest_linear_momentum   s   (r8   c            	   	      s„  t dƒ\} }}}tdƒ}tdƒ‰tdƒ}tdƒ‰ˆ d|ˆj ¡}| d|ˆj ¡}ˆ ˆdˆj ¡ | ˆ|ˆj ¡ | 	ˆˆ|¡ | 	ˆˆ|¡ t
d	|| ƒ‰td
||||tˆjˆjƒ |fƒ‰ d|  | | ˆj || | ˆj  }tˆˆ ˆƒ|ksJ ‚tt‡ ‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt‡‡‡fdd„ƒ |||d   d|  |d   | ˆj }tˆˆˆ ˆƒ|ksÀJ ‚dS )a   A rod with length 2l, centroidal inertia I, and mass M along with a
    particle of mass m fixed to the end of the rod rotate with an angular rate
    of omega about point O which is fixed to the non-particle end of the rod.
    The rod's reference frame is A and the inertial frame is N.z
m, M, l, IÚomegar   ÚaÚOr!   r$   r   r%   r   é   c                      ó   t ˆˆˆ ˆƒS r)   ©r   r+   r7   r+   r-   r.   7   ó    z;test_angular_momentum_and_linear_momentum.<locals>.<lambda>c                      r=   r)   r>   r+   )r   r;   r%   r+   r-   r.   8   r?   c                      s   t ˆˆ ˆˆƒS r)   r>   r+   )r   r;   r%   r+   r-   r.   9   r?   é   N)r   r   r   r   Ú	locatenewr3   r1   Úset_ang_velÚzÚv2pt_theoryr
   r   r   r2   r   r   r5   r   )	ÚmÚMÚlr6   r9   r:   r!   r$   Úexpectedr+   )r   r   r;   r%   r-   Ú)test_angular_momentum_and_linear_momentum#   s(   "(*rI   c            	         s@  t dƒ\} }}tdƒ}tdƒ‰tdƒ}| ˆdˆj ¡ | d|ˆj ¡}| d|ˆj ¡}tdƒ}| ˆ|ˆj ¡ | 	|ˆ|¡ | 	|ˆ|¡ t
d	|| ƒ‰tˆjˆjƒ}td
|||||fƒ‰ tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ dtˆˆˆ ƒ||d  |d  d d|d  |  |d   |d d    ¡ ksžJ ‚d S )Nzm M l1r9   r   r;   r   r!   r$   r:   r%   r   c                      ó   t ˆˆˆ ƒS r)   ©r   r+   r,   r+   r-   r.   M   r/   z%test_kinetic_energy.<locals>.<lambda>c                      rJ   r)   rK   r+   )r   r   r+   r-   r.   N   r/   r<   )r   r   r   r   r1   r3   rA   rB   rC   rD   r
   r   r   r   r5   r   Úexpand)	rE   rF   Úl1r9   r;   r!   r$   r:   r6   r+   r7   r-   Útest_kinetic_energy>   s.   "ÿ
ÿÿrN   c                  C   s  t dƒ\} }}}}}tdƒ}tdƒ}tdƒ}| |d|j ¡ | d||j ¡}	|	 d||j ¡}
tdƒ}| |||j ¡ |	 	|||¡ |
 	|||¡ t
d	|
| ƒ}t|j|jƒ}td
|	||||	fƒ}| | | |_|| | |_t||ƒ| | | || |  ks„J ‚d S )Nzm M l1 g h Hr9   r   r;   r   r!   r$   r:   r%   r   )r   r   r   r   r1   r3   rA   rB   rC   rD   r
   r   r   r   )rE   rF   rM   ÚgÚhÚHr9   r   r;   r!   r$   r:   r%   r6   r   r+   r+   r-   Útest_potential_energyS   s"   *rR   c            	         s
  t dƒ\} }}}tdƒ‰tdƒ}| ˆdˆj ¡ | ddˆj ¡}| ˆdˆj ¡ td|dƒ‰| d	d
ˆj ¡}| ˆdˆj ¡ tdƒ}| ˆdˆj	 ¡ t
ˆj	ˆj	ƒ}td||d||fƒ‰ || | ˆ_| | | ˆ _tt‡ ‡fdd„ƒ tt‡‡fdd„ƒ d S )NzM m g hr   r;   r   r$   r&   r'   r%   r!   r<   é   r:   r   r#   c                      r(   r)   ©r   r+   r,   r+   r-   r.   w   r/   z!test_Lagrangian.<locals>.<lambda>c                      r(   r)   rT   r+   r0   r+   r-   r.   x   r/   )r   r   r   r1   r3   rA   r
   r2   rB   rC   r   r   r   r   r5   )	rF   rE   rO   rP   r;   r$   r!   r:   r6   r+   r7   r-   Útest_Lagrangiang   s"   rU   c                  C   s„  t dƒ\} }tdƒ\}}}t| | | || ¡  | g| ¡  ¡ |t| ¡ ƒ ggƒ}t| | |g| ¡  ¡ dggƒ}|d|d| ¡ d| ¡ di}t||ƒ|ksRJ ‚t|| ƒt|| ƒ || ¡   }|d|td | ¡ di}t||dd|d ks}J ‚t	dƒ}||j
 ||j  }	||j
|j
B  ||j|jB   }
d|j }d|j|jB  }|d|di}t|	|ƒ|ks·J ‚t|
|ƒ|ksÀJ ‚d S )	Núa, búx, y, zr&   r   r<   T)Úsmartr   )r   r   r   Údiffr   r   r   r   r   r   r3   r2   )r:   Úbr3   r2   rC   ÚexprÚsolÚsdr   ÚvÚdÚv_solÚd_solr+   r+   r-   Ú
test_msubs{   s*   ÿÿ$ 
rb   c                     s&  t dƒ\} }tdƒ\}}}t| | | || ¡  | g| ¡  ¡ |t| ¡ ƒ ggƒ}|| ¡ || ¡  ¡ || ¡ h}t|ƒ|ksCJ ‚|||g}| ¡ | ¡  ¡ | ¡ h}t||d|ks_J ‚tdƒ\}}	}
tdƒ}||j |	|j  |
|j	  ‰ ||	|
h}tˆ |d|ksˆJ ‚t
t‡ fdd„ƒ d S )	NrV   rW   )Úexcludezd, e, fr   )Úreference_framec                      s   t ˆ ƒS r)   )r   r+   ©r^   r+   r-   r.   ¦   s    z*test_find_dynamicsymbols.<locals>.<lambda>)r   r   r   rY   r   r   r   r3   r2   rC   r   Ú
ValueError)r:   rZ   r3   r2   rC   r[   r\   Úexclude_listr_   ÚeÚfr   r+   re   r-   Útest_find_dynamicsymbols“   s    ÿ 

rj   c               
   C   st  t dƒ} tddd}tdtdƒtjƒ}tdtdƒtd	ƒƒ}td
tdƒtdƒƒ}tdtdƒ|ƒ}t dƒ}tdƒ}tdƒ}td|||t|j|jƒ|fƒ}	|j	 
|j	| j¡ |j	 
|j	| j| j ¡ |j	 
|j	| j¡ |	j 
|j	| j| j ¡ tdƒ}
|
 
|j	t|j	|||||	ƒ¡ d|| d  | j || d || d  | j  ||| d  | j  }|
 |j	¡| dks¸J ‚d S )Nr:   rE   T)ÚrealÚp1Úp1_ptÚp2Úp2_ptr<   Úp3Úp3_pté   Úp4Úp4_ptÚb_fÚb_cmÚmbrZ   ÚorS   é   r   )r   r   r
   r   r   ÚOner   r   r3   r4   Úset_posr2   Ú
masscenterrC   r   Úpos_from)r:   rE   rl   rn   rp   rs   ru   rv   rw   rZ   Úpoint_or[   r+   r+   r-   Útest_center_of_mass¬   s$   Jr   c                
      sÌ  t dƒ\	‰‰‰‰
‰‰‰‰‰tdƒ\‰‰‰tˆˆˆgˆ
ˆˆgˆˆˆgd tˆˆgƒ tˆˆgˆ
gƒ tˆ
ˆgd tˆˆˆgˆ
ˆˆgdd tt‡‡‡
‡‡fdd„ƒ tˆˆˆgˆ
ˆˆgdd tt‡‡‡‡
‡fd	d„ƒ tt‡‡‡‡‡fd
d„ƒ tˆˆˆgˆ
ˆˆgdˆ
ˆˆgd tt‡‡‡‡
‡‡‡‡fdd„ƒ tt‡‡‡‡
‡‡‡‡fdd„ƒ tt‡‡‡‡
‡‡‡‡fdd„ƒ tˆˆ ˆgdd tt‡‡‡fdd„ƒ tˆˆˆgdˆ
ˆgdd tt‡‡‡‡
‡fdd„ƒ tˆˆ ˆ ˆgdˆ
gdd tt‡‡‡‡‡
fdd„ƒ tˆˆgdd tt‡‡fdd„ƒ t j‰	tdƒ‰ tdtd\‰‰tˆˆ ƒˆˆ ƒgdd tt‡ ‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ ˆ t _tˆˆ ƒˆˆ ƒgƒ tt‡‡‡	fdd„ƒ ˆ	t _d S )Nzq1:4 u1:4 ua1:4zs1:4©Úu_auxiliary©ÚspeedsF©Úcheck_duplicatesc                      s   t ˆ ˆˆgˆˆˆgƒS r)   ©r   r+   )Úq1Úq2Úu1Úu2Úu3r+   r-   r.   Í   s    ÿz+test_validate_coordinates.<locals>.<lambda>c                      s   t ˆ ˆˆgˆˆˆgddS ©NTr„   r†   r+   )r‡   rˆ   Úq3r‰   rŠ   r+   r-   r.   Ð   ó    ÿc                      s   t ˆ ˆˆgˆ ˆˆgddS rŒ   r†   r+   )r‡   rˆ   r   rŠ   r‹   r+   r-   r.   Ò   rŽ   )r…   r   c                      s    t ˆ ˆˆgˆˆˆgˆˆˆgdS ©Nr€   r†   r+   ©r‡   rˆ   r   r‰   rŠ   r‹   Úua2Úua3r+   r-   r.   Ö   ó    ÿc                      s    t ˆ ˆˆgˆˆˆgˆ ˆˆgdS r   r†   r+   r   r+   r-   r.   Ø   r“   c                      s    t ˆ ˆˆgˆˆˆgˆˆˆgdS r   r†   r+   )r‡   rˆ   r   r‰   rŠ   r‹   Úua1r‘   r+   r-   r.   Ú   r“   ©Úis_dynamicsymbolsc                      s   t ˆ ˆ ˆgƒS r)   r†   r+   )r‡   rˆ   r   r+   r-   r.   Þ   s    r   c                      s   t ˆˆ ˆgdˆˆgddS ©Nr   Tr•   r†   r+   )r‡   rˆ   Ús1r‰   rŠ   r+   r-   r.   à   rŽ   c                      s   t ˆˆ ˆ ˆ gdˆgddS r—   r†   r+   )r‡   r˜   Ús2Ús3r‰   r+   r-   r.   ã   s    ÿ)r   r–   c                      s   t ˆ ˆgdS r   r†   r+   )r˜   r”   r+   r-   r.   æ   r?   r:   zf1:3)Úclsc                      s   t ˆˆ ƒˆˆ ƒgƒS r)   r†   r+   ©r:   Úf1Úf2r+   r-   r.   ì   ó    c                      s   t ˆˆ ƒˆˆ ƒgdS )Nr‚   r†   r+   rœ   r+   r-   r.   í   s    c                      s   t ˆ ˆƒˆˆƒgƒS r)   r†   r+   )r   rž   Útr+   r-   r.   ð   rŸ   )r   r   r   r   rf   Ú_tr	   r+   r+   )r:   r   rž   r‡   rˆ   r   r˜   r™   rš   r    r‰   rŠ   r‹   r”   r‘   r’   r-   Útest_validate_coordinatesÁ   sJ   ÿÿ   
r¢   c                  C   sX   t ddtdƒƒt ddtdƒƒ} }tt jƒt jksJ ‚tdƒ| |ƒt  | |¡ks*J ‚d S )Nrr   za:9r<   zb:6ÚLU)r   r   r   ÚLUsolve)r   rZ   r+   r+   r-   Útest_parse_linear_solverô   s   ""r¥   c                  C   sX  ddl m} m}m} tdƒ}tƒ $ | |ddddƒ|j|jB |j|jB  |j|jB  ks.J ‚W d   ƒ n1 s8w   Y  tƒ 4 |d|j|j |ƒ|j|jB |j|jB  d|j|jB   |j|jB  |j|jB  ksmJ ‚W d   ƒ n1 sww   Y  t	dƒ}tƒ  |d|j |ƒ|j
d|j |j fgksšJ ‚W d   ƒ d S 1 s¥w   Y  d S )Nr   )ÚinertiaÚinertia_of_point_massÚgravityr   r&   r<   r$   éþÿÿÿ)Ú!sympy.physics.mechanics.functionsr¦   r§   r¨   r   r   r3   r2   rC   r
   r|   Úmass)r¦   r§   r¨   r   Úpr+   r+   r-   Útest_deprecated_moved_functionsú   s$   :ÿ&
ÿ
ÿ
ÿÿ."ÿr­   N)6Úsympyr   r   r   r   r   r   r   r	   Úsympy.physics.mechanicsr
   r   r   r   r   r   r   r   r   r   r   r   r   rª   r   r   r   Úsympy.testing.pytestr   r   r‡   rˆ   r   Úq4Úq5r   Ú	orientnewrC   r   r3   r   r2   r    r8   rI   rN   rR   rU   rb   rj   r   r¢   r¥   r­   r+   r+   r+   r-   Ú<module>   s*   ( ,3