o
    im                     @   sJ  d dl Z d dlZd dlZd dlmZ d dlm  mZ	 d dl
mZmZmZ d dlmZmZmZ d dlmZmZmZ d dlmZmZmZ d dlmZ eejdgZd	Zd
Z ejj!dedejj!de dG dd dZ"G dd dZ#ejj!dedejj!de dG dd de#Z$ejj!dedejj!de dG dd de#Z%dS )    N)array_api_compatible)xp_assert_closexp_assert_equalxp_assert_less)is_numpyis_torcharray_namespace)statsoptimizespecial)
derivativejacobianhessian)_EERRORINCREASEskip_xp_backendsz5Array API does not support fancy indexing assignment.z*JAX arrays do not support item assignment.Zarray_api_strict)reasonz	jax.numpyc                	   @   sd  e Zd Zdd Zejddedddgdd	 Z	ejj
d
dejdejjdd Zejdddgejde dddgdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zejd*d+ejdd,d,d-gfejd.d/d0d1 Zd2d3 Zd4d5 Zejj
d
dejjejdd6d7 dfd8d7 dffd9d: Zd;S )<TestDerivativec                 C   s
   t |S Nr   ndtr)selfx r   f/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/differentiate/tests/test_differentiate.pyf      
zTestDerivative.fr   333333?皙?
   c                 C   sn   | dj}t| j|j ||d}|j t ||d}t|j| t	|s5t
||j| |j d S d S )N      ?dtype)asarrayr"   r   r   r	   normpdfr   dfr   r   abserror)r   r   xpZdefault_dtyperesrefr   r   r   
test_basic   s   zTestDerivative.test_basicT)np_onlycasec                 C   sL   |\}}t t|| }| d }t|j|}||}t|j|dd d S )N皙?绽|=atol)getattrr	   Zmedianr   Zcdfr%   r   r&   )r   r.   distnameparamsdistr   r*   r+   r   r   r   test_accuracy)   s   
zTestDerivative.test_accuracyorder      shape)         )r>      r@   c                    s  |rt ddd|nd}t | i t jfdd} fdd}d	d
< dd< t||j||jdd}|| }dd |D }	t	||j
d||	 dd |D }
t	||jd||
 dd |D }t	||jd||dd dd |D }t||jd|| dd |D }t||jd|| dd |D }t||jd|| t|r||jd ksJ dd |D }t||jd|| t|r||jd
 ksJ d S d S )Nr   r   r<   r   c                    s   t j|  dS )Nr8   )r   r   r   )r8   r   r   r   _derivative_single<   s   z=TestDerivative.test_vectorization.<locals>._derivative_singlec                    sV   d  d7  < d  | j  ks| jdkrdn| jd 7  < j| g|R i |S )Nnitr9   feval)sizendimr;   r   )r   argskwargs)nr   stater   r   r   @   s   .z,TestDerivative.test_vectorization.<locals>.frF   rD   r   rE   r!   rA   c                 S      g | ]}|j qS r   rB   .0r+   r   r   r   
