Ë
    7^(h  ã                   óh  — d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZ d dl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 d dl m!Z! d dl"m#Z#m$Z$m%Z% d dl&m'Z' d dl(m)Z)m*Z*m+Z+  ed«      Z, ed«      Z-d„ Z.e'd„ «       Z/e'd„ «       Z0d„ Z1e' e+d«      d„ «       «       Z2d„ Z3y)é    N)ÚlogÚMinÚMaxÚsqrt)ÚFloat)ÚSymbolÚsymbols)Úcos)Ú
AssignmentÚRaiseÚRuntimeError_ÚQuotedString)Únewtons_methodÚnewtons_method_function)Úexpm1)Úbind_C)Úrender_as_module)Úimport_module)Úccode)Úcompile_link_import_stringsÚhas_cÚhas_fortran)Ú	may_xfail)ÚskipÚraisesÚskip_under_pyodideÚcythonÚ	wurlitzerc            	      óÀ   — t        d«      \  } }}t        | «      | dz  z
  }t        || ||«      }|j                  t	        || |j                  | «      z  «      «      sJ ‚y )Nz	x dx atolé   )r	   r
   r   Úhasr   Údiff)ÚxÚdxÚatolÚexprÚalgos        úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/codegen/tests/test_algorithms.pyÚtest_newtons_methodr)      s[   € Ü˜+Ó&�K€A€rˆ4Üˆq‹6�A�q‘D‰=€DÜ˜$  4¨Ó,€DØ�8‰8”J˜r D 5¨¯©°1«Ñ#5Ó6Ô7Ð7Ñ7ó    c                  ó®  — t        dd¬«      } t        | «      | dz  z
  }t        || «      }t        st	        d«       t        «       st	        d«       ddi}t        j                  «       5 }t        d	d
t        |«      z   fddj                  d«      dz   fg||¬«      \  }}t        |j                  d«      dz
  «      dk  sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nr#   T©Úrealr    úcython not installed.úNo C compiler found.ÚstdÚc99znewton.cú%#include <math.h>
#include <stdio.h>
ú_newton.pyxú#cython: language_level={}
Ú3zIcdef extern double newton(double)
def py_newton(x):
    return newton(x)
)Ú	build_dirÚcompile_kwargsç      à?çßºv™ö±ë?çê-�™—q=)r   r
   r   r   r   r   ÚtempfileÚTemporaryDirectoryr   r   ÚformatÚabsÚ	py_newton)r#   r&   ÚfuncÚ
compile_kwÚfolderÚmodÚinfos          r(   Ú#test_newtons_method_function__ccoderE      sí   € äˆs˜Ô€AÜˆq‹6�A�q‘D‰=€DÜ" 4¨Ó+€DåÜÐ$Ô%ÜŒ7ÜÐ#Ô$à˜�€JÜ	×	$Ñ	$Ó	&ð 	@¨&Ü/Øð 1Ü49¸$³Kñ@ð AàÐ;×BÑBÀ3ÓGð6ñ6ð 8ð1
ð ¨Jô8‰	ˆˆTô �3—=‘= Ó%¨Ñ6Ó7¸%Ò?Ð?Ñ?÷	@÷ 	@ñ 	@ús   Á)ACÃCc                  óÀ  — t        dd¬«      } t        | «      | dz  z
  }t        || t        d¬«      g¬«      }t        st        d«       t        «       st        d	«       t        |gd
«      }t        j                  «       5 }t        d|fddj                  d«      dz   fg|¬«      \  }}t        |j                  d«      dz
  «      dk  sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nr#   Tr,   r    Únewton)Úname)Úattrsr.   zNo Fortran compiler found.Ú
