
    >qjG                        d dl Z d dlmZ d dlZd dlmZmZmZ d dl	Z	d dl	m
Z d dlmZmZ d dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZ d
 Zd Z G d d      Z  G d d      Z! G d d      Z" G d d      Z#d Z$d Z%y)    N)product)assert_allcloseassert_equalassert_)raises)
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                     g dg dg dg dg dg dg dg} t         j                  t        t        t        fD ]  } ||       }t        j
                  d      }t        j                  g d	      }t        ||      }t        ||       g d
}t        j                  g d      }t        ||      }t        ||        t              }t        |      }t        ||       y )N)   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r      )r   r      r   r   r   )r   r            r   )r   r   r   r   r   r   )	npasarrayr
   r   r   arangearrayr   r   )	structure	transformAordergroups_truegroupsgroups_1groups_2s           a/opt/rentech/trading_bot/.venv/lib/python3.12/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[)
* QHQH8$    c                  ,   t        j                  t         j                        j                  } | dz  | dz  | dz  d}dD ]n  }t	        t        t         j                  t         j                  |      ||          t	        t        t         j                  t         j                  |      ||          p t        j                  t         j                        j                  } | dz  | dz  | dz  d}dD ]  }t	        t        t         j                  t         j                  |      ||          t	        t        t         j                  t         j                  |      ||          t	        t        t         j                  t         j                  |      ||           y )N      ?UUUUUU?2-point3-pointcs)r   finfofloat64epsr   r   
complex128float32)EPSrelative_stepmethods      r)   test_correct_fp_epsr;   /   sH   
((2::

"
"C #S"Sz8%M / 
BJJ

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

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

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

F;&!	

r+   c                       e Zd Zd Zd Zd Zy)TestAdjustSchemeToBoundsc                    t        j                  d      }t        j                  dd      }t        j                  |      }t        j                  |      }|j	                  t         j
                          |j	                  t         j
                         t        ||dd||      \  }}t        ||       t        t        j                  |             t        ||dd||      \  }}t        ||       t        t        j                  |             t        ||dd||      \  }}t        ||       t        t        j                  |              t        ||dd||      \  }}t        ||       t        t        j                  |              y )Nr   {Gz?r   1-sidedr   2-sided)
