o
    ?Hhm                     @   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.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   l/home/air/sanwanet/gpt-api/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   xp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	   medianr   cdfr&   r   r'   )r   r0   distnameparamsdistr   r,   r-   r   r   r   test_accuracy)   s   
zTestDerivative.test_accuracyorder      shape)         )rB      rD   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r<   )r   r   r   )r<   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nitr=   feval)sizendimr?   r   )r   argskwargs)nr   stater   r   r   @   s   .z,TestDerivative.test_vectorization.<locals>.frJ   rH   r   rI   r"   rE   c                 S      g | ]}|j qS r   rF   .0r-   r   r   r   
<listcomp>K       z5TestDerivative.test_vectorization.<locals>.<listcomp>rJ   c                 S   rQ   r   )r'   rR   r   r   r   rT   N   rU   c                 S   rQ   r   )r)   rR   r   r   r   rT   Q   rU   g-q=r3   c                 S   s   g | ]}t |jqS r   )boolsuccessrR   r   r   r   rT   U       c                 S      g | ]}t |jqS r   )npint32statusrR   r   r   r   rT   X       c                 S   rZ   r   )r[   r\   nfevrR   r   r   r   rT   [   r^   c                 S   rZ   r   )r[   r\   rH   rR   r   r   r   rT   `   r^   )r[   linspacereshaperK   	vectorizer   r$   float64ravelr   r   r'   r)   r   rX   r]   r_   r   maxrH   )r   r<   r?   r*   r   rG   r   r,   refsref_xref_df	ref_errorref_successref_flagref_nfevref_nitr   )rO   r<   r   rP   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 )
Nr=   c                 S   s   | d S Ng      @r   rF   r   r   r   <lambda>k       z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>c                    s    |    S r   )exprandomrF   rngr*   r   r   rq   l   rU   c                    
     | S r   rs   rF   r*   r   r   rq   m      
 c                    s     |  jS r   )	full_likenanrF   ry   r   r   rq   n       c                    s    g | ]\}} t | |qS r   )int)rS   r   jfuncsr   r   rT   o   s     z8TestDerivative.test_flags.<locals>.f.<locals>.<listcomp>rV   )rH   zipra   stack)xsjsr,   r   rv   r*   r   r   r   i   s   

 