mod_newtonz
newton.f90r3   r4   r5   zRcdef extern double newton(double*)
def py_newton(double x):
    return newton(&x)
)r6   r8   r9   r:   )r   r
   r   r   r   r   r   Úf_moduler;   r<   r   r=   r>   r?   )r#   r&   r@   Úf_modrB   rC   rD   s          r(   Ú#test_newtons_method_function__fcoderM   4   sç   € äˆs˜Ô€AÜˆq‹6�A�q‘D‰=€DÜ" 4¨´6¸xÔ3HÐ2IÔJ€DåÜÐ$Ô%ÜŒ=ÜÐ)Ô*ä�d�V˜\Ó*€EÜ	×	$Ñ	$Ó	&ð @¨&Ü/Ø˜5Ð!ØÐ;×BÑBÀ3ÓGð7ñ7ð 9ð1
ð ô‰	ˆˆTô �3—=‘= Ó%¨Ñ6Ó7¸%Ò?Ð?Ñ?÷@÷ @ñ @ús   Á?ACÃCc                  óÊ   — t        dd¬«      } t        | «      | dz  z
  }t        || «      }t        |«      }i }t	        |||«       t        d|«      }t        |dz
  «      dk  sJ ‚y )Nr#   Tr,   r    znewton(0.5)r9   r:   )r   r
   r   Ú	py_moduleÚexecÚevalr>   )r#   r&   r@   Úpy_modÚ	namespaceÚress         r(   Ú$test_newtons_method_function__pycoderU   K   si   € Üˆs˜Ô€AÜˆq‹6�A�q‘D‰=€DÜ" 4¨Ó+€DÜ�t‹_€FØ€IÜˆ�˜IÔ&Ü
ˆ}˜iÓ
(€CÜˆs�^Ñ#Ó$ uÒ,Ð,Ñ,r*   z,Emscripten does not support process spawningc                  ó  ‡‡— t        d«      x} \  Š}}}|t        |‰z  «      z  |‰dz  z  z
  Št        t        ˆˆfd„«       t        }t        ‰‰| |¬«      }t        «       st        d«       t        st        d«       ddi}t        j                  «       5 }t        d	d
t        |«      z   fddj                  d«      dz   fg||¬«      \  }}	|r2t        j                  «       5 \  }
}|j                  d«      }d d d «       n|j                  d«      }t!        dz
  «      dk  sJ ‚|st        d«       
j#                  «       j#                  «       }}
|dk(  sJ ‚|
dk(  sJ ‚	 d d d «       y # 1 sw Y   ŒaxY w# 1 sw Y   y xY w)Nzx A k pr    c                  ó   •— t        ‰ ‰«      S ©N)r   )r&   r#   s   €€r(   ú<lambda>z@test_newtons_method_function__ccode_parameters.<locals>.<lambda>[   s   ø€ Ô6°t¸QÓ?€ r*   )Údebugr/   r.   r0   r1   znewton_par.cr2   z_newton_par.pyxr4   r5   zycdef extern double newton(double, double, double, double)
def py_newton(x, A=1, k=1, p=1):
    return newton(x, A, k, p)
)r7   r6   r8   r9   r:   zAC-level output only tested when package 'wurlitzer' is available.Ú zïx=         0.5
x=      1.1121 d_x=     0.61214
x=     0.90967 d_x=    -0.20247
x=     0.86726 d_x=   -0.042409
x=     0.86548 d_x=  -0.0017867
x=     0.86547 d_x= -3.1022e-06
x=     0.86547 d_x= -9.3421e-12
x=     0.86547 d_x=  3.6902e-17
)r	   r
   r   Ú
