
    bi                     D   d dl Z d dlmZ d dlmZ d dlZd dlm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 d d	lmZmZmZ d d
lmZ d dlmZmZmZ d dlmZ d4dZ d5dZ!d Z"d Z#d Z$ G d d      Z%d Z&d Z'd Z(d Z)d Z*d5dZ+d Z, G d d      Z- G d d      Z.d Z/ e0 ejb                               e/gz   Z2 G d  d!      Z3 G d" d#      Z4 G d$ d%      Z5 G d& d'      Z6 G d( d)e3e4e5e6      Z7 G d* d+e3e4e5e6      Z8 G d, d-e3      Z9d. Z:d/ Z;d0 Z<d1 Z=d2 Z>d3 Z?y)6    N)product)Pool)norm)assert_assert_allcloseassert_equal)raises)issparse	lil_array)aslinearoperator)least_squaresBoundsminimize)IMPLEMENTED_LOSSES)EPSmake_strictly_feasibleCL_scaling_vector)OptimizeResultc                     | |z
  dz  dz   S )N         @ xas     b/home/cdr/jupyterlab/.venv/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                       e Zd Zd ZddZy)Fun_Rosenbrockc                     d| _         y Nr   )nfevselfs    r   __init__zFun_Rosenbrock.__init__*   s	    	r   c                 B    | xj                   dz  c_         t        |      S Nr$   )r4   r/   )r6   r   r   s      r   __call__zFun_Rosenbrock.__call__-   s    		Q	a  r   Nr   )__name__
__module____qualname__r7   r:   r   r   r   r1   r1   )   s    !r   r1   c                 D    t        j                  d| d   z  dgddgg      S )Nr   r.   r%   r(   s    r   jac_rosenbrockrB   2   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.   rA           r%   r(   s    r   jac_rosenbrock_bad_dimrE   9   s6    88	qtR	Q	c
  r   c                     t        |       d   S r3   )r/   r(   s    r   fun_rosenbrock_croppedrG   A       !Qr   c                     t        |       d   S r3   )rB   r(   s    r   jac_rosenbrock_croppedrJ   E   rH   r   c                 >    t        j                  | | dz  | dz  g      S )Nr      r%   r(   s    r   fun_wrong_dimensionsrM   J   s    88Q1adO$$r   c                 B    t        j                  t        | |            S )N)r   )r&   
