
    Џkhφ                         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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)_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           ^/var/www/teggl/fontify/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-pointz3-pointcs)r   finfofloat64epsr   r   
complex128float32)EPSrelative_stepmethods      r'   test_correct_fp_epsr8   .   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_boundsS   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   rO   r   r>   )FTT)	r   r   onesr   r   absr   rD   r   )rE   rF   lbubrG   rJ   _rK   s           r'   test_with_boundz(TestAdjustSchemeToBounds.test_with_boundo   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?rN   gQ?皙r   r=   gQr   g?r>   FTgQ?gQ)r   r   r   r   r   )rE   rS   rT   rF   rG   rJ   rU   rK   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__rL   rV   rY    r)   r'   r:   r:   R   s    $8?,9r)   r:   c                   $   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'd$ Z(d% Z)y&))TestApproxDerivativesDensec                 ,    t        j                  |      S Nr   sinhrE   xs     r'   fun_scalar_scalarz,TestApproxDerivativesDense.fun_scalar_scalar       wwqzr)   c                 ,    t        j                  |      S ra   r   coshrd   s     r'   jac_scalar_scalarz,TestApproxDerivativesDense.jac_scalar_scalar   rg   r)   c                     t        j                  |d   dz  t        j                  |d         t        j                  |d         g      S Nr   r   r   r   tanexprd   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   rO   r   r   r   cosrp   reshaperd   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logrd   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   rn   rd   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   rw   r   r~   rd   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~   rw   rd   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   rE   re   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   rd   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   rp   rE   re   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   rR   nanrd   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   rd   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   rw   rd   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~   rd   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 ra   )r   r   itemmathrp   )rE   re   xps      r'   jac_non_numpyz(TestApproxDerivativesDense.jac_non_numpy   s(     ZZ]!xx|r)   c                 
   d}t        | j                  |d      }t        | j                  |      }t        | j                  |d      }| j                  |      }t        ||d       t        ||d       t        ||d       y )	Nr   r.   r7   r/   ư>rtol&.>-q=r   rf   rk   r   rE   rF   
jac_diff_2
jac_diff_3
jac_diff_4jac_trues         r'   test_scalar_scalarz-TestApproxDerivativesDense.test_scalar_scalar   s{    &t'='=r.79
&t'='=rB
&t'='=r.24
))"-
H48
H48
H59r)   c                    d}t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j                  |      }t        ||d       t        ||d	       t        ||d
       y )Nr   r.   "\O>r7   abs_step)r   r/   r   r   r   r   r   r   s         r'   test_scalar_scalar_abs_stepz6TestApproxDerivativesDense.test_scalar_scalar_abs_step  s    &t'='=r.7'K
&t'='=r079
&t'='=r.2WF
))"-
H48
H48
H59r)   c                    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   r.   r7   workers)r   r/   r   r   r   r   )r   r   rq   mapry   r   
atleast_1dr   )rE   rF   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   r.   T)r7   r   full_output)r   r   r/   )r7   r   nfevr   )r   )r   r   r   r	   r   r   )rE   rF   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   r.   r   r/   r   r   Hz>r   )r   r   r   r   r   r   r   s         r'   test_vector_scalarz-TestApproxDerivativesDense.test_vector_scalar?  s    XXudm$&t'='=r.79
&t'='=rB
&t'='=r.24
))"-
H48
H48
H59r)   c                 Z   t        j                  ddg      }t        | j                  |dd      }t        | j                  |dt         j                        }t        | j                  |dd      }| j                  |      }t        ||d	       t        ||d
	       t        ||d	       y )Nr   r   r.   r   r   )r   rel_stepr/   r   r   A:)>r   )r   r   r   r   rC   r   r   r   s         r'   test_vector_scalar_abs_stepz6TestApproxDerivativesDense.test_vector_scalar_abs_stepK  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皙?r.   r   r   r/   r   h㈵>r   r   r   )r   r   r   r   r   r   r   )rE   rF   r   r   r   r   r   s          r'   test_vector_vectorz-TestApproxDerivativesDense.test_vector_vectorY  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)rE   rF   r   s      r'   test_wrong_dimensionsz0TestApproxDerivativesDense.test_wrong_dimensionsf  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 )	NrX   rP   r.   g-C6?)r7   r   )r   r<   r   )r   r   r   r   r   r   )rE   rF   r   r   r   s        r'   test_custom_rel_stepz/TestApproxDerivativesDense.test_custom_rel_stepn  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         rN   r   )r   gưr   r.   )r7   r   r   argskwargsbounds)r   r   r   r   r   r   r   r   )r   r   r   r   r   dictr   )rE   rF   r   r   rS   rT   r   r   r   r   r   s              r'   test_optionsz'TestApproxDerivativesDense.test_optionsx  s    XXsCj!""2rb"188UDM*((R4&!!2i(dbk2r(D
 '!!2dbk2r(D
 	
