
    tKg                     
   d dl mZ d dlZd dlmZ d dlmZ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 d dlmZmZ d d	lmZ d d
lmZmZmZ d/dZd0dZd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d0dZ&d Z' G d d      Z( G d d      Z)d Z* e+ ejX                               e*gz   Z- G d d      Z. G d d      Z/ G d  d!      Z0 G d" d#      Z1 G d$ d%e.e/e0e1      Z2 G d& d'e.e/e0e1      Z3 G d( d)e.      Z4d* Z5d+ Z6d, Z7d- Z8d. Z9y)1    )productN)norm)assert_assert_allcloseassert_equalsuppress_warnings)raises)issparse
lil_matrix)aslinearoperator)least_squaresBounds)IMPLEMENTED_LOSSES)EPSmake_strictly_feasibleCL_scaling_vectorc                     | |z
  dz  dz   S )N         @ xas     k/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test_least_squares.pyfun_trivialr      s    EA:    c                     d| |z
  z  S Nr   r   r   s     r   jac_trivialr      s    A;r   c                 <    t        j                  | d   | d   g      S Nr      nparrayr   s    r   fun_2d_trivialr'      s    88QqT1Q4L!!r   c                 ,    t        j                  d      S r   )r$   identityr&   s    r   jac_2d_trivialr*      s    ;;q>r   c                 Z    t        j                  d| d   | d   dz  z
  z  d| d   z
  g      S )N
   r"   r   r   r#   r&   s    r   fun_rosenbrockr-   !   s3    88R1Q4!A$'>*Q1X788r   c                 D    t        j                  d| d   z  dgddgg      S )Nr   r,   r#   r&   s    r   jac_rosenbrockr1   %   s/    88	qtR	Q  r   c                 J    t        j                  d| d   z  dgddgddgg      S )Nr/   r   r,   r0           r#   r&   s    r   jac_rosenbrock_bad_dimr4   ,   s6    88	qtR	Q	c
  r   c                     t        |       d   S Nr   )r-   r&   s    r   fun_rosenbrock_croppedr7   4       !Qr   c                     t        |       d   S r6   )r1   r&   s    r   jac_rosenbrock_croppedr:   8   r8   r   c                 >    t        j                  | | dz  | dz  g      S )Nr      r#   r&   s    r   fun_wrong_dimensionsr=   =   s    88Q1adO$$r   c                 B    t        j                  t        | |            S )N)r   )r$   
atleast_3dr   r   s     r   jac_wrong_dimensionsr@   A   s    ==Q!,--r   c                 d   t        t        j                  | j                  d               }t        j                  |dz   |dz   f      }| j                  ||f      } | |ddddf<   |d dddf   |dd ddf   z   |ddd df   z   |dddd f   z   d| z  z
  | dz  z   }|j                         S )Nr   r   r"   r0      r<   )intr$   sqrtshapezerosreshaperavel)r   nuys       r   fun_bvprM   E   s    BGGAGGAJ A
!a%Q A			1a&AAadAbDjM	#2#qt)qQrT{"QqtSbSy\1AadABhK?!a%G!Q$NA779r   c                        e Zd ZddZd Zd Zy)BroydenTridiagonalc                 P    t         j                  j                  d       | _        t        j                  |        _        t        j                  dd|       _        t        j                  dd|       _         xj                  dt         j                  j                  |      z  z  c_         xj                  dt         j                  j                  |      z  z  c_         xj
                  dt         j                  j                  |      z  z  c_        t         j
                   j                   j                         _        |dk(  rt        ||ft               _        t        j                  |      }d	 j                  ||f<   t        j                  d	|      }d	 j                  ||d	z
  f<   t        j                  |d	z
        }d	 j                  ||d	z   f<    j                   _        y |d
k(  r fd _        y |dk(  rd  _         fd _        y t#        d       y )Nr   rB         gr3   皙?sparse)dtyper"   operatorc                 8    t        j                  |             S N)r   _jacr   selfs    r   <lambda>z-BroydenTridiagonal.__init__.<locals>.<lambda>i   s    !1$))A,!?r   densec                 B    j                  |       j                         S rW   )rX   toarrayrY   s    r   r[   z-BroydenTridiagonal.__init__.<locals>.<lambda>l   s    1!5!5!7r   F)r$   randomseedrJ   onesx0linspacelbubrandnr   r   rD   sparsityarangerX   jacr   )rZ   rJ   modeis   `   r   __init__zBroydenTridiagonal.__init__O   s   
		q771:+++b$*++dC+3+++3+++3+++($''477C8&1vS9DM		!A"#DMM!Q$		!QA&'DMM!QU(#		!a% A&'DMM!QU(#yyDHZ?DHW_ DM7DHENr   c                 f    d|z
  |z  dz   }|dd xxx |d d z  ccc |d dxxx d|dd  z  z  ccc |S )Nr<   r"   r0   r   r   )rZ   r   fs      r   funzBroydenTridiagonal.funp   sG    UaK!O	!"3B	#2!ae)r   c                 L   t        | j                  | j                  f      }t        j                  | j                        }dd|z  z
  |||f<   t        j                  d| j                        }d|||dz
  f<   t        j                  | j                  dz
        }d|||dz   f<   |S )Nr<   r   r"   r0   rB   )r   rJ   r$   rh   )rZ   r   Jrk   s       r   rX   zBroydenTridiagonal._jacv   s    '(IIdffa!e)!Q$IIa !QU(IIdffqj!!QU(r   N)d   rS   )__name__