ValueErrorr   r   r   r   r   r;   r<   r   r   r=   Úpipesr?   r>   Úread)ÚargsÚAÚkÚpÚuse_wurlitzerr@   rA   rB   rC   rD   ÚoutÚerrÚresultr&   r#   s                @@r(   Ú.test_newtons_method_function__ccode_parametersrg   V   s¤  ù€ ô   	Ó*Ð*€D‰:ˆ1ˆa��AØŒS��1‘‹X‰:˜˜!˜Q™$™Ñ€DÜ
Œ:Ô?Ô@Ü€Mä" 4¨¨D¸ÔF€DäŒ7ÜÐ#Ô$ÝÜÐ$Ô%à˜�€JÜ	×	$Ñ	$Ó	&ð  ¨&Ü/Øð 1Ü49¸$³Kñ@ð AàÐ!?×!FÑ!FÀsÓ!Kð"?ñ"?ð Að1
ð %°ô8‰	ˆˆTñ Ü—‘Ó"ð ,¡j s¨CØŸ™ sÓ+�÷,ð ,ð —]‘] 3Ó'ˆFä�6˜NÑ*Ó+¨eÒ3Ð3Ð3áÜÐTÔUà—8‘8“:˜sŸx™x›zˆSˆØ�bŠyÐˆyØð 	ò 	ð 		ñ 	÷/ ð  ÷,ð ,ú÷ ð  ús&   ÂAE5Ã"E)Ã7A(E5Å)E2	Å.E5Å5E>c                  ó¬  ‡‡‡— t        ddd¬«      \  Š} Š}}t        ddd¬«      }||z
  dz
  }‰| z
  |z  }t        | «      t        t        t        ‰«      t        | «      z
  |z  «       «      z   }|t        |«      z
  }d„ Šdˆˆˆfd	„idd
