
    Ph                        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:jw                  e        	 d dl<m=Z= dZ>d Z@d ZA G d d      ZB G d d      ZC G d d      ZD G d d      ZE G d d      ZFej                  j                  e:ej                  j                  dg d      ej                  j                  dg d      d                             ZJy# e?$ r dZ>Y w 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)
	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                 <    t        |       r| j                         S | S N)r   toarray)as    zC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\scipy/sparse/linalg/_dsolve/tests/test_linsolve.pyr/   r/   '   s    {yy{    c                  H   d} d| z  }t        g dg df| dz
  | dz
  f      |dz  z  }t        | dz
        }t        |t        ||            t        |t        ||            z   t        |t        ||            z   }t        j                  j                  | dz
  dz        }||fS )N@      )   r6   )r6   r   r5   shaper7      )r   r   r   nprandomrand)NhAh1DeyeNAbs         r1   setup_bug_8278rD   .   s    A	!Ak:.qsAaCjA1a4HDQUD	dDt$	%d4&'
(d4&'
(A 			!ax Aa4Kr2   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f||f      j                         | _        t        j                  d       y )N   r5   r7   r6   r   rH   r8     )r   nr   tocscrB   r<   seedselfrL   ds      r1   setup_methodzTestFactorized.setup_method;   sZ    1IMQ!QttW-z:1Q%HNNPDr2   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      r1   _check_singularzTestFactorized._check_singularB   s0    e3'G!"q&-*Q-*:;r2   c                     d}t        t        j                  ||            }t        |      }t	        |      j                  |      }t         t        |      |      |       y )NrH   )r   r<   r=   r	   r#   solver   r(   )rP   rL   r0   rC   expecteds        r1   _check_non_singularz"TestFactorized._check_non_singularG   sL    fkk!Q'(G7==#!-*Q-"2H=r2   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    r1   test_singular_without_umfpackz,TestFactorized.test_singular_without_umfpackP   s.    e$</KL  " MLLs	   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     r1   test_singular_with_umfpackz)TestFactorized.test_singular_with_umfpackU   sC    d# CJJ~'UV//1E1EF !  s   ;AA$c                 <    t        d       | j                          y NFr^   r"   r\   rd   s    r1   !test_non_singular_without_umfpackz0TestFactorized.test_non_singular_without_umfpack\   s    e$  "r2   c                 <    t        d       | j                          y )NTr^   rr   rd   s    r1   test_non_singular_with_umfpackz-TestFactorized.test_non_singular_with_umfpack`   s    d#  "r2   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     r1   6test_cannot_factorize_nonsquare_matrix_without_umfpackzETestFactorized.test_cannot_factorize_nonsquare_matrix_without_umfpacke   s=    e$/:S1tvva!e}% 211s   AAc                 X    t        d       t        | j                  d d d df          y NTr^   rw   )r"   r(   rB   rd   s    r1   -test_factorizes_nonsquare_matrix_with_umfpackz<TestFactorized.test_factorizes_nonsquare_matrix_with_umfpackk   s"    d#466!BQB$< r2   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   r:   	   zis of incompatible sizer`   !object too deep for desired arrayr"   r(   rB   r<   r=   rL   rb   rx   )rP   rZ   rC   BBBs        r1   7test_call_with_incorrectly_sized_matrix_without_umfpackzFTestFactorized.test_call_with_incorrectly_sized_matrix_without_umfpackq   s    e$466"KKNKK1[[A&:-FG!H H:-FG!H H:!DF"IF F	 HGGGF F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   r:   r   r   r`   r   )rP   rZ   rC   r   r   ry   s         r1   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 2:S1"I 21 2111s   		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       r1   .test_call_with_cast_to_complex_without_umfpackz=TestFactorized.test_call_with_cast_to_complex_without_umfpack   sg    e$466"KKN,,.Ay0HIahhqk" JI /IIs   +BB	c                     t        d       t        | j                        }t        j                  d      }t
        j                  t
        j                  fD ]"  }t        t        ||j                  |             $ y r|   )r"   r(   rB   r<   r=   r;   r   r   r   r,   r   r   s       r1   +test_call_with_cast_to_complex_with_umfpackz:TestFactorized.test_call_with_cast_to_complex_with_umfpack   sP    d#466"KKN,,.A< /r2   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)r7   r   r5   r   )
      rH   g?)r   r5   r7   rw   r:   r:   r:   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          r1   test_assume_sorted_indices_flagz.TestFactorized.test_assume_sorted_indices_flag   s     .xx(),'t]F3V<G 	d=<!?AqMA
 	d>>''*Q))1-!-*Q-"2H=A A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        r1   test_bug_8278zTestFactorized.test_bug_8278   sK     	$d#1GGIqMaD!!a%+r2   N)__name__
