o
    i                     @   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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%dCd d!Z&d"d# Z'G d$d% d%Z(G d&d' d'Z)d(d) Z*e+e, e*g Z-G d*d+ d+Z.G d,d- d-Z/G d.d/ d/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 )D    )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   a/home/kim/smarthome/.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_cropped4   r   r0   c                 C   r.   r/   )r,   r#   r   r   r   jac_rosenbrock_cropped8   r   r1   c                 C   s   t | | d | d gS )Nr      r    r#   r   r   r   fun_wrong_dimensions=   s   r3   c                 C   s   t t| |dS )N)r   )r!   Z
atleast_3dr   r   r   r   r   jac_wrong_dimensionsA   s   r4   c                 C   s   t t| jd }t|d |d f}| ||f} | |ddddf< |d dddf |dd ddf  |ddd df  |dddd f  d|   | d  }| S )Nr   r   r   r+      r2   )intr!   sqrtshapezerosreshapeZravel)r   nuyr   r   r   fun_bvpE   s   `r?   c                   @   s&   e Zd Zd
ddZdd Zdd Zd	S )BroydenTridiagonald   sparsec                    s^  t jd}| _t |  _t dd| _t dd| _  jd|	| 7  _  jd|	| 7  _  jd|	| 7  _t
 j j j _|dkrt||ftd _t |}d	 j||f< t d	|}d	 j||d	 f< t |d	 }d	 j||d	 f<  j _d S |d
kr fdd _d S |dkrd  _ fdd _d S td d S )Nr   r5         gr   皙?rB   )Zdtyper   operatorc                    s   t  | S N)r   _jacr#   selfr   r   <lambda>i       z-BroydenTridiagonal.__init__.<locals>.<lambda>densec                    s     |  S rF   )rG   Ztoarrayr#   rH   r   r   rJ   l   rK   F)r!   randomRandomStater<   onesx0linspacelbubrandnr   r
   r7   sparsityarangerG   jacr   )rI   r<   moderngir   rH   r   __init__O   s0   
zBroydenTridiagonal.__init__c                 C   sP   d| | d }|dd   |d d 8  < |d d  d|dd   8  < |S )Nr2   r   r+   r   r   )rI   r   fr   r   r   funp   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 )Nr2   r   r   r+   r5   )r
   r<   r!   rV   )rI   r   JrZ   r   r   r   rG   v   s   zBroydenTridiagonal._jacN)rA   rB   )__name__
__module____qualname__r[   r]   rG   r   r   r   r   r@   N   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
||| j 7  _
|d| j|}	| j
|	  d| || 7  < t ||g| _d S )Nr   r   r   2   )r!   rM   rN   mr<   r:   p0rQ   r   expr>   rT   randintZrandr"   p_opt)
rI   r   bnoiseZ
n_outliersZx_rangeZn_pointsrandom_seedrY   Zoutliersr   r   r   r[      s    z"ExponentialFittingProblem.__init__c                 C   s"   |d t |d | j  | j S r   )r!   rh   r   r>   rI   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!   emptyrf   r<   r   rh   )rI   ro   r^   r   r   r   rW      s   &zExponentialFittingProblem.jac)r   rc   rd   N)r_   r`   ra   __doc__r[   r]   rW   r   r   r   r   rb      s    
rb   c                 C   sL   t d| jf}d|  }d|d d  |d< |d |d< d|d  |d< |S )Nr2   r   gUUUUUU?r   gUUUUUUgr   )r!   rp   size)zrhotr   r   r   cubic_soft_l1   s   rv   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   rz   r   r   r]   rI   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'rx   )argsrz   r   )kwargsrz   r{   )Zrtol)r2   r6   Zkaboomr2   )r   r   filterUserWarningr   r   rz   r   r   assert_raises	TypeError)rI   r   rW   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   rx   ry   r   r{   r|   ZoopsrW   rz   )r   r   r   r   r   r   rz   r   r   r   
ValueError)rI   rW   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   rx   )max_nfevrz   r   r{   r|   )r   r   rz   r   r   )rI   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      ?      ?rW   rx   )x_scaler   auto)r   rz         y      ?       @)	r!   r"   r   r   r   r   r   r   rz   )rI   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 )Nrx   rD   )Z	diff_steprz   gr   r{   r|   )r   r   rz   r   r   r   nfev)rI   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 )Nrx   Zno_such_optionrA   )rz   optionsr   )r   r   r   r   rz   rH   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 )Nrx   ry   r   r{   r|   g      )@   {Gz?lm   r(   )r   r   rz   r   r   costr]   rW   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   rx   r   )rz   r   r   g     @D@	   r6   $   r   )rz   r   r   r   r   r!   r"   r   r]   rW   r   r   r   r   r   r   r   r}   r   r   r   test_full_result_single_fev  s    

