
    iכ                       d dl Z d dlZ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mZmZmZmZmZ d dl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 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. d dl/m0Z0 d d	l1m2Z2 ej                  ejf                  ejh                  fZ5ejl                  ejn                  ejp                  fZ9e5e9z   Z:ejv                  jy                  d
ddiddii gg d      Z=ejv                  jy                  dddiddii gg d      Z>d Z? G d d      Z@ G d d      ZA G d d      ZB G d d      ZC G d d      ZD G d d      ZEd6dZF G d  d!      ZG G d" d#      ZH G d$ d%      ZIejv                  jy                  d&d'      ejv                  jy                  d(eef      d)               ZJ G d* d+      ZK G d, d-      ZL G d. d/      ZM G d0 d1      ZN G d2 d3      ZO G d4 d5      ZPy)7    N)arangearraydotzerosidentity	conjugate	transposefloat32)assert_equalassert_almost_equalassert_assert_array_almost_equalassert_allcloseassert_array_equal)raises)solveinvdetlstsqpinvpinvhnormsolve_bandedsolveh_bandedsolve_triangularsolve_circulant	circulantLinAlgError
block_diagmatrix_balanceqrLinAlgWarningassert_no_overwrite)check_free_memoryIS_MUSL)	HAS_ILP64)skip_xp_invalid_argoverwrite_kwoverwrite_aTF)TrueFalseNone)idsoverwrite_b_kwoverwrite_bc                     | }|t         j                  k(  rt         j                  }n#|t         j                  k(  rt         j                  }t        j
                  |      j                  S )z;Get the epsilon for dtype, possibly downcast to BLAS types.)np
longdoublefloat64clongdouble
complex128finfoeps)dtypdts     Y/var/www/html/BatchJob/venv/lib/python3.12/site-packages/scipy/linalg/tests/test_basic.py	_eps_castr<   +   sE    	B	R]]ZZ	r~~	]]88B<    c            	       "   e Zd Zd Zd Zd Zd 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)TestSolveBandedc                 d   t        g dg dg dg dg      }t        g dg dg dg dg      }d	\  }}t        g d
      }|j                  dd      }t        ddgddgddgddgg      }t        g dg dg dg dg      }||||fD ]'  }	t        ||f||	      }
t        t	        ||
      |	       ) y )N      ?   r   r         r         rC   rI   r                 rC   rG   rI   rJ   rF   rC   rN   rE   rJ   rM   r   rI   rL   r   r   rI   rJ         $@rP          @g      ,@rL   rJ   rI   rE   rF      rJ   r   r   r   r   r   r   rJ   r   rJ   r   r   r   reshaper   r   r   selfaablub4b4by1b4by2b4by4bxs              r;   	test_realzTestSolveBanded.test_real7   s    ?! !# $ O""!# $ 1)*

2q!1vQx1v1v   |###% & eUE* 	4AaVR+A%c!Qi3	4r=   c                 d   t        g dg dg dg dg      }t        g dg dg dg dg      }d	\  }}t        g d
      }|j                  dd      }t        ddgddgddgddgg      }t        g dg dg dg dg      }||||fD ]'  }	t        ||f||	      }
t        t	        ||
      |	       ) y )NrA   rD   )               @rJ   rC   rl   rK   rP   rC   rG   rl   rQ   rR   )rl   rL   r   r   rT   rV   rP   rW   y              ,@rL   rJ   rI   rE   rF   rX   rY   )r   r   r                 ?r[   r\   r^   s              r;   test_complexzTestSolveBanded.test_complexO   s    ?!"!# $ $"""$ % 1*+

2q!1vQx1v1v   |$##% & eUE* 	4AaVR+A%c!Qi3	4r=   c                    t        g dg dg dg      }t        j                  |ddd f   d      t        j                  |dd d f   d      z   t        j                  |dd df   d      z   }t        g d      }|j                  dd      }t        ddgd	d
gddgddgg      }t        g dg dg dg dg      }||||fD ]%  }t	        d||      }t        t        ||      |       ' y )NrO   rQ   rR   r   rJ   rI   rL   rU   rE   rF   rX   rY   rZ   r[   rJ   rJ   r   r2   diagr]   r   r   r   	r_   ra   r`   rd   re   rf   rg   rh   ri   s	            r;   test_tridiag_realz!TestSolveBanded.test_tridiag_realg   s	   O!!# $ GGBq!"uIq!BGGBq!tHa$88277@B1crc6
B<P P)*

2q!1vQx1v1v   |###% & eUE* 	4AVR+A%c!Qi3	4r=   c                    t        g dg dg dg      }t        j                  |ddd f   d      t        j                  |dd d f   d      z   t        j                  |dd df   d      z   }t        g d      }|j                  dd      }t        ddgd	d
gddgddgg      }t        g dg dg dg dg      }||||fD ]%  }t	        d||      }t        t        ||      |       ' y )Nrm   rQ   rR   r   rJ   rI   rL   rn   rE   rF   rX   rY   rZ   r[   rr   rs   ru   s	            r;   test_tridiag_complexz$TestSolveBanded.test_tridiag_complex{   s
   $!!# $ GGBq!"uIq!BGGBq!tHa$88277?A!SbS&z2<O O*+

