
    Ui'                     |   d dl mZ d dlmZ d dlZd dlmZ d dlm	Z	m
Z
mZmZ d dlZd dlmZ d dlmZmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZmZ d dlmZ 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. e/ ej0                              e.gz   Z1 G d! d"          Z2 G d# d$          Z3 G d% d&          Z4 G d' d(          Z5 G d) d*e2e3e4e5          Z6 G d+ d,e2e3e4e5          Z7 G d- d.e2          Z8d/ Z9d0 Z:d1 Z;d2 Z<d3 Z=d4 Z>dS )7    )product)PoolN)norm)assert_assert_allcloseassert_equalsuppress_warnings)raises)issparse	lil_array)aslinearoperator)least_squaresBounds)IMPLEMENTED_LOSSES)EPSmake_strictly_feasibleCL_scaling_vector)OptimizeResultc                     | |z
  dz  dz   S )N         @ xas     /var/www/development/aibuddy-work/election-extract/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_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   0   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   7   s9    8	qtR	Q	c
   r   c                 ,    t          |           d         S r4   )r0   r)   s    r   fun_rosenbrock_croppedrG   ?       !Qr   c                 ,    t          |           d         S r4   )rC   r)   s    r   jac_rosenbrock_croppedrJ   C   rH   r   c                 <    t          j        | | dz  | dz  g          S )Nr      r&   r)   s    r   fun_wrong_dimensionsrM   H   s     8Q1adO$$$r   c                 H    t          j        t          | |                    S )N)r   )r'   
atleast_3dr"   r   s     r   jac_wrong_dimensionsrP   L   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]   P   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   rR         gr   皙?ra   )dtyper%   operatorc                 H    t                              |                     S N)r   _jacr   r7   s    r   <lambda>z-BroydenTridiagonal.__init__.<locals>.<lambda>t   s    !1$))A,,!?!? r   densec                 R                         |                                           S rh   )ri   toarrayrj   s    r   rk   z-BroydenTridiagonal.__init__.<locals>.<lambda>w   s    1!5!5!7!7 r   F)r'   randomRandomStaterZ   onesx0linspacelbubrandnr   r   rT   sparsityarangeri   jacr   )r7   rZ   moderngis   `    r   r8   zBroydenTridiagonal.__init__Z   s   i##A&&71::++b$**+dC++31%%31%%31%%($'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'   rx   )r7   r   Jr|   s       r   ri   zBroydenTridiagonal._jac   s    tvtv&''Idfa!e)!Q$Ia  !QU(Idfqj!!!QU(r   N)r`   ra   )r=   r>   r?   r8   r   ri   r   r   r   r_   r_   Y   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'   ro   rp   mrZ   rW   p0rs   r   expr\   rv   randintrandr(   p_opt)
r7   r   bnoise
n_outliersx_rangen_pointsrandom_seedr{   outlierss
             r   r8   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   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   ry   zExponentialFittingProblem.jac   s\    Hdfdf%&&!!!Q$&26!A$-000!!!Q$r   )r%   r   r   N)r=   r>   r?   __doc__r8   r   ry   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ej                            d          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   r   r7   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)rL   rS   kaboomrL   )r"   r	   filterUserWarningr   r   r   r   r   assert_raises	TypeError)r7   r   ry   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ry   r   )r"   r	   r   r   r   r   r   r   r   r   
