o
    Yi}                     @   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'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dlZd d	l6m7Z7 d d
l8m9Z9 e Z:e:;e  z
d dl<m=Z= dZ>W n e?y   dZ>Y nw dd Z@dd ZAG dd dZBG dd dZCG dd dZDG dd dZEG dd dZFejGjHe:ejGIdg dejGIdg ddd  ZJd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)
	dia_arraySparseEfficiencyWarning	csc_array	csr_array	eye_arrayissparse	dok_array	lil_array	bsr_arraykron)SuperLU)
spsolve
use_solverspluspiluMatrixRankWarning_superluspsolve_triangular
factorizedis_sptriangularspbandwidth)check_free_memory)ComplexWarningTFc                 C   s   t | r|  S | S N)r   toarray)a r/   V/tmp/pip-target-1s0edx8b/lib/python/scipy/sparse/linalg/_dsolve/tests/test_linsolve.pyr-   '   s   r-   c                  C   s   d} d|  }t g dg df| d | d fd|d  }t| d }t|t||t|t|| t|t|| }tj| d d }||fS )N@      )   r3   )r3   r   r2   shaper4      )r   r   r   nprandomrand)NhAh1DeyeNAbr/   r/   r0   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   sR   d}t |d }|| _t|d| |d d d fdf||fd | _td d S )N   r2   r4   r3   r   rC   r5     )r   nr   tocscr?   r9   seedselfrG   dr/   r/   r0   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/   r0   _check_singularB   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/   r0   _check_non_singularG   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/   r0   test_singular_without_umfpackP   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/   r0   test_singular_with_umfpackU   s
   
"z)TestFactorized.test_singular_with_umfpackc                 C      t dd |   d S NFrV   r!   rU   r\   r/   r/   r0   !test_non_singular_without_umfpack\   s   
z0TestFactorized.test_non_singular_without_umfpackc                 C   rg   )NTrV   ri   r\   r/   r/   r0   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/   r0   6test_cannot_factorize_nonsquare_matrix_without_umfpacke   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/   r0   -test_factorizes_nonsquare_matrix_with_umfpackk   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   r7   	   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/   r0   7test_call_with_incorrectly_sized_matrix_without_umfpackq   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   r7   rr   rs   rX   rt   )rK   rS   r@   ru   rv   rn   r/   r/   r0   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/   r0   .test_call_with_cast_to_complex_without_umfpack   s   


z=TestFactorized.test_call_with_cast_to_complex_without_umfpackc                 C   sF   t dd t| j}td}tjtjfD ]}tt	||
| qd S rp   )r!   r'   r?   r9   r:   r8   ry   rz   r   r+   r|   r}   r/   r/   r0   +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)r4   r   r2   r   )
      rC   g?)r   r2   r4   rl   r7   r7   r7   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/   r0   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/   r0   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/   r0   rB   :   s0    	





rB   c                   @   s  e Zd Zdd Zdd Zdd Zejddd	gejd
e	j
e	jgded
e	jfddZdd Zdd Zejjedd Zejjedd Zejjeejje dddd Zejj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/   r0   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   r2   r4   r7   rl   rC   Matrix is exactly singular)
r   r   r   ra   r$   r    r   r8   isfiniteany)rK   r?   r@   re   r   r/   r/   r0   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   r5   r   r   )r8   r   int32r   Tr   r   ra   r$   r    r   r   r[   )rK   ijvr?   r@   re   r   r/   r/   r0   test_singular_gh_3312   s   
z"TestLinsolve.test_singular_gh_3312formatcsccsr	idx_dtypec           
      C   s   t g dg dgddgfdd|}tg d}t| dtt| d }dD ]8}t|j}||}||}|j	j|d	d