<listcomp>K       z5TestDerivative.test_vectorization.<locals>.<listcomp>rF   c                 S   rM   r   )r&   rN   r   r   r   rP   N   rQ   c                 S   rM   r   )r(   rN   r   r   r   rP   Q   rQ   g-q=r1   c                 S   s   g | ]}t |jqS r   )boolsuccessrN   r   r   r   rP   U       c                 S      g | ]}t |jqS r   )npint32statusrN   r   r   r   rP   X       c                 S   rV   r   )rW   rX   nfevrN   r   r   r   rP   [   rZ   c                 S   rV   r   )rW   rX   rD   rN   r   r   r   rP   `   rZ   )rW   linspacereshaperG   Z	vectorizer   r#   float64Zravelr   r   r&   r(   r   rT   rY   r[   r   maxrD   )r   r8   r;   r)   r   rC   r   r*   refsZref_xZref_dfZ	ref_errorZref_successZref_flagZref_nfevZref_nitr   )rK   r8   r   rL   r   test_vectorization3   s@   
z!TestDerivative.test_vectorizationc                    s   t jd fdd d _jdjdf}t jdjdt	ddd	|d
}j
tjttjtjgjd}t|j| d S )N   ;O c                    sb    j d7  _ dd fddfddfddg  fddt| |d	D }|S )
Nr9   c                 S   s   | d S Ng      @r   rB   r   r   r   <lambda>k       z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>c                    s    |    S r   )exprandomrB   rngr)   r   r   rd   l   rQ   c                    
     | S r   rf   rB   r)   r   r   rd   m      
 c                    s     |  jS r   )	full_likenanrB   rl   r   r   rd   n       c                    s    g | ]\}} t | |qS r   )int)rO   r   jfuncsr   r   rP   o   s     z8TestDerivative.test_flags.<locals>.f.<locals>.<listcomp>rR   )rD   zipr]   stack)Zxsjsr*   r   ri   r)   rs   r   r   i   s   

 
z$TestDerivative.test_flags.<locals>.fr   r?   r!   +=rtolr@   )
tolerancesr8   rI   )rW   rg   default_rngrD   ZarangeZint64r   onesr^   dictr#   eim_ECONVERGEDr   	_ECONVERR
_EVALUEERRrX   r   rY   )r   r)   rI   r*   	ref_flagsr   rx   r   
test_flagse   s    zTestDerivative.test_flagsc                    sl   t jd  fdd}t|jdjdtdddd	d
}jtjt	tj
tjgjd}t|j| d S )Nrb   c                    s8   | d  |     | | jg}|S rc   )rf   rg   rn   ro   rv   r   outrh   r   r   r      s   
z3TestDerivative.test_flags_preserve_shape.<locals>.fr9   r!   ry   rz   r@   T)r|   r8   preserve_shape)rW   rg   r}   r   r#   r^   r   r   r   r   r   r   rX   r   rY   )r   r)   r   r*   r   r   rh   r   test_flags_preserve_shape~   s   z(TestDerivative.test_flags_preserve_shapec                    s    fdd}  d}    dd d|  dd d|   d d|  |d d  d d|  |d   g}t||d	d
}t|j| d S )Nc                    sD   |   d|  |   d|     d|  | d d  g} |S )Nr>   r      r9   r@   )sinrv   r   rl   r   r   r      s   :
z-TestDerivative.test_preserve_shape.<locals>.f        r9   r>   r   r   r@   Tr   )r#   cosr   r   r   r&   )r   r)   r   r   r+   r*   r   rl   r   test_preserve_shape   s   
06z"TestDerivative.test_preserve_shapec           	      C   sF  |j d|jd}tj}ttjd}tddd}|	 }d|d< t
|||dd}t|j| dk s4J d	|d< t
|||dd}t|j| d	k sKJ t|j| t|j| k s[J |	 }d|d
< t
|||dd}t|j| d| k sxJ d	|d
< t
|||dd}t|j| d	| k sJ t|j| t|j| k sJ d S )Nr    r!   r   )r2   r{   gMbP?r2   r?   )r|   r8   gư>r{   )r#   r^   r   r   floatr	   r$   r%   r   copyr   r'   r&   )	r   r)   r   r   r+   Ztolerances0r|   res1res2r   r   r   test_convergence   s(    $zTestDerivative.test_convergencec           	      C   s  |j d|jd}tj}ttjd}t||ddd}t||ddd}t	|j
| t	|j
| k s3J t||ddd}t||d	dd}t	|j
| t	|j
| k sSJ td
ddd}t||fddd|}t||fddd|}t|j
|j
dd tdddd}t||fddd|}t||fdtd dd|}t|j
|j
dd d|d< t||fddd|}t||fdtd dd|}t|j
|j
dd d S )Nr    r!         ?r9   )initial_stepmaxiterg?r@   )step_factorr   r   r?   r   )r8   r   step_direction)r   r   g+<rz   rF   r   )r#   r^   r   r   r   r	   r$   r%   r   r'   r&   r   r   rW   sqrt)	r   r)   r   r   r+   r   r   rJ   r*   r   r   r   test_step_parameters   s*     ""z#TestDerivative.test_step_parametersc                    sp    fdd}  ddd} |}d\||dk < ||dk< t|||d	}t|j |  |js6J d S )
Nc                    s$     | } j|| dk | dk < |S )Nr   r@   )rf   ro   r   yrl   r   r   r      s   
z-TestDerivative.test_step_direction.<locals>.fr   r@   r   )r9   rF   r   gffffff?r   )r\   
zeros_liker   r   r&   rf   allrT   )r   r)   r   r   r   r*   r   rl   r   test_step_direction   s   
z"TestDerivative.test_step_directionc           	      C   s   dd }dd }| |g dd}| |g dd}| |d	d
gd}t||||fd}|||||jj}|j||djd}t|j| d S )Nc                 S   s   | | S r   r   r   pr   r   r   r      s   z=TestDerivative.test_vectorized_step_direction_args.<locals>.fc                 S   s   || |d   S Nr9   r   r   r   r   r   r&      s   z>TestDerivative.test_vectorized_step_direction_args.<locals>.df)r9   r@   r>   r?   )rF   r9   r9   rF   r   r9   )r9   rF   r9   r@   r>   )r9   r9   rF   )r   rI   r    r!   )r]   r#   r   Zbroadcast_tor&   r;   r"   r   )	r   r)   r   r&   r   hdirr   r*   r+   r   r   r   #test_vectorized_step_direction_args   s   z2TestDerivative.test_vectorized_step_direction_argsc           
   	      s    fdd} j d jd}  g d}  dddd	}t|||d
d|d} |j|| } |d ddf |dd df k sIJ t|j	d D ]}t||||df d
d|d}	t
|j|d d f |	jdd qPd S )Nc                    rj   r   rk   rB   rl   r   r   r      r   z+TestDerivative.test_initial_step.<locals>.fr   r!   r   r   r   )rF   r9   r@   r9   )r   r8   r   r   rF   .ry   rz   )r#   r^   r]   Zlogspacer   r'   r&   r   ranger;   r   )
r   r)   r   r   r   h0r*   errir+   r   rl   r   test_initial_step   s   * z TestDerivative.test_initial_stepc                    s   |j d|jd}ddd }d}t||tddd	}||jr#J ||j|d
 d
 d  ks5J ||jks?J  fdd d _	d  _
t  _t|| tddd}| D ].}|dkrx|| tjksnJ || tjkswJ q_||  j
|   kr|| ksJ  J q_d S )Ng~,?r!   r>   c                 S   s   t | }|S r   r   )r   r*   r   r   r   r     s   
z/TestDerivative.test_maxiter_callback.<locals>.f   V瞯<rz   )r   r|   r9   r@   c                    sj     j d7  _ |  _t| dsJ t| j jvsJ  jt| j | jtj	ks,J  j kr3t
d S )Nr9   r   )iterr*   hasattrr   r&   dfsaddrY   r   Z_EINPROGRESSStopIterationr*   callbackr   r   r   r     s   
z6TestDerivative.test_maxiter_callback.<locals>.callbackrF   )r   r|   rY   )r#   r^   r   r   anyrT   r   r[   rD   r   r*   setr   keysr   r   Z
_ECALLBACK)r   r)   r   r   Zdefault_orderr*   r   keyr   r   r   test_maxiter_callback
  s&   $	,z$TestDerivative.test_maxiter_callbackr   r   g?gffffff?r"   )float16float32r^   c           
         s    dkrt std t  j| d} fdd} fdd}t||d||d	}|jj ks7J |jj ks?J |j	j ksGJ 
 j}trW|d
 d n|d
 }	t|j|j|	d d S )Nr   z+float16 not tested for alternative backendsr!   c                    s   | j  ksJ | S r   )r"   rf   rB   r"   r)   r   r   r   ;  s   
z$TestDerivative.test_dtype.<locals>.fc                    s4   | j j ksJ | jj ksJ | jj ksJ d S r   )r   r"   r&   r(   r   r!   r   r   r   ?  s   z+TestDerivative.test_dtype.<locals>.callbackr?   )r8   r   r   r   2   rz   )r   pytestskipr3   r#   r   r   r"   r&   r(   Zfinfoepsr   r   rf   )
r   r   r   r"   r)   r   r   r*   r   r{   r   r   r   
test_dtype0  s   

zTestDerivative.test_dtypec                 C   sH  | d}d}tjt|d td | W d    n1 sw   Y  d}tjt|d tdd | d W d    n1 sAw   Y  d}tjt|d td	d | d
dg W d    n1 sfw   Y  d}tjt|d tdd |tddd W d    n1 sw   Y  tjt|d tdd |tddd W d    n1 sw   Y  tjt|d tdd |t d W d    n1 sw   Y  d}tjt|d tdd |dd W d    n1 sw   Y  tjt|d tdd |dd W d    n	1 sw   Y  d}tjt|d tdd |dd W d    n	1 s5w   Y  tjt|d tdd |dd W d    n	1 sVw   Y  d }tjt|d td!d |d"d# W d    n	1 syw   Y  d$}tjt|d td%d |d&d' W d    d S 1 sw   Y  d S )(Nr9   z`f` must be callable.matchz3Abscissae and function output must be real numbers.c                 S      | S r   r   rB   r   r   r   rd   W      z6TestDerivative.test_input_validation.<locals>.<lambda>y            ?z6When `preserve_shape=False`, the shape of the array...c                 S   s   g dS )N)r9   r@   r>   r   rB   r   r   r   rd   [  re   r   z6Tolerances and step parameters must be non-negative...c                 S   r   r   r   rB   r   r   r   rd   _  r   rF   r1   r|   c                 S   r   r   r   rB   r   r   r   rd   a  r   Zekkirz   c                 S   r   r   r   rB   r   r   r   rd   c  r   r   %`maxiter` must be a positive integer.c                 S   r   r   r   rB   r   r   r   rd   g  r         ?r   c                 S   r   r   r   rB   r   r   r   rd   i  r   r   z"`order` must be a positive integerc                 S   r   r   r   rB   r   r   r   rd   m  r   rA   c                 S   r   r   r   rB   r   r   r   rd   o  r   z'`preserve_shape` must be True or False.c                 S   r   r   r   rB   r   r   r   rd   s  r   Zherringr   z`callback` must be callable.c                 S   r   r   r   rB   r   r   r   rd   w  r   Z	shrubbery)r   )r#   r   raises
ValueErrorr   r   object)r   r)   onemessager   r   r   test_input_validationM  sZ   
$z$TestDerivative.test_input_validationc                    s  dd }t |s#t||dtddd}|jsJ t|j|d t|j|d|jd	}t	|j||j t	|j
|jd
|jd t|j|ddd}t	|j||j t	|j
|jd
|jd tdD ]X |jd|jd} fdd}d  | d   }t||dtd d}t|j|dd t	|j|j|j|jd t||td d}|jsJ |jdksJ t|j|dd qjdd }t||d|dd}t|j|d d S )Nc                 S   s&   t | }|| jdsJ | d d S )Nzreal floatingc   r9   )r   Zisdtyper"   )r   xp_testr   r   r   r   ~  s   z,TestDerivative.test_special_cases.<locals>.f   r0   rz   r   gl)~IQr9   r   r   r!   r   r   r:   r   c                    s   d|    S Nr@   r   rB   rK   r   r   r        r@   )r   r8   r   rA   c                 S   s   ||  d S r   r   )r   cr   r   r   r     r   r>   )rI   g      @)r   r   r#   r   rT   r   r&   rf   ro   r   rY   rX   r   r^   r_   r(   rD   )r   r)   r   r*   r   r+   r   r   r   test_special_casesy  s2   
	
z!TestDerivative.test_special_casesc                 C   s   | d d S )Nr9   r>   r   rB   r   r   r   rd     s    zTestDerivative.<lambda>c                 C   s"   t | dk| d d | d d S )Nr9      r>   )rW   whererB   r   r   r   rd     s   " c                 C   s<   d}t |g d|d}t|jsJ t|jd|d d S )NgؗҜ<r   )r   r2   r   r1   )r   rW   r   rT   r   r&   )r   r.   r2   r*   r   r   r   test_saddle_gh18811  s   
z"TestDerivative.test_saddle_gh18811N)__name__
__module____qualname__r   r   markparametrizerW   r\   r,   r   r	   Z_distr_paramsZdistcontr7   tuplera   r   r   r   r   r   r   r   r   r   r   r   r   Zxfailr   r   r   r   r   r      s@    
0&,7

r   c                   @   s   e Zd Zdd ZdS )JacobianHessianTestc                 C   s  | j j}d}tjt|d ||jdtddd W d    n1 s#w   Y  |d}tj	}d}tjt|d |||tddd W d    n1 sNw   Y  tjt|d |||tdd	d W d    n1 sow   Y  tjt|d |||dd
 W d    n1 sw   Y  d}tjt|d |||dd W d    n1 sw   Y  d}tjt|d |||dd W d    d S 1 sw   Y  d S )Nz"Argument `x` must be at least 1-D.r   r9   rF   r1   r   r>   z<Tolerances and step parameters must be non-negative scalars.rz   r   z#`order` must be a positive integer.rA   r   r   )
jh_func__func__r   r   r   r   r   r~   r
   rosen)r   r)   r   r   r   funcr   r   r   test_iv  s2   
"zJacobianHessianTest.test_ivN)r   r   r   r   r   r   r   r   r     s    r   c                   @   s  e Zd ZeZdd Zdd Zde_ee_dd Z	dd	 Z
de	_e
e	_d
d Zdd Zde_ee_dd Zdd Zde_ee_dd Zdd Zde_ee_dd Zde_eje_ejddejdg dejdee	eeeegd d! Zd"d# Zd$d% Zd&S )'TestJacobianc                 C   s,   | \}}| |d | d| || gS Nr@   r   rv   r   )zr)   r   r   r   r   r   f1  s   $zTestJacobian.f1c                 C   s2   | \}}d| | |d gt |dt |ggS r   )rW   rn   r   r   r   r   r   r   r   df1  s   *zTestJacobian.df1)r@   r@   c                 C   s*   | \}}| ||| ||| gS r   rv   r   r   )r   r)   rphir   r   r   f2  s   "zTestJacobian.f2c                 C   s:   | \}}t || t | gt ||t | ggS r   )rW   r   r   )r   r   r   r   r   r   df2  s   zTestJacobian.df2c                 C   sL   | \}}}| ||| || ||| || ||| gS r   )rv   r   r   )r   r)   r   r   thr   r   r   f3  s   
0zTestJacobian.f3c                 C   s   | \}}}t |t | |t | t | | t | t | gt |t | |t | t | |t | t | gt || t | t |ggS r   )rW   r   r   r   )r   r   r   r   r   r   r   df3  s   
(( zTestJacobian.df3)r>   r>   c              	   C   s:   | \}}}| |d| d|d  d|  ||| gS Nr   r?   r@   r   r   r)   x1x2x3r   r   r   f4  s   
0zTestJacobian.f4c                 C   sl   | \}}}t |}|d| d| gd| d| d| gd| d| d| g|t | d| t |ggS Nr   r   r   r   )rW   	ones_liker   r   r   r   r   r   r   r   r   r   df4  s   

zTestJacobian.df4r=   c              	   C   s<   | \}}}| d| d|d  d|||   || gS r   r   r   r   r   r   f5  s   
2zTestJacobian.f5c                 C   sh   | \}}}t |}d| d| d| gd| d| t ||  d| t ||  gd| ||ggS r  )rW   r  r   r  r   r   r   df5   s   

0zTestJacobian.df5c                 C   s
   t | S r   )r
   r   )r   _r   r   r   r   *  rm   zTestJacobian.rosen)r   r9   r"   )r   r^   rG   )r   )r:   )r@   r>   r   c                    s   |dkrdnd}t |}tjd} j\}}|j|f| d}	t fddj|	|d}
jt |	|d}t|
j	||d	 d S )
Nr^   r0   ghUM`?   6H2)rG   c                    s
    | S r   r   rB   r   r)   r   r   rd   7  rm   z,TestJacobian.test_examples.<locals>.<lambda>r!   r1   )
