
    xfk                        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       Z5e5jm                  e        	 d dl7m8Z8 d
Z9d Z;d Z< G d d      Z= G d d      Z> G d d      Z? G d d      Z@y# e:$ r dZ9Y 8w xY w)    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issparse
dok_matrix
lil_matrix
bsr_matrix)SuperLU)spsolve
use_solverspluspiluMatrixRankWarning_superluspsolve_triangular
factorized)check_free_memoryTFc                 <    t        |       r| j                         S | S N)r   toarray)as    Q/usr/lib/python3/dist-packages/scipy/sparse/linalg/_dsolve/tests/test_linsolve.pyr+   r+   %   s    {yy{    c                     d} d| z  }t         j                  j                  g dg d| dz
  | dz
  f      |dz  z  }t         j                  j                  | dz
        }t         j                  j	                  |t         j                  j	                  ||            t         j                  j	                  |t         j                  j	                  ||            z   t         j                  j	                  |t         j                  j	                  ||            z   }t
        j                  j                  | dz
  dz        }||fS )N@      )   r2   )r2   r   r1   shaper3      )scipysparsediagsr   kronnprandomrand)NhAh1DeyeNAbs         r-   setup_bug_8278rD   ,   s   A	!A<<k:%&qS!A#J  012A7D<<AE"D			4!2!24!>	?<<T5<<#4#4T4#@A
B<<T5<<#4#4T4#@A
BA 			!ax Aa4Kr.   c                   f   e Zd Zd Zd Zd Zd Zej                  j                  e
 d      d        Zd Zej                  j                  e
 d      d	        Zd
 Zej                  j                  e
 d      d        Zd Zej                  j                  e
 d      d        Z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y)TestFactorizedc                     d}t        |      dz   }|| _        t        |d|z  |d d d   fd||      j                         | _        t        j                  d       y )N   r1   r3   r2   r   rH     )r   nr   tocscrB   r<   seedselfrL   ds      r-   setup_methodzTestFactorized.setup_method:   sU    1IM!QqS!DbD'*J1=CCEDr.   c                 p    t        dd      }t        d      }t        d|z   t        |      |             y )NrH   rH   rQ   dtyperH           )r   r	   r   r'   )rP   rB   rC   s      r-   _check_singularzTestFactorized._check_singularA   s0    uC(G!"q&-*Q-*:;r.   c                     d}t        t        j                  ||            }t        |      }t	        |      j                  |      }t         t        |      |      |       y )NrH   )r   r<   r=   r	   r"   solver   r'   )rP   rL   r,   rC   expecteds        r-   _check_non_singularz"TestFactorized._check_non_singularF   sL    v{{1a()G7==#!-*Q-"2H=r.   c                     t        d       t        t        d      5  | j                          d d d        y # 1 sw Y   y xY w)NF
useUmfpackzFactor is exactly singularmatch)r!   assert_raisesRuntimeErrorrX   rP   s    r-   test_singular_without_umfpackz,TestFactorized.test_singular_without_umfpackO   s6    e$</KL 	#  "	# 	# 	#s	   8Aumfpack not availablereasonc                     t        d       t               5 }|j                  t        d       t	        t
        j                  | j                         d d d        y # 1 sw Y   y xY w)NTr^   z,divide by zero encountered in double_scalars)r!   r   filterRuntimeWarningr   umfpackUmfpackWarningrX   )rP   sups     r-   test_singular_with_umfpackz)TestFactorized.test_singular_with_umfpackT   sP    d#  	GCJJ~'UV//1E1EF	G 	G 	Gs   ;AA$c                 <    t        d       | j                          y NFr^   r!   r\   rd   s    r-   !test_non_singular_without_umfpackz0TestFactorized.test_non_singular_without_umfpack[   s    e$  "r.   c                 <    t        d       | j                          y )NTr^   rr   rd   s    r-   test_non_singular_with_umfpackz-TestFactorized.test_non_singular_with_umfpack_   s    d#  "r.   c                     t        d       d}t        t        |      5  t        | j                  d d d df          d d d        y # 1 sw Y   y xY w)NFr^   zcan only factor square matricesr`      )r!   rb   
