
    Џkhm                     p   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:                  j=                  de	      ej:                  j=                  d
d	       G d d                    Z G d d      Z ej:                  j=                  de	      ej:                  j=                  d
d	       G d de                     Z!ej:                  j=                  de	      ej:                  j=                  d
d	       G d de                     Z"y)    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
                  j                  dd ej                  ddd      g      d        Z	ej
                  j                  d	      ej
                  j                  d
ej                  j                        d               Zej
                  j                  dddg      ej
                  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
                  j                  dd      ej
                  j                  dddd gf      ej
                  j                  d!d"      d#                      Zd$ Zd% Zej
                  j                  d	      ej
                  j:                  ej
                  j                  d
d& dfd' dff      d(                      Zy))*TestDerivativec                 ,    t        j                  |      S Nr
   ndtr)selfxs     h/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/differentiate/tests/test_differentiate.pyfzTestDerivative.f   s    ||A    r   333333?皙?
   c                    |j                  d      j                  }t        | j                  |j                  ||            }|j                  t	        j
                         j                  |      |      }t        |j                  |       t        |      s3t        |j                  |j                  |z
        |j                         y y )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Djj))!,MjB$ |266#&&3,/; r   T)np_onlycasec                     |\  }} t        t        |      | }|j                         dz   }t        |j                  |      }|j                  |      }t        |j                  |d       y )N皙?绽|=atol)getattrr   medianr   cdfr&   r   r'   )	r   r0   r*   distnameparamsdistr   r,   r-   s	            r   test_accuracyzTestDerivative.test_accuracy%   s^      &'wuh'0KKMC1%hhqk%0r   order      shape)         )rC      rE   c                 ,    |r&t        j                  ddd      j                  |      nd}t        j                  |      i t         j                   fd       } fd}dd<   d	d
<   t        ||j                  ||j                              } ||      j                         }|D 	cg c]  }	|	j                   }
}	t        |j                  |j                  d      |j                  |
             |D 	cg c]  }	|	j                   }}	t        |j                  |j                  d      |j                  |             |D 	cg c]  }	|	j                   }}	t        |j                  |j                  d      |j                  |      d       |D 	cg c]  }	t        |	j                         }}	t        |j                  |j                  d      |j                  |             |D 	cg c]!  }	t        j                   |	j"                        # }}	t        |j                  |j"                  d      |j                  |             |D 	cg c]!  }	t        j                   |	j$                        # }}	t        |j                  |j$                  d      |j                  |             t'        |      r#|j)                  |j$                        d
   k(  sJ |D 	cg c]!  }	t        j                   |	j*                        # }}	t        |j                  |j*                  d      |j                  |             t'        |      r$|j)                  |j*                        d   k(  sJ y y c c}	w c c}	w c c}	w c c}	w c c}	w c c}	w c c}	w )Nr   r   rA   r   c                 4    t        j                  |       S )Nr=   )r   r   )r   r=   r   s    r   _derivative_singlez=TestDerivative.test_vectorization.<locals>._derivative_single8   s    dffau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|i |S )Nnitr>   feval)sizendimr@   r   )r   argskwargsnr   states      r   r   z,TestDerivative.test_vectorization.<locals>.f<   sX    %LAL'NAFFaK166A:aAGGBKON466!-d-f--r   rM   rK   r   rL   r"   rH   rM   g-q=r4   )nplinspacereshaperN   	vectorizer   r$   float64ravelr   r   r'   r)   boolsuccessr   int32statusnfevr   maxrK   )r   r=   r@   r*   r   rI   r   r,   refsr-   ref_xref_df	ref_errorref_successref_flagref_nfevref_nitrR   rS   s   ``               @@r   test_vectorizationz!TestDerivative.test_vectorization/   s   
 <ABKKtR(007cGGAJ		6 
	6	.
 egBJJq

J;5I!!$**,"&'3''

355%0"**U2CD$()S#&&))

366512::f3EF*./3SYY/	/

399e4bjj6K"	$ 599StCKK(99

3;;6

;8OP489SBHHSZZ(99

3::u5rzz(7KL2673BHHSXX&77

388U3RZZ5IJB<66#((#uW~555045288CGG$55

377E2BJJw4GHB<66#''?eEl222 / ( * 0 : : 8
 6s*   3M3M8M=N6&N&N&&Nc                    t         j                  j                  d      fdd_        j	                  dj
                        f}t        j                  dj                        t        d      d|	      }j                  t        j                  t        t        j                  t        j                  gj                         }t#        |j$                  |       y )
