a
    .'aXw                     @   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 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Z/G d2d3 d3e,e-e.e/Z0G d4d5 d5e,e-e.e/Z1G d6d7 d7e,Z2d8d9 Z3d:d; Z4d<d= Z5dS )A    )productN)norm)assert_assert_allcloseassert_equalsuppress_warnings)raises)issparse
lil_matrix)aslinearoperator)least_squares)IMPLEMENTED_LOSSES)EPSmake_strictly_feasiblec                 C   s   | | d d S )N   g      @ xar   r   Flib/python3.9/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   s    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   Zidentityr   r   r   r   jac_2d_trivial   s    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   s   t | d S Nr   )r#   r   r   r   r   fun_rosenbrock_cropped3   s    r)   c                 C   s   t | d S r(   )r&   r   r   r   r   jac_rosenbrock_cropped7   s    r*   c                 C   s   t | | d | d gS )Nr      r   r   r   r   r   fun_wrong_dimensions<   s    r,   c                 C   s   t t| |dS )N)r   )r   Z
atleast_3dr   r   r   r   r   jac_wrong_dimensions@   s    r-   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%      r+   )intr   ZsqrtshapezerosreshapeZravel)r   nuyr   r   r   fun_bvpD   s    `r7   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rt||ftd _t |}d	 j||f< t d	|}d	 j||d	 f< t |d	 }d	 j||d	 f<  j _nB|d
kr8 fdd _n(|dkrXd  _ fdd _ntd d S )Nr   r.         gr   皙?r:   )Zdtyper   operatorc                    s   t  | S N)r   _jacr   selfr   r   <lambda>h       z-BroydenTridiagonal.__init__.<locals>.<lambda>densec                    s     |  S r>   )r?   Ztoarrayr   r@   r   r   rB   k   rC   F)r   randomseedr4   onesx0linspacelbubrandnr   r
   r0   sparsityaranger?   jacr   )rA   r4   modeir   r@   r   __init__N   s0    




zBroydenTridiagonal.__init__c                 C   sP   d| | d }|dd   |d d 8  < |d d  d|dd   8  < |S )Nr+   r   r%   r   r   )rA   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 )Nr+   r   r   r%   r.   )r
   r4   r   rN   )rA   r   JrQ   r   r   r   r?   u   s    zBroydenTridiagonal._jacN)r9   r:   )__name__
__module____qualname__rR   rT   r?   r   r   r   r   r8   M   s   
!r8   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   rE   rF   mr4   r2   p0rI   r   expr6   rL   ZrandintZrandr   p_opt)	rA   r   bnoiseZ
n_outliersZx_rangeZn_pointsrandom_seedZoutliersr   r   r   rR      s    "z"ExponentialFittingProblem.__init__c                 C   s"   |d t |d | j  | j S r   )r   r_   r   r6   rA   pr   r   r   rT      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   emptyr]   r4   r   r_   )rA   re   rU   r   r   r   rO      s    &zExponentialFittingProblem.jac)r   rZ   r[   N)rV   rW   rX   __doc__rR   rT   rO   r   r   r   r   rY      s     
rY   c                 C   sL   t d| jf}d|  }d|d d  |d< |d |d< d|d  |d< |S )Nr+   r   gUUUUUU?r   gUUUUUUgr   )r   rf   size)zZrhotr   r   r   cubic_soft_l1   s    rk   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?Zatol)r   r   ro   r   r   rT   rA   resr   r   r   
test_basic   s    zBaseMixin.test_basicc              	   C   s   d}dddt fD ]}t J}|td ttd||f| jd}ttd|d|i| jd	}W d    n1 sj0    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'rm   )argsro   r   )kwargsro   rp   )Zrtol)r+   r/   Zkaboomr+   )r   r   filterUserWarningr   r   ro   r   r   assert_raises	TypeError)rA   r   rO   suprs   res1r   r   r   test_args_kwargs   s(    $


zBaseMixin.test_args_kwargsc              	   C   s   dddt fD ]X}t .}|td ttd|| jd}W d    n1 sJ0    Y  t|jddd	 qt	t
ttdd
| jd d S )Nrv   rw   rx   ry   rm   rn   r   rp   rq   ZoopsrO   ro   )r   r   r|   r}   r   r   ro   r   r   r~   
ValueError)rA   rO   r   rs   r   r   r   test_jac_options   s    0zBaseMixin.test_jac_optionsc                 C   s0   dD ]&}t td|| jd}t|jddd qd S )N)N   rm   )max_nfevro   r   rp   rq   )r   r   ro   r   r   )rA   r   rs   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      ?      ?rO   rm   )x_scaler   auto)r   ro         y      ?       @)	r   r   r   r   r   r   r~   r   ro   )rA   r   rs   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 t|j|jk d S )Nrm   r<   )Z	diff_stepro   gr   rp   rq   )r   r   ro   r   r   r   nfevr   )rA   r   Zres2Z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 )Nrm   Zno_such_optionr9   )ro   Zoptionsr   )r~   r   r   r   ro   r@   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rt|jd
k  t|jd u  nt|jdk  t|jdk  t|jdk t|j d S )Nrm   rn   r   rp   rq   g      )@   {Gz?lm   r"   )r   r   ro   r   r   costrT   rO   grad
optimalityr   active_maskr   r   njevstatussuccessrr   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   rm   r   )ro   r   r   g     @D@	   r/   $   r   )ro   r   r   r   r   r   r   r   rT   rO   r   r   r   r   r   r   r   rr   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 2}|td tt||||| j	d}W d    n1 s0    Y  t
|j| q8d S )Nr.   r   rv   rw   rx   r   皙?rO   exactlsmrry   r   	tr_solverro   )r   r&   r   r   r   r|   r}   r   r#   ro   r   r   )rA   rH   x_optrO   r   r   r   rs   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 nZtdddtgdtdd	gd
gddgD ]0\}}}tt||||| j d}t	|j
ddd qNd S )Nr.   r   r   rn   rv   rw   rx   r   r   rO   r   r   r   r   g+=rq   )ro   r~   r   r   r)   r   r*   r   r   r   r   )rA   rH   rO   r   r   rs   r   r   r   test_rosenbrock_cropped2  s    

z!BaseMixin.test_rosenbrock_croppedc                 C   s   t tttd| jd d S Nrm   rn   )r~   r   r   r,   ro   r@   r   r   r   test_fun_wrong_dimensionsA  s    z#BaseMixin.test_fun_wrong_dimensionsc                 C   s   t tttdt| jd d S r   )r~   r   r   r   r-   ro   r@   r   r   r   test_jac_wrong_dimensionsE  s    z#BaseMixin.test_jac_wrong_dimensionsc                 C   s"   ddg}t ttt|t| jd d S )Nr   r   rn   )r~   r   r   r#   r'   ro   rA   rH   r   r   r   (test_fun_and_jac_inconsistent_dimensionsI  s    
z2BaseMixin.test_fun_and_jac_inconsistent_dimensionsc                 C   s*   t ddd}tttt|| jd d S )Nr/   r   rn   )r   rG   r3   r~   r   r   r   ro   r   r   r   r   test_x0_multidimensionalN  s    
z"BaseMixin.test_x0_multidimensionalc                 C   s   d}t ttt|| jd d S )N       @        rn   r~   r   r   r   ro   r   r   r   r   test_x0_complex_scalarS  s    
z BaseMixin.test_x0_complex_scalarc                 C   s    ddg}t ttt|| jd d S )Nr   r   rn   r   r   r   r   r   test_x0_complex_arrayX  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  r9   r   )ftolro   r   r   )r   rG   ro   r   r7   r   r   r   )rA   r4   rH   r   rs   r   r   r   test_bvp]  s    
zBaseMixin.test_bvpc              
   C   s   t tttd| jd d d d d S )Nrm   )ro   r   xtolgtolr   r@   r   r   r   /test_error_raised_when_all_tolerances_below_epsn  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   r.   r   )):0yE>NN)Nr   N)NNr   )rO   r   r   r   ro   )ro   r   r#   r&   r   r   )rA   rH   r   r   r   r   rs   r   r   r   0test_convergence_with_only_one_tolerance_enableds  s    
z:BaseMixin.test_convergence_with_only_one_tolerance_enabledN)rV   rW   rX   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rl      s(   rl   c                   @   sD   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S )BoundsMixinc                 C   s   t tttdd| jd d S )Nrm   )g      $@r   boundsro   r   r@   r   r   r   test_inconsistent  s    
zBoundsMixin.test_inconsistentc                 C   s   t tttdd| jd d S )Nrm   )ru   r/   r   r   r@   r   r   r   test_infeasible  s    
zBoundsMixin.test_infeasiblec                 C   s   t tttdd| jd d S )Nrm   )r   r   r+   r   r   r@   r   r   r   test_wrong_number  s    
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 )Nrm   r   ru   r   r   g      @)r~   r   r   r   ro   r#   r@   r   r   r   test_inconsistent_shape  s    
z#BoundsMixin.test_inconsistent_shapec                 C   s   dddt fD ]}ttd|d| jd}t|jddd	 t|jd
g td|j  koXdkn   ttd|d| jd}t|jddd	 t|jdg td|j  kodkn   qd S )Nrv   rw   rx   rm   )r   ru   rO   r   ro   r   rp   rq   r   r%   r+   )r   ru   r   )	r   r   r   ro   r   r   r   r   r   )rA   rO   rs   r   r   r   test_in_bounds  s    zBoundsMixin.test_in_boundsc                 C   s   dddt fD ]}ddg}tt||d}t|jddg tt||dddgf| jd	}t|jddg tt||d
dgdf| jd	}t|jd
dg tt||ddgddgf| jd	}t|jddgdd qd S )Nrv   rw   rx   r   )rO   r   r   rm   r   g333333?r   ru   r%   h㈵>rq   )r!   r   r    r   r   ro   )rA   rO   rH   rs   r   r   r   test_bounds_shape  s"    zBoundsMixin.test_bounds_shapec                 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 ]2\}	}
}tt||	||
|| jd}t|j	ddd qqd S )Ng       r   rm   r   g333333r;   g      ?ru   g      Ir   r9   rv   rw   rx   rO   r   r   r   r   rq   )
r   r   infr   r&   r   r#   ro   r   r   )rA   Zx0_1Zx0_2Zx0_3Zx0_4Zx0_5ZproblemsrH   r   rO   r   r   rs   r   r   r   test_rosenbrock_bounds  s.    

z"BoundsMixin.test_rosenbrock_boundsN)
rV   rW   rX   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   ro   )r   jac_sparsityro   )	r8   r~   r   r   rT   rH   rO   ro   rM   rd   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 )Nr:   rP   rD   r   #B;rq   r   )r8   r   rT   rH   rO   ro   r   r   r   r   r   rA   r:   rD   
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 )NZbtol绽|=ro   
tr_optionsr   r   rq   )r8   r   rT   rH   rO   ro   r   r   rA   re   rs   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 )NZbestr   r   Ztolr   )r   r   )	r8   r~   r   r   rT   rH   rO   ro   r   rd   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 )Nr:   r   rD   r   r   r   rq   )r8   r   rT   rH   rO   ro   r   r   r   r	   
isinstancer   Zndarrayr   r   r   r   test_solver_selection  s    

z!SparseMixin.test_solver_selectionc                 C   s   t  }dD ]t}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)rv   rw   rx   rn   )ro   r   r   rq   r   )r8   r   rT   rH   ro   rM   r   r   r   r   r   )rA   re   rO   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 ]\}}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 )Nrv   rw   rx   )r   ro   r   r   r   rq   )r8   r   rO   rM   r   rT   rH   rJ   r   r   ro   rK   r   r   )rA   re   rO   r   Zres_1Zres_2Z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   ro   )r8   rM   r~   r   r   rT   rH   ro   )rA   re   rM   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 )	Nr=   r   rn   r   r   rq   r   )ro   r   
r8   r   rT   rH   rO   ro   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 )NrO   )ro   r   r   r   rq   r=   r   r   r   r   r   r   test_x_scale_jac_scale%  s    
z"SparseMixin.test_x_scale_jac_scaleN)rV   rW   rX   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 )Nrm   lossro   r   gV瞯<rq   Zhinge)LOSSESr   r   ro   r   r   r~   r   rA   r   rs   r   r   r   test_options1  s    
zLossFunctionMixin.test_optionsc                 C   s2   t D ](}ttd|| jd}t|jt|j qd S )Nrm   r   )r   r   r   ro   r   rT   r   r   r   r   r   test_fun:  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 )Nrm   linearr   r   r   ro   r   r   hubersoft_l1r   cauchyarctanr/   gUUUUUU?)
r   r   r   r   r   ro   r   r   r   rk   )rA   r   rs   r   r   r   	test_gradB  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 )Nrm   r   r   r   r   r   r   r   r"   )r   f_scaler   r   g      r   )r   r   r   ro   r   g      4@r   r+   r/   )r   r      g)	r   r   r   ro   r   rO   r   r   rk   )rA   r   rS   rs   Zfsr   r   r   test_jaca  s^    	



 

,

0
*zLossFunctionMixin.test_jacc                 C   s   dD ]}t dd|dd}ddd|jfD ]}t|j|j|| jd	}t|jdd
d tD ]\}|dkrbqTt|j|j|||| jd}t|jdd
d t	t
|j|j t
|j|j k  qTq&qd S )N)r<   r   r   r<   r   )rc   rv   rw   rx   r   r   rq   r   )rO   r   r   ro   )rY   rO   r   rT   r^   ro   r   r   r   r   r   r   r`   )rA   rb   re   rO   Zres_lsqr   Z
res_robustr   r   r   test_robustness  s$    z!LossFunctionMixin.test_robustnessN)rV   rW   rX   r   r   r   r   r   r   r   r   r   r   0  s
   	Dr   c                   @   s   e Zd ZdZdS )
