
    ^MhU1                         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mZ ej        ej        gZej        ej        gZeez   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_equalassert_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    a/var/www/html/test/jupyter/venv/lib/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              "@r9   r   r   r    r/   r"   r#   r1   r2   r3   
      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   r3   r3   )r   r      r"   )r   r      r1   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_lr9   ir?   r   uniformr   r	   )r   rS   rG   rH   rI   rJ   plrL   s           r   "test_simple_lu_shapes_real_complexz)TestLU.test_simple_lu_shapes_real_complexS   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 )NrX   rY   rZ   T	p_indicesr^   )r   rS   rG   rH   rI   rJ   s         r   -test_simple_lu_shapes_real_complex_2d_indicesz4TestLU.test_simple_lu_shapes_real_complex_2d_indicesb   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   dtypeTrc   )r/   r"   r   rS   rh   r\   r9   )
r   r   r   float32r   r	   zerosintones	complex64r   rG   rH   rI   rJ   r`   s         r   test_1by1_input_outputzTestLU.test_1by1_input_outputi   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   ri   r    rg   )r   r    )r    r   Trc   r   r\   )r    r   r   )r   r   r    r5   )rS   zat least two-dimensional)match)r   r   r4   )r   r   r   )r   emptyr   r	   float64float16rj   rn   rl   assert_raises
ValueErrorrB   ro   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   rR   pytestmarkparametrizera   re   rp   rz    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ej                            dg d          ej                            dg d          ej                            de          d                                     Zej                            dg d          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.   r0   r8   r:   r;   r<   r=   r>   r9   rA   )   (   )r   r   r   r   rB   rG   carL   rM   rN   rO   rP   rQ   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   rN   r   s    r   test_hrectangularzTestLUFactor.test_hrectangular       ##DJ/////r   c                 :    |                      | j                   d S r   )r   rP   r   s    r   test_vrectangularzTestLUFactor.test_vrectangular   r   r   c                 :    |                      | j                   d S r   )r   rO   r   s    r   test_hrectangular_complexz&TestLUFactor.test_hrectangular_complex       ##DK00000r   c                 :    |                      | j                   d S r   )r   rQ   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   rG   r	   )r   rH   rI   rJ   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   rB   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   m)r   r   r   nrh   c                 :   t          ||          }t          j        |||          }t          |          \  }}t	          |j        ||f           t	          |j        |           t	          |j        |f           t	          |j        t          j                   d S )Nrg   )minr   rD   r   r   rS   rh   int32)r   r   r   rh   r+   rG   r   rH   s           r   test_shape_dtypezTestLUFactor.test_shape_dtype   s     1IIF1au%%%!ARX1v&&&RXu%%%QWqd###QWbh'''''r   )r   r   )rr   )r   r   )r   r   c                     t          j        ||f          }t          |          \  }}t          |t          j        ||f                     t          |t          j        d                     d S )Nr   )r   rk   r   r	   ru   arange)r   r   r   rG   r   rH   s         r   
test_emptyzTestLUFactor.test_empty  s`    HaV!ABHaV,,---29Q<<(((((r   N)r{   r|   r}   r   r   r   r   r   r   r   r   r   r   r~   r   r   DTYPESr   r   r   r   r   r   r      sS       N N N2$ $ $0 0 00 0 01 1 11 1 1. . ./ / /+ + +4 4 4 [S))),,[S))),,[Wf--( ( .- -, -,( [Z)A)A)ABB) ) CB) ) )r   r   c            	           e Zd Zd Zd Zd Zej                            de	e
ej        eej        g          ej                            de	e
ej        eej        g          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   rB   r   r   r   r	   )r   a0rL   r   rG   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   rG   rL   r   r   r   s         r   r   zTestLUSolve.test_check_finite  sq    HOOH%%HOOE""1a[[///dAE222Br   dtdt_bc                    t          j        d|          t          j        g           f}t          j        g |          }t	          ||          }|j        dk    sJ t	          t          j        d|          ddgft          j        d|                    }|j        |j        k    sJ t          j        d|          }t	          ||          }|j        dk    sJ |j        |j        k    sJ d S )Nrr   rg   rs   r   r   r   )	r   ru   rB   asarrayr   rS   rD   rm   rh   )r   r   r   
lu_and_pivrL   xr   s          r   r   zTestLUSolve.test_empty&  s     hvR000"(2,,?
Jr&&&Z##w$bfQb)))Aq62BGAT4J4J4JKKw!'!!!!HV4(((Z##w&    w!'!!!!!!r   N)r{   r|   r}   r   r   r   r~   r   r   rl   floatr   rj   complexrn   r   r   r   r   r   r     s        ; ; ;	$ 	$ 	$      [TC
GR\#RSS[Vc5"*gr|%TUU" " VU TS" " "r   r   )r~   r   rx   numpyr   scipy.linalgr   r   r   r   r   numpy.testingr	   r
   r   rj   rv   REAL_DTYPESrn   
complex128COMPLEX_DTYPESr   r   r   r   r   r   r   <module>r      s0    * * * * * *     I I I I I I I I I I I I I I K K K K K K K K K K z2:&,.	~	%e6 e6 e6 e6 e6 e6 e6 e6PV) V) V) V) V) V) V) V)r%" %" %" %" %" %" %" %" %" %"r   