a
    ReB                     @   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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%dDd d!Z&d"d# Z'G d$d% d%Z(G d&d' d'Z)d(d) Z*e+e, e*g Z-G d*d+ d+Z.G d,d- d-Z/G d.d/ d/Z0G d0d1 d1Z1G d2d3 d3e.e/e0e1Z2G d4d5 d5e.e/e0e1Z3G d6d7 d7e.Z4d8d9 Z5d:d; Z6d<d= Z7d>d? Z8d@dA Z9dS )E    )productN)norm)assert_assert_allcloseassert_equalsuppress_warnings)raises)issparse
lil_matrix)aslinearoperator)least_squaresBounds)IMPLEMENTED_LOSSES)EPSmake_strictly_feasibleCL_scaling_vectorc                 C   s   | | d d S )N         @ xar   r   [/var/www/sunrise/env/lib/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    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    r0   c                 C   s   t t| |dS )N)r   )r    Z
atleast_3dr   r   r   r   r   jac_wrong_dimensions@   s    r1   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   r2         gr   皙?r?   )Zdtyper   operatorc                    s   t  | S N)r   _jacr"   selfr   r   <lambda>h       z-BroydenTridiagonal.__init__.<locals>.<lambda>densec                    s     |  S rC   )rD   Ztoarrayr"   rE   r   r   rG   k   rH   F)r    randomseedr9   onesx0linspacelbubrandnr   r
   r4   sparsityarangerD   jacr   )rF   r9   modeir   rE   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   )rF   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)   r2   )r
   r9   r    rS   )rF   r   JrV   r   r   r   rD   u   s    zBroydenTridiagonal._jacN)r>   r?   )__name__
__module____qualname__rW   rY   rD   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    rJ   rK   mr9   r7   p0rN   r   expr;   rQ   randintZrandr!   p_opt)	rF   r   bnoiseZ
n_outliersZx_rangeZn_pointsrandom_seedZoutliersr   r   r   rW      s    "z"ExponentialFittingProblem.__init__c                 C   s"   |d t |d | j  | j S r   )r    rd   r   r;   rF   pr   r   r   rY      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    emptyrb   r9   r   rd   )rF   rk   rZ   r   r   r   rT      s    &zExponentialFittingProblem.jac)r   r_   r`   N)r[   r\   r]   __doc__rW   rY   rT   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    rl   size)zrhotr   r   r   cubic_soft_l1   s    rr   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   rv   r   r   rY   rF   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'rt   )argsrv   r   )kwargsrv   rw   )Zrtol)r/   r3   Zkaboomr/   )r   r   filterUserWarningr   r   rv   r   r   assert_raises	TypeError)rF   r   rT   suprz   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 )Nr}   r~   r   r   rt   ru   r   rw   rx   ZoopsrT   rv   )r   r   r   r   r   r   rv   r   r   r   
ValueError)rF   rT   r   rz   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   rt   )max_nfevrv   r   rw   rx   )r   r   rv   r   r   )rF   r   rz   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      ?      ?rT   rt   )x_scaler   auto)r   rv         y      ?       @)	r    r!   r   r   r   r   r   r   rv   )rF   r   rz   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 )Nrt   rA   )Z	diff_steprv   gr   rw   rx   )r   r   rv   r   r   r   nfev)rF   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 )Nrt   Zno_such_optionr>   )rv   optionsr   )r   r   r   r   rv   rE   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 )Nrt   ru   r   rw   rx   g      )@   {Gz?lm   r&   )r   r   rv   r   r   costrY   rT   grad
optimalityr   active_maskr   r   njevstatussuccessry   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   rt   r   )rv   r   r   g     @D@	   r3   $   r   )rv   r   r   r   r   r    r!   r   rY   rT   r   r   r   r   r   r   r   ry   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 )Nr2   r   r}   r~   r   r   皙?rT   exactlsmrr   r   	tr_solverrv   )r   r*   r    r!   r   r   r   r   r'   rv   r   r   )rF   rM   x_optrT   r   r   r   rz   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 )Nr2   r   r   ru   r}   r~   r   r   r   rT   r   r   r   r   g+=rx   )rv   r   r   r   r-   r   r.   r    r!   r   r   )rF   rM   rT   r   r   rz   r   r   r   test_rosenbrock_cropped1  s    