r3   rW   rg   r}   mnr   r#   r+   r   r&   )r   r"   rG   r   r)   r2   ri   mrK   r   r*   r+   r   r
  r   test_examples.  s   

zTestJacobian.test_examplesc                    sx   ddgfdd}fdd fddt|d	d
}tr<tt|jdks0J tt|jdks<J t fdddd d	d
}t fdddd d	d
}tfdddd d	d
}tfdddd d	d
}t	 }dD ]7}	 t
||	t
||	gt
||	t
||	gg}
|
||	< ||	 jjkrdnd}t||	 ||	 |d qd S )Nr         ?c                    s<   | \}}   d|  |  d| |d  gS )Nr   r@   r   r   rl   r   r   r   B  s   4z$TestJacobian.test_attrs.<locals>.df1c                    s     d|    | S )Nr   )r   r   rl   r   r   df1_0xyF  s   z(TestJacobian.test_attrs.<locals>.df1_0xyc                    s     d|  |d  S r   )r   r   rl   r   r   df1_1xyI  s   z(TestJacobian.test_attrs.<locals>.df1_1xyr   r   r?   c                        | d S r   r   rB   r  r   r   r   rd   Q  rp   z)TestJacobian.test_attrs.<locals>.<lambda>r   r9   c                        d | S Nr   r   r   r  r   r   rd   R  rp   r@   c                    r  r   r   rB   r  r   r   r   rd   S  rp   c                    r  r  r   r  r  r   r   rd   T  rp   )rT   rY   r&   rD   r[   giUMu>gt=rz   )r#   r   r   lenrW   uniquerD   r[   r
   ZOptimizeResultr3   Zsqueezer"   r   r   )r   r)   r   r*   res00Zres01Zres10res11r+   attrZref_attrr{   r   )r  r  r)   r   r   
