o
    g                    @   s  d Z dZddlZddlZddlZddlZddlmZm	Z	m
Z
mZmZmZ 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l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< dd	l=m>Z> dd
l?m@Z@ ddlmAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW ddlXmYZYmZZZ ddl[m\Z\ ddl]m^Z^ ddl_m`Z` ddlambZb decfddZdejIejegZfejJejggZhefeh ZidfddZjdd Zkdd Zldd ZmG dd dZnG dd  d ZoG d!d" d"ZpG d#d$ d$ZqG d%d& d&ZrG d'd( d(ZsG d)d* d*esZtG d+d, d,ZuG d-d. d.ZvG d/d0 d0evZwG d1d2 d2ZxG d3d4 d4ZyG d5d6 d6ZzG d7d8 d8Z{G d9d: d:Z|G d;d< d<Z}G d=d> d>Z~d?d@ ZG dAdB dBZG dCdD dDZG dEdF dFZdGdH Zejje dIkdJdKdLdM ZdNdO ZdPdQ ZejjddRdSdTdU ZG dVdW dWZdgdXdYZejjejjeUejjdZk d[dKd\d] Zd^d_ Zd`da Zdbdc ZG ddde deZdS )hz* Test functions for linalg.decomp module

z~
Build linalg:
  python setup_linalg.py build
Run tests if scipy is installed:
  python -c 'import scipy;scipy.linalg.test()'
    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get_lapack_funcs)norm)_select_function)ortho_group)arraydiagonesfulllinalgargsortzerosarangefloat32	complex64ravelsqrt	iscomplexshapesortsignasarrayisfinitendarrayeyedtypetriutril)seedrandom)assert_no_overwrite)matrix)check_free_memory)	HAS_ILP64Fc                 C   s   |t v rtj| | tj| | d  }|| j d }ntj| | }||j d }|r;|td|  t|  7 }||S )z7Generate random sym/hermitian array of the given size n              ?   )	COMPLEX_DTYPESnprL   randconjTr?   rG   astype)nposdefrH   A r\   \/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrix3   s    
r^      c                 C   s~   t | }t |rt|jdt|j  S t |jj}t 	|\}}d||  }||9 }t j
||d || }t ||S )zCClears trailing `fuss_binary_bits` of mantissa of a floating numberrQ          @)out)rT   
asanyarrayiscomplexobj
clear_fussrealimagfinforH   nmantfrexprintldexp)arfuss_binary_bitsxsignificant_binary_bitsx_mantx_expfr\   r\   r]   rd   G   s   

rd   c                 C   sN   t | tr	| j} nt| } t |tr|j}nt|}t| |kd| | d S )Nz%dtype mismatch: "{}" (should be "{}"))
isinstancerF   rH   r   format)actdesr\   r\   r]   assert_dtype_equalX   s   


rw   c                 C   s   t | tr| }t|d d }nt | tr$t| jdkr$| jd }| }ntdt|}|j	
 t| | }d|j	|  }|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'.
    rR      r   zinput type not supported.      ?)rs   intrL   rF   lenrA   	TypeErrorr3   rvsrW   rV   r5   )dim_or_eigvdimdvhr\   r\   r]   symrandi   s   
	


r   c                 C   s4   t | t | }}|dt|t|   }||S )NrQ   )r   rI   rJ   rX   )r   rH   a1a2ar\   r\   r]   _complex_symrand   s   
r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestEigValsc                 C   N   g dg dg dg}t |}dtd d ddtd d g}t|| d S )Nrx   rR      rR         	   ]   rR   r   r
   r?   r   selfr   wexact_wr\   r\   r]   test_simple   s   "zTestEigVals.test_simplec                 C   sd   t g dg dg dgdj}| }|j}t|}dtd d ddtd d g}t|| d S )Nr   r   r   r   r   rR   r   )r4   rW   copyr
   r?   r   r   r\   r\   r]   test_simple_tr   s   "zTestEigVals.test_simple_trc                 C   r   )Nr   rR   r   y      @      ?y      "@      ?y      W@      @rR   r   r   r   r\   r\   r]   test_simple_complex   s   zTestEigVals.test_simple_complexc                 C   sR   g dg dg dg}t |dd}dtd d ddtd d g}t|| d S )	Nr   r   Fcheck_finiter   r   rR   r   r   r   r\   r\   r]   test_finite   s   "zTestEigVals.test_finiteN)__name__
__module____qualname__r   r   r   r   r\   r\   r\   r]   r      s
    r   c                   @   sz   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	j
dddd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )TestEigc           	      C   s  t g dg dg dg}t|\}}dtd d ddtd d g}t dddtdd  d g}t g d	}t dddtdd  d g}|t| }|t| }|t| }t|| t||d d df t|d
   t||d d df t|d   t||d d df t|d   tdD ]}t||d d |f  || |d d |f   qt|ddd\}}tdD ]}t|j|d d |f  || |d d |f   qd S )Nr   r   r   r   rR   r   rx   r         @r   r   r   r   rx   r   rR   leftright)r4   r	   r?   r1   r   rC   rangerW   	r   r   r   r   r   v0v1v2ir\   r\   r]   r      s&   "
"""02zTestEig.test_simplec                 C   s   t ddgddgg}t|ddd\}}}t|t ddg tdD ]}t||d d |f  || |d d |f   q!tdD ]}t| j|d d |f  ||  |d d |f   q?d S )Nrx   rR   r         ?       @y      ?       )r4   r	   r   r   rV   rW   r   r   r   vlvrr   r\   r\   r]   test_simple_complex_eig   s   0zTestEig.test_simple_complex_eigc                 C   s   t g dg dg dg}t|ddd\}}}tdD ]}t||d d |f  || |d d |f   qtdD ]}t| j|d d |f  ||  |d d |f   q9d S )Nr   r   rx   r   r   )r4   r	   r   r   rV   rW   r   r\   r\   r]   r      s   0zTestEig.test_simple_complexc                 C   sr   dgg}dgg}t ||dd\}}t|d d t|d dk t|d t ||\}}t|tj t|d d S )Nrx   r   Thomogeneous_eigvals)rx   r   r   )r	   r   r   r   rT   inf)r   r   br   r   r\   r\   r]   test_gh_3054   s   
zTestEig.test_gh_3054c                 C   s   |d urt |t |}}|}nt |}|}tj|j }d||f }t||dd\}}t||dd}|| |dd d f  }|| |dd d f  }	t|jd D ]}
t|d d |
f |	d d |
f dd|d qQ|d u rt|dd d f d t|dd d f d t|}t|}t|d d |f |d d |f dd|d	 t	t
|}tt
|D ]}
t|d d |
f ||
< qt|t|j|ddd
 |dd d f dk}|d|f |d|f  }t||\}}t||}|| }|| | }	||	 }t|jd D ] }
tt|d d |
f r!t|d d |
f ddd|d q|t| }|t| }tt|}tt|}t|| || dd|d	 t	t
|}tt
|D ]}
t|d d |
f ||
< qUt|t|j|d tt|t|t|  d S )Nz
%r
%rTr   rx   r   gvIh%<=rtolatolerr_msggHz>)r   r   r   )r   r   r   r   )rD   rT   rG   rA   r	   r
   r   r   lexsortemptyr{   r1   r6   sizeallrE   r9   rd   rB   )r   r[   BB0msgr   r   wtval1val2r   permpermtlengthbeta_nonzerowhresw_finwt_finr\   r\   r]   _check_gen_eig   sl   

"
 zTestEig._check_gen_eigzSee gh-2254reasonc                 C   s   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d | || W d    d S 1 s>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   rT   errstater   r   r[   r   r\   r\   r]   test_singular   s   "zTestEig.test_singularc                 C   s   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||g|| gg}t||g||gg}tjd
d | || W d    d S 1 sYw   Y  d S )N)rx   r   r   )rR   r   r   )r   rR   r   )r   r   rR   )rx   r   r   )r   rx   r   r   r   r   r   r   r   r   r   )r5   r4   r:   rG   rT   blockr   r   )r   MKDZI3r[   r   r\   r\   r]   test_falker2  s   "zTestEig.test_falkerc                 C   sj   dd }t jdd! tdD ]}||d d d\}}| || qW d    d S 1 s.w   Y  d S )Nc                 S   sf   d| d  }d|  }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 )	NrR   )rx   r   r   r   )r   rx   r   r   r   )r   r   rx   r   )r   r   r   rx   rx   r\   )omegac1c2r[   r   r\   r\   r]   matricesB  s   


z)TestEig.test_bad_geneig.<locals>.matricesr   r   d         @)r  )rT   r   r   r   )r   r  kr[   r   r\   r\   r]   test_bad_geneig?  s   "zTestEig.test_bad_geneigc                 C   st   t d td}| |d  td}| || tddtd  }| |d  tddtd  }| || d S )N  r   r   rQ   )rK   r   r   rL   r   r\   r\   r]   test_make_eigvalsV  s   zTestEig.test_make_eigvalsc           	      C   sd  g dg dg dg}t |dd\}}dtd d ddtd d g}td	d	d	tdd
  d g}tg d}td	d	d	tdd
  d g}|t| }|t| }|t| }t|| t||d d df t|d   t||d d d	f t|d   t||d d df t|d   td
D ]}t||d d |f  || |d d |f   qd S )Nr   r   Fr   r   r   rR   r   rx   r   r   r   r   r   )r	   r?   r4   r1   r   rC   r   r   r\   r\   r]   test_check_finited  s    "
"""0zTestEig.test_check_finitec                 C   s"   t ddd}ttt| dS )z:Check that passing a non-square array raises a ValueError.r   r   rR   N)rT   r;   reshapeassert_raises
ValueErrorr	   )r   r[   r\   r\   r]   test_not_square_erroru  s   zTestEig.test_not_square_errorc                 C   s:   t d}tddd}ttt|| ttt|| dS )zOCheck that passing arrays of with different shapes
        raises a ValueError.rR         "@r   N)rG   rT   r;   r  r  r  r	   r   r\   r\   r]   test_shape_mismatchz  s   zTestEig.test_shape_mismatchN)r   r   r   r   r   r   r   r   pytestmarkxfailr   r   r	  r  r  r  r  r\   r\   r\   r]   r      s    
	B