__module____qualname__rR   rX   r\   re   pytestmarkskipifhas_umfpackro   rs   ru   rz   r}   r   r   r   r   r   slowr    r2   r1   rF   rF   :   sr   <
>#
 [[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 ,r2   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j                  j"                  ed               Zej                  j"                  ed               Zej                  j"                  eej                  j+                  e d      d                      Zej                  j"                  ed               Zd Zd Zd Zej                  j8                  ej                  j+                  e d      d               Zy)TestLinsolvec                     t        d       y rq   r"   rd   s    r1   rR   zTestLinsolve.setup_method   
    e$r2   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   r5   r7   r:   rw   rH   Matrix is exactly singular)
r   r   r   rj   r%   r!   r   r;   isfiniteany)rP   rB   rC   rn   r   s        r1   test_singularzTestLinsolve.test_singular   si    e3'/, 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   r8   r   r   )r;   r   int32r   Tr   r   rj   r%   r!   r   r   rc   )rP   ijvrB   rC   rn   r   s          r1   test_singular_gh_3312z"TestLinsolve.test_singular_gh_3312   s     XX<BHHMHHCDq"$$ix0IIbM	 #$

,.JKAqM % {{1~))++++ %$  		s*   .
C 8#C	-C 	CC 	C! C!formatcsccsr	idx_dtypec                 H   t        g dg dgddgfd      j                  |      }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   r5   rT   r8   r7   )r   rQ   FDFr   r   )r   asformatr   r   r/   r   r   epsr   indicesr   r!   r   )
rP   r   r   rB   rC   cond_Ar   r   Aspr   s
             r1   test_twodiagszTestLinsolve.test_twodiags   s     )9:QFC$&&.hv&6 	
/" aiik1%S-=q(AA"A(,,CA((1+C++,,YU,CCK**95*ACJQADSUOb6kC&778 #r2   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   r:   )r   r   r<   rN   randnr!   r   )rP   AdenseAsr   rC   x2s         r1   test_bvector_smoketestz#TestLinsolve.test_bvector_smoketest   s\    $$& ' vDLLOqDR^!!R(r2   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   r:   rw   )	r   r   r<   rN   r   r
   r!   r   r/   )rP   r   r   r   BdenseBsr   s          r1   test_bmatrix_smoketestz#TestLinsolve.test_bmatrix_smoketest   ss    $$& ' vDLLAvR_!!RZZ\2r2   c                     t        d      }t        d      }t        t        t        ||       t	        t        d            }t        ddg      }t        t        t        ||       y N)r:   rw   )rw   r5   r:   r          @)r	   rb   rx   r!   r   r   r   rP   rB   rC   A2b2s        r1   test_non_squarezTestLinsolve.test_non_square  sN     LLj'1a0s1vC:j'2r2r2   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   r5   r7   r7   r7   )r   r7   r7   r   r5   r7   )r5   r7   r:   rH   r   r   )r9   rV   )r   r   r5   r5   r   r   )r   r7   r5   r5   r   r   )r5   r5   r5   r5   r5   r5   )	r   r   floatr/   r!   scipylinalgrZ   r   )
rP   rowcolr   sMMsNr>   sXXs
             r1   test_example_comparisonz$TestLinsolve.test_example_comparison  s     M"M"^$c#Y'uEBJJLM"M"]#s3i(UCJJLR_LLq!$!!RZZ\2r2   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   r7   r5   r   r   r         @)      @       @g      $@)use_umfpackFerr_msgr   r5   r:   )r"   r   r   r   r   r   r;   r   rZ   r/   r   r!   ndimr9   ravelr   reprr   r   
isinstancendarrayr   rb   rx   )rP   rB   bsrC   r   	spmattypex1r   s           r1   test_shape_compatibilityz%TestLinsolve.test_shape_compatibility,  s    	d#AwA'(F1a&MS1#JA3*sQCj!sQCj!sQCj!sQCj!</0|]34|]34|]34|]34  A				WQZ8A'IyI	Yq\1$?Yq\1%@ 66Q;1771:?	A)'"+q269a7H2IK)'"+q269a7H2IK 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3= J D ffj'1a0r2   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       r1   test_ndarray_supportz!TestLinsolve.test_ndarray_supporth  sY     B8b"X&'B8c4[)*B8b"X&'!!WQ]3r2   c                    d}t        |      dz   }t        |d|z  |d d d   fdf||f      }t        t        fD ]  } ||      }t	        j                   |      }d }d }d	 }d
 }	||||	g}
