
    ge                       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 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 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d d	lm>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d d
lQmRZRmSZS d dlTmUZU d dlVmWZW d dlXmYZY d dlZm[Z[ 	 d dl\m]Z] n# e^$ r dZ]Y nw xY wde_fdZ`ejE        eja        gZbejF        ejc        gZdebedz   ZedPdZfd Zg G d d          Zh G d d          Zi G d d          Zj G d d          Zk G d d          Zl G d d           Zm G d! d"em          Zn G d# d$          Zo G d% d&          Zp G d' d(          Zq G d) d*          Zr G d+ d,          Zs G d- d.          ZtdxZuZve](e]d/         d0         d1         Zue]d/         d0         d2         Zv G d3 d4          Zw G d5 d6          Zx G d7 d8          Zy G d9 d:          Zzd; Z{ej|        }                     ej~                    d<k    d=>          d?             Zd@ ZdA Zej|                            ddBC          dD             Z G dE dF          ZdQdGZej|        j        ej|        }                     ej        ej                  j        dHk     dI>          dJ                         ZdK ZdL ZdM Z G dN dO          ZdS )R    N)assert_equalassert_almost_equalassert_array_almost_equalassert_array_equalassert_assert_allclose)raises)eigeigvalslusvdsvdvalscholeskyqrschurrsf2csflu_solve	lu_factorsolvediagsvd
hessenbergrq
eig_bandedeigvals_bandedeigheigvalshqr_multiplyqzorthordqzsubspace_angleshadamardeigvalsh_tridiagonaleigh_tridiagonal
null_spacecdf2rdfLinAlgError)	dgbtrfdgbtrszgbtrfzgbtrsdsbevdsbevddsbevxzhbevdzhbevx)norm)_select_function)ortho_group)arraydiagfulllinalgargsortzerosarangefloat32	complex64ravelsqrt	iscomplexshapesortsignasarrayisfinitendarrayeye)seedrandom)assert_no_overwrite)matrix)check_free_memory)	HAS_ILP64)CONFIGFc                    |t           v rdt          j                            | |           t          j                            | |           dz  z   }||                                j        z   dz  }n-t          j                            | |           }||j        z   dz  }|r*|t          d| z            t          j        |           z  z  }|                    |          S )z7Generate random sym/hermitian array of the given size n              ?   )	COMPLEX_DTYPESnprH   randconjTr>   rF   astype)nposdefdtypeAs       >lib/python3.11/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrixr\   ,   s    INN1a  29>>!Q#7#7#<<^QINN1a  WaK !	T!A#YYrvayy  88E??       c                    t          j        |           }t          j        |          r,t          |j                  dt          |j                  z  z   S t          j        |j                  j        }t          j	        |          \  }}d||z
  z  }||z  }t          j
        ||           ||z  }t          j        ||          S )zCClears trailing `fuss_binary_bits` of mantissa of a floating numberrO          @)out)rR   