r   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestEigBandedc                 C      |    d S N)create_bandmatr   r\   r\   r]   setup_method     zTestEigBanded.setup_methodc                 C   s  d}d| _ d| _tt|dtt|d dd tt|d dd tt|d dd tt|d dd | _tt|dd	tt|d dd  d	tt|d dd  tt|d dd tt|d dd | _tt|dtt|d dd tt|d d
d tt|d dd tt|d dd | _d	tt|d tt|d dd d	tt|d d
d  tt|d dd tt|d dd | _t	| j\}}|j
}t|}|| | _|dd|f | _t	| j\}}|j
}t|}|| | _|dd|f | _| jd }t||ftd| _t||ftd| _t|D ]%}t| j|| j|| d ||f< t| j|| j|| d ||f< q%d| j  | j d }t||ftd| _t| j| jd| j  ddf< t| j D ]6}t| j|d | jd| j  d | |d |f< t| j| d | jd| j  d | d|d | f< qrt||ftd| _t| j| jd| j  ddf< t| j D ]6}t| j|d | jd| j  d | |d |f< t| j| d | jd| j  d | d|d | f< qdt| | _| jd | _dS )zbCreate the full matrix `self.fullmat` and
           the corresponding band matrix `self.bandmat`.
   rR         ?rx         r   g       r   rQ         r`   NrH   r         ?      ?)KLKUr5   r7   sym_matherm_matreal_matcomp_matr8   r	   re   r9   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr:   floatbandmat_symcomplexbandmat_hermr   bandmat_realbandmat_compr;   r   bc)r   NewevargsLDABr   r\   r\   r]   r    s   


"&0,0,zTestEigBanded.create_bandmatc                 C   P   t | jd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.rx   	compute_vN)r+   r.  r9   r   rB   r)  absr*  r   r   evecinfoevec_r\   r\   r]   
test_dsbev     zTestEigBanded.test_dsbevc                 C   r9  )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.rx   r:  N)r,   r.  r9   r   rB   r)  r<  r*  r=  r\   r\   r]   test_dsbevd  rB  zTestEigBanded.test_dsbevdc              	   C   l   t | j\}}t| jd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.        rx   rR   r;  r   N)
rA   r%  r-   r.  r9   r   rB   r)  r<  r*  r   r4  r   r>  numifailr?  r@  r\   r\   r]   test_dsbevx     zTestEigBanded.test_dsbevxc                 C   r9  )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.rx   r:  N)r.   r0  r9   r   rB   r+  r<  r,  r=  r\   r\   r]   test_zhbevd  rB  zTestEigBanded.test_zhbevdc              	   C   rD  )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.rE  rx   rR   rF  N)
rA   r&  r/   r0  r9   r   rB   r+  r<  r,  rG  r\   r\   r]   test_zhbevx  rK  zTestEigBanded.test_zhbevxc                 C   sn  t | j}|j}tt|| j t | j}|j}tt|| j d}t	d}t | jd||fd}tt|| j||d   t | jd||fd}tt|| j||d   | j| d }| j| d }t | jd||fd}	tt|	| j||d   | j| d }| j| d }t | jd||fd}
tt|
| j||d   t | jdd	}|j}tt|| j d
S )z?Compare eigenvalues of eigvals_banded with those of linalg.eig.rR   r   r   selectselect_rangerx   h㈵>r   Fr   N)
r   r.  re   r   rB   r)  r0  r+  rT   longlong)r   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_valr\   r\   r]   test_eigvals_banded  sP   


z!TestEigBanded.test_eigvals_bandedc                 C   s  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d\}	}
tt|	| j||d   tt|
t| jdd||d f  t | j	d||fd\}}tt|| j
||d   tt|t| jdd||d f  | j| d }| j| d }t | jd||fd\}}tt|| j||d   tt|t| jdd||d f  | j
| d }| j
| d }t | j	d||fd\}}tt|| j
||d   tt|t| jdd||d f  t | jd	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. NrR   r   r   rN  rx   rQ  r   Fr   )r   r.  r9   re   r   rB   r)  r<  r*  r0  r+  r,  )r   rS  evec_sym	evec_sym_rT  	evec_herm
evec_herm_rU  rV  rW  evec_sym_indrX  evec_herm_indrY  rZ  r[  evec_sym_valr\  evec_herm_valr\   r\   r]   test_eig_banded0  st   



zTestEigBanded.test_eig_bandedc                 C      t | j\}}t| j| j| j\}}}t|d| j ddf }t| j| j D ]}|t|d| j d | |d |f |d 7 }q(t| jdd\}}	}
t	||
 dS )zZCompare dgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rR   Nrx   r   	permute_l)
rA   r'  r'   r1  r#  r$  r5   r   r   r   r   r   r4  lu_symm_bandipivr?  ur   p_linl_linu_linr\   r\   r]   test_dgbtrfj     2zTestEigBanded.test_dgbtrfc                 C   rg  )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rR   Nrx   r   rh  )
rA   r(  r)   r2  r#  r$  r5   r   r   r   rj  r\   r\   r]   test_zgbtrfx  rr  zTestEigBanded.test_zgbtrfc                 C   P   t | j| j| j\}}}t|| j| j| j|\}}t| j| j}t	|| dS )zhCompare dgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r'   r1  r#  r$  r(   r   r8   r   r'  r   r   rk  rl  r?  yy_linr\   r\   r]   test_dgbtrs     zTestEigBanded.test_dgbtrsc                 C   rt  )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r)   r2  r#  r$  r*   r3  r8   r   r(  r   ru  r\   r\   r]   test_zgbtrs  ry  zTestEigBanded.test_zgbtrsN)r   r   r   r  r  rA  rC  rJ  rL  rM  r]  rf  rq  rs  rx  rz  r\   r\   r\   r]   r    s    Q*:
r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestEigTridiagonalc                 C   r  r  )create_trimatr  r\   r\   r]   r    r  zTestEigTridiagonal.setup_methodc                 C   s   d}t |d| _t |d d| _t| jt| jd t| jd | _t| j\}}|j}t|}|| | _	|dd|f | _
dS )z>Create the full matrix `self.fullmat`, `self.d`, and `self.e`.r  r  rx   r  r   N)r7   r   er5   full_matr8   r	   re   r9   r   r>  )r   r4  r5  r6  r7  r\   r\   r]   r|    s   $
z TestEigTridiagonal.create_trimatc                 C   sx   t tt| j| jdd  t tt| j| jd  t tt| j| jdd t tt| j| jdd t tt| j| jddd	 dS )
zTest error conditions.Nr   rQ   r  lapack_driverfoor   r   r   rN  )r  r  r"   r   r}  r|   r  r\   r\   r]   test_degenerate  s   
z"TestEigTridiagonal.test_degeneratec           	   
   C   s"  dD ]}t | j| j|d}tt|| j qdD ]}ttt | j| jdddd qdD ]d}t | j| jdd	t| jd
 f|d}tt|| j d}d}t | j| jd||f|d}tt|| j||d
   | j| d }| j| d }t | j| jd||f|d}tt|| j||d
   q*dS )z>Compare eigenvalues of eigvalsh_tridiagonal with those of eig.)sterfstevstebzstemrautor  )r  r  r  r   r   r  rO  rP  r  r  r  r   rx   rO  rP  r  rR   r   rQ  r   N)	r"   r   r}  r   rB   r   r  r  r{   )	r   driverr   w_indrU  rV  rY  rZ  w_valr\   r\   r]   test_eigvalsh_tridiagonal  s:   z,TestEigTridiagonal.test_eigvalsh_tridiagonalc           	   	   C   s  t tt| j| jdd dD ])}t| j| j|d\}}|ddt|f }tt|| j tt	|t	| j
 qt tt| j| jdddd d	D ]}d
}t| jd }t| j| jd||f|d\}}tt|| j tt	|t	| j
 d}d}t| j| jd||f|d\}}tt|| j||d   tt	|t	| j
dd||d f  | j| d }| j| d }t| j| jd||f|d\}}tt|| j||d   tt	|t	| j
dd||d f  qFdS )zWCompare eigenvalues and eigenvectors of eigh_tridiagonal
           with those of eig. r  r  )r  r  r  r  Nr  r   r   r  r  r   rx   r  rR   r   rQ  r   )r  r  r#   r   r}  r9   r   rB   r   r<  r>  r{   )	r   r  r   r>  r@  rU  rV  rY  rZ  r\   r\   r]   test_eigh_tridiagonal  sR   


z(TestEigTridiagonal.test_eigh_tridiagonalN)r   r   r   r  r|  r  r  r  r\   r\   r\   r]   r{    s    "r{  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dee	j
dddd Ze	j
dde	j
dddd Zdd Ze	j
deegdd Zdd ZdS )TestEighc                 C      t d d S Nr
  rK   r  r\   r\   r]   setup_class  r  zTestEigh.setup_classc              
   C   s  t tttddg t tttddgtddg t tttddgtddg t tttddgtddgdd t tttddgtddgddgddgd tj &}|td t tttddgtddgddgddgd W d    n1 sw   Y  t tttddgtddgd	dgd
 tj #}|td t tttddgtddgd	dgd W d    n1 sw   Y  t tttddgtddgddgd
 tj #}|td t tttddgtddgddgd W d    n	1 sw   Y  t tttddgtddgdd	gd
 tj #}|td t tttddgtddgdd	gd
 W d    n	1 sWw   Y  t tttddgtddgdd	gd t tttddgdd t tttddgd dd t tttddgtddgddd t tttddgtddgdddgdd tj &}|td t tttddgtddgdddgdd W d    d S 1 sw   Y  d S )Nrx   rR   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   rT   r6   testingsuppress_warningsfilterDeprecationWarning)r   supr\   r\   r]   test_wrong_inputs  sv   ""

$zTestEigh.test_wrong_inputsc                 C   s&   t tttddgtddg d S )Nr   )r  r&   r   rT   r6   r  r\   r\   r]   test_nonpositive_bF  s   &zTestEigh.test_nonpositive_bc                 C   s   t tD ]R\}}td|d}t|ddgd\}}t|jd t| t|dk|dk @ s.J tdd|d}t||ddgd\}}t|jd t| t|dk|dk @ sVJ qd S )	N   r!  r   rR   r  rx   T)rZ   rH   )	enumerateDTYPESr^   r   r   rA   r{   r   )r   inddtr   r   r   r   r\   r\   r]   test_value_subsetsJ  s   zTestEigh.test_value_subsetsc                 C   sF   t ddgddgg}t ddgddgg}t|\}}t||\}}d S )Nrx   rR   r_   r   r   )r4   r   )r   r   r   r   zr\   r\   r]   test_eigh_integerW  s   zTestEigh.test_eigh_integerc                 C   s>   dd l }|jd }t|}ttt| ttt| d S )Nr   rR   )	scipy.sparsesparseidentitytocscrT   
atleast_2dr  r  r   )r   scipyr   r   r\   r\   r]   test_eigh_of_sparse]  s
   
zTestEigh.test_eigh_of_sparsedtype_r  )r6  evdr  evxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nr  )rY   rH   r  rE    r   r   )r^   r   r   rT   rg   eps)r   r  r  r   r   r   r\   r\   r]   test_various_drivers_standarde  s   
z&TestEigh.test_various_drivers_standardr  r   )gvr  r  c                 C   s   t d}td}tddd}t||||d\}}|dkr/t|| |||   d|dd d S |d	krEt|| | ||  d|dd d S t|| | ||  d|dd d S )
Ng     @r  TrZ   )r   r   r  r  rx   rE  r  rR   )rT   spacingr^   r   r   )r   r  r  r   r   r   r   r   r\   r\   r]    test_various_drivers_generalizedn  s   
$$$z)TestEigh.test_various_drivers_generalizedc                 C   s   t d}t|ddgd}tt|d t|ddgd}tt|d t|| tg d}t|ddgd}tt|d t|tdd	g d S )
Nr   rx   rR   r  )rx   333333??      ?rR   gffffff?r  r  r  )r^   r   r   r{   r   rT   r5   r4   )r   r   r   w2r   w3r\   r\   r]   test_eigvalsh_new_args|  s   
zTestEigh.test_eigvalsh_new_argsmethodc                 C   s   t jtdd |tddd W d    n1 sw   Y  t jtdd |tdddgd	 W d    d S 1 s>w   Y  d S )
NKeyword argument 'turbo')matchrR   rR   Tr  Keyword argument 'eigvals'r   rx   r  )r  warnsr  rT   r:   )r   r  r\   r\   r]   test_deprecation_warnings  s   "z"TestEigh.test_deprecation_warningsc                 C   s   t d}t ddd}tj }|td t||dd\}}W d    n1 s)w   Y  t||dd\}}t|| t|| tj }|td t|d	d
gd\}}W d    n1 saw   Y  t|d	d
gd\}}t|| t|| d S )Nr   Tr  r  r  r  r  r  r   rx   r  r  )r^   rT   r  r  r  r  r   r   )r   r   r   r  w_depv_depr   r   r\   r\   r]   test_deprecation_results  s    


z!TestEigh.test_deprecation_resultsN)r   r   r   r  r  r  r  r  r  r  r  parametrizer  r  r  r  r   r   r  r  r\   r\   r\   r]   r  
  s"    8
r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) TestLUc                 C   s  t g dg dg dg| _t g dg dg dg| _t g dg dg dg| _t g dg dg dg| _t g d	g d
g dg| _dt g d	g d
g dg | _t g dg dg dg dg| _dt g dg dg dg dg | _t	d| _
t	ddt	d  | _d S )Nr   r   )rR                 @r   r  r   r   )r_      r   )rQ                  @              @)y              @r  y              @)y              @y               @y              "@)rx   rR   r   r  )r   r   r_   r  )r   r     r  rQ   )r  r  r  )r   r   )r4   r   car   cbhrectchrectvrectcvrectrL   medcmedr  r\   r\   r]   r    s"   

"


zTestLU.setup_methodc                 C   sB   t |\}}}t|| | | t |dd\}}t|| | d S )Nrx   rh  )r   r   )r   dataplrm  plr\   r\   r]   _test_common  s   zTestLU._test_commonc                 C   sD   t |\}}td|f\}||dd\}}}t|| t|| d S )N)getrfFoverwrite_a)r   r0   r   )r   r  l_and_u1piv1r  l_and_u2piv2_r\   r\   r]   _test_common_lu_factor  s
   
zTestLU._test_common_lu_factorc                 C      |  | j d S r  )r  r   r  r\   r\   r]   r        zTestLU.test_simplec                 C   r  r  )r  r  r  r\   r\   r]   r     r  zTestLU.test_simple_complexc                 C   r  r  )r  r   r  r\   r\   r]   test_simple2  r  zTestLU.test_simple2c                 C   r  r  )r  r  r  r\   r\   r]   test_simple2_complex  r  zTestLU.test_simple2_complexc                 C      |  | j | | j d S r  )r  r  r  r  r\   r\   r]   test_hrectangular     zTestLU.test_hrectangularc                 C   r  r  )r  r  r  r  r\   r\   r]   test_vrectangular  r  zTestLU.test_vrectangularc                 C   r  r  )r  r  r  r  r\   r\   r]   test_hrectangular_complex  r  z TestLU.test_hrectangular_complexc                 C   r  r  )r  r  r  r  r\   r\   r]   test_vrectangular_complex  r  z TestLU.test_vrectangular_complexc                 C      |  | j | | j dS z:Check lu decomposition on medium size, rectangular matrix.N)r  r  r  r  r\   r\   r]   test_medium1     zTestLU.test_medium1c                 C   r  r  )r  r  r  r  r\   r\   r]   test_medium1_complex  r   zTestLU.test_medium1_complexc                 C   s,   t | jdd\}}}t|| | | j d S )NFr   )r   r   r   )r   r  r  rm  r\   r\   r]   r       zTestLU.test_check_finitec                 C   sd   dD ]-}t jddgddgg|d}t|\}}t|t ddgddgg t|t ddg qd S )NCFrR   rx   r   r  order)rT   r4   r   r   r   )r   r  r[   LUPr\   r\   r]   test_simple_known  s   zTestLU.test_simple_knownN)r   r   r   r  r  r  r   r   r  r  r  r  r  r  r  r  r  r
  r\   r\   r\   r]   r    s     	r  c                   @   s   e Zd ZdZdd ZdS )TestLUSinglez0LU testers for single precision, real and doublec                 C   s   t |  | jt| _| jt| _| jt| _| jt| _| j	t| _	| j	t| _
| jt| _| jt| _| jt| _| jt| _d S r  )r  r  r   rX   r<   r  r=   r   r  r  r  r  r  r  r  r  r\   r\   r]   r    s   
zTestLUSingle.setup_methodN)r   r   r   __doc__r  r\   r\   r\   r]   r    s    r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestLUSolvec                 C   r  r  r  r  r\   r\   r]   r    r  zTestLUSolve.setup_methodc                 C   sR   t d}t d}dD ]}tj||d}t||}t|}t||}t|| q
d S )Nr  r  r  r  r  )rL   rT   r4   r   r   r   r   )r   a0r   r  r   x1lu_ax2r\   r\   r]   test_lu  s   

zTestLUSolve.test_luc                 C   sB   t d}t d}t||}t|dd}t||dd}t|| d S )Nr  r  Fr   )rL   r   r   r   r   )r   r   r   r  r  r  r\   r\   r]   r  )  s   
zTestLUSolve.test_check_finiteN)r   r   r   r  r  r  r\   r\   r\   r]   r    s    r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zejje ddejjdd ZdS )TestSVD_GESDDc                 C      d| _ td d S )Ngesddr
  r  rK   r  r\   r\   r]   r  3     zTestSVD_GESDD.setup_methodc                 C   s,   t ttdggdd t ttdggdd d S )Nr  r  r  )r  r|   r   r  r  r\   r\   r]   r  7  r  zTestSVD_GESDD.test_degeneratec                 C   s   g dg dg dg}dD ]J}t ||| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< qCt|| | | qd S )Nr   rx   r  r   r   TFfull_matricesr  r   r   r   r  r   rW   rG   r:   rA   rH   charr   r{   r   r   r  rm  svhsigmar   r\   r\   r]   r   ;     zTestSVD_GESDD.test_simplec                 C   s   g dg dg dg}dD ]J}t ||| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< qCt|| | | qd S )Nr   r   r  r  r   r   r  r   r\   r\   r]   test_simple_singularG  r$  z"TestSVD_GESDD.test_simple_singularc                 C   s   g dg dg}dD ]C}t ||| jd\}}}t|j| t|jd  t|jd |jd f|jj}t	t
|D ]
}|| |||f< q9t|| | | q
d S )Nr   r  r  r  r   r   r  r   rW   rG   rA   r:   rH   r  r   r{   r   r\   r\   r]   test_simple_underdetS  s   z"TestSVD_GESDD.test_simple_underdetc                 C   s   ddgddgddgg}dD ]M}t ||| jd\}}}t|j| t|jd  t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< qFt|| | | qd S )	Nrx   rR   r  r   r   r  r  r   r&  r   r\   r\   r]   test_simple_overdet^  s   z!TestSVD_GESDD.test_simple_overdetc           
      C   s   d}d}t dD ]d}t||gt||gfD ]U}dD ]P}t||| jd\}}}t|j| t|jd  t||j t|jd  t|jd |jd f|j	j
}	t t|D ]
}|| |	||f< qVt||	 | | qqqd S )Nr  r   r   r  r  rx   r   )r   rL   r   r  r   rW   rG   rA   r:   rH   r  r{   )
r   rY   mr   r   r  rm  r!  r"  r#  r\   r\   r]   test_randomj  s"   zTestSVD_GESDD.test_randomc                 C   s   g dg dg dg}dD ]T}t ||| jd\}}}t| j| t|jd  t| j| t|jd  t|jd |jd f|jj	}t
t|D ]
}|| |||f< qMt|| | | qd S )Nr   )rx   r  r   r   r  r  rx   r   )r   r  r   rV   rW   rG   rA   r:   rH   r  r   r{   r   r\   r\   r]   r   y  s   z!TestSVD_GESDD.test_simple_complexc           
      C   s   d}d}t dD ]d}dD ]_}t||gt||gfD ]P}|dtt|j  }t||| jd\}}}t| j| t	|jd  t
|jd |jd f|jj}	t t|D ]
}|| |	||f< qVt||	 | | qqqd S )	Nr  r   r   r  rQ   r  rx   r   )r   rL   listrA   r   r  r   rV   rW   rG   r:   rH   r  r{   )
r   rY   r)  r   r  r   rm  r!  r"  r#  r\   r\   r]   test_random_complex  s&   z!TestSVD_GESDD.test_random_complexc                 C   s\   g d}t jd |D ]}t jt jt jt jfD ]}t jj| |}t	|| j
d qqd S )N))r   r   )r   2   )<   r  r
  r  )rT   rL   rK   r<   float64r=   
complex128rU   rX   r   r  )r   sizesszr  r   r\   r\   r]   test_crash_1580  s   zTestSVD_GESDD.test_crash_1580c                 C   s   g dg dg dg}t |d| jd\}}}t|j| td t|j| td t|jd |jd f|jj}t	t
|D ]
}|| |||f< q?t|| | | d S )Nr   r  r   F)r   r  r   r   r  )r   r   rm  r!  r"  r#  r   r\   r\   r]   r    s   zTestSVD_GESDD.test_check_finitec                 C   s4   t g dg dg dg dg}t|| jd d S )N)K}\UU?vWUU?r4  rE  rE  rE  )rE  r4  r5  r4  rE  rE  )rE  rE  r4  r5  r4  rE  )rE  rE  rE  r4  r5  r4  r  )rT   r4   r   r  )r   r   r\   r\   r]   test_gh_5039  s   
zTestSVD_GESDD.test_gh_5039z64-bit LAPACK requiredr   c                 C   s`   t dd tjddgtjd}d|d< t|dd\}}}t|d	 d
 t|d |d  d
 d S )NihB  )free_mbrx   l        r!  r  F)r  r   r  r   )rO   rT   r:   r<   r   r   )r   r[   rm  r!  r"  r\   r\   r]   test_large_matrix  s   
zTestSVD_GESDD.test_large_matrixN)r   r   r   r  r  r   r%  r'  r(  r*  r   r,  r3  r  r6  r  r  skipifrP   slowr8  r\   r\   r\   r]   r  2  s     	
r  c                   @      e Zd Zdd ZdS )TestSVD_GESVDc                 C   r  )Ngesvdr
  r  r  r\   r\   r]   r    r  zTestSVD_GESVD.setup_methodN)r   r   r   r  r\   r\   r\   r]   r<    s    r<  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