|
D ]]  }|d|}t        t        t        ft        j                  ||j                   ||j                        |j                  |j                  |t        |j                  dk(        |
       t        t        t        ft        j                  ||j                  |j                   ||j                        |j                  |t        |j                  dk(        |
       t        t        t        ft        j                  ||j                  |j                  |j                   ||j                        |t        |j                  dk(        |
       `  y )Nr   r   r7   r6   rI   r8   c                 0    | j                  d      d d d   S )Nr7   )repeatr   s    r1   not_c_contigz5TestLinsolve.test_gssv_badinput.<locals>.not_c_contigz  s    xx{3Q3''r2   c                     | d d d f   S r.   r   r	  s    r1   not_1dimz1TestLinsolve.test_gssv_badinput.<locals>.not_1dim}  s    4y r2   c                 ,    | j                  t              S r.   )r   boolr	  s    r1   bad_typez1TestLinsolve.test_gssv_badinput.<locals>.bad_type  s    xx~%r2   c                     | d d S )Nr6   r   r	  s    r1   	too_shortz2TestLinsolve.test_gssv_badinput.<locals>.too_short  s    "vr2    r   r   )r   r   r   r   r;   rb   rx   r   r&   gssvnnzr   r   r   intr   )rP   r>   rQ   rB   	containerrC   r
  r  r  r  badopsbadopry   s                r1   test_gssv_badinputzTestLinsolve.test_gssv_badinputq  s   1IO1Q3$B$(*5aVD#Y/I!A		!A(!& #Hh	BF"Qui0z95x}}affqyy!((QXX%6!7F z95x}}aii0@!((QXX%6!7F z95x}}		5?QXX%6!7F  % 0r2   c                 F   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r5   r   r   )r   r5   r   )r   r   r5   r   r5   r:   r7   g-q=)atolrtol)r   r!   r   r  r   r/   )rP   identrC   r   s       r1   test_sparsity_preservationz'TestLinsolve.test_sparsity_preservation  s      FFF  E1UYY"QUUAQUUA		QYY[u5Ir2   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)r5   r7   r   )r   r   r:   )rw   r   rH   )rw   r   y      @      ?)r5   r5   r5                 ?)r   sparser   r;   r   r!   r   
issubdtyperV   floatingcomplexfloating)rP   A_real	A_complexb_real	b_complexr   s         r1   test_dtype_castzTestLinsolve.test_dtype_cast  s   ''*3*3)5 6 LL**I-6-;,= >	 '"HHW%288G+<(<<	FF#aggr{{34FI&aggr'9'9:;Iv&aggr'9'9:;Iy)aggr'9'9:;r2   c                     t        d       t        d       t               \  }}t        ||      }t	        ||z  |       y r   )r+   r"   rD   r!   r   )rP   rB   rC   r   s       r1   r   zTestLinsolve.test_bug_8278  s9     	$d#1AqM!!a%+r2   N)r   r   r   rR   r   r   r   r   parametrizer;   r   int64strrV   r   r   r   thread_unsafesup_sparse_efficiencyr   r   r   r   r  r  r  r  r*  r   r   r   r2   r1   r   r      s   %*$ [[Xu~6[[[288RXX*>?9C 9BHH 9 @ 79$
)
3 [[3  3 [[3  3$ [[[[K0GH71 I  71r [[4  4"FHJ<$ [[[[K0GH, I ,r2   r   c                      e Zd Zd Zd Zej                  j                  ed               Z	d Z
ej                  j                  ed               Zd Zej                  j                  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j                  j                  ed               Zej                  j                  ed               Zej                  j                  ej                  j:                  ed                      Zej                  j                  d        Zy)TestSpluc                     t        d       d}t        |      dz   }|| _        t        |d|z  |d d d   fdf||f      j	                         | _        t        j                  d	       y )
NFr^   (   r5   r7   r6   rI   r8   rK   )r"   r   rL   r   rM   rB   r<   rN   rO   s      r1   rR   zTestSplu.setup_method  sb    e$1IMQ!QttW-z:1a&IOOQDr2   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   r5   r7   zk=r   H)r;   r#  r%  rB   r   r   r   r   r<   RandomStaterL   r=   r9   rZ   conj)rP   spxlucheckrV   r   rB   lurngkry   rC   r   s               r1   
_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(' 0r2   c                 $    | j                          y r.   )_internal_test_splu_smoketestrd   s    r1   test_splu_smoketestzTestSplu.test_splu_smoketest  s     	**,r2   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         r1   r:  z5TestSplu._internal_test_splu_smoketest.<locals>.check  sE    ((177#''CAACAJNN$s3w.4r2    )	r;   float32float64r   r   r   r-  r>  r#   )rP   r:  rV   r   s       r1   r@  z&TestSplu._internal_test_splu_smoketest  sV    	5
 jj"**bllBMMJE hh1	eUI> 2 Kr2   c                 $    | j                          y r.   )_internal_test_spilu_smoketestrd   s    r1   test_spilu_smoketestzTestSplu.test_spilu_smoketest  s     	++-r2   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?)rD  rE  r   rV   r;   rJ  r   append)rB   rC   r   ry   rF  errerrorss         r1   r:  z6TestSplu._internal_test_spilu_smoketest.<locals>.check  sX    AAa!e*.."CC$J$ww2::r}}55c" 6r2   gh㈵>rG  )r;   rI  rJ  r   r   r   r-  r>  r$   r   rE  )rP   r:  rV   r   rS  s       @r1   rL  z'TestSplu._internal_test_spilu_smoketest  so    	# jj"**bllBMMJE hh1	ueY? 2 K 	Fd"#r2   c           	          t        d      }dj                  d      dddj                  d      gg}|D ]&  }t        t        t	        ||      t
                     ( y )Nr7   s
   basic,areaasciis   basics   area)	drop_rule)r   decoder   r   r$   r    )rP   rB   rulesrules       r1   test_spilu_drop_rulezTestSplu.test_spilu_drop_rule  sZ     aL   )w~~g./

 DJuQ$7AB r2   c                 H    t        dd      }t        t        t        |       y NrT   rQ   rU   )r   rb   rc   r#   rP   rB   s     r1   test_splu_nnz0zTestSplu.test_splu_nnz0   s    e3'lD!,r2   c                 H    t        dd      }t        t        t        |       y r\  )r   rb   rc   r$   r]  s     r1   test_spilu_nnz0zTestSplu.test_spilu_nnz0$  s    e3'lE1-r2   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<   r7  r=   r   rb   rc   r#   r   r	   rZ   r   r
   )rP   rL   r<  r0   a_r;  rC   r   s           r1   test_splu_basiczTestSplu.test_splu_basic(  s      $HHQN!d(!Q$q\lD"- 	
Qs1vXq\"XGHHQKC1Iq)r2   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 )Nrb  r   rc  rw   r6   )r<   r   r   r#   perm_rperm_cr   r   r   lenr   r   r   )rP   rL   r0   rd  r;  perms         r1   test_splu_permzTestSplu.test_splu_perm<  s    MM1a&!!d(	Qs1vXq\"XYY		*DCr	N#CqM"VD\*CI6 + Gq\"X299bii0r2   zsplu_fun, rtolgHz>皙?c                 R   t         j                  j                  d      }d}d}t        j                  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  rP  )random_stater5   NATURAL)
permc_spec)r  )r;   r<   r7  r   r"  r=   r   r   r   r   rh  r   r   rZ   r   )rP   splu_funr  r<  rL   prB   r   A_rC   r;  r   s               r1   test_natural_permczTestSplu.test_natural_permcS  s     ii##B'LL1ac:HHQK	ac5<<))!,,,q\F b\ryyBIIaL012 bY/299biil3 XXa[2D)r2   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 )Nrb  r   rc  rw   )rg  rh  r5   )r<   r   r   r#   sysrv  getattrr   )rP   rL   r0   rd  r;  rcattrrj  s           r1   test_lu_refcountzTestSplu.test_lu_refcountl  s     MM1a&!!d(	Qs1vXq\"X __R (D2t$D,b1f5,b1	 )r2   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   rn  r:   r   )rB   rM   rb   rx   r#   r$   r<   r=   rL   rZ   r   r   r;   r   r   )rP   rB   r;  rC   r   r   s         r1   test_bad_inputszTestSplu.test_bad_inputs  s    FFLLNj$!BQB$0j%1RaR417E!H%BBAB"ATVVQ*B*bhh2*bhh2*bhh3)RXX((2<<02)RXX((2==13 &r2   c                 P   d}t        j                  |      dz   }t        |d|z  |d d d   fdf||f      }|j                  t         j                        }t        |       |d|z  z   }|j                         }t        t        j                  |      j                                 y )Nr   r5   r7   r6   rI   r8   r!  )
r;   r   r   r   rI  r$   r/   r   isnanr   )rP   rL   rQ   rB   r   s        r1   test_superlu_dlamch_i386_nanz%TestSplu.test_superlu_dlamch_i386_nan  s     IIaL11Q3$B$(*5aVDHHRZZ a1HIIKBHHQKOO%%&r2   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   r5   d   r  )rB   r   r   r9   r#   r;   zerosr   rh  rg  r/   r
   LUr   r   r   )rV   	complex_2rB   rL   r;  PcPrAdlhsrhsr   rP   s              r1   r:  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3r2   T)F)r;   rI  rJ  r   r   )rP   r:  s   ` r1   test_lu_attrzTestSplu.test_lu_attr  sV    	42 	bjjbjjbllbmmbllD!bmmT"r2   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)re  r@  rL  rQ  	Exception)oksrP   s   r1   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   ri  )rP   r  r=  threadsr   r  s   `    @r1   test_threads_parallelzTestSplu.test_threads_parallel  s{     	 ""I'%q ##62% 	 'AGGI AFFH  	SXr"'s   A;c                    t        dd      }d|d<   t        j                  d      }t        j                  t
              5  t        ||      }t        j                  |      j                         sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r   r   r   )r6   r6   )	r   r;   r  r   warnsr%   r!   r  r   )rP   rB   rC   ress       r1   test_singular_matrixzTestSplu.test_singular_matrix  sd     b'&	HHRL\\+,!Q-C88C=$$&&& -,,s   2A==BN) r   r   r   rR   r>  r   r   r/  r0  rA  r@  rM  rL  rZ  r^  r`  re  rk  r,  r#   r$   ru  r   hasattrrx  r|  r~  r  r  r   r  r  r   r2   r1   r2  r2    s   !)F [[-  -	? [[.  .$  [[C  C-.*(1. [[-tudm/LM* N*0 [[GC77@TU2 V2$3$ [['  '  [[ #   #D [[[[#   #* [[' 'r2   r2  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestGstrsErrorsc                     t        g dg dg dgt        j                        | _        t        j                   dgdgdggt        j                        | _        y )Nr   )g      @g      @r   )g      @r   g      "@rU   r   r   r   )r   r;   rJ  rB   rC   rd   s    r1   rR   zTestGstrsErrors.setup_method  s>    mM-@