__module____qualname__rl   ro   rX   r   r   r   rO   rO   N   s    Br   rO   c                   (    e Zd ZdZ	 	 ddZd Zd Zy)ExponentialFittingProblemz]Provide data and function for exponential fitting in the form
    y = a + exp(b * x) + noise.Nc                    t         j                  j                  |       || _        d| _        t        j
                  d      | _        t        j                  |d   |d   |      | _        |t        j                  || j                  z        z   | _
        | xj                  |t         j                  j                  | j                        z  z  c_
        t         j                  j                  d| j                  |      }| j                  |xx   d|z  t         j                  j                  |      z  z  cc<   t        j                  ||g      | _        y )Nr   r   r"   2   )r$   r_   r`   mrJ   rG   p0rc   r   exprL   rf   randintrandr%   p_opt)	rZ   r   bnoise
n_outliersx_rangen_pointsrandom_seedoutlierss	            r   rl   z"ExponentialFittingProblem.__init__   s    
		{#((1+WQZX>RVVAJ''%"))//$&&11199$$Q
;xBJ
)CCCXXq!f%
r   c                 r    |d   t        j                  |d   | j                  z        z   | j                  z
  S r!   )r$   r|   r   rL   rZ   ps     r   ro   zExponentialFittingProblem.fun   s/    tbffQqTDFF]++dff44r   c                     t        j                  | j                  | j                  f      }d|d d df<   | j                  t        j
                  |d   | j                  z        z  |d d df<   |S )Nr"   r   )r$   emptyrz   rJ   r   r|   )rZ   r   rq   s      r   ri   zExponentialFittingProblem.jac   sZ    HHdffdff%&!Q$&&266!A$-00!Q$r   )r"   )r0   r"      N)rs   rt   ru   __doc__rl   ro   ri   r   r   r   rw   rw      s    # ;B*.&"5r   rw   c                     t        j                  d| j                  f      }d| z   }d|dz  dz
  z  |d<   |dz  |d<   d|dz  z  |d<   |S )Nr<   r"   gUUUUUU?r   gUUUUUUgr   )r$   r   size)zrhots      r   cubic_soft_l1r      s[    
((Aqvv;
C	AA!c(Q,CF4[CFAICFJr   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 Zd Zd Zd Zd Zd Zd Zd Zd Zy)	BaseMixinc                     t        t        d| j                        }t        |j                  dd       t        |j
                  t        |j                               y )N       @methodr   -C6?atol)r   r   r   r   r   ro   rZ   ress     r   
test_basiczBaseMixin.test_basic   s;    KDKK@qt,SUU!34r   c           	         d}dddt         fD ]  }t               5 }|j                  t        d       t	        t
        d||f| j                        }t	        t
        d|d|i| j                  	      }d d d        t        j                  |d
       t        j                  |d
       t        t        t        t
        dd| j                         t        t        t        t
        dddi| j                  	        y # 1 sw Y   xY w)N      @2-point3-pointcsBjac='(3-point|cs)' works equivalently to '2-point' for method='lm'r   )argsr   r   )kwargsr   r   )rtol)r<   rC   kaboomr<   )r   r   filterUserWarningr   r   r   r   r   assert_raises	TypeError)rZ   r   ri   supr   res1s         r   test_args_kwargszBaseMixin.test_args_kwargs   s    y$<C"$

X $Kc+/;;8$[#sC8+/;;8 % CEE140DFFAD1)]K&t{{<)]K"*At{{D! =$$s   AC;;D	c                 D   dddt         fD ]`  }t               5 }|j                  t        d       t	        t
        d|| j                        }d d d        t        j                  dd	       b t        t        t        t
        dd
| j                         y # 1 sw Y   KxY w)Nr   r   r   r   r   r   r   r   r   oopsri   r   )r   r   r   r   r   r   r   r   r   r   
ValueError)rZ   ri   r   r   s       r   test_jac_optionszBaseMixin.test_jac_options   s    y$<C"$

