
    Pi                        d dl Z d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
mZmZ d dlZd dlmZ d dlmZmZ d dlmZ d d	lmZmZmZ d d
lmZ d dlmZmZmZ d dlmZ d5dZ d6dZ!d Z"d Z#d Z$ G d d          Z%d Z&d Z'd Z(d Z)d Z*d6dZ+d Z, G d d          Z- G d d          Z.d  Z/ e0 ej1                              e/gz   Z2 G d! d"          Z3 G d# d$          Z4 G d% d&          Z5 G d' d(          Z6 G d) d*e3e4e5e6          Z7 G d+ d,e3e4e5e6          Z8 G d- d.e3          Z9d/ Z:d0 Z;d1 Z<d2 Z=d3 Z>d4 Z?dS )7    N)product)Pool)norm)assert_assert_allcloseassert_equal)raises)issparse	lil_array)aslinearoperator)least_squaresBoundsminimize)IMPLEMENTED_LOSSES)EPSmake_strictly_feasibleCL_scaling_vector)OptimizeResultc                     | |z
  dz  dz   S )N         @ xas     {/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/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_rosenbrockr0   %   s4    8R1Q4!A$'>*Q1X7888r   c                       e Zd Zd ZddZdS )Fun_Rosenbrockc                     d| _         d S Nr   )nfevselfs    r   __init__zFun_Rosenbrock.__init__*   s    			r   r   c                 @    | xj         dz  c_         t          |          S Nr%   )r5   r0   )r7   r   r   s      r   __call__zFun_Rosenbrock.__call__-   s    		Q		a   r   Nr   )__name__
__module____qualname__r8   r;   r   r   r   r2   r2   )   s7          ! ! ! ! ! !r   r2   c                 H    t          j        d| d         z  dgddgg          S )Nr   r/   r&   r)   s    r   jac_rosenbrockrC   2   s2    8	qtR	Q   r   c                 N    t          j        d| d         z  dgddgddgg          S )NrA   r   r/   rB   r   r&   r)   s    r   jac_rosenbrock_bad_dimrE   9   s9    8	qtR	Q	c
   r   c                 ,    t          |           d         S r4   )r0   r)   s    r   fun_rosenbrock_croppedrG   A       !Qr   c                 ,    t          |           d         S r4   )rC   r)   s    r   jac_rosenbrock_croppedrJ   E   rH   r   c                 <    t          j        | | dz  | dz  g          S )Nr      r&   r)   s    r   fun_wrong_dimensionsrM   J   s     8Q1adO$$$r   c                 H    t          j        t          | |                    S )N)r   )r'   
atleast_3dr"   r   s     r   jac_wrong_dimensionsrP   N   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%   rB      rL   )intr'   sqrtshapezerosreshaperavel)r   nuys       r   fun_bvpr]   R   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 )Ni0 rR         gr   皙?ra   dtyper%   operatorc                 H    t                              |                     S N)r   _jacr   r7   s    r   <lambda>z-BroydenTridiagonal.__init__.<locals>.<lambda>v   s    !1$))A,,!?!? r   densec                 R                         |                                           S ri   )rj   toarrayrk   s    r   rl   z-BroydenTridiagonal.__init__.<locals>.<lambda>y   s    1!5!5!7!7 r   F)r'   randomdefault_rngrZ   onesx0linspacelbubstandard_normalr   r   rT   sparsityarangerj   jacr   )r7   rZ   moderngis   `    r   r8   zBroydenTridiagonal.__init__\   s   i##F++71::++b$**+dC++3,,Q////3,,Q////3,,Q////($'47CC8%q!fC888DM	!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 )NrL   r%   rB   r   r   )r7   r   fs      r   funzBroydenTridiagonal.fun}   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 )NrL   r   r%   rB   rR   )r   rZ   r'   ry   )r7   r   Jr}   s       r   rj   zBroydenTridiagonal._jac   s    tvtv&''Idfa!e)!Q$Ia  !QU(Idfqj!!!QU(r   N)r`   ra   )r=   r>   r?   r8   r   rj   r   r   r   r_   r_   [   sG           B      r   r_   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%   rB   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'   rp   rq   mrZ   rW   p0rt   r   expr\   rw   integersr(   p_opt)	r7   r   bnoise
n_outliersx_rangen_pointsr|   outlierss	            r   r8   z"ExponentialFittingProblem.__init__   s    i##C(((1++WQZX>>RVAJ'''%#--df5555<<46:66xBJJ)?)???Xq!f%%


