o
    5ήcFj                     @   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:y   dZ9Y nw 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 N)r   toarray)a r+   V/tmp/pip-target-vg8gfxp4/lib/python/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sparsediagsr   kronnprandomrand)NhAh1DeyeNAbr+   r+   r,   setup_bug_8278,   s   rA   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   rC     )r   nr   tocscr?   r9   seedselfrG   dr+   r+   r,   setup_method:   s
   (zTestFactorized.setup_methodc                 C   s.   t ddd}td}td| t|| d S )NrC   rC   rL   dtyperC           )r   r   r
   r&   )rK   r?   r@   r+   r+   r,   _check_singularA   s   zTestFactorized._check_singularc                 C   s@   d}t t||}t|}t||}tt||| d S )NrC   )r   r9   r:   r   r!   solver
   r&   )rK   rG   r*   r@   expectedr+   r+   r,   _check_non_singularF   s
   z"TestFactorized._check_non_singularc                 C   sD   t dd ttdd |   W d    d S 1 sw   Y  d S )NF
useUmfpackzFactor is exactly singularmatch)r    assert_raisesRuntimeErrorrR   rK   r+   r+   r,   test_singular_without_umfpackO   s   

"z,TestFactorized.test_singular_without_umfpackumfpack not availablereasonc                 C   sP   t dd t }|td ttj| j W d    d S 1 s!w   Y  d S )NTrV   z,divide by zero encountered in double_scalars)r    r   filterRuntimeWarningr   umfpackUmfpackWarningrR   )rK   supr+   r+   r,   test_singular_with_umfpackT   s
   
"z)TestFactorized.test_singular_with_umfpackc                 C      t dd |   d S NFrV   r    rU   r\   r+   r+   r,   !test_non_singular_without_umfpack[   s   
z0TestFactorized.test_non_singular_without_umfpackc                 C   rg   )NTrV   ri   r\   r+   r+   r,   test_non_singular_with_umfpack_   s   
z-TestFactorized.test_non_singular_with_umfpackc                 C   sZ   t dd d}tt|d t| jd d d df  W d    d S 1 s&w   Y  d S )NFrV   zcan only factor square matricesrX      )r    rZ   
ValueErrorr&   r?   )rK   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 NTrV   rl   )r    r&   r?   r\   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 s2w   Y  ttdd || W d    n1 sLw   Y  ttdd || W d    d S 1 sgw   Y  d S )	NFrV   rl   r3   	   zis of incompatible sizerX   !object too deep for desired arrayr    r&   r?   r9   r:   rG   rZ   rm   )rK   rS   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 s8w   Y  tt|d || W d    d S 1 sSw   Y  d S )NTrV   rl   r3   rr   rs   rX   rt   )rK   rS   r@   ru   rv   rn   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    n1 s/w   Y  qd S )NFrV   rl   zCannot cast array datarX   )r    r&   r?   r9   r:   r8   	complex64
complex128rZ   	TypeErrorastyperK   rS   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 rp   )r    r&   r?   r9   r:   r8   ry   rz   r   ComplexWarningr|   r}   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 s<w   Y  tdd
d t|	 
|}t|jd tt||| d S )N)r0   r   r.   r   )
      rC   g?)r   r.   r0   rl   r3   r3   r3   T)rW   assumeSortedIndicesUMFPACK_ERROR_invalid_matrixrX   Fr   )r8   r   r   r   r    rZ   r[   r&   r!   copyrS   r   has_sorted_indicesr
   )rK   unsorted_indsdataindptrr?   r@   rT   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@  TrV   )r'   r    rA   rH   r&   r
   )rK   r?   r@   fxr+   r+   r,   test_bug_8278   s   

zTestFactorized.test_bug_8278N)__name__
__module____qualname__rM   rR   rU   r]   pytestmarkskipifhas_umfpackrf   rj   rk   ro   rq   rw   rx   r   r   r   slowr   r+   r+   r+   r,   rB   9   s0    	





