o
    jg                  	   @   s   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 edZ
e
s&dZe je je je jeZdd	d
Zdd Zdd Zdd Zdd Zdd ZdS )    N)cossin)import_module)skip)parse_autolevantlr4T c              
   C   s  t jtdd| }t jtdd|}t|}t|dd}W d    n1 s'w   Y  t|J}t|D ]4\}}|dr@ n2z|d| }	|	 |		 ksRJ W q5 t
yi   d| d }
t|
|d	 w W d    d S W d    d S 1 s}w   Y  d S )
Nautolevtest-examplesT)include_numeric#
zmismatch in z in line no: {0}   )ospathjoinFILE_DIRopenr   	enumerate
startswithsplitrstrip	ExceptionAssertionErrorformat)in_filenameout_filename	test_namein_file_pathcorrect_file_pathfgenerated_codeidxline1line2msg r&   X/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/parsing/tests/test_autolev.py_test_examples   s0   


"r(   c                  C   s2   g d} | D ]}|d }|d }t ||| qd S )N)	ruletest1	ruletest2	ruletest3	ruletest4	ruletest5	ruletest6	ruletest7	ruletest8	ruletest9
ruletest10
ruletest11
ruletest12.al.py)r(   liin_filepathout_filepathr&   r&   r'   test_rule_tests&   s   r<   c                  C   sF   g d} | D ]}t jd|d }t jd|d }t||| qd S )N)mass_spring_damperchaos_pendulumdouble_pendulumnon_min_pendulumzpydy-example-repor5   r6   )r   r   r   r(   r7   r&   r&   r'   test_pydy_examples2   s   rA   c                  C   sh   t jtddd} t j| r0g d}|D ]}t jd|d }t jd|d }t||| qd S d S )Nr	   r
   zautolev-tutorial)tutor1tutor2tutor3tutor4tutor5tutor6tutor7r5   r6   r   r   r   r   isdirr(   )dir_pathr8   r9   r:   r;   r&   r&   r'   test_autolev_tutorial=   s   rL   c                  C   s   t jtddd} t j| rSg d}g d}g d}g d}|df|d	f|d
f|dfg}|D ]%\}}|D ]}t jd||d }	t jd||d }
t|	|
| q5q/d S d S )Nr	   r
   zdynamics-online)z1-4z1-5z1-6z1-7z1-8z1-9_1z1-9_2z1-9_3)
z2-1z2-2z2-3z2-4z2-5z2-6z2-7z2-8z2-9circular)z3-1_1z3-1_2z3-2_1z3-2_2z3-2_3z3-2_4z3-2_5z3-3)z4-1_1z4-2_1z4-4_1z4-4_2z4-5_1z4-5_2ch1ch2ch3ch4r5   r6   rI   )rK   rN   rO   rP   rQ   chapterschnamer9   r:   r;   r&   r&   r'   test_dynamics_onlineK   s"   rU   c                  C   sV  t std d} t| }i }i }t||| |d |d }|d |d }|d |d }|d |d }|d  |d j	 t
|d |d   |d j  t|d |d   |d j  }||  d	ksqJ |d
  t
|d  |d j	 |d |d j  |d
 t|d  |d j  }	||	  d	ksJ |d
 t|d  |d   |d j	 |d
 t|d  |d   |d j  |d |d   |d
 t
|d  |d    |d j  }
||
  d	ksJ |d
 t
|d |d  d  t|d |d      |d j	 |d  |d  d  d|d
  t
|d  |d   |d    |d
 t|d  |d     |d j  |d |d    |d
 t
|d  |d     |d
 t|d  |d  d   |d
 t|d  |d  d   |d j  }||  d	ksJ dS )a$  Autolev example calculates the position, velocity, and acceleration of a
    point and expresses in a single reference frame::

          (1) FRAMES C,D,F
          (2) VARIABLES FD'',DC''
          (3) CONSTANTS R,L
          (4) POINTS O,E
          (5) SIMPROT(F,D,1,FD)
       -> (6) F_D = [1, 0, 0; 0, COS(FD), -SIN(FD); 0, SIN(FD), COS(FD)]
          (7) SIMPROT(D,C,2,DC)
       -> (8) D_C = [COS(DC), 0, SIN(DC); 0, 1, 0; -SIN(DC), 0, COS(DC)]
          (9) W_C_F> = EXPRESS(W_C_F>, F)
       -> (10) W_C_F> = FD'*F1> + COS(FD)*DC'*F2> + SIN(FD)*DC'*F3>
          (11) P_O_E>=R*D2>-L*C1>
          (12) P_O_E>=EXPRESS(P_O_E>, D)
       -> (13) P_O_E> = -L*COS(DC)*D1> + R*D2> + L*SIN(DC)*D3>
          (14) V_E_F>=EXPRESS(DT(P_O_E>,F),D)
       -> (15) V_E_F> = L*SIN(DC)*DC'*D1> - L*SIN(DC)*FD'*D2> + (R*FD'+L*COS(DC)*DC')*D3>
          (16) A_E_F>=EXPRESS(DT(V_E_F>,F),D)
       -> (17) A_E_F> = L*(COS(DC)*DC'^2+SIN(DC)*DC'')*D1> + (-R*FD'^2-2*L*COS(DC)*DC'*FD'-L*SIN(DC)*FD'')*D2> + (R*FD''+L*COS(DC)*DC''-L*SIN(DC)*DC'^2-L*SIN(DC)*FD'^2)*D3>

    z&Test skipped: antlr4 is not installed.zFRAMES C,D,F
VARIABLES FD'',DC''
CONSTANTS R,L
POINTS O,E
SIMPROT(F,D,1,FD)
SIMPROT(D,C,2,DC)
W_C_F>=EXPRESS(W_C_F>,F)
P_O_E>=R*D2>-L*C1>
P_O_E>=EXPRESS(P_O_E>,D)
V_E_F>=EXPRESS(DT(P_O_E>,F),D)
A_E_F>=EXPRESS(DT(V_E_F>,F),D)frame_cframe_fpoint_epoint_ofddcr   r8   frame_dr   N)r   r   r   exec
ang_vel_inpos_fromvelaccdiffxr   yr   zsimplify)autolev_inputsympy_inputgr8   w_c_fp_o_ev_e_fa_e_fexpected_w_c_fexpected_p_o_eexpected_v_e_fexpected_a_e_fr&   r&   r'   test_output_01_   sr     (( .""""	rt   )r   )r   (sympy.functions.elementary.trigonometricr   r   sympy.externalr   sympy.testing.pytestr   sympy.parsing.autolevr   r   disabledr   dirnameabspathrealpath__file__r   r(   r<   rA   rL   rU   rt   r&   r&   r&   r'   <module>   s"    