X $Kc$++N % CEE140 = 	j-cv![[	* %$s   4BB	c                 |    dD ]7  }t        t        d|| j                        }t        |j                  dd       9 y )N)N   r   )max_nfevr   r   r   r   )r   r   r   r   r   )rZ   r   r   s      r   test_nfev_optionszBaseMixin.test_nfev_options   s3    "HS8'+{{4CCEE140 #r   c                    dt        j                  dg      dfD ]*  }t        t        d|      }t	        |j
                  d       , t        t        t        t        dd| j                         t        t        t        t        dd	| j                         t        t        t        t        dd | j                         t        t        t        t        dd
| j                         y )N      ?      ?ri   r   )x_scaler   auto)r   r         y      ?       @)	r$   r%   r   r   r   r   r   r   r   )rZ   r   r   s      r   test_x_scale_optionszBaseMixin.test_x_scale_options   s    RXXse_e4GS'BCCEE1% 5 	j-6$++	?j-4	=j-4	=j-8DKK	Ar   c                    t        t        dd| j                        }t        t        dd| j                        }t        t        dd | j                        }t        |j                  dd       t        |j                  dd       t        |j                  dd       t        |j                  |j                         t        |j                  |j                         y )Nr   rR   )	diff_stepr   gr   r   r   )r   r   r   r   r   r   nfev)rZ   r   res2res3s       r   test_diff_stepzBaseMixin.test_diff_step   s     [#$(KK1[#$(KK1[#'+DKKA---TVVTVV$TYY		*r   c           	          t        t        t        t        d| j                  ddi       t        t        t        t        d| j                  ddi       y )Nr   no_such_optionrr   )r   optionsr   )r   r   r   r   r   rZ   s    r   test_incorrect_options_usagez&BaseMixin.test_incorrect_options_usage   sA    iS![[3CS2I	KiS![[:s2C	Er   c                    t        t        d| j                        }t        |j                  dd       t        |j
                  d       t        |j                  d       t        |j                  dd       t        |j                  dd       t        |j                  dd       t        |j                  d       | j                  d	k(  r0t        |j                  d
k         t        |j                  d u        n0t        |j                  dk         t        |j                  dk         t        |j                  dkD         t        |j                          y )Nr   r   r   r   r   g      )@   {Gz?lm   r,   )r   r   r   r   r   costro   ri   grad
optimalityr   active_maskr   r   njevstatussuccessr   s     r   test_full_resultzBaseMixin.test_full_result   s     KT[[Aqt,$'#.!$/5S__a(;;$CHHrM"CHH$%CHHrM"CHHrM"

Qr   c                    | j                   dk(  ry t        t        d| j                   d      }t        |j                  t        j                  dg             t        |j                  d       t        |j                  t        j                  dg             t        |j                  t        j                  dgg             t        |j                  t        j                  d	g             t        |j                  d	       t        |j                  t        j                  d
g             t        |j                  d       t        |j                  d       t        |j                  d
       t        |j                   d
       y )Nr   r   r"   )r   r   r   g     @D@	   rC   $   r   )r   r   r   r   r   r$   r%   r   ro   ri   r   r   r   r   r   r   r   r   s     r   test_full_result_single_fevz%BaseMixin.test_full_result_single_fev  s     ;;$KT[[%&(SUUBHHaSM*SXXt$SWWbhhsm,SWWbhhuo.SXXrxx~.S^^R(S__bhhsm4SXXq!SXXq!SZZ#S[[!$r   c           
      X   ddg}ddg}t        dddt        gdt        j                  ddg      dgd	d
g      D ]d  \  }}}t	               5 }|j                  t        d       t        t        ||||| j                        }d d d        t        j                  |       f y # 1 sw Y   "xY w)NrB   r"   r   r   r   r   皙?ri   exactlsmrr   r   	tr_solverr   )r   r1   r$   r%   r   r   r   r   r-   r   r   r   )rZ   rb   x_optri   r   r   r   r   s           r   test_rosenbrockzBaseMixin.test_rosenbrock(  s    !WA'.It^<bhhSz*E2&!(##C) #$

