o
    g|                     @   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 d>ddZd?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 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S )@    )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   g      @ xar   r   e/home/ubuntu/cloudmapper/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   r/   c                 C   s   t | | d | d gS )Nr      r   r!   r   r   r   fun_wrong_dimensions<   s   r1   c                 C   s   t t| |dS )N)r   )r   
atleast_3dr   r   r   r   r   jac_wrong_dimensions@   s   r3   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)      r0   )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   r4         gr   皙?rB   )dtyper   operatorc                    s   t  | S N)r   _jacr!   selfr   r   <lambda>h       z-BroydenTridiagonal.__init__.<locals>.<lambda>densec                    s     |  S rG   )rH   toarrayr!   rI   r   r   rK   k   rL   F)r   randomseedr<   onesx0linspacelbubrandnr   r
   r6   sparsityarangerH   jacr   )rJ   r<   modeir   rI   r   __init__N   s0   
zBroydenTridiagonal.__init__c                 C   sP   d| | d }|dd   |d d 8  < |d d  d|dd   8  < |S )Nr0   r   r)   r   r   )rJ   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 )Nr0   r   r   r)   r4   )r
   r<   r   rX   )rJ   r   Jr[   r   r   r   rH   u   s   zBroydenTridiagonal._jacN)rA   rB   )__name__
__module____qualname__r\   r^   rH   r   r   r   r   r@   M   s    
!r@   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   rO   rP   mr<   r9   p0rS   r   expr>   rV   randintrandr    p_opt)	rJ   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   ri   r   r>   rJ   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   emptyrg   r<   r   ri   )rJ   ru   r_   r   r   r   rY      s   &zExponentialFittingProblem.jac)r   rd   re   N)r`   ra   rb   __doc__r\   r^   rY   r   r   r   r   rc      s    
rc   c                 C   sL   t d| jf}d|  }d|d d  |d< |d |d< d|d  |d< |S )Nr0   r   gUUUUUU?r   gUUUUUUgr   )r   rv   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^   rJ   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)r0   r5   kaboomr0   )r   r   filterUserWarningr   r   r   r   r   assert_raises	TypeError)rJ   r   rY   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rY   r   )r   r   r   r   r   r   r   r   r   r   
ValueError)rJ   rY   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   )rJ   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      ?      ?rY   r~   )x_scaler   auto)r   r         y      ?       @)	r   r    r   r   r   r   r   r   r   )rJ   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~   rD   )	diff_stepr   gr   r   r   )r   r   r   r   r   r   nfev)rJ   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_optionrA   )r   optionsr   )r   r   r   r   r   rI   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^   rY   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@	   r5   $   r   )r   r   r   r   r   r   r    r   r^   rY   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 )Nr4   r   r   r   r   r   皙?rY   exactlsmrr   r   	tr_solverr   )r   r*   r   r    r   r   r   r   r'   r   r   r   )rJ   rR   x_optrY   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 )Nr4   r   r   r   r   r   r   r   r   rY   r   r   r   r   g+=r   )r   r   r   r   r.   r   r/   r   r    r   r   )rJ   rR   rY   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   r1   r   rI   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   r3   r   rI   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   rJ   rR   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 )Nr5   r   r   )r   rQ   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  rA   r   )ftolr   r   r   )r   rQ   r   r   r?   r   r   r   )rJ   r<   rR   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   rI   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   r4   r   )):0yE>NN)Nr   N)NNr   )rY   r   r   r   r   )r   r   r'   r*   r   r   )rJ   rR   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)r`   ra   rb   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~   )g      $@r   boundsr   r   rI   r   r   r   test_inconsistent     

