
    xf	                     t    d dl 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 d Zd Zd	 Zd
 Zd Zd Zd Zd Zy)    N)assert_equalassert_allcloseassert_)minres)raises   )assert_normclosec                      t         j                  j                  d       t         j                  j                  dd      } | | j                  z   } t         j                  j                  d      }| |fS )N  
   )nprandomseedrandT)matrixvectors     O/usr/lib/python3/dist-packages/scipy/sparse/linalg/_isolve/tests/test_minres.pyget_sample_problemr   	   sP    IINN4YY^^B#FfhhFYY^^BF6>    c                      t               \  } }d| d<   d|d<   t        | |      \  }}t        |d       t        | j	                  |      |d       y )Nr   )r   h㈵>tol)r   r   r   r	   dotAbxpinfos       r   test_singularr!      sM    DAqAbFAaDa|HBqQUU2Yt,r   c                  8   t               \  } }t        j                  j                  d       t        j                  j	                  d      }g fd}t        | |||       }g t        | ||       t        t        j                  |d   d                 y )N90  r   c                 (    j                  |        y )N)append)xktraces    r   trace_iteratesz*test_x0_is_used_by.<locals>.trace_iterates#   s    Rr   )x0callback)r*   r   )r   r   r   r   r   r   r   array_equal)r   r   r)   r(   trace_with_x0r'   s        @r   test_x0_is_used_byr-      s~    DAqIINN5		BE
1aB0ME
1a.)}Q/q::;r   c                      t               \  } }d}| |t        j                  d      z  z
  }t        | ||      \  }}t        ||      \  }}t	        |d       t        ||d       y )Ng      ?r   )shiftr   r   )rtol)r   r   eyer   r   r   )r   r   r/   	shifted_Ax1info1x2info2s           r   
test_shiftr7   -   sb    DAqEEBFF2J&&Iq!5)IBy!$IBB&r   c                      t               \  } }d| d<   d| d<   t        t              5  t        | |d      \  }}ddd       y# 1 sw Y   yxY w)z;Asymmetric matrix should raise `ValueError` when check=Truer   )r      r9   )r9   r   T)checkN)r   assert_raises
ValueErrorr   r   s       r   test_asymmetric_failr=   7   sO    DAqAdGAdG	z	" ,!Qd+D, , ,s   AAc                     t         j                  j                  d       d} t         j                  j                  dd      }t        j                  ||j
                        }t         j                  j                  d      }t         j                  j                  d      }t        ||||       d   }t        |j	                  |      ||        y )Nr   ư>   )r)   r   r   r   r   r   r   randnr   r   r   r	   )r   ar   cxs        r   test_minres_non_default_x0rF   @   s    IINN4
C
		1A
q!##A
		A
		Aq!s#A&AQUU1Xqc*r   c                  "   t         j                  j                  d       d} t         j                  j                  dd      }t        j                  ||j
                        }t         j                  j                  d      }t         j                  j                  d      }t         j                  j                  dd      }t        j                  ||j
                        }t        |||||       d   }t        |j	                  |      ||        y )Nr#   r?   r@   Mr)   r   r   r   rA   r   rC   r   rD   mrE   s         r   "test_minres_precond_non_default_x0rL   K   s    IINN5
C
		1A
q!##A
		A
		A
		1A
q!##Aq!qQC(+AQUU1Xqc*r   c                     t         j                  j                  d       d} t        j                  d      }t        j                  d      }t        j                  d      }t         j                  j                  dd      }t        j                  ||j                        }t        |||||       d   }t        |j                  |      ||        y )Nr   r?   r   rH   r   r   )
r   r   r   r1   onesrB   r   r   r   r	   rJ   s         r   test_minres_precond_exact_x0rO   X   s    IINN4
C
r
A
A
A
		BA
q!##Aq!qQC(+AQUU1Xqc*r   )numpyr   numpy.testingr   r   r   scipy.sparse.linalg._isolver   pytestr   r;   test_iterativer	   r   r!   r-   r7   r=   rF   rL   rO    r   r   <module>rV      s?     @ @ . * ,-<"',+
+	+r   