
    tKgwz                         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y)    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        ||       y )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           f/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test__numdiff.pytest_group_columnsr%      s    I jj*j*E	i 		!hh12q%(V[)"hh12q%(V[) F QHQH8$    c                  ,   t        j                  t         j                        j                  } | dz  | dz  | dz  d}dD ]n  }t	        t        t         j                  t         j                  |      ||          t	        t        t         j                  t         j                  |      ||          p t        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                  |      ||           y )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 /BJJ

F;&!	# 	BMM2==&A&!	
	 / ((2::

"
"C #S"Sz8%M /BJJ

F;&!	
 	BJJ

F;&!	
 	BJJ

F;&!	
 /r&   c                       e Zd Zd Zd Zd Zy)TestAdjustSchemeToBoundsc                    t        j                  d      }t        j                  dd      }t        j                  |      }t        j                  |      }|j	                  t         j
                          |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                  |              y )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=   XXa[GGAtMM"%	MM"%	wrvv 81iI!7
I
A&y!" 81iI!7
I
A&y!" 81iI!7
I
A&	z"# 81iI!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
             y )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   s   XX()ggaj[WWQZHHZ 4'0Q9b"M
A
A&0Q9b"M
A
BHHZ$84$?@ 81iR!)
I
BFF1I.	z"# 81iR!)
I
BHHZ$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             y )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<   XXuen%XXtTl#XXsDk"HHdD\"0Q9b"M
A
BHHdE]$;<0Q9b"M
A
BHHeU^$<= 81iR!)
I
BHHdE]$;<Y% 78 81iR!)
I
BHHeV_$=>Y% 78r&   N)__name__
__module____qualname__rI   rS   rV    r&   r$   r7   r7   O   s    $8?,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"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"y!)$TestApproxDerivativesDensec                 ,    t        j                  |      S Nr   sinhrB   xs     r$   fun_scalar_scalarz,TestApproxDerivativesDense.fun_scalar_scalar       wwqz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   8    xx1q"&&1,qt=>>r&   c                     t        j                  d|d   z  t        j                  |d         dz  t        j                  |d         g      j	                  dd      S Nr   r   rL   r   r   r   cosrm   reshapera   s     r$   jac_scalar_vectorz,TestApproxDerivativesDense.jac_scalar_vector   N    xx1Xrvvad|r)266!A$<8::A'"a.	Ir&   c                 p    t        j                  |d   |d   z        t        j                  |d         z  S Nr   r   r   sinlogra   s     r$   fun_vector_scalarz,TestApproxDerivativesDense.fun_vector_scalar   .    vvadQqTk"RVVAaD\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,    xxArvvay"&&)455r&   c           	      f   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       xxaD266!A$1+&&!5FF1Q4!A$;!A$&'aD266!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   `    xxaD266!A$<aD266!A$<aDAI!$
  	r&   c                 P   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   g      r   ra   s     r$   jac_vector_vectorz,TestApproxDerivativesDense.jac_vector_vector       xxVVAaD\1Q4"&&1,./dURVVAaD\!266!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   s8    xxQqT	*BFF2!9,=>??r&   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   sT    xx"&&ad##Q'RVVB1I&&'
  	r&   c                 V    t        j                  |      dk  r|S t         j                  S )N:0yE>r   rO   nanra   s     r$   fun_with_nanz'TestApproxDerivativesDense.fun_with_nan   s     FF1I%q12661r&   c                 V    t        j                  |      dk  rdS t         j                  S )Nr         ?r   ra   s     r$   jac_with_nanz'TestApproxDerivativesDense.jac_with_nan   s     ffQi4's3RVV3r&   c                 z    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   s7    xx1!bffQqTAaD[&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   so    xxqT1Q4LdURVVAaD1Q4K((1Q4%"&&1!2E*EF
  	r&   c                 r    t        j                  |      j                         }t        j                  |      S r^   )r   r   itemmathrm   )rB   rb   xps      r$   jac_non_numpyz(TestApproxDerivativesDense.jac_non_numpy   s(     ZZ]!xx|r&   c                 
   d}t        | j                  |d      }t        | j                  |      }t        | j                  |d      }| j                  |      }t        ||d       t        ||d       t        ||d       y )	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
