
    BpjG                        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  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)xp_result_type)_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           ^/var/www/html/pdf-tiff/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-point3-pointcs)r   finfofloat64epsr   r   
complex128float32)EPSrelative_stepmethods      r)   test_correct_fp_epsr;   /   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)TestAdjustSchemeToBoundsS   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_boundsT   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   rA   r   )r   rT   r   rB   )FTT)	r   r    onesr   r   absr   rH   r   )rI   rJ   lbubrK   rN   _rO   s           r)   test_with_bound(TestAdjustSchemeToBounds.test_with_boundp   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?rS   gQ?皙r   rA   gQr   g?rB   FTgQ?gQ)r   r    r   r   r   )rI   rX   rY   rJ   rK   rN   rZ   rO   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__rP   r[   r_   __static_attributes__ra   r+   r)   r=   r=   S   s    $8?,9r+   r=   c                   x   \ 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S0S 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(\R4                  RS                  S%\*RV                  \*RX                  \*RZ                  45      \R4                  RS                  S&\*RV                  \*RX                  \*RZ                  45      \R4                  RS                  S'S(S)/5      S* 5       5       5       r.S+ r/S, r0S-r1g.)1TestApproxDerivativesDense   c                 .    [         R                  " U5      $ Nr   sinhrI   xs     r)   fun_scalar_scalar,TestApproxDerivativesDense.fun_scalar_scalar       wwqzr+   c                 .    [         R                  " U5      $ rk   r   coshrn   s     r)   jac_scalar_scalar,TestApproxDerivativesDense.jac_scalar_scalar   rr   r+   c                     [         R                  " US   S-  [         R                  " US   5      [         R                  " US   5      /5      $ Nr   r   r   r    tanexprn   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   rT   r   r   r    cosr|   reshapern   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logrn   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   rz   rn   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   rn   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   rn   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   rI   ro   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   rn   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    r|   rI   ro   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   rW   nanrn   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   rn   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   rn   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   rn   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      $ rk   )r   r   itemmathr|   )rI   ro   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   r0   r:   r2   ư>rtol&.>-q=r   rp   rv   r   rI   rJ   
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   r0   "\O>r:   abs_step)r   r2   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   r0   r:   workers)r   r2   r   r   r   r   )r   r   r}   mapr   r   
atleast_1dr   )rI   rJ   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   r0   T)r:   r   full_output)r   r   r2   )r:   r   nfevr   )r   )r   r   r   r	   r   r   )rI   rJ   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   r0   r   r2   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   r0   r   r   )r   rel_stepr2   r   r   A:)>r   )r   r    r   r   rG   r   r   r   s         r)   test_vector_scalar_abs_step6TestApproxDerivativesDense.test_vector_scalar_abs_stepL  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皙?r0   r   r   r2   r   h㈵>r   r   r   )r   r    r   r   r   r   r   )rI   rJ   r   r   r   r   r   s          r)   test_vector_vector-TestApproxDerivativesDense.test_vector_vectorZ  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)rI   rJ   r  s      r)   test_wrong_dimensions0TestApproxDerivativesDense.test_wrong_dimensionsg  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^   rU   r0   g-C6?)r:   r  )r  r@   r   )r   r    r   r   r   r   )rI   rJ   r   r   r   s        r)   test_custom_rel_step/TestApproxDerivativesDense.test_custom_rel_stepo  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         rS   r   )r   gưr  r0   )r:   r  r  argskwargsbounds)r  r  r  r  r   r   r   r   )r   r    r   r   r   dictr   )rI   rJ   r   r   rX   rY   r  r  r   r   r   s              r)   test_options'TestApproxDerivativesDense.test_optionsy  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   r0   r:   r   r   r   )	r   rV   r    r  r  r   r   r   r   )rI   rX   rY   rJ   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   rG   )rI   rX   rY   rJ   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&.!>r0   r&  r   r   r:   r  r   r%  r  r   )r   r    r   r   r   r   )rI   rJ   rX   rY   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   rS   r0   r   r.  r/  r   r   )r   r   r   r   )rI   rX   rY   rJ   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   r0   r   r   r   r   r2   )r   r   r   r  	TypeErrorr!  )rI   rJ   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      nS mU4S jm[         R                  " SSS[         R                  S9mUR                  S[         R                  S9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[        XCSS9  UUU4S jn[        XRR                  [         R                  5      S	S9n[        XCSS9  UR                  [         R                  :X  d   e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	" XXhU5      n[        XlS	US9U" U5      -
  m[        T5      U:  a  M   e   g )Nr   c                     U S   U S   U-  -   $ r   ra   )pro   s     r)   func0TestApproxDerivativesDense.test_fp.<locals>.func  s    Q4!A$(?"r+   c                    > T" X5      U-
  $ rk   ra   )r;  ro   yr<  s      r)   err/TestApproxDerivativesDense.test_fp.<locals>.err  s    :>!r+   r   d   dtype)sizerD  r  r0   )r:   r  MbP?)atolc                    > U R                   [        R                  :X  d   eT" U TT5      R                  [        R                  5      $ rk   )rD  r   r7   astype)r;  r@  ro   r?  s    r)   err_fp324TestApproxDerivativesDense.test_fp.<locals>.err_fp32  s6    77bjj(((q!Q<&&rzz22r+   r   c                 .    [         R                  " U 5      $ rk   r   r   ro   s    r)   f-TestApproxDerivativesDense.test_fp.<locals>.f	      66!9r+   c                 .    [         R                  " U 5      $ rk   )r   r   rN  s    r)   g-TestApproxDerivativesDense.test_fp.<locals>.g  rQ  r+   c                 0    [         R                  " U 5      * $ rk   rM  rN  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   rW   )rK   rJ   rO  rV  r8   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default_rnglinspacer4   r    r   rI  r7   rD  r   float16r3   r5   r   rW   )rI   rngp0jac_fp64jac_fprJ  rO  rS  rV  r\  rD  r8   rJ   rK   rG  r@  r<  ro   r?  s                  @@@@r)   test_fp"TestApproxDerivativesDense.test_fp  s    ii##A&	#	" KK1c4JJCrzzJ2XXtTl#$S"YaVL #3		"**(=*31a&B2q!}""bjj000t4	3 #8YYrzz-B*35t4||rzz)))				 jj"**bjj9E((5/%%C#%%e,B&tR2	BAQAS1D#A)-.023B%8Cs8d?"? :r+   x0_dtypef0_dtyper:   r0   r1   c                 h  ^ [         R                  " / SQUS9nU4S jn[        UU" U5      S[         S9n[        XTUS9nUR                  U:X  d   e[        XT[         R
                  " S5      US9nUR                  U:X  d   e[        XT[         R
                  " S5      US	9nUR                  U:X  d   eg )