rB   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      t dd d S rh   r    r\   r+   r+   r,   rM         zTestLinsolve.setup_methodc                 C   sp   t ddd}tg ddd}t }|td t||}W d    n1 s'w   Y  tt|	   d S )NrN   rL   rO   r.   r0   r3   rl   rC   Matrix is exactly singular)
r   r   r   ra   r#   r   r   r8   isfiniteany)rK   r?   r@   re   r   r+   r+   r,   test_singular   s   zTestLinsolve.test_singularc                 C   s   t jg dt jd}t g d}t||jfdd}t d}z*t }|td t	||}W d    n1 s9w   Y  t 
| rGJ W d S  tyS   Y d S w )N))   r   )r      )r      )r      rO   )gkF0?gٯ`?g5?.?g?)   r   r1   r   r   )r8   r   int32r   Tr   r   ra   r#   r   r   r   r[   )rK   ijvr?   r@   re   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  q5q'd S )
Nr   )r   rC      rr   r   r   r.   rC   r0   )r   rL   FD)csccsrr   )r   r   r   r)   r   r   epsr|   asformatr   r   )	rK   r?   r@   cond_Ar~   r   format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rQ         ?r   r   rQ   r   rQ   rQ   r   rF   r3   )r   r   r9   rI   randnr   r
   )rK   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   rF   r3   rl   )	r   r   r9   rI   r   r	   r   r
   r)   )rK   r   r   r   Bdense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   rl   )rl   r.   r3   r          @)r   rZ   rm   r   r   r   r   rK   r?   r@   A2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   rC   r   r   )r2   rP   )r   r   r.   r.   r   r   )r   r0   r.   r.   r   r   )r.   r.   r.   r.   r.   r.   )	r   r   floatr)   r   r4   linalgrS   r
   )
rK   rowcolr   sMMsNr;   sXXr+   r+   r,   test_example_comparison  s   
z$TestLinsolve.test_example_comparisonr^   r_   c                 C   sz  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 ]}t|||dd
}t|||dd
}|jdkr|jd dkr| }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 nt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 qt|j|j t|j|j qqptd}td}ttt|| d S )NTrV   r   r   r0   r.   r   r   r   g      @)g      @g       @g      $@)use_umfpackFerr_msgr   )r.   r3   )r    r   r   r   r   r   r8   r   rS   r)   r   r   ndimr2   ravelr
   reprr   r   
isinstancendarrayr   rZ   rm   )rK   r?   bsr@   r   	spmattypex1r   r+   r+   r,   test_shape_compatibility'  sN   


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   rQ   g      ?g      )r   r
   r   )rK   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 ]Y}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
 q@qd S )Nr   r   r0   r/   rD   c                 S   s   |  dd d d S )Nr0   )repeatr   r+   r+   r,   not_c_contigq  s   z5TestLinsolve.test_gssv_badinput.<locals>.not_c_contigc                 S   s   | d d d f S r(   r+   r   r+   r+   r,   not_1dimt  s   z1TestLinsolve.test_gssv_badinput.<locals>.not_1dimc                 S   s
   |  tS r(   )r|   boolr   r+   r+   r,   bad_typew  s   
z1TestLinsolve.test_gssv_badinput.<locals>.bad_typec                 S   s   | d d S )Nr/   r+   r   r+   r+   r,   	too_shortz  s   z2TestLinsolve.test_gssv_badinput.<locals>.too_shortz%r %rr   )r   r   r   r   r8   rZ   rm   r{   r$   gssvnnzr   indicesr   int)rK   r;   rL   r?   spmatrixr@   r   r   r   r   badopsbadoprn   r+   r+   r,   test_gssv_badinputh  s6   "
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?   )rK   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   )rl   r   rC   )rl   r   y      @      ?)r.   r.   r.                 ?)r4   r5   r   r8   r   r   r   
issubdtyperP   floatingcomplexfloating)rK   A_real	A_complexb_real	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    rA   r   r
   )rK   r?   r@   r   r+   r+   r,   r     s
   


zTestLinsolve.test_bug_8278N)r   r   r   rM   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 )	NFrV   (   r.   r0   r/   rD   rF   )r    r   rG   r   r?   r9   rI   rJ   r+   r+   r,   rM     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 ]Y}d|f }|d u r?|	| j}	n|	| j|}	t |t jrW|	d|j	|	j
   }	|	|}	||	}
|||	|
| ||	d}
||j|	|
| ||	d}
||j |	|
| q-d S )Nr   rF   r.   r0   zk=%rr   H)r8   r   r   r?   r   r|   r9   RandomStaterG   r:   r2   rS   conj)rK   spxlucheckrP   r?   lurngkrn   r@   r   r+   r+   r,   
_smoketest  s*   




zTestSplu._smoketestc                 C      |    d S r(   )_internal_test_splu_smoketestr\   r+   r+   r,   test_splu_smoketest     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     @@)r8   r   rP   r   r   absmax)r?   r@   r   rn   r   rr+   r+   r,   r    s   "z5TestSplu._internal_test_splu_smoketest.<locals>.checkr  )r
  r!   r8   float32float64ry   rz   rK   r  r+   r+   r,   r    s
   
z&TestSplu._internal_test_splu_smoketestc                 C   r  r(   )_internal_test_spilu_smoketestr\   r+   r+   r,   test_spilu_smoketest  r  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                    sJ   | | }t ||  }t|dk | |jtjtjfv r# | d S d S )N{Gz?)r  r  r   rP   r8   r  rz   append)r?   r@   r   rn   r  errerrorsr+   r,   r    s   z6TestSplu._internal_test_spilu_smoketest.<locals>.checkgh㈵>r  )	r
  r"   r8   r  r  ry   rz   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)	drop_rule)r   decoder   r   r"   r   )rK   r?   rulesruler+   r+   r,   test_spilu_drop_rule  s   zTestSplu.test_spilu_drop_rulec                 C      t ddd}ttt| d S NrN   rL   rO   )r   rZ   r[   r!   rK   r?   r+   r+   r,   test_splu_nnz0     zTestSplu.test_splu_nnz0c                 C   r$  r%  )r   rZ   r[   r"   r&  r+   r+   r,   test_spilu_nnz0  r(  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?rl   )r9   r  r:   r   rZ   r[   r!   r   r   rS   r   r	   )rK   rG   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	| q%||j }t|}t|}t|j|j d S )Nr*  r   r+  rl   r/   )r9   r   r   r!   perm_rperm_cr   r   r   lenr   r   r   )rK   rG   r*   r,  r  permr+   r+   r,   test_splu_perm0  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.   NATURAL)
permc_spec)r   )r8   r9   rI   r4   r5   r:   r   r   r   r   r/  r   r   rS   r   )rK   splu_funr   rG   pr?   r   A_r@   r  r   r+   r+   r,   test_natural_permcG  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 ]}t||}tt||d  ~tt|| q&d S )Nr*  r   r+  rl   )r.  r/  r.   )r9   r   r   r!   sysr;  getattrr   )rK   rG   r*   r,  r  rcattrr1  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 q)d S )Nrl   r4  r3   rr   )r?   rH   rZ   rm   r!   r"   r9   r:   rG   rS   r{   r|   r8   ry   rz   )rK   r?   r  r@   ru   rv   r+   r+   r,   test_bad_inputss  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/   rD   r   )
r8   r   r   r|   r  r"   r?   r   isnanr   )rK   rG   rL   r?   ru   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?   r|   r   r2   r!   r8   zerosr   r/  r.  r)   r	   LUr   r   r   )rP   	complex_2r?   rG   r  PcPrAdlhsrhsr   r\   r+   r,   r    s   
z$TestSplu.test_lu_attr.<locals>.checkT)F)r8   r  r  ry   rz   r  r+   r\   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 d S  ty   Y d S w )NT)r-  r  r  r  	Exceptionr+   )oksrK   r+   r,   worker  s   z.TestSplu.test_threads_parallel.<locals>.workerc                    s   g | ]}t j d qS ))target)	threadingThread).0r	  )rQ  r+   r,   
<listcomp>  s    z2TestSplu.test_threads_parallel.<locals>.<listcomp>r   )rangestartjoinr   r0  )rK   threadsr~   r+   )rP  rK   rQ  r,   test_threads_parallel  s   
	

zTestSplu.test_threads_parallelN)r   r   r   rM   r
  r   r  r  r  r  r#  r'  r)  r-  r2  r   r   parametrizer!   r"   r:  r   hasattrr<  r@  rA  rC  rN  r   r[  r+   r+   r+   r,   r     s6    !






"r   c                   @   sP   e Zd Zd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   r   rh   r   r\   r+   r+   r,   rM     r   z"TestSpsolveTriangular.setup_methodc                 C   s   d}t jd}|||f}t |}tjj|ddd}t||ddd}|	d t
||| t jg d	g d
g dgt jd}t g d}t }|td t||dd W d    d S 1 sfw   Y  d S )NrC   l   [<zn( r   r   )r	  r   T)unit_diagonallowerr.   )r   r   r   r   )r.   r.   r   rO   r   zCSR matrix format is)r_  )r8   r9   default_rngstandard_normalr   r4   r5   trilr%   setdiagr   r	   r   r  r   ra   r   )rK   rG   r  r?   r@   r   re   r+   r+   r,   test_zero_diagonal  s   

""z(TestSpsolveTriangular.test_zero_diagonalc                 C   s>   d}t ||f}t|}dD ]}ttjjt|||d qd S )NrC   TFr`  )r   r8   r   rZ   r4   r   LinAlgErrorr%   )rK   rG   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   )	r8   rE  r   rZ   rm   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||| qd S )Nr   rQ   r   Trg  )r   r   r   r%   r
   r	   )rK   r?   r@   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 ]Z}|||d}dD ]O}t j||t jd	d