X $NBW.7M % CEE5)(# %$s   	6B  B)	c           	      B   ddg}| j                   dk(  rt        t        t        t        |d       y t        dddt        gdt        j                  dd	g      d
gddg      D ]=  \  }}}t        t        ||||| j                         }t        |j                  dd       ? y )NrB   r"   r   r   r   r   r   r   r   ri   r   r   r   r   g+=r   )r   r   r   r   r7   r   r:   r$   r%   r   r   )rZ   rb   ri   r   r   r   s         r   test_rosenbrock_croppedz!BaseMixin.test_rosenbrock_cropped8  s    !W;;$*m5KT+ ,3	41GH"((C:.6f%,''Wi $*BW'=  !%8,'r   c                 P    t        t        t        t        d| j                         y Nr   r   )r   r   r   r=   r   r   s    r   test_fun_wrong_dimensionsz#BaseMixin.test_fun_wrong_dimensionsG  s    j-1E$++	/r   c                 Z    t        t        t        t        dt        | j
                         y r   )r   r   r   r   r@   r   r   s    r   test_jac_wrong_dimensionsz#BaseMixin.test_jac_wrong_dimensionsK  s    j-/	Er   c                 b    ddg}t        t        t        t        |t        | j
                         y )Nr"   r   r   )r   r   r   r-   r4   r   rZ   rb   s     r   (test_fun_and_jac_inconsistent_dimensionsz2BaseMixin.test_fun_and_jac_inconsistent_dimensionsO  s%    Vj-,T[[	Br   c                     t        j                  d      j                  dd      }t        t        t
        t        || j                         y )NrC   r   r   )r$   ra   rH   r   r   r   r   r   r   s     r   test_x0_multidimensionalz"BaseMixin.test_x0_multidimensionalT  s3    WWQZ1%j-b![[	*r   c                 T    d}t        t        t        t        || j                         y )N       @        r   r   r   r   r   r   r   s     r   test_x0_complex_scalarz BaseMixin.test_x0_complex_scalarY  s    j-b![[	*r   c                 X    ddg}t        t        t        t        || j                         y )Nr   r   r   r   r   s     r   test_x0_complex_arrayzBaseMixin.test_x0_complex_array^  s#    < j-b![[	*r   c                     d}t        j                  |dz        }| j                  dk(  rd}nd}t        t        |d| j                  |      }t        |j                  |k         t        |j                  dk         y )	Nr,   r   r   i  rr   r   )ftolr   r   r   )r$   ra   r   r   rM   r   r   r   )rZ   rJ   rb   r   r   s        r   test_bvpzBaseMixin.test_bvpc  sl    
 WWQT];;$HHGRd4;;%-/ 	8#$3r   c           
      V    t        t        t        t        d| j                  d d d        y )Nr   )r   r   xtolgtolr   r   s    r   /test_error_raised_when_all_tolerances_below_epsz9BaseMixin.test_error_raised_when_all_tolerances_below_epst  s     j-c![[t$T	Kr   c           
          | j                   dk(  ry ddg}ddg}dD ]@  \  }}}t        t        |t        |||| j                         }t	        |j
                  |       B y )Nr   rB   r"   )):0yE>NN)Nr   N)NNr   )ri   r   r   r   r   )r   r   r-   r1   r   r   )rZ   rb   r   r   r   r   r   s          r   0test_convergence_with_only_one_tolerance_enabledz:BaseMixin.test_convergence_with_only_one_tolerance_enabledy  sf    ;;$!WA!6D$  %)4'+{{4C CEE5)!6r   N)rs   rt   ru   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      sl    5D,*1A+E(%(* 9/EB
*
*
*
 "K
*r   r   c                   x    e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                  j                  d      d	        Zy
)BoundsMixinc                 R    t        t        t        t        dd| j                         y )Nr   )      $@r3   boundsr   r   r   s    r   test_inconsistentzBoundsMixin.test_inconsistent  s    j-c(	>r   c                 R    t        t        t        t        dd| j                         y )Nr   )r   rC   r  r   r   s    r   test_infeasiblezBoundsMixin.test_infeasible  s    j-c$T[[	:r   c                 R    t        t        t        t        dd| j                         y )Nr   )r   r   r<   r  r   r   s    r   test_wrong_numberzBoundsMixin.test_wrong_number  s    j-b'	=r   c           	          t        t        t        t        ddddgf| j                         t        t        t        t
        ddgdgddgf| j                         y )Nr   r   r   r  r3         @)r   r   r   r   r   r-   r   s    r   test_inconsistent_shapez#BoundsMixin.test_inconsistent_shape  sP    j-c!C:.t{{	D 	j-#s"ec3Z0	Fr   c                    dddt         fD ]  }t        t        d|d| j                        }t	        |j
                  dd	       t        |j                  d
g       t        d|j
                  cxk  xr dk  nc        t        t        d|d| j                        }t	        |j
                  dd	       t        |j                  dg       t        d|j
                  cxk  xr dk  nc         y )Nr   r   r   r   )r   r   ri   r  r   r3   r   r   r   r0   r<   )r   r   r   )	r   r   r   r   r   r   r   r   r   )rZ   ri   r   s      r   test_in_boundszBoundsMixin.test_in_bounds  s    y$<CSc'24;;HCCEE3T21#.B#%%$1$%Sc'1$++GCCEE3T22$/C355%A%& =r   c                    d }d }dddt         fD ]  }||fD ]  }ddg}t        t        ||      }t        |j                  ddg       t        t        || |d	d
