
    (phg~                         S SK r S SKJr  S SKrS SKJrJrJr  S SK	J
r  S SKJrJrJr  S SKJrJrJrJrJrJr  S rS r " S	 S
5      r " S S5      r " S S5      r " S S5      rS rS rg)    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                     / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n [         R                  [        [        [        4 H  nU" U 5      n[         R
                  " S5      n[         R                  " / S	Q5      n[        X#5      n[        XT5        / S
Qn[         R                  " / SQ5      n[        X#5      n[        XT5        M     [        W5      n[        U5      n[        Xg5        g )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           U/var/www/html/venv/lib/python3.13/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$    c                  .   [         R                  " [         R                  5      R                  n U S-  U S-  U S-  S.nS Hm  n[	        [        [         R                  [         R                  U5      X   5        [	        [        [         R                  [         R                  U5      X   5        Mo     [         R                  " [         R                  5      R                  n U S-  U S-  U S-  S.nS H  n[	        [        [         R                  [         R                  U5      X   5        [	        [        [         R                  [         R                  U5      X   5        [	        [        [         R                  [         R                  U5      X   5        M     g )N      ?UUUUUU?2-pointz3-pointcs)r   finfofloat64epsr   r   
complex128float32)EPSrelative_stepmethods      r$   test_correct_fp_epsr5   +   s4   
((2::

"
"C #S"Sz8%M /BJJ

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

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

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

F;!	
 /r&   c                   &    \ rS rSrS rS rS rSrg)TestAdjustSchemeToBoundsO   c                    [         R                  " S5      n[         R                  " SS5      n[         R                  " U5      n[         R                  " U5      nUR	                  [         R
                  * 5        UR	                  [         R
                  5        [        XSSX45      u  pV[        XR5        [        [         R                  " U5      5        [        XSSX45      u  pV[        XR5        [        [         R                  " U5      5        [        XSSX45      u  pV[        XR5        [        [         R                  " U) 5      5        [        XSSX45      u  pV[        XR5        [        [         R                  " U) 5      5        g )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_bounds'TestAdjustSchemeToBounds.test_no_boundsP   s   XXa[GGAtMM"%	MM"%	wrvv 81i!7

&y!" 81i!7

&y!" 81i!7

&	z"# 81i!7

&	z"#r&   c                    [         R                  " / SQ5      n[         R                  " S5      * n[         R                  " S5      n[         R                  " / SQ5      S-  n[        XSSX#5      u  pV[	        XT5        [        XSSX#5      u  pV[	        U[         R                  " / SQ5      S-  5        [        XSS	X#5      u  pW[	        U[         R
                  " U5      5        [        [         R                  " U) 5      5        [        XSS	X#5      u  pW[	        U[         R                  " / SQ5      S-  5        [        U[         R                  " / S
Q5      5        g )N)        g333333?g333333r   )r   r   皙?r   r;   r   )r   rN   r   r<   )FTT)	r   r   onesr   r   absr   rB   r   )rC   rD   lbubrE   rH   _rI   s           r$   test_with_bound(TestAdjustSchemeToBounds.test_with_boundl   s   XX()ggaj[WWQZHHZ 4'09bM

&09bM

BHHZ$84$?@ 81i!)

BFF1I.	z"# 81i!)

BHHZ$84$?@Y)< =>r&   c                    [         R                  " SS/5      n[         R                  " SS/5      n[         R                  " SS/5      n[         R                  " SS/5      n[        X4SSX5      u  pV[        U[         R                  " SS/5      5        [        X4S	SX5      u  pV[        U[         R                  " S
S/5      5        [        X4SSX5      u  pW[        U[         R                  " SS/5      5        [	        U[         R                  " SS/5      5        [        X4S	SX5      u  pW[        U[         R                  " SS/5      5        [	        U[         R                  " SS/5      5        g )NgQg?rM   gQ?皙r   r;   gQr   g?r<   FTgQ?gQ)r   r   r   r   r   )rC   rR   rS   rD   rE   rH   rT   rI   s           r$   test_tight_bounds*TestAdjustSchemeToBounds.test_tight_bounds   s$   XXuen%XXtTl#XXsDk"HHdD\"09bM

BHHdE]$;<09bM

BHHeU^$<= 81i!)

BHHdE]$;<Y% 78 81i!)

BHHeV_$=>Y% 78r&    N)__name__
__module____qualname____firstlineno__rJ   rU   rY   __static_attributes__r[   r&   r$   r7   r7   O   s    $8?,9r&   r7   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS'S jrS(S jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S%r'g&))TestApproxDerivativesDense   c                 .    [         R                  " U5      $ Nr   sinhrC   xs     r$   fun_scalar_scalar,TestApproxDerivativesDense.fun_scalar_scalar       wwqzr&   c                 .    [         R                  " U5      $ re   r   coshrh   s     r$   jac_scalar_scalar,TestApproxDerivativesDense.jac_scalar_scalar   rl   r&   c                     [         R                  " US   S-  [         R                  " US   5      [         R                  " US   5      /5      $ Nr   r   r   r   tanexprh   s     r$   fun_scalar_vector,TestApproxDerivativesDense.fun_scalar_vector   8    xx1q"&&1,qt=>>r&   c                     [         R                  " SUS   -  [         R                  " US   5      S-  [         R                  " US   5      /5      R	                  SS5      $ Nr   r   rN   r   r   r   cosrv   reshaperh   s     r$   jac_scalar_vector,TestApproxDerivativesDense.jac_scalar_vector   N    xx1Xrvvad|r)266!A$<8::A'"a.	Ir&   c                 t    [         R                  " US   US   -  5      [         R                  " US   5      -  $ Nr   r   r   sinlogrh   s     r$   fun_vector_scalar,TestApproxDerivativesDense.fun_vector_scalar   .    vvadQqTk"RVVAaD\11r&   c                     [         R                  " US-  [         R                  " U5      [         R                  " U5      /5      $ Nr   rt   rh   s     r$   wrong_dimensions_fun/TestApproxDerivativesDense.wrong_dimensions_fun   s,    xxArvvay"&&)455r&   c           	      r   [         R                  " US   [         R                  " US   US   -  5      -  [         R                  " US   5      -  [         R                  " US   US   -  5      US   -  -   US   [         R                  " US   US   -  5      -  [         R                  " US   5      -  /5      $ Nr   r   r   r   r~   r   r   rh   s     r$   jac_vector_scalar,TestApproxDerivativesDense.jac_vector_scalar       xxaD266!A$1+&&!5FF1Q4!A$;!A$&'aD266!A$1+&&!5
  	r&   c                     [         R                  " US   [         R                  " US   5      -  US   [         R                  " US   5      -  US   S-  US   S-  -  /5      $ Nr   r   r         ࿩r   r   r   r~   rh   s     r$   fun_vector_vector,TestApproxDerivativesDense.fun_vector_vector   `    xxaD266!A$<aD266!A$<aDAI!$
  	r&   c                     US:X  d   e[         R                  " US   [         R                  " US   5      -  US   [         R                  " US   5      -  US   S-  US   S-  -  /5      $ )=Used to test passing custom arguments with check_derivative()*   r   r   r   r   r   rC   ri   args      r$   fun_vector_vector_with_arg5TestApproxDerivativesDense.fun_vector_vector_with_arg   sl    byyxxaD266!A$<aD266!A$<aDAI!$
  	r&   c                 Z   [         R                  " [         R                  " US   5      US   [         R                  " US   5      -  /US   * [         R                  " US   5      -  [         R                  " US   5      /SUS   S-  -  US   S-  -  SUS   S-  -  US   S-  -  //5      $ Nr   r   r   r   r         r   rh   s     r$   jac_vector_vector,TestApproxDerivativesDense.jac_vector_vector       xxVVAaD\1Q4"&&1,./dURVVAaD\!266!A$<01]QqTT\)4!A$!)+;addl+JK
  	r&   c                 j   US:X  d   e[         R                  " [         R                  " US   5      US   [         R                  " US   5      -  /US   * [         R                  " US   5      -  [         R                  " US   5      /SUS   S-  -  US   S-  -  SUS   S-  -  US   S-  -  //5      $ )r   r   r   r   r   r   r   r   r   r   s      r$   jac_vector_vector_with_arg5TestApproxDerivativesDense.jac_vector_vector_with_arg   s    byyxxVVAaD\1Q4"&&1,./dURVVAaD\!266!A$<01]QqTT\)4!A$!)+;addl+JK
  	r&   c                     [         R                  " [         R                  " X!S   -  5      [         R                  " X1S   -  5      /5      $ r   r   r   rv   rC   ri   c0c1s       r$   fun_parametrized+TestApproxDerivativesDense.fun_parametrized   s4    xxqT	*BFF2!9,=>??r&   c           
          [         R                  " U[         R                  " X!S   -  5      -  S/SU[         R                  " X1S   -  5      -  //5      $ r   r   r   s       r$   jac_parametrized+TestApproxDerivativesDense.jac_parametrized   sP    xx"&&d##Q'RVVB1I&&'
  	r&   c                 Z    [         R                  " U5      S::  a  U$ [         R                  $ )N:0yE>r   rQ   nanrh   s     r$   fun_with_nan'TestApproxDerivativesDense.fun_with_nan   s     FF1I%q12661r&   c                 Z    [         R                  " U5      S::  a  S$ [         R                  $ )Nr         ?r   rh   s     r$   jac_with_nan'TestApproxDerivativesDense.jac_with_nan   s     ffQi4's3RVV3r&   c                 ~    [         R                  " US   US   -  [         R                  " US   US   -  5      /5      $ r   )r   r   r~   rh   s     r$   fun_zero_jacobian,TestApproxDerivativesDense.fun_zero_jacobian   s7    xx1!bffQqTAaD[&9:;;r&   c           
          [         R                  " US   US   /US   * [         R                  " US   US   -  5      -  US   * [         R                  " US   US   -  5      -  //5      $ r   )r   r   r   rh   s     r$   jac_zero_jacobian,TestApproxDerivativesDense.jac_zero_jacobian   so    xxqT1Q4LdURVVAaD1Q4K((1Q4%"&&1!2E*EF
  	r&   c                 v    [         R                  " U5      R                  5       n[        R                  " U5      $ re   )r   r   itemmathrv   )rC   ri   xps      r$   jac_non_numpy(TestApproxDerivativesDense.jac_non_numpy   s(     ZZ]!xx|r&   c                     Sn[        U R                  USS9n[        U R                  U5      n[        U R                  USS9nU R                  U5      n[        X%SS9  [        X5SS9  [        XESS9  g )	Nr   r+   r4   r,   ư>rtol&.>-q=r   rj   rp   r   rC   rD   
jac_diff_2
jac_diff_3
jac_diff_4jac_trues         r$   test_scalar_scalar-TestApproxDerivativesDense.test_scalar_scalar   su    &t'='=r.79
&t'='=rB
&t'='=r.24
))"-
48
48
59r&   c                     Sn[        U R                  USSS9n[        U R                  USS9n[        U R                  USSS9nU R                  U5      n[        X%SS9  [        X5S	S9  [        XES
S9  g )Nr   r+   "\O>r4   abs_step)r   r,   r   r   r   r   r   r   s         r$   test_scalar_scalar_abs_step6TestApproxDerivativesDense.test_scalar_scalar_abs_step   s    &t'='=r.7'K
&t'='=r079
&t'='=r.2WF
))"-
48
48
59r&   c                    Sn[        U R                  USS9n[        U R                  U5      n[        U R                  USS9nU R                  [        R                  " U5      5      n[        X%SS9  [        X5SS9  [        XESS9  g )	Nr(   r+   r   r,   r   r   r   r   )r   rw   r   r   
atleast_1dr   r   s         r$   test_scalar_vector-TestApproxDerivativesDense.test_scalar_vector  s~    &t'='=r.79
&t'='=rB
&t'='=r.24
))"--*;<
48
48
59r&   c                    [         R                  " SS/5      n[        U R                  USS9n[        U R                  U5      n[        U R                  USS9nU R	                  U5      n[        X%SS9  [        X5SS9  [        XES	S9  g )
N      Y@r   r+   r   r,   r   r   Hz>r   )r   r   r   r   r   r   r   s         r$   test_vector_scalar-TestApproxDerivativesDense.test_vector_scalar  s    XXudm$&t'='=r.79
&t'='=rB
&t'='=r.24
))"-
48
48
59r&   c                 2   [         R                  " SS/5      n[        U R                  USSS9n[        U R                  US[         R                  S9n[        U R                  USSS9nU R                  U5      n[        X%SS	9  [        X5S
S	9  [        XESS	9  g )Nr   r   r+   r   r   )r   rel_stepr,   r   r   A:)>r   )r   r   r   r   rA   r   r   r   s         r$   test_vector_scalar_abs_step6TestApproxDerivativesDense.test_vector_scalar_abs_step$  s    XXudm$&t'='=r.7'K
&t'='=r07"&&J
&t'='=r.2WF
))"-
48
48
59r&   c                    [         R                  " SS/5      n[        U R                  USS9n[        U R                  U5      n[        U R                  USS9nU R	                  U5      n[        X%SS9  [        X5SS9  [        XES	S9  g )
N      Y皙?r+   r   r,   h㈵>r   r   r   r   r   r   r   r   r   r   s         r$   test_vector_vector-TestApproxDerivativesDense.test_vector_vector2  s    XXvsm$&t'='=r.79
&t'='=rB
&t'='=r.24
))"-
48
48
59r&   c                     Sn[        [        [        U R                  U5        U R                  [        R
                  " U5      5      n[        [        [        U R                  XS9  g )Nr   )f0)assert_raisesRuntimeErrorr   r   r   r   
ValueError)rC   rD   r   s      r$   test_wrong_dimensions0TestApproxDerivativesDense.test_wrong_dimensions>  sP    l$5//	5&&r}}R'89j"3//	<r&   c                     [         R                  " SS/5      n[        U R                  USSS9n[        U R                  USS9nU R	                  U5      n[        X$SS9  [        X4SS9  g )	NrX   rO   r+   g-C6?)r4   r   )r   r:   r   r   )rC   rD   r   r   r   s        r$   test_custom_rel_step/TestApproxDerivativesDense.test_custom_rel_stepF  si    XXtSk"&t'='=r.7$H
&t'='=r046
))"-
48
48r&   c                 d   [         R                  " SS/5      nSnSnSnSnU R                  XUS9n[         R                  " SS/5      nU R                  XU5      n[	        U R                  USUXb4[        US9XE4S	9n	[	        U R                  XXb4[        US9XE4S
9n
[        XSS9  [        XSS9  g )Nr         rM          @)r   gưr   r+   )r4   r   r   argskwargsbounds)r   r   r  r  r  r   r   r   )r   r   r   r   r   dictr   )rC   rD   r   r   rR   rS   r   r   r   r   r   s              r$   test_options'TestApproxDerivativesDense.test_optionsP  s    XXsCj!""2b"188UDM*((4&!!2i(dbk2(D
 '!!2dbk2(D
 	
48
48r&   c                 b   [         R                  " S5      * n[         R                  " S5      n[         R                  " SS/5      n[        [        [
        U R                  X1U4S9  [         R                  " SS/5      n[        U R                  USX4S9nU R                  U5      n[        XES	S
9  g )Nr   g       r   r  r  r   r+   r4   r  r   r   )	r   rP   r   r   r   r   r   r   r   )rC   rR   rS   rD   jac_diffr   s         r$   test_with_bounds_2_point3TestApproxDerivativesDense.test_with_bounds_2_pointb  s    ggaj[WWQZXXtSk"j"3,,bb	C XXtSk"$T%;%;R,5rhH))"-6r&   c                    [         R                  " SS/5      n[         R                  " SS/5      n[         R                  " SS/5      nU R                  U5      n[        U R                  U5      n[        XTSS9  [        U R                  UU[         R                  4S9n[        XTSS9  [        U R                  U[         R                  * U4S9n[        XTSS9  [        U R                  UX4S9n[        XTSS9  g )Nr   r  r   r   r
  )r   r   r   r   r   r   rA   )rC   rR   rS   rD   r   r  s         r$   test_with_bounds_3_point3TestApproxDerivativesDense.test_with_bounds_3_pointp  s    XXsCj!XXsCj!XXsCj!))"-$T%;%;R@6$T%;%;R-/L:6$T%;%;R.0ffWbM;6$T%;%;R-/H66r&   c                 r   [         R                  " SS/5      nUS-
  nUS-   nU R                  U5      n[        U R                  USX#4S9n[        XTSS9  [        U R                  USSX#4S9n[        XTSS9  [        U R                  XU4S	9n[        XTSS9  [        U R                  USX#4S
9n[        XESS9  g )Ng      $@r   g&.!>r+   r  r   r   r4   r   r  r
  r   r  )r   r   r   r   r   r   )rC   rD   rR   rS   r   r  s         r$   rY   ,TestApproxDerivativesDense.test_tight_bounds  s    XXtTl#$Y$Y))"-$""By"K6$""By2(, 	6$""BBx96$""BrhH6r&   c                 d   SnSnSnU R                  U5      n[        U R                  USSX4S9n[        U R                  USX4S9n[        XTSS9  [        XdS	S9  SnU R                  U5      n[        U R                  USSX4S9n[        U R                  USX4S9n[        XTSS9  [        XdS	S9  g )
N:0yEr   rM   r+   r   r  r  r   r   )r   r   r   r   )rC   rR   rS   rD   r   r   r   s          r$   test_bound_switches.TestApproxDerivativesDense.test_bound_switches  s    $$R(&r)d8
 'rD"C

48
48$$R(&r)d8
 'rD"C

48
48r&   c                     SnU R                  U5      n[        U R                   USS9n[        U R                   U5      n[        X2SS9  [        XBSS9  [        [        [        U R                   U40 [        SS9D6  g )Nr   r+   r   r   r   r   r,   )r   r   r   r   	TypeErrorr  )rC   rD   r   r   r   s        r$   test_non_numpy)TestApproxDerivativesDense.test_non_numpy  sz    %%b)&t'9'92.79
&t'9'92>

48
48 	i!2D4F4F 	+D)	+r&   c                 (  ^^^^ [         R                  R                  S5        S mU4S jm[         R                  " SSS[         R                  S9m[         R                  R                  S5      R                  [         R                  5      m[         R                  " SS/5      n[        TUSTT4S	9n[        TUR                  [         R                  5      STT4S	9nT" UTT5      R                  [         R                  :X  d   e[        X2S
S9  UUU4S jn[        XAR                  [         R                  5      SS9n[        X2S
S9  S nS nS nS n[         R                  [         R                  [         R                  4 H  n	[         R                  " U	5      R                  n
[         R                  " S5      R                  U	5      n[        S X" U5      S5      nU" XXWU
5      n[        X[SUS9U" U5      -
  m[        T5      U:  a  M   e   g )Nr   c                     U S   U S   U-  -   $ r   r[   )pri   s     r$   func0TestApproxDerivativesDense.test_fp.<locals>.func  s    Q4!A$(?"r&   c                    > T" X5      U-
  $ re   r[   )r   ri   yr!  s      r$   err/TestApproxDerivativesDense.test_fp.<locals>.err  s    :>!r&   r   d   dtyper  r+   )r4   r  gMbP?)atolc                    > U R                   [        R                  :X  d   eT" U TT5      R                  [        R                  5      $ re   )r)  r   r1   astype)r   r%  ri   r$  s    r$   err_fp324TestApproxDerivativesDense.test_fp.<locals>.err_fp32  s6    77bjj(((q!Q<&&rzz22r&   r   c                 .    [         R                  " U 5      $ re   r   r   ri   s    r$   f-TestApproxDerivativesDense.test_fp.<locals>.f      66!9r&   c                 .    [         R                  " U 5      $ re   )r   r~   r1  s    r$   g-TestApproxDerivativesDense.test_fp.<locals>.g  r4  r&   c                 0    [         R                  " U 5      * $ re   r0  r1  s    r$   hess0TestApproxDerivativesDense.test_fp.<locals>.hess  s    FF1I:r&   c           
      (   U S-  [        [        R                  " U" U5      5      [        R                  " U" X-   5      5      5      -  nX@-  [        [        R                  " U" U5      5      [        R                  " U" X-   5      5      5      -  nXV-   $ r   )maxr   rQ   )rE   rD   r2  r9  r2   t0t1s          r$   	calc_atol5TestApproxDerivativesDense.test_fp.<locals>.calc_atol  sj    QRVVDH-rvvd26l/CDDB 3rvvae}bffQrvY.?@@B7Nr&   r   r   )r   randomseedlinspacer.   r,  r   r   r1   r)  r   float16r-   r/   r   rQ   )rC   p0jac_fp64jac_fpr-  r2  r6  r9  r?  r)  r2   rD   rE   r*  r%  r!  ri   r$  s                 @@@@r$   test_fp"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 #8YYrzz-B*35t4				 jj"**bjj9E((5/%%C#%%e,B&tR2	BAQAS1D#A)-.023B%8Cs8d?"? :r&   c                    [         R                  " SS/5      n[        U R                  U R                  U5      n[        US:  5        [        U R                  U R                  U5      n[        US:  5        [         R                  " SS/5      n[        U R                  U R                  U5      n[        US:H  5        [        U R                  U R                  U5      n[        US:H  5        g )N      $
   r   r   rM   r   )r   r   r   r   r   r   r   r   rC   rD   accuracys      r$   test_check_derivative0TestApproxDerivativesDense.test_check_derivative  s    XXubk"#D$:$:$($:$:B@4 #D$:$:$($:$:B@4 XXsCj!#D$:$:$($:$:B@A#D$:$:$($:$:B@Ar&   c                     [         R                  " SS/5      n[        U R                  U R                  USS0S9n[        US:  5        g )NrK  rL  r   r   )r  r   )r   r   r   r   r   r   rM  s      r$   !test_check_derivative_with_kwargs<TestApproxDerivativesDense.test_check_derivative_with_kwargs	  sG    XXubk"#D$C$C$($C$C$&,12;8 	4 r&   r[   N)r   )rO   )(r\   r]   r^   r_   rj   rp   rw   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  rY   r  r  rH  rO  rR  r`   r[   r&   r$   rb   rb      s    ?I26@24<
::
:
::
:<99$77,7(9.+8#t"!r&   rb   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)TestApproxDerivativeSparsei  c                    [         R                  R                  S5        SU l        SS[         R                  " U R                  5      -   -  U l        SS[         R                  " U R                  5      -   -  U l        [         R                  " U R                  5      U l        SU R
                  S S S2   -  U R                  S S S2'   SU R                  SS S2   -  U R                  SS S2'   U R                  U R                  5      U l
        g )Nr   2   rX   r   rO   gP?r   )r   rA  rB  nr   rR   rS   emptyrD   jacJ_true)rC   s    r$   setup_method'TestApproxDerivativeSparse.setup_method  s    
		q!bii//0RYYtvv../((466" DGGCaCL0!!TWWQTT]21hhtww'r&   c                     USS  S-  US S S-  -
  n[         R                  " SSU-  45      [         R                  " SU-  S45      -   $ )Nr   r   rN   r   r   )r   hstack)rC   ri   es      r$   funTestApproxDerivativeSparse.fun  sM    abE1Hq"vqy yy!QU$ryy!a%'<<<r&   c                 R   UR                   n[        R                  " X"45      nSUS   -  US'   SUS   S-  -  US'   [        SUS-
  5       H>  nSXS-
     -  X4US-
  4'   S	X   S-  -  S
X   -  -
  X4U4'   SXS-      S-  -  X4US-   4'   M@     S	US   S-  -  US'   SUS   -  US'   U$ )Nr   r   r   r   r   r   r   r   i	   r   rN   rN   rN   r|   rN   r|   )sizer   r=   range)rC   ri   rX  Jis        r$   rZ  TestApproxDerivativeSparse.jac#  s    FFHHaVqt)$adAg+$q!a%Aq1v+AQhK!$'kAH,AdGa!fai-AQhK ! "qL&	2J&	r&   c                     [         R                  " X4[        S9nSUS'   SUS'   [        SUS-
  5       H  nSX#US-
  US-   24'   M     SUS'   SUS'   U$ )Nr(  r   re  rf  r   rh  ri  )r   r=   intrk  )rC   rX  r   rm  s       r$   r   $TestApproxDerivativeSparse.structure1  si    HHaV3'$$q!a%A!"AQAo !&	&	r&   c           	      .   U R                  U R                  5      n[        R                  " U R                  5      n[	        X5      n[        R
                  R                  U5        [	        X5      n[        / SQX4/[        R                  * U R                  /[        R                  U R                  /5       H  u  pVpx[        U R                  U R                  UXx4X4S9n	[        [        U	[         5      5        [#        U	R%                  5       U R&                  SS9  [        R(                  " U R                  S5      n
U
S S S2==   S-  ss'   [        U R                  U R                  UXU4S9n	[#        U	R%                  5       U R&                  S	S9  M     g )
Nr*   )r4   r  sparsityr   r   r   r   rN   )r4   r   rs  r   )r   rX  r   r   r   rA  shuffler   rA   rR   rS   r   ra  rD   r   
isinstancer   r   toarrayr[  	full_like)rC   r   r   r"   r#   r4   r!   lurl  r   s              r$   test_all#TestApproxDerivativeSparse.test_all<  s.   NN466"		$&&! *
		%  *$+,x.B&&$''"RVVTWW$5%7 FA "$((DGGF*+1+GAJq*-.AIIK4@||DGGT2HSqSMRM!$((DGGF+3&kKAAIIK4@%7r&   c                     U R                  U R                  5      n[        U R                  U R                  US9n[        UR                  5       U R                  SS9  g )N)rs  r   r   )r   rX  r   ra  rD   r   rv  r[  )rC   r   rl  s      r$   test_no_precomputed_groups5TestApproxDerivativeSparse.test_no_precomputed_groupsQ  s@    NN466"dhh!<		T[[t<r&   c                 f   [         R                  " U R                  U R                  4[        S9n[         R                  " U R                  5      nS H\  n[        U R                  U R                  US9n[        U R                  U R                  X4US9n[        XER                  5       SSS9  M^     g )Nr(  r*   r   )rs  r4   gV瞯<gVs<)r   r*  )
r   rP   rX  rp  r   r   ra  rD   r   rv  )rC   r   r!   r4   J_denseJ_sparses         r$   test_equivalence+TestApproxDerivativeSparse.test_equivalenceV  s    GGTVVTVV,C8	466"2F'$''&IG($''Y,?PHG%5%5%7!&U4	 3r&   c                 "  ^  U 4S jn[        T R                  UT R                  T R                  T R                  4S9n[        US:  5        [        T R                  UT R                  T R                  T R                  4S9n[        US:  5        g )Nc                 8   > [        TR                  U 5      5      $ re   )r   rZ  )ri   rC   s    r$   rZ  =TestApproxDerivativeSparse.test_check_derivative.<locals>.jaca  s    dhhqk**r&   r
  r   )r   ra  rD   rR   rS   r   )rC   rZ  rN  s   `  r$   rO  0TestApproxDerivativeSparse.test_check_derivative`  sr    	+ $DHHc477,0GGTWW+=?4 #DHHc477,0GGTWW+=?4 r&   )r[  rR   rX  rS   rD   N)r\   r]   r^   r_   r\  ra  rZ  r   rz  r}  r  rO  r`   r[   r&   r$   rU  rU    s+    	(=	A*=
4
!r&   rU  c                   b    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)"TestApproxDerivativeLinearOperatorim  c                 .    [         R                  " U5      $ re   rf   rh   s     r$   rj   4TestApproxDerivativeLinearOperator.fun_scalar_scalaro  rl   r&   c                 .    [         R                  " U5      $ re   rn   rh   s     r$   rp   4TestApproxDerivativeLinearOperator.jac_scalar_scalarr  rl   r&   c                     [         R                  " US   S-  [         R                  " US   5      [         R                  " US   5      /5      $ rs   rt   rh   s     r$   rw   4TestApproxDerivativeLinearOperator.fun_scalar_vectoru  ry   r&   c                     [         R                  " SUS   -  [         R                  " US   5      S-  [         R                  " US   5      /5      R	                  SS5      $ r{   r}   rh   s     r$   r   4TestApproxDerivativeLinearOperator.jac_scalar_vectorx  r   r&   c                 t    [         R                  " US   US   -  5      [         R                  " US   5      -  $ r   r   rh   s     r$   r   4TestApproxDerivativeLinearOperator.fun_vector_scalar|  r   r&   c           	      r   [         R                  " US   [         R                  " US   US   -  5      -  [         R                  " US   5      -  [         R                  " US   US   -  5      US   -  -   US   [         R                  " US   US   -  5      -  [         R                  " US   5      -  /5      $ r   r   rh   s     r$   r   4TestApproxDerivativeLinearOperator.jac_vector_scalar  r   r&   c                     [         R                  " US   [         R                  " US   5      -  US   [         R                  " US   5      -  US   S-  US   S-  -  /5      $ r   r   rh   s     r$   r   4TestApproxDerivativeLinearOperator.fun_vector_vector  r   r&   c                 Z   [         R                  " [         R                  " US   5      US   [         R                  " US   5      -  /US   * [         R                  " US   5      -  [         R                  " US   5      /SUS   S-  -  US   S-  -  SUS   S-  -  US   S-  -  //5      $ r   r   rh   s     r$   r   4TestApproxDerivativeLinearOperator.jac_vector_vector  r   r&   c                    Sn[        U R                  USSS9n[        U R                  USS9n[        U R                  USSS9nU R                  U5      n[        R                  R                  S5        [        S5       Hv  n[        R                  R                  S	SS
S9n[        UR                  U5      XW-  SS9  [        UR                  U5      XW-  SS9  [        UR                  U5      XW-  SS9  Mx     g )Nr   r+   Tr4   as_linear_operatorr  r,   r   rL  r   rj  r   r   h㈵>)
r   rj   rp   r   rA  rB  rk  uniformr   dotrC   rD   r   r   r   r   rm  r   s           r$   r   5TestApproxDerivativeLinearOperator.test_scalar_scalar  s    &t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-
		qrA		!!#r!5AJNN1-xz!%'JNN1-xz!%'JNN1-xz!%' r&   c                 j   Sn[        U R                  USSS9n[        U R                  USS9n[        U R                  USSS9nU R                  [        R                  " U5      5      n[        R
                  R                  S5        [        S5       H  n[        R
                  R                  S	SS
S9n[        UR                  U5      UR                  U5      SS9  [        UR                  U5      UR                  U5      SS9  [        UR                  U5      UR                  U5      SS9  M     g )Nr(   r+   Tr  r  r,   r   rL  r  r  r  r   r   r  )r   rw   r   r   r   rA  rB  rk  r  r   r  r  s           r$   r   5TestApproxDerivativeLinearOperator.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           	         [         R                  " SS/5      n[        U R                  USSS9n[        U R                  USS9n[        U R                  USSS9nU R	                  U5      n[         R
                  R                  S5        [        S	5       H  n[         R
                  R                  S
S	UR                  S9n[        UR                  U5      [         R                  " UR                  U5      5      SS9  [        UR                  U5      [         R                  " UR                  U5      5      SS9  [        UR                  U5      [         R                  " UR                  U5      5      SS9  M     g )Nr   r   r+   Tr  r  r,   r   rL  r  r  r   r   r  r   )r   r   r   r   r   rA  rB  rk  r  shaper   r  r   r  s           r$   r   5TestApproxDerivativeLinearOperator.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                    [         R                  " SS/5      n[        U R                  USSS9n[        U R                  USS9n[        U R                  USSS9nU R	                  U5      n[         R
                  R                  S5        [        S	5       H  n[         R
                  R                  S
S	UR                  S9n[        UR                  U5      UR                  U5      SS9  [        UR                  U5      UR                  U5      SS9  [        UR                  U5      UR                  U5      SS9  M     g )Nr   r   r+   Tr  r  r,   r   rL  r  r  r   r   r   r   )r   r   r   r   r   rA  rB  rk  r  r  r   r  r  s           r$   r   5TestApproxDerivativeLinearOperator.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           	          [         R                  " SS/5      n[        [        [        U R
                  USS[         R                  4S9  g )Nr   r   r+   r   r  )r   r   r   r   r   r   rA   )rC   rD   s     r$   test_exception1TestApproxDerivativeLinearOperator.test_exception  s9    XXvsm$j"3,,b&266{	<r&   r[   N)r\   r]   r^   r_   rj   rp   rw   r   r   r   r   r   r   r   r   r   r  r`   r[   r&   r$   r  r  m  sE    ?I2'*'*'*K$<r&   r  c                     S n [        U SS/SSS9n[        USS/5        [        U SS/SSS9n[        USS/5        [        U SS/SSS/S9n[        USS/5        [        U SS/SSS/S9n[        USS/5        [        U SS/SSS/S9n[        USS/5        [        U SS/SS[        R                  * S4S	9n[        USS/5        [        U SS/SSS[        R                  4S	9n[        USS/5        g )
Nc                 v    [         R                  " U S   S-   5      * [         R                  " U S   S-   5      -   $ r   )r   rQ   r1  s    r$   r2  "test_absolute_step_sign.<locals>.f  s2    qtax  266!A$(#333r&   rN   r+   r   r   r  r   r  )r4   r   r  )r   r   r   rA   )r2  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                  ~   / SQn [         R                  " / SQ5      n[         R                  " [         R                  5      R                  nUS-  US-  US-  S.n[         R                  " S5      nU  H  nX5   n[         R                  " UUS-  US-  U[         R
                  " US   5      -  /5      n[        S XU5      n[        X5        U* S:  R                  [        5      S-  S	-
  n	[        S U* XE5      n[        XU-  5        M     [         R                  " / S
Q5      n[         R                  " US   US   -  US   US   S-  US   [         R
                  " US   5      -  /5      n[        XaUS5      n[        X5        U* S:  R                  [        5      S-  S	-
  n	[        Xa* US5      n[        XU-  5        g )Nr*   )r   r   r   g     j@r(   r)   r   r   r   r   r   )rO   r   rL  r'  r+   )
r   r   r-   r.   r/   rQ   r   r   r,  float)
methodsrD   r2   r3   r   r4   r   correct_stepr   sign_x0s
             r$   test__compute_absolute_stepr  !  s   *G	#	$B
((2::

"
"C8:3hM
 
#B (xx!)B!)B!)BFF2a5M!9!; <
 *$?/3!8##E*Q.2)$R@L"89  xx)*H88Xa[2a50*95%a[2-%a[266"Q%=8: ;L
 &hB	BHH+sax&*Q.G%hRCHH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   rb   rU  r  r  r  r[   r&   r$   <module>r     sq       @ @ * ; ;< <
%8!
HG9 G9Tv! v!rX! X!v|< |<~2'j(6r&   