o
    h                     @   s  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 dBddZdCddZdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dCd d!Z&d"d# Z'G d$d% d%Z(G d&d' d'Z)d(d) Z*e+e, e*g Z-G d*d+ d+Z.G d,d- d-Z/G d.d/ d/Z0G d0d1 d1Z1G d2d3 d3e.e/e0e1Z2G d4d5 d5e.e/e0e1Z3G d6d7 d7e.Z4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8d@dA Z9dS )D    )productN)norm)assert_assert_allcloseassert_equalsuppress_warnings)raises)issparse
lil_matrix)aslinearoperator)least_squaresBounds)IMPLEMENTED_LOSSES)EPSmake_strictly_feasibleCL_scaling_vectorc                 C   s   | | d d S )N         @ xar   r   [/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/optimize/tests/test_least_squares.pyfun_trivial   s   r           c                 C   s   d| |  S Nr   r   r   r   r   r   jac_trivial      r   c                 C   s   t | d | d gS Nr      nparrayr   r   r   r   fun_2d_trivial   s   r$   c                 C   s
   t dS r   )r!   identityr#   r   r   r   jac_2d_trivial      
r&   c                 C   s*   t d| d | d d   d| d  gS )N
   r   r   r   r    r#   r   r   r   fun_rosenbrock!   s   *r)   c                 C   s   t d| d  dgddggS )Nr   r(   r    r#   r   r   r   jac_rosenbrock%   s   r,   c                 C   s$   t d| d  dgddgddggS )Nr*   r   r(   r+   r   r    r#   r   r   r   jac_rosenbrock_bad_dim,   s
   r-   c                 C      t | d S Nr   )r)   r#   r   r   r   fun_rosenbrock_cropped4   r   r0   c                 C   r.   r/   )r,   r#   r   r   r   jac_rosenbrock_cropped8   r   r1   c                 C   s   t | | d | d gS )Nr      r    r#   r   r   r   fun_wrong_dimensions=   s   r3   c                 C   s   t t| |dS )N)r   )r!   