d
g      | j
                        }t        |j                  d	d	g       t        t        || |ddgd      | j
                        }t        |j                  ddg       t        t        || |dd	gddg      | j
                        }t        |j                  dd	gd         y )Nc                 
    | |fS rW   r   rd   re   s     r   get_bounds_directz8BoundsMixin.test_bounds_shape.<locals>.get_bounds_direct  s    r6Mr   c                     t        | |      S rW   )r   r  s     r   get_bounds_instancesz;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instances  s    "b>!r   r   r   r   r   )ri   r3   r   r   r  g333333?r   r   r0   h㈵>r   )r*   r   r'   r   r   r   )rZ   r  r  ri   bounds_funcrb   r   s          r   test_bounds_shapezBoundsMixin.test_bounds_shape  s   		" y$?C 13GH3Z#NBC@Sz2#NBC+6sS#J+G+/;;8  Sz2#NBC+6Sz3+G+/;;8  Sz2#"BC&Cy3*=;;(  Sz=!  I @r   c                    t        t        dt                     }t        |j                  dd       t        t        dt        d            }t        |j                  dd       t        t        dt        d	d
            }t        |j                  dd       t        t        dt        d	            }t        |j                  d	d       t        t
        ddgt        d	d	gd
            }t        |j                  ddgd       t        t
        ddgt        ddg            }t        |j                  ddgd       y )Nr   )r  r3   r   r   r   r   )rd   r   r        )re   r  rR   )r   r   r   r   r   r'   r   s     r   test_bounds_instancesz!BoundsMixin.test_bounds_instances  s    KVX>s.KVs^Ds.KVt5LMs.KfoFt$/NS#J#)dD\c#BDSz5NS#J#)c3Z#8:Sz5r   r   c                    t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }t        j                  ddg      }|t         j                   dgt         j                  ff|t         j                   dgt         j                  ff|t         j                   dgt         j                  ff|t         j                   dgdt         j                  gff|ddgddgff|d	dgd
dgffg}|D ]b  \  }}t        dddt        gddd
gdgddg      D ]>  \  }	}
}t        t        ||	||
|| j                        }t        |j                  dd       @ d y )Ng       r   r   r3   g333333rQ   g      ?r   g      Ir   rr   r   r   r   ri   r   r   r   r  r   )
r$   r%   infr   r1   r   r-   r   r   r   )rZ   x0_1x0_2x0_3x0_4x0_5problemsrb   r  ri   r   r   r   s                r   test_rosenbrock_boundsz"BoundsMixin.test_rosenbrock_bounds  sw   xxs$xxc
#xxs$xxc
#xxs$bffWdORVV,-bffWcNBFF+,bffWcNBFF+,bffWcNS"&&M23S#Jc
+,UCL3*-.
 #JB+2	4@3*e,f%,''Wi $NBV,3y+/;;8  $?,' #r   N)rs   rt   ru   r  r	  r  r  r  r  r  pytestmark	fail_slowr&  r   r   r   r  r    sK    >:=F'>46* [[1@ @r   r  c                       e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  d      d        Zd	 Zd
 Zd Zy)SparseMixinc           	          t               }t        t        t        |j                  |j
                  |j                  d| j                         t        t        t        |j                  |j
                  d|j                  | j                         y )Nr   r   r   )r   jac_sparsityr   )	rO   r   r   r   ro   rb   ri   r   rg   r   s     r   test_exact_tr_solverz SparseMixin.test_exact_tr_solver  sY     j-aee '	=j- 'ajj![[	*r   c                    t        d      }t        d      }t        |j                  |j                  |j                  | j
                        }t        |j                  |j                  |j                  | j
                        }t        |j                  |j                         t        |j                  |j                  d       t        |j                  dd       t        |j                  dd       y )NrS   rj   r\   r   #B;r   r   )rO   r   ro   rb   ri   r   r   r   r   r   r   rZ   rS   r\   
res_sparse	res_denses        r   test_equivalencezSparseMixin.test_equivalence  s    #2"0"JJ		vzz;; 
 "IIuxxVZZ;; 	 	Z__inn5
ikk>
7	6r   c                     t               }t        |j                  |j                  |j                  | j
                  ddi      }t        |j                  dd       y )Nbtol绽|=r   
tr_optionsr   r2  r   )rO   r   ro   rb   ri   r   r   r   rZ   r   r   s      r   test_tr_optionszSparseMixin.test_tr_options  sC     AEE144t{{(.8!%0r   c           
         t               }t        t        t        |j                  |j
                  |j                  d| j                         t        t        t        |j                  |j
                  |j                  dddi       y )Nbestr-  r   tolr9  )r   r;  )	rO   r   r   r   ro   rb   ri   r   r   r   s     r   test_wrong_parametersz!SparseMixin.test_wrong_parameters  sY     j-aee &t{{	<iqttQUU &E5>	Cr   c                    t        d      }t        d      }t        |j                  |j                  |j                  | j
                        }t        |j                  |j                  |j                  | j
                        }t        |j                  dd       t        |j                  dd       t        t        |j                               t        t        |j                  t        j                               y )NrS   r1  r\   r   r   r2  r   )rO   r   ro   rb   ri   r   r   r   r   r
   