asanyarrayiscomplexobj
clear_fussrealimagfinforY   nmantfrexprintldexp)arfuss_binary_bitsxsignificant_binary_bitsx_mantx_expfs          r[   rd   rd   @   s    
bA	q <!&!!BAF););$;;; hqw//5HQKKMFE%(889A
aKFGF
aKF8FE"""r]   c                    t          | t                    r| }t          |          dz  dz
  }nLt          | t                    r(t	          | j                  dk    r| j        d         }| }nt          d          t          j        |          }|j	        
                                t          |          z  |z  }d|j	        |z   z  }|S )a  Return a random symmetric (Hermitian) matrix.

    If 'dim_or_eigv' is an integer N, return a NxN matrix, with eigenvalues
        uniformly distributed on (-1,1).

    If 'dim_or_eigv' is  1-D real array 'a', return a matrix whose
                      eigenvalues are 'a'.
    rP      r   zinput type not supported.      ?)
isinstanceintrH   rE   lenr@   	TypeErrorr3   rvsrU   rT   r5   )dim_or_eigvdimdvhs        r[   symrandr   R   s     +s## 53KKMA
['
*
* 5
k
 
 A
%
%"3444A	

T!WWq AQSUAHr]   c                   &    e Zd Zd Zd Zd Zd ZdS )TestEigValsc                     g dg dg dg}t          |          }dt          d          z   dz  ddt          d          z
  dz  g}t          ||           d S )Nrt   rP      rP         	   ]   rP   r   r   r>   r   selfawexact_ws       r[   test_simplezTestEigVals.test_simplen   sc    YY			999-AJJd2hhJ>1qbz1n5!!W-----r]   c                    t          g dg dg dgd          j        }|                                }|j        }t          |          }dt	          d          z   dz  ddt	          d          z
  dz  g}t          ||           d S )Nr   r   r}   r   r   rP   r   )r4   rU   copyr   r>   r   r   s       r[   test_simple_trzTestEigVals.test_simple_trt   s    999iii3S99;FFHHCAJJd2hhJ>1qbz1n5!!W-----r]   c                     g dg dg dg}t          |          }dt          d          z   dz  ddt          d          z
  dz  g}t          ||           d S )Nr   rP   r   y      @      ?y      "@      ?y      W@      @rP   r   r   r   s       r[   test_simple_complexzTestEigVals.test_simple_complex|   sm    YY			<<<0AJJe$a'e$a') 	"!W-----r]   c                     g dg dg dg}t          |d          }dt          d          z   dz  ddt          d          z
  dz  g}t          ||           d S )	Nr   r   Fcheck_finiter   r   rP   r   r   r   s       r[   test_finitezTestEigVals.test_finite   sj    YY			999-AE***d2hhJ>1qbz1n5!!W-----r]   N)__name__
__module____qualname__r   r   r   r    r]   r[   r   r   l   sP        . . .. . .. . .. . . . .r]   r   c                       e Zd Zd Zd Zd Zd Zd Zej	        
                    d          d             Zd	 Zd
 Zd Zd Zd Zd ZdS )TestEigc                 Z   t          g dg dg dg          }t          |          \  }}dt          d          z   dz  ddt          d          z
  dz  g}t          dddt          d          dz  z   dz  g          }t          g d	          }t          dddt          d          dz  z
  dz  g          }|t          |          z  }|t          |          z  }|t          |          z  }t	          ||           t	          ||d d df         t          |d
                   z             t	          ||d d df         t          |d                   z             t	          ||d d df         t          |d                   z             t          d          D ]2}t	          ||d d |f         z  ||         |d d |f         z             3t          |dd          \  }}t          d          D ]7}t	          |j        |d d |f         z  ||         |d d |f         z             8d S )Nr   r   r   r   rP   r   rt   r         @r   r   r   r   rt   r   rP   leftright)r4   r
   r>   r1   r   rB   rangerU   	r   r   r   r~   r   v0v1v2is	            r[   r   zTestEig.test_simple   s8   999iii3441vv1d2hhJ>1qbz1n5Aq1T"XXaZ<*+,,;;;Aq1T"XXaZ<*+,,$r((]$r((]$r((]!!W---!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<q 	A 	AA%a!AAAqD'k1Q4!!!Q$<@@@@11A&&&1q 	C 	CA%acAaaadGmQqT!AAAqD'\BBBB	C 	Cr]   c                    t          ddgddgg          }t          |dd          \  }}}t          |t          ddg                     t          d          D ]2}t          ||d d |f         z  ||         |d d |f         z             3t          d          D ][}t          |                                j        |d d |f         z  ||                                         |d d |f         z             \d S )Nrt   rP   r         ?       @y      ?       )r4   r
   r   r   rT   rU   r   r   r   vlvrr   s         r[   test_simple_complex_eigzTestEig.test_simple_complex_eig   s   Aq6B7#$$+++	2r!!UD$<%8%8999q 	C 	CA%a"QQQT(lAaDAAAqDMBBBBq 	< 	<A%affhhj2aaad8&;&'diikk"QQQT(&:< < < <	< 	<r]   c                    t          g dg dg dg          }t          |dd          \  }}}t          d          D ]2}t          ||d d |f         z  ||         |d d |f         z             3t          d          D ][}t          |                                j        |d d |f         z  ||                                         |d d |f         z             \d S )Nr   r   rt   r   r   )r4   r
   r   r   rT   rU   r   s         r[   r   zTestEig.test_simple_complex   s    999iii677+++	2rq 	C 	CA%a"QQQT(lAaDAAAqDMBBBBq 	< 	<A%affhhj2aaad8&;&'diikk"QQQT(&:< < < <	< 	<r]   c                 8   dgg}dgg}t          ||d          \  }}t          |d         d           t          |d         dk               t          |d           t          ||          \  }}t          |t          j                   t          |d           d S )Nrt   r   Thomogeneous_eigvals)rt   r   r   )r
   r   r   r   rR   inf)r   r   br   r   s        r[   test_gh_3054zTestEig.test_gh_3054   s    SESEAqd3332$###$1AAq		2QAr]   c           	         |!t          |          t          |          }}|}n$t          |          }|}t          j        |j         }d|d|}t	          ||d          \  }}t          ||d          }||z  |dd d f         z  }||z  |dd d f         z  }	t          |j        d                   D ]*}
t          |d d |
f         |	d d |
f         dd|           +|4t          |dd d f         d           t          |dd d f         d           t          j        |          }t          j        |          }t          |d d |f         |d d |f         dd|	           t          j	        t          |                    }t          t          |                    D ]}
t          |d d |
f                   ||
<   t          |t          j        |j                  |dd
           |dd d f         dk    }|d|f         |d|f         z  }t	          ||          \  }}t          ||          }||z  }||z  |z  }	||	z
  }t          |j        d                   D ]K}
t          j        t          |d d |
f                             rt          |d d |
f         ddd|           L|t          |                   }|t          |                   }t!          t#          |                    }t!          t#          |                    }t          ||         ||         dd|	           t          j	        t          |                    }t          t          |                    D ]}
t          |d d |
f                   ||
<   t          |t          j        |j                  |           t          t%          |          t%          |t          j        |                                        d S )N
Tr   rt   r   gvIh%<=rtolatolerr_msggHz>)r   r   r   )r   r   r   r   )rC   rR   rF   r@   r
   r   r   r   lexsortemptyrx   r1   onessizeallrD   r8   rd   rA   )r   rZ   BB0msgr   r   wtval1val2r   permpermtlengthbeta_nonzerowhresw_finwt_fins                      r[   _check_gen_eigzTestEig._check_gen_eig   s.   =1::wqzzqABB

AB A1! Art4442Q5552v!QQQ$2v!QQQ$tz!}%% 	A 	AADAJQQQT
!&UCA A A A A :AadGQ'''Bq!!!tHa(((z!}}
2!!!T'
Bqqq%xLt$ #	% 	% 	% 	% #b''""s2ww 	' 	'AR1XF1II 4 4c!	. 	. 	. 	. !QQQ$1q,!A|O"44 Ar

2Q^^2v2vzTksy|$$ 	E 	EAvhs111a4y))** EAAAqD	1%*E E E E (1++HRLL!z%(())
6**++$E!c	; 	; 	; 	; #b''""s2ww 	' 	'AR1XF1II 4 4cBBBB 	R$qQ'8"9"9:::::r]   zSee gh-2254reasonc                    t          g dg dg dg dg dg          }t          g dg dg dg d	g d
g          }t          j        d          5  |                     ||           d d d            d S # 1 swxY w Y   d S )N)   "      r      )-   r   *         )'   /   1      r   )   r   r         )&   ,   r         )   r      r   r   )r   .   (   r   %   )r   r   r   r   r   )   r   r         )r   #      r   r   ignorer   )r4   rR   errstater   r   rZ   r   s      r[   test_singularzTestEig.test_singular  s    '''''''''''''''	) * *
 '''''''''''''''	) * * [X&&& 	& 	&1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   A66A:=A:c                    t          t          g d                    }t          g dg dg df          }t          g dg dg df          }t          d          }t          d	          }t	          j        ||g|| gg          }t	          j        ||g||gg          }t	          j        d
          5  |                     ||           d d d            d S # 1 swxY w Y   d S )N)rt   r   r   )rP   r   r   )r   rP   r   )r   r   rP   )rt   r   r   )r   rt   r   r   r   r   r   r   r   r   r   )r5   r4   r9   rF   rR   blockr   r   )r   MKDZI3rZ   r   s           r[   test_falkerzTestEig.test_falker  s8   yyy!!"";;;[[[9:::::zzz999566&MMVVHr1gA2w'((Hq"g1v&''[X&&& 	& 	&1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   7CC"Cc                     d }t          j        d          5  t          d          D ]-} ||dz  dz            \  }}|                     ||           .	 d d d            d S # 1 swxY w Y   d S )Nc                 n    d| dz  z   }d| z  }g dg ddd|dgddd|gg}g dg dddd| gdd|dgg}||fS )	NrP   )rt   r   r   r   )r   rt   r   r   r   )r   r   rt   r   )r   r   r   rt   rt   r   )omegac1c2rZ   r   s        r[   matricesz)TestEig.test_bad_geneig.<locals>.matrices$  s}    eQhB5BQAQ2 A QB3QA A a4Kr]   r   r   d         @)r  )rR   r   r   r   )r   r  krZ   r   s        r[   test_bad_geneigzTestEig.test_bad_geneig!  s    	 	 	 [X&&& 	* 	*3ZZ * *xad3h///1##Aq))))*	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   >A%%A),A)c                    t          d           t          d          }|                     |d            t          d          }|                     ||           t          d          dt          d          z  z   }|                     |d            t          d          dt          d          z  z   }|                     ||           d S )N  r   r  rO   )rG   r   r   rH   r   s      r[   test_make_eigvalszTestEig.test_make_eigvals8  s    T


AJJAt$$$AJJAq!!!6NNRv..At$$$6NNRv..Aq!!!!!r]   c                    g dg dg dg}t          |d          \  }}dt          d          z   dz  ddt          d          z
  dz  g}t          d	d	d	t          d          d
z  z   dz  g          }t          g d          }t          d	d	d	t          d          d
z  z
  dz  g          }|t          |          z  }|t          |          z  }|t          |          z  }t	          ||           t	          ||d d df         t          |d                   z             t	          ||d d d	f         t          |d                   z             t	          ||d d df         t          |d                   z             t          d
          D ]2}t	          ||d d |f         z  ||         |d d |f         z             3d S )Nr   r   Fr   r   r   rP   r   rt   r   r   r   r   r   )r
   r>   r4   r1   r   rB   r   r   s	            r[   test_check_finitezTestEig.test_check_finiteF  s   YY			999-15)))1d2hhJ>1qbz1n5Aq1T"XXaZ<*+,,;;;Aq1T"XXaZ<*+,,$r((]$r((]$r((]!!W---!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<!"a1gd1T7mm&;<<<q 	A 	AA%a!AAAqD'k1Q4!!!Q$<@@@@	A 	Ar]   c                     t          j        d                              dd          }t          t          t
          |           dS )z:Check that passing a non-square array raises a ValueError.r   r   rP   N)rR   r:   reshapeassert_raises
ValueErrorr
   r   rZ   s     r[   test_not_square_errorzTestEig.test_not_square_errorW  s7    IaLL  A&&j#q)))))r]   c                     t          d          }t          j        d                              dd          }t	          t
          t          ||           t	          t
          t          ||           dS )zOCheck that passing arrays of with different shapes
        raises a ValueError.rP         "@r   N)rF   rR   r:   r  r  r  r
   r   s      r[   test_shape_mismatchzTestEig.test_shape_mismatch\  sZ     FFIcNN""1a((j#q!,,,j#q!,,,,,r]   N)r   r   r   r   r   r   r   r   pytestmarkxfailr   r	  r  r  r  r  r"  r   r]   r[   r   r      s        C C C(< < << < <
 
 
@; @; @;D [m,,& & -,&"& & &* * *." " "A A A"* * *
- - - - -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S )TestEigBandedc                 .    |                                   d S N)create_bandmatr   s    r[   setup_methodzTestEigBanded.setup_methodf  s    r]   c                    d}d| _         d| _        t          t          |d                    t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          t          |d                    d	t          t          |dz
  d          d          z  z   d	t          t          |dz
  d          d          z  z
  t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          t          |d                    t          t          |dz
  d          d          z   t          t          |dz
  d
          d          z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        d	t          t          |d                    z  t          t          |dz
  d          d          z   d	t          t          |dz
  d
          d          z  z   t          t          |dz
  d          d          z   t          t          |dz
  d          d          z   | _        t          j	        | j                  \  }}|j
        }t          |          }||         | _        |dd|f         | _        t          j	        | j                  \  }}|j
        }t          |          }||         | _        |dd|f         | _        | j        dz   }t!          ||ft"                    | _        t!          ||ft&                    | _        t+          |          D ]P}t          | j        |          | j        ||z
  dz
  ||f<   t          | j        |          | j        ||z
  dz
  ||f<   Qd| j         z  | j        z   dz   }t!          ||ft"                    | _        t          | j                  | j        d| j         z  ddf<   t+          | j                   D ]p}t          | j        |dz             | j        d| j         z  dz
  |z
  |dz   |f<   t          | j        | dz
            | j        d| j         z  dz   |z   d|dz
  |z
  f<   qt!          ||ft&                    | _        t          | j                  | j        d| j         z  ddf<   t+          | j                   D ]p}t          | j        |dz             | j        d| j         z  dz
  |z
  |dz   |f<   t          | j        | dz
            | j        d| j         z  dz   |z   d|dz
  |z
  f<   qdt1          |          z  | _        | j        dz  | _        dS )zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.
   rP         ?rt         r   g       r   rO         r`   NrY   r         ?      ?)KLKUr5   r6   sym_matherm_matreal_matcomp_matr7   r
   re   r8   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr9   floatbandmat_symcomplexbandmat_hermr   bandmat_realbandmat_compr:   r   bc)r   NewevargsLDABr   s          r[   r*  zTestEigBanded.create_bandmati  s     T!S\\**tAaC3346:4!T??A6N6NOtAaC3346:4!T??A6N6NO
 d1dmm,,d4!S>>26667d4!S>>15556  QqS$445  QqS$33	4 d1cll++QqS$4457;D1dOOQ7O7OPQqS#3346:4!T??A6N6NO
 Da...QqS$445d4!T??A6667  QqS#334  QqS$33	4 DL))BWr{{Dqqq$wKDM**BWr{{T(4[
 w{ $%888!4)7;;;t 	F 	FA.24<.C.CDT!VAXqs]+/3DM1/E/EDd1fQh!m,, y47"Q&!4)5999*.t}*=*=!DG)QQQ,'tw 	C 	CA6:4=!A#6N6NDaik!mQqSU238<T]>?RT9C 9CDaik!mQqs1uW455 "4)7;;;*.t}*=*=!DG)QQQ,'tw 	C 	CA6:4=!A#6N6NDaik!mQqSU238<T]>?RT9C 9CDaik!mQqs1uW455 VAYY&F#r]   c                    t          | j        d          \  }}}|ddt          |          f         }t          t	          |          | j                   t          t          |          t          | j                             dS )zTCompare dsbev eigenvalues and eigenvectors with
           the result of linalg.eig.rt   	compute_vN)r,   r?  r8   r   rA   r:  absr;  r   r   evecinfoevec_s        r[   
test_dsbevzTestEigBanded.test_dsbev  sv     d.!<<<4QQQ

]#!$q''4>:::!#e**c$2C.D.DEEEEEr]   c                    t          | j        d          \  }}}|ddt          |          f         }t          t	          |          | j                   t          t          |          t          | j                             dS )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.rt   rK  N)r-   r?  r8   r   rA   r:  rM  r;  rN  s        r[   test_dsbevdzTestEigBanded.test_dsbevd  sv     t/1===4QQQ

]#!$q''4>:::!#e**c$2C.D.DEEEEEr]   c           	      J   t          | j                  \  }}t          | j        ddd|dd          \  }}}}}|ddt	          |          f         }t          t          |          | j                   t          t          |          t          | j	                             dS )zUCompare dsbevx eigenvalues and eigenvectors
           with the result of linalg.eig.        rt   rP   rL  r   N)
r@   r6  r.   r?  r8   r   rA   r:  rM  r;  r   rE  r   rO  numifailrP  rQ  s           r[   test_dsbevxzTestEigBanded.test_dsbevx  s     T\""1$*4+;S#q!56a%A %A %A!4eTQQQ

]#!$q''4>:::!#e**c$2C.D.DEEEEEr]   c                    t          | j        d          \  }}}|ddt          |          f         }t          t	          |          | j                   t          t          |          t          | j                             dS )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.rt   rK  N)r/   rA  r8   r   rA   r<  rM  r=  rN  s        r[   test_zhbevdzTestEigBanded.test_zhbevd  sv     t0A>>>4QQQ

]#!$q''4?;;;!#e**c$2D.E.EFFFFFr]   c           	      J   t          | j                  \  }}t          | j        ddd|dd          \  }}}}}|ddt	          |          f         }t          t          |          | j                   t          t          |          t          | j	                             dS )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.rV  rt   rP   rW  N)
r@   r7  r0   rA  r8   r   rA   r<  rM  r=  rX  s           r[   test_zhbevxzTestEigBanded.test_zhbevx  s     T]##1$*4+<c3156a%A %A %A!4eTQQQ

]#!$q''4?;;;!#e**c$2D.E.EFFFFFr]   c                 T   t          | j                  }|j        }t          t	          |          | j                   t          | j                  }|j        }t          t	          |          | j                   d}t          j	        d          }t          | j        d||f          }t          t	          |          | j        ||dz                       t          | j        d||f          }t          t	          |          | j        ||dz                       | j        |         dz
  }| j        |         dz   }t          | j        d||f          }	t          t	          |	          | j        ||dz                       | j        |         dz
  }| j        |         dz   }t          | j        d||f          }
t          t	          |
          | j        ||dz                       t          | j        d	          }|j        }t          t	          |          | j                   d
S )z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rP   r   r   selectselect_rangert   h㈵>r~   Fr   N)
r   r?  re   r   rA   r:  rA  r<  rR   longlong)r   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_vals              r[   test_eigvals_bandedz!TestEigBanded.test_eigvals_banded  sK   t/00
!$u++t~>>> 122!$v,,@@@ {1~~"4#3*-T4LJ J J	!$y//"&.d1f"=	? 	? 	?#D$5+.dD\K K K
!$z"2"2"&/$tAv+">	@ 	@ 	@ .&/.&/"4#3*-Wg<NP P P	!$y//"&.d1f"=	? 	? 	? /$'&0/$'&0#D$5+.2971CE E E
 	"$z"2"2"&/$tAv+">	@ 	@ 	@ t/eDDD
!$u++t~>>>>>r]   c           
         t          | j                  \  }}|ddt          |j                  f         }t	          t          |          | j                   t	          t          |          t          | j                             t          | j	                  \  }}|ddt          |j                  f         }t	          t          |          | j
                   t	          t          |          t          | j                             d}d}t          | j        d||f          \  }	}
t	          t          |	          | j        ||dz                       t	          t          |
          t          | j        dd||dz   f                              t          | j	        d||f          \  }}t	          t          |          | j
        ||dz                       t	          t          |          t          | j        dd||dz   f                              | j        |         dz
  }| j        |         dz   }t          | j        d||f          \  }}t	          t          |          | j        ||dz                       t	          t          |          t          | j        dd||dz   f                              | j
        |         dz
  }| j
        |         dz   }t          | j	        d||f          \  }}t	          t          |          | j
        ||dz                       t	          t          |          t          | j        dd||dz   f                              t          | j        d	
          \  }}|ddt          |j                  f         }t	          t          |          | j                   t	          t          |          t          | j                             dS )zXCompare eigenvalues and eigenvectors of eig_banded
           with those of linalg.eig. NrP   r   r   ra  rt   rd  r~   Fr   )r   r?  r8   re   r   rA   r:  rM  r;  rA  r<  r=  )r   rf  evec_sym	evec_sym_rg  	evec_herm
evec_herm_rh  ri  rj  evec_sym_indrk  evec_herm_indrl  rm  rn  evec_sym_valro  evec_herm_vals                      r[   test_eig_bandedzTestEigBanded.test_eig_banded  s    %T%566xQQQ
 3 334	!$u++t~>>>!#i..#d6G2H2HIII&t'899	qqq'&+"6"667
!$v,,@@@!#j//3t7I3J3JKKK ",T-=47;?,#H #H #H	< 	"$y//"&.d1f"=	? 	? 	?!#l"3"3"%d&74Q;&G"H"H	J 	J 	J %/t/@69=A4L%J %J %J!
M 	"$z"2"2"&/$tAv+">	@ 	@ 	@!#m"4"4"%d&8DaK&H"I"I	K 	K 	K .&/.&/",T-=47;BG:L#N #N #N	< 	"$y//"&.d1f"=	? 	? 	?!#l"3"3"%d&74Q;&G"H"H	J 	J 	J /$'&0/$'&0$.t/@69=Dg<N%P %P %P!
M 	"$z"2"2"&/$tAv+">	@ 	@ 	@!#m"4"4"%d&8DaK&H"I"I	K 	K 	K %T%5EJJJxQQQ
 3 334	!$u++t~>>>!#i..#d6G2H2HIIIIIr]   c                    t          | j                  \  }}t          | j        | j        | j                  \  }}}t          |d| j        z  ddf                   }t          | j        | j        z             D ]3}|t          |d| j        z  dz
  |z
  |dz   |f         |dz             z  }4t          | j        d          \  }}	}
t          ||
           dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rP   Nrt   r   	permute_l)
r@   r8  r(   rB  r4  r5  r5   r   r   r   r   r  rE  lu_symm_bandipivrP  ur   p_linl_linu_lins              r[   test_dgbtrfzTestEigBanded.test_dgbtrfL       T]##1#)$*;TWdg#N#N dD ail+,,tw()) 	? 	?Al1TW9Q;q=!A#a%#78!A#>>>AA !<<<ue!!U+++++r]   c                    t          | j                  \  }}t          | j        | j        | j                  \  }}}t          |d| j        z  ddf                   }t          | j        | j        z             D ]3}|t          |d| j        z  dz
  |z
  |dz   |f         |dz             z  }4t          | j        d          \  }}	}
t          ||
           dS )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rP   Nrt   r   r|  )
r@   r9  r*   rC  r4  r5  r5   r   r   r   r~  s              r[   test_zgbtrfzTestEigBanded.test_zgbtrfZ  r  r]   c                     t          | j        | j        | j                  \  }}}t	          || j        | j        | j        |          \  }}t          j        | j        | j                  }t          ||           dS )zhCompare dgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r(   rB  r4  r5  r)   r   r7   r   r8  r   r   r  r  rP  yy_lins         r[   test_dgbtrszTestEigBanded.test_dgbtrsh  sm     $*$*;TWdg#N#N dDtwFF4T]DF33!!U+++++r]   c                     t          | j        | j        | j                  \  }}}t	          || j        | j        | j        |          \  }}t          j        | j        | j                  }t          ||           dS )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r*   rC  r4  r5  r+   rD  r7   r   r9  r   r  s         r[   test_zgbtrszTestEigBanded.test_zgbtrsr  sm     $*$*;TWdg#N#N dDtw$GG4T]DG44!!U+++++r]   N)r   r   r   r,  r*  rR  rT  r[  r]  r_  rp  rz  r  r  r  r  r   r]   r[   r'  r'  e  s          M$ M$ M$bF F FF F F	F 	F 	FG G G	G 	G 	G(? (? (?T8J 8J 8Jt, , ,, , ,, , ,, , , , ,r]   r'  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestEigTridiagonalc                 .    |                                   d S r)  )create_trimatr+  s    r[   r,  zTestEigTridiagonal.setup_method~  s    r]   c                    d}t          |d          | _        t          |dz
  d          | _        t          | j                  t          | j        d          z   t          | j        d          z   | _        t          j        | j                  \  }}|j        }t          |          }||         | _	        |dd|f         | _
        dS )z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.r.  r/  rt   r0  r   N)r6   r}   er5   full_matr7   r
   re   r8   r   rO  )r   rE  rF  rG  rH  s        r[   r  z TestEigTridiagonal.create_trimat  s     aac4dfTVR(8(884??JDM**BWr{{Dqqq$wK			r]   c                    t          t          t          | j        | j        dd                    t          t
          t          | j        | j        dz             t          t
          t          | j        | j        d           t          t          t          | j        | j        d           t          t          t          | j        | j        dd	           dS )
zTest error conditions.Nr   rO   r/  lapack_driverfoor   r   r   ra  )r  r  r#   r}   r  ry   r+  s    r[   test_degeneratez"TestEigTridiagonal.test_degenerate  s     	j"6ssLLLi!5tvtv{KKKi!5tvtv$&	( 	( 	( 	(j"6$)	+ 	+ 	+ 	+ 	j"6 w	8 	8 	8 	8 	8 	8r]   c           
      "   dD ]@}t          | j        | j        |          }t          t	          |          | j                   AdD ],}t          t          t           | j        | j        ddd           -dD ]}t          | j        | j        dd	t          | j                  d
z
  f|          }t          t	          |          | j                   d}d}t          | j        | j        d||f|          }t          t	          |          | j        ||d
z                       | j        |         dz
  }| j        |         dz   }t          | j        | j        d||f|          }t          t	          |          | j        ||d
z                       dS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautor  )r  r  r  r   r   r  rb  rc  r  r  r  r   rt   rb  rc  r  rP   r   rd  r~   N)	r#   r}   r  r   rA   r   r  r  rx   )	r   driverr   w_indrh  ri  rl  rm  w_vals	            r[   test_eigvalsh_tridiagonalz,TestEigTridiagonal.test_eigvalsh_tridiagonal  s    B 	7 	7F$TVTV6JJJA%d1ggtv6666' 	/ 	/F*&:DFDF(.s'-/ / / / / 1 	H 	HF(s!S[[]9K$& & &E &d5kk46::: DD(s$$& & &E &d5kk46$tAv+3FGGG fTlV+GfTlV+G(s'79K$& & &E &d5kk46$tAv+3FGGGG+	H 	Hr]   c                 n   t          t          t          | j        | j        d           dD ]}t          | j        | j        |          \  }}|ddt          |          f         }t          t          |          | j                   t          t          |          t          | j
                             t          t          t          | j        | j        ddd           d	D ]}d
}t          | j                  dz
  }t          | j        | j        d||f|          \  }}t          t          |          | j                   t          t          |          t          | j
                             d}d}t          | j        | j        d||f|          \  }}t          t          |          | j        ||dz                       t          t          |          t          | j
        dd||dz   f                              | j        |         dz
  }| j        |         dz   }t          | j        | j        d||f|          \  }}t          t          |          | j        ||dz                       t          t          |          t          | j
        dd||dz   f                              dS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. r  r  )r  r  r  r  Nr  r   r   r  r  r   rt   r  rP   r   rd  r~   )r  r  r$   r}   r  r8   r   rA   r   rM  rO  rx   )	r   r  r   rO  rQ  rh  ri  rl  rm  s	            r[   test_eigh_tridiagonalz(TestEigTridiagonal.test_eigh_tridiagonal  s    	j"2DFDF$+	- 	- 	- 	-8 	B 	BF&tvtvVLLLGAtGAJJ'E%d1ggtv666%c%jj#di..AAAAj"2DFDF$*3V	M 	M 	M 	M0 	F 	FFDtv;;q=D&s$$& & &GAt &d1ggtv666%c$iiTY@@@DD&s$$& & &GAt &d1ggtvd46k/BCCC%c$ii&)$)AAAtDF{N*C&D&DF F F fTlV+GfTlV+G&s'79K$& & &GAt &d1ggtvd46k/BCCC%c$ii&)$)AAAtDF{N*C&D&DF F F F3	F 	Fr]   N)r   r   r   r,  r  r  r  r  r   r]   r[   r  r  }  sh               8 8 8 H  H  HD(F (F (F (F (Fr]   r  c                      e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            de          e	j
                            dd	          d
                         Ze	j
                            dd          e	j
                            dd          d                         Zd Ze	j
                            deeg          d             Zd ZdS )TestEighc                 $    t          d           d S Nr  rG   r+  s    r[   setup_classzTestEigh.setup_class      T




r]   c           
         t          t          t          t          j        ddg                     t          t          t          t          j        ddg          t          j        ddg                     t          t          t          t          j        ddg          t          j        ddg                     t          t          t          t          j        ddg          t          j        ddg          d           t          t          t          t          j        ddg          t          j        ddg          ddgddg           t          j                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          ddgddg           d d d            n# 1 swxY w Y   t          t          t          t          j        ddg          t          j        ddg          d	dg
           t          j                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          d	dg           d d d            n# 1 swxY w Y   t          t          t          t          j        ddg          t          j        ddg          ddg
           t          j                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          ddg           d d d            n# 1 swxY w Y   t          t          t          t          j        ddg          t          j        ddg          dd	g
           t          j                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          dd	g
           d d d            n# 1 swxY w Y   t          t          t          t          j        ddg          t          j        ddg          dd	g           t          t          t          t          j        ddg          d           t          t          t          t          j        ddg          d d           t          t          t          t          j        ddg          t          j        ddg          dd           t          t          t          t          j        ddg          t          j        ddg          dddgd           t          j                                        5 }|                    t          d           t          t          t          t          j        ddg          t          j        ddg          dddgd           d d d            d S # 1 swxY w Y   d S )Nrt   rP   r      )type)subset_by_valuesubset_by_indexzKeyword argument 'eigvals)r  r   r   r  r   r   r  wrongr  gvxevrF)r  turbogvd)r  r  r  z 'eigh' keyword argument 'eigvals)	r  r  r   rR   r   testingsuppress_warningsfilterDeprecationWarning)r   sups     r[   test_wrong_inputszTestEigh.test_wrong_inputs  s   j$A888j$A!QIIIj$A!QIIIj$A!Q	 	 	 	 	j$A!Q'(!fq!f	F 	F 	F 	FZ))++ 	BsJJ)+FGGG*dBGQFOORWaV__+,a&1a&B B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B
 	j$A!Q'(!f	. 	. 	. 	.Z))++ 	*sJJ)+FGGG*dBGQFOORWaV__#$a&* * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*
 	j$A!Q')1g	/ 	/ 	/ 	/Z))++ 	+sJJ)+FGGG*dBGQFOORWaV__#%q'+ + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+
 	j$A!Q'(!f	. 	. 	. 	.Z))++ 	2sJJ)+FGGG*dBGQFOORWaV__+,a&2 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2
 	j$A!Q'(!f	. 	. 	. 	. 	j$AHHHHj$AeLLLLj$A!Q"%	1 	1 	1 	1 	j$A!Q"QF%	I 	I 	I 	IZ))++ 	MsJJ)+MNNN*dBGQFOORWaV__!&AeM M M M	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms_   'A'GG!GA$J;;J?J?,A$NN #N A$Q==RR"A&YYYc           	          t          t          t          t          j        ddg          t          j        ddg                     d S )Nr   )r  r'   r   rR   r   r+  s    r[   test_nonpositive_bzTestEigh.test_nonpositive_b(  s4    k4!Q"'1a&//JJJJJr]   c                    t          t                    D ]\  }}t          d|          }t          |ddg          \  }}t	          |j        d         t          |                     t          |dk    |dk     z            sJ t          dd|          }t          ||ddg          \  }}t	          |j        d         t          |                     t          |dk    |dk     z            sJ d S )	N   r2  r   rP   r  rt   T)rX   rY   )	enumerateDTYPESr\   r   r   r@   rx   r   )r   inddtr   r   r~   r   s          r[   test_value_subsetszTestEigh.test_value_subsets,  s     (( 
	+ 
	+GC(2666AB7333DAqSVV,,,B1q5)*****(DCCCA1r1g666DAqSVV,,,B1q5)******
	+ 
	+r]   c                     t          ddgddgg          }t          ddgddgg          }t          |          \  }}t          ||          \  }}d S )Nrt   rP   r^   r   r   )r4   r   )r   r   r   r   zs        r[   test_eigh_integerzTestEigh.test_eigh_integer9  sZ    Aq6Aq6"##Aq6Aq6"##Aww1Aqzz111r]   c                     dd l }|j                            d                                          }t	          j        |          }t          t          t          |           t          t          t          |           d S )Nr   rP   )	scipy.sparsesparseidentitytocscrR   
atleast_2dr  r  r   )r   scipyr   r   s       r[   test_eigh_of_sparsezTestEigh.test_eigh_of_sparse?  sh    L!!!$$**,,M!j$***j$*****r]   dtype_r  )rG  evdr  evxc                     t          d|          }t          ||          \  }}t          ||z  ||z  z
  ddt          j        |          j        z  d           d S )Nr  )rW   rY   r  rV    r   r   )r\   r   r   rR   rg   eps)r   r  r  r   r   r~   s         r[   test_various_drivers_standardz&TestEigh.test_various_drivers_standardG  su     %r888Af%%%1AQ!"(6"2"2"66	! 	! 	! 	! 	! 	!r]   r  r   )gvr  r  c                 t   t          j        d          }t          d          }t          dd          }t          ||||          \  }}|dk    r!t	          ||z  |||z  z  z
  d|d           d S |d	k    r!t	          ||z  |z  ||z  z
  d|d           d S t	          ||z  |z  ||z  z
  d|d           d S )
Ng     @r  TrX   )r   r   r  r  rt   rV  r  rP   )rR   spacingr\   r   r   )r   r  r  r   r   r   r   r~   s           r[    test_various_drivers_generalizedz)TestEigh.test_various_drivers_generalizedP  s     z%  $R(($R555a1V$7771199AEAq1uI-r2FFFFFFQYYAEAIA-r2FFFFFFAEAIA-r2FFFFFFr]   c                    t          d          }t          |ddg          }t          t          |          d           t          |ddg          }t          t          |          d           t	          ||           t          j        g d          }t          |ddg          }t          t          |          d           t	          |t          j        dd	g                     d S )
Nr   rt   rP   r  )rt   333333??      ?rP   gffffff?r  r  r  )r\   r   r   rx   r   rR   r5   r4   )r   r   r   w2r   w3s         r[   test_eigvalsh_new_argszTestEigh.test_eigvalsh_new_args^  s    $Q''QA///SVVQa!Q000SWWa   2G)))**a!S222SWWa   BHc3Z0011111r]   methodc                 T   t          j        t          d          5   |t          j        d          d           d d d            n# 1 swxY w Y   t          j        t          d          5   |t          j        d          ddg	           d d d            d S # 1 swxY w Y   d S )
NKeyword argument 'turbo')matchrP   rP   Tr  Keyword argument 'eigvals'r   rt   r  )r#  warnsr  rR   r9   )r   r  s     r[   test_deprecation_warningsz"TestEigh.test_deprecation_warningsl  s9   \, :< < < 	1 	1F28F##40000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 \, <> > > 	5 	5F28F##aV4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s#    AAA."BB!$B!c                    t          d          }t          dd          }t          j                                        5 }|                    t
          d           t          ||d          \  }}d d d            n# 1 swxY w Y   t          ||d          \  }}t          ||           t          ||           t          j                                        5 }|                    t
          d           t          |d	d
g          \  }}d d d            n# 1 swxY w Y   t          |d	d
g          \  }}t          ||           t          ||           d S )Nr   Tr  r  r  r  r  r  r   rt   r  r  )r\   rR   r  r  r  r  r   r   )r   r   r   r  w_depv_depr   r~   s           r[   test_deprecation_resultsz!TestEigh.test_deprecation_resultsu  s   $Q''$Qt444 Z))++ 	2sJJ)+EFFF1D111LE5	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 Aq'''1q!!!q!!! Z))++ 	3sJJ)+GHHHAq6222LE5	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 A1v...1q!!!q!!!!!s#   1A<<B B 2DDDN)r   r   r   r  r  r  r  r  r  r#  r$  parametrizer  r  r  r  r   r   r  r  r   r]   r[   r  r    sb         6M 6M 6MpK K K+ + +  + + + [Xv..[X'BCC! ! DC /.! [VY//[X';<<
G 
G =< 0/
G2 2 2 [Xh'7885 5 985" " " " "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ej                            e d          ej        j        d                         ZdS )TestSVD_GESDDc                 2    d| _         t          d           d S )Ngesddr  r  rG   r+  s    r[   r,  zTestSVD_GESDD.setup_method      $T




r]   c                     t          t          t          dggd           t          t          t          dggd           d S )Nr/  r  r  )r  ry   r   r  r+  s    r[   r  zTestSVD_GESDD.test_degenerate  s>    itfB????j#vUCCCCCCr]   c                    g dg dg dg}dD ]}t          ||| j                  \  }}}t          |j        |z  t	          d                     t          |j        |z  t	          d                     t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )Nr   rt   r  r   r   TFfull_matricesr  r   r   r   r  r   rU   rF   r9   r@   rY   charr   rx   r   r   r  r  svhsigmar   s           r[   r   zTestSVD_GESDD.test_simple  s    YY


III.* 	9 	9M1M)-);= = =HAq"%acAgs1vv666%bdRiQ888171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r]   c                    g dg dg dg}dD ]}t          ||| j                  \  }}}t          |j        |z  t	          d                     t          |j        |z  t	          d                     t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )Nr   r   r  r  r   r   r	  r  s           r[   test_simple_singularz"TestSVD_GESDD.test_simple_singular  s    YY			999-* 	9 	9M1M)-);= = =HAq"%acAgs1vv666%bdRiQ888171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r]   c                    g dg dg}dD ]}t          ||| j                  \  }}}t          |j        |z  t	          |j        d                              t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )Nr   r  r   r   r  r  r   r   r  r   rU   rF   r@   r9   rY   r
  r   rx   r  s           r[   test_simple_underdetz"TestSVD_GESDD.test_simple_underdet  s    YY			"* 	9 	9M1M)-);= = =HAq"%acAgs171:???171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r]   c                    ddgddgddgg}dD ]}t          ||| j                  \  }}}t          |j        |z  t	          |j        d                              t          |j        |z  t	          d                     t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )	Nrt   rP   r  r   r   r  r  r   r  r  s           r[   test_simple_overdetz!TestSVD_GESDD.test_simple_overdet  s   VaVaV$* 	9 	9M1M)-);= = =HAq"%acAgs171:???%bdRiQ888171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r]   c           
      h   d}d}t          d          D ]}t          ||g          t          ||g          fD ]}dD ]}t          ||| j                  \  }}}t	          |j        |z  t          |j        d                              t	          ||j        z  t          |j        d                              t          |j        d         |j        d         f|j	        j
                  }	t          t          |                    D ]}||         |	||f<   t	          ||	z  |z  |           d S )Nr  r   r   r  r  rt   r   )r   rH   r   r  r   rU   rF   r@   r9   rY   r
  rx   )
r   rW   mr   r   r  r  r  r  r  s
             r[   test_randomzTestSVD_GESDD.test_random  sP   q 
	A 
	AAaVnnfaVnn5 	A 	A%2 A AM"1M151C E  E  EHAq"-acAgs171:GGG-b24iRXa[9I9IJJJ!171:rx{";QW\JJE"3q66]] + +&'dad-a%i"na@@@@A	A
	A 
	Ar]   c                 P   g dg dg dg}dD ]}t          ||| j                  \  }}}t          |                                j        |z  t          |j        d                              t          |                                j        |z  t          |j        d                              t          |j        d         |j        d         f|j        j	                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )Nr   )rt   y               @r   r   r  r  rt   r   )r   r  r   rT   rU   rF   r@   r9   rY   r
  r   rx   r  s           r[   r   z!TestSVD_GESDD.test_simple_complex  s   YY


III.* 	9 	9M1M)-);= = =HAq"%affhhj1nc!'!*ooFFF%bggiikB&6BHQK8H8HIII171:rx{3QW\BBE3q66]] # #dad%a%i"na8888	9 	9r]   c           
      ~   d}d}t          d          D ]'}dD ] }t          ||g          t          ||g          fD ]}|dt          t          |j                            z  z   }t	          ||| j                  \  }}}t          |                                j        |z  t          |j        d                              t          |j        d         |j        d         f|j        j                  }	t          t          |                    D ]}||         |	||f<   t          ||	z  |z  |           ")d S )	Nr  r   r   r  rO   r  rt   r   )r   rH   listr@   r   r  r   rT   rU   rF   r9   rY   r
  rx   )
r   rW   r  r   r  r   r  r  r  r  s
             r[   test_random_complexz!TestSVD_GESDD.test_random_complex  s\   q 	A 	AA!. A A !Q..&!Q..9 A AABvd17mm4444A"1M151C E  E  EHAq"-affhhj1n.1!'!*oo? ? ?
 "171:rx{";QW\JJE"3q66]] + +&'dad-a%i"na@@@@AA	A 	Ar]   c                 0   g d}t           j                            d           |D ]o}t           j        t           j        t           j        t           j        fD ]>}t          j        j        |                     |          }t          || j
                   ?pd S )N))r   r   )r   2   )<   r  r  r  )rR   rH   rG   r;   float64r<   
complex128rS   rV   r   r  )r   sizesszr  r   s        r[   test_crash_1580zTestSVD_GESDD.test_crash_1580  s    ///
	t 	9 	9Bz2:r|R]K 9 9INB'..r22AT%7888889	9 	9r]   c                    g dg dg dg}t          |d| j                  \  }}}t          |j        |z  t	          d                     t          |j        |z  t	          d                     t          |j        d         |j        d         f|j        j                  }t          t          |                    D ]}||         |||f<   t          ||z  |z  |           d S )Nr   r  r   F)r   r  r   r   r	  )r   r   r  r  r  r  r   s          r[   r  zTestSVD_GESDD.test_check_finite  s    YY


III.quD<NOOO1b!!#'3q66222!"$)SVV444qwqz28A;/>>s1vv 	 	AA$E!Q$KK!!e)b.!44444r]   c                 r    t          j        g dg dg dg dg          }t          || j                   d S )N)K}\UU?vWUU?r(  rV  rV  rV  )rV  r(  r)  r(  rV  rV  )rV  rV  r(  r)  r(  rV  )rV  rV  rV  r(  r)  r(  r  )rR   r4   r   r  )r   r   s     r[   test_gh_5039zTestSVD_GESDD.test_gh_5039  s^     H============?@ @
 	AT/000000r]   z64-bit LAPACK requiredr   c                    t          d           t          j        ddgt          j                  }d|d<   t	          |d          \  }}}t          |d	         d
           t          |d         |d         z  d
           d S )NihB  )free_mbrt   l        r2  r  F)r  r   r/  r   )rK   rR   r9   r;   r   r   )r   rZ   r  r  r  s        r[   test_large_matrixzTestSVD_GESDD.test_large_matrix  s     	%((((HaZrz222%q...1b!c"""$"U)+S11111r]   N)r   r   r   r,  r  r   r  r  r  r  r   r  r%  r  r*  r#  r$  skipifrL   slowr-  r   r]   r[   r  r    s         D D D
