
    Ug/L                         d dl Z d dlZd dlmZmZmZ d dlmc m	Z
 d dlmZmZ d dlmZmZmZ  G d d          Z G d d          ZdS )	    N)assert_array_lessassert_allcloseassert_equal)statsoptimize)_differentiate	_jacobian_EERRORINCREASEc            	       2   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ej                            dd          ej                            ddddgf          ej                            dej        ej        ej        f          d                                     Zd  Zd! Zej        j        ej                            dd" dfd# dff          d$                         Zd%S )&TestDifferentiatec                 N    t          j                                        |          S N)r   normcdf)selfxs     f/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/optimize/tests/test_differentiate.pyfzTestDifferentiate.f   s    z||"""    r   333333?皙?
   c                 H   t          | j        |          }t          j                                        |          }t
          j                            |j        |           t          t          |j        |z
            |j                   |j        j        |j        k    sJ d S r   )differentiater   r   r   pdfnptestingr   dfr   abserrorr   shape)r   r   resrefs       r   
test_basiczTestDifferentiate.test_basic   s     DFA&&jllq!!

""363/// 	#cfsl++SY777u{ci''''''r   casec                     |\  }} t          t          |          | }|                                dz   }t          |j        |          }|                    |          }t          |j        |d           d S )Ng?绽|=atol)getattrr   medianr   r   r   r   r   )r   r&   distnameparamsdistr   r#   r$   s           r   test_accuracyzTestDifferentiate.test_accuracy   sq    &'wuh''0KKMMCDHa((hhqkk%000000r   order      r"   )         )r6      r8   c                     |r)t          j        ddd                              |          nd}t          j        |          t           j         fd            } fdd_        d_        t          |	          } ||                                          }d
 |D             }t          |j
                                        |           t          |j
        j        |           d |D             }t          |j                                        |           t          |j        j        |           d |D             }	t          |j                                        |	d           t          |j        j        |           d |D             }
t          |j                                        |
           t          |j        j        |           t          j        |j        j        t           j                  sJ d |D             }t          |j                                        |           t          |j        j        |           t          j        |j        j        t           j                  sJ d |D             }t          |j                                        |           t          t          j        |j                  j                   t          |j        j        |j
        j                   t          j        |j        j        t           j                  sJ d |D             }t          |j                                        |           t          t          j        |j                  j                   t          |j        j        |j
        j                   t          j        |j        j        t           j                  sJ d S )Nr   r   r4   r   c                 2    t          j        |           S )Nr1   )r   r   )r   r1   r   s    r   _differentiate_singlezCTestDifferentiate.test_vectorization.<locals>._differentiate_single,   s     %8888r   c                     xj         dz  c_         xj        | j        k    s| j        dk    rdn| j        d         z  c_         j        | g|R i |S )Nr2   )nitfevalsizendimr"   r   )r   argskwargsr   nr   s      r   r   z/TestDifferentiate.test_vectorization.<locals>.f0   sb    EEQJEEGGQVq[[AFQJJqqQWR[HGG46!-d---f---r   r>   r   r;   c                     g | ]	}|j         