TestDogboxZdogboxN)rV   rW   rX   ro   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 ]0}t|j|j|jdd|id}t|jddd q
d S )N)TFr   
regularizer   r   r   rq   )r8   r   rT   rH   rO   r   r   )rA   re   r   rs   r   r   r   test_lsmr_regularization  s    z TestTRF.test_lsmr_regularizationN)rV   rW   rX   ro   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 )Nrm   )g      ru   r   r   r~   r   r   r   r@   r   r   r   test_bounds_not_supported  s    z TestLM.test_bounds_not_supportedc                 C   s   ddg}t ttt|dd d S )Nr.   r   r   rn   )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   rn   r8   r~   r   r   rT   rH   rO   rd   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 )Nrm   r   r   r   r   r@   r   r   r   test_jac_sparsity_not_supported  s    
z&TestLM.test_jac_sparsity_not_supportedc                 C   s(   t dd}ttt|j|j|jdd d S )Nr=   r   r   rn   r   rd   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 )
Nrm   r   r   r   r   rp   rq   r   )ro   r   )r   r   r   r   r~   r   rr   r   r   r   	test_loss  s
    
zTestLM.test_lossN)
rV   rW   rX   ro   r   r   r   r   r   r   r   r   r   r   r     s   r   c                  C   s   t td} t| jddd d S )Nrm   r   r   rq   )r   r   r   r   )rs   r   r   r   rt     s    
rt   c                  C   s,   dD ]"\} }}t tttd|| |dd qd S )N))NvIh%<=r   )r   Nr   )r   r   Nrm   r   )r   r   r   ro   r   )r   r   r   r   r   r   test_small_tolerances_for_lm  s    r  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sjJ t|jt 	ddgdd d S )Nr   r   r9   Zfloat32c                 S   s   | d | d |  S r   r   )re   r   r   r   r   func  s    ztest_fp32_gh12991.<locals>.funcc                    s    | || S r>   r   )re   r   r6   r  r   r   err  s    ztest_fp32_gh12991.<locals>.errr   )rz   r+   g W ?g	?g-C6
?rq   )
r   rE   rF   rI   Zastyper   r   r   r   r   )r   r6   r  rs   r   r  r   test_fp32_gh12991  s    r  )r   )r   )r   )6	itertoolsr   Znumpyr   Znumpy.linalgr   Znumpy.testingr   r   r   r   Zpytestr   r~   Zscipy.sparser	   r
   Zscipy.sparse.linalgr   Zscipy.optimizer   Z!scipy.optimize._lsq.least_squaresr   Zscipy.optimize._lsq.commonr   r   r   r   r    r!   r#   r&   r'   r)   r*   r,   r-   r7   r8   rY   rk   listkeysr   rl   r   r   r   r   r   r   rt   r  r  r   r   r   r   <module>   sJ   


	3 UJe 	"