atleast_3dr!   r   s     r   jac_wrong_dimensionsrP   N   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$   rA      rL   )intr&   sqrtshapezerosreshaperavel)r   nuys       r   fun_bvpr]   R   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                     t         j                  j                  d      }| _        t        j                  |        _        t        j                  dd|       _        t        j                  dd|       _         xj                  d|j                  |      z  z  c_         xj                  d|j                  |      z  z  c_         xj
                  d|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 )Ni0 rR         grD   皙?sparsedtyper$   operatorc                 8    t        j                  |             S N)r   _jacr   r6   s    r   <lambda>z-BroydenTridiagonal.__init__.<locals>.<lambda>v   s    !1$))A,!? r   densec                 B    j                  |       j                         S rh   )ri   toarrayrj   s    r   rk   z-BroydenTridiagonal.__init__.<locals>.<lambda>y   s    1!5!5!7 r   F)r&   randomdefault_rngrZ   onesx0linspacelbubstandard_normalr   r   rT   sparsityarangeri   jacr   )r6   rZ   moderngis   `    r   r7   zBroydenTridiagonal.__init__\   s   ii##F+771:+++b$*++dC+3,,Q///3,,Q///3,,Q///($''477C8%q!fC8DM		!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 )NrL   r$   rA   r   r   )r6   r   fs      r   funzBroydenTridiagonal.fun}   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 )NrL   r   r$   rA   rR   )r   rZ   r&   rx   )r6   r   Jr|   s       r   ri   zBroydenTridiagonal._jac   s    tvvtvv&'IIdffa!e)!Q$IIa !QU(IIdffqj!!QU(r   N)d   rc   )r<   r=   r>   r7   r   ri   r   r   r   r_   r_   [   s    Br   r_   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                 V   t         j                  j                  |      }|| _        d| _        t        j
                  d      | _        t        j                  |d   |d   |      | _        |t        j                  || j                  z        z   | _
        | xj                  ||j                  | j                        z  z  c_
        |j                  d| j                  |      }| j                  |xx   d|z  |j                  |      z  z  cc<   t        j                  ||g      | _        y )Nr   r   r$   2   )r&   ro   rp   mrZ   rW   p0rs   r   expr\   rv   integersr'   p_opt)	r6   r   bnoise
n_outliersx_rangen_pointsr{   outlierss	            r   r7   z"ExponentialFittingProblem.__init__   s    ii##C(((1+WQZX>RVVAJ''%#--dff555<<466:6xBJJ)???XXq!f%
r   c                 r    |d   t        j                  |d   | j                  z        z   | j                  z
  S r#   )r&   r   r   r\   r6   ps     r   r   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&   emptyr   rZ   r   r   )r6   r   r   s      r   ry   zExponentialFittingProblem.jac   sZ    HHdffdff%&!Q$&&266!A$-00!Q$r   )r$   )rA   r$      N)r<   r=   r>   __doc__r7   r   ry   r   r   r   r   r      s    # ;B"&&"5r   r   c                     t        j                  d| j                  f      }d| z   }d|dz  dz
  z  |d<   |dz  |d<   d|dz  z  |d<   |S )NrL   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d Zd Zej4                  j7                  d      ej4                  j9                  d      d               Zy)	BaseMixinzBjac='(3-point|cs)' works equivalently to '2-point' for method='lm'c                     t        t        d| j                        }t        |j                  dd       t        |j
                  t        |j                               y )N       @methodr   -C6?atol)r   r   r   r   r   r   r6   ress     r   
test_basiczBaseMixin.test_basic   s;    KDKK@qt,SUU!34r   c           	      D   d}dddt         fD ]  }t        j                         5  t        j                  d| j                  t
               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csignorer   )argsr   r   )kwargsr   r   )rtol)rL   rS   kaboomrL   )r!   warningscatch_warningsfilterwarningsmsgUserWarningr   r   r   r   r   assert_raises	TypeError)r6   r   ry   r   res1s        r   test_args_kwargszBaseMixin.test_args_kwargs   s    y$< 	DC((* 8''$((KH#Kc+/;;8$[#sC8+/;;8	8 CEE140DFFAD1)]K&t{{<)]K"*At{{D	D8 8s   A%DD	c                 v   dddt         fD ]y  }t        j                         5  t        j                  d| j                  t
               t        t        d|| j                        }d d d        t        j                  dd	       { 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ry   r   )r!   r   r   r   r   r   r   r   r   r   r   r   
ValueErrorr6   ry   r   s      r   test_jac_optionszBaseMixin.test_jac_options   s    y$< 	1C((* O''$((KH#Kc$++NO CEE140		1 	j-cv![[	*O Os   AB//B8	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   )r6   r   r   s      r   test_nfev_optionszBaseMixin.test_nfev_options   s8    " 	1HS8'+{{4CCEE140	1r   c                 z   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                         y )N      ?      ?ry   r   )x_scaler   auto)r   r         y      ?       @)	r&   r'   r   r   r   r   r   r   r   )r6   r   r   s      r   test_x_scale_optionszBaseMixin.test_x_scale_options   s    RXXse_e4 	&GS'BCCEE1%	& 	j-6$++	?j-4	=j-8DKK	Ar   c                     t        t        dd| j                        }t        t        dd | j                        }t        |j                  dd       t        |j                  dd       y )Nr   rb   )	diff_stepr   r   r   r   r   )r6   r   res3s      r   test_diff_stepzBaseMixin.test_diff_step   sQ    [#$(KK1[#'+DKKA--r   c           	          t        t        t        t        d| j                  ddi       t        t        t        t        d| j                  ddi       y )Nr   no_such_optionr   )r   optionsr   )r   r   r   r   r   r5   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(  r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?lmr.   )r   r   r   r   r   costr   ry   grad
optimalityr   active_maskr   njevr4   statussuccessr   s     r   test_full_resultzBaseMixin.test_full_result   s     KT[[Aqt,$'#.!$/5S__a(;;$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@	   rS   $   r   )r   r   r   r   r   r&   r'   r   r   ry   r   r   r   r4   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                    t        dd      D ]y  }t        j                  j                  d      }|j	                  d      dz  }t               }t        ||t        | j                  |      }|j                  |j                  k(  ryJ  y )Nr$   rL   i r   )r   r.   )ry   r   r   )
ranger&   ro   rp   uniformr1   r   rB   r   r4   )r6   r|   r{   rr   ftrivialr   s         r   	test_nfevzBaseMixin.test_nfev'  sy    q! 	-A))''/C!$r)B%'HaC 88x}},,,	-r   c           
         ddg}ddg}t        dddt        gdt        j                  ddg      dgd	d
g      D ]}  \  }}}t	        j
                         5  t	        j                  d| j                  t               t        t        ||||| j                        }d d d        t        j                  |        y # 1 sw Y   "xY w)NrR   r$   r   r   r   r   皙?ry   exactlsmrr   r   	tr_solverr   )r   rB   r&   r'   r   r   r   r   r   r   r/   r   r   r   )r6   rr   x_optry   r   r   r   s          r   test_rosenbrockzBaseMixin.test_rosenbrock2  s    !WA'.It^<bhhSz*E2&!(# 	*#C) ((* M''$((KH#NBW.7MM CEE5)	*M Ms   AB99C	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 )NrR   r$   r   r   r   r   r   r   r   ry   r   r   r   r   g+=r   )r   r   r   r   rG   r   rJ   r&   r'   r   r   )r6   rr   ry   r   r   r   s         r   test_rosenbrock_croppedz!BaseMixin.test_rosenbrock_cropped?  s    !W;;$*m5KT+ ,3	41GH"((C:.6f%,' 9'Wi $*BW'=  !%89r   c                 P    t        t        t        t        d| j                         y Nr   r   )r   r   r   rM   r   r5   s    r   test_fun_wrong_dimensionsz#BaseMixin.test_fun_wrong_dimensionsN  s    j-1E$++	/r   c                 Z    t        t        t        t        dt        | j
                         y r   )r   r   r   r   rP   r   r5   s    r   test_jac_wrong_dimensionsz#BaseMixin.test_jac_wrong_dimensionsR  s    j-/	Er   c                 b    ddg}t        t        t        t        |t        | j
                         y )Nr$   r   r   )r   r   r   r/   rE   r   r6   rr   s     r   (test_fun_and_jac_inconsistent_dimensionsz2BaseMixin.test_fun_and_jac_inconsistent_dimensionsV  s%    Vj-,T[[	Br   c                     t        j                  d      j                  dd      }t        t        t
        t        || j                         y )NrS   r   r   )r&   rq   rX   r   r   r   r   r   r   s     r   test_x0_multidimensionalz"BaseMixin.test_x0_multidimensional[  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_scalar`  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_arraye  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  r   r   )ftolr   r   r   )r&   rq   r   r   r]   r   r4   r   )r6   rZ   rr   r   r   s        r   test_bvpzBaseMixin.test_bvpj  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  r5   s    r   /test_error_raised_when_all_tolerances_below_epsz9BaseMixin.test_error_raised_when_all_tolerances_below_eps{  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   rR   r$   )):0yE>NN)Nr  N)NNr  )ry   r  r  r  r   )r   r   r/   rB   r   r   )r6   rr   r   r  r  r  r   s          r   0test_convergence_with_only_one_tolerance_enabledz:BaseMixin.test_convergence_with_only_one_tolerance_enabled  sk    ;;$!WA!6 	*D$  %)4'+{{4C CEE5)	*r   r$   r   c                 D   t        t        d| j                        }g }dD ]0  }t        t        d| j                  |      }|j                  |       2 t	        d      5 }t        t        d| j                  |j
                        }|j                  |       d d d        |D ]p  }|j                  sJ t        |j                  |j                         t        |j                  |j                         t        |j                  |j                         r y # 1 sw Y   xY w)Nr   r   r    )r   workersr   )r   r   r   appendr   mapr   r   r   r4   r   )r6   serialresesr  r   s        r   test_workerszBaseMixin.test_workers  s     {CD  	GSgC LL		
 !W 	SgkkC LL		
  	0C;;;)6;;/6;;/		0	 	s   9DD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  pytestmarkparallel_threads_limit	fail_slowr  r   r   r   r   r      s    
