U
    »mœdf(  ã                   @   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 e ddgd	d
gddgg¡Ze dddg¡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_lineargÙÎ÷SãÅ?gÉv¾Ÿ/­¿gJ+‡©¿gX9´Èv¾Ï¿gsh‘í|?Å¿gÙÎ÷Sã¥«?g‹lçû©ñ²?gÓMbX9ð?gP�—nƒØ¿c                   @   sT   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S )Ú	BaseMixinc                 C   s   t j d¡| _d S )Nr   )ÚnpÚrandomZRandomStateÚrnd)Úself© r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/optimize/tests/test_lsq_linear.pyÚsetup_method   s    zBaseMixin.setup_methodc                 C   sN   | j D ]B}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   sh  t  ddg¡}t  ddg¡}tttdd�d }| jD ]F}ttt||f| j|d�}t|j	tttdd�d ƒ t|j
d |ƒ q4t  dt j g¡}| jD ]H}ttt|t jf| j|d�}t|j	t  ddg¡d	d
� t|j
d |ƒ q”t  ddg¡}| jD ]H}ttt|t jf| j|d�}t|j	t  ddg¡dd
� t|j
d |ƒ qòt  t jdg¡}| jD ]H}tttt j |f| j|d�}t|j	t  ddg¡ƒ t|j
d |ƒ �qRt  dt jg¡}| jD ]H}tttt j |f| j|d�}t|j	t  ddg¡ƒ t|j
d |ƒ �q²t  ddg¡}t  ddg¡}| jD ]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   sb    
ÿ
ÿÿ
ÿÿ
ÿ
ÿ
ÿzBaseMixin.test_dense_boundsc              	   C   s^   t j ¡ �2}| t¡ t  dddddgddddd	gg¡}W 5 Q R X t  dd
g¡}t||ƒ}d S )Né   r#   r   é   é   é
   éþÿÿÿr   r   é   )r   ÚtestingZsuppress_warningsÚfilterÚPendingDeprecationWarningÚmatrixr%   r	   )r   Úsupr   ÚkZs_tr   r   r   Útest_np_matrixO   s
    
