
    ge+                         d dl Z d dl mZ d dlZd dlmZmZmZm	Z	m
Z
 d dlmZmZ  G d d          Z G d d          Z G d	 d
          ZdS )    N)raises)lu	lu_factorlu_solveget_lapack_funcssolve)assert_allcloseassert_array_equalc                      e Zd Zd Zd Zej                            dddgddgddgddgddgddgg dg dg d	g	          d
             Zej                            dddgddgddgddgddgddgg          d             Z	d Z
d ZdS )TestLUc                 N    t           j                            d          | _        d S N   n
@h/ nprandomdefault_rngrngselfs    Alib/python3.11/site-packages/scipy/linalg/tests/test_decomp_lu.pysetup_methodzTestLU.setup_method
       9(()9::    c           
         t          j        g dg dg dg          }t          |          \  }}}t          j        g dg dg dg          }t          |t          j        t          j        d                               t          |t          j        |d          t          j        d          z              t          |t          j        |                     t          j        g dg dg d	g          }t          |          \  }}}t          j        g d
g dg dg          }t          |t          j        t          j        d                               t          |t          j        |d          t          j        d          z              t          |t          j        |                     t          j        g dg dg dg          }t          |          \  }}}t          |t          j        g dg dg dg                     t          |t          j        g dg dg dg                     t          |t          j        g dg dg dg          dd           t          j        g dg dg dg          }t          |          \  }}}t          |t          j        g dg dg dg                     t          |t          j        g dg dg dg                     t          |t          j        g dg dg dg          dz  dd           t          j        g dg dg dg          }t          |          \  }}}t          |t          j        g dg dg dg                     t          |t          j        g dg dg d g                     t          |t          j        g dg d!g d"g          dd           t          j        g dg dg dg          dz  }	t          |	          \  }}}t          |t          j        g dg dg dg                     t          |t          j        g dg dg d g                     t          |t          j        g dg d!g d"g          dz  dd           t          j        g dg dg dg d#g          }
t          |
          \  }}}t          |t          j        d$          g d%d&d&f                    t          |t          j        g d'g d(g d)g d*g                     t          |t          j        g d#g d+g d,g                     t          j        g dg dg dg d#g          dz  }t          |          \  }}}t          |t          j        d$          g d%d&d&f                    t          |t          j        g d'g d(g d)g d*g                     t          |t          j        g d#g d+g d,g          dz             d&S )-z*Tests from old fortran based lu test suite         r         )       @g      @      @)      ?              )r%         ?r'   r   )kr                 @r"   )r#   r,   r$   )r%   y       @      r'      r!   r"         	   )r   r   r   )r   r   r   r   r   r   )g$I$I?r   r   )g$I$I?r%   r   )r   g۶m۶m?g۶m۶m?r   r   r   r'   g+=)rtolatol              ?y               @y              @y              @r,   y              @y              @y               @y              "@r8   r   r   r   r.   r!   r"   r0   r1   r2   
      r?   )gqq?r   r   )grq?r%   r   )r   gqq?g?gUUUUUU@)r   r   r&   r   r>   r?   r?   r.   )r   r   r   r   N)r(   r   r   )g?r   r   )gffffff?r&   r   )g?g      ?r%   )r   g?g?)r   r   g      ?)r   arrayr   r	   rot90eyetriltriu)r   aplu	result_lubcbhrectchrectvrectcvrects               r   test_old_lu_smoke_testszTestLU.test_old_lu_smoke_tests   s   HiiiIII677Q%%1aHlllOOO]]]KLL	28BF1II..///279333BF1II=>>>279--...HiiiJJJ788Q%%1aHmmm->->->NOO	28BF1II..///279333BF1II=>>>279--...HiiiIII677Q%%1a28YYY			999$EFFGGG28YYY]]]$KLLMMM28YYY			$JKKe	- 	- 	- 	- XlllCDDR&&1a28YYY			999$EFFGGG28YYY]]]$KLLMMM28YYY			$JKKBNe	- 	- 	- 	- ,,,oooFGGU))1a28YYY			999$EFFGGG28YYY]]]$KLLMMM28___6L6L6L%4__%6 7 7=?e	M 	M 	M 	M <<<GHHLV**1a28YYY			999$EFFGGG28YYY]]]$KLLMMM28___6L6L6L%4__%6 7 779:@B	P 	P 	P 	P )))YYY			<<<HIIU))1a26!99\\\111_566628ZZZnnn%5%5%5%7 8 8 	9 	9 	928\\\%2]]%1\\%3 4 4 	5 	5 	5 999iiiLLLIJJ2MV**1a26!99\\\111_566628ZZZ%0[[%3^^%5%5%5%7 8 8 	9 	9 	9 	28\\\%2]]%1\\%3 4 4467 	8 	8 	8 	8 	8r   shaper   r.      )r   r   r2   r2   )r   r      r!   )r   r      r0   c                    | j                             dd|          }t          |          \  }}}t          |||z  |z             t          |d          \  }}t          |||z             | j                             dd|          dz  }|| j                             dd|          z  }t          |d          \  }}t          |||z             d S )	N      $      $@sizeT	permute_lr8   ir>   r   uniformr   r	   )r   rR   rF   rG   rH   rI   plrK   s           r   "test_simple_lu_shapes_real_complexz)TestLU.test_simple_lu_shapes_real_complexN   s     HT3U33Q%%1a1q519%%%1%%%A26"""HT3U33B6	TXc2E2221%%%A26"""""r   c                     | j                             dd|          }t          |d          \  }}}t          |||d d f         |z             d S )NrW   rX   rY   T	p_indicesr]   )r   rR   rF   rG   rH   rI   s         r   -test_simple_lu_shapes_real_complex_2d_indicesz4TestLU.test_simple_lu_shapes_real_complex_2d_indices]   s^     HT3U33Q$'''1a1QT7Q;'''''r   c                    | j                             g dt          j                  }t	          |d          \  }}}t          |t          j        dt                               t          |t          j        dt          j                             t          ||           | j                             g dt          j                  }t	          |          \  }}}t          |t          j        dt          j                             t          |t          j        dt          j                             t          ||           t	          |d          \  }}t          |t          j        dt          j                             t          ||           | j                             g dt          j                  t          j	        d          z  }t	          |          \  }}}t          |t          j        dt          j	                             t          |t          j        dt          j	                             t          ||           d S )	N)r.   r!   r   r   dtypeTrb   )r.   r!   r   rR   rg   r[   r8   )
