
    biLl                     2   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mZ d dlmZmZmZ d dlmZmZmZ d dlmZ  ee       G d d             Z G d	 d
      Z ee       G d de             Z ee       G d de             Z y)    N)xp_assert_closexp_assert_equalxp_assert_less)is_numpyis_torchmake_xp_test_case)statsoptimizespecial)
derivativejacobianhessian)_EERRORINCREASEc            	       P   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	        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
                  j9                  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     g/home/cdr/jupyterlab/.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   casec                     |\  }} t        t        |      | }|j                         dz   }t        |j                  |      }|j                  |      }t        |j                  |d       y )N皙?绽|=atol)getattrr	   medianr   cdfr%   r   r&   )r   r.   distnameparamsdistr   r+   r,   s           r   test_accuracyzTestDerivative.test_accuracy#   s\    &'wuh'0KKMC1%hhqk%0r   order      shape)         )rA      rC   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   r?   r   c                 4    t        j                  |       S )Nr;   )r   r   )r   r;   r   s    r   _derivative_singlez=TestDerivative.test_vectorization.<locals>._derivative_single5   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>.f9   sX    %LAL'NAFFaK166A:aAGGBKON466!-d-f--r   rK   rI   r   rJ   r!   rF   rK   g-q=r2   )nplinspacereshaperL   	vectorizer   r#   float64ravelr   r   r&   r(   boolsuccessr   int32statusnfevr   maxrI   )r   r;   r>   r)   r   rG   r   r+   refsr,   ref_xref_df	ref_errorref_successref_flagref_nfevref_nitrP   rQ   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>d   s
    q3w r   c                 H    j                  |       j                         z  S r   )exprandom)r   rngr)   s    r   ro   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>e   s    rvvay5 r   c                 &    j                  |       S r   rq   r   r)   s    r   ro   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>f   s    rvvay r   c                 <    j                  | j                        S r   )	full_likenanrv   s    r   ro   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>g   s    r||Arvv6 r   rR   )rI   ziprU   intstack)	xsjsfuncsr   jr+   r   rs   r)   s	         r   r   z$TestDerivative.test_flags.<locals>.fb   sq    EEQJE&5(68E 14B

2u8M0NO1=5Q=#OCO88C=  Ps   A9r   rB   r!   +=rtolrC   )
tolerancesr;   rN   )rS   rr   default_rngrI   arangeint64r   onesrW   dictr#   eim_ECONVERGEDr   	_ECONVERR
_EVALUEERRr[   r   r\   )r   r)   rN   r+   	ref_flagsr   rs   s    `   @@r   
test_flagszTestDerivative.test_flags^   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 )
Nri   c                     | dz
  j                  |       j                         z  j                  |       j                  | j                        g}j	                  |      S rl   )rq   rr   rx   ry   r|   )r   outrs   r)   s     r   r   z3TestDerivative.test_flags_preserve_shape.<locals>.fz   sT    s766!9SZZ\)66!9<<266*,C 88C= r   r<   r!   r   r   rC   T)r   r;   preserve_shape)rS   rr   r   r   r#   rW   r   r   r   r   r   r   r[   r   r\   )r   r)   r   r+   r   rs   s    `   @r   test_flags_preserve_shapez(TestDerivative.test_flags_preserve_shapew   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 )NrA   r      r<   rC   )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<   rA   r   r   rC   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   )r3   r   gMbP?r3   rB   )r   r;   gư>r   )r#   rW   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?rC   )step_factorr   r   rB   r   )r;   r   step_direction)r   r   g+<r   rK   r   )r#   rW   r   r   r   r	   r$   r%   r   r'   r&   r   r   rS   sqrt)	r   r)   r   r   r,   r   r   rO   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   rC   )rq   xpxatsetry   r   yr)   s     r   r   z-TestDerivative.test_step_direction.<locals>.f   sC    q	Aq	1q5QU+,008AHr   r   rC   r   r   r<   gffffff?rK   r   )rT   
zeros_liker   r   r   r   r   r&   rq   allrZ   )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   rm   r   ps     r   r   z=TestDerivative.test_vectorized_step_direction_args.<locals>.f   s    6Mr   c                     || |dz
  z  z  S Nr<   rm   r   s     r   r&   z>TestDerivative.test_vectorized_step_direction_args.<locals>.df   s    qQU|##r   )r<   rC   rA   rB   )rK   r<   r<   rK   r   r<   )r<   rK   r<   rC   rA   )r<   r<   rK   )r   rN   r    r!   )rU   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   ru   rv   s    r   r   z+TestDerivative.test_initial_step.<locals>.f   s    66!9r   r   r!   r   r   r   )rK   r<   rC   r<   )r   r;   r   r   rK   .r   r   )r#   rW   rU   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 |dk(  r3t#        ||   ||   d       t#        j                  |   ||   d       q||   j                  |   cxk(  r
