a
    .'ag                     @   s  d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlZd dlmZ d dlZd dlmZmZ d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dlZd d	l3m4Z4 e Z5e56e  zd dl7m8Z8 d
Z9W n e:yP   dZ9Y n0 dd Z;dd Z<G dd dZ=G dd dZ>G dd dZ?G dd dZ@dS )    N)arrayfinfoarangeeyealluniqueonesdot)assert_array_almost_equalassert_almost_equalassert_equalassert_array_equalassert_assert_allcloseassert_warnssuppress_warnings)raises)norminv)	spdiagsSparseEfficiencyWarning
csc_matrix
csr_matrixidentity
isspmatrix
dok_matrix
lil_matrix
bsr_matrix)SuperLU)spsolve
use_solverspluspiluMatrixRankWarning_superluspsolve_triangular
factorized)check_free_memoryTFc                 C   s   t | r|  S | S d S N)r   toarray)a r+   Mlib/python3.9/site-packages/scipy/sparse/linalg/dsolve/tests/test_linsolve.pyr)   %   s    r)   c                  C   s   d} d|  }t jjg dg d| d | d fd|d  }t j| d }t j|t j||t j|t j|| t j|t j|| }tj| d d }||fS )N@      )   r/   )r/   r   r.   shaper0      )scipysparseZdiagsr   Zkronnprandomrand)NhZAh1DZeyeNAbr+   r+   r,   setup_bug_8278,   s    r=   c                   @   s
  e Zd Zdd Zdd Zdd Zdd Zejj	e
 d	d
dd Zdd Zejj	e
 d	d
dd Zdd Zejj	e
 d	d
dd Zdd Zejj	e
 d	d
dd Zdd Zejj	e
 d	d
dd Zejj	e
 d	d
dd Zejjejj	e
 d	d
dd  Zd!S )"TestFactorizedc                 C   sL   d}t |d }|| _t|d| |d d d fd|| | _td d S )N   r.   r0   r/   r   r?     )r   nr   tocscr;   r7   seedselfrC   dr+   r+   r,   setup_method:   s
    (zTestFactorized.setup_methodc                 C   s.   t ddd}td}td| t|| d S )Nr?   r?   rH   dtyper?           )r   r   r
   r&   )rG   r;   r<   r+   r+   r,   _check_singularA   s    zTestFactorized._check_singularc                 C   s@   d}t t||}t|}t||}tt||| d S )Nr?   )r   r7   r8   r   r!   solver
   r&   )rG   rC   r*   r<   expectedr+   r+   r,   _check_non_singularF   s
    z"TestFactorized._check_non_singularc                 C   sB   t dd ttdd |   W d    n1 s40    Y  d S )NF
useUmfpackzFactor is exactly singularmatch)r    assert_raisesRuntimeErrorrN   rG   r+   r+   r,   test_singular_without_umfpackO   s    
z,TestFactorized.test_singular_without_umfpackumfpack not availablereasonc                 C   sN   t dd t *}|td ttj| j W d    n1 s@0    Y  d S )NTrR   z,divide by zero encountered in double_scalars)r    r   filterRuntimeWarningr   umfpackZUmfpackWarningrN   )rG   supr+   r+   r,   test_singular_with_umfpackT   s    
z)TestFactorized.test_singular_with_umfpackc                 C   s   t dd |   d S NFrR   r    rQ   rX   r+   r+   r,   !test_non_singular_without_umfpack[   s    
z0TestFactorized.test_non_singular_without_umfpackc                 C   s   t dd |   d S )NTrR   rc   rX   r+   r+   r,   test_non_singular_with_umfpack_   s    
z-TestFactorized.test_non_singular_with_umfpackc                 C   sX   t dd d}tt|d* t| jd d d df  W d    n1 sJ0    Y  d S )NFrR   zcan only factor square matricesrT      )r    rV   
ValueErrorr&   r;   )rG   msgr+   r+   r,   6test_cannot_factorize_nonsquare_matrix_without_umfpackd   s    
zETestFactorized.test_cannot_factorize_nonsquare_matrix_without_umfpackc                 C   s(   t dd t| jd d d df  d S NTrR   rf   )r    r&   r;   rX   r+   r+   r,   -test_factorizes_nonsquare_matrix_with_umfpackj   s    
z<TestFactorized.test_factorizes_nonsquare_matrix_with_umfpackc                 C   s   t dd t| j}td}tdd}t| jdd}ttdd || W d    n1 sd0    Y  ttdd || W d    n1 s0    Y  ttdd || W d    n1 s0    Y  d S )	NFrR   rf   r3   	   zis of incompatible sizerT   !object too deep for desired arrayr    r&   r;   r7   r8   rC   rV   rg   )rG   rO   r<   BBBr+   r+   r,   7test_call_with_incorrectly_sized_matrix_without_umfpackp   s    


