
    ^Mh                     D   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 d0dZd1dZd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d1dZ&d Z' G d d          Z( G d d          Z)d Z* e+ ej,                              e*gz   Z- G d d          Z. G d d           Z/ G d! d"          Z0 G d# d$          Z1 G d% d&e.e/e0e1          Z2 G d' d(e.e/e0e1          Z3 G d) d*e.          Z4d+ Z5d, Z6d- Z7d. Z8d/ Z9dS )2    )productN)norm)assert_assert_allcloseassert_equalsuppress_warnings)raises)issparse
lil_matrix)aslinearoperator)least_squaresBounds)IMPLEMENTED_LOSSES)EPSmake_strictly_feasibleCL_scaling_vectorc                     | |z
  dz  dz   S )N         @ xas     g/var/www/html/test/jupyter/venv/lib/python3.11/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                 F    t          j        | d         | d         g          S Nr      nparrayr   s    r   fun_2d_trivialr(      s    8QqT1Q4L!!!r   c                 *    t          j        d          S r   )r%   identityr'   s    r   jac_2d_trivialr+      s    ;q>>r   c                 j    t          j        d| d         | d         dz  z
  z  d| d         z
  g          S )N
   r#   r   r   r$   r'   s    r   fun_rosenbrockr.   !   s4    8R1Q4!A$'>*Q1X7888r   c                 H    t          j        d| d         z  dgddgg          S )Nr   r-   r$   r'   s    r   jac_rosenbrockr2   %   s2    8	qtR	Q   r   c                 N    t          j        d| d         z  dgddgddgg          S )Nr0   r   r-   r1   r   r$   r'   s    r   jac_rosenbrock_bad_dimr4   ,   s9    8	qtR	Q	c
   r   c                 ,    t          |           d         S Nr   )r.   r'   s    r   fun_rosenbrock_croppedr7   4       !Qr   c                 ,    t          |           d         S r6   )r2   r'   s    r   jac_rosenbrock_croppedr:   8   r8   r   c                 <    t          j        | | dz  | dz  g          S )Nr      r$   r'   s    r   fun_wrong_dimensionsr=   =   s     8Q1adO$$$r   c                 H    t          j        t          | |                    S )N)r   )r%   
atleast_3dr    r   s     r   jac_wrong_dimensionsr@   A   s    =Q!,,,---r   c                    t          t          j        | j        d                             }t          j        |dz   |dz   f          }|                     ||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   }|                                S )Nr   r   r#   r1      r<   )intr%   sqrtshapezerosreshaperavel)r   nuys       r   fun_bvprM   E   s    BGAGAJ  A
!a%Q  A			1a&AAadAbDjM	#2#qt)qQrT{"QqtSbSy\1AadABBhK?!a%G!Q$NA7799r   c                   "    e Zd ZddZd Zd ZdS )BroydenTridiagonald   sparsec                     t           j                            d          }| _        t          j        |            _        t          j        dd|           _        t          j        dd|           _         xj        d|	                    |          z  z  c_         xj        d|	                    |          z  z  c_         xj        d|	                    |          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         _        d S |d
k    r fd _        d S |dk    rd  _         fd _        d S t#          d           d S )Nr   rB         gr   皙?rQ   )dtyper#   operatorc                 H    t                              |                     S N)r   _jacr   selfs    r   <lambda>z-BroydenTridiagonal.__init__.<locals>.<lambda>i   s    !1$))A,,!?!? r   densec                 R                         |                                           S rX   )rY   toarrayrZ   s    r   r\   z-BroydenTridiagonal.__init__.<locals>.<lambda>l   s    1!5!5!7!7 r   F)r%   randomRandomStaterJ   onesx0linspacelbubrandnr   r   rD   sparsityarangerY   jacr   )r[   rJ   moderngis   `    r   __init__zBroydenTridiagonal.__init__O   s   i##A&&71::++b$**+dC++31%%31%%31%%($'47CC8&1vS999DM	!A"#DM!Q$	!QA&'DM!QU(#	!a%  A&'DM!QU(#yDHHHZ????DHHHW__ DM7777DHHHENNNNNr   c                     d|z
  |z  dz   }|dd xx         |d d         z  cc<   |d dxx         d|dd          z  z  cc<   |S )Nr<   r#   r1   r   r   )r[   r   fs      r   funzBroydenTridiagonal.funp   s_    UaK!O	!""3B3	#2#!ae)r   c                    t          | j        | j        f          }t          j        | j                  }dd|z  z
  |||f<   t          j        d| j                  }d|||dz
  f<   t          j        | j        dz
            }d|||dz   f<   |S )Nr<   r   r#   r1   rB   )r   rJ   r%   ri   )r[   r   Jrm   s       r   rY   zBroydenTridiagonal._jacv   s    '((Idfa!e)!Q$Ia  !QU(Idfqj!!!QU(r   N)rP   rQ   )__name__