|_	|j
j|d	d
|_
t||}	tt|||	  d| | k  q+d S )Nr   )r   rC      rr   r   r   r2   rN   r5   r4   )r   rL   FDFr   r   )r   asformatr   r   r-   r   r   epsr|   indicesr   r    r   )
rK   r   r   r?   r@   cond_Ar~   r   Aspr   r/   r/   r0   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   r7   )r   r   r9   rI   randnr    r
   )rK   AdenseAsr   r@   x2r/   r/   r0   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   r7   rl   )	r   r   r9   rI   r   r	   r    r
   r-   )rK   r   r   r   BdenseBsr   r/   r/   r0   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)r7   rl   )rl   r2   r7   r          @)r   rZ   rm   r    r   r   r   rK   r?   r@   A2b2r/   r/   r0   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   r2   r4   r4   r4   )r   r4   r4   r   r2   r4   )r2   r4   r7   rC   r   r   )r6   rP   )r   r   r2   r2   r   r   )r   r4   r2   r2   r   r   )r2   r2   r2   r2   r2   r2   )	r   r   floatr-   r    scipylinalgrS   r
   )
rK   rowcolr   sMMsNr;   sXXr/   r/   r0   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   r4   r2   r   r   r         @)      @       @g      $@)use_umfpackFerr_msgr   r2   r7   )r!   r   r   r   r   r   r8   r   rS   r-   r   r    ndimr6   ravelr
   reprr   r   
isinstancendarrayr   rZ   rm   )rK   r?   bsr@   r   	spmattypex1r   r/   r/   r0   test_shape_compatibility,  sV   




 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/   r0   test_ndarray_supporth  s   z!TestLinsolve.test_ndarray_supportc                 C   sH  d}t |d }t|d| |d d d fdf||fd}ttfD ]}||}t |}dd }d	d
 }dd }dd }	||||	g}
|
D ]]}|d|}tttftj	||j
||j|j|j|t|jdk|d
 tttftj	||j
|j||j|j|t|jdk|d
 tttftj	||j
|j|j||j|t|jdk|d
 qCq d S )Nr   r   r4   r3   rD   r5   c                 S   s   |  dd d d S )Nr4   )repeatr   r/   r/   r0   not_c_contigz  s   z5TestLinsolve.test_gssv_badinput.<locals>.not_c_contigc                 S   s   | d d d f S r,   r/   r   r/   r/   r0   not_1dim}  s   z1TestLinsolve.test_gssv_badinput.<locals>.not_1dimc                 S   s
   |  tS r,   )r|   boolr   r/   r/   r0   bad_type  s   
z1TestLinsolve.test_gssv_badinput.<locals>.bad_typec                 S   s   | d d S )Nr3   r/   r   r/   r/   r0   	too_short  s   z2TestLinsolve.test_gssv_badinput.<locals>.too_short r   r   )r   r   r   r   r8   rZ   rm   r{   r%   gssvnnzr   r   r   intr   )rK   r;   rL   r?   	containerr@   r   r   r   r   badopsbadoprn   r/   r/   r0   test_gssv_badinputq  s6   (
zTestLinsolve.test_gssv_badinputc                 C   s~   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| | ddd	 d S )
Nr2   r   r   )r   r2   r   )r   r   r2   r   r2   r7   r4   g-q=)atolrtol)r   r    r   r   r   r-   )rK   identr@   r   r/   r/   r0   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)r2   r4   r   )r   r   r7   )rl   r   rC   )rl   r   y      @      ?)r2   r2   r2                 ?)r   sparser   r8   r   r    r   
issubdtyperP   floatingcomplexfloating)rK   A_real	A_complexb_real	b_complexr   r/   r/   r0   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/   r0   r     s
   


zTestLinsolve.test_bug_8278N)r   r   r   rM   r   r   r   r   parametrizer8   r   int64strrP   r   r   r   thread_unsafesup_sparse_efficiencyr   r   r   r   r   r   r   r   r  r   r   r/   r/   r/   r0   r      s8    
9$r   c                   @   s&  e Zd Zdd Zdd Zejjedd Z	dd Z
ejjed	d
 Zdd Zejj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jjed#d$ Zejjed%d& Zejjejjed'd( Zejjd)d* Zd+S ),TestSpluc                 C   s\   t dd d}t|d }|| _t|d| |d d d fdf||fd | _td	 d S )