H48
H48r)   c                 r   t        j                  d       }t        j                  d      }t        j                  ddg      }t        t        t
        | j                  |||f       t        j                  ddg      }t        | j                  |d||f      }| j                  |      }t        ||d	
       y )Nr   g       r   r   r   r   r.   r7   r   r   r   )	r   rQ   r   r   r   r   r   r   r   )rE   rS   rT   rF   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   rC   )rE   rS   rT   rF   r   r  s         r'   test_with_bounds_3_pointz3TestApproxDerivativesDense.test_with_bounds_3_point  s    XXsCj!XXsCj!XXsCj!))"-$T%;%;R@(6$T%;%;R-/L:(6$T%;%;R.0ffWbM;(6$T%;%;R-/H6(6r)   c                    t        j                  ddg      }|dz
  }|dz   }| j                  |      }t        | j                  |d||f      }t        ||d       t        | j                  |dd||f      }t        ||d       t        | j                  |||f	      }t        ||d       t        | j                  |d||f
      }t        ||d       y )Ng      $@r   g&.!>r.   r   r   r   r7   r   r   r   r   r   )r   r   r   r   r   r   )rE   rF   rS   rT   r   r  s         r'   rY   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   rN   r.   r   r  r  r   r   )r   r   r   r   )rE   rS   rT   rF   r   r   r   s          r'   test_bound_switchesz.TestApproxDerivativesDense.test_bound_switches  s    $$R(&r)d8
 'rD"bC

H48
H48$$R(&r)d8
 'rD"bC

H48
H48r)   c                    d}| j                  |      }t        | j                   |d      }t        | j                   |      }t        ||d       t        ||d       t        t        t        | j                   |fi t        d       y )Nr   r.   r   r   r   r   r/   )r   r   r   r   	TypeErrorr   )rE   rF   r   r   r   s        r'   test_non_numpyz)TestApproxDerivativesDense.test_non_numpy  s~    %%b)&t'9'92.79
&t'9'92>

H48
H48 	i!2D4F4F 	+D)	+r)   c                 L   t         j                  j                  d       d fdt        j                  dddt         j                        t         j                  j                  d      j                  t         j                        t        j                  ddg      }t        |df	      }t        |j                  t         j                        df	      } |      j                  t         j                  k(  sJ t        ||d
       fd}t        ||j                  t         j                        d      }t        ||d
       d }d }d }d }t         j                  t         j                  t         j                  fD ]  }	t        j                  |	      j                  }
t        j                  d      j                  |	      }t        d | ||      d      } ||||||
      }t        ||d|       ||      z
  t              |k  rJ  y )Nr   c                     | d   | d   |z  z   S r|   r]   )pre   s     r'   funcz0TestApproxDerivativesDense.test_fp.<locals>.func  s    Q4!A$(?"r)   c                      | |      |z
  S ra   r]   )r  re   yr  s      r'   errz/TestApproxDerivativesDense.test_fp.<locals>.err  s    1:>!r)   r   d   dtyper   r.   )r7   r   gMbP?)atolc                     | j                   t        j                  k(  sJ  |       j                  t        j                        S ra   )r  r   r4   astype)r  r  re   r  s    r'   err_fp32z4TestApproxDerivativesDense.test_fp.<locals>.err_fp32  s6    77bjj(((q!Q<&&rzz22r)   r   c                 ,    t        j                  |       S ra   r   r~   re   s    r'   fz-TestApproxDerivativesDense.test_fp.<locals>.f      66!9r)   c                 ,    t        j                  |       S ra   )r   rw   r  s    r'   gz-TestApproxDerivativesDense.test_fp.<locals>.g	  r   r)   c                 .    t        j                  |        S ra   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   rR   )rG   rF   r  r$  r5   t0t1s          r'   	calc_atolz5TestApproxDerivativesDense.test_fp.<locals>.calc_atol  sr    QRVVDH-rvvd26l/CDDB q3rvvae}bffQrAvY.?@@B7Nr)   r   r   )r   randomseedlinspacer1   r  r   r   r4   r  r   float16r0   r2   r   rR   )rE   p0jac_fp64jac_fpr  r  r"  r$  r)  r  r5   rF   rG   r  r  r  re   r  s                 @@@@r'   test_fpz"TestApproxDerivativesDense.test_fp  s    			q	#	" KK1c4IIS!((4XXtTl#$S"YaVL #3		"**(=*31a&B2q!}""bjj000t4	3 #8RYYrzz-B*35t4				 jj"**bjj9 	#E((5/%%C#%%e,B&tR2	BAQAtS1D#Ar)-.023B%8Cs8d?"?	#r)   c                    t        j                  ddg      }t        | j                  | j                  |      }t        |dk         t        | j                  | j                  |      }t        |dk         t        j                  ddg      }t        | j                  | j                  |      }t        |dk(         t        | j                  | j                  |      }t        |dk(         y )N      $
   r   r   rN   r   )r   r   r   r   r   r   r   r   rE   rF   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 )Nr3  r4  r   r   )r   r   )r   r   r   r   r   r   r5  s      r'   !test_check_derivative_with_kwargsz<TestApproxDerivativesDense.test_check_derivative_with_kwargs1  sG    XXubk"#D$C$C$($C$C$&,12;8 	4 r)   N)r   )rP   )*rZ   r[   r\   rf   rk   rq   ry   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  rY   r
  r  r1  r7  r9  r]   r)   r'   r_   r_      s    ?I26@24<
