
    g                     n   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*  ed          Z+ ed          Z,d Z-e'd             Z.e'd             Z/d Z0e'd             Z1d Z2dS )    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cython	wurlitzerc            	          t          d          \  } }}t          |           | dz  z
  }t          || ||          }|                    t	          || |                    |           z                      sJ d S )Nz	x dx atol   )r	   r
   r   hasr   diff)xdxatolexpralgos        _/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/codegen/tests/test_algorithms.pytest_newtons_methodr(      st    +&&KAr4q66AqD=D$4,,D88JrD51#5667777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
                    d          dz   fg||          \  }}t          |                    d          dz
            dk     sJ 	 d d d            d S # 1 swxY w Y   d S )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__ccoderD      s   sAq66AqD=D"4++D &$%%%77 %#$$$J		$	&	& 	@&/ 149$KK@ A;BB3GG66 81
 J8 8 8	T 3==%%677%?????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   A-C<<D D 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                    d          dz   fg|          \  }}t          |                    d          dz
            dk     sJ 	 d d d            d S # 1 swxY w Y   d S )Nr"   Tr+   r   newton)name)attrsr-   zNo Fortran compiler found.
mod_newtonz
newton.f90r2   r3   r4   zRcdef extern double newton(double*)
def py_newton(double x):
    return newton(&x)
)r5   r7   r8   r9   )r   r
   r   r   r   r   r   f_moduler:   r;   r   r<   r=   r>   )r"   r%   r?   f_modrA   rB   rC   s          r'   #test_newtons_method_function__fcoderL   4   s   sAq66AqD=D"46x3H3H3H2IJJJD &$%%%== +)***dV\**E		$	&	& @&/5!;BB3GG77 91
   	T 3==%%677%?????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   AD		DDc                     t          dd          } t          |           | dz  z
  }t          ||           }t          |          }i }t	          |||           t          d|          }t          |dz
            dk     sJ d S )Nr"   Tr+   r   znewton(0.5)r8   r9   )r   r
   r   	py_moduleexecevalr=   )r"   r%   r?   py_mod	namespaceress         r'   $test_newtons_method_function__pycoderT   K   s    sAq66AqD=D"4++Dt__FII&&&
}i
(
(Cs^#$$u,,,,,,r)   c                     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                    d          dz   fg||          \  }}	|rJt                                          5 \  }
}|                    d          }d d d            n# 1 swxY w Y   n|                    d          }t!          |dz
            dk     sJ |st          d           |
                                |                                }}
|dk    sJ |
dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nzx A k pr   c                  $    t                     S N)r   )r%   r"   s   r'   <lambda>z@test_newtons_method_function__ccode_parameters.<locals>.<lambda>Z   s    6tQ?? r)   )debugr.   r-   r/   r0   znewton_par.cr1   z_newton_par.pyxr3   r4   zycdef extern double newton(double, double, double, double)
def py_newton(x, A=1, k=1, p=1):
    return newton(x, A, k, p)
)r6   r5   r7   r8   r9   zAC-level output only tested when package 'wurlitzer' is available. zx=         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?   r@   rA   rB   rC   outerrresultr%   r"   s                @@r'   .test_newtons_method_function__ccode_parametersrf   V   s   	***D:1aAS1XX:!Q$D
:?????@@@M"4DFFFD77 %#$$$ &$%%%J		$	&	&  &/ 149$KK@ A!?!F!Fs!K!K"?"? A1
 %8 8 8	T  	("" ,jsCs++, , , , , , , , , , , , , , , ]]3''F6N*++e3333 	VTUUU88::sxxzzSbyyyy 	 	 	 	 	 	/                                   s8   4AGD6*G6D:	:G=D:	>A:GG
G
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	fd|                                D             }
d |
                                D             }i }i }|                                D ]+\  }}i x}||<   t          |||           || d         ||<   ,t          d          }dddd}d}|                                D ]>\  }}
 |