Sdfxx#ucU+2::>dfr2   c                 &   t         j                  j                  | j                  d      }t         j                  j	                  | j                  dd      }t        t        d      5  t        j                  d|j                  d   |j                  |j                  |j                  |j                  |j                  d   |j                  |j                  |j                  |j                  | j                         d d d        y # 1 sw Y   y xY w)	Nr   r  r5   r=  r   ztrans must be N, T, or Hr`   r   r   r   r"  trilrB   triurb   rx   r&   gstrsr9   r  r   r   r   rC   rP   r  r  s      r1   
test_transzTestGstrsErrors.test_trans  s    LLdffU3LLdff%8:-GHNN3
AEE166199ahh !
AEE166199ahhPTPVPVX IHHs   )BDDc                 8   t         j                  j                  | j                  ddddf   d      }t         j                  j	                  | j                  dd      }t        t        d      5  t        j                  d	|j                  d   |j                  |j                  |j                  |j                  |j                  d   |j                  |j                  |j                  |j                  | j                         d d d        y # 1 sw Y   y xY w)
Nr   r7   r   r  r5   r  z$L and U must have the same dimensionr`   r>   r  r  s      r1   test_shape_LUzTestGstrsErrors.test_shape_LU  s    LLdffQqS1Woe<LLdff%8:-STNN3
AEE166199ahh !
AEE166199ahhPTPVPVX UTTs   2BDDc                 ,   t         j                  j                  | j                  d      }t         j                  j	                  | j                  dd      }t        t        d      5  t        j                  d|j                  d   |j                  |j                  |j                  |j                  |j                  d   |j                  |j                  |j                  |j                  | j                  dd	        d d d        y # 1 sw Y   y xY w)
Nr   r  r5   r  z'right hand side array has invalid shaper`   r>   r   r7   r  r  s      r1   test_shape_bzTestGstrsErrors.test_shape_b  s    LLdffU3LLdff%8:-VWNN3
AEE166199ahh !
AEE166199ahh $q- XWWs   )BD