r   c                 h    |d         t          j        |d         | j        z            z   | j        z
  S r$   )r'   r   r   r\   r7   ps     r   r   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   rZ   r   r   )r7   r   r   s      r   rz   zExponentialFittingProblem.jac   s\    Hdfdf%&&!!!Q$&26!A$-000!!!Q$r   )r%   r   r   N)r=   r>   r?   __doc__r8   r   rz   r   r   r   r   r      sY        # # ;B"&& & & &"5 5 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      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 Zd Zej                            d          ej                            d          d                         ZdS )	BaseMixinzBjac='(3-point|cs)' works equivalently to '2-point' for method='lm'c                     t          t          d| j                  }t          |j        dd           t          |j        t          |j                             d S )N       @methodr   -C6?atol)r   r   r   r   r   r   r7   ress     r   
test_basiczBaseMixin.test_basic   sQ    KDK@@@qt,,,,SU!3!344444r   c           	      B   d}dddt           fD ]}t          j                    5  t          j        d| j        t
                     t          t          d||f| j                  }t          t          d|d|i| j        	          }d d d            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csignorer   )argsr   r   )kwargsr   r   )rtol)rL   rS   kaboomrL   )r"   warningscatch_warningsfilterwarningsmsgUserWarningr   r   r   r   r   assert_raises	TypeError)r7   r   rz   r   res1s        r   test_args_kwargszBaseMixin.test_args_kwargs   sz   y$< 	D 	DC(** 8 8'$(KHHH#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                 r   dddt           fD ]}t          j                    5  t          j        d| j        t
                     t          t          d|| j                  }d d d            n# 1 swxY w Y   t          |j
        dd	           t          t          t          t          dd
| j                   d S )Nr   r   r   r   r   r   r   r   r   oopsrz   r   )r"   r   r   r   r   r   r   r   r   r   r   r   
ValueErrorr7   rz   r   s      r   test_jac_optionszBaseMixin.test_jac_options   s
   y$< 	1 	1C(** O O'$(KHHH#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   >A++A/	2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   )r7   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                   d S )N      ?      ?rz   r   )x_scaler   auto)r   r         y      ?       @)	r'   r(   r   r   r   r   r   r   r   )r7   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-8DK	A 	A 	A 	A 	A 	Ar   c                     t          t          dd| j                  }t          t          dd | j                  }t          |j        dd           t          |j        dd           d S )Nr   rd   )	diff_stepr   r   r   r   r   )r7   r   res3s      r   test_diff_stepzBaseMixin.test_diff_step   sw    [#$(K1 1 1[#'+DKA A A----------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_optionr`   )r   optionsr   )r   r   r   r   r   r6   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                 p   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k               t          |j                   d S )Nr   r   r   r   r   g      )@   {Gz?lmr/   )r   r   r   r   r   costr   rz   grad
optimalityr   active_maskr   njevr5   statussuccessr   s     r   test_full_resultzBaseMixin.test_full_result   s#    KT[AAAqt,,,,$'''###....!$////5555S_a(((;$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@	   rS   $   r   )r   r   r   r   r   r'   r(   r   r   rz   r   r   r   r5   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          D ]x}t          j                            d          }|                    d          dz  }t                      }t          ||t          | j        |          }|j	        |j	        k    sJ yd S )Nr%   rL   i r   )r   r/   )rz   r   r   )
ranger'   rp   rq   uniformr2   r   rC   r   r5   )r7   r}   r|   rs   ftrivialr   s         r   	test_nfevzBaseMixin.test_nfev'  s    q! 	- 	-A)''//C!$$r)B%''Ha  C 8x},,,,,	- 	-r   c           
         ddg}ddg}t          dddt          gdt          j        ddg          dgd	d