ValueErrorr'   rB   )rP   msgs     r-   6test_cannot_factorize_nonsquare_matrix_without_umfpackzETestFactorized.test_cannot_factorize_nonsquare_matrix_without_umfpackd   sF    e$/:S1 	&tvva!e}%	& 	& 	&s   AAc                 X    t        d       t        | j                  d d d df          y NTr^   rw   )r!   r'   rB   rd   s    r-   -test_factorizes_nonsquare_matrix_with_umfpackz<TestFactorized.test_factorizes_nonsquare_matrix_with_umfpackj   s"    d#466!BQB$< r.   c                    t        d       t        | j                        }t        j                  d      }t        j                  dd      }t        j                  | j
                  dd      }t        t        d      5   ||       d d d        t        t        d      5   ||       d d d        t        t        d      5   ||       d d d        y # 1 sw Y   NxY w# 1 sw Y   8xY w# 1 sw Y   y xY w)	NFr^   rw   r6   	   zis of incompatible sizer`   !object too deep for desired arrayr!   r'   rB   r<   r=   rL   rb   rx   )rP   rZ   rC   BBBs        r-   7test_call_with_incorrectly_sized_matrix_without_umfpackzFTestFactorized.test_call_with_incorrectly_sized_matrix_without_umfpackp   s    e$466"KKNKK1[[A&:-FG 	!H	:-FG 	!H	:!DF 	"I	 			 		 		 	s$   ?	C!	C!	C-C!C*-C6c                    t        d       t        | j                        }t        j                  d      }t        j                  dd      }t        j                  | j
                  dd      } ||       d}t        t        |      5   ||       d d d        t        t        |      5   ||       d d d        y # 1 sw Y   ,xY w# 1 sw Y   y xY w)NTr^   rw   r6   r   r   r`   r   )rP   rZ   rC   r   r   ry   s         r-   4test_call_with_incorrectly_sized_matrix_with_umfpackzCTestFactorized.test_call_with_incorrectly_sized_matrix_with_umfpack   s    d#466"KKNKK1[[A& 	a1:S1 	!H	:S1 	"I	 		 		 	s   		B=+	C	=C	Cc                 4   t        d       t        | j                        }t        j                  d      }t
        j                  t
        j                  fD ]3  }t        t        d      5   ||j                  |             d d d        5 y # 1 sw Y   @xY w)NFr^   rw   zCannot cast array datar`   )r!   r'   rB   r<   r=   r;   	complex64
complex128rb   	TypeErrorastyperP   rZ   rC   ts       r-   .test_call_with_cast_to_complex_without_umfpackz=TestFactorized.test_call_with_cast_to_complex_without_umfpack   sv    e$466"KKN,,. 	#Ay0HI #ahhqk"# #	## #s   +BB	c                    t        d       t        | j                        }t        j                  d      }t
        j                  t
        j                  fD ],  }t        t
        j                  ||j                  |             . y r|   )r!   r'   rB   r<   r=   r;   r   r   r   ComplexWarningr   r   s       r-   +test_call_with_cast_to_complex_with_umfpackz:TestFactorized.test_call_with_cast_to_complex_with_umfpack   s]    d#466"KKN,,. 	@A**E188A;?	@r.   c                 
   t        j                  g d      }t        j                  g d      }t        j                  g d      }t        |||fd      }t        d      }t	        dd       t        t        d	      5  t        |       d d d        t	        dd
       t        |j                               j                  |      }t        |j                  d       t         t        |      |      |       y # 1 sw Y   pxY w)N)r3   r   r1   r   )
      rH   g?)r   r1   r3   rw   r6   r6   r6   T)r_   assumeSortedIndicesUMFPACK_ERROR_invalid_matrixr`   Fr   )r;   r   r   r	   r!   rb   rc   r'   r"   copyrZ   r   has_sorted_indicesr   )rP   unsorted_indsdataindptrrB   rC   r[   s          r-   test_assume_sorted_indices_flagz.TestFactorized.test_assume_sorted_indices_flag   s     .xx(),'mV4f=G 	d=<!?A 	qM	
 	d>>''*Q))1-!-*Q-"2H=	 	s   >C99Dc                     t        d       t        d       t               \  }}|j                         }t	        |      } ||      }t        ||z  |       y Ni@  Tr^   )r(   r!   rD   rM   r'   r   )rP   rB   rC   fxs        r-   test_bug_8278zTestFactorized.test_bug_8278   sK     	$d#1GGIqMaD!!a%+r.   N)__name__
__module____qualname__rR   rX   r\   re   pytestmarkskipifhas_umfpackro   rs   ru   rz   r}   r   r   r   r   r   slowr    r.   r-   rF   rF   9   st   <
>#
 [[K0GHG IG# [[K0GH# I#& [[K0GH! I!
 [[K0GH I# [[K0GH@ I@ [[K0GH> I>* [[[[K0GH, I ,r.   rF   c                      e Zd Zd Zd Zd Zej                  j                  dddg      ej                  j                  de	j                  e	j                  g      dede	j                  fd              Zd	 Zd
 Zed        Zed        Zeej                  j)                  e d      d               Zed        Zd Zd Zd Zej                  j6                  ej                  j)                  e d      d               Zy)TestLinsolvec                     t        d       y rq   r!   rd   s    r-   rR   zTestLinsolve.setup_method   
    e$r.   c                    t        dd      }t        g dd      }t               5 }|j                  t        d       t        ||      }d d d        t        t        j                        j                                 y # 1 sw Y   7xY w)NrT   rQ   rU   r1   r3   r6   rw   rH   Matrix is exactly singular)
r   r   r   rj   r$   r    r   r;   isfiniteany)rP   rB   rC   rn   r   s        r-   test_singularzTestLinsolve.test_singular   sp    uC(/,  	CJJ(*FG1A	 	BKKN&&(()	 	s   #B  B	c                    t        j                  g dt         j                        }t        j                  g d      }t        ||j                  fd      }t        j
                  d      }	 t               5 }|j                  t        d       t        ||      }d d d        t        j                        j                         rJ y # 1 sw Y   /xY w# t        $ r Y y w xY w)N))   r   )r      )r      )r      rU   )gkF0?gٯ`?g5?.?g?)   r   r4   r   r   )r;   r   int32r   Tr   r   rj   r$   r    r   r   rc   )rP   ijvrB   rC   rn   r   s          r-   test_singular_gh_3312z"TestLinsolve.test_singular_gh_3312   s     XX<BHHMHHCD244y1IIbM	 #$ "