z%BaseMixin.test_full_result_single_fevc              
   C   s   ddg}ddg}t dddtgdtddgdgd	d
gD ]/\}}}t }|td tt||||| j	d}W d    n1 s@w   Y  t
|j| qd S )Nr5   r   r   r   r   r   皙?rW   exactlsmrr   r   	tr_solverrz   )r   r,   r!   r"   r   r   r   r   r)   rz   r   r   )rI   rP   x_optrW   r   r   r   r~   r   r   r   test_rosenbrock(  s$   

zBaseMixin.test_rosenbrockc              	   C   s   ddg}| j dkrtttt|dd d S tdddtgdtdd	gd
gddgD ]\}}}tt||||| j d}t	|j
ddd q(d S )Nr5   r   r   ry   r   r   r   r   r   rW   r   r   r   r   g+=r|   )rz   r   r   r   r0   r   r1   r!   r"   r   r   )rI   rP   rW   r   r   r~   r   r   r   test_rosenbrock_cropped8  s    


z!BaseMixin.test_rosenbrock_croppedc                 C   s   t tttd| jd d S Nrx   ry   )r   r   r   r3   rz   rH   r   r   r   test_fun_wrong_dimensionsG     
z#BaseMixin.test_fun_wrong_dimensionsc                 C   s   t tttdt| jd d S r   )r   r   r   r   r4   rz   rH   r   r   r   test_jac_wrong_dimensionsK  s   
z#BaseMixin.test_jac_wrong_dimensionsc                 C   s"   ddg}t ttt|t| jd d S )Nr   r   ry   )r   r   r   r)   r-   rz   rI   rP   r   r   r   (test_fun_and_jac_inconsistent_dimensionsO  s   

z2BaseMixin.test_fun_and_jac_inconsistent_dimensionsc                 C   s*   t ddd}tttt|| jd d S )Nr6   r   ry   )r!   rO   r;   r   r   r   r   rz   r   r   r   r   test_x0_multidimensionalT  s   

z"BaseMixin.test_x0_multidimensionalc                 C   s   d}t ttt|| jd d S )N       @        ry   r   r   r   r   rz   r   r   r   r   test_x0_complex_scalarY  s   

z BaseMixin.test_x0_complex_scalarc                 C   s    ddg}t ttt|| jd d S )Nr   r   ry   r   r   r   r   r   test_x0_complex_array^  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   )ftolrz   r   r   )r!   rO   rz   r   r?   r   r   r   )rI   r<   rP   r   r~   r   r   r   test_bvpc  s   
zBaseMixin.test_bvpc              
   C   s   t tttd| jd d d d d S )Nrx   )rz   r   xtolgtolr   rH   r   r   r   /test_error_raised_when_all_tolerances_below_epst  s   


z9BaseMixin.test_error_raised_when_all_tolerances_below_epsc              
   C   sV   | j dkrd S ddg}ddg}dD ]\}}}tt|t|||| j d}t|j| qd S )Nr   r5   r   )):0yE>NN)Nr   N)NNr   )rW   r   r   r   rz   )rz   r   r)   r,   r   r   )rI   rP   r   r   r   r   r~   r   r   r   0test_convergence_with_only_one_tolerance_enabledy  s   