N)r   g      @g      @rC  c                 &   > T" [        U 5      5      $ rk   r   )ro   ri  s    r)   rO  6TestApproxDerivativesDense.test_check_dtype.<locals>.f-  s    E!H%%r+   T)force_floatingr   r   rU   )r  r:   )r   r:   )r   r    r   r   rD  ra  )rI   rh  ri  r:   ro   rO  promoted_typerS  s     `     r)   test_check_dtype+TestApproxDerivativesDense.test_check_dtype#  s     HH_H5	& '	aD	
 a62ww-''' aRZZ_VLww-'''aRZZ_VLww-'''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   rS   r   )r   r    r   r   r   r   r   r   rI   rJ   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 )Nrr  rs  r   r   )r  r   )r   r    r   r   r   r   rt  s      r)   !test_check_derivative_with_kwargs<TestApproxDerivativesDense.test_check_derivative_with_kwargsQ  sG    XXubk"#D$C$C$($C$C$&,12;8 	4 r+   ra   N)r   )rU   )2rb   rc   rd   re   rp   rv   r}   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_   r3  r7  rf  parametrizer   ra  r7   r4   ro  rv  ry  rf   ra   r+   r)   rh   rh      s\   ?I26@24<
::: [[3    D
:::<99$77,7(9.+9#x [[Z"**bjj"**)MN[[Z"**bjj"**)MN[[X	9'=>( ? O O(4"!r+   rh   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)TestApproxDerivativeSparseiZ  c                 $   [         R                  R                  S5      U l        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 )Ni72   r^   r   rU   gP?r   )r   r^  r_  rb  nr   rX   rY   emptyrJ   jacJ_true)rI   s    r)   setup_method'TestApproxDerivativeSparse.setup_method\  s    99((3!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   rT   r   r   )r   hstack)rI   ro   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   rT   rT   rT   r   rT   r   )rE  r   rC   range)rI   ro   r  Jis        r)   r  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$ )NrC  r   r  r  r   r  r  )r   rC   intr  )rI   r  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U 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/   )r:   r   sparsityr   r   r   r   rT   )r:   r  r  r   r  )r!   r  r   r   r   rb  shuffler   r   rG   rX   rY   r   r   r  rJ   r   
isinstancer
   r   toarrayr  	full_like)rI   r#   r$   r'   r(   r   r:   r&   lumfr  r  s                r)   test_all#TestApproxDerivativeSparse.test_all  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   8D0F11
F?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!   r  r   r  rJ   r   r  r  )rI   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 )NrC  r/   r   )r  r:   gV瞯<gVs<)r   rG  )
r   rV   r  r  r   r   r  rJ   r   r  )rI   r!   r&   r:   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      $ rk   )r
   r  )ro   rI   s    r)   r  =TestApproxDerivativeSparse.test_check_derivative.<locals>.jac  s    TXXa[))r+   r%  r   )r   r  rJ   rX   rY   r   )rI   r  ru  s   `  r)   rv  0TestApproxDerivativeSparse.test_check_derivative  sr    	* $DHHc477,0GGTWW+=?4 #DHHc477,0GGTWW+=?4 r+   )r  rX   r  rb  rY   rJ   N)rb   rc   rd   re   r  r  r  r!   r{  r|  r}  r  r  r  rv  rf   ra   r+   r)   r  r  Z  sJ    	(=	 [[1E E0=
4
!r+   r  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      $ rk   rl   rn   s     r)   rp   4TestApproxDerivativeLinearOperator.fun_scalar_scalar  rr   r+   c                 .    [         R                  " U5      $ rk   rt   rn   s     r)   rv   4TestApproxDerivativeLinearOperator.jac_scalar_scalar  rr   r+   c                     [         R                  " US   S-  [         R                  " US   5      [         R                  " US   5      /5      $ ry   rz   rn   s     r)   r}   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   rn   s     r)   r   4TestApproxDerivativeLinearOperator.jac_scalar_vector  r   r+   c                 t    [         R                  " US   US   -  5      [         R                  " US   5      -  $ r   r   rn   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   rn   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   rn   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   rn   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      n[        S5       Hh  nUR                  S	SS
S9n[        UR                  U5      XX-  SS9  [        UR                  U5      XX-  SS9  [        UR                  U5      XX-  SS9  Mj     g )Nr   r0   Tr:   as_linear_operatorr  r2      nV)rs  r   rE  r  r   h㈵>)
r   rp   rv   r   r^  r_  r  uniformr   dot	rI   rJ   r   r   r   r   rb  r  r;  s	            r)   r   5TestApproxDerivativeLinearOperator.test_scalar_scalar  s    &t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-ii##N3rAC$/AJNN1-xz!%'JNN1-xz!%'JNN1-xz!%' r+   c                 N   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      n[        S5       H  nU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-   r0   Tr  r  r2   r  rs  r  r  r  r  r   r  )r   r}   r   r   r   r^  r_  r  r  r   r  r  s	            r)   r   5TestApproxDerivativeLinearOperator.test_scalar_vector  s   &t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"--*;<ii##N3rAC$/A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      n[        S	5       H  nU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   r0   Tr  r  r2   r  rs  r  r  r  r   r  r  )r   r    r   r   r   r^  r_  r  r  shaper   r  r   r  s	            r)   r  5TestApproxDerivativeLinearOperator.test_vector_scalar
  s+   XXudm$&t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-ii##N3rAC"((3AJNN1-r}}X\\!_/M!%'JNN1-r}}X\\!_/M!%'JNN1-r}}X\\!_/M!%' r+   c                 f   [         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      n[        S	5       H  nU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  r0   Tr  r  r2   r  rs  r  r  r  r   r   r  )r   r    r   r   r   r^  r_  r  r  r  r   r  r  s	            r)   r  5TestApproxDerivativeLinearOperator.test_vector_vector  s   XXvsm$&t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-ii##N3rAC"((3A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  r0   r   r&  )r   r    r  r  r   r   rG   )rI   rJ   s     r)   test_exception1TestApproxDerivativeLinearOperator.test_exception1  s9    XXvsm$j"3,,b&266{	<r+   ra   N)rb   rc   rd   re   rp   rv   r}   r   r   r   r   r   r   r   r  r  r  rf   ra   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   rW   rN  s    r)   rO  "test_absolute_step_sign.<locals>.fA  s2    qtax  266!A$(#333r+   rT   r0   r   r   r  r   r2  )r:   r   r   )r   r   r   rG   )rO  grads     r)   test_absolute_step_signr  8  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        [         R                  " / SQ[         R                  S9n[        S XS5      nUR                  [         R                  :X  d   e[        S XS5      nUR                  [         R                  :X  d   e[         R                  " / SQ[         R                  S9n[        S XS5      nUR                  [         R                  :X  d   e[        S XS5      nUR                  [         R                  :X  d   e[         R                  " / SQ[         R                  S9n[         R                  " S[         R                  S9n[        XaUS5      nUR                  [         R                  :X  d   e[         R                  " / SQ[         R                  S9n[        XaUS5      nUR                  [         R                  :X  d   e[         R                  " / SQ[         R                  S9n[        XaUS5      nUR                  [         R                  :X  d   eg )Nr/   )r  r   r   g     j@r-   r.   r   r   r   r   r   )rU   r   rs  rB  r0   rC  r1   )rU   r   r   r  )rF  r   r   rs  )r   r    r3   r4   r5   rW   r   r   rI  floatr7   rD  ra  )
methodsrJ   r8   r9   r  r:   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5 
#2::	6B%dBI>H>>RZZ'''%dBI>H>>RZZ'''	/	4B%dBI>H>>RZZ'''%dBI>H>>RZZ'''	""**	5B	#RZZ	(B%hB	BH>>RZZ'''	#2::	6B%hB	BH>>RZZ'''	""**	5B%hB	BH>>RZZ'''r+   )&r   	itertoolsr   numpyr   numpy.testingr   r   r   r{  r   r  scipy._lib._utilr   r	   scipy.sparser
   r   r   scipy._lib._array_apir   scipy.optimize._numdiffr   r   r   r   r   r   scipy.optimizer   r*   r;   r=   rh   r  r  r  r  ra   r+   r)   <module>r     s       @ @  * ? 8 8 0< < !%8!
HG9 G9Tz! z!z\! \!~|< |<~2'jC(r+   