
    Yhm                        d dl Z d dlZd dlZd dlmc mZ d dlmc m	Z
 d dlmZmZmZ d dl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 dZej                            de	          ej                            d
d	           G d d                                  Z G d d          Z ej                            de	          ej                            d
d	           G d de                                   Z!ej                            de	          ej                            d
d	           G d de                                   Z"dS )    N)xp_assert_closexp_assert_equalxp_assert_less)is_numpyis_torch)statsoptimizespecial)
derivativejacobianhessian)_EERRORINCREASEz5Array API does not support fancy indexing assignment.array_api_strict)reasonz
dask.arrayzboolean indexing assignmentc            	          e Zd Zd Zej                            dd ej        ddd          g          d             Z	ej        
                    d	          ej                            d
ej        j                  d                         Zej                            dddg          ej                            d e            dddg          d                         Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                            dd          ej                            dddd gf          ej                            d!d"          d#                                     Zd$ Zd% Zej        
                    d	          ej        j        ej                            d
d& dfd' dff          d(                                     Zd)S )*TestDerivativec                 *    t          j        |          S Nr
   ndtr)selfxs     ~/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/differentiate/tests/test_differentiate.pyfzTestDerivative.f   s    |A    r   333333?皙?
   c                    |                     d          j        }t          | j        |                     ||                    }|                     t	          j                                        |          |          }t          |j        |           t          |          s2t          |                    |j        |z
            |j                   d S d S )N      ?dtype)asarrayr#   r   r   r   normpdfr   dfr   r   abserror)r   r   xpdefault_dtyperesrefs         r   
test_basiczTestDerivative.test_basic   s     

2,A]!C!CDDjj))!,,MjBB$$$ || 	<266#&3,//;;;;;	< 	<r   T)np_onlycasec                     |\  }} t          t          |          | }|                                dz   }t          |j        |          }|                    |          }t          |j        |d           d S )N皙?绽|=atol)getattrr   medianr   cdfr&   r   r'   )	r   r0   r*   distnameparamsdistr   r,   r-   s	            r   test_accuracyzTestDerivative.test_accuracy%   ss      &'wuh''0KKMMC1%%hhqkk%000000r   order      shape)         )rC      rE   c                 D    |r)t          j        ddd                              |          nd}t          j        |          i t           j         fd            } fd}dd<   d	d
<   t          ||                    ||j                            } ||                                          }d |D             }	t          |                    |j
        d          |                    |	                     d |D             }
t          |                    |j        d          |                    |
                     d |D             }t          |                    |j        d          |                    |          d           d |D             }t          |                    |j        d          |                    |                     d |D             }t          |                    |j        d          |                    |                     d |D             }t          |                    |j        d          |                    |                     t#          |          r&|                    |j                  d
         k    sJ d |D             }t          |                    |j        d          |                    |                     t#          |          r&|                    |j                  d         k    sJ d S d S )Nr   r   rA   r   c                 2    t          j        |           S )Nr=   )r   r   )r   r=   r   s    r   _derivative_singlez=TestDerivative.test_vectorization.<locals>._derivative_single8   s    dfau5555r   c                     dxx         dz  cc<   dxx         | j         k    s| j        dk    rdn| j        d         z  cc<    j        | g|R i |S )Nnitr>   feval)sizendimr@   r   )r   argskwargsnr   states      r   r   z,TestDerivative.test_vectorization.<locals>.f<   so    %LLLALLL'NNNAFaKK16A::aaAGBKONNN46!-d---f---r   rM   rK   r   rL   r"   rH   c                     g | ]	}|j         