,.JKAqM" {{1~))++++" "  		s*   .
C 8#C	-C 	CC 	C! C!formatcsccsr	idx_dtypec                 ,   t        g dg dgddgdd|      }t        g d      }t        |j                         d      t        t	        |j                               d      z  }dD ]  }t        |      j                  }|j                  |      }|j                  |      }|j                  j                  |d	
      |_        |j                  j                  |d	
      |_	        t        ||      }	t        t        |||	z  z
        d|z  |z  k          y )Nr   )r   rH      r   r   r   r1   rH   r   r3   )r   rQ   FDFr   r   )r   r   r   r+   r   r   epsr   indicesr   r    r   )
rP   r   r   rB   rC   cond_Ar   r   Aspr   s
             r-   test_twodiagszTestLinsolve.test_twodiags   s     _&67!QA!#/" aiik1%S-=q(AA" 	9A(,,CA((1+C++,,YU,CCK**95*ACJQADSUOb6kC&778	9r.   c                     t        g dg dg dg      }t        |      }t        j                  d       t        j                  d      }||z  }t        ||      }t        ||       y )NrW         ?r   r   rW   r   rW   rW   r   rK   r6   )r   r   r<   rN   randnr    r   )rP   AdenseAsr   rC   x2s         r-   test_bvector_smoketestz#TestLinsolve.test_bvector_smoketest   s\    $$& ' DLLOqDR^!!R(r.   c                    t        g dg dg dg      }t        |      }t        j                  d       t        j                  dd      }|j                  |      }t        |      }t        ||      }t        ||j                                y )Nr   r   r   rK   r6   rw   )	r   r   r<   rN   r   r
   r    r   r+   )rP   r   r   r   BdenseBsr   s          r-   test_bmatrix_smoketestz#TestLinsolve.test_bmatrix_smoketest   ss    $$& ' DLLAR_!!RZZ\2r.   c                     t        d      }t        d      }t        t        t        ||       t	        t        d            }t        ddg      }t        t        t        ||       y N)r6   rw   )rw   r1   r6   r          @)r	   rb   rx   r    r   r   r   rP   rB   rC   A2b2s        r-   test_non_squarezTestLinsolve.test_non_square  sN     LLj'1a0AC:j'2r2r.   c                    t        g d      }t        g d      }t        g d      }t        |||ffdt              }|j                         }t        g d      }t        g d      }t        g d      }t        |||ffdt              }|j                         }t	        ||      }t
        j                  j                  ||      }	t        |	|j                                y )	N)r   r   r1   r3   r3   r3   )r   r3   r3   r   r1   r3   )r1   r3   r6   rH   r   r   )r5   rV   )r   r   r1   r1   r   r   )r   r3   r1   r1   r   r   )r1   r1   r1   r1   r1   r1   )	r   r   floatr+   r    r7   linalgrZ   r   )
