3
Od4g                 @   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j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 Z5e5j6e  yd dl7j8Z8d
Z9W n e:k
rN   dZ9Y nX dd Z;dd Z<G dd de=Z>G dd de=Z?G dd de=Z@G dd de=ZAd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| j S | S d S )N)r   toarray)a r*   b/var/www/html/virt/lib64/python3.6/site-packages/scipy/sparse/linalg/dsolve/tests/test_linsolve.pyr(   %   s    r(   c              C   s   d} d|  }t jjddd	gd
ddg| d | d fd|d  }t jj| d }t jj|t jj||t jj|t jj|| t jj|t jj|| }tjj| d d }||fS )N         r   )shape   @   r2   r2   )scipysparseZdiagsr   Zkronnprandomrand)NhZAh1DZeyeNAbr*   r*   r+   setup_bug_8278,   s    H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	||j | _tjd d S )
N   r.   r,   r0   r   i  r2   )r?   r   r>   )r   nr   tocscr:   r6   seed)selfr@   dr*   r*   r+   setup_method:   s
    (zTestFactorized.setup_methodc             C   s.   t ddd}td}td| t|| d S )Nr>   rD   )dtypeg        )r>   r>   )r   r   r
   r&   )rC   r:   r;   r*   r*   r+   _check_singularA   s    zTestFactorized._check_singularc             C   s@   d}t tj||}t|}t|j|}tt||| d S )Nr>   )r   r6   r7   r   r!   solver
   r&   )rC   r@   r)   r;   expectedr*   r*   r+   _check_non_singularF   s
    z"TestFactorized._check_non_singularc          	   C   s.   t dd ttdd | j  W d Q R X d S )NF)
useUmfpackzFactor is exactly singular)match)r    assert_raisesRuntimeErrorrG   )rC   r*   r*   r+   test_singular_without_umfpackO   s    
z,TestFactorized.test_singular_without_umfpackzumfpack not available)reasonc          
   C   s:   t dd t  }|jtd ttj| j W d Q R X d S )NT)rK   z,divide by zero encountered in double_scalars)r    r   filterRuntimeWarningr   umfpackZUmfpackWarningrG   )rC   supr*   r*   r+   test_singular_with_umfpackT   s    
z)TestFactorized.test_singular_with_umfpackc             C   s   t dd | j  d S )NF)rK   )r    rJ   )rC   r*   r*   r+   !test_non_singular_without_umfpack[   s    
z0TestFactorized.test_non_singular_without_umfpackc             C   s   t dd | j  d S )NT)rK   )r    rJ   )rC   r*   r*   r+   test_non_singular_with_umfpack_   s    
z-TestFactorized.test_non_singular_with_umfpackc             C   sD   t dd d}tt|d  t| jd d d df  W d Q R X d S )NF)rK   zcan only factor square matrices)rL      )r    rM   
ValueErrorr&   r:   )rC   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 )NT)rK   rX   )r    r&   r:   )rC   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jd}tjdd}tj| jdd}ttdd || W d Q R X ttdd || W d Q R X ttdd || W d Q R X d S )	NF)rK   rX   r0   	   zis of incompatible size)rL   z!object too deep for desired array)r    r&   r:   r6   r7   r@   rM   rY   )rC   rH   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jd}tjdd}tj| jdd}|| d}tt|d || W d Q R X tt|d || W d Q R X d S )NT)rK   rX   r0   r]   z!object too deep for desired array)rL   )r    r&   r:   r6   r7   r@   rM   rY   )rC   rH   r;   r^   r_   rZ   r*   r*   r+   4test_call_with_incorrectly_sized_matrix_with_umfpack   s    


zCTestFactorized.test_call_with_incorrectly_sized_matrix_with_umfpackc             C   s^   t dd t| j}tjd}x:tjtjgD ]*}tt	dd ||j
| W d Q R X q,W d S )NF)rK   rX   zCannot cast array data)rL   )r    r&   r:   r6   r7   r5   	complex64
complex128rM   	TypeErrorastype)rC   rH   r;   tr*   r*   r+   .test_call_with_cast_to_complex_without_umfpack   s    