ejjdd ZdS )TestSVDValsc                 C   s:   g gt dt dfD ]}t|}t|t d qd S )N)rR   r   )r   r   r   )rT   r   r6   r   r   r   r   r!  r\   r\   r]   
test_empty  s   zTestSVDVals.test_emptyc                 C   s`   g dg dg dg}t |}tt|dk t|d |d   ko*|d k d S    d S )Nr   r   r   r   rx   rR   r   r   r{   r?  r\   r\   r]   r        2zTestSVDVals.test_simplec                 C   @   g dg dg}t |}tt|dk t|d |d k d S )Nr   r  rR   r   rx   rA  r?  r\   r\   r]   r'       z TestSVDVals.test_simple_underdetc                 C   F   ddgddgddgg}t |}tt|dk t|d |d k d S )Nrx   rR   r  r   r   r   rA  r?  r\   r\   r]   r(       zTestSVDVals.test_simple_overdetc                 C   s`   g dg dg dg}t |}tt|dk t|d |d   ko*|d k d S    d S )Nr   )rx   r  r  r   r   r   rx   rR   rA  r?  r\   r\   r]   r     rB  zTestSVDVals.test_simple_complexc                 C   rC  )Nr   )r  r  r   rR   r   rx   rA  r?  r\   r\   r]   test_simple_underdet_complex  rD  z(TestSVDVals.test_simple_underdet_complexc                 C   rE  )Nrx   rR   r  r   r  r   rA  r?  r\   r\   r]   test_simple_overdet_complex  rF  z'TestSVDVals.test_simple_overdet_complexc                 C   sd   g dg dg dg}t |dd}tt|dk t|d |d   ko,|d k d S    d S )	Nr   r   Fr   r   r   rx   rR   rA  r?  r\   r\   r]   r    s   2zTestSVDVals.test_check_finitec                 C   s&   t jd t jdd}t| d S )Nr
  i  i
  )rT   rL   rK   rU   r   r   r   r\   r\   r]   test_crash_2609  s   zTestSVDVals.test_crash_2609N)r   r   r   r@  r   r'  r(  r   rG  rH  r  r  r  r:  rJ  r\   r\   r\   r]   r>    s    r>  c                   @   r;  )TestDiagSVDc                 C   s,   t tg dddg dg dg dg d S )Nrx   r   r   r   r   )r   r   r  r\   r\   r]   r     s   zTestDiagSVD.test_simpleN)r   r   r   r   r\   r\   r\   r]   rK        rK  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkS )lTestQRc                 C   r  r  r  r  r\   r\   r]   r    r  zTestQR.setup_methodc                 C   sH   g dg dg dg}t |\}}t|j| td t|| | d S Nr  rR   r   rR   r   r   r   r   r   r   r   r   rW   rG   r   r   qrr\   r\   r]   r        zTestQR.test_simplec                 C   st   g dg dg dg}t |\}}g d}t||d\}}t|| | t|| t|tdd\}}t|| d S )NrP  rQ  rR  r   r   r   r   r   r   rG   r   r   rU  rV  cqcr2r\   r\   r]   test_simple_left  s   