&t'='=rB
&t'='=r.24
))"-
H48
H48
H59r&   c                    d}t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j                  |      }t        ||d       t        ||d	       t        ||d
       y )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
&t'='=r079
&t'='=r.2WF
))"-
H48
H48
H59r&   c                 0   d}t        | j                  |d      }t        | j                  |      }t        | j                  |d      }| j                  t        j                  |            }t        ||d       t        ||d       t        ||d       y )	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
&t'='=rB
&t'='=r.24
))"--*;<
H48
H48
H59r&   c                 4   t        j                  ddg      }t        | j                  |d      }t        | j                  |      }t        | j                  |d      }| j	                  |      }t        ||d       t        ||d       t        ||d	       y )
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    XXudm$&t'='=r.79
&t'='=rB
&t'='=r.24
))"-
H48
H48
H59r&   c                 Z   t        j                  ddg      }t        | j                  |dd      }t        | j                  |dt         j                        }t        | j                  |dd      }| j                  |      }t        ||d	       t        ||d
	       t        ||d	       y )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    XXudm$&t'='=r.7'K
&t'='=r07"&&J
&t'='=r.2WF
))"-
H48
H48
H59r&   c                 4   t        j                  ddg      }t        | j                  |d      }t        | j                  |      }t        | j                  |d      }| j	                  |      }t        ||d       t        ||d       t        ||d	       y )
N      Y皙?r+   r   r,   h㈵>r   r   r   r   r   r   r   r   r   r   s         r$   test_vector_vectorz-TestApproxDerivativesDense.test_vector_vector   s    XXvsm$&t'='=r.79
&t'='=rB
&t'='=r.24
))"-
H48
H48
H59r&   c                     d}t        t        t        | j                  |       | j                  t	        j
                  |            }t        t        t        | j                  ||       y )Nr   )f0)assert_raisesRuntimeErrorr   r   r   r   
ValueError)rB   rC   r   s      r$   test_wrong_dimensionsz0TestApproxDerivativesDense.test_wrong_dimensions,  sR    l$5//	5&&r}}R'89j"3//	<r&   c                     t        j                  ddg      }t        | j                  |dd      }t        | j                  |d      }| j	                  |      }t        ||d       t        ||d       y )	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_step4  sm    XXtSk"&t'='=r.7$H
&t'='=r046
))"-
H48
H48r&   c                    t        j                  ddg      }d}d}d}d}| j                  |||      }t        j                  ddg      }| j                  |||      }t	        | j                  |d|||ft        |      ||f	      }	t	        | j                  ||||ft        |      ||f
      }
t        |	|d       t        |
|d       y )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_options>  s    XXsCj!""2rb"188UDM*((R4&!!2i(dbk2r(D
 '!!2dbk2r(D
 	
H48
H48r&   c                 r   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      }| j                  |      }t        ||d	
       y )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_pointP  s    ggaj[WWQZXXtSk"j"3,,b"b	C XXtSk"$T%;%;R,5r2hH))"-(6r&   c                 "   t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }| j                  |      }t        | j                  |      }t        ||d       t        | j                  ||t         j                  f      }t        ||d       t        | j                  |t         j                   |f      }t        ||d       t        | j                  |||f      }t        ||d       y )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_point^  s    XXsCj!XXsCj!XXsCj!))"-$T%;%;R@(6$T%;%;R-/L:(6$T%;%;R.0ffWbM;(6$T%;%;R-/H6(6r&   c                    t        j                  ddg      }|dz
  }|dz   }| j                  |      }t        | j                  |d||f      }t        ||d       t        | j                  |dd||f      }t        ||d       t        | j                  |||f	      }t        ||d       t        | j                  |d||f
      }t        ||d       y )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_boundst  s    XXtTl#$Y$Y))"-$""By"bK(6$""By2r(, 	(6$""BBx9(6$""Br2hH(6r&   c                    d}d}d}| j                  |      }t        | j                  |dd||f      }t        | j                  |d||f      }t        ||d       t        ||d	       d}| j                  |      }t        | j                  |dd||f      }t        | j                  |d||f      }t        ||d       t        ||d	       y )
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  s    $$R(&r)d8
 'rD"bC