__module____qualname__rn   rq   rY   r   r   r   rO   rO   N   sG           B      r   rO   c                   *    e Zd ZdZ	 	 d	dZd Zd ZdS )
ExponentialFittingProblemz]Provide data and function for exponential fitting in the form
    y = a + exp(b * x) + noise.r#   r1   r#      Nc                 H   t           j                            |          }|| _        d| _        t          j        d          | _        t          j        |d         |d         |          | _        |t          j	        || j        z            z   | _
        | xj
        ||                    | j                  z  z  c_
        |                    d| j        |          }	| j
        |	xx         d|z  |                    |          z  z  cc<   t          j        ||g          | _        d S )Nr   r   r#   2   )r%   r`   ra   mrJ   rG   p0rd   r   exprL   rg   randintrandr&   p_opt)
r[   r   bnoise
n_outliersx_rangen_pointsrandom_seedrl   outlierss
             r   rn   z"ExponentialFittingProblem.__init__   s    i##K00(1++WQZX>>RVAJ'''%#))DF++++;;q$&*55xBJ*)=)===Xq!f%%


r   c                 h    |d         t          j        |d         | j        z            z   | j        z
  S r"   )r%   r   r   rL   r[   ps     r   rq   zExponentialFittingProblem.fun   s,    tbfQqTDF]+++df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}   rJ   r   r   )r[   r   rs   s      r   rj   zExponentialFittingProblem.jac   s\    Hdfdf%&&!!!Q$&26!A$-000!!!Q$r   )r#   ry   rz   N)rt   ru   rv   __doc__rn   rq   rj   r   r   r   rx   rx      sY        # # ;B*.& & & &"5 5 5    r   rx   c                     t          j        d| j        f          }d| z   }d|dz  dz
  z  |d<   |dz  |d<   d|dz  z  |d<   |S )Nr<   r#   gUUUUUU?r   gUUUUUUgr   )r%   r   size)zrhots      r   cubic_soft_l1r      sZ    
(Aqv;

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S )	BaseMixinc                     t          t          d| j                  }t          |j        dd           t          |j        t          |j                             d S )N       @methodr   -C6?atol)r   r   r   r   r   rq   r[   ress     r   
test_basiczBaseMixin.test_basic   sQ    KDK@@@qt,,,,SU!3!344444r   c           	      .   d}dddt           fD ]}t                      5 }|                    t          d           t	          t
          d||f| j                  }t	          t
          d|d|i| j        	          }d d d            n# 1 swxY w Y   t          |j        |d
           t          |j        |d
           t          t          t          t
          dd| j                   t          t          t          t
          dddi| j        	           d S )N      @2-point3-pointcsBjac='(3-point|cs)' works equivalently to '2-point' for method='lm'r   )argsr   r   )kwargsr   r   )rtol)r<   rC   kaboomr<   )r    r   filterUserWarningr   r   r   r   r   assert_raises	TypeError)r[   r   rj   supr   res1s         r   test_args_kwargszBaseMixin.test_args_kwargs   s{   y$< 	D 	DC"$$ 8

X   $Kc+/;8 8 8$[#sC8+/;8 8 88 8 8 8 8 8 8 8 8 8 8 8 8 8 8 CE140000DFAD1111)]K&t{< < < <)]K"*At{D D D D D!	D 	Ds   ABB
	B
	c                 ^   dddt           fD ]w}t                      5 }|                    t          d           t	          t
          d|| j                  }d d d            n# 1 swxY w Y   t          |j        dd	           xt          t          t          t
          dd
