
    -iiLl                     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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 dS )    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            	       V   e Zd Zd Zej                            dd ej        ddd          g          d             Z	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     r/var/www/html/bet.cuttalo.com/ml/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   casec                     |\  }} t          t          |          | }|                                dz   }t          |j        |          }|                    |          }t          |j        |d           d S )N皙?绽|=atol)getattrr	   medianr   cdfr%   r   r&   )r   r.   distnameparamsdistr   r+   r,   s           r   test_accuracyzTestDerivative.test_accuracy#   sq    &'wuh''0KKMMC1%%hhqkk%000000r   order      shape)         )rA      rC   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   r?   r   c                 2    t          j        |           S )Nr;   )r   r   )r   r;   r   s    r   _derivative_singlez=TestDerivative.test_vectorization.<locals>._derivative_single5   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>.f9   so    %LLLALLL'NNNAFaKK16A::aaAGBKONNN46!-d---f---r   rK   rI   r   rJ   r!   rF   c                     g | ]	}|j         
S  r   .0r,   s     r   
<listcomp>z5TestDerivative.test_vectorization.<locals>.<listcomp>D   s    '''3'''r   rK   c                     g | ]	}|j         
S rS   )r&   rU   s     r   rW   z5TestDerivative.test_vectorization.<locals>.<listcomp>G   s    )))S#&)))r   c                     g | ]	}|j         
S rS   )r(   rU   s     r   rW   z5TestDerivative.test_vectorization.<locals>.<listcomp>J   s    ///3SY///r   g-q=r2   c                 6    g | ]}t          |j                  S rS   )boolsuccessrU   s     r   rW   z5TestDerivative.test_vectorization.<locals>.<listcomp>N   s"    999StCK((999r   c                 @    g | ]}t          j        |j                  S rS   )npint32statusrU   s     r   rW   z5TestDerivative.test_vectorization.<locals>.<listcomp>Q   s$    999SBHSZ((999r   c                 @    g | ]}t          j        |j                  S rS   )r_   r`   nfevrU   s     r   rW   z5TestDerivative.test_vectorization.<locals>.<listcomp>T   s$    7773BHSX&&777r   c                 @    g | ]}t          j        |j                  S rS   )r_   r`   rI   rU   s     r   rW   z5TestDerivative.test_vectorization.<locals>.<listcomp>Y   s$    55528CG$$555r   )r_   linspacereshaperL   	vectorizer   r#   float64ravelr   r   r&   r(   r   r]   ra   rc   r   maxrI   )r   r;   r>   r)   r   rG   r   r+   refsref_xref_df	ref_errorref_successref_flagref_nfevref_nitrP   rQ   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      @rS   rT   s    r   <lambda>z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>d   s
    q3w r   c                 X                         |                                           z  S r   )exprandom)r   rngr)   s    r   ry   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>e   s    rvvayy5 r   c                 .                         |           S r   r{   r   r)   s    r   ry   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>f   s    rvvayy r   c                 :                         | j                  S r   )	full_likenanr   s    r   ry   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>g   s    r||Arv66 r   c                 R    g | ]#\  }} t          |                   |          $S rS   )int)rV   r   jfuncss      r   rW   z8TestDerivative.test_flags.<locals>.f.<locals>.<listcomp>h   s1    OOO1=5Q=##OOOr   rX   )rI   ziprf   stack)xsjsr+   r   r   r}   r)   s      @r   r   z$TestDerivative.test_flags.<locals>.fb   s    EEQJEE&&55555((((66668E POOOB