ValueError)r7   ry   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   )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      ?      ?ry   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   ry   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   ry   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/   )ry   r   r   )
ranger'   ro   default_rnguniformr2   r   rC   r   r5   )r7   r|   r{   rr   ftrivialr   s         r   	test_nfevzBaseMixin.test_nfev*  s    q! 	- 	-A)''//C!$$r)B%''Ha  C 8x},,,,,	- 	-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 )NrR   r%   r   r   r   r   皙?ry   exactlsmrr   r   	tr_solverr   )r   rC   r'   r(   r	   r   r   r   r0   r   r   r   )r7   rr   x_optry   r   r   r   r   s           r   test_rosenbrockzBaseMixin.test_rosenbrock5  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 )NrR   r%   r   r   r   r   r   r   r   ry   r   r   r   r   g+=r   )r   r   r   r   rG   r   rJ   r'   r(   r   r   )r7   rr   ry   r   r   r   s         r   test_rosenbrock_croppedz!BaseMixin.test_rosenbrock_croppedE  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_dimensionsT  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_dimensionsX  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   rr   s     r   (test_fun_and_jac_inconsistent_dimensionsz2BaseMixin.test_fun_and_jac_inconsistent_dimensions\  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'   rq   rX   r   r   r   r   r   r   s     r   test_x0_multidimensionalz"BaseMixin.test_x0_multidimensionala  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_scalarf  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_arrayk  s:    < j-b![	* 	* 	* 	* 	* 	*r   c                     d}t          j        |dz            }| j        dk    rd}nd}t          t          |d| j        |          }t          |j        |k                t          |j        dk                d S )	Nr/   r   r   i  r`   r   )ftolr   r   r   )r'   rq   r   r   r]   r   r5   r   )r7   rZ   rr   r   r   s        r   test_bvpzBaseMixin.test_bvpp  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  )ry   r  r  r  r   )r   r   r0   rC   r   r   )r7   rr   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   c                 "   t          t          d| j                  }g }dD ]4}t          t          d| j        |          }|                    |           5t	                      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   workers)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VV 	wSgk  C LL		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
  	0 	0C;)))6;///6;////		0 	0s   $8B((B,/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  pytestmark	fail_slowr  r   r   r   r   r      s       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   ry   r   r   r   r   r   r   rB   rL   )r   r   r   )	r"   r   r   r   r   r   r   r   r   )r7   ry   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 rh   r   rt   ru   s     r   get_bounds_directz8BoundsMixin.test_bounds_shape.<locals>.get_bounds_direct  s    r6Mr   c                 "    t          | |          S rh   )r   r.  s     r   get_bounds_instancesz;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instances  s    "b>>!r   r   r   r   r   )ry   r   r   r   r*  g333333?r   r   rB   h㈵>r   )r-   r   r*   r   r   r   )r7   r/  r1  ry   bounds_funcrr   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   )rt   r   r.        )ru   r2  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   ry   r   r   r   r2  r   )
