U
    /d|                     @   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 )A    )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   K/tmp/pip-unpacked-wheel-9gxwnfpp/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   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   sqrtshapezerosreshapeZ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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   r0         gr   皙?r=   )Zdtyper   operatorc                    s   t  | S N)r   _jacr    selfr   r   <lambda>h       z-BroydenTridiagonal.__init__.<locals>.<lambda>densec                    s     |  S rA   )rB   Ztoarrayr    rC   r   r   rE   k   rF   F)r   randomseedr7   onesx0linspacelbubrandnr   r
   r2   sparsityarangerB   jacr   )rD   r7   modeir   rC   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   )rD   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'   r0   )r
   r7   r   rQ   )rD   r   JrT   r   r   r   rB   u   s    zBroydenTridiagonal._jacN)r<   r=   )__name__
__module____qualname__rU   rW   rB   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   rH   rI   mr7   r5   p0rL   r   expr9   rO   randintZrandr   p_opt)	rD   r   bnoiseZ
n_outliersZx_rangeZn_pointsrandom_seedZoutliersr   r   r   rU      s    "z"ExponentialFittingProblem.__init__c                 C   s"   |d t |d | j  | j S r   )r   rb   r   r9   rD   pr   r   r   rW      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`   r7   r   rb   )rD   ri   rX   r   r   r   rR      s    &zExponentialFittingProblem.jac)r   r]   r^   N)rY   rZ   r[   __doc__rU   rW   rR   r   r   r   r   r\      s       
r\   c                 C   sL   t d| jf}d|  }d|d d  |d< |d |d< d|d  |d< |S )Nr-   r   gUUUUUU?r   gUUUUUUgr   )r   rj   size)zrhotr   r   r   cubic_soft_l1   s    rp   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   rt   r   r   rW   rD   resr   r   r   
test_basic   s    zBaseMixin.test_basicc              
   C   s   d}dddt fD ]}t @}|td ttd||f| jd}ttd|d|i| jd	}W 5 Q R X 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'rr   )argsrt   r   )kwargsrt   ru   )Zrtol)r-   r1   Zkaboomr-   )r   r   filterUserWarningr   r   rt   r   r   assert_raises	TypeError)rD   r   rR   suprx   res1r   r   r   test_args_kwargs   s,    
 
 zBaseMixin.test_args_kwargsc              
   C   sl   dddt fD ]D}t $}|td ttd|| jd}W 5 Q R X t|jddd	 qt	t
ttdd
| jd d S )Nr{   r|   r}   r~   rr   rs   r   ru   rv   ZoopsrR   rt   )r   r   r   r   r   r   rt   r   r   r   
ValueError)rD   rR   r   rx   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   rr   )max_nfevrt   r   ru   rv   )r   r   rt   r   r   )rD   r   rx   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      ?      ?rR   rr   )x_scaler   auto)r   rt         y      ?       @)	r   r   r   r   r   r   r   r   rt   )rD   r   rx   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 )Nrr   r?   )Z	diff_steprt   gr   ru   rv   )r   r   rt   r   r   r   nfev)rD   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 )Nrr   Zno_such_optionr<   )rt   optionsr   )r   r   r   r   rt   rC   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 k nt|jdk  t|jdk  t|jdk t|j d S )Nrr   rs   r   ru   rv   g      )@   {Gz?lm   r$   )r   r   rt   r   r   costrW   rR   grad
optimalityr   active_maskr   r   njevstatussuccessrw   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   rr   r   )rt   r   r   g     @D@	   r1   $   r   )rt   r   r   r   r   r   r   r   rW   rR   r   r   r   r   r   r   r   rw   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 ]J\}}}t (}|td tt||||| j	d}W 5 Q R X t
|j| q8d S )Nr0   r   r{   r|   r}   r   皙?rR   exactlsmrr~   r   	tr_solverrt   )r   r(   r   r   r   r   r   r   r%   rt   r   r   )rD   rK   x_optrR   r   r   r   rx   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 )Nr0   r   r   rs   r{   r|   r}   r   r   rR   r   r   r   r   g+=rv   )rt   r   r   r   r+   r   r,   r   r   r   r   )rD   rK   rR   r   r   rx   r   r   r   test_rosenbrock_cropped1  s(    
 
    z!BaseMixin.test_rosenbrock_croppedc                 C   s   t tttd| jd d S Nrr   rs   )r   r   r   r.   rt   rC   r   r   r   test_fun_wrong_dimensions@  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/   rt   rC   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   rs   )r   r   r   r%   r)   rt   rD   rK   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 )Nr1   r   rs   )r   rJ   r6   r   r   r   r   rt   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       @        rs   r   r   r   r   rt   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   rs   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  r<   r   )ftolrt   r   r   )r   rJ   rt   r   r:   r   r   r   )rD   r7   rK   r   rx   r   r   r   test_bvp\  s    