2u8M8M0N0NOOOC88C== r   r   rB   r!   +=rtolrC   )
tolerancesr;   rN   )r_   r|   default_rngrI   arangeint64r   onesrh   dictr#   eim_ECONVERGEDr   	_ECONVERR
_EVALUEERRr`   r   ra   )r   r)   rN   r+   	ref_flagsr   r}   s    `   @@r   
test_flagszTestDerivative.test_flags^   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 )
Nru   c                     | dz
                       |                                           z                       |                               | j                  g}                    |          S rx   )r{   r|   r   r   r   )r   outr}   r)   s     r   r   z3TestDerivative.test_flags_preserve_shape.<locals>.fz   s]    s766!99SZZ\\)66!99<<26**,C 88C== r   r<   r!   r   r   rC   T)r   r;   preserve_shape)r_   r|   r   r   r#   rh   r   r   r   r   r   r   r`   r   ra   )r   r)   r   r+   r   r}   s    `   @r   test_flags_preserve_shapez(TestDerivative.test_flags_preserve_shapew   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 )NrA   r      r<   rC   )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<   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    	! 	! 	! 	! 	! 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   )r3   r   gMbP?r3   rB   )r   r;   gư>r   )r#   rh   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?rC   )step_factorr   r   rB   r   )r;   r   step_direction)r   r   g+<r   rK   r   )r#   rh   r   r   r   r	   r$   r%   r   r'   r&   r   r   r_   sqrt)	r   r)   r   r   r,   r   r   rO   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   rC   )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   rC   r   r   r<   gffffff?rK   r   )re   
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   rS   r   ps     r   r   z=TestDerivative.test_vectorized_step_direction_args.<locals>.f   s    6Mr   c                     || |dz
  z  z  S Nr<   rS   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!   )rf   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   )rK   r<   rC   r<   )r   r;   r   r   rK   .r   r   )r#   rh   rf   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                 n  	 |                     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 ]}|dk    r1||         t          j        k    sJ ||         t          j        k    sJ 9|dk    rBt#          ||         ||         d           t#          j
        |         ||         d           ||         j
        |         cxk    r||         k    sn J d S )Ng~,?r!   rA   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<   rC   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addra   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   rK   )r   r   ra   r(   r   r2   )r#   rh   r   r   anyr]   r   rc   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   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  S	3s8%@@@@S 13s8%HHHHHCyHL$5AAAASAAAAAAA
	B 
	Br   r   r   g?gffffff?r"   float32rh   c                    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!   c                 H    | j         k    sJ                     |           S r   )r"   r{   )r   r"   r)   s    r   r   z$TestDerivative.test_dtype.<locals>.f7  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   rB   )r;   r   r   r   2   r   )r4   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   
 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   rS   rT   s    r   ry   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   rS   rT   s    r   ry   z6TestDerivative.test_input_validation.<locals>.<lambda>W  s
     r   r   z6Tolerances and step parameters must be non-negative...c                     | S r   rS   rT   s    r   ry   z6TestDerivative.test_input_validation.<locals>.<lambda>[  r   r   rK   r2   r   c                     | S r   rS   rT   s    r   ry   z6TestDerivative.test_input_validation.<locals>.<lambda>]  r   r   ekkir   c                     | S r   rS   rT   s    r   ry   z6TestDerivative.test_input_validation.<locals>.<lambda>_  r   r   r   %`maxiter` must be a positive integer.c                     | S r   rS   rT   s    r   ry   z6TestDerivative.test_input_validation.<locals>.<lambda>c  r   r         ?r   c                     | S r   rS   rT   s    r   ry   z6TestDerivative.test_input_validation.<locals>.<lambda>e  r   r   r   z"`order` must be a positive integerc                     | S r   rS   rT   s    r   ry   z6TestDerivative.test_input_validation.<locals>.<lambda>i  r   r   rF   c                     | S r   rS   rT   s    r   ry   z6TestDerivative.test_input_validation.<locals>.<lambda>k  r   r   z'`preserve_shape` must be True or False.c                     | S r   rS   rT   s    r   ry   z6TestDerivative.test_input_validation.<locals>.<lambda>o  r   r   herringr   z`callback` must be callable.c                     | S r   rS   rT   s    r   ry   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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>.fz  s-    ::ag777777Q;r      r1   r   r   gl)~IQr<   r   r   r!   r   r   r=   r   c                     d| z  z  S NrC   rS   )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   rS   )r   cs     r   r   z,TestDerivative.test_special_cases.<locals>.f  s    Q37Nr   rA   )rN   g      @)r   r   r#   r   r]   r   r&   r{   r   r   ra   r`   r   rh   rj   r(   rI   )r   r)   r   r+   r   r,   rP   s    `    @r   test_special_casesz!TestDerivative.test_special_casesu  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   T)np_onlyc                     | dz
  dz  S )Nr<   rA   rS   rT   s    r   ry   zTestDerivative.<lambda>  s    AEa< r   c                 N    t          j        | dk    | dz
  dz  | dz
  dz            S )Nr<      rA   )r_   whererT   s    r   ry   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   r3   r   r2   )r   r_   r   r]   r   r&   )r   r.   r)   r3   r+   s        r   test_saddle_gh18811z"TestDerivative.test_saddle_gh18811  sV     $zzzEEEvck"""""------r   N)__name__
__module____qualname__r   r  markparametrizer_   re   r-   r	   _distr_paramsdistcontr:   tuplers   r   r   r   r   r   r   r   r   r   r   r  r  skip_xp_backendsxfailr   rS   r   r   r   r      s          [S3E4(D(D"EFF	< 	< GF	< [VU%8%ABB1 1 CB1 [Wq!f--[Wuuwwvy&IJJ.3 .3 KJ .-.3`/ / /2/ / /(
% 
% 
%7 7 724 4 4># # #% % % > > >,)B )B )BV [VZ00[S4$"566[W&<==: : >= 76 10:.*? *? *?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<   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  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#  r2  rS   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 NrC   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 r6  )r_   r   r   )r8  r   r   s      r   df1zTestJacobian.df1  s@    1QAF#bl1a&8&8"&))%DEEr   )rC   rC   c                     | \  }}|                     ||                    |          z  ||                    |          z  g          S r   r   r   r   )r8  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   )r_   r   r   )r8  r>  r?  s      r   df2zTestJacobian.df2  sP    3qb26#;;./a"&++o.0 	0r   c                    | \  }}}|                     ||                    |          z  |                    |          z  ||                    |          z  |                    |          z  ||                    |          z  g          S r   )r   r   r   )r8  r)   r>  r?  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   )r_   r   r   r   )r8  r>  r?  rD  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   )rA   rA   c           	          | \  }}}|                     |d|z  d|dz  z  d|z  z
  ||                    |          z  g          S Nr  rB   rC   r7  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   )r_   	ones_liker   r   r   rK  rL  rM  r  s        r   df4zTestJacobian.df4  s    
Bl2a#gq3w'S!c'1s7+S!b&"s(+bfRjj!c'26"::68 	8r   r@   c           	          | \  }}}|                     d|z  d|dz  z  d|                    ||z            z  z
  ||z  g          S rI  r7  rJ  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 rP  )r_   rQ  r   rR  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
   r0  )r   _s     r   r0  zTestJacobian.rosen$  s    HN1---r   )r  r<   r"   r   rL   )rS   )r=   )rC   rA   r1  c                    |dk    rdnd}t          |          }t          j                            d          }j        \  }}|                    |f|z             }	t          fd                    |	|                    }
                    t          j                            |	                    |          }t          |
j	        ||           d S )	Nrh   r1   ghUM`?   6H2)rL   c                      |           S r   rS   )r   r1  r)   s    r   ry   z,TestJacobian.test_examples.<locals>.<lambda>1  s    a" r   r!   r2   )
r4   r_   r|   r   mnr   r#   r,   r   r&   )r   r"   rL   r1  r)   r3   r}   mrP   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   rC   r=  )r8  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_0xy@  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_1xyC  s     66!A#;;A%%r   r   r  rB   c                 (     | d                   S r   rS   )r   rd  r8  s    r   ry   z)TestJacobian.test_attrs.<locals>.<lambda>L      771ad#3#3 r   r   r<   c                 (     d         |           S Nr   rS   )r   rd  r8  s    r   ry   z)TestJacobian.test_attrs.<locals>.<lambda>M      771Q4#3#3 r   rC   c                 (     | d                   S r   rS   )r   rf  r8  s    r   ry   z)TestJacobian.test_attrs.<locals>.<lambda>N  rh  r   c                 (     d         |           S rj  rS   )r   rf  r8  s    r   ry   z)TestJacobian.test_attrs.<locals>.<lambda>O  rk  r   )r]   ra   r&   rI   rc   c              3   ,   K   | ]\  }}|d k    |V  dS )r<   NrS   )rV   axrL   s      r   	<genexpr>z*TestJacobian.test_attrs.<locals>.<genexpr>V  s+      UU("d4ST9929999UUr   )axisgiUMu>gt=r   )r#   r   r   r   nuniquerI   rc   r
   OptimizeResultr4   squeezer(  	enumerater>   r"   r   r   )r   r)   r;  r+   res00res01res10res11r,   attrref_attrr   rd  rf  r8  s    `          @@@r   
test_attrszTestJacobian.test_attrs6  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   ]2ZVrA   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   ra  r<   r0   )r   r   r   r   r4  rU  )r   br   r)   s    r   r   z0TestJacobian.test_step_direction_size.<locals>.fb  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<   rK   r   )ra  r0   r   r3   :0yE>r!   )r   r   r   r2   )r_   r|   r   r   r#   rh   r4  rW  r   r&   r   isfinite)r   r)   r}   r   dirr   r3   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   r.  r9  r;  r]  r,   r@  rB  rE  rG  rN  rS  rU  rW  r0  r
   	rosen_derr  r$  r%  r_  r|  r  rS   r   r   r4  r4    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   r4  c                       e Zd ZeZej                            dg d          d             Zd Z	d Z
ej                            dd          d	             Zd
S )TestHessianr>   )rS   )rB   )rC   rB   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[  rA   r!   rK   c                 6    g | ]}t          j        |          S rS   )r
   
rosen_hess)rV   xis     r   rW   z,TestHessian.test_example.<locals>.<listcomp>  s#    BBBH/33BBBr   r   r  r2   )r_   r|   r   r#   rh   r   r
   r0  rf   r   Tmoveaxisr  r   ddf)r   r>   r)   r}   r^  r   r+   r,   s           r   test_examplezTestHessian.test_examplew  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[  rA   r!   r   g{Gz?r2   )r_   r|   r   r#   r   r   r
   r0  r  r   r  r'   min)r   r)   r}   r   r+   r,   maskr3   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   ra  c                      j         |  \  }}j        |j        dk    r!t          j        |j        dd                    ndz   _                            |          |dz  z  S )NrC   r<   rA   )broadcast_arraysrc   rM   mathprodr>   r   )r8  r   r   r9  r)   s      r   r9  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<   rS   )r   r9  r8  s    r   ry   z'TestHessian.test_nfev.<locals>.<lambda>      ""adAaD\"2"2 r   r<   )r   r   c                 6     d         | d         g          S rj  rS   )r   r9  r8  s    r   ry   z'TestHessian.test_nfev.<locals>.<lambda>  r  r   rC   )r<   r<   )r#   rc   r   )r   r)   r+   rv  ry  r9  r8  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  reasonc                     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   r.  r  r$  r%  r  r  r  r)  r  rS   r   r   r  r  s  s        G[W&8&8&8991 1 :91&? ? ?= = =0 [!!$)O " Q Q? ?Q Q? ? ?r   r  )!r  r  numpyr_   (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,  r4  r  rS   r   r   <module>r     s         6 6 6 6 6 6 6 6 6 ( ( ( ( ( ( ( ( ( X X X X X X X X X X G G G G G G G G G G * * * * * * * * * * = = = = = = = = = = > > > > > > :f. f. f. f. f. f. f. f.R) ) ) ) ) ) ) )< 8V( V( V( V( V(& V( V( V(r 7>? >? >? >? >?% >? >? >? >? >?r   