|dddd          }|||         z  }|	r|dz  }t          ||z
            |k     sJ ?,d S )Nza b c N_geo N_totT)r,   nonnegativei)integerrh      c                 >    t          t          | |          |          S rW   )r   r   )lowr%   highs      r'   _clampz:test_newtons_method_function__rtol_cse_nan.<locals>._clamp   s    3sD>>4(((r)   delta_fnc                      t          |z            |z
  dz  |  |                     |          z  t          |z            |z
  dz            S )NgGz?)r   r!   )er"   ro   acs     r'   rX   z<test_newtons_method_function__rtol_cse_nan.<locals>.<lambda>   sR    FF!A#YYq[$BqvvayyL!A#YYq[$5
 5
 r)   c                     d| |                      |          z  z  d|                      |          dz  z  | |                      |d          z  z
  z  S )N   r!   rr   r"   s     r'   rX   z<test_newtons_method_function__rtol_cse_nan.<locals>.<lambda>   sN    R166!99-=qA~PQRSRXRXYZ\]R^R^P^?^-_ r)   c                     |  |                      |          z  d| |                      |          z  |                      |d          z  dz  |                      |          z  z
  z  S )Nrk   rw   rx   ry   s     r'   rX   z<test_newtons_method_function__rtol_cse_nan.<locals>.<lambda>   s\    !AFF1IIq166!99QVVTUVW[[AXYZAZ[\[a[abc[d[dAd?d1e r)   )clamped_newtonhalley
halley_alt)FT<   g0.++gؗҬ<zencountered NaN.)	paramsitermaxrY   csecounterr$   rtolbounds
handle_nanc                 P    i | ]"\  }}|t          d | dit          fi |#S )	func_name_b)r   dict).0r`   kwr^   kwargss      r'   
<dictcomp>z>test_newtons_method_function__rtol_cse_nan.<locals>.<dictcomp>   sL    yyy`e`ace*D[qHHH[VHZHZWYHZHZ[[yyyr)   c                 4    i | ]\  }}|t          |          S  )rN   )r   r`   vs      r'   r   z>test_newtons_method_function__rtol_cse_nan.<locals>.<dictcomp>   s$    ;;;da!Yq\\;;;r)   r   z"13.2261515064168768938151923226496gMg<g      @g{Gz?g      Y@2   d   rw   )r	   r   r   r   r   r   r   itemsrO   r   r=   )bN_geoN_totri   N_ari	delta_ariln_delta_geoeqb_logmeth_kwuse_cser?   rQ   rR   root_find_br`   r   nsrefreftolguessmethre   reqro   rs   r^   rt   r   s                          @@@@@r'   *test_newtons_method_function__rtol_cse_nanr      s   #$7dPTUUUAq!UEsDd333AEMAE1eIq66CAs1vvu'<!=!= =>>>LS^^+G) ) ) & (
 (
 (
 (
 (
 (
 
 ``a!#f#fg G A:D  + +!Qu-"tT[&%Aa5l;M.N.N O OPP
 

 zyyyyipivivixixyyy;;djjll;;;	LLNN 	* 	*DAq ""B1BOOO1\KNN899$)U%PP%++-- 	+ 	+JD$T%sB44FfTl"C qv|$$s*****	+#+ +r)   )3r:   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   rJ   sympy.codegen.pyutilsrN   sympy.externalr   sympy.printing.codeprinterr   sympy.utilities._compilationr   r   r   !sympy.utilities._compilation.utilr   sympy.testing.pytestr   r   r   r   r(   rD   rL   rT   rf   r   r   r)   r'   <module>r      s    % % % % % % % % % % % % $ $ $ $ $ $ - - - - - - - - 8 8 8 8 8 8 L L L L L L L L L L L L L L L L L L L L * * * * * * ' ' ' ' ' ' = = = = = = ? ? ? ? ? ? ( ( ( ( ( ( , , , , , , X X X X X X X X X X 7 7 7 7 7 7 - - - - - - - -	x	 	 M+&&	8 8 8 @ @ @. @ @ @,- - - . . .b++ ++ ++ ++ ++r)   