NC5D&*1	A.E&%(	-*9/EB
*
*
*
 "K
* [[''*[[30   +0r   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   )      $@rD   boundsr   r  r5   s    r   test_inconsistentzBoundsMixin.test_inconsistent  s    j-c(	>r   c                 R    t        t        t        t        dd| j                         y )Nr   )r   rS   r   r  r5   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   rL   r   r  r5   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   rD         @)r   r   r   r   r   r/   r5   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   ry   r!  r   rD   r   r   r   rA   rL   )r   r   r   )	r!   r   r   r   r   r   r   r   r   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 rh   r   rt   ru   s     r   get_bounds_directz8BoundsMixin.test_bounds_shape.<locals>.get_bounds_direct  s    r6Mr   c                     t        | |      S rh   )r   r/  s     r   get_bounds_instancesz;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instances  s    "b>!r   r   r   r   r   )ry   rD   r   r   r+  g333333?r   r   rA   h㈵>r   )r,   r   r)   r   r   r   )r6   r0  r2  ry   bounds_funcrr   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=!>	>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!  rD   r   r   r   r   )rt   r   r/        )ru   r3  rb   )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   rD   g333333ra   g      ?r   g      Ir   r   r   r   r   ry   r   r   r   r3  r   )
r&   r'   infr   rB   r   r/   r   r   r   )r6   x0_1x0_2x0_3x0_4x0_5problemsrr   r!  ry   r   r   r   s                r   test_rosenbrock_boundsz"BoundsMixin.test_rosenbrock_bounds  s   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)r<   r=   r>   r"  r$  r&  r)  r,  r5  r8  r  r  r  rA  r   r   r   r  r    sK    >:=F'>46* [[2@ @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   )	r_   r   r   r   r   rr   ry   r   rw   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 )Nrc   rz   rl   r   #B;r   r   )r_   r   r   rr   ry   r   r   r4   r   r   r   r6   rc   rl   
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   rJ  r   )r_   r   r   rr   ry   r   r   r   r6   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bestrE  r   tolrQ  )r   rS  )	r_   r   r   r   r   rr   ry   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 )Nrc   rI  rl   r   r   rJ  r   )r_   r   r   rr   ry   r   r   r   r   r
   