zBaseMixin.test_bvpc              
   C   s   t tttd| jd d d d d S )Nrr   )rt   r   xtolgtolr   rC   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   r0   r   )):0yE>NN)Nr   N)NNr   )rR   r   r   r   rt   )rt   r   r%   r(   r   r   )rD   rK   r   r   r   r   rx   r   r   r   0test_convergence_with_only_one_tolerance_enabledr  s    
  z:BaseMixin.test_convergence_with_only_one_tolerance_enabledN)rY   rZ   r[   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rq      s(   rq   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   s   t tttdd| jd d S )Nrr   )g      $@r   boundsrt   r   rC   r   r   r   test_inconsistent  s    
 zBoundsMixin.test_inconsistentc                 C   s   t tttdd| jd d S )Nrr   )rz   r1   r   r   rC   r   r   r   test_infeasible  s    
 zBoundsMixin.test_infeasiblec                 C   s   t tttdd| jd d S )Nrr   )r   r   r-   r   r   rC   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 )Nrr   r   rz   r   r   g      @)r   r   r   r   rt   r%   rC   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 )Nr{   r|   r}   rr   )r   rz   rR   r   rt   r   ru   rv   r   r'   r-   )r   rz   r   )	r   r   r   rt   r   r   r   r   r   )rD   rR   rx   r   r   r   test_in_bounds  s      zBoundsMixin.test_in_boundsc              
   C   s   dd }dd }dddt fD ]}||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 rA   r   rM   rN   r   r   r   get_bounds_direct  s    z8BoundsMixin.test_bounds_shape.<locals>.get_bounds_directc                 S   s
   t | |S rA   )r   r   r   r   r   get_bounds_instances  s    z;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instancesr{   r|   r}   r   )rR   r   r   rr   r   g333333?r   rz   r'   h㈵>rv   )r#   r   r!   r   r   rt   )rD   r   r   rR   Zbounds_funcrK   rx   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   ru   rv   rz   r   )rM   r   r         )rN   r   r?   )r   r   r   r   r   r!   rw   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 ]2\}	}
}tt||	||
|| jd}t|j	ddd qqd S )Ng       r   rr   r   g333333r>   g      ?rz   g      Ir   r<   r{   r|   r}   rR   r   r   r   r   rv   )
r   r   infr   r(   r   r%   rt   r   r   )rD   Zx0_1Zx0_2Zx0_3Zx0_4Zx0_5problemsrK   r   rR   r   r   rx   r   r   r   test_rosenbrock_bounds  s0    

 z"BoundsMixin.test_rosenbrock_boundsN)rY   rZ   r[   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   rt   )r   jac_sparsityrt   )	r;   r   r   r   rW   rK   rR   rt   rP   rh   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=   rS   rG   r   #B;rv   r   )r;   r   rW   rK   rR   rt   r   r   r   r   r   rD   r=   rG   
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绽|=rt   
tr_optionsr   r   rv   )r;   r   rW   rK   rR   rt   r   r   rD   ri   rx   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   Ztolr   )r   r   )	r;   r   r   r   rW   rK   rR   rt   r   rh   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   rG   r   r   r   rv   )r;   r   rW   rK   rR   rt   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)r{   r|   r}   rs   )rt   r   r   rv   r   )r;   r   rW   rK   rt   rP   r   r   r   r   r   )rD   ri   rR   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 )Nr{   r|   r}   )r   rt   r   r   r   rv   )r;   r   rR   rP   r   rW   rK   rM   r   r   rt   rN   r   r   )rD   ri   rR   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   rt   )r;   rP   r   r   r   rW   rK   rt   )rD   ri   rP   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 )	Nr@   r   rs   r   r   rv   r   )rt   r   
r;   r   rW   rK   rR   rt   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 )NrR   )rt   r   r   r   rv   r@   r   r   r   r   r   r   test_x_scale_jac_scaleC  s    
 z"SparseMixin.test_x_scale_jac_scaleN)rY   rZ   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 )Nrr   lossrt   r   gV瞯<rv   Zhinge)LOSSESr   r   rt   r   r   r   r   rD   r   rx   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 )Nrr   r   )r   r   r   rt   r   rW   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 )Nrr   linearr   r   r   rt   r   r   hubersoft_l1r   cauchyarctanr1   gUUUUUU?)