z$TestDerivative.test_flags.<locals>.fr   rC   r"   +=rtolrD   )
tolerancesr<   rM   )r[   rt   default_rngrH   arangeint64r   onesrc   dictr$   eim_ECONVERGEDr   	_ECONVERR
_EVALUEERRr\   r   r]   )r   r*   rM   r,   	ref_flagsr   r   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 )Nro   c                    s8   | d  |     | | jg}|S rp   )rs   rt   r{   r|   r   r   outru   r   r   r      s   
z3TestDerivative.test_flags_preserve_shape.<locals>.fr=   r"   r   r   rD   T)r   r<   preserve_shape)r[   rt   r   r   r$   rc   r   r   r   r   r   r   r\   r   r]   )r   r*   r   r,   r   r   ru   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 )NrB   r       r=   rD   )sinr   r   ry   r   r   r      s   :
z-TestDerivative.test_preserve_shape.<locals>.f        r=   rB   r    r   rD   Tr   )r$   cosr   r   r   r'   )r   r*   r   r   r-   r,   r   ry   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   )r4   r   gMbP?r4   rC   )r   r<   gư>r   )r$   rc   r   r   floatr	   r%   r&   r   copyr   r(   r'   )	r   r*   r   r   r-   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"         ?r=   )initial_stepmaxiterg?rD   )step_factorr   r   rC   r   )r<   r   step_direction)r   r   g+<r   rJ   r   )r$   rc   r   r   r   r	   r%   r&   r   r(   r'   r   r   r[   sqrt)	r   r*   r   r   r-   r   r   rN   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   rD   )rs   r|   r   yry   r   r   r      s   
z-TestDerivative.test_step_direction.<locals>.fr   rD   r    )r=   rJ   r   gffffff?r   )r`   
zeros_liker   r   r'   rs   allrX   )r   r*   r   r   r   r,   r   ry   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 Nr=   r   r   r   r   r   r'      s   z>TestDerivative.test_vectorized_step_direction_args.<locals>.df)r=   rD   rB   rC   )rJ   r=   r=   rJ   r   r=   )r=   rJ   r=   rD   rB   )r=   r=   rJ   )r   rM   r!   r"   )ra   r$   r   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                    rw   r   rx   rF   ry   r   r   r      r   z+TestDerivative.test_initial_step.<locals>.fr   r"   r   r   r    )rJ   r=   rD   r=   )r   r<   r   r   rJ   .r   r   )r$   rc   ra   logspacer   r(   r'   r   ranger?   r   )
r   r*   r   r   r   h0r,   errir-   r   ry   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"   rB   c                 S   s   t | }|S r   r   )r   r,   r   r   r   r     s   
z/TestDerivative.test_maxiter_callback.<locals>.f   V瞯<r   )r   r   r=   rD   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 )Nr=   r   )iterr,   hasattrr   r'   dfsaddr]   r   _EINPROGRESSStopIterationr,   callbackr   r   r   r     s   
z6TestDerivative.test_maxiter_callback.<locals>.callbackrJ   )r   r   r]   )r$   rc   r   r   anyrX   r   r_   rH   r   r,   setr   keysr   r   
_ECALLBACK)r   r*   r   r   default_orderr,   r   keyr   r   r   test_maxiter_callback
  s&   $	,z$TestDerivative.test_maxiter_callbackr   r   g?gffffff?r#   )float16float32rc   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#   rs   rF   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>.callbackrC   )r<   r   r   r   2   r   )r   pytestskipr5   r$   r   r   r#   r'   r)   finfoepsr   r   rs   )
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 )(Nr=   z`f` must be callable.matchz3Abscissae and function output must be real numbers.c                 S      | S r   r   rF   r   r   r   rq   W      z6TestDerivative.test_input_validation.<locals>.<lambda>y            ?z6When `preserve_shape=False`, the shape of the array...c                 S   s   g dS )N)r=   rD   rB   r   rF   r   r   r   rq   [  rr   r   z6Tolerances and step parameters must be non-negative...c                 S   r   r   r   rF   r   r   r   rq   _  r   rJ   r3   r   c                 S   r   r   r   rF   r   r   r   rq   a  r   ekkir   c                 S   r   r   r   rF   r   r   r   rq   c  r   r   %`maxiter` must be a positive integer.c                 S   r   r   r   rF   r   r   r   rq   g  r         ?r   c                 S   r   r   r   rF   r   r   r   rq   i  r   r   z"`order` must be a positive integerc                 S   r   r   r   rF   r   r   r   rq   m  r   rE   c                 S   r   r   r   rF   r   r   r   rq   o  r   z'`preserve_shape` must be True or False.c                 S   r   r   r   rF   r   r   r   rq   s  r   herringr   z`callback` must be callable.c                 S   r   r   r   rF   r   r   r   rq   w  r   	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   r=   )r   isdtyper#   )r   xp_testr   r   r   r   ~  s   z,TestDerivative.test_special_cases.<locals>.f   r2   r   r   gl)~IQr=   r   r   r"   r   r   r>   r   c                    s   d|    S NrD   r   rF   rO   r   r   r        rD   )r   r<   r   rE   c                 S   s   ||  d S r   r   )r   cr   r   r   r     r   rB   )rM   g      @)r   r   r$   r   rX   r   r'   rs   r|   r   r]   r\   r   rc   re   r)   rH   )r   r*   r   r,   r   r-   r   r   r   test_special_casesy  s2   
	
z!TestDerivative.test_special_casesc                 C   s   | d d S )Nr=   rB   r   rF   r   r   r   rq     s    zTestDerivative.<lambda>c                 C   s"   t | dk| d d | d d S )Nr=      rB   )r[   whererF   r   r   r   rq     s   " c                 C   s<   d}t |g d|d}t|jsJ t|jd|d d S )NgؗҜ<r   )r   r4   r   r3   )r   r[   r   rX   r   r'   )r   r0   r4   r,   r   r   r   test_saddle_gh18811  s   
z"TestDerivative.test_saddle_gh18811N)__name__
__module____qualname__r   r   markparametrizer[   r`   r.   r   r	   _distr_paramsdistcontr;   tuplern   r   r   r   r   r   r   r   r   r   r   r   r   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   r=   rJ   r3   r   rB   z<Tolerances and step parameters must be non-negative scalars.r   r   z#`order` must be a positive integer.rE   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 NrD   r   r   r   )zr*   r   r   r   r   r   f1  s   $zTestJacobian.f1c                 C   s2   | \}}d| | |d gt |dt |ggS r  )r[   r{   r   r  r   r   r   r   r   df1  s   *zTestJacobian.df1)rD   rD   c                 C   s*   | \}}| ||| ||| gS r   r   r   r   )r  r*   rphir   r   r   f2  s   "zTestJacobian.f2c                 C   s:   | \}}t || t | gt ||t | ggS r   )r[   r   r   )r  r  r  r   r   r   df2  s   zTestJacobian.df2c                 C   sL   | \}}}| ||| || ||| || ||| gS r   )r   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   )r[   r   r   r   )r  r  r  r  r   r   r   df3  s   
(( zTestJacobian.df3)rB   rB   c              	   C   s:   | \}}}| |d| d|d  d|  ||| gS Nr   rC   rD   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   )r[   	ones_liker   r   r   r  r  r  r   r   r   r   df4  s   

zTestJacobian.df4rA   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   )r[   r!  r   r"  r   r   r   df5   s   

0zTestJacobian.df5c                 C   s
   t | S r   )r
   r  )r   _r   r   r   r  *  rz   zTestJacobian.rosen)r   r=   r#   )r   rc   rK   )r   )r>   )rD   rB   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 )