S  r   .0r-   s     r   
<listcomp>z5TestDerivative.test_vectorization.<locals>.<listcomp>G   s    '''3'''r   rM   c                     g | ]	}|j         
S rU   )r'   rW   s     r   rY   z5TestDerivative.test_vectorization.<locals>.<listcomp>J   s    )))S#&)))r   c                     g | ]	}|j         
S rU   )r)   rW   s     r   rY   z5TestDerivative.test_vectorization.<locals>.<listcomp>M   s    ///3SY///r   g-q=r4   c                 6    g | ]}t          |j                  S rU   )boolsuccessrW   s     r   rY   z5TestDerivative.test_vectorization.<locals>.<listcomp>Q   s"    999StCK((999r   c                 @    g | ]}t          j        |j                  S rU   )npint32statusrW   s     r   rY   z5TestDerivative.test_vectorization.<locals>.<listcomp>T   s$    999SBHSZ((999r   c                 @    g | ]}t          j        |j                  S rU   )ra   rb   nfevrW   s     r   rY   z5TestDerivative.test_vectorization.<locals>.<listcomp>W   s$    7773BHSX&&777r   c                 @    g | ]}t          j        |j                  S rU   )ra   rb   rK   rW   s     r   rY   z5TestDerivative.test_vectorization.<locals>.<listcomp>\   s$    55528CG$$555r   )ra   linspacereshaperN   	vectorizer   r$   float64ravelr   r   r'   r)   r   r_   rc   re   r   maxrK   )r   r=   r@   r*   r   rI   r   r,   refsref_xref_df	ref_errorref_successref_flagref_nfevref_nitrR   rS   s   ``              @@r   test_vectorizationz!TestDerivative.test_vectorization/   s"   
 <AIBKtR((00777cGAJJ		6 	6 	6 	6 	6 
	6	. 	. 	. 	. 	. 	. 	.
 egBJJq
J;;5III!!!$$**,,''$'''

35%00"**U2C2CDDD))D)))

365112::f3E3EFFF//$///	

39e44bjj6K6K"	$ 	$ 	$ 	$ :9D999

3;66

;8O8OPPP99D999

3:u55rzz(7K7KLLL77$777

38U33RZZ5I5IJJJB<< 	666#(##uW~555555555

37E22BJJw4G4GHHHB<< 	366#'??eEl2222	3 	322r   c                    t           j                            d          fdd_                            dj                  f}t                              dj                  t          d          d|	          }
                    t          j        t          t          j        t          j        gj                  }t#          |j        |           d S )
N   ;O c                     xj         dz  c_         d fdfdfdgfdt          |                     |d                    D             }                    |          S )Nr>   c                     | dz
  S Ng      @rU   rV   s    r   <lambda>z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>g   s
    q3w r   c                 X                         |                                           z  S r   )exprandom)r   rngr*   s    r   r{   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>h   s    rvvayy5 r   c                 .                         |           S r   r}   r   r*   s    r   r{   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>i   s    rvvayy r   c                 :                         | j                  S r   )	full_likenanr   s    r   r{   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>j   s    r||Arv66 r   c                 R    g | ]#\  }} t          |                   |          $S rU   )int)rX   r   jfuncss      r   rY   z8TestDerivative.test_flags.<locals>.f.<locals>.<listcomp>k   s1    OOO1=5Q=##OOOr   rZ   )rK   ziprh   stack)xsjsr,   r   r   r   r*   s      @r   r   z$TestDerivative.test_flags.<locals>.fe   s    EEQJEE&&55555((((66668E POOOB

2u8M8M0N0NOOOC88C== r   r   rD   r"   +=rtolrE   )
tolerancesr=   rP   )ra   r~   default_rngrK   arangeint64r   onesrj   dictr$   eim_ECONVERGEDr   	_ECONVERR
_EVALUEERRrb   r   rc   )r   r*   rP   r,   	ref_flagsr   r   s    `   @@r   
test_flagszTestDerivative.test_flagsa   s     i##$455	! 	! 	! 	! 	! 	! 	! 		!28	,,.BGGARZG88$(e$4$4$4 t- - - JJ / # # 0 8:x  A A	 	
I.....r   c                 |   t           j                            d          fd}t          |                    dj                  t          d          dd	          }                    t          j        t          t          j
        t          j        gj                  }t          |j        |           d S )
Nrw   c                     | dz
                       |                                           z                       |                               | j                  g}                    |          S rz   )r}   r~   r   r   r   )r   outr   r*   s     r   r   z3TestDerivative.test_flags_preserve_shape.<locals>.f}   s]    s766!99SZZ\\)66!99<<26**,C 88C== r   r>   r"   r   r   rE   T)r   r=   preserve_shape)ra   r~   r   r   r$   rj   r   r   r   r   r   r   rb   r   rc   )r   r*   r   r,   r   r   s    `   @r   test_flags_preserve_shapez(TestDerivative.test_flags_preserve_shapez   s    i##$455	! 	! 	! 	! 	! 	! BJJq
J;;$(e$4$4$4 7 7 7 JJ / # # 0 8:x  A A	 	
I.....r   c                    fd}                     d          }                                          d          d                    d|z            z  dd                    d|z            z  z   d                    d|z            z  |dz
  dz  z  d                    d|z            z  |dz
  z  z   g          }t          ||d	          }t	          |j        |           d S )
Nc                     |                      d| z            |                      d| z            z                        d| z            | dz
  dz  z  g}                    |          S )NrC   r      r>   rE   )sinr   )r   r   r*   s     r   r   z-TestDerivative.test_preserve_shape.<locals>.f   s\    bffQqSkk1RVVBqD\\>266"Q$<<1q3HIC88C== r           r>   rC   r   r   rE   Tr   )r$   cosr   r   r   r'   )r   r*   r   r   r-   r,   s    `    r   test_preserve_shapez"TestDerivative.test_preserve_shape   s    	! 	! 	! 	! 	! JJrNNjj"**Q--266!A#;;"RVVBqD\\/8IRVVBqD\\/1Q3(2Qrvvbd||^QqS5IIK L LAd333$$$$$r   c                    |                     d|j                  }t          j        }t	          t
          j                            d                    }t          dd          }|	                                }d|d<   t          |||d          }t          |j        |z
            dk     sJ d	|d<   t          |||d          }t          |j        |z
            d	k     sJ t          |j        |z
            t          |j        |z
            k     sJ |	                                }d|d
<   t          |||d          }t          |j        |z
            d|z  k     sJ d	|d
<   t          |||d          }t          |j        |z
            d	|z  k     sJ t          |j        |z
            t          |j        |z
            k     sJ d S )Nr!   r"   r   )r5   r   gMbP?r5   rD   )r   r=   gư>r   )r$   rj   r
   r   floatr   r%   r&   r   copyr   r(   r'   )	r   r*   r   r   r-   tolerances0r   res1res2s	            r   test_convergencezTestDerivative.test_convergence   s   JJrJ,,LEJNN2&&''*** %%''
!
6!Q:Q???47S=!!D((((!
6!Q:Q???47S=!!D((((47S=!!C#$6$66666 %%''
!
6!Q:Q???47S=!!D3J....!
6!Q:Q???47S=!!D3J....47S=!!C#$6$6666666r   c                 (   |                     d|j                  }t          j        }t	          t
          j                            d                    }t          ||dd          }t          ||dd          }t          |j
        |z
            t          |j
        |z
            k     sJ t          ||dd          }t          ||d	d          }t          |j
        |z
            t          |j
        |z
            k     sJ t          d
dd          }t          ||fddd|}t          ||fddd|}t          |j
        |j
        d           t          ddd          }t          ||fddd|}t          ||fdt          j        d          z  dd|}t          |j
        |j
        d           d|d<   t          ||fddd|}t          ||fdt          j        d          z  dd|}t          |j
        |j
        d           d S )Nr!   r"         ?r>   )initial_stepmaxiterg?rE   )step_factorr   r   rD   r   )r=   r   step_direction)r   r   g+<r   rM   r   )r$   rj   r
   r   r   r   r%   r&   r   r(   r'   r   r   ra   sqrt)	r   r*   r   r   r-   r   r   rQ   r,   s	            r   test_step_parametersz#TestDerivative.test_step_parameters   sA   JJrJ,,LEJNN2&&''!QS!<<<!QT1===47S=!!C#$6$66666!QAq999!QB:::47S=!!C#$6$66666 Aq;;;AKCSKKFKKAGA1GGGGU3333 Aq;;;AGA1GGGGATAbgajjLcTTVTTU3333#% AGA1GGGGATAbgajjLcTTVTTU333333r   c                    fd}                     ddd          }                    |          }t          j        |          |dk                                  d          }t          j        |          |dk                                 d          }t          |||	          }t          |j                            |                     	                    |j
                  sJ d S )
Nc                                          |           }t          j        |          | dk     | dk    z                                j                  }|S )Nr   rE   )r}   xpxatsetr   r   yr*   s     r   r   z-TestDerivative.test_step_direction.<locals>.f   sF    q		Aq		1q5QU+,0088AHr   r   rE   r   r   r>   gffffff?rM   r   )rg   
zeros_liker   r   r   r   r   r'   r}   allr_   )r   r*   r   r   r   r,   s    `    r   test_step_directionz"TestDerivative.test_step_direction   s    	 	 	 	 	
 KK1b!!q))//C8<<Q??//C8<<R@@An===q		***vvck"""""""r   c                    d }d }|                     |                    g d          d          }|                     |                    g d          d          }|                     |                    ddg          d	          }t          ||||f
          }|                     |||          |j        j                  }|                    ||                    d          j                  }t          |j        |           d S )Nc                     | |z  S r   rU   r   ps     r   r   z=TestDerivative.test_vectorized_step_direction_args.<locals>.f   s    6Mr   c                     || |dz
  z  z  S Nr>   rU   r   s     r   r'   z>TestDerivative.test_vectorized_step_direction_args.<locals>.df   s    qQU|##r   )r>   rE   rC   rD   )rM   r>   r>   rM   r   r>   )r>   rM   r>   rE   rC   )r>   r>   rM   )r   rP   r!   r"   )rh   r$   r   broadcast_tor'   r@   r#   r   )	r   r*   r   r'   r   hdirr   r,   r-   s	            r   #test_vectorized_step_direction_argsz2TestDerivative.test_vectorized_step_direction_args   s    	 	 		$ 	$ 	$ JJrzz,,,//<<zz"**ZZZ00*==JJrzz1a&)):66Ad!>>>oobbAhh55jjBJJrNN$8j99$$$$$r   c           	      b   fd}                     dj                  }                     g d          }                                        ddd          d          }t	          |||d	d
|          }                    |j         ||          z
            }                    |d ddf         |d
d df         k               sJ t          |j	        d                   D ]E}t	          ||||df         d	d
|          }	t          |j        |d d f         |	j        d           Fd S )Nc                 .                         |           S r   r   r   s    r   r   z+TestDerivative.test_initial_step.<locals>.f   s    66!99r   r   r"   r   r   r   )rM   r>   rE   r>   )r   r=   r   r   rM   .r   r   )r$   rj   rh   logspacer   r(   r'   r   ranger@   r   )
r   r*   r   r   r   h0r,   errir-   s
    `        r   test_initial_stepz TestDerivative.test_initial_step   s^   	 	 	 	 	 JJrJ,,JJJ//ZZB2..88ABa(68 8 8ffSVaadd]## vvc#2#s(mc!""c'l233333 rx{## 	> 	>AQ1a41,:< < <CCF1aaa4L#&u=====	> 	>r   c                   	 |                     d|j                  }d	d }d}t          ||	t          d                    }|                    |j                  rJ |                    |j        |d	z   	d	z
  d
z  z   k              sJ |                    |j        	k              sJ 	fdd_	        d _
        t                      _        t          ||t          d                    }|                                D ]a}|dk    r1||         t          j        k    sJ ||         t          j        k    sJ 9||         j
        |         cxk    r||         k    sn J bd S )Ng~,?r"   rC   c                 .    t          j        |           }|S r   r   )r   r,   s     r   r   z/TestDerivative.test_maxiter_callback.<locals>.f  s    ,q//CJr      V瞯<r   )r   r   r>   rE   c                 >   xj         dz  c_         | _        t          | d          sJ t          | j                  j        vsJ j                            t          | j                             | j        t          j	        k    sJ j         k    rt          d S )Nr>   r   )iterr,   hasattrr   r'   dfsaddrc   r   _EINPROGRESSStopIteration)r,   callbackr   s    r   r   z6TestDerivative.test_maxiter_callback.<locals>.callback  s    MMQMMHL3$$$$$==4444LU36]]+++:!11111}''## ('r   rM   )r   r   rc   )r$   rj   r   r   anyr_   r   re   rK   r   r,   r   r   keysr   r   
_ECALLBACK)
r   r*   r   r   default_orderr,   r   keyr   r   s
           @@r   test_maxiter_callbackz$TestDerivative.test_maxiter_callback  s   JJxrzJ22	 	 	 Aw4U;K;K;KLLL66#+&&&&&vvch-!"3w{Ao"EEFFFFFvvcg()))))	$ 	$ 	$ 	$ 	$ 	$ uu!Qd>N>N>NOOO 88:: 	B 	BCh3x3=0000CyCN22222CyHL$5AAAASAAAAAAA	B 	Br   r   r   g?gffffff?r#   )float16float32rj   c                    dk    r#t                    st          j        d           t                                        |          }fd}fd}t          ||d||          }|j        j        k    sJ |j        j        k    sJ |j	        j        k    sJ 
                              j        }t                    r|dz  d	z  n|dz  }	t          |j                            |j                  |	
           d S )Nr   z+float16 not tested for alternative backendsr"   c                 H    | j         k    sJ                     |           S r   )r#   r}   )r   r#   r*   s    r   r   z$TestDerivative.test_dtype.<locals>.f8  s&    7e####66!99r   c                 t    | j         j        k    sJ | j        j        k    sJ | j        j        k    sJ d S r   )r   r#   r'   r)   )r,   r#   s    r   r   z+TestDerivative.test_dtype.<locals>.callback<  sH    5;%''''6<5((((9?e++++++r   rD   )r=   r   r   r   2   r   )r   pytestskipr6   r$   r   r   r#   r'   r)   finfoepsr   r   r}   )
