
    Џkh'                     <   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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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. e/ ej`                               e.gz   Z1 G d  d!      Z2 G d" d#      Z3 G d$ d%      Z4 G d& d'      Z5 G d( d)e2e3e4e5      Z6 G d* d+e2e3e4e5      Z7 G d, d-e2      Z8d. Z9d/ Z:d0 Z;d1 Z<d2 Z=d3 Z>y)6    )product)PoolN)norm)assert_assert_allcloseassert_equalsuppress_warnings)raises)issparse	lil_array)aslinearoperator)least_squaresBounds)IMPLEMENTED_LOSSES)EPSmake_strictly_feasibleCL_scaling_vector)OptimizeResultc                     | |z
  dz  dz   S )N         @ xas     c/var/www/teggl/fontify/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   0   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   7   s6    88	qtR	Q	c
  r   c                     t        |       d   S r3   )r/   r(   s    r   fun_rosenbrock_croppedrG   ?       !Qr   c                     t        |       d   S r3   )rB   r(   s    r   jac_rosenbrock_croppedrJ   C   rH   r   c                 >    t        j                  | | dz  | dz  g      S )Nr      r%   r(   s    r   fun_wrong_dimensionsrM   H   s    88Q1adO$$r   c                 B    t        j                  t        | |            S )N)r   )r&   