isinstancer&   ndarrayrK  s        r   test_solver_selectionz!SparseMixin.test_solver_selection4  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   rF  rJ  r   r   )r_   r   r   rr   r   rw   r   r4   r   r   r   )r6   r   ry   rM  rL  s        r   test_numerical_jaczSparseMixin.test_numerical_jac@  s     / 	<C%aeeQTT3t{{KI&qttSZZ)J 9IKKEBINNAE:JOOQU;	<r   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   rF  r   rQ  r   )r_   r   ry   rw   r   r   rr   rt   r&   r:  r   ru   r   r   )r6   r   ry   rF  res_1res_2res_3s          r   test_with_boundszSparseMixin.test_with_boundsL  s    !(	9d3dAJJ5G"I 	=C!qttS!$${{>E "qttS266'144{{?E "qttS!$${{?E E,,ae<E,,ae<E,,ae<	=r   c                     t               }|j                  d d }t        t        t        |j
                  |j                  || j                         y )NrA   rF  r   )r_   rw   r   r   r   r   rr   r   )r6   r   rw   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 )	Nrf   rI  r   rD   rJ  r   r   )r   r   
r_   r   r   rr   ry   r   r   r   r   r   rT  s      r   test_linear_operatorz SparseMixin.test_linear_operatord  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 )Nry   )r   r   rD   rJ  r   rf   rI  ri  rT  s      r   test_x_scale_jac_scalez"SparseMixin.test_x_scale_jac_scalek  sp     AEE144t{{$)+#E2J/j-aee![[%	9r   N)r<   r=   r>   rG  rN  rU  rY  r]  r_  r  r  r  rd  rg  rj  rl  r   r   r   rC  rC    sT    *71C
7
< [[2= ="A=9r   rC  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   r6   rq  r   s      r   test_optionszLossFunctionMixin.test_optionsw  sS     	2DSt'+{{4CCEE151	2
 	j-c"4;;	8r   c                     t         D ]H  }t        t        d|| j                        }t	        |j
                  t        |j                               J y )Nr   rp  )rt  r   r   r   r   r   r   ru  s      r   test_funzLossFunctionMixin.test_fun  sA      	6DSt'+{{4C+cee"45	6r   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$   rq  r   r   r   r   hubersoft_l1r   cauchyarctanrS   gUUUUUU?)