isinstancer$   ndarrayr3  s        r   test_solver_selectionz!SparseMixin.test_solver_selection  s    #2"0"6::vyyfjj*.++7
!%))UXX599)-6	
7	6()
9=="**56r   c                    t               }dD ]  }t        |j                  |j                  || j                        }t        |j                  |j                  || j                  |j
                        }t        |j                  |j                         t        |j                  |j                  d       t        |j                  dd       t        |j                  dd        y )N)r   r   r   r   )r   r.  r2  r   r   )rO   r   ro   rb   r   rg   r   r   r   r   r   )rZ   r   ri   r5  r4  s        r   test_numerical_jaczSparseMixin.test_numerical_jac!  s     /C%aeeQTT3t{{KI&qttSZZ)J 9IKKEBINNAE:JOOQU; 0r   r   c           	         t               }t        |j                  dddgd |j                  g      D ]&  \  }}t	        |j
                  |j                  ||j                  t        j                  f| j                  |      }t	        |j
                  |j                  |t        j                   |j                  f| j                  |      }t	        |j
                  |j                  ||j                  |j                  f| j                  |      }t        |j                  dd       t        |j                  dd       t        |j                  dd       ) y )Nr   r   r   )r  r   r.  r   r9  r   )rO   r   ri   rg   r   ro   rb   rd   r$   r  r   re   r   r   )rZ   r   ri   r.  res_1res_2res_3s          r   test_with_boundszSparseMixin.test_with_bounds-  s	    !(	9d3dAJJ5G"IC!qttS!$${{>E "qttS266'144{{?E "qttS!$${{?E E,,ae<E,,ae<E,,ae<"Ir   c                     t               }|j                  d d }t        t        t        |j
                  |j                  || j                         y )Nr0   r.  r   )rO   rg   r   r   r   ro   rb   r   )rZ   r   rg   s      r   test_wrong_jac_sparsityz#SparseMixin.test_wrong_jac_sparsity?  s;     ::cr?j-#+DKK	Ar   c           	      >   t        d      }t        |j                  |j                  |j                  | j
                        }t        |j                  dd       t        t        t        |j                  |j                  |j                  | j
                  d       y )	NrU   r1  r   r3   r2  r   r   )r   r   
rO   r   ro   rb   ri   r   r   r   r   r   r<  s      r   test_linear_operatorz SparseMixin.test_linear_operatorE  sc    J/AEE144t{{C#E2j-aee![[G	=r   c           	      T   t               }t        |j                  |j                  |j                  | j
                  d      }t        |j                  dd       t        d      }t        t        t        |j                  |j                  |j                  | j
                  d       y )Nri   )r   r   r3   r2  r   rU   r1  rQ  r<  s      r   test_x_scale_jac_scalez"SparseMixin.test_x_scale_jac_scaleL  sp     AEE144t{{$)+#E2J/j-aee![[%	9r   N)rs   rt   ru   r/  r6  r=  rA  rE  rG  r'  r(  r)  rL  rO  rR  rT  r   r   r   r+  r+    sT    *71C
7
< [[1= ="A=9r   r+  c                   *    e Zd Zd Zd Zd Zd Zd Zy)LossFunctionMixinc                     t         D ]7  }t        t        d|| j                        }t	        |j
                  dd       9 t        t        t        t        dd| j                         y )Nr   lossr   r   V瞯<r   hinge)LOSSESr   r   r   r   r   r   r   rZ   rY  r   s      r   test_optionszLossFunctionMixin.test_optionsX  sN    DSt'+{{4CCEE151 
 	j-c"4;;	8r   c                     t         D ]H  }t        t        d|| j                        }t	        |j
                  t        |j                               J y )Nr   rX  )r\  r   r   r   r   ro   r   r]  s      r   test_funzLossFunctionMixin.test_funa  s<     DSt'+{{4C+cee"45 r   c                    t        j                  dg      }t        t        |t        dd| j
                        }t        |j                  d|z  |dz  dz   z         t        t        |t        dd| j
                        }t        |j                  d|z         t        t        |t        dd| j
                        }t        |j                  d|z  |dz  dz   z  d|dz  dz   dz  z   d	z  z         t        t        |t        d
d| j
                        }t        |j                  d|z  |dz  dz   z  d|dz  dz   dz  z   z         t        t        |t        dd| j
                        }t        |j                  d|z  |dz  dz   z  d|dz  dz   dz  z   z         t        t        |t        t        d| j
                        }t        |j                  d|z  |dz  dz   z  d|dz  dz   dz  z   dz  z         y )Nr   linearr"   rY  r   r   r   r   hubersoft_l1r   cauchyarctanrC   gUUUUUU?)