S  r   .0r$   s     r   
<listcomp>z8TestDifferentiate.test_vectorization.<locals>.<listcomp>:   s    '''3'''r   c                     g | ]	}|j         
S rG   )r   rI   s     r   rK   z8TestDifferentiate.test_vectorization.<locals>.<listcomp>>   s    )))S#&)))r   c                     g | ]	}|j         
S rG   )r!   rI   s     r   rK   z8TestDifferentiate.test_vectorization.<locals>.<listcomp>B   s    ///3SY///r   g-q=r)   c                     g | ]	}|j         
S rG   )successrI   s     r   rK   z8TestDifferentiate.test_vectorization.<locals>.<listcomp>F   s    333ss{333r   c                     g | ]	}|j         
S rG   )statusrI   s     r   rK   z8TestDifferentiate.test_vectorization.<locals>.<listcomp>K   s    ///3CJ///r   c                     g | ]	}|j         
S rG   )nfevrI   s     r   rK   z8TestDifferentiate.test_vectorization.<locals>.<listcomp>P   s    ---CH---r   c                     g | ]	}|j         
S rG   )r?   rI   s     r   rK   z8TestDifferentiate.test_vectorization.<locals>.<listcomp>V   s    +++s37+++r   )r   linspacereshaperA   	vectorizer?   r@   r   ravelr   r   r   r"   r   r!   rO   
issubdtypedtypebool_rQ   integerrS   max)r   r1   r"   r   r<   r#   refsref_xref_df	ref_errorref_successref_flagref_nfevref_nitr   rE   s   ``            @@r   test_vectorizationz$TestDifferentiate.test_vectorization$   sj   
 <AIBKtR((00777cGAJJ		9 	9 	9 	9 	9 
	9	. 	. 	. 	. 	. 	. 	. Aq...$$Q''--//''$'''u---SU[%((())D)))///SV\5)))//$///		))95AAAASY_e,,,33d333S[&&((+666S[&...}S[.99999//$///SZ%%''222SZ%u---}SZ-rz:::::-----SX^^%%x000RVCH%%qw///SX^SU[111}SX^RZ88888++d+++SW]]__g...RVCG__ae,,,SW]CEK000}SW]BJ7777777r   c                 t   t           j                            d          fdd_        t          j        dt           j                  f}t          dgdz  dd|	          }t          j        t          j	        t          t          j        t          j        g          }t          |j        |           d S )
N   ;O c                     xj         dz  c_         d fdd d gfdt          | |                                          D             }|S )Nr2   c                     | dz
  S )N      @rG   rH   s    r   <lambda>z9TestDifferentiate.test_flags.<locals>.f.<locals>.<lambda>b   s
    q3w r   c                 V    t          j        |                                           z  S r   )r   exprandomr   rngs    r   rl   z9TestDifferentiate.test_flags.<locals>.f.<locals>.<lambda>c   s    rvayy5 r   c                 *    t          j        |           S r   )r   rn   rH   s    r   rl   z9TestDifferentiate.test_flags.<locals>.f.<locals>.<lambda>d   s    rvayy r   c                 L    t          j        | t           j                  d         S )NrG   )r   	full_likenanrH   s    r   rl   z9TestDifferentiate.test_flags.<locals>.f.<locals>.<lambda>e   s    r|Arv66r: r   c                 8    g | ]\  }} |         |          S rG   rG   )rJ   r   jfuncss      r   rK   z;TestDifferentiate.test_flags.<locals>.f.<locals>.<listcomp>f   s)    ???41a858A;;???r   )r?   ziprX   )xsjsr#   rx   r   rq   s      @r   r   z'TestDifferentiate.test_flags.<locals>.f`   sk    EEQJEE&&5555((::<E @???3r288::+>+>???CJr   r   r7   rZ   r2   +=r8   )rtolr1   rC   )r   ro   default_rngr?   arangeint64r   arrayeim_ECONVERGEDr
   	_ECONVERR
_EVALUEERRr   rQ   )r   rC   r#   	ref_flagsr   rq   s       @@r   
test_flagszTestDifferentiate.test_flags\   s     i##$455	 	 	 	 	 	 	!28,,,.As1u5EEEHco-!m!n. / /	 	SZ+++++r   c                    t           j                            d          fd}t          |dddd          }t          j        t
          j        t          t
          j        t
          j	        g          }t          |j        |           d S )Nrh   c                     | dz
  t          j        |                                           z  t          j        |           t          j        | t           j                  d         gS )Nrk   rG   )r   rn   ro   rt   ru   rp   s    r   r   z6TestDifferentiate.test_flags_preserve_shape.<locals>.fv   sM    GF1IIcjjll*F1IILBF++B/1 1r   r2   r}   r8   T)r~   r1   preserve_shape)r   ro   r   r   r   r   r   r
   r   r   r   rQ   )r   r   r#   r   rq   s       @r   test_flags_preserve_shapez+TestDifferentiate.test_flags_preserve_shapes   s    i##$455	1 	1 	1 	1 	1 AquAdKKKHco-!m!n. / /	 	SZ+++++r   c           	      T   d }d}ddt          j        d|z            z  ddt          j        d|z            z  z   dt          j        d|z            z  |dz
  dz  z  dt          j        d|z            z  |dz
  z  z   g}t          ||d	          }t	          |j        |           d S )