rP   rowcolr   sMMsNr>   sXXs
             r-   test_example_comparisonz$TestLinsolve.test_example_comparison  s    M"M"^$s3i(UCJJLM"M"]#Cy)eDJJLR_LLq!$!!RZZ\2r.   rf   rg   c                    t        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 ]L  }t        j                  j                  |j                         t        |            }t        t        t        t        fD ]  }t         ||      |d
      }t         ||      |d
      }|j                  dk(  r"|j                  d   dk(  r|j                         }t        t        |      |t!        ||df             t        t        |      |t!        ||df             t#        |      rR|j                  dkD  rCt%        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(  rJt+        |j                  |j                  d   f       t+        |j                  |j                  d   f       t+        |j                  |j                         t+        |j                  |j                          O t        d      }t        d      }t-        t.        t        ||       y )NTr^   r   r   r3   r1   r   r   r   g      @)g      @g       @g      $@)use_umfpackFerr_msgr   )r1   r6   )r!   r   r   r   r   r   r;   r   rZ   r+   r   r    ndimr5   ravelr   reprr   r   
isinstancendarrayr   rb   rx   )rP   rB   bsrC   r   	spmattypex1r   s           r-   test_shape_compatibilityz%TestLinsolve.test_shape_compatibility)  s    	d#Q!Q()F1a&MS1#JA3*aSz"aSz"aSz"aSz"</0m45m45m45m45   	4A				WQZ8A(*j*M 4	Yq\1$?Yq\1%@ 66Q;1771:?	A)'"+q$9VWGXBYZ)'"+q$9VWGXBYZ A;166A:HRL$9a/@*ABHRL$9a/@*ABJr2::6aA=N8OPJr2::6aA=N8OP 66Q; AGGAJ=9 AGGAJ=9 !1773 177394	4@ vvj'1a0r.   c                     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        ||             y )Nr   r   rW   g      ?g      )r   r   r    )rP   rB   r   rC   s       r-   test_ndarray_supportz!TestLinsolve.test_ndarray_supportb  sW    B8b"X&'B8c4[)*B8b"X&'!!WQ]3r.   c                 ~   d}t        |      dz   }t        |d|z  |d d d   fd||      }t        t        fD ]  } ||      }t	        j                   |      }d }d }d }d	 }	||||	g}
|
D ]K  }|d
|}t        t        t        ft        j                  ||j                   ||j                        |j                  |j                  |t        |t        k(        |
       t        t        t        ft        j                  ||j                  |j                   ||j                        |j                  |t        |t        k(        |
       t        t        t        ft        j                  ||j                  |j                  |j                   ||j                        |t        |t        k(        |
       N  y )Nr   r   r3   r2   rI   c                 0    | j                  d      d d d   S )Nr3   )repeatr   s    r-   not_c_contigz5TestLinsolve.test_gssv_badinput.<locals>.not_c_contigs  s    xx{3Q3''r.   c                     | d d d f   S r*   r   r  s    r-   not_1dimz1TestLinsolve.test_gssv_badinput.<locals>.not_1dimv  s    4y r.   c                 ,    | j                  t              S r*   )r   boolr  s    r-   bad_typez1TestLinsolve.test_gssv_badinput.<locals>.bad_typey  s    xx~%r.   c                     | d d S )Nr2   r   r  s    r-   	too_shortz2TestLinsolve.test_gssv_badinput.<locals>.too_short|  s    "vr.    r   )r   r   r   r   r;   rb   rx   r   r%   gssvnnzr   r   r   int)rP   r>   rQ   rB   spmatrixrC   r  r  r  r  badopsbadopry   s                r-   test_gssv_badinputzTestLinsolve.test_gssv_badinputj  s   1IOQ!QttW%z1a8#Z0 	KHA		!A(!& #Hh	BF K!AeY/z95x}}affqyy!((X%;!<cK z95x}}aii0@!((X%;!<cK z95x}}		5?X%;!<cKK%	Kr.   c                 6   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	       y )