g          D ]\  }}}t	          j                    5  t	          j        d| j        t                     t          t          ||||| j                  }d d d            n# 1 swxY w Y   t          |j        |           d S )NrR   r%   r   r   r   r   皙?rz   exactlsmrr   r   	tr_solverr   )r   rC   r'   r(   r   r   r   r   r   r   r0   r   r   r   )r7   rs   x_optrz   r   r   r   s          r   test_rosenbrockzBaseMixin.test_rosenbrock2  s5   !WA'.It^<bhSz**E2&!(# (# 	* 	*#C) (** M M'$(KHHH#NBW.7M M MM M M M M M M M M M M M M M M CE5))))	* 	*s   A 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 )NrR   r%   r   r   r   r   r   r   r   rz   r   r   r   r   g+=r   )r   r   r   r   rG   r   rJ   r'   r(   r   r   )r7   rs   rz   r   r   r   s         r   test_rosenbrock_croppedz!BaseMixin.test_rosenbrock_cropped?  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   rM   r   r6   s    r   test_fun_wrong_dimensionsz#BaseMixin.test_fun_wrong_dimensionsN  s1    j-1E$+	/ 	/ 	/ 	/ 	/ 	/r   c                 b    t          t          t          t          dt          | j                   d S r   )r   r   r   r   rP   r   r6   s    r   test_jac_wrong_dimensionsz#BaseMixin.test_jac_wrong_dimensionsR  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   r0   rE   r   r7   rs   s     r   (test_fun_and_jac_inconsistent_dimensionsz2BaseMixin.test_fun_and_jac_inconsistent_dimensionsV  sA    Vj-,T[	B 	B 	B 	B 	B 	Br   c                     t          j        d                              dd          }t          t          t
          t          || j                   d S )NrS   r   r   )r'   rr   rX   r   r   r   r   r   r   s     r   test_x0_multidimensionalz"BaseMixin.test_x0_multidimensional[  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_scalar`  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_arraye  s:    < j-b![	* 	* 	* 	* 	* 	*r   c                     d}t          j        |dz            }| j        dk    rd}nd}t          t          |d| j        |          }t          |j        |k                t          |j        dk                d S )	Nr/   r   r   i  r`   r   )ftolr   r   r   )r'   rr   r   r   r]   r   r5   r   )r7   rZ   rs   r   r   s        r   test_bvpzBaseMixin.test_bvpj  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  r6   s    r   /test_error_raised_when_all_tolerances_below_epsz9BaseMixin.test_error_raised_when_all_tolerances_below_eps{  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   rR   r%   )):0yE>NN)Nr  N)NNr  )rz   r	  r  r  r   )r   r   r0   rC   r   r   )r7   rs   r   r	  r  r  r   s          r   0test_convergence_with_only_one_tolerance_enabledz:BaseMixin.test_convergence_with_only_one_tolerance_enabled  s    ;$F!WA!6 	* 	*D$  %)4'+{4 4 4C CE5))))	* 	*r   r%   r   c                 $   t          t          d| j                  }g }dD ]4}t          t          d| j        |          }|                    |           5t	          d          5 }t          t          d| j        |j                  }|                    |           d d d            n# 1 swxY w Y   |D ]Y}|j        sJ t          |j        |j                   t          |j	        |j	                   t          |j
        |j
                   Zd S )Nr   r   r!   )r   workersr   )r   r   r   appendr   mapr   r   r   r5   r   )r7   serialresesr  r   s        r   test_workerszBaseMixin.test_workers  s^    {CDDD  	 	GSg  C LL!WW 	Sgk  C LL		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
  	0 	0C;;)))6;///6;////		0 	0s   %8B))B-0B-N)r=   r>   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  pytestmarkparallel_threads_limit	fail_slowr  r   r   r   r   r      s       
