
    ^Mhg~                         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	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 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)
csr_matrix
csc_matrix
lil_matrix)_adjust_scheme_to_boundsapprox_derivativecheck_derivativegroup_columns_eps_for_method_compute_absolute_stepc                     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           b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/optimize/tests/test__numdiff.pytest_group_columnsr%      s*   I j*j*E 
* 
*	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_epsr5   +   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_boundsP   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   rL   r   r;   )FTT)	r   r   onesr   r   absr   rA   r   )rB   rC   lbubrD   rG   _rH   s           r$   test_with_boundz(TestAdjustSchemeToBounds.test_with_boundl   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?rK   gQ?皙r   r:   gQr   g?r;   FTgQ?gQ)r   r   r   r   r   )rB   rP   rQ   rC   rD   rG   rR   rH   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__rI   rS   rV    r&   r$   r7   r7   O   sA        $ $ $8? ? ?,9 9 9 9 9r&   r7   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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rB   xs     r$   fun_scalar_scalarz,TestApproxDerivativesDense.fun_scalar_scalar       wqzzr&   c                 *    t          j        |          S r^   r   coshra   s     r$   jac_scalar_scalarz,TestApproxDerivativesDense.jac_scalar_scalar   rd   r&   c                     t          j        |d         dz  t          j        |d                   t          j        |d                   g          S Nr   r   r   r   tanexpra   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   rL   r   r   r   cosrm   reshapera   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logra   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   rk   ra   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   rt   r|   r{   ra   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{   rt   ra   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   rB   rb   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   ra   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 ry   r   r   rm   rB   rb   c0c1s       r$   fun_parametrizedz+TestApproxDerivativesDense.fun_parametrized   s;    xQqT	**BF2!9,=,=>???r&   rM   c           
          t          j        |t          j        ||d         z            z  dgd|t          j        ||d         z            z  gg          S ry   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   rO   nanra   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   ra   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 ry   )r   r   rt   ra   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{   ra   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 r^   )r   r   itemmathrm   )rB   rb   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+   r4   r,   ư>rtol&.>-q=r   rc   rh   r   rB   rC   
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>r4   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                 J   d}t          | j        |d          }t          | j        |          }t          | j        |d          }|                     t          j        |                    }t          ||d           t          ||d           t          ||d           d S )	Nr(   r+   r   r,   r   r   r   r   )r   rn   rv   r   
atleast_1dr   r   s         r$   test_scalar_vectorz-TestApproxDerivativesDense.test_scalar_vector  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                 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}   r@   r   r   r   s         r$   test_vector_scalar_abs_stepz6TestApproxDerivativesDense.test_vector_scalar_abs_step$  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                 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,   h㈵>r   r   r   r   r   r   r   r   r   r   s         r$   test_vector_vectorz-TestApproxDerivativesDense.test_vector_vector2  s    Xvsm$$&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          t          t          | j        |           |                     t	          j        |                    }t          t          t          | j        ||           d S )Nr   )f0)assert_raisesRuntimeErrorr   r   r   r   
ValueError)rB   rC   r   s      r$   test_wrong_dimensionsz0TestApproxDerivativesDense.test_wrong_dimensions>  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 )	NrU   rM   r+   g-C6?)r4   r   )r   r9   r   r   )rB   rC   r   r   r   s        r$   test_custom_rel_stepz/TestApproxDerivativesDense.test_custom_rel_stepF  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         rK          @)r   gưr   r+   )r4   r   r   argskwargsbounds)r   r   r   r   r   r   r   r   )r   r   r   r   r   dictr   )rB   rC   r   r   rP   rQ   r   r   r   r   r   s              r$   test_optionsz'TestApproxDerivativesDense.test_optionsP  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+   r4   r   r   r   )	r   rN   r   r   r   r   r   r   r   )rB   rP   rQ   rC   jac_diffr   s         r$   test_with_bounds_2_pointz3TestApproxDerivativesDense.test_with_bounds_2_pointb  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   r@   )rB   rP   rQ   rC   r   r   s         r$   test_with_bounds_3_pointz3TestApproxDerivativesDense.test_with_bounds_3_pointp  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   r4   r   r   r   r   r   )r   r   r   r   r   r   )rB   rC   rP   rQ   r   r   s         r$   rV   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   rK   r+   r   r   r   r   r   )r   r   r   r   )rB   rP   rQ   rC   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   )rB   rC   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 ry   rZ   )prb   s     r$   funcz0TestApproxDerivativesDense.test_fp.<locals>.func  s    Q4!A$(?"r&   c                 "     | |          |z
  S r^   rZ   )r   rb   yr   s      r$   errz/TestApproxDerivativesDense.test_fp.<locals>.err  s    41::>!r&   r   d   dtyper   r+   )r4   r   gMbP?)atolc                     | j         t          j        k    sJ  |                               t          j                  S r^   )r   r   r1   astype)r   r   rb   r   s    r$   err_fp32z4TestApproxDerivativesDense.test_fp.<locals>.err_fp32  s:    7bj((((3q!Q<<&&rz222r&   r   c                 *    t          j        |           S r^   r   r{   rb   s    r$   fz-TestApproxDerivativesDense.test_fp.<locals>.f      6!99r&   c                 *    t          j        |           S r^   )r   rt   r  s    r$   gz-TestApproxDerivativesDense.test_fp.<locals>.g  r	  r&   c                 ,    t          j        |            S r^   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   rO   )rD   rC   r  r  r2   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linspacer.   r  r   r   r1   r   r   float16r-   r/   r   rO   )rB   p0jac_fp64jac_fpr  r  r  r  r  r   r2   rC   rD   r  r   r   rb   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   rK   r   )r   r   r   r   r   r   r   r   rB   rC   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 )Nr  r  r   r   )r   r   )r   r   r   r   r   r   r  s      r$   !test_check_derivative_with_kwargsz<TestApproxDerivativesDense.test_check_derivative_with_kwargs	  sX    Xubk""#D$C$($C$&,12;8 8 8 	4     r&   N)r   )rM   )&rW   rX   rY   rc   rh   rn   rv   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   rV   r   r   r  r   r"  rZ   r&   r$   r\   r\      s3           ? ? ?I I I2 2 26 6 6          @ @ @ @   2 2 24 4 4< < <    