atleast_3dr!   r   s     r   jac_wrong_dimensionsrP   L   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]   P   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 )Nr   rR         grD   皙?sparse)dtyper$   operatorc                 8    t        j                  |             S N)r   _jacr   r6   s    r   <lambda>z-BroydenTridiagonal.__init__.<locals>.<lambda>t   s    !1$))A,!? r   densec                 B    j                  |       j                         S rg   )rh   toarrayri   s    r   rj   z-BroydenTridiagonal.__init__.<locals>.<lambda>w   s    1!5!5!7 r   F)r&   randomRandomStaterZ   onesx0linspacelbubrandnr   r   rT   sparsityarangerh   jacr   )r6   rZ   moderngis   `    r   r7   zBroydenTridiagonal.__init__Z   s   ii##A&771:+++b$*++dC+31%%31%%31%%($''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&   rw   )r6   r   Jr{   s       r   rh   zBroydenTridiagonal._jac   s    tvvtvv&'IIdffa!e)!Q$IIa !QU(IIdffqj!!QU(r   N)d   rc   )r<   r=   r>   r7   r~   rh   r   r   r   r_   r_   Y   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&   rn   ro   mrZ   rW   p0rr   r   expr\   ru   randintrandr'   p_opt)
r6   r   bnoise
n_outliersx_rangen_pointsrandom_seedrz   outlierss
             r   r7   z"ExponentialFittingProblem.__init__   s    ii##K0((1+WQZX>RVVAJ''%#))DFF+++;;q$&&*5xB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   rx   zExponentialFittingProblem.jac   sZ    HHdffdff%&!Q$&&266!A$-00!Q$r   )r$   )rA   r$      N)r<   r=   r>   __doc__r7   r~   rx   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ej2                  j5                  d      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   r~   r6   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)rL   rS   kaboomrL   )r!   r	   filterUserWarningr   r   r   r   r   assert_raises	TypeError)r6   r   rx   supr   res1s         r   test_args_kwargszBaseMixin.test_args_kwargs   s    y$< 	DC"$ 8

X $Kc+/;;8$[#sC8+/;;88 CEE140DFFAD1)]K&t{{<)]K"*At{{D!	D8 8s   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rx   r   )r!   r	   r   r   r   r   r   r   r   r   
ValueError)r6   rx   r   r   s       r   test_jac_optionszBaseMixin.test_jac_options   s    y$< 	1C"$ O

X $Kc$++NO CEE140	1 	j-cv![[	*O O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   )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      ?      ?rx   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~   rx   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~   rx   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.   )rx   r   r   )
ranger&   rn   default_rnguniformr1   r   rB   r   r4   )r6   r{   rz   rq   ftrivialr   s         r   	test_nfevzBaseMixin.test_nfev*  sy    q! 	-A))''/C!$r)B%'HaC 88x}},,,	-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)NrR   r$   r   r   r   r   皙?rx   exactlsmrr   r   	tr_solverr   )r   rB   r&   r'   r	   r   r   r   r/   r   r   r   )r6   rq   x_optrx   r   r   r   r   s           r   test_rosenbrockzBaseMixin.test_rosenbrock5  s    !WA'.It^<bhhSz*E2&!(# 	*#C) #$ M

X $NBW.7MM CEE5)	*M M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 )NrR   r$   r   r   r   r   r   r   r   rx   r   r   r   r   g+=r   )r   r   r   r   rG   r   rJ   r&   r'   r   r   )r6   rq   rx   r   r   r   s         r   test_rosenbrock_croppedz!BaseMixin.test_rosenbrock_croppedE  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_dimensionsT  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_dimensionsX  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   rq   s     r   (test_fun_and_jac_inconsistent_dimensionsz2BaseMixin.test_fun_and_jac_inconsistent_dimensions\  s%    Vj-,T[[	Br   c                     t        j                  d      j                  dd      }t        t        t
        t        || j                         y )NrS   r   r   )r&   rp   rX   r   r   r   r   r   r   s     r   test_x0_multidimensionalz"BaseMixin.test_x0_multidimensionala  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_scalarf  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_arrayk  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&   rp   r   r   r]   r   r4   r   )r6   rZ   rq   r   r   s        r   test_bvpzBaseMixin.test_bvpp  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  )rx   r  r  r
  r   )r   r   r/   rB   r   r   )r6   rq   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   c                 B   t        t        d| j                        }g }dD ]0  }t        t        d| j                  |      }|j                  |       2 t	               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   workers)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		
 V 	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  pytestmark	fail_slowr  r   r   r   r   r      s    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   rx   r  r   rD   r   r   r   rA   rL   )r   r   r   )	r!   r   r   r   r   r   r   r   r   )r6   rx   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 rg   r   rs   rt   s     r   get_bounds_directz8BoundsMixin.test_bounds_shape.<locals>.get_bounds_direct  s    r6Mr   c                     t        | |      S rg   )r   r-  s     r   get_bounds_instancesz;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instances  s    "b>!r   r   r   r   r   )rx   rD   r   r   r)  g333333?r   r   rA   h㈵>r   )r,   r   r)   r   r   r   )r6   r.  r0  rx   bounds_funcrq   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   )rs   r   r-        )rt   r1  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   rx   r   r   r   r1  r   )
r&   r'   infr   rB   r   r/   r   r   r   )r6   x0_1x0_2x0_3x0_4x0_5problemsrq   r  rx   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*  r3  r6  r  r  r  r?  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~   rq   rx   r   rv   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   ry   rk   r   #B;r   r   )r_   r   r~   rq   rx   r   r   r4   r   r   r   r6   rc   rk   
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   rH  r   )r_   r   r~   rq   rx   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bestrC  r   tolrO  )r   rQ  )	r_   r   r   r   r~   rq   rx   r   r   r   s     r   test_wrong_parametersz!SparseMixin.test_wrong_parameters0  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   rG  rk   r   r   rH  r   )r_   r   r~   rq   rx   r   r   r   r   r   
isinstancer&   ndarrayrI  s        r   test_solver_selectionz!SparseMixin.test_solver_selection7  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   rD  rH  r   r   )r_   r   r~   rq   r   rv   r   r4   r   r   r   )r6   r   rx   rK  rJ  s        r   test_numerical_jaczSparseMixin.test_numerical_jacC  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   rD  r   rO  r   )r_   r   rx   rv   r   r~   rq   rs   r&   r8  r   rt   r   r   )r6   r   rx   rD  res_1res_2res_3s          r   test_with_boundszSparseMixin.test_with_boundsO  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   rD  r   )r_   rv   r   r   r   r~   rq   r   )r6   r   rv   s      r   test_wrong_jac_sparsityz#SparseMixin.test_wrong_jac_sparsitya  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 )	Nre   rG  r   rD   rH  r   r   )r   r   
r_   r   r~   rq   rx   r   r   r   r   r   rR  s      r   test_linear_operatorz SparseMixin.test_linear_operatorg  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 )Nrx   )r   r   rD   rH  r   re   rG  rg  rR  s      r   test_x_scale_jac_scalez"SparseMixin.test_x_scale_jac_scalen  sp     AEE144t{{$)+#E2J/j-aee![[%	9r   N)r<   r=   r>   rE  rL  rS  rW  r[  r]  r  r  r  rb  re  rh  rj  r   r   r   rA  rA    sT    *71C
7
< [[2= ="A=9r   rA  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   ro  r   s      r   test_optionszLossFunctionMixin.test_optionsz  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   rn  )rr  r   r   r   r   r~   r   rs  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$   ro  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   rx  r$   ry  rz  r   r.   )ro  f_scaler   r{  g      r|  )ro  r  r   r   r}  g      4@r   rL   rS   )ro  r      g)	r   r   r!   r   r   rx   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   r   )r   r   r   r   r   r   r   rx  )rx   ro  r  r   )r   rx   r   r~   r   r   r   r   rr  r   r   r   r   )r6   r   r   rx   res_lsqro  
res_robusts          r   test_robustnessz!LossFunctionMixin.test_robustness  s     	7E)!S%QGA!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>   rt  rv  r~  r  r  r   r   r   rl  rl  y  s    86I>BLH7r   rl  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  
regularizerP  r   rH  r   )r_   r   r~   rq   rx   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   )r5  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~   rq   rx   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   rd  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 )Nre   rG  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   rx  r   rn  rD   r   r   rz  )r   ro  )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               5 }|j                  t        d       t        t        dgd|       d d d        y # 1 sw Y   y xY w)Nc                     J rg   r   r(   s    r   callbackz5TestLM.test_callback_with_lm_method.<locals>.callback2  s    5r   z@Callback function specified, but not supported with `lm` method.r   r   )rq   r   r  )r	   r   r   r   r   )r6   r  r   s      r   test_callback_with_lm_methodz#TestLM.test_callback_with_lm_method1  sN    	   	OCJJR +1#dXN	O 	O 	Os   +A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   rO  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 rg   )r  r  resultss    r   my_callback_optimresultz.test_callback.<locals>.my_callback_optimresultH  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_xK  s(    qr   c                 2    j                  |        t        rg   )r  StopIterationr  s    r   &my_callback_optimresult_stop_exceptionz=test_callback.<locals>.my_callback_optimresult_stop_exceptionR  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_exceptionW  s+    qr   c                 (    t        t        dd|       S )Nr   r  r   r  r   r   r  s    r   rj   ztest_callback.<locals>.<lambda>e  s    {C08: r   c                 *    t        t        ddd|       S )Nr   r  )g              @)r   r  r  r  r  s    r   rj   ztest_callback.<locals>.<lambda>g  s    {C.9HN r   c                 (    t        t        dd|       S )Nr   r  r  r  r  s    r   rj   ztest_callback.<locals>.<lambda>i  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  C  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      j	                  d      }| 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   r   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 rg   r   )r   r   r\   r  s      r   errztest_fp32_gh12991.<locals>.err  s    AqzA~r   r   )r   r   g W ?g	?g-C6
?r   )
r&   rn   ro   rr   astyper   r4   r   r   r'   )rz   r   r\   r  r   r  s        @r   test_fp32_gh12991r    s     ))


"C
Aq#%%i0A

3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   rp  r   )rq   r  r  r$   )ord)
r   r&   r8  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 rg   )r&   r   )paramsABrq   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'   rw   r   r8  r   r   )r  rq   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   )?	itertoolsr   multiprocessingr   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,   r/   r1   rB   rE   rG   rJ   rM   rP   r]   r_   r   r   listkeysrr  r   r  rA  rl  r  r  r  r   r  r  r  r  r  r   r   r   <module>r     sC       < <  * , 0 0 @ U U )"9! !  
%.0 0f > 
% %%'	(M?	:m0 m0`g@ g@Tc9 c9LE7 E7PK6G 5ik3D 5*OY *OZ*@ F9I2A4r   