r   r   r   r#   r*   r   r   r,   r   r   s
      ``     r   
test_dtypezTestDerivative.test_dtype-  s>    IhrllKEFFF E""JJqJ&&	 	 	 	 	 		, 	, 	, 	, 	,
 AQthOOOu{e####v|u$$$$y%''''hhuoo! (:sCx"}}#s(suD999999r   c                 t   |                     d          }d}t          j        t          |          5  t	          d |           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          d |                     d                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          d |                     d	d
g                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          d |t          d                     d d d            n# 1 swxY w Y   t          j        t          |          5  t	          d |t          d                     d d d            n# 1 swxY w Y   t          j        t          |          5  t	          d |t                                 d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          d |d           d d d            n# 1 swxY w Y   t          j        t          |          5  t	          d |d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          d |d           d d d            n# 1 swxY w Y   t          j        t          |          5  t	          d |d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t	          d  |d!"           d d d            n# 1 swxY w Y   d#}t          j        t          |          5  t	          d$ |d%&           d d d            d S # 1 swxY w Y   d S )'Nr>   z`f` must be callable.matchz3Abscissae and function output must be real numbers.c                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>T       r   y            ?z6When `preserve_shape=False`, the shape of the array...c                 
    g dS )N)r>   rE   rC   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>X  s
     r   r   z6Tolerances and step parameters must be non-negative...c                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>\  r   r   rM   r4   r   c                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>^  r   r   ekkir   c                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>`  r   r   r   %`maxiter` must be a positive integer.c                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>d  r   r         ?r   c                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>f  r   r   r   z"`order` must be a positive integerc                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>j  r   r   rH   c                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>l  r   r   z'`preserve_shape` must be True or False.c                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>p  r   r   herringr   z`callback` must be callable.c                     | S r   rU   rV   s    r   r{   z6TestDerivative.test_input_validation.<locals>.<lambda>t  r   r   	shrubbery)r   )r$   r   raises
ValueErrorr   r   object)r   r*   onemessages       r   test_input_validationz$TestDerivative.test_input_validationJ  s   jjmm)]:W555 	" 	"tS!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" H]:W555 	7 	7{{BJJu$5$5666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 K]:W555 	B 	B**BJJBx,@,@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B K]:W555 	C 	C{{CDbMMMBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C]:W555 	G 	G{{CDf4E4E4EFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G]:W555 	? 	?{{CVXX>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? :]:W555 	6 	6{{C5555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6]:W555 	4 	4{{C3333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 7]:W555 	4 	4{{Cs3333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4]:W555 	2 	2{{Cq1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 <]:W555 	C 	C{{C	BBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 1]:W555 	? 	?{{C+>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   AAA8%B))B-0B-'DDD,"EE!E "F..F25F2 H  HH(III.JJJ6KKK<LL #L M$$M(+M(N--N14N1c           
         fd}t                    sdt          |                    d          t          d                    }|j        sJ t          |j                            d                     t          j                            d          j                  }t          |j                            j                             t          |j
                            d	j        
                     t          j                            d          d          }t          |j                            j                             t          |j
                            d	j        
                     t          d          D ]                    dj        
          }fd}dz  |dz
  z  z  }t          ||dt          d                    }t          |j        |d           t          |j                            j        j        
                     t          ||t          d                    }|j        sJ |j        dk    sJ t          |j        |d           d }t          |                    d                              d                    }t          |j                            d                     d S )Nc                 N                         | j        d          sJ | dz  dz
  S )Nzreal floatingc   r>   )isdtyper#   r   s    r   r   z,TestDerivative.test_special_cases.<locals>.f{  s-    ::ag777777Q;r      r3   r   r   gl)~IQr>   r   r   r"   r   r   r?   r  c                     d| z  z  S NrE   rU   )r   rR   s    r   r   z,TestDerivative.test_special_cases.<locals>.f  s    Avr   rE   )r   r=   r   rH   c                     || z  dz
  S r   rU   )r   cs     r   r   z,TestDerivative.test_special_cases.<locals>.f  s    Q37Nr   rC   )rP   g      @)r   r   r$   r   r_   r   r'   r}   r   r   rc   rb   r   rj   rl   r)   rK   )r   r*   r   r,   r   r-   rR   s    `    @r   test_special_casesz!TestDerivative.test_special_casesv  s   
	 	 	 	 	 || 	;Q