N   ;O c           	          xj                   dz  c_         d fdfdfdg}t        | j                  |d            D cg c]  \  }} |t        |         |       }}}j	                  |      S c c}}w )Nr>   c                     | dz
  S Ng      @ r   s    r   <lambda>z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>g   s
    q3w r   c                 H    j                  |       j                         z  S r   )exprandom)r   rngr*   s    r   rq   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>h   s    rvvay5 r   c                 &    j                  |       S r   rs   r   r*   s    r   rq   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>i   s    rvvay r   c                 <    j                  | j                        S r   )	full_likenanrx   s    r   rq   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>j   s    r||Arvv6 r   rT   )rK   ziprW   intstack)	xsjsfuncsr   jr,   r   ru   r*   s	         r   r   z$TestDerivative.test_flags.<locals>.fe   sq    EEQJE&5(68E 14B

2u8M0NO1=5Q=#OCO88C=  Ps   A9r   rD   r"   +=rtolrE   )
tolerancesr=   rP   )rU   rt   default_rngrK   arangeint64r   onesrY   dictr$   eim_ECONVERGEDr   	_ECONVERR
_EVALUEERRr]   r   r^   )r   r*   rP   r,   	ref_flagsr   ru   s    `   @@r   
test_flagszTestDerivative.test_flagsa   s     ii##$45	! 		!288	,.BGGARZZG8$(e$4 t- JJ / # # 0 8:xx  A	 	

I.r   c                    t         j                  j                  d      fd}t        |j	                  dj
                        t        d      dd	      }j	                  t        j                  t        t        j                  t        j                  gj                        }t        |j                  |       y )
Nrk   c                     | dz
  j                  |       j                         z  j                  |       j                  | j                        g}j	                  |      S rn   )rs   rt   rz   r{   r~   )r   outru   r*   s     r   r   z3TestDerivative.test_flags_preserve_shape.<locals>.f}   sT    s766!9SZZ\)66!9<<266*,C 88C= r   r>   r"   r   r   rE   T)r   r=   preserve_shape)rU   rt   r   r   r$   rY   r   r   r   r   r   r   r]   r   r^   )r   r*   r   r,   r   ru   s    `   @r   test_flags_preserve_shapez(TestDerivative.test_flags_preserve_shapez   s    ii##$45	! BJJq

J;$(e$4 7 JJ / # # 0 8:xx  A	 	

I.r   c                    fd}j                  d      }j                  j                  d      dj                  d|z        z  ddj                  d|z        z  z   dj                  d|z        z  |dz
  dz  z  dj                  d|z        z  |dz
  z  z   g      }t        ||d	      }t	        |j
                  |       y )
Nc                     | j                  d| z        | j                  d| z        z   j                  d| z        | dz
  dz  z  g}j                  |      S )NrC   r      r>   rE   )sinr~   )r   r   r*   s     r   r   z-TestDerivative.test_preserve_shape.<locals>.f   sT    bffQqSk1RVVBqD\>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    	! JJrNjj"**Q-266!A#;"RVVBqD\/8IRVVBqD\/1Q3(2Qrvvbd|^QqS5IIK LAd3$r   c                 h   |j                  d|j                        }t        j                  }t	        t
        j                  j                  d            }t        dd      }|j                         }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 |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 y )Nr!   r"   r   )r5   r   gMbP?r5   rD   )r   r=   gư>r   )r$   rY   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,LLEJJNN2&'* %%'