z=TestFactorized.test_call_with_cast_to_complex_without_umfpackc             C   sL   t dd t| j}tjd}x(tjtjgD ]}ttj	||j
| q,W d S )NT)rK   rX   )r    r&   r:   r6   r7   r5   rb   rc   r   ZComplexWarningre   )rC   rH   r;   rf   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 jddddg}t jddddg}t jddddg}t|||fd}td	}td
d
d ttdd t| W d Q R X td
dd t|j	 j
|}t|jd tt||| d S )Nr,   r   r.   
      r>   g?rX   r0   T)rK   ZassumeSortedIndicesZUMFPACK_ERROR_invalid_matrix)rL   F)r0   r0   )r5   r   r   r   r    rM   rN   r&   r!   copyrH   r   Zhas_sorted_indicesr
   )rC   Zunsorted_indsdataindptrr:   r;   rI   r*   r*   r+   test_assume_sorted_indices_flag   s    
z.TestFactorized.test_assume_sorted_indices_flagc             C   sF   t d tdd t \}}|j }t|}||}t|| | d S )Ni@  T)rK   )r'   r    r<   rA   r&   r
   )rC   r:   r;   fxr*   r*   r+   test_bug_8278   s    

zTestFactorized.test_bug_8278N)__name__
__module____qualname__rE   rG   rJ   rO   pytestmarkskipifhas_umfpackrU   rV   rW   r[   r\   r`   ra   rg   rh   rn   slowrq   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 )NF)rK   )r    )rC   r*   r*   r+   rE      s    zTestLinsolve.setup_methodc          
   C   sb   t d	dd}tdddddgdd}t }|jtd t||}W d Q R X ttj|j	   d S )
Nr>   rD   )rF   r.   r,   r0   rX   zMatrix is exactly singular)r>   r>   )
r   r   r   rQ   r#   r   r   r5   isfiniteany)rC   r:   r;   rT   rp   r*   r*   r+   test_singular   s    zTestLinsolve.test_singularc             C   s   t jddddgt jd}t jdd	d
dg}t||jfdd}t jd}y"t||}tt j|j	   W n t
k
r|   Y nX d S )N   r   r-      ri      )rF   gkF0?gٯ`?g5?.?g?   )r/   )r~   r   )r~   r-   )r~   r   )ri   r   )r   r   )r5   r   Zint32r   Tr   r   r   r{   r|   rN   )rC   Zijvr:   r;   rp   r*   r*   r+   test_singular_gh_3312   s    

z"TestLinsolve.test_singular_gh_3312c       	      C   s   t dddddgddddd	ggd
dgdd}tdddddg}t|j dtt|j d }xhdD ]`}t|j}|j|}xFdD ]>}|j|j|}t	||}t
t|||  d	| | k  qW qbW d S )Nr.   r,   r0   rX   r>   r-      r]   ri   r   ro   rD   FDcsccsr)ro   rD   r   r   )r   r   )r   r   r   todenser   r   epsre   Zasformatr   r   )	rC   r:   r;   Zcond_Arf   r   formatZAsprp   r*   r*   r+   test_twodiags   s    * 




zTestLinsolve.test_twodiagsc             C   s\   t dddgdddgdddgg}t|}tjd tjd}|| }t||}t|| d S )Ng        g      ?i  r0   )r   r   r6   rB   randnr   r
   )rC   AdenseAsrp   r;   x2r*   r*   r+   test_bvector_smoketest   s    



z#TestLinsolve.test_bvector_smoketestc             C   sl   t dddgdddgdddgg}t|}tjd tjdd}|j|}t|}t||}t||j  d S )Ng        g      ?i  r0   rX   )	r   r   r6   rB   r   r	   r   r
   r   )rC   r   r   rp   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 )Nr0   rX   r.   g      ?g       @)r0   rX   )rX   r.   )r   rM   rY   r   r   r   r   )rC   r:   r;   A2b2r*   r*   r+   test_non_square  s    zTestLinsolve.test_non_squarec       
      C   s   t ddddddg}t ddddddg}t dddd	ddg}t|||ffd
td}|j }t ddddddg}t ddddddg}t ddddddg}t|||ffdtd}|j }t||}tjj||}	t|	|j  d S )Nr   r.   r,   r0   rX   r>   r-   )r/   rF   )r0   r0   )r0   r0   )	r   r   floatr   r   r3   linalgrH   r
   )
rC   rowcolrl   ZsMMZsNr8   ZsXXr*   r*   r+   test_example_comparison  s    
z$TestLinsolve.test_example_comparisonzumfpack not available)rP   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ddd	gd
ddggtddd	gd
ddggtddd	gd
ddggtddd	gd
ddggtddd	gd
ddggg}x|D ]}tjj|j	 t	|}xjtttt
gD ]X}t|||dd}t|||dd}|jdkrr|jd dkrr|j }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r`t|j|jd f t|j|jd f nt|j|j t|j|j q$W qW td}td}ttt|| d S )NT)rK   g      ?r   r,   r.   r-   g       @g      @g      @g       @g      $@)Zuse_umfpackF)err_msgr0   )r0   r0   )r.   r0   )r    r   r   r   r   r   r5   r   rH   r(   r   r   ndimr/   Zravelr
   reprr   r   
isinstanceZndarrayr   rM   rY   )rC   r:   bsr;   rp   Z	spmattypex1r   r*   r*   r+   test_shape_compatibility%  sJ    


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 )Ng      ?g       @g        g      ?g      )r   r
   r   )rC   r:   rp   r;   r*   r*   r+   test_ndarray_support^  s    z!TestLinsolve.test_ndarray_supportc             C   sD  d}t |d }t|d| |d d d fd||}x