r$   r%   r   r   r   r   r   r   r   r   )rZ   r   r   s      r   	test_gradzLossFunctionMixin.test_gradi  s    HHcUOKKh%&t{{<SXXq1u1q12KKg%&t{{<SXXq1u%KKi%&t{{<AA*a1a4!8a-.?#-EE	G KKh%&t{{<!a%1a4!8"4QTAXM8I"JKKKh%&t{{<!a%1a4!8"4QTAXM8I"JKKKm%&t{{<AA*a1a4!8a-.?3-GG	Ir   c           	         d}|dz  dz   }t        t        |t        dd| j                        }t	        |j
                  d|z         t        t        |t        dd| j                        }t	        |j
                  d|z  t        dz  z         t        t        |t        dd	d
      }t	        |j
                  d|z         t        t        |t        dd| j                        }t        |j
                  d|z  d|dz  z   dz  z         t        t        |t        dd| j                        }t        |j
                  d|z  t        dz  z         t        t        |t        dd	d| j                        }|d	z  }t        |j
                  d|z  d|dz  z
  dz  z  d|dz  z   z         t        t        |t        dd| j                        }t        |j
                  d|z  t        dz  z         t        t        |t        ddd| j                        }|dz  }t        |j
                  d|z  dd|dz  z  z
  dz  z  d|dz  z   z         t        t        |t        t        d      }t        |j
                  d|z  t        dz  z         t        t        |t        t        dd
      }|dz  }t        |j
                  d|z  d|dz  dz  z
  dz  z  d|dz  z   dz  z         y )Nr   r   r   rb  r"   rc  rd  r   r,   )rY  f_scaler   re  g      rf  )rY  rj  r   r   rg  g      4@r   r<   rC   )rY  r      g)	r   r   r   r   r   ri   r   r   r   )rZ   r   rn   r   fss        r   test_jaczLossFunctionMixin.test_jac  s    qD1HKKh%&t{{<SWWa!e$ KKg%&t{{<SWWa!ec3h./ KKg$&4SWWa!e$ KKi%&t{{<Q!ad(U):!:; KKh%&t{{<Qc!12 KKh$&4;;HVQ!b!e)c)9!9QQY!GH KKh%&t{{<Qc!12 KKh$(1T[[JVQ!a"a%i-#)=!=RU!KL KKm%&(Qc!12 KK!.AGUARUQY 44BE	T7JJ	Lr   c                 4   dD ]  }t        dd|d      }ddd|j                  fD ]  }t        |j                  |j                  || j
                  	      }t        |j                  dd
       t        D ]  }|dk(  r	t        |j                  |j                  |||| j
                        }t        |j                  dd
       t        t        |j                  |j                  z
        t        |j                  |j                  z
        k            y )N)rR   r   r"   rR   r   )r   r   r   r   r   r   r   rb  )ri   rY  rj  r   )rw   ri   r   ro   r{   r   r   r   r\  r   r   r   r   )rZ   r   r   ri   res_lsqrY  
res_robusts          r   test_robustnessz!LossFunctionMixin.test_robustness  s    E)!S%QGA!9dAEE:'qtt/3{{< 2 2ADA"Dx' !.qtt4#{{",J $J$9$914HD!78 QWW!456 7 #	 ;  r   N)rs   rt   ru   r^  r`  rh  rm  rq  r   r   r   rV  rV  W  s    86I>BLH7r   rV  c                       e Zd ZdZy)
TestDogboxdogboxN)rs   rt   ru   r   r   r   r   rs  rs    s    Fr   rs  c                       e Zd ZdZd Zy)TestTRFtrfc           	          t               }dD ]J  }t        |j                  |j                  |j                  dd|i      }t        |j                  dd       L y )N)TFrw  
regularizer:  r   r2  r   )rO   r   ro   rb   ri   r   r   )rZ   r   ry  r   s       r   test_lsmr_regularizationz TestTRF.test_lsmr_regularization  sK     'JqttQUU5,8*+EGCCHHae4 (r   N)rs   rt   ru   r   rz  r   r   r   rv  rv    s    F5r   rv  c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestLMr   c                 >    t        t        t        t        ddd       y )Nr   )r  r   r   r  r   r   r   r   r   s    r   test_bounds_not_supportedz TestLM.test_bounds_not_supported  s    j-+d	<r   c                 D    ddg}t        t        t        t        |d       y )NrB   r"   r   r   )r   r   r   r7   r   s     r   test_m_less_n_not_supportedz"TestLM.test_m_less_n_not_supported  s    !Wj-1G!	#r   c                     t               }t        t        t        |j                  |j
                  |j                  d       y )Nr   r   rO   r   r   r   ro   rb   ri   r   s     r   test_sparse_not_supportedz TestLM.test_sparse_not_supported  s+     j-aee!	#r   c                 @    t        t        t        t        ddgd       y )Nr   r"   r   rN  r~  r   s    r   test_jac_sparsity_not_supportedz&TestLM.test_jac_sparsity_not_supported  s    j-c$%3t	5r   c                     t        d      }t        t        t        |j                  |j
                  |j                  d       y )NrU   r1  r   r   r  r   s     r   !test_LinearOperator_not_supportedz(TestLM.test_LinearOperator_not_supported  s-    J/j-aee!	#r   c                     t        t        ddd      }t        |j                  dd       t	        t
        t         t        ddd	       y )