r   r   r   float32r   r	   zerosintones	complex64r   rF   rG   rH   rI   r_   s         r   test_1by1_input_outputzTestLU.test_1by1_input_outputd   s   HOOLLL
O;;Q$'''1a28)3???@@@27RZHHHIII1HOOLLL
O;;Q%%1a27RZHHHIII27RZHHHIII11%%%ABG,bjIIIJJJ1HOOLLL
O;;BL<M<MMQ%%1a27R\JJJKKK27R\JJJKKK1r   c                    t          j        ddg          }t          |          \  }}}t          |t          j        dt           j                             t          |t          j        dt           j                             t          |t          j        dt           j                             t          j        ddgt           j                  }t          |          \  }}}t          |t          j        dt           j                             t          |t          j        dt           j                             t          |t          j        dt           j                             t          j        ddgt           j                  }t          |          \  }}}t          |t          j        dt           j                             t          |t          j        dt           j                             t          |t          j        dt           j                             t          |d	          \  }}}t          |t          j        d
t                               t          |t          j        dt           j                             t          |t          j        dt           j                             t          |d          \  }}t          |t          j        dt           j                             t          |t          j        dt           j                             t          j        g dt           j                  }t          |          \  }}}t          |t          j        dt           j                             t          |t          j        dt           j                             t          |t          j        dt           j                             t          j        g d          }t          |          \  }}}t          |t          j        d                     t          |t          j        d                     t          |t          j        d                     t          t          d          5  t          t          j        g                      d d d            n# 1 swxY w Y   t          j        g g          }t          |          \  }}}t          |t          j        d                     t          |t          j        d                     t          |t          j        d                     t          j        g gg          }t          |          \  }}}t          |t          j        d                     t          |t          j        d                     t          |t          j        d                     d S )Nr   )r   r   rh   r   rf   )r   r   )r   r   Trb   )r   r[   )r   r   r   )r   r   r   r4   )rR   zat least two-dimensional)match)r   r   r3   )r   r   r   )r   emptyr   r	   float64float16ri   rm   rk   assert_raises
ValueErrorrA   rn   s         r   test_empty_edge_caseszTestLU.test_empty_edge_cases{   s   HaVQ%%1a28&
CCCDDD28&
CCCDDD28&
CCCDDDHaV2:...Q%%1a28&
CCCDDD28&
CCCDDD28&
CCCDDDHaV2<000Q%%1a28&
CCCDDD28&EEEFFF28&EEEFFFQ$'''1a28$c:::;;;28&EEEFFF28&EEEFFF1%%%ABH6FFFGGG28&EEEFFFHYYYbl333Q%%1a28)2:FFFGGG28)2<HHHIII28)2<HHHIIIHYYYQ%%1a28)44455528)44455528)444555:-GHHH 	 	rx||	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 HbTNNQ%%1a28&11122228&11122228&111222HrdVQ%%1a28)44455528)44455528)44455555s   #"SSSN)__name__
__module____qualname__r   rQ   pytestmarkparametrizer`   rd   ro   rw    r   r   r   r   	   s!       ; ; ;?8 ?8 ?8B [W1v1v1vBx(*AwB'4}}mmm'E F F
# 
#F F
# [W1v1v1vBx(*AwB'9 : :( (: :(
  .36 36 36 36 36r   r   c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestLUFactorc                 >   t           j                            d          | _        t          j        g dg dg dg          | _        t          j        g dg dg dg          | _        t          j        g dg dg dg          | _        t          j        g dg dg d	g          | _        t          j        g d
g dg dg          | _	        t          j        g d
g dg dg          dz  | _
        t          j        g dg dg dg dg          | _        dt          j        g dg dg dg dg          z  | _        | j                            d          | _        | j                            d          d| j                            d          z  z   | _        d S )Nr   r   r    r+   r-   r/   r7   r9   r:   r;   r<   r=   r8   r@   )   (   )r   r   r   r   rA   rF   carK   rL   rM   rN   rO   rP   medcmedr   s    r   r   zTestLUFactor.setup_method   s   9(()9::999iii;<<(IIIyyy***=>> 999iii;<<(LLL,,,EFF X|||\\\???KLL
hlll / 1 2 2478 Xyyy)))YYYMNN
BHiii&/ii&/ii&2ll&4 5 5 5 8??8,,HOOH--DHOOH4M4M0MM			r   c                     t          |          \  }}t          d|f          \  } ||d          \  }}}t          ||           t          ||           d S )N)getrfF)overwrite_a)r   r   r	   )r   datal_and_u1piv1r   l_and_u2piv2_s           r   _test_common_lu_factorz#TestLUFactor._test_common_lu_factor   se    "4$#J88!E$E:::$(+++d#####r   c                 :    |                      | j                   d S N)r   rM   r   s    r   test_hrectangularzTestLUFactor.test_hrectangular       ##DJ/////r   c                 :    |                      | j                   d S r   )r   rO   r   s    r   test_vrectangularzTestLUFactor.test_vrectangular   r   r   c                 :    |                      | j                   d S r   )r   rN   r   s    r   test_hrectangular_complexz&TestLUFactor.test_hrectangular_complex       ##DK00000r   c                 :    |                      | j                   d S r   )r   rP   r   s    r   test_vrectangular_complexz&TestLUFactor.test_vrectangular_complex   r   r   c                 :    |                      | j                   dS z:Check lu decomposition on medium size, rectangular matrix.N)r   r   r   s    r   test_medium1zTestLUFactor.test_medium1   s    ##DH-----r   c                 :    |                      | j                   dS r   )r   r   r   s    r   test_medium1_complexz!TestLUFactor.test_medium1_complex   s    ##DI.....r   c                 p    t          | j        d          \  }}}t          ||z  |z  | j                   d S )NFcheck_finite)r   rF   r	   )r   rG   rH   rI   s       r   test_check_finitezTestLUFactor.test_check_finite   s<    TV%0001aA	46*****r   c           	         dD ]|}t          j        ddgddgg|          }t          |          \  }}t          |t          j        ddgddgg                     t	          |t          j        ddg                     }d S )NCFr   r   r   r(   order)r   rA   r   r	   r
   )r   r   ALUPs        r   test_simple_knownzTestLUFactor.test_simple_known   s     	4 	4E1a&1b'*%888AaLLEBB1a&1a&)9 : :;;;q"(Aq6"2"23333		4 	4r   N)rx   ry   rz   r   r   r   r   r   r   r   r   r   r   r~   r   r   r   r      s        N N N2$ $ $0 0 00 0 01 1 11 1 1. . ./ / /+ + +4 4 4 4 4r   r   c                        e Zd Zd Zd Zd ZdS )TestLUSolvec                 N    t           j                            d          | _        d S r   r   r   s    r   r   zTestLUSolve.setup_method   r   r   c                 "   | j                             d          }| j                             d          }dD ]W}t          j        ||          }t	          ||          }t          |          }t          ||          }t          ||           Xd S )Nr>   r>   r>   r   r   )r   r   r   rA   r   r   r   r	   )r   a0rK   r   rF   x1lu_ax2s           r   test_luzTestLUSolve.test_lu   s    X__X&&HOOE"" 	$ 	$E5)))Aq!BQ<<D$""BB####	$ 	$r   c                     | j                             d          }| j                             d          }t          ||          }t          |d          }t	          ||d          }t          ||           d S )Nr   r   Fr   )r   r   r   r   r   r	   )r   rF   rK   r   r   r   s         r   r   zTestLUSolve.test_check_finite  sq    HOOH%%HOOE""1a[[///dAE222Br   N)rx   ry   rz   r   r   r   r~   r   r   r   r      sA        ; ; ;	$ 	$ 	$         r   r   )r{   r   ru   numpyr   scipy.linalgr   r   r   r   r   numpy.testingr	   r
   r   r   r   r~   r   r   <module>r      s    * * * * * *     I I I I I I I I I I I I I I = = = = = = = =e6 e6 e6 e6 e6 e6 e6 e6PB4 B4 B4 B4 B4 B4 B4 B4J                   r   