9 
9 
9
9 
9 
9	9 	9 	9
9 
9 
9A A A
9 
9 
9A A A&9 9 95 5 51 1 1" [I.FGG[2 2  HG2 2 2r]   r  c                       e Zd Zd ZdS )TestSVD_GESVDc                 2    d| _         t          d           d S )Ngesvdr  r  r+  s    r[   r,  zTestSVD_GESVD.setup_method   r  r]   N)r   r   r   r,  r   r]   r[   r1  r1    s#            r]   r1  c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej        j        d	             Zd
S )TestSVDValsc                     g gt          j        d          t          j        d          fD ]3}t          |          }t	          |t          j        d                     4d S )N)rP   r   )r   r   r   )rR   r   r   r   r   r   r   r  s      r[   
test_emptyzTestSVDVals.test_empty'  s\    rx''8 	) 	)A

ABHQKK((((	) 	)r]   c                     g dg dg dg}t          |          }t          t          |          dk               t          |d         |d         cxk    o|d         k    nc            d S )Nr   r   r   r   rt   rP   r   r   rx   r7  s      r[   r   zTestSVDVals.test_simple,  sy    YY			999-AJJA!!!$$$$!$$$$%%%%%r]   c                     g dg dg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nr   r  rP   r   rt   r:  r7  s      r[   r  z TestSVDVals.test_simple_underdet2  sW    YY			"AJJA!!!r]   c                     ddgddgddgg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nrt   rP   r  r   r   r   r:  r7  s      r[   r  zTestSVDVals.test_simple_overdet8  s]    VaVaV$AJJA!!!r]   c                     g dg dg dg}t          |          }t          t          |          dk               t          |d         |d         cxk    o|d         k    nc            d S )Nr   )rt   r                @r   r   r   rt   rP   r:  r7  s      r[   r   zTestSVDVals.test_simple_complex>  sy    YYYYY/AJJA!!!$$$$!$$$$%%%%%r]   c                     g dg dg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nr   )r  y              @r   rP   r   rt   r:  r7  s      r[   test_simple_underdet_complexz(TestSVDVals.test_simple_underdet_complexD  sW    YY


#AJJA!!!r]   c                     ddgddgddgg}t          |          }t          t          |          dk               t          |d         |d         k               d S )Nrt   rP   r  r   r>  r   r:  r7  s      r[   test_simple_overdet_complexz'TestSVDVals.test_simple_overdet_complexJ  s]    VaVb!W%AJJA!!!r]   c                     g dg dg dg}t          |d          }t          t          |          dk               t          |d         |d         cxk    o|d         k    nc            d S )	Nr   r   Fr   r   r   rt   rP   r:  r7  s      r[   r  zTestSVDVals.test_check_finiteP  s    YY			999-AE***A!!!$$$$!$$$$%%%%%r]   c                     t           j                            d           t           j                            dd          }t	          |           d S )Nr  i  i
  )rR   rH   rG   rS   r   r   r   s     r[   test_crash_2609zTestSVDVals.test_crash_2609V  s:    
	tINN4&&




r]   N)r   r   r   r8  r   r  r  r   r@  rB  r  r#  r$  r/  rF  r   r]   r[   r5  r5  %  s        ) ) )
& & &    & & &    & & & [    r]   r5  c                       e Zd Zd ZdS )TestDiagSVDc                 Z    t          t          g ddd          g dg dg dg           d S )Nrt   r   r   r   r  )r   r   r+  s    r[   r   zTestDiagSVD.test_simple`  sK    !')))Q":":#,99iii"C	E 	E 	E 	E 	Er]   N)r   r   r   r   r   r]   r[   rH  rH  ^  s(        E E E E Er]   rH  c                   L   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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/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6S )7TestQRc                 $    t          d           d S r  r  r+  s    r[   r,  zTestQR.setup_methodg  r  r]   c                     g dg dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S N   rP   r   rP   r   r   r   r   r   r   r   r   rU   rF   r   r   qrs       r[   r   zTestQR.test_simplej  s_    YY			999-!uu1!!#'3q66222!!a%+++++r]   c                    g dg dg dg}t          |          \  }}g d}t          ||d          \  }}t          ||z  |           t          ||           t          |t          d          d          \  }}t          ||           d S )NrP  rR  rS  r   r   r   r   r   r   rF   r   r   rV  rW  cqcr2s          r[   test_simple_leftzTestQR.test_simple_leftp  s    YY			999-!uu1IIQ6**B!!a%,,,!!R(((QA//B!!R(((((r]   c                    g dg dg dg}t          |          \  }}g d}t          ||          \  }}t          ||z  |           t          ||           t          |t          d                    \  }}t          ||           d S )NrP  rR  rS  r   r   rY  rZ  s          r[   test_simple_rightzTestQR.test_simple_rightz  s    YY			999-!uu1IIQ""B!!a%,,,!!R(((As1vv&&A!!R(((((r]   c                    t          j        g dg dg dg          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |d d |f                   \  }}t          ||           t          ||           d S )	NrP  rR  rS  Tpivotingrt   r   r   
rR   rC   r   rM  r5   r   r   r   rU   rF   r   r   rV  rW  pr}   q2r]  s           r[   test_simple_pivotingzTestQR.test_simple_pivoting  s    J			999iii899Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadGB!!R(((!!R(((((r]   c                     g dg dg dg}t          |d          \  }}}g d}t          ||dd          \  }}}t          ||z  |           d S )NrP  rR  rS  Trb  r   r   r   r   r   r   r   rV  rW  jpvtr[  r\  s          r[   test_simple_left_pivotingz TestQR.test_simple_left_pivoting  sn    YY			999-D)))
1dII!!Q55At!!a%,,,,,r]   c                     g dg dg dg}t          |d          \  }}}g d}t          ||d          \  }}}t          ||z  |           d S )NrP  rR  rS  Trb  r   rj  rk  s          r[   test_simple_right_pivotingz!TestQR.test_simple_right_pivoting  so    YY			999-D)))
1dII!!Q666At!!a%,,,,,r]   c                     g dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S )NrP  rR  rP   rT  rU  s       r[   test_simple_trapzTestQR.test_simple_trap  Y    YY			"!uu1!!#'3q66222!!a%+++++r]   c                    t          j        g dg dg          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |d d |f                   \  }}t          ||           t          ||           d S )NrP  rR  Trb  rt   r   rP   rd  re  s           r[   test_simple_trap_pivotingz TestQR.test_simple_trap_pivoting  s    J			999-..Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadGB!!R(((!!R(((((r]   c                     ddgddgddgg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S NrQ  rP   r   r   r   rT  rU  s       r[   test_simple_tallzTestQR.test_simple_tall  s_    VaVaV$!uu1!!#'3q66222!!a%+++++r]   c                    t          j        ddgddgddgg          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d	         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |d d |f                   \  }}t          ||           t          ||           d S )
NrQ  rP   r   r   r   Trb  rt   r   rd  re  s           r[   test_simple_tall_pivotingz TestQR.test_simple_tall_pivoting  s    JAAA/00Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadGB!!R(((!!R(((((r]   c                    ddgddgddgg}t          |d          \  }}t          |j        |z  t          d                     t          ||z  |           t	          |j        d           t	          |j        d	           d S )
NrQ  rP   r   r   r   economicmoder   rP   r  r   r   rU   rF   r   r@   rU  s       r[   test_simple_tall_ezTestQR.test_simple_tall_e  s    VaVaV$!*%%%1!!#'3q66222!!a%+++QWf%%%QWf%%%%%r]   c                    t          j        ddgddgddgg          }t          |dd          \  }}}t          t	          |                    }t          t          j        |d	d          |d d
         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |d d |f         d          \  }}t          ||           t          ||           d S )NrQ  rP   r   r   r   Tr{  rc  r}  rt   r   r|  rd  re  s           r[   test_simple_tall_e_pivotingz"TestQR.test_simple_tall_e_pivoting  s    JAAA/00QJ7771aQLLqu#2#''(((!!#'3q66222!!a%111a4111AaaadG*---B!!R(((!!R(((((r]   c                    ddgddgddgg}t          |d          \  }}ddg}t          ||d	          \  }}t          ||z  |           t          ||           t          g d
          }t          ||d	d          \  }}t          ||d d         z  |           t          |t	          d          d	          \  }}t          ||           d S )NrQ  rP   r   r   r   r{  r|  rt   r   rt   rP   r   Toverwrite_cr   r   r   r4   rF   rZ  s          r[   test_simple_tall_leftzTestQR.test_simple_tall_left  s    VaVaV$!*%%%1FQ6**B!!a%,,,!!R((()))Q6t<<<B!!ae)R000As1vvv..A!"a(((((r]   c                 (   ddgddgddgg}t          |dd          \  }}}d	dg}t          ||d
d          \  }}}t          ||           t          ||z  |           t          |t	          d          d
d          \  }}}t          ||           d S )NrQ  rP   r   r   r   r{  Tr}  rc  rt   r   )r   r   r   r   rF   )r   r   rV  rW  rl  r[  r\  kpvts           r[   test_simple_tall_left_pivotingz%TestQR.test_simple_tall_left_pivoting  s    VaVaV$
T:::
1dF!!Q55At4&&&!!a%,,,!!SVVVT::At!"a(((((r]   c                    ddgddgddgg}t          |d          \  }}g d}t          ||          \  }}t          ||z  |           t          ||           t          |t          d                    \  }}t          ||           d S )	NrQ  rP   r   r   r   r{  r|  r   rY  r   r   rV  rW  r[  cqr]  s          r[   test_simple_tall_rightzTestQR.test_simple_tall_right  s    VaVaV$!*%%%1IIQ""B!!a%,,,!!R(((As1vv&&A!"a(((((r]   c                    ddgddgddgg}t          |dd          \  }}}g d	}t          ||d
          \  }}}t          ||z  |           t          |t          d          d
          \  }}}t          ||           d S )NrQ  rP   r   r   r   Tr{  r  r   rb  rY  r   r   rV  rW  rl  r[  r  s          r[   test_simple_tall_right_pivotingz&TestQR.test_simple_tall_right_pivoting  s    VaVaV$Dz:::
1dII!!Q666At!!a%,,,!!SVVd;;;At!"a(((((r]   c                     g dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           t	          |j        d           t	          |j        d           d S )NrQ  rP   r   rR  rP   r  rP   r   r  rU  s       r[   test_simple_fatzTestQR.test_simple_fat   s}    YY			"!uu1!!#'3q66222!!a%+++QWf%%%QWf%%%%%r]   c                 V   t          j        g dg dg          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |j        d           t          |j        d	           t          |d d |f                   \  }}t          ||           t          ||           d S )
Nr  rR  Trb  rt   r   rP   r  r  rR   rC   r   rM  r5   r   r   r   rU   rF   r   r@   re  s           r[   test_simple_fat_pivotingzTestQR.test_simple_fat_pivoting	  s   J			999-..Q&&&1aQLLqu#2#''(((!!#'3q66222!!a%111a4111QWf%%%QWf%%%AaaadGB!!R(((!!R(((((r]   c                    g dg dg}t          |d          \  }}t          |j        |z  t          d                     t          ||z  |           t	          |j        d           t	          |j        d           d S )NrP  rP   r   r   r{  r|  rP   r  r  r  rU  s       r[   test_simple_fat_ezTestQR.test_simple_fat_e  s    YY			"!*%%%1!!#'3q66222!!a%+++QWf%%%QWf%%%%%r]   c                 \   t          j        g dg dg          }t          |dd          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j        |z  t          d                     t          ||z  |d d |f                    t          |j        d	           t          |j        d
           t          |d d |f         d          \  }}t          ||           t          ||           d S )NrP  r  Tr{  r  rt   r   rP   r  r  r|  r  re  s           r[   test_simple_fat_e_pivotingz!TestQR.test_simple_fat_e_pivoting   s   J			999-..QJ7771aQLLqu#2#''(((!!#'3q66222!!a%111a4111QWf%%%QWf%%%AaaadG*---B!!R(((!!R(((((r]   c                    g dg dg}t          |d          \  }}ddg}t          ||d          \  }}t          ||z  |           t          ||           t          |t          d          d          \  }}t          ||           d S )NrP  r  r{  r|  rt   rP   r   rY  rZ  s          r[   test_simple_fat_leftzTestQR.test_simple_fat_left.  s    YY			"!*%%%1FQ6**B!!a%,,,!!R(((As1vvv..A!"a(((((r]   c                    g dg dg}t          |dd          \  }}}ddg}t          ||dd          \  }}}t          ||z  |           t          |t          d          dd          \  }}}t          ||           d S )	NrP  r  r{  Tr  rt   rP   r   rY  rk  s          r[   test_simple_fat_left_pivotingz$TestQR.test_simple_fat_left_pivoting8  s    YY			"
T:::
1dF!!Q55At!!a%,,,!!SVVVT::At!"a(((((r]   c                    g dg dg}t          |d          \  }}ddg}t          ||          \  }}t          ||z  |           t          ||           t          |t          d                    \  }}t          ||           d S )NrP  r  r{  r|  rt   rP   rY  r  s          r[   test_simple_fat_rightzTestQR.test_simple_fat_rightA  s    YY			"!*%%%1FQ""B!!a%,,,!!R(((As1vv&&A!"a(((((r]   c                    g dg dg}t          |dd          \  }}}ddg}t          ||d          \  }}}t          ||z  |           t          |t          d          d          \  }}}t          ||           d S )	NrP  r  Tr{  r  rt   rP   rb  rY  r  s          r[   test_simple_fat_right_pivotingz%TestQR.test_simple_fat_right_pivotingK  s    YY			"Dz:::
1dF!!Q666At!!a%,,,!!SVVd;;;At!"a(((((r]   c                     g dg dg dg}t          |          \  }}t          |                                j        |z  t	          d                     t          ||z  |           d S Nr         @      @r   r   rP   y       @      @r   rP   r^   r   )r   r   rT   rU   rF   rU  s       r[   r   zTestQR.test_simple_complexT  sg    \\<<<3!uu1!!&&((*q.#a&&999!!a%+++++r]   c                     g dg dg dg}t          |          \  }}g d}t          ||d          \  }}t          ||z  |           t          |t          d          d          \  }}t          ||           d S )Nr  r  r  rt   rP   r  r   r   rY  r   r   rV  rW  r[  r\  s         r[   test_simple_complex_leftzTestQR.test_simple_complex_leftZ  s    \\<<<3!uu1LLAq&))A!!a%,,,As1vvv..A!!R(((((r]   c                     g dg dg dg}t          |          \  }}g d}t          ||          \  }}t          ||z  |           t          |t          d                    \  }}t          ||           d S )Nr  r  r  r  r   rY  r  s         r[   test_simple_complex_rightz TestQR.test_simple_complex_rightc  s    \\<<<3!uu1LLAq!!A!!a%,,,As1vv&&A!!R(((((r]   c                    ddgddgddgg}t          |d          \  }}d	d
g}t          ||d          \  }}t          ||z  |           t          ||           t          g d          }t          ||dd          \  }}t          ||d d         z  |           t          |t	          d          d          \  }}t          ||           d S )NrQ  y       @      @rP   r   y      @      @r   r{  r|  rt          @       @r   r  Tr  r  rZ  s          r[   test_simple_tall_complex_leftz$TestQR.test_simple_tall_complex_leftl  s    YAq	*!*%%%1IQ6**B!!a%,,,!!R((()))Q6t<<<B!!ae)R000As1vvv..A!"a(((((r]   c                     g dg dg dg}t          |          \  }}g d}t          ||dd          \  }}t          |                                |z  |           d S )Nr  r  r  r  r   T	conjugater   r   r   rT   r  s         r[   "test_simple_complex_left_conjugatez)TestQR.test_simple_complex_left_conjugatey  sn    \\<<<3!uu1LLAq&D999A!!&&((Q,33333r]   c                     ddgddgddgg}t          |d          \  }}ddg}t          ||d	d
          \  }}t          |                                |z  |           d S )Nr   r  r   r  rP   r{  r|  rt   r   Tr  r  r  s         r[   'test_simple_complex_tall_left_conjugatez.TestQR.test_simple_complex_tall_left_conjugate  su    YD	Aq6*!*%%%1IAq&D999A!!&&((Q,33333r]   c                     g dg dg dg}t          |          \  }}t          j        g d          }t          ||d          \  }}t	          ||                                z  |           d S )Nr  r  r  r  Tr  )r   rR   r4   r   r   rT   r  s         r[   #test_simple_complex_right_conjugatez*TestQR.test_simple_complex_right_conjugate  sv    \\<<<3!uu1H\\\""AqD111A!!affhh,33333r]   c                 "   t          g dg dg dg          }t          |d          \  }}}t          t          |                    }t	          t          j        |dd          |d d         k                         t          |                                j	        |z  t          d                     t          ||z  |d d |f                    t          |d d |f                   \  }}t          ||           t          ||           d S )	Nr  r  r  Trb  rt   r   r   )r4   r   rM  r5   r   rR   r   r   rT   rU   rF   re  s           r[   test_simple_complex_pivotingz#TestQR.test_simple_complex_pivoting  s    <<<yyy9::Q&&&1aQLLqu#2#''(((!!&&((*q.#a&&999!!a%111a4111AaaadGB!!R(((!!R(((((r]   c                     t          g dg dg dg          }t          |d          \  }}}g d}t          ||dd          \  }}}t          ||z  |           d S )Nr  r  r  Trb  r  r   r4   r   r   r   rk  s          r[   !test_simple_complex_left_pivotingz(TestQR.test_simple_complex_left_pivoting  sv    <<<yyy9::D)))
1dLL!!Q55At!!a%,,,,,r]   c                     t          g dg dg dg          }t          |d          \  }}}g d}t          ||d          \  }}}t          ||z  |           d S )Nr  r  r  Trb  r  r  rk  s          r[   "test_simple_complex_right_pivotingz)TestQR.test_simple_complex_right_pivoting  sw    <<<yyy9::D)))
1dLL!!Q666At!!a%,,,,,r]   c                     d}t          d          D ]]}t          ||g          }t          |          \  }}t          |j        |z  t          |                     t          ||z  |           ^d S Nr  rP   r   rH   r   r   rU   rF   r   rW   r  r   rV  rW  s         r[   r  zTestQR.test_random  sw    q 	0 	0A1vAa55DAq%acAgs1vv666%a!eQ////		0 	0r]   c                 D   d}t          d          D ]}t          ||g          }t          |          \  }}t          |g          }t          ||d          \  }}t	          ||z  |           t          |t          |          d          \  }}t	          ||           d S )Nr  rP   r   r   rH   r   r   r   rF   r   rW   r  r   rV  rW  r[  r\  s           r[   test_random_leftzTestQR.test_random_left  s    q 	- 	-A1vAa55DAqsA1f--EB%a!eR0003q66622EB%a,,,,	- 	-r]   c                 @   d}t          d          D ]}t          ||g          }t          |          \  }}t          |g          }t          ||          \  }}t	          ||z  |           t          |t          |                    \  }}t	          ||           d S r  r  r   rW   r  r   rV  rW  r[  r  s           r[   test_random_rightzTestQR.test_random_right  s    q 	- 	-A1vAa55DAqsA1%%EB%a!eR0003q66**EB%a,,,,	- 	-r]   c           	         d}t          d          D ]}t          ||g          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j	        |z  t          |                     t          ||z  |d d |f                    t          |d d |f                   \  }}	t          ||           t          ||	           d S )Nr  rP   Trb  rt   r   r   rH   r   rM  r5   r   rR   r   r   rU   rF   
r   rW   r  r   rV  rW  rf  r}   rg  r]  s
             r[   test_random_pivotingzTestQR.test_random_pivoting  s   q 		- 		-A1vAT***GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r]   c                     d}d}t          d          D ]]}t          ||g          }t          |          \  }}t          |j        |z  t          |                     t          ||z  |           ^d S N   r  rP   r  r   r  rW   r  r   rV  rW  s          r[   test_random_tallzTestQR.test_random_tall  s|    q 	0 	0A1vAa55DAq%acAgs1vv666%a!eQ////		0 	0r]   c                 L   d}d}t          d          D ]}t          ||g          }t          |d          \  }}t          |g          }t          ||d          \  }}t	          ||z  |           t          |t          |          d          \  }}t	          ||           d S )Nr  r  rP   r{  r|  r   r  )	r   r  rW   r  r   rV  rW  r[  r\  s	            r[   test_random_tall_leftzTestQR.test_random_tall_left  s    q 	- 	-A1vAaj)))DAqsA1f--EB%a!eR0003q66622EB%b!,,,,	- 	-r]   c                 H   d}d}t          d          D ]}t          ||g          }t          |d          \  }}t          |g          }t          ||          \  }}t	          ||z  |           t          |t          |                    \  }}t	          ||           d S Nr  r  rP   r{  r|  r  )	r   r  rW   r  r   rV  rW  r[  r  s	            r[   test_random_tall_rightzTestQR.test_random_tall_right  s    q 	- 	-A1vAaj)))DAqsA1%%EB%a!eR0003q66**EB%b!,,,,	- 	-r]   c           	         d}d}t          d          D ]}t          ||g          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j	        |z  t          |                     t          ||z  |d d |f                    t          |d d |f                   \  }	}
t          ||	           t          ||
           d S )Nr  r  rP   Trb  rt   r   r  r   r  rW   r  r   rV  rW  rf  r}   rg  r]  s              r[   test_random_tall_pivotingz TestQR.test_random_tall_pivoting  s	   q 		- 		-A1vAT***GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r]   c                 H   d}d}t          d          D ]}t          ||g          }t          |d          \  }}t          |j        |z  t          |                     t          ||z  |           t          |j        ||f           t          |j        ||f           d S r  )r   rH   r   r   rU   rF   r   r@   r  s          r[   test_random_tall_ezTestQR.test_random_tall_e  s    q 	* 	*A1vAaj)))DAq%acAgs1vv666%a!eQ///1a&)))1a&))))	* 	*r]   c           	         d}d}t          d          D ])}t          ||g          }t          |dd          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j	        |z  t          |                     t          ||z  |d d |f                    t          |j        ||f           t          |j        ||f           t          |d d |f         d	          \  }	}
t          ||	           t          ||
           +d S )
Nr  r  rP   Tr{  r  rt   r   r|  )r   rH   r   rM  r5   r   rR   r   r   rU   rF   r   r@   r  s              r[   test_random_tall_e_pivotingz"TestQR.test_random_tall_e_pivoting  s>   q 	- 	-A1vAT
;;;GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW5551a&)))1a&)))!!!Q$j111FB%a,,,%a,,,,	- 	-r]   c                     d}d}t          d          D ]]}t          ||g          }t          |          \  }}t          |j        |z  t          |                     t          ||z  |           ^d S Nr  r  rP   r  r  s          r[   test_random_trapzTestQR.test_random_trap"  s|    q 	0 	0A1vAa55DAq%acAgs1vv666%a!eQ////		0 	0r]   c           	         d}d}t          d          D ]}t          ||g          }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |j	        |z  t          |                     t          ||z  |d d |f                    t          |d d |f                   \  }	}
t          ||	           t          ||
           d S )Nr  r  rP   Trb  rt   r   r  r  s              r[   test_random_trap_pivotingz TestQR.test_random_trap_pivoting+  s	   q 		- 		-A1vAT***GAq!DGGABF1QRR5AcrcF?++,,,%acAgs1vv666%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r]   c                 2   d}t          d          D ]}t          ||g          dt          ||g          z  z   }t          |          \  }}t          |                                j        |z  t          |                     t          ||z  |           d S Nr  rP   rO   )r   rH   r   r   rT   rU   rF   r  s         r[   r  zTestQR.test_random_complex9  s    q 	0 	0A1vr&!Q..00Aa55DAq%affhhj1nc!ff===%a!eQ////		0 	0r]   c                    d}t          d          D ]}t          ||g          dt          ||g          z  z   }t          |          \  }}t          |g          dt          |g          z  z   }t          ||d          \  }}t	          ||z  |           t          |t          |          d          \  }}t	          ||           d S )Nr  rP   rO   r   r  r  s           r[   test_random_complex_leftzTestQR.test_random_complex_leftA  s    q 	- 	-A1vr&!Q..00Aa55DAqsBvqc{{N*A1f--EB%a!eR0003q66622EB%a,,,,	- 	-r]   c                    d}t          d          D ]}t          ||g          dt          ||g          z  z   }t          |          \  }}t          |g          dt          |g          z  z   }t          ||          \  }}t	          ||z  |           t          |t          |                    \  }}t	          ||           d S r  r  r  s           r[   test_random_complex_rightz TestQR.test_random_complex_rightL  s    q 	- 	-A1vr&!Q..00Aa55DAqsBvqc{{N*A1%%EB%a!eR0003q66**EB%a,,,,	- 	-r]   c           	      j   d}t          d          D ]}t          ||g          dt          ||g          z  z   }t          |d          \  }}}t          t	          |                    }t          t          j        |dd          |d d         k                         t          |	                                j
        |z  t          |                     t          ||z  |d d |f                    t          |d d |f                   \  }}	t          ||           t          ||	           !d S )Nr  rP   rO   Trb  rt   r   )r   rH   r   rM  r5   r   rR   r   r   rT   rU   rF   r  s
             r[   test_random_complex_pivotingz#TestQR.test_random_complex_pivotingW  s    q 		- 		-A1vr&!Q..00AT***GAq!DGGABF1QRR5AcrcF?++,,,%affhhj1nc!ff===%a!eQqqq!tW555!!!Q$[[FB%a,,,%a,,,,		- 		-r]   c                     g dg dg dg}t          |d          \  }}t          |j        |z  t          d                     t          ||z  |           d S NrP  rR  rS  Fr   r   rT  rU  s       r[   r  zTestQR.test_check_finited  sf    YY			999-!%(((1!!#'3q66222!!a%+++++r]   c                    g dg dg dg}t          |d           \  }}t          |d          \  }}t          ||           t          ||           t          |d          \  }}t          ||           t          ||           t          |d          \  }}	t          ||           t          |	|           t          t          t           |fdd	i           t          t          t           |fdd
i           d S )NrP  rR  rS  )lworkr   r.  r   r  r   rP   )r   r   r  	Exception)
r   r   rV  rW  rg  r]  q3r3q4r4s
             r[   
test_lworkzTestQR.test_lworkj  s   YY			999-!4   1 AQB!"a(((!"a((( ARB!"a(((!"a((( ARB!"a(((!"a((( 	iaTGQ<888iaTGQ<88888r]   N)8r   r   r   r,  r   r^  r`  rh  rm  ro  rq  rt  rw  ry  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  r  r  r  r  r  r  r  r  r  r  r  r  r   r]   r[   rL  rL  e  s/         , , ,) ) )) ) )	) 	) 	)- - -- - -, , ,	) 	) 	), , ,
) 
) 
)& & &
) 
) 
)) ) )) ) )) ) )) ) )& & &) ) )& & &) ) )) ) )) ) )) ) )) ) ), , ,) ) )) ) )) ) )4 4 44 4 44 4 4	) 	) 	)- - -- - -0 0 0	- 	- 	-	- 	- 	-- - -0 0 0- - -- - -- - -
* 
* 
*- - -"0 0 0- - -0 0 0	- 	- 	-	- 	- 	-- - -, , ,9 9 9 9 9r]   rL  c                   b    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S )TestRQc                 $    t          d           d S r  r  r+  s    r[   r,  zTestRQ.setup_method  r  r]   c                     g dg dg dg}t          |          \  }}t          ||j        z  t          d                     t          ||z  |           d S rO  r   r   rU   rF   r   r   rW  rV  s       r[   r   zTestRQ.test_simple  s_    YY			999-!uu1!!ac'3q66222!!a%+++++r]   c                     g dg dg dg}t          |          \  }}t          |d          }t          ||           d S )NrP  rR  rS  rW  r|  )r   r   )r   r   rW  rV  r]  s        r[   test_rzTestRQ.test_r  sN    YY			999-!uu1___!!R(((((r]   c                     d}t          d          D ]]}t          ||g          }t          |          \  }}t          ||j        z  t          |                     t          ||z  |           ^d S r  r   rH   r   r   rU   rF   r   rW   r  r   rW  rV  s         r[   r  zTestRQ.test_random  sw    q 	0 	0A1vAa55DAq%a!#gs1vv666%a!eQ////		0 	0r]   c                     g dg dg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S )NrP  rR  r   r  r  s       r[   rq  zTestRQ.test_simple_trap  rr  r]   c                     ddgddgddgg}t          |          \  }}t          |j        |z  t          d                     t          ||z  |           d S rv  r  r  s       r[   rw  zTestRQ.test_simple_tall  s_    VaVaV$!uu1!!#'3q66222!!a%+++++r]   c                     g dg dg}t          |          \  }}t          ||j        z  t          d                     t          ||z  |           d S )Nr  rR  r   r  r  s       r[   r  zTestRQ.test_simple_fat  sY    YY			"!uu1!!ac'3q66222!!a%+++++r]   c                     g dg dg dg}t          |          \  }}t          ||                                j        z  t	          d                     t          ||z  |           d S r  )r   r   rT   rU   rF   r  s       r[   r   zTestRQ.test_simple_complex  sg    \\<<<3!uu1!!affhhj.#a&&999!!a%+++++r]   c                     d}d}t          d          D ]]}t          ||g          }t          |          \  }}t          ||j        z  t          |                     t          ||z  |           ^d S r  r  r   r  rW   r  r   rW  rV  s          r[   r  zTestRQ.test_random_tall  |    q 	0 	0A1vAa55DAq%a!#gs1vv666%a!eQ////		0 	0r]   c                     d}d}t          d          D ]]}t          ||g          }t          |          \  }}t          ||j        z  t          |                     t          ||z  |           ^d S r  r  r  s          r[   r  zTestRQ.test_random_trap  r  r]   c                 H   d}d}t          d          D ]}t          ||g          }t          |d          \  }}t          ||j        z  t          |                     t          ||z  |           t          |j        ||f           t          |j        ||f           d S )Nr  r  rP   r{  r|  )r   rH   r   r   rU   rF   r   r@   r  s          r[   test_random_trap_economicz TestRQ.test_random_trap_economic  s    q 	* 	*A1vAaj)))DAq%a!#gs1vv666%a!eQ///1a&)))1a&))))	* 	*r]   c                 2   d}t          d          D ]}t          ||g          dt          ||g          z  z   }t          |          \  }}t          ||                                j        z  t          |                     t          ||z  |           d S r  )r   rH   r   r   rT   rU   rF   r	  s         r[   r  zTestRQ.test_random_complex  s    q 	0 	0A1vr&!Q..00Aa55DAq%a!&&((*nc!ff===%a!eQ////		0 	0r]   c                    d}d}t          d          D ]}t          ||g          dt          ||g          z  z   }t          |d          \  }}t          ||                                j        z  t          |                     t          ||z  |           t          |j        ||f           t          |j        ||f           d S )Nr  r  rP   rO   r{  r|  )	r   rH   r   r   rT   rU   rF   r   r@   r  s          r[   test_random_complex_economicz#TestRQ.test_random_complex_economic  s    q 	* 	*A1vr&!Q..00Aaj)))DAq%a!&&((*nc!ff===%a!eQ///1a&)))1a&))))	* 	*r]   c                     g dg dg dg}t          |d          \  }}t          ||j        z  t          d                     t          ||z  |           d S r  r  r  s       r[   r  zTestRQ.test_check_finite  sf    YY			999-!%(((1!!ac'3q66222!!a%+++++r]   N)r   r   r   r,  r   r  r  rq  rw  r  r   r  r  r  r  r  r  r   r]   r[   r   r     s          , , ,) ) )0 0 0, , ,, , ,, , ,, , ,0 0 00 0 0	* 	* 	*0 0 0	* 	* 	*, , , , ,r]   r   c                      e Zd Zd Zd Zej                            dd ej	        d           d ej	        d          dgfd ej	        d          d ej	        d           dgfd	dd ej	        d           ej	        d           gfd
 ej	        d           ej	        d           ddgfd  ej	        d          d ej	        d           dgfg          d             Z