NFrV   (   r2   r4   r3   rD   r5   rF   )r!   r   rG   r   rH   r?   r9   rI   rJ   r/   r/   r0   rM     s   
.zTestSplu.setup_methodc                 C   s6  t |t jr| jd| jj  }n| j}||}|jj|dd|_|jj|dd|_||}t	d}d dd| j
| j
d fD ]Y}d|}	|d u rQ|| j
}
n|| j
|}
t |t jri|
d|j|
j   }
|
|}
||
}|||
||	 ||
d}||j|
||	 ||
d	}||j |
||	 q?d S )
Nr   Fr   rF   r2   r4   zk=r   H)r8   r   r  r?   r   r|   r   r   r9   RandomStaterG   r:   r6   rS   conj)rK   spxlucheckrP   r   r?   lurngkrn   r@   r   r/   r/   r0   
_smoketest  s.   




zTestSplu._smoketestc                 C      |    d S r,   )_internal_test_splu_smoketestr\   r/   r/   r0   test_splu_smoketest     zTestSplu.test_splu_smoketestc                 C   sJ   ddd}t jt jt jt jfD ]}t jt jfD ]
}| t||| qq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/   r0   r    s   "z5TestSplu._internal_test_splu_smoketest.<locals>.checkr  )	r8   float32float64ry   rz   r   r  r  r"   rK   r  rP   r   r/   r/   r0   r    s   
z&TestSplu._internal_test_splu_smoketestc                 C   r  r,   )_internal_test_spilu_smoketestr\   r/   r/   r0   test_spilu_smoketest  r  zTestSplu.test_spilu_smoketestc                    sb   g  d fdd	}t jt jt jt jfD ]}t jt jfD ]
}| t||| qq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/   r0   r    s   z6TestSplu._internal_test_spilu_smoketest.<locals>.checkgh㈵>r  )r8   r   r!  ry   rz   r   r  r  r#   r   r  r"  r/   r(  r0   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 )Nr4   s
   basic,areaasciis   basics   area)	drop_rule)r   decoder   r   r#   r   )rK   r?   rulesruler/   r/   r0   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/   r0   test_splu_nnz0      zTestSplu.test_splu_nnz0c                 C   r0  r1  )r   rZ   r[   r#   r2  r/   r/   r0   test_spilu_nnz0$  r4  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/   r0   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 )Nr6  r   r7  rl   r3   )r9   r   r   r"   perm_rperm_cr   r   r   lenr   r   r   )rK   rG   r.   r8  r  permr/   r/   r0   test_splu_perm<  s   
zTestSplu.test_splu_permzsplu_fun, rtolgHz>皙?c                 C   s   t jd}d}d}tjj||||d}||}||d tj| 7 }t|}|| }	||}
tt 	|
j
t |k ||dd}
t|
j
t | |
|	}t|||d d S )	N*   i  r%  )random_stater2   NATURAL)
permc_spec)r   )r8   r9   r  r   r   r:   r   r   r   r   r;  r   r   rS   r   )rK   splu_funr   r  rG   pr?   r   A_r@   r  r   r/   r/   r0   test_natural_permcS  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 )Nr6  r   r7  rl   )r:  r;  r2   )r9   r   r   r"   sysrH  getattrr   )rK   rG   r.   r8  r  rcattrr=  r/   r/   r0   test_lu_refcountl  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   r@  r7   rr   )r?   rH   rZ   rm   r"   r#   r9   r:   rG   rS   r{   r|   r8   ry   rz   )rK   r?   r  r@   ru   rv   r/   r/   r0   test_bad_inputs  s"   



zTestSplu.test_bad_inputsc                 C   sz   d}t |d }t|d| |d d d fdf||fd}|t j}t| |d|  }| }tt |	   d S )Nr   r2   r4   r3   rD   r5   r   )
r8   r   r   r|   r   r#   r-   r   isnanr   )rK   rG   rL   r?   ru   r/   r/   r0   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   r2   d   r   )r?   r|   r   r6   r"   r8   zerosr   r;  r:  r-   r	   LUr   r   r   )rP   	complex_2r?   rG   r  PcPrAdlhsrhsr   r\   r/   r0   r    s   
z$TestSplu.test_lu_attr.<locals>.checkT)F)r8   r   r!  ry   rz   )rK   r  r/   r\   r0   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)r9  r  r#  r&  	Exceptionr/   )oksrK   r/   r0   worker  s   z.TestSplu.test_threads_parallel.<locals>.workerc                    s   g | ]}t j d qS ))target)	threadingThread).0r  )r_  r/   r0   
<listcomp>  s    z2TestSplu.test_threads_parallel.<locals>.<listcomp>r   )rangestartjoinr   r<  )rK   threadsr~   r/   )r^  rK   r_  r0   test_threads_parallel  s   
	

