o
    i*                     @   s   d dl Z d dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ edd	gd
dgddggZeg dZG dd dZG dd dZG dd deeZG dd deZG dd dZdS )    N)lstsq)assert_allcloseassert_equalassert_)rand
coo_matrix)aslinearoperator)
lsq_linear)BoundsgS?gv/gJ+gX9vϿgsh|?ſgS㥫?)gl?gMbX9?gPnؿ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d Z
ejjdd Zdd ZdS )	BaseMixinc                 C   s   t jd| _d S )Nr   )nprandomRandomStaternd)self r   ^/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/optimize/tests/test_lsq_linear.pysetup_method   s   zBaseMixin.setup_methodc                 C   sN   | j D ]!}ttt| j|d}t|jtttddd  t|j|jd  qd S )Nmethod
lsq_solverZrcondr   )	lsq_solversr	   Abr   r   xr   unbounded_sol)r   r   resr   r   r   test_dense_no_bounds   s
   
zBaseMixin.test_dense_no_boundsc                 C   sd  t ddg}t ddg}tttddd }| jD ]#}ttt||f| j|d}t|j	tttddd  t|j
d | qt dt j g}| jD ]$}ttt|t jf| j|d}t|j	t ddgd	d
 t|j
d | qJt ddg}| jD ]$}ttt|t jf| j|d}t|j	t ddgdd
 t|j
d | qyt t jdg}| jD ]#}tttt j |f| j|d}t|j	t ddg t|j
d | qt dt jg}| jD ]#}tttt j |f| j|d}t|j	t ddg t|j
d | qt ddg}t ddg}| jD ]"}ttt||f| j|d}t|j	t ddg t|j
d | qd S )Nr   i   r   r   r           g1Vư>Zatolgԡw?gV瞯<ggUw-r 
su?)r   arrayr   r   r   r   r	   r   r   r   r   inf)r   lbubr   r   r   r   r   r   test_dense_bounds   sd   





zBaseMixin.test_dense_boundsc           
      C   s   t ddg}| jjdd}|| }t ddg}t ddg}||f}t||}t|||}t|||}	t |	j|	jd rAJ t	|j|	j d S )Nr       )   r-   sizer-   r   )
r   r'   r   uniformr
   r	   Zallcloser   r   r   )
r   r   r   r   r)   r*   Z
bounds_oldZ
bounds_newZres_oldZres_newr   r   r   test_bounds_variantsP   s   
zBaseMixin.test_bounds_variantsc                 C   sf   t j }|t t g dg dg}W d    n1 s w   Y  t ddg}t|| d S )N)   r%   r   r-   r,   )
   r    r   r   r2      )r   ZtestingZsuppress_warningsfilterPendingDeprecationWarningmatrixr'   r	   )r   supr   kr   r   r   test_np_matrix]   s   
zBaseMixin.test_np_matrixc                 C   s  t ddgg}t dg}ddg}ddg}| jD ]%}t||||f| j|d}t|jddg t|jd t||dd	d  qt d
dgddgddgg}t g d}ddg}ddg}| jD ]%}t||||f| j|d}t|j	ddd t|jd t||dd	d  q_d S )NgSӿgZd;Oǿg#~j?皙g?r   r   r   r   gK7A`?gK7A`?gPngPng~jt?g~jt?)g`"gHzG?gJ+?r    g      gdy=r#   )
r   r'   r   r	   r   r   r   r   r   
optimality)r   r   r   r)   r*   r   r   r   r   r   test_dense_rank_deficiente   s2   
 
 z#BaseMixin.test_dense_rank_deficientc                 C   s   t ddg}t ddg}ttt||f| jd}t|jddg t|jd t	ttddd  t
|jt }t|jdt 
||  t|j| t|jd	d
d t|jddg t|jdk  t|jdkpk|jdk tt|jt t|j d S )Nr   r%   r    r   r&   r   r   g      ?r!   g-q=r#   r5   r,   )r   r'   r	   r   r   r   r   r   r   r   dotcostZfunr=   r   Zactive_maskr   nitstatus
isinstancemessagestrsuccess)r   r)   r*   r   rr   r   r   test_full_result~   s   zBaseMixin.test_full_resultc                 C   sL   t g dg dg dg}t g d}t||| jd}t|jdk  d S )N)gSQcU?gn-(8?g(8?)gڌ?g,?gk,?)g\s`?gAʨY?g Y?)gt\O?v?g"He?gFH{?r?   gg5_PG>)r   r'   r	   r   r   rA   )r   r   r   resultr   r   r   test_almost_singular   s   zBaseMixin.test_almost_singularc                 C   s(  t jd t t jjdddd\}}|d9 }dt jjdd||gd }dt jjdd|gd }dt jt jjddd|fddd }|d	d d f  d7  < t j||}|d d |f }t|||d
dj}t|||ddj}t || | d }	t || | d }
t	t
|	|
 |
d k  d S )Nr   r-     r.         ?ic   )Zaxisr    bvlsboundsr   trf绽|=)r   r   seedsortrandintchoicer	   r   sumr   abs)r   nmr   r   rQ   wx_bvlsx_trf	cost_bvlscost_trfr   r   r   test_large_rank_deficient   s   $z#BaseMixin.test_large_rank_deficientc                 C   s   t g dg dg dg}t g d}t g dg dg}t|||ddj}t|||d	dj}t || | d
 }t || | d
 }tt|| |d k  d S )N)g     H@g     D@      @)g      3rb   g       )g      *g      $@g     @Q@)g     Dg     Vg     G@)g      ?@g      Fg      :@)g      K@rb   g      <@rO   rP   rR   r-   rS   )r   r'   r	   r   rX   r   rY   )r   r   r   rQ   r]   r^   r_   r`   r   r   r   test_convergence_small_matrix   s   