z:BaseMixin.test_convergence_with_only_one_tolerance_enabledN)r_   r`   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw      s*    rw   c                   @   sX   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	e
jddd ZdS )BoundsMixinc                 C      t tttdd| jd d S )Nrx   )      $@r   boundsrz   r   rH   r   r   r   test_inconsistent     

zBoundsMixin.test_inconsistentc                 C   r   )Nrx   )r   r6   r   r   rH   r   r   r   test_infeasible  r   zBoundsMixin.test_infeasiblec                 C   r   )Nrx   )r   r   r2   r   r   rH   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 )Nrx   r   r   r   r         @)r   r   r   r   rz   r)   rH   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   rx   )r   r   rW   r   rz   r   r{   r|   r   r+   r2   )r   r   r   )	r   r   r   rz   r   r   r   r   r   )rI   rW   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 rF   r   rR   rS   r   r   r   get_bounds_direct  s   z8BoundsMixin.test_bounds_shape.<locals>.get_bounds_directc                 S   s
   t | |S rF   )r   r   r   r   r   get_bounds_instances  r'   z;BoundsMixin.test_bounds_shape.<locals>.get_bounds_instancesr   r   r   r   )rW   r   r   rx   r   g333333?r   r   r+   h㈵>r|   )r&   r   r$   r   r   rz   )rI   r   r   rW   Zbounds_funcrP   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   )rR   r   r         )rS   r   rD   )r   r   r   r   r   r$   r}   r   r   r   test_bounds_instances  s    

z!BoundsMixin.test_bounds_instancesr(   c                 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   rx   r   g333333rC   g      ?r   g      Ir   rA   r   r   r   rW   r   r   r   r   r|   )
r!   r"   infr   r,   r   r)   rz   r   r   )rI   Zx0_1Zx0_2Zx0_3Zx0_4Zx0_5problemsrP   r   rW   r   r   r~   r   r   r   test_rosenbrock_bounds  s2   

z"BoundsMixin.test_rosenbrock_boundsN)r_   r`   ra   r   r   r   r   r   r   r   pytestmark	fail_slowr   r   r   r   r   r     s    
r   c                   @   sh   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
d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   rz   )r   jac_sparsityrz   )	r@   r   r   r   r]   rP   rW   rz   rU   rn   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   rX   rL   r   #B;r|   r   )r@   r   r]   rP   rW   rz   r   r   r   r   r   rI   rB   rL   
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绽|=rz   
tr_optionsr   r   r|   )r@   r   r]   rP   rW   rz   r   r   rI   ro   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   Ztolr   )r   r   )	r@   r   r   r   r]   rP   rW   rz   r   rn   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   rL   r   r   r   r|   )r@   r   r]   rP   rW   rz   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|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   ry   )rz   r   r   r|   r   )r@   r   r]   rP   rz   rU   r   r   r   r   r   )rI   ro   rW   r   r   r   r   r   test_numerical_jac!  s   zSparseMixin.test_numerical_jacr(   c              	   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   rz   r   r   r   r|   )r@   r   rW   rU   r   r]   rP   rR   r!   r   rz   rS   r   r   )rI   ro   rW   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   rz   )r@   rU   r   r   r   r]   rP   rz   )rI   ro   rU   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 )	NrE   r   ry   r   r   r|   r   )rz   r   
r@   r   r]   rP   rW   rz   r   r   r   r   r   r   r   r   test_linear_operatorE  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 )NrW   )rz   r   r   r   r|   rE   r   r   r   r   r   r   test_x_scale_jac_scaleL  s   

z"SparseMixin.test_x_scale_jac_scaleN)r_   r`   ra   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 )Nrx   lossrz   r   V瞯<r|   Zhinge)LOSSESr   r   rz   r   r   r   r   rI   r   r~   r   r   r   test_optionsX  s   