zTestQR.test_simple_leftc                 C   sp   g dg dg dg}t |\}}g d}t||\}}t|| | t|| t|td\}}t|| d S )NrP  rQ  rR  r   r   rX  rY  r\   r\   r]   test_simple_right"  s   
zTestQR.test_simple_rightc                 C   s   t g dg dg dg}t|dd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t|d d |f \}}t|| t|| d S )	NrP  rQ  rR  Tpivotingrx   r   r   
rT   rD   r   r<  r5   r   r   r   rW   rG   r   r   rU  rV  r  r   q2r\  r\   r\   r]   test_simple_pivoting,  s   "
zTestQR.test_simple_pivotingc                 C   sV   g dg dg dg}t |dd\}}}g d}t||dd\}}}t|| | d S )NrP  rQ  rR  Tr_  r   r   r   r   r   r   r   rU  rV  jpvtrZ  r[  r\   r\   r]   test_simple_left_pivoting7  
   z TestQR.test_simple_left_pivotingc                 C   sV   g dg dg dg}t |dd\}}}g d}t||dd\}}}t|| | d S )NrP  rQ  rR  Tr_  r   re  rf  r\   r\   r]   test_simple_right_pivoting>  ri  z!TestQR.test_simple_right_pivotingc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )NrP  rQ  rR   rS  rT  r\   r\   r]   test_simple_trapE     zTestQR.test_simple_trapc                 C   s   t g dg dg}t|dd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t|d d |f \}}t|| t|| d S )NrP  rQ  Tr_  rx   r   rR   ra  rb  r\   r\   r]   test_simple_trap_pivotingK  s   "
z TestQR.test_simple_trap_pivotingc                 C   sH   ddgddgddgg}t |\}}t|j| td t|| | d S Nr  rR   r   r   r   rS  rT  r\   r\   r]   test_simple_tallV  s   zTestQR.test_simple_tallc                 C   s   t ddgddgddgg}t|dd\}}}tt|}tt |dd  |d d	 k t|j| t	d t|| |d d |f  t|d d |f \}}t|| t|| d S )
Nr  rR   r   r   r   Tr_  rx   r   ra  rb  r\   r\   r]   test_simple_tall_pivoting]  s   "
z TestQR.test_simple_tall_pivotingc                 C   sd   ddgddgddgg}t |dd\}}t|j| td t|| | t|jd t|jd	 d S )
Nr  rR   r   r   r   economicmoder   rR   r  r   r   rW   rG   r   rA   rT  r\   r\   r]   test_simple_tall_ei  s   zTestQR.test_simple_tall_ec                 C   s   t ddgddgddgg}t|ddd\}}}tt|}tt |d	d  |d d
 k t|j| t	d t|| |d d |f  t|d d |f dd\}}t|| t|| d S )Nr  rR   r   r   r   Trq  r`  rs  rx   r   rr  ra  rb  r\   r\   r]   test_simple_tall_e_pivotingr  s   "
z"TestQR.test_simple_tall_e_pivotingc                 C   s   ddgddgddgg}t |dd\}}ddg}t||d	\}}t|| | t|| tg d
}t||d	dd\}}t||d d  | t|tdd	\}}t|| d S )Nr  rR   r   r   r   rq  rr  rx   r   rx   rR   r   Toverwrite_cr   r   r   r4   rG   rY  r\   r\   r]   test_simple_tall_left~     
zTestQR.test_simple_tall_leftc                 C   s   ddgddgddgg}t |ddd\}}}d	dg}t||d
d\}}}t|| t|| | t|tdd
d\}}}t|| d S )Nr  rR   r   r   r   rq  Trs  r`  rx   r   )r   r   r   r   rG   )r   r   rU  rV  rg  rZ  r[  kpvtr\   r\   r]   test_simple_tall_left_pivoting  s   
z%TestQR.test_simple_tall_left_pivotingc                 C   st   ddgddgddgg}t |dd\}}g d}t||\}}t|| | t|| t|td\}}t|| d S )	Nr  rR   r   r   r   rq  rr  r   rX  r   r   rU  rV  rZ  cqr\  r\   r\   r]   test_simple_tall_right  s   
zTestQR.test_simple_tall_rightc                 C   sz   ddgddgddgg}t |ddd\}}}g d	}t||dd
\}}}t|| | t|tddd
\}}}t|| d S )Nr  rR   r   r   r   Trq  rw  r   r_  rX  r   r   rU  rV  rg  rZ  r  r\   r\   r]   test_simple_tall_right_pivoting  s   z&TestQR.test_simple_tall_right_pivotingc                 C   sZ   g dg dg}t |\}}t|j| td t|| | t|jd t|jd d S )Nr  rR   r   rQ  rR   r  rR   r   ru  rT  r\   r\   r]   test_simple_fat  s   zTestQR.test_simple_fatc                 C   s   t g dg dg}t|dd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t
|jd t
|jd	 t|d d |f \}}t|| t|| d S )
Nr  rQ  Tr_  rx   r   rR   r  r  rT   rD   r   r<  r5   r   r   r   rW   rG   r   rA   rb  r\   r\   r]   test_simple_fat_pivoting  s   "
zTestQR.test_simple_fat_pivotingc                 C   s^   g dg dg}t |dd\}}t|j| td t|| | t|jd t|jd d S )NrP  rR   r   r   rq  rr  rR   r  r  ru  rT  r\   r\   r]   test_simple_fat_e  s   zTestQR.test_simple_fat_ec                 C   s   t g dg dg}t|ddd\}}}tt|}tt |dd  |d d k t|j| t	d t|| |d d |f  t
|jd	 t
|jd
 t|d d |f dd\}}t|| t|| d S )NrP  r  Trq  rw  rx   r   rR   r  r  rr  r  rb  r\   r\   r]   test_simple_fat_e_pivoting  s   "
