U
    0e$                     @   s   d dl mZ d dlmZ d dlmZ edZedddgidZererd d	lm	Z	m
Z
mZmZmZmZ d d
lmZmZ d dlmZ e ZdZdd Zdd Zdd Zdd Zdd Zdd Znesesdd ZdS )    SymPyExpression)raises)import_modulelfortranzclang.cindexfromlistZcindex)Zimport_kwargs)VariableIntBaseTypeFloatBaseTypeStringDeclaration	FloatType)IntegerFloat)Symbolz5    integer :: a, b, c, d
    real :: p, q, r, s
    c               
   C   s   d} t | d t  }|d tttdttddks@t|d tttdttdt	d	d
ksnt|d tttdt
tdt	dt	dt	dddkst|d tttdt
tdt	dt	dt	ddtdddd
kstd S )Nz8        int a, b = 4;
        float c, d = 2.4;
        cr   aZintc)type   b   r   value   Zfloat32          )nbitsZnmantZnexp   dz2.39999999999999995   Z	precision)expr1convert_to_exprreturn_exprr   r   r   r	   r   AssertionErrorr   r   r   )src1ls r(   E/tmp/pip-unpacked-wheel-_6tpq7m6/sympy/parsing/tests/test_sym_expr.pytest_c_parse   sN    





r*   c               	   C   s  t td} |  }|d tttdttdtddks@t	|d tttdttdtddksnt	|d tttd	ttdtddkst	|d
 tttdttdtddkst	|d tttdt
tdtddddkst	|d tttdt
tdtddddks0t	|d tttdt
tdtddddksdt	|d tttdt
tdtddddkst	d S )Nfr   r   integerr   r   r   r   r   r   r   r   prealz0.0r    r!      q   r   s)r   srcr$   r   r   r   r	   r   r   r%   r
   r   )exprr'   r(   r(   r)   test_fortran_parseB   st    

















r7   c                  C   s@   t d } t| d t }|ddddddd	d
ddg
ks<td S )N<            a = b + c
            s = p * q / r
            r+   za = 0zb = 0zc = 0zd = 0zp = 0.0zq = 0.0zr = 0.0zs = 0.0z	a = b + cz	s = p*q/r)r5   r"   r#   Zconvert_to_pythonr%   )r&   Zexp_pyr(   r(   r)   test_convert_py   s$    r9   c                  C   s@   t d } t| d t }|ddddddd	d
ddg
ks<td S )Nr8   r+   z      integer*4 az      integer*4 bz      integer*4 cz      integer*4 dz      real*8 pz      real*8 qz      real*8 rz      real*8 sz      a = b + cz      s = p*q/r)r5   r"   r#   Zconvert_to_fortranr%   )r&   Zexp_fortr(   r(   r)   test_convert_fort   s$    r:   c                  C   s@   t d } t| d t }|ddddddd	d
ddg
ks<td S )Nr8   r+   z	int a = 0z	int b = 0z	int c = 0z	int d = 0zdouble p = 0.0zdouble q = 0.0zdouble r = 0.0zdouble s = 0.0z
a = b + c;z
s = p*q/r;)r5   r"   r#   Zconvert_to_cr%   )r&   Zexp_cr(   r(   r)   test_convert_c   s$    r;   c                      s:   d t t fdd t tdd  t t fdd d S )Nint a;c                      s   t  S )Nr   r(   r5   r(   r)   <lambda>       z!test_exceptions.<locals>.<lambda>c                   S   s
   t ddS )Nr   moder   r(   r(   r(   r)   r>      r?   c                      s   t  ddS )Nr   r@   r   r(   r=   r(   r)   r>      r?   )r   
ValueErrorNotImplementedErrorr(   r(   r=   r)   test_exceptions   s    rD   c                   C   s    t tdd  t tdd  d S )Nc                   S   s
   t ddS )Nr<   r   r   r(   r(   r(   r)   r>      r?   ztest_raise.<locals>.<lambda>c                   S   s
   t ddS )Nzinteger :: ar+   r   r(   r(   r(   r)   r>      r?   )r   ImportErrorr(   r(   r(   r)   
test_raise   s    rF   N)Zsympy.parsing.sym_exprr   Zsympy.testing.pytestr   Zsympy.externalr   r   ZcinZsympy.codegen.astr   r	   r
   r   r   r   Z
sympy.corer   r   Zsympy.core.symbolr   r"   r5   r*   r7   r9   r:   r;   rD   rF   r(   r(   r(   r)   <module>   s$    .>
