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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 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/Z/G d0d1 d1Z0G d2d3 d3e-e.e/e0Z1G d4d5 d5e-e.e/e0Z2G d6d7 d7e-Z3d8d9 Z4d:d; Z5d<d= Z6d>d? Z7d@dA Z8dS )D    )productN)norm)assert_assert_allcloseassert_equalsuppress_warnings)raises)issparse
lil_matrix)aslinearoperator)least_squaresBounds)IMPLEMENTED_LOSSES)EPSmake_strictly_feasiblec                 C   s   | | d d S )N         @ xar   r   b/var/www/html/scripts/venv/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_cropped3   r   r/   c                 C   r-   r.   )r+   r"   r   r   r   jac_rosenbrock_cropped7   r   r0   c                 C   s   t | | d | d gS )Nr      r   r"   r   r   r   fun_wrong_dimensions<   s   r2   c                 C   s   t t| |dS )N)r   )r    
atleast_3dr   r   r   r   r   jac_wrong_dimensions@   s   r4   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*      r1   )intr    sqrtshapezerosreshaperavel)r   nuyr   r   r   fun_bvpD   s   `r@   c                   @   s&   e Zd Zd
ddZdd Zdd Zd	S )BroydenTridiagonald   sparsec                    sd  t jd | _t |  _t dd| _t dd| _  jdt j	| 7  _  jdt j	| 7  _  jdt j	| 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   r5         gr   皙?rC   )dtyper   operatorc                    s   t  | S N)r   _jacr"   selfr   r   <lambda>h       z-BroydenTridiagonal.__init__.<locals>.<lambda>densec                    s     |  S rH   )rI   toarrayr"   rJ   r   r   rL   k   rM   F)r    randomseedr=   onesx0linspacelbubrandnr   r
   r7   sparsityarangerI   jacr   )rK   r=   modeir   rJ   r   __init__N   s0   
zBroydenTridiagonal.__init__c                 C   sP   d| | d }|dd   |d d 8  < |d d  d|dd   8  < |S )Nr1   r   r*   r   r   )rK   r   fr   r   r   funo   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 )Nr1   r   r   r*   r5   )r
   r=   r    rY   )rK   r   Jr\   r   r   r   rI   u   s   zBroydenTridiagonal._jacN)rB   rC   )__name__
__module____qualname__r]   r_   rI   r   r   r   r   rA   M   s    
!rA   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
|t j| j 7  _
t jd| j|}| j
|  d| t j| 7  < t ||g| _d S )Nr   r   r   2   )r    rP   rQ   mr=   r:   p0rT   r   expr?   rW   randintrandr!   p_opt)	rK   r   bnoise
n_outliersx_rangen_pointsrandom_seedoutliersr   r   r   r]      s   "z"ExponentialFittingProblem.__init__c                 C   s"   |d t |d | j  | j S r   )r    rj   r   r?   rK   pr   r   r   r_      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    emptyrh   r=   r   rj   )rK   rv   r`   r   r   r   rZ      s   &zExponentialFittingProblem.jac)r   re   rf   N)ra   rb   rc   __doc__r]   r_   rZ   r   r   r   r   rd      s    
rd   c                 C   sL   t d| jf}d|  }d|d d  |d< |d |d< d|d  |d< |S )Nr1   r   gUUUUUU?r   gUUUUUUgr   )r    rw   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   r_   rK   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)r1   r6   kaboomr1   )r   r   filterUserWarningr   r   r   r   r   assert_raises	TypeError)rK   r   rZ   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rZ   r   )r   r   r   r   r   r   r   r   r   r   
ValueError)rK   rZ   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   )rK   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      ?      ?rZ   r   )x_scaler   auto)r   r         y      ?       @)	r    r!   r   r   r   r   r   r   r   )rK   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   rE   )	diff_stepr   gr   r   r   )r   r   r   r   r   r   nfev)rK   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_optionrB   )r   optionsr   )r   r   r   r   r   rJ   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   costr_   rZ   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@	   r6   $   r   )r   r   r   r   r   r    r!   r   r_   rZ   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 )Nr5   r   r   r   r   r   皙?rZ   exactlsmrr   r   	tr_solverr   )r   r+   r    r!   r   r   r   r   r(   r   r   r   )rK   rS   x_optrZ   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 )Nr5   r   r   r   r   r   r   r   r   rZ   r   r   r   r   g+=r   )r   r   r   r   r/   r   r0   r    r!   r   r   )rK   rS   rZ   r   r   r   r   r   r   test_rosenbrock_cropped1  s    