zTestSplu.test_threads_parallelc                 C   sj   t ddd}d|d< td}tt t||}t| s#J W d    d S 1 s.w   Y  d S )Nr   r   r   r   )r3   r3   )	r   r8   rS  r   warnsr$   r    rO  r   )rK   r?   r@   resr/   r/   r0   test_singular_matrix  s   

"zTestSplu.test_singular_matrixN) r   r   r   rM   r  r   r   r
  r  r  r  r$  r#  r/  r3  r5  r9  r>  r  r"   r#   rG  r   hasattrrI  rM  rN  rP  r\  r   ri  rm  r/   r/   r/   r0   r    sF    #

"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dS )TestGstrsErrorsc                 C   sD   t g dg dg dgtjd| _tj dgdgdggtjd| _d S )Nr   )g      @g      @r   )g      @r   g      "@rO   r   r   r   )r   r8   r!  r?   r@   r\   r/   r/   r0   rM     s   ""zTestGstrsErrors.setup_methodc                 C   s   t jj| jdd}t jj| jddd}ttdd( td|j	d |j
|j|j|j|j	d |j
|j|j|j| j W d    d S 1 sDw   Y  d S )	Nr   rj  r2   r  r   ztrans must be N, T, or HrX   r   r   r   r   trilr?   triurZ   rm   r%   gstrsr6   r   r   r   r   r@   rK   rT  rU  r/   r/   r0   
test_trans  s   "zTestGstrsErrors.test_transc                 C   s   t jj| jddddf dd}t jj| jddd}ttdd( td	|j	d |j
|j|j|j|j	d |j
|j|j|j| j W d    d S 1 sLw   Y  d S )
Nr   r4   r   rj  r2   rp  z$L and U must have the same dimensionrX   r;   rq  ru  r/   r/   r0   test_shape_LU  s   ""zTestGstrsErrors.test_shape_LUc                 C   s   t jj| jdd}t jj| jddd}ttdd, td|j	d |j
|j|j|j|j	d |j
|j|j|j| jdd	  W d    d S 1 sHw   Y  d S )
Nr   rj  r2   rp  z'right hand side array has invalid shaperX   r;   r   r4   rq  ru  r/   r/   r0   test_shape_b  s   "zTestGstrsErrors.test_shape_bc                 C   s   t jj| jtjdd}t jj| jddd}tt	dd( t
d|jd |j|j|j|j|jd |j|j|j|j| j W d    d S 1 sHw   Y  d S )	Nr   rj  r2   rp  znzvals types of L and U differrX   r;   r   )r   r   rr  r?   r|   r8   r   rs  rZ   r{   r%   rt  r6   r   r   r   r   r@   ru  r/   r/   r0   test_types_differ  s   "z!TestGstrsErrors.test_types_differc                 C   s   t jj| jtjdd}t jj| jtjddd}tt	dd, t
d|jd |j|j|j|j|jd |j|j|j|j| jtj W d    d S 1 sPw   Y  d S )	Nr   rj  r2   rp  z!nzvals is not of a type supportedrX   r;   r   )r   r   rr  r?   r|   r8   uint8rs  rZ   r{   r%   rt  r6   r   r   r   r   r@   ru  r/   r/   r0   test_types_unsupported  s   "z&TestGstrsErrors.test_types_unsupportedN)	r   r   r   rM   rv  rw  rx  ry  r{  r/   r/   r/   r0   ro    s    ro  c                   @   s
  e Zd Zdd Zejdddgdd Zejdddgdd	 Zejj	e
d
d Zejj	e
dd Zejj	ejje
ejdg dejdddgejdddgejdddgejdddgejdddgejdg ddd ZdS ) TestSpsolveTriangularc                 C   r   rh   r   r\   r/   r/   r0   rM     r   z"TestSpsolveTriangular.setup_methodfmtr   r   c                 C   s   d}t jd}|||f}t |}tjj|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   rp  T)unit_diagonallowerr2   )r   r   r   r   )r2   r2   r   rO   r   zCSC or CSR matrix format is)r~  )r8   r9   default_rngstandard_normalr   r   r   rr  r&   setdiagr   r	   r   r!  r   ra   r   )rK   r}  rG   r  r?   r@   r   re   r/   r/   r0   test_zero_diagonal  s   