,zBaseMixin.test_np_matrixc                 C   s  t  ddgg¡}t  dg¡}ddg}ddg}| jD ]J}t||||f| j|d�}t|jddgƒ t|jd t||dd	�d ƒ q2t  d
dgddgddgg¡}t  dddg¡}ddg}ddg}| jD ]J}t||||f| j|d�}t|j	ddd� t|jd t||dd	�d ƒ qÀd S )NgÙÎ÷Sã¥Ó¿gZd;ßO�Ç¿g#Ûù~j¼è?çš™™™™™¹¿gš™™™™™¹?r   r   r   r   gÇK7‰A`Õ?gÇK7‰A`å?gP�—nƒà¿gP�—nƒð¿gú~j¼t“È?gú~j¼t“Ø?g`åÐ"Ûùö¿gHáz®GÁ?gJ+‡í?r   g      à¿g•dyáý¥=r!   )
r   r%   r   r	   r   r   r   r   r   Ú
optimality)r   r   r   r'   r(   r   r   r   r   r   Útest_dense_rank_deficientW   s0    
ÿ ý
ÿ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pÖ|jdkƒ tt|jtƒƒ t|jƒ d S )Nr   r#   r   ©r   r$   r   r   g      à?r   gê-�™—q=r!   r/   r,   )r   r%   r	   r   r   r   r   r   r   r   ÚdotÚcostZfunr8   r   Zactive_maskr   ÚnitÚstatusÚ
isinstanceÚmessageÚstrÚsuccess)r   r'   r(   r   Úrr   r   r   Útest_full_resultp   s    zBaseMixin.test_full_resultc                 C   sT   t  dddgdddgddd	gg¡}t  d
ddg¡}t||| jd�}t|jdk ƒ d S )NgSQ�cUì?gn-É(8´¢?güø²(8´¢?gƒÚŒ¥ó×?g®«ì,»Š?gk§ªì,»Š?g\s…`úî?gAÊ¨çþY ?g ¼¨çþY ?gÏt\O?Šv?gÃ"ÈHªÚe?gFÎýÔH{?r:   gg5_PŸG>)r   r%   r	   r   r   r<   )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+   éè  )Úsizeç      ð?i�ÿÿÿéc   )Zaxisr   Úbvls©Úboundsr   Útrfç»½×Ùß|Û=)r   r   ÚseedÚsortÚrandintÚchoicer	   r   Úsumr   Úabs)r   ÚnÚmr   r   rM   Ú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  dddgdddgdddgg¡}t  d	d
dg¡}t  dddgdddgg¡}t|||dd�j}t|||dd�j}t  || | d ¡}t  || | d ¡}tt|| ƒ|d k ƒ d S )Ng     €H@g     €D@g      @Àg      3Àg       Àg      *Àg      $@g     @Q@g     €DÀg     €VÀg     €G@g      ?@g      FÀg      :@g      K@g      <@rK   rL   rN   r+   rO   )r   r%   r	   r   rT   r   rU   )r   r   r   rM   rY   rZ   r[   r\   r   r   r   Útest_convergence_small_matrix¥   s    þÿz'BaseMixin.test_convergence_small_matrixN)Ú__name__Ú
__module__Ú__qualname__r   r   r)   r6   r9   rD   rF   r]   r^   r   r   r   r   r
      s   1r
   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚSparseMixinc                 C   sb   d}d}t ||dd�}| j |¡}t||ƒ}t|jddd� t|ƒ}t||ƒ}t|jddd� d S )Néˆ  rG   r   ©Zrandom_stater    r!   )r   r   Úrandnr	   r   r8   r   )r   rW   rV   r   r   r   r   r   r   Útest_sparse_and_LinearOperator·   s    

z*SparseMixin.test_sparse_and_LinearOperatorc                 C   s¤   d}d}t ||dd�}| j |¡}| j |¡}|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 )Nrc   rG   r   rd   r   r   r    r!   g‚vIhÂ%<=iÜ  )Úlsmr_tolÚlsmr_maxiterÚauto)rg   )r   r   re   r	   r   r8   )r   rW   rV   r   r   r'   r(   r   r   r   r   Útest_sparse_boundsÃ   s    ÿzSparseMixin.test_sparse_boundsc              	   C   sº   t  dddddg¡}t  dddddg¡}t  dddddg¡}t|||ffdd�}t| ¡ tdd	�}t|td
d	�}tjtdd�� t	|j
|j
ƒ W 5 Q R X t|td
dd�}t	|j
|j
ƒ d S )NrI   gzo ð?r   r   r+   )r,   r,   )ÚshapeÚexact)r   ÚlsmrÚ ©Úmatchr-   ©r   rh   )r   r%   r   r	   Ztoarrayr   ÚpytestÚ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)r_   r`   ra   rf   rj   rx   r   r   r   r   rb   ¶   s   rb   c                   @   s   e Zd ZdZddgZdS )ÚTestTRFrN   rl   rm   N©r_   r`   ra   r   r   r   r   r   r   ry   è   s   ry   c                   @   s   e Zd ZdZdgZdS )ÚTestBVLSrK   rl   Nrz   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 5 Q R X tjt|d�� t ttddd�}W 5 Q R X tjt|d�� t ttdd	d�}W 5 Q R X d S )
Nrm   g{®Gáz„?)r   rg   ri   z3`lsmr_tol` must be None, 'auto', or positive float.ro   r7   Zfoor   ©r	   r   r   rr   rs   Ú
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 5 Q R X tjt|d�� t ttddd�}W 5 Q R X d S )Nrm   r   rq   z0`lsmr_maxiter` must be None or positive integer.ro   r   r   r}   r   r   r   r   Útest_option_lsmr_maxiter  s    z*TestErrorChecking.test_option_lsmr_maxiterN)r_   r`   ra   r�   r‚   r   r   r   r   r|   ò   s   r|   )rr   Únumpyr   Znumpy.linalgr   Znumpy.testingr   r   r   Zscipy.sparser   r   Zscipy.sparse.linalgr   Zscipy.optimizer	   r%   r   r   r
   rb   ry   r{   r|   r   r   r   r   Ú<module>   s$   ý #2