atleast_3dr   r   r   r   r   jac_wrong_dimensionsA   s   r5   c                 C   s   t t| jd }t|d |d f}| ||f} | |ddddf< |d dddf |dd ddf  |ddd df  |dddd f  d|   | d  }| S )Nr   r   r   r+      r2   )intr!   sqrtshapezerosreshaperavel)r   nuyr   r   r   fun_bvpE   s   `rA   c                   @   s&   e Zd Zd
ddZdd Zdd Zd	S )BroydenTridiagonald   sparsec                    s^  t jd}| _t |  _t dd| _t dd| _  jd|	| 7  _  jd|	| 7  _  jd|	| 7  _t
 j j j _|dkrt||ftd _t |}d	 j||f< t d	|}d	 j||d	 f< t |d	 }d	 j||d	 f<  j _d S |d
kr fdd _d S |dkrd  _ fdd _d S td d S )Nr   r6         gr   皙?rD   )dtyper   operatorc                    s   t  | S N)r   _jacr#   selfr   r   <lambda>i       z-BroydenTridiagonal.__init__.<locals>.<lambda>densec                    s     |  S rI   )rJ   toarrayr#   rK   r   r   rM   l   rN   F)r!   randomRandomStater>   onesx0linspacelbubrandnr   r
   r8   sparsityarangerJ   jacr   )rL   r>   moderngir   rK   r   __init__O   s0   
zBroydenTridiagonal.__init__c                 C   sP   d| | d }|dd   |d d 8  < |d d  d|dd   8  < |S )Nr2   r   r+   r   r   )rL   r   fr   r   r   funp   s    zBroydenTridiagonal.func                 C   sr   t | j| jf}t| j}dd|  |||f< td| j}d|||d f< t| jd }d|||d f< |S )Nr2   r   r   r+   r6   )r
   r>   r!   rZ   )rL   r   Jr^   r   r   r   rJ   v   s   zBroydenTridiagonal._jacN)rC   rD   )__name__
__module____qualname__r_   ra   rJ   r   r   r   r   rB   N   s    
!rB   c                   @   s.   e Zd ZdZ		dddZdd	 Zd
d ZdS )ExponentialFittingProblemz]Provide data and function for exponential fitting in the form
    y = a + exp(b * x) + noise.r   r+   r      Nc           
      C   s   t j|}|| _d| _t d| _t |d |d || _|t 	|| j  | _
|  j
||| j 7  _
|d| j|}	| j
|	  d| || 7  < t ||g| _d S )Nr   r   r   2   )r!   rQ   rR   mr>   r;   p0rU   r   expr@   rX   randintrandr"   p_opt)
rL   r   bnoise
n_outliersx_rangen_pointsrandom_seedr]   outliersr   r   r   r_      s    z"ExponentialFittingProblem.__init__c                 C   s"   |d t |d | j  | j S r   )r!   rl   r   r@   rL   pr   r   r   ra      s   "zExponentialFittingProblem.func                 C   sL   t | j| jf}d|d d df< | jt |d | j  |d d df< |S )Nr   r   )r!   emptyrj   r>   r   rl   )rL   rx   rb   r   r   r   r[      s   &zExponentialFittingProblem.jac)r   rg   rh   N)rc   rd   re   __doc__r_   ra   r[   r   r   r   r   rf      s    
rf   c                 C   sL   t d| jf}d|  }d|d d  |d< |d |d< d|d  |d< |S )Nr2   r   gUUUUUU?r   gUUUUUUgr   )r!   ry   size)zrhotr   r   r   cubic_soft_l1   s   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)S )*	BaseMixinc                 C   s6   t td| jd}t|jddd t|jt|j d S )N       @methodr   -C6?atol)r   r   r   r   r   ra   rL   resr   r   r   
test_basic   s   zBaseMixin.test_basicc              	   C   s   d}dddt fD ]Z}t %}|td ttd||f| jd}ttd|d|i| jd	}W d    n1 s5w   Y  t|j|d
d t|j|d
d t	t
ttdd| jd t	t
ttdddi| jd	 q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)r2   r7   kaboomr2   )r   r   filterUserWarningr   r   r   r   r   assert_raises	TypeError)rL   r   r[   supr   res1r   r   r   test_args_kwargs   s.   



zBaseMixin.test_args_kwargsc              	   C   s   dddt fD ],}t }|td ttd|| jd}W d    n1 s%w   Y  t|jddd	 qt	t
ttdd
| jd d S )Nr   r   r   r   r   r   r   r   r   oopsr[   r   )r   r   r   r   r   r   r   r   r   r   
ValueError)rL   r[   r   r   r   r   r   test_jac_options   s   
zBaseMixin.test_jac_optionsc                 C   s0   dD ]}t td|| jd}t|jddd qd S )N)N   r   )max_nfevr   r   r   r   )r   r   r   r   r   )rL   r   r   r   r   r   test_nfev_options   s   zBaseMixin.test_nfev_optionsc                 C   s   dt dgdfD ]}ttd|d}t|jd q	ttttdd| jd ttttdd	| jd ttttdd | jd ttttdd
| jd d S )N      ?      ?r[   r   )x_scaler   auto)r   r         y      ?       @)	r!   r"   r   r   r   r   r   r   r   )rL   r   r   r   r   r   test_x_scale_options   s   
zBaseMixin.test_x_scale_optionsc                 C   s   t tdd| jd}t tdd| jd}t tdd | jd}t|jddd t|jddd t|jddd t|j|j t|j|j d S )Nr   rF   )	diff_stepr   gr   r   r   )r   r   r   r   r   r   nfev)rL   r   res2res3r   r   r   test_diff_step   s   zBaseMixin.test_diff_stepc                 C   s8   t tttd| jddid t tttd| jddid d S )Nr   no_such_optionrC   )r   optionsr   )r   r   r   r   r   rK   r   r   r   test_incorrect_options_usage   s   




z&BaseMixin.test_incorrect_options_usagec                 C   s   t td| jd}t|jddd t|jd t|jd t|jddd t|jddd t|j	ddd t
|jd | jd	krNt|jd
k  t|jd u  nt|jdk  t|jdk  t|jdk t|j d S )Nr   r   r   r   r   g      )@   {Gz?lm   r(   )r   r   r   r   r   costra   r[   grad
optimalityr   active_maskr   r   njevstatussuccessr   r   r   r   test_full_result   s   
zBaseMixin.test_full_resultc                 C   s   | j dkrd S ttd| j dd}t|jtdg t|jd t|jtdg t|j	tdgg t|j
td	g t|jd	 t|jtd
g t|jd t|jd t|jd
 t|jd
 d S )Nr   r   r   )r   r   r   g     @D@	   r7   $   r   )r   r   r   r   r   r!   r"   r   ra   r[   r   r   r   r   r   r   r   r   r   r   r   test_full_result_single_fev  s    

z%BaseMixin.test_full_result_single_fevc              
   C   s   ddg}ddg}t dddtgdtddgdgd	d
gD ]/\}}}t }|td tt||||| j	d}W d    n1 s@w   Y  t
|j| qd S )Nr6   r   r   r   r   r   皙?r[   exactlsmrr   r   	tr_solverr   )r   r,   r!   r"   r   r   r   r   r)   r   r   r   )rL   rT   x_optr[   r   r   r   r   r   r   r   test_rosenbrock(  s$   

zBaseMixin.test_rosenbrockc              	   C   s   ddg}| j dkrtttt|dd d S tdddtgdtdd	gd
gddgD ]\}}}tt||||| j d}t	|j
ddd q(d S )Nr6   r   r   r   r   r   r   r   r   r[   r   r   r   r   g+=r   )r   r   r   r   r0   r   r1   r!   r"   r   r   )rL   rT   r[   r   r   r   r   r   r   test_rosenbrock_cropped8  s    


z!BaseMixin.test_rosenbrock_croppedc                 C   s   t tttd| jd d S Nr   r   )r   r   r   r3   r   rK   r   r   r   test_fun_wrong_dimensionsG     
z#BaseMixin.test_fun_wrong_dimensionsc                 C   s   t tttdt| jd d S r   )r   r   r   r   r5   r   rK   r   r   r   test_jac_wrong_dimensionsK  s   
z#BaseMixin.test_jac_wrong_dimensionsc                 C   s"   ddg}t ttt|t| jd d S )Nr   r   r   )r   r   r   r)   r-   r   rL   rT   r   r   r   (test_fun_and_jac_inconsistent_dimensionsO  s   

z2BaseMixin.test_fun_and_jac_inconsistent_dimensionsc                 C   s*   t ddd}tttt|| jd d S )Nr7   r   r   )r!   rS   r<   r   r   r   r   r   r   r   r   r   test_x0_multidimensionalT  s   

z"BaseMixin.test_x0_multidimensionalc                 C   s   d}t ttt|| jd d S )N       @        r   r   r   r   r   r   r   r   r   r   test_x0_complex_scalarY  s   

z BaseMixin.test_x0_complex_scalarc                 C   s    ddg}t ttt|| jd d S )Nr   r   r   r   r   r   r   r   test_x0_complex_array^  s   

zBaseMixin.test_x0_complex_arrayc                 C   sZ   d}t |d }| jdkrd}nd}tt|d| j|d}t|j|k  t|jdk  d S )	Nr(   r   r   i  rC   r   )ftolr   r   r   )r!   rS   r   r   rA   r   r   r   )rL   r>   rT   r   r   r   r   r   test_bvpc  s   
zBaseMixin.test_bvpc              
   C   s   t tttd| jd d d d d S )Nr   )r   r   xtolgtolr   rK   r   r   r   /test_error_raised_when_all_tolerances_below_epst  s   


z9BaseMixin.test_error_raised_when_all_tolerances_below_epsc              
   C   sV   | j dkrd S ddg}ddg}dD ]\}}}tt|t|||| j d}t|j| qd S )Nr   r6   r   )):0yE>NN)Nr   N)NNr   )r[   r   r   r   r   )r   r   r)   r,   r   r   )rL   rT   r   r   r   r   r   r   r   r   0test_convergence_with_only_one_tolerance_enabledy  s   
z:BaseMixin.test_convergence_with_only_one_tolerance_enabledN)rc   rd   re   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      s*    r   c                   @   sX   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
jddd ZdS )BoundsMixinc                 C      t tttdd| jd d S )Nr   )      $@r   boundsr   r   rK   r   r   r   test_inconsistent     

zBoundsMixin.test_inconsistentc                 C   r   )Nr   )r   r7   r   r   rK   r   r   r   test_infeasible  r   zBoundsMixin.test_infeasiblec                 C   r   )Nr   )r   r   r2   r   r   rK   r   r   r   test_wrong_number  r   zBoundsMixin.test_wrong_numberc                 C   sF   t tttddddgf| jd t tttddgdgddgf| jd d S )Nr   r   r   r   r         @)r   r   r   r   r   r)   rK   r   r   r   test_inconsistent_shape  s   

z#BoundsMixin.test_inconsistent_shapec                 C   s   dddt fD ]R}ttd|d| jd}t|jddd	 t|jd
g td|j  ko,dkn   ttd|d| jd}t|jddd	 t|jdg td|j  koTdkn   qd S )Nr   r   r   r   )r   r   r[   r   r   r   r   r   r   r+   r2   )r   r   r   )	r   r   r   r   r   r   r   r   r   )rL   r[   r   r   r   r   test_in_bounds  s    zBoundsMixin.test_in_boundsc              
   C   s   dd }dd }dddt fD ]e}||fD ]^}ddg}tt||d	}t|jd
d
g tt|||dddg| jd}t|jddg tt|||ddgd| jd}t|jddg tt|||ddgddg| jd}t|jd
dgdd qqd S )Nc                 S   s   | |fS rI   r   rV   rW   r   r   r   get_bounds_direct  s   z8BoundsMixin.test_bounds_shape.<locals>.get_bounds_directc                 S   s
   t | |S rI   )r   r   r   r   r   get_bounds_instances  r'   z;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instancesr   r   r   r   )r[   r   r   r   r   g333333?r   r   r+   h㈵>r   )r&   r   r$   r   r   r   )rL   r   r   r[   bounds_funcrT   r   r   r   r   test_bounds_shape  s2   zBoundsMixin.test_bounds_shapec                 C   s   t tdt d}t|jddd t tdtddd}t|jddd t tdtd	dd
d}t|jddd t tdtd	dd}t|jd	dd t tddgtd	d	gdd
d}t|jddgdd t tddgtddgdd}t|jddgdd d S )Nr   )r   r   r   r   r   r   )rV   r   r         )rW   r   rF   )r   r   r   r   r   r$   r   r   r   r   test_bounds_instances  s    

z!BoundsMixin.test_bounds_instancesr(   c                 C   s*  t ddg}t ddg}t ddg}t ddg}t 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 ]/\}}tdddtgddd
gdgddgD ]\}	}
}tt||	||
|| jd}t|j	ddd qxqcd S )Ng       r   r   r   g333333rE   g      ?r   g      Ir   rC   r   r   r   r[   r   r   r   r   r   )
r!   r"   infr   r,   r   r)   r   r   r   )rL   x0_1x0_2x0_3x0_4x0_5problemsrT   r   r[   r   r   r   r   r   r   test_rosenbrock_bounds  s2   

z"BoundsMixin.test_rosenbrock_boundsN)rc   rd   re   r   r   r   r   r   r   r   pytestmark	fail_slowr   r   r   r   r   r     s    
r   c                   @   sh   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
ddd Zdd Zdd Zdd ZdS )SparseMixinc              	   C   sF   t  }ttt|j|j|jd| jd ttt|j|jd|j| jd d S )Nr   r   r   )r   jac_sparsityr   )	rB   r   r   r   ra   rT   r[   r   rY   rw   r   r   r   test_exact_tr_solver  s   
z SparseMixin.test_exact_tr_solverc                 C   s   t dd}t dd}t|j|j|j| jd}t|j|j|j| jd}t|j|j t|j	|j	dd t|j
ddd t|j
ddd d S )NrD   r\   rO   r   #B;r   r   )rB   r   ra   rT   r[   r   r   r   r   r   r   rL   rD   rO   
res_sparse	res_denser   r   r   test_equivalence  s   

zSparseMixin.test_equivalencec                 C   s8   t  }t|j|j|j| jddid}t|jddd d S )Nbtol绽|=r   
tr_optionsr   r   r   )rB   r   ra   rT   r[   r   r   r   rL   rx   r   r   r   r   test_tr_options  s
   zSparseMixin.test_tr_optionsc              	   C   sH   t  }ttt|j|j|jd| jd ttt|j|j|jdddid d S )Nbestr   r   tolr  )r   r  )	rB   r   r   r   ra   rT   r[   r   r   rw   r   r   r   test_wrong_parameters  s   
z!SparseMixin.test_wrong_parametersc                 C   s   t dd}t dd}t|j|j|j| jd}t|j|j|j| jd}t|jddd t|jddd tt	|j tt
|jtj d S )NrD   r   rO   r   r   r   r   )rB   r   ra   rT   r[   r   r   r   r   r	   
isinstancer!   ndarrayr   r   r   r   test_solver_selection  s   

z!SparseMixin.test_solver_selectionc                 C   s   t  }dD ]:}t|j|j|| jd}t|j|j|| j|jd}t|j|j t|j	|j	dd t|j
ddd t|j
ddd qd S )N)r   r   r   r   )r   r   r   r   r   )rB   r   ra   rT   r   rY   r   r   r   r   r   )rL   rx   r[   r   r   r   r   r   test_numerical_jac!  s   zSparseMixin.test_numerical_jacr(   c              	   C   s   t  }t|jdddgd |jgD ]P\}}t|j|j||jtj	f| j
|d}t|j|j|tj	 |jf| j
|d}t|j|j||j|jf| j
|d}t|jddd t|jddd t|jddd qd S )Nr   r   r   )r   r   r   r   r  r   )rB   r   r[   rY   r   ra   rT   rV   r!   r   r   rW   r   r   )rL   rx   r[   r   res_1res_2res_3r   r   r   test_with_bounds-  s(   zSparseMixin.test_with_boundsc                 C   s2   t  }|jd d }ttt|j|j|| jd d S )Nr+   r   r   )rB   rY   r   r   r   ra   rT   r   )rL   rx   rY   r   r   r   test_wrong_jac_sparsity?  s
   
z#SparseMixin.test_wrong_jac_sparsityc              	   C   sT   t dd}t|j|j|j| jd}t|jddd tt	t|j|j|j| jdd d S )	NrH   r   r   r   r   r   r   )r   r   
rB   r   ra   rT   r[   r   r   r   r   r   r  r   r   r   test_linear_operatorE  s   

z SparseMixin.test_linear_operatorc              	   C   s\   t  }t|j|j|j| jdd}t|jddd t dd}tt	t|j|j|j| jdd d S )Nr[   )r   r   r   r   r   rH   r   r  r  r   r   r   test_x_scale_jac_scaleL  s   

z"SparseMixin.test_x_scale_jac_scaleN)rc   rd   re   r   r  r  r
  r  r  r   r   r   r  r  r  r  r   r   r   r   r     s    

r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )LossFunctionMixinc                 C   sF   t D ]}ttd|| jd}t|jddd qttttdd| jd d S )Nr   lossr   r   V瞯<r   hinge)LOSSESr   r   r   r   r   r   r   rL   r  r   r   r   r   test_optionsX  s   

zLossFunctionMixin.test_optionsc                 C   s2   t D ]}ttd|| jd}t|jt|j qd S )Nr   r  )r  r   r   r   r   ra   r   r  r   r   r   test_funa  s   zLossFunctionMixin.test_func                 C   s  t dg}tt|tdd| jd}t|jd| |d d   tt|tdd| jd}t|jd|  tt|tdd| jd}t|jd| |d d  d|d d d  d	   tt|td
d| jd}t|jd| |d d  d|d d d    tt|tdd| jd}t|jd| |d d  d|d d d    tt|tt	d| jd}t|jd| |d d  d|d d d  d   d S )Nr   linearr   r  r   r   r   r   hubersoft_l1r   cauchyarctanr7   gUUUUUU?)
r!   r"   r   r   r   r   r   r   r   r   )rL   r   r   r   r   r   	test_gradi  s:   


*
0
0
*zLossFunctionMixin.test_gradc              	   C   s4  d}|d d }t t|tdd| jd}t|jd|  t t|tdd| jd}t|jd| td   t t|tdd	dd
}t|jd|  t t|tdd| jd}t|jd| d|d  d   t t|tdd| jd}t|jd| td   t t|tdd	d| jd}|d	 }t|jd| d|d  d  d|d    t t|tdd| jd}t|jd| td   t t|tddd| jd}|d }t|jd| dd|d   d  d|d    t t|ttdd}t|jd| td   t t|ttddd
}|d }t|jd| d|d d  d  d|d  d   d S )Nr   r   r   r!  r   r"  r#  r   r(   )r  f_scaler   r$  g      r%  )r  r(  r   r   r&  g      4@r   r2   r7   )r  r      g)	r   r   r   r   r   r[   r   r   r   )rL   r   r`   r   fsr   r   r   test_jac  s^   	



 