r'   r(   infr   rC   r   r0   r   r   r   )r7   x0_1x0_2x0_3x0_4x0_5problemsrr   r   ry   r   r   r   s                r   test_rosenbrock_boundsz"BoundsMixin.test_rosenbrock_bounds  s   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+  r4  r7  r  r  r  r@  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   rr   ry   r   rw   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   rz   rl   r   #B;r   r   )r_   r   r   rr   ry   r   r   r5   r   r   r   r7   ra   rl   
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   rI  r   )r_   r   r   rr   ry   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bestrD  r   tolrP  )r   rR  )	r_   r   r   r   r   rr   ry   r   r   r   s     r   test_wrong_parametersz!SparseMixin.test_wrong_parameters0  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   rH  rl   r   r   rI  r   )r_   r   r   rr   ry   r   r   r   r   r   
isinstancer'   ndarrayrJ  s        r   test_solver_selectionz!SparseMixin.test_solver_selection7  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   rE  rI  r   r   )r_   r   r   rr   r   rw   r   r5   r   r   r   )r7   r   ry   rL  rK  s        r   test_numerical_jaczSparseMixin.test_numerical_jacC  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   rE  r   rP  r   )r_   r   ry   rw   r   r   rr   rt   r'   r9  r   ru   r   r   )r7   r   ry   rE  res_1res_2res_3s          r   test_with_boundszSparseMixin.test_with_boundsO  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   rE  r   )r_   rw   r   r   r   r   rr   r   )r7   r   rw   s      r   test_wrong_jac_sparsityz#SparseMixin.test_wrong_jac_sparsitya  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 )	Nrf   rH  r   r   rI  r   r   )r   r   
r_   r   r   rr   ry   r   r   r   r   r   rS  s      r   test_linear_operatorz SparseMixin.test_linear_operatorg  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 )Nry   )r   r   r   rI  r   rf   rH  rh  rS  s      r   test_x_scale_jac_scalez"SparseMixin.test_x_scale_jac_scalen  s      AE14t{$)+ + +#E2222J///j-ae![%	9 	9 	9 	9 	9 	9r   N)r=   r>   r?   rF  rM  rT  rX  r\  r^  r  r  r  rc  rf  ri  rk  r   r   r   rB  rB    s        * * *7 7 71 1 1C C C
7 
7 
7
< 
< 
< [2= = ="A A A= = =9 9 9 9 9r   rB  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   rp  r   s      r   test_optionszLossFunctionMixin.test_optionsz  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   ro  )rs  r   r   r   r   r   r   rt  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%   rp  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   ry  r%   rz  r{  r   r/   )rp  f_scaler   r|  g      r}  )rp  r  r   r   r~  g      4@r   rL   rS   )rp  r      g)	r   r   r"   r   r   ry   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   r   )r   r   r   r   r   r   r   ry  )ry   rp  r  r   )r   ry   r   r   r   r   r   r   rs  r   r   r   r   )r7   r   r   ry   res_lsqrp  
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)r=   r>   r?   ru  rw  r  r  r  r   r   r   rm  rm  y  si        8 8 86 6 6I I I>BL BL BLH7 7 7 7 7r   rm  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  
regularizerQ  r   rI  r   )r_   r   r   rr   ry   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   )r6  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   rr   ry   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   re  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 )Nrf   rH  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   ry  r   ro  r   r   r   r{  )r   rp  )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                      5 }|                    t          d           t          t          dgd|           d d d            d S # 1 swxY w Y   d S )Nc                     J rh   r   r)   s    r   callbackz5TestLM.test_callback_with_lm_method.<locals>.callback2  s    Mr   z@Callback function specified, but not supported with `lm` method.r   r   )rr   r   r  )r	   r   r   r   r   )r7   r  r   s      r   test_callback_with_lm_methodz#TestLM.test_callback_with_lm_method1  s    	 	 	    	OCJJ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   rP  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 rh   )r  r  resultss    r   my_callback_optimresultz.test_callback.<locals>.my_callback_optimresultH  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_xK  s3    qur   c                 <                         |            t          rh   )r  StopIterationr  s    r   &my_callback_optimresult_stop_exceptionz=test_callback.<locals>.my_callback_optimresult_stop_exceptionR  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_exceptionW  s4    qr   c                 2    t          t          dd|           S )Nr   r  r   r  r   r   r  s    r   rk   ztest_callback.<locals>.<lambda>e  s    {C08: : : r   c                 4    t          t          ddd|           S )Nr   r  )g              @)r   r   r  r  r  s    r   rk   ztest_callback.<locals>.<lambda>g  s#    {C.9HN N N r   c                 2    t          t          dd|           S )Nr   r  r  r  r  s    r   rk   ztest_callback.<locals>.<lambda>i  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  C  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                              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   r`   float32c                 *    | d         | d         |z  z   S r$   r   )r   r   s     r   funcztest_fp32_gh12991.<locals>.func  s    tadQhr   c                 "     | |          |z
  S rh   r   )r   r   r\   r  s      r   errztest_fp32_gh12991.<locals>.err  s    tAqzzA~r   r   )r   r   g W ?g	?g-C6
?r   )
r'   ro   rp   rs   astyper   r5   r   r   r(   )r{   r   r\   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   rq  r   )rr   r  r   r%   )ord)
r   r'   r9  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 rh   )r'   r   )paramsABrr   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(   rx   r   r9  r   r   )r  rr   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   )?	itertoolsr   multiprocessingr   numpyr'   numpy.linalgr   numpy.testingr   r   r   r	   r  r
   r   scipy.sparser   r   scipy.sparse.linalgr   scipy.optimizer   r   !scipy.optimize._lsq.least_squaresr   scipy.optimize._lsq.commonr   r   r   r   r   r"   r*   r-   r0   r2   rC   rE   rG   rJ   rM   rP   r]   r_   r   r   listkeysrs  r   r  rB  rm  r  r  r  r   r  r  r  r  r  r   r   r   <module>r     sa                              < < < < < < < < < < < <  * * * * * * , , , , , , , , 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?	:m0 m0 m0 m0 m0 m0 m0 m0`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Z* * *@  @  @ F9 9 9I I I2A A A4    r   