!
6!Q:Q?477S=!D(((!
6!Q:Q?477S=!D(((477S=!C#$6666 %%'
!
6!Q:Q?477S=!D3J...!
6!Q:Q?477S=!D3J...477S=!C#$6666r   c                    |j                  d|j                        }t        j                  }t	        t
        j                  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       y )Nr!   r"         ?r>   )initial_stepmaxiterg?rE   )step_factorr   r   rD   r   )r=   r   step_direction)r   r   g+<r   rM   r   )r$   rY   r
   r   r   r   r%   r&   r   r(   r'   r   r   rU   sqrt)	r   r*   r   r   r-   r   r   rQ   r,   s	            r   test_step_parametersz#TestDerivative.test_step_parameters   s   JJrJ,LLEJJNN2&'!QS!<!QT1=477S=!C#$6666!QAq9!QB:477S=!C#$6666 Aq;AKCSKFKAGA1GGU3 Aq;AGA1GGATAbggajLcTVTU3#% AGA1GGATAbggajLcTVTU3r   c                    fd}j                  ddd      }j                  |      }t        j                  |      |dk     j	                  d      }t        j                  |      |dkD     j	                  d      }t        |||	      }t        |j                  j                  |             j                  |j                        sJ y )
Nc                     j                  |       }t        j                  |      | dk  | dkD  z      j                  j                        }|S )Nr   rE   )rs   xpxatsetr{   r   yr*   s     r   r   z-TestDerivative.test_step_direction.<locals>.f   sC    q	Aq	1q5QU+,008AHr   r   rE   r   r   r>   gffffff?rM   r   )rV   
zeros_liker   r   r   r   r   r'   rs   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	*vvckk"""r   c                    d }d }|j                  |j                  g d      d      }|j                  |j                  g d      d      }|j                  |j                  ddg      d	      }t        ||||f
      }|j                   |||      |j                  j
                        }|j                  ||j                  d      j                        }t        |j                  |       y )Nc                     | |z  S r   ro   r   ps     r   r   z=TestDerivative.test_vectorized_step_direction_args.<locals>.f   s    6Mr   c                     || |dz
  z  z  S Nr>   ro   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"   )rW   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"**Z0*=JJrzz1a&):6Ad!>oobAh5jjBJJrN$8$8j9$r   c           	          fd}j                  dj                        }j                  g d      }j                  j                  ddd      d      }t	        |||d	d
|      }j                  |j                   ||      z
        }j                  |d ddf   |d
d df   k        sJ t        |j                  d         D ]A  }t	        ||||df   d	d
|      }	t        |j                  |d d f   |	j                  d       C y )Nc                 &    j                  |       S r   rw   rx   s    r   r   z+TestDerivative.test_initial_step.<locals>.f   s    66!9r   r   r"   r   r   r   )rM   r>   rE   r>   )r   r=   r   r   rM   .r   r   )r$   rY   rW   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,J/ZZB2.8ABa(68ffSVVad]# vvc#2#s(mc!"c'l2333 rxx{# 	>AQ1a41,:<CCFF1a4L#&&u=	>r   c                   	 |j                  d|j                        }d	d }d}t        ||	t        d            }|j	                  |j
                        rJ |j                  |j                  |d	z   	d	z
  d
