
    -iφ                         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	r	S SK	J
r  S SKJr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 SK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)
MapWrapper_ScalarFunctionWrapper)	csr_array	csc_array	lil_array)_adjust_scheme_to_boundsapprox_derivativecheck_derivativegroup_columns_eps_for_method_compute_absolute_step)rosenc                     / 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)Y	B	i 		!hh12q(V)"hh12q(V) C 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_epsr8   .   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)TestAdjustSchemeToBoundsR   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_boundsS   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   rQ   r   r?   )FTT)	r   r   onesr   r   absr   rE   r   )rF   rG   lbubrH   rK   _rL   s           r'   test_with_bound(TestAdjustSchemeToBounds.test_with_boundo   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?rP   gQ?皙r   r>   gQr   g?r?   FTgQ?gQ)r   r   r   r   r   )rF   rU   rV   rG   rH   rK   rW   rL   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__rM   rX   r\   __static_attributes__r^   r)   r'   r:   r:   R   s    $8?,9r)   r:   c                   0   \ 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\R4                  R7                  S5      S 5       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rF   xs     r'   fun_scalar_scalar,TestApproxDerivativesDense.fun_scalar_scalar       wwqzr)   c                 .    [         R                  " U5      $ rh   r   coshrk   s     r'   jac_scalar_scalar,TestApproxDerivativesDense.jac_scalar_scalar   ro   r)   c                     [         R                  " US   S-  [         R                  " US   5      [         R                  " US   5      /5      $ Nr   r   r   r   tanexprk   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   rQ   r   r   r   cosry   reshaperk   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logrk   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   rw   rk   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   rk   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   rk   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   rF   rl   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   rk   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   ry   rF   rl   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   rT   nanrk   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   rk   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   rk   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   rk   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      $ rh   )r   r   itemmathry   )rF   rl   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.   r7   r/   ư>rtol&.>-q=r   rm   rs   r   rF   rG   
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>r7   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                 d   Sn[        S5       n[        U R                  USUS9nS S S 5        [        U R                  U[        S9n[        U R                  USS S9nU R	                  [
        R                  " U5      5      n[        WUSS9  [        XFS	S9  [        XVS
S9  g ! , (       d  f       N= f)Nr+   r   r.   r7   workers)r   r/   r   r   r   r   )r   r   rz   mapr   r   
atleast_1dr   )rF   rG   mapperr   r   r   r   s          r'   test_scalar_vector-TestApproxDerivativesDense.test_scalar_vector  s    ]f*4+A+A22;VMJ  't'='=r3O
&t'='=r.2DB
))"--*;<
H48
48
59 ]s   B!!
B/g      @c           	         / SQn[        S5       n[        [        USUSS9u  p4[        [        UUSS9u  pVS S S 5        [        [        USSSS9u  px[        [        5      n	[        XSSS9u  p[	        US	   U	R
                  5        S
U	l        [        XSS9u  p[	        US	   U	R
                  5        S
U	l        [        XSSS9u  p[	        US	   U	R
                  5        [	        WS	   US	   5        [	        WS	   US	   5        [	        US	   US	   5        [	        WU
5        [	        WU5        [	        X~5        g ! , (       d  f       GN
= f)N)r+   g      ?       @r   r.   T)r7   r   full_output)r   r   r/   )r7   r   nfevr   )r   )r   r   r   r	   r   r   )rF   rG   r   md2mdct2md3mdct3md4mdct4sfrd2dct2d3dct3d4dct4s                   r'   !test_workers_evaluations_and_nfev<TestApproxDerivativesDense.test_workers_evaluations_and_nfev  s9    ]f*5"2;V7;=JC +5"39tMJC	  'ub.2A379
 %U+$SYDQT&\388,$S$?T&\388,$STtLT&\388,U6]DL1U6]DL1U6]DL1S"S"S9 ]s   &D99
E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   rD   r   r   r   s         r'   test_vector_scalar_abs_step6TestApproxDerivativesDense.test_vector_scalar_abs_stepK  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[	        S5       n[        U R                  USUS9nS S S 5        U R                  U5      n[        X&SS	9  [        X6S
S	9  [        WUSS	9  g ! , (       d  f       N?= f)N      Y皙?r.   r   r   r/   r   h㈵>r   r   r   )r   r   r   r   r   r   r   )rF   rG   r   r   r   r   r   s          r'   test_vector_vector-TestApproxDerivativesDense.test_vector_vectorY  s    XXvsm$&t'='=r.79
&t'='=rB
]f*4+A+A226HJ  ))"-
48
48
H59 ]s   B
B-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)rF   rG   r  s      r'   test_wrong_dimensions0TestApproxDerivativesDense.test_wrong_dimensionsf  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 )	Nr[   rR   r.   g-C6?)r7   r  )r  r=   r   )r   r   r   r   r   r   )rF   rG   r   r   r   s        r'   test_custom_rel_step/TestApproxDerivativesDense.test_custom_rel_stepn  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         rP   r   )r   gưr  r.   )r7   r  r  argskwargsbounds)r  r  r  r  r  r   r   r   )r   r   r   r   r   dictr   )rF   rG   r   r   rU   rV   r  r  r   r   r   s              r'   test_options'TestApproxDerivativesDense.test_optionsx  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.   r7   r  r   r   )	r   rS   r   r  r  r   r   r   r   )rF   rU   rV   rG   jac_diffr   s         r'   test_with_bounds_2_point3TestApproxDerivativesDense.test_with_bounds_2_point  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   rD   )rF   rU   rV   rG   r   r$  s         r'   test_with_bounds_3_point3TestApproxDerivativesDense.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                 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   r7   r  r  r"  r  r  )r   r   r   r   r   r   )rF   rG   rU   rV   r   r$  s         r'   r\   ,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   rP   r.   r   r+  r,  r   r   )r   r   r   r   )rF   rU   rV   rG   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  )rF   rG   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^   )prl   s     r'   func0TestApproxDerivativesDense.test_fp.<locals>.func  s    Q4!A$(?"r)   c                    > T" X5      U-
  $ rh   r^   )r8  rl   yr9  s      r'   err/TestApproxDerivativesDense.test_fp.<locals>.err  s    :>!r)   r   d   dtyper  r.   )r7   r  gMbP?)atolc                    > U R                   [        R                  :X  d   eT" U TT5      R                  [        R                  5      $ rh   )rA  r   r4   astype)r8  r=  rl   r<  s    r'   err_fp324TestApproxDerivativesDense.test_fp.<locals>.err_fp32  s6    77bjj(((q!Q<&&rzz22r)   r   c                 .    [         R                  " U 5      $ rh   r   r   rl   s    r'   f-TestApproxDerivativesDense.test_fp.<locals>.f      66!9r)   c                 .    [         R                  " U 5      $ rh   )r   r   rI  s    r'   g-TestApproxDerivativesDense.test_fp.<locals>.g	  rL  r)   c                 0    [         R                  " U 5      * $ rh   rH  rI  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   rT   )rH   rG   rJ  rQ  r5   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linspacer1   rD  r   r   r4   rA  r   float16r0   r2   r   rT   )rF   p0jac_fp64jac_fprE  rJ  rN  rQ  rW  rA  r5   rG   rH   rB  r=  r9  rl   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   rP   r   )r   r   r   r   r   r   r   r   rF   rG   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 )Nrc  rd  r   r   )r  r   )r   r   r   r   r   r   re  s      r'   !test_check_derivative_with_kwargs<TestApproxDerivativesDense.test_check_derivative_with_kwargs1  sG    XXubk"#D$C$C$($C$C$&,12;8 	4 r)   r^   N)r   )rR   ),r_   r`   ra   rb   rm   rs   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   pytestmark	fail_slowr   r  r  r  r  r  r  r%  r(  r\   r0  r4  r`  rg  rj  rc   r^   r)   r'   re   re      s    ?I26@24<
::: [[3    D
:::<99$77,7(9.+8#t"!r)   re   c                       \ rS rSrS rS rS rS r\R                  R                  S5      S 5       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   r[   r   rR   gP?r   )r   rY  rZ  nr   rU   rV   emptyrG   jacJ_true)rF   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   rQ   r   r   )r   hstack)rF   rl   es      r'   funTestApproxDerivativeSparse.funG  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   rQ   rQ   rQ   r   rQ   r   )sizer   r@   range)rF   rl   rs  Jis        r'   ru  TestApproxDerivativeSparse.jacK  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   r  r  r   r  r  )r   r@   intr  )rF   rs  r!   r  s       r'   r   $TestApproxDerivativeSparse.structureY  si    HHaV3'$$q!a%A!"AQAo !&	&	r)   r   c                    U R                  U R                  5      n[        R                  " U R                  5      n[	        X5      n[        R
                  R                  U5        [	        X5      n[        S5       n[        / SQX4/[        R                  * U R                  /[        R                  U R                  /[        U/5       H  u  pgpn
[        U R                  U R                  UX4X4U
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U
S9n['        UR)                  5       U R*                  S	S9  M     S S S 5        g ! , (       d  f       g = f)
Nr   r-   )r7   r  sparsityr   r   r   r   rQ   )r7   r  r  r   r  )r   rs  r   r   r   rY  shuffler   r   rD   rU   rV   r   r   r|  rG   r   
isinstancer
   r   toarrayrv  	full_like)rF   r!   r"   r%   r&   r   r7   r$   lumfr  r  s                r'   test_all#TestApproxDerivativeSparse.test_alld  sS   NN466"		$&&! *
		%  *]f,3082FffWdgg&(9C=-J(b &dhh./Vqk.02 
1i01		T[[tD<<61#%dhh/7f+.02  		T[[tD-J ]]s   <D0F55
G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)r  r   r   )r   rs  r   r|  rG   r   r  rv  )rF   r!   r  s      r'   test_no_precomputed_groups5TestApproxDerivativeSparse.test_no_precomputed_groups}  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   )r  r7   gV瞯<gVs<)r   rB  )
r   rS   rs  r  r   r   r|  rG   r   r  )rF   r   r$   r7   J_denseJ_sparses         r'   test_equivalence+TestApproxDerivativeSparse.test_equivalence  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      $ rh   )r
   ru  )rl   rF   s    r'   ru  =TestApproxDerivativeSparse.test_check_derivative.<locals>.jac  s    TXXa[))r)   r"  r   )r   r|  rG   rU   rV   r   )rF   ru  rf  s   `  r'   rg  0TestApproxDerivativeSparse.test_check_derivative  sr    	* $DHHc477,0GGTWW+=?4 #DHHc477,0GGTWW+=?4 r)   )rv  rU   rs  rV   rG   N)r_   r`   ra   rb   rw  r|  ru  r   rl  rm  rn  r  r  r  rg  rc   r^   r)   r'   rp  rp  :  sJ    	(=	 [[1E E0=
4
!r)   rp  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)"TestApproxDerivativeLinearOperatori  c                 .    [         R                  " U5      $ rh   ri   rk   s     r'   rm   4TestApproxDerivativeLinearOperator.fun_scalar_scalar  ro   r)   c                 .    [         R                  " U5      $ rh   rq   rk   s     r'   rs   4TestApproxDerivativeLinearOperator.jac_scalar_scalar  ro   r)   c                     [         R                  " US   S-  [         R                  " US   5      [         R                  " US   5      /5      $ rv   rw   rk   s     r'   rz   4TestApproxDerivativeLinearOperator.fun_scalar_vector  r|   r)   c                     [         R                  " SUS   -  [         R                  " US   5      S-  [         R                  " US   5      /5      R	                  SS5      $ r~   r   rk   s     r'   r   4TestApproxDerivativeLinearOperator.jac_scalar_vector  r   r)   c                 t    [         R                  " US   US   -  5      [         R                  " US   5      -  $ r   r   rk   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   rk   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   rk   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   rk   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r7   as_linear_operatorr  r/   r   rd  r   r  r  r   h㈵>)
r   rm   rs   r   rY  rZ  r  uniformr   dotrF   rG   r   r   r   r   r  r8  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   rd  r  r  r  r  r   r  )r   rz   r   r   r   rY  rZ  r  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   rd  r  r  r  r   r  r  )r   r   r   r   r   rY  rZ  r  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   rd  r  r  r  r   r   r  )r   r   r   r   r   rY  rZ  r  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   rD   )rF   rG   s     r'   test_exception1TestApproxDerivativeLinearOperator.test_exception  s9    XXvsm$j"3,,b&266{	<r)   r^   N)r_   r`   ra   rb   rm   rs   rz   r   r   r   r   r   r   r   r  r  r  rc   r^   r)   r'   r  r    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   rT   rI  s    r'   rJ  "test_absolute_step_sign.<locals>.f!  s2    qtax  266!A$(#333r)   rQ   r.   r   r   r  r   r/  )r7   r   r  )r   r   r   rD   )rJ  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   )rR   r   rd  r?  r.   )
r   r   r0   r1   r2   rT   r   r   rD  float)
methodsrG   r5   r6   r  r7   r  correct_stepr   sign_x0s
             r'   test__compute_absolute_stepr  M  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   rl  r   r  scipy._lib._utilr   r	   scipy.sparser
   r   r   scipy.optimize._numdiffr   r   r   r   r   r   scipy.optimizer   r(   r8   r:   re   rp  r  r  r  r^   r)   r'   <module>r     s|       @ @  * ? 8 8< < !%8!
HG9 G9T[! [!|\! \!~|< |<~2'j(6r)   