H48
H48$$R(&r)d8
 'rD"bC

H48
H48r&   c                    d}| j                  |      }t        | j                   |d      }t        | j                   |      }t        ||d       t        ||d       t        t        t        | j                   |fi t        d       y )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'9'92.79
&t'9'92>

H48
H48 	i!2D4F4F 	+D)	+r&   c                 L   t         j                  j                  d       d fdt        j                  dddt         j                        t         j                  j                  d      j                  t         j                        t        j                  ddg      }t        |df	      }t        |j                  t         j                        df	      } |      j                  t         j                  k(  sJ t        ||d
       fd}t        ||j                  t         j                        d      }t        ||d
       d }d }d }d }t         j                  t         j                  t         j                  fD ]  }	t        j                  |	      j                  }
t        j                  d      j                  |	      }t        d | ||      d      } ||||||
      }t        ||d|       ||      z
  t              |k  rJ  y )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    1:>!r&   r   d   dtyper   r+   )r4   r   gMbP?)atolc                     | j                   t        j                  k(  sJ  |       j                  t        j                        S r^   )r   r   r1   astype)r   r   rb   r   s    r$   err_fp32z4TestApproxDerivativesDense.test_fp.<locals>.err_fp32  s6    77bjj(((q!Q<&&rzz22r&   r   c                 ,    t        j                  |       S r^   r   r{   rb   s    r$   fz-TestApproxDerivativesDense.test_fp.<locals>.f      66!9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    FF1I:r&   c           
      (   | 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  sr    QRVVDH-rvvd26l/CDDB q3rvvae}bffQrAvY.?@@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	#	" KK1c4IIS!((4XXtTl#$S"YaVL #3		"**(=*31a&B2q!}""bjj000t4	3 #8RYYrzz-B*35t4				 jj"**bjj9E((5/%%C#%%e,B&tR2	BAQAtS1D#Ar)-.023B%8Cs8d?"? :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(         y )Ng      $
   r   r   rK   r   )r   r   r   r   r   r   r   r   )rB   rC   accuracys      r$   test_check_derivativez0TestApproxDerivativesDense.test_check_derivative  s    XXubk"#D$:$:$($:$:B@4 #D$:$:$($:$:B@4 XXsCj!#D$:$:$($:$:B@A#D$:$:$($:$:B@A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   rV   r   r   r  r  rZ   r&   r$   r\   r\      s    ?I26@24<
::
:
::
:<99$77,7(9.+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
y	)
TestApproxDerivativeSparsec                    t         j                  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                  | j                        | _
        y )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!bii//0RYYtvv../((466" DGGCaCL0!!TWWQTT]21hhtww'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  sM    abE1Hq"vqy yy!QU$ryy!a%'<<<r&   c                 \   |j                   }t        j                  ||f      }d|d   z  |d<   d|d   dz  z  |d<   t        d|dz
        D ]D  }d||dz
     z  |||dz
  f<   d	||   dz  z  d
||   z  z
  |||f<   d||dz      dz  z  |||dz   f<   F d	|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    FFHHaVqt)$adAg+$q!a%Aq1v+AaQhK!A$'kA!H,AadGa!fai-AaQhK ! "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   r%  r&  r   r(  r)  )r   r<   intr+  )rB   r  r   r-  s       r$   r   z$TestApproxDerivativeSparse.structure  sm    HHaV3'$$q!a%A!"AaQAo !&	&	r&   c           	      N   | j                  | j                        }t        j                  | j                        }t	        ||      }t        j
                  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%                         | j&                  d       t        j(                  | j                  d      }