r&   r'   r   r   r!   r   r   r   r   r   )r6   r   r   s      r   	test_gradzLossFunctionMixin.test_grad  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   rz  r$   r{  r|  r   r.   )rq  f_scaler   r}  g      r~  )rq  r  r   r   r  g      4@r   rL   rS   )rq  r      g)	r   r   r!   r   r   ry   r   r   r   )r6   r   r~   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)rb   r   r$   rb   iy )r{   r   r   r   r   r   r   r   rz  )ry   rq  r  r   )r   ry   r   r   r   r   r   r   rt  r   r   r   r   )r6   r   r   ry   res_lsqrq  
res_robusts          r   test_robustnessz!LossFunctionMixin.test_robustness  s     	7E)!S%XFA!9dAEE: 7'qtt/3{{< 2 2ADA" 7Dx' !.qtt4#{{",J $J$9$914HD!78 QWW!456 77	7	7r   N)r<   r=   r>   rv  rx  r  r  r  r   r   r   rn  rn  v  s    86I>BLH7r   rn  c                       e Zd ZdZy)
TestDogboxdogboxN)r<   r=   r>   r   r   r   r   r  r    s    Fr   r  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)TFr  
regularizerR  r   rJ  r   )r_   r   r   rr   ry   r   r   )r6   r   r  r   s       r   test_lsmr_regularizationz TestTRF.test_lsmr_regularization  sP     ' 	5JqttQUU5,8*+EGCCHHae4	5r   N)r<   r=   r>   r   r  r   r   r   r  r    s    F5r   r  c                   :    e Zd 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   )r7  r   r   r   r   r   r   r   r5   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 )NrR   r$   r   r   )r   r   r   rG   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   r_   r   r   r   r   rr   ry   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   rf  r  r5   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 )Nrf   rI  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   rz  r   rp  rD   r   r   r|  )r   rq  )r   r   r   r   r   r   r   s     r   	test_losszTestLM.test_loss'  s7    K8DIs.j-c!	1r   c                     d }t        j                         5  t        j                  ddt               t	        t
        dgd|       d d d        y # 1 sw Y   y xY w)Nc                     J rh   r   r(   s    r   callbackz5TestLM.test_callback_with_lm_method.<locals>.callback/  s    5r   r   z@Callback function specified, but not supported with `lm` method.r   r   )rr   r   r  )r   r   r   r   r   r   )r6   r  s     r   test_callback_with_lm_methodz#TestLM.test_callback_with_lm_method.  sW    	 $$& 	O##R
 +1#dXN	O 	O 	Os   0AAN)r<   r=   r>   r   r  r  r  r  r  r  r  r   r   r   r  r    s+    F<#
#
5#
1
Or   r  c                  T    t        t        d      } t        | j                  dd       y )Nr   r   rQ  r   )r   r   r   r   )r   s    r   r   r   ;  s    
S
)CCEE15)r   c                  8  
 g 
dt         f
fd} 
fd}dt         f
fd}
fd}| |g}||g}d d d g}t        ||      D ]u  \  }}
j                           ||      }	t        
      d	kD  sJ 
d
   j                  d	kD  sJ |	j
                  dk7  sJ t        
d
   j                  |	j                         w t        ||      D ]R  \  }}
j                           ||      }	t        
      d	kD  sJ 
