
    g                        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      Z7 e+d      Z8d Z9e3d        Z:e6e3d               Z;e3d        Z<e3d        Z=e6e3d               Z>d Z?d Z@d ZAd ZBd ZCe3d        ZDy)    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                  X    t        dd      } t        |       }t        |d      dk(  sJ y )NxTr
   freesource_formatzsize(x))r   r   r'   )r1   sxs     T/var/www/openai/venv/lib/python3.12/site-packages/sympy/codegen/tests/test_fnodes.py	test_sizer8      s,    sA	aB6*i777    c                     t               st        d       t        dd      } t        t	        | dz        t        |       z  dz        g}t        | dgd	      }t        t        d
|g|      }t        |gd       t        dt        |gd      fdgd      \  \  }}}d|v sJ |dk(  sJ |d   t        j                  k(  sJ y )NNo fortran compiler found.aTr2            ?: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)r<   bodyarrfdstdoutstderrinfos          r7   test_size_assumed_shaperT      s    =)*sADAJtAw&+,-D
uT
*C	D%#	5BbT9%0	$bT956		2 	VVd R<<"((***r9   c                     t               st        d       t        dd      \  } }t        |dz  |ddd      }t	        d|d	g      }t        | d
gt        g      } t        d| j                         t        | |      t        | g      g      }t        |dd      }t        d|fgd      \  \  }}}dj                         D ]  }	|	|v rJ  |dk(  sJ |d   t        j                  k(  sJ y )Nr;   za iTr      r=   i   r?   )rB   attrsidlprogi  r3   standardr5   rG   rH   z-28 -27 -1 1 27 28rJ   rK   )r(   r,   r   r   r   r"   r   r   as_Declarationr   r   r'   r)   splitrL   rM   )
r<   iidlacprogfsrcrQ   rR   rS   numstrs
             r7   test_ImpliedDoLooprf   8   s     =)*5$'DAq
1aQ
*C	3R.	)BacU;-0A9	1bqc
 D
 F;D0:t2D1ETRVVd&,,. /R<<"((***r9   c                  ^   t        dd      } t        j                  | d      }t        |      }t	        | | dz   g      }t        d||g      }t               st        d       t        dt        |d	
      fgd      \  \  }}}d|v sJ d|v sJ |dk(  sJ |d   t        j                  k(  sJ y )Nr1   Tr2   *      foor;   rG   Z   r]   rH   4243rJ   rK   )r   r   deducedr   r   r   r(   r,   r)   r'   rL   rM   )r1   vxdeclprntrc   rQ   rR   rS   s           r7   test_Programrs   O   s    sA			!R	 Br?D!QqS?D54,'D=)*0:uTTV?W2X1YaefVVd6>>6>>R<<"((***r9   c            	         t        dd      } t        j                  |       }t        t        d|gt        | dz        g      }t        dg |g      }t        ddg      }t        dt        ddg	      t        d
|g      g      }t               st        d       t        dt        |d      fdt        |d      fgd      \  \  }}}d|v sJ t        d      |v sJ |dk(  sJ y )Nr1   Tr2   sqrr=   mod_sqg      E@foobaronlyz"Square of 42 = "r;   z
mod_sq.f90rk   rl   rG   rH   rm   i  rJ   )r   r   ro   r   r
   r	   r   r   r   r   r   r(   r,   r)   r'   str)	r1   v_xsqrv   sq_callprg_sqrQ   rR   rS   s	            r7   test_Moduler   `   s    sA


1
C	D%#1	?BHb2$'F53%(GXHE7#"G,-  F =)*0	uVb12	U6B/02 VVd 6>>u:R<<r9   c                     t        dd      } t        dd      }t        j                  | t        t              t
        f      }t        j                  |      }t        dt              }t        t        t        | |g      t        d      |d	z  z        g|d|      }t        d
|gt        |      t        |      t        |t        |             |g      }t        dd      }t        j                  |t        d      g      }t        d|g      }	t        dt!        |	|g      t        |      t#        ||g      t%        t'        |      |g      g      }
t)               st+        d       t-        dt/        |	d      fdt/        |
d      fgd      \  \  }}}t1        dd      D cg c]
  }d|d	z  z   }}t3        t5        |            d d |v sJ |D ]  }t3        |      d d |v rJ  |dk(  sJ y c c}w )NrTr2   r`   rV   rZ   nri   r=   fr1   rW   mymod)definitionsrj   rx   r;   za.f90rk   rl   zb.f90rH      g      ?rX   rJ   )r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r!   r(   r,   r)   r'   rangerz   sum)r   r`   v_rv_iv_ndo_loopsubr1   v_x3modrc   rQ   rR   rS   ref_s                   r7   test_Subroutiner   v   s   
 	sAsD!A


1Y~%>
$K
LC


1
C
3
 C71qc?JqM!Q$$67!SG S3%CC3Q 	" C 	sAAil^4D
se
,C5CseDsTF#tDz4 !	 D =)*0	%b)*	%r*+2 VVd #1a[
)[3q!t8[C
)s3x="'''1vcr{f$$$ R<<	 *s   &G3c                  ~    t        dd      } t        t        d|       sJ t        t        d|       dd      dk(  sJ y )	Nr1   TrV   ri   _   r3   r\   zisign(1, x))r   r%   r   r'   r1   s    r7   
test_isignr      s=    sD!AUAq!!!q!r@MQQQr9   c                      t        d      } t        t        d|       sJ t        t        t	        d      |       dd      dk(  sJ y )Nr1   ri   r   r3   r\   zdsign(1d0, x))r   r%   r   r'   r   r   s    r7   
test_dsignr      s@    sAUAq!!!z!}a(2VLP____r9   c                  @    t        d      } t        t        d|       sJ y )Nr1   ri   )r   r%   r   r   s    r7   
test_cmplxr      s    sAUAq!!!r9   c                  >    t        d      } t        t        |       sJ y )Nr1   )r   r%   r   r   s    r7   	test_kindr      s    sAT1r9   c                  :    t        t        d      d      dk(  sJ y )Nr   r3   r4   0d0)r'   r    r9   r7   test_literal_dpr      s    Af5>>>r9   c            	      l   t               st        d       t        st        d       t        st        d       t	        dd      } t	        dd      }t        t        | d	z        |z  d
z        g}t        | |gd      }t        t        d||g|t        d      g      }t        |gd      }t        j                         5 }t        d|fddj                  d      dz   fg|      \  }}t!        |j#                  t        j                  g d            dz
        dk  sJ 	 d d d        y # 1 sw Y   y xY w)Nr;   zCython not found.zNumPy not found.r<   Tr2   srV   r=   r>   r@   rA   rD   r   rE   rF   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)	r<   r   rN   rO   rP   f_modfolderr   rS   s	            r7   test_bind_Cr      s   =)* ! sAsD!ADAJqL2%&'D
s4
(C	D%#q4u	OBbT9-E		$	$	&&/.55c:..01
 	T 3::bhh'789FBCeKKK 
'	&	&s    A D**D3)ErL   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   r8   rT   rf   rs   r   r   r   r   r   r   r   r   r   r9   r7   <module>r      s   	  /       
 2 % ( , f f 7 ,	x	 78 + +0 
+  +* + +   * 
&  &RR`"

? L Lr9   