|
d d dxx   dz  cc<   t        | j                  | j                  ||
||f      }	t#        |	j%                         | j&                  d	        y )
Nr*   )r4   r   sparsityr   r   r   r   rL   )r4   r   r1  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ur,  r   s              r$   test_allz#TestApproxDerivativeSparse.test_all"  s>   NN466"		$&&! E*
		%  E*$+,x.B&&$''"RVVTWW$5%7 FFAq "$((DGGF*+Q1f+GAJq*-.AIIK4@||DGGT2HSqSMRM!$((DGGF+3q&kKAAIIK4@%7r&   c                     | j                  | j                        }t        | j                  | j                  |      }t        |j                         | j                  d       y )N)r1  r   r   )r   r  r   r"  rC   r   r4  r  )rB   r   r,  s      r$   test_no_precomputed_groupsz5TestApproxDerivativeSparse.test_no_precomputed_groups7  s@    NN466"dhh!<		T[[t<r&   c                 z   t        j                  | j                  | j                  ft              }t        j                  | j                        }dD ]f  }t        | j                  | j                  |      }t        | j                  | j                  ||f|      }t        ||j                         dd       h y )Nr   r*   r   )r1  r4   gV瞯<gVs<)r   r   )
r   rN   r  r/  r   r   r"  rC   r   r4  )rB   r   r!   r4   J_denseJ_sparses         r$   test_equivalencez+TestApproxDerivativeSparse.test_equivalence<  s    GGTVVTVV,C8	466"2F'$''&IG($''Y,?PHGX%5%5%7!&U4	 3r&   c                 ,     fd}t         j                  | j                   j                   j                  f      }t        |dk         t         j                  | j                   j                   j                  f      }t        |dk         y )Nc                 8    t        j                  |             S r^   )r   r  )rb   rB   s    r$   r  z=TestApproxDerivativeSparse.test_check_derivative.<locals>.jacG  s    dhhqk**r&   r   r   )r   r"  rC   rP   rQ   r   )rB   r  r  s   `  r$   r  z0TestApproxDerivativeSparse.test_check_derivativeF  sr    	+ $DHHc477,0GGTWW+=?4 #DHHc477,0GGTWW+=?4 r&   N)rW   rX   rY   r  r"  r  r   r8  r:  r>  r  rZ   r&   r$   r  r    s+    	(=	A*=
4
!r&   r  c                   Z    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y)"TestApproxDerivativeLinearOperatorc                 ,    t        j                  |      S r^   r_   ra   s     r$   rc   z4TestApproxDerivativeLinearOperator.fun_scalar_scalarU  rd   r&   c                 ,    t        j                  |      S r^   rf   ra   s     r$   rh   z4TestApproxDerivativeLinearOperator.jac_scalar_scalarX  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_vector[  ro   r&   c                     t        j                  d|d   z  t        j                  |d         dz  t        j                  |d         g      j	                  dd      S rq   rs   ra   s     r$   rv   z4TestApproxDerivativeLinearOperator.jac_scalar_vector^  rw   r&   c                 p    t        j                  |d   |d   z        t        j                  |d         z  S ry   rz   ra   s     r$   r}   z4TestApproxDerivativeLinearOperator.fun_vector_scalarb  r~   r&   c           	      f   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_scalare  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_vectorl  r   r&   c                 P   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_vectors  r   r&   c                     d}t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j                  |      }t        j                  j                  d       t        d      D ]  }t        j                  j                  d	dd
      }t        |j                  |      ||z  d       t        |j                  |      ||z  d       t        |j                  |      ||z  d        y )Nr   r+   Tr4   as_linear_operatorrM  r,   r   r  r   r*  r   r   h㈵>)