||   k(  rJ  J  y )Ng~,?r!   rA   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<   rC   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   rK   )r   r   r\   r(   r   r2   )r#   rW   r   r   anyrZ   r   r]   rI   r   r+   r   r   keysr   r   
_ECALLBACKr   )
r   r)   r   r   default_orderr+   r   keyr   r   s
           @@r   test_maxiter_callbackz$TestDerivative.test_maxiter_callback  s|   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  S	3s8%@S 13s8%HCyHLL$5ASAAAAA
	Br   r   r   g?gffffff?r"   float32rW   c                    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!   c                 H    | j                   k(  sJ j                  |       S r   )r"   rq   )r   r"   r)   s    r   r   z$TestDerivative.test_dtype.<locals>.f7  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   rB   )r;   r   r   r   2   r   )r4   r#   r   r   r"   r&   r(   finfoepsr   r   rq   )
r   r   r   r"   r)   r   r   r+   r   r   s
      ``     r   
test_dtypezTestDerivative.test_dtype/  s    
 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   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>S       r   y            ?z6When `preserve_shape=False`, the shape of the array...c                 
    g dS )N)r<   rC   rA   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>W  s     r   r   z6Tolerances and step parameters must be non-negative...c                     | S r   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>[  r   r   rK   r2   r   c                     | S r   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>]  r   r   ekkir   c                     | S r   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>_  r   r   r   %`maxiter` must be a positive integer.c                     | S r   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>c  r   r         ?r   c                     | S r   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>e  r   r   r   z"`order` must be a positive integerc                     | S r   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>i  r   r   rF   c                     | S r   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>k  r   r   z'`preserve_shape` must be True or False.c                     | S r   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>o  r   r   herringr   z`callback` must be callable.c                     | S r   rm   rn   s    r   ro   z6TestDerivative.test_input_validation.<locals>.<lambda>s  r   r   	shrubbery)r   )r#   pytestraises
ValueErrorr   r   object)r   r)   onemessages       r   test_input_validationz$TestDerivative.test_input_validationI  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"   rv   s    r   r   z,TestDerivative.test_special_cases.<locals>.fz  s)    ::agg7777Q;r      r1   r   r   gl)~IQr<   r   r   r!   r   r   r=   r   c                     d| z  z  S NrC   rm   )r   rP   s    r   r   z,TestDerivative.test_special_cases.<locals>.f  s    Avr   rC   )r   r;   r   rF   c                     || z  dz
  S r   rm   )r   cs     r   r   z,TestDerivative.test_special_cases.<locals>.f  s    Q37Nr   rA   )rN   g      @)r   r   r#   r   rZ   r   r&   rq   ry   r   r\   r[   r   rW   r^   r(   rI   )r   r)   r   r+   r   r,   rP   s    `    @r   test_special_casesz!TestDerivative.test_special_casesu  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   T)np_onlyc                     | dz
  dz  S )Nr<   rA   rm   rn   s    r   ro   zTestDerivative.<lambda>  s    AEa< r   c                 N    t        j                  | dkD  | dz
  dz  | dz
  dz        S )Nr<      rA   )rS   wherern   s    r   ro   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   r3   r   r2   )r   rS   r   rZ   r   r&   )r   r.   r)   r3   r+   s        r   test_saddle_gh18811z"TestDerivative.test_saddle_gh18811  s=     $zEvvckk"""-r   N)__name__