z!TestQR.test_simple_fat_e_pivotingc                 C   sr   g dg dg}t |dd\}}ddg}t||d\}}t|| | t|| t|tdd\}}t|| d S )NrP  r  rq  rr  rx   rR   r   rX  rY  r\   r\   r]   test_simple_fat_left  s   
zTestQR.test_simple_fat_leftc                 C   st   g dg dg}t |ddd\}}}ddg}t||dd\}}}t|| | t|tddd\}}}t|| d S )	NrP  r  rq  Tr  rx   rR   r   rX  rf  r\   r\   r]   test_simple_fat_left_pivoting     z$TestQR.test_simple_fat_left_pivotingc                 C   sn   g dg dg}t |dd\}}ddg}t||\}}t|| | t|| t|td\}}t|| d S )NrP  r  rq  rr  rx   rR   rX  r  r\   r\   r]   test_simple_fat_right  s   
zTestQR.test_simple_fat_rightc                 C   st   g dg dg}t |ddd\}}}ddg}t||dd\}}}t|| | t|tddd\}}}t|| d S )	NrP  r  Trq  rw  rx   rR   r_  rX  r  r\   r\   r]   test_simple_fat_right_pivoting  r  z%TestQR.test_simple_fat_right_pivotingc                 C   sL   g dg dg dg}t |\}}t| j| td t|| | d S Nr         @      @r   r   rR   y       @      @r   rR   r_   r   )r   r   rV   rW   rG   rT  r\   r\   r]   r        zTestQR.test_simple_complexc                 C   sj   g dg dg dg}t |\}}g d}t||d\}}t|| | t|tdd\}}t|| d S )Nr  r  r  rx   rR   r  r   r   rX  r   r   rU  rV  rZ  r[  r\   r\   r]   test_simple_complex_left  s   zTestQR.test_simple_complex_leftc                 C   sf   g dg dg dg}t |\}}g d}t||\}}t|| | t|td\}}t|| d S )Nr  r  r  r  r   rX  r  r\   r\   r]   test_simple_complex_right  s   z TestQR.test_simple_complex_rightc                 C   s   ddgddgddgg}t |dd\}}d	d
g}t||d\}}t|| | t|| tg d}t||ddd\}}t||d d  | t|tdd\}}t|| d S )Nr  y       @      @rR   r   y      @      @r   rq  rr  rx          @       @r   ry  Trz  r|  rY  r\   r\   r]   test_simple_tall_complex_left  r~  z$TestQR.test_simple_tall_complex_leftc                 C   sT   g dg dg dg}t |\}}g d}t||ddd\}}t| | | d S )Nr  r  r  r  r   T	conjugater   r   r   rV   r  r\   r\   r]   "test_simple_complex_left_conjugate!  s
   z)TestQR.test_simple_complex_left_conjugatec                 C   sX   ddgddgddgg}t |dd\}}ddg}t||d	d
d\}}t| | | d S )Nr   r  r   r  rR   rq  rr  rx   r   Tr  r  r  r\   r\   r]   'test_simple_complex_tall_left_conjugate(  s
   z.TestQR.test_simple_complex_tall_left_conjugatec                 C   sX   g dg dg dg}t |\}}tg d}t||dd\}}t||  | d S )Nr  r  r  r  Tr  )r   rT   r4   r   r   rV   r  r\   r\   r]   #test_simple_complex_right_conjugate/  s
   z*TestQR.test_simple_complex_right_conjugatec                 C   s   t g dg dg dg}t|dd\}}}tt|}tt|dd  |d d k t| j	| t
d t|| |d d |f  t|d d |f \}}t|| t|| d S )	Nr  r  r  Tr_  rx   r   r   )r4   r   r<  r5   r   rT   r   r   rV   rW   rG   rb  r\   r\   r]   test_simple_complex_pivoting6  s   "
z#TestQR.test_simple_complex_pivotingc                 C   sZ   t g dg dg dg}t|dd\}}}g d}t||dd\}}}t|| | d S )Nr  r  r  Tr_  r  r   r4   r   r   r   rf  r\   r\   r]   !test_simple_complex_left_pivotingA  
   z(TestQR.test_simple_complex_left_pivotingc                 C   sZ   t g dg dg dg}t|dd\}}}g d}t||dd\}}}t|| | d S )Nr  r  r  Tr_  r  r  rf  r\   r\   r]   "test_simple_complex_right_pivotingH  r  z)TestQR.test_simple_complex_right_pivotingc                 C   sP   d}t dD ]}t||g}t|\}}t|j| t| t|| | qd S Nr  rR   r   rL   r   r   rW   rG   r   rY   r  r   rU  rV  r\   r\   r]   r*  O     zTestQR.test_randomc                 C   st   d}t dD ]1}t||g}t|\}}t|g}t||d\}}t|| | t|t|d\}}t|| qd S )Nr  rR   r   r   rL   r   r   r   rG   r   rY   r  r   rU  rV  rZ  r[  r\   r\   r]   test_random_leftW  s   
zTestQR.test_random_leftc                 C   sp   d}t dD ]/}t||g}t|\}}t|g}t||\}}t|| | t|t|\}}t|| qd S r  r  r   rY   r  r   rU  rV  rZ  r  r\   r\   r]   test_random_rightb  s   
zTestQR.test_random_rightc           
      C   s   d}t dD ]U}t||g}t|dd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|d d |f \}}	t|| t||	 qd S )Nr  rR   Tr_  rx   r   r   rL   r   r<  r5   r   rT   r   r   rW   rG   
r   rY   r  r   rU  rV  r  r   rc  r\  r\   r\   r]   test_random_pivotingm  s   "
zTestQR.test_random_pivotingc                 C   T   d}d}t dD ]}t||g}t|\}}t|j| t| t|| | qd S N   r  rR   r  r   r)  rY   r  r   rU  rV  r\   r\   r]   test_random_tallz  s   zTestQR.test_random_tallc           	      C   s|   d}d}t dD ]3}t||g}t|dd\}}t|g}t||d\}}t|| | t|t|d\}}t|| qd S )Nr  r  rR   rq  rr  r   r  )	r   r)  rY   r  r   rU  rV  rZ  r[  r\   r\   r]   test_random_tall_left  s   
zTestQR.test_random_tall_leftc           	      C   sx   d}d}t dD ]1}t||g}t|dd\}}t|g}t||\}}t|| | t|t|\}}t|| qd S Nr  r  rR   rq  rr  r  )	r   r)  rY   r  r   rU  rV  rZ  r  r\   r\   r]   test_random_tall_right  s   
zTestQR.test_random_tall_rightc                 C      d}d}t dD ]U}t||g}t|dd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|d d |f \}	}
t||	 t||
 qd S )Nr  r  rR   Tr_  rx   r   r  r   r)  rY   r  r   rU  rV  r  r   rc  r\  r\   r\   r]   test_random_tall_pivoting  s   "
z TestQR.test_random_tall_pivotingc                 C   sx   d}d}t dD ]1}t||g}t|dd\}}t|j| t| t|| | t|j||f t|j||f qd S r  )r   rL   r   r   rW   rG   r   rA   r  r\   r\   r]   test_random_tall_e  s   zTestQR.test_random_tall_ec                 C   s   d}d}t dD ]h}t||g}t|ddd\}}}tt|}tt|dd  |d d k t|j	| t
| t|| |d d |f  t|j||f t|j||f t|d d |f dd	\}	}
t||	 t||
 qd S )
Nr  r  rR   Trq  rw  rx   r   rr  )r   rL   r   r<  r5   r   rT   r   r   rW   rG   r   rA   r  r\   r\   r]   test_random_tall_e_pivoting  s   "
z"TestQR.test_random_tall_e_pivotingc                 C   r  Nr  r  rR   r  r  r\   r\   r]   test_random_trap     zTestQR.test_random_trapc                 C   r  )Nr  r  rR   Tr_  rx   r   r  r  r\   r\   r]   test_random_trap_pivoting  s   "
z TestQR.test_random_trap_pivotingc                 C   sd   d}t dD ])}t||gdt||g  }t|\}}t| j| t| t|| | qd S Nr  rR   rQ   )r   rL   r   r   rV   rW   rG   r  r\   r\   r]   r,       zTestQR.test_random_complexc                 C   s   d}t dD ]@}t||gdt||g  }t|\}}t|gdt|g  }t||d\}}t|| | t|t|d\}}t|| qd S )Nr  rR   rQ   r   r  r  r\   r\   r]   test_random_complex_left  s   zTestQR.test_random_complex_leftc                 C   s   d}t dD ]>}t||gdt||g  }t|\}}t|gdt|g  }t||\}}t|| | t|t|\}}t|| qd S r  r  r  r\   r\   r]   test_random_complex_right  s   z TestQR.test_random_complex_rightc           
      C   s   d}t dD ]_}t||gdt||g  }t|dd\}}}tt|}tt|dd  |d d k t|	 j
| t| t|| |d d |f  t|d d |f \}}	t|| t||	 qd S )Nr  rR   rQ   Tr_  rx   r   )r   rL   r   r<  r5   r   rT   r   r   rV   rW   rG   r  r\   r\   r]   test_random_complex_pivoting  s   "
z#TestQR.test_random_complex_pivotingc                 C   sL   g dg dg dg}t |dd\}}t|j| td t|| | d S NrP  rQ  rR  Fr   r   rS  rT  r\   r\   r]   r       zTestQR.test_check_finitec           
      C   s   g dg dg dg}t |d d\}}t |dd\}}t|| t|| t |dd\}}t|| t|| t |dd\}}	t|| t|	| ttt |fdd	i ttt |fdd