zBoundsMixin.test_inconsistentc                 C   r   )Nr~   )r   r5   r   r   rI   r   r   r   test_infeasible  r   zBoundsMixin.test_infeasiblec                 C   r   )Nr~   )r   r   r0   r   r   rI   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   g      @)r   r   r   r   r   r'   rI   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   rY   r   r   r   r   r   r   r)   r0   )r   r   r   )	r   r   r   r   r   r   r   r   r   )rJ   rY   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 rG   r   rT   rU   r   r   r   get_bounds_direct  s   z8BoundsMixin.test_bounds_shape.<locals>.get_bounds_directc                 S   s
   t | |S rG   )r   r   r   r   r   get_bounds_instances  r%   z;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instancesr   r   r   r   )rY   r   r   r~   r   g333333?r   r   r)   h㈵>r   )r$   r   r"   r   r   r   )rJ   r   r   rY   bounds_funcrR   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   )rT   r   r         )rU   r   rD   )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   g333333rC   g      ?r   g      Ir   rA   r   r   r   rY   r   r   r   r   r   )
r   r    infr   r*   r   r'   r   r   r   )rJ   x0_1x0_2x0_3x0_4x0_5problemsrR   r   rY   r   r   r   r   r   r   test_rosenbrock_bounds  s2   

z"BoundsMixin.test_rosenbrock_boundsN)r`   ra   rb   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   )	r@   r   r   r   r^   rR   rY   r   rW   rt   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 )NrB   rZ   rM   r   #B;r   r   )r@   r   r^   rR   rY   r   r   r   r   r   r   rJ   rB   rM   
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   )r@   r   r^   rR   rY   r   r   r   rJ   ru   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   )	r@   r   r   r   r^   rR   rY   r   r   rt   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 )NrB   r   rM   r   r   r   r   )r@   r   r^   rR   rY   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   )r@   r   r^   rR   r   rW   r   r   r   r   r   )rJ   ru   rY   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   )r@   r   rY   rW   r   r^   rR   rT   r   r   r   rU   r   r   )rJ   ru   rY   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   )r@   rW   r   r   r   r^   rR   r   )rJ   ru   rW   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 )	NrF   r   r   r   r   r   r   )r   r   
r@   r   r^   rR   rY   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 )NrY   )r   r   r   r   r   rF   r   r  r   r   r   r   test_x_scale_jac_scaleC  s   

z"SparseMixin.test_x_scale_jac_scaleN)r`   ra   rb   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   rJ   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arctanr5   gUUUUUU?)
r   r    r   r   r   r   r   r   r   r|   )rJ   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   r0   r5   )r  r      g)	r   r   r   r   r   rY   r   r   r|   )rJ   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)rD   r   r   rD   r   )rr   r   r   r   r   r   r   r  )rY   r  r  r   )rc   rY   r   r^   rh   r   r   r   r  r   r   r   rl   )rJ   rn   ru   rY   res_lsqr  
res_robustr   r   r   test_robustness  s*   z!LossFunctionMixin.test_robustnessN)r`   ra   rb   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)r`   ra   rb   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   )r@   r   r^   rR   rY   r   r   )rJ   ru   r*  r   r   r   r   test_lsmr_regularization  s   z TestTRF.test_lsmr_regularizationN)r`   ra   rb   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   rI   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 )Nr4   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   r@   r   r   r   r^   rR   rY   rt   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  r-  rI   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 )NrF   r   r   r   r0  rt   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)
r`   ra   rb   r   r.  r/  r1  r2  r3  r4  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%<=r5  )r5  Nr5  )r5  r5  Nr~   r   )r   r   r   r   r-  )r   r   r   r   r   r   test_small_tolerances_for_lm  s
   r6  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   rA   float32c                 S   s   | d | d |  S r   r   )ru   r   r   r   r   func  s   ztest_fp32_gh12991.<locals>.funcc                    s    | || S rG   r   )ru   r   r>   r8  r   r   err   s   ztest_fp32_gh12991.<locals>.errr   )r   r   g W ?g	?g-C6
?r   )
r   rO   rP   rS   astyper   r   r   r   r    )r   r>   r:  r   r   r9  r   test_fp32_gh12991  s   r<  )r   )r   )7	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.   r/   r1   r3   r?   r@   rc   r|   listkeysr  r}   r   r   r  r&  r(  r,  r   r6  r<  r   r   r   r   <module>   sL    


	3 Tie 	"