r   r   r   r   r   rt   r   r   r   rp   )rD   r   rx   r   r   r   	test_grad`  sF    
 
 
 *
 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 )Nrr   r   r   r   r   r   r   r   r$   )r   f_scaler   r   g      r   )r   r   r   rt   r   g      4@r   r-   r1   )r   r      g)	r   r   r   rt   r   rR   r   r   rp   )rD   r   rV   rx   fsr   r   r   test_jac  sv    	
 
 
 
  
 
  ,
 
  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   )rg   r{   r|   r}   r   r   rv   r   )rR   r   r   rt   )r\   rR   r   rW   ra   rt   r   r   r   r   r   r   rd   )rD   rf   ri   rR   Zres_lsqr   Z
res_robustr   r   r   test_robustness  s,        z!LossFunctionMixin.test_robustnessN)rY   rZ   r[   r   r   r   r   r   r   r   r   r   r   N  s
   	Dr   c                   @   s   e Zd ZdZdS )
TestDogboxZdogboxN)rY   rZ   r[   rt   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   rv   )r;   r   rW   rK   rR   r   r   )rD   ri   r  rx   r   r   r   test_lsmr_regularization  s    z TestTRF.test_lsmr_regularizationN)rY   rZ   r[   rt   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 )Nrr   )r   rz   r   r   r   r   r   r   rC   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 )Nr0   r   r   rs   )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   rs   r;   r   r   r   rW   rK   rR   rh   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 )Nrr   r   r   r   r  rC   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   rs   r	  rh   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 )
Nrr   r   r   r   r   ru   rv   r   )rt   r   )r   r   r   r   r   r   rw   r   r   r   	test_loss  s    
 zTestLM.test_lossN)
rY   rZ   r[   rt   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 )Nrr   r   r   rv   )r   r   r   r   )rx   r   r   r   ry     s    
ry   c                  C   s,   dD ]"\} }}t tttd|| |dd qd S )N))NvIh%<=r  )r  Nr  )r  r  Nrr   r   )r   r   r   rt   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sjtt|j	t 
ddgdd d S )Nr   r   r<   Zfloat32c                 S   s   | d | d |  S r   r   )ri   r   r   r   r   func  s    ztest_fp32_gh12991.<locals>.funcc                    s    | || S rA   r   )ri   r   r9   r  r   r   err   s    ztest_fp32_gh12991.<locals>.errr   )r   r   g W ?g	?g-C6
?rv   )r   rH   rI   rL   Zastyper   r   AssertionErrorr   r   r   )r   r9   r  rx   r   r  r   test_fp32_gh12991  s    r  )r   )r   )r   )7	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   r   Z!scipy.optimize._lsq.least_squaresr   Zscipy.optimize._lsq.commonr   r   r   r   r!   r#   r%   r(   r)   r+   r,   r.   r/   r:   r;   r\   rp   listkeysr   rq   r   r   r   r   r  r  ry   r  r  r   r   r   r   <module>   sJ   


	3 Tie 	"