Nr   rb  r   rX  r3   r   r   rd  )r   rY  )r   r   r   r   r   r   r   s     r   	test_losszTestLM.test_loss  s7    K8DIs.j-c!	1r   N)
rs   rt   ru   r   r  r  r  r  r  r  r   r   r   r|  r|    s%    F<#
#
5#
1r   r|  c                  T    t        t        d      } t        | j                  dd       y )Nr   r   r9  r   )r   r   r   r   )r   s    r   r   r     s    
S
)CCEE15)r   c                  X    dD ]%  \  } }}t        t        t        t        d|| |d       ' y )N))NvIh%<=r  )r  Nr  )r  r  Nr   r   )r   r   r   r   r~  )r   r   r   s      r   test_small_tolerances_for_lmr    s0    3dD 	j-cd4	93r   c                     t         j                  j                  d       t        j                  ddd      j	                  d      } t         j                  j                  d      j	                  d      }d fd}t        |ddg| |f      }|j                  d	kD  sJ t        |j                  t        j                  d
dg      d       y )Nr"   r   rr   float32c                     | d   | d   |z  z   S r!   r   )r   r   s     r   funcztest_fp32_gh12991.<locals>.func&  s    tadQhr   c                      | |      |z
  S rW   r   )r   r   rL   r  s      r   errztest_fp32_gh12991.<locals>.err)  s    AqzA~r   r   )r   r   g W ?g	?g-C6
?r   )
r$   r_   r`   rc   astyper   r   r   r   r%   )r   rL   r  r   r  s       @r   test_fp32_gh12991r    s     IINN1
Aq#%%i0A
		$$Y/A dD\A
7C 88a<<CEE288Y
$;<4Hr   c                     dd} fd}d}t        || ddt        j                  f      }t        |j                  |j
                  t        j                  d      t        j                  t        j                              \  }}|j                  dk(  sJ t        j                  j                  |j
                  |z  t        j                        |k  sJ y )	Ng-q=gyYs=c                     | z
  dz  S r   r   )r   answers    r   chi2z%test_gh_18793_and_19351.<locals>.chi2;  s    &1}r   rZ  r   )rb   r   r  r"   )ord)
r   r$   r  r   r   r   
atleast_1dr   linalgr   )initial_guessr  r   r   scaling_r  s         @r   test_gh_18793_and_19351r  7  s    FM D
UArvv;
OC #355#((#%==#3R]]2665JLJGQ::??99>>#((W,"&&>9D@@@r   c                     t        j                  dgdz  g dz         t        j                  dj                        dz  fd} g d}dt         j                  d	d
ff}t        | |d|      }|j                  sJ y )Nr3   B   )Sr   r3   r3   r3   r3   r3   r   r   r3   r3   r   r   r   r   r3   r3   r3   r   r3   r3   r   r   r3   r   r         @r   r3   r3   r          @r  r  r        "@      @r   r  r  r         *@r  r        &@r  r  g      ,@      3@r  g      .@g      2@g      :@r        @@g      =@g      <@      B@r  g     A@r  g     E@      J@r  g      M@g      L@r  g     P@g     J@g      R@g      V@g     @S@g     W@g     W@g      U@g     U@g     @Y@g     Z@g      [@g     ]@g      X@g     \@g     @a@g      a@r   rR   c                 R    | \  }}}|t        j                  ||z
  z        z  z
  S rW   )r$   r|   )paramsABrb   xdataydatas       r   exponential_wrappedz*test_gh_19103.<locals>.exponential_wrappedc  s0    1b266!urz*++e33r   )r   r   r   )r   r   r   r,   gfffff4@rw  )r   r  )r$   r%   rh   r   r  r   r   )r  rb   r  r   r  r  s       @@r   test_gh_19103r  Q  s~     HHbTBY 	" 	 	E IIa$s*E4 
BRVVR./F
+Rf
MC;;;r   )r   )r3   ):	itertoolsr   numpyr$   numpy.linalgr   numpy.testingr   r   r   r   r'  r	   r   scipy.sparser
   r   scipy.sparse.linalgr   scipy.optimizer   r   !scipy.optimize._lsq.least_squaresr   scipy.optimize._lsq.commonr   r   r   r   r   r'   r*   r-   r1   r4   r7   r:   r=   r@   rM   rO   rw   r   listkeysr\  r   r  r+  rV  rs  rv  r|  r   r  r  r  r  r   r   r   <module>r     s*     < <  * - 0 0 @ U U"9  
%.0 0f > 
% %%'	(M?	:V* V*rg@ g@Tc9 c9LE7 E7PK6G 5ik3D 51Y 1D*9I2A4r   