NC5 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
* * * [''**[30 0   +*0 0 0r   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  r6   s    r   test_inconsistentzBoundsMixin.test_inconsistent  s2    j-c(	> 	> 	> 	> 	> 	>r   c                 X    t          t          t          t          dd| j                   d S )Nr   )r   rS   r!  r  r6   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   rL   r!  r  r6   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   r0   r6   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   rz   r"  r   r   r   r   r   rB   rL   )r   r   r   )	r"   r   r   r   r   r   r   r   r   r   s      r   test_in_boundszBoundsMixin.test_in_bounds  s   y$< 
	' 
	'CSc'24;H 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 ri   r   ru   rv   s     r   get_bounds_directz8BoundsMixin.test_bounds_shape.<locals>.get_bounds_direct  s    r6Mr   c                 "    t          | |          S ri   )r   r0  s     r   get_bounds_instancesz;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instances  s    "b>>!r   r   r   r   r   )rz   r   r   r   r,  g333333?r   r   rB   h㈵>r   )r-   r   r*   r   r   r   )r7   r1  r3  rz   bounds_funcrs   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   )ru   r   r0        )rv   r4  rd   )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   g333333rc   g      ?r   g      Ir   r`   r   r   r   rz   r   r   r   r4  r   )
r'   r(   infr   rC   r   r0   r   r   r   )r7   x0_1x0_2x0_3x0_4x0_5problemsrs   r"  rz   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)r=   r>   r?   r#  r%  r'  r*  r-  r6  r9  r  r  r  rB  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   )	r_   r   r   r   r   rs   rz   r   rx   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 )Nra   r{   rm   r   #B;r   r   )r_   r   r   rs   rz   r   r   r5   r   r   r   r7   ra   rm   
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   rK  r   )r_   r   r   rs   rz   r   r   r   r7   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bestrF  r   tolrR  )r   rT  )	r_   r   r   r   r   rs   rz   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 )Nra   rJ  rm   r   r   rK  r   )r_   r   r   rs   rz   r   r   r   r   r
   
isinstancer'   ndarrayrL  s        r   test_solver_selectionz!SparseMixin.test_solver_selection4  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   rG  rK  r   r   )r_   r   r   rs   r   rx   r   r5   r   r   r   )r7   r   rz   rN  rM  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   rG  r   rR  r   )r_   r   rz   rx   r   r   rs   ru   r'   r;  r   rv   r   r   )r7   r   rz   rG  res_1res_2res_3s          r   test_with_boundszSparseMixin.test_with_boundsL  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 )NrB   rG  r   )r_   rx   r   r   r   r   rs   r   )r7   r   rx   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 )	Nrg   rJ  r   r   rK  r   r   )r   r   
r_   r   r   rs   rz   r   r   r   r   r   rU  s      r   test_linear_operatorz SparseMixin.test_linear_operatord  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 )Nrz   )r   r   r   rK  r   rg   rJ  rj  rU  s      r   test_x_scale_jac_scalez"SparseMixin.test_x_scale_jac_scalek  s      AE14t{$)+ + +#E2222J///j-ae![%	9 	9 	9 	9 	9 	9r   N)r=   r>   r?   rH  rO  rV  rZ  r^  r`  r  r  r  re  rh  rk  rm  r   r   r   rD  rD    s        * * *7 7 71 1 1C C C
7 
7 
7
< 
< 
< [2= = ="A A A= = =9 9 9 9 9r   rD  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   r7   rr  r   s      r   test_optionszLossFunctionMixin.test_optionsw  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   rq  )ru  r   r   r   r   r   r   rv  s      r   test_funzLossFunctionMixin.test_fun  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%   rr  r   r   r   r   hubersoft_l1r   cauchyarctanrS   gUUUUUU?)
r'   r(   r   r   r"   r   r   r   r   r   )r7   r   r   s      r   	test_gradzLossFunctionMixin.test_grad  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   r{  r%   r|  r}  r   r/   )rr  f_scaler   r~  g      r  )rr  r  r   r   r  g      4@r   rL   rS   )rr  r      g)	r   r   r"   r   r   rz   r   r   r   )r7   r   r   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)rd   r   r%   rd   iy )r|   r   r   r   r   r   r   r   r{  )rz   rr  r  r   )r   rz   r   r   r   r   r   r   ru  r   r   r   r   )r7   r   r   rz   res_lsqrr  
res_robusts          r   test_robustnessz!LossFunctionMixin.test_robustness  s2    	7 	7E)!S%XFFFA!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)r=   r>   r?   rw  ry  r  r  r  r   r   r   ro  ro  v  si        8 8 86 6 6I I I>BL BL BLH7 7 7 7 7r   ro  c                       e Zd ZdZdS )
TestDogboxdogboxN)r=   r>   r?   r   r   r   r   r  r    s        FFFr   r  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)TFr  
regularizerS  r   rK  r   )r_   r   r   rs   rz   r   r   )r7   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)r=   r>   r?   r   r  r   r   r   r  r    s(        F5 5 5 5 5r   r  c                   <    e Zd 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   )r8  r   r   r!  r   r   r   r   r6   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 )NrR   r%   r   r   )r   r   r   rG   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   r_   r   r   r   r   rs   rz   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   rg  r  r6   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 )Nrg   rJ  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   r{  r   rq  r   r   r   r}  )r   rr  )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   c                     d }t          j                    5  t          j        ddt                     t	          t
          dgd|           d d d            d S # 1 swxY w Y   d S )Nc                     J ri   r   r)   s    r   callbackz5TestLM.test_callback_with_lm_method.<locals>.callback/  s    5r   r   z@Callback function specified, but not supported with `lm` method.r   r   )rs   r   r  )r   r   r   r   r   r   )r7   r  s     r   test_callback_with_lm_methodz#TestLM.test_callback_with_lm_method.  s    	 	 	 $&& 	O 	O#R  
 +1#dXNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   5AA AN)r=   r>   r?   r   r  r  r  r  r  r  r  r   r   r   r  r    s        F< < <# # #