__module____qualname__r   r   markparametrizerS   rT   r-   r	   _distr_paramsdistcontr:   tuplerg   r   r   r   r   r   r   r   r   r   r   r  r  skip_xp_backendsxfailr  rm   r   r   r   r      s    [[S3E4(D"EF	< G	< [[VU%8%8%A%AB1 C1 [[Wq!f-[[Wuwvy&IJ.3 K ..3`/2/(
%724>#% >,)BV [[VZ0[[S4$"56[[W&<=: > 7 1:.*?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<   rK   r2   r   rA   z<Tolerances and step parameters must be non-negative scalars.r   r   z#`order` must be a positive integer.rF   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'  rm   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 NrC   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+  )rS   rx   r   )r-  r   r   s      r   df1zTestJacobian.df1  s?    1QAF#bll1a&8"&&)%DEEr   )rC   rC   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   )rS   r   r   )r-  r3  r4  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)   r3  r4  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   )rS   r   r   r   )r-  r3  r4  r9  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   )rA   rA   c           	      z    | \  }}}|j                  |d|z  d|dz  z  d|z  z
  ||j                  |      z  g      S Nr  rB   rC   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   )rS   	ones_liker   r   r   r@  rA  rB  r  s        r   df4zTestJacobian.df4  s    
Bll2a#gq3w'S!c'1s7+S!b&"s(+bffRj!c'266":68 	8r   r@   c           	      ~    | \  }}}|j                  d|z  d|dz  z  d|j                  ||z        z  z
  ||z  g      S r>  r,  r?  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 rE  )rS   rF  r   rG  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   rL   )rm   )r=   )rC   rA   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 )	NrW   r1   ghUM`?   6H2)rL   c                      |       S r   rm   )r   r&  r)   s    r   ro   z,TestJacobian.test_examples.<locals>.<lambda>1  s    a" r   r!   r2   )
r4   rS   rr   r   mnr   r#   r,   r   r&   )r   r"   rL   r&  r)   r3   rs   mrP   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   rC   r2  )r-  r   r   r)   s      r   r0  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_0xy@  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_1xyC  s    66!A#;A%%r   r   r	  rB   c                      | d         S r   rm   )r   rY  r-  s    r   ro   z)TestJacobian.test_attrs.<locals>.<lambda>L      71ad#3 r   r   r<   c                      d   |       S Nr   rm   )r   rY  r-  s    r   ro   z)TestJacobian.test_attrs.<locals>.<lambda>M      71Q4#3 r   rC   c                      | d         S r   rm   )r   r[  r-  s    r   ro   z)TestJacobian.test_attrs.<locals>.<lambda>N  r]  r   c                      d   |       S r_  rm   )r   r[  r-  s    r   ro   z)TestJacobian.test_attrs.<locals>.<lambda>O  r`  r   )rZ   r\   r&   rI   r]   c              3   2   K   | ]  \  }}|d k(  s|  yw)r<   Nrm   ).0axrL   s      r   	<genexpr>z*TestJacobian.test_attrs.<locals>.<genexpr>V  s     U("d4ST92Us   )axisgiUMu>gt=r   )r#   r   r   r   nuniquerI   r]   r
   OptimizeResultr4   squeezer  	enumerater>   r"   r   r   )r   r)   r0  r+   res00res01res10res11r,   attrref_attrr   rY  r[  r-  s    `          @@@r   
test_attrszTestJacobian.test_attrs6  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   ]2ZVrA   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   rV  r<   r0   )r   r   r   ry   r)  rJ  )r   br   r)   s    r   r   z0TestJacobian.test_step_direction_size.<locals>.fb  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<   rK   r   )rV  r0   r   r3   :0yE>r!   )r   r   r   r2   )rS   rr   r   r   r#   rW   r)  rL  r   r&   r   isfinite)r   r)   rs   r   dirr   r3   r+   r,   ru  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#  r.  r0  rR  r,   r5  r7  r:  r<  rC  rH  rJ  rL  r%  r
   	rosen_derr   r  r  rT  rr  ry  rm   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                  dd      d	        Zy
)TestHessianr>   )rm   )rB   )rC   rB   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 )NrP  rA   r!   rK   r   rv  r2   )rS   rr   r   r#   rW   r   r
   r%  rU   r|   T
rosen_hessmoveaxisr   ddf)	r   r>   r)   rs   rS  r   r+   xir,   s	            r   test_examplezTestHessian.test_examplew  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 )NrP  rA   r!   r   g{Gz?r2   )rS   rr   r   r#   r   r   r
   r%  r  r   r  r'   min)r   r)   rs   r   r+   r,   maskr3   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   rV  c                      j                   |  \  }}j                  |j                  dkD  r"t        j                  |j
                  dd        ndz   _        j                  |      |dz  z  S )NrC   r<   rA   )broadcast_arraysr]   rM   mathprodr>   r   )r-  r   r   r.  r)   s      r   r.  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<   rm   )r   r.  r-  s    r   ro   z'TestHessian.test_nfev.<locals>.<lambda>      "adAaD\"2 r   r<   )r   r   c                 $     d   | d   g      S r_  rm   )r   r.  r-  s    r   ro   z'TestHessian.test_nfev.<locals>.<lambda>  r  r   rC   )r<   r<   )r#   r]   r   )r   r)   r+   rl  ro  r.  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  reasonc                     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  r  r  rm   r   r   r|  r|  s  sd    G[[W&891 :1&?=0 [[!!$)O " Q?Q?r   r|  )!r  r   numpyrS   (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   r   scipyr	   r
   r   scipy.differentiater   r   r   "scipy.differentiate._differentiater   r   r!  r)  r|  rm   r   r   <module>r     s       6 6 ( ( X X G G * * = = > :f. f. f.R) )< 8V(& V( V(r 7>?% >? >?r   