o
    h4.                     @   s   d dl mZ d dlmZ d dlmZ edZerld dlmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZmZmZ d dlmZ e Ze ZdZd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dS dd Z#dS )    )raisesSymPyExpression)import_modulelfortran)	VariableIntBaseTypeFloatBaseTypeStringReturnFunctionDefinition
AssignmentDeclaration	CodeBlock)IntegerFloatAdd)Symbolz5    integer :: a, b, c, d
    real :: p, q, r, s
    c                  C   s  t d } tt d}t| d}| }| }tddD ]}t|| ts&J t|| ts/J qt|d ts9J |d tttdt	t
dtddksPJ |d	 tttd
t	t
dtddksgJ |d tttdt	t
dtddks~J |d tttdt	t
dtddksJ |d tttdtt
dtddksJ |d tttdtt
dtddksJ |d tttdtt
dtddksJ |d tttdtt
dtddksJ |d tttdtdtd
 td ksJ d S )Nz%            d = a + b -c
            fr         aintegertypevalue   b   c   d   preal           q   rs)srcr   return_exprrange
isinstancer   r   r   r   r   r
   r   r	   r   )src1expr3expr4ls1ls2i r5   [/var/www/vscode/kcb/lib/python3.10/site-packages/sympy/parsing/tests/test_fortran_parser.pytest_sym_expr   s   


















r7   c                  C   s   t d } t| d t }tddD ]}|dk r#t|| ts"J qt|| ts,J q|d ttt	dtt	dks@J |d ttt	d	tt	d
ksSJ |d ttt	dtt	dksfJ |d ttt	dtt	dksyJ d S )NzT            a = b
            c = d
            p = q
            r = s
            r   r      r   r   r   	   r   r!   
   r#   r'      r)   r*   )
r+   expr1convert_to_exprr,   r-   r.   r   r   r   r   r/   r2   iterr5   r5   r6   test_assignmentc   s4   	










r@   c                  C   s   t d } t| d t }tddD ]}t|| tsJ q|d tttdtdtd ks4J |d tttd	tdtd ksIJ |d
 tttdtdtd td ksbJ d S )NzR            c = a + b
            d = a + c
            s = p + q + r
            r   r   r;   r   r   r   r9   r!   r:   r*   r#   r'   r)   	r+   r<   r=   r,   r-   r.   r   r   r   r>   r5   r5   r6   test_binop_add   (   




rB   c                  C   s   t d } t| d t }tddD ]}t|| tsJ q|d tttdtdtd ks4J |d tttd	tdtd ksIJ |d
 tttdtdtd td ksbJ d S )NzR            c = a - b
            d = a - c
            s = p - q - r
            r   r   r;   r   r   r   r9   r!   r:   r*   r#   r'   r)   rA   r>   r5   r5   r6   test_binop_sub   rC   rD   c                  C   s   t d } t| d t }tddD ]}t|| tsJ q|d tttdtdtd ks4J |d tttd	tdtd ksIJ |d
 tttdtdtd td ksbJ d S )NzR            c = a * b
            d = a * c
            s = p * q * r
            r   r   r;   r   r   r   r9   r!   r:   r*   r#   r'   r)   rA   r>   r5   r5   r6   test_binop_mul   rC   rE   c                  C   s   t d } t| d t }tddD ]}t|| tsJ q|d tttdtdtd ks4J |d tttd	tdtd ksIJ |d
 tttdtdtd ks^J |d tttdtdtd kssJ d S )Nzd            c = a / b
            d = a / c
            s = p / q
            r = q / p
            r   r   r8   r   r   r   r9   r!   r:   r*   r#   r'   r;   r)   rA   r>   r5   r5   r6   test_binop_div   s0   	






rF   c                  C   s  t d } t| d t }tddD ]}t|| tsJ q|d tttdtdtd td ks8J |d	 tttdtdtd td ksQJ |d
 tttdtdtd td ksjJ |d tttdtdtd tdtd  ksJ d S )Nzx            d = a + b - c
            c = a * b + d
            s = p * q / r
            r = p * s + q / p
            r   r   r8   r!   r   r   r   r9   r:   r*   r#   r'   r)   r;   rA   r>   r5   r5   r6   test_mul_binop   s0   	






rG   c                  C   s6  d} t | d t  D ]}t|tsJ |tttdtdttdttdft	t
ttdttdtddt
ttdttdtddt
ttdttdtddt
ttdttdtddt
ttd	ttdtddtttdttdtd	tttdd
ksJ qd S )Nzg        integer function f(a,b)
        integer :: x, y
        f = x + y
        end function
        r   r   r   r   r   r   xy)name
parametersbody)r<   r=   r,   r.   r   r   r
   r   r   r   r   r   r   r   r   )r/   r?   r5   r5   r6   test_function  sl   








rM   c                  C   s  t td t  } t  D ]	}t|tsJ q| d tttdtt	dt
ddks/J | d tttdtt	dt
ddksFJ | d tttd	tt	dt
ddks]J | d
 tttdtt	dt
ddkstJ | d tttdtt	dtddksJ | d tttdtt	dtddksJ | d tttdtt	dtddksJ | d tttdtt	dtddksJ d S )Nr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r   r*   )r<   r=   r+   r,   r.   r   r   r   r   r
   r   r	   r   )lsr?   r5   r5   r6   test_varT  sx   














rO   c                      s0   ddl m  tt fdd ttdd  d S )Nr   ASR2PyVisitorc                      s     S )Nr5   r5   rP   r5   r6   <lambda>  s    ztest_raise.<locals>.<lambda>c                   S   s   t dddS )N r   )moder   r5   r5   r5   r6   rR     s    )$sympy.parsing.fortran.fortran_parserrQ   r   ImportErrorr5   r5   rP   r6   
test_raise  s   rW   N)$sympy.testing.pytestr   sympy.parsing.sym_exprr   sympy.externalr   r   sympy.codegen.astr   r   r	   r
   r   r   r   r   r   
sympy.corer   r   r   sympy.core.symbolr   r<   expr2r+   r7   r@   rB   rD   rE   rF   rG   rM   rO   rW   r5   r5   r5   r6   <module>   s*    ,L# >?