test_attrs<  s*       zTestJacobian.test_attrsc           	         s   t jd}|d d fdd}g d}g d}dd	i}t|j jd
|||d}jt jd
}t|j	|d	d 
|sMJ d S )Nl   ]2ZVr>   gHz>c                    s   j | d| d  d k f< j | d| d  d d kf< j | d| d  d kf< j | d| d  d d  k f< t| S )Nr   r  r9   r/   )ro   r   r  rB   br   r)   r   r   r   d  s
   "z0TestJacobian.test_step_direction_size.<locals>.f)r9   rF   r   )r  r/   r   r2   :0yE>r!   )r   r   r|   r1   )rW   rg   r}   r   r#   r^   r   r  r   r&   r   isfinite)	r   r)   ri   r   dirr   r2   r*   r+   r   r  r   test_step_direction_size]  s   
z%TestJacobian.test_step_direction_sizeN)r   r   r   r   r   r   r   r  r+   r   r   r   r   r  r  r  r  r   r
   Z	rosen_derr   r   r   r  r  r"  r   r   r   r   r     s>    !r   c                   @   sZ   e Zd ZeZejdg ddd Zdd Z	dd Z
ejjejjd	d
ddd ZdS )TestHessianr;   )r   )r?   )r@   r?   c                 C   s   t jd}d}|j||f| |jd}ttj|}|rC|||df}|	dd |j
D }||dd}||||f| }nt|}t|j|dd	 d S )
Nr	  r>   r!   rF   c                 S   s   g | ]}t |qS r   )r
   