Nr1   r   r   )r   r1   r   )r   r   r1   r   r1   r6   r3   g-q=)atolrtol)r   r    r   r  r   rB   )rP   identrC   r   s       r-   test_sparsity_preservationz'TestLinsolve.test_sparsity_preservation  s      FFF  E1UYY"QUUAQUUAQSSu59r.   c                 N   t         j                  j                  g dg dg dg      }t         j                  j                  g dg dg dg      }t        j                  g d      }t        j                  g d      dt        j                  g d      z  z   }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                               y )N)r1   r3   r   )r   r   r6   )rw   r   rH   )rw   r   y      @      ?)r1   r1   r1                 ?)r7   r8   r   r;   r   r    r   
issubdtyperV   floatingcomplexfloating)rP   A_real	A_complexb_real	b_complexr   s         r-   test_dtype_castzTestLinsolve.test_dtype_cast  s   (()*3*3*5 6 LL++Y-6-;-= >	 '"HHW%288G+<(<<	FF#aggr{{34FI&aggr'9'9:;Iv&aggr'9'9:;Iy)aggr'9'9:;r.   c                     t        d       t        d       t               \  }}t        ||      }t	        ||z  |       y r   )r(   r!   rD   r    r   )rP   rB   rC   r   s       r-   r   zTestLinsolve.test_bug_8278  s9     	$d#1AqM!!a%+r.   N)r   r   r   rR   r   r   r   r   parametrizer;   r   int64strrV   r   r   r   sup_sparse_efficiencyr   r   r   r   r   r  r  r  r%  r   r   r   r.   r-   r   r      s=   %*$ [[Xu~6[[[288RXX*>?9C 9BHH 9 @ 79$
)
3 3 3 3 3$ [[K0GH51 I 51n 4 4"KH:<$ [[[[K0GH, I ,r.   r   c                   z   e Zd Zd Zd Zed        Zd Zed        Zd Z	ed        Z
d Zd	 Zd
 Zd Zej                   j#                  dedfedfg      d        Zej                   j+                   eed       d      d        Zd Zed        Zed        Zej                   j8                  ed               Zy)TestSpluc                     t        d       d}t        |      dz   }|| _        t        |d|z  |d d d   fd||d	      | _        t        j                  d
       y )NFr^   (   r1   r3   r2   rI   r   r   rK   )r!   r   rL   r   rB   r<   rN   rO   s      r-   rR   zTestSplu.setup_method  sV    e$1IM!QqS!DbD'*J1UKDr.   c                    t        j                  |t         j                        r'| j                  d| j                  j                  z  z   }n| j                  }|j                  |      }|j                  j                  |d      |_        |j                  j                  |d      |_         ||      }t        j                  d      }d dd| j                  | j                  dz   fD ]  }d|}	||j                  | j                        }
n|j                  | j                  |      }
t        j                  |t         j                        r|
d |j                  |
j                   z  z   }
|
j                  |      }
|j                  |
      } |||