&&zFTestFactorized.test_call_with_incorrectly_sized_matrix_without_umfpackc                 C   s   t dd t| j}td}tdd}t| jdd}|| d}tt|d || W d    n1 sp0    Y  tt|d || W d    n1 s0    Y  d S )NTrR   rf   r3   rl   rm   rT   rn   )rG   rO   r<   ro   rp   rh   r+   r+   r,   4test_call_with_incorrectly_sized_matrix_with_umfpack   s    


&zCTestFactorized.test_call_with_incorrectly_sized_matrix_with_umfpackc              	   C   sn   t dd t| j}td}tjtjfD ]>}tt	dd ||
| W d    q*1 s^0    Y  q*d S )NFrR   rf   zCannot cast array datarT   )r    r&   r;   r7   r8   r6   	complex64
complex128rV   	TypeErrorastyperG   rO   r<   tr+   r+   r,   .test_call_with_cast_to_complex_without_umfpack   s    


z=TestFactorized.test_call_with_cast_to_complex_without_umfpackc                 C   sH   t dd t| j}td}tjtjfD ]}ttj	||
| q*d S rj   )r    r&   r;   r7   r8   r6   rs   rt   r   ZComplexWarningrv   rw   r+   r+   r,   +test_call_with_cast_to_complex_with_umfpack   s
    


z:TestFactorized.test_call_with_cast_to_complex_with_umfpackc                 C   s   t g d}t g d}t g d}t|||fd}td}tddd ttdd	 t| W d    n1 sx0    Y  tdd
d t|	 
|}t|jd tt||| d S )N)r0   r   r.   r   )
      r?   g?)r   r.   r0   rf   r3   r3   r3   T)rS   ZassumeSortedIndicesZUMFPACK_ERROR_invalid_matrixrT   Fr   )r6   r   r   r   r    rV   rW   r&   r!   copyrO   r   Zhas_sorted_indicesr
   )rG   Zunsorted_indsdataindptrr;   r<   rP   r+   r+   r,   test_assume_sorted_indices_flag   s    &z.TestFactorized.test_assume_sorted_indices_flagc                 C   sF   t d tdd t \}}| }t|}||}t|| | d S Ni@  TrR   )r'   r    r=   rD   r&   r
   )rG   r;   r<   fxr+   r+   r,   test_bug_8278   s    

zTestFactorized.test_bug_8278N)__name__
__module____qualname__rI   rN   rQ   rY   pytestmarkskipifhas_umfpackra   rd   re   ri   rk   rq   rr   ry   rz   r   slowr   r+   r+   r+   r,   r>   9   s.   	





