U
    	Ç-e÷  ã                	   @   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 5 Q R X t|ƒ€}t|ƒD ]p\}}| d¡rl qÈz&| d¡| }	| 	¡ |	 	¡ kst
‚W qV tk
rÄ   d| d }
t
|
 |d	 ¡ƒ‚Y qVX qVW 5 Q R X 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ÚAssertionErrorÚ	ExceptionÚformat)Zin_filenameZout_filenameZ	test_nameZin_file_pathZcorrect_file_pathÚfZgenerated_codeÚidxÚline1Úline2Úmsg© r   úa/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sympy/parsing/tests/test_autolev.pyÚ_test_examples   s$    ÿÿ


r!   c                  C   sF   ddddddddd	d
ddg} | D ] }|d }|d }t |||ƒ q d S )NZ	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   sJ   ddddg} | D ]4}t j d|d ¡}t j d|d ¡}t|||ƒ qd S )NZ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   sn   t j tddd¡} t j | ¡rjdddddd	d
g}|D ]4}t j d|d ¡}t j d|d ¡}t|||ƒ q4d S )Nr	   r
   zautolev-tutorialZ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Ödddddd	d
dg}ddddddddddg
}ddddddddg}ddd d!d"d#g}|d$f|d%f|d&f|d'fg}|D ]F\}}|D ]8}t j d||d( ¡}	t j d||d) ¡}
t|	|
|ƒ qšqŽd S )*Nr	   r
   zdynamics-onlinez1-4z1-5z1-6z1-7z1-8z1-9_1z1-9_2z1-9_3z2-1z2-2z2-3z2-4z2-5z2-6z2-7z2-8z2-9Zcircularz3-1_1z3-1_2z3-2_1z3-2_2z3-2_3z3-2_4z3-2_5z3-3z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/   r0   r1   r2   ZchaptersÚchÚnamer&   r'   r(   r   r   r    Útest_dynamics_onlineK   s$    ÿÿÿr5   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ât‚|d
  t
|d ƒ |d j	 |d |d j  |d
 t|d ƒ |d j  }	||	  ¡ d	ksHt‚|d
 t|d ƒ |d  ¡  |d j	 |d
 t|d ƒ |d  ¡  |d j  |d |d  ¡  |d
 t
|d ƒ |d  ¡   |d j  }
||
  ¡ d	ksðt‚|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sVt‚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velÚaccÚdiffÚxr   Úyr   ÚzÚsimplifyr   )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     ÿ þÿþ((ÿÿÿþ ÿÿ.ÿ"þþþ"ÿ"þ"ýýû	rA   )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.   r5   rA   r   r   r   r    Ú<module>   s    ÿ