z'BaseMixin.test_convergence_small_matrixN)__name__
__module____qualname__r   r   r+   r1   r;   r>   rI   rK   pytestmarkZxslowra   rc   r   r   r   r   r      s    1
r   c                   @   s0   e Zd Zdd Zejddd Zdd ZdS )	SparseMixinc                 C   sl   d}d}t jd}t|||d}||}t||}t|jddd t|}t||}t|jddd d S )N  rL   r   Zrandom_stater"   r#   )	r   r   r   r   randnr	   r   r=   r   )r   r[   rZ   rngr   r   r   r   r   r   test_sparse_and_LinearOperator   s   


z*SparseMixin.test_sparse_and_LinearOperatorr3   c           	      C   s   d}d}t jd}t|||d}||}||}|d }t||||f}t|jddd t||||fd	d
d}t|jddd t||||fdd}t|jddd d S )Nrj   rL   r   rk   r    r!   r"   r#   gvIh%<=i  )lsmr_tollsmr_maxiterauto)ro   )r   r   r   r   rl   r	   r   r=   )	r   r[   rZ   rm   r   r   r)   r*   r   r   r   r   test_sparse_bounds   s   

zSparseMixin.test_sparse_boundsc                 C   s   t g d}t g d}t g d}t|||ffdd}t| tdd}t|tdd}tjtd	d
 t	|j
|j
 W d    n1 sHw   Y  t|tddd}t	|j
|j
 d S )N)rM   rM   rM   gzo ?rM   )r   r   r    r-   r-   )r   r-   r    r   r-   )r,   r,   )shapeexact)r   lsmr matchr3   r   rp   )r   r'   r   r	   Ztoarrayr   rg   raisesAssertionErrorr   r   )r   datarowcolr   Z	exact_solZdefault_lsmr_solZ	conv_lsmrr   r   r   test_sparse_ill_conditioned   s   z'SparseMixin.test_sparse_ill_conditionedN)	rd   re   rf   rn   rg   rh   Z	fail_slowrr   r   r   r   r   r   ri      s
    

ri   c                   @   s   e Zd ZdZddgZdS )TestTRFrR   rt   ru   Nrd   re   rf   r   r   r   r   r   r   r      s    r   c                   @   s   e Zd ZdZdgZdS )TestBVLSrO   rt   Nr   r   r   r   r   r      s    
r   c                   @   s   e Zd Zdd Zdd ZdS )TestErrorCheckingc                 C   s   t ttddd}t ttddd}t ttdd d}d}tjt|d t ttddd}W d    n1 s4w   Y  tjt|d t ttddd}W d    n1 sSw   Y  tjt|d t ttdd	d}W d    d S 1 ssw   Y  d S )
Nru   g{Gz?)r   ro   rq   z3`lsmr_tol` must be None, 'auto', or positive float.rw   r<   Zfoor    r	   r   r   rg   rz   
ValueErrorr   _Zerr_messager   r   r   test_option_lsmr_tol  s   "z&TestErrorChecking.test_option_lsmr_tolc                 C   s   t ttddd}t ttdd d}d}tjt|d t ttddd}W d    n1 s,w   Y  tjt|d t ttddd}W d    d S 1 sLw   Y  d S )Nru   r    ry   z0`lsmr_maxiter` must be None or positive integer.rw   r   r   r   r   r   r   r   test_option_lsmr_maxiter  s   "z*TestErrorChecking.test_option_lsmr_maxiterN)rd   re   rf   r   r   r   r   r   r   r     s    r   )rg   numpyr   Znumpy.linalgr   Znumpy.testingr   r   r   Zscipy.sparser   r   Zscipy.sparse.linalgr   Zscipy.optimizer	   Zscipy.optimize._minimizer
   r'   r   r   r   ri   r   r   r   r   r   r   r   <module>   s(     15