„ idd„ idœ}|| f}	dD �],  }
| ‰‰||fdd|
|dd‰‰ft	        t        t        d«      «      «      dœ	}|j                  «       D ��ci c]   \  }}|t        |	d|› d�it        |fi |¤Ž¤Ž“Œ" }}}|j                  «       D ��ci c]  \  }}|t        |«      “Œ }}}i }i }|j                  «       D ]$  \  }}i x}||<   t        |||«       ||› d�   ||<   Œ& t        d«      }ddddœ}d}|j                  «       D ]3  \  }} ||dddd«      }|||   z  }|
r|dz  }t        ||z
  «      |k  rŒ3J ‚ �Œ/ y c c}}w c c}}w )Nza b c N_geo N_totT)r-   ÚnonnegativeÚi)Úintegerri   é   c                 ó.   — t        t        | |«      |«      S rX   )r   r   )Úlowr&   Úhighs      r(   Ú_clampz:test_newtons_method_function__rtol_cse_nan.<locals>._clamp‘   s   € Ü”3�s˜D“> 4Ó(Ð(r*   Údelta_fnc                 ó†   •—  ‰t        ‰|z  «      |z
  dz  |  | j                  |«      z  t        ‰|z  «      |z
  dz  «      S )Ng®Gáz®ï?)r   r"   )Úer#   rp   ÚaÚcs     €€€r(   rY   z<test_newtons_method_function__rtol_cse_nan.<locals>.<lambda>•   sE   ø€ ±FÜ�!�A‘#‹Y�q‰[˜$ÑØˆBˆq�v‰v�a‹y‰LÜ�!�A‘#‹Y�q‰[˜$Ñó5
€ r*   c                 óŒ   — d| | j                  |«      z  z  d| j                  |«      dz  z  | | j                  |d«      z  z
  z  S )Néþÿÿÿé   ©r"   ©rs   r#   s     r(   rY   z<test_newtons_method_function__rtol_cse_nan.<locals>.<lambda>š   sG   € ¨R°°1·6±6¸!³9±Ñ-=¸qÀÇÁÈÃÈAÁ¹~ÐPQÐRS×RXÑRXÐYZÐ\]ÓR^ÑP^Ñ?^Ñ-_€ r*   c                 ó¬   — |  | j                  |«      z  d| | j                  |«      z  | j                  |d«      z  dz  | j                  |«      z  z
  z  S )Nrl   rx   ry   rz   s     r(   rY   z<test_newtons_method_function__rtol_cse_nan.<locals>.<lambda>›   sS   € °!°°A·F±F¸1³I±¸qÀÀ1Ç6Á6È!Ã9ÁÈQÏVÉVÐTUÐVWË[ÑAXÐYZÑAZÐ[\×[aÑ[aÐbcÓ[dÑAdÑ?dÑ1e€ r*   )Úclamped_newtonÚhalleyÚ
halley_alt)FTé<   g0Žä.ÿ++g¼‰Ø—²Ò¬<zencountered NaN.)	ÚparamsÚitermaxrZ   ÚcseÚcounterr%   ÚrtolÚboundsÚ
handle_nanÚ	func_nameÚ_bz"13.2261515064168768938151923226496gMgâñžµ<g      @g{®Gáz„?g      Y@é2   éd   rx   )r	   r   r   r   r   r   r   Úitemsr   ÚdictrO   rP   r   r>   )ÚbÚN_geoÚN_totrj   ÚN_ariÚ	delta_ariÚln_delta_geoÚeqb_logÚmeth_kwr_   Úuse_cseÚkwargsra   Úkwr@   ÚvrR   rS   Úroot_find_bÚnsÚrefÚreftolÚguessÚmethrf   Úreqrp   rt   ru   s                             @@@r(   Ú*test_newtons_method_function__rtol_cse_nanr    ‰   sM  ú€ Ü#Ð$7¸dÐPTÔUÑ€A€qˆ!ˆU�EÜˆs˜D¨dÔ3€AØ�E‰M˜AÑ€EØ�1‘�e‘€IÜ�q“6œC¤¬¨A«¬s°1«v©°uÑ'<Ó!=Ð =Ó>Ñ>€LØœS ›^Ñ+€Gò)ð &õ (
ð ð
 Ñ`ÐaØ!Ñ#fÐgñ€Gð �Aˆ:€DØ ó +ˆà˜!˜Q  uÐ-¸"ÀtÐT[Ø &°%ÀAÀaÀ5Ü¤¬lÐ;MÓ.NÓ OÓPñ
ˆð
 jq×ivÑivÓix×yÑ`eÐ`aÐce�Ô*¨DÐ[¸q¸cÀ¸HÐ[ÌÈVÑHZÐWYÑHZÑ[Ñ[ÐyˆÑyØ.2¯j©j«l×;¡d a¨�!”Y˜q“\‘/Ð;ˆÑ;Øˆ	ØˆØ—L‘L“Nò 	*‰DˆAˆqØ "Ð"ˆB�˜1‘Ü��B˜ŒOØ 1 # R ™\ˆK˜ŠNð	*ô Ð8Ó9ˆØ$)°UÈ%ÑPˆØˆØ%×+Ñ+Ó-ò 	+‰JˆD�$Ù˜%  s¨B°Ó4ˆFØ�f˜T‘lÑ"ˆCÙØ�q‘�Ü�v ‘|Ó$ sÓ*Ð*Ð*ò	+ñ#+ùó zùÛ;s   Ã%G
ÄG)4r;   Úsympyr   r   r   r   Úsympy.core.numbersr   Úsympy.core.symbolr   r	   Ú(sympy.functions.elementary.trigonometricr
   Úsympy.codegen.astr   r   r   r   Úsympy.codegen.algorithmsr   r   Úsympy.codegen.cfunctionsr   Úsympy.codegen.fnodesr   Úsympy.codegen.futilsr   rK   Úsympy.codegen.pyutilsrO   Úsympy.externalr   Úsympy.printing.codeprinterr   Úsympy.utilities._compilationr   r   r   Ú!sympy.utilities._compilation.utilr   Úsympy.testing.pytestr   r   r   r   r   r)   rE   rM   rU   rg   r    © r*   r(   ú<module>r±      s´   ðÛ ß %Ó %Ý $ß -Ý 8ß LÓ Lß LÝ *Ý 'Ý =Ý ?Ý (Ý ,ß XÑ XÝ 7ß AÑ Aá	�xÓ	 €Ù˜+Ó&€	ò8ð ñ@ó ð@ð. ñ@ó ð@ò,-ð ÙÐBÓCñ.ó Dó ð.ób++r*   