o
    jg                     @   s  d dl Z d dlZd dlmZmZ d dlmZ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mZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d d	l.m/Z/m0Z0m1Z1 d d
l2m3Z3 d dl4m5Z5m6Z6 e+dZ7e+dZ8dd Z9e3dd Z:e6e3dd Z;e3dd Z<e3dd Z=e6e3dd Z>dd Z?dd Z@dd ZAd d! ZBd"d# ZCe3d$d% ZDdS )&    N)Symbolsymbols)

AssignmentPrintDeclarationFunctionDefinitionReturnrealFunctionCallVariableElementinteger)allocatableArrayConstructorisigndsigncmplxkind
literal_dpProgramModuleuse
Subroutine	dimensionassumed_extentImpliedDoLoop
intent_outsizeDoSubroutineCallsum_arraybind_C)render_as_module)	unchanged)import_module)fcode)has_fortrancompile_run_stringscompile_link_import_strings)	may_xfail)skipXFAILcythonnumpyc                  C   s,   t ddd} t| }t|dddksJ d S )NxTr	   freesource_formatzsize(x))r   r   r&   )r/   sx r5   W/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/codegen/tests/test_fnodes.py	test_size   s   r7   c                  C   s   t  std tddd} tt| d t|  d g}t| dgdd	}ttd
|g|}t	|gd t
dt	|gdfdgdd\\}}}d|v sJJ |dksPJ |d tjksYJ d S )NNo fortran compiler found.aTr0            ?:indimintentrmsmod_rmsrms.f90)main.f90zprogram myprog
use mod_rms, only: rms
real*8, dimension(4), parameter :: x = [4, 2, 2, 2]
print *, dsqrt(7d0) - rms(x)
end program
cleanz0.00000 exit_status)r'   r+   r   r   r    r   r!   r   r	   r#   r(   osEX_OK)r9   bodyarrfdstdoutstderrinfor5   r5   r6   test_size_assumed_shape   s    	
rQ   c            
      C   s   t  std tddd\} }t|d |ddd}td|d	g}t| d
gtgd} td|  t	| |t
| gg}t|ddd}td|fgdd\\}}}d D ]}	|	|v sYJ qQ|dks`J |d tjksiJ d S )Nr8   za iTr      r:   i   r<   )r?   attrsidlprogi  r1   standardr3   rD   rE   z-28 -27 -1 1 27 28rG   rH   )r'   r+   r   r   r   r!   r   r   as_Declarationr   r   r&   r(   splitrI   rJ   )
r9   iidlacprogfsrcrN   rO   rP   numstrr5   r5   r6   test_ImpliedDoLoop8   s"   rb   c                  C   s   t ddd} t| d}t|}t| | d g}td||g}t s&td tdt	|d	d
fgdd\\}}}d|v s=J d|v sCJ |dksIJ |d t
jksRJ d S )Nr/   Tr0   *      foor8   rD   Z   rY   rE   4243rG   rH   )r   r   deducedr   r   r   r'   r+   r(   r&   rI   rJ   )r/   vxdeclprntr_   rN   rO   rP   r5   r5   r6   test_ProgramO   s   "rn   c            	      C   s   t ddd} t| }ttd|gt| d g}tdg |g}tddg}tdt	ddgd	t
d
|gg}t s<td tdt|ddfdt|ddfgdd\\}}}d|v sZJ td|v sbJ |dkshJ d S )Nr/   Tr0   sqrr:   mod_sqg      E@foobaronlyz"Square of 42 = "r8   z
mod_sq.f90rf   rg   rD   rE   rh   i  rG   )r   r   rj   r   r	   r   r   r
   r   r   r   r'   r+   r(   r&   str)	r/   v_xsqrp   sq_callprg_sqrN   rO   rP   r5   r5   r6   test_Module`   s(   

ry   c               	   C   s  t ddd} t ddd}tj| tttfd}t|}tdt}ttt	| |gt
d|d	  g|d|}td
|gt|t|t|t| |g}t ddd}tj|tdgd}td|gd}	tdt|	|gdt|t||gtt||gg}
t std tdt|	ddfdt|
ddfgdd\\}}}dd tddD }tt|d d |v sJ |D ]}t|d d |v sJ q|dksJ d S )NrTr0   r\   rR   rV   nrd   r:   fr/   rS   mymod)definitionsre   rr   r8   za.f90rf   rg   zb.f90rE   c                 S   s   g | ]}d |d  qS )g      ?r:   r5   ).0r\   r5   r5   r6   
<listcomp>   s    z#test_Subroutine.<locals>.<listcomp>   rT   rG   )r   r   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r'   r+   r(   r&   rangert   sum)rz   r\   v_rv_iv_ndo_loopsubr/   v_x3modr_   rN   rO   rP   ref_r5   r5   r6   test_Subroutinev   sL   


r   c                  C   s<   t ddd} ttd| sJ ttd| ddddksJ d S )	Nr/   TrR   rd   _   r1   rX   zisign(1, x))r   r$   r   r&   r/   r5   r5   r6   
test_isign   s    r   c                  C   s<   t d} ttd| sJ tttd| ddddksJ d S )Nr/   rd   r   r1   rX   zdsign(1d0, x))r   r$   r   r&   r   r   r5   r5   r6   
test_dsign   s   $r   c                  C   s   t d} ttd| sJ d S )Nr/   rd   )r   r$   r   r   r5   r5   r6   
test_cmplx   s   r   c                  C   s   t d} tt| sJ d S )Nr/   )r   r$   r   r   r5   r5   r6   	test_kind   s   r   c                   C   s   t tddddksJ d S )Nr   r1   r2   0d0)r&   r   r5   r5   r5   r6   test_literal_dp   s   r   c            	      C   s  t  std tstd tstd tddd} tddd}tt| d	 | d
 g}t| |gdd}tt	d||g|t
dgd}t|gd}t .}td|fdddd fg|d\}}t|tg dd dk srJ W d    d S 1 s}w   Y  d S )Nr8   zCython not found.zNumPy not found.r9   Tr0   srR   r:   r;   r=   r>   rA   r{   rB   rC   z_rms.pyxz#cython: language_level={}
3zscdef extern double rms(double*, int*)
def py_rms(double[::1] x):
    cdef int s = x.size
    return rms(&x[0], &s)
)	build_dir)       @g      @r   r   gҩ*@g+=)r'   r+   r-   npr   r   r    r!   r   r	   r"   r#   tempfileTemporaryDirectoryr)   formatabspy_rms)	r9   r   rK   rL   rM   f_modfolderr   rP   r5   r5   r6   test_bind_C   s2   

&	"r   )ErI   r   sympy.core.symbolr   r   sympy.codegen.astr   r   r   r   r   r	   r
   r   r   r   sympy.codegen.fnodesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   sympy.codegen.futilsr#   sympy.core.exprr$   sympy.externalr%   sympy.printing.codeprinterr&   sympy.utilities._compilationr'   r(   r)   !sympy.utilities._compilation.utilr*   sympy.testing.pytestr+   r,   r-   r   r7   rQ   rb   rn   ry   r   r   r   r   r   r   r   r5   r5   r5   r6   <module>   sD    0\


)