
    Yhφ                        d dl Z d dlmZ d dlZd dlmZmZmZ d dl	Z	d dl	m
Z d dlmZmZ d dlmZmZmZ d dlmZmZmZmZmZmZ d dlmZ d	 Zd
 Z G d d          Z G d d          Z G d d          Z  G d d          Z!d Z"d Z#dS )    N)product)assert_allcloseassert_equalassert_)raises)
MapWrapper_ScalarFunctionWrapper)	csr_array	csc_array	lil_array)_adjust_scheme_to_boundsapprox_derivativecheck_derivativegroup_columns_eps_for_method_compute_absolute_step)rosenc                     g dg dg dg dg dg dg dg} t           j        t          t          t          fD ]} ||           }t          j        d          }t          j        g d	          }t          ||          }t          ||           g d
}t          j        g d          }t          ||          }t          ||           t          |          }t          |          }t          ||           d S )N)   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r      )r   r      r   r   r   )r   r            r   )r   r   r   r   r   r   )	npasarrayr
   r   r   arangearrayr   r   )	structure	transformAordergroups_truegroupsgroups_1groups_2s           t/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/optimize/tests/test__numdiff.pytest_group_columnsr(      s*   I j)Y	B 
* 
*	Ii  	!h11122q%((V[)))"""h11122q%((V[)))) QHQH8$$$$$    c                     t          j        t           j                  j        } | dz  | dz  | dz  d}dD ]t}t	          t          t           j        t           j        |          ||                    t	          t          t           j        t           j        |          ||                    ut          j        t           j                  j        } | dz  | dz  | dz  d}dD ]}t	          t          t           j        t           j        |          ||                    t	          t          t           j        t           j        |          ||                    t	          t          t           j        t           j        |          ||                    d S )N      ?UUUUUU?2-pointz3-pointcs)r   finfofloat64epsr   r   
complex128float32)EPSrelative_stepmethods      r'   test_correct_fp_epsr8   .   s   
(2:


"C #S"Sz8% %M / 
 
BJ
F;;&!	# 	# 	# 	BM2=&AA&!	
 	
 	
 	
 (2:


"C #S"Sz8% %M / 
 
BJ
F;;&!	
 	
 	
 	BJ
F;;&!	
 	
 	
 	BJ
F;;&!	
 	
 	
 	

 
r)   c                        e Zd Zd Zd Zd ZdS )TestAdjustSchemeToBoundsc                 j   t          j        d          }t          j        dd          }t          j        |          }t          j        |          }|                    t           j                    |                    t           j                   t          ||dd||          \  }}t          ||           t          t          j	        |                     t          ||dd||          \  }}t          ||           t          t          j	        |                     t          ||dd||          \  }}t          ||           t          t          j	        |                      t          ||dd||          \  }}t          ||           t          t          j	        |                      d S )Nr   {Gz?r   1-sidedr   2-sided)
r   zerosfull
empty_likefillinfr   r   r   all)selfx0h	inf_lower	inf_upper
h_adjusted	one_sideds          r'   test_no_boundsz'TestAdjustSchemeToBounds.test_no_boundsS   s   Xa[[GAtM"%%	M"%%	wrv 81iI!7 !7
I
A&&&y!!""" 81iI!7 !7
I
A&&&y!!""" 81iI!7 !7
I
A&&&	z""### 81iI!7 !7
I
A&&&	z""#####r)   c                    t          j        g d          }t          j        d           }t          j        d          }t          j        g d          dz  }t          ||dd||          \  }}t	          ||           t          ||dd||          \  }}t	          |t          j        g d          dz             t          ||dd	||          \  }}t	          |t          j        |                     t          t          j        |                      t          ||dd	||          \  }}t	          |t          j        g d          dz             t          |t          j        g d
                     d S )N)        g333333?g333333r   )r   r   皙?r   r=   r   )r   rO   r   r>   )FTT)	r   r   onesr   r   absr   rD   r   )rE   rF   lbubrG   rJ   _rK   s           r'   test_with_boundz(TestAdjustSchemeToBounds.test_with_boundo   ss   X((())gajj[WQZZHZZZ  4'0Q9b"MM
A
A&&&0Q9b"MM
A
BHZZZ$8$84$?@@@ 81iR!) !)
I
BF1II...	z""### 81iR!) !)
I
BHZZZ$8$84$?@@@Y)<)<)< = =>>>>>r)   c                    t          j        ddg          }t          j        ddg          }t          j        ddg          }t          j        ddg          }t          ||dd||          \  }}t          |t          j        ddg                     t          ||d	d||          \  }}t          |t          j        d
dg                     t          ||dd||          \  }}t          |t          j        ddg                     t	          |t          j        ddg                     t          ||d	d||          \  }}t          |t          j        ddg                     t	          |t          j        ddg                     d S )NgQg?rN   gQ?皙r   r=   gQr   g?r>   FTgQ?gQ)r   r   r   r   r   )rE   rS   rT   rF   rG   rJ   rU   rK   s           r'   test_tight_boundsz*TestAdjustSchemeToBounds.test_tight_bounds   s   Xuen%%XtTl##XsDk""HdD\""0Q9b"MM
A
BHdE]$;$;<<<0Q9b"MM
A
BHeU^$<$<=== 81iR!) !)
I
BHdE]$;$;<<<Y% 7 7888 81iR!) !)
I
BHeV_$=$=>>>Y% 7 788888r)   N)__name__
__module____qualname__rL   rV   rY    r)   r'   r:   r:   R   sA        $ $ $8? ? ?,9 9 9 9 9r)   r:   c                   *   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd)dZd*dZd Zd Zd Zd Zd Zd Zd Zd Zej                            d          d             Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d(S )+TestApproxDerivativesDensec                 *    t          j        |          S Nr   sinhrE   xs     r'   fun_scalar_scalarz,TestApproxDerivativesDense.fun_scalar_scalar       wqzzr)   c                 *    t          j        |          S ra   r   coshrd   s     r'   jac_scalar_scalarz,TestApproxDerivativesDense.jac_scalar_scalar   rg   r)   c                     t          j        |d         dz  t          j        |d                   t          j        |d                   g          S Nr   r   r   r   tanexprd   s     r'   fun_scalar_vectorz,TestApproxDerivativesDense.fun_scalar_vector   9    x1q"&1,,qt=>>>r)   c                     t          j        d|d         z  t          j        |d                   dz  t          j        |d                   g                              dd          S Nr   r   rO   r   r   r   cosrp   reshaperd   s     r'   jac_scalar_vectorz,TestApproxDerivativesDense.jac_scalar_vector   S    x1Xrvad||r)26!A$<<8: ::A'"a..	Ir)   c                 ~    t          j        |d         |d         z            t          j        |d                   z  S Nr   r   r   sinlogrd   s     r'   fun_vector_scalarz,TestApproxDerivativesDense.fun_vector_scalar   /    vadQqTk""RVAaD\\11r)   c                 ~    t          j        |dz  t          j        |          t          j        |          g          S Nr   rn   rd   s     r'   wrong_dimensions_funz/TestApproxDerivativesDense.wrong_dimensions_fun   s-    xArvayy"&))4555r)   c           	         t          j        |d         t          j        |d         |d         z            z  t          j        |d                   z  t          j        |d         |d         z            |d         z  z   |d         t          j        |d         |d         z            z  t          j        |d                   z  g          S Nr   r   r   r   rw   r   r~   rd   s     r'   jac_vector_scalarz,TestApproxDerivativesDense.jac_vector_scalar       xaD26!A$1+&&&!5F1Q4!A$;!A$&'aD26!A$1+&&&!5
   	r)   c                     t          j        |d         t          j        |d                   z  |d         t          j        |d                   z  |d         dz  |d         dz  z  g          S Nr   r   r         ࿩r   r   r~   rw   rd   s     r'   fun_vector_vectorz,TestApproxDerivativesDense.fun_vector_vector   c    xaD26!A$<<aD26!A$<<aDAI!$
   	r)   c                     |dk    sJ t          j        |d         t          j        |d                   z  |d         t          j        |d                   z  |d         dz  |d         dz  z  g          S )=Used to test passing custom arguments with check_derivative()*   r   r   r   r   r   rE   re   args      r'   fun_vector_vector_with_argz5TestApproxDerivativesDense.fun_vector_vector_with_arg   sp    byyyyxaD26!A$<<aD26!A$<<aDAI!$
   	r)   c                    t          j        t          j        |d                   |d         t          j        |d                   z  g|d          t          j        |d                   z  t          j        |d                   gd|d         dz  z  |d         dz  z  d|d         dz  z  |d         dz  z  gg          S Nr   r   r   r   r         r   rd   s     r'   jac_vector_vectorz,TestApproxDerivativesDense.jac_vector_vector       xVAaD\\1Q4"&1,,./dURVAaD\\!26!A$<<01]QqTT\)4!A$!)+;addl+JK
   	r)   c                    |dk    sJ t          j        t          j        |d                   |d         t          j        |d                   z  g|d          t          j        |d                   z  t          j        |d                   gd|d         dz  z  |d         dz  z  d|d         dz  z  |d         dz  z  gg          S )r   r   r   r   r   r   r   r   r   r   s      r'   jac_vector_vector_with_argz5TestApproxDerivativesDense.jac_vector_vector_with_arg   s    byyyyxVAaD\\1Q4"&1,,./dURVAaD\\!26!A$<<01]QqTT\)4!A$!)+;addl+JK
   	r)         ?c                     t          j        t          j        ||d         z            t          j        ||d         z            g          S r|   r   r   rp   rE   re   c0c1s       r'   fun_parametrizedz+TestApproxDerivativesDense.fun_parametrized   s;    xQqT	**BF2!9,=,=>???r)   rP   c           
          t          j        |t          j        ||d         z            z  dgd|t          j        ||d         z            z  gg          S r|   r   r   s       r'   jac_parametrizedz+TestApproxDerivativesDense.jac_parametrized   sY    x"&ad###Q'RVB1I&&&'
   	r)   c                 N    t          j        |          dk    r|nt           j        S )N:0yE>r   rR   nanrd   s     r'   fun_with_nanz'TestApproxDerivativesDense.fun_with_nan   s     F1II%%qq261r)   c                 N    t          j        |          dk    rdnt           j        S )Nr   r   r   rd   s     r'   jac_with_nanz'TestApproxDerivativesDense.jac_with_nan   s     fQii4''ssRV3r)   c                     t          j        |d         |d         z  t          j        |d         |d         z            g          S r|   )r   r   rw   rd   s     r'   fun_zero_jacobianz,TestApproxDerivativesDense.fun_zero_jacobian   s9    x1!bfQqTAaD[&9&9:;;;r)   c           
          t          j        |d         |d         g|d          t          j        |d         |d         z            z  |d          t          j        |d         |d         z            z  gg          S r   )r   r   r~   rd   s     r'   jac_zero_jacobianz,TestApproxDerivativesDense.jac_zero_jacobian   st    xqT1Q4LdURVAaD1Q4K(((1Q4%"&1!2E2E*EF
   	r)   c                 v    t          j        |                                          }t          j        |          S ra   )r   r   itemmathrp   )rE   re   xps      r'   jac_non_numpyz(TestApproxDerivativesDense.jac_non_numpy   s+     Z]]!!x||r)   c                 &   d}t          | j        |d          }t          | j        |          }t          | j        |d          }|                     |          }t          ||d           t          ||d           t          ||d           d S )	Nr   r.   r7   r/   ư>rtol&.>-q=r   rf   rk   r   rE   rF   
jac_diff_2
jac_diff_3
jac_diff_4jac_trues         r'   test_scalar_scalarz-TestApproxDerivativesDense.test_scalar_scalar   s    &t'=r.79 9 9
&t'=rBB
&t'=r.24 4 4
))"--
H48888
H48888
H5999999r)   c                 .   d}t          | j        |dd          }t          | j        |d          }t          | j        |dd          }|                     |          }t          ||d           t          ||d	           t          ||d
           d S )Nr   r.   "\O>r7   abs_step)r   r/   r   r   r   r   r   r   s         r'   test_scalar_scalar_abs_stepz6TestApproxDerivativesDense.test_scalar_scalar_abs_step  s    &t'=r.7'K K K
&t'=r079 9 9
&t'=r.2WF F F
))"--
H48888
H48888
H5999999r)   c                    d}t          d          5 }t          | j        |d|          }d d d            n# 1 swxY w Y   t          | j        |t                    }t          | j        |dd           }|                     t          j        |                    }t          ||d           t          ||d	           t          ||d
           d S )Nr+   r   r.   r7   workers)r   r/   r   r   r   r   )r   r   rq   mapry   r   
atleast_1dr   )rE   rF   mapperr   r   r   r   s          r'   test_scalar_vectorz-TestApproxDerivativesDense.test_scalar_vector  s6   ]] 	Mf*4+A22;VM M MJ	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 't'=r3OOO
&t'=r.2DB B B
))"-*;*;<<
H48888
H48888
H5999999s   7;;g      @c                 r   g d}t          d          5 }t          t          |d|d          \  }}t          t          ||d          \  }}d d d            n# 1 swxY w Y   t          t          |ddd          \  }}t          t                    }	t          |	|dd          \  }
}t	          |d	         |	j                   d
|	_        t          |	|d          \  }}t	          |d	         |	j                   d
|	_        t          |	|dd          \  }}t	          |d	         |	j                   t	          |d	         |d	                    t	          |d	         |d	                    t	          |d	         |d	                    t	          ||
           t	          ||           t	          ||           d S )N)r+   g      ?       @r   r.   T)r7   r   full_output)r   r   r/   )r7   r   nfevr   )r   )r   r   r   r	   r   r   )rE   rF   r   md2mdct2md3mdct3md4mdct4sfrd2dct2d3dct3d4dct4s                   r'   !test_workers_evaluations_and_nfevz<TestApproxDerivativesDense.test_workers_evaluations_and_nfev  s    __]] 	Mf*5"2;V7;= = =JC +5"39tM M MJC		M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 'ub.2A379 9 9
U %U++$S"YDQQQDT&\38,,,$S"$???DT&\38,,,$S"TtLLLDT&\38,,,U6]DL111U6]DL111U6]DL111S"S"S"s   8AAAc                 N   t          j        ddg          }t          | j        |d          }t          | j        |          }t          | j        |d          }|                     |          }t          ||d           t          ||d           t          ||d	           d S )
N      Y@r   r.   r   r/   r   r   Hz>r   )r   r   r   r   r   r   r   s         r'   test_vector_scalarz-TestApproxDerivativesDense.test_vector_scalar?  s    Xudm$$&t'=r.79 9 9
&t'=rBB
&t'=r.24 4 4
))"--
H48888
H48888
H5999999r)   c                 l   t          j        ddg          }t          | j        |dd          }t          | j        |dt           j                  }t          | j        |dd          }|                     |          }t          ||d	           t          ||d
	           t          ||d	           d S )Nr   r   r.   r   r   )r   rel_stepr/   r   r   A:)>r   )r   r   r   r   rC   r   r   r   s         r'   test_vector_scalar_abs_stepz6TestApproxDerivativesDense.test_vector_scalar_abs_stepK  s    Xudm$$&t'=r.7'K K K
&t'=r07"&J J J
&t'=r.2WF F F
))"--
H48888
H48888
H5999999r)   c                    t          j        ddg          }t          | j        |d          }t          | j        |          }t	          d          5 }t          | j        |d|          }d d d            n# 1 swxY w Y   |                     |          }t          ||d	           t          ||d
	           t          ||d	           d S )N      Y皙?r.   r   r   r/   r   h㈵>r   r   r   )r   r   r   r   r   r   r   )rE   rF   r   r   r   r   r   s          r'   test_vector_vectorz-TestApproxDerivativesDense.test_vector_vectorY  s0   Xvsm$$&t'=r.79 9 9
&t'=rBB
]] 	Hf*4+A226H H HJ	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H ))"--
H48888
H48888
H5999999s   A77A;>A;c                     d}t          t          t          | j        |           |                     t	          j        |                    }t          t          t          | j        ||           d S )Nr   )f0)assert_raisesRuntimeErrorr   r   r   r   
ValueError)rE   rF   r   s      r'   test_wrong_dimensionsz0TestApproxDerivativesDense.test_wrong_dimensionsf  ss    l$5/	5 	5 	5&&r}R'8'899j"3/	< 	< 	< 	< 	< 	<r)   c                    t          j        ddg          }t          | j        |dd          }t          | j        |d          }|                     |          }t          ||d           t          ||d           d S )	NrX   rP   r.   g-C6?)r7   r   )r   r<   r   )r   r   r   r   r   r   )rE   rF   r   r   r   s        r'   test_custom_rel_stepz/TestApproxDerivativesDense.test_custom_rel_stepn  s    XtSk""&t'=r.7$H H H
&t'=r046 6 6
))"--
H48888
H4888888r)   c                    t          j        ddg          }d}d}d}d}|                     |||          }t          j        ddg          }|                     |||          }t	          | j        |d|||ft          |          ||f	          }	t	          | j        ||||ft          |          ||f
          }
t          |	|d           t          |
|d           d S )Nr         rN   r   )r   gưr   r.   )r7   r   r   argskwargsbounds)r   r   r   r   r   r   r   r   )r   r   r   r   r   dictr   )rE   rF   r   r   rS   rT   r   r   r   r   r   s              r'   test_optionsz'TestApproxDerivativesDense.test_optionsx  s   XsCj!!""2rb"118UDM**((R44&!2i(dbkkk2r(D D D
 '!2dbkkk2r(D D D
 	
H48888
H4888888r)   c                 |   t          j        d           }t          j        d          }t          j        ddg          }t          t          t
          | j        |||f           t          j        ddg          }t          | j        |d||f          }|                     |          }t          ||d	
           d S )Nr   g       r   r   r   r   r.   r7   r   r   r   )	r   rQ   r   r   r   r   r   r   r   )rE   rS   rT   rF   jac_diffr   s         r'   test_with_bounds_2_pointz3TestApproxDerivativesDense.test_with_bounds_2_point  s    gajj[WQZZXtSk""j"3,b"b	C 	C 	C 	C XtSk""$T%;R,5r2hH H H))"--(666666r)   c                 .   t          j        ddg          }t          j        ddg          }t          j        ddg          }|                     |          }t          | j        |          }t          ||d           t          | j        ||t           j        f          }t          ||d           t          | j        |t           j         |f          }t          ||d           t          | j        |||f          }t          ||d           d S )Nr   r   r   r   r   )r   r   r   r   r   r   rC   )rE   rS   rT   rF   r   r  s         r'   test_with_bounds_3_pointz3TestApproxDerivativesDense.test_with_bounds_3_point  s&   XsCj!!XsCj!!XsCj!!))"--$T%;R@@(6666$T%;R-/L: : :(6666$T%;R.0fWbM; ; ;(6666$T%;R-/H6 6 6(666666r)   c                    t          j        ddg          }|dz
  }|dz   }|                     |          }t          | j        |d||f          }t          ||d           t          | j        |dd||f          }t          ||d           t          | j        |||f	          }t          ||d           t          | j        |d||f
          }t          ||d           d S )Ng      $@r   g&.!>r.   r   r   r   r7   r   r   r   r   r   )r   r   r   r   r   r   )rE   rF   rS   rT   r   r  s         r'   rY   z,TestApproxDerivativesDense.test_tight_bounds  s-   XtTl##$Y$Y))"--$"By"bK K K(6666$"By2r(, , , 	(6666$"BBx9 9 9(6666$"Br2hH H H(666666r)   c                    d}d}d}|                      |          }t          | j        |dd||f          }t          | j        |d||f          }t          ||d           t          ||d	           d}|                      |          }t          | j        |dd||f          }t          | j        |d||f          }t          ||d           t          ||d	           d S )
N:0yEr   rN   r.   r   r  r  r   r   )r   r   r   r   )rE   rS   rT   rF   r   r   r   s          r'   test_bound_switchesz.TestApproxDerivativesDense.test_bound_switches  s6   $$R((&r)d8  
 'rD"bC C C

H48888
H48888$$R((&r)d8  
 'rD"bC C C

H48888
H4888888r)   c                 .   d}|                      |          }t          | j         |d          }t          | j         |          }t          ||d           t          ||d           t          t          t          | j         |fi t          d           d S )Nr   r.   r   r   r   r   r/   )r   r   r   r   	TypeErrorr   )rE   rF   r   r   r   s        r'   test_non_numpyz)TestApproxDerivativesDense.test_non_numpy  s    %%b))&t'92.79 9 9
&t'92>>

H48888
H48888 	i!2D4F 	+ 	+D)))	+ 	+ 	+ 	+ 	+r)   c                 j   t           j                            d           d fdt          j        dddt           j                  t           j                            d                              t           j                  t          j        ddg          }t          |df	          }t          |                    t           j                  df	          } |          j	        t           j        k    sJ t          ||d
           fd}t          ||                    t           j                  d          }t          ||d
           d }d }d }d }t           j        t           j        t           j        fD ]}	t          j        |	          j        }
t          j        d                              |	          }t          d | ||          d          } ||||||
          }t          ||d|           ||          z
  t                    |k     sJ d S )Nr   c                 *    | d         | d         |z  z   S r|   r]   )pre   s     r'   funcz0TestApproxDerivativesDense.test_fp.<locals>.func  s    Q4!A$(?"r)   c                 "     | |          |z
  S ra   r]   )r  re   yr  s      r'   errz/TestApproxDerivativesDense.test_fp.<locals>.err  s    41::>!r)   r   d   dtyper   r.   )r7   r   gMbP?)atolc                     | j         t          j        k    sJ  |                               t          j                  S ra   )r  r   r4   astype)r  r  re   r  s    r'   err_fp32z4TestApproxDerivativesDense.test_fp.<locals>.err_fp32  s:    7bj((((3q!Q<<&&rz222r)   r   c                 *    t          j        |           S ra   r   r~   re   s    r'   fz-TestApproxDerivativesDense.test_fp.<locals>.f      6!99r)   c                 *    t          j        |           S ra   )r   rw   r  s    r'   gz-TestApproxDerivativesDense.test_fp.<locals>.g	  r   r)   c                 ,    t          j        |            S ra   r  r  s    r'   hessz0TestApproxDerivativesDense.test_fp.<locals>.hess  s    F1II:r)   c           
      H   | dz  t          t          j         ||                    t          j         ||| z                                 z  }|| z  t          t          j         ||                    t          j         ||| z                                 z  }||z   S r   )maxr   rR   )rG   rF   r  r$  r5   t0t1s          r'   	calc_atolz5TestApproxDerivativesDense.test_fp.<locals>.calc_atol  s    QRVDDHH--rvdd26ll/C/CDDDB q3rvaaee}}bfQQrAvYY.?.?@@@B7Nr)   r   r   )r   randomseedlinspacer1   r  r   r   r4   r  r   float16r0   r2   r   rR   )rE   p0jac_fp64jac_fpr  r  r"  r$  r)  r  r5   rF   rG   r  r  r  re   r  s                 @@@@r'   test_fpz"TestApproxDerivativesDense.test_fp  s    		q	# 	# 	#	" 	" 	" 	" 	" K1c444IS!!((44XtTl##$S"YaVLLL #3		"*(=(=*31a&B B Bs2q!}}"bj0000t4444	3 	3 	3 	3 	3 	3 	3 #8RYYrz-B-B*35 5 5t4444	 	 		 	 		 	 		 	 	 j"*bj9 	# 	#E(5//%C#%%e,,B&tR2	BBA9QAtS11D#Ar)-.0 0 023!B%%8Cs88d?????	# 	#r)   c                    t          j        ddg          }t          | j        | j        |          }t          |dk                t          | j        | j        |          }t          |dk                t          j        ddg          }t          | j        | j        |          }t          |dk               t          | j        | j        |          }t          |dk               d S )N      $
   r   r   rN   r   )r   r   r   r   r   r   r   r   rE   rF   accuracys      r'   test_check_derivativez0TestApproxDerivativesDense.test_check_derivative   s    Xubk""#D$:$($:B@ @4   #D$:$($:B@ @4   XsCj!!#D$:$($:B@ @A#D$:$($:B@ @Ar)   c                     t          j        ddg          }t          | j        | j        |ddi          }t          |dk                d S )Nr3  r4  r   r   )r   r   )r   r   r   r   r   r   r5  s      r'   !test_check_derivative_with_kwargsz<TestApproxDerivativesDense.test_check_derivative_with_kwargs1  sX    Xubk""#D$C$($C$&,12;8 8 8 	4     r)   N)r   )rP   )*rZ   r[   r\   rf   rk   rq   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   pytestmark	fail_slowr   r   r   r   r   r   r   r  r  rY   r
  r  r1  r7  r9  r]   r)   r'   r_   r_      s`           ? ? ?I I I2 2 26 6 6          @ @ @ @   2 2 24 4 4< < <    
: 
: 
:: : :: : : [3      D
: 
: 
:: : :: : :< < <9 9 99 9 9$7 7 77 7 7,7 7 7(9 9 9.+ + +8# 8# 8#t  "! ! ! ! !r)   r_   c                   ~    e Zd Zd Zd Zd Zd Zej        	                    d          d             Z
d Zd Zd	 Zd
S )TestApproxDerivativeSparsec                    t           j                            d           d| _        ddt          j        | j                  z   z  | _        ddt          j        | j                  z   z  | _        t          j        | j                  | _        d| j        d d d         z  | j        d d d<   d| j        dd d         z  | j        dd d<   | 	                    | j                  | _
        d S )Nr   2   rX   r   rP   gP?r   )r   r*  r+  nr   rS   rT   emptyrF   jacJ_true)rE   s    r'   setup_methodz'TestApproxDerivativeSparse.setup_method<  s    
	q!bi///0RYtv.../(46"" DGCCaCL0!!TWQTT]21hhtw''r)   c                     |dd          dz  |d d         dz  z
  }t          j        dd|z  f          t          j        d|z  df          z   S )Nr   r   rO   r   r   )r   hstack)rE   re   es      r'   funzTestApproxDerivativeSparse.funG  sS    abbE1Hq"vqy y!QU$$ry!a%'<'<<<r)   c                    |j         }t          j        ||f          }d|d         z  |d<   d|d         dz  z  |d<   t          d|dz
            D ]P}d||dz
           z  |||dz
  f<   d	||         dz  z  d
||         z  z
  |||f<   d||dz            dz  z  |||dz   f<   Qd	|d         dz  z  |d<   d|d         z  |d<   |S )Nr   r   r   r   r   r   r   r   i	   r   rO   rO   rO   ru   rO   ru   )sizer   r?   range)rE   re   rA  Jis        r'   rC  zTestApproxDerivativeSparse.jacK  s    FHaVqt)$adAg+$q!a% 	( 	(Aq1v+AaQhK!A$'kA!H,AadGa!fai-AaQhKK"qL&	2J&	r)   c                     t          j        ||ft                    }d|d<   d|d<   t          d|dz
            D ]}d|||dz
  |dz   f<   d|d<   d|d<   |S )Nr  r   rL  rM  r   rO  rP  )r   r?   intrR  )rE   rA  r!   rT  s       r'   r   z$TestApproxDerivativeSparse.structureY  s{    HaV3'''$$q!a% 	# 	#A!"AaQAo&	&	r)   r   c           
         |                      | j                  }t          j        | j                  }t	          ||          }t          j                            |           t	          ||          }t          d          5 }t          g d||gt          j	         | j
        gt          j	        | j        gt          |g          D ]\  }}}}	}
t          | j        | j        |||	f||f|
          }t!          t#          |t$                               t'          |                                | j        d           t          j        | j        d          }|d d dxx         dz  cc<   t          | j        | j        ||||f|
          }t'          |                                | j        d	           	 d d d            d S # 1 swxY w Y   d S )
Nr   r-   )r7   r   sparsityr   r   r   r   rO   )r7   r   rX  r   r   )r   rA  r   r   r   r*  shuffler   r   rC   rS   rT   r   r   rI  rF   r   
isinstancer
   r   toarrayrD  	full_like)rE   r!   r"   r%   r&   r   r7   r$   lumfrS  r   s                r'   test_allz#TestApproxDerivativeSparse.test_alld  s   NN46""	$&!! E**
	%    E**]] 	Ef,30008X2FfWdg&(9C=-J -J E E(1b &dh./Vq&k.02 2 2 
1i00111		T[tDDDD<661#%dh/71f+.02 2 2  		T[tDDDDDE	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   D0G  GGc                     |                      | j                  }t          | j        | j        |          }t          |                                | j        d           d S )N)rX  r   r   )r   rA  r   rI  rF   r   r[  rD  )rE   r!   rS  s      r'   test_no_precomputed_groupsz5TestApproxDerivativeSparse.test_no_precomputed_groups}  sR    NN46""dh!<<<		T[t<<<<<<r)   c                 P   t          j        | j        | j        ft                    }t          j        | j                  }dD ]b}t          | j        | j        |          }t          | j        | j        ||f|          }t          ||	                                dd           cd S )Nr  r-   r   )rX  r7   gV瞯<gVs<)r   r  )
r   rQ   rA  rV  r   r   rI  rF   r   r[  )rE   r   r$   r7   J_denseJ_sparses         r'   test_equivalencez+TestApproxDerivativeSparse.test_equivalence  s    GTVTV,C888	46""2 	4 	4F'$'&IIIG($'Y,?P P PHGX%5%5%7%7!&U4 4 4 4 4		4 	4r)   c                      fd}t           j        | j         j         j        f          }t          |dk                t           j        | j         j         j        f          }t          |dk                d S )Nc                 H    t                              |                     S ra   )r
   rC  )re   rE   s    r'   rC  z=TestApproxDerivativeSparse.test_check_derivative.<locals>.jac  s    TXXa[[)))r)   r   r   )r   rI  rF   rS   rT   r   )rE   rC  r6  s   `  r'   r7  z0TestApproxDerivativeSparse.test_check_derivative  s    	* 	* 	* 	* 	* $DHc47,0GTW+=? ? ?4   #DHc47,0GTW+=? ? ?4     r)   N)rZ   r[   r\   rE  rI  rC  r   r:  r;  r<  r`  rb  rf  r7  r]   r)   r'   r>  r>  :  s        	( 	( 	(= = =  	 	 	 [1E E E0= = =
4 4 4
! 
! 
! 
! 
!r)   r>  c                   \    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )"TestApproxDerivativeLinearOperatorc                 *    t          j        |          S ra   rb   rd   s     r'   rf   z4TestApproxDerivativeLinearOperator.fun_scalar_scalar  rg   r)   c                 *    t          j        |          S ra   ri   rd   s     r'   rk   z4TestApproxDerivativeLinearOperator.jac_scalar_scalar  rg   r)   c                     t          j        |d         dz  t          j        |d                   t          j        |d                   g          S rm   rn   rd   s     r'   rq   z4TestApproxDerivativeLinearOperator.fun_scalar_vector  rr   r)   c                     t          j        d|d         z  t          j        |d                   dz  t          j        |d                   g                              dd          S rt   rv   rd   s     r'   ry   z4TestApproxDerivativeLinearOperator.jac_scalar_vector  rz   r)   c                 ~    t          j        |d         |d         z            t          j        |d                   z  S r|   r}   rd   s     r'   r   z4TestApproxDerivativeLinearOperator.fun_vector_scalar  r   r)   c           	         t          j        |d         t          j        |d         |d         z            z  t          j        |d                   z  t          j        |d         |d         z            |d         z  z   |d         t          j        |d         |d         z            z  t          j        |d                   z  g          S r   r   rd   s     r'   r   z4TestApproxDerivativeLinearOperator.jac_vector_scalar  r   r)   c                     t          j        |d         t          j        |d                   z  |d         t          j        |d                   z  |d         dz  |d         dz  z  g          S r   r   rd   s     r'   r   z4TestApproxDerivativeLinearOperator.fun_vector_vector  r   r)   c                    t          j        t          j        |d                   |d         t          j        |d                   z  g|d          t          j        |d                   z  t          j        |d                   gd|d         dz  z  |d         dz  z  d|d         dz  z  |d         dz  z  gg          S r   r   rd   s     r'   r   z4TestApproxDerivativeLinearOperator.jac_vector_vector  r   r)   c                 X   d}t          | j        |dd          }t          | j        |d          }t          | j        |dd          }|                     |          }t          j                            d           t          d          D ]}t          j                            d	dd
          }t          |	                    |          ||z  d           t          |	                    |          ||z  d           t          |	                    |          ||z  d           d S )Nr   r.   Tr7   as_linear_operatorru  r/   r   r4  r   rQ  r   r   h㈵>)
r   rf   rk   r   r*  r+  rR  uniformr   dotrE   rF   r   r   r   r   rT  r  s           r'   r   z5TestApproxDerivativeLinearOperator.test_scalar_scalar  se   &t'=r.7:>@ @ @
 't'=r:>@ @ @
&t'=r.2:>@ @ @
 ))"--
	qr 	' 	'A	!!#r!55AJNN1--xz!%' ' ' 'JNN1--xz!%' ' ' 'JNN1--xz!%' ' ' ' '	' 	'r)   c                    d}t          | j        |dd          }t          | j        |d          }t          | j        |dd          }|                     t          j        |                    }t          j                            d           t          d          D ]}t          j                            d	dd
          }t          |
                    |          |
                    |          d           t          |
                    |          |
                    |          d           t          |
                    |          |
                    |          d           d S )Nr+   r.   Trt  rv  r/   r   r4  rw  rx  ry  r   r   rz  )r   rq   ry   r   r   r*  r+  rR  r{  r   r|  r}  s           r'   r   z5TestApproxDerivativeLinearOperator.test_scalar_vector  s   &t'=r.7:>@ @ @
 't'=r:>@ @ @
&t'=r.2:>@ @ @
 ))"-*;*;<<
	qr 	' 	'A	!!#r!55AJNN1--x||A!%' ' ' 'JNN1--x||A!%' ' ' 'JNN1--x||A!%' ' ' ' '	' 	'r)   c           	      Z   t          j        ddg          }t          | j        |dd          }t          | j        |d          }t          | j        |dd          }|                     |          }t           j                            d           t          d	          D ]}t           j                            d
d	|j	                  }t          |                    |          t          j        |                    |                    d           t          |                    |          t          j        |                    |                    d           t          |                    |          t          j        |                    |                    d           
d S )Nr   r   r.   Trt  rv  r/   r   r4  rw  ry  r   r   rz  r   )r   r   r   r   r   r*  r+  rR  r{  shaper   r|  r   r}  s           r'   r   z5TestApproxDerivativeLinearOperator.test_vector_scalar  s   Xudm$$&t'=r.7:>@ @ @
 't'=r:>@ @ @
&t'=r.2:>@ @ @
 ))"--
	qr 	' 	'A	!!#r!99AJNN1--r}X\\!__/M/M!%' ' ' 'JNN1--r}X\\!__/M/M!%' ' ' 'JNN1--r}X\\!__/M/M!%' ' ' ' '	' 	'r)   c                    t          j        ddg          }t          | j        |dd          }t          | j        |d          }t          | j        |dd          }|                     |          }t           j                            d           t          d	          D ]}t           j                            d
d	|j	                  }t          |                    |          |                    |          d           t          |                    |          |                    |          d           t          |                    |          |                    |          d           d S )Nr   r   r.   Trt  rv  r/   r   r4  rw  ry  r   r   r   r   )r   r   r   r   r   r*  r+  rR  r{  r  r   r|  r}  s           r'   r   z5TestApproxDerivativeLinearOperator.test_vector_vector  sn   Xvsm$$&t'=r.7:>@ @ @
 't'=r:>@ @ @
&t'=r.2:>@ @ @
 ))"--
	qr 	K 	KA	!!#r!99AJNN1--x||ATJJJJJNN1--x||ATJJJJJNN1--x||ATJJJJJ		K 	Kr)   c           	          t          j        ddg          }t          t          t          | j        |ddt           j        f           d S )Nr   r   r.   r   r   )r   r   r   r   r   r   rC   )rE   rF   s     r'   test_exceptionz1TestApproxDerivativeLinearOperator.test_exception  sN    Xvsm$$j"3,b&26{	< 	< 	< 	< 	< 	<r)   N)rZ   r[   r\   rf   rk   rq   ry   r   r   r   r   r   r   r   r   r  r]   r)   r'   rj  rj    s            ? ? ?I I I2 2 2      ' ' '*' ' '*' ' '*K K K$< < < < <r)   rj  c                  p   d } t          | ddgdd          }t          |ddg           t          | ddgdd          }t          |ddg           t          | ddgdddg          }t          |ddg           t          | ddgdddg          }t          |ddg           t          | ddgdddg          }t          |ddg           t          | ddgddt          j         df	          }t          |ddg           t          | ddgdddt          j        f	          }t          |ddg           d S )
Nc                 z    t          j        | d         dz              t          j        | d         dz             z   S r|   )r   rR   r  s    r'   r  z"test_absolute_step_sign.<locals>.f!  s4    qtax   26!A$(#3#333r)   rO   r.   r   r   r   r   r	  )r7   r   r   )r   r   r   rC   )r  grads     r'   test_absolute_step_signr    s   4 4 4 QRTJJJDD4+&&& QRUKKKDD3+&&& 	B8It  D D4+&&& 	B8Iu  D D4,'''	B8I  D D3*%%% 	B8I}  D D3+&&&	B8Ir26l  D D4+&&&&&r)   c                     g d} t          j        g d          }t          j        t           j                  j        }|dz  |dz  |dz  d}t          j        d          }| D ]}||         }t          j        ||dz  |dz  |t          j        |d                   z  g          }t          d |||          }t          ||           | dk                        t                    dz  d	z
  }	t          d | ||          }t          ||	|z             t          j        g d
          }t          j        |d         |d         z  |d         |d         dz  |d         t          j        |d                   z  g          }t          |||d          }t          ||           | dk                        t                    dz  d	z
  }	t          || |d          }t          ||	|z             d S )Nr-   )r   r   r   g     j@r+   r,   r   r   r   r   r   )rP   r   r4  r  r.   )
r   r   r0   r1   r2   rR   r   r   r  float)
methodsrF   r5   r6   r   r7   r   correct_stepr   sign_x0s
             r'   test__compute_absolute_stepr  M  s   ***G	###	$	$B
(2:


"C8:3h M
 
#B : : (x!)B!)B!)BF2a5MM!9!; < <
 *$B??,///3!8##E**Q.2)$R@@'L"89999 x)))**H8Xa[2a50*95%a[2-%a[26"Q%==8: ; ;L
 &hB	BBHHl+++sax&&*Q.G%hRCCHHg455555r)   )$r   	itertoolsr   numpyr   numpy.testingr   r   r   r:  r   r   scipy._lib._utilr   r	   scipy.sparser
   r   r   scipy.optimize._numdiffr   r   r   r   r   r   scipy.optimizer   r(   r8   r:   r_   r>  rj  r  r  r]   r)   r'   <module>r     s              @ @ @ @ @ @ @ @ @ @  * * * * * * ? ? ? ? ? ? ? ? 8 8 8 8 8 8 8 8 8 8< < < < < < < < < < < < < < < < !          % % %8!
 !
 !
HG9 G9 G9 G9 G9 G9 G9 G9T[! [! [! [! [! [! [! [!|\! \! \! \! \! \! \! \!~|< |< |< |< |< |< |< |<~2' 2' 2'j(6 (6 (6 (6 (6r)   