::: [[3    D
:::<99$77,7(9.+8#t"!r)   r_   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 )Nr   2   rX   r   rP   gP?r   )r   r*  r+  nr   rS   rT   emptyrF   jacJ_true)rE   s    r'   setup_methodz'TestApproxDerivativeSparse.setup_method<  s    
		q!bii//0RYYtvv../((466" DGGCaCL0!!TWWQTT]21hhtww'r)   c                     |dd  dz  |d d dz  z
  }t        j                  dd|z  f      t        j                  d|z  df      z   S )Nr   r   rO   r   r   )r   hstack)rE   re   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   rO   rO   rO   ru   rO   ru   )sizer   r?   range)rE   re   rA  Jis        r'   rC  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   rL  rM  r   rO  rP  )r   r?   intrR  )rE   rA  r!   rT  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	        ||      }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-   )r7   r   sparsityr   r   r   r   rO   )r7   r   rX  r   r   )r   rA  r   r   r   r*  shuffler   r   rC   rS   rT   r   r   rI  rF   r   
isinstancer
   r   toarrayrD  	full_like)rE   r!   r"   r%   r&   r   r7   r$   lumfrS  r   s                r'   test_allz#TestApproxDerivativeSparse.test_alld  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   =D?GGc                     | j                  | j                        }t        | j                  | j                  |      }t        |j                         | j                  d       y )N)rX  r   r   )r   rA  r   rI  rF   r   r[  rD  )rE   r!   rS  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   )rX  r7   gV瞯<gVs<)r   r  )
r   rQ   rA  rV  r   r   rI  rF   r   r[  )rE   r   r$   r7   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 ra   )r
   rC  )re   rE   s    r'   rC  z=TestApproxDerivativeSparse.test_check_derivative.<locals>.jac  s    TXXa[))r)   r   r   )r   rI  rF   rS   rT   r   )rE   rC  r6  s   `  r'   r7  z0TestApproxDerivativeSparse.test_check_derivative  sr    	* $DHHc477,0GGTWW+=?4 #DHHc477,0GGTWW+=?4 r)   N)rZ   r[   r\   rE  rI  rC  r   r:  r;  r<  r`  rb  rf  r7  r]   r)   r'   r>  r>  :  sJ    	(=	 [[1E E0=
4
!r)   r>  c                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)"TestApproxDerivativeLinearOperatorc                 ,    t        j                  |      S ra   rb   rd   s     r'   rf   z4TestApproxDerivativeLinearOperator.fun_scalar_scalar  rg   r)   c                 ,    t        j                  |      S ra   ri   rd   s     r'   rk   z4TestApproxDerivativeLinearOperator.jac_scalar_scalar  rg   r)   c                     t        j                  |d   dz  t        j                  |d         t        j                  |d         g      S rm   rn   rd   s     r'   rq   z4TestApproxDerivativeLinearOperator.fun_scalar_vector  rr   r)   c                     t        j                  d|d   z  t        j                  |d         dz  t        j                  |d         g      j	                  dd      S rt   rv   rd   s     r'   ry   z4TestApproxDerivativeLinearOperator.jac_scalar_vector  rz   r)   c                 p    t        j                  |d   |d   z        t        j                  |d         z  S r|   r}   rd   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   rd   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   rd   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   rd   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 ]  }t        j                  j                  d	dd
      }t        |j                  |      ||z  d       t        |j                  |      ||z  d       t        |j                  |      ||z  d        y )Nr   r.   Tr7   as_linear_operatorru  r/   r   r4  r   rQ  r   r   h㈵>)