# # #
5 5 5# # #
1 1 1
O 
O 
O 
O 
Or   r  c                  ^    t          t          d          } t          | j        dd           d S )Nr   r   rR  r   )r   r   r   r   )r   s    r   r   r   ;  s.    
S
)
)CCE15))))))r   c                  \  
 g 
dt           f
fd} 
fd}dt           f
fd}
fd}| |g}||g}d d d g}t          ||          D ]y\  }}
                                  ||          }	t          
          d	k    sJ 
d
         j        d	k    sJ |	j        dk    sJ t          
d
         j        |	j                   zt          ||          D ]Y\  }}
                                  ||          }	t          
          d	k    sJ 
d
         j        dk    sJ |	j        dk    sJ Zd S )Nintermediate_resultc                 2                         |            d S ri   )r  r  resultss    r   my_callback_optimresultz.test_callback.<locals>.my_callback_optimresultF  s    *+++++r   c                 j    t                      }d|_        | |_                            |           dS )Nr%   F)r   nitr   r  r   rr  s     r   my_callback_xz$test_callback.<locals>.my_callback_xI  s3    qur   c                 <                         |            t          ri   )r  StopIterationr  s    r   &my_callback_optimresult_stop_exceptionz=test_callback.<locals>.my_callback_optimresult_stop_exceptionP  s    *+++r   c                 t    t                      }d|_        | |_                            |           t          r:   )r   r  r   r  r  r  s     r   my_callback_x_stop_exceptionz3test_callback.<locals>.my_callback_x_stop_exceptionU  s4    qr   c                 2    t          t          dd|           S )Nr   r  r   r  r   r   r  s    r   rl   ztest_callback.<locals>.<lambda>c  s    {C08: : : r   c                 4    t          t          ddd|           S )Nr   r  )g              @)r   r"  r  r  r  s    r   rl   ztest_callback.<locals>.<lambda>e  s#    {C.9HN N N r   c                 2    t          t          dd|           S )Nr   r  r  r  r  s    r   rl   ztest_callback.<locals>.<lambda>g  s    {C08: : : r   r   rB   rR   r%   )r   r   clearlenr  r   r   r   )r  r  r  r  callbacks_nostopcallbacks_stopcalls
