
    xf+                         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y)    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                  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    C/usr/lib/python3/dist-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              "@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@   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   r2   r2   )r   r      r!   )r   r      r0   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_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     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 )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]   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   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   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   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   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|	 HHbTNQ%1a288&12288&12288&12HHrdVQ%1a288)45288)45288)45	 	s   W		WN)__name__
__module____qualname__r   rQ   pytestmarkparametrizer`   rd   ro   rw    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                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z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-   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   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   rM   r   s    r   test_hrectangularzTestLUFactor.test_hrectangular       ##DJJ/r   c                 :    | j                  | j                         y r   )r   rO   r   s    r   test_vrectangularzTestLUFactor.test_vrectangular   r   r   c                 :    | j                  | j                         y r   )r   rN   r   s    r   test_hrectangular_complexz&TestLUFactor.test_hrectangular_complex       ##DKK0r   c                 :    | j                  | j                         y r   )r   rP   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   rF   r	   )r   rG   rH   rI   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   rA   r   r	   r
   )r   r   ALUPs        r   test_simple_knownzTestLUFactor.test_simple_known   sr     	4E1a&1b'*%8AaLEBB1a&1a&)9 :;q"((Aq6"23		4r   N)rx   ry   rz   r   r   r   r   r   r   r   r   r   r   r~   r   r   r   r      s5    N2$0011./+4r   r   c                       e Zd Zd Zd Z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   rA   r   r   r   r	   )r   a0rK   r   rF   x1lu_ax2s           r   test_luzTestLUSolve.test_lu   so    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   rF   rK   r   r   r   s         r   r   zTestLUSolve.test_check_finite  sU    HHOOH%HHOOE"1a[/dAE2Br   N)rx   ry   rz   r   r   r   r~   r   r   r   r      s    ;	$ 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 =e6 e6PB4 B4J   r   