z  z   k(        sJ |j                  |j                  	k(        sJ 	fdd_	        d _
        t               _        t        ||t        d            }|j                         D ][  }|dk(  r1||   t        j                  k(  sJ ||   t        j                   k(  r7J ||   j                  |   cxk(  r
||   k(  rXJ  J  y )Ng~,?r"   rC   c                 0    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                 d   xj                   dz  c_         | _        t        | d      sJ t        | j                        j
                  vsJ j
                  j                  t        | j                               | j                  t        j                  k(  sJ j                   k(  rt        y )Nr>   r   )iterr,   hasattrr   r'   dfsaddr^   r   _EINPROGRESSStopIteration)r,   callbackr   s    r   r   z6TestDerivative.test_maxiter_callback.<locals>.callback  s    MMQMHL3$$$=444LLU366]+::!1!1111}}'## (r   rM   )r   r   r^   )r$   rY   r   r   anyr\   r   r_   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  sF   JJxrzzJ2	 Aw4U;KL66#++&&&vvchh-!"3w{Ao"EEFFFvvcgg()))	$ u!Qd>NO 88: 	BCh3x3==000CyCNN222CyHLL$5ASAAAAA	Br   r   r   g?gffffff?r#   )float16float32rY   c                 0   dk(  r t              st        j                  d       t              j	                  |      }fd}fd}t        ||d||      }|j                  j                  k(  sJ |j                  j                  k(  sJ |j                  j                  k(  sJ j                        j                  }t              r|dz  d	z  n|dz  }	t        |j                  j                  |j                        |	
       y )Nr   z+float16 not tested for alternative backendsr"   c                 H    | j                   k(  sJ j                  |       S r   )r#   rs   )r   r#   r*   s    r   r   z$TestDerivative.test_dtype.<locals>.f8  s#    77e###66!9r   c                     | j                   j                  k(  sJ | j                  j                  k(  sJ | j                  j                  k(  sJ y r   )r   r#   r'   r)   )r,   r#   s    r   r   z+TestDerivative.test_dtype.<locals>.callback<  sE    55;;%'''66<<5(((99??e+++r   rD   )r=   r   r   r   2   r   )r   pytestskipr6   r$   r   r   r#   r'   r)   finfoepsr   r   rs   )
r   r   r   r#   r*   r   r   r,   r   r   s
      ``     r   
test_dtypezTestDerivative.test_dtype-  s     IhrlKKEF E"JJqJ&		,
 AQthOuu{{e###vv||u$$$yy%'''hhuo!! (sCx"}#s(suuD9r   c                    |j                  d      }d}t        j                  t        |      5  t	        d |       d d d        d}t        j                  t        |      5  t	        d |j                  d             d d d        d}t        j                  t        |      5  t	        d |j                  d	d
g             d d d        d}t        j                  t        |      5  t	        d |t        d             d d d        t        j                  t        |      5  t	        d |t        d             d d d        t        j                  t        |      5  t	        d |t                      d d d        d}t        j                  t        |      5  t	        d |d       d d d        t        j                  t        |      5  t	        d |d       d d d        d}t        j                  t        |      5  t	        d |d       d d d        t        j                  t        |      5  t	        d |d       d d d        d}t        j                  t        |      5  t	        d  |d!"       d d d        d#}t        j                  t        |      5  t	        d$ |d%&       d d d        y # 1 sw Y   xY w# 1 sw Y   MxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   8xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)'Nr>   z`f` must be callable.matchz3Abscissae and function output must be real numbers.c                     | S r   ro   rp   s    r   rq   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   ro   rp   s    r   rq   z6TestDerivative.test_input_validation.<locals>.<lambda>X  s     r   r   z6Tolerances and step parameters must be non-negative...c                     | S r   ro   rp   s    r   rq   z6TestDerivative.test_input_validation.<locals>.<lambda>\  r   r   rM   r4   r   c                     | S r   ro   rp   s    r   rq   z6TestDerivative.test_input_validation.<locals>.<lambda>^  r   r   ekkir   c                     | S r   ro   rp   s    r   rq   z6TestDerivative.test_input_validation.<locals>.<lambda>`  r   r   r   %`maxiter` must be a positive integer.c                     | S r   ro   rp   s    r   rq   z6TestDerivative.test_input_validation.<locals>.<lambda>d  r   r         ?r   c                     | S r   ro   rp   s    r   rq   z6TestDerivative.test_input_validation.<locals>.<lambda>f  r   r   r   z"`order` must be a positive integerc                     | S r   ro   rp   s    r   rq   z6TestDerivative.test_input_validation.<locals>.<lambda>j  r   r   rH   c                     | S r   ro   rp   s    r   rq   z6TestDerivative.test_input_validation.<locals>.<lambda>l  r   r   z'`preserve_shape` must be True or False.c                     | S r   ro   rp   s    r   rq   z6TestDerivative.test_input_validation.<locals>.<lambda>p  r   r   herringr   z`callback` must be callable.c                     | S r   ro   rp   s    r   rq   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m)]]:W5 	"tS!	" H]]:W5 	7{BJJu$56	7 K]]:W5 	B*BJJBx,@A	B K]]:W5 	C{CDbMB	C]]:W5 	G{CDf4EF	G]]:W5 	?{CVX>	? :]]:W5 	6{C5	6]]:W5 	4{C3	4 7]]:W5 	4{Cs3	4]]:W5 	2{Cq1	2 <]]:W5 	C{C	B	C 1]]:W5 	?{C+>	? 	?I	" 	"	7 	7	B 	B	C 	C	G 	G	? 	?	6 	6	4 	4	4 	4	2 	2	C 	C	? 	?s   J<!K	#K'K#$K0!K=L
LL$9L1.L=#M	<K	KK #K-0K:=L
LL!$L.1L:=M	Mc           
         fd}t              sZt        |j                  d      t        d            }|j                  sJ t        |j                  j                  d             t        j                  j                  d      j                        }t        |j                  j                  j                               t        |j                  j                  d	j                  
             t        j                  j                  d      d      }t        |j                  j                  j                               t        |j                  j                  d	j                  
             t        d      D ]  j                  dj                  
      }fd}dz  |dz
  z  z  }t        ||dt        d            }t        |j                  |d       t        |j                  j                  j                  j                  
             t        ||t        d            }|j                  sJ |j                   dk(  sJ t        |j                  |d        d }t        |j                  d      j                  d            }t        |j                  j                  d             y )Nc                 P    j                  | j                  d      sJ | dz  dz
  S )Nzreal floatingc   r>   )isdtyper#   rx   s    r   r   z,TestDerivative.test_special_cases.<locals>.f{  s)    ::agg7777Q;r      r3   r   r   gl)~IQr>   r   r   r"   r   r   r?   r   c                     d| z  z  S NrE   ro   )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   ro   )r   cs     r   r   z,TestDerivative.test_special_cases.<locals>.f  s    Q37Nr   rC   )rP   g      @)r   r   r$   r   r\   r   r'   rs   r{   r   r^   r]   r   rY   r`   r)   rK   )r   r*   r   r,   r   r-   rR   s    `    @r   test_special_casesz!TestDerivative.test_special_casesv  s   
	 |Q

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