||	       |j                  |
d      } ||j                  |
||	       |j                  |
d	      } ||j                  j                         |
||	        y )
Nr  Fr   rK   r1   r3   zk=r   H)r;   r  r   rB   r   r   r   r   r<   RandomStaterL   r=   r5   rZ   conj)rP   spxlucheckrV   r   rB   lurngkry   rC   r   s               r-   
_smoketestzTestSplu._smoketest  s   == 2 23DFFHH$AAHHUOII$$YU$;	88??95?91X  & 1dffdffQh/ 	)Aqe*CyHHTVV$HHTVVQ'}}UB$6$678388QWW---AA!Q3C A!##q!S!C A!##((*aC('	)r.   c                 $    | j                          y r*   )_internal_test_splu_smoketestrd   s    r-   test_splu_smoketestzTestSplu.test_splu_smoketest  s    **,r.   c                    dd}t         j                  t         j                  t         j                  t         j                  fD ]?  }t         j
                  t         j                  fD ]  }| j                  t        |||        A y )Nc                     t        j                  | j                        j                  }| |z  }t	        t        ||z
        j                         d|z  k  |       y )Ng     @@)r;   r   rV   r   r   absmax)rB   rC   r   ry   r   rs         r-   r4  z5TestSplu._internal_test_splu_smoketest.<locals>.check  sE    ((177#''CAACAJNN$s3w.4r.    )	r;   float32float64r   r   r   r(  r8  r"   )rP   r4  rV   r   s       r-   r:  z&TestSplu._internal_test_splu_smoketest  s_    	5
 jj"**bllBMMJ 	?E hh1 ?	eUI>?	?r.   c                 $    | j                          y r*   )_internal_test_spilu_smoketestrd   s    r-   test_spilu_smoketestzTestSplu.test_spilu_smoketest  s    ++-r.   c                 D   g dfd	}t         j                  t         j                  t         j                  t         j                  fD ]?  }t         j
                  t         j                  fD ]  }| j                  t        |||        A t        t              dkD         y )Nc                     | |z  }t        ||z
        j                         }t        |dk  |       |j                  t        j
                  t        j                  fv rj                  |       y y )N{Gz?)r>  r?  r   rV   r;   rD  r   append)rB   rC   r   ry   r@  errerrorss         r-   r4  z6TestSplu._internal_test_spilu_smoketest.<locals>.check  sX    AAa!e*.."CC$J$ww2::r}}55c" 6r.   gh㈵>rA  )r;   rC  rD  r   r   r   r(  r8  r#   r   r?  )rP   r4  rV   r   rM  s       @r-   rF  z'TestSplu._internal_test_spilu_smoketest  s|    	# jj"**bllBMMJ 	@E hh1 @	ueY?@	@ 	Fd"#r.   c           	          t        d      }dj                  d      dddj                  d      gg}|D ]&  }t        t        t	        ||      t
                     ( y )Nr3   s
   basic,areaasciis   basics   area)	drop_rule)r   decoder   r   r#   r   )rP   rB   rulesrules       r-   test_spilu_drop_rulezTestSplu.test_spilu_drop_rule  sa     QK   )w~~g./

  	CDJuQ$7AB	Cr.   c                 H    t        dd      }t        t        t        |       y NrT   rQ   rU   )r   rb   rc   r"   rP   rB   s     r-   test_splu_nnz0zTestSplu.test_splu_nnz0  s    uC(lD!,r.   c                 H    t        dd      }t        t        t        |       y rV  )r   rb   rc   r#   rW  s     r-   test_spilu_nnz0zTestSplu.test_spilu_nnz0  s    uC(lE1-r.   c                 j   d}t        j                  d      }|j                  ||      }d||dk  <   d|d d df<   t        |      }t	        t
        t        |       |dt        |      z  z  }t        |      }t        |      }t        |      }|j                  |      }t        t        ||      |       y )N   r   r   ffffff?rw   )r<   r1  r=   r   rb   rc   r"   r   r	   rZ   r   r
   )rP   rL   r6  r,   a_r5  rC   r   s           r-   test_splu_basiczTestSplu.test_splu_basic  s      $HHQN!d(!Q$]lD"- 	
Qs1vX]"XGHHQKC1Iq)r.   c                    d}t        j                   ||f      }d||dk  <   |dt        |      z  z  }t        |      }t        |      }|j                  |j
                  fD ]W  }t        t        |dkD               t        t        ||k               t        t        t        |            t        |             Y ||j                  z   }t        |      }t        |      }t        |j                  |j
                         y )Nr\  r   r]  rw   r2   )r<   r   r   r"   perm_rperm_cr   r   r   lenr   r   r   )rP   rL   r,   r^  r5  perms         r-   test_splu_permzTestSplu.test_splu_perm2  s    MM1a&!!d(	Qs1vX]"XYY		* 	7DCr	N#CqM"VD\*CI6	7 G]"X299bii0r.   zsplu_fun, rtolgHz>皙?c                 j   t         j                  j                  d       d}d}t        j                  j                  |||      }t         j                  j                  |      }||dz   t        j                  j                  |      z  z  }t        |      }||z  } ||      }	t        t        j                  |	j                  t        j                  |      k7                ||d      }	t        |	j                  t        j                  |             |	j                  |      }