r   rf   rk   r   r*  r+  rR  uniformr   dotrE   rF   r   r   r   r   rT  r  s           r'   r   z5TestApproxDerivativeLinearOperator.test_scalar_scalar  s    &t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-
		qr 	'A		!!#r!5AJNN1-xz!%'JNN1-xz!%'JNN1-xz!%'	'r)   c                    d}t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j                  t        j                  |            }t        j
                  j                  d       t        d      D ]  }t        j
                  j                  d	dd
      }t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d        y )Nr+   r.   Trt  rv  r/   r   r4  rw  rx  ry  r   r   rz  )r   rq   ry   r   r   r*  r+  rR  r{  r   r|  r}  s           r'   r   z5TestApproxDerivativeLinearOperator.test_scalar_vector  s   &t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"--*;<
		qr 	'A		!!#r!5AJNN1-x||A!%'JNN1-x||A!%'JNN1-x||A!%'	'r)   c           	         t        j                  ddg      }t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j	                  |      }t         j
                  j                  d       t        d	      D ]  }t         j
                  j                  d
d	|j                        }t        |j                  |      t        j                  |j                  |            d       t        |j                  |      t        j                  |j                  |            d       t        |j                  |      t        j                  |j                  |            d        y )Nr   r   r.   Trt  rv  r/   r   r4  rw  ry  r   r   rz  r   )r   r   r   r   r   r*  r+  rR  r{  shaper   r|  r   r}  s           r'   r   z5TestApproxDerivativeLinearOperator.test_vector_scalar  s3   XXudm$&t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-
		qr 	'A		!!#r!9AJNN1-r}}X\\!_/M!%'JNN1-r}}X\\!_/M!%'JNN1-r}}X\\!_/M!%'	'r)   c                    t        j                  ddg      }t        | j                  |dd      }t        | j                  |d      }t        | j                  |dd      }| j	                  |      }t         j
                  j                  d       t        d	      D ]  }t         j
                  j                  d
d	|j                        }t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d       t        |j                  |      |j                  |      d        y )Nr   r   r.   Trt  rv  r/   r   r4  rw  ry  r   r   r   r   )r   r   r   r   r   r*  r+  rR  r{  r  r   r|  r}  s           r'   r   z5TestApproxDerivativeLinearOperator.test_vector_vector  s   XXvsm$&t'='=r.7:>@
 't'='=r:>@
&t'='=r.2:>@
 ))"-
		qr 	KA		!!#r!9A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   r.   r   r   )r   r   r   r   r   r   rC   )rE   rF   s     r'   test_exceptionz1TestApproxDerivativeLinearOperator.test_exception  s9    XXvsm$j"3,,b&266{	<r)   N)rZ   r[   r\   rf   rk   rq   ry   r   r   r   r   r   r   r   r   r  r]   r)   r'   rj  rj    sE    ?I2'*'*'*K$<r)   rj  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   rR   r  s    r'   r  z"test_absolute_step_sign.<locals>.f!  s2    qtax  266!A$(#333r)   rO   r.   r   r   r   r   r	  )r7   r   r   )r   r   r   rC   )r  grads     r'   test_absolute_step_signr    s;   4 QRTJDD4+& QRUKDD3+& 	B8ItD D4+& 	B8IuD D4,'	B8ID D3*% 	B8I}D D3+&	B8Ir266lD D4+&r)   c                  |   g d} t        j                  g d      }t        j                  t         j                        j                  }|dz  |dz  |dz  d}t        j                  d      }| D ]  }||   }t        j                  ||dz  |dz  |t        j
                  |d         z  g      }t        d |||      }t        ||       | dk\  j                  t              dz  d	z
  }	t        d | ||      }t        ||	|z          t        j                  g d
      }t        j                  |d   |d   z  |d   |d   dz  |d   t        j
                  |d         z  g      }t        |||d      }t        ||       | dk\  j                  t              dz  d	z
  }	t        || |d      }t        ||	|z         y )Nr-   )r   r   r   g     j@r+   r,   r   r   r   r   r   )rP   r   r4  r  r.   )
r   r   r0   r1   r2   rR   r   r   r  float)
methodsrF   r5   r6   r   r7   r   correct_stepr   sign_x0s
             r'   test__compute_absolute_stepr  M  s   *G	#	$B
((2::

"
"C8:3hM
 
#B : (xx!)B!)B!)BFF2a5M!9!; <
 *$B?,/3!8##E*Q.2)$R@'L"89: xx)*H88Xa[2a50*95%a[2-%a[266"Q%=8: ;L
 &hB	BHHl+sax&*Q.G%hRCHHg45r)   )$r   	itertoolsr   numpyr   numpy.testingr   r   r   r:  r   r   scipy._lib._utilr   r	   scipy.sparser
   r   r   scipy.optimize._numdiffr   r   r   r   r   r   scipy.optimizer   r(   r8   r:   r_   r>  rj  r  r  r]   r)   r'   <module>r     s|       @ @  * ? 8 8< < !%8!
HG9 G9T[! [!|\! \!~|< |<~2'j(6r)   