1$E:J:J:JKKKC;CFBJJy$9$9::: ArvFFF

26 2 2333
BJJrJ$B$BCCCAQ???

26 2 2333
BJJrJ$B$BCCC q 	5 	5A

3bj
11A     A#a!A#h,CQ1C1II>>>CCFCe4444CIrzz"&
z'K'KLLLQQ333C;7a<<<<CFCe44444	 	 	 BJJqMM

1>>>

2/////r   c                     | dz
  dz  S )Nr>   rC   rU   rV   s    r   r{   zTestDerivative.<lambda>  s    AEa< r   c                 N    t          j        | dk    | dz
  dz  | dz
  dz            S )Nr>      rC   )ra   whererV   s    r   r{   zTestDerivative.<lambda>  s(    28AEAEa<!a%A>> r   c                     d}t          |g d|d}t          j        |j                  sJ t	          |j        d|           d S )NgؗҜ<r   )r   r5   r   r4   )r   ra   r   r_   r   r'   )r   r0   r*   r5   r,   s        r   test_saddle_gh18811z"TestDerivative.test_saddle_gh18811  sV     $zzzEEEvck"""""------r   N)__name__
__module____qualname__r   r   markparametrizera   rg   r.   skip_xp_backendsr   _distr_paramsdistcontr<   tupleru   r   r   r   r   r   r   r   r   r   r   r  r  xfailr"  rU   r   r   r   r      s          [S3E4(D(D"EFF	< 	< GF	< [!!$!//[VU%8%ABB1 1 CB 0/1 [Wq!f--[Wuuwwvy&IJJ.3 .3 KJ .-.3`/ / /2/ / /(
% 
% 
%7 7 724 4 4># # #% % % > > >,$B $B $BL [VZ00[S4$"566[W&GHH: : IH 76 10:4*? *? *?X30 30 30l [!!$!//[[V		#	>	>B&  . .	   0/. . .r   r   c                       e Zd Zd ZdS )JacobianHessianTestc                    | j         j        }d}t          j        t          |          5   ||j        dt          d                     d d d            n# 1 swxY w Y   |                    d          }t          j	        }d}t          j        t          |          5   |||t          d                     d d d            n# 1 swxY w Y   t          j        t          |          5   |||t          d	                     d d d            n# 1 swxY w Y   t          j        t          |          5   |||d
           d d d            n# 1 swxY w Y   d}t          j        t          |          5   |||d           d d d            n# 1 swxY w Y   d}t          j        t          |          5   |||d           d d d            d S # 1 swxY w Y   d S )Nz"Argument `x` must be at least 1-D.r   r>   rM   r4   r   rC   z<Tolerances and step parameters must be non-negative scalars.r   r   z#`order` must be a positive integer.rH   r  r  )
jh_func__func__r   r  r  r   r   r   r	   rosen)r   r*   r0  r  r   funcs         r   test_ivzJacobianHessianTest.test_iv  sm   ,' 7]:W555 	9 	9GBFA$B---8888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9
 GGAJJ~P]:W555 	7 	7GD!"6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7]:W555 	7 	7GD!"6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7]:W555 	- 	-GD!,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 8]:W555 	' 	'GD!2&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' :]:W555 	) 	)GD!R((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)sk   "AAA!C