Dc                 `   t         j                  j                  | j                  j	                  t
        j                        d      }t         j                  j                  | j                  dd      }t        t        d      5  t        j                  d|j                  d   |j                  |j                  |j                  |j                   |j                  d   |j                  |j                  |j                  |j                   | j"                         d d d        y # 1 sw Y   y xY w)	Nr   r  r5   r  znzvals types of L and U differr`   r>   r   )r   r"  r  rB   r   r;   rI  r  rb   r   r&   r  r9   r  r   r   r   rC   r  s      r1   test_types_differz!TestGstrsErrors.test_types_differ  s    LLdffmmBJJ7FLLdff%89,LMNN3
AEE166199ahh !
AEE166199ahhPTPVPVX NMMs   BD$$D-c                    t         j                  j                  | j                  j	                  t
        j                        d      }t         j                  j                  | j                  j	                  t
        j                        dd      }t        t        d      5  t        j                  d|j                  d   |j                  |j                  |j                  |j                   |j                  d   |j                  |j                  |j                  |j                   | j"                  j	                  t
        j                               d d d        y # 1 sw Y   y xY w)	Nr   r  r5   r  z!nzvals is not of a type supportedr`   r>   r   )r   r"  r  rB   r   r;   uint8r  rb   r   r&   r  r9   r  r   r   r   rC   r  s      r1   test_types_unsupportedz&TestGstrsErrors.test_types_unsupported  s    LLdffmmBHH5eDLLdffmmBHH55I9,OPNN3