,

0
*zLossFunctionMixin.test_jacc                 C   s   dD ]X}t dd|dd}ddd|jfD ]F}t|j|j|| jd	}t|jdd
d tD ].}|dkr1q*t|j|j|||| jd}t|jdd
d t	t
|j|j t
|j|j k  q*qqd S )N)rF   r   r   rF   r   )ru   r   r   r   r   r   r   r!  )r[   r  r(  r   )rf   r[   r   ra   rk   r   r   r   r  r   r   r   ro   )rL   rq   rx   r[   res_lsqr  
res_robustr   r   r   test_robustness  s*   z!LossFunctionMixin.test_robustnessN)rc   rd   re   r  r   r'  r+  r.  r   r   r   r   r  W  s    	Dr  c                   @   s   e Zd ZdZdS )
TestDogboxdogboxN)rc   rd   re   r   r   r   r   r   r/    s    r/  c                   @   s   e Zd ZdZdd ZdS )TestTRFtrfc                 C   s@   t  }dD ]}t|j|j|jdd|id}t|jddd qd S )N)TFr2  
regularizer  r   r   r   )rB   r   ra   rT   r[   r   r   )rL   rx   r3  r   r   r   r   test_lsmr_regularization  s   z TestTRF.test_lsmr_regularizationN)rc   rd   re   r   r4  r   r   r   r   r1    s    r1  c                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )TestLMr   c                 C   s   t tttdddd d S )Nr   )r   r   r   r   r   r   r   r   rK   r   r   r   test_bounds_not_supported  r   z TestLM.test_bounds_not_supportedc                 C   s   ddg}t ttt|dd d S )Nr6   r   r   r   )r   r   r   r0   r   r   r   r   test_m_less_n_not_supported  s   