CC0DD D?EE!EFF!$F!G!!G%(G%N)r#  r$  r%  r4  rU   r   r   r.  r.    s#        ) ) ) ) )r   r.  c                      e Zd ZeZd Zd Zde_        ee_        d Z	d Z
de	_        e
e	_        d Zd Zde_        ee_        d	 Zd
 Zde_        ee_        d Zd Zde_        ee_        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                                     Zd Zd ZdS )TestJacobianc                 x    | \  }}|                     |dz  |z  d|z  |                    |          z   g          S NrE   r  r   r   )zr*   r   r   s       r   f1zTestJacobian.f1  s=    1xxa!QURVVAYY%67888r   c                 x    | \  }}d|z  |z  |dz  gt          j        |d          t          j        |          ggS r8  )ra   r   r   )r:  r   r   s      r   df1zTestJacobian.df1  s@    1QAF#bl1a&8&8"&))%DEEr   )rE   rE   c                     | \  }}|                     ||                    |          z  ||                    |          z  g          S r   r   r   r   )r:  r*   rphis       r   f2zTestJacobian.f2  s>    3xxRVVC[[!bffSkk/:;;;r   c                     | \  }}t          j        |          | t          j        |          z  gt          j        |          |t          j        |          z  ggS r   )ra   r   r   )r:  r@  rA  s      r   df2zTestJacobian.df2  sP    3qb26#;;./a"&++o.0 	0r   c                    | \  }}}|                     ||                    |          z  |                    |          z  ||                    |          z  |                    |          z  ||                    |          z  g          S r   )r   r   r   )r:  r*   r@  rA  ths        r   f3zTestJacobian.f3  sx    