i d S )NrP  rQ  rR  )lworkr   r  r   r  r   rR   )r   r   r  	Exception)
r   r   rU  rV  rc  r\  q3r3q4r4r\   r\   r]   
test_lwork  s   





zTestQR.test_lworkN)8r   r   r   r  r   r]  r^  rd  rh  rj  rk  rm  ro  rp  rv  rx  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]   rN    sl    

	

			
	
			
	rN  c                   @   |   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestRQc                 C   r  r  r  r  r\   r\   r]   r  -  r  zTestRQ.setup_methodc                 C   sH   g dg dg dg}t |\}}t||j td t|| | d S rO  r   r   rW   rG   r   r   rV  rU  r\   r\   r]   r   0  rW  zTestRQ.test_simplec                 C   s<   g dg dg dg}t |\}}t |dd}t|| d S )NrP  rQ  rR  rV  rr  )r   r   )r   r   rV  rU  r\  r\   r\   r]   test_r6  s   zTestRQ.test_rc                 C   sP   d}t dD ]}t||g}t|\}}t||j t| t|| | qd S r  r   rL   r   r   rW   rG   r   rY   r  r   rV  rU  r\   r\   r]   r*  <  r  zTestRQ.test_randomc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )NrP  rQ  r   r  r  r\   r\   r]   rk  D  rl  zTestRQ.test_simple_trapc                 C   sH   ddgddgddgg}t |\}}t|j| td t|| | d S rn  r  r  r\   r\   r]   ro  J  rW  zTestRQ.test_simple_tallc                 C   sB   g dg dg}t |\}}t||j td t|| | d S )Nr  rQ  r   r  r  r\   r\   r]   r  P  rl  zTestRQ.test_simple_fatc                 C   sL   g dg dg dg}t |\}}t|| j td t|| | d S r  )r   r   rV   rW   rG   r  r\   r\   r]   r   V  r  zTestRQ.test_simple_complexc                 C   T   d}d}t dD ]}t||g}t|\}}t||j t| t|| | qd S r  r  r   r)  rY   r  r   rV  rU  r\   r\   r]   r  \  r  zTestRQ.test_random_tallc                 C   r  r  r  r  r\   r\   r]   r  e  r  zTestRQ.test_random_trapc                 C   sx   d}d}t dD ]1}t||g}t|dd\}}t||j t| t|| | t|j||f t|j||f qd S )Nr  r  rR   rq  rr  )r   rL   r   r   rW   rG   r   rA   r  r\   r\   r]   test_random_trap_economicn  s   z TestRQ.test_random_trap_economicc                 C   sd   d}t dD ])}t||gdt||g  }t|\}}t|| j t| t|| | qd S r  )r   rL   r   r   rV   rW   rG   r  r\   r\   r]   r,  y  r  zTestRQ.test_random_complexc                 C   s   d}d}t dD ];}t||gdt||g  }t|dd\}}t|| j t| t|| | t|j||f t|j||f qd S )Nr  r  rR   rQ   rq  rr  )	r   rL   r   r   rV   rW   rG   r   rA   r  r\   r\   r]   test_random_complex_economic  s   z#TestRQ.test_random_complex_economicc                 C   sL   g dg dg dg}t |dd\}}t||j td t|| | d S r  r  r  r\   r\   r]   r    r  zTestRQ.test_check_finiteN)r   r   r   r  r   r  r*  rk  ro  r  r   r  r  r  r,  r  r  r\   r\   r\   r]   r  +  s    		r  c                   @   s   e Zd Zdd Zdd Zejdde	d de	dd	gfd
e	dd	e	d dgfddd	e	de	d gfde	de	d dd	gfdd e	dd	e	d dgfgdd Z
dd Zdd ZdS )	TestSchurc                 C   sN   t || | j |||dd t || j tt| dd|dd d S )Nz&Schur decomposition does not match 'a'r   r   zu is not unitary)r   rV   rW   rT   rG   r{   )r   r   trm  r   r   r\   r\   r]   check_schur  s   "
zTestSchur.check_schurc                 C   s   g dg dg dg}t |\}}| j|||ddd t |d\}}tttt|o4ttt| | j|||ddd t||\}}| j|||ddd d S )Nr  r  r   rQ  r  r   r   +=+<r   r   r/  )r   r  r   rT   anyr>   r@   r   )r   r   r  r  tczctc2zc2r\   r\   r]   r     s   (zTestSchur.test_simplezsort, expected_diaglhprR         ry   rhpiucoucc                 C   s   | dkS )NrE  r\   )rn   r\   r\   r]   <lambda>      zTestSchur.<lambda>c                 C   sd   g dg dg dg dg}t ||d\}}}| j|||ddd tt||d	d
 td| d S )N      @r   r  r  g      g      r  r  r        @      g      @r  r  r         @rB   r  r  r  -q=r   rR   )r   r  r   rT   r5   r   )r   rB   expected_diagr   r  rm  sdimr\   r\   r]   	test_sort  s   zTestSchur.test_sortc                 C   s@   g dg dg dg dg}t tt|dd t tt|dd d S )Nr  r  r  r  unsupportedr  rx   )r  r  r   rI  r\   r\   r]   test_sort_errors  s   zTestSchur.test_sort_errorsc                 C   sB   g dg dg dg}t |dd\}}t|| | j | d S )Nr  rQ  r  Fr   )r   r   rV   rW   )r   r   r  r  r\   r\   r]   r    s   zTestSchur.test_check_finiteN)r   r   r   r  r   r  r  r  rT   r?   r  r  r  r\   r\   r\   r]   r    s    	
 
r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestHessenbergc                 C   sb   g dg dg dg}g dg dg dg}t |dd\}}t|j| | | t||d	d
 d S )Nikiif     "  ir  g     bgsE@g㥛 cg(m̀gkwc@gfjWr   g&S?g,eX@rx   calc_qr  decimalr   r   rW   r   r   h1r   rU  r\   r\   r]   r     s   zTestHessenberg.test_simplec                 C   sB   g dg dg dg}t |dd\}}t| j| | | d S )Nr  )r  y             f@r
  )y             ;r  r  rx   r  )r   r   rV   rW   r   r   r   rU  r\   r\   r]   r     s   z"TestHessenberg.test_simple_complexc                 C   sV   g dg dg dg dg dg dg dg}t |dd	\}}t|j| | | d S )
N)rx   rR   r   r  r   r   r_   )r   rR   r   r  r   r_   rR   )r   rR   rR   r   r   r   rR   )r   r   rR   r  r   r   rR   )r   r   rx   rR   r   rx   rR   )r   rx   rR   r   r   rx   r   )r   r   r   r   r   rx   rR   rx   r  r  r  r\   r\   r]   r    s   zTestHessenberg.test_simple2c                 C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nr   rR   )r   r   rx   r  )rT   rG   r   r   rW   r  r\   r\   r]   test_simple3  s   
zTestHessenberg.test_simple3c                 C   sF   d}t dD ]}t||g}t|dd\}}t|j| | | qd S )Nr  rR   rx   r  )r   rL   r   r   rW   r   rY   r  r   r   rU  r\   r\   r]   r*    s   zTestHessenberg.test_randomc                 C   sZ   d}t dD ]$}t||gdt||g  }t|dd\}}t| j| | | qd S )Nr  rR   rQ   rx   r  )r   rL   r   r   rV   rW   r  r\   r\   r]   r,    s   z"TestHessenberg.test_random_complexc                 C   sd   g dg dg dg}g dg dg dg}t |ddd	\}}t|j| | | t||d
d d S )Nr  r  r  r  r  r  rx   F)r  r   r  r  r  r  r\   r\   r]   r    s   z TestHessenberg.test_check_finitec                 C   sx   ddgddgg}t |dd\}}t|td t|| ddgdd	gg}t |dd\}}t|td t|| d S )
NrR   rx   r_   r  r  y       @      r   y      @      @y      (@       )r   r   rT   rG   )r   r   r   rU  r   h2rc  r\   r\   r]   test_2x2  s   
zTestHessenberg.test_2x2N)r   r   r   r   r   r  r  r*  r,  r  r  r\   r\   r\   r]   r    s    r  c                   @   sb   e Zd Zdd Zejjejdkdddd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd ZdS )TestQZc                 C   r  Ni90  r  r  r\   r\   r]   r    r  zTestQZ.setup_methoddarwinz8gges[float32] broken for OpenBLAS on macOS, see gh-16949r   c                 C   s   d}t ||gt}t ||gt}t||\}}}}t|| |j |dd t|| |j |dd t||j t|dd t||j t|dd tt	t
|dk d S )Nr   r  r   )rL   rX   r<   r   r   rW   rG   r   rT   r   r5   r   rY   r[   r   AABBQr   r\   r\   r]   test_qz_single  s   zTestQZ.test_qz_singlec                 C   s   d}t ||g}t ||g}t||\}}}}t|| |j | t|| |j | t||j t| t||j t| ttt|dk d S )Nr   r   	rL   r   r   rW   rG   r   rT   r   r5   r  r\   r\   r]   test_qz_double&  s   zTestQZ.test_qz_doublec                 C   s   d}t ||gdt ||g  }t ||gdt ||g  }t||\}}}}t|| | j | t|| | j | t|| j t| t|| j t| ttt	|dk ttt	|j
dk d S )Nr   rQ   r   )rL   r   r   rV   rW   rG   r   rT   r   r5   rf   r  r\   r\   r]   test_qz_complex1  s   zTestQZ.test_qz_complexc                 C   s   d}t ||gdt ||g  t}t ||gdt ||g  t}t||\}}}}t|| | j |dd t|| | j |dd t|| j t|dd t|| j t|dd tt	
t|dk tt	
t|jdk d S )Nr   rQ   r  r   )rL   rX   r=   r   r   rV   rW   rG   r   rT   r   r5   rf   r  r\   r\   r]   test_qz_complex64=  s   ""zTestQZ.test_qz_complex64c           
      C   s   d}t ||g}t ||g}t||dd\}}}}|| | j }t|j| t|jd || | j }	t|	j| t|	jd t|| j t| t|| j t| tt	