266 23

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

266 23

BJJrJ$BC q 	5A

3bjj
1A A#a!A#h,CQ1C1I>CCFFCe4CIIrzz"&&

z'KLQQ3C;;;77a<<CFFCe4	5"	 BJJqM

1>

2/r   c                     | dz
  dz  S )Nr>   rC   ro   rp   s    r   rq   zTestDerivative.<lambda>  s    AEa< r   c                 N    t        j                  | dkD  | dz
  dz  | dz
  dz        S )Nr>      rC   )rU   whererp   s    r   rq   zTestDerivative.<lambda>  s'    288AEAEa<!a%A> r   c                     d}t        |g d|d}t        j                  |j                        sJ t	        |j
                  d|       y )NgؗҜ<r   )r   r5   r   r4   )r   rU   r   r\   r   r'   )r   r0   r*   r5   r,   s        r   test_saddle_gh18811z"TestDerivative.test_saddle_gh18811  s=     $zEvvckk"""-r   N)__name__
__module____qualname__r   r   markparametrizerU   rV   r.   skip_xp_backendsr   _distr_paramsdistcontr<   tupleri   r   r   r   r   r   r   r   r   r   r   r  r  xfailr  ro   r   r   r   r      s    [[S3E4(D"EF	< G	< [[!!$!/[[VU%8%8%A%AB1 C 01 [[Wq!f-[[Wuwvy&IJ.3 K ..3`/2/(
%724>#% >,$BL [[VZ0[[S4$"56[[W&GH: I 7 1:4*?X30l [[!!$!/[[[[V	#	>B& .	  0.r   r   c                       e Zd Zd Zy)JacobianHessianTestc                    | j                   j                  }d}t        j                  t        |      5   ||j
                  dt        d             d d d        |j                  d      }t        j                  }d}t        j                  t        |      5   |||t        d             d d d        t        j                  t        |      5   |||t        d	             d d d        t        j                  t        |      5   |||d
       d d d        d}t        j                  t        |      5   |||d       d d d        d}t        j                  t        |      5   |||d       d d d        y # 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   lxY w# 1 sw Y   y xY w)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*   r%  r  r   funcs         r   test_ivzJacobianHessianTest.test_iv  sr   ,,'' 7]]:W5 	9BFFA$B-8	9
 GGAJ~~P]]:W5 	7D!"6	7]]:W5 	7D!"6	7]]:W5 	-D!,	- 8]]:W5 	'D!2&	' :]]:W5 	)D!R(	) 	))	9 	9	7 	7	7 	7	- 	-	' 	'	) 	)sG    FFFF(=F4.G FFF%(F14F= G	N)r  r  r  r)  ro   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*                  j-                  dd      ej*                  j-                  dg d      ej*                  j-                  dee	eeeeg      d                      Zd Zd Zy)TestJacobianc                 h    | \  }}|j                  |dz  |z  d|z  |j                  |      z   g      S NrE   r  r~   r   )zr*   r   r   s       r   f1zTestJacobian.f1  s8    1xxa!QURVVAY%6788r   c                 |    | \  }}d|z  |z  |dz  gt        j                  |d      t        j                  |      ggS r-  )rU   rz   r   )r/  r   r   s      r   df1zTestJacobian.df1  s?    1QAF#bll1a&8"&&)%DEEr   )rE   rE   c                 z    | \  }}|j                  ||j                  |      z  ||j                  |      z  g      S r   r~   r   r   )r/  r*   rphis       r   f2zTestJacobian.f2  s7    3xxRVVC[!bffSk/:;;r   c                     | \  }}t        j                  |      | t        j                  |      z  gt        j                  |      |t        j                  |      z  ggS r   )rU   r   r   )r/  r5  r6  s      r   df2zTestJacobian.df2  sP    3qb266#;./a"&&+o.0 	0r   c                     | \  }}}|j                  ||j                  |      z  |j                  |      z  ||j                  |      z  |j                  |      z  ||j                  |      z  g      S r   )r~   r   r   )r/  r*   r5  r6  ths        r   f3zTestJacobian.f3  si    
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   )rU   r   r   r   )r/  r5  r6  r;  s       r   df3zTestJacobian.df3  s    
3rvvbz)1rvvc{?RVVBZ+GbffSk!BFF2J.0rvvbz)1rvvc{?RVVBZ+GRVVC[266":-/qb266#;.a0@A	C 	Cr   )rC   rC   c           	      z    | \  }}}|j                  |d|z  d|dz  z  d|z  z
  ||j                  |      z  g      S Nr  rD   rE   r.  r   r*   x1x2x3s        r   f4zTestJacobian.f4	  sF    
BxxQVQq[1r6%92r
?K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   )rU   	ones_liker   r   r   rB  rC  rD  r  s        r   df4zTestJacobian.df4  s    
Bll2a#gq3w'S!c'1s7+S!b&"s(+bffRj!c'266":68 	8r   rB   c           	      ~    | \  }}}|j                  d|z  d|dz  z  d|j                  ||z        z  z
  ||z  g      S r@  r.  rA  s        r   f5zTestJacobian.f5  sI    
BxxRR1Wq266"r'?/B!BBGL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 rG  )rU   rH  r   rI  s        r   df5zTestJacobian.df5  s    
Bll2S!c'1s7+Rb266"r'?2BGbffR"Wo4MNS"b!# 	#r   c                 ,    t        j                  |       S r   )r	   r'  )r   _s     r   r'  zTestJacobian.rosen&  s    HNN1--r   )r  r>   r#   )r   rY   rN   )ro   )r?   )rE   rC   r(  c                    |dk(  rdnd}t        |      }t        j                  j                  d      }j                  \  }}|j                  |f|z         }	t        fdj                  |	|            }
j                  t        j                  j                  |	            |      }t        |
j                  ||       y )	NrY   r3   ghUM`?   6H2)rN   c                      |       S r   ro   )r   r(  r*   s    r   rq   z,TestJacobian.test_examples.<locals>.<lambda>3  s    a" r   r"   r4   )
r6   rU   rt   r   mnr   r$   r-   r   r'   )r   r#   rN   r(  r*   r5   ru   mrR   r   r,   r-   s      ``       r   test_exampleszTestJacobian.test_examples*  s     *uE"ii##L1ww1JJQD4KJ(-rzz!5z/IJjjDHHQK0j>$/r   c           
      H   j                  ddg      fd}fdfdt        |d      }t              sHt        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 ]  }	j                  t        ||	      t        ||	      gt        ||	      t        ||	      gg      }
j                  |
t        d t        |
j                        D                    ||	<   ||	   j                  j                  k(  rdnd}t!        ||	   ||	   |        y )Nr         ?c                     | \  }}j                  j                  d|z        j                  |      z  j                  d|z        |dz  z  g      S )Nr   rE   r4  )r/  r   r   r*   s      r   r2  z$TestJacobian.test_attrs.<locals>.df1>  sN    DAq88RVVCE]RVVAY6qsad8JKLLr   c                 P    j                  d| z        j                  |      z  S )Nr   )r   r   s     r   df1_0xyz(TestJacobian.test_attrs.<locals>.df1_0xyB  s"    66#a%=266!9,,r   c                 8    j                  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   ro   )r   r[  r/  s    r   rq   z)TestJacobian.test_attrs.<locals>.<lambda>N      71ad#3 r   r   r>   c                      d   |       S Nr   ro   )r   r[  r/  s    r   rq   z)TestJacobian.test_attrs.<locals>.<lambda>O      71Q4#3 r   rE   c                      | d         S r   ro   )r   r]  r/  s    r   rq   z)TestJacobian.test_attrs.<locals>.<lambda>P  r_  r   c                      d   |       S ra  ro   )r   r]  r/  s    r   rq   z)TestJacobian.test_attrs.<locals>.<lambda>Q  rb  r   )r\   r^   r'   rK   r_   c              3   2   K   | ]  \  }}|d k(  s|  yw)r>   Nro   ).0axrN   s      r   	<genexpr>z*TestJacobian.test_attrs.<locals>.<genexpr>X  s     U("d4ST92Us   )axisgiUMu>gt=r   )r$   r   r   r   nuniquerK   r_   r	   OptimizeResultr6   squeezer   	enumerater@   r#   r   r   )r   r*   r2  r,   res00res01res10res11r-   attrref_attrr   r[  r]  r/  s    `          @@@r   
test_attrszTestJacobian.test_attrs8  s   JJT{#	M	-	& sAB/|;;sww'1,,,;;sxx(A---3QqV"M3QqV"M3QqV"M3QqV"M%%'> 	=DzzGE4$8'%:N#O$+E4$8'%:N#O#Q RH

Ui.GUU # CI !Y__

:6DCIs4yt<	=r   c                   	
 t         j                  j                  d      }|j                  d      	d
	