3xxRVVC[[266"::5q266#;;PR7SRVVC[[* + + 	+r   c                    | \  }}}t          j        |          t          j        |          z  |t          j        |          z  t          j        |          z  | t          j        |          z  t          j        |          z  gt          j        |          t          j        |          z  |t          j        |          z  t          j        |          z  |t          j        |          z  t          j        |          z  gt          j        |          | t          j        |          z  t          j        |          ggS r   )ra   r   r   r   )r:  r@  rA  rF  s       r   df3zTestJacobian.df3  s    
3rvbzz)1rvc{{?RVBZZ+GbfSkk!BF2JJ.0rvbzz)1rvc{{?RVBZZ+GRVC[[26"::-/qb26#;;.a0@0@A	C 	Cr   )rC   rC   c           	          | \  }}}|                     |d|z  d|dz  z  d|z  z
  ||                    |          z  g          S Nr  rD   rE   r9  r   r*   x1x2x3s        r   f4zTestJacobian.f4	  sK    
BxxQVQq[1r6%92r

?KLLLr   c                     | \  }}}t          j        |          }|d|z  d|z  gd|z  d|z  d|z  gd|z  d|z  d|z  g|t          j        |          z  d|z  t          j        |          ggS Nr   r  r   r   )ra   	ones_liker   r   r   rM  rN  rO  r  s        r   df4zTestJacobian.df4  s    
Bl2a#gq3w'S!c'1s7+S!b&"s(+bfRjj!c'26"::68 	8r   rB   c           	          | \  }}}|                     d|z  d|dz  z  d|                    ||z            z  z
  ||z  g          S rK  r9  rL  s        r   f5zTestJacobian.f5  sN    
BxxRR1Wq266"r'??/B!BBGLMMMr   c                     | \  }}}t          j        |          }d|z  d|z  d|z  gd|z  d|z  t          j        ||z            z  d|z  t          j        ||z            z  gd|z  ||ggS rR  )ra   rS  r   rT  s        r   df5zTestJacobian.df5  s    
Bl2S!c'1s7+Rb26"r'??2BGbfR"Woo4MNS"b!# 	#r   c                 *    t          j        |           S r   )r	   r2  )r   _s     r   r2  zTestJacobian.rosen&  s    HN1---r   )r  r>   r#   )r   rj   rN   )rU   )r?   )rE   rC   r3  c                    |dk    rdnd}t          |          }t          j                            d          }j        \  }}|                    |f|z             }	t          fd                    |	|                    }
                    t          j                            |	                    |          }t          |
j	        ||           d S )	Nrj   r3   ghUM`?   6H2)rN   c                      |           S r   rU   )r   r3  r*   s    r   r{   z,TestJacobian.test_examples.<locals>.<lambda>3  s    a" r   r"   r4   )
r6   ra   r~   r   mnr   r$   r-   r   r'   )r   r#   rN   r3  r*   r5   r   mrR   r   r,   r-   s      ``       r   test_exampleszTestJacobian.test_examples*  s     **uuE""i##L11w1JJQD4KJ((-----rzz!5z/I/IJJjjDHHQKK00j>>$//////r   c           
                              ddg          fd}fdfdt          |d          }t                    s>t          j        |j                  dk    sJ t          j        |j                  dk    sJ t          fd	d
d         d          }t          fddd         d          }t          fdd
d         d          }t          fddd         d          }t          j                    }dD ]}	                     t          ||	          t          ||	          gt          ||	          t          ||	          gg          }

                    |
t          d t          |
j                  D                                 ||	<   ||	         j        j        k    rdnd}t!          ||	         ||	         |           d S )Nr         ?c                     | \  }}                                         d|z                                |          z                      d|z            |dz  z  g          S )Nr   rE   r?  )r:  r   r   r*   s      r   r=  z$TestJacobian.test_attrs.<locals>.df1>  sW    DAq88RVVCE]]RVVAYY6qsad8JKLLLr   c                 `                         d| z                                 |          z  S )Nr   )r   r   s     r   df1_0xyz(TestJacobian.test_attrs.<locals>.df1_0xyB  s&    66#a%==266!99,,r   c                 @                         d| z            |dz  z  S r  )r   r   s     r   df1_1xyz(TestJacobian.test_attrs.<locals>.df1_1xyE  s     66!A#;;A%%r   r   r  rD   c                 (     | d                   S r   rU   )r   rf  r:  s    r   r{   z)TestJacobian.test_attrs.<locals>.<lambda>N      771ad#3#3 r   r   r>   c                 (     d         |           S Nr   rU   )r   rf  r:  s    r   r{   z)TestJacobian.test_attrs.<locals>.<lambda>O      771Q4#3#3 r   rE   c                 (     | d                   S r   rU   )r   rh  r:  s    r   r{   z)TestJacobian.test_attrs.<locals>.<lambda>P  rj  r   c                 (     d         |           S rl  rU   )r   rh  r:  s    r   r{   z)TestJacobian.test_attrs.<locals>.<lambda>Q  rm  r   )r_   rc   r'   rK   re   c              3   ,   K   | ]\  }}|d k    |V  dS )r>   NrU   )rX   axrN   s      r   	<genexpr>z*TestJacobian.test_attrs.<locals>.<genexpr>X  s+      UU("d4ST9929999UUr   )axisgiUMu>gt=r   )r$   r   r   r   nuniquerK   re   r	   OptimizeResultr6   squeezer+  	enumerater@   r#   r   r   )r   r*   r=  r,   res00res01res10res11r-   attrref_attrr   rf  rh  r:  s    `          @@@r   
test_attrszTestJacobian.test_attrs8  sf   JJT{##	M 	M 	M 	M 	M	- 	- 	- 	- 	-	& 	& 	& 	& 	& sAB///|| 	.;sw''1,,,,;sx((A----33333QqsV"MMM33333QqsV"MMM33333QqsV"MMM33333QqsV"MMM%''> 	= 	=DzzGE4$8$8'%:N:N#O$+E4$8$8'%:N:N#O#Q R RH

UUi.G.GUUUUU #  CI !Y_
::66DCIs4yt<<<<<	= 	=r   c                   	
 t           j                            d          }|                    d          	d
	
fd}g d}g d}ddi}t          |                    	j        	          |||
          }                    t                              	          j        	          }t          |j	        |d           
                                        |                    sJ d S )Nl   ]2ZVrC   gHz>c                 l   t          j        |           d| d         d         k     f                             j                  } t          j        |           d| d         d         dz   k    f                             j                  } t          j        |           d| d         d         k    f                             j                  } t          j        |           d| d         d         dz
  z
  k     f                             j                  } t                              |           S )Nr   rc  r>   r2   )r   r   r   r   r6  rW  )r   br   r*   s    r   r   z0TestJacobian.test_step_direction_size.<locals>.fd  s    q		!QqTAaD[.)--bf55Aq		!QqTAaD4K//044RV<<Aq		!QqTAaD[.)--bf55Aq		!QqTAaD3JsN22377??A??1b)))r   )r>   rM   r   )rc  r2   r   r5   :0yE>r"   )r   r   r   r4   )ra   r~   r   r   r$   rj   r6  rY  r   r'   r   isfinite)r   r*   r   r   dirr   r5   r,   r-   r  r   s    `       @@r   test_step_direction_sizez%TestJacobian.test_step_direction_size]  s	    i##N33JJqMM	* 	* 	* 	* 	* 	* 	* jj~q"**Qbj*99&)d< < <jj))!,,BJj??$////vvbkk#&&'''''''r   N)r#  r$  r%  r   r0  r;  r=  r_  r-   rB  rD  rG  rI  rP  rU  rW  rY  r2  r	   	rosen_derr   r&  r'  ra  r~  r  rU   r   r   r6  r6    s        G
