o
    à8VaÒ  ã                	   @   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)ÚsinÚcos)Ú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)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   úB/usr/lib/python3/dist-packages/sympy/parsing/tests/test_autolev.pyÚ_test_examples   s0   ÿÿ
ÿ

þúÿ"ý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 ]}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   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)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 | ¡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-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chaptersZchÚnamer$   r%   r&   r   r   r   Útest_dynamics_onlineK   s"   ÿý÷r2   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s£J ‚|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s©J ‚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ÚfdZdcr   r#   Zframe_dÚré   N)r   r   r   ÚexecZ
ang_vel_inZpos_fromZvelZaccZ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sympyr   r   Zsympy.externalr   Zsympy.testing.pytestr   Zsympy.parsing.autolevr   r   Zdisabledr   ÚdirnameÚabspathÚrealpathÚ__file__r   r   r'   r(   r,   r2   r;   r   r   r   r   Ú<module>   s"    ÿ