""z(TestSpsolveTriangular.test_zero_diagonalc                 C   sT   d}|dkrt ||f}nt||f}t|}dD ]}ttjjt|||d qd S )NrC   r   TFr  )	r   r   r8   r   rZ   r   r   LinAlgErrorr&   )rK   r}  rG   r?   r@   r  r/   r/   r0   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   rS  r   rZ   rm   r&   r   r   r   r   r/   r/   r0   test_bad_shape9  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   Tr  )r   r   r   r&   r
   r	   )rK   r?   r@   matrix_typer   r/   r/   r0   test_input_typesE  s   z&TestSpsolveTriangular.test_input_typesrG   r   rQ  i  mr2   r   r  TFr   r~  choice_of_Arealcomplexchoice_of_b)floatsintscomplexintsc                 C   s   ddd}t jd |||d}	|dkrt j||}
n.|d	kr,t jd
d||f}
n|dkrGt jd
d||ft jd
d||fd  }
ntdt|	|
||d}|rZ|	d t|		||
dd d S )NTr   r  c           	   	   S   s   |dkrt j}n|dkrt j}ntdt jd}|j}tjj| | dd|||d}|r5tjj|dd}ntjj	|dd}t
| D ]}t j d	 |||f< qA|d
kr[|jdd}|S |jdd}|S )Nr  r  z(choice_of_A must be 'real' or 'complex'.iO8/r?  lil)densityr   rP   rA  data_rvsrj  r2   r   Fr   )r8   r!  rz   rm   r9   r  r   r   rr  rs  re  r:   rH   tocsr)	rG   r  r   r  rP   r  rvsr?   ir/   r/   r0   random_triangle_matrixY  s(   zATestSpsolveTriangular.test_random.<locals>.random_triangle_matrixrF   r  r  r  irr   r  r   z7choice_of_b must be 'floats', 'ints', or 'complexints'.)r  r~  r2   gTqs*>rR  )Tr   r  )
r8   r9   rI   r:   randintrm   r&   r  r   r	   )rK   rG   r  r  r   r~  r  r  r  r?   r@   r   r/   r/   r0   test_randomN  s    
.
z!TestSpsolveTriangular.test_randomN)r   r   r   rM   r   r   r  r  r   r
  r  r  r  r   r  r/   r/   r/   r0   r|    s.    


 r|  r   r  r}  )r   r   coodiadokr  c           	      C   s2  t jd}| d }d}tjj||f|d|d}d |d< |d< ||}tjj||d	}tjj||d	}dtjj	||d	 }t
|d
ksGJ t
|dksOJ t
|dksWJ t
|dks_J t|tj| ksmJ t|tj| ks{J t|tj| ksJ t|tj| ksJ d S )Nr@  r4   r?  r   )r  r   r     r   )r7   r2   rj  )FFr  )FT)TT)r8   r9   r  r   r   random_arrayr   rs  rr  r   r(   r)   r   	bandwidthr-   )	r   r}  r  r;   densr?   AUALr   r/   r/   r0   $test_is_sptriangular_and_spbandwidth  s"   
 r  )KrI  ra  numpyr8   r   r   r   r   r   r   r   r	   numpy.randomr9   numpy.testingr
   r   r   r   r   r   r   r   r   r   rZ   scipy.linalgr   r   r   scipy.sparser   r   r   r   r   r   r   r   r   r   scipy.sparse.linalgr   scipy.sparse.linalg._dsolver    r!   r"   r#   r$   r%   r&   r'   r(   r)   scipy._lib._testutilsr*   scipy._lib._utilr+   r  ra   scikits.umfpackrc   r   ImportErrorr-   rA   rB   r   r  ro  r|  r   r
  r  r  r/   r/   r/   r0   <module>   sP    ((00
 	   -*l