AEE166199ahh !
AEE166199ahh $bhh 79 QPPs   #B2EE'N)	r   r   r   rR   r  r  r  r  r  r   r2   r1   r  r    s#    ?XX-X9r2   r  c                   h   e Zd Zd Zej
                  j                  dddg      d        Zej
                  j                  dddg      d        Zej
                  j                  e
d               Zej
                  j                  e
d               Zej
                  j                  ej
                  j                  e
ej
                  j                  d	g d
      ej
                  j                  dddg      ej
                  j                  dddg      ej
                  j                  dddg      ej
                  j                  dddg      ej
                  j                  dddg      ej
                  j                  dg d      d                                                                       Zy)TestSpsolveTriangularc                     t        d       y rq   r   rd   s    r1   rR   z"TestSpsolveTriangular.setup_method  r   r2   fmtr   r   c                 `   d}t         j                  j                  d      }|j                  ||f      }t        j                  |      }t
        j                  j                  |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  T)unit_diagonallowerr5   )r   r   r   r  )r5   r5   r   rU   r   zCSC or CSR matrix format is)r  )r;   r<   default_rngstandard_normalr   r   r"  r  r'   setdiagr   r
   r   rJ  r   rj   r   )rP   r  rL   r<  rB   rC   r   rn   s           r1   test_zero_diagonalz(TestSpsolveTriangular.test_zero_diagonal  s    ii##K0A'IIaLLLa1S1q!4tD			!a!$ HHiI6bjjIHH\" CJJ.0MNq!48 !  s   6%D$$D-c                     d}|dk(  rt        ||f      }nt        ||f      }t        j                  |      }dD ].  }t	        t
        j                  j                  t        |||       0 y )NrH   r   TFr  )	r   r   r;   r   rb   r   r   LinAlgErrorr'   )rP   r  rL   rB   rC   r  s         r1   r   z#TestSpsolveTriangular.test_singular-  s_    %<1a&!A1a&!AIIaL"E%,,22,a%A #r2   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        r1   test_bad_shapez$TestSpsolveTriangular.test_bad_shape9  sU     HHVLj"4a;s1vC:j"4b"=r2   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        r1   test_input_typesz&TestSpsolveTriangular.test_input_typesE  sg     B8b"X&'B8b"X&'!9i8K";q>1DAA%aeeAh2 9r2   rL   r   r  i  mr5   r   r  TFr   r  choice_of_Arealcomplexchoice_of_b)floatsintscomplexintsc                 0   dd}t         j                  j                  d        |||      }	|dk(  r!t         j                  j                  ||      }
