o
    5ήc                   	   @   s   d Z ddlmZmZmZmZ ddlZddlmZm	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZ ddlmZ dd	lmZmZ ee	g d
g dg dg dg dg dgZe	g dZdgZdd ZeeejejdZdd ZG dd dZ dS )z,Tests for the linalg._isolve.gcrotmk module
    )assert_assert_allcloseassert_equalsuppress_warningsN)zerosarrayallclose)norm)
csr_matrixeyerand)LinearOperator)splu)gcrotmkgmres)   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   r   r   r   r   )r      r      r      c                 C   s   t d  d7  < t|  S )Nr   r   )countAm)v r   U/tmp/pip-target-vg8gfxp4/lib/python/scipy/sparse/linalg/_isolve/tests/test_gcrotmk.pymatvec   s   r   r   shapedtypec                  K   s   dt d< t !}|td tttfttjd dd| \}}W d    n1 s+w   Y  t d }t	t
t| tdddtt| t  ||fS )Nr   .*called without specifying.*+=)x0tolg-q=)rtolatol)r   r   filterDeprecationWarningr   Abr   r    r   r   r	   )kwsupr$   flagcount_0r   r   r   do_solve$   s   (&r0   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S )TestGCROTMKc                 C   sh   t t }t|jtjtjd}t \}}t|d\}}t	|d t
||d k  t
t||dd d S )Nr   )Mr   r   r#   )r&   )r   r   tocscr   solver*   r    r!   r0   r   r   r   )selfpcr2   r$   r/   x1count_1r   r   r   test_preconditioner/   s   

zTestGCROTMK.test_preconditionerc              	   C   s   t jd tdtdddd }t jd}t /}|td t||t	|j
d dddd\}}t||t	|j
d ddd	\}}W d    n1 sLw   Y  t|d t|d t j||| d
ksjJ t|| d S )Nr   i  gMb@?)densityr"   r      )r$   mkmaxiter)r$   restartr>   MbP?)nprandomseedr   r   r   r(   r)   r   r   r    r   r   linalgr	   dotr   )r5   r*   r+   r-   r$   flag0r7   flag1r   r   r   test_arnoldi;   s   ""

zTestGCROTMK.test_arnoldic              	   C   s>  t jd dD ]}dt| }t }|td t |}t||dd\}}t	|d t
||| ddd	 t||ddd
\}}|dkrSt
||| ddd	 t j|}t||dd\}}t	|d t
||| ddd	 t||ddd
\}}|dkrt
||| ddd	 W d    n1 sw   Y  qd S )N  )r   r   
   d   r   r"   rJ   )r>   r   r#   r'   r%   r>   )rA   rB   rC   r   r   r(   r)   onesr   r   r   rE   r   )r5   nr*   r-   r+   xinfor   r   r   test_cornercaseM   s.   


zTestGCROTMK.test_cornercasec                 C   sv   t ddd}tj|d< td}t }|td t||ddd\}}t|d	 W d    d S 1 s4w   Y  d S )
Nr   lil)format)r   r   r"   r   rJ   rM   r   )	r   rA   nanrN   r   r(   r)   r   r   )r5   r*   r+   r-   rP   rQ   r   r   r   	test_nansk   s   

"zTestGCROTMK.test_nansc                 C   s   t jd t jddt d }t jd}dD ]9}t }|td t||dd|ddd\}}W d    n1 s=w   Y  t	|d	 t
||| d	d
d qd S )NrI      )oldestsmallestr"   rJ   g-C6?   )r<   r=   truncater%   r>   r   r@   rL   )rA   rB   rC   r   r   r   r(   r)   r   r   r   rE   )r5   r*   r+   r[   r-   rP   rQ   r   r   r   test_truncateu   s   
zTestGCROTMK.test_truncatec           	      C   s   dD ]S}g }t ||d\}}tt|dk tt|dk |r-|D ]
\}}t|d u  q"t ||d\}}|rAt|dt|  nt|d t||d k t||dd qd S )	N)TF)CU	discard_Cr   r   r   r   r#   rL   )r0   r   lenr   r   )	r5   r^   r]   r$   r/   cur7   r8   r   r   r   test_CU   s   
zTestGCROTMK.test_CUc                 C   s   t jddgddggtd}|dt dd 9 }t ddg}t }|td t||\}}W d    n1 s9w   Y  |dkrLt|	|| d S d S )	Nr   r   r   r   )r!   rK   r   r"   )
rA   r   float	nextafterr   r(   r)   r   r   rE   )r5   r*   r+   r-   xprQ   r   r   r   test_denormals   s   zTestGCROTMK.test_denormalsN)
__name__
__module____qualname__r9   rH   rR   rV   r\   rb   rf   r   r   r   r   r1   .   s    
r1   )!__doc__numpy.testingr   r   r   r   numpyrA   r   r   r   scipy.linalgr	   scipy.sparser
   r   r   scipy.sparse.linalg._interfacer   scipy.sparse.linalgr   scipy.sparse.linalg._isolver   r   r   r+   r   r   r    r!   r*   r0   r1   r   r   r   r   <module>   s,   