ttfD ]}||}tj |}dd	 }d
d }dd }dd }	||||	g}
x|
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
 qW q>W d S )Nri   g      ?r,   r.   r0   r   r>   c             S   s   | j dd d d S )Nr,   )repeat)rp   r*   r*   r+   not_c_contigo  s    z5TestLinsolve.test_gssv_badinput.<locals>.not_c_contigc             S   s   | d d d f S )Nr*   )rp   r*   r*   r+   not_1dimr  s    z1TestLinsolve.test_gssv_badinput.<locals>.not_1dimc             S   s
   | j tS )N)re   bool)rp   r*   r*   r+   bad_typeu  s    z1TestLinsolve.test_gssv_badinput.<locals>.bad_typec             S   s   | d d S )Nr.   r2   r*   )rp   r*   r*   r+   	too_shortx  s    z2TestLinsolve.test_gssv_badinput.<locals>.too_shortz%r %r)r   r2   r?   )r?   r   r>   )r   r   r   r   r5   rM   rY   rd   r$   Zgssvnnzrl   indicesrm   int)rC   r8   rD   r:   Zspmatrixr;   r   r   r   r   ZbadopsZbadoprZ   r*   r*   r+   test_gssv_badinputf  s,    "

zTestLinsolve.test_gssv_badinputc             C   s   t dddgdddgdddg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 )Nr.   r   r0   r,   g-q=)atolrtol)r   r   r   r   r   r:   )rC   identr;   rp   r*   r*   r+   test_sparsity_preservation  s    
z'TestLinsolve.test_sparsity_preservationc             C   s   t jjdddgdddgdddgg}t jjdddgdddgdddgg}tjdddg}tjdddgdtjdddg  }t||}ttj|jtj	 t||}ttj|jtj
 t||}ttj|jtj
 t||}ttj|jtj
 d S )	Nr.   r,   r   r0   rX   r>   y              ?y      @      ?)r3   r4   r   r5   r   r   r   
issubdtyperF   Zfloatingcomplexfloating)rC   ZA_realZ	A_complexZb_realZ	b_complexrp   r*   r*   r+   test_dtype_cast  s     $



zTestLinsolve.test_dtype_castc             C   s8   t d tdd t \}}t||}t|| | d S )Ni@  T)rK   )r'   r    r<   r   r
   )rC   r:   r;   rp   r*   r*   r+   rq     s
    


zTestLinsolve.test_bug_8278N)rr   rs   rt   rE   r}   r   r   r   r   sup_sparse_efficiencyr   r   ru   rv   rw   rx   r   r   r   r   r   ry   rq   r*   r*   r*   r+   rz      s    8$rz   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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jd	 d S )NF)rK   (   r.   r,   r0   r   r>   i  r2   r?   )r?   r   r>   )r    r   r@   r   r:   r6   rB   )rC   r@   rD   r*   r*   r+   rE     s    
$zTestSplu.setup_methodc             C   s  t j|t jr"| jd| jj  }n| j}|j|}||}tjd}xd dd| j| jd gD ]}d|f }|d kr|j	| j}	n|j	| j|}	t j|t jr|	d|j	|	j
   }	|	j|}	|j|	}
|||	|
| |j|	d}
||j|	|
| |j|	d}
||jj |	|
| q\W d S )Ny              ?i  r.   r,   zk=%rr   H)r5   r   r   r:   r   re   r6   RandomStater@   r7   r/   rH   Zconj)rC   ZspxlucheckrF   r:   lurngkrZ   r;   rp   r*   r*   r+   
_smoketest  s(    




zTestSplu._smoketestc             C   s   | j   d S )N)_internal_test_splu_smoketest)rC   r*   r*   r+   test_splu_smoketest  s    zTestSplu.test_splu_smoketestc             C   sN   ddd}| j t|tj | j t|tj | j t|tj | j t|tj d S )N c             S   s8   t j| jj}| | }tt|| j d| k | d S )Ng     @@)r5   r   rF   r   r   absmax)r:   r;   rp   rZ   r   rr*   r*   r+   r     s    z5TestSplu._internal_test_splu_smoketest.<locals>.check)r   )r   r!   r5   float32float64rb   rc   )rC   r   r*   r*   r+   r     s
    