z!BaseMixin.test_rosenbrock_croppedc                 C   s   t tttd| jd d S Nr   r   )r   r   r   r2   r   rJ   r   r   r   test_fun_wrong_dimensions@     
z#BaseMixin.test_fun_wrong_dimensionsc                 C   s   t tttdt| jd d S r   )r   r   r   r   r4   r   rJ   r   r   r   test_jac_wrong_dimensionsD  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   rK   rS   r   r   r   (test_fun_and_jac_inconsistent_dimensionsH  s   

z2BaseMixin.test_fun_and_jac_inconsistent_dimensionsc                 C   s*   t ddd}tttt|| jd d S )Nr6   r   r   )r    rR   r;   r   r   r   r   r   r   r   r   r   test_x0_multidimensionalM  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_scalarR  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_arrayW  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  rB   r   )ftolr   r   r   )r    rR   r   r   r@   r   r   r   )rK   r=   rS   r   r   r   r   r   test_bvp\  s   
zBaseMixin.test_bvpc              
   C   s   t tttd| jd d d d d S )Nr   )r   r   xtolgtolr   rJ   r   r   r   /test_error_raised_when_all_tolerances_below_epsm  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   r5   r   )):0yE>NN)Nr   N)NNr   )rZ   r   r   r   r   )r   r   r(   r+   r   r   )rK   rS   r   r   r   r   r   r   r   r   0test_convergence_with_only_one_tolerance_enabledr  s   
z:BaseMixin.test_convergence_with_only_one_tolerance_enabledN)ra   rb   rc   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                   @   sL   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S )BoundsMixinc                 C      t tttdd| jd d S )Nr   )      $@r   boundsr   r   rJ   r   r   r   test_inconsistent     

zBoundsMixin.test_inconsistentc                 C   r   )Nr   )r   r6   r   r   rJ   r   r   r   test_infeasible  r   zBoundsMixin.test_infeasiblec                 C   r   )Nr   )r   r   r1   r   r   rJ   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(   rJ   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   rZ   r   r   r   r   r   r   r*   r1   )r   r   r   )	r   r   r   r   r   r   r   r   r   )rK   rZ   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 rH   r   rU   rV   r   r   r   get_bounds_direct  s   z8BoundsMixin.test_bounds_shape.<locals>.get_bounds_directc                 S   s
   t | |S rH   )r   r   r   r   r   get_bounds_instances  r&   z;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instancesr   r   r   r   )rZ   r   r   r   r   g333333?r   r   r*   h㈵>r   )r%   r   r#   r   r   r   )rK   r   r   rZ   bounds_funcrS   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   )rU   r   r         )rV   r   rE   )r   r   r   r   r   r#   r   r   r   r   test_bounds_instances  s    

z!BoundsMixin.test_bounds_instancesc                 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   g333333rD   g      ?r   g      Ir   rB   r   r   r   rZ   r   r   r   r   r   )
r    r!   infr   r+   r   r(   r   r   r   )rK   x0_1x0_2x0_3x0_4x0_5problemsrS   r   rZ   r   r   r   r   r   r   test_rosenbrock_bounds  s2   

z"BoundsMixin.test_rosenbrock_boundsN)ra   rb   rc   r   r   r   r   r   r   r   r   r   r   r   r   r     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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   )	rA   r   r   r   r_   rS   rZ   r   rX   ru   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 )NrC   r[   rN   r   #B;r   r   )rA   r   r_   rS   rZ   r   r   r   r   r   r   rK   rC   rN   
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   )rA   r   r_   rS   rZ   r   r   r   rK   rv   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   )	rA   r   r   r   r_   rS   rZ   r   r   ru   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 )NrC   r   rN   r   r   r   r   )rA   r   r_   rS   rZ   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   )rA   r   r_   rS   r   rX   r   r   r   r   r   )rK   rv   rZ   r   r   r   r   r   test_numerical_jac  s   zSparseMixin.test_numerical_jacc              	   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   )rA   r   rZ   rX   r   r_   rS   rU   r    r   r   rV   r   r   )rK   rv   rZ   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   )rA   rX   r   r   r   r_   rS   r   )rK   rv   rX   r   r   r   test_wrong_jac_sparsity6  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 )	NrG   r   r   r   r   r   r   )r   r   
rA   r   r_   rS   rZ   r   r   r   r   r   r  r   r   r   test_linear_operator<  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 )NrZ   )r   r   r   r   r   rG   r   r  r  r   r   r   test_x_scale_jac_scaleC  s   