Nc                     | t          j        d| z            | t          j        d| z            z   t          j        d| z            | dz
  dz  z  gS )Nr6   r      r2   r8   r   sinrH   s    r   r   z0TestDifferentiate.test_preserve_shape.<locals>.f   sF    rvac{{AbfRTllNBF2a4LL!A#4IJJr   r   r2   r6   r   r   r8   Tr   )r   cosr   r   r   r   )r   r   r   r$   r#   s        r   test_preserve_shapez%TestDifferentiate.test_preserve_shape   s    	K 	K 	K !BF1Q3KK-2bfRTll?!2"&A,,!ax'!BF2a4LL.!A#*>>@Aq666$$$$$r   c                    t          j                    }d}|j        }|                    |          }t	          ddd          }|                                }d|d<   t          ||fi |}t          t          |j	        |z
            d           d|d<   t          ||fi |}t          t          |j	        |z
            d           t          t          |j	        |z
            t          |j	        |z
                       |                                }d|d<   t          ||fi |}t          t          |j	        |z
            dt          j        |          z             d|d<   t          ||fi |}t          t          |j	        |z
            dt          j        |          z             t          t          |j	        |z
            t          |j	        |z
                       d S )	Nr2   r   r7   )r*   r~   r1   gMbP?r*   gư>r~   )r   r   r   r   dictcopyr   r   r    r   r   )	r   r/   r   r   r$   kwargs0rD   res1res2s	            r   test_convergencez"TestDifferentiate.test_convergence   s   z||HhhqkkAAQ///vQ,,V,,#dgm,,d333vQ,,V,,#dgm,,d333#dgm,,c$'C-.@.@AAAvQ,,V,,#dgm,,dRVC[[.@AAAvQ,,V,,#dgm,,dRVC[[.@AAA#dgm,,c$'C-.@.@AAAAAr   c                    t          j                    }d}|j        }|                    |          }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 )Nr2   g      ?)initial_stepmaxiterg?r8   )step_factorr   r   r7   r   )r1   r   step_direction)r   r   g+<r~   r>   r   )r   r   r   r   r   r    r   r   r   r   sqrt)	r   r/   r   r   r$   r   r   rD   r#   s	            r   test_step_parametersz&TestDifferentiate.test_step_parameters   sD   z||HhhqkkQQ???Qa@@@47S=!!C#$6$66666Qq!<<<Qr1===47S=!!C#$6$66666 Aq;;;AqNsNNvNNAqJqaJJ6JJU3333 Aq;;;AqJqaJJ6JJAq -q| - -%+- -U3333#% AqJqaJJ6JJAq -q| - -%+- -U333333r   c                 .   d }t          j        ddd          }t          j        |          }d\  ||dk     <   ||dk    <   t          |||          }t	          |j        t          j        |                     t          j        |j                  sJ d S )	Nc                 b    t          j        |           }t           j        || dk     | dk    z   <   |S )Nr   r8   )r   rn   ru   )r   ys     r   r   z0TestDifferentiate.test_step_direction.<locals>.f   s-    q		A#%6Aq1uQ Hr   r   r8   r   )r2   r>   r   gffffff?)r   )	r   rU   
zeros_liker   r   r   rn   allrO   )r   r   r   r   r#   s        r   test_step_directionz%TestDifferentiate.test_step_direction   s    	 	 	
 K1b!!q));@8q3wC!8Aq@@@q		***vck"""""""r   c                    d }d }t          j        g d                              ddd          }t          j        g d                              ddd          }t          j        ddg                              ddd          }t          ||||f	          }t          j         |||          |j        j                  }t          |j        |           d S )
Nc                     | |z  S r   rG   r   ps     r   r   z@TestDifferentiate.test_vectorized_step_direction_args.<locals>.f   s    6Mr   c                     || |dz
  z  z  S Nr2   rG   r   s     r   r   zATestDifferentiate.test_vectorized_step_direction_args.<locals>.df   s    qQU|##r   )r2   r8   r6   r7   r>   r2   r>   r   r2   r8   r6   )r   rC   )r   r   rV   r   broadcast_tor   r"   r   )r   r   r   r   hdirr   r#   r$   s           r   #test_vectorized_step_direction_argsz5TestDifferentiate.test_vectorized_step_direction_args   s    	 	 		$ 	$ 	$ H\\\""**2q!44x