| j                   d S )Nr   r   r   r   r   r   r   r   r   oopsrj   r   )r    r   r   r   r   r   r   r   r   r   
ValueError)r[   rj   r   r   s       r   test_jac_optionszBaseMixin.test_jac_options   s
   y$< 	1 	1C"$$ O

X   $Kc$+NNNO O O O O O O O O O O O O O O CE1400000j-cv![	* 	* 	* 	* 	* 	*s   9A!!A%	(A%	c                 x    dD ]6}t          t          d|| j                  }t          |j        dd           7d S )N)N   r   )max_nfevr   r   r   r   )r   r   r   r   r   )r[   r   r   s      r   test_nfev_optionszBaseMixin.test_nfev_options   sT    " 	1 	1HS8'+{4 4 4CCE1400000	1 	1r   c                    dt          j        dg          dfD ].}t          t          d|          }t	          |j        d           /t          t          t          t          dd| j                   t          t          t          t          dd	| j                   t          t          t          t          dd | j                   t          t          t          t          dd
| j                   d S )N      ?      ?rj   r   )x_scaler   auto)r   r         y      ?       @)	r%   r&   r   r   r   r   r   r   r   )r[   r   r   s      r   test_x_scale_optionszBaseMixin.test_x_scale_options   s    RXse__e4 	& 	&GS'BBBCCE1%%%%j-6$+	? 	? 	? 	?j-4	= 	= 	= 	=j-4	= 	= 	= 	=j-8DK	A 	A 	A 	A 	A 	Ar   c                    t          t          dd| j                  }t          t          dd| j                  }t          t          dd | j                  }t          |j        dd           t          |j        dd           t          |j        dd           t          |j        |j                   t          |j        |j                   d S )Nr   rT   )	diff_stepr   gr   r   r   )r   r   r   r   r   r   nfev)r[   r   res2res3s       r   test_diff_stepzBaseMixin.test_diff_step   s     [#$(K1 1 1[#$(K1 1 1[#'+DKA A A------------TVTV$$$TY	*****r   c           	          t          t          t          t          d| j        ddi           t          t          t          t          d| j        ddi           d S )Nr   no_such_optionrP   )r   optionsr   )r   r   r   r   r   r[   s    r   test_incorrect_options_usagez&BaseMixin.test_incorrect_options_usage   sm    iS![3CS2I	K 	K 	K 	KiS![:s2C	E 	E 	E 	E 	E 	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
k                t          |j        d u            n0t          |j        dk                t          |j        dk                t          |j        dk               t          |j                   d S )Nr   r   r   r   r   g      )@   {Gz?lm   r-   )r   r   r   r   r   costrq   rj   grad
optimalityr   active_maskr   r   njevstatussuccessr   s     r   test_full_resultzBaseMixin.test_full_result   s7    KT[AAAqt,,,,$'''###....!$////5555S_a(((;$CHrM"""CH$%%%%CHrM"""CHrM"""
Qr   c                    | j         dk    rd S 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
           d S )Nr   r   r#   )r   r   r   g     @D@	   rC   $   r   )r   r   r   r   r   r%   r&   r   rq   rj   r   r   r   r   r   r   r   r   s     r   test_full_result_single_fevz%BaseMixin.test_full_result_single_fev  s5    ;$FKT[%&( ( (SUBHaSMM***SXt$$$SWbhsmm,,,SWbhuoo...SXrx~~...S^R(((S_bhsmm444SXq!!!SXq!!!SZ###S[!$$$$$r   c           
      t   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	                      5 }|                    t          d           t          t          ||||| j	                  }d d d            n# 1 swxY w Y   t          |j        |           |d S )NrB   r#   r   r   r   r   皙?rj   exactlsmrr   r   	tr_solverr   )r   r2   r%   r&   r   r   r   r   r.   r   r   r   )r[   rc   x_optrj   r   r   r   r   s           r   test_rosenbrockzBaseMixin.test_rosenbrock(  s5   !WA'.It^<bhSz**E2&!(# (# 	* 	*#C) #$$ M

X   $NBW.7M M MM M M M M M M M M M M M M M M CE5))))	* 	*s   ;BB	B	c           	      N   ddg}| j         dk    r%t          t          t          t          |d           d S 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           =d S )NrB   r#   r   r   r   r   r   r   r   rj   r   r   r   r   g+=r   )r   r   r   r   r7   r   r:   r%   r&   r   r   )r[   rc   rj   r   r   r   s         r   test_rosenbrock_croppedz!BaseMixin.test_rosenbrock_cropped8  s    !W;$*m5KT+ + + + + + ,3	41GH"(C:..6f%,' ,' 9 9'Wi $*BW'= = =  !%888889 9r   c                 V    t          t          t          t          d| j                   d S Nr   r   )r   r   r   r=   r   r   s    r   test_fun_wrong_dimensionsz#BaseMixin.test_fun_wrong_dimensionsG  s1    j-1E$+	/ 	/ 	/ 	/ 	/ 	/r   c                 b    t          t          t          t          dt          | j                   d S r   )r   r   r   r   r@   r   r   s    r   test_jac_wrong_dimensionsz#BaseMixin.test_jac_wrong_dimensionsK  s9    j-/	E 	E 	E 	E 	E 	Er   c                 j    ddg}t          t          t          t          |t          | j                   d S )Nr#   r   r   )r   r   r   r.   r4   r   r[   rc   s     r   (test_fun_and_jac_inconsistent_dimensionsz2BaseMixin.test_fun_and_jac_inconsistent_dimensionsO  sA    Vj-,T[	B 	B 	B 	B 	B 	Br   c                     t          j        d                              dd          }t          t          t
          t          || j                   d S )NrC   r   r   )r%   rb   rH   r   r   r   r   r   r   s     r   test_x0_multidimensionalz"BaseMixin.test_x0_multidimensionalT  sM    WQZZ1%%j-b![	* 	* 	* 	* 	* 	*r   c                 Z    d}t          t          t          t          || j                   d S )N       @        r   r   r   r   r   r   r   s     r   test_x0_complex_scalarz BaseMixin.test_x0_complex_scalarY  s5    j-b![	* 	* 	* 	* 	* 	*r   c                 ^    ddg}t          t          t          t          || j                   d S )Nr   r   r   r   r   s     r   test_x0_complex_arrayzBaseMixin.test_x0_complex_array^  s:    < j-b![	* 	* 	* 	* 	* 	*r   c                     d}t          j        |dz            }| j        dk    rd}nd}t          t          |d| j        |          }t          |j        |k                t          |j        dk                d S )	Nr-   r   r   i  rP   r   )ftolr   r   r   )r%   rb   r   r   rM   r   r   r   )r[   rJ   rc   r   r   s        r   test_bvpzBaseMixin.test_bvpc  s    
 WQT]];$HHHGRd4;%-/ / / 	8#$$$3r   c           
      \    t          t          t          t          d| j        d d d            d S )Nr   )r   r   xtolgtolr   r   s    r   /test_error_raised_when_all_tolerances_below_epsz9BaseMixin.test_error_raised_when_all_tolerances_below_epst  s<    j-c![t$T	K 	K 	K 	K 	K 	Kr   c           
          | j         dk    rd S ddg}ddg}dD ]@\  }}}t          t          |t          |||| j                   }t	          |j        |           Ad S )Nr   rB   r#   )):0yE>NN)Nr  N)NNr  )rj   r   r   r   r   )r   r   r.   r2   r   r   )r[   rc   r   r   r   r   r   s          r   0test_convergence_with_only_one_tolerance_enabledz:BaseMixin.test_convergence_with_only_one_tolerance_enabledy  s    ;$F!WA!6 	* 	*D$  %)4'+{4 4 4C CE5))))	* 	*r   N)rt   ru   rv   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      sR       5 5 5D D D,* * *1 1 1A A A+ + +E E E  (% % %(* * * 9 9 9/ / /E E EB B B
* * *
* * *
* * *
     "K K K
* * * * *r   r   c                   ~    e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                            d          d	             Zd
S )BoundsMixinc                 X    t          t          t          t          dd| j                   d S )Nr   )      $@r   boundsr   r   r   s    r   test_inconsistentzBoundsMixin.test_inconsistent  s2    j-c(	> 	> 	> 	> 	> 	>r   c                 X    t          t          t          t          dd| j                   d S )Nr   )r   rC   r  r   r   s    r   test_infeasiblezBoundsMixin.test_infeasible  s2    j-c$T[	: 	: 	: 	: 	: 	:r   c                 X    t          t          t          t          dd| j                   d S )Nr   )r   r   r<   r  r   r   s    r   test_wrong_numberzBoundsMixin.test_wrong_number  s2    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                   d S )Nr   r   r   r  r         @)r   r   r   r   r   r.   r   s    r   test_inconsistent_shapez#BoundsMixin.test_inconsistent_shape  s|    j-c!C:.t{	D 	D 	D 	D 	j-#s"ec3Z0	F 	F 	F 	F 	F 	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    odk    nc            t          t          d|d| j                  }t	          |j        dd	           t          |j        dg           t          d|j        cxk    odk    nc            d S )Nr   r   r   r   )r   r   rj   r  r   r   r   r   r   r1   r<   )r   r   r   )	r    r   r   r   r   r   r   r   r   )r[   rj   r   s      r   test_in_boundszBoundsMixin.test_in_bounds  s   y$< 
	' 
	'CSc'24;H H HCCE3T22221#...B#%$$$$1$$$$%%%Sc'1$+G G GCCE3T22222$///C35%%%%A%%%%&&&&
	' 
	'r   c                 2   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           d S )Nc                 
    | |fS rX   r   re   rf   s     r   get_bounds_directz8BoundsMixin.test_bounds_shape.<locals>.get_bounds_direct  s    r6Mr   c                 "    t          | |          S rX   )r   r  s     r   get_bounds_instancesz;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instances  s    "b>>!r   r   r   r   r   )rj   r   r   r   r  g333333?r   r   r1   h㈵>r   )r+   r   r(   r   r   r   )r[   r  r  rj   bounds_funcrc   r   s          r   test_bounds_shapezBoundsMixin.test_bounds_shape  s|   	 	 		" 	" 	" y$? 	> 	>C 13GH > >3Z#NBC@@@Sz222#NBC+6;sS#J+G+G+/;8 8 8  Sz222#NBC+6;Sz3+G+G+/;8 8 8  Sz22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           d S )Nr   )r  r   r   r   r   r   )re   r   r        )rf   r  rT   )r   r   r   r   r   r(   r   s     r   test_bounds_instancesz!BoundsMixin.test_bounds_instances  sl   KVXX>>>s....KVs^^^DDDs....KVt5L5L5LMMMs....KfoooFFFt$////NS#J#)dD\c#B#B#BD D DSz5555NS#J#)c3Z#8#8#8: : :Sz55555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 ]d\  }}t          dddt          gddd
gdgddg          D ]=\  }	}
}t          t          ||	||
|| j                  }t          |j	        dd           >ed S )Ng       r   r   r   g333333rS   g      ?r   g      Ir   rP   r   r   r   rj   r   r   r   r  r   )
r%   r&   infr   r2   r   r.   r   r   r   )r[   x0_1x0_2x0_3x0_4x0_5problemsrc   r  rj   r   r   r   s                r   test_rosenbrock_boundsz"BoundsMixin.test_rosenbrock_bounds  s   xs$$xc
##xs$$xc
##xs$$bfWdORV,-bfWcNBF+,bfWcNBF+,bfWcNS"&M23S#Jc
+,UCL3*-.
 # 	@ 	@JB+2	4@3*e,f%,' ,' @ @'Wi $NBV,3y+/;8 8 8  $?????@	@ 	@r   N)rt   ru   rv   r	  r  r  r  r  r  r  pytestmark	fail_slowr(  r   r   r   r  r    s        > > >: : := = =F F F' ' '> > >46 6 6* [2@ @ @ @ @r   r  c                       e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            d          d             Zd	 Zd
 Zd ZdS )SparseMixinc           	          t                      }t          t          t          |j        |j        |j        d| j                   t          t          t          |j        |j        d|j        | j                   d S )Nr   r   r   )r   jac_sparsityr   )	rO   r   r   r   rq   rc   rj   r   rh   r   s     r   test_exact_tr_solverz SparseMixin.test_exact_tr_solver  st      j-ae '	= 	= 	= 	=j- 'aj![	* 	* 	* 	* 	* 	*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           d S )NrQ   rk   r]   r   #B;r   r   )rO   r   rq   rc   rj   r   r   r   r   r   r   r[   rQ   r]   
res_sparse	res_denses        r   test_equivalencezSparseMixin.test_equivalence  s    #222"000"J	vz;     
 "IuxVZ;     	 	Z_in555
ik>>>>
7777	666666r   c                     t                      }t          |j        |j        |j        | j        ddi          }t          |j        dd           d S )Nbtol绽|=r   
tr_optionsr   r4  r   )rO   r   rq   rc   rj   r   r   r   r[   r   r   s      r   test_tr_optionszSparseMixin.test_tr_options  sU      AE14t{(.8 8 8!%000000r   c           
          t                      }t          t          t          |j        |j        |j        d| j                   t          t          t          |j        |j        |j        dddi           d S )Nbestr/  r   tolr;  )r   r=  )	rO   r   r   r   rq   rc   rj   r   r   r   s     r   test_wrong_parametersz!SparseMixin.test_wrong_parameters  s{      j-ae &t{	< 	< 	< 	<iqtQU &E5>	C 	C 	C 	C 	C 	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                             d S )NrQ   r3  r]   r   r   r4  r   )rO   r   rq   rc   rj   r   r   r   r   r
   
isinstancer%   ndarrayr5  s        r   test_solver_selectionz!SparseMixin.test_solver_selection  s    #222"000"6:vyfj*.+7 7 7
!%)UX59)-6 6 6	
7777	6666(()))
9="*556666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           d S )N)r   r   r   r   )r   r0  r4  r   r   )rO   r   rq   rc   r   rh   r   r   r   r   r   )r[   r   rj   r7  r6  s        r   test_numerical_jaczSparseMixin.test_numerical_jac!  s      / 	< 	<C%aeQT3t{KKKI&qtSZ) ) )J 999IKEBBBBINAE::::JOQU;;;;;	< 	<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           d S )Nr   r   r   )r  r   r0  r   r;  r   )rO   r   rj   rh   r   rq   rc   re   r%   r!  r   rf   r   r   )r[   r   rj   r0  res_1res_2res_3s          r   test_with_boundszSparseMixin.test_with_bounds-  s1     !(	9d3dAJ5G"I "I 	= 	=C!qtS!${> > >E "qtS26'14{? ? ?E "qtS!${? ? ?E E,ae<<<<E,ae<<<<E,ae<<<<<	= 	=r   c                     t                      }|j        d d         }t          t          t          |j        |j        || j                   d S )Nr1   r0  r   )rO   rh   r   r   r   rq   rc   r   )r[   r   rh   s      r   test_wrong_jac_sparsityz#SparseMixin.test_wrong_jac_sparsity?  sV      :crc?j-#+DK	A 	A 	A 	A 	A 	Ar   c           	      
   t          d          }t          |j        |j        |j        | j                  }t          |j        dd           t          t          t          |j        |j        |j        | j        d           d S )	NrV   r3  r   r   r4  r   r   )r   r   
rO   r   rq   rc   rj   r   r   r   r   r   r>  s      r   test_linear_operatorz SparseMixin.test_linear_operatorE  s    J///AE14t{CCC#E2222j-ae![G	= 	= 	= 	= 	= 	=r   c           	      (   t                      }t          |j        |j        |j        | j        d          }t          |j        dd           t          d          }t          t          t          |j        |j        |j        | j        d           d S )Nrj   )r   r   r   r4  r   rV   r3  rS  r>  s      r   test_x_scale_jac_scalez"SparseMixin.test_x_scale_jac_scaleL  s      AE14t{$)+ + +#E2222J///j-ae![%	9 	9 	9 	9 	9 	9r   N)rt   ru   rv   r1  r8  r?  rC  rG  rI  r)  r*  r+  rN  rQ  rT  rV  r   r   r   r-  r-    s        * * *7 7 71 1 1C C C
7 
7 
7
< 
< 
< [2= = ="A A A= = =9 9 9 9 9r   r-  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )LossFunctionMixinc                     t           D ]6}t          t          d|| j                  }t	          |j        dd           7t          t          t          t          dd| j                   d S )Nr   lossr   r   V瞯<r   hinge)LOSSESr   r   r   r   r   r   r   r[   r[  r   s      r   test_optionszLossFunctionMixin.test_optionsX  sz     	2 	2DSt'+{4 4 4CCE1511111j-c"4;	8 	8 	8 	8 	8 	8r   c                     t           D ]F}t          t          d|| j                  }t	          |j        t          |j                             Gd S )Nr   rZ  )r^  r   r   r   r   rq   r   r_  s      r   test_funzLossFunctionMixin.test_funa  s[      	6 	6DSt'+{4 4 4C+ce"4"45555	6 	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             d S )Nr   linearr#   r[  r   r   r   r   hubersoft_l1r   cauchyarctanrC   gUUUUUU?)
r%   r&   r   r   r    r   r   r   r   r   )r[   r   r   s      r   	test_gradzLossFunctionMixin.test_gradi  s.    HcUOOKKh%&t{< < <SXq1u1q1222KKg%&t{< < <SXq1u%%%KKi%&t{< < <AA*a1a4!8a-.?#-EE	G 	G 	G KKh%&t{< < <!a%1a4!8"4QTAXM8I"JKKKKKh%&t{< < <!a%1a4!8"4QTAXM8I"JKKKKKm%&t{< < <AA*a1a4!8a-.?3-GG	I 	I 	I 	I 	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             d S )Nr   r   r   rd  r#   re  rf  r   r-   )r[  f_scaler   rg  g      rh  )r[  rl  r   r   ri  g      4@r   r<   rC   )r[  r      g)	r   r   r    r   r   rj   r   r   r   )r[   r   rp   r   fss        r   test_jaczLossFunctionMixin.test_jac  s8    qD1HKKh%&t{< < <SWa!e$$$ KKg%&t{< < <SWa!ec3h./// KKg$&4 4 4SWa!e$$$ KKi%&t{< < <Q!ad(U):!:;;; KKh%&t{< < <Qc!1222 KKh$&4;H H HVQ!b!e)c)9!9QQY!GHHH KKh%&t{< < <Qc!1222 KKh$(1T[J J JVQ!a"a%i-#)=!=RU!KLLL KKm%&( ( (Qc!1222 KK!.AG G GUARUQY 44BE	T7JJ	L 	L 	L 	L 	Lr   c                    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                όd S )N)rT   r   r#   rT   r   )r   r   r   r   r   r   r   rd  )rj   r[  rl  r   )rx   rj   r   rq   r~   r   r   r   r^  r   r   r   r   )r[   r   r   rj   res_lsqr[  
res_robusts          r   test_robustnessz!LossFunctionMixin.test_robustness  s2    	7 	7E)!S%QGGGA!9dAE: 7 7'qt/3{< < < 2ADAAAA" 7 7Dx'' !.qt4#{", ", ",J $J$914HHHHD!788 QW!4556 7 7 7 77	7	7 	7r   N)rt   ru   rv   r`  rb  rj  ro  rs  r   r   r   rX  rX  W  si        8 8 86 6 6I I I>BL BL BLH7 7 7 7 7r   rX  c                       e Zd ZdZdS )
TestDogboxdogboxN)rt   ru   rv   r   r   r   r   ru  ru    s        FFFr   ru  c                       e Zd ZdZd ZdS )TestTRFtrfc           	          t                      }dD ]>}t          |j        |j        |j        dd|i          }t          |j        dd           ?d S )N)TFry  
regularizer<  r   r4  r   )rO   r   rq   rc   rj   r   r   )r[   r   r{  r   s       r   test_lsmr_regularizationz TestTRF.test_lsmr_regularization  sm      ' 	5 	5JqtQU5,8*+EG G GCCHae44444	5 	5r   N)rt   ru   rv   r   r|  r   r   r   rx  rx    s(        F5 5 5 5 5r   rx  c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TestLMr   c                 N    t          t          t          t          ddd           d S )Nr   )r  r   r   r  r   r   r   r   r   s    r   test_bounds_not_supportedz TestLM.test_bounds_not_supported  s0    j-+d	< 	< 	< 	< 	< 	<r   c                 T    ddg}t          t          t          t          |d           d S )NrB   r#   r   r   )r   r   r   r7   r   s     r   test_m_less_n_not_supportedz"TestLM.test_m_less_n_not_supported  s8    !Wj-1G!	# 	# 	# 	# 	# 	#r   c                 ~    t                      }t          t          t          |j        |j        |j        d           d S )Nr   r   rO   r   r   r   rq   rc   rj   r   s     r   test_sparse_not_supportedz TestLM.test_sparse_not_supported  sA      j-ae!	# 	# 	# 	# 	# 	#r   c                 P    t          t          t          t          ddgd           d S )Nr   r#   r   rP  r  r   s    r   test_jac_sparsity_not_supportedz&TestLM.test_jac_sparsity_not_supported  s2    j-c$%3t	5 	5 	5 	5 	5 	5r   c                     t          d          }t          t          t          |j        |j        |j        d           d S )NrV   r3  r   r   r  r   s     r   !test_LinearOperator_not_supportedz(TestLM.test_LinearOperator_not_supported  sF    J///j-ae!	# 	# 	# 	# 	# 	#r   c                     t          t          ddd          }t          |j        dd           t	          t
          t           t          ddd	           d S )
Nr   rd  r   rZ  r   r   r   rf  )r   r[  )r   r   r   r   r   r   r   s     r   	test_losszTestLM.test_loss  s]    K8DIIIs....j-c!	1 	1 	1 	1 	1 	1r   N)
rt   ru   rv   r   r  r  r  r  r  r  r   r   r   r~  r~    ss        F< < <# # #
# # #
5 5 5# # #
1 1 1 1 1r   r~  c                  ^    t          t          d          } t          | j        dd           d S )Nr   r   r;  r   )r   r   r   r   )r   s    r   r   r     s.    
S
)
)CCE15))))))r   c                  d    dD ],\  } }}t          t          t          t          d|| |d           -d S )N))NvIh%<=r  )r  Nr  )r  r  Nr   r   )r   r   r   r   r  )r   r   r   s      r   test_small_tolerances_for_lmr    sS    3 9 9dD 	j-cd4	9 	9 	9 	9 	99 9r   c                     t           j                            d          } t          j        ddd                              d          }|                     d                              d          }d fd}t          |ddg||f          }|j        d	k    sJ t          |j        t          j	        d
dg          d           d S )Nr#   r   rP   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 rX   r   )r   r   rL   r  s      r   errztest_fp32_gh12991.<locals>.err)  s    tAqzzA~r   r   )r   r   g W ?g	?g-C6
?r   )
r%   r`   ra   rd   astyper   r   r   r   r&   )rl   r   rL   r  r   r  s        @r   test_fp32_gh12991r    s     )


"
"C
Aq#%%i00A

3y))A       dD\A
7
7
7C 8a<<<<CE28Y
$;<<4HHHHH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        |z  t          j                  |k     sJ d S )	Ng-q=gyYs=c                     | z
  dz  S r   r   )r   answers    r   chi2z%test_gh_18793_and_19351.<locals>.chi2;  s    &1}r   r\  r   )rc   r   r  r#   )ord)
r   r%   r!  r   r   r   
atleast_1dr   linalgr   )initial_guessr  r   r   scaling_r  s         @r   test_gh_18793_and_19351r  7  s    FM     D
UArv;
O
O
OC #35#(#%=#3#3R]265J5JL LJGQ:????9>>#(W,"&>9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 d S )Nr   B   )Sr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r         @r   r   r   r          @r  r  r        "@      @r   r  r  r         *@r  r        &@r  r  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   rT   c                 P    | \  }}}|t          j        ||z
  z            z  z
  S rX   )r%   r   )paramsABrc   xdataydatas       r   exponential_wrappedz*test_gh_19103.<locals>.exponential_wrappedc  s1    1b26!urz*+++e33r   )r   r   r   )r   r   r   r-   gfffff4@ry  )r   r  )r%   r&   ri   r   r!  r   r   )r  rc   r  r   r  r  s       @@r   test_gh_19103r  Q  s     HbTBY 	" 	" 	" 	 	 	E Ia$$s*E4 4 4 4 4 4 
BRVR./F
+Rf
M
M
MC;r   )r   )r   ):	itertoolsr   numpyr%   numpy.linalgr   numpy.testingr   r   r   r   r)  r	   r   scipy.sparser
   r   scipy.sparse.linalgr   scipy.optimizer   r   !scipy.optimize._lsq.least_squaresr   scipy.optimize._lsq.commonr   r   r   r   r    r(   r+   r.   r2   r4   r7   r:   r=   r@   rM   rO   rx   r   listkeysr^  r   r  r-  rX  ru  rx  r~  r   r  r  r  r  r   r   r   <module>r     s                  < < < < < < < < < < < <  * * * * * * - - - - - - - - 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @ @ @ @ @ @ U U U U U U U U U U      " " "  9 9 9              
% % %. . . .  0 0 0 0 0 0 0 0f       >   
% %''	(	(M?	:V* V* V* V* V* V* V* V*rg@ g@ g@ g@ g@ g@ g@ g@Tc9 c9 c9 c9 c9 c9 c9 c9LE7 E7 E7 E7 E7 E7 E7 E7P    K6G   5 5 5 5 5ik3D 5 5 51 1 1 1 1Y 1 1 1D* * *9 9 9I I I2A A A4    r   