t|dk d S )Nr   r/  )outputr   )rL   r   rV   rW   r   re   rf   rG   r   rT   r   r5   )
r   rY   r[   r   r   r!  r"  r   aabbr\   r\   r]   test_qz_double_complexI  s   zTestQZ.test_qz_double_complexc                 C   s^   t g dg dg dg dg}t g dg dg dg dg}ttt||d	d
 d d S )N)333333@      )@     @Ag      @333333@     5@g     Gg      @)r0  r       Er  )皙@r        Gr  )r  r  r   r  )r  r   g      r3  )r  r`   r  r  )r  r   r  r  c                 S   s   |dkS )Nr   r\   )rl   aibetar\   r\   r]   r  p  r  z,TestQZ.test_qz_double_sort.<locals>.<lambda>r  )	rT   r4   r  r  r   r   r   rW   r<  )r   r[   r   r   r!  r"  r   r  r\   r\   r]   test_qz_double_sortX  s   

zTestQZ.test_qz_double_sortc                 C   s   d}t ||g}t ||g}t||dd\}}}}t|| |j | t|| |j | t||j t| t||j t| ttt|dk d S )Nr   Fr   r   r$  r  r\   r\   r]   r    s   zTestQZ.test_check_finiteN)r   r   r   r  r  r  r  sysplatformr#  r%  r&  r'  r+  r7  r  r\   r\   r\   r]   r    s    
cr  c                 C   s   t | |  S r  )rT   rC   )Xr\   r\   r]   	_make_pos  s   r;  c                   @   sp   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )	TestOrdQZc           
      C   s  t g dg dg dg dg}t g dg dg dg dg}t g d	g d
g dg dg}t g dg dg dg dg}t g dg dg dg dg}t g dg dg dg dg}t d}t ddg}t 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              )rQ   y333333@y              y      @      )r,  r-  r.  r  r/  )r0  r1  r2  r  )r3  g      :@r4  r  )rx   rR   rx   )rx   r   r  )rx   r   r   )rx   r   r?  r  )r  r  r   r   )r  r  r`         @)r@  r  r  r   )rE  r         @r@  )rA        $@r  rB  )r@  r@  r`   r  )r  r  r  r  )r  r  r  r@  rR   r   rx   )rT   r4   rG   r5   r[   r   )
clsA1B1A2B2A3B3A4B4A5r\   r\   r]   r    sF   

	




zTestOrdQZ.setup_classc                    sV   t jdd  fddt| j| jD }W d    t|S 1 s"w   Y  t|S )Nraiser   c                    s   g | ]\}}t || d qS )r  )r   ).0AiBir  r\   r]   
<listcomp>	  s    z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rT   r   zipr[   r   tuple)r   rB   retr\   r  r]   	qz_decomp	  s   
zTestOrdQZ.qz_decompc
                 C   sf  t j|j }
t||j  |
 t|	|	j  |
 t|| ||	  t|| ||	  tt |dt |j tt |dt |j t	|jd D ]}|dkr^|||d f dkr^qM||jd d k r||d |f dkrt
|||d ||d f |||d ||d f \}}|d jdk r|ddg }|||d  |||d   }|d jdk r|ddg }t|| qM|| dkr|| dkrt|||f d t|||f d qM|| dkrt|||f d qMt|||f |||f  || ||   qMt|}d}t	|jd D ]}|t || gt || g}|s-|r-J |}qd S )Nr   r   r   rx   rR   T)rT   rG   rA   r   rW   rV   r   rJ   r:   r   r	   rf   r   r   r2   r4   )r   r[   r   rB   r   r!  alphar6  r"  r   Idr   evalsr  tmpsortfunlastsortcursortr\   r\   r]   check		  s@   &> ,"
zTestOrdQZ.checkc                 C   s@   |  |}t|| j| jD ]\}}}| j|||g|R   qd S r  )rU  rR  r[   r   r]  )r   rB   rT  retirO  rP  r\   r\   r]   	check_all7	  s   
zTestOrdQZ.check_allc                 C      |  d d S )Nr  r_  r  r\   r\   r]   test_lhp=	     zTestOrdQZ.test_lhpc                 C   r`  )Nr  ra  r  r\   r\   r]   test_rhp@	  rc  zTestOrdQZ.test_rhpc                 C   r`  )Nr  ra  r  r\   r\   r]   test_iucC	  rc  zTestOrdQZ.test_iucc                 C   r`  )Nr  ra  r  r\   r\   r]   test_oucF	  rc  zTestOrdQZ.test_oucc                 C      dd }|  | d S )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S Nr!  r   FrT   
empty_likeboolrf   rn   rv  ra   nonzeror\   r\   r]   rB   K	  
   
z TestOrdQZ.test_ref.<locals>.sortra  r   rB   r\   r\   r]   test_refI	     zTestOrdQZ.test_refc                 C   rg  )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S rh  ri  rl  r\   r\   r]   rB   V	  rn  z TestOrdQZ.test_cef.<locals>.sortra  ro  r\   r\   r]   test_cefT	  rq  zTestOrdQZ.test_cefc                 C   s|   t | jd | jd dd}| j| jd | jd dg|R   t | jd | jd dd}| j| jd | jd dg|R   d S )Nrx   rR   r  r  )r   r[   r   r]  )r   rT  r\   r\   r]   test_diff_input_types_	  s   "&zTestOrdQZ.test_diff_input_typesc                 C   s
  t d}t 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 d}t 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 d}t ddg}ddt jgfddt jgfdt jdgfg}	t d}
t ddg}ddt jgfddt jgfdt jdgfg}t ddg}t ddg}ddt jgfddt jgfg}||||
|g}|||||g}|||	||g}t|||D ]G\}}}|D ]?\}}t|||d\}}}}}}|dk}|dk}t |}t j|||@ < t j|| |@ < ||  ||   || < t|| qqd S )NrR   r   ry   r  r  r  r  r  y             ?y      ?      ?yٿɿ      ?      r   rx   r  )	rT   rG   r5   r   nanrR  r   rj  r   )r   rD  rE  	expected1rF  rG  	expected2rH  rI  	expected3rJ  rK  	expected4rL  B5	expected5r[   r   expectedrO  rP  	expectedisortstrexpected_eigvalsr  rV  r6  azerobzerorn   r\   r\   r]   test_sort_explicitf	  s\   












zTestOrdQZ.test_sort_explicitN)r   r   r   classmethodr  rU  r]  r_  rb  rd  re  rf  rp  rr  rs  r  r\   r\   r\   r]   r<    s    
6.r<  c                   @   s,   e Zd Zdd Zdd Zejjdd ZdS )TestOrdQZWorkspaceSizec                 C   r  r  r  r  r\   r\   r]   r  	  r  z#TestOrdQZWorkspaceSize.setup_methodc                 C   s   d}t jt jfD ]}t||f|}t||f|}t||dd dd}qt jt jfD ]}t||f|}t||f|}t||dd dd}q-d S )N   c                 S      | |k S r  r\   rV  r6  r\   r\   r]   r  	  r  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>re   )rB   r(  c                 S   r  r  r\   r  r\   r\   r]   r  	  r  r/  )rT   r<   r/  rL   rX   r   r0  r=   )r   r4  ddtyper[   r   r  r\   r\   r]   test_decompose	  s   z%TestOrdQZWorkspaceSize.test_decomposec                 C   s`   d}t jt jt jt jfD ]!}t||f|}t||f|}t||dd\}}}}}	}
qd S )Nr  r  r  )rT   r<   r/  r0  r=   rL   rX   r   )r   r4  r  r[   r   SrW   rV  r6  UVr\   r\   r]   test_decompose_ouc	  s   z)TestOrdQZWorkspaceSize.test_decompose_oucN)	r   r   r   r  r  r  r  r:  r  r\   r\   r\   r]   r  	  s
    r  c                   @   r;  )TestDatacopiedc                    s   ddl m} tddgddgg}t| | }| }G  fddd}G  fdd	d	}| }| }|d
f d
f|df|d
f|d
f|d
ffD ]\}	}
t|	}t|||	|
t|	d qHd S )Nr   )_datacopiedrx   rR   r   c                       s   e Zd Z fddZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1c                    s    S r  r\   r  r[   r\   r]   	__array__	  s   z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__N)r   r   r   r  r\   r  r\   r]   Fake1	  s    r  c                       s   e Zd Z jZdS )z-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__r\   r  r\   r]   Fake2	  s    
r  FTr   )scipy.linalg._decompr  rN   rD   tolistr   r   repr)r   r  r   LM2r  r  F1F2itemstatusarrr\   r  r]   test_datacopied	  s"   zTestDatacopied.test_datacopiedN)r   r   r   r  r\   r\   r\   r]   r  	  rM  r  c                  C   F   t dtjd} tj| jddtd}d|_t|dd t|jdd d	S )
z4Check linalg works with non-aligned memory (float32)i  r!  rR   r  offsetcountrH   r  Tr  N)	r;   rT   uint8
frombufferr  r<   rA   r	   rW   r   r  r\   r\   r]   test_aligned_mem_float	  s
   r  ppc64lezcrashes on ppc64ler   c                  C   r  )
z4Check linalg works with non-aligned memory (float64)i$  r!  r  r  r  r  Tr  N)	r;   rT   r  r  r  r-  rA   r	   rW   r  r\   r\   r]   test_aligned_mem	  s
   r  c                  C   r  )
z>Check that complex objects don't need to be completely alignediH  r!  r  r  r  r  Tr  N)	r:   rT   r  r  r  r/  rA   r	   rW   r  r\   r\   r]   test_aligned_mem_complex	  s
   r  c                 C   s   t |}tt|D ]a}|d d  }t|| tjrktj|| j|| jj	 d tj
d}tj|jd|| j|| jd}|| j|_|| |d< |||< | |i | t|| jdkrk|| j||< | |i | q
d S )Nr  r!  r  r  .rx   )r+  r   r{   rs   rT   rF   r:   r   rH   itemsizer  r  r  rA   rW   )funcr7  kwargsr   r   r)  r\   r\   r]   check_lapack_misaligned	  s"   &r  z0Ticket #1152, triggers a segfault in rare cases.)runr   c            	      C   s  t jdtd} t d}d|_t jdt jd}t j|jddtd}d|_t d}t	|\}}t
|ftdd	ft|ftdd	ft|ftdd	ft	|ftdd	ft||f|ftdd
ft||ftdddft| ftdd	ft|ftdd	ft|ftdd	ft|ft ft|ftdd	ft| ftdd	ft|ftdd	ft|ftdd	ft|ftdd	ft|ftdd	ffD ]\}}}t||| qd S )Nr  r!  r  r  i N  r  r  Tr  )overwrite_b)r  r  )rT   rG   r-  r;   rA   r  r  r  r6   r   r	   dictr
   r   r   r   r   r   r   r   r   r   r   r  )	r   Rr  r   r  pivr  r7  r  r\   r\   r]   test_lapack_misaligned
  s6   