: 
: 
:: : :
: 
: 
:
: 
: 
:: : :
: 
: 
:< < <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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   rU   r   rM   gP?r   )r   r  r  nr   rP   rQ   emptyrC   jacJ_true)rB   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   rL   r   r   )r   hstack)rB   rb   es      r$   funzTestApproxDerivativeSparse.fun  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   rL   rL   rL   rr   rL   rr   )sizer   r<   range)rB   rb   r'  Jis        r$   r)  zTestApproxDerivativeSparse.jac#  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   r2  r3  r   r5  r6  )r   r<   intr8  )rB   r'  r   r:  s       r$   r   z$TestApproxDerivativeSparse.structure1  s{    HaV3'''$$q!a% 	# 	#A!"AaQAo&	&	r&   c           	      2   |                      | j                  }t          j        | j                  }t	          ||          }t          j                            |           t	          ||          }t          g d||gt          j         | j	        gt          j        | j
        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 S )
Nr*   )r4   r   sparsityr   r   r   r   rL   )r4   r   r>  r   )r   r'  r   r   r   r  shuffler   r@   rP   rQ   r   r/  rC   r   
isinstancer   r   toarrayr*  	full_like)rB   r   r   r"   r#   r4   r!   lur9  r   s              r$   test_allz#TestApproxDerivativeSparse.test_all<  s   NN46""	$&!! E**
	%    E**$+,,,x.B&$'"RVTW$5%7 %7 	A 	A FFAq "$(DGF*+Q1f+G G GAJq*--...AIIKK4@@@@|DGT22HSSqSMMMRMMM!$(DGF+3q&kK K KAAIIKK4@@@@@	A 	Ar&   c                     |                      | j                  }t          | j        | j        |          }t          |                                | j        d           d S )N)r>  r   r   )r   r'  r   r/  rC   r   rA  r*  )rB   r   r9  s      r$   test_no_precomputed_groupsz5TestApproxDerivativeSparse.test_no_precomputed_groupsQ  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   )r>  r4   gV瞯<gVs<)r   r  )
r   rN   r'  r<  r   r   r/  rC   r   rA  )rB   r   r!   r4   J_denseJ_sparses         r$   test_equivalencez+TestApproxDerivativeSparse.test_equivalenceV  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 r^   )r   r)  )rb   rB   s    r$   r)  z=TestApproxDerivativeSparse.test_check_derivative.<locals>.jaca  s    dhhqkk***r&   r   r   )r   r/  rC   rP   rQ   r   )rB   r)  r  s   `  r$   r   z0TestApproxDerivativeSparse.test_check_derivative`  s    	+ 	+ 	+ 	+ 	+ $DHc47,0GTW+=? ? ?4   #DHc47,0GTW+=? ? ?4     r&   N)rW   rX   rY   r+  r/  r)  r   rE  rG  rK  r   rZ   r&   r$   r$  r$    s        	( 	( 	(= = =  	 	 	A A A*= = =
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 r^   r_   ra   s     r$   rc   z4TestApproxDerivativeLinearOperator.fun_scalar_scalaro  rd   r&   c                 *    t          j        |          S r^   rf   ra   s     r$   rh   z4TestApproxDerivativeLinearOperator.jac_scalar_scalarr  rd   r&   c                     t          j        |d         dz  t          j        |d                   t          j        |d                   g          S rj   rk   ra   s     r$   rn   z4TestApproxDerivativeLinearOperator.fun_scalar_vectoru  ro   r&   c                     t          j        d|d         z  t          j        |d                   dz  t          j        |d                   g                              dd          S rq   rs   ra   s     r$   rv   z4TestApproxDerivativeLinearOperator.jac_scalar_vectorx  rw   r&   c                 ~    t          j        |d         |d         z            t          j        |d                   z  S ry   rz   ra   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   ra   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   ra   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   ra   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r4   as_linear_operatorrZ  r,   r   r  r   r7  r   r   h㈵>)
r   rc   rh   r   r  r  r8  uniformr   dotrB   rC   r   r   r   r   r:  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+   TrY  r[  r,   r   r  r\  r]  r^  r   r   r_  )r   rn   rv   r   r   r  r  r8  r`  r   ra  rb  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+   TrY  r[  r,   r   r  r\  r^  r   r   r_  r   )r   r   r   r}   r   r  r  r8  r`  shaper   ra  r   rb  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+   TrY  r[  r,   r   r  r\  r^  r   r   r   r   )r   r   r   r   r   r  r  r8  r`  re  r   ra  rb  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   r@   )rB   rC   s     r$   test_exceptionz1TestApproxDerivativeLinearOperator.test_exception  sN    Xvsm$$j"3,b&26{	< 	< 	< 	< 	< 	<r&   N)rW   rX   rY   rc   rh   rn   rv   r}   r   r   r   r   r   r   r   rh  rZ   r&   r$   rO  rO  m  s            ? ? ?I I I2 2 2      ' ' '*' ' '*' ' '*K K K$< < < < <r&   rO  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 ry   )r   rO   r  s    r$   r  z"test_absolute_step_sign.<locals>.f  s4    qtax   26!A$(#3#333r&   rL   r+   r   r   r   r   r   )r4   r   r   )r   r   r   r@   )r  grads     r$   test_absolute_step_signrl    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   )rM   r   r  r   r+   )
r   r   r-   r.   r/   rO   r   r   r  float)
methodsrC   r2   r3   r   r4   r   correct_stepr   sign_x0s
             r$   test__compute_absolute_steprr  !  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   pytestr   r   scipy.sparser   r	   r
   scipy.optimize._numdiffr   r   r   r   r   r   r%   r5   r7   r\   r$  rO  rl  rr  rZ   r&   r$   <module>ry     s              @ @ @ @ @ @ @ @ @ @ * * * * * * ; ; ; ; ; ; ; ; ; ;< < < < < < < < < < < < < < < <
% % %8!
 !
 !
HG9 G9 G9 G9 G9 G9 G9 G9Tv! v! v! v! v! v! v! v!rX! X! X! X! X! X! X! X!v|< |< |< |< |< |< |< |<~2' 2' 2'j(6 (6 (6 (6 (6r&   