##++Ar155HaV$$Q2..AqQDAAAobbAhh55$$$$$r   c                   	 d}t          j                    d	fd}d}t          ||	d          }t          j        |j                  rJ t          j        |j        |dz   	dz
  dz  z   k              sJ t          j        |j        	k              sJ 	fd	d
_	        d _
        t                      _        t          ||d          }|                                D ]~}|dk    rN||         t          j        k    sJ j
        |         t          j        k    sJ ||         t          j        k    sJ V||         j
        |         cxk    r||         k    sn J d S )Ng~,?r6   c                 2                         |           }|S r   )r   )r   r#   r/   s     r   r   z2TestDifferentiate.test_maxiter_callback.<locals>.f   s    ((1++CJr      V瞯<)r   r~   r2   r8   c                 
   xj         dz  c_         | _        t          | d          sJ | j        j        vsJ j                            | j                   | j        t          j        k    sJ j         k    rt          d S )Nr2   r   )
iterr#   hasattrr   dfsaddrQ   r   _EINPROGRESSStopIteration)r#   callbackr   s    r   r   z9TestDifferentiate.test_maxiter_callback.<locals>.callback   s    MMQMMHL3$$$$$6----LSV$$$:!11111}''## ('r   r>   )r   r~   rQ   )r   r   r   r   anyrO   r   rS   r?   r   r#   setr   keysr   r   r   
_ECALLBACK)
r   r   r   default_orderr#   r   keyr   r/   r   s
          @@@r   test_maxiter_callbackz'TestDifferentiate.test_maxiter_callback   s   z||	 	 	 	 	 Aq'>>>6#+&&&&&vch-!"3w{Ao"EEFFFFFvcg()))))	$ 	$ 	$ 	$ 	$ 	$ uuQH5AAA 88:: 	B 	BCh3x3=0000|C(C,<<<<<CyCN22222CyHL$5AAAASAAAAAAA	B 	Br   r   r   g?gffffff?rZ   c                    t          j        |          d         }fd}fd}t          ||d||          }|j        j        k    sJ |j        j        k    sJ |j        j        k    sJ t          j                  j        }t          |j        t          j
        |j                  t          j        |                     d S )Nr|   rG   c                 F    | j         k    sJ t          j        |           S r   )rZ   r   rn   )r   rZ   s    r   r   z'TestDifferentiate.test_dtype.<locals>.f  s$    7e####6!99r   c                 t    | j         j        k    sJ | j        j        k    sJ | j        j        k    sJ d S r   )r   rZ   r   r!   )r#   rZ   s    r   r   z.TestDifferentiate.test_dtype.<locals>.callback  sH    5;%''''6<5((((9?e++++++r   r7   )r1   r   r   r   )r   asarrayr   r   rZ   r   r!   finfoepsr   rn   r   )r   r   r   rZ   r   r   r#   r   s      `    r   
test_dtypezTestDifferentiate.test_dtype  s    
 Jq&&&r*	 	 	 	 		, 	, 	, 	, 	,
 Aq$,46 6 6u{e####v|u$$$$y%''''huoo!suBGCLLAAAAAAr   c                 R   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            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 dd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d dd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d dd            d d d            n# 1 swxY w Y   t          j        t          |          5  t          d dt	                                 d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d dd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          d 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            n# 1 swxY w Y   t          j        t          |          5  t          d 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            n# 1 swxY w Y   d$}t          j        t          |          5  t          d% dd&'           d d d            d S # 1 swxY w Y   d S )(Nz`func` must be callable.matchr2   z3Abscissae and function output must be real numbers.c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>1      A r   y            ?z6When `preserve_shape=False`, the shape of the array...c                 
    g dS )N)r2   r8   r6   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>5  s
    III r   z6Tolerances and step parameters must be non-negative...c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>9  r   r   r>   r)   c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>;  r   r   ekkir   c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>=  r   r   r   c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>?  r   r   r   %`maxiter` must be a positive integer.c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>C  r   r         ?r   c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>E  r   r   r   z"`order` must be a positive integerc                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>I  r   r   r;   c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>K  r   r   z'`preserve_shape` must be True or False.c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>O  r   r   herringr   z`callback` must be callable.c                     | S r   rG   rH   s    r   rl   z9TestDifferentiate.test_input_validation.<locals>.<lambda>S  r   r   	shrubbery)r   )pytestraises