t        ||
|       y )N*   i  rJ  r1   NATURAL)
permc_spec)r  )r;   r<   rN   r7   r8   r=   r   r   r   r   rb  r   r   rZ   r   )rP   splu_funr  rL   prB   r   A_rC   r5  r   s              r-   test_natural_permczTestSplu.test_natural_permcI  s     			rLL1a(IINN1	ac5<<((+++]F b\ryyBIIaL012 bY/299biil3 XXa[2D)r.   getrefcountzno sys.getrefcountrg   c                 h   d}t        j                   ||f      }d||dk  <   |dt        |      z  z  }t        |      }t        |      }t	        j
                  |      }dD ]P  }t        ||      }t        t	        j
                  |      |dz          ~t        t	        j
                  |      |       R y )Nr\  r   r]  rw   )ra  rb  r1   )r<   r   r   r"   sysro  getattrr   )rP   rL   r,   r^  r5  rcattrrd  s           r-   test_lu_refcountzTestSplu.test_lu_refcountb  s     MM1a&!!d(	Qs1vX]"X __R ( 	2D2t$D,b1f5,b1		2r.   c                    | j                   j                         }t        t        t        |d d d df          t        t        t
        |d d d df          t	        |      t        |      f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                                y )Nrw   rh  r6   r   )rB   rM   rb   rx   r"   r#   r<   r=   rL   rZ   r   r   r;   r   r   )rP   rB   r5  rC   r   r   s         r-   test_bad_inputszTestSplu.test_bad_inputsu  s    FFLLNj$!BQB$0j%1RaR417E!H% 
	3BBAB"ATVVQ*B*bhh2*bhh2*bhh3)RXX((2<<02)RXX((2==13
	3r.   c                 B   d}t        j                  |      dz   }t        |d|z  |d d d   fd||      }|j                  t         j                        }t        |       |d|z  z   }|j                  }t        t        j                  |      j                                 y )Nr   r1   r3   r2   rI   r  )
r;   r   r   r   rC  r#   rB   r   isnanr   )rP   rL   rQ   rB   r   s        r-   test_superlu_dlamch_i386_nanz%TestSplu.test_superlu_dlamch_i386_nan  s     IIaL1Q!QttW%z1a8HHRZZ a1HCCBHHQKOO%%&r.   c                     d fd	} |t         j                          |t         j                          |t         j                          |t         j                          |t         j                  d        |t         j                  d       y )Nc                    j                   j                  |       }|r|d|j                  z  z   }|j                  d   }t	        |      }t        j                  ||f      }d|t        j                  |      |j                  f<   t        j                  ||f      }d||j                  t        j                  |      f<   |j                         }|j                  |      j                  |      }|j                  |j                  z  j                         }	t        j                  |       j                  }
t!        ||	d|
z         y )Nr  r   r1   d   )r  )rB   r   r   r5   r"   r;   zerosr   rb  ra  r+   r
   LUr   r   r   )rV   	complex_2rB   rL   r5  PcPrAdlhsrhsr   rP   s              r-   r4  z$TestSplu.test_lu_attr.<locals>.check  s    e$A133J
AaB 1a&!B*+Bryy|RYY&'1a&!B*+Bryy"))A,&'B&&*..$C44"$$;'')C((5/%%CC3s73r.   T)F)r;   rC  rD  r   r   )rP   r4  s   ` r-   test_lu_attrzTestSplu.test_lu_attr  sV    	42 	bjjbjjbllbmmbllD!bmmT"r.   c                      g  fd}t        d      D cg c]  }t        j                  |       }}|D ]  }|j                           |D ]  }|j	                           t        t              d       y c c}w )Nc                      	 j                          j                          j                           j                  d       y # t        $ r Y y w xY w)NT)r_  r:  rF  rK  	Exception)oksrP   s   r-   workerz.TestSplu.test_threads_parallel.<locals>.worker  sJ    $$&224335

4  s   AA 	AAr   )target)range	threadingThreadstartjoinr   rc  )rP   r  r7  threadsr   r  s   `    @r-   test_threads_parallelzTestSplu.test_threads_parallel  s     	 ""I' ##62 ' ' 	AGGI	 	AFFH	 	SXr"'s   A;N)r   r   r   rR   r8  r*  r;  r:  rG  rF  rT  rX  rZ  r_  re  r   r   r'  r"   r#   rn  r   hasattrrq  ru  rw  rz  r  r   r  r   r.   r-   r,  r,    s%   !)F - -	? . .$  C C-.*(1. [[-tudm/LM* N*0 [[GC77@TU2 V2$3$ ' '   #  #D [[#  #r.   r,  c                       e Zd Zd Zd Zd Zed        Zed        Ze	j                  j                  e	j                  j                  d      ed                      Zy)	TestSpsolveTriangularc                     t        d       y rq   r   rd   s    r-   rR   z"TestSpsolveTriangular.setup_method  r   r.   c                 `   d}t         j                  j                  d      }|j                  ||f      }t        j                  |      }t
        j                  j                  |dd      }t        ||dd      }|j                  d       t        |j                  |      |       t        j                  g d	g d