Nrc   r2   ghUM`?   6H2)rK   c                    s
    | S r   r   rF   r	  r*   r   r   rq   7  rz   z,TestJacobian.test_examples.<locals>.<lambda>r"   r3   )
r5   r[   rt   r   mnr   r$   r-   r   r'   )r   r#   rK   r	  r*   r4   rv   mrO   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   rD   r  r  ry   r   r   r  B  s   4z$TestJacobian.test_attrs.<locals>.df1c                    s     d|    | S )Nr   )r   r   ry   r   r   df1_0xyF  s   z(TestJacobian.test_attrs.<locals>.df1_0xyc                    s     d|  |d  S r   )r   r   ry   r   r   df1_1xyI  s   z(TestJacobian.test_attrs.<locals>.df1_1xyr    r   rC   c                        | d S r   r   rF   r-  r  r   r   rq   Q  r}   z)TestJacobian.test_attrs.<locals>.<lambda>r   r=   c                        d | S Nr   r   r   r0  r   r   rq   R  r}   rD   c                    r/  r   r   rF   r.  r  r   r   rq   S  r}   c                    r1  r2  r   r3  r4  r   r   rq   T  r}   )rX   r]   r'   rH   r_   giUMu>gt=r   )r$   r   r   lenr[   uniquerH   r_   r
   OptimizeResultr5   squeezer#   r   r   )r   r*   r  r,   res00res01res10res11r-   attr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   ]2ZVrB   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,  r=   r1   )r|   r  r$  rF   br   r*   r   r   r   d  s
   "z0TestJacobian.test_step_direction_size.<locals>.f)r=   rJ   r   )r,  r1   r   r4   :0yE>r"   )r   r   r   r3   )r[   rt   r   r   r$   rc   r  r%  r   r'   r   isfinite)	r   r*   rv   r   dirr   r4   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
   	rosen_derr   r   r   r+  r?  rE  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   )rC   )rD   rC   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'  rB   r"   rJ   c                 S   s   g | ]}t |qS r   )r
   
rosen_hess)rS   xir   r   r   rT     rY   z,TestHessian.test_example.<locals>.<listcomp>r   rB  r3   )r[   rt   r   r$   rc   r   r
   r  ra   r   TmoveaxisrH  r   ddf)r   r?   r*   rv   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'  rB   r"   r   g{Gz?r3   )r[   rt   r   r$   r   r   r
   r  rH  r   rL  r(   min)r   r*   rv   r   r,   r-   maskr4   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 )NrD   r=   rB   )broadcast_arraysr_   rL   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   r=   r   rF   r  r  r   r   rq         z'TestHessian.test_nfev.<locals>.<lambda>r=   )r   r   c                    s    d | d gS r2  r   r3  rT  r   r   rq     rU  rD   )r=   r=   )r$   r   r_   r   )r   r*   r,   r9  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   r   r   )r   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   rM  rP  rV  thread_unsafer   rY  r   r   r   r   rG  u  s    

rG  )&rR  r   numpyr[   scipy.conftestr   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipy._lib._array_api_no_0dr   r   r   scipy._lib._array_apir   r   r   scipyr	   r
   r   scipy.differentiater   r   r   "scipy.differentiate._differentiater   r   usefixtures
pytestmarkarray_api_strict_skip_reasonjax_skip_reasonr   r   r  r  rG  r   r   r   r   <module>   s6       + 