ValueErrorr   object)r   messages     r   test_input_validationz'TestDifferentiate.test_input_validation(  s    -]:W555 	# 	#$"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# H]:W555 	. 	.++u---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. K]:W555 	9 	9--Bx888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 K]:W555 	3 	3++qr2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3]:W555 	7 	7++qv6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7]:W555 	= 	=++qt<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=]:W555 	@ 	@++qfhh????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ :]:W555 	7 	7++q#6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7]:W555 	5 	5++q!4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 7]:W555 	5 	5++q4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5]:W555 	3 	3++q2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 <]:W555 	D 	D++qCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 1]:W555 	@ 	@++q;????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   ;??#BBB)C		CC1DDD7EEE=FF!$F! G//G36G3H77H;>H;I==JJ%KK	K	+LLL3MMM;NN #N c           
      X   d }t          |dd          }|j        sJ t          |j        d           t	          d          D ]d}fd}d	z  |d
z
  z  z  }t          ||d
t          d
                    }t          |j        |d           t          |j        t          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                 ^    t          j        | j        t           j                  sJ | dz  dz
  S )Nc   r2   )r   rY   rZ   floatingrH   s    r   r   z/TestDifferentiate.test_special_cases.<locals>.fZ  s,    ="+666667Q;r      r(   r   gl)~IQr3   r   c                     d| z  z  S )Nr8   rG   )r   rE   s    r   r   z/TestDifferentiate.test_special_cases.<locals>.fk  s    Avr   r8   r2   )r   r1   r   r;   c                     || z  dz
  S r   rG   )r   cs     r   r   z/TestDifferentiate.test_special_cases.<locals>.fz  s    Q37Nr   r6   )rC   )r   rO   r   r   ranger]   r   r!   r   ru   r?   )r   r   r#   r   r$   rE   s        @r   test_special_casesz$TestDifferentiate.test_special_casesU  sm   
	 	 	 Aqu---{	*** q 	5 	5AA     A#a!A#h,C1as1ayyAAACCFCe4444BF+++1C1II666C;7a<<<<CFCe44444	 	 	 Aqq)))"""""r   c                     | dz
  dz  S )Nr2   r6   rG   rH   s    r   rl   zTestDifferentiate.<lambda>  s    AEa< r   c                 N    t          j        | dk    | dz
  dz  | dz
  dz            S )Nr2      r6   )r   whererH   s    r   rl   zTestDifferentiate.<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   r*   r   r)   )r   r   r   rO   r   r   )r   r&   r*   r#   s       r   test_saddle_gh18811z%TestDifferentiate.test_saddle_gh18811  sV     T***4HHHvck"""""------r   N) __name__
__module____qualname__r   r   markparametrizer   rU   r%   r   _distr_paramsdistcontr0   tuplerf   r   r   r   r   r   r   r   r   float16float32float64r   r   r   xfailr   rG   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48 48 KJ .-48l, , ,., , ,"	% 	% 	%B B B4 4  4  4D# # #% % %&B &B &BP [VZ00[S4$"566[Wrz2:rz&JKKB B LK 76 10B*+@ +@ +@Z)# )# )#V [[V		#	>	>B&  . .	  
. . .r   r   c            
          e Zd 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_        ej        Zde_        ej        e_        ej                            dg d          ej                            deee	eeeg          d                         Zd ZdS )TestJacobianc                 P    | \  }}|dz  |z  d|z  t          j        |          z   gS Nr8   r   r   zr   r   s      r   f1zTestJacobian.f1  s/    1Q