n|dk(  r$t         j                  j	                  dd||f      }
n[|dk(  rKt         j                  j	                  dd||f      t         j                  j	                  dd||f      d	z  z   }
nt        d
      t        |	|
||      }|r|	j                  d       t        |	j                  |      |
d       y )Nc           	      b   |dk(  rt         j                  }n!|dk(  rt         j                  }nt        d      t         j                  j                  d      }|j                  }t        j                  j	                  | | dd|||      }|r"t        j                  j                  |d      }n!t        j                  j                  |d      }t        |       D ](  }t         j                  j                         d	z   |||f<   * |d
k(  r|j                  d      }|S |j                  d      }|S )Nr  r  z(choice_of_A must be 'real' or 'complex'.iO8/rl  lil)densityr   rV   ro  data_rvsr  r5   r   Fr   )r;   rJ  r   rx   r<   r  r   r"  r  r  r  r=   rM   tocsr)	rL   r  r   r  rV   r<  rvsrB   is	            r1   random_triangle_matrixzATestSpsolveTriangular.test_random.<locals>.random_triangle_matrixY  s
   f$

	) !KLL))''	2C**C##Aq#e5!$s $ 4ALL%%a%6LL%%a%61X))..*Q.!Q$ GGG' H GGG'Hr2   rK   r  r  r  ir   r  r!  z7choice_of_b must be 'floats', 'ints', or 'complexints'.)r  r  r5   gTqs*>r  )Tr   r  )
r;   r<   rN   r=   randintrx   r'   r  r   r
   )rP   rL   r  r  r   r  r  r  r  rB   rC   r   s               r1   test_randomz!TestSpsolveTriangular.test_randomN  s    	. 			t"1E2("		q!$AF"		!!"a!Q0AM)		!!"a!Q02993D3DRQPQF3SVX3XXAIK Kq!5NIIaLa!&1r2   N)r   r   r   rR   r   r   r,  r  r   r/  r0  r  r  r   r  r   r2   r1   r  r    s   % [[UE%=19 29& [[UE%=1	A 2	A [[>  > [[3  3 [[[[[[S"45[[S1b'*[[WtUm4[[Xu~6[[_udm<[[]VY,?@[[],MN&2 O A = 7 5 + 6   &2r2   r  r  r  r  )r   r   coodiadokr  c                    t         j                  j                  d      }| dz  }d}t        j                  j                  ||f|d|      }dx|d<   |d<   |j                  |      }t        j                  j                  ||	      }t        j                  j                  ||	      }dt        j                  j                  ||	      z  }t        |      d
k(  sJ t        |      dk(  sJ t        |      dk(  sJ t        |      dk(  sJ t        |      t        j                  j                  |j                               k(  sJ t        |      t        j                  j                  |j                               k(  sJ t        |      t        j                  j                  |j                               k(  sJ t        |      t        j                  j                  |j                               k(  sJ y )Nrn  r7   rl  r   )r  r   r<     r   )r:   r5   r  )FFr  )FT)TT)r;   r<   r  r   r"  random_arrayr   r  r  r   r)   r*   r   	bandwidthr/   )	r  r  r<  r>   densrB   AUALr   s	            r1   $test_is_sptriangular_and_spbandwidthr    s   
 ))


#CqAD!!1a&$u#!NAAdGag	

3A			1S		)B			1S		)Bell$$Qs$33A1///2-///2-///1---q>U\\33AIIK@@@@r?ell44RZZ\BBBBr?ell44RZZ\BBBBq>U\\33AIIK@@@@r2   )Krx  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.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,   r0  rj   scikits.umfpackrl   r   ImportErrorr/   rD   rF   r   r2  r  r  r   r/  r,  r  r   r2   r1   <module>r     sJ   
   C C C ) ) )  *  "O O O '& & &  3 + *+    4 5%K	E, E,P{, {,|h' h'V	(9 (9Ti2 i2X  23 JKA L 4  AC  Ks   0E EE