r   rc   rh   r   r
  r  r+  uniformr   dotrB   rC   r   r   r   r   r-  r   s           r$   r   z5TestApproxDerivativeLinearOperator.test_scalar_scalarz  s    &t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-
		qrA		!!#r!5AJNN1-xz!%'JNN1-xz!%'JNN1-xz!%' r&   c                    d}t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j                  t        j                  |            }t        j
                  j                  d       t        d      D ]  }t        j
                  j                  d	dd
      }t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d        y )Nr(   r+   TrL  rN  r,   r   r  rO  rP  rQ  r   r   rR  )r   rn   rv   r   r   r
  r  r+  rS  r   rT  rU  s           r$   r   z5TestApproxDerivativeLinearOperator.test_scalar_vector  s   &t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"--*;<
		qrA		!!#r!5AJNN1-x||A!%'JNN1-x||A!%'JNN1-x||A!%' r&   c           	         t        j                  ddg      }t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j	                  |      }t         j
                  j                  d       t        d	      D ]  }t         j
                  j                  d
d	|j                        }t        |j                  |      t        j                  |j                  |            d       t        |j                  |      t        j                  |j                  |            d       t        |j                  |      t        j                  |j                  |            d        y )Nr   r   r+   TrL  rN  r,   r   r  rO  rQ  r   r   rR  r   )r   r   r   r}   r   r
  r  r+  rS  shaper   rT  r   rU  s           r$   r   z5TestApproxDerivativeLinearOperator.test_vector_scalar  s.   XXudm$&t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-
		qrA		!!#r!9AJNN1-r}}X\\!_/M!%'JNN1-r}}X\\!_/M!%'JNN1-r}}X\\!_/M!%' r&   c                    t        j                  ddg      }t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j	                  |      }t         j
                  j                  d       t        d	      D ]  }t         j
                  j                  d
d	|j                        }t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d        y )Nr   r   r+   TrL  rN  r,   r   r  rO  rQ  r   r   r   r   )r   r   r   r   r   r
  r  r+  rS  rX  r   rT  rU  s           r$   r   z5TestApproxDerivativeLinearOperator.test_vector_vector  s
   XXvsm$&t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-
		qrA		!!#r!9AJNN1-x||ATJJNN1-x||ATJJNN1-x||ATJ	 r&   c           	          t        j                  ddg      }t        t        t        | j
                  |ddt         j                  f       y )Nr   r   r+   r   r   )r   r   r   r   r   r   r@   )rB   rC   s     r$   test_exceptionz1TestApproxDerivativeLinearOperator.test_exception  s9    XXvsm$j"3,,b&266{	<r&   N)rW   rX   rY   rc   rh   rn   rv   r}   r   r   r   r   r   r   r   r[  rZ   r&   r$   rB  rB  S  sE    ?I2'*'*'*K$<r&   rB  c                     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       y )
Nc                 r    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  s2    qtax  266!A$(#333r&   rL   r+   r   r   r   r   r   )r4   r   r   )r   r   r   r@   )r   grads     r$   test_absolute_step_signr_    s;   4 QRTJDD4+& QRUKDD3+& 	B8ItD D4+& 	B8IuD D4,'	B8ID D3*% 	B8I}D D3+&	B8Ir266l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\  j                  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\  j                  t              dz  d	z
  }	t        || |d      }t        ||	|z         y )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_stepre    s   *G	#	$B
((2::

"
"C8:3hM
 
#B (xx!)B!)B!)BFF2a5M!9!; <
 *$B?,/3!8##E*Q.2)$R@'L"89  xx)*H88Xa[2a50*95%a[2-%a[266"Q%=8: ;L
 &hB	BHHl+sax&*Q.G%hRCHHg4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  rB  r_  re  rZ   r&   r$   <module>rl     sq       @ @ * ; ;< <
%8!
HG9 G9T\ \~
X! X!v|< |<~2'j(6r&   