fd}g d}g d}ddi}t        |j	                  	j
                  	      |||
      }j	                  t        j                  	      j
                  	      }t        |j                  |d       j                  j                  |            sJ y )Nl   ]2ZVrC   gHz>c                 "   t        j                  |       d| d   d   k  f   j                  j                        } t        j                  |       d| d   d   dz   kD  f   j                  j                        } t        j                  |       d| d   d   kD  f   j                  j                        } t        j                  |       d| d   d   dz
  z
  k  f   j                  j                        } t        j                  |       S )Nr   rX  r>   r2   )r   r   r   r{   r+  rL  )r   br   r*   s    r   r   z0TestJacobian.test_step_direction_size.<locals>.fd  s    q	!QqTAaD[.)--bff5Aq	!QqTAaD4K//044RVV<Aq	!QqTAaD[.)--bff5Aq	!QqTAaD3JsN22377?A??1b))r   )r>   rM   r   )rX  r2   r   r5   :0yE>r"   )r   r   r   r4   )rU   rt   r   r   r$   rY   r+  rN  r   r'   r   isfinite)r   r*   ru   r   dirr   r5   r,   r-   rw  r   s    `       @@r   test_step_direction_sizez%TestJacobian.test_step_direction_size]  s     ii##N3JJqM	* ~q"**Qbjj*9&)d<jj))!,BJJj?$/vvbkk#&'''r   N)r  r  r  r   r%  r0  r2  rT  r-   r7  r9  r<  r>  rE  rJ  rL  rN  r'  r	   	rosen_derr   r  r  rV  rt  r{  ro   r   r   r+  r+    s    G