z"TestLM.test_m_less_n_not_supportedc                 C   s$   t  }ttt|j|j|jdd d S )Nr   r   rB   r   r   r   ra   rT   r[   rw   r   r   r   test_sparse_not_supported  s   
z TestLM.test_sparse_not_supportedc                 C   s   t tttddgdd d S )Nr   r   r   r  r6  rK   r   r   r   test_jac_sparsity_not_supported  r   z&TestLM.test_jac_sparsity_not_supportedc                 C   s(   t dd}ttt|j|j|jdd d S )NrH   r   r   r   r9  rw   r   r   r   !test_LinearOperator_not_supported  s   

z(TestLM.test_LinearOperator_not_supportedc                 C   s8   t tdddd}t|jddd ttt tdddd	 d S )
Nr   r!  r   r  r   r   r   r#  )r   r  )r   r   r   r   r   r   r   r   r   r   	test_loss  s
   

zTestLM.test_lossN)
rc   rd   re   r   r7  r8  r:  r;  r<  r=  r   r   r   r   r5    s    r5  c                  C   s   t td} t| jddd d S )Nr   r   r  r   )r   r   r   r   )r   r   r   r   r     s   
r   c                  C   s,   dD ]\} }}t tttd|| |dd qd S )N))NvIh%<=r>  )r>  Nr>  )r>  r>  Nr   r   )r   r   r   r   r6  )r   r   r   r   r   r   test_small_tolerances_for_lm  s
   r?  c                     s   t jd} t dddd}| dd}dd   fdd}t|d	d	g||fd
}|jdks4J t|jt 	ddgdd d S )Nr   r   rC   float32c                 S   s   | d | d |  S r   r   )rx   r   r   r   r   func&  s   ztest_fp32_gh12991.<locals>.funcc                    s    | || S rI   r   )rx   r   r@   rA  r   r   err)  s   ztest_fp32_gh12991.<locals>.errr   )r   r   g W ?g	?g-C6
?r   )
r!   rQ   rR   rU   astyper   r   r   r   r"   )r]   r   r@   rC  r   r   rB  r   test_fp32_gh12991  s   rE  c                     s   d d}  fdd}d}t || ddtjfd}t|j|jtdttj\}}|jdks0J tjj	|j| tjd	|k s@J d S )
Ng-q=gyYs=c                    s   |   d S r   r   r#   answerr   r   chi2;  r   z%test_gh_18793_and_19351.<locals>.chi2r  r   )rT   r   r   r   )ord)
r   r!   r   r   r   r   
atleast_1dr   linalgr   )initial_guessrH  r   r   scaling_r   rF  r   test_gh_18793_and_193517  s   
$rO  c                     sn   t dgd g d t djd   fdd} g d}d	t jd
dff}t| |d|d}|js5J 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   rQ        "@      @r   rT  rR  r         *@rS  rR        &@r   rU  g      ,@      3@rV  g      .@g      2@g      :@rW        @@g      =@g      <@      B@rX  g     A@rY  g     E@      J@rX  g      M@g      L@rZ  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   rF   c                    s$   | \}}}|t | |    S rI   )r!   rl   )paramsABrT   xdataydatar   r   exponential_wrappedc  s   
z*test_gh_19103.<locals>.exponential_wrapped)r   r   r   )r   r   r   r(   gfffff4@r2  )r   r   )r!   r"   rZ   r{   r   r   r   )ra  rT   r   r   r   r^  r   test_gh_19103Q  s   
rb  )r   )r   ):	itertoolsr   numpyr!   numpy.linalgr   numpy.testingr   r   r   r   r   r   r   scipy.sparser	   r
   scipy.sparse.linalgr   scipy.optimizer   r   !scipy.optimize._lsq.least_squaresr   scipy.optimize._lsq.commonr   r   r   r   r   r$   r&   r)   r,   r-   r0   r1   r3   r5   rA   rB   rf   r   listkeysr  r   r   r   r  r/  r1  r5  r   r?  rE  rO  rb  r   r   r   r   <module>   sR    


	3 Zjf 	"