
    tKgV1                         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y)    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                  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                  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y)TestLUc                 L    t         j                  j                  d      | _        y N   n
@h/ nprandomdefault_rngrngselfs    e/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/linalg/tests/test_decomp_lu.pysetup_methodzTestLU.setup_method       99(()9:    c           
      Z   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         y&)-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@   HHiI67Q%1aHHlO]KL	288BFF1I./27793BFF1I=>2779-.HHiJ78Q%1aHHm->NO	288BFF1I./27793BFF1I=>2779-.HHiI67Q%1a288Y	9$EFG288Y]$KLM288Y	$JKe	- XXlCDR&1a288Y	9$EFG288Y]$KLM288Y	$JKBNe	- ,oFGU)1a288Y	9$EFG288Y]$KLM288_6L%4%6 7=?e	M <GHLV*1a288Y	9$EFG288Y]$KLM288_6L%4%6 779:@B	P )Y	<HIU)1a266!9\1_56288Zn%5%7 8 	9288\%2%1%3 4 	5 9iLIJ2MV*1a266!9\1_56288Z%0%3%5%7 8 	9 	288\%2%1%3 4467 	8r   shaper   r/      )r    r   r3   r3   )r   r      r"   )r   r      r1   c                    | j                   j                  dd|      }t        |      \  }}}t        |||z  |z         t        |d      \  }}t        |||z         | j                   j                  dd|      dz  }|| j                   j                  dd|      z  }t        |d      \  }}t        |||z         y )	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     HHT3U3Q%1a1q519%1%A26"HHT3U3B6	TXXc2E221%A26"r   c                     | j                   j                  dd|      }t        |d      \  }}}t        |||d d f   |z         y )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   sG     HHT3U3Q$'1a1QT7Q;'r   c                    | j                   j                  g dt        j                        }t	        |d      \  }}}t        |t        j                  dt                     t        |t        j                  dt        j                               t        ||       | j                   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                   j                  g dt        j                        t        j                  d      z  }t	        |      \  }}}t        |t        j                  dt        j                               t        |t        j                  dt        j                               t        ||       y )	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   sq   HHOOL

O;Q$'1a288)3?@277RZZHI1HHOOL

O;Q%1a277RZZHI277RZZHI11%ABGG,bjjIJ1HHOOL

O;BLL<MMQ%1a277R\\JK277R\\J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        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             y # 1 sw Y   xY w)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   HHaVQ%1a288&

CD288&

CD288&

CDHHaV2::.Q%1a288&

CD288&

CD288&

CDHHaV2<<0Q%1a288&

CD288&EF288&EFQ$'1a288$c:;288&EF288&EF1%ABHH6FG288&EFHHYbll3Q%1a288)2::FG288)2<<HI288)2<<HIHHYQ%1a288)45288)45288)45:-GHrxx| I HHbTNQ%1a288&12288&12288&12HHrdVQ%1a288)45288)45288)45 IHs   W		WN)__name__
__module____qualname__r   rR   pytestmarkparametrizera   re   rp   rz    r   r   r   r      s    ;?8B [[W1v1v1vBx(*AwB'4m'E F
#F
# [[W1v1v1vBx(*AwB'9 :(:(
.36r   r   c                   X   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                  j                  dg d      ej                  j                  dg d      ej                  j                  de      d                      Zej                  j                  dg d      d        Zy)TestLUFactorc                 R   t         j                  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                  j                  d      | _        | j                  j                  d      d| j                  j                  d      z  z   | _        y )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   s7   99(()9:9i;<((Iy*=> 9i;<((L,EF XX|\?KL
hhl / 1 2478 XXy)YMN
BHHi&/&/&2&4 5 5 88??8,HHOOH-DHHOOH4M0MM	r   c                     t        |      \  }}t        d|f      \  } ||d      \  }}}t        ||       t        ||       y )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   sF    "4$#J8!$E:$(+d#r   c                 :    | j                  | j                         y N)r   rN   r   s    r   test_hrectangularzTestLUFactor.test_hrectangular       ##DJJ/r   c                 :    | j                  | j                         y r   )r   rP   r   s    r   test_vrectangularzTestLUFactor.test_vrectangular   r   r   c                 :    | j                  | j                         y r   )r   rO   r   s    r   test_hrectangular_complexz&TestLUFactor.test_hrectangular_complex       ##DKK0r   c                 :    | j                  | j                         y r   )r   rQ   r   s    r   test_vrectangular_complexz&TestLUFactor.test_vrectangular_complex   r   r   c                 :    | j                  | j                         yz:Check lu decomposition on medium size, rectangular matrix.N)r   r   r   s    r   test_medium1zTestLUFactor.test_medium1   s    ##DHH-r   c                 :    | j                  | j                         yr   )r   r   r   s    r   test_medium1_complexz!TestLUFactor.test_medium1_complex   s    ##DII.r   c                 r    t        | j                  d      \  }}}t        ||z  |z  | j                         y )NFcheck_finite)r   rG   r	   )r   rH   rI   rJ   s       r   test_check_finitezTestLUFactor.test_check_finite   s.    TVV%01aA	466*r   c           	          dD ]s  }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             u y )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   sm    E1a&1b'*%8AaLEBB1a&1a&)9 :;q"((Aq6"23	  r   m)r   r   r   nrh   c                 :   t        ||      }t        j                  |||      }t        |      \  }}t	        |j
                  ||f       t	        |j                  |       t	        |j
                  |f       t	        |j                  t        j                         y )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   sp     1IFF1au%!ARXX1v&RXXu%QWWqd#QWWbhh'r   )r   r   )rr   )r   r   )r   r   c                     t        j                  ||f      }t        |      \  }}t        |t        j                  ||f             t        |t        j
                  d             y )Nr   )r   rk   r   r	   ru   arange)r   r   r   rG   r   rH   s         r   
test_emptyzTestLUFactor.test_empty  sJ    HHaV!ABHHaV,-299Q<(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      s    N2$0011./+4 [[S),[[S),[[Wf-( . - -( [[Z)AB) C)r   r   c            	          e Zd Zd Zd Zd Zej                  j                  de	e
ej                  eej                  g      ej                  j                  de	e
ej                  eej                  g      d               Zy)TestLUSolvec                 L    t         j                  j                  d      | _        y r   r   r   s    r   r   zTestLUSolve.setup_method  r   r   c                 
   | j                   j                  d      }| j                   j                  d      }dD ]H  }t        j                  ||      }t	        ||      }t        |      }t        ||      }t        ||       J y )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  sj    XX__X&HHOOE"E5)Aq!BQ<D$"BB#  r   c                     | j                   j                  d      }| j                   j                  d      }t        ||      }t        |d      }t	        ||d      }t        ||       y )Nr   r   Fr   )r   r   r   r   r   r	   )r   rG   rL   r   r   r   s         r   r   zTestLUSolve.test_check_finite  sU    HHOOH%HHOOE"1a[/dAE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 y )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     hhvR0"((2,?
JJr&Z#ww$bffQb)Aq62BGGAT4JKww!''!!!HHV4(Z#ww&   ww!''!!!r   N)r{   r|   r}   r   r   r   r~   r   r   rl   floatr   rj   complexrn   r   r   r   r   r   r     sw    ;	$  [[TC

GR\\#RS[[Vc5"**gr||%TU" V T"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      sn     *  I I K K zz2::&,,.	~	%e6 e6PV) V)r%" %"r   