z&TestSplu._internal_test_splu_smoketestc             C   s   | j   d S )N)_internal_test_spilu_smoketest)rC   r*   r*   r+   test_spilu_smoketest  s    zTestSplu.test_spilu_smoketestc                sf   g  d fdd	}| j t|tj | j t|tj | j t|tj | j t|tj tt dk d S )Nr   c                sF   | | }t || j }t|dk | |jtjtjfkrB j| d S )Ng{Gz?)r   r   r   rF   r5   r   rc   append)r:   r;   rp   rZ   r   err)errorsr*   r+   r     s
    z6TestSplu._internal_test_spilu_smoketest.<locals>.checkgh㈵>)r   )	r   r"   r5   r   r   rb   rc   r   r   )rC   r   r*   )r   r+   r     s    z'TestSplu._internal_test_spilu_smoketestc             C   sJ   t d}djddddjdgg}x"|D ]}ttt||dt q(W d S )Nr,   s
   basic,areaasciis   basics   area)Z	drop_rule)r   decoder   r   r"   r   )rC   r:   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 )Nr>   rD   )rF   )r>   r>   )r   rM   rN   r!   )rC   r:   r*   r*   r+   test_splu_nnz0  s    zTestSplu.test_splu_nnz0c             C   s   t ddd}ttt| d S )Nr>   rD   )rF   )r>   r>   )r   rM   rN   r"   )rC   r:   r*   r*   r+   test_spilu_nnz0  s    zTestSplu.test_spilu_nnz0c             C   s   d}t jd}|j||}d||dk < d|d d df< t|}ttt| |dt| 7 }t|}t|}t|}|j	|}t
t||| d S )N   r   r   gffffff?rX   )r6   r   r7   r   rM   rN   r!   r   r   rH   r   r	   )rC   r@   r   r)   a_r   r;   rp   r*   r*   r+   test_splu_basic  s    

zTestSplu.test_splu_basicc             C   s   d}t j ||f}d||dk < |dt| 7 }t|}t|}xJ|j|jfD ]:}tt|dk tt||k  tt	t
|t	| qLW ||j }t|}t|}t|j|j d S )Nr   r   gffffff?rX   r.   r2   )r6   r   r   r!   perm_rperm_cr   r   r   lenr   r   r   )rC   r@   r)   r   r   permr*   r*   r+   test_splu_perm.  s    
zTestSplu.test_splu_permzsplu_fun, rtolgHz>g?c             C   s   t jjd d}d}tjj|||}t jj|}||d tjj| 7 }t|}|| }||}	tt j	|	j
t j|k ||dd}	t|	j
t j| |	j|}
t||
|d d S )N*   i  g{Gz?r.   ZNATURAL)Z
permc_spec)r   )r5   r6   rB   r3   r4   r7   r   r   r   r|   r   r   r   rH   r   )rC   Zsplu_funr   r@   pr:   rp   ZA_r;   r   r   r*   r*   r+   test_natural_permcE  s    
zTestSplu.test_natural_permcgetrefcountzno sys.getrefcount)rP   c             C   s   d}t j ||f}d||dk < |dt| 7 }t|}t|}tj|}x<dD ]4}t||}ttj||d  ~ttj|| qNW d S )	Nr   r   gffffff?rX   r   r   r.   )r   r   )r6   r   r   r!   sysr   getattrr   )rC   r@   r)   r   r   rcattrr   r*   r*   r+   test_lu_refcount^  s    


zTestSplu.test_lu_refcountc             C   s   | j j }ttt|d d d df  ttt|d d d df  xt|t|gD ]}tjd}tjdd}tj| jdd}tt|j	| tt|j	| tt|j	| tt
|j	|jtj tt
|j	|jtj qTW d S )NrX   r   r0   r]   )r:   rA   rM   rY   r!   r"   r6   r7   r@   rH   rd   re   r5   rb   rc   )rC   r:   r   r;   r^   r_   r*   r*   r+   test_bad_inputsq  s    