9 9 9F F F BEBF< < <0 0 0
 BEBF+ + +
C C C BEBFM M M8 8 8 BEBFN N N# # # BEBF---EH"EI[W&<==[V%7%7%788[Vb"b"b%%@AA	0 	0 BA 98 >=	0#= #= #=J( ( ( ( (r   r6  c                       e Zd ZeZej                            dg d          d             Zd Z	d Z
ej        j        ej                            dd          d	                         Zd
S )TestHessianr@   )rU   )rD   )rE   rD   c                    t           j                            d          }d}|                    |                    |f|z             |j                  }t          t          j        |          }|ro|                    ||df          }|	                    d |j
        D                       }|                    |dd          }|                    |||f|z             }nt          j        |          }t          |j        |d           d S )	Nr]  rC   r"   rM   c                 6    g | ]}t          j        |          S rU   )r	   
rosen_hess)rX   xis     r   rY   z,TestHessian.test_example.<locals>.<listcomp>  s#    BBBH/33BBBr   r   r  r4   )ra   r~   r   r$   rj   r   r	   r2  rh   r   Tmoveaxisr  r   ddf)r   r@   r*   r   r`  r   r,   r-   s           r   test_examplezTestHessian.test_examplez  s    i##L11JJszz1$,//rzJBBhna(( 	)

