Ë
    7^(h61  ã                   óÒ  — d dl mZmZmZ d dlmZmZ d dlmZm	Z	m
Z
 d dlZd dlZd dlZd dlZd dlmZ i Zded<   ded	<   ed	   ed
<   i Zded	<   ed	   ed
<   ded<   i Zg d¢ed<   g d¢ed<   g d¢ed<   g d¢ed<   g d¢Zd„ Zd#d„Zd„ Zd„ Zg Zg ZeD ]:  \  ZZee   Z eee«      rej=                  eef«       Œ(ej=                  eef«       Œ< d„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d „ Z%d!„ Z&d"„ Z'y)$é    )ÚxÚyÚz)ÚIS_WASMÚskip)ÚcodegenÚmake_routineÚget_code_generatorN)ÚPathzy
program main
  include "codegen.h"
  integer :: result;
  result = 0

  %(statements)s

  call exit(result)
end program
ÚF95z�
#include "codegen.h"
#include <stdio.h>
#include <math.h>

int main() {
  int result = 0;

  %(statements)s

  return result;
}
ÚC89ÚC99z™
  if (fabs(%(call)s)>%(threshold)s) {
    printf("Numerical validation failed: %(call)s=%%e threshold=%(threshold)s\n", %(call)s);
    result = -1;
  }
zÁ
  if (abs(%(call)s)>%(threshold)s) then
    write(6,"('Numerical validation failed:')")
    write(6,"('%(call)s=',e15.5,'threshold=',e15.5)") %(call)s, %(threshold)s
    result = -1;
  end if
)zcc -c codegen.c -o codegen.ozcc -c main.c -o main.oz#cc main.o codegen.o -lm -o test.exeÚcc)z$gfortran -c codegen.f90 -o codegen.oz6gfortran -ffree-line-length-none -c main.f90 -o main.oz%gfortran main.o codegen.o -o test.exeÚgfortran)zg95 -c codegen.f90 -o codegen.oz1g95 -ffree-line-length-huge -c main.f90 -o main.oz g95 main.o codegen.o -o test.exeÚg95)z!ifort -c codegen.f90 -o codegen.ozifort -c main.f90 -o main.oz"ifort main.o codegen.o -o test.exeÚifort)©r   r   ©r   r   ©r   r   ©r   r   ©r   r   c                 óì   — t         ryt        t        j                  d«      5 }| D ]8  }t	        j
                  ||dt        j                  ¬«      }|dk7  sŒ0 ddd«       y 	 ddd«       y# 1 sw Y   yxY w)z>Run a series of commands and only return True if all ran fine.FÚwT)ÚstdoutÚshellÚstderrr   N)r   ÚopenÚosÚdevnullÚ
subprocessÚcallÚSTDOUT)ÚcommandsÚnullÚcommandÚretcodes       ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/external/tests/test_codegen.pyÚtry_runr(   t   sr   € åØÜ	Œb�j‰j˜#Ó	ð  $Øò 	ˆGÜ —o‘o g°dÀ$Ü%×,Ñ,ô.ˆGà˜!‹|Ø÷ð ñ	÷ð ÷ð ús   ¢2A*ÁA*ÁA*Á*A3c                 óN  — |j                  «       }|t        v sJ ‚|t        v sJ ‚t        j                  dd«      j                  «       }|dvrt        d«      ‚t        j                  d|z  d| z  «      }t        j                  «       }t        j                  |«       |rt        ||dd¬	«       n t        |d«      }	|	j                  |dd¬	«       g }
|D ]j  \  }}}}|›d
dj                  d„ |D «       «      ›d|›d�}|dk(  rt        |«      }t        t!        |«      «      }|
j#                  t        |   ||dœz  «       Œl |dk(  rd}n"|j%                  d«      rd}nt'        d|z  «      ‚t)        |«      j+                  t        |   ddj                  |
«      iz  «       t-        |«      }|rt-        dg«      }nd}|dk(  s	|dk(  rr|rp|rnd„ } |d«        |d«        |d«        |d«        |d«        |d«        |d«        |d «       t        j                  |«       t        j.                  |«       n3t1        d!|z  t2        j4                  ¬"«       t        j                  |«       |sJ d#|›d$d%j                  |«      ›�«       ‚|sJ d&|›d'd%j                  |«      ›�«       ‚y())a|  A driver for the codegen tests.

       This driver assumes that a compiler ifort is present in the PATH and that
       ifort is (at least) a Fortran 90 compiler. The generated code is written in
       a temporary directory, together with a main program that validates the
       generated code. The test passes when the compilation and the validation
       run correctly.
    ÚSYMPY_TEST_CLEAN_TEMPÚalways)r+   ÚsuccessÚneverzSSYMPY_TEST_CLEAN_TEMP must be one of the following: 'always', 'success' or 'never'.z_sympy_%s_testz%s_r   T)Úto_filesú(ú,c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Ústr)Ú.0Úargs     r'   ú	<genexpr>zrun_test.<locals>.<genexpr>©   s   è ø€ Ò7¨3œc #ŸhÑ7ùs   ‚z)-(ú)r   )r!   Ú	thresholdzmain.f90ÚCzmain.cz2FIXME: filename extension unknown for language: %sÚ
statementsÚ z
./test.exeFr,   c                 ón   — t         j                  j                  | «      rt        j                  | «       y y r2   )r   ÚpathÚisfileÚremove)Úfilenames    r'   Úsafe_removezrun_test.<locals>.safe_removeÈ   s#   € Ü�w‰w�~‰~˜hÔ'Ü—	‘	˜(Õ#ð (ó    zcodegen.f90z	codegen.cz	codegen.hz	codegen.ozmain.oztest.exezTEST NOT REMOVED: %s)Úfilezfailed to compile z code with:
ú
zfailed to execute z code from:
N)ÚupperÚmain_templateÚnumerical_test_templater   ÚgetenvÚlowerÚ
ValueErrorÚtempfileÚmkdtempÚgetcwdÚchdirr   r
   ÚwriteÚjoinÚfortranize_double_constantsr3   ÚappendÚ
startswithÚNotImplementedErrorr   Ú
write_textr(   ÚrmdirÚprintÚsysr   )ÚlabelÚroutinesÚnumerical_testsÚlanguager#   ÚfriendlyÚcleanÚworkÚoldworkÚcode_genÚtest_stringsÚfn_nameÚargsÚexpectedr8   Úcall_stringÚf_nameÚcompiledÚexecutedrA   s                       r'   Úrun_testrj   �   s­  € ð �~‰~Ó€HØ”}Ñ$Ð$Ð$ØÔ.Ñ.Ð.Ð.ô �I‰IÐ-¨xÓ8×>Ñ>Ó@€EØÐ2Ñ2ÜÐnÓoÐoô ×ÑÐ,¨xÑ7¸À¹ÓG€DÜ�i‰i‹k€GÜ‡H�HˆT„Nñ ô 	�˜( I¸Ö=ä% h°	Ó:ˆØ�‰�x °TˆÔ:ð €LØ.=ò 	Ñ*ˆ��x â�S—X‘XÑ7°$Ô7Õ7ºðCˆà�uÒÜ5°kÓBˆKÜ3´C¸	³NÓCˆIØ×ÑÔ3°HÑ=ØØ"ñA
ñ 
õ 	ð	ð �5ÒØ‰Ø	×	Ñ	˜SÔ	!Ø‰ä!Ø@À8ÑKóMð 	Mô 	ˆƒL×ÑÜ�hÑ <°·±¸Ó1FÐ"GÑGôIô �xÓ €Hñ Ü˜L˜>Ó*‰àˆð �Ò˜U iÒ/±HÁò	$ñ 	�MÔ"Ù�KÔ Ù�KÔ Ù�KÔ Ù�JÔÙ�HÔÙ�HÔÙ�JÔÜ
�‰�ÔÜ
�‰��äÐ$ tÑ+´#·*±*Õ=Ü
�‰�Ôñ ñ 'Ú�$—)‘)˜HÔ%ð'ó 'ˆ8áñ 'Ú�$—)‘)˜HÔ%ð'ó '‰8rB   c                 ó¬   ‡— ddl Š‰j                  d«      }‰j                  d«      }ˆfd„}d„ }|j                  || «      } |j                  || «      } | S )z;
    Replaces every literal float with literal doubles
    r   Nz\d+(\.)?\d*[eE]-?\d+z\d+\.\d*(?!\d*d)c                 óH   •— ‰j                  dd| j                  d«      «      S )Nz[eE]Údr   )ÚsubÚgroup)ÚmatchobjÚres    €r'   Úsubs_expz-fortranize_double_constants.<locals>.subs_expè   s   ø€ Ø�v‰v�f˜c 8§>¡>°!Ó#4Ó5Ð5rB   c                 ó*   — d| j                  d«      z  S )Nz%sd0r   )ro   )rp   s    r'   Ú
subs_floatz/fortranize_double_constants.<locals>.subs_floatë   s   € Ø˜Ÿ™ qÓ)Ñ)Ð)rB   )rq   Úcompilern   )Úcode_stringÚpattern_expÚpattern_floatrr   rt   rq   s        @r'   rQ   rQ   à   sZ   ø€ ó Ø—*‘*Ð4Ó5€KØ—J‘JÐ2Ó3€Mô6ò*ð —/‘/ (¨KÓ8€KØ×#Ñ# J°Ó<€KàÐrB   c                 óp   — t        dt        «      }ddg}	 t        d|g|| |d¬«       y# t        $ r Y yw xY w)NÚtest)rz   )ç      ð?r{   çVçž¯Ò<)rz   )ç      ð¿r}   r|   Úis_feasibleF)r]   T)r	   r   rj   ÚAssertionError)r\   r#   Úroutiner[   s       r'   r~   r~   ô   sL   € ä˜6¤1Ó%€Gà%Ø&ð€OðÜ�  	¨?¸HÀhØõ	!àøÜò Ùðús   –) ©	5´5c                  ó,   — dt         v rt        d«       y y )Nr   z*`cc' command didn't work as expected (C89)©Úinvalid_lang_compilersr   © rB   r'   Útest_C89_ccr…     ó   € ØÔ.Ñ.ÜÐ9Õ:ð /rB   c                  ó,   — dt         v rt        d«       y y )Nr   z*`cc' command didn't work as expected (C99)r‚   r„   rB   r'   Útest_C99_ccrˆ     r†   rB   c                  ó,   — dt         v rt        d«       y y )Nr   z'`ifort' command didn't work as expectedr‚   r„   rB   r'   Útest_F95_ifortrŠ     s   € ØÔ1Ñ1ÜÐ6Õ7ð 2rB   c                  ó,   — dt         v rt        d«       y y )Nr   z*`gfortran' command didn't work as expectedr‚   r„   rB   r'   Útest_F95_gfortranrŒ     s   € ØÔ4Ñ4ÜÐ9Õ:ð 5rB   c                  ó,   — dt         v rt        d«       y y )Nr   z%`g95' command didn't work as expectedr‚   r„   rB   r'   Útest_F95_g95rŽ   !  s   € ØÔ/Ñ/ÜÐ4Õ5ð 0rB   c                  ót   — ddg} dt         t        z   t        z  fg}t        D ]  \  }}t	        d|| ||«       Œ y )N)rz   )r{   g      @g      @g      5@r|   )rz   )r}   g       @ç      Àr�   r|   rz   Úbasic_codegen)r   r   r   Úvalid_lang_commandsrj   )r[   Ú	name_exprÚlangr#   s       r'   Útest_basic_codegenr•   (  sK   € à.Ø0ð€Oð œ1œq™5¤!™)Ð$Ð%€IÜ-ò N‰ˆˆhÜ� )¨_¸dÀHÕMñNrB   c                  óþ  — ddl m}  ddlm} ddlm} ddlm}m}m	} ddl
m}m} ddlm} ddlm}	m}
m}m}m}m} d	t-        t.        «      fd
 |	t.        «      fd |
t.        «      fd |t.        «      fd |t.        «      fd |t.        «      fd |t.        «      fd |t.        «      fd |t.        «      fd |t.        «      fd |t.        «      fd |t.        «      fd |t.        «      fg}g }|D ]>  \  }}dD ]4  } | |j1                  t.        |«      «      }|j3                  ||f|df«       Œ6 Œ@ t4        D ]G  \  }}|j7                  d«      rd |t.        «      fd |t.        «      fg}ng }t9        d||z   |||«       ŒI y )Nr   ©ÚN)Úln)Úlog)ÚcoshÚsinhÚtanh)ÚceilingÚfloor)Úsqrt)ÚacosÚasinÚatanÚcosÚsinÚtanÚ	test_fabsÚ	test_acosÚ	test_asinÚ	test_atanÚtest_cosÚ	test_coshÚtest_logÚtest_lnÚtest_sinÚ	test_sinhÚ	test_sqrtÚtest_tanÚ	test_tanh)çš™™™™™É?ç      à?çš™™™™™é?ç›+¡†›„=r9   Ú
test_floorÚ	test_ceilÚintrinsic_math1)Úsympy.core.evalfr˜   Úsympy.functionsr™   Ú&sympy.functions.elementary.exponentialrš   Ú%sympy.functions.elementary.hyperbolicr›   rœ   r�   Ú#sympy.functions.elementary.integersrž   rŸ   Ú(sympy.functions.elementary.miscellaneousr    Ú(sympy.functions.elementary.trigonometricr¡   r¢   r£   r¤   r¥   r¦   Úabsr   ÚsubsrR   r’   rS   rj   )r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r“   r[   ÚnameÚexprÚxvalre   r”   r#   Úname_expr_Cs                           r'   Útest_intrinsic_math1_codegenrÈ   2  sv  € å"Ý"Ý:ßHÑHßDÝ=ßZ×Zà	”cœ!“fÐØ	‘dœ1“gÐØ	‘dœ1“gÐØ	‘dœ1“gÐØ	‘Sœ“VÐØ	‘dœ1“gÐØ	‘Sœ“VÐØ	‘B”q“EÐØ	‘Sœ“VÐØ	‘dœ1“gÐØ	‘dœ1“gÐØ	‘Sœ“VÐØ	‘dœ1“gÐð€Ið €OØò E‰
ˆˆdØ!ò 	EˆDÙ˜Ÿ™¤1 dÓ+Ó,ˆHØ×"Ñ" D¨4¨'°8¸UÐ#CÕDñ	EðEô .ò 2‰ˆˆhØ�?‰?˜3ÔØ(©%´«(Ð3°kÁ7Ì1Ã:Ð5NÐO‰KàˆKÜÐ" I°Ñ$;Ø  $¨õ	2ñ2rB   c                  óT  — ddl m}  ddlm} d |t        t
        «      fdt        t
        z  fg}g }|D ]V  \  }}dD ]L  \  }} | |j                  t        |«      j                  t
        |«      «      }|j                  |||f|df«       ŒN ŒX t        D ]  \  }	}
t        d|||	|
«       Œ y )	Nr   r—   )Úatan2Ú
test_atan2Útest_pow))r´   çÍÌÌÌÌÌô?)rµ   çš™™™™™É¿)r¶   r¶   r·   Úintrinsic_math2)
r»   r˜   rÁ   rÊ   r   r   rÃ   rR   r’   rj   )r˜   rÊ   r“   r[   rÄ   rÅ   rÆ   Úyvalre   r”   r#   s              r'   Útest_instrinsic_math2_codegenrÑ   X  s¿   € å"Ý>à	‘uœQ¤“{Ð#Ø	”Qœ‘TÐð€Ið €OØò J‰
ˆˆdØ=ò 	J‰JˆD�$Ù˜Ÿ™¤1 dÓ+×0Ñ0´°DÓ9Ó:ˆHØ×"Ñ" D¨4°¨,¸À%Ð#HÕIñ	JðJô .ò P‰ˆˆhÜÐ" I¨ÀÀhÕOñPrB   c                  óB  — ddl m}  ddlm}m}m} d |t        «       |t        «      z    |t        «      z   dz  j                  «       fd | | | | | | | |t        t        z   t        z   «      «      «      «      «      «      «      «      fg}g }|D ]l  \  }}dD ]b  \  }}	}
 | |j                  t        |«      j                  t        |	«      j                  t        |
«      «      }|j                  |||	|
f|df«       Œd Œn t        D ]  \  }}t        d	||||«       Œ y )
Nr   r—   )r¤   r¥   r¦   Útest1é   Útest2))r´   rÍ   g333333Ó¿)rµ   rÎ   g        )r¶   gÍÌÌÌÌÌ @r¶   gê-�™—q=Úcomplicated_codegen)r»   r˜   rÁ   r¤   r¥   r¦   r   r   r   ÚexpandrÃ   rR   r’   rj   )r˜   r¤   r¥   r¦   r“   r[   rÄ   rÅ   rÆ   rÐ   Úzvalre   r”   r#   s                 r'   Útest_complicated_codegenrÙ   i  s   € Ý"ßHÑHà	‘Cœ“F™S¤›V‘O¡c¬!£fÑ,¨qÑ0×8Ñ8Ó:Ð;Ø	‘#‘c™#™c¡#¡c©#©c´!´a±%¼!±)«nÓ*=Ó&>Ó"?Ó@ÓAÓBÓCÐDð€Ið €OØò P‰
ˆˆdØ Sò 	PÑˆD�$˜Ù˜Ÿ™¤1 dÓ+×0Ñ0´°DÓ9×>Ñ>¼qÀ$ÓGÓHˆHØ×"Ñ" D¨4°°tÐ*<¸hÈÐ#NÕOñ	PðPô .ò O‰ˆˆhÜØ! 9¨o¸tÀXõ	OñOrB   )T)(Ú	sympy.abcr   r   r   Úsympy.testing.pytestr   r   Úsympy.utilities.codegenr   r	   r
   rX   r   rK   r    Úpathlibr   rF   rG   Úcompile_commandsÚcombinations_lang_compilerr(   rj   rQ   r~   r’   rƒ   r”   Úcompilerr#   rR   r…   rˆ   rŠ   rŒ   rŽ   r•   rÈ   rÑ   rÙ   r„   rB   r'   ú<module>rá      so  ð÷0 Ñ ß .ß MÑ MÛ 
Û 	Û Û Ý ð
 €ð
€ˆeÑ ð€ˆeÑ ð % UÑ+€ˆeÑ ð Ð ð"Ð ˜Ñ ð "9¸Ñ!?Ð ˜Ñ ð"Ð ˜Ñ ð Ð òÐ �Ñ ò Ð �Ñ òÐ �Ñ òÐ �Ñ òÐ ò
ó\'ò~ò(ð Ð ØÐ Ø0ò 8�N€Dˆ(Ø Ñ)€HÙ�4˜Ô"Ø×"Ñ" D¨(Ð#3Õ4à×%Ñ% t¨XÐ&6Õ7ð8ò;ò
;ò
8ò
;ò
6òNò#2òLPó"OrB   