g dgt         j                        }t        j                  g d      }t               5 }|j                  t         d       t        ||d       d d d        y # 1 sw Y   y xY w)NrH   l   [<zn( r   r   )r7  r   T)unit_diagonallowerr1   )r   r   r   r  )r1   r1   r   rU   r   zCSR matrix format is)r  )r;   r<   default_rngstandard_normalr   r7   r8   trilr&   setdiagr   r
   r   rD  r   rj   r   )rP   rL   r6  rB   rC   r   rn   s          r-   test_zero_diagonalz(TestSpsolveTriangular.test_zero_diagonal  s    ii##K0A'IIaLLLa1U3q!4tD			!a!$ HHiI6bjjIHH\"  	9CJJ.0FGq!48	9 	9 	9s   6%D$$D-c                     d}t        ||f      }t        j                  |      }dD ].  }t        t        j
                  j                  t        |||       0 y )NrH   TFr  )r   r;   r   rb   r7   r   LinAlgErrorr&   )rP   rL   rB   rC   r  s        r-   r   z#TestSpsolveTriangular.test_singular  sO    1vIIaL" 	[E%,,224F1TYZ	[r.   c                     t        j                  d      }t        d      }t        t        t
        ||       t        t        d            }t        ddg      }t        t        t
        ||       y r   )	r;   r~  r	   rb   rx   r&   r   r   r   r   s        r-   test_bad_shapez$TestSpsolveTriangular.test_bad_shape  sU     HHVLj"4a;AC:j"4b"=r.   c                     t        ddgddgg      }t        ddgddgg      }t         t        t        fD ]1  }t         ||      |d      }t	        |j                  |      |       3 y )Nr   rW   r   Tr  )r   r   r   r&   r   r
   )rP   rB   rC   matrix_typer   s        r-   test_input_typesz&TestSpsolveTriangular.test_input_types  sj    B8b"X&'B8b"X&'!:z: 	3K";q>1DAA%aeeAh2	3r.   x   c                 z   dd}t         j                  j                  d       dD ]  }dD ]	  } |||      }dD ]  }t         j                  j                  ||      t         j                  j	                  dd	||f      t         j                  j	                  dd	||f      t         j                  j	                  dd	||f      d
z  z   fD ]f  }t        |||      }t        |j                  |      |       t        |||d      }|j                  d       t        |j                  |      |       h    y )NTc                 ^   t         j                  j                  | | dd      }|r t         j                  j                  |      }nt         j                  j	                  |      }|j                  d      }t        |       D ](  }t        j                  j                         dz   |||f<   * |S )Nrf  coo)densityr   Fr   r1   )	r7   r8   r<   r  triutocsrr  r;   r=   )rL   r  rB   is       r-   random_triangle_matrixzATestSpsolveTriangular.test_random.<locals>.random_triangle_matrix  s    ##Aq#e#DALL%%a(LL%%a(U#A1X /))..*Q.!Q$/Hr.   rK   r  )r   r}  i  r  )r1   r   ir   r  )r  r  r1   )T)	r;   r<   rN   r=   randintr&   r   r
   r  )rP   r  r  rL   rB   mrC   r   s           r-   test_randomz!TestSpsolveTriangular.test_random  s"   		 			t" 	?E' ?*1E:  
?A iinnQ2 ii//A1v> ii//A1v> ii//A1v>CDE 	? /q!5A1!%%(A>.q!5=AC		!1!%%(A>	?
??	?r.   N)r   r   r   rR   r  r   r*  r  r  r   r   r   timeoutr  r   r.   r-   r  r    sw    %9&[ > > 3 3 [[[[?   ?r.   r  )Arq  r  numpyr;   r   r   r   r   r   r   r	   r
   numpy.randomr<   numpy.testingr   r   r   r   r   r   r   r   r   r   rb   scipy.linalgr7   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*  rj   scikits.umfpackrl   r   ImportErrorr+   rD   rF   r   r,  r  r   r.   r-   <module>r     s    
   C C C ) ) )  *  "L L L 'E E E  3 *+    4 5%K
E, E,Pu, u,pW# W#tN? N?c  Ks   $C C%$C%