z!BaseMixin.test_rosenbrock_croppedc                 C   s   t tttd| jd d S Nrt   ru   )r   r   r   r0   rv   rE   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   r1   rv   rE   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   ru   )r   r   r   r'   r+   rv   rF   rM   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 )Nr3   r   ru   )r    rL   r8   r   r   r   r   rv   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       @        ru   r   r   r   r   rv   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   ru   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   )ftolrv   r   r   )r    rL   rv   r   r<   r   r   r   )rF   r9   rM   r   rz   r   r   r   test_bvp\  s    
zBaseMixin.test_bvpc              
   C   s   t tttd| jd d d d d S )Nrt   )rv   r   xtolgtolr   rE   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   r2   r   )):0yE>NN)Nr   N)NNr   )rT   r   r   r   rv   )rv   r   r'   r*   r   r   )rF   rM   r   r   r   r   rz   r   r   r   0test_convergence_with_only_one_tolerance_enabledr  s    
z:BaseMixin.test_convergence_with_only_one_tolerance_enabledN)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   rs      s(   rs   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 )Nrt   )      $@r   boundsrv   r   rE   r   r   r   test_inconsistent  s    
zBoundsMixin.test_inconsistentc                 C   s   t tttdd| jd d S )Nrt   )r|   r3   r   r   rE   r   r   r   test_infeasible  s    
zBoundsMixin.test_infeasiblec                 C   s   t tttdd| jd d S )Nrt   )r   r   r/   r   r   rE   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 )Nrt   r   r|   r   r         @)r   r   r   r   rv   r'   rE   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   rt   )r   r|   rT   r   rv   r   rw   rx   r   r)   r/   )r   r|   r   )	r   r   r   rv   r   r   r   r   r   )rF   rT   rz   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 rC   r   rO   rP   r   r   r   get_bounds_direct  s    z8BoundsMixin.test_bounds_shape.<locals>.get_bounds_directc                 S   s
   t | |S rC   )r   r   r   r   r   get_bounds_instances  s    z;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instancesr}   r~   r   r   )rT   r   r   rt   r   g333333?r   r|   r)   h㈵>rx   )r%   r   r#   r   r   rv   )rF   r   r   rT   Zbounds_funcrM   rz   r   r   r   test_bounds_shape  s.    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   rw   rx   r|   r   )rO   r   r         )rP   r   rA   )r   r   r   r   r   r#   ry   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   rt   r   g333333r@   g      ?r|   g      Ir   r>   r}   r~   r   rT   r   r   r   r   rx   )
r    r!   infr   r*   r   r'   rv   r   r   )rF   Zx0_1Zx0_2Zx0_3Zx0_4Zx0_5problemsrM   r   rT   r   r   rz   r   r   r   test_rosenbrock_bounds  s.    