mycallbackcallr   r  s             @r   test_callbackr  A  s    G,^ , , , , , ,    +     
     0?<24N
	: 	:	N 	N	: 	:E $$4e<< . .
Dd:7||ar{""""zRsu----#NE:: 	  	 
Dd:7||ar{!####zR	  	 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t           j                  }|                     dt           j                  }d fdfd	}t          d
d
g||f          }|j        dk    sJ t          |d
dgd||fddi          }t          |j	        |j	        d           d S )Ni  r   r%   r`   re   )r   rf   c                 d    | d         | d         |z  z                        t          j                  S r$   astyper'   float32)r   r   s     r   funcztest_fp32_gh12991.<locals>.func  s(    !qtax''
333r   c                 \     | |          |z
                       t          j                  S ri   r  )r   r   r\   r  s      r   errztest_fp32_gh12991.<locals>.err  s'    Q

Q&&rz222r   c                 H    t          j         | ||          dz            S r!   )r'   sum)r   r   r\   r  s      r   mseztest_fp32_gh12991.<locals>.mse  s#    vcc!QllAo&&&r   r   )r   r   r   cobyqafinal_tr_radiusgư>)r   r   r   g9̗?r   )
r'   rp   rq   rt   r  r   r5   r   r   r   )r|   r   r\   r  r   res2r  r  s         @@r   test_fp32_gh12991r    s    )


%
%C
Aq#RZ000A

2:
..A4 4 43 3 3 3 3' ' ' ' ' dD\A
7
7
7C 8a<<<<	sV"D)  D CE46------r   c                     dd} fd}d}t          || ddt          j        f          }t          |j        |j        t          j        d          t          j        t          j                            \  }}|j        dk    sJ t          j        	                    |j        |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   rs  r   )rs   r  r"  r%   )ord)
r   r'   r;  r   r   r   
atleast_1dr   linalgr   )initial_guessr  r  r   scaling_r  s         @r   test_gh_18793_and_19351r    s    FM     D
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   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   rd   c                 P    | \  }}}|t          j        ||z
  z            z  z
  S ri   )r'   r   )paramsABrs   xdataydatas       r   exponential_wrappedz*test_gh_19103.<locals>.exponential_wrapped  s1    1b26!urz*+++e33r   )r   r   r   )r   r   r   r/   gfffff4@r  )r   r"  )r'   r(   ry   r   r;  r   r   )r  rs   r"  r   r  r  s       @@r   test_gh_19103r    s     HbTBY 	" 	" 	" 	 	 	E Ia$$s*E4 4 4 4 4 4 
BRVR./F
+Rf
M
M
MC;;r   r<   )r   )@r   	itertoolsr   multiprocessingr   numpyr'   numpy.linalgr   numpy.testingr   r   r   r  r	   r   scipy.sparser
   r   scipy.sparse.linalgr   scipy.optimizer   r   r   !scipy.optimize._lsq.least_squaresr   scipy.optimize._lsq.commonr   r   r   r   r   r"   r*   r-   r0   r2   rC   rE   rG   rJ   rM   rP   r]   r_   r   r   listkeysru  r   r  rD  ro  r  r  r  r   r  r  r  r  r  r   r   r   <module>r     sd                               ) ) ) ) ) ) ) ) ) )  * * * * * * , , , , , , , , 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?	:h0 h0 h0 h0 h0 h0 h0 h0V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+O +O +O +O +OY +O +O +O\* * *@  @  @ F9 9 9%. %. %.PA A A4    r   