d Zd ZdS )	TestSchurc                    t          ||z  |                                j        z  |||d           t          ||                                j        z  t          j        t          |                    z
  dd|d           d S )Nz&Schur decomposition does not match 'a'r   r   zu is not unitary)r   rT   rU   rR   rF   rx   )r   r   tr  r   r   s         r[   check_schurzTestSchur.check_schur  s    A
*ADt H	J 	J 	J 	J 	AFFHHJA7 2	4 	4 	4 	4 	4 	4r]   c           	         g dg dg dg}t          |          \  }}|                     |||dd           t          |d          \  }}t          t          j        t          t          |                              o-t          j        t          t          |                                         |                     |||dd           t          ||          \  }}|                     |||dd           d S )NrQ     r   rR  r.  r   r   +=+<r   r   r@  )r   r  r   rR   anyr=   r?   r   )r   r   r  r  tczctc2zc2s           r[   r   zTestSchur.test_simple  s    ZZJJJ/Qxx1Aqu5999q)$$BuYr]]++,,Mimm8L8L1M1MNNNBU;;;2r??SC5u=====r]   zsort, expected_diaglhprP         ru   rhpiucoucc                     | dk    S )NrV  r   )rn   s    r[   <lambda>zTestSchur.<lambda>  s
    AH r]   c                     g dg dg dg dg}t          ||          \  }}}|                     |||dd           t          t          j        |          |d	
           t          d|           d S )N      @r   r/  r0  g      g      r0  r/  r!        @      g      @r5  r2  r1        @rA   r!  r"  r#  -q=r   rP   )r   r  r   rR   r5   r   )r   rA   expected_diagr   r  r  sdims          r[   	test_sortzTestSchur.test_sort   s     """! 14(((
1dAqu5999

M>>>>Qr]   c                     g dg dg dg dg}t          t          t          |d           t          t          t          |d           d S )Nr1  r3  r4  r7  unsupportedr9  rt   )r  r  r   rE  s     r[   test_sort_errorszTestSchur.test_sort_errors  sc    """! 	j%????j%333333r]   c                     g dg dg dg}t          |d          \  }}t          ||z  |                                j        z  |           d S )Nr  rR  r   Fr   )r   r   rT   rU   )r   r   r  r  s       r[   r  zTestSchur.test_check_finite  sY    ZZJJJ/QU+++1!!a%!&&((*"4a88888r]   N)r   r   r   r  r   r#  r$  r  rR   r>   r>  rA  r  r   r]   r[   r  r    sO       4 4 4> > > [
7271::+tWRWQZZ5	6
'"'!**cGBGAJJ;5	6
$WRWQZZ'"'!**5	6
'"'!**wrwqzzk45	6

wrwqzz3TB	C		E 
 
 
4 4 49 9 9 9 9r]   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestHessenbergc                     g dg dg dg}g dg dg dg}t          |d          \  }}t          |j        |z  |z  |           t          ||d	
           d S )Nikiif     "  ir  g     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@rt   calc_qr  decimalr   r   rU   r   r   h1r   rV  s        r[   r   zTestHessenberg.test_simple$  s    __^^ .--...!!!# !A&&&1!!#'A+q111!!R333333r]   c                     g dg dg dg}t          |d          \  }}t          |                                j        |z  |z  |           d S )NrF  )rH  y             f@rJ  )y             ;r  rL  rt   rP  )r   r   rT   rU   r   r   r   rV  s       r[   r   z"TestHessenberg.test_simple_complex/  sc    __ !A&&&1!!&&((*q.1"4a88888r]   c                     g dg dg dg dg dg dg dg}t          |d	          \  }}t          |j        |z  |z  |           d S )
N)rt   rP   r   r  r   r   r^   )r   rP   r   r  r   r^   rP   )r   rP   rP   r   r   r   rP   )r   r   rP   rQ  r   r   rP   )r   r   rt   rP   r   rt   rP   )r   rt   rP   r   r   rt   r   )r   r   r   r   r   rt   rP   rt   rP  rT  rX  s       r[   test_simple2zTestHessenberg.test_simple26  s    """""""""""""""""""""$ !A&&&1!!#'A+q11111r]   c                     t          j        d          }d|d<   t          |d          \  }}t          |j        |z  |z  |           d S )Nr   rP   )r   r   rt   rP  )rR   rF   r   r   rU   rX  s       r[   test_simple3zTestHessenberg.test_simple3A  sN    F1II%!A&&&1!!#'A+q11111r]   c                     d}t          d          D ]B}t          ||g          }t          |d          \  }}t          |j        |z  |z  |           Cd S )Nr  rP   rt   rP  )r   rH   r   r   rU   r   rW   r  r   r   rV  s         r[   r  zTestHessenberg.test_randomG  sh    q 	6 	6A1vAa***DAq%acAgk15555	6 	6r]   c                     d}t          d          D ]i}t          ||g          dt          ||g          z  z   }t          |d          \  }}t          |                                j        |z  |z  |           jd S )Nr  rP   rO   rt   rP  )r   rH   r   r   rT   rU   r^  s         r[   r  z"TestHessenberg.test_random_complexN  s    q 	= 	=A1vr&!Q..00Aa***DAq%affhhj1nq&8!<<<<	= 	=r]   c                     g dg dg dg}g dg dg dg}t          |dd	          \  }}t          |j        |z  |z  |           t          ||d
           d S )NrF  rG  rK  rM  rN  rO  rt   F)rQ  r   r  rR  rT  rU  s        r[   r  z TestHessenberg.test_check_finiteU  s    __^^ .--...!!!# !AE:::1!!#'A+q111!!R333333r]   c                 >   ddgddgg}t          |d          \  }}t          |t          j        d                     t          ||           ddgdd	gg}t          |d          \  }}t          |t          j        d                     t          ||           d S )
NrP   rt   r^   r  rP  y       @      r   y      @      @y      (@       )r   r   rR   rF   )r   r   r   rV  r   h2rg  s          r[   test_2x2zTestHessenberg.test_2x2`  s    VaW!A&&&1!!RVAYY///!!Q'''D\D%=)Aa(((B!"bfQii000!"a(((((r]   N)r   r   r   r   r   rZ  r\  r  r  r  rc  r   r]   r[   rD  rD  "  s        	4 	4 	49 9 9	2 	2 	22 2 26 6 6= = =	4 	4 	4
) 
) 
) 
) 
)r]   rD  zBuild Dependenciesblasnameversionc                       e Zd Zd Zej                            ej        dk    oe	dk    oe
dk     d          d             Zd Zd	 Zd
 Zd Zd Zd ZdS )TestQZc                 $    t          d           d S Ni90  r  r+  s    r[   r,  zTestQZ.setup_methodt      Ur]   darwinopenblasz
0.3.21.devz8gges[float32] broken for OpenBLAS on macOS, see gh-16949r   c                 L   d}t          ||g                              t                    }t          ||g                              t                    }t          ||          \  }}}}t	          ||z  |j        z  |d           t	          ||z  |j        z  |d           t	          ||j        z  t          |          d           t	          ||j        z  t          |          d           t          t          j	        t          |          dk                         d S )Nr   rR  r   )rH   rV   r;   r   r   rU   rF   r   rR   r   r5   r   rW   rZ   r   AABBQr  s           r[   test_qz_singlezTestQZ.test_qz_singlew  s     Aq6NN!!'**Aq6NN!!'**!QxxB1!!b&13,1====!!b&13,1====!!ac'3q661====!!ac'3q661====tBxx1}%%&&&&&r]   c                    d}t          ||g          }t          ||g          }t          ||          \  }}}}t          ||z  |j        z  |           t          ||z  |j        z  |           t          ||j        z  t	          |                     t          ||j        z  t	          |                     t          t          j        t          |          dk                         d S )Nr   r   	rH   r   r   rU   rF   r   rR   r   r5   ro  s           r[   test_qz_doublezTestQZ.test_qz_double  s    Aq6NNAq6NN!QxxB1!!b&13,222!!b&13,222!!ac'3q66222!!ac'3q66222tBxx1}%%&&&&&r]   c                 .   d}t          ||g          dt          ||g          z  z   }t          ||g          dt          ||g          z  z   }t          ||          \  }}}}t          ||z  |                                j        z  |           t          ||z  |                                j        z  |           t          ||                                j        z  t          |                     t          ||                                j        z  t          |                     t          t          j        t          |          dk                         t          t          j        t          |          j
        dk                         d S )Nr   rO   r   )rH   r   r   rT   rU   rF   r   rR   r   r5   rf   ro  s           r[   test_qz_complexzTestQZ.test_qz_complex  s=   Aq6NNR1v..Aq6NNR1v..!QxxB1!!b&16688:"5q999!!b&16688:"5q999!!affhhj.#a&&999!!affhhj.#a&&999tBxx1}%%&&&tBxx})**+++++r]   c                    d}t          ||g          dt          ||g          z  z                       t                    }t          ||g          dt          ||g          z  z                       t                    }t          ||          \  }}}}t	          ||z  |                                j        z  |d           t	          ||z  |                                j        z  |d           t	          ||                                j        z  t          |          d           t	          ||                                j        z  t          |          d           t          t          j
        t          |          dk                         t          t          j
        t          |          j        dk                         d S )Nr   rO   rR  r   )rH   rV   r<   r   r   rT   rU   rF   r   rR   r   r5   rf   ro  s           r[   test_qz_complex64zTestQZ.test_qz_complex64  sm   QF^^bA//77	BBQF^^bA//77	BB!QxxB1!!b&16688:"5q!DDDD!!b&16688:"5q!DDDD!!affhhj.#a&&!DDDD!!affhhj.#a&&!DDDDtBxx1}%%&&&tBxx})**+++++r]   c                    d}t          ||g          }t          ||g          }t          ||d          \  }}}}||z  |                                j        z  }t	          |j        |           t	          |j        d           ||z  |                                j        z  }	t	          |	j        |           t	          |	j        d           t	          ||                                j        z  t          |                     t	          ||                                j        z  t          |                     t          t          j
        t          |          dk                         d S )Nr   r@  )outputr   )rH   r   rT   rU   r   re   rf   rF   r   rR   r   r5   )
r   rW   rZ   r   rp  rq  rr  r  aabbs
             r[   test_qz_double_complexzTestQZ.test_qz_double_complex  s)   Aq6NNAq6NN!Qy111B1Vaffhhj !"'1---!"'1---Vaffhhj !"'1---!"'1---!!affhhj.#a&&999!!affhhj.#a&&999tBxx1}%%&&&&&r]   c                     t          j        g dg dg dg dg          }t          j        g dg dg dg dg          }t          t          t          ||d	 
           d S )N)333333@      )@     @Ag      @333333@     5@g     Gg      @)r  r       Er8  )皙@r5        Gr5  )r/  r/  r1  r/  )r/  r   g      r  )r/  r`   r6  r/  )r  r   r6  r2  c                     |dk    S )Nr   r   )rl   aibetas      r[   r/  z,TestQZ.test_qz_double_sort.<locals>.<lambda>  s
    bAg r]   r9  )	rR   r4   r  r  r   r   r   rU   rM  )r   rZ   r   rp  rq  rr  r  r=  s           r[   test_qz_double_sortzTestQZ.test_qz_double_sort  s     H------,,,,,,. / /
 H++++++++++++- . .
 	j"a1M1MNNNN	F 	Fr]   c                    d}t          ||g          }t          ||g          }t          ||d          \  }}}}t          ||z  |j        z  |           t          ||z  |j        z  |           t          ||j        z  t	          |                     t          ||j        z  t	          |                     t          t          j        t          |          dk                         d S )Nr   Fr   r   ru  ro  s           r[   r  zTestQZ.test_check_finite  s    Aq6NNAq6NN!QU333B1!!b&13,222!!b&13,222!!ac'3q66222!!ac'3q66222tBxx1}%%&&&&&r]   N)r   r   r   r,  r#  r$  r%  sysplatformblas_providerblas_versionrs  rv  rx  rz  r  r  r  r   r]   r[   rh  rh  s  s           [  	$#	$|#I	   	' 	' 	'	' 	' 	'
, 
, 
,
, 
, 
,' ' '5F 5F 5FF	' 	' 	' 	' 	'r]   rh  c                   f    e Zd Ze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S )	TestOrdQZc                 6   t          j        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          }t          j        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          }t          j        d          }t          j        ddg          }t          j        ddg          }	|||||	g| _        |||||	g| _        d S )N)y5     6y     J@     @Iy     @A     _@y      @      ?)yq=
ףpݿQy           By      /     @M@y      %      )y333333@      yC@1y      Q      )@y            )y      @@y,@fffffE@y     @@      Gy      3     @@)y      ?      y?333333?y              y              )y?333333y              y            @y333333	)y      ?        y333333@?y            y              )rO   y333333@y              y      @      )r  r  r  r*  r  )r  r  r  r8  )r  g      :@r  r5  )rt   rP   rt   )rt   r   r  )rt   r   r   )rt   r   r  r  )r  r/  r   r   )r2  r2  r`         @)r  r2  r/  r   )rV  r2         @r  )r        $@r5  r  )r  r  r`   r!  )r!  r/  r5  r5  )r  r/  r2  r  rP   r   rt   )rR   r4   rF   r5   rZ   r   )
clsA1B1A2B2A3B3A4B4A5s
             r[   r  zTestOrdQZ.setup_class*  s    X $ $ $& & &% % %' ' '( ) ) XDDDDDDDDDDDDF G G X///.........0 1 1
 X}}}$}}$}}$}}& ' ' X'''''''''''') * * X)))''''''''') * * VAYYWaV__ WaV__RR$RR$r]   c                     t          j        d          5  fdt          | j        | j                  D             }d d d            n# 1 swxY w Y   t          |          S )Nraiser   c                 :    g | ]\  }}t          ||           S )r9  )r    ).0AiBirA   s      r[   
<listcomp>z'TestOrdQZ.qz_decomp.<locals>.<listcomp>c  s,    NNNB5Rd+++NNNr]   )rR   r   ziprZ   r   tuple)r   rA   rets    ` r[   	qz_decompzTestOrdQZ.qz_decompa  s    [W%%% 	O 	ONNNN#dfdf:M:MNNNC	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	OSzzs   'A

AAc
           	      *   t          j        |j         }
t          ||j                                        z  |
           t          |	|	j                                        z  |
           t          ||z  ||	z             t          ||z  ||	z             t          t          j        |d          t          j        |j                             t          t          j        |d          t          j        |j                             t          |j        d                   D ]{}|dk    r|||dz
  f         dk    r||j        d         dz
  k     r||dz   |f         dk    rt          |||dz   ||dz   f         |||dz   ||dz   f                   \  }}|d         j        dk     r
|ddg         }|||dz            |||dz            z  }|d         j        dk     r
|ddg         }t          ||           ||         dk    r>||         dk    r2t          |||f         d           t          |||f         d           #||         dk    rt          |||f         d           It          |||f         |||f         z  ||         ||         z             }t          |          }d}t          |j        d                   D ]H} |t          j        ||         g          t          j        ||         g                    }|s|rJ |}Id S )Nr   r   r   rt   rP   T)rR   rF   r@   r   rU   rT   r   trilr9   r   r
   rf   r   r   r2   r4   )r   rZ   r   rA   rp  rq  alphar  rr  r  Idr   evals_tmpsortfunlastsortcursorts                     r[   checkzTestOrdQZ.checkf  s   VQW!!achhjj."555!!achhjj."555!!b&!a%000!!b&!a%000272r??BHRX,>,>???272r??BHRX,>,>???qwqz"" 	M 	MA 1uu1a!e8))28A;?""r!a%(|q'8'8r!AE'1QU7"23R!a%1q58H5IJJq 8=1$$!1a&MEAa!eGnT!AE']2q6;??q!f+C)%55558q==T!W\\ AqD1--- AqD1----!W\\ AqD1----'1a4AqD(958DG;KLLLL"4((qwqz"" 	 	Agbhaz22BHd1gY4G4GHHG  #""""HH	 	r]   c                     |                      |          }t          || j        | j                  D ]\  }}} | j        |||g|R   d S r)  )r  r  rZ   r   r  )r   rA   r  retir  r  s         r[   	check_allzTestOrdQZ.check_all  sc    nnT""TVTV44 	, 	,LD"bDJr2t+d+++++	, 	,r]   c                 0    |                      d           d S )Nr)  r  r+  s    r[   test_lhpzTestOrdQZ.test_lhp      ur]   c                 0    |                      d           d S )Nr+  r  r+  s    r[   test_rhpzTestOrdQZ.test_rhp  r  r]   c                 0    |                      d           d S )Nr,  r  r+  s    r[   test_iuczTestOrdQZ.test_iuc  r  r]   c                 0    |                      d           d S )Nr-  r  r+  s    r[   test_ouczTestOrdQZ.test_ouc  r  r]   c                 6    d }|                      |           d S )Nc                     t          j        | t                    }|dk    }d|| <   | |         ||         z  j        dk    ||<   |S Nr2  r   FrR   
empty_likeboolrf   rn   r  ra   nonzeros       r[   rA   z TestOrdQZ.test_ref.<locals>.sort  M    -...CAvG!CMgJqz171<CLJr]   r  r   rA   s     r[   test_refzTestOrdQZ.test_ref  +    	 	 	 	tr]   c                 6    d }|                      |           d S )Nc                     t          j        | t                    }|dk    }d|| <   | |         ||         z  j        dk    ||<   |S r  r  r  s       r[   rA   z TestOrdQZ.test_cef.<locals>.sort  r  r]   r  r  s     r[   test_cefzTestOrdQZ.test_cef  r  r]   c                 >   t          | j        d         | j        d         d          } | j        | j        d         | j        d         dg|R   t          | j        d         | j        d         d          } | j        | j        d         | j        d         dg|R   d S )Nrt   rP   r)  r9  )r    rZ   r   r  )r   r  s     r[   test_diff_input_typeszTestOrdQZ.test_diff_input_types  s    DF1Itvayu555
46!9dfQi55555DF1Itvayu555
46!9dfQi5555555r]   c                 v   t          j        d          }t          j        ddg          }dddgfdddgfdddgfdddgfg}t          j        d          }t          j        d	d
g          }dddgfdddgfdddgfdddgfg}t          j        d          }t          j        ddg          }ddt           j        gfddt           j        gfdt           j        dgfg}	t          j        d          }
t          j        ddg          }ddt           j        gfddt           j        gfdt           j        dgfg}t          j        ddg          }t          j        ddg          }ddt           j        gfddt           j        gfg}||||
|g}|||||g}|||	||g}t          |||          D ]\  }}}|D ]\  }}t          |||          \  }}}}}}|dk    }|dk    }t          j        |          }t           j        |||z  <   t           j        || |z  <   ||          ||          z  || <   t          ||           d S )NrP   r   ru   r)  r*  r+  r,  r-  y             ?y      ?      ?yٿɿ      ?      r   rt   r9  )	rR   rF   r5   r   nanr  r    r  r   )r   r  r  	expected1r  r  	expected2r  r  	expected3r  r  	expected4r  B5	expected5rZ   r   expectedr  r  	expectedisortstrexpected_eigvalsr  r  r  azerobzerorn   s                                 r[   test_sort_explicitzTestOrdQZ.test_sort_explicit  s    VAYYWb#YdAY'aY'dAY'aY')	 VAYYWgz*++k>:;nk:;k>:;nk:;=	
 VAYYWaV__c26]+c26]+bfc]+-	 VAYYWb!WdBF^,dBF^,bfd^,.	 WaV__WaXa[)a[)+	 RR RR y)Y	J!$Q8!4!4 		5 		5BI-6 5 5))*/BW*E*E*E'1eT1a!M%((#%6%%- $&F5&5.!!5&M$v,65&	 0!44445		5 		5r]   N)r   r   r   classmethodr  r  r  r  r  r  r  r  r  r  r  r  r   r]   r[   r  r  )  s        4% 4% [4%l  
, , ,\, , ,        	 	 		 	 	6 6 6-5 -5 -5 -5 -5r]   r  c                   D    e Zd Zd Zd Zej        j        d             ZdS )TestOrdQZWorkspaceSizec                 $    t          d           d S rj  r  r+  s    r[   r,  z#TestOrdQZWorkspaceSize.setup_method  rk  r]   c                    d}t           j        t           j        fD ]^}t          ||f                              |          }t          ||f                              |          }t          ||d d          }_t           j        t           j        fD ]^}t          ||f                              |          }t          ||f                              |          }t          ||d d          }_d S )N   c                     | |k     S r)  r   r  r  s     r[   r/  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>	  
    UT\ r]   re   )rA   r|  c                     | |k     S r)  r   r  s     r[   r/  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>	  r  r]   r@  )rR   r;   r!  rH   rV   r    r"  r<   )r   rE  ddtyperZ   r   r  s         r[   test_decomposez%TestOrdQZWorkspaceSize.test_decompose  s     z2:. 	% 	%F1v%%f--A1v%%f--Aa!A!A#% % %AA }bl3 	( 	(F1v%%f--A1v%%f--Aa!A!A&( ( (AA	( 	(r]   c                 .   d}t           j        t           j        t           j        t           j        fD ]c}t          ||f                              |          }t          ||f                              |          }t          ||d          \  }}}}}	}
dd S )Nr  r-  r9  )rR   r;   r!  r"  r<   rH   rV   r    )r   rE  r  rZ   r   SrU   r  r  UVs              r[   test_decompose_oucz)TestOrdQZWorkspaceSize.test_decompose_ouc
	  s      z2:r}blK 	> 	>F1v%%f--A1v%%f--A&+Aqu&=&=&=#Aq%q!!	> 	>r]   N)	r   r   r   r,  r  r#  r$  r/  r  r   r]   r[   r  r    sS          ( ( ($ [> > > > >r]   r  c                       e Zd Zd ZdS )TestDatacopiedc                    ddl m} t          ddgddgg          }t          |          |                                }|                                } G fdd          } G fdd	          } |            } |            }|d
fd
f|df|d
f|d
f|d
ffD ]=\  }	}
t          |	          }t           |||	          |
t          |	                     >d S )Nr   )_datacopiedrt   rP   r   c                       e Zd Z fdZdS )-TestDatacopied.test_datacopied.<locals>.Fake1c                     S r)  r   r  s    r[   	__array__z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__!	  s    r]   N)r   r   r   r  rZ   s   r[   Fake1r    	  s.              r]   r  c                       e Zd Z j        ZdS )-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__r  s   r[   Fake2r  $	  s        "#"7r]   r  FTr   )scipy.linalg._decompr  rJ   rC   tolistr   r   repr)r   r  r  LM2r  r  F1F2itemstatusarrrZ   s               @r[   test_datacopiedzTestDatacopied.test_datacopied	  sV   444444QFQF#$$AJJHHJJVVXX	 	 	 	 	 	 	 	 	 		8 	8 	8 	8 	8 	8 	8 	8 	8 	8 UWWUWWZ!UaY %[2u+E{D 	- 	-LD&$--CS$//!%d- - - - -	- 	-r]   N)r   r   r   r  r   r]   r[   r  r  	  s#        - - - - -r]   r  c                      t          dt          j                  } t          j        | j        ddt
                    }d|_        t          |d           t          |j        d           d	S )
z4Check linalg works with non-aligned memory (float32)i  r2  rP   r  offsetcountrY   r.  r.  Toverwrite_aN)	r:   rR   uint8
frombufferdatar;   r@   r
   rU   r   r  s     r[   test_aligned_mem_floatr  1	  si     	s"(###A 	afQcAAAAAGtr]   ppc64lezcrashes on ppc64ler   c                      t          dt          j                  } t          j        | j        ddt
                    }d|_        t          |d           t          |j        d           d	S )
z4Check linalg works with non-aligned memory (float64)i$  r2  r  r  r  r  Tr  N)	r:   rR   r  r  r  r>  r@   r
   rU   r  s     r[   test_aligned_memr"  >	  si    
 	s"(###A 	afQc???AAGtr]   c                      t          dt          j                  } t          j        | j        ddt
                    }d|_        t          |d           t          |j        d           d	S )
z>Check that complex objects don't need to be completely alignediH  r2  rQ  r  r  r  Tr  N)	r9   rR   r  r  r  r@  r@   r
   rU   r  s     r[   test_aligned_mem_complexr$  M	  si     	d"(###A 	afQcAAAAAGtr]   c                 b   t          |          }t          t          |                    D ]}|d d          }t          ||         t          j                  rt	          j        ||         j        ||         j        j	        z  dz   t          j
                  }t	          j        |j        d||         j        ||         j                  }||         j        |_        ||         |d<   |||<    | |i | t          ||         j                  dk    r||         j        ||<    | |i | d S )NrQ  r2  r  r  .rt   )r  r   rx   rv   rR   rE   r9   r   rY   itemsizer  r  r  r@   rU   )funcrH  kwargsr   r   r}  s         r[   check_lapack_misalignedr)  [	  s)   ::D3t99 # #GadBJ'' 	#!A$)AaDJ$779JJJBrwq!	%&qTZ1 1 1BtzBHdBsGAaDD!v1Q4:""tv!a"6"""# #r]   z0Ticket #1152, triggers a segfault in rare cases.)runr   c                     t          j        dt                    } t          j        d          }d|_        t          j        dt           j                  }t          j        |j        ddt                    }d|_        t          j        d          }t          |          \  }}t          |ft          d	          ft          |ft          d	          ft          |ft          d	          ft          |ft          d	          ft          ||f|ft          d
          ft          ||ft          dd          ft           | ft          d	          ft           |ft          d	          ft           |ft          d	          ft"          |ft                      ft"          |ft          d	          ft$          | ft          d	          ft&          |ft          d	          ft(          |ft          d	          ft*          |ft          d	          ft,          |ft          d	          ffD ]\  }}}t/          |||           d S )Nr.  r2  r  r  i N  r  r  Tr  )overwrite_b)r  r,  )rR   rF   r>  r:   r@   r  r  r  r   r   r
   dictr   r   r   r   r   r   r   r   r   r   r   r)  )	r  Rr  r   LUpivr'  rH  r(  s	            r[   test_lapack_misalignedr1  m	  s+    	rA
	#AAG
	%rx(((A
afQc???AAG
AllGB1$.../qdDT2223!t---.dt4445S	1~t'='='=>QFDTtDDDE1$.../1$.../1$.../qdDFF#qdDT2223tTd3334!t---.!t---.!t5556QD$40001!! 4 4tV$ 	 dF3333%4 4r]   c                   n    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S )TestOverwritec                 `    t          t          dg           t          t          ddg           d S Nr  )rI   r
   r+  s    r[   test_eigzTestOverwrite.test_eig	  s/    C&***C&&!122222r]   c                 `    t          t          dg           t          t          ddg           d S r5  )rI   r   r+  s    r[   	test_eighzTestOverwrite.test_eigh	  s/    D6(+++D66"233333r]   c                 2    t          t          dg           d S Nr~  )rI   r   r+  s    r[   rz  zTestOverwrite.test_eig_banded	      J11111r]   c                 2    t          t          dg           d S r5  )rI   r   r+  s    r[   test_eigvalszTestOverwrite.test_eigvals	      GfX.....r]   c                 2    t          t          dg           d S r5  )rI   r   r+  s    r[   test_eigvalshzTestOverwrite.test_eigvalsh	  s    Hvh/////r]   c                 2    t          t          dg           d S r:  )rI   r   r+  s    r[   rp  z!TestOverwrite.test_eigvals_banded	  s    NVH55555r]   c                 2    t          t          dg           d S r5  )rI   r   r+  s    r[   test_hessenbergzTestOverwrite.test_hessenberg	  r;  r]   c                 2    t          t          dg           d S r5  )rI   r   r+  s    r[   test_lu_factorzTestOverwrite.test_lu_factor	  s    Ix00000r]   c                     t          j        g dg dg dg          }t          |          t          fddg           d S )Nr   r  )r^   rQ  rQ  c                 $    t          |           S r)  )r   )r   xlus    r[   r/  z-TestOverwrite.test_lu_solve.<locals>.<lambda>	  s    hsA&6&6 r]   )r   )rR   r4   r   rI   )r   rn   rH  s     @r[   test_lu_solvezTestOverwrite.test_lu_solve	  sR    HiiiIII677ll6666?????r]   c                 2    t          t          dg           d S r5  )rI   r   r+  s    r[   test_luzTestOverwrite.test_lu	      B)))))r]   c                 2    t          t          dg           d S r5  )rI   r   r+  s    r[   test_qrzTestOverwrite.test_qr	  rL  r]   c                 2    t          t          dg           d S r5  )rI   r   r+  s    r[   test_rqzTestOverwrite.test_rq	  rL  r]   c                 2    t          t          dg           d S r5  )rI   r   r+  s    r[   
test_schurzTestOverwrite.test_schur	  s    EF8,,,,,r]   c                 Z    t          d dgt          j        t          j        g           d S )Nc                 "    t          | d          S )Nr@  )r   r   s    r[   r/  z2TestOverwrite.test_schur_complex.<locals>.<lambda>	  s    eAy&9&9 r]   r  )dtypes)rI   rR   r;   r!  r+  s    r[   test_schur_complexz TestOverwrite.test_schur_complex	  s9    99F8$&J
#;	= 	= 	= 	= 	= 	=r]   c                 V    t          t          dg           t          d dg           d S )Nr  c                 $    t          | d          S )Nr3  r  )r   rU  s    r[   r/  z(TestOverwrite.test_svd.<locals>.<lambda>	  s    c!7&C&C&C r]   )rI   r   r+  s    r[   test_svdzTestOverwrite.test_svd	  s0    C&***CCfXNNNNNr]   c                 2    t          t          dg           d S r5  )rI   r   r+  s    r[   test_svdvalszTestOverwrite.test_svdvals	  r>  r]   N)r   r   r   r6  r8  rz  r=  r@  rp  rC  rE  rI  rK  rN  rP  rR  rW  rZ  r\  r   r]   r[   r3  r3  	  s
       3 3 34 4 42 2 2/ / /0 0 06 6 62 2 21 1 1@ @ @
* * ** * ** * *- - -= = =O O O/ / / / /r]   r3  c                    t          j        | dft                                        |          }t          j        |          j        }d|z  }t          |          }t          |j        | df           t          ||
                                |           t          |j                  }t          |j        d           t          ||
                                |           | dk    r|st           j                            d           t           j                            | d          t           j                            d|           z  }|dt           j                            | d          z  t           j                            d|           z  z   }|                    |          }t          |d	
          }t          |j        | df           t          |d
          }t          |j        | df           d S d S d S )NrP   r2  r  rt   r   rP   rt   r   -C6?MbP?rcondư>r   )rR   r   r>  rV   rg   r  r   r   r@   r   meanrU   rH   rG   rS   )rW   rY   skip_bigXr  tolYs          r[   _check_orthrj  	  s   
Ae$$$++E22A
(5//
C
*CQA1a&!!!Aqvvxxc****QS		A&!!!Aqvvxxc****1uuXu
	qINN1a  29>>!Q#7#77ry~~a+++binnQ.B.BBBHHUOO$QWq!f%%%$QWq%j))))) uuur]   rQ  z"test only on 64-bit, else too slowc                      d} 	 t          | t          j        d           d S # t          $ r}t	          d          |d }~ww xY w)Ni T)rf  z.memory error perhaps caused by orth regression)rj  rR   r!  MemoryErrorAssertionError)rW   r  s     r[   test_orth_memory_efficiencyrn  	  sb     	AArzD111111   <
 
	s   " 
A<Ac                      t           j        t           j        t           j        t           j        g} g d}t          j        | |          D ]\  }}t          ||           d S )Nrt   rP   r   r.  r  )rR   r;   r!  r<   r"  	itertoolsproductrj  )rV  r#  r  rW   s       r[   	test_orthrs  	  s`    j"*blBMBFE"6511  AAr r]   c                  V   t           j                            d           t           j        t           j        t           j        t           j        g} g d}t          j        | |          D ]@\  }}t          j	        d|f|          }t          j
        |          j        }d|z  }t          |          }t          |j        ||dz
  f           t          ||z  d|           t          |j                  }t          |j        d           t          |j        |z  d|           t           j                            d|dz  z   |          }t          |          }t          |j        ||dz
  |dz  z
  f           t          ||z  d|           |d	k    rt           j                            d           t           j                            |d	          t           j                            d	|          z  }|d
t           j                            |d          z  t           j                            d|          z  z   }|                    |          }t          |d          }t          |j        ||d	z
  f           t          |d          }t          |j        ||dz
  f           Bd S )Nrt   rp  rP   r2  r  r   r^  r_  r   r`  ra  rb  rd  r   )rR   rH   rG   r;   r!  r<   r"  rq  rr  r   rg   r  r%   r   r@   r   rU   randnrS   rV   )rV  r#  r  rW   rg  r  rh  ri  s           r[   test_null_spacerv  	  sQ   INN1j"*blBMBFE"6511 . .AGQF"%%%hrllSjqMMQWq!A#h'''Aqs++++qsOOQWf%%%a----IOOA1Ha((qMMQWq!a%!Q$,/000Aqs++++q55INN1	q!$$ry~~a';';;AD29>>!Q///")..A2F2FFFAA1D)))A1a!e*---1D)))A1a!e*---;. .r]   c            	         t          dt                    } | d d d df         }| d d dd f         }t          t          ||          t          j        dz  gdz  d           t          t          ||          t          j        dz  gdz  d           ||fD ]?}t          t          ||          t	          j        |j        d                   d           @t	          j        g dg dg d	g d
g          }d}t          t          |d d d df         |d d dd f                   d         |d           t          t          |d d dd f         |d d d df                   d         |d           d}t          t          |d d d df         |d d dgf                   |d           t          t          |d d dgf         |d d d df                   |d           d}t          t          |d d d df         |d d dgf                   |d           t          t          |d d dgf         |d d d df                   |d           d}t          t          |d d d df         |d d dd f                   |dgd           t          t          t          |d         |           t          t          t          ||d                    t          t          t          |d d         |           t	          j        g dg dg dg dg dg          }t	          j        g dg dg dg dg dg          }t	          j        t          j        dz  ddg          }t          t          ||          |d           dgdgg}ddgddgg}t          t          ||          dd           t          t          ||          dd           d S )NrQ  r   r`   r!  r^  rt   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rP   r   r:  r;  gL0?gĹ-?gyv?r   rJ  )r   rt   r   )r   r   rt   r  r3  r  rV  )r"   r>  r   r!   rR   pir9   r@   r4   r  r  )HrZ   r   rn   r  r   r   s          r[   test_subspace_anglesrz   
  su   EA	!!!RaR%A	!!!QRR%AOAq))BEBJ<!+;%HHHHOAq))BEBJ<!+;%HHHHV $ $1--rx
/C/C"	$ 	$ 	$ 	$ 	$ 		U	U	U	W	W	W	X	X	X	V	V	V	X	Y 	YA
 !HOAaaa!eHa122h77:H       OAaaaeHa2A2h77:H        HOAaaa!eHaA3i88(OOOOOAaaa!fIqBQBx88(OOOO HOAaaa!eHaA3i88(OOOOOAaaa!fIqBQBx88(OOOO HOAaaa!eHa122h77(A        *oqtQ777*oq!A$777*oq"vq999 	)))))))))))	 	 	A
 	)))))))))))	 	 	A
 xq!Q((HOAq))8%@@@@
 A3A
!q!fAOAq))2E::::OAq))2E::::::r]   c                   b    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S )TestCDF2RDFc                 .    t          j        d||          S )Nz...ij,...jk->...ik)rR   einsum)r   r   r   s      r[   matmulzTestCDF2RDF.matmul\
  s    y-q!444r]   c                 v    t          |                     ||          |                     ||                     d S r)  )r   r  )r   r   r~   rn   s       r[   assert_eig_validzTestCDF2RDF.assert_eig_valid_
  s@    !KK1KK1	
 	
 	
 	
 	
r]   c                     t          j        d          }t          j        d          t          j        d          }}t          ||          \  }}|                     |||           d S )Nr   r   )rR   r   r&   r  r   rg  r   r~   wrr   s         r[   test_single_array0x0realz$TestCDF2RDF.test_single_array0x0reale
  s[    HVx{{BHV,,1ABb"a(((((r]   c                     t          j        ddgddgg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S )Nrt   rP   r   r   rR   r4   r7   r
   r&   r  r  s         r[   test_single_array2x2_realz%TestCDF2RDF.test_single_array2x2_reall
  sd    Hq!fq"g&''y}}Q1ABb"a(((((r]   c                     t          j        ddgddgg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S )Nrt   rP   r   r  r  s         r[   test_single_array2x2_complexz(TestCDF2RDF.test_single_array2x2_complexr
  sd    Hq!fr1g&''y}}Q1ABb"a(((((r]   c                     t          j        g dg dg dg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S )Nr   r   r  r  s         r[   test_single_array3x3_realz%TestCDF2RDF.test_single_array3x3_realx
  sj    HiiiIII677y}}Q1ABb"a(((((r]   c                     t          j        g dg dg dg          }t           j                            |          \  }}t	          ||          \  }}|                     |||           d S Nr   )r   r  r   )r   r  r  r  r  s         r[   test_single_array3x3_complexz(TestCDF2RDF.test_single_array3x3_complex~
  sj    HiiiJJJ788y}}Q1ABb"a(((((r]   c                 D   t          dd          D ]}t          j                            d           t          j                            d||          }t          j                            |          \  }}t          ||          \  }}|                     |||           d S )Nrt   r^   iɚ;r  )	r   rR   rH   rG   rS   r7   r
   r&   r  r   r  rg  r   r~   r  r   s          r[   test_random_1d_stacked_arraysz)TestCDF2RDF.test_random_1d_stacked_arrays
  s    q! 	- 	-AINN9%%%	sAq))A9==##DAqQ]]FB!!"b!,,,,	- 	-r]   c                    t          dd          D ]p}t          j                            dd||          }t          j                            |          \  }}t          ||          \  }}|                     |||           qd S )Nrt   r^   r.  )r   rR   rH   rS   r7   r
   r&   r  r  s          r[   test_random_2d_stacked_arraysz)TestCDF2RDF.test_random_2d_stacked_arrays
  s    q! 	- 	-A	r2q!,,A9==##DAqQ]]FB!!"b!,,,,		- 	-r]   c                     t          j        d          t          j        d          }}t          t          t
          ||           d S )Nr   )rP   )rR   r   r4   r  r  r&   r   r   r~   s      r[   test_low_dimensionality_errorz)TestCDF2RDF.test_low_dimensionality_error
  s5    x||RXd^^1j'1a00000r]   c                     t          j        d          t          j        d                              dd          }}t          t          t
          ||           d S )Nr   r   rP   rR   r:   r  r  r  r&   r  s      r[   r  z!TestCDF2RDF.test_not_square_error
  sE    y||RYq\\11!Q771j'1a00000r]   c                     t          j        g dg dg dg          }t           j                            |          \  }}t	          t
          t          ||           d S r  rR   r4   r7   r
   r  r  r&   r   rg  r   r~   s       r[   test_swapped_v_w_errorz"TestCDF2RDF.test_swapped_v_w_error
  sU    HiiiJJJ788y}}Q1j'1a00000r]   c                     t          j        d          t          j        d                              dd          }}t          t          t
          ||           d S )Nr   r   r  r  r  s      r[   test_non_associated_errorz%TestCDF2RDF.test_non_associated_error
  sE    y||RYr]]221a881j'1a00000r]   c                    t          j        g dg dg dg          }t           j                            |          \  }}t	          t
          t          ||           t          j        g dg dg dgg dg dg dgg          }t           j                            |          \  }}t	          t
          t          ||           d S )Nr   r   )rP   r   y      @      r  r  s       r[   test_not_conjugate_pairsz$TestCDF2RDF.test_not_conjugate_pairs
  s    HiiiLLL9::y}}Q1j'1a000 HYY			<<<0YY			<<<0
   y}}Q1j'1a00000r]   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r]   r[   r|  r|  Z
  s        5 5 5
 
 
) ) )) ) )) ) )) ) )) ) )- - -- - -1 1 11 1 1
1 1 11 1 1
1 1 1 1 1r]   r|  )r^   )F)rq  r  r  numpyrR   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   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   scipy.linalg.lapackr(   r)   r*   r+   r,   r-   r.   r/   r0   scipy.linalg._miscr1   scipy.linalg._decomp_qzr2   scipy.statsr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   numpy.randomrG   rH   scipy.linalg._testutilsrI   scipy.sparse._sputilsrJ   scipy._lib._testutilsrK   scipy.linalg.blasrL   scipy.__config__rM   ImportErrorr>  r\   r!  REAL_DTYPESr"  rQ   r  rd   r   r   r   r'  r  r  r  r1  r5  rH  rL  r   r  rD  r  r  rh  r  r  r  r  r$  r.  machiner"  r$  r)  r%  r1  r3  rj  r/  rY   intpr&  rn  rs  rv  rz  r|  r   r]   r[   <module>r     s	        



    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5  * * * * * *N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N NA A A A A A A A A A A A A A A A A A A A A A $ # # # # # 4 4 4 4 4 4 # # # # # #; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; & % % % % % % % 7 7 7 7 7 7 ( ( ( ( ( ( 3 3 3 3 3 3 ' ' ' ' ' ''''''''   FFF (-E     z2:&,.	~	%# # # #$  4. . . . . . . .>W- W- W- W- W- W- W- W-tU, U, U, U, U, U, U, U,plF lF lF lF lF lF lF lF^[" [" [" [" [" [" [" ["|R2 R2 R2 R2 R2 R2 R2 R2j    M   6 6 6 6 6 6 6 6rE E E E E E E E[9 [9 [9 [9 [9 [9 [9 [9|e, e, e, e, e, e, e, e,P49 49 49 49 49 49 49 49nH) H) H) H) H) H) H) H)V  $ #	/08@M./7	BLs' s' s' s' s' s' s' s'lG5 G5 G5 G5 G5 G5 G5 G5T >  >  >  >  >  >  >  >F- - - - - - - -6
 
 
 $H$&&)3/  1 1
 
1 1
  # # #$ uL  N N4 4N N4@5/ 5/ 5/ 5/ 5/ 5/ 5/ 5/p* * * *6 HBHRW%%.2?  A A A A   #. #. #.L7; 7; 7;t[1 [1 [1 [1 [1 [1 [1 [1 [1 [1s   C% %C/.C/