9F BEBF<0
 BEBF+
C BEBFM8 BEBFN# BEBF-EH""EI[[W&<=[[V%78[[Vb"b"b%%@A	0 B 9 >	0#=J(r   r+  c                       e Zd ZeZej                  j                  dg d      d        Zd Z	d Z
ej                  j                  ej                  j                  dd      d	               Zy
)TestHessianr@   )ro   )rD   )rE   rD   c                 8   t         j                  j                  d      }d}|j                  |j                  |f|z         |j                        }t        t        j                  |      }|r{|j                  ||df      }|j                  |j                  D cg c]  }t        j                  |       c}      }|j                  |dd      }|j                  |||f|z         }nt        j                  |      }t        |j                  |d       y c c}w )NrR  rC   r"   rM   r   rx  r4   )rU   rt   r   r$   rY   r   r	   r'  rW   r~   T
rosen_hessmoveaxisr   ddf)	r   r@   r*   ru   rU  r   r,   xir-   s	            r   test_examplezTestHessian.test_examplez  s    ii##L1JJszz1$,/rzzJBhnna(

1q"g&A((accBH//3BCC++c1b)C**S1a'E/2C%%a(C40 Cs   Dc                    t         j                  j                  d      }|j                  |j                  d      |j                        }t        t        j                  |      }t        j                  |      }|dk7  }t        |j                  |   ||          d|j                  |j                  ||               z  }t        |j                  |    ||    |       y )NrR  rC   r"   r   g{Gz?r4   )rU   rt   r   r$   r   r   r	   r'  r  r   r  r(   min)r   r*   ru   r   r,   r-   maskr5   s           r   test_float32zTestHessian.test_float32  s    ii##L1JJszz!}BJJJ7hnna(!!!$qs4y1bffRVVCI.//TE
>r   c                    j                  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J  J d_        t        fd
dd d      }|j                  d   j                  cxk(  r|j                  d	   k(  sJ  J y )Nr   rX  c                      j                   |  \  }}j                  |j                  dkD  r"t        j                  |j
                  dd        ndz   _        j                  |      |dz  z  S )NrE   r>   rC   )broadcast_arraysr_   rO   mathprodr@   r   )r/  r   r   r0  r*   s      r   r0  z!TestHessian.test_nfev.<locals>.f1  s_    &2&&*DAqgg166A:17712;!71MBG66!9qAv%%r   r   r   r  c                 $     | d   d   g      S )Nr   r>   ro   )r   r0  r/  s    r   rq   z'TestHessian.test_nfev.<locals>.<lambda>      "adAaD\"2 r   r>   )r   r   c                 $     d   | d   g      S ra  ro   )r   r0  r/  s    r   rq   z'TestHessian.test_nfev.<locals>.<lambda>  r  r   rE   )r>   r>   )r$   r_   r   )r   r*   r,   rn  rq  r0  r/  s    `   @@r   	test_nfevzTestHessian.test_nfev  s    JJT{#	&  b!"-2AaFLxx~<EJJt,<<<<<<2AaFLxx~<EJJt,<<<<<<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        y # 1 sw Y   y xY w)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  sC     7\\.8 	?BFFRDTu-=>	? 	? 	?s   $AAN)r  r  r  r   r%  r   r  r  r  r  r  thread_unsafer  r  ro   r   r   r~  r~  u  sx     G[[W&891 :1&?=0 [[[[!!$)O " Q?Q ?r   r~  )#r  r   numpyrU   (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#  r+  r~  ro   r   r   <module>r     s:      6 6 ( ( X X 4 * * = = >V  09UVl3PQe. e. R We.P) )< 09UVl3PQV(& V( R WV(r 09UVl3PQ??% ?? R W??r   