r   zerosfull
empty_likefillinfr   r   r   all)selfx0h	inf_lower	inf_upper
h_adjusted	one_sideds          r)   test_no_boundsz'TestAdjustSchemeToBounds.test_no_boundsT   s=   XXa[GGAtMM"%	MM"%	wrvv 81iI!7
I
A&y!" 81iI!7
I
A&y!" 81iI!7
I
A&	z"# 81iI!7
I
A&	z"#r+   c                    t        j                  g d      }t        j                  d       }t        j                  d      }t        j                  g d      dz  }t        ||dd||      \  }}t	        ||       t        ||dd||      \  }}t	        |t        j                  g d      dz         t        ||dd	||      \  }}t	        |t        j
                  |             t        t        j                  |              t        ||dd	||      \  }}t	        |t        j                  g d      dz         t        |t        j                  g d
             y )N)        g333333?g333333r   )r   r   皙?r   r@   r   )r   rR   r   rA   )FTT)	r   r    onesr   r   absr   rG   r   )rH   rI   lbubrJ   rM   _rN   s           r)   test_with_boundz(TestAdjustSchemeToBounds.test_with_boundp   s   XX()ggaj[WWQZHHZ 4'0Q9b"M
A
A&0Q9b"M
A
BHHZ$84$?@ 81iR!)
I
BFF1I.	z"# 81iR!)
I
BHHZ$84$?@Y)< =>r+   c                    t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        ||dd||      \  }}t        |t        j                  ddg             t        ||d	d||      \  }}t        |t        j                  d
dg             t        ||dd||      \  }}t        |t        j                  ddg             t	        |t        j                  ddg             t        ||d	d||      \  }}t        |t        j                  ddg             t	        |t        j                  ddg             y )NgQg?rQ   gQ?皙r   r@   gQr   g?rA   FTgQ?gQ)r   r    r   r   r   )rH   rV   rW   rI   rJ   rM   rX   rN   s           r)   test_tight_boundsz*TestAdjustSchemeToBounds.test_tight_bounds   s<   XXuen%XXtTl#XXsDk"HHdD\"0Q9b"M
A
BHHdE]$;<0Q9b"M
A
BHHeU^$<= 81iR!)
I
BHHdE]$;<Y% 78 81iR!)
I
BHHeV_$=>Y% 78r+   N)__name__
__module____qualname__rO   rY   r\    r+   r)   r=   r=   S   s    $8?,9r+   r=   c                   l   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd-dZd.dZd Zd Zd Zd Zd Zd Zd Zd Zej2                  j5                  d      d        Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'ej2                  jQ                  d$e)jT                  e)jV                  e)jX                  f      ej2                  jQ                  d%e)jT                  e)jV                  e)jX                  f      ej2                  jQ                  d&d'd(g      d)                      Z-d* Z.d+ Z/y,)/TestApproxDerivativesDensec                 ,    t        j                  |      S Nr   sinhrH   xs     r)   fun_scalar_scalarz,TestApproxDerivativesDense.fun_scalar_scalar       wwqzr+   c                 ,    t        j                  |      S rd   r   coshrg   s     r)   jac_scalar_scalarz,TestApproxDerivativesDense.jac_scalar_scalar   rj   r+   c                     t        j                  |d   dz  t        j                  |d         t        j                  |d         g      S Nr   r   r   r    tanexprg   s     r)   fun_scalar_vectorz,TestApproxDerivativesDense.fun_scalar_vector   8    xx1q"&&1,qt=>>r+   c                     t        j                  d|d   z  t        j                  |d         dz  t        j                  |d         g      j	                  dd      S Nr   r   rR   r   r   r    cosrs   reshaperg   s     r)   jac_scalar_vectorz,TestApproxDerivativesDense.jac_scalar_vector   N    xx1Xrvvad|r)266!A$<8::A'"a.	Ir+   c                 p    t        j                  |d   |d   z        t        j                  |d         z  S Nr   r   r   sinlogrg   s     r)   fun_vector_scalarz,TestApproxDerivativesDense.fun_vector_scalar   .    vvadQqTk"RVVAaD\11r+   c                     t        j                  |dz  t        j                  |      t        j                  |      g      S Nr   rq   rg   s     r)   wrong_dimensions_funz/TestApproxDerivativesDense.wrong_dimensions_fun   s,    xxArvvay"&&)455r+   c           	      f   t        j                  |d   t        j                  |d   |d   z        z  t        j                  |d         z  t        j                  |d   |d   z        |d   z  z   |d   t        j                  |d   |d   z        z  t        j                  |d         z  g      S Nr   r   r   r    rz   r   r   rg   s     r)   jac_vector_scalarz,TestApproxDerivativesDense.jac_vector_scalar       xxaD266!A$1+&&!5FF1Q4!A$;!A$&'aD266!A$1+&&!5
  	r+   c                     t        j                  |d   t        j                  |d         z  |d   t        j                  |d         z  |d   dz  |d   dz  z  g      S Nr   r   r         ࿩r   r    r   rz   rg   s     r)   fun_vector_vectorz,TestApproxDerivativesDense.fun_vector_vector   `    xxaD266!A$<aD266!A$<aDAI!$
  	r+   c                     |dk(  sJ t        j                  |d   t        j                  |d         z  |d   t        j                  |d         z  |d   dz  |d   dz  z  g      S )=Used to test passing custom arguments with check_derivative()*   r   r   r   r   r   rH   rh   args      r)   fun_vector_vector_with_argz5TestApproxDerivativesDense.fun_vector_vector_with_arg   sl    byyxxaD266!A$<aD266!A$<aDAI!$
  	r+   c                 P   t        j                  t        j                  |d         |d   t        j                  |d         z  g|d    t        j                  |d         z  t        j                  |d         gd|d   dz  z  |d   dz  z  d|d   dz  z  |d   dz  z  gg      S Nr   r   r   r   r         r   rg   s     r)   jac_vector_vectorz,TestApproxDerivativesDense.jac_vector_vector       xxVVAaD\1Q4"&&1,./dURVVAaD\!266!A$<01]QqTT\)4!A$!)+;addl+JK
  	r+   c                 ^   |dk(  sJ t        j                  t        j                  |d         |d   t        j                  |d         z  g|d    t        j                  |d         z  t        j                  |d         gd|d   dz  z  |d   dz  z  d|d   dz  z  |d   dz  z  gg      S )r   r   r   r   r   r   r   r   r   r   s      r)   jac_vector_vector_with_argz5TestApproxDerivativesDense.jac_vector_vector_with_arg   s    byyxxVVAaD\1Q4"&&1,./dURVVAaD\!266!A$<01]QqTT\)4!A$!)+;addl+JK
  	r+   c                     t        j                  t        j                  ||d   z        t        j                  ||d   z        g      S r   r   r    rs   rH   rh   c0c1s       r)   fun_parametrizedz+TestApproxDerivativesDense.fun_parametrized   s8    xxQqT	*BFF2!9,=>??r+   c           
          t        j                  |t        j                  ||d   z        z  dgd|t        j                  ||d   z        z  gg      S r   r   r   s       r)   jac_parametrizedz+TestApproxDerivativesDense.jac_parametrized   sT    xx"&&ad##Q'RVVB1I&&'
  	r+   c                 V    t        j                  |      dk  r|S t         j                  S )N:0yE>r   rU   nanrg   s     r)   fun_with_nanz'TestApproxDerivativesDense.fun_with_nan   s     FF1I%q12661r+   c                 V    t        j                  |      dk  rdS t         j                  S )Nr         ?r   rg   s     r)   jac_with_nanz'TestApproxDerivativesDense.jac_with_nan   s     ffQi4's3RVV3r+   c                 z    t        j                  |d   |d   z  t        j                  |d   |d   z        g      S r   )r   r    rz   rg   s     r)   fun_zero_jacobianz,TestApproxDerivativesDense.fun_zero_jacobian   s7    xx1!bffQqTAaD[&9:;;r+   c           
          t        j                  |d   |d   g|d    t        j                  |d   |d   z        z  |d    t        j                  |d   |d   z        z  gg      S r   )r   r    r   rg   s     r)   jac_zero_jacobianz,TestApproxDerivativesDense.jac_zero_jacobian   so    xxqT1Q4LdURVVAaD1Q4K((1Q4%"&&1!2E*EF
  	r+   c                 r    t        j                  |      j                         }t        j                  |      S rd   )r   r   itemmathrs   )rH   rh   xps      r)   jac_non_numpyz(TestApproxDerivativesDense.jac_non_numpy   s(     ZZ]!xx|r+   c                 
   d}t        | j                  |d      }t        | j                  |      }t        | j                  |d      }| j                  |      }t        ||d       t        ||d       t        ||d       y )	Nr   r0   r:   r2   ư>rtol&.>-q=r   ri   rn   r   rH   rI   
jac_diff_2
jac_diff_3
jac_diff_4jac_trues         r)   test_scalar_scalarz-TestApproxDerivativesDense.test_scalar_scalar   s{    &t'='=r.79
&t'='=rB
&t'='=r.24
))"-
H48
H48
H59r+   c                    d}t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j                  |      }t        ||d       t        ||d	       t        ||d
       y )Nr   r0   "\O>r:   abs_step)r   r2   r   r   r   r   r   r   s         r)   test_scalar_scalar_abs_stepz6TestApproxDerivativesDense.test_scalar_scalar_abs_step  s    &t'='=r.7'K
&t'='=r079
&t'='=r.2WF
))"-
H48
H48
H59r+   c                    d}t        d      5 }t        | j                  |d|      }d d d        t        | j                  |t              }t        | j                  |dd       }| j	                  t        j                  |            }t        |d       t        ||d	       t        ||d
       y # 1 sw Y   xY w)Nr-   r   r0   r:   workers)r   r2   r   r   r   r   )r   r   rt   mapr|   r   
atleast_1dr   )rH   rI   mapperr   r   r   r   s          r)   test_scalar_vectorz-TestApproxDerivativesDense.test_scalar_vector  s    ] 	Mf*4+A+A22;VMJ	M 't'='=r3O
&t'='=r.2DB
))"--*;<
H48
H48
H59	M 	Ms   B44B=g      @c                    g d}t        d      5 }t        t        |d|d      \  }}t        t        ||d      \  }}d d d        t        t        |ddd      \  }}t        t              }	t        |	|dd      \  }
}t	        |d	   |	j
                         d
|	_        t        |	|d      \  }}t	        |d	   |	j
                         d
|	_        t        |	|dd      \  }}t	        |d	   |	j
                         t	        d	   |d	          t	        d	   |d	          t	        |d	   |d	          t	        |
       t	        |       t	        ||       y # 1 sw Y   xY w)N)r-   g      ?       @r   r0   T)r:   r   full_output)r   r   r2   )r:   r   nfevr   )r   )r   r   r   r	   r   r   )rH   rI   r   md2mdct2md3mdct3md4mdct4sfrd2dct2d3dct3d4dct4s                   r)   !test_workers_evaluations_and_nfevz<TestApproxDerivativesDense.test_workers_evaluations_and_nfev  sY    ] 	Mf*5"2;V7;=JC +5"39tMJC		M 'ub.2A379
U %U+$S"YDQDT&\388,$S"$?DT&\388,$S"TtLDT&\388,U6]DL1U6]DL1U6]DL1S"S"S"9	M 	Ms   .EEc                 4   t        j                  ddg      }t        | j                  |d      }t        | j                  |      }t        | j                  |d      }| j	                  |      }t        ||d       t        ||d       t        ||d	       y )
N      Y@r   r0   r   r2   r   r   Hz>r   )r   r    r   r   r   r   r   s         r)   test_vector_scalarz-TestApproxDerivativesDense.test_vector_scalar@  s    XXudm$&t'='=r.79
&t'='=rB
&t'='=r.24
))"-
H48
H48
H59r+   c                 Z   t        j                  ddg      }t        | j                  |dd      }t        | j                  |dt         j                        }t        | j                  |dd      }| j                  |      }t        ||d	       t        ||d
	       t        ||d	       y )Nr   r   r0   r   r   )r   rel_stepr2   r   r   A:)>r   )r   r    r   r   rF   r   r   r   s         r)   test_vector_scalar_abs_stepz6TestApproxDerivativesDense.test_vector_scalar_abs_stepL  s    XXudm$&t'='=r.7'K
&t'='=r07"&&J
&t'='=r.2WF
))"-
H48
H48
H59r+   c                 v   t        j                  ddg      }t        | j                  |d      }t        | j                  |      }t	        d      5 }t        | j                  |d|      }d d d        | j                  |      }t        ||d	       t        ||d
	       t        |d	       y # 1 sw Y   ExY w)N      Y皙?r0   r   r   r2   r   h㈵>r   r   r   )r   r    r   r   r   r   r   )rH   rI   r   r   r   r   r   s          r)   test_vector_vectorz-TestApproxDerivativesDense.test_vector_vectorZ  s    XXvsm$&t'='=r.79
&t'='=rB
] 	Hf*4+A+A226HJ	H ))"-
H48
H48
H59	H 	Hs   B//B8c                     d}t        t        t        | j                  |       | j                  t	        j
                  |            }t        t        t        | j                  ||       y )Nr   )f0)assert_raisesRuntimeErrorr   r   r   r   
ValueError)rH   rI   r   s      r)   test_wrong_dimensionsz0TestApproxDerivativesDense.test_wrong_dimensionsg  sR    l$5//	5&&r}}R'89j"3//	<r+   c                     t        j                  ddg      }t        | j                  |dd      }t        | j                  |d      }| j	                  |      }t        ||d       t        ||d       y )	Nr[   rS   r0   g-C6?)r:   r   )r   r?   r   )r   r    r   r   r   r   )rH   rI   r   r   r   s        r)   test_custom_rel_stepz/TestApproxDerivativesDense.test_custom_rel_stepo  sm    XXtSk"&t'='=r.7$H
&t'='=r046
))"-
H48
H48r+   c                    t        j                  ddg      }d}d}d}d}| j                  |||      }t        j                  ddg      }| j                  |||      }t	        | j                  |d|||ft        |      ||f	      }	t	        | j                  ||||ft        |      ||f
      }
t        |	|d       t        |
|d       y )Nr         rQ   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   )rH   rI   r   r   rV   rW   r   r   r   r   r   s              r)   test_optionsz'TestApproxDerivativesDense.test_optionsy  s    XXsCj!""2rb"188UDM*((R4&!!2i(dbk2r(D
 '!!2dbk2r(D
 	
H48
H48r+   c                 r   t        j                  d       }t        j                  d      }t        j                  ddg      }t        t        t
        | j                  |||f       t        j                  ddg      }t        | j                  |d||f      }| j                  |      }t        ||d	
       y )Nr   g       r   r   r   r   r0   r:   r   r   r   )	r   rT   r    r   r   r   r   r   r   )rH   rV   rW   rI   jac_diffr   s         r)   test_with_bounds_2_pointz3TestApproxDerivativesDense.test_with_bounds_2_point  s    ggaj[WWQZXXtSk"j"3,,b"b	C XXtSk"$T%;%;R,5r2hH))"-(6r+   c                 "   t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }| j                  |      }t        | j                  |      }t        ||d       t        | j                  ||t         j                  f      }t        ||d       t        | j                  |t         j                   |f      }t        ||d       t        | j                  |||f      }t        ||d       y )Nr   r   r   r   r  )r   r    r   r   r   r   rF   )rH   rV   rW   rI   r   r  s         r)   test_with_bounds_3_pointz3TestApproxDerivativesDense.test_with_bounds_3_point  s    XXsCj!XXsCj!XXsCj!))"-$T%;%;R@(6$T%;%;R-/L:(6$T%;%;R.0ffWbM;(6$T%;%;R-/H6(6r+   c                    t        j                  ddg      }|dz
  }|dz   }| j                  |      }t        | j                  |d||f      }t        ||d       t        | j                  |dd||f      }t        ||d       t        | j                  |||f	      }t        ||d       t        | j                  |d||f
      }t        ||d       y )Ng      $@r   g&.!>r0   r  r   r   r:   r   r   r  r   r   )r   r    r   r   r   r   )rH   rI   rV   rW   r   r  s         r)   r\   z,TestApproxDerivativesDense.test_tight_bounds  s    XXtTl#$Y$Y))"-$""By"bK(6$""By2r(, 	(6$""BBx9(6$""Br2hH(6r+   c                    d}d}d}| j                  |      }t        | j                  |dd||f      }t        | j                  |d||f      }t        ||d       t        ||d	       d}| j                  |      }t        | j                  |dd||f      }t        | j                  |d||f      }t        ||d       t        ||d	       y )
N:0yEr   rQ   r0   r   r	  r
  r   r   )r   r   r   r   )rH   rV   rW   rI   r   r   r   s          r)   test_bound_switchesz.TestApproxDerivativesDense.test_bound_switches  s    $$R(&r)d8
 'rD"bC

H48
H48$$R(&r)d8
 'rD"bC

H48
H48r+   c                    d}| j                  |      }t        | j                   |d      }t        | j                   |      }t        ||d       t        ||d       t        t        t        | j                   |fi t        d       y )Nr   r0   r   r   r   r   r2   )r   r   r   r   	TypeErrorr   )rH   rI   r   r   r   s        r)   test_non_numpyz)TestApproxDerivativesDense.test_non_numpy  s~    %%b)&t'9'92.79
&t'9'92>

H48
H48 	i!2D4F4F 	+D)	+r+   c                 T   t         j                  j                  d      }d fdt        j                  dddt         j                        |j                  dt         j                        t        j
                  ddg      }t        |d	f
      }t        |j                  t         j                        d	f
      } |      j                  t         j                  k(  sJ t        ||d       fd}t        ||j                  t         j                        d	      }t        ||d       |j                  t         j                  k(  sJ d }d }d }d }	t         j                  t         j                  t         j                  fD ]  }
t        j                  |
      j                  }t        j
                  d      j                  |
      }t        d | ||      d	      } |	|||||      }t        ||d	|       ||      z
  t              |k  rJ  y )Nr   c                     | d   | d   |z  z   S r   r`   )prh   s     r)   funcz0TestApproxDerivativesDense.test_fp.<locals>.func  s    Q4!A$(?"r+   c                      | |      |z
  S rd   r`   )r  rh   yr  s      r)   errz/TestApproxDerivativesDense.test_fp.<locals>.err  s    1:>!r+   r   d   dtype)sizer  r   r0   )r:   r   MbP?)atolc                     | j                   t        j                  k(  sJ  |       j                  t        j                        S rd   )r  r   r7   astype)r  r  rh   r  s    r)   err_fp32z4TestApproxDerivativesDense.test_fp.<locals>.err_fp32  s6    77bjj(((q!Q<&&rzz22r+   r   c                 ,    t        j                  |       S rd   r   r   rh   s    r)   fz-TestApproxDerivativesDense.test_fp.<locals>.f	      66!9r+   c                 ,    t        j                  |       S rd   )r   rz   r#  s    r)   gz-TestApproxDerivativesDense.test_fp.<locals>.g  r%  r+   c                 .    t        j                  |        S rd   r"  r#  s    r)   hessz0TestApproxDerivativesDense.test_fp.<locals>.hess  s    FF1I:r+   c           
      (   | dz  t        t        j                   ||            t        j                   ||| z                     z  }|| z  t        t        j                   ||            t        j                   ||| z                     z  }||z   S r   )maxr   rU   )rJ   rI   r$  r)  r8   t0t1s          r)   	calc_atolz5TestApproxDerivativesDense.test_fp.<locals>.calc_atol  sr    QRVVDH-rvvd26l/CDDB q3rvvae}bffQrAvY.?@@B7Nr+   r   r   )r   randomdefault_rnglinspacer4   r    r   r  r7   r  r   float16r3   r5   r   rU   )rH   rngp0jac_fp64jac_fpr   r$  r'  r)  r.  r  r8   rI   rJ   r  r  r  rh   r  s                  @@@@r)   test_fpz"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 #8RYYrzz-B*35t4||rzz)))				 jj"**bjj9 	#E((5/%%C#%%e,B&tR2	BAQAtS1D#Ar)-.023B%8Cs8d?"?	#r+   x0_dtypef0_dtyper:   r0   r1   c                 ~   t        j                  g d|      }fd}t        | ||      dt               }t        |||      }|j                  |k(  sJ t        ||t        j
                  d      |      }|j                  |k(  sJ t        ||t        j
                  d      |	      }|j                  |k(  sJ y )
N)r   g      @g      @r  c                 &     t        |             S rd   r   )rh   r9  s    r)   r$  z6TestApproxDerivativesDense.test_check_dtype.<locals>.f-  s    E!H%%r+   T)force_floatingr   r   rS   )r   r:   )r   r:   )r   r    r   r   r  r2  )rH   r8  r9  r:   rh   r$  promoted_typer'  s     `     r)   test_check_dtypez+TestApproxDerivativesDense.test_check_dtype#  s     HH_H5	& '	aD	
 a62ww-''' aRZZ_VLww-'''aRZZ_VLww-'''r+   c                    t        j                  ddg      }t        | j                  | j                  |      }t        |dk         t        | j                  | j                  |      }t        |dk         t        j                  ddg      }t        | j                  | j                  |      }t        |dk(         t        | j                  | j                  |      }t        |dk(         y )N      $
   r   r   rQ   r   )r   r    r   r   r   r   r   r   rH   rI   accuracys      r)   test_check_derivativez0TestApproxDerivativesDense.test_check_derivative@  s    XXubk"#D$:$:$($:$:B@4 #D$:$:$($:$:B@4 XXsCj!#D$:$:$($:$:B@A#D$:$:$($:$:B@Ar+   c                     t        j                  ddg      }t        | j                  | j                  |ddi      }t        |dk         y )Nr@  rA  r   r   )r   r   )r   r    r   r   r   r   rB  s      r)   !test_check_derivative_with_kwargsz<TestApproxDerivativesDense.test_check_derivative_with_kwargsQ  sG    XXubk"#D$C$C$($C$C$&,12;8 	4 r+   N)r   )rS   )0r]   r^   r_   ri   rn   rt   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\   r  r  r7  parametrizer   r2  r7   r4   r>  rD  rF  r`   r+   r)   rb   rb      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+   rb   c                   x    e Zd Zd Zd Zd Zd Zej                  j                  d      d        Z
d Zd Zd	 Zy
)TestApproxDerivativeSparsec                    t         j                  j                  d      | _        d| _        ddt        j
                  | j                        z   z  | _        ddt        j
                  | j                        z   z  | _        t        j                  | j                        | _	        d| j                  d d d   z  | j                  d d d<   d| j                  dd d   z  | j                  dd d<   | j                  | j                        | _        y )Ni72   r[   r   rS   gP?r   )r   r/  r0  r3  nr   rV   rW   emptyrI   jacJ_true)rH   s    r)   setup_methodz'TestApproxDerivativeSparse.setup_method\  s    99((3!bii//0RYYtvv../((466" DGGCaCL0!!TWWQTT]21hhtww'r+   c                     |dd  dz  |d d dz  z
  }t        j                  dd|z  f      t        j                  d|z  df      z   S )Nr   r   rR   r   r   )r   hstack)rH   rh   es      r)   funzTestApproxDerivativeSparse.fung  sM    abE1Hq"vqy yy!QU$ryy!a%'<<<r+   c                 \   |j                   }t        j                  ||f      }d|d   z  |d<   d|d   dz  z  |d<   t        d|dz
        D ]D  }d||dz
     z  |||dz
  f<   d	||   dz  z  d
||   z  z
  |||f<   d||dz      dz  z  |||dz   f<   F d	|d   dz  z  |d<   d|d   z  |d<   |S )Nr   r   r   r   r   r   r   r   i	   r   rR   rR   rR   rx   rR   rx   )r  r   rB   range)rH   rh   rO  Jis        r)   rQ  zTestApproxDerivativeSparse.jack  s    FFHHaVqt)$adAg+$q!a% 	(Aq1v+AaQhK!A$'kA!H,AadGa!fai-AaQhK	( "qL&	2J&	r+   c                     t        j                  ||ft              }d|d<   d|d<   t        d|dz
        D ]  }d|||dz
  |dz   f<    d|d<   d|d<   |S )Nr  r   rZ  r[  r   r]  r^  )r   rB   intr_  )rH   rO  r#   ra  s       r)   r!   z$TestApproxDerivativeSparse.structurey  sr    HHaV3'$$q!a% 	#A!"AaQAo	#&	&	r+   r   c           
         | j                  | j                        }t        j                  | j                        }t	        ||      }| j
                  j                  |       t	        ||      }t        d      5 }t        g d||gt        j                   | j                  gt        j                  | j                  gt        |g      D ]  \  }}}}	}
t        | j                  | j                  |||	f||f|
      }t!        t#        |t$                     t'        |j)                         | j*                  d       t        j,                  | j                  d      }|d d dxx   dz  cc<   t        | j                  | j                  ||||f|
      }t'        |j)                         | j*                  d	        	 d d d        y # 1 sw Y   y xY w)
Nr   r/   )r:   r   sparsityr   r   r   r   rR   )r:   r   re  r   r   )r!   rO  r   r   r   r3  shuffler   r   rF   rV   rW   r   r   rW  rI   r   
isinstancer
   r   toarrayrR  	full_like)rH   r#   r$   r'   r(   r   r:   r&   lumfr`  r   s                r)   test_allz#TestApproxDerivativeSparse.test_all  sx   NN466"		$&&! E* E*] 	Ef,308X2FffWdgg&(9C=-J E(1b &dhh./Vq&k.02 
1i01		T[[tD<<61#%dhh/71f+.02  		T[[tDE	E 	E 	Es   9D?GGc                     | j                  | j                        }t        | j                  | j                  |      }t        |j                         | j                  d       y )N)re  r   r   )r!   rO  r   rW  rI   r   rh  rR  )rH   r#   r`  s      r)   test_no_precomputed_groupsz5TestApproxDerivativeSparse.test_no_precomputed_groups  s@    NN466"dhh!<		T[[t<r+   c                 z   t        j                  | j                  | j                  ft              }t        j                  | j                        }dD ]f  }t        | j                  | j                  |      }t        | j                  | j                  ||f|      }t        ||j                         dd       h y )Nr  r/   r   )re  r:   gV瞯<gVs<)r   r  )
r   rT   rO  rc  r   r   rW  rI   r   rh  )rH   r!   r&   r:   J_denseJ_sparses         r)   test_equivalencez+TestApproxDerivativeSparse.test_equivalence  s    GGTVVTVV,C8	466"2 	4F'$''&IG($''Y,?PHGX%5%5%7!&U4		4r+   c                 ,     fd}t         j                  | j                   j                   j                  f      }t        |dk         t         j                  | j                   j                   j                  f      }t        |dk         y )Nc                 8    t        j                  |             S rd   )r
   rQ  )rh   rH   s    r)   rQ  z=TestApproxDerivativeSparse.test_check_derivative.<locals>.jac  s    TXXa[))r+   r  r   )r   rW  rI   rV   rW   r   )rH   rQ  rC  s   `  r)   rD  z0TestApproxDerivativeSparse.test_check_derivative  sr    	* $DHHc477,0GGTWW+=?4 #DHHc477,0GGTWW+=?4 r+   N)r]   r^   r_   rS  rW  rQ  r!   rG  rH  rI  rm  ro  rs  rD  r`   r+   r)   rL  rL  Z  sJ    	(=	 [[1E E0=
4
!r+   rL  c                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)"TestApproxDerivativeLinearOperatorc                 ,    t        j                  |      S rd   re   rg   s     r)   ri   z4TestApproxDerivativeLinearOperator.fun_scalar_scalar  rj   r+   c                 ,    t        j                  |      S rd   rl   rg   s     r)   rn   z4TestApproxDerivativeLinearOperator.jac_scalar_scalar  rj   r+   c                     t        j                  |d   dz  t        j                  |d         t        j                  |d         g      S rp   rq   rg   s     r)   rt   z4TestApproxDerivativeLinearOperator.fun_scalar_vector  ru   r+   c                     t        j                  d|d   z  t        j                  |d         dz  t        j                  |d         g      j	                  dd      S rw   ry   rg   s     r)   r|   z4TestApproxDerivativeLinearOperator.jac_scalar_vector  r}   r+   c                 p    t        j                  |d   |d   z        t        j                  |d         z  S r   r   rg   s     r)   r   z4TestApproxDerivativeLinearOperator.fun_vector_scalar  r   r+   c           	      f   t        j                  |d   t        j                  |d   |d   z        z  t        j                  |d         z  t        j                  |d   |d   z        |d   z  z   |d   t        j                  |d   |d   z        z  t        j                  |d         z  g      S r   r   rg   s     r)   r   z4TestApproxDerivativeLinearOperator.jac_vector_scalar  r   r+   c                     t        j                  |d   t        j                  |d         z  |d   t        j                  |d         z  |d   dz  |d   dz  z  g      S r   r   rg   s     r)   r   z4TestApproxDerivativeLinearOperator.fun_vector_vector  r   r+   c                 P   t        j                  t        j                  |d         |d   t        j                  |d         z  g|d    t        j                  |d         z  t        j                  |d         gd|d   dz  z  |d   dz  z  d|d   dz  z  |d   dz  z  gg      S r   r   rg   s     r)   r   z4TestApproxDerivativeLinearOperator.jac_vector_vector  r   r+   c                    d}t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j                  |      }t        j                  j                  d      }t        d      D ]v  }|j                  d	dd
      }t        |j                  |      ||z  d       t        |j                  |      ||z  d       t        |j                  |      ||z  d       x y )Nr   r0   Tr:   as_linear_operatorr  r2      nV)rA  r   r  r   r   h㈵>)
r   ri   rn   r   r/  r0  r_  uniformr   dot	rH   rI   r   r   r   r   r3  ra  r  s	            r)   r   z5TestApproxDerivativeLinearOperator.test_scalar_scalar  s    &t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-ii##N3r 	'AC$/AJNN1-xz!%'JNN1-xz!%'JNN1-xz!%'	'r+   c                 r   d}t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j                  t        j                  |            }t        j
                  j                  d      }t        d      D ]  }|j                  d	dd
      }t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d        y )Nr-   r0   Tr  r  r2   r  rA  r  r  r  r   r   r  )r   rt   r|   r   r   r/  r0  r_  r  r   r  r  s	            r)   r   z5TestApproxDerivativeLinearOperator.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           	         t        j                  ddg      }t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j	                  |      }t         j
                  j                  d      }t        d	      D ]  }|j                  d
d	|j                        }t        |j                  |      t        j                  |j                  |            d       t        |j                  |      t        j                  |j                  |            d       t        |j                  |      t        j                  |j                  |            d        y )Nr   r   r0   Tr  r  r2   r  rA  r  r  r   r   r  r   )r   r    r   r   r   r/  r0  r_  r  shaper   r  r   r  s	            r)   r   z5TestApproxDerivativeLinearOperator.test_vector_scalar
  s0   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                    t        j                  ddg      }t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j	                  |      }t         j
                  j                  d      }t        d	      D ]  }|j                  d
d	|j                        }t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d        y )Nr   r   r0   Tr  r  r2   r  rA  r  r  r   r   r   r   )r   r    r   r   r   r/  r0  r_  r  r  r   r  r  s	            r)   r   z5TestApproxDerivativeLinearOperator.test_vector_vector  s   XXvsm$&t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-ii##N3r 	KAC"((3AJNN1-x||ATJJNN1-x||ATJJNN1-x||ATJ		Kr+   c           	          t        j                  ddg      }t        t        t        | j
                  |ddt         j                  f       y )Nr   r   r0   r   r  )r   r    r   r   r   r   rF   )rH   rI   s     r)   test_exceptionz1TestApproxDerivativeLinearOperator.test_exception1  s9    XXvsm$j"3,,b&266{	<r+   N)r]   r^   r_   ri   rn   rt   r|   r   r   r   r   r   r   r   r   r  r`   r+   r)   rw  rw    sE    ?I2'*'*'*K$<r+   rw  c                     d } t        | ddgdd      }t        |ddg       t        | ddgdd      }t        |ddg       t        | ddgdddg      }t        |ddg       t        | ddgdddg      }t        |ddg       t        | ddgdddg      }t        |ddg       t        | ddgddt        j                   df	      }t        |ddg       t        | ddgdddt        j                  f	      }t        |ddg       y )
Nc                 r    t        j                  | d   dz          t        j                  | d   dz         z   S r   )r   rU   r#  s    r)   r$  z"test_absolute_step_sign.<locals>.fA  s2    qtax  266!A$(#333r+   rR   r0   r   r   r   r   r  )r:   r   r   )r   r   r   rF   )r$  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                     g d} t        j                  g d      }t        j                  t         j                        j                  }|dz  |dz  |dz  d}t        j                  d      }| D ]  }||   }t        j                  ||dz  |dz  |t        j
                  |d         z  g      }t        d |||      }t        ||       | dk\  j                  t              dz  d	z
  }	t        d | ||      }t        ||	|z          t        j                  g d
      }t        j                  |d   |d   z  |d   |d   dz  |d   t        j
                  |d         z  g      }t        |||d      }t        ||       | dk\  j                  t              dz  d	z
  }	t        || |d      }t        ||	|z         t        j                  g dt         j                        }t        d ||d      }|j                  t         j                  k(  sJ t        d ||d      }|j                  t         j                  k(  sJ t        j                  g dt         j                        }t        d ||d      }|j                  t         j                  k(  sJ t        d ||d      }|j                  t         j                  k(  sJ t        j                  g dt         j                        }t        j                  dt         j                        }t        |||d      }|j                  t         j                  k(  sJ t        j                  g dt         j                        }t        |||d      }|j                  t         j                  k(  sJ t        j                  g dt         j                        }t        |||d      }|j                  t         j                  k(  sJ y )Nr/   )r   r   r   g     j@r-   r.   r   r   r   r   r   )rS   r   rA  r  r0   r  r1   )rS   r   r   rN  )r  r   r   rA  )r   r    r3   r4   r5   rU   r   r   r  floatr7   r  r2  )
methodsrI   r8   r9   r   r:   r   correct_stepr   sign_x0s
             r)   test__compute_absolute_stepr  m  sJ   *G	#	$B
((2::

"
"C8:3hM
 
#B : (xx!)B!)B!)BFF2a5M!9!; <
 *$B?,/3!8##E*Q.2)$R@'L"89: xx)*H88Xa[2a50*95%a[2-%a[266"Q%=8: ;L
 &hB	BHHl+sax&*Q.G%hRCHHg45 
#2::	6B%dBI>H>>RZZ'''%dBI>H>>RZZ'''	/	4B%dBI>H>>RZZ'''%dBI>H>>RZZ'''	""**	5B	#RZZ	(B%hB	BH>>RZZ'''	#2::	6B%hB	BH>>RZZ'''	""**	5B%hB	BH>>RZZ'''r+   )&r   	itertoolsr   numpyr   numpy.testingr   r   r   rG  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=   rb   rL  rw  r  r  r`   r+   r)   <module>r     s       @ @  * ? 8 8 0< < !%8!
HG9 G9Tz! z!z\! \!~|< |<~2'jC(r+   