z"SparseMixin.test_x_scale_jac_scaleN)ra   rb   rc   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   gV瞯<r   hinge)LOSSESr   r   r   r   r   r   r   rK   r  r   r   r   r   test_optionsO  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   r_   r   r  r   r   r   test_funX  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arctanr6   gUUUUUU?)
r    r!   r   r   r   r   r   r   r   r}   )rK   r   r   r   r   r   	test_grad`  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   r1   r6   )r  r      g)	r   r   r   r   r   rZ   r   r   r}   )rK   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)rE   r   r   rE   r   )rs   r   r   r   r   r   r   r  )rZ   r  r"  r   )rd   rZ   r   r_   ri   r   r   r   r  r   r   r   rm   )rK   ro   rv   rZ   res_lsqr  
res_robustr   r   r   test_robustness  s*   z!LossFunctionMixin.test_robustnessN)ra   rb   rc   r  r  r!  r%  r(  r   r   r   r   r  N  s    	Dr  c                   @   s   e Zd ZdZdS )
TestDogboxdogboxN)ra   rb   rc   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)TFr,  
regularizer   r   r   r   )rA   r   r_   rS   rZ   r   r   )rK   rv   r-  r   r   r   r   test_lsmr_regularization  s   z TestTRF.test_lsmr_regularizationN)ra   rb   rc   r   r.  r   r   r   r   r+    s    r+  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   rJ   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 )Nr5   r   r   r   )r   r   r   r/   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   rA   r   r   r   r_   rS   rZ   ru   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  r0  rJ   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 )NrG   r   r   r   r3  ru   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)
ra   rb   rc   r   r1  r2  r4  r5  r6  r7  r   r   r   r   r/    s    r/  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%<=r8  )r8  Nr8  )r8  r8  Nr   r   )r   r   r   r   r0  )r   r   r   r   r   r   test_small_tolerances_for_lm  s
   r9  c                     s   t jd t dddd} t jdd}dd   fdd}t|d	d	g| |fd
}|jdks5J t|jt 	ddgdd d S )Nr   r   rB   float32c                 S   s   | d | d |  S r   r   )rv   r   r   r   r   func  s   ztest_fp32_gh12991.<locals>.funcc                    s    | || S rH   r   )rv   r   r?   r;  r   r   err   s   ztest_fp32_gh12991.<locals>.errr   )r   r   g W ?g	?g-C6
?r   )
r    rP   rQ   rT   astyper   r   r   r   r!   )r   r?   r=  r   r   r<  r   test_fp32_gh12991  s   r?  c                     s@   d d}  fdd}t || dtjfd}t|j |   d d S )Ng-q=gyYs=c                    s   |   d S r   r   r"   answerr   r   chi22  r   ztest_gh_18793.<locals>.chi2r   )rS   r   r   )r   r    r   r   r   )initial_guessrB  r   r   r@  r   test_gh_18793.  s
   rD  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   rF        "@      @r   rI  rG  r         *@rH  rG        &@r   rJ  g      ,@      3@rK  g      .@g      2@g      :@rL        @@g      =@g      <@      B@rM  g     A@rN  g     E@      J@rM  g      M@g      L@rO  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   rE   c                    s$   | \}}}|t | |    S rH   )r    rj   )paramsABrS   xdataydatar   r   exponential_wrappedM  s   
z*test_gh_19103.<locals>.exponential_wrapped)r   r   r   )r   r   r   r'   gfffff4@r,  )r   r   )r    r!   rY   ry   r   r   r   )rV  rS   r   r   r   rS  r   test_gh_19103;  s   
rW  )r   )r   )9	itertoolsr   numpyr    numpy.linalgr   numpy.testingr   r   r   r   pytestr   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   r2   r4   r@   rA   rd   r}   listkeysr  r~   r   r   r  r)  r+  r/  r   r9  r?  rD  rW  r   r   r   r   <module>   sP    


	3 Tie 	"