2q!1vQx1v1v   |###% & eUE* 	4AVR+A%c!Qi3	4r=   c                     t        g dg dg dg dg      }t        g dg dg dg dg      }d	\  }}t        g d
      }t        ||f||d      }t        t        ||      |       y )NrA   rD   rH   rK   rO   rQ   rR   rS   rT   rU   Fcheck_finite)r   r   r   r   )r_   r`   ra   rb   rc   rd   ri   s          r;   test_check_finitez!TestSolveBanded.test_check_finite   sr    ?! !# $ O""!# $ 1)*!QRe<!#a)R0r=   c                    t        g dg dg dg dg      }d\  }}t        g d      j                  dd      }t        t        t        ||f||       t        t        t        ||f|d	d
g       t        t        t        d|d	d
g       y )NrO   rQ   rR   rS   rT   )rB   rW         @      @rL   rF   rB   rW   rr   )r   r]   assert_raises
ValueErrorr   )r_   ra   rb   rc   bads        r;   test_bad_shapezTestSolveBanded.test_bad_shape   s    O""!# $ 1()11"a8j,AC@j,AS#JG 	j,S#JGr=   c                 (   t        g dg      }t        g dg      }t        ddgg|      }t        ||d       t        ddgdgdgg|      }t        ||d       t        |j                  t        j                  d	             t        |g dg       y )
NrB   rW   r~   )      ?rB   g      ?r   r   rI   V瞯<rtolrr   r   f8)r   r   r   r   dtyper2   r   )r_   rh   refri   s       r;   test_1x1zTestSolveBanded.test_1x1   s    
 <.!_%&1#*3U+ 1#sQC!43U+QWWbhhtn-1/0r=   c                     g dg dg dg dg}g dg dg dg dg}d	\  }}g d
}t        ||f||      }t        t        ||      |       y )NrA   rD   rH   rK   rO   rQ   rR   rS   rT   rU   )r   r   r   )r_   r`   ra   rb   rc   rh   ri   s          r;   test_native_list_argumentsz*TestSolveBanded.test_native_list_arguments   s\      1"!QQ'!#a)Q/r=   dt_abdt_bc                 D   t        j                  g g|      }t        j                  g |      }t        d||      }|j                  dk(  sJ |j                  t        t        j                  d|      t        j                  d|            j                  k(  sJ t        j                  d|      }t        d||      }|j                  dk(  sJ |j                  t        t        j                  d|      t        j                  d|            j                  k(  sJ y )Nr   r   r   rJ   )	r2   r   r   shaper   r   eyeonesemptyr_   r   r   ra   rh   ri   s         r;   
test_emptyzTestSolveBanded.test_empty   s     XXrd%(HHRt$Q'ww$ww%q 68NOUUUUUHHV4(Q'ww&   ww%q 68NOUUUUUr=   N)__name__
__module____qualname__rj   rp   rv   rx   r|   r   r   r   pytestmarkparametrizeintfloatr2   r
   complex	complex64r    r=   r;   r?   r?   5   s    40404(4(1H1"0 [[WsE2::w&UV[[Vc5"**gr||%TUV V WVr=   r?   c            	       v   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 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej4                  j7                  deeej>                  e ejB                  g      ej4                  j7                  deeej>                  e ejB                  g      d               Z"y)TestSolveHBandedc                 z    t        g dg dg dg      }t        g d      }t        ||      }t        |g d       y NrP   rP   rW   rW   rB   rB   rB   r   r   r   r   rB   r   rB   rW   rP   rB   rP   rP   r   r   r   r_   ra   rh   ri   s       r;   test_01_upperzTestSolveHBanded.test_01_upper   s@     (((* + &'"a !!%9:r=   c                     t        g dg dg dg      }t        ddgddgddgddgg      }t        ||      }t        ddgddgddgddgg      }t        ||       y )	Nr   r   r   rB         @r   rW   rP   r   r_   ra   rh   ri   expecteds        r;   test_02_upperzTestSolveHBanded.test_02_upper   s     (((* + C::::   "a 3****& ' 	"!X.r=   c                     t        g dg dg dg      }t        g d      j                  dd      }t        ||      }t        |t        g d      j                  dd             y )Nr   r   r   r   rL   rJ   r   r   r]   r   r   r   s       r;   test_03_upperzTestSolveHBanded.test_03_upper   s_     (((* + &'//A6"a !!U+;%<%D%DR%KLr=   c                 ~    t        g dg dg dg      }t        g d      }t        ||d      }t        |g d       y )Nr   rB   rB   rB   r   rW   rW   rP   rP   r   Tlowerr   r   r   s       r;   test_01_lowerzTestSolveHBanded.test_01_lower  sB     (((* + &'"at,!!%9:r=   c                     t        g dg dg dg      }t        ddgddgddgddgg      }t        ||d	      }t        d
dgdd
gd
dgd
d
gg      }t        ||       y )Nr   r   r   rB   r   r   rW   Tr   rP   r   r   s        r;   test_02_lowerzTestSolveHBanded.test_02_lower  s     (((* + C::::   "at,3****& ' 	"!X.r=   c                     t        g dg dg dgt              }t        g dt              }t        ||      }t        |g d       y )Nr   r   r   r   r   r   r   r
   r   r   r   s       r;   test_01_float32z TestSolveHBanded.test_01_float321  sE     (((*18: &g6"a !!%9:r=   c                     t        g dg dg dgt              }t        ddgddgddgddggt              }t        ||      }t        d	dgdd	gd	dgd	d	gg      }t        ||       y )
Nr   r   r   r   rB   r   r   rW   rP   r   r   s        r;   test_02_float32z TestSolveHBanded.test_02_float32?  s     (((*18: C:::: './ "a 3****& ' 	"!X.r=   c                 z    t        g dg dg dg      }t        g d      }t        ||      }t        |g d       y )Nr   r                r   r   r   )       @            @            @      ?       @      ?)rP   rB   rB   rP   r   r   s       r;   test_01_complexz TestSolveHBanded.test_01_complexT  s@     (.(* + ./"a !!%9:r=   c                     t        g dg dg dg      }t        ddgddgdd	gd
dgg      }t        ||      }t        ddgddgddgddgg      }t        ||       y )Nr   r   r   r          @      @r               r   y      @       @r   ro   rP   rB   r   r   s        r;   test_02_complexz TestSolveHBanded.test_02_complexb  s     (.(* + D$<E?D>":   "a 3+***& ' 	"!X.r=   c                 t    t        g dg dg      }t        g d      }t        ||      }t        |g d       y )Nr   rB   rB   r   r   r   rB   r   rB   rP   rB   rP   r   r   s       r;   test_tridiag_01_upperz&TestSolveHBanded.test_tridiag_01_upperw  s3     O_56/""a !!_5r=   c                     t        g dg dg      }t        ddgddgddgg      }t        ||      }t        ddgddgddgg      }t        ||       y )Nr   r   rB   r   rW   rP   r   r   s        r;   test_tridiag_02_upperz&TestSolveHBanded.test_tridiag_02_upper  sx     O#% &C:::   "a 3***& ' 	"!X.r=   c                     t        g dg dg      }t        g d      j                  dd      }t        ||      }t        |t        g d      j                  dd             y )Nr   r   r   rL   rJ   r   r   r   s       r;   test_tridiag_03_upperz&TestSolveHBanded.test_tridiag_03_upper  sR     O_56/"**2q1"a !!U?%;%C%CB%JKr=   c                 x    t        g dg dg      }t        g d      }t        ||d      }t        |g d       y )Nr   rB   rB   r   r   Tr   r   r   r   s       r;   test_tridiag_01_lowerz&TestSolveHBanded.test_tridiag_01_lower  s:     O#% &/""at,!!_5r=   c                     t        g dg dg      }t        ddgddgddgg      }t        ||d      }t        ddgddgddgg      }t        ||       y )	Nr   r   rB   r   rW   Tr   rP   r   r   s        r;   test_tridiag_02_lowerz&TestSolveHBanded.test_tridiag_02_lower  sz     O#% &C:::   "at,3***& ' 	"!X.r=   c                     t        g dg dgt              }t        g dt              }t        ||      }t        |g d       y )Nr   r   r   r   r   r   r   s       r;   test_tridiag_01_float32z(TestSolveHBanded.test_tridiag_01_float32  s7     O_5WE/1"a !!_5r=   c                     t        g dg dgt              }t        ddgddgddggt              }t        ||      }t        ddgddgddgg      }t        ||       y )Nr   r   r   rB   r   rW   rP   r   r   s        r;   test_tridiag_02_float32z(TestSolveHBanded.test_tridiag_02_float32  s~     O#%,35C:::&-/ "a 3***& ' 	"!X.r=   c                 t    t        g dg dg      }t        g d      }t        ||      }t        |g d       y )Nr   r   r   r   )r   r   r   )rP   rB   rB   r   r   s       r;   test_tridiag_01_complexz(TestSolveHBanded.test_tridiag_01_complex  s5     '9:'("a !!_5r=   c                     t        g dg dg      }t        ddgddgddgg      }t        ||      }t        d	d
gdd	gddgg      }t        ||       y )Nr   r   r                 @r   r   r   r   rP   ro   rB   r   r   s        r;   test_tridiag_02_complexz(TestSolveHBanded.test_tridiag_02_complex  sz     '#% &C;G$C=" # "a 3+**& ' 	"!X.r=   c                 x    t        g dg dg      }t        g d      }t        ||d      }t        |g d       y )Nr   r   r   Frz   r   r   r   s       r;   r|   z"TestSolveHBanded.test_check_finite  s5     O_56/""ae4!!_5r=   c                     t        g dg dg      }t        ddgddgg      }t        t        t        ||       t        t        t        |ddg       t        t        t        |dg       y )Nr   r   rB   r   rW   )r   r   r   r   )r_   ra   rh   s      r;   test_bad_shapesz TestSolveHBanded.test_bad_shapes  sb    O#% &C::  j-Q7j-c3Z@j-cU;r=   c                     t        dggg dg      }t        |g dg       t        |j                  t	        j                  d             y )NrJ   rJ   rI   rX   r   r   )r   r   r   r   r2   )r_   ri   s     r;   r   zTestSolveHBanded.test_1x1  s7    A3%)-1/0QWWbhhtn-r=   c                 V    g dg dg dg}g d}t        ||      }t        |g d       y r   )r   r   r   s       r;   r   z+TestSolveHBanded.test_native_list_arguments  s0    """$ !"a !!%9:r=   r   r   c                 @   t        j                  g g|      }t        j                  g |      }t        ||      }|j                  dk(  sJ |j                  t        t        j                  d|      t        j                  d|            j                  k(  sJ t        j                  d|      }t        ||      }|j                  dk(  sJ |j                  t        t        j                  d|      t        j                  d|            j                  k(  sJ y )Nr   r   rJ   r   )	r2   r   r   r   r   r   r   r   r   r   s         r;   r   zTestSolveHBanded.test_empty  s     XXrd%(HHRt$"a ww$ww%q 68NOUUUUUHHV4("a ww&   ww%q 68NOUUUUUr=   N)#r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r|   r   r   r   r   r   r   r   r   r2   r
   r   r   r   r   r=   r;   r   r      s    ;/*M;/*;/*;/*	6/"	L
6/"	6/"	6/"	6<.
; [[WsE2::w&UV[[Vc5"**gr||%TUV V WVr=   r   c                      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 Zd Zd Zd Zd Zd Zd Zd Zd Zej.                  j1                  dddg      d        Zd Zd Zej.                  j1                  dd      d        Zej.                  j1                  dd      d        Zej.                  j1                  dd d!d d!gg      d"        Zd# Zd$ Z ej.                  jC                  d%&      d'        Z"d( Z#d) Z$d* Z%ej.                  j1                  d+d,d-g      ej.                  j1                  dg d.      ej.                  j1                  d/e&jN                  e&jP                  e&jR                  e&jT                  g      d0                      Z+ej.                  j1                  d1e,e-e&jN                  e.e&jR                  g      ej.                  j1                  d2e,e-e&jN                  e.e&jR                  g      d3               Z/d4 Z0ej.                  j1                  d/e&jP                  e&jT                  g      ej.                  j1                  dg d5      ej.                  j1                  d6d7d8g      ej.                  j1                  d9d:d;g      ej.                  j1                  d<d:d;g      ej.                  j1                  d=d:d;g      d>                                           Z1ej.                  je                  e&jf                  d?k  d@&      ej.                  j1                  dg dA      dB               Z4dC Z5dD Z6dE Z7e8dF        Z9e8dG        Z:e8dH        Z;e8dI        Z<e8dJ        Z=e8e>ej.                  j1                  dKe,e-g      ej.                  j1                  dLdMdNg      ej.                  j1                  dOe,e-g      ej.                  j1                  dPdMdNg      ej.                  j1                  dQd!dRg      ej.                  j1                  d9d:d;g      dS                                                         Z?dT Z@dU ZAdV ZByW)X	TestSolvec                     ddgddgg}t        |ddg      }t        t        ||      ddg       ddgddgg}ddg}t        ||      }t        t        ||      ddg       y )NrJ   rB   r                   333333?r   r   r   )r_   r`   x0rh   s       r;   test_20Feb04_bugzTestSolve.test_20Feb04_bug(  st    Vc1X1q"g!#a*q!f5 Vc1XG1a[!#a*q!f5r=   c                     ddgddgg}ddgddggddgddgddggfD ]$  }t        ||      }t        t        ||      |       & y )NrJ   rC   rE   rF   r   rI   r   r_   r`   rh   ri   s       r;   test_simplezTestSolve.test_simple3  si    WsAhq6Aq6"a&q6C8$ 	4A aA%c!Qi3	4r=   c                     t        ddgddggd      }ddgddgddggdd	gt        ddgd      fD ]$  }t        ||      }t        t        ||      |       & y )
N   rI   rl   rF   Dro   r   rJ   r   )r   r   r   r   r   s       r;   test_simple_complexzTestSolve.test_simple_complex<  su    Aq6B7#S)q'8aV$b'A$ 	4A
 aA%c!Qi3	4r=   c                     ddgddgg}dD ]8  }ddgddggddgfD ]'  }t        ||d|      }t        t        ||      |       ) : y )	NrI   rX   r  r   rJ   rJ   r   posassume_ar   r   r_   r`   r   rh   ri   s        r;   test_simple_poszTestSolve.test_simple_posF  sm    VaV 	8E1v1v&!f 8 !Qe<)#a)Q7	8	8r=   c                 ~    ddgddgg}ddgddgddggfD ]&  }t        ||d      }t        t        ||      |       ( y )Nr  rI   rF   ro   r   r  r  r   r   s       r;   test_simple_pos_complexbz"TestSolve.test_simple_pos_complexbO  s\    VaVq'8aV$ 	4A aU+A%c!Qi3		4r=   c                     ddgddgg}dD ]8  }ddgddggddgfD ]'  }t        ||d|      }t        t        ||      |       ) : y )	NrI   rX   r  rJ   r   symr  r   r	  s        r;   test_simple_symzTestSolve.test_simple_symW  sm    VaW 	8E1v1v&!f 8 !Qe<)#a)Q7	8	8r=   c                 ~    ddgddgg}ddgddgddggfD ]&  }t        ||d      }t        t        ||      |       ( y )Nr  rI   ro   r   r  r  r   r   s       r;   test_simple_sym_complexbz"TestSolve.test_simple_sym_complexb`  s\    VaWq'8aV$ 	4A aU+A%c!Qi3		4r=   c                     ddgddgg}ddgddgddgddggfD ]&  }t        ||d	      }t        t        ||      |       ( y )
Nr  r   r  ro   r   rJ   rI   r  r  r   r   s       r;   test_simple_sym_complexz!TestSolve.test_simple_sym_complexh  c    Yr
#q'a&8aV$ 	4A aU+A%c!Qi3	4r=   c                     ddgddgg}dD ];  }ddgddggddgddgfD ]'  }t        ||d|	      }t        t        ||      |       ) = y )
NrI   rX   r  r  rJ   r   ro   herr  r   r	  s        r;   test_simple_her_actuallysymz%TestSolve.test_simple_her_actuallysymq  st    VaW 	8E1v1v&!f1g 8 !Qe<)#a)Q78	8r=   c                     ddgddgg}ddgddgddgddggfD ]&  }t        ||d	
      }t        t        ||      |       ( y )Nr  r   r   r  ro   r   rJ   rI   r  r  r   r   s       r;   test_simple_herzTestSolve.test_simple_her{  r  r=   c                 r   t         j                  j                  d      }d}|j                  ||g      |j                  ||g      dz  z   }t        ||fd      }t	        |      }t        |      t        |      dz  z   }t        d|      D ]  }|d d |f   }t        ||      |d d |f<     t        ||       y )N  rI   ro   r  r   r   )	r2   randomdefault_rngr   r   r   r   r   r   )	r_   rngnAXAinvRirs	            r;   test_nils_20Feb04zTestSolve.test_nils_20Feb04  s    ii##D)JJ1vszz1a&1"441a&#1vQKB&1 	"A!Q$AAqkAadG	" 	"!T*r=   c                 :   t         j                  j                  d      }d}|j                  ||g      }t        |      D ]  }dd|||f   z   z  |||f<    t        d      D ]7  }|j                  |dg      }t	        ||      }t        t        ||      |       9 y )Nr  rC   皙?rF   rX   r2   r  r   ranger   r   r   r_   r!  r"  r`   r'  rh   ri   s          r;   test_randomzTestSolve.test_random  s    ii##D)JJ1vq 	&A"Qq!tW*oAadG	&q 	4A

Aq6"AaA%c!Qi3	4r=   c                 h   t         j                  j                  d      }d}|j                  ||g      d|j                  ||g      z  z   }t        |      D ]  }dd|||f   z   z  |||f<    t        d      D ]7  }|j                  |dg      }t	        ||      }t        t        ||      |       9 y )Nr  rC   ro   r+  rI   rX   r,  r.  s          r;   test_random_complexzTestSolve.test_random_complex  s    ii##D)JJ1vcjj!Q&8!88q 	&A"Qq!tW*oAadG	&q 	4A

Aq6"AaA%c!Qi3	4r=   c                    t         j                  j                  d      }d}|j                  ||g      }t        |      D ]9  }t	        dd|||f   z   z        |||f<   t        |      D ]  }|||f   |||f<    ; t        d      D ]8  }|j                  |g      }t        ||d      }t        t        ||      |       : y )Nr  rC   r+  rF   r  r  )r2   r  r   r-  absr   r   r   r_   r!  r"  r`   r'  jrh   ri   s           r;   test_random_symzTestSolve.test_random_sym  s    ii##D)JJ1vq 	"A"b1a4j/*AadG1X "AqD'!Q$"	" q 	4A

A3AaU+A%c!Qi3	4r=   c                    t         j                  j                  d      }d}|j                  ||g      }|d|j                  ||g      z  z   }t        |      D ]B  }t	        dd|||f   z   z        |||f<   t        |      D ]  }t        |||f         |||f<    D |j                  |g      d|j                  |g      z  z   }t        d      D ]&  }t        ||d      }t        t        ||      |       ( y )	Nr  rC   ro   r+  rl   rI   r  r  )	r2   r  r   r-  r3  r   r   r   r   r4  s           r;   test_random_sym_complexz!TestSolve.test_random_sym_complex  s   ii##D)JJ1v3::q!f%%%q 	-A"b1a4j/*AadG1X -#AadG,!Q$-	- JJsOBszz1#..q 	4AaU+A%c!Qi3	4r=   c                     ddgddgg}ddgddggddgddgddggfD ]&  }t        ||d      }t        t        ||      |       ( y )	NrJ   rC   rE   rF   r   rI   Frz   r   r   s       r;   r|   zTestSolve.test_check_finite  si    WsAhq6Aq6"QFq6C8$& 	4Aa/A%c!Qi3	4r=   c                     d}g d}t        ||      }t        |j                         |       t        |j                  dk(  d       y )NrJ   r   rX   z'Scalar_a_1D_b test returned wrong shape)r   r   ravelr   r   r   s       r;   test_scalar_a_and_1D_bz TestSolve.test_scalar_a_and_1D_b  s:    !QK!!'')Q/4!JKr=   c                     t        j                  g dg dg dg dg      }t        j                  ddgddgd	d
gddgg      }t        ||      }t        |t        j                  g dg dg      j                         y )N)?g
ףp=
@gffffff @g{Gz)g     h@g     prg     Wg     w)gHzG?gQg333333gp=
ף)g(\gQgzGg?g
ףp=
#@gQx2@g     @g      l@gp=
ף?g(\*gzGgףp=
)rB   rL   rX   r  )rX   rI   rF   rJ   )r2   r   r   r   Tr   s       r;   test_simple2zTestSolve.test_simple2  s    HH/8113 4
 HHtUm'Vnen& '
 !QK!!RXX/;/= &>>?a	Ar=   c           
          t        j                  g dg dg dg dg      }t        j                  ddgddgd	d
gddgg      }t        ||      }t        |t        j                  ddgddgddgddgg             y )N)yq=
ףpffffff@yQ?\(\	@y(\y
ףp=
?q=
ףp)y333333333333,y̌@@      y      *@y)@+@)yRQ
Qy(\Gz@yQyQ??)yHzG@(\?yQ῅Q?y(\Gzy\(\q=
ףp?y(\B:@p=
I@yRQ?@y33333P@33333Uy33333c@ffffff,y      (\O9@y333333q=
ף0>@y(\?(\@y{Gz333333@      ?      ?y             y       @      y      @      ?y            y            @y              @)r2   r   r   r   r   s       r;   test_simple_complex2zTestSolve.test_simple_complex2  s    HHHMIIK L
 HH|[1#]3#\2!;/1 2
 !QK!!RYY16170@14e0> &? 	@r=   r  r  r  c                    t        j                  g dg dg dg dg      }t        j                  ddgddgd	d
gddgg      }|dk(  r|j                  n|j                         j                  }||z   }t        j                  |      |t        j
                  d      t        j
                  d      f<   t        ||d      }t        |||      }t        ||       t        |||d      }t        ||       y )N)gq=
ףpy)\(?)\(y{GzzGyHzG@      )r   gQyq=
ףpQ?yGz@zG?)r   r   g=
ףp!yHzG?)r   r   r   g(\yףp=
@\(\$yGz<@RCy)\(#
ףp=
@y
ףp=8 yp=
ף0yQ@zGQy)\(@Q@yRA(\2@r  rF   generalr  Tr  )r2   r   r@  conjrt   r   r   r   )r_   r  r`   rh   a2a3r   ri   s           r;   test_symmetric_hermitianz"TestSolve.test_symmetric_hermitian  s     HHB9/&( ) HH{L1"L1#[1!=13 4
 %QSS1668::V)+299Q<1%&BI.!Q*!!S) "a($7!!S)r=   c                 d   t        j                  dd      j                  dd      }t        t        j                  |      dz  t        j
                  d      d      }t        |g d       t        t        j                  |      dz  t        j
                  d      d      }t        |g d       y )	NrJ   
   rX   	   r  r  )      "@r?  rB   r  r2   r   r]   r   trilr   r   r_   r#  ri   s      r;   test_pos_and_symzTestSolve.test_pos_and_sym  sw    IIa$$Q*"''!*Q,
U;!!]3"''!*Q,
U;!!]3r=   c                     t        j                  g dg dg dg dg dg dg dg dg dg	      }t        j                  d      d d d f   }t        t        t
        ||       y )N)	rJ   r   r   r   r   r   rJ   r   rJ   )	rJ   rJ   rJ   r   r   r   rJ   r   rJ   )	r   rJ   rJ   r   r   r   rJ   r   rJ   )	rJ   r   rJ   rJ   rJ   rJ   r   r   r   )	rJ   rJ   rJ   rJ   rJ   rJ   rJ   rJ   rJ   rM  )r2   r   r   r   r   r   r_   r`   rh   s      r;   test_singularityzTestSolve.test_singularity  sV    HH1111111113 4 IIaLD!k5!Q/r=   	structure)
diagonaltridiagonallower triangularupper triangular	symmetric	hermitianpositive definiterF  bandedNc                 B   t         j                  j                  d      }d}t        j                  dd|      }t        j                  |      }|j                  |      }d}t        j                  t        |      5  t        |||       d d d        y # 1 sw Y   y xY w)	Nl   Ej] rL  r   2   sizez2(Ill-conditioned matrix|An ill-conditioned matrix)matchr  )	r2   r  r   logspacert   r   warnsr"   r   )r_   rV  r!  r"  dr#  rh   messages           r;   test_ill_condition_warningz$TestSolve.test_ill_condition_warning  s    
 ii##L1KK2q!GGAJJJAJF\\-w7 	,!Q+	, 	, 	,s   =BB)	rW  rX  rY  rZ  r[  r\  r]  rF  Nc                 2   d}t        j                  ||f      }t        j                  |      }t        j                  t
        d      5  t        j                  d      5  t        |||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrL  singularrc  ignore)allr  )r2   r   r   r   r   r   errstater   )r_   rV  r"  r#  rh   s        r;   test_exactly_singular_gh22263z'TestSolve.test_exactly_singular_gh22263)  sw    
 HHaVGGAJmmKz: 	,BKKH<U 	,!Q+	, 	, 	, 	, 	, 	,s$   
B!B0BB
	BBrh   r   rJ   c                    t        j                  t              5  t        j                  d      }t        ||       d d d        t        j                  t              5  t        d|       d d d        t        j                  t              5  t        dgg|       d d d        y # 1 sw Y   hxY w# 1 sw Y   FxY w# 1 sw Y   y xY w)Nrr   r   )r   r   r   r2   r   r   )r_   rh   r`   s      r;   test_singular_scalarzTestSolve.test_singular_scalar4  s    
 ]];' 	 A!QK	 ]];' 	!QK	 ]];' 	A3%O	 		 		 		 	s#   "B#B/B;#B,/B8;Cc                     t        j                  d      }t         j                  j                  d      }|j                  d      }t	        ||      }t        ||       y )NrI   r  )rI      )r2   r   r  r   r   r   )r_   r`   r!  rh   ri   s        r;   test_multiple_rhszTestSolve.test_multiple_rhsC  sF    FF1Iii##D)JJw!QK!!Q'r=   c                 h   t        j                  d      j                  dd      dz   }t        t        j                  |      dz  t        j
                  d      d      }t        |g d       t        t        j                  |      dz  t        j
                  d      d      }t        |g d       y )	NrM  rX   rJ   T
transposed)r   g?rJ   F)rM  gg333333rO  rQ  s      r;   test_transposed_keywordz!TestSolve.test_transposed_keywordJ  sy    IIaL  A&*"''!*Q,
t<!!]3"''!*Q,
u=!!_5r=   z*1. why? 2. deprecate the kwarg altogether?reasonc                     t        j                  d      j                  t              }t	        t
              5  t        ||d       d d d        y # 1 sw Y   y xY w)NrX   Trv  )r2   r   astyper   r   NotImplementedErrorr   r_   r`   s     r;   test_transposed_notimplementedz(TestSolve.test_transposed_notimplementedQ  sD    FF1IW%./ 	)!Q4(	) 	) 	)s   AAc                 4    t        t        t        ddgd       y )NrJ   rI   r   r   r   r_   s    r;   test_nonsquare_azTestSolve.test_nonsquare_aW  s    j%!Q3r=   c                    t        t        t        j                  d      t        j                  d            t        j                  d             t        t        t        t        j                  d      t        j                  d             y )NrX   rF   )r   r   r2   r   r   r   r   r  s    r;   test_size_mismatch_with_1D_bz&TestSolve.test_size_mismatch_with_1D_bZ  sI    !%q	2771:">
Kj%BGGAJ?r=   c                 4    t        t        t        ddd       y )NrJ   zxcvr  r  r  s    r;   test_assume_a_keywordzTestSolve.test_assume_a_keyword^  s    j%A?r=   rb  rL  d   )genr  r  r  rX  r   c                    t         j                  j                  d      }|t         j                  t         j                  fv }|j                  ||f      j                  |      }|j                  |      j                  |      }|r(|d|j                  ||f      z  j                  |      z  }|dk(  r||j                  z   }n|dk(  r||j                  j                         z   }n|dk(  r7|j                  j                         |z  dt        j                  |      z  z   }n|dk(  r~t        j                  t        j                  |            t        j                  t        j                  |d      d      z   t        j                  t        j                  |d	      d	      z   }|t         j                  t         j                  fv rd
nd}|dv r'|t         j                  t         j                  fv r|dz  }t        |||      }	t        ||	z  |||z  ||z         |dk(  r+|s(t        |||d      }	t        ||	z  |||z  ||z         y y y )Nr  ro   r  r  r  r+  rX  rJ   rL   -q=gư>)r  r  r  rL  r  atolr   T)r  rw  )r2   r  r   r   r6   standard_normalr|  r@  rG  r   rt   r4   r
   r   r   )
r_   rb  r   r  r!  
is_complexr`   rh   tolri   s
             r;   'test_all_type_size_routine_combinationsz1TestSolve.test_all_type_size_routine_combinationsa  s    ii##D)r||R]];;
t-44U;%,,U3"S(($66>>uEEAuACCAACCHHJA
QRVVD\!11A&$A*+B,-A
 R]] ;;e,, R\\22r	!Q*AqsTzd
CuZaX$?AAE13:C$JG &0r=   dt_ar   c                 f   t        j                  d|      }t        j                  d|      }t        ||      }|j                  dk(  sJ t        t        j                  d|      t        j
                  d|            j                  }|j                  |k(  sJ |j                  t         j                  j                  ||      j                  k(  sJ t        j
                  d|      }t        j
                  d|      }t        ||      }|j                  dk(  sJ |j                  |k(  sJ y )Nr   r   r   rI   rX   r   rI   rI   rI   rF   )rX   r   rI   rF   )	r2   r   r   rb  r   r   r   r   linalgr_   r  r   r`   rh   ri   dt_nonemptys          r;   r   zTestSolve.test_empty  s     HHV4(HHQd#!QKvv{{BFF1D12771D3IJPPww+%%%ww"))//!Q/55555GGL-GGF$'!QKww,&&&ww+%%%r=   c                     t        j                  d      }g g g}t        ||      }t        |j                  dk(  d       t        |j
                  dk(  d       y NrI   r   zReturned array is not empty)rI   r   z#Returned empty array shape is wrong)r2   r   r   r   rb  r   r   s       r;   test_empty_rhszTestSolve.test_empty_rhs  sJ    FF1IH!QK!:;6!#HIr=   )rW  rX  r^  rY  rZ  r  r]  r[  r\  r^  rF  r  r  r  nrhsr   )r  rw  TF	overwritefortranc                    t         j                  j                  d      }|dk(  sdnd}|j                  |f|z         }	|j                  ||f      }
t        j                  |t         j                        r6|	|j                  |f|z         dz  z   }	|
|j                  ||f      dz  z   }
|dk(  r*t        j
                  t        j
                  |
            }
nC|dk(  rt        j                  |
      }
n'|d	k(  rt        j                  |
      }
n|d
k(  rt        j
                  t        j
                  |
            t        j
                  t        j
                  |
d      d      z   t        j
                  t        j
                  |
d      d      z   }
n|dk(  r+t        j                  t        j                  |
d      d      }
nW|dv r|
|
j                  z   }
nC|dv r|
|
j                         j                  z   }
n!|dv r|
|
j                  j                         z  }
|rt        j                  |
      }
|
j                  d      }|	j                         }t        j                  |t         j                        r9|r7d}t        j                  t        |      5  t        |
|	|||       d d d        y t        |
|	||||      }t         j                   j                  |r|j                  n||      }t#        ||       |dk7  rt#        t        |||      |d       |st%        |
|       t%        |	|       y y # 1 sw Y   y xY w)Nl   q~u r^  r  rC   ra  ro   rW  rY  rZ  rX  rL   rJ   rI   >   r  r[  >   r  r\  >   r  r]  r#  orderz#scipy.linalg.solve can currently...rc  )r*   r0   rw  )r*   r0   rw  r  rv  r   r  )r2   r  r   
issubdtypecomplexfloatingrt   rP  triur@  rG  asfortranarraycopyr   r   r}  r   r  r   r   )r_   r   r  r  rw  r  r  r!  r"  rh   r#  A_copyb_copyrh  resr   s                   r;   test_structure_detectionz"TestSolve.test_structure_detection  s    ii##O4)ArJJQD4KJ(JJQFJ#== 2 23CJJQD4KJ0255ACJJQFJ+b00Az!
#A++
A++
A&$772771b>2./772771a=!,-A !1r*A--ACCA--AFFHJJA55ACCHHJA!!!$Ac"== 2 23
;G2'B -a	y!+-- AqiY)H> iioo*fhh&&IS! xff<c
 F#F# )- s   L;;M2z(solve chokes on b.ndim == 1 in numpy < 2)NrW  rF  rZ  rY  r  c                 J   t        j                  d      }t        j                  dd      j                  d      |z  }t        j                  d      }t        t        |||      t         j                  j                  ||             t        j                  d      }t        t        |||      t         j                  j                  ||             t        j                  d      ddgz  }t        t        |||      t         j                  j                  ||             y )NrI   rJ      )rF   rX   rI   rJ   rJ   r  rT   rI   rI   )r2   r   r   r]   r   r   r   r  )r_   r  er`   rh   s        r;   test_vs_np_solvezTestSolve.test_vs_np_solve  s     FF1IIIa#++O<q@GGAJaX6		18MNGGFOaX6		18MNGGFOq!f$aX6		18MNr=   c                 N   t         j                  j                  d      }|j                  d      }t        j                  t        j
                  |t        j                  |j                                    }|j                  d      }t        ||dd      }||j                  z   t        j                  t        j                  |            z
  }t         j                  j                  ||      }t        ||d	       t        |j                  |dd
      }t        ||d	       y )Nr   rF   rF   ra  rF   rI   r  Tr  r   r  F)r2   r  r   normalrP  matmulrG  r@  r   rt   r  r   )r_   r!  r`   rh   outaa	result_nps          r;   test_pos_lowerzTestSolve.test_pos_lower  s     ii##A&JJFJ#GGBIIa./JJFJ#Aq55Wrwwrwwqz**IIOOB*	YU3 ACCU%8YU3r=   c                    t        j                  ddgddgg      }t        j                  d      }t        ||      }t	        ||z  t        j                  d      d       t        ||d      }t	        ||d       t        ||d	      }t        j
                  ||d      rJ t        |d	      }t	        ||d       y )
N	I<<f@B)sVxP''f('&@''f@('&rI   +=r  r  r  r  )r2   asarrayr   r   r   allcloser   )r_   r`   rh   ainvainv_sym	ainv_cholainv_invs          r;   test_pos_fails_sym_complexz$TestSolve.test_pos_fails_sym_complex  s     JJ35NP26NPR SFF1IQ{q"&&)%8A.$U3
 !Q/	;;tYU;;; q5)	8%8r=   c                     t        j                  d      }d|j                  _        t        j                  d      }t        ||      }t        ||d       y NrX   Fr  r  )r2   r   flags	writeabler   r   r   r   s       r;   test_readonlyzTestSolve.test_readonly*  s?    FF1I!GGAJ!QK15)r=   c                    t        j                  d      j                  dddd      }|d d d d dd d d d f   }t        j                  d      }t	        ||fi |}|j
                  |j
                  d d k(  sJ t        ||d   z  |z
  dd       t        j                  d	      d d d d df   }t	        ||fi |}|j
                  |j
                  d d |j
                  d   fz   k(  sJ t        ||z  |z
  dd       y 
N   rI   rX   rL   .Nr   r  r  r  r2   r   r]   r   r   r   r   r_   r)   r`   rh   ri   s        r;   test_batch_negative_stridez$TestSolve.test_batch_negative_stride1  s    IIcN""1aA.a2q!mGGAJ!Q','ww!''#2,&&&AiL(1,ae< GGFOAttG$!Q','ww!''#2,!''"+7777A	151r=   c                    t        j                  d      j                  dddd      }|d d d d d d dd d f   }t        j                  d      }t	        ||fi |}|j
                  |j
                  d d k(  sJ t        ||d   z  |z
  dd       t        j                  d	      d d dd d f   }t	        ||fi |}|j
                  |j
                  d d |j
                  d   fz   k(  sJ t        ||z  |z
  dd       y r  r  r  s        r;   test_core_negative_stridez#TestSolve.test_core_negative_stride@  s    IIcN""1aA.aDbD!mGGAJ!Q','ww!''#2,&&&AiL(1,ae< GGFODbD!G$!Q','ww!''#2,!''"+7777A	151r=   c                    t        j                  d      j                  dddd      }|dd d df   }t        j                  d      }t	        ||fi |}|j
                  |j
                  d d k(  sJ t        ||d   z  |z
  dd	
       t        j                  d      d d d   }t	        ||fi |}|j
                  |j
                  d d k(  sJ t        ||d   z  |z
  dd	
       y )N0   rI   rX   rF   .rL   r  r   r  r  r  r  s        r;   test_core_non_contiguousz"TestSolve.test_core_non_contiguousP  s    IIe$$Q1a0c3Q3hKGGAJ!Q','ww!''#2,&&&AiL(1,ae< GGAJssO!Q','ww!''#2,&&&AiL(1,ae<r=   c                    t        j                  d      j                  dddd      }|d d d d ddf   }t        j                  d      }t	        ||fi |}|j
                  |j
                  d d k(  sJ t        ||d   z  |z
  dd	       t        j                  d
      d d d d df   }t	        ||fi |}|j
                  |j
                  d d |j
                  d   fz   k(  sJ t        ||z  |z
  dd	       y )Nr  rI   rG   .rL   r  r   r  r  rI   rG   r  r  s        r;   test_batch_non_contiguousz#TestSolve.test_batch_non_contiguous_  s    IIe$$Q1a0a1ckNGGAJ!Q','ww!''#2,&&&AiL(1,ae< GGFOAssF#!Q','ww!''#2,!''"+7777A	151r=   c                 ,   t        j                  d      j                  ddddd      }|j                  ddddd      }t        j                  d      }t        ||fi |}|j                  |j                  d d k(  sJ t        ||d   z  |z
  dd	
       y )Nr  rI   rX   rJ   rF   r   rL   r  r  r  )r2   r   r]   r	   r   r   r   r   r  s        r;   test_batch_weird_stridesz"TestSolve.test_batch_weird_stridesn  s    IIe$$Q1a3KK1aA&GGAJ!Q','ww!''#2,&&&AiL(1,ae<r=   a_dtypea_orderCFb_dtypeb_orderb_ndimrI   c	                    d}	t        j                  d|	dz  dz         j                  |	|	      t        j                  |	      z   }
|
j	                  ||      }
t        j                  |	      }|dkD  r9t        j
                  t        |      D cg c]  }||z  	 c}      j                  }|j	                  ||      }|
j                         }|j                         }t        |
|fi ||d|i}|r|j                  n|}t        ||z  |d       |j                  dd	      }|xr$ |
j                  t        k7  xr |
j                  d
   }|j                  dd	      }|xr$ |j                  t        k7  xr |j                  d
   }t        j                  ||      |k(  sJ ||k(  j!                         |k7  sJ |
|k(  j!                         |k7  sJ y c c}w )NrX   rJ   rI   r  rw  r  r  r*   FF_CONTIGUOUSr0   )r2   r   r]   r   r|  stackr-  r@  r  r   r   getr   r   r  shares_memoryrm  )r_   r)   r/   r  r  r  r  r  rw  r"  r`   rh   r5  a_refb_refri   a_or_aTr*   	a_inplacer0   	b_inplaces                        r;   test_overwrite_argszTestSolve.test_overwrite_argsx  s    IIaA"**1a0266!9<HHWGH,IIaLA:uV}5!!A#5688AHHWGH, !QP,P.PZP'%''U!U7 #&&}e<PQWW^P9P	$((>PQWW^P9P	1%222U
!Y...U
!Y...+ 6s   Gc                 `   t        j                  d      j                  dd      }||j                  z   t        j                  d      z   }t        j
                  d      }t        ||      }t        ||z  |d       t        t              5  t        ||d       d d d        y # 1 sw Y   y xY w)NrM  rX   r  r  r  r  )
r2   r   r]   r@  r   r   r   r   r   r   )r_   r`   r#  rh   r   s        r;   test_posdef_not_posdefz TestSolve.test_posdef_not_posdef  s    IIaL  A&GbffQiGGAJ 1a[B. ;' 	(!Q'	( 	( 	(s   B$$B-c           	         t        j                  t        j                  t        j                  d            t        j                  t        j
                  dd            g      }t        j                  d      }t        ||      }t        |d   dt        j
                  dd      z  d       t        j                  dd	gd	dgg      }t        j                  d
      }t        j                  t              5  t        ||d       d d d        t        j                  d	d	gd	dgg      }t        j                  d
      }t        j                  t              5  t        ||d       d d d        y # 1 sw Y   jxY w# 1 sw Y   y xY w)NrX   rX   rJ   rF   rX   rJ   .r  r  ꌠ9Y>)Fr   rI   rW  r  )r2   r  r  r   rt   r   r   r   r  r   rf  r"   r   r   r   s       r;   test_diagonalzTestSolve.test_diagonal  s%   HHbggbggfo.		!Q0HIJGGAJ!QK 	&	1ryyA#6UC JJq	Aq6*+GGAJ\\-( 	-!Q,	- JJAA'(GGAJ]];' 	-!Q,	- 	-	- 	-	- 	-s   7E/E;/E8;Fc                     d}dt        j                  t        j                  |            z  t        j                  t        j                  d      d      z   t        j                  t        j                  d      d      z   }t        j                  t        j                  t        j                  ||f            |g      }t        j                  d      }t        ||      }t        |d   t        j                  g d      d	       d
|d<   t        j                  t              5  t        ||d       d d d        dx|d<   |d<   t        j                  t              5  t        ||d       d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)NrF   rX   rJ   rL   r  )             r  r  r   r  @xD)rJ   r   r   rX  r  r   )rJ   r   rJ   )r2   rt   r   r  r  r   r   r  r   rf  r"   r   r   )r_   r"  r`   rh   ri   s        r;   test_tridiagonalzTestSolve.test_tridiagonal  s-   rwwrwwqz""RWWRWWQZ%;;bggbggajRT>UUHHbggbggq!fo.23GGAJ!QK 	&	2::.B#C%P '
\\-( 	0!Q/	0 #$#'
QwZ]];' 	0!Q/	0 	0	0 	0
	0 	0s   &E8 F8FFN)Cr   r   r   r   r   r  r
  r  r  r  r  r  r  r)  r/  r1  r6  r8  r|   r=  rA  rD  r   r   r   rJ  rR  rU  ri  ro  rq  rt  rx  skipr  r  r  r  r2   r
   r4   r   r6   r  r   r   r   r   r  r  skipif__version__r  r  r  r  parametrize_overwrite_argr  r  r  r  r  parametrize_overwrite_b_argr  r  r  r  r   r=   r;   r   r   '  s   	6448484484
+	4	4444LA@" [[Z%8* 9*.40 [[[NO,	O, [[[DE,	E, [[S1a!Q.1 2(6 [[IJ) K)
4@@ [[Vb#Y/[[Z)TU[["**bjj",,F"H V 0
"HH [[Vc5"**gr||%TU[[Vc5"**gr||%TU& V V& J [[Wrzz2==&AB[[Z *J K
 [[Vb$Z0[[\D%=9[[[4-8[[Yu6<$ 7 9 : 1K C<$| [[
%O   [[	
OO4"90* 2 2 2 2 = = 2 2 = =  [[Ye5[[Yc
3[[Ye5[[Yc
3[[X1v.[[\D%=9/ : / 4 6 4 6 ! /B(-(0r=   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d Zy)	TestSolveTriangularc                 D   t        ddgddgg      }ddg}t        ||d      }t        |ddg       t        |j                  |d      }t        |ddg       t        ||dd      }t        |ddg       t	        d      }t        ||dd      }t        |d	d
gddgg       y):
        solve_triangular on a simple 2x2 matrix.
        rJ   r   rI   Tr   Fr   r   transrB         N)r   r   r   r@  r   r_   r#  rh   sols       r;   r   zTestSolveTriangular.test_simple  s     Aq6Aq6"#Fq!40!#1v. qssAU3!#Bx0 q!4q9!#Bx0QKq!4q9!#S	As8'<=r=   c                 t   t        ddgddgg      }t        d      }t        ||dd      }t        |dd	gdd
gg       t	        j
                  ddg      }t        ||dd      }t        |ddgddgg       t        ||dd      }t        |ddgddgg       t        ||dd      }t        |ddgddgg       t        |j                  |dd      }t        |ddgddgg       t        |j                  |dd      }t        |ddgddgg       t        |j                  |dd      }t        |ddgddgg       y)zA
        solve_triangular on a simple 2x2 complex matrix
        rC  r   ro   rI   TrJ   r  y      ?      y      п      пr         ?       @y             y      ?      ?y      ?      y            пFr  N)r   r   r   r   r2   rt   r@  r	  s       r;   r  z'TestSolveTriangular.test_simple_complex  sW    D!9r1g&'QKq!4q9!#(;aX'FG GGT4L!q!4q9!#A'@Aq!4q9!#J!V'EFq!4q9!#[(9Av;'GHqssAU!<!#J!V'EFqssAU!<!#A'@AqssAU!<!#Q$'@Ar=   c                 h    t        ddgddgg      }ddg}t        ||dd      }t        |ddg       y)r  rJ   r   rI   TF)r   r{   N)r   r   r   r	  s       r;   r|   z%TestSolveTriangular.test_check_finite  sB     Aq6Aq6"#Fq!4eD!#1v.r=   r  r   c                 <   t        j                  d|      }t        j                  d|      }t        ||      }|j                  dk(  sJ t        t        j                  d|      t        j
                  d|            j                  }|j                  |k(  sJ y Nr   r   r   rI   )r2   r   r   rb  r   r   r   r  s          r;   r   zTestSolveTriangular.test_empty  s     HHV4(HHQd#Q"vv{{&FF1D!2771D#9

% 	 ww+%%%r=   c                     t        j                  d      }g g g}t        ||      }t        |j                  dk(  d       t        |j
                  dk(  d       y r  )r2   r   r   r   rb  r   r   s       r;   r  z"TestSolveTriangular.test_empty_rhs"  sK    FF1IHQ"!:;6!#HIr=   N)r   r   r   r   r  r|   r   r   r   r   r   r2   r
   r   r   r   r  r   r=   r;   r  r    s~    >*B:/ [[Vc5"**gr||%TU[[Vc5"**gr||%TU	& V V	&Jr=   r  c                   $   e Zd Zd Zd Zd Zd Zd Zej                  j                  deeej                  eej                   g      d        Zed        Zej                  j                  d	ej(                  ej                  ej*                  ej,                  g      d
        Zd Zej                  j                  deeej                  eej                   g      d        Zed        Zed        Zed        Zed        Zed        Zed        Zd Z d Z!d Z"ej                  j                  dddg      d        Z#d Z$ej                  j                  dddg      ej                  j                  dddg      d               Z%d Z&d  Z'd! Z(y")#TestInvc                     ddgddgg}t        |      }t        t        ||      t        j                  d             g dg dg dg}t        |      }t        t        ||      t        j                  d             y )NrJ   rI   rX   rF   r   rF   r  rG   rM      rL  )r   r   r   r2   r   r_   r`   a_invs      r;   r   zTestInv.test_simple+  sb    VaVA!#a-;	:.A!#a-;r=   c                 $   t         j                  j                  d      }d}t        d      D ]a  }|j                  ||g      }t        |      D ]  }dd|||f   z   z  |||f<    t	        |      }t        t        ||      t        |             c y )Nr  rC   rF   r+  r2   r  r   r-  r   r   r   r   r_   r!  r"  r'  r`   r  s         r;   r/  zTestInv.test_random3  s    ii##D)q 	3A

Aq6"A1X *b1a4j/!Q$*FE%c!Um&.qk3	3r=   c                 b    ddgddgg}t        |      }t        t        ||      ddgddgg       y )NrJ   rI   rX   r   r   r   r   r   r  s      r;   r  zTestInv.test_simple_complex>  s:    VaWA!#a-1a&1a&1ABr=   c                 R   t         j                  j                  d      }d}t        d      D ]x  }|j                  ||g      d|j                  ||g      z  z   }t        |      D ]  }dd|||f   z   z  |||f<    t	        |      }t        t        ||      t        |             z y )Nr  rC   rF   rl   r+  r  r  s         r;   r1  zTestInv.test_random_complexC  s    ii##D)q 	3A

Aq6"2cjj!Q&8#88A1X *b1a4j/!Q$*FE%c!Um&.qk3	3r=   c                 f    ddgddgg}t        |d      }t        t        ||      ddgddgg       y )NrJ   rI   rX   rF   Frz   r   r  r  s      r;   r|   zTestInv.test_check_finiteN  s=    VaVAE*!#a-1a&1a&1ABr=   r:   c                    t        j                  d|      }t        |      }|j                  dk(  sJ |j                  t        t        j
                  d|            j                  k(  sJ t        j                  d|      }t        |      }|j                  dk(  sJ t        j                  d|      }t        |      }|j                  dk(  sJ y )Nr   r   r   rI   r  )rX   rJ   r   r   )r2   r   r   rb  r   r   r   r   r_   r:   r`   r  s       r;   r   zTestInv.test_emptyS  s    HHV2&AzzQ{{c"&&""56<<<<<GGL+A{{l***GGL+A{{l***r=   c                 v   d}t        j                  d|dz  dz         j                  ||      t        j                  |      z   }|j	                         }t        |fi |}t        ||z  t        j                  |      d       t        ||       t        j                  ||      rJ |j	                         j                  t              }t        |fi |}t        ||z  t        j                  |      d       t        ||       t        j                  ||      rJ |j                  t              j	                  d      }t        |fi |}t        ||z  t        j                  |      d       |j                  dd	      }||k(  j                         |k7  sJ t        j                  ||      |k(  sJ y )
NrX   rJ   rI   r  r  r  r  r*   F)r2   r   r]   r   r  r   r   r   r  r|  r   r  rm  )r_   r)   r"  a0r`   r  r*   s          r;   test_overwrite_azTestInv.test_overwrite_ab  sv   YYq!Q$(#++Aq1BFF1I= GGIA&&	266!959Q##Au--- GGIU#A&&
BFF1IE:Q##Au---
 IIe!!!,A&&
BFF1IE:"&&}e<R}}+---5)[888r=   r9   c                    t        j                  d      j                  dd      j                  |      }t	        |      }t        ||z  t        j                  |j                  d         dt        j                  |j                        j                  z         ddddd	}|j                  j                  ||j                  j                     k(  sJ y )
NrF   rI   r   r  r  frg  r  )r  r&  gG)r2   r   r]   r|  r   r   r   r   r7   r   r8   char)r_   r9   r`   r  dt_maps        r;   test_dtypeszTestInv.test_dtypes  s    
 IIaL  A&--d3AE	266!''!*#5C@Q@U@U<UV 	
 {{6!'',,#7777r=   c                     t        j                  d      }d|j                  _        t	        |      }t        ||d       y r  )r2   r   r  r  r   r   r  s      r;   r  zTestInv.test_readonly  s0    FF1I!Aqu-r=   c                     t        j                  d|      j                  dddd      dz   }t        |      }|j                  |j                  k(  sJ t        ||z  d       y )NrG   r   rX   rI   rJ   rB   )r2   r   r]   r   r   r   r!  s       r;   test_batch_core_1x1zTestInv.test_batch_core_1x1  sU    IIc$,,Q1a81<A{{agg%%%E	2&r=   c                    t        j                  dt              j                  ddd      }|d   }t	        |fi |}|j
                  |j
                  k(  sJ t        ||z  t        j                  t        j                  d      |j
                        d       |d d d df   }t	        |fi |}|j
                  |j
                  k(  sJ t        ||z  t        j                  t        j                  d      |j
                        d       y )	Nrs  r   rX   rI   )N.g+=r  .)	r2   r   r   r]   r   r   r   broadcast_tor   )r_   r)   r`   r  r  s        r;   test_batch_zero_stridezTestInv.test_batch_zero_stride  s    IIe5)11!Q:y\B','{{bhh&&&U
BOOBFF1Irxx$HuUq$|_B','{{bhh&&&U
BOOBFF1Irxx$HuUr=   c                 H   t        j                  d      j                  dddd      }|d d d d dd d d d f   }t        |fi |}|j                  |j                  k(  sJ t        ||z  t        j                  t        j                  d      |j                        d       y Nr  rI   rX   rL   vIh%,=r  r2   r   r]   r   r   r   r0  r   r_   r)   r`   r  s       r;   r  z"TestInv.test_batch_negative_stride  s    IIcN""1aA.a2q!mA&&{{agg%%%E	2??266!9agg#FUSr=   c                 H   t        j                  d      j                  dddd      }|d d d d d d dd d f   }t        |fi |}|j                  |j                  k(  sJ t        ||z  t        j                  t        j                  d      |j                        d       y r3  r5  r6  s       r;   r  z!TestInv.test_core_negative_stride  s    IIcN""1aA.aDbD!mA&&{{agg%%%E	2??266!9agg#FUSr=   c                 $   t        j                  d      j                  dddd      }|dd d df   }t        |fi |}|j                  dk(  sJ t        ||z  t        j                  t        j                  d      |j                        d       y )	Nr  rI   rX   rF   .rI   rX   rI   rI   r4  r  r5  r6  s       r;   r  z TestInv.test_core_non_contiguous  sz    IIe$$Q1a0c3Q3hKA&&{{l***E	2??266!9agg#FUSr=   c                 *   t        j                  d      j                  dddd      }|d d d d ddf   }t        |fi |}|j                  dk(  sJ t        ||z  t        j                  t        j                  d      |j                        d       y )Nr  rI   rG   .r9  gvIh%L=r  r5  r6  s       r;   r  z!TestInv.test_batch_non_contiguous  s|    IIe$$Q1a0a1ckNA&&{{l***E	2??266!9agg#FUSr=   c                    t        t              5  t        t        j                  d             d d d        t        t              5  t        t        j                  d             d d d        t        j
                  t        j                  dt              t        j                  d      j                  dd      f      }t        t              5  t        |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  )rX   rI   rI   r   rF   rI   )	r   r   r   r2   r   r  r   r   r]   )r_   r)   r`   s      r;   test_singularzTestInv.test_singular  s     ;' 	! 	! ;' 	$	"#	$ HHbggfG4biil6J6J1a6PQR;' 	F	 		! 	!	$ 	$	 	s#   C$C0C<$C-0C9<Dc                    t        j                  ddg      }t        j                  t              5  t        |       d d d        t        j                  t        j                  ddg      t        j                  ddg      t        j                  ddg      g      }t        j                  t              5  t        |       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrB   #B;rJ   )r2   rt   r   rf  r"   r   r  )r_   r`   rH  s      r;   test_ill_condzTestInv.test_ill_cond  s    GGRK \\-( 	F	 XXrwwE{+RWWaV_bggq%j>QRS\\-( 	G	 			 		 	s   C
5C
CCc                     t        t              5  t        t        j                  d      d       d d d        y # 1 sw Y   y xY w)NrI   kaboomr  )r   KeyErrorr   r2   r   r  s    r;   test_wrong_assume_azTestInv.test_wrong_assume_a  s1    8$ 	.q	H-	. 	. 	.s	   !:Ac                 "   t        j                  dt              j                  dd      }||j                  z   }|dt        j
                  d      z  z  }t        |      }t        |d      }t        ||d       t        j                  d	t        j                  g |j                  d
 z
  dk(  t         j                  d	      }t        ||z  ddd      }t        ||d       t        ||j                  z  ddd      }t        ||d       y )Nr  r   r     r  r  r   r  rJ   rL   r   Fr{   r  r   T)r2   r   r   r]   r@  r   r   r   wheretrir   nan)r_   ri   yy_inv0y_inv1masky_inv2y_inv3s           r;   test_posdefzTestInv.test_posdef  s    IIb&..q!4G	Rq	\QQ'U3 xxBFF0AGG0R00A5rvvqAQtV%%uMU3 QtvvXEENU3r=   complex_FTc                    t        j                  d      j                  dd      }||j                  z   t        j                  d      z   }|r|d|z  z   }t        |      }t        ||z  t        j                  d      d       t        t              5  t        |d       d d d        |rt        j                  d      j                  dd      }|d|z  z   }||j                  j                         z   t        j                  d      z   }t        t        |      |z  t        j                  d      d       y y # 1 sw Y   xY w)NrM  rX   ro   g [n<r  r  r  )
r2   r   r]   r@  r   r   r   r   r   rG  )r_   rQ  r`   rh   b_inv0s        r;   r  zTestInv.test_posdef_not_posdef  s    IIaL  A&GbffQiBqDA Q
BFF1IE: ;' 	#E"	# 		!$$Q*ABqDAACCHHJ*ACFQJq	>	 		# 	#s   D::Ec                    t        j                  ddgddgg      }t        |      }t        ||z  t        j                  d      d       t        |d      }t        ||d       t        |d	      }t        j
                  ||d      rJ t        |t        j                  d      d	      }t        ||d       t        j                  d
      t        j                  d
      z   }t        |      }t        ||z  t        j                  d
      d       t        j                  d
       t        j                  d
      z   }t        |      }t        ||z  t        j                  d
      d       t        j                  d
       t        j                  d
      z   }d|d<   t        |      }t        ||z  t        j                  d
      d       t        j                  d
      t        j                  d
      z   j                  t         j                        }t        |      }t        ||z  t        j                  d
      d       t        j                  d
      dz  t        j                  d
      z   j                  t         j                        }t        |      }t        ||z  t        j                  d
      d       t        j                  d
       t        j                  d
      z   j                  t         j                        }t        |      }t        ||z  t        j                  d
      d       t        j                  d
       t        j                  d
      z   j                  t         j                        }d|d<   t        |      }t        ||z  t        j                  d
      d       t        j                  ddgddggt         j                        }t        |      }t        ||z  t        j                  d      d       t        j                  ddgddggt         j                        }t        |      }t        ||z  t        j                  d      d       y )Nr  r  r  rI   r  r  r  r  r  rF   rW   )r   rL   ro   rC        ?      r   rL   )r2   r  r   r   r   r  r   r   r|  r6   r   )r_   r`   r  r  r  ainv_slvr  s          r;   r  z"TestInv.test_pos_fails_sym_complex  s;    JJ35NP26NPR S 1vq"&&)%8q5)$U3
 E*	;;tYU;;; BFF1I6	8%8 FF1I
"!fa7 VVAYJ#!fa7 VVAYJ#%!fa7 VVAY#++BMM:!fa7 VVAYt^bggaj(00?!fa7 ffQiZ"''!*$,,R]];!fa7 ffQiZ"''!*$,,R]];%!fa7 HHq$i$+2==A!fa7 HHr4j4*-R]]C!fa7r=   sym_hermr  r  c                    t        j                  d      j                  dd      }|r|d|z  z   }|dk(  r||j                  z   }n||j                  j	                         z   }|t        j
                  d      z   }t         j                  j                  |      }t        ||z  t        j
                  d      d       t        ||      }t        ||d       t        j                  d	t        j                  g |j                  d
 z
  dk(  t         j                  d	      }t        ||z  d|d      }t        ||d       t        ||j                  z  d|d      }	t        |	|d       y )NrM  rX   ro   r  r  r  r  r   rJ   rL   r   FrF  T)r2   r   r]   r@  rG  r   r  r   r   rG  rH  r   rI  )
r_   rQ  rW  r`   rh   rS  b_inv1rM  b_inv2b_inv3s
             r;   test_sym_herzTestInv.test_sym_herm  s&    IIaL  A&BqDAuACCAACCHHJAq	Mq!
BFF1IE:Q*U3 xxBFF0AGG0R00A5rvvqAQtV%(%PU3 QtvvXEHDQU3r=   c                    t        j                  dt              j                  dd      }||j                  z   }|dt        j
                  d      z  z  }t        |d      }t        |d      }t        j                  ||      rJ y )Nr  r   r  rE  rZ  r  r  )r2   r   r   r]   r@  r   r   r  )r_   ri   rJ  rK  y_inv_posdefs        r;   test_triangular_1zTestInv.test_triangular_1  st    IIb&..q!4G	Rq	\Q!34 1u-;;v|4444r=   c                    t        j                  dt              j                  dd      }t	        t        j
                  |            }t        |t        j
                  |      z  t        j                  d      d       t	        |d      }t        |t        j
                  |      z  t        j                  d      d       t        j                  dt        j                  g |j                  d	 z
  d
k(  t         j                  d      }t	        ||z  dd      }t        |t        j
                  |      z  t        j                  d      d       t	        t        j                  |            }t        |t        j                  |      z  t        j                  d      d       t	        |d      }t        |t        j                  |      z  t        j                  d      d       t        j                  dt        j                  g |j                  d	 z
  d
k(  t         j                  d      }t	        ||j                  z  dd      }t        |t        j                  |      z  t        j                  d      d       y )Nr  r   r  r   r  rZ  r  rJ   rL   r   F)r{   r  rY  )r2   r   r   r]   r   r  r   r   rG  rH  r   rI  rP  r@  )	r_   rJ  	y_inv_0_u	y_inv_1_urM  	y_inv_2_u	y_inv_0_l	y_inv_1_l	y_inv_2_ls	            r;   test_triangular_2zTestInv.test_triangular_2  s   GGBe$,,Q2
O		BGGAJ.q	F$67		BGGAJ.q	F xxBFF0AGG0R00A5rvvqA$U=OP		BGGAJ.q	F 
O		BGGAJ.q	F$67		BGGAJ.q	F xxBFF0AGG0R00A5rvvqA$&&u?QR		BGGAJ.q	Fr=   c           
         t        j                  t        j                  t        j                  d            t        j                  t        j
                  dd            g      }t        |      }t        |d   t        j                  dt        j
                  dd      z        d       t        j                  ddgddgg      }t        j                  t              5  t        |d	       d d d        t        j                  ddgddgg      }t        j                  t              5  t        |d	       d d d        y # 1 sw Y   TxY w# 1 sw Y   y xY w)
Nr  rJ   rF   r  r  r  r   rW  r  )r2   r  r  r   rt   r   r   r   r  r   rf  r"   r   r   )r_   r`   inv_as      r;   r  zTestInv.test_diagonal  s   HHbggbggfo.		!Q0HIJA 	a"''!bii1o*=">UK JJq	Aq6*+\\-( 	(J'	( JJAA'(]];' 	(J'	( 	(	( 	(
	( 	(s   E )E E	EN))r   r   r   r   r/  r  r1  r|   r   r   r   r   r   r2   r
   r   r   r   r   r$  float16r3   r5   r+  r  r.  r1  r  r  r  r  r<  r?  rC  rP  r  r  r\  r_  rg  r  r   r=   r;   r  r  *  s    <	3C
	3C
 [[TC

GR\\#RS+ T+ 9 9: [[RZZG88. [[TC

GR\\#RS' T' 
V 
V T T T T T T T T  0.4& [[Z%7? 8?,N8` [[Z%7[[Z%84 9 8485G4(r=   r  c            	          e Zd Zd Zd Zej                  j                  dddgddgg dg      d        Zd Z	ej                  j                  d	e
j                  d
   dd D  cg c]  }|dvr|
 c}}       d        Zd Zd Zej                  j                  deee
j"                  ee
j&                  g      d        Zd Zd Zd Zyc c}} w )TestDetc                 R   t        j                  dgg      }t        |      }|j                  j                  dk(  sJ t        j
                  |      sJ |dk(  sJ t        j                  dggggd      }t        |      }|j                  j                  dk(  sJ |j                  dk(  sJ t        |dgg       t        j                  dgggt         j                        }t        |      }|j                  j                  dk(  sJ |j                  d	k(  sJ t        |dg       y )
NrJ   rg  rB   r&  r   rr   y      ?      @r  )rJ   )	r2   r   r   r   r)  isscalarr   r   r   )r_   r`   detas      r;   test_1x1_all_singleton_dimsz#TestDet.test_1x1_all_singleton_dims  s    HHqcUO1vzz#%%%{{4   rzzHHugYc*1vzz#%%%zzV###TSE7#HHyk]",,71vzz#%%%zzT!!!TF8$r=   c                 R   t         j                  j                  d      }|j                  g dt         j                        }t	        |      }|j
                  j                  dk(  sJ |j                  dk(  sJ t        |t        j                  |             |j                  g dt         j                        t        j                  d      z  }t	        |      }|j
                  j                  dk(  sJ |j                  dk(  sJ t        |t        j                  |             y )N   *n`/ )rF   r  rJ   rJ   r   rg  rF   r  ro   r  )r2   r  r   r
   r   r   r)  r   r   squeezer   )r_   r!  r`   ro  s       r;   test_1by1_stacked_input_outputz&TestDet.test_1by1_stacked_input_output  s    ii##$45JJ|2::J61vzz#%%%zzV###bjjm,JJ|2::J6r||C7HH1vzz#%%%zzV###bjjm,r=   r   rI   rC   )rX   rI   rC   rC   c                    t         j                  j                  d      }|j                  dd|      }t	        |      t         j
                  j	                  |      }}t        ||       |j                  dd|      dz  }||j                  dd|      z  }t	        |      t         j
                  j	                  |      }}t        ||       y )Nrr        rB   ra  ro   r  r   )r2   r  r   uniformr   r  r   )	r_   r   r!  r`   d1d2rh   d3d4s	            r;   #test_simple_det_shapes_real_complexz+TestDet.test_simple_det_shapes_real_complex  s    ii##$45KKReK,Qq)BBKKReK,R/	S[[s[//Qq)BBr=   c                    t        j                  g dg dg dg dg dg dg dg dg      }t        t        |      d	       t        t        t        j                  d
      j                  dd            d       t        j                  g dg dg dg dgt         j                        }t        t        |      d       t        j                  g dg dg dg dg dg dg dg dg      dz  }t        t        |      d       y )N)rJ   rJ   rJ   rJ   rJ   rJ   rJ   rJ   )rJ   rL   rJ   rL   rJ   rL   rJ   rL   )rJ   rJ   rL   rL   rJ   rJ   rL   rL   )rJ   rL   rL   rJ   rJ   rL   rL   rJ   )rJ   rJ   rJ   rJ   rL   rL   rL   rL   )rJ   rL   rJ   rL   rL   rJ   rL   rJ   )rJ   rJ   rL   rL   rL   rL   rJ   rJ   )rJ   rL   rL   rJ   rL   rJ   rJ   rL   g      @r  r  rP   )r   r                 rU  )r   r         ?        r  )ro   rC  r   r   )r  ro   r   r   r   y      @        )r  r  rB   rP   rP   rP   rP   rP   )rB   rP   rP   rP   rP   rP   rP   rP   )rP   g      rP   g      rB   rP   rP   rP   )rP   rB   rP   rP   rP   rP   rP   rP   )rP   rP   rP   g      rP   g      rB   rP   )rP   rP   rP   rB   rP   rP   rP   rP   )rP   rP   rP   rP   rP   g       rP   g      ")rP   rP   rP   rP   rP   rB   rP   rP   ro   rN  )r2   r   r   r   r   r]   r   r~  s     r;   test_for_known_det_valuesz!TestDet.test_for_known_det_values  s    HH.22222224 5 	A& 	BIIbM11!Q78"=
 HH66668 @B||M 	A' HH868686868 9 :== 	A#r=   typAllNgGc                     t         j                  j                  d      }d}|j                  ||g      j                  |      }t	        t        |      t         j                  t         j                  z        sJ y )Nrr  rF   )r2   r  r   r|  
isinstancer   r4   r6   )r_   r  r!  r"  r`   s        r;   "test_sample_compatible_dtype_inputz*TestDet.test_sample_compatible_dtype_input  s\     ii##$45JJ1v%%c*#a&2::#=???r=   c                    d}t        dg d      D ]E  \  }}t        t        |      5  t        t	        j
                  ddggdz  |             d d d        G t        t        |      5  t        t	        j
                  d	d
ggdz  d             d d d        t        t        |      5  t        t	        j
                  ddggdz  d             d d d        t        t        |      5  t        t	        j
                  ddggdz  d             d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   cxY w# 1 sw Y   y xY w)Nz!cannot be cast to float\(32, 64\)SUO)bytes8str32objectrc  r`   rh   rI   r      a   bVr     zdatetime64[s]ztimedelta64[s])zipr   	TypeErrorr   r2   r   )r_   msgcts       r;   test_incompatible_dtype_inputz%TestDet.test_incompatible_dtype_input  s)   3<= 	7DAqy4 7BHHsCj\!^1567 7	7 9C0 	74,)56	79C0 	A3*a?@	A9C0 	B3*a/?@A	B 	B7 7	7 	7	A 	A	B 	Bs/   'D*'D'*'D3*'D?D$	'D03D<?Ec                 z   t        t        t        j                  ddg            d       t        t        t        j                  g d            t        j                  g              t        t        t        j                  g d            t        j                  g d             t        t        d      5  t        t        j                  g d             d d d        t        t        d	      5  t        t        j                  g              d d d        t        t        d      5  t        t        j                  g g             d d d        t        t        d      5  t        t        j                  g gg             d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   y xY w)
Nr   rB   )r   r   r   rX   r   r   rB   rB   rB   zLast 2 dimensionsrc  )r   r   rX   zat least two-dimensional)r   r   r2   r   r   r   r   r  s    r;   test_empty_edge_caseszTestDet.test_empty_edge_cases(  s,   BHHaV,-r2BHHY/0"((2,?BHHY/0"((<2HI:-@A 	%#$	%:-GH 		:-@A 	 "	 :-@A 	"2$ !	" 	"	% 	%	 		  	 	" 	"s0   8!F2F* F%#!F1FF"%F.1F:r:   c                    t        j                  d|      }t        |      }|j                  dk(  sJ |j                  t        t        j
                  d|            j                  k(  sJ t        j                  d|      }t        |      }|j                  dk(  sJ |j                  t        t        j                  d|            j                  k(  sJ y )Nr   r   r   rI   r  r;  )rX   rJ   rJ   )r2   r   r   r   r   r   r   )r_   r:   r`   rg  s       r;   test_empty_dtypezTestDet.test_empty_dtype5  s    HHV2&Fww"}}ww#bffQb1288888HHYb)Fww$ww#bhhy;<BBBBBr=   c                    t        j                  d      j                  dd      j                  t         j                        }|j                         }t        |d      }t        |d       ||k(  j                         rJ y )NrM  rX   Tr*   rP   )	r2   r   r]   r|  r
   r  r   r   rm  )r_   r`   acro  s       r;   r$  zTestDet.test_overwrite_aA  sc    
 IIaL  A&--bjj9VVX24(b!G==?""?r=   c                     t        j                  g dg dg dg      }|j                  d       t        t	        |d      d       y )	N)rW   rP   rB   )      @r~   rw  r  F)writeTr  rV   )r2   r   setflagsr   r   r~  s     r;   test_readonly_arrayzTestDet.test_readonly_arrayL  s6    HHlM<@A	


A40#6r=   c                     ddgdt         j                  gg}t        t        d      5  t	        |       d d d        y # 1 sw Y   y xY w)NrJ   rI   rX   zarray must not containrc  )r2   infr   r   r   r~  s     r;   test_simple_check_finitez TestDet.test_simple_check_finiteR  s?    Va[!:-EF 	F	 	 	s	   =A)r   r   r   rp  ru  r   r   r   r}  r  r2   	typecodesr  r  r  r   r   r
   r   r   r  r$  r  r  ).0ri   s   00r;   rl  rl    s    %"- [[W1vBx&HI	  J	 "$J [[UU0CCR0H %71() &' %7 8@8@B" [[TC

GR\\#RS	C T	C	#7A%7s   $C
rl  c                 z    t        |       }|rt        |      }t        ||       }t        ||      }t        ||      S )N)r	   r   r   r   )r`   rh   cmplxata1b1s         r;   direct_lstsqr  X  s9    	1Br]	RB	RBR=r=   c            	       b   e Zd ZdZd Zd Zd Zd Zej                  j                  de      ej                  j                  dd      ej                  j                  d	e      ej                  j                  d
d      d                             Zej                  j                  ed      ej                  j                  de      ej                  j                  dd      ej                  j                  d	e      ej                  j                  d
d      d                                    Zd Zd Zd Zd Zej                  j                  deeej0                  eej4                  g      ej                  j                  deeej0                  eej4                  g      d               Zy)	TestLstsq)gelsdgelssgelsyNc                    t         D ]  }t        j                  ddgddgg|      }t        j                  D ]  }dD ]  }dD ]  }|j                         }t        j                  ||      }|j                         }t        |||||      }	|	d	   }
|	d
   }t        |d
k(  d|        t        t        ||
      |dt        |j                        z  dt        |j                        z  d|            y )NrJ   rC   rE   rF   r   TF)rJ   r   r  r  )rT   rE   rF   lapack_driverr*   r0   r   rI   expected efficient rank 2, got r  driver: )r  r   err_msg)REAL_DTYPESr2   r   r  lapack_driversr  r   r   r   r   r<   r   )r_   r   r`   r  r  btr  rh   r  r  ri   r(  s               r;   test_simple_exactzTestLstsq.test_simple_exactd  s     	LE1b'C8,E:A!*!9!9 L!. LI3 L VVXHHRu5VVX#B2?0909;  FFQ"A! EG'Aq	1-/)BHH2E-E-/)BHH2E-E2:=/0JLLLL	Lr=   c                     t         D ]  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        j                  D ]4  }dD ]+  }|j                         }|j                         }t        |||||	      }|d
   }	|dk(  r+t        j                  ||j                  |	      z
  dz        }
n|d   }
|d   }t        |dk(  d|        t        t        t        ||	      |z
  dz        j                  d
      |
dt        |j                        z  dt        |j                        z  d|        t        |	ddt        |j                        z  dt        |j                        z  d|        . 7  y )NrJ   rI   rF   r  rX   r   r   r  r  r   r  r  axisr  r  r   r  r  )gm۶mۿgm۶m?)r  r2   r   r  r  r  r   sumr   r   r   r3  r<   r   )r_   r   r`   rh   r  r  r  r  r  ri   	residualsr(  s               r;   test_simple_overdetzTestLstsq.test_simple_overdet}  s     	HE1a&1a&1a&1?A%0A!*!9!9 H!. HIBBBm,5,57C AA$/$&FFAaL1+<$=	$'F	AAAF&EaS$IJ#CQQ(:$;$?$?Q$?$G$-)+i.A)A)+i.A)A.6}o,F	H
 $A'M)+i.A)A)+i.A)A.6}o,FH'HH	Hr=   c                 @   t         D ]  }t        j                  ddgddgddgg|      }t        j                  g d|      }t        j                  D ]D  }dD ];  }|j                         }|j                         }t        |||||	      }|d
   }	|dk(  r;||j                  |	      z
  }
t        j                  |
|
j                         z        }n|d   }|d   }t        |dk(  d|        t        t        t        ||	      |z
  dz        j                  d
      |dt        |j                        z  dt        |j                        z  d|        t        |	ddt        |j                        z  dt        |j                        z  d|        > G  y )Nr  rI   rF   r  rX   r   )rJ   r   rX   r  r  r   r  rJ   r  r  r  r  r  )yu{޿E(B?yӽu{?(YJV?)COMPLEX_DTYPESr2   r   r  r  r  r   r   r  rG  r   r   r3  r<   r   )r_   r   r`   rh   r  r  r  r  r  ri   r  r  r(  s                r;   test_simple_overdet_complexz%TestLstsq.test_simple_overdet_complex  s   # 	DE4)aVaV4EBAU3A!*!9!9 D!. DIBBBm,5,57C AA$/!%%(l$&FF3+;$<	$'F	AAAF&EaS$IJ#CQQ(:$;$?$?Q$?$G$-)+i.A)A)+i.A)A.6}o,F	H
 $ ! $L%')BHH*=%=%')BHH*=%=*2=/(BD+DD	Dr=   c                    t         D ]  }t        j                  g dg dg|      }t        j                  ddg|      }t        j                  D ]  }dD ]  }|j                         }|j                         }t        |||||      }|d   }	|d   }
t        |
dk(  d	|
        t        |	d
dt        |j                        z  dt        |j                        z  d|           y )Nr   r  r   rJ   rI   r  r  r   r  )gqqgqq?gdq?r  r  r  )r  r2   r   r  r  r  r   r   r   r<   r   )r_   r   r`   rh   r  r  r  r  r  ri   r(  s              r;   test_simple_underdetzTestLstsq.test_simple_underdet  s      	HE)Y/u=A!Qu-A!*!9!9 H!. HIBBBm,5,57C AAAAAF&EaS$IJ#A (;)+i.A)A)+i.A)A.6}o,F	HHH	Hr=   r   r"  )rC   r  r  r  r  c           
      2   t         j                  j                  d      }t        j                  |j                  ||g      |      }t	        |      D ]  }dd|||f   z   z  |||f<    t	        d      D ]  }t        j                  |j                  |dg      |      }|j                         }	|j                         }
t        |	|
|||      }|d   }|d	   }t        ||k(  d
| d|        |t         j                  u rJt        t        ||      |dt        |	j                        z  dt        |	j                        z  d|        t        t        ||      |dt        |	j                        z  dt        |	j                        z  d|        " y )Nr  r   rC   r+  rF   rX   r  r   rI   expected efficient rank , got i  r  r    )r2   r  RandomStater  r-  r  r   r   r
   r   r   r<   r   r_   r   r"  r  r  r!  r`   r'  rh   r  r  r  ri   r(  s                 r;   test_random_exactzTestLstsq.test_random_exact  s   
 ii##D)JJszz1a&)7q 	+AC!AqD'M*AadG	+q 	>A

3::q!f-U;ABBB&3$-$-/C AAAAAF6qc :#  

"a)Q"Yrxx%88"Yrxx%88$,]O"<	>  a)Q#i&99#i&99$,]O"<	>)	>r=   z$may segfault on Alpine, see gh-17630ry  c           
      `   t         j                  j                  d      }t        j                  |j                  ||g      d|j                  ||g      z  z   |      }t	        |      D ]  }dd|||f   z   z  |||f<    t	        d      D ]  }t        j                  |j                  |dg      |      }|j                         }	|j                         }
t        |	|
|||      }|d	   }|d   }t        ||k(  d
| d|        |t         j                  u rJt        t        ||      |dt        |	j                        z  dt        |	j                        z  d|        t        t        ||      |dt        |	j                        z  dt        |	j                        z  d|        " y )Nr  ro   r   rC   r+  rI   rX   r  r   r  r  i  r  r  r  )r2   r  r  r  r-  r  r   r   r   r   r   r<   r   r  s                 r;   test_random_complex_exactz#TestLstsq.test_random_complex_exact  s    ii##D)JJszz1a&)Bszz1a&/A,AA"$q 	+AC!AqD'M*AadG	+q 	>A

3::q!f-U;ABBBm$-$-/C AAAAAF6qc :#  $a)Q"Yrxx%88"Yrxx%88$,]O"<	>  a)Q#i&99#i&99$,]O"<	>'	>r=   c                    t         j                  j                  d      }t        D ]K  }dD ]B  \  }}t        j
                  D ](  }dD ]  }t        j                  |j                  ||g      |      }t        |      D ]  }dd|||f   z   z  |||f<    t        d      D ]  }t        j                  |j                  |dg      |      }	|j                         }
|	j                         }t        |
||||	      }|d
   }|d   }t        ||k(  d| d|        t        |t        ||	d
      dt        |
j                        z  dt        |
j                        z  d|         " + E N y )Nr  )rC      )r  rI   r  r   rC   r+  rF   rX   r  r   rI   r  r  r  r  r  r  )r2   r  r  r  r  r  r  r-  r  r   r   r   r  r<   r   r_   r!  r   r"  mr  r  r`   r'  rh   r  r  r  ri   r(  s                  r;   test_random_overdetzTestLstsq.test_random_overdet  s   ii##D)  	NE. NA%.%=%= NM%2 N	JJszz1a&'9G!&q ;A&(C!AqD'M&:AadG;!&q NA "

3::q!f+=U KA!"B!"B"'B6C4=4=#?C !$AA #AA#AF.Fqc J++,#-/ 0+*+\!Qa-H/1Ibhh4G/G/1Ibhh4G/G4<]O2L	NN	NNN	Nr=   c                    t         j                  j                  d      }t        D ]b  }dD ]Y  \  }}t        j
                  D ]?  }dD ]6  }t        j                  |j                  ||g      d|j                  ||g      z  z   |      }t        |      D ]  }dd|||f   z   z  |||f<    t        d      D ]  }t        j                  |j                  |d	g      |      }	|j                         }
|	j                         }t        |
||||
      }|d   }|d   }t        ||k(  d| d|        t        |t        ||	d      dt        |
j                        z  dt        |
j                        z  d|         9 B \ e y )Nr  r  r  ro   r   rC   r+  rI   rX   r  r   r  r  rJ   r  r  r  r  )r2   r  r  r  r  r  r  r-  r  r   r   r   r  r<   r   r  s                  r;   test_random_complex_overdetz%TestLstsq.test_random_complex_overdet6  s   ii##D)# 	JE. JA%.%=%= JM%2 J	JJszz1a&'9Bszz1a&?Q<Q'Q-24!&q ;A&(C!AqD'M&:AadG;!&q JA "

3::q!f+=U KA "#B!"B"'B6C4=4=#?C !$AA #AA#AF.Fqc J++,#-/ 0+&'a!)D+-	"((0C+C+-	"((0C+C08.H	JJJJJ	Jr=   c           
         t        j                         5  t        j                  ddt               d d d        t	        j
                  d      }t        j                  t        dt        j                  dd      D ]  \  }}}}}|j                  |      }t	        j
                  ||      }|j                         }	|j                         }
t        |	|
||||      }|d   }|d	   }t        |d	k(  d
|        t        t!        ||      |dt#        |j$                        z  dt#        |j$                        z  d|         y # 1 sw Y   xY w)Nrl  zIinternal gelsd driver lwork query error,.*Falling back to 'gelss' driver.))rJ   rC   r  r  r  r   )r  r{   r*   r0   r   rI   r  r  r  r  )warningscatch_warningsfilterwarningsRuntimeWarningr2   r   	itertoolsproductr  r  r  r|  r  r   r   r   r   r<   r   )r_   r  r   r  r  r  r{   r`   rh   r  r  r  ri   r(  s                 r;   r|   zTestLstsq.test_check_finiteT  sF   $$& 	W##H%FGUW	W XX)*kL'66++	-	@=E2}i 		% A5)A BBBm%1y$-/C AAAAAF=aSABC1Iq!#i&8!8!#i&8!8&.}o$>@'	@	W 	Ws   EEc           
         dD ]  \  }}t        j                  |      }t        t        j                  |      |      \  }}}}t	        |t        j                  |d   f|dd  z                |d   rt        j
                  d      n#t         j                  j                  |d      dz  }t	        ||       t        |dk(  d       t	        |t        j
                  d              y )N))r   rI   r   ))r   rF   r  )rF   r   )rF   )r  r  rJ   r   r   r  rI   zexpected rank 0)	r2   r   r   r   r   r   r  r   r   )	r_   a_shapeb_shaperh   ri   residuesranksresidues_should_bes	            r;   r   zTestLstsq.test_emptyt  s    !3 	,GW  A#('):A#> AxqBHHgaj]WQR[%@AB4;AJ"((4.')yy~~aa~'@!'C #56DAI01BHHTN+	,r=   r  r   c                 L   t        j                  d|      }t        j                  d|      }t        ||      \  }}}}|j                  dk(  sJ t        t        j                  d|      t        j
                  d|            d   j                  }	|j                  |	k(  sJ y r  )r2   r   r   rb  r   r   r   )
r_   r  r   r`   rh   ri   r  r  r  r  s
             r;   r  zTestLstsq.test_empty_dtype  s     HHV4(HHQd#$Q{8T1vv{{BFF1D12771D3IJ1MSSww+%%%r=   N)r   r   r   r  r  r  r  r  r   r   r   r  r  r  r&   r  r  r  r  r|   r   r   r   r2   r
   r   r   r  r   r=   r;   r  r  a  s   6NL2H:DBH, [[Wk2[[S),[[_n=[[[-8> 9 > - 3>@ [[(NO[[Wn5[[S),[[_n=[[[-8> 9 > - 6 P
>@N8J<@@, [[Vc5"**gr||%TU[[Vc5"**gr||%TU& V V&r=   r  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                  j                  d	eej                   eej$                  g      d
        Zy)TestPinvc                     t        g dg dg dgt              }t        |      }t        t	        ||      t        j                  d             y Nr   r  r  r   rX   r   r   r   r   r   r2   r   r_   r`   a_pinvs      r;   test_simple_realzTestPinv.test_simple_real  s6    9i4EBa!#a."&&)<r=   c                     t        g dg dg dgt              dt        g dg dg dgt              z  z   }t        |      }t        t	        ||      t        j                  d	             y 
Nr   r  r  r   ro   )rL  r  rM   )rG   r  rF   )rX   rI   rJ   rX   r  r  s      r;   r  zTestPinv.test_simple_complex  s[    Iy*5
Iy'I-2"4 44 a!#a."&&)<r=   c                     t        g dg dg dgt              }t        |      }t        g dg dg dg      }t        ||       y )Nr   r  rM   r  rM  r   g|qgԕVUUſgc8?gqg^0<gq?g9?gԕVUU?g:87ȿr   r   r   r   r_   r`   r  r   s       r;   test_simple_singularzTestPinv.test_simple_singular  sD    9i35AaLKKM N 	"&(3r=   c                     t        g dg dgt              }t        |      }t        ddgddgdd	gg      }t        ||       y )
Nr   r  r   g֋8g#q?g#qg#q?gIq?g#q̿r  r  s       r;   test_simple_colszTestPinv.test_simple_cols  sN    9i(6a;
3&
3%{35 6 	"&(3r=   c                     t        ddgddgddggt              }t        |      }t        g dg d	g      }t        ||       y )
NrJ   rI   rX   rF   r  rG   r   )gDpTUUgQUUտgvWUU?)gDpTUU?gQUU?g&>ڿr  r  s       r;   test_simple_rowszTestPinv.test_simple_rows  sK    Aq6Aq6Aq6*%8a@?A B!&(3r=   c                     t        g dg dg dg      }t        |d      }t        t        ||      t	        j
                  d             y )Nr   )rF   r  r   r  Frz   rX   )r   r   r   r   r2   r   r  s      r;   r|   zTestPinv.test_check_finite  s7    9j*56ae,!#a."&&)<r=   c                 p    g dg dg dg}t        |      }t        g dg dg dg      }t        ||       y )Nr   r  r  r  r  r   )r   r   r   r  s       r;   test_native_list_argumentz"TestPinv.test_native_list_argument  s=    	9-aLKKM N 	"&(3r=   c                    t         j                  j                  d      }d}t        |j                  ||f            \  }}t        j                  d      j                  dd      }|j                         }d|d<   d}d	}t        ||d
      }	||	z  |z  |z
  }
||	z  |z  |z
  }t        t         j                  j                  |
      dd       t        t         j                  j                  |      dd       t        |||      }	||	z  |z  |z
  }
||	z  |z  |z
  }t        t         j                  j                  |
      dd       t        t         j                  j                  |      dd       y )Nr  rs  g     A@rM   r  gMbP?r   h㈵>g?rP   r  gMb@?r  r4  g;O@{Gz?r   )r2   r  r   r!   r   r]   r  r   r   r  r   )r_   r!  r"  q_a_mr`   r  r   a_padiff1adiff2s               r;   test_atol_rtolzTestPinv.test_atol_rtol  s:   ii##D)#**aV$%1iio%%a+HHJ$ 3T+S1qsS3& 			v.5A		v.FC 3T-S1qsS3&		v.DA		v.DAr=   r:   c                     t        j                  d|      }t        |      }|j                  dk(  sJ |j                  t        t        j
                  d|            j                  k(  sJ y r  )r2   r   r   rb  r   r   r_   r:   r`   r  s       r;   r   zTestPinv.test_empty  sU    HHV2&a{{a||tBFF1B$78>>>>>r=   N)r   r   r   r  r  r  r  r  r|   r
  r  r   r   r   r   r2   r
   r   r   r   r   r=   r;   r  r    sb    =
=444=
4B8 [[TE2::w#MN? O?r=   r  c                       e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  deej                  eej                   g      d        Zy	)
TestPinvSymmetricc                     t        g dg dg dgt              }t        j                  ||j                        }t        |      }t        t        j                  ||      t        j                  d             y r  )r   r   r2   r   r@  r   r   r   r  s      r;   r  z"TestPinvSymmetric.test_simple_real  sN    9i4EBFF1accNq!"&&F"3RVVAY?r=   c                 N   t        g dg dg dgt              }t        j                  ||j                        }t        j
                  j                  |      \  }}}|dxx   dz  cc<   t        j                  ||z  |      }t        |      }t        |      }t        ||       y )Nr   r  r  r   r   rL   )
r   r   r2   r   r@  r  svdr   r   r   )r_   r`   rc   r  vtr  a_pinvhs          r;   test_nonpositivez"TestPinvSymmetric.test_nonpositive  s}    9i35AFF1accN99==#1b	!
FF1q5"a(!&'2r=   c                 L   t        g dg dg dgt              dt        g dg dg dgt              z  z   }t        j                  ||j	                         j
                        }t        |      }t        t        j                  ||      t        j                  d	             y r  )	r   r   r2   r   rG  r@  r   r   r   r  s      r;   r  z%TestPinvSymmetric.test_simple_complex  sz    Iy*5
Iy'I-2"4 44 FF1affhjj!q!"&&F"3RVVAY?r=   c                    t        g dg dg dgt              }t        j                  ||j                        }t        |j                               }t        t        j                  ||      t        j                  d             y r  )	r   r   r2   r   r@  r   tolistr   r   r  s      r;   r
  z+TestPinvSymmetric.test_native_list_argument  sU    9i4EBFF1accNqxxz"!"&&F"3RVVAY?r=   c                     t        j                  g dg dg dg      }t        |      }t        ||z  |z  |d       t        ||z  |z  |d       y )N)rJ   rL   r   )rL   rI   rL   )r   rL   rJ   r   r  )r2   r   r   r   )r_   r`   ps      r;   test_zero_eigenvaluez&TestPinvSymmetric.test_zero_eigenvalue	  sJ     HHj+z:;!HA	151A	151r=   c                    t         j                  j                  d      }d}t        |j                  ||f            \  }}t        j                  g ddg|dz
  z  z         }|j
                  |z  |z  }t        j                  g ddg|dz
  z  z         }|j
                  |z  |z  }d}d	}t        ||d
      }	||	z  |z  |z
  }
||	z  |z  |z
  }t        t        |
      |d       t        t        |      dd       t        |||
      }	||	z  |z  |z
  }
||	z  |z  |z
  }t        t        |
      dd       t        t        |      dd       y )Nr  rs  )rF   rX   rI   rJ   vk?gﭣ>gu>rG   )rF   rX   rI   rJ   r&  rP   rP   r  g1?r  r+  r   r  gdy=r  -C6?)	r2   r  r   r!   rt   r@  r   r   r   )r_   r!  r"  r  r  r`   r  r  r   r  r  r  s               r;   r  z TestPinvSymmetric.test_atol_rtol
	  sD   ii##D)#**aV$%1GG2gY!_DECC!GaKgg/2$!*<=ccCi!m!ADr*S1qsS3& 	Vd5Ve%8 ADt,S1qsS3&Vd5Vd5r=   r:   c                     t        j                  d|      }t        |      }|j                  dk(  sJ |j                  t        t        j                  d|            j                  k(  sJ y r  )r2   r   r   rb  r   r   r   r  s       r;   r   zTestPinvSymmetric.test_empty&	  sU    HHV2&q{{a||tBFF1B$78>>>>>r=   N)r   r   r   r  r  r  r
  r$  r  r   r   r   r   r2   r
   r   r   r   r   r=   r;   r  r    sZ    @3@@268 [[TE2::w#MN? O?r=   r  scale)r>  rB   r  pinv_c                     t        j                  ddgddgg      | z  }t        j                  dt        j                  |      z        } ||      }t        ||       y )NrJ   r   g|=rB   )r2   r   rt   r   )r)  r*  ri   r   x_invs        r;   test_auto_rcondr-  .	  sQ     	1a&1e*%&.AwwrBGGAJ'H!HEE8$r=   c                   x    e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  e d      d	        Zy
)TestVectorNormsc                    t         j                  d   D ]  }t        j                  g d|      }t        dt        j                  |      j
                  j                  dz        }t        t        |      t        j                  d      |       t        t        |d      t        j                  d      |        t         j                  d	   D ]  }t        j                  g d
|      }t        dt        j                  |      j
                  j                  dz        }t        t        |      t        j                  d      |       t        t        |d      t        j                  d      |        y )NAllFloatr   r   r   rC   rN   r   rI   Complex)ro   rl   y              @)
r2   r  r   maxr7   r8   realr   r   sqrt)r_   r   ri   r  s       r;   
test_typeszTestVectorNorms.test_types9	  s   \\*- 	?E%0AeRXXe_0055:;CDGRWWR[s;DAJ#>		? \\), 	?EU3AeRXXe_0055:;CDGRWWR[s;DAJ#>		?r=   c                 R    t        dgt              }t        t        |      |       y )Nr  r   )r   r
   r   r   r~  s     r;   test_overflowzTestVectorNorms.test_overflowF	  s      4&(DGQ'r=   c                     t        dgdgdz  z   t              }	 t        t        |      dz
  dd       y # t        $ r d}t        t        |      dz
  d	|
       Y y w xY w)N     @rJ   i'  r   r   r  r  zO: Result should equal either 0.0 or 0.5 (depending on implementation of snrm2).rP   )r  )r   r
   r   r   AssertionErrorr   )r_   r`   r  s      r;   test_stablezTestVectorNorms.test_stableL	  sc    3%1#e)#73	A DGcM3T: 	A.CQ#sC@		As   6 %AAc                 d    t        t        g dd      d       t        t        g dd      d       y )N)rJ   r   rX   r   rI   r   rX   )r   r   r  s    r;   test_zero_normzTestVectorNorms.test_zero_normY	  s$    T)Q'+T)Q'+r=   c                     t        j                  ddgddgggdz  d      }t        t        |d      ddggdz         t        t        |dd      d	gdz  gdz         y )
NrI   rJ   rX   rF   rg  r  5D+@6f~@r  )r2   r   r   r   r~  s     r;   test_axis_kwdzTestVectorNorms.test_axis_kwd]	  sc    HH1v1v&'!+S1QQ:z*B)Ca)GHQ*bTAXJN;r=   c                     t        j                  ddgddgggdz  d      }t        |dd      }t        |dd	gggdz         t	        |j
                  d
k(         t        t        |ddd      dgdgggdz         y )NrI   rJ   rX   rF   rg  T)r  keepdimsr@  rA  )rI   rJ   rI   r~   g      @)r2   r   r   r   r   r   rT  s      r;   test_keepdims_kwdz!TestVectorNorms.test_keepdims_kwdb	  s    HH1v1v&'!+S1T*j*567!;<9$%QD9bTB4L>A;MNr=   z64-bit BLAS requiredry  c                     t        d       t        j                  dgt        j                        }d|d<   t	        |      }~t        |d       y )NihB  )free_mbl        r   rJ   rL   rB   )r%   r2   r   r4   r   r   )r_   ri   r  s      r;   test_large_vectorz!TestVectorNorms.test_large_vectori	  s?    %(HHeWBJJ/"1gS!r=   N)r   r   r   r6  r8  r<  r>  rB  rE  r   r   r  r'   rH  r   r=   r;   r/  r/  7	  sN    ?(A,<
O [[I.DE" F"r=   r/  c                   $    e Zd Zd Zd Zd Zd Zy)TestMatrixNormsc           
      v   t         j                  j                  d      }dD ]  \  }}t         j                  t         j                  t         j
                  t         j                  t         j                  fD ]=  }d|j                  ||f      j                  |      z  }t        j                  |j                  t         j                        r*|d|j                  ||f      z  z  }t         j                  }nt         j                  }d ddddd	t         j                  t         j                   fD ]  }t        ||
      }t         j                  j                  ||
      }	t        j                   ||	      rHt         j                  j                  |j                  |      |
      }	t#        ||	        @  y )Nr  )rr   )rJ   rX   )rX   rJ   r  rs  )r  rF   rL  y              $@frorJ   rL   rI   r  )ord)r2   r  r   r
   r4   r   r6   int64r  r|  r  r   r  r  r   r  r  r   )
r_   r!  r"  r  r  r#  t_highr  actualdesireds
             r;   test_matrix_normsz!TestMatrixNorms.test_matrix_normsu	  sH   ii##D)B 	9DAqZZR\\2=="((R 9,,aV4;;A>>=="*<*<=s22Aq6:::A]]FZZF"E1b!R"&&I 9E!!/F iinnQEn:G ;;vw7"$))..&1Au."M'899	9r=   c                 
   t        j                  ddgddgggdz  d      }t        |t         j                  d      }t        t        j                  |dd      t         j                  d	      }t        |dd	      }t        ||       t        ||       t        ||       t        |j                  |j                  cxk(  xr |j                  k(  nc        t        |dd      }t        t        j                  |dd      dd	      }t        |t         j                  d	      }t        ||       t        ||       t        ||       t        |j                  |j                  cxk(  xr |j                  k(         y c        y )
NrI   rJ   rX   rF   rg  r  )rM  r  r   r  )r2   r   r   r  swapaxesr   r   r   )r_   r`   rh   r  rg  s        r;   rB  zTestMatrixNorms.test_axis_kwd	  s   HH1v1v&'!+S1V,Q1%266?'111177-agg-.'Q1%16:V,111177-agg-.-.r=   c                 
   t        j                  dd      j                  dddd      }t        |t         j                  dd	
      }t        |ddd	
      }t        ||       t        |j                  |j                  k(         y )Nx   rg  r   rI   rX   rF   r  r  T)rM  r  rD  rJ   r  )r2   r   r]   r   r  r   r   r   )r_   r`   rh   r  s       r;   rE  z!TestMatrixNorms.test_keepdims_kwd	  sf    IIc%--aAq9Vd;61177"#r=   c                    t        j                  d      }t        t        |      d       t        t        |d      t        j                  d             t        t        |d      t        j                  d             t        j                  d	      }t        t        |      d       t        t        |d      t        j                  d
             t        t        |d      t        j                  d             y )Nr   rP   r   r  r   T)rD  rr   )r   rX   r;  )r2   r   r   r   r   r~  s     r;   r   zTestMatrixNorms.test_empty	  s    HHVQ$QQ$8Q.0@AHHVQ$QQ$8Q.0@Ar=   N)r   r   r   rR  rB  rE  r   r   r=   r;   rJ  rJ  s	  s    9(/"$	Br=   rJ  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestOverwritec                 (    t        t        ddg       y Nr  r;  )r$   r   r  s    r;   
test_solvezTestOverwrite.test_solve	      EFD>2r=   c                 (    t        t        ddg       y r[  )r$   r   r  s    r;   test_solve_triangularz#TestOverwrite.test_solve_triangular	  s    ,vtn=r=   c                 "    t        d ddg       y )Nc                     t        d| |      S )NrT   )r   )ra   rh   s     r;   <lambda>z1TestOverwrite.test_solve_banded.<locals>.<lambda>	  s    ,vr1*E r=   )rF   rG   rG   r#   r  s    r;   test_solve_bandedzTestOverwrite.test_solve_banded	  s    E#TN	,r=   c                 (    t        t        ddg       y )Nr  rc  )r$   r   r  s    r;   test_solveh_bandedz TestOverwrite.test_solveh_banded	  s    MFD>:r=   c                 &    t        t        dg       y Nr  )r$   r   r  s    r;   test_invzTestOverwrite.test_inv	      C&*r=   c                 &    t        t        dg       y rh  )r$   r   r  s    r;   test_detzTestOverwrite.test_det	  rj  r=   c                 (    t        t        ddg       y )N)rX   rI   r;  )r$   r   r  s    r;   
test_lstsqzTestOverwrite.test_lstsq	  r]  r=   c                 &    t        t        dg       y rh  )r$   r   r  s    r;   	test_pinvzTestOverwrite.test_pinv	  s    D6(+r=   c                 &    t        t        dg       y rh  )r$   r   r  s    r;   
test_pinvhzTestOverwrite.test_pinvh	  s    EF8,r=   N)r   r   r   r\  r_  rd  rf  ri  rl  rn  rp  rr  r   r=   r;   rY  rY  	  s/    3>,;++3,-r=   rY  c            	       "   e Zd Zd Zd Zd Zd 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)TestSolveCirculantc                     t        j                  g d      }t        j                  g d      }t        ||      }t        t	        |      |      }t        ||       y N)rJ   rI   rX   r  )rJ   rL   rJ   r   )r2   r   r   r   r   r   r_   r  rh   ri   rJ  s        r;   test_basic1zTestSolveCirculant.test_basic1	  sD    HH\"HH]#Aq!)A,"1r=   c                     t        j                  g d      }t        j                  d      j                  dd      }t	        ||      }t        t        |      |      }t        ||       y )NrJ   rI   r  rs  rF   rX   r2   r   r   r]   r   r   r   r   rw  s        r;   test_basic2zTestSolveCirculant.test_basic2	  sP    HH^$IIbM!!!Q'Aq!)A,"1r=   c                 *   t        j                  g d      }t        j                  d      j                  ddd      }t	        ||      }t        t        |      |j                  dd            j                  |j                        }t        ||       y )Nrz  r  rF   rX   rI   rL   )	r2   r   r   r]   r   r   r   r   r   rw  s        r;   test_basic3zTestSolveCirculant.test_basic3	  sl    HH^$IIbM!!!Q*Aq!)A,		!R 0199!''B1r=   c                     t        j                  g d      }t        j                  d      j                  dd      dz   }t	        ||      }t        t        |      |      }t        ||       y )N)r  r{  r   r  r  rF   rI   y              ?r|  rw  s        r;   rp   zTestSolveCirculant.test_complex	  sV    HH&'IIaL  A&-Aq!)A,"1r=   c                     t         j                  j                  d      }|j                  d      }|j                  d      }t	        ||      }t        t        |      |      }t        ||       y )Ni1  r`  )r2   r  r  r  r   r   r   r   )r_   r!  r  rh   ri   rJ  s         r;   test_random_b_and_cz&TestSolveCirculant.test_random_b_and_c	  s\    ii##E*##Aq!)A,"1r=   c                     t        j                  g d      }t        j                  g d      }t        ||d      }t        t	        |      |      \  }}}}t        ||       t        t        t        ||       y )NrJ   rJ   r   r   )rJ   rI   rX   rF   r   )rk  )r2   r   r   r   r   r   r   r   )r_   r  rh   ri   rJ  r  rnkr  s           r;   r<  z TestSolveCirculant.test_singular	  s\    HH\"HH\"Aq73y|Q/3Q1k?Aq9r=   c                    t        j                  g dgg dgg      }t        j                  g dg dg dg      }t        ||d      }t        |j                  d       t        j
                  |      }t        t        |d	   j                               |j                        |d d d	d d f<   t        t        |d   j                               |j                        |d d dd d f<   t        ||       t        ||dd
      }t        |j                  d       t        t        j                  |d
d	      |       t        t        j                  |dd      |j                  d      }t        |j                  d       t        ||       y )N)rL   g      @rX   g      @)rJ   rG   rG   g      @)r   r   rJ   rJ   r  )rJ   rL   r   r   rJ   )baxis)rF   rI   rX   r   rL   )r  outaxis)rI   rX   rF   rI   )caxis)r2   r   r   r   r   
empty_liker   r   r<  r@  r   moveaxisrT  )r_   r  rh   ri   r   s        r;   test_axis_argsz!TestSolveCirculant.test_axis_args	  s+    HH()N+;<= HHlL-@AAq*QWWi(==#!)AaDJJL"9133?Aq!)AaDJJL"9133?Aq8$Aq26QWWi(Ar1-x8 BKK1a0!##Q?QWWi(8$r=   c                 n    g d}g d}t        ||      }t        t        |      |      }t        ||       y rv  )r   r   r   r   rw  s        r;   r   z-TestSolveCirculant.test_native_list_arguments
  s2    Aq!)A,"1r=   dt_cr   c                    t        j                  g |      }t        j                  g |      }t        ||      }|j                  dk(  sJ |j                  t        t        j
                  d|      t        j                  d|            j                  k(  sJ t        j                  d|      }t        ||      }|j                  dk(  sJ |j                  |j                  k(  sJ y )Nr   r   rX   r   )r2   r   r   r   r   r   r   r   )r_   r  r   r  rh   ri   x1s          r;   r   zTestSolveCirculant.test_empty
  s     HHRt$HHRt$Aq!ww$ww/"))AT*B*,''!4*@BBG%H 	H H HHV4(Q"xx6!!!xx177"""r=   N)r   r   r   rx  r}  r  rp   r  r<  r  r   r   r   r   r   r   r2   r
   r   r   r   r   r=   r;   rt  rt  	  s    :%2 [[Vc5"**gr||%TU[[Vc5"**gr||%TU# V V#r=   rt  c                       e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
ej                  j                  deeej"                  eej&                  g      d	        Zy
)TestMatrix_Balancec                 .    t        t        t        d       y )NzSome string for fail)r   r   r    r  s    r;   test_string_argz"TestMatrix_Balance.test_string_arg0
  s    j.2HIr=   c           	          t        t        t        t        j                  ddgdt        j
                  gg             t        t        t        t        j                  ddgdt        j                  gg             y )NrJ   rI   rX   )r   r   r    r2   r   r  rI  r  s    r;   test_infnan_argz"TestMatrix_Balance.test_infnan_arg4
  sT    j.hhABFF45	7j.hhABFF45	7r=   c           	          t        t        j                  ddgddgg            \  }}t        t        j                  t        j
                  t        j                  |                  dg       y )Nr  rJ   r   r  )r    r2   r   r   difflog2rt   )r_   r  rJ  s      r;   test_scalingzTestMatrix_Balance.test_scaling:
  sN    bhhq	D!9'=>?1 	
 34qc:r=   c                     t        j                  g dg dg dg      }t        |      \  }}t        t	        ||      j                  |      |       y )N)rJ   r   r'  )rJ   rJ   r  )r:  g      Y@rJ   )r2   r   r    r   r   r   )r_   r#  ri   rJ  s       r;   test_scaling_orderz%TestMatrix_Balance.test_scaling_orderA
  s>    HHlL-@Aa 1a*A.r=   c                     t        t        j                  ddgddgg      d      \  }\  }}t        t        j                  t        j
                  |            dg       t        |t        j                  d             y )Nr  rJ   r   separater  rI   )r    r2   r   r   r  r  r   r   )r_   r  rJ  zs       r;   test_separatez TestMatrix_Balance.test_separateF
  s^    "288dAYq	,B#C,-/	6AqRWWRWWQZ(1#.299Q<(r=   c                 \   t        t        j                  d      t        j                  t        j                  d            t        j                  d            }t	        |d      \  }\  }}t        |t        j                  |             t        |t        j                  g d             y )Nr  r  rJ   r  )r   rJ   rG   r  rF   rX   rI   )r   r2   r   rP  r    r   	ones_liker   )r_   r#  ri   rJ  r  s        r;   test_permutationz#TestMatrix_Balance.test_permutationL
  sn    rwwv(@wwv("1q1	6Aq2<<?+288$9:;r=   c           	      (   t        j                  g dg dg dg dg dg      t        j                  g dg dg dg dg      t        j                  g d	g d
g dg dg      f}|D ]  }t        |      \  }}t        |d      \  }\  }}t        j                  |      }t        j                  |j
                  d         ||<   t        |t        j                  |      |d d f          t        t        ||      j                  |      |        y )N)rP   rP   rP   rP   >)rP   rP   rP   rP   rP   )rW   rW   rP   rP   rP   )rP   rP   r  rP   rP   )r  rP   rP   rP   )rP   rw  rP   rP   )rB   rP   r  rP   )rP   rB   rP   rw  )r  rP   rB   rP   )rw  rw         rB   )r  r  r  rP   )rw  r  rB   rw  rJ   r  r   )
r2   r   r    r  r   r   r   rt   r   r   )r_   casesr#  ri   rJ  r  r#  ips           r;   test_perm_and_scalingz(TestMatrix_Balance.test_perm_and_scalingS
  s     5///5	7 8 -,-,. /
 ,...0 1$  	3A!!$DAq&q15IAv1q!BIIaggaj)BqEArwwqz"a%01E!QKOOA.2	3r=   r:   c                    t        j                  d|      }t        |      \  }}|j                  dk(  sJ |j                  dk(  sJ t        t        j                  d|            \  }}|j
                  |j
                  k(  sJ |j
                  |j
                  k(  sJ t        |d      \  }\  }}|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ t        |d      \  }\  }	}
|j
                  |j
                  k(  sJ |j
                  |	j
                  k(  sJ |j
                  |
j
                  k(  sJ y )Nr   r   r   rI   Tr  )r2   r   r    rb  r   r   )r_   r:   r`   rh   r  b_nt_nr)  permscale_nperm_ns              r;   r   zTestMatrix_Balance.test_emptyo
  s"   HHV2&a 1vv{{vv{{!"&&""56Sww#))###ww#))###)!d;=E4vv{{zzQyyA~~!/D!Agvww#))###{{gmm+++zzV\\)))r=   N)r   r   r   r(   r  r  r  r  r  r  r  r   r   r   r   r   r2   r
   r   r   r   r   r=   r;   r  r  /
  sm    J J7;/
)<38 [[TC

GR\\#RS* T*r=   r  c                      e Zd ZdZd Zd Zej                  j                  de	j                  d         d        Zej                  j                  de	j                  d         d        Zej                  j                  d      ej                  j                  d	e	j                  d         ej                  j                  d
e	j                  d         d                      Zy)
TestDTypesz7Check backwards compatibility for dtypes vs scipy 1.16.c                     |dk(  rt        j                  dd      S |dk(  rt        j                  ddgdd	ggd      S t        j                  d|      S )
NMrI   datetime64[ms]r   r  r  r     c   d)r2   r   r  r_   tcodes     r;   	get_arr2DzTestDTypes.get_arr2D
  sQ    C<66!#344c\::d|dD\:#FF66!5))r=   c                     |dk(  rt        j                  dd      S |dk(  rt        j                  ddgd      S t        j                  d|      S )Nr  rI   r  r   r  r  r  )r2   r   r  r  s     r;   	get_arr1DzTestDTypes.get_arr1D
  sH    C<771$455c\::tTl#66771E**r=   r  r  c                     | j                  |      }|dv r.t        j                  t              5  t	        |       d d d        y t	        |       y # 1 sw Y   y xY w)NSUVO)r  r   r   r   r   )r_   r  r`   s      r;   ri  zTestDTypes.test_inv
  sO     NN5!F?z* A  F	 s   AAc                 "   | j                  |      }t        j                         dk(  }t        j                  dk(  }d}|s|s|dz  }||v r.t        j                  t              5  t        |       d d d        y t        |       y # 1 sw Y   y xY w)Narm64ntSUVOmMr  )	r  platformmachineosnamer   r   r  r   )r_   r  r`   is_arm
is_windowsfailing_tcodess         r;   rl  zTestDTypes.test_det
  s    NN5!!!#w.WW_
!*d"NN"y) A  F	 s   $BBzignore:Casting complex valuestcode_atcode_bc                    | j                  |      }| j                  |      }d}	 t        j                  ||       |s/t        j                  t              5  t        ||       d d d        y |dv s|dv r/t        j                  t              5  t        ||       d d d        y t        ||       y # t        $ r d}Y w xY w# 1 sw Y   y xY w# 1 sw Y   y xY w)NTFr  VO)	r  r  r2   result_typer  r   r   r   r   )r_   r  r  r`   rh   can_combines         r;   r\  zTestDTypes.test_solve
  s     NN7#NN7#	 NN7G, y) a 'T/z* a  !QK  	 K	 
  s)   B1 CC1B?>B?CCN)r   r   r   __doc__r  r  r   r   r   r2   r  ri  rl  r  r\  r   r=   r;   r  r  
  s    A*+ [[Wbll5&9:	 ;	 [[Wbll5&9: ;$ [[ ?@[[YU(;<[[YU(;< = = Ar=   r  r   )Qr  r  r  r  numpyr2   r   r   r   r   r   r   r	   r
   numpy.testingr   r   r   r   r   r   r   r   r   scipy.linalgr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   scipy.linalg._testutilsr$   scipy._lib._testutilsr%   r&   scipy.linalg.blasr'   scipy.conftestr(   r4   r3   r  r   r6   r5   r  DTYPESr   r   r   r  r<   r?   r   r   r  r  rl  r  r  r  r  r-  r/  rJ  rY  rt  r  r  r   r=   r;   <module>r     s   	      / /  *= = = = =
 8 < ' .zz2::r}}5,,r~~>	~	% #KK33mT*]E,BBG! 4   %kk55t,}e.DbI! 6  cV cVLIV IVX
n
0 n
0bOJ OJdT( T(nT Tnj& j&Z	R? R?jH? H?V "344-0% 1 5%9" 9"x7B 7Bt- -<a# a#HT* T*nI Ir=   