rosen_hess)rO   xir   r   r   rP     rU   z,TestHessian.test_example.<locals>.<listcomp>r   r  r1   )rW   rg   r}   r#   r^   r   r
   r   r]   rv   TZmoveaxisr$  r   ddf)r   r;   r)   ri   r  r   r*   r+   r   r   r   test_examplez  s   
zTestHessian.test_examplec                 C   s   t jd}|j|d|jd}ttj|}t|}|dk}t	|j
| ||  d||||  }t	|j
|  ||  |d d S )Nr	  r>   r!   r   g{Gz?r1   )rW   rg   r}   r#   r   r   r
   r   r$  r   r'  r'   min)r   r)   ri   r   r*   r+   maskr2   r   r   r   test_float32  s   
 zTestHessian.test_float32c                    s    ddgt fdd d _t dd}d _t fdd	dd
 dd}|jd  j  krB|jd ksEJ  J d _t fdd	d
d dd}|jd  j  krj|jd ksmJ  J d S )Nr   r  c                    sJ   j |  \}} j|jdkrt|jdd  nd  _||d  S )Nr@   r9   r>   )Zbroadcast_arraysr[   rH   mathprodr;   r   r   )r   r)   r   r   r   r     s   *z!TestHessian.test_nfev.<locals>.f1r   r   r   c                    s    | d d gS )Nr   r9   r   rB   r   r   r   r   rd         z'TestHessian.test_nfev.<locals>.<lambda>r9   )r   r   c                    s    d | d gS r  r   r  r.  r   r   rd     r/  r@   )r9   r9   )r#   r   r[   r   )r   r)   r*   r  r  r   )r   r)   r   r   r   	test_nfev  s    * .zTestHessian.test_nfevTz$Python list input uses NumPy backend)r-   r   c                 C   sP   d}t jt|d t|jdgtddd W d    d S 1 s!w   Y  d S )Nz"The specified `rtol=1e-15`, but...r   r    r   rz   r   )r   ZwarnsRuntimeWarningr   r   r   )r   r)   r   r   r   r   test_small_rtol_warning  s   "z#TestHessian.test_small_rtol_warningN)r   r   r   r   r   r   r   r   r(  r+  r0  Zthread_unsafer   r2  r   r   r   r   r#  u  s    

r#  )&r,  r   numpyrW   Zscipy.conftestr   Z(scipy._lib._elementwise_iterative_methodZ_libZ_elementwise_iterative_methodr   Zscipy._lib._array_api_no_0dr   r   r   Zscipy._lib._array_apir   r   r   Zscipyr	   r
   r   Zscipy.differentiater   r   r   Z"scipy.differentiate._differentiater   r   ZusefixturesZ
pytestmarkZarray_api_strict_skip_reasonZjax_skip_reasonr   r   r   r   r#  r   r   r   r   <module>   s6       + 