1q"g&&A((BBacBBBCCC++c1b))C**S1a'E/22CC%a((C4000000r   c                    t           j                            d          }|                    |                    d          |j                  }t          t          j        |          }t          j        |          }|dk    }t          |j
        |         ||                    d|                    |                    ||                             z  }t          |j
        |          ||          |           d S )Nr]  rC   r"   r   g{Gz?r4   )ra   r~   r   r$   r   r   r	   r2  r  r   r  r(   min)r   r*   r   r   r,   r-   maskr5   s           r   test_float32zTestHessian.test_float32  s    i##L11JJszz!}}BJJ77hna((!!$$qs4y111bffRVVCI..///TE
>>>>>>r   c                                         ddg          fdd_        t          d          }d_        t          fddd         d          }|j        d	         j        cxk    r|j        d	         k    sn J d_        t          fd
dd         d          }|j        d         j        cxk    r|j        d	         k    sn J d S )Nr   rc  c                      j         |  \  }}j        |j        dk    r!t          j        |j        dd                    ndz   _                            |          |dz  z  S )NrE   r>   rC   )broadcast_arraysre   rO   mathprodr@   r   )r:  r   r   r;  r*   s      r   r;  z!TestHessian.test_nfev.<locals>.f1  s`    &2&*DAqg16A::17122;!7!7!71MBG66!99qAv%%r   r   r   r  c                 6     | d         d         g          S )Nr   r>   rU   )r   r;  r:  s    r   r{   z'TestHessian.test_nfev.<locals>.<lambda>      ""adAaD\"2"2 r   r>   )r   r   c                 6     d         | d         g          S rl  rU   )r   r;  r:  s    r   r{   z'TestHessian.test_nfev.<locals>.<lambda>  r  r   rE   )r>   r>   )r$   re   r   )r   r*   r,   rx  r{  r;  r:  s    `   @@r   	test_nfevzTestHessian.test_nfev  s%   JJT{##	& 	& 	& 	& 	& 	&  b!"---22222AacFLLLx~<<<<EJt,<<<<<<<22222AacFLLLx~<<<<EJt,<<<<<<<<<r   Tz$Python list input uses NumPy backend)r/   r   c                     d}t          j        t          |          5  t          |j        dgt          d                     d d d            d S # 1 swxY w Y   d S )Nz"The specified `rtol=1e-15`, but...r   r!   r   r   r   )r   warnsRuntimeWarningr   r   r   )r   r*   r  s      r   test_small_rtol_warningz#TestHessian.test_small_rtol_warning  s     7\.888 	? 	?BFRDTu-=-=-=>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   'AAAN)r#  r$  r%  r   r0  r   r&  r'  r  r  r  thread_unsafer(  r  rU   r   r   r  r  u  s         G[W&8&8&8991 1 :91&? ? ?= = =0 [[!!$)O " Q Q? ?Q Q ? ? ?r   r  )#r  r   numpyra   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipy._lib.array_api_extraarray_api_extrar   scipy._lib._array_api_no_0dr   r   r   scipy._lib._array_apir   r   scipyr   r	   r
   scipy.differentiater   r   r   "scipy.differentiate._differentiater   array_api_strict_skip_reasonr&  r(  r   r.  r6  r  rU   r   r   <module>r     sz         6 6 6 6 6 6 6 6 6 ( ( ( ( ( ( ( ( ( X X X X X X X X X X 4 4 4 4 4 4 4 4 * * * * * * * * * * = = = = = = = = = = > > > > > >V  09UVVl3PQQe. e. e. e. e. e. e. RQ WVe.P) ) ) ) ) ) ) )< 09UVVl3PQQV( V( V( V( V(& V( V( RQ WVV(r 09UVVl3PQQ?? ?? ?? ?? ??% ?? ?? RQ WV?? ?? ??r   