zTestSplu.test_bad_inputsc             C   sr   d}t j|d }t|d| |d d d fd
||}|jt j}t| |d|  }|j}tt j|j	   d S )Nr   r.   r,   r0   r   r>   y              ?r2   r?   )r?   r   r>   )
r5   r   r   re   r   r"   r:   r   isnanr|   )rC   r@   rD   r:   r^   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 j| }|r|d|j  }|jd }t|}tj||f}d|tj||jf< tj||f}d||j	tj|f< |j
 }|j|j|}|j|j j
 }	tj| j}
t||	d|
 d d S )Ny              ?r   r.   d   )r   )r:   re   r   r/   r!   r5   zerosr   r   r   r(   r	   LUr   r   r   )rF   Z	complex_2r:   r@   r   ZPcZPrZAdlhsrhsr   )rC   r*   r+   r     s    
z$TestSplu.test_lu_attr.<locals>.checkT)F)r5   r   r   rb   rc   )rC   r   r*   )rC   r+   test_lu_attr  s    



zTestSplu.test_lu_attrc                sf   g   fddfddt dD }x|D ]}|j  q.W x|D ]}|j  qDW tt d d S )Nc                  s@   y&j   j  j   jd W n tk
r:   Y nX d S )NT)r   r   r   r   	Exceptionr*   )oksrC   r*   r+   worker  s    z.TestSplu.test_threads_parallel.<locals>.workerc                s   g | ]}t j d qS ))target)	threadingThread).0r   )r   r*   r+   
<listcomp>  s   z2TestSplu.test_threads_parallel.<locals>.<listcomp>r   )rangestartjoinr   r   )rC   threadsrf   r*   )r   rC   r   r+   test_threads_parallel  s    	


zTestSplu.test_threads_parallelN)rr   rs   rt   rE   r   r   r   r   r   r   r   r   r   r   r   ru   rv   Zparametrizer!   r"   r   rw   hasattrr   r   r   r   r   ry   r   r*   r*   r*   r+   r     s$   !" #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 )NF)rK   )r    )rC   r*   r*   r+   rE     s    z"TestSpsolveTriangular.setup_methodc             C   sB   d}t ||f}tj|}x"dD ]}ttjjt|||d q W d S )Nr>   TF)lower)TF)r   r5   r   rM   r3   r   ZLinAlgErrorr%   )rC   r@   r:   r;   r   r*   r*   r+   r}     s
    

z#TestSpsolveTriangular.test_singularc             C   sJ   t jd}td}ttt|| ttd}tddg}ttt|| d S )Nr0   rX   r.   g      ?g       @)r0   rX   )rX   r.   )	r5   r   r   rM   rY   r%   r   r   r   )rC   r:   r;   r   r   r*   r*   r+   test_bad_shape  s    
z$TestSpsolveTriangular.test_bad_shapec             C   sb   t ddgddgg}t ddgddgg}x4t ttfD ]&}t|||dd}t|j|| q4W d S )Ng      ?g        g       @T)r   )r   r   r   r%   r
   r	   )rC   r:   r;   Zmatrix_typerp   r*   r*   r+   test_input_types  s
    z&TestSpsolveTriangular.test_input_typesc             C   s   ddd}t jjd xdD ]}xdD ]}|||d	}xdD ]}xt jj||t jjdd||ft jjdd||ft jjdd||fd  fD ]L}t|||d	}t|j|| t|||dd}|jd
 t|j|| qW q<W q&W qW d S )NTc             S   sj   t jj| | ddd}|r&t jj|}nt jj|}|jdd}x&t| D ]}tjj d |||f< qHW |S )Ng?Zcoo)Zdensityr   F)rk   r.   )	r3   r4   r6   ZtrilZtriuZtocsrr   r5   r7   )r@   r   r:   ir*   r*   r+   random_triangle_matrix  s    zATestSpsolveTriangular.test_random.<locals>.random_triangle_matrixi  Fri   r,   r0   )r   r.   r]   y              ?)r   Zunit_diagonal)T)TFr     )ri   r   r  )r.   ri   iii)	r5   r6   rB   r7   randintr%   r
   r	   Zsetdiag)rC   r  r   r@   r:   mr;   rp   r*   r*   r+   test_random  s     



 
z!TestSpsolveTriangular.test_randomN)rr   rs   rt   rE   r}   r   r   r  ru   rv   ry   r  r*   r*   r*   r+   r     s   r   )Br   r   Znumpyr5   r   r   r   r   r   r   r   r	   Znumpy.randomr6   Znumpy.testingr
   r   r   r   r   r   r   r   ru   r   rM   Zscipy.linalgr3   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   rQ   Zscikits.umfpackrS   rx   ImportErrorr(   r<   objectr=   rz   r   r   r*   r*   r*   r+   <module>   s>   (
(,(


 	 u  