
    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 Z2y)    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        || ||      }|j                  t	        || |j                  |       z              sJ y )Nz	x dx atol   )r	   r
   r   hasr   diff)xdxatolexpralgos        X/var/www/openai/venv/lib/python3.12/site-packages/sympy/codegen/tests/test_algorithms.pytest_newtons_methodr(      s[    +&KAr4q6AqD=D$4,D88JrD5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__ccoderD      s    sAq6AqD=D"4+D$%7#$J		$	$	&&/ 149$K@ A;BB3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.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q6AqD=D"46x3H2IJD$%=)*dV\*E		$	$	&&/5!;BB3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)r8   r9   )r   r
   r   	py_moduleexecevalr=   )r"   r%   r?   py_mod	namespaceress         r'   $test_newtons_method_function__pycoderT   K   si    sAq6AqD=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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>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X:!Q$D
:?@M"4DFD7#$$%J		$	$	&&/ 149$K@ A!?!F!Fs!K"?"? A1
 %8	T "jsCs+ #" ]]3'F6N*+e333TU88:sxxzSby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)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  |  | j                  |      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>   sC    F!A#Yq[$BqvvayL!A#Yq[$5
r)   c                     d| | j                  |      z  z  d| j                  |      dz  z  | | j                  |d      z  z
  z  S )N   r!   rr   r"   s     r'   rX   z<test_newtons_method_function__rtol_cse_nan.<locals>.<lambda>   sE    R166!9-=qA~PQRSRXRXYZ\]R^P^?^-_r)   c                     |  | j                  |      z  d| | j                  |      z  | j                  |d      z  dz  | j                  |      z  z
  z  S )Nrk   rw   rx   ry   s     r'   rX   z<test_newtons_method_function__rtol_cse_nan.<locals>.<lambda>   sQ    !AFF1Iq166!9QVVTUVW[AXYZAZ[\[a[abc[dAd?d1er)   )clamped_newtonhalley
halley_alt)FT<   g0.++gؗҬ<zencountered NaN.)	paramsitermaxrY   csecounterr$   rtolbounds
handle_nan	func_name_bz"13.2261515064168768938151923226496gMg<g      @g{Gz?g      Y@2   d   rw   )r	   r   r   r   r   r   r   itemsr   dictrN   rO   r   r=   )bN_geoN_totri   N_ari	delta_ariln_delta_geoeqb_logmeth_kwr^   use_csekwargsr`   kwr?   vrQ   rR   root_find_bnsrefreftolguessmethre   reqro   rs   rt   s                             @@@r'   *test_newtons_method_function__rtol_cse_nanr      sB   #$7dPTUAq!UEsDd3AEMAE1eIq6CAs1vu'<!= =>>LS^+G) & (
 
 `a!#fgG A:D !Qu-"tT[&%Aa5l;M.N OP

 jqivivixyix`e`ace*D[qcH[VHZWYHZ[[ixy.2jjl;lda!Yq\/l;	LLNDAq ""B1BO1#R\KN # 89$)U%P%++-JD$%sB4FfTl"Cqv|$s*** .# ! z;s   %G
G)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'   <module>r      s     % % $ - 8 L L L * ' = ? ( , X X 7 -	x	 +&	8 @ @. @ @,- . .b++r)   