z"BoundsMixin.test_rosenbrock_boundsN)r[   r\   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   rv   )r   jac_sparsityrv   )	r=   r   r   r   rY   rM   rT   rv   rR   rj   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?   rU   rI   r   #B;rx   r   )r=   r   rY   rM   rT   rv   r   r   r   r   r   rF   r?   rI   
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绽|=rv   
tr_optionsr   r   rx   )r=   r   rY   rM   rT   rv   r   r   rF   rk   rz   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   rY   rM   rT   rv   r   rj   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   rI   r   r   r   rx   )r=   r   rY   rM   rT   rv   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   ru   )rv   r   r   rx   r   )r=   r   rY   rM   rv   rR   r   r   r   r   r   )rF   rk   rT   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   rv   r   r   r   rx   )r=   r   rT   rR   r   rY   rM   rO   r    r   rv   rP   r   r   )rF   rk   rT   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   rv   )r=   rR   r   r   r   rY   rM   rv   )rF   rk   rR   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 )	NrB   r   ru   r   r   rx   r   )rv   r   
r=   r   rY   rM   rT   rv   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 )NrT   )rv   r   r   r   rx   rB   r   r   r   r   r   r   test_x_scale_jac_scaleC  s    
z"SparseMixin.test_x_scale_jac_scaleN)r[   r\   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )LossFunctionMixinc                 C   sF   t D ]&}ttd|| jd}t|jddd qttttdd| jd d S )Nrt   lossrv   r   V瞯<rx   Zhinge)LOSSESr   r   rv   r   r   r   r   rF   r   rz   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 )Nrt   r   )r   r   r   rv   r   rY   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 )Nrt   linearr   r   r   rv   r   r   hubersoft_l1r   cauchyarctanr3   gUUUUUU?)
r    r!   r   r   r   rv   r   r   r   rr   )rF   r   rz   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 )Nrt   r   r   r   r   r   r   r   r&   )r   f_scaler   r   g      r   )r   r   r   rv   r   g      4@r   r/   r3   )r   r      g)	r   r   r   rv   r   rT   r   r   rr   )rF   r   rX   rz   fsr   r   r   test_jac  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)rA   r   r   rA   r   )ri   r}   r~   r   r   r   rx   r   )rT   r   r   rv   )r^   rT   r   rY   rc   rv   r   r   r   r   r   r   rf   )rF   rh   rk   rT   Zres_lsqr   Z
res_robustr   r   r   test_robustness  s$    z!LossFunctionMixin.test_robustnessN)r[   r\   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)r[   r\   r]   rv   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   rx   )r=   r   rY   rM   rT   r   r   )rF   rk   r  rz   r   r   r   test_lsmr_regularization  s    z TestTRF.test_lsmr_regularizationN)r[   r\   r]   rv   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 )Nrt   )r   r|   r   r   r   r   r   r   rE   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 )Nr2   r   r   ru   )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   ru   r=   r   r   r   rY   rM   rT   rj   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 )Nrt   r   r   r   r  rE   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 )NrB   r   r   ru   r  rj   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 )
Nrt   r   r   r   r   rw   rx   r   )rv   r   )r   r   r   r   r   r   ry   r   r   r   	test_loss  s
    
zTestLM.test_lossN)
r[   r\   r]   rv   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 )Nrt   r   r   rx   )r   r   r   r   )rz   r   r   r   r{     s    
r{   c                  C   s,   dD ]"\} }}t tttd|| |dd qd S )N))NvIh%<=r  )r  Nr  )r  r  Nrt   r   )r   r   r   rv   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   r>   float32c                 S   s   | d | d |  S r   r   )rk   r   r   r   r   func  s    ztest_fp32_gh12991.<locals>.funcc                    s    | || S rC   r   )rk   r   r;   r  r   r   err   s    ztest_fp32_gh12991.<locals>.errr   )r   r   g W ?g	?g-C6
?rx   )
r    rJ   rK   rN   Zastyper   r   r   r   r!   )r   r;   r  rz   r   r  r   test_fp32_gh12991  s    r  c                     s   d d}  fdd}d}t || ddtjfd}t|j|jtdttj\}}|jdks`J tjj	|j| tjd	|k sJ d S )
Ng-q=gyYs=c                    s   |   d S r   r   r"   Zanswerr   r   chi22  s    z%test_gh_18793_and_19351.<locals>.chi2r   r   )rM   r   r   r   )ord)
r   r    r   r   r   r   Z
atleast_1dr   Zlinalgr   )Zinitial_guessr  r   rz   Zscaling_r   r  r   test_gh_18793_and_19351.  s    
r  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sjJ d S )Nr   B   )Sr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   r   r   r|   r         @r   r   r   rt          @r   r   r         "@      @rt   r#  r!  rt         *@r"  r!        &@r   r$  g      ,@      3@r%  g      .@g      2@g      :@r&        @@g      =@g      <@      B@r'  g     A@r(  g     E@      J@r'  g      M@g      L@r)  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   rA   c                    s$   | \}}}|t | |    S rC   )r    rd   )paramsABrM   ZxdataZydatar   r   exponential_wrappedZ  s    
z*test_gh_19103.<locals>.exponential_wrapped)r   r   r   )r   r   r   r&   gfffff4@r  )rv   r   )r    r!   rS   rn   r   r   r   )r.  rM   r   rz   r   r-  r   test_gh_19103H  s    
r/  )r   )r   )r   ):	itertoolsr   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.   r0   r1   r<   r=   r^   rr   listkeysr   rs   r   r   r   r  r  r
  r{   r  r  r  r/  r   r   r   r   <module>   sN   


	3 Tie 	"