r>   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	dd Z
e	dd Ze	ejje dddd Ze	dd Zdd Zdd Zdd Zejjejje dddd ZdS ) TestLinsolvec                 C   s   t dd d S rb   r    rX   r+   r+   r,   rI      s    zTestLinsolve.setup_methodc                 C   sp   t ddd}tg ddd}t &}|td t||}W d    n1 sN0    Y  tt|	   d S )NrJ   rH   rK   r.   r0   r3   rf   r?   zMatrix is exactly singular)
r   r   r   r]   r#   r   r   r6   isfiniteany)rG   r;   r<   r`   r   r+   r+   r,   test_singular   s    (zTestLinsolve.test_singularc                 C   sx   t jg dt jd}t g d}t||jfdd}t d}z"t||}tt |	   W n t
yr   Y n0 d S )N))   r   )r      )r      )r{      rK   )gkF0?gٯ`?g5?.?g?)   r   r1   r   )r6   r   Zint32r   Tr   r   r   r   r   rW   )rG   Zijvr;   r<   r   r+   r+   r,   test_singular_gh_3312   s    

z"TestLinsolve.test_singular_gh_3312c           	      C   s   t g dg dgddgdd}tg d}t| dtt| d }dD ]\}t|j}||}dD ]>}|||}t	||}t
t|||  d	| | k  qjqNd S )
Nr   )r   r?      rl   r{   r   r.   r?   r0   )r   rH   FD)ZcscZcsrr{   )r   r   r   todenser   r   epsrv   Zasformatr   r   )	rG   r;   r<   Zcond_Arx   r   formatZAspr   r+   r+   r,   test_twodiags   s     


zTestLinsolve.test_twodiagsc                 C   sV   t g dg dg dg}t|}td td}|| }t||}t|| d S )NrM         ?r   r   rM   r   rM   rM   r   rB   r3   )r   r   r7   rE   randnr   r
   )rG   AdenseAsr   r<   x2r+   r+   r,   test_bvector_smoketest   s    


z#TestLinsolve.test_bvector_smoketestc                 C   sf   t g dg dg dg}t|}td tdd}||}t|}t||}t||  d S )Nr   r   r   rB   r3   rf   )	r   r   r7   rE   r   r	   r   r
   r   )rG   r   r   r   ZBdenseZBsr   r+   r+   r,   test_bmatrix_smoketest   s    


z#TestLinsolve.test_bmatrix_smoketestc                 C   sH   t d}t d}ttt|| ttd}tddg}ttt|| d S N)r3   rf   )rf   r.   r3   r          @)r   rV   rg   r   r   r   r   rG   r;   r<   ZA2Zb2r+   r+   r,   test_non_square  s    zTestLinsolve.test_non_squarec           
      C   s   t g d}t g d}t g d}t|||ffdtd}| }t g d}t g d}t g d}t|||ffdtd}| }t||}tj||}	t|	|  d S )	N)r   r   r.   r0   r0   r0   )r   r0   r0   r   r.   r0   )r.   r0   r3   r?   r   r}   )r2   rL   )r   r   r.   r.   r   r   )r   r0   r.   r.   r   r   )r.   r.   r.   r.   r.   r.   )	r   r   floatr   r   r4   linalgrO   r
   )
rG   rowcolr   ZsMMZsNr9   ZsXXr+   r+   r,   test_example_comparison  s    
z$TestLinsolve.test_example_comparisonrZ   r[   c                 C   s  t dd tddgddgg}ddgtddgdgdggtdgdggtdgdggtdgdggtdgdggtdgdggtg dg d	gtg dg d	gtg dg d	gtg dg d	gtg dg d	gg}|D ]}tj|	 t	|}tttt
fD ]X}t|||dd
}t|||dd
}|jdkrV|jd dkrV| }tt	||t||dfd tt	||t||dfd t|r|jdkrtt|t||df tt|t||df n8tt|tjt||df tt|tjt||df |jdkrDt|j|jd f t|j|jd f nt|j|j t|j|j qqtd}td}ttt|| d S )NTrR   r   r   r0   r.   r   )r   r   g      @)g      @g       @g      $@)Zuse_umfpackFerr_msgr}   )r.   r3   )r    r   r   r   r   r   r6   r   rO   r)   r   r   ndimr2   Zravelr
   reprr   r   
isinstanceZndarrayr   rV   rg   )rG   r;   Zbsr<   r   Z	spmattypeZx1r   r+   r+   r,   test_shape_compatibility%  sL    



z%TestLinsolve.test_shape_compatibilityc                 C   sP   t ddgddgg}t ddgddgg}t ddgddgg}t|t|| d S )Nr   r   rM   g      ?g      )r   r
   r   )rG   r;   r   r<   r+   r+   r,   test_ndarray_support^  s    z!TestLinsolve.test_ndarray_supportc                 C   s:  d}t |d }t|d| |d d d fd||}ttfD ]}||}t |}dd }dd	 }d
d }dd }	||||	g}
|
D ]}d||f }tttftj	||j
||j|j|j|t|tk|d
 tttftj	||j
|j||j|j|t|tk|d
 tttftj	||j
|j|j||j|t|tk|d
 qq:d S )Nr{   r   r0   r/   r@   c                 S   s   |  dd d d S )Nr0   )repeatr   r+   r+   r,   not_c_contigo  s    z5TestLinsolve.test_gssv_badinput.<locals>.not_c_contigc                 S   s   | d d d f S r(   r+   r   r+   r+   r,   not_1dimr  s    z1TestLinsolve.test_gssv_badinput.<locals>.not_1dimc                 S   s
   |  tS r(   )rv   boolr   r+   r+   r,   bad_typeu  s    z1TestLinsolve.test_gssv_badinput.<locals>.bad_typec                 S   s   | d d S )Nr/   r+   r   r+   r+   r,   	too_shortx  s    z2TestLinsolve.test_gssv_badinput.<locals>.too_shortz%r %rr   )r   r   r   r   r6   rV   rg   ru   r$   Zgssvnnzr   indicesr   int)rG   r9   rH   r;   Zspmatrixr<   r   r   r   r   ZbadopsZbadoprh   r+   r+   r,   test_gssv_badinputf  s2    "
zTestLinsolve.test_gssv_badinputc                 C   sz   t g dg dg dg}t ddgddgddgg}t||}t|jd t|jd t|jd t|j|jddd	 d S )
N)r.   r   r   )r   r.   r   )r   r   r.   r   r.   r3   r0   g-q=)atolrtol)r   r   r   r   r   r;   )rG   Zidentr<   r   r+   r+   r,   test_sparsity_preservation  s    
z'TestLinsolve.test_sparsity_preservationc                 C   s   t jg dg dg dg}t jg dg dg dg}tg d}tg ddtg d  }t||}tt|jtj	 t||}tt|jtj
 t||}tt|jtj
 t||}tt|jtj
 d S )N)r.   r0   r   )r   r   r3   )rf   r   r?   )rf   r   y      @      ?)r.   r.   r.                 ?)r4   r5   r   r6   r   r   r   
issubdtyperL   Zfloatingcomplexfloating)rG   ZA_realZ	A_complexZb_realZ	b_complexr   r+   r+   r,   test_dtype_cast  s$     



zTestLinsolve.test_dtype_castc                 C   s8   t d tdd t \}}t||}t|| | d S r   )r'   r    r=   r   r
   )rG   r;   r<   r   r+   r+   r,   r     s
    


zTestLinsolve.test_bug_8278N)r   r   r   rI   r   r   r   r   r   sup_sparse_efficiencyr   r   r   r   r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   r      s*   


7
$r   c                   @   s   e Zd Zdd Zdd Zedd Zdd Zed	d
 Zdd Z	edd Z
dd Zdd Zdd Zdd Zejdedfedfgdd Zejjeed dddd  Zd!d" Zed#d$ Zed%d& Zejjed'd( Zd)S )*TestSpluc                 C   sR   t dd d}t|d }|| _t|d| |d d d fd||| _td d S )	NFrR   (   r.   r0   r/   r@   rB   )r    r   rC   r   r;   r7   rE   rF   r+   r+   r,   rI     s    
$zTestSplu.setup_methodc                 C   s  t |t jr"| jd| jj  }n| j}||}||}td}d dd| j| jd fD ]}d|f }|d u r~|	| j}	n|	| j|}	t |t jr|	d|j	|	j
   }	|	|}	||	}
|||	|
| ||	d}
||j|	|
| ||	d}
||j |	|
| qZd S )Nr   rB   r.   r0   zk=%rr   H)r6   r   r   r;   r   rv   r7   RandomStaterC   r8   r2   rO   Zconj)rG   ZspxlucheckrL   r;   lurngkrh   r<   r   r+   r+   r,   
_smoketest  s(    




zTestSplu._smoketestc                 C   s   |    d S r(   )_internal_test_splu_smoketestrX   r+   r+   r,   test_splu_smoketest  s    zTestSplu.test_splu_smoketestc                 C   sN   ddd}|  t|tj |  t|tj |  t|tj |  t|tj d S )N c                 S   s8   t | jj}| | }tt||  d| k | d S )Ng     @@)r6   r   rL   r   r   absmax)r;   r<   r   rh   r   rr+   r+   r,   r     s    z5TestSplu._internal_test_splu_smoketest.<locals>.check)r   )r   r!   r6   float32float64rs   rt   rG   r   r+   r+   r,   r     s
    
z&TestSplu._internal_test_splu_smoketestc                 C   s   |    d S r(   )_internal_test_spilu_smoketestrX   r+   r+   r,   test_spilu_smoketest  s    zTestSplu.test_spilu_smoketestc                    sf   g  d fdd	}|  t|tj |  t|tj |  t|tj |  t|tj tt dk d S )Nr   c                    sF   | | }t ||  }t|dk | |jtjtjfv rB | d S )N{Gz?)r   r   r   rL   r6   r   rt   append)r;   r<   r   rh   r   errerrorsr+   r,   r     s
    z6TestSplu._internal_test_spilu_smoketest.<locals>.checkgh㈵>)r   )	r   r"   r6   r   r   rs   rt   r   r   r   r+   r   r,   r     s    z'TestSplu._internal_test_spilu_smoketestc                 C   sF   t d}ddddddgg}|D ]}ttt||dt q&d S )Nr0   s
   basic,areaasciis   basics   area)Z	drop_rule)r   decoder   r   r"   r   )rG   r;   ZrulesZruler+   r+   r,   test_spilu_drop_rule  s    zTestSplu.test_spilu_drop_rulec                 C   s   t ddd}ttt| d S NrJ   rH   rK   )r   rV   rW   r!   rG   r;   r+   r+   r,   test_splu_nnz0  s    zTestSplu.test_splu_nnz0c                 C   s   t ddd}ttt| d S r   )r   rV   rW   r"   r   r+   r+   r,   test_spilu_nnz0  s    zTestSplu.test_spilu_nnz0c                 C   s   d}t d}|||}d||dk < d|d d df< t|}ttt| |dt| 7 }t|}t|}t|}|	|}t
t||| d S )N   r   r   ffffff?rf   )r7   r   r8   r   rV   rW   r!   r   r   rO   r   r	   )rG   rC   r   r*   a_r   r<   r   r+   r+   r,   test_splu_basic  s    

zTestSplu.test_splu_basicc                 C   s   d}t  ||f}d||dk < |dt| 7 }t|}t|}|j|jfD ]:}tt|dk tt||k  tt	t
|t	| qJ||j }t|}t|}t|j|j d S )Nr   r   r   rf   r/   )r7   r   r   r!   perm_rperm_cr   r   r   lenr   r   r   )rG   rC   r*   r   r   permr+   r+   r,   test_splu_perm.  s    
zTestSplu.test_splu_permzsplu_fun, rtolgHz>皙?c                 C   s   t jd d}d}tj|||}t j|}||d tj| 7 }t|}|| }||}	tt 	|	j
t |k ||dd}	t|	j
t | |	|}
t||
|d d S )N*   i  r   r.   ZNATURAL)Z
permc_spec)r   )r6   r7   rE   r4   r5   r8   r   r   r   r   r   r   r   rO   r   )rG   Zsplu_funr   rC   pr;   r   ZA_r<   r   r   r+   r+   r,   test_natural_permcE  s    
zTestSplu.test_natural_permcgetrefcountzno sys.getrefcountr[   c                 C   s   d}t  ||f}d||dk < |dt| 7 }t|}t|}t|}dD ]4}t||}tt||d  ~tt|| qLd S )Nr   r   r   rf   )r   r   r.   )r7   r   r   r!   sysr   getattrr   )rG   rC   r*   r   r   Zrcattrr   r+   r+   r,   test_lu_refcount^  s    

zTestSplu.test_lu_refcountc                 C   s   | j  }ttt|d d d df  ttt|d d d df  t|t|fD ]}td}tdd}t| jdd}tt|j	| tt|j	| tt|j	| tt
|j	|tj tt
|j	|tj qRd S )Nrf   r   r3   rl   )r;   rD   rV   rg   r!   r"   r7   r8   rC   rO   ru   rv   r6   rs   rt   )rG   r;   r   r<   ro   rp   r+   r+   r,   test_bad_inputsq  s     



zTestSplu.test_bad_inputsc                 C   sr   d}t |d }t|d| |d d d fd||}|t j}t| |d|  }|j}tt |	   d S )Nr   r.   r0   r/   r@   r   )
r6   r   r   rv   r   r"   r;   r   Zisnanr   )rG   rC   rH   r;   ro   r+   r+   r,   test_superlu_dlamch_i386_nan  s    "z%TestSplu.test_superlu_dlamch_i386_nanc                    sR   d fdd	}|t j |t j |t j |t j |t jd |t jd d S )NFc                    s    j | }|r|d|j  }|jd }t|}t||f}d|t||jf< t||f}d||j	t|f< |
 }|||}|j|j 
 }	t| j}
t||	d|
 d d S )Nr   r   r.   d   )r   )r;   rv   r   r2   r!   r6   zerosr   r   r   r)   r	   LUr   r   r   )rL   Z	complex_2r;   rC   r   ZPcZPrZAdZlhsZrhsr   rX   r+   r,   r     s    
z$TestSplu.test_lu_attr.<locals>.checkT)F)r6   r   r   rs   rt   r   r+   rX   r,   test_lu_attr  s    



zTestSplu.test_lu_attrc                    s^   g   fddfddt dD }|D ]}|  q,|D ]}|  q>tt d d S )Nc                      s>   z&        d W n ty8   Y n0 d S )NT)r   r   r   r   	Exceptionr+   )oksrG   r+   r,   worker  s    z.TestSplu.test_threads_parallel.<locals>.workerc                    s   g | ]}t j d qS ))target)	threadingZThread).0r   )r  r+   r,   
<listcomp>  s   z2TestSplu.test_threads_parallel.<locals>.<listcomp>r   )rangestartjoinr   r   )rG   Zthreadsrx   r+   )r  rG   r  r,   test_threads_parallel  s    	


zTestSplu.test_threads_parallelN)r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   Zparametrizer!   r"   r   r   hasattrr  r  r  r  r  r   r  r+   r+   r+   r,   r     s4   !






"r   c                   @   sH   e Zd Zdd Zdd Zedd Zedd Zej	j
ed	d
 ZdS )TestSpsolveTriangularc                 C   s   t dd d S rb   r   rX   r+   r+   r,   rI     s    z"TestSpsolveTriangular.setup_methodc                 C   s>   d}t ||f}t|}dD ]}ttjjt|||d qd S )Nr?   TFlower)r   r6   r   rV   r4   r   ZLinAlgErrorr%   )rG   rC   r;   r<   r  r+   r+   r,   r     s
    
z#TestSpsolveTriangular.test_singularc                 C   sJ   t d}td}ttt|| ttd}tddg}ttt|| d S r   )	r6   r  r   rV   rg   r%   r   r   r   r   r+   r+   r,   test_bad_shape  s    
z$TestSpsolveTriangular.test_bad_shapec                 C   s^   t ddgddgg}t ddgddgg}t ttfD ]&}t|||dd}t||| q2d S )Nr   rM   r   Tr  )r   r   r   r%   r
   r	   )rG   r;   r<   Zmatrix_typer   r+   r+   r,   test_input_types  s
    z&TestSpsolveTriangular.test_input_typesc                 C   s   ddd}t jd dD ]}dD ]}|||d}dD ]}t j||t jd	d
||ft jd	d
||ft jd	d
||fd  fD ]L}t|||d}t||| t|||dd}|d t||| qq6q"qd S )NTc                 S   sf   t jj| | ddd}|r&t j|}nt j|}|jdd}t| D ]}tj d |||f< qF|S )Nr   Zcoo)Zdensityr   F)r~   r.   )	r4   r5   r7   ZtrilZtriuZtocsrr  r6   r8   )rC   r  r;   ir+   r+   r,   random_triangle_matrix  s    zATestSpsolveTriangular.test_random.<locals>.random_triangle_matrixrB   r  )r{   r  i  r  )r.   r{   irl   r   )r  Zunit_diagonalr.   )T)	r6   r7   rE   r8   Zrandintr%   r
   r	   Zsetdiag)rG   r  r  rC   r;   mr<   r   r+   r+   r,   test_random  s&    

z!TestSpsolveTriangular.test_randomN)r   r   r   rI   r   r   r  r  r   r   r   r!  r+   r+   r+   r,   r    s   


r  )Ar  r  Znumpyr6   r   r   r   r   r   r   r   r	   Znumpy.randomr7   Znumpy.testingr
   r   r   r   r   r   r   r   r   r   rV   Zscipy.linalgr4   r   r   Zscipy.sparser   r   r   r   r   r   r   r   r   Zscipy.sparse.linalgr   Zscipy.sparse.linalg.dsolver   r    r!   r"   r#   r$   r%   r&   Zscipy._lib._testutilsr'   r   r]   Zscikits.umfpackr_   r   ImportErrorr)   r=   r>   r   r   r  r+   r+   r+   r,   <module>   s>   ((,(

 	 u  