r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"TestOverwritec                 C      t tdg t tddg d S Nr   )rM   r	   r  r\   r\   r]   test_eig3
     zTestOverwrite.test_eigc                 C   r  r  )rM   r   r  r\   r\   r]   	test_eigh7
  r  zTestOverwrite.test_eighc                 C      t tdg d S Nrt  )rM   r   r  r\   r\   r]   rf  ;
  r  zTestOverwrite.test_eig_bandedc                 C   r  r  )rM   r
   r  r\   r\   r]   test_eigvals>
  r  zTestOverwrite.test_eigvalsc                 C   r  r  )rM   r   r  r\   r\   r]   test_eigvalshA
  r  zTestOverwrite.test_eigvalshc                 C   r  r  )rM   r   r  r\   r\   r]   r]  D
  r  z!TestOverwrite.test_eigvals_bandedc                 C   r  r  )rM   r   r  r\   r\   r]   test_hessenbergG
  r  zTestOverwrite.test_hessenbergc                 C   r  r  )rM   r   r  r\   r\   r]   test_lu_factorJ
  r  zTestOverwrite.test_lu_factorc                    s<   t g dg dg dg}t| t fdddg d S )Nr   r  )r_   r  r  c                    s
   t  | S r  )r   )r   xlur\   r]   r  P
     
 z-TestOverwrite.test_lu_solve.<locals>.<lambda>)r   )rT   r4   r   rM   )r   rn   r\   r  r]   test_lu_solveM
  s   zTestOverwrite.test_lu_solvec                 C   r  r  )rM   r   r  r\   r\   r]   r  R
  r  zTestOverwrite.test_luc                 C   r  r  )rM   r   r  r\   r\   r]   test_qrU
  r  zTestOverwrite.test_qrc                 C   r  r  )rM   r   r  r\   r\   r]   test_rqX
  r  zTestOverwrite.test_rqc                 C   r  r  )rM   r   r  r\   r\   r]   
test_schur[
  r  zTestOverwrite.test_schurc                 C   s    t dd dgtjtjgd d S )Nc                 S   s
   t | dS )Nr/  )r   r   r\   r\   r]   r  _
  r  z2TestOverwrite.test_schur_complex.<locals>.<lambda>r   )dtypes)rM   rT   r<   r/  r  r\   r\   r]   test_schur_complex^
  s   

z TestOverwrite.test_schur_complexc                 C   s    t tdg t dd dg d S )Nr   c                 S   s   t | ddS )Nr=  r  )r   r  r\   r\   r]   r  d
  s    z(TestOverwrite.test_svd.<locals>.<lambda>)rM   r   r  r\   r\   r]   test_svdb
  s   zTestOverwrite.test_svdc                 C   r  r  )rM   r   r  r\   r\   r]   test_svdvalsf
  r  zTestOverwrite.test_svdvalsN)r   r   r   r  r  rf  r  r  r]  r  r  r  r  r  r  r  r  r  r  r\   r\   r\   r]   r  2
  s"    r  c                 C   s$  t j| dftd|}t |j}d| }t|}t|j| df t	||
 |d t|j}t|jd t	||
 |d | dkr|st jd t j| dt jd|  }|dt j| d t jd|   }||}t|d	d
}t|j| df t|dd
}t|j| df d S d S d S )NrR   r!  r  rx   r   rR   rx   r   -C6?MbP?rcondư>r   )rT   r6   r-  rX   rg   r  r   r   rA   r   meanrW   rL   rK   rU   )rY   rH   skip_bigr:  r  tolYr\   r\   r]   _check_orthj
  s&   
$
r  r  z"test only on 64-bit, else too slowc               
   C   s>   d} zt | tjdd W d S  ty } ztd|d }~ww )Ni T)r  z.memory error perhaps caused by orth regression)r  rT   r/  MemoryErrorAssertionError)rY   r}  r\   r\   r]   test_orth_memory_efficiency
  s   r  c                  C   s@   t jt jt jt jg} g d}t| |D ]	\}}t|| qd S )Nrx   rR   r   r  r  )rT   r<   r/  r=   r0  	itertoolsproductr  )r  r1  r  rY   r\   r\   r]   	test_orth
  s
   r  c                  C   s  t jd t jt jt jt jg} g d}t| |D ]\}}t j	d|f|d}t 
|j}d| }t|}t|j||d f t|| d|d t|j}t|jd t|j| d|d t jd|d  |}t|}t|j||d |d  f t|| d|d |d	krt jd t j|d	t jd	| }|d
t j|d t jd|  }||}t|dd}t|j||d	 f t|dd}t|j||d f qd S )Nrx   r  rR   r!  r  r   r  r  r   r  r  r  r  r   )rT   rL   rK   r<   r/  r=   r0  r  r  r6   rg   r  r$   r   rA   r   rW   randnrU   rX   )r  r1  r  rY   r:  r  r  r  r\   r\   r]   test_null_space
  s8   
$
r  c                  C   s>  t dt} | d d d df }| d d dd f }tt||tjd gd dd tt||tjd gd dd ||fD ]}tt||t|jd dd q=tg dg dg d	g d
g}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 df d |dd d}tt|d d d df |d d dgf |dd tt|d d dgf |d d d df |dd d}tt|d d d df |d d dgf |dd tt|d d dgf |d d d df |dd d}tt|d d d df |d d dd f |dgdd t	t
t|d | t	t
t||d  t	t
t|d d | 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tjd ddg}tt|||dd dgdgg}ddgddgg}tt||ddd tt||ddd d S )Nr  r   r`   r  r  rx   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rR   r   r  r  gL0?gĹ-?gyv?r   rL  )r   rx   r   )r   r   rx   r   r"  rt  rE  )r!   r-  r   r    rT   pir:   rA   r4   r  r  )Hr[   r   rn   r|  r   r   r\   r\   r]   test_subspace_angles
  sl   
  0022220

r  c                   @   r  )TestCDF2RDFc                 C   s   t d||S )Nz...ij,...jk->...ik)rT   einsum)r   r   r   r\   r\   r]   matmul
  rc  zTestCDF2RDF.matmulc                 C   s   t | ||| || d S r  )r   r  )r   r   r   rn   r\   r\   r]   assert_eig_valid  s   

zTestCDF2RDF.assert_eig_validc                 C   s@   t d}t dt d}}t||\}}| ||| d S )Nr   r   )rT   r   r%   r  r   r:  r   r   wrr   r\   r\   r]   test_single_array0x0real  s   
z$TestCDF2RDF.test_single_array0x0realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nrx   rR   r   r   rT   r4   r8   r	   r%   r  r  r\   r\   r]   test_single_array2x2_real     z%TestCDF2RDF.test_single_array2x2_realc                 C   sF   t ddgddgg}t j|\}}t||\}}| ||| d S )Nrx   rR   r   r  r  r\   r\   r]   test_single_array2x2_complex  r  z(TestCDF2RDF.test_single_array2x2_complexc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S )Nr   r   r  r  r\   r\   r]   test_single_array3x3_real     z%TestCDF2RDF.test_single_array3x3_realc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S Nr   )r   r  r   )r   r>  r  r  r  r\   r\   r]   test_single_array3x3_complex!  r  z(TestCDF2RDF.test_single_array3x3_complexc                 C   s\   t ddD ]&}tjd tjd||}tj|\}}t||\}}| ||| qd S )Nrx   r_   iɚ;r  )	r   rT   rL   rK   rU   r8   r	   r%   r  r   r   r:  r   r   r  r   r\   r\   r]   test_random_1d_stacked_arrays'  s   z)TestCDF2RDF.test_random_1d_stacked_arraysc                 C   sR   t ddD ]!}tjdd||}tj|\}}t||\}}| ||| qd S )Nrx   r_   r  )r   rT   rL   rU   r8   r	   r%   r  r  r\   r\   r]   test_random_2d_stacked_arrays0  s   z)TestCDF2RDF.test_random_2d_stacked_arraysc                 C   s(   t dt d}}ttt|| d S )Nr\   )rR   )rT   r   r4   r  r  r%   r   r   r   r\   r\   r]   test_low_dimensionality_error8  s   z)TestCDF2RDF.test_low_dimensionality_errorc                 C   s0   t dt ddd}}ttt|| d S )Nr   r   rR   rT   r;   r  r  r  r%   r  r\   r\   r]   r  <     z!TestCDF2RDF.test_not_square_errorc                 C   s>   t g dg dg dg}t j|\}}ttt|| d S r  rT   r4   r8   r	   r  r  r%   r   r:  r   r   r\   r\   r]   test_swapped_v_w_errorA  s   z"TestCDF2RDF.test_swapped_v_w_errorc                 C   s0   t dt ddd}}ttt|| d S )Nr   r   r  r  r  r\   r\   r]   test_non_associated_errorG  r  z%TestCDF2RDF.test_non_associated_errorc                 C   s   t g dg dg dg}t j|\}}ttt|| t g dg dg dgg dg dg dgg}t j|\}}ttt|| d S )Nr   r   )rR   r   y      @      r  r  r\   r\   r]   test_not_conjugate_pairsL  s   z$TestCDF2RDF.test_not_conjugate_pairsN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r\   r\   r\   r]   r  
  s    	r  )r_   )F)r  	__usage__r  r9  r8  numpyrT   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.   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   rG   rH   rI   rJ   numpy.randomrK   rL   scipy.linalg._testutilsrM   scipy.sparse._sputilsrN   scipy._lib._testutilsrO   scipy.linalg.blasrP   r-  r^   r/  REAL_DTYPESr0  rS   r  rd   rw   r   r   r   r   r  r{  r  r  r  r  r  r<  r>  rK  rN  r  r  r  r  r;  r<  r  r  r  r  r9  machiner  r  r  r  r  r  r  r:  intpr  r  r  r  r  r  r\   r\   r\   r]   <module>   s     0d
 [  o ] 9    "h7K 3 K#

 
8&: