§
    OŠtj61  ã                   óø  — 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 ]H\  ZZee         Z eee¦  «        re                     eef¦  «         Œ1e                     eef¦  «         ŒId„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$d!„ Z%d"„ Z&d#„ Z'dS )%é    )Ú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dS t          t          j        d¦  «        5 }| D ]8}t	          j        ||dt          j        ¬¦  «        }|dk    r ddd¦  «         dS Œ9	 ddd¦  «         n# 1 swxY w Y   dS )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/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/external/tests/test_codegen.pyÚtry_runr(   t   sé   € åð ØˆuÝ	�bŒj˜#Ñ	Ô	ð  $Øð 	ð 	ˆGÝ ”o g°dÀ$Ý%Ô,ð.ñ .ô .ˆGà˜!Š|ˆ|Øðð ð ñ ô ð ð ð ð ð	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˆ4s   ¤.A-ÁA-Á-A1Á4A1Tc                 ó<  — |                      ¦   «         }|t          v sJ ‚|t          v sJ ‚t          j        dd¦  «                             ¦   «         }|dvrt          d¦  «        ‚t          j        d|z  d| z  ¦  «        }t          j	        ¦   «         }t          j
        |¦  «         |rt          ||dd¬	¦  «         n(t          |d¦  «        }	|	                     |dd¬	¦  «         g }
|D ]†\  }}}}|›d
d                     d„ |D ¦   «         ¦  «        ›d|›d�}|dk    r+t          |¦  «        }t          t!          |¦  «        ¦  «        }|
                     t          |         ||dœz  ¦  «         Œ‡|dk    rd}n*|                     d¦  «        rd}nt'          d|z  ¦  «        ‚t)          |¦  «                             t          |         dd                     |
¦  «        iz  ¦  «         t-          |¦  «        }|rt-          dg¦  «        }nd}|dk    s
|dk    rˆ|r†|r„d„ } |d¦  «          |d¦  «          |d¦  «          |d¦  «          |d¦  «          |d¦  «          |d¦  «          |d ¦  «         t          j
        |¦  «         t          j        |¦  «         n2t1          d!|z  t2          j        ¬"¦  «         t          j
        |¦  «         |s#J d#|›d$d%                     |¦  «        ›�¦   «         ‚|s#J d&|›d'd%                     |¦  «        ›�¦   «         ‚d(S ))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   ó4   K  — | ]}t          |¦  «        V — Œd S ©N)Ústr)Ú.0Úargs     r'   ú	<genexpr>zrun_test.<locals>.<genexpr>©   s(   è è € Ð7Ð7¨3�c #™hœhÐ7Ð7Ð7Ð7Ð7Ð7ó    z)-(ú)r   )r!   Ú	thresholdzmain.f90ÚCzmain.cz2FIXME: filename extension unknown for language: %sÚ
statementsÚ z
./test.exeFr,   c                 óp   — t           j                             | ¦  «        rt          j        | ¦  «         d S d S r2   )r   ÚpathÚisfileÚremove)Úfilenames    r'   Úsafe_removezrun_test.<locals>.safe_removeÈ   s8   € ÝŒw�~Š~˜hÑ'Ô'ð $Ý”	˜(Ñ#Ô#Ð#Ð#Ð#ð$ð $r7   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Úexpectedr9   Úcall_stringÚf_nameÚcompiledÚexecutedrB   s                       r'   Úrun_testrj   �   sï  € ð �~Š~ÑÔ€HØ•}Ð$Ð$Ð$Ð$ØÕ.Ð.Ð.Ð.Ð.õ ŒIÐ-¨xÑ8Ô8×>Ò>Ñ@Ô@€EØÐ2Ð2Ð2ÝÐnÑoÔoÐoõ ÔÐ,¨xÑ7¸À¹ÑGÔG€DÝŒi‰kŒk€GÝ„HˆT�N„N€Nð ð ;õ 	�˜( I¸Ð=Ñ=Ô=Ð=Ð=å% h°	Ñ:Ô:ˆØ�Š�x °TˆÑ:Ô:Ð:ð €LØ.=ð 	ð 	Ñ*ˆ��x àˆGˆG�S—X’XÐ7Ð7°$Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7¸¸¸ðCˆà�uÒÐÝ5°kÑBÔBˆKÝ3µC¸	±N´NÑCÔCˆIØ×ÒÕ3°HÔ=ØØ"ðA
ð A
ñ 
ñ 	ô 	ð 	ð 	ð
 �5ÒÐØˆˆØ	×	Ò	˜SÑ	!Ô	!ð MØˆˆå!Ø@À8ÑKñMô Mð 	Mõ 	ˆ�L„L×ÒÝ�hÔ <°·²¸Ñ1FÔ1FÐ"GÑGñIô Ið Iõ �xÑ Ô €Hð ð Ý˜L˜>Ñ*Ô*ˆˆàˆð �ÒÐ˜U iÒ/Ð/°HÐ/ÀÐ/ð	$ð 	$ð 	$ð 	ˆ�MÑ"Ô"Ð"Øˆ�KÑ Ô Ð Øˆ�KÑ Ô Ð Øˆ�KÑ Ô Ð Øˆ�JÑÔÐØˆ�HÑÔÐØˆ�HÑÔÐØˆ�JÑÔÐÝ
Œ�ÑÔÐÝ
Œ�‰ŒˆˆåÐ$ tÑ+µ#´*Ð=Ñ=Ô=Ð=Ý
Œ�ÑÔÐð ð 'ð 'ð 'Øˆˆ�$—)’)˜HÑ%Ô%Ð%ð'ñ 'ô 'ˆ8àð 'ð 'ð 'Øˆˆ�$—)’)˜HÑ%Ô%Ð%ð'ñ 'ô 'ˆ8ð 'ð 'r7   c                 óÌ   ‡— ddl Š‰                     d¦  «        }‰                     d¦  «        }ˆfd„}d„ }|                     || ¦  «        } |                     || ¦  «        } | S )z;
    Replaces every literal float with literal doubles
    r   Nz\d+(\.)?\d*[eE]-?\d+z\d+\.\d*(?!\d*d)c                 óX   •— ‰                      dd|                      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Ô#4Ñ5Ô5Ð5r7   c                 ó2   — d|                       d¦  «        z  S )Nz%sd0r   )ro   )rp   s    r'   Ú
subs_floatz/fortranize_double_constants.<locals>.subs_floatë   s   € Ø˜Ÿš qÑ)Ô)Ñ)Ð)r7   )rq   Úcompilern   )Úcode_stringÚpattern_expÚpattern_floatrr   rt   rq   s        @r'   rQ   rQ   à   sŠ   ø€ ð €I€I€IØ—*’*Ð4Ñ5Ô5€KØ—J’JÐ2Ñ3Ô3€Mð6ð 6ð 6ð 6ð 6ð*ð *ð *ð —/’/ (¨KÑ8Ô8€KØ×#Ò# J°Ñ<Ô<€KàÐr7   c                 óˆ   — t          dt          ¦  «        }ddg}	 t          d|g|| |d¬¦  «         dS # t          $ r Y dS 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~   ô   sp   € å˜6¥1Ñ%Ô%€Gà%Ø&ð€OðÝ�  	¨?¸HÀhØð	!ñ 	!ô 	!ð 	!àˆtøÝð ð ð Øˆuˆuðøøøs   ›3 ³
AÁ Ac                  ó:   — dt           v rt          d¦  «         d S d S )Nr   z*`cc' command didn't work as expected (C89)©Úinvalid_lang_compilersr   © r7   r'   Útest_C89_ccr…     ó+   € ØÕ.Ð.Ð.ÝÐ9Ñ:Ô:Ð:Ð:Ð:ð /Ð.r7   c                  ó:   — dt           v rt          d¦  «         d S d S )Nr   z*`cc' command didn't work as expected (C99)r‚   r„   r7   r'   Útest_C99_ccrˆ     r†   r7   c                  ó:   — dt           v rt          d¦  «         d S d S )Nr   z'`ifort' command didn't work as expectedr‚   r„   r7   r'   Útest_F95_ifortrŠ     s+   € ØÕ1Ð1Ð1ÝÐ6Ñ7Ô7Ð7Ð7Ð7ð 2Ð1r7   c                  ó:   — dt           v rt          d¦  «         d S d S )Nr   z*`gfortran' command didn't work as expectedr‚   r„   r7   r'   Útest_F95_gfortranrŒ     s+   € ØÕ4Ð4Ð4ÝÐ9Ñ:Ô:Ð:Ð:Ð:ð 5Ð4r7   c                  ó:   — dt           v rt          d¦  «         d S d S )Nr   z%`g95' command didn't work as expectedr‚   r„   r7   r'   Útest_F95_g95rŽ   !  s+   € ØÕ/Ð/Ð/ÝÐ4Ñ5Ô5Ð5Ð5Ð5ð 0Ð/r7   c                  ó‚   — ddg} dt           t          z   t          z  fg}t          D ]\  }}t	          d|| ||¦  «         Œd S )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•   (  s`   € à.Ø0ð€Oð �1�q™5¥!™)Ð$Ð%€IÝ-ð Nð N‰ˆˆhÝ� )¨_¸dÀHÑMÔMÐMÐMðNð Nr7   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 ]H\  }}dD ]@} | |                     t.          |¦  «        ¦  «        }|                     ||f|df¦  «         ŒAŒIt4          D ]W\  }}|                     d¦  «        r%d |t.          ¦  «        fd |t.          ¦  «        fg}ng }t9          d||z   |||¦  «         ŒXd S )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)çš™™™™™É?ç      à?çš™™™™™é?ç›+¡†›„=r:   Ú
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  s}  € à"Ð"Ð"Ð"Ð"Ð"Ø"Ð"Ð"Ð"Ð"Ð"Ø:Ð:Ð:Ð:Ð:Ð:ØHÐHÐHÐHÐHÐHÐHÐHÐHÐHØDÐDÐDÐDÐDÐDÐDÐDØ=Ð=Ð=Ð=Ð=Ð=ØZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZÐZà	•c�!‘f”fÐØ	�d�d�1‘g”gÐØ	�d�d�1‘g”gÐØ	�d�d�1‘g”gÐØ	�S�S�‘V”VÐØ	�d�d�1‘g”gÐØ	�S�S�‘V”VÐØ	�B�B•q‘E”EÐØ	�S�S�‘V”VÐØ	�d�d�1‘g”gÐØ	�d�d�1‘g”gÐØ	�S�S�‘V”VÐØ	�d�d�1‘g”gÐð€Ið €OØð Eð E‰
ˆˆdØ!ð 	Eð 	EˆDØ�q˜Ÿš¥1 dÑ+Ô+Ñ,Ô,ˆHØ×"Ò" D¨4¨'°8¸UÐ#CÑDÔDÐDÐDð	Eõ .ð 2ð 2‰ˆˆhØ�?Š?˜3ÑÔð 	Ø(¨%¨%µ©(¬(Ð3°kÀ7À7Í1Á:Ä:Ð5NÐOˆKˆKàˆKÝÐ" I°Ñ$;Ø  $¨ñ	2ô 	2ð 	2ð 	2ð2ð 2r7   c                  ó„  — ddl m}  ddlm} d |t          t
          ¦  «        fdt          t
          z  fg}g }|D ]e\  }}dD ]]\  }} | |                     t          |¦  «                             t
          |¦  «        ¦  «        }|                     |||f|df¦  «         Œ^Œft          D ]\  }	}
t          d|||	|
¦  «         Œd S )	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�u�Q¥‘{”{Ð#Ø	•Q�‘TÐð€Ið €OØð Jð J‰
ˆˆdØ=ð 	Jð 	J‰JˆD�$Ø�q˜Ÿš¥1 dÑ+Ô+×0Ò0µ°DÑ9Ô9Ñ:Ô:ˆHØ×"Ò" D¨4°¨,¸À%Ð#HÑIÔIÐIÐIð	Jõ .ð Pð P‰ˆˆhÝÐ" I¨ÀÀhÑOÔOÐOÐOðPð Pr7   c                  óÄ  — ddl m}  ddlm}m}m} d |t          ¦  «         |t          ¦  «        z    |t          ¦  «        z   dz   	                    ¦   «         fd | | | | | | | |t          t          z   t          z   ¦  «        ¦  «        ¦  «        ¦  «        ¦  «        ¦  «        ¦  «        ¦  «        fg}g }|D ]€\  }}dD ]x\  }}	}
 | | 
                    t          |¦  «         
                    t          |	¦  «         
                    t          |
¦  «        ¦  «        }|                     |||	|
f|df¦  «         ŒyŒ�t          D ]\  }}t          d	||||¦  «         Œd S )
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ÐHÐHÐHÐHÐHÐHÐHÐHà	�C�C�‘F”F˜S˜S¥™VœV‘O c c­!¡f¤fÑ,¨qÑ0×8Ò8Ñ:Ô:Ð;Ø	�#�#�c�c˜#˜#˜c˜c # # c c¨#¨#¨c¨cµ!µa±%½!±)©n¬nÑ*=Ô*=Ñ&>Ô&>Ñ"?Ô"?Ñ@Ô@ÑAÔAÑBÔBÑCÔCÐDð€Ið €OØð Pð P‰
ˆˆdØ Sð 	Pð 	PÑˆD�$˜Ø�q˜Ÿš¥1 dÑ+Ô+×0Ò0µ°DÑ9Ô9×>Ò>½qÀ$ÑGÔGÑHÔHˆHØ×"Ò" D¨4°°tÐ*<¸hÈÐ#NÑOÔOÐOÐOð	Põ .ð Oð O‰ˆˆhÝØ! 9¨o¸tÀXñ	Oô 	Oð 	Oð 	OðOð Or7   )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„   r7   r'   ú<module>rá      sÈ  ðð0 Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ 
€
€
€
Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ð
 €ð
€ˆeÑ ð€ˆeÑ ð % UÔ+€ˆeÑ ð Ð ð"Ð ˜Ñ ð "9¸Ô!?Ð ˜Ñ ð"Ð ˜Ñ ð Ð ðð ð Ð �Ñ ð ð  ð  Ð �Ñ ðð ð Ð �Ñ ðð ð Ð �Ñ ðð ð Ð ð
ð 
ð 
ð\'ð \'ð \'ð \'ð~ð ð ð(ð ð ð Ð ØÐ Ø0ð 8ð 8�N€Dˆ(Ø Ô)€HØ€{�4˜Ñ"Ô"ð 8Ø×"Ò" D¨(Ð#3Ñ4Ô4Ð4Ð4à×%Ò% t¨XÐ&6Ñ7Ô7Ð7Ð7ð;ð ;ð ;ð
;ð ;ð ;ð
8ð 8ð 8ð
;ð ;ð ;ð
6ð 6ð 6ðNð Nð Nð#2ð #2ð #2ðLPð Pð Pð"Oð Oð Oð Oð Or7   