a
    ž¬<b÷  ã                	   @   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
sLd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 sN0    Y  t|ƒˆ}t|ƒD ]n\}}| d¡r€ qÚz&| d¡| }	| 	¡ |	 	¡ ks¤J ‚W qj t
yÖ   d| d }
t|
 |d	 ¡ƒ‚Y qj0 qjW d   ƒ n1 sî0    Y  d S )
NÚautolevútest-examplesT)Zinclude_numericú#Ú
zmismatch in z in line no: {0}é   )ÚosÚpathÚjoinÚFILE_DIRÚopenr   Ú	enumerateÚ
startswithÚsplitÚrstripÚ	ExceptionÚAssertionErrorÚformat)Zin_filenameZout_filenameZ	test_nameZin_file_pathZcorrect_file_pathÚfZgenerated_codeÚidxZline1Zline2Úmsg© r   úp/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/parsing/tests/test_autolev.pyÚ_test_examples   s$    ÿÿ
*

r   c                  C   s2   g d¢} | D ] }|d }|d }t |||ƒ qd S )N)Z	ruletest1Z	ruletest2Z	ruletest3Z	ruletest4Z	ruletest5Z	ruletest6Z	ruletest7Z	ruletest8Z	ruletest9Z
ruletest10Z
ruletest11Z
ruletest12ú.alú.py)r   ©ÚlÚiÚin_filepathÚout_filepathr   r   r   Útest_rule_tests&   s
    r'   c                  C   sF   g d¢} | D ]4}t j d|d ¡}t j d|d ¡}t|||ƒ qd S )N)Zmass_spring_damperZchaos_pendulumZdouble_pendulumZnon_min_pendulumzpydy-example-repor    r!   )r   r   r   r   r"   r   r   r   Útest_pydy_examples2   s
    r(   c                  C   sd   t j tddd¡} t j | ¡r`g d¢}|D ]4}t j d|d ¡}t j d|d ¡}t|||ƒ q*d S )Nr	   r
   zautolev-tutorial)Ztutor1Ztutor2Ztutor3Ztutor4Ztutor5Ztutor6Ztutor7r    r!   ©r   r   r   r   Úisdirr   )Údir_pathr#   r$   r%   r&   r   r   r   Útest_autolev_tutorial=   s    ÿr,   c                  C   sª   t j tddd¡} t j | ¡r¦g d¢}g d¢}g d¢}g d¢}|df|d	f|d
f|dfg}|D ]F\}}|D ]8}t j d||d ¡}	t j d||d ¡}
t|	|
|ƒ qjq^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-9Z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Úch4r    r!   r)   )r+   r-   r.   r/   r0   ZchaptersÚchÚnamer$   r%   r&   r   r   r   Útest_dynamics_onlineK   s    ÿr3   c                  C   sZ  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sâJ ‚|d
  t
|d ƒ |d j	 |d |d j  |d
 t|d ƒ |d j  }	||	  ¡ d	ksHJ ‚|d
 t|d ƒ |d  ¡  |d j	 |d
 t|d ƒ |d  ¡  |d j  |d |d  ¡  |d
 t
|d ƒ |d  ¡   |d j  }
||
  ¡ d	ksðJ ‚|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sVJ ‚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.zàFRAMES 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)Zframe_cZframe_fZpoint_eZpoint_oÚfdÚdcr   r#   Zframe_dÚré   N)r   r   r   ÚexecZ
ang_vel_inZpos_fromZvelÚaccÚdiffÚxr   Úyr   ÚzZsimplify)Zautolev_inputZsympy_inputÚgr#   Zw_c_fZp_o_eZv_e_fZa_e_fZexpected_w_c_fZexpected_p_o_eZexpected_v_e_fZexpected_a_e_fr   r   r   Útest_output_01_   sr     ÿ þÿþ((ÿÿÿþ ÿÿ.ÿ"þþþ"ÿ"þ"ýýû	r?   )r   )r   Z(sympy.functions.elementary.trigonometricr   r   Zsympy.externalr   Zsympy.testing.pytestr   Zsympy.parsing.autolevr   r   Údisabledr   ÚdirnameÚabspathÚrealpathÚ__file__r   r   r'   r(   r,   r3   r?   r   r   r   r   Ú<module>   s    ÿ