zLossFunctionMixin.test_optionsc                 C   s2   t D ]}ttd|| jd}t|jt|j qd S )Nrx   r   )r   r   r   rz   r   r]   r   r   r   r   r   test_funa  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 )Nrx   linearr   r   r   rz   r   r   hubersoft_l1r   cauchyarctanr6   gUUUUUU?)
r!   r"   r   r   r   rz   r   r   r   rv   )rI   r   r~   r   r   r   	test_gradi  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 )Nrx   r   r   r  r   r  r  r   r(   )r   f_scaler   r  g      r  )r   r
  r   rz   r  g      4@r   r2   r6   )r   r      g)	r   r   r   rz   r   rW   r   r   rv   )rI   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   )rm   r   r   r   r   r   r|   r  )rW   r   r
  rz   )rb   rW   r   r]   rg   rz   r   r   r   r   r   r   rj   )rI   rl   ro   rW   Zres_lsqr   Z
res_robustr   r   r   test_robustness  s*   z!LossFunctionMixin.test_robustnessN)r_   r`   ra   r  r  r	  r  r  r   r   r   r   r   W  s    	Dr   c                   @   s   e Zd ZdZdS )
TestDogboxZdogboxN)r_   r`   ra   rz   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]   rP   rW   r   r   )rI   ro   r  r~   r   r   r   test_lsmr_regularization  s   z TestTRF.test_lsmr_regularizationN)r_   r`   ra   rz   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 )Nrx   )r   r   r   r   r   r   r   r   rH   r   r   r   test_bounds_not_supported  r   z TestLM.test_bounds_not_supportedc                 C   s   ddg}t ttt|dd d S )Nr5   r   r   ry   )r   r   r   r0   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   ry   r@   r   r   r   r]   rP   rW   rn   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 )Nrx   r   r   r   r  rH   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 )NrE   r   r   ry   r  rn   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 )
Nrx   r  r   r   r   r{   r|   r  )rz   r   )r   r   r   r   r   r   r}   r   r   r   	test_loss  s
   

zTestLM.test_lossN)
r_   r`   ra   rz   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 )Nrx   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%<=r  )r  Nr  )r  r  Nrx   r   )r   r   r   rz   r  )r   r   r   r   r   r   test_small_tolerances_for_lm  s
   r  c                     s   t jd} t dddd}| dd}dd   fdd}t|d	d	g||fd
}|jdks4J t|jt 	ddgdd d S )Nr   r   rA   Zfloat32c                 S   s   | d | d |  S r   r   )ro   r   r   r   r   func&  s   ztest_fp32_gh12991.<locals>.funcc                    s    | || S rF   r   )ro   r   r>   r  r   r   err)  s   ztest_fp32_gh12991.<locals>.errr   )r   r   g W ?g	?g-C6
?r|   )
r!   rM   rN   rQ   Zastyper   r   r   r   r"   )rY   r   r>   r!  r~   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s0J tjj	|j| tjd	|k s@J d S )
Ng-q=gyYs=c                    s   |   d S r   r   r#   Zanswerr   r   chi2;  r   z%test_gh_18793_and_19351.<locals>.chi2r   r   )rP   r   r   r   )ord)
r   r!   r   r   r   r   Z
atleast_1dr   Zlinalgr   )Zinitial_guessr$  r   r~   Zscaling_r   r#  r   test_gh_18793_and_193517  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s5J d S )Nr   B   )Sr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   r   r   r   r         @r   r   r   rx          @r   r   r)        "@      @rx   r,  r*  rx         *@r+  r*        &@r   r-  g      ,@      3@r.  g      .@g      2@g      :@r/        @@g      =@g      <@      B@r0  g     A@r1  g     E@      J@r0  g      M@g      L@r2  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   rD   c                    s$   | \}}}|t | |    S rF   )r!   rh   )paramsABrP   ZxdataZydatar   r   exponential_wrappedc  s   
z*test_gh_19103.<locals>.exponential_wrapped)r   r   r   )r   r   r   r(   gfffff4@r  )rz   r   )r!   r"   rV   rr   r   r   r   )r7  rP   r   r~   r   r6  r   test_gh_19103Q  s   
r8  )r   )r   ):	itertoolsr   numpyr!   Znumpy.linalgr   Znumpy.testingr   r   r   r   r   r   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-   r0   r1   r3   r4   r?   r@   rb   rv   listkeysr   rw   r   r   r   r  r  r  r   r  r"  r'  r8  r   r   r   r   <module>   sR    


	3 Zjf 	"