d
   j                  dk(  sJ |	j
                  dk(  rRJ  y )Nintermediate_resultc                 (    j                  |        y rh   )r  r  resultss    r   my_callback_optimresultz.test_callback.<locals>.my_callback_optimresultF  s    *+r   c                 X    t               }d|_        | |_        j                  |       y)Nr$   F)r   nitr   r  r   rr  s     r   my_callback_xz$test_callback.<locals>.my_callback_xI  s(    qr   c                 2    j                  |        t        rh   )r  StopIterationr  s    r   &my_callback_optimresult_stop_exceptionz=test_callback.<locals>.my_callback_optimresult_stop_exceptionP  s    *+r   c                 b    t               }d|_        | |_        j                  |       t        r9   )r   r  r   r  r  r  s     r   my_callback_x_stop_exceptionz3test_callback.<locals>.my_callback_x_stop_exceptionU  s+    qr   c                 (    t        t        dd|       S )Nr   r  r   r  r   r   r  s    r   rk   ztest_callback.<locals>.<lambda>c  s    {C08: r   c                 *    t        t        ddd|       S )Nr   r  )g              @)r   r!  r  r  r  s    r   rk   ztest_callback.<locals>.<lambda>e  s    {C.9HN r   c                 (    t        t        dd|       S )Nr   r  r  r  r  s    r   rk   ztest_callback.<locals>.<lambda>g  s    {C08: r   r   rA   rR   r$   )r   r   clearlenr  r   r   r   )r  r  r  r  callbacks_nostopcallbacks_stopcalls
mycallbackcallr   r  s             @r   test_callbackr  A  sI    G,^ ,+
 0?<24N
	:	N	:E $$4e< .
D:7|ar{"""zzRsuu-. $NE: 	 
D:7|ar{!###zzR	 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    s5    3 9dD 	j-cd4	99r   c                     t         j                  j                  d      } t        j                  dddt         j                        }| j                  dt         j                        }d fdfd	}t        d
d
g||f      }|j                  dkD  sJ t        |d
dgd||fddi      }t        |j                  |j                  d       y )Ni  r   r$   r   rd   )r   re   c                 X    | d   | d   |z  z   j                  t        j                        S r#   astyper&   float32)r   r   s     r   funcztest_fp32_gh12991.<locals>.func  s'    !qtax''

33r   c                 V     | |      |z
  j                  t        j                        S rh   r  )r   r   r\   r  s      r   errztest_fp32_gh12991.<locals>.err  s"    Q
Q&&rzz22r   c                 D    t        j                   | ||      dz        S r    )r&   sum)r   r   r\   r  s      r   mseztest_fp32_gh12991.<locals>.mse  s    vvc!QlAo&&r   r   )r   r   r   cobyqafinal_tr_radiusgư>)r   r   r   g9̗?r   )
r&   ro   rp   rs   r  r   r4   r   r   r   )r{   r   r\   r  r   res2r  r  s         @@r   test_fp32_gh12991r    s     ))


%C
Aq#RZZ0A

2::
.A43' dD\A
7C 88a<<	sV"D)D CEE466-r   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   rr  r   )rr   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    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 )NrD   B   )Sr   rD   rD   rD   rD   rD   r   r   rD   rD   r   r   r   r   rD   rD   rD   r   rD   rD   r   r   rD   r   r         @r   rD   rD   r   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   rb   c                 R    | \  }}}|t        j                  ||z
  z        z  z
  S rh   )r&   r   )paramsABrr   xdataydatas       r   exponential_wrappedz*test_gh_19103.<locals>.exponential_wrapped  s0    1b266!urz*++e33r   )r   r   r   )r   r   r   r.   gfffff4@r  )r   r!  )r&   r'   rx   r   r:  r   r   )r  rr   r!  r   r  r  s       @@r   test_gh_19103r    s~     HHbTBY 	" 	 	E IIa$s*E4 
BRVVR./F
+Rf
MC;;;r   r;   )rD   )@r   	itertoolsr   multiprocessingr   numpyr&   numpy.linalgr   numpy.testingr   r   r   r  r	   r   scipy.sparser
   r   scipy.sparse.linalgr   scipy.optimizer   r   r   !scipy.optimize._lsq.least_squaresr   scipy.optimize._lsq.commonr   r   r   r   r   r!   r)   r,   r/   r1   rB   rE   rG   rJ   rM   rP   r]   r_   r   r   listkeysrt  r   r  rC  rn  r  r  r  r   r  r  r  r  r  r   r   r   <module>r     sI        ) )  * , 0 : : @ U U )"9! !  
%.0 0f > 
% %%'	(M?	:h0 h0Vg@ g@Tc9 c9LE7 E7PK6G 5ik3D 5+OY +O\*@ F9%.PA4r   