||ft jd	d
||ft jd	d
||fd  fD ]&}t|||d}t||| t|||dd}|d t||| qCqq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< q#|S )Nr3  coo)densityr   F)r   r.   )	r4   r5   r9   rc  triutocsrrW  r8   r:   )rG   r`  r?   ir+   r+   r,   random_triangle_matrix  s   zATestSpsolveTriangular.test_random.<locals>.random_triangle_matrixrF   rf  )r   rD  i  rg  )r.   r   irr   r   )r`  r_  r.   )T)	r8   r9   rI   r:   randintr%   r
   r	   rd  )rK   rq  r`  rG   r?   mr@   r   r+   r+   r,   test_random  s.   

z!TestSpsolveTriangular.test_randomN)r   r   r   rM   re  r   r   ri  rk  r   r   r   rt  r+   r+   r+   r,   r^    s    


r^  )Ar<  rS  numpyr8   r   r   r   r   r   r   r   r	   numpy.randomr9   numpy.testingr
   r   r   r   r   r   r   r   r   r   rZ   scipy.linalgr4   r   r   scipy.sparser   r   r   r   r   r   r   r   r   scipy.sparse.linalgr   scipy.sparse.linalg._dsolver   r    r!   r"   r#   r$   r%   r&   scipy._lib._testutilsr'   r   ra   scikits.umfpackrc   r   ImportErrorr)   rA   rB   r   r   r^  r+   r+   r+   r,   <module>   sB    ((,(
 	 w  