AEBF1II-..r   c                 x    | \  }}d|z  |z  |dz  gt          j        |d          t          j        |          ggS r  )r   rt   r   r  s      r   df1zTestJacobian.df1  s@    1QAF#bl1a&8&8"&))%DEEr   )r8   r8   c                 h    | \  }}|t          j        |          z  |t          j        |          z  gS r   r   r   r   r  rphis      r   f2zTestJacobian.f2  s.    3BF3KKRVC[[11r   c                     | \  }}t          j        |          | t          j        |          z  gt          j        |          |t          j        |          z  ggS r   r  r  s      r   df2zTestJacobian.df2  sP    3qb26#;;./a"&++o.0 	0r   c                     | \  }}}|t          j        |          z  t          j        |          z  |t          j        |          z  t          j        |          z  |t          j        |          z  gS r   )r   r   r   r  r  r  ths       r   f3zTestJacobian.f3  s]    
3BF3KK"&**,a"&++or

.JBF3KK! 	!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   r  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   )r6   r6   c                 b    | \  }}}|d|z  d|dz  z  d|z  z
  |t          j        |          z  gS Nr   r7   r8   r   r   x1x2x3s       r   f4zTestJacobian.f4  s=    
BAFAaK!b&0"rvbzz/BBr   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   r$  r%  r&  ones        r   df4zTestJacobian.df4  s    
Bl2a#gq3w'S!c'1s7+S!b&"s(+bfRjj!c'26"::68 	8r   r5   c                 f    | \  }}}d|z  d|dz  z  dt          j        ||z            z  z
  ||z  gS r"  r   r#  s       r   f5zTestJacobian.f5  s@    
BBB!Ga"&b//&9927CCr   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 r)  )r   r*  r   r+  s        r   df5zTestJacobian.df5  s    
Bl2S!c'1s7+Rb26"r'??2BGbfR"Woo4MNS"b!# 	#r   )r   r2   rA   )rG   )r3   )r8   r6   funcc                 $   t           j                            d          }|j        \  }}|                    |f|z             }t	          ||          j        }|                    |          }t           j                            ||d           d S )Nl   6H2)rA   r(   r)   )	r   ro   r   mnjacobianr   r$   r   r   )	r   rA   r2  rq   mrE   r   r#   r$   s	            r   test_exampleszTestJacobian.test_examples  s     i##L11w1JJQD4KJ((tQ"hhqkk

""3%"88888r   c                 2   d}t          j        t          |          5  t          t          j        dd           d d d            n# 1 swxY w Y   t	          j        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  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   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 S # 1 swxY w Y   d S )Nz"Argument `x` must be at least 1-D.r   r2   r>   r)   r6   z<Tolerances and step parameters must be non-negative scalars.r   r   r   z#`order` must be a positive integer.r;   r   r   )	r   r   r   r5  r   r   onesr   rosen)r   r   r   r2  s       r   test_ivzTestJacobian.test_iv  s   6]:W555 	) 	)RVQR((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)
 GAJJ~P]:W555 	' 	'T12&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	']:W555 	' 	'T12&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	']:W555 	/ 	/T12....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/]:W555 	. 	.T1"----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 8]:W555 	( 	(T1B''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( :]:W555 	* 	*T1b))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s}   AAAB..B25B2C33C7:C7D88D<?D<E==FF%GGG,HHHN)r   r   r   r  r  r4  r$   r  r  r  r   r'  r-  r/  r1  r   r:  	rosen_derr   r  r  r7  r;  rG   r   r   r  r    s       
/ / /F F F BEBF2 2 20 0 0
 BEBF! ! !
C C C BEBFC C C8 8 8 BEBFD D D# # # BEBFNEEH"EI[V%7%7%788[Vb"b"b%%@AA9 9 BA 989* * * * *r   r  )r   numpyr   numpy.testingr   r   r   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipyr   r   scipy.optimize._differentiater   r   r	   r5  r
   r   r  rG   r   r   <module>rD     s        J J J J J J J J J J 6 6 6 6 6 6 6 6 6 ! ! ! ! ! ! ! !S S S S S S S S S SA. A. A. A. A. A. A. A.Hq* q* q* q* q* q* q* q* q* q*r   