o
    `^h                    @   sL  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
lQmRZR d dlSmTZT d dlUmVZV d dlWmXZX zd dlYmZZZ W n e[y   dZZY nw ejdkpe\ dv Z]de^fddZ_ejEej`gZaejFejbgZceaec Zddd ZeG dd dZfG dd dZgG dd dZhG dd dZiG dd dZjG d d! d!ZkG d"d# d#ekZlejmjne]d$d%ejmod&d'd( ZpG d)d* d*ZqG d+d, d,ZrG d-d. d.ZsG d/d0 d0ZtG d1d2 d2ZuG d3d4 d4Zvd ZwZxeZdureZd5 d6 d7 ZweZd5 d6 d8 ZxG d9d: d:ZyG d;d< d<ZzG d=d> d>Z{G d?d@ d@Z|dAdB Z}ejmjne\ dCkdDd%dEdF Z~dGdH ZdIdJ ZejmjddKdLdMdN ZG dOdP dPZdbdQdRZejmjejmjneejjdSk dTd%dUdV ZdWdX ZejmdYee^ejEeejFgdZd[ ZG d\d] d]Zd^d_ ZG d`da daZdS )c    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)assert_no_overwrite)matrix)check_free_memory)	HAS_ILP64)CONFIG
emscripten)wasm32wasm64Fc                 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nprandomrandconjTr=   rE   astype)nposdefdtypeA r[   \/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrix,   s    
r]   c                 C   s   t | tr| }||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'.
    rO      r   zinput type not supported.      ?)
isinstanceintrR   rD   lenr?   	TypeErrorr2   rvsrU   rT   r4   )dim_or_eigvrngdimdvhr[   r[   r\   symrandB   s   
	


rk   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zej	d	e
eeeeg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r^   rO      rO         	   ]   rO   r   r
   r=   r   selfa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 )Nrn   rp   rh   rs   rt   rO   r   )r3   rU   copyr
   r=   r   rv   r[   r[   r\   test_simple_trd   s   "zTestEigVals.test_simple_trc                 C   rm   )Nrn   rO   rq   y      @      ?y      "@      ?y      W@      @rO   r   ru   rv   r[   r[   r\   test_simple_complexl   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 )	Nrn   rp   Fcheck_finiters   rt   rO   r   ru   rv   r[   r[   r\   test_finitet   s   "zTestEigVals.test_finitedtc                 C   s~   t jd|d}t|}|jdksJ |jtt jd|djks!J t|dd}|jdks.J |jtt jd|djks=J d S )Nr   r   rY   r   rO   Thomogeneous_eigvalsrO   r   )rQ   emptyr
   r?   rY   rE   )rw   r   rx   ry   r[   r[   r\   
test_emptyz   s   "zTestEigVals.test_emptyN)__name__
__module____qualname__r{   r}   r   r   pytestmarkparametrizera   floatr:   complexr;   r   r[   r[   r[   r\   rl   \   s    rl   c                   @   s   e Zd Zdd Zdd Zdd Zdd Z				d 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deeejeejg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 )Nrn   rp   rs   rt   rO   r   r^   ro         @r   r   r   r^   r   rO   leftright)r3   r	   r=   r0   r   rA   rangerU   	rw   rx   ry   ri   rz   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 )Nr^   rO   r         ?       @y      ?       )r3   r	   r   r   rT   rU   rw   rx   ry   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 )Nrn   r~   r^   r   ro   )r3   r	   r   r   rT   rU   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 )Nr^   r   Tr   r^   r   r   )r	   r   r   r   rQ   inf)rw   rx   bry   r   r[   r[   r\   test_gh_3054   s   
zTestEig.test_gh_3054vIh%<=c                 C   s<  |d urt |t |}}|}nt |}|}tj|j }d|d|}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 qS|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 q|	t|	 }|t| }d
tjd| dd }d
tjd| dd }tt||j }tt||j }t|| || dd|d t	t
|
}tt
|
D ]}t|
d d |f ||< qst|t|j|d tt|t|	t|	  d S )N
Tr   r^   r   rtolatolerr_msggHz>)r   r   r   )r   r   r   y             rN   g|=)tolr   )rB   rQ   rE   r?   r	   r
   r   r   lexsortr   rb   r0   onessizeallrC   real_if_closer7   absimagr@   )rw   rZ   B
atol_homog
rtol_homogr   r   B0msgry   r   wtval1val2r   permpermtlengthbeta_nonzerowhresw_finwt_finr[   r[   r\   _check_gen_eig   sp   

"
 zTestEig._check_gen_eigc                 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 | j||ddd W d    d S 1 sAw   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   g-a=)r   r   )r3   rQ   errstater   rw   rZ   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)r^   r   ro   )rO   r   r   )r   rO   r   )r   r   rO   )r^   r   r   )r   r^   r   r   r   r   ro   ro   ro   r   r   )r4   r3   r8   rE   rQ   blockr   r   )rw   MKDZI3rZ   r   r[   r[   r\   test_falker  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 )	NrO   )r^   r   r   r   )r   r^   r   r   r   )r   r   r^   r   )r   r   r   r^   r^   r[   )omegac1c2rZ   r   r[   r[   r\   matrices&  s   


z)TestEig.test_bad_geneig.<locals>.matricesr   r   d         @)r   )rQ   r   r   r   )rw   r   krZ   r   r[   r[   r\   test_bad_geneig#  s   "zTestEig.test_bad_geneigc                 C   s   t jd}td|}| |d  td|}| || |dd|d  }| |d  |dd|d  }| || d S )N  ro   r   rN   )rQ   rR   RandomStaterk   r   )rw   rf   rZ   r   r[   r[   r\   test_make_eigvals:  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 )Nrn   rp   Fr   rs   rt   rO   r   r^   ro   r   r   r   r   )r	   r=   r3   r0   r   rA   r   r   r[   r[   r\   test_check_finiteH  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.rr   ro   rO   N)rQ   r9   reshapeassert_raises
ValueErrorr	   )rw   rZ   r[   r[   r\   test_not_square_errorY  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.rO         "@ro   N)rE   rQ   r9   r  r  r  r	   r   r[   r[   r\   test_shape_mismatch^  s   zTestEig.test_shape_mismatchc                 C   s   t jg dg dg dg dgdd}t jg dg dg d	g d
gdd}t||\}}t j '}|td t j|ddd sEJ t j|ddd sQJ W d    d S 1 s\w   Y  d S )N)g      (@      <@g      S@g     k@)g      0@g      @@g      T@g      l@)g      8@      D@g      V@g      m@)r  g      L@g      Z@g      o@float64r   )       @      @      $@r  )r   r         &@g      =@)r         @g      *@g      ?@)r	  r  g      1@g     A@z%invalid value encountered in multiplyr  +=r          @)	rQ   r3   r	   testingsuppress_warningsfilterRuntimeWarningiscloseany)rw   rZ   r   r   Vsupr[   r[   r\   test_gh_11577f  s(   

	"zTestEig.test_gh_11577r   c                 C   s   t jd|d}t|\}}tt jd|d\}}|jdksJ |j|jks'J t|t d |jdks6J |j|jks>J t|dd\}}|jdksMJ |j|jksUJ |jdks\J |j|jksdJ d S )Nr   r   rO   r   Tr   r   )rQ   r   r	   rE   r?   rY   r   )rw   r   rx   ry   r   w_nvr_nr[   r[   r\   r     s   zTestEig.test_emptyN)r   r   r   r   )r   r   r   r{   r   r   r   r   r   r   r   r  r  r  r
  r  r   r   r   ra   r   rQ   r:   r   r;   r   r[   r[   r[   r\   r      s$    
	
J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ejdeeejeejgdd ZdS )TestEigBandedc                 C      |    d S N)create_bandmatrw   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`.
   rO         ?r^         r          r   rN         r  Nr   r         ?      ?)KLKUr4   r5   sym_matherm_matreal_matcomp_matr6   r	   realr7   	w_sym_linevec_sym_lin
w_herm_linevec_herm_linr8   r   bandmat_symr   bandmat_hermr   bandmat_realbandmat_compr9   r   bc)rw   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.r^   	compute_vN)r+   r9  r7   r   r@   r5  r   r6  rw   ry   evecinfoevec_r[   r[   r\   
test_dsbev     zTestEigBanded.test_dsbevc                 C   rC  )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.r^   rD  N)r,   r9  r7   r   r@   r5  r   r6  rF  r[   r[   r\   test_dsbevd  rK  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.        r^   rO   rE  r   N)
r?   r0  r-   r9  r7   r   r@   r5  r   r6  rw   r>  ry   rG  numifailrH  rI  r[   r[   r\   test_dsbevx     zTestEigBanded.test_dsbevxc                 C   rC  )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.r^   rD  N)r.   r:  r7   r   r@   r7  r   r8  rF  r[   r[   r\   test_zhbevd	  rK  zTestEigBanded.test_zhbevdc              	   C   rM  )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.rN  r^   rO   rO  N)
r?   r1  r/   r:  r7   r   r@   r7  r   r8  rP  r[   r[   r\   test_zhbevx  rT  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.rO   rr   r   selectselect_ranger^   h㈵>ri   Fr   N)
r   r9  r4  r   r@   r5  r:  r7  rQ   longlong)rw   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. NrO   rr   r   rW  r^   rZ  ri   Fr   )r   r9  r7   r4  r   r@   r5  r   r6  r:  r7  r8  )rw   r\  evec_sym	evec_sym_r]  	evec_herm
evec_herm_r^  r_  r`  evec_sym_indra  evec_herm_indrb  rc  rd  evec_sym_valre  evec_herm_valr[   r[   r\   test_eig_bandedF  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.rO   Nr^   r   	permute_l)
r?   r2  r'   r;  r.  r/  r4   r   r   r   rw   r   r>  lu_symm_bandipivrH  ur   p_linl_linu_linr[   r[   r\   test_dgbtrf     2zTestEigBanded.test_dgbtrfc                 C   rp  )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rO   Nr^   r   rq  )
r?   r3  r)   r<  r.  r/  r4   r   r   r   rs  r[   r[   r\   test_zgbtrf  r{  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'   r;  r.  r/  r(   r   r6   r   r2  r   rw   rt  ru  rH  yy_linr[   r[   r\   test_dgbtrs     zTestEigBanded.test_dgbtrsc                 C   r}  )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r)   r<  r.  r/  r*   r=  r6   r   r3  r   r~  r[   r[   r\   test_zgbtrs  r  zTestEigBanded.test_zgbtrsr   c                 C   s   t jd|d}t|\}}tt jddgddgg|d\}}|jdks%J |j|jks-J |jdks4J |j|jks<J t|dd}|jdksIJ |j|jksQJ d S )Nr   r   r   r^   r   Teigvals_only)rQ   r   r   r3   r?   rY   )rw   r   a_bandry   ri   r  v_nr[   r[   r\   r     s   "zTestEigBanded.test_emptyN)r   r   r   r&  r$  rJ  rL  rS  rU  rV  rf  ro  rz  r|  r  r  r   r   r   ra   r   rQ   r:   r   r;   r   r[   r[   r[   r\   r!    s     Q*:

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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)  r^   r*  r   N)r5   rh   er4   full_matr6   r	   r4  r7   ry   rG  )rw   r>  r?  r@  rA  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   rN   r)  lapack_driverfoor   r   r   rW  )r  r  r"   rh   r  rc   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 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  rX  rY  r  r  r  r   r^   rX  rY  r  rO   rr   rZ  ri   N)	r"   rh   r  r   r@   ry   r  r  rb   )	rw   driverry   w_indr^  r_  rb  rc  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   r^   r  rO   rr   rZ  ri   )r  r  r#   rh   r  r7   r   r@   ry   r   rG  rb   )	rw   r  ry   rG  rI  r^  r_  rb  rc  r[   r[   r\   test_eigh_tridiagonal  sR   


z(TestEigTridiagonal.test_eigh_tridiagonalc                 C   s   t dg}t g }t||dd}|jdksJ t|| t||ddd\}}|jdks/J |jdks6J t|| t|td	gg t||d
dd\}}|jdksUJ |jdks\J |jdkscJ dS )zSee gh-20075r+  Tr  r^   r   r   rW  rO   r)  ri   )r   r   r   r   r   N)rQ   r3   r#   ndimr   r   r?   )rw   rx   r   xr  r[   r[   r\   test_eigh_tridiagonal_1x1/  s   


z,TestEigTridiagonal.test_eigh_tridiagonal_1x1N)	r   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dd Ze	j
dde	j
dddd Zdd Ze	j
deeejeejgdd ZdS )TestEighc                 C   s   t jd d S )Nr  )rQ   rR   seedr%  r[   r[   r\   setup_classC     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 tttddgtddgddgd t tttddgtddgd	dgd t tttddgtddgddgd 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 t tttddgtddgdddgd t tttddgtddgdddgd d S )Nr^   rO   ro      )type)subset_by_valuesubset_by_indexr   r  r   r  wrongr  gvxevrgvd)r  r  )r  r  r   rQ   r   r%  r[   r[   r\   test_wrong_inputsF  s@   ""
zTestEigh.test_wrong_inputsc                 C   s&   t tttddgtddg d S )Nro   )r  r&   r   rQ   r   r%  r[   r[   r\   test_nonpositive_bl  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   rO   r  r^   T)rX   rY   )	enumerateDTYPESr]   r   r   r?   rb   r   )rw   indr   rx   ry   ri   r   r[   r[   r\   test_value_subsetsp  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 )Nr^   rO      ro   rq   )r3   r   )rw   rx   r   ry   zr[   r[   r\   test_eigh_integer}  s   zTestEigh.test_eigh_integerc                 C   s>   dd l }|jd }t|}ttt| ttt| d S )Nr   rO   )	scipy.sparsesparseidentitytocscrQ   
atleast_2dr  r  r   )rw   scipyrx   r   r[   r[   r\   test_eigh_of_sparse  s
   
zTestEigh.test_eigh_of_sparsedtype_r  )r@  evdr  evxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nr  )rW   rY   r  rN    r   r   )r]   r   r   rQ   finfoeps)rw   r  r  rx   ry   ri   r[   r[   r\   test_various_drivers_standard  s   
z&TestEigh.test_various_drivers_standardc                 C   s   t dgg|d\}}t|tdgdd t|tdggdd t dgg|d\}}t|tdgdd t|tdggdd d S )Nr^   r  r)  V瞯<r  rN   r   )r   r   r3   )rw   r  ry   ri   r[   r[   r\   test_1x1_lwork  s   zTestEigh.test_1x1_lworkr  rn   )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)rX   )rx   r   r  r  r^   rN  r  rO   )rQ   spacingr]   r   r   )rw   r  r  r   rx   r   ry   ri   r[   r[   r\    test_various_drivers_generalized  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 )
Nrq   r^   rO   r  )r^   333333??      ?rO   gffffff?r  r  r  )r]   r   r   rb   r   rQ   r4   r3   )rw   rx   ry   w2r   w3r[   r[   r\   test_eigvalsh_new_args  s   
zTestEigh.test_eigvalsh_new_argsr   c                 C   s   t jd|d}t|\}}tt jd|d\}}|jdksJ |j|jks'J |jdks.J |j|jks6J t|dd}t|t d |jdksKJ |j|jksSJ d S )Nr   r   rO   r   Tr  )rQ   r   r   rE   r?   rY   r   )rw   r   rx   ry   ri   r  r  r[   r[   r\   r     s   zTestEigh.test_emptyN)r   r   r   r  r  r  r  r  r  r   r   r   r  r  r  r  r  ra   r   rQ   r:   r   r;   r   r[   r[   r[   r\   r  B  s$    &

r  c                   @   s   e Zd 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ejje ddejjdd Zejdg dejdg dejded d! Zejd"eeejeejgejd#g d$d%d& Zd'S )(TestSVD_GESDDgesddc                 C   s,   t ttdggdd t ttdggdd d S )Nr)  r  r  )r  rc   r   r  r%  r[   r[   r\   r    s   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 )Nrn   r^   r  ro   rp   TFfull_matricesr  ro   r   r   r  r   rU   rE   r8   r?   rY   charr   rb   rw   rx   r  rv  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 )Nrn   rp   r  r  ro   r   r  r  r[   r[   r\   test_simple_singular  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 )Nrn   r  rq   rr   r  r  r   r   r  r   rU   rE   r?   r8   rY   r  r   rb   r  r[   r[   r\   test_simple_underdet  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 )	Nr^   rO   r  rq   ro   r  r  r   r  r  r[   r[   r\   test_simple_overdet  s   z!TestSVD_GESDD.test_simple_overdetc                 C   s   t jd}d}d}tdD ]f}|||g|||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< q^t||
 |	 | q"qqd S )	Nr  r  r   ro   r  r  r^   r   )rQ   rR   r  r   r   r  r   rU   rE   r?   r8   rY   r  rb   )rw   rf   rW   mr   rx   r  rv  r  r  r  r[   r[   r\   test_random  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 )Nrn   )r^   y               @ro   rp   r  r  r^   r   )r   r  r   rT   rU   rE   r?   r8   rY   r  r   rb   r  r[   r[   r\   r     s   z!TestSVD_GESDD.test_simple_complexc              	   C   s   t jd}d}d}tdD ]g}dD ]b}|||g|||gfD ]Q}|d|t|j  }t||| jd\}}}	t|	 j
| t|jd  t|jd |	jd	 f|jj}
tt|D ]
}|| |
||f< q_t||
 |	 | q"qqd S )
Nr  r  r   ro   r  rN   r  r^   r   )rQ   rR   r  r   listr?   r   r  r   rT   rU   rE   r8   rY   r  rb   )rw   rf   rW   r  r   r  rx   rv  r  r  r  r[   r[   r\   test_random_complex   s(    z!TestSVD_GESDD.test_random_complexc                 C   sZ   t jd}g d}|D ]}t jt jt jt jfD ]}|j| |}t	|| j
d qqd S )Nr  ))r   r   )r   2   )<   r   r  )rQ   rR   r  r:   r  r;   
complex128rS   rV   r   r  )rw   rf   sizesszr   rx   r[   r[   r\   test_crash_15804  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 )Nrn   r  rp   F)r   r  ro   r   r  )rw   rx   rv  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?r  rN  rN  rN  )rN  r  r  r  rN  rN  )rN  rN  r  r  r  rN  )rN  rN  rN  r  r  r  r  )rQ   r3   r   r  )rw   r   r[   r[   r\   test_gh_5039G  s   
zTestSVD_GESDD.test_gh_5039z64-bit LAPACK requiredreasonc                 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_mbr^   l        r   r  Fr  r   r)  r   )rH   rQ   r8   r:   r   r   )rw   rZ   rv  r  r  r[   r[   r\   test_large_matrixX  s   
zTestSVD_GESDD.test_large_matrixr  r   r^   rO   rW   rY   c                 C   s8  t j||f|d}t||}|jj}|dv r| n|}t|\}}	}
t|j||f t|j| t|	j|f t|	jt | t|
j||f t|
j| t|dd\}}	}
t|j||f t|j| t|	j|f t|	jt | t|
j||f t|
j| t|dd}	t|	j|f t|	jt | d S )Nr   FDFr  
compute_uv)	rQ   r8   minrY   r  lowerr   r   r?   )rw   r  rW   rY   rx   r   dchar
real_dcharrv  r  ri   r[   r[   r\   test_shape_dtypeb  s*   
zTestSVD_GESDD.test_shape_dtyper   r  rW   r   r   r   c                 C   sF  t jd|d}t|\}}}t j||f|d}t|\}	}
}t|	t | t|
t d t|t | |	j|jks>J |j|jksFJ |
j|jksNJ t|dd\}	}
}t|	t |df t|
t d t|t d|f |	j|jks{J |j|jksJ |
j|jksJ t|dd}
t|
t d |
j|jksJ d S )Nro   r   r   Fr  r   r  )rQ   rE   r   r   r   r  rY   )rw   r   r  rW   a0u0s0r   rx   rv  r  ri   r[   r[   r\   r     s(   zTestSVD_GESDD.test_emptyN)r   r   r   r  r  r{   r  r  r  r  r   r  r  r  r  r   r   skipifrI   slowr  r   r  r   ra   r   rQ   r:   r   r;   r   r[   r[   r[   r\   r    s.    	
r  c                   @   s   e Zd ZdZdS )TestSVD_GESVDgesvdN)r   r   r   r  r[   r[   r[   r\   r    s    r  zout of memory in WASMr  r(  c                  C   sF   t jdt jd} tt t|  W d    d S 1 sw   Y  d S )N)i  i  r   )rQ   r   r  r  r  r   )dfr[   r[   r\   test_svd_gesdd_nofegfault  s   

"r  c                   @   sx   e Zd Zejdeeej	e
ejg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 )TestSVDValsr   c                 C   sj   g gt dt dfD ]&}t j||d}t|}t|t d tt jd|d}|j|jks2J qd S )Nr   r   ro   r   r   rO   )rQ   r   r   r3   r   r   rE   rY   )rw   r   rx   r  r  r[   r[   r\   r     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 )Nrn   rp   ro   r   r^   rO   r   r   rb   rw   rx   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 )Nrn   r  rO   r   r^   r  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 )Nr^   rO   r  rq   ro   r   r  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 )Nrn   )r^   r                @rp   ro   r   r^   rO   r  r  r[   r[   r\   r     r  zTestSVDVals.test_simple_complexc                 C   r  )Nrn   )r  y              @rr   rO   r   r^   r  r  r[   r[   r\   test_simple_underdet_complex  r  z(TestSVDVals.test_simple_underdet_complexc                 C   r  )Nr^   rO   r  rq   r  r   r  r  r[   r[   r\   test_simple_overdet_complex  r  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 )	Nrn   rp   Fr   ro   r   r^   rO   r  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
  )rQ   rR   r  rS   r   rw   rx   r[   r[   r\   test_crash_2609  s   zTestSVDVals.test_crash_2609N)r   r   r   r   r   r   ra   r   rQ   r:   r   r;   r   r{   r  r  r   r  r  r  r  r  r[   r[   r[   r\   r    s    
	r  c                   @      e Zd Zdd ZdS )TestDiagSVDc                 C   s,   t tg dddg dg dg dg d S )Nr^   r   r   ro   r   )r   r   r%  r[   r[   r\   r{     s   zTestDiagSVD.test_simpleN)r   r   r   r{   r[   r[   r[   r\   r        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!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 Z6e7j89dig dje7j89dkg dje7j89dldmdnge7j89doe:dpdq Z;e7j89drg dsdtdu Z<dvdw Z=dxS )yTestQRc                 C   sH   g dg dg dg}t |\}}t|j| td t|| | d S N   rO   ro   rO   rs   ro   rq   ro   rr   ro   r   r   rU   rE   rw   rx   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 )Nr   r"  r#  rn   r   ro   r   r   r   rE   rw   rx   r&  r'  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 )Nr   r"  r#  rn   ro   r)  r*  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 )	Nr   r"  r#  Tpivotingr^   r   ro   
rQ   rB   r   r   r4   r   r   r   rU   rE   rw   rx   r&  r'  prh   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 )Nr   r"  r#  Tr0  rn   r   r   r   r   rw   rx   r&  r'  jpvtr+  r,  r[   r[   r\   test_simple_left_pivoting  
   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 )Nr   r"  r#  Tr0  rn   r7  r8  r[   r[   r\   test_simple_right_pivoting  r;  z!TestQR.test_simple_right_pivotingc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr   r"  rO   r$  r%  r[   r[   r\   test_simple_trap&     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 )Nr   r"  Tr0  r^   r   rO   r2  r3  r[   r[   r\   test_simple_trap_pivoting,  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!  rO   rs   rq   ro   r$  r%  r[   r[   r\   test_simple_tall7  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!  rO   rs   rq   ro   Tr0  r^   r   r2  r3  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!  rO   rs   rq   ro   economicmodero   rO   rO   rO   r   r   rU   rE   r   r?   r%  r[   r[   r\   test_simple_tall_eJ  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!  rO   rs   rq   ro   TrC  r1  rE  r^   r   rD  r2  r3  r[   r[   r\   test_simple_tall_e_pivotingS  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!  rO   rs   rq   ro   rC  rD  r^   r   r^   rO   r   Toverwrite_cr   r   r   r3   rE   r*  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!  rO   rs   rq   ro   rC  TrE  r1  r^   r   )r   r   r   r   rE   )rw   rx   r&  r'  r9  r+  r,  kpvtr[   r[   r\   test_simple_tall_left_pivotingl  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!  rO   rs   rq   ro   rC  rD  rn   r)  rw   rx   r&  r'  r+  cqr-  r[   r[   r\   test_simple_tall_rightv  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!  rO   rs   rq   ro   TrC  rJ  rn   r0  r)  rw   rx   r&  r'  r9  r+  rV  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!  rO   rq   r"  rO   rG  rO   ro   rH  r%  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 )
NrZ  r"  Tr0  r^   r   rO   rG  r[  rQ   rB   r   r   r4   r   r   r   rU   rE   r   r?   r3  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 )Nr   rO   rs   rq   rC  rD  rO   rG  r[  rH  r%  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 )Nr   r_  TrC  rJ  r^   r   rO   rG  r[  rD  r]  r3  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 )Nr   r_  rC  rD  r^   rO   r   r)  r*  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 )	Nr   r_  rC  TrR  r^   rO   r   r)  r8  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 )Nr   r_  rC  rD  r^   rO   r)  rU  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 )	Nr   r_  TrC  rJ  r^   rO   r0  r)  rX  r[   r[   r\   test_simple_fat_right_pivoting  rd  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ro         @      @rq   rq   rO   y       @      @ro   rO   r  ro   )r   r   rT   rU   rE   r%  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 )Nrh  rj  rk  r^   rO   ri  r   ro   r)  rw   rx   r&  r'  r+  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 )Nrh  rj  rk  rm  ro   r)  rn  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       @      @rO   rs   y      @      @ro   rC  rD  r^          @       @r   rL  TrM  rO  r*  r[   r[   r\   test_simple_tall_complex_left  rQ  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 )Nrh  rj  rk  rm  r   T	conjugater   r   r   rT   rn  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 )Nro   ri  rq   rq  rO   rC  rD  r^   r   Trs  ru  rn  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 )Nrh  rj  rk  rm  Trs  )r   rQ   r3   r   r   rT   rn  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 )	Nrh  rj  rk  Tr0  r^   r   ro   )r3   r   r   r4   r   rQ   r   r   rT   rU   rE   r3  r[   r[   r\   test_simple_complex_pivoting  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 )Nrh  rj  rk  Tr0  rm  r   r3   r   r   r   r8  r[   r[   r\   !test_simple_complex_left_pivoting"  
   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 )Nrh  rj  rk  Tr0  rm  rz  r8  r[   r[   r\   "test_simple_complex_right_pivoting)  r|  z)TestQR.test_simple_complex_right_pivotingc                 C   s^   t jd}d}tdD ] }|||g}t|\}}t|j| t| t|| | qd S Nr  r  rO   rQ   rR   r  r   r   r   rU   rE   rw   rf   rW   r   rx   r&  r'  r[   r[   r\   r  0     zTestQR.test_randomc           	      C   s   t jd}d}tdD ]3}|||g}t|\}}||g}t||d\}}t|| | t|t|d\}}t|| qd S )Nr  r  rO   r   rQ   rR   r  r   r   r   r   rE   	rw   rf   rW   r   rx   r&  r'  r+  r,  r[   r[   r\   test_random_left9  s   zTestQR.test_random_leftc           	      C   s   t jd}d}tdD ]1}|||g}t|\}}||g}t||\}}t|| | t|t|\}}t|| qd S r~  r  	rw   rf   rW   r   rx   r&  r'  r+  rV  r[   r[   r\   test_random_rightE  s   zTestQR.test_random_rightc                 C   s   t jd}d}tdD ]V}|||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  rO   Tr0  r^   r   rQ   rR   r  r   r   r   r4   r   r   r   rU   rE   rw   rf   rW   r   rx   r&  r'  r4  rh   r5  r-  r[   r[   r\   test_random_pivotingQ  s   "
zTestQR.test_random_pivotingc                 C   b   t jd}d}d}tdD ] }|||g}t|\}}t|j| t| t|| | qd S Nr     r   rO   r  rw   rf   r  rW   r   rx   r&  r'  r[   r[   r\   test_random_tall_  s   zTestQR.test_random_tallc           
      C   s   t jd}d}d}tdD ]5}|||g}t|dd\}}||g}t||d\}	}t|| |	 t|t|d\}	}t|	| qd S )Nr  r  r   rO   rC  rD  r   r  )
rw   rf   r  rW   r   rx   r&  r'  r+  r,  r[   r[   r\   test_random_tall_leftj  s   zTestQR.test_random_tall_leftc           
      C   s   t jd}d}d}tdD ]3}|||g}t|dd\}}||g}t||\}	}t|| |	 t|t|\}	}t|	| qd S Nr  r  r   rO   rC  rD  r  )
rw   rf   r  rW   r   rx   r&  r'  r+  rV  r[   r[   r\   test_random_tall_rightx  s   zTestQR.test_random_tall_rightc                 C      t jd}d}d}tdD ]V}|||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  r   rO   Tr0  r^   r   r  rw   rf   r  rW   r   rx   r&  r'  r4  rh   r5  r-  r[   r[   r\   test_random_tall_pivoting  s   "
z TestQR.test_random_tall_pivotingc                 C   s   t jd}d}d}tdD ]2}|||g}t|dd\}}t|j| t| t|| | t|j	||f t|j	||f qd S r  )
rQ   rR   r  r   r   r   rU   rE   r   r?   r  r[   r[   r\   test_random_tall_e  s   zTestQR.test_random_tall_ec                 C   s   t jd}d}d}tdD ]i}|||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  r   rO   TrC  rJ  r^   r   rD  )rQ   rR   r  r   r   r   r4   r   r   r   rU   rE   r   r?   r  r[   r[   r\   test_random_tall_e_pivoting  s    "
z"TestQR.test_random_tall_e_pivotingc                 C   r  Nr  r   r  rO   r  r  r[   r[   r\   test_random_trap     zTestQR.test_random_trapc                 C   r  )	Nr  r   r  rO   Tr0  r^   r   r  r  r[   r[   r\   test_random_trap_pivoting  s   "
z TestQR.test_random_trap_pivotingc                 C   st   t jd}d}tdD ]+}|||gd|||g  }t|\}}t| j| t| t|| | qd S Nr  r  rO   rN   )	rQ   rR   r  r   r   r   rT   rU   rE   r  r[   r[   r\   r        zTestQR.test_random_complexc           	      C   s   t jd}d}tdD ]D}|||gd|||g  }t|\}}||gd||g  }t||d\}}t|| | t|t|d\}}t|| qd S )Nr  r  rO   rN   r   r  r  r[   r[   r\   test_random_complex_left  s    zTestQR.test_random_complex_leftc           	      C   s   t jd}d}tdD ]B}|||gd|||g  }t|\}}||gd||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   t jd}d}tdD ]a}|||gd|||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  rO   rN   Tr0  r^   r   )rQ   rR   r  r   r   r   r4   r   r   r   rT   rU   rE   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 Nr   r"  r#  Fr   ro   r$  r%  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 )Nr   r"  r#  )lworkro   r(  r   r  r   rO   )r   r   r  	Exception)
rw   rx   r&  r'  r5  r-  q3r3q4r4r[   r[   r\   
test_lwork  s   





zTestQR.test_lworkr  r  rW   r1  FTrY   c                 C   sP  t ||}tj||f|d}t||d^}}}	t|j||f t|j| t|j||f t|j| t|	|r:dndks?J |rR|	\}
t|
j|f t|
jtj t|d|d^}}	t|j||f t|j| t|	|rpdndksuJ |r|	\}
t|
j|f t|
jtj t|d|d^}}}	t|j||f t|j| t|j||f t|j| t|	|rdndksJ |r|	\}
t|
j|f t|
jtj t|d|d^\}}}}	t|j||f t|j| t|j|f t|j| t|j||f t|j| t|	|r
dndksJ |r&|	\}
t|
j|f t|
jtj d S d S )	Nr   r0  r^   r   r'  rR  rC  raw)	r  rQ   r8   r   r   r?   rY   rb   int32)rw   r  rW   r1  rY   r   rx   r&  r'  otherr4  r  taur[   r[   r\   r     sV   
zTestQR.test_shape_dtyper  r  c           
      C   s:  t ||}t||f}t|\}}t|t| t|t||f t|dd\}}}t|t| t|t||f t|t| t|dd\}t|t||f t|dd\}}t|t||f t|t||f t|dd\\}}	}t|t||f t|	t|f t|t||f d S )NTr0  r'  rD  rC  r  )r  rQ   r   r   r   r  r9   )
rw   r  rW   r   rx   r&  r'  r4  r  r  r[   r[   r\   r   O  s$   
zTestQR.test_emptyc                 C   s   t d}t d}t||\}}t|t d t d}t d}t||\}}t|t d t d}t d}t||\}}t|t d d S )Nr   r   r   )rQ   r   r   r   )rw   rx   r+  rV  r'  r[   r[   r\   test_multiply_emptyi  s   





zTestQR.test_multiply_emptyN)>r   r   r   r{   r.  r/  r6  r:  r<  r=  r?  rA  rB  rI  rK  rP  rT  rW  rY  r\  r^  r`  ra  rb  rc  re  rf  r   ro  rp  rr  rv  rw  rx  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    sz    

	

			
	
				
	0
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ejdg dejdg dejdedd  Zejd!g d"d#d$ Zd%S )&TestRQc                 C   sH   g dg dg dg}t |\}}t||j td t|| | d S r  r   r   rU   rE   rw   rx   r'  r&  r[   r[   r\   r{   {  r(  zTestRQ.test_simplec                 C   s<   g dg dg dg}t |\}}t |dd}t|| d S )Nr   r"  r#  r'  rD  )r   r   )rw   rx   r'  r&  r-  r[   r[   r\   test_r  s   zTestRQ.test_rc                 C   s^   t jd}d}tdD ] }|||g}t|\}}t||j t| t|| | qd S r~  rQ   rR   r  r   r   r   rU   rE   rw   rf   rW   r   rx   r'  r&  r[   r[   r\   r    r  zTestRQ.test_randomc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr   r"  ro   r  r  r[   r[   r\   r=    r>  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 r@  r  r  r[   r[   r\   rA    r(  zTestRQ.test_simple_tallc                 C   sB   g dg dg}t |\}}t||j td t|| | d S )NrZ  r"  ro   r  r  r[   r[   r\   r\    r>  zTestRQ.test_simple_fatc                 C   sL   g dg dg dg}t |\}}t|| j td t|| | d S rg  )r   r   rT   rU   rE   r  r[   r[   r\   r     rl  zTestRQ.test_simple_complexc                 C   b   t jd}d}d}tdD ] }|||g}t|\}}t||j t| t|| | qd S r  r  rw   rf   r  rW   r   rx   r'  r&  r[   r[   r\   r    r  zTestRQ.test_random_tallc                 C   r  r  r  r  r[   r[   r\   r    r  zTestRQ.test_random_trapc                 C   s   t jd}d}d}tdD ]2}|||g}t|dd\}}t||j t| t|| | t|j	||f t|j	||f qd S )Nr  r   r  rO   rC  rD  )
rQ   rR   r  r   r   r   rU   rE   r   r?   r  r[   r[   r\   test_random_trap_economic  s   z TestRQ.test_random_trap_economicc                 C   st   t jd}d}tdD ]+}|||gd|||g  }t|\}}t|| j t| t|| | qd S r  )	rQ   rR   r  r   r   r   rT   rU   rE   r  r[   r[   r\   r    r  zTestRQ.test_random_complexc                 C   s   t jd}d}d}tdD ]=}|||gd|||g  }t|dd\}}t|| j t| t|| | t	|j
||f t	|j
||f qd S )Nr  r   r  rO   rN   rC  rD  )rQ   rR   r  r   r   r   rT   rU   rE   r   r?   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_finiter  r  rW   rY   c                 C   s   t ||}tj||f|d}t|\}}t|j||f t|j||f t|j| t|j| t|dd}t|j||f t|j| t|dd\}}t|j||f t|j| t|j||f t|j| d S )Nr   r'  rD  rC  )r  rQ   r8   r   r   r?   rY   )rw   r  rW   rY   r   rx   r'  r&  r[   r[   r\   r     s   
zTestRQ.test_shape_dtyper  r  c                 C   s   t ||}t||f}t|\}}t|t||f t|t| t|dd}t|t||f t|dd\}}t|t||f t|t||f d S )Nr'  rD  rC  )r  rQ   r   r   r   r  )rw   r  rW   r   rx   r'  r&  r[   r[   r\   r     s   
zTestRQ.test_emptyN)r   r   r   r{   r  r  r=  rA  r\  r   r  r  r  r  r  r  r   r   r   r  r   r   r[   r[   r[   r\   r  z  s(    	

	r  c                   @   sx  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ejdeeejeejgdd Zejdddgejdddgejdejejejejgdd Zejdddgejdejejejejg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   rT   rU   rQ   rE   rb   )rw   rx   trv  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!     ro   r"  r(  ro   rr   r  +<r   r   r   )r   r  r   rQ   r  r<   r>   r   )rw   rx   r  r  tczctc2zc2r[   r[   r\   r{     s   (zTestSchur.test_simplezsort, expected_diaglhprO         r_   rhpiucoucc                 C   s   | dkS )NrN  r[   )r  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)  r*  g      g      r*  r)  r	        @      g      @r  r  r,        @r@   r  r  r  -q=r   rO   )r   r  r   rQ   r4   r   )rw   r@   expected_diagrx   r  rv  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  r^   )r  r  r   r  r[   r[   r\   test_sort_errors4  s   zTestSchur.test_sort_errorsc                 C   sB   g dg dg dg}t |dd\}}t|| | j | d S )Nr  r"  r  Fr   )r   r   rT   rU   )rw   rx   r  r  r[   r[   r\   r  <  s   zTestSchur.test_check_finiter   c                 C   s   t jd|d}t|\}}tt jd|d\}}t|t d t|t d |j|jks0J |j|jks8J t|dd\}}}t|t d t|t d t|d |j|jks^J |j|jksfJ d S )Nr   r   rO   r  r  r   )rQ   r   r   rE   r   rY   r   )rw   r   rx   r  r  t0z0r  r[   r[   r\   r   A  s   
zTestSchur.test_emptyr@   outputr4  r   rY   c                 C   sV   t ddgddgg}t||||dd }|dkr!|dks)J |dks'J d S d S )N皙?r   rO   r@   r  r   r  r   )rQ   rB   r   rV   )rw   r@   r  rY   rZ   r  r[   r[   r\   test_gh_13137_sort_strR  s   (z TestSchur.test_gh_13137_sort_strc                    sx   t ddgddgg}|dko|t jt jhv  d
 fdd	}t||||dd } r2|dks:J |d	ks8J d S d S )Nr  r   rO   r4  c                    s^    rt | r	J |d urt |sJ | |d  }nt | s"J |d u s(J | }|jdkS )NrN   r  )rQ   iscomplexobjisrealr   )r  r  r  all_realr[   r\   r@   y  s   
z1TestSchur.test_gh_13137_sort_custom.<locals>.sortr  r   r^   r#  )rQ   rB   r:   r  r   rV   )rw   r  rY   rZ   r@   r  r[   r  r\   test_gh_13137_sort_customh  s
   $z#TestSchur.test_gh_13137_sort_customN)r   r   r   r  r{   r   r   r   rQ   r=   r  r  r  ra   r   r:   r   r;   r   r  r  r  r  r[   r[   r[   r\   r    s8    	
 

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
ejdeeeeeg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@r^   calc_qr  decimalr   r   rU   rw   rx   h1rj   r&  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  r^   r  )r   r   rT   rU   rw   rx   rj   r&  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)r^   rO   ro   r  rq   rr   r  )r   rO   ro   r  rr   r  rO   )r   rO   rO   ro   r   ro   rO   )r   r   rO   r!  r   r   rO   )r   ro   r^   rO   r   r^   rO   )r   r^   rO   ro   r   r^   r   )r   r   r   r   r   r^   rO   r^   r  r  r  r[   r[   r\   test_simple2  s   zTestHessenberg.test_simple2c                 C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nro   rO   )r   r   r^   r  )rQ   rE   r   r   rU   r  r[   r[   r\   test_simple3  s   
zTestHessenberg.test_simple3c                 C   sT   t jd}d}tdD ]}|||g}t|dd\}}t|j| | | qd S )Nr  r  rO   r^   r  )rQ   rR   r  r   r   r   rU   rw   rf   rW   r   rx   rj   r&  r[   r[   r\   r    s   zTestHessenberg.test_randomc                 C   sj   t jd}d}tdD ]&}|||gd|||g  }t|dd\}}t| j| | | qd S )Nr  r  rO   rN   r^   r  )rQ   rR   r  r   r   r   rT   rU   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  r^   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 )
NrO   r^   r  r  r  y       @      r   y      @      @y      (@       )r   r   rQ   rE   )rw   rx   rj   r&  r   h2r5  r[   r[   r\   test_2x2  s   
zTestHessenberg.test_2x2r   c                 C   s   t jd|d}t|}|jdksJ |jtt jd|djks!J t|dd\}}t|dd\}}|jdks8J |j|jks@J |jdksGJ |j|jksOJ d S )Nr   r   ro   Tr  )rQ   r   r   r?   rY   rE   )rw   r   rx   rj   r&  h3r  r[   r[   r\   r     s   zTestHessenberg.test_emptyN)r   r   r   r{   r   r  r  r  r  r  r  r   r   r   ra   r   r:   r   r;   r   r[   r[   r[   r\   r    s    r  zBuild Dependenciesblasnameversionc                   @   sD   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S )TestQZc           	      C   s   t jd}d}|||g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 )N90  rq   r  r   )rQ   rR   r  rV   r:   r   r   rU   rE   r   r   r4   	rw   rf   rW   rZ   r   AABBQr   r[   r[   r\   test_qz_single  s   zTestQZ.test_qz_singlec           	      C   s   t jd}d}|||g}|||g}t||\}}}}t|| |j | t|| |j | t||j t| t||j t| tt t	|dk d S )Nr  rq   r   
rQ   rR   r  r   r   rU   rE   r   r   r4   r  r[   r[   r\   test_qz_double  s   zTestQZ.test_qz_doublec           	      C   s   t jd}d}|||gd|||g  }|||gd|||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   rN   r   )rQ   rR   r  r   r   rT   rU   rE   r   r   r4   r   r  r[   r[   r\   test_qz_complex	  s     zTestQZ.test_qz_complexc           	      C   s  t jd}d}|||gd|||g  t}|||gd|||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   rN   r  r   )rQ   rR   r  rV   r;   r   r   rT   rU   rE   r   r   r4   r   r  r[   r[   r\   test_qz_complex64	  s   &&zTestQZ.test_qz_complex64c                 C   s   t jd}d}|||g}|||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  rq   r   )r  r   )rQ   rR   r  r   rT   rU   r   r4  r   rE   r   r   r4   )rw   rf   rW   rZ   r   r  r  r  r   aabbr[   r[   r\   test_qz_double_complex 	  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      @)r  r       Er  )皙@r        Gr  )r)  r)  r,  r)  )r)  r   g      r  )r)  r  r  r)  )r  r   r  r  c                 S   s   |dkS )Nr   r[   )araibetar[   r[   r\   r  H	  r  z,TestQZ.test_qz_double_sort.<locals>.<lambda>r  )	rQ   r3   r  r  r   r   r   rU   r   )rw   rZ   r   r  r  r  r   r  r[   r[   r\   test_qz_double_sort0	  s   

zTestQZ.test_qz_double_sortc           	      C   s   t jd}d}|||g}|||g}t||dd\}}}}t|| |j | t|| |j | t||j t| t||j t| tt t	|dk d S )Nr  rq   Fr   r   r  r  r[   r[   r\   r  	  s   zTestQZ.test_check_finiteN)
r   r   r   r  r	  r
  r  r  r  r  r[   r[   r[   r\   r    s    cr  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              )rN   y333333@y              y      @      )r  r  r  r  r  )r  r  r  r  )r  g      :@r  r  )r^   rO   r^   )r^   ro   r  )r^   ro   ro   )r^   ro   r  r  )r   r)  r   r   )r  r  r  r  )r  r  r)  r   )rN  r  r  r  )r  r  r  r  )r  r  r  r	  )r	  r)  r  r  )r   r)  r  r  rO   r   r^   )rQ   r3   rE   r4   rZ   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>)rQ   r   ziprZ   r   tuple)rw   r@   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   r^   rO   T)rQ   rE   r?   r   rU   rT   r   trilr8   r   r	   r   r   r   r1   r3   )rw   rZ   r   r@   r  r  alphar  r  r   Idr   evals_tmpsortfunlastsortcursortr[   r[   r\   check	  s@   &> ,"
zTestOrdQZ.checkc                 C   s@   |  |}t|| j| jD ]\}}}| j|||g|R   qd S r#  )r2  r/  rZ   r   r<  )rw   r@   r1  retir,  r-  r[   r[   r\   	check_all
  s   
zTestOrdQZ.check_allc                 C      |  d d S )Nr  r>  r%  r[   r[   r\   test_lhp
     zTestOrdQZ.test_lhpc                 C   r?  )Nr  r@  r%  r[   r[   r\   test_rhp
  rB  zTestOrdQZ.test_rhpc                 C   r?  )Nr  r@  r%  r[   r[   r\   test_iuc
  rB  zTestOrdQZ.test_iucc                 C   r?  )Nr  r@  r%  r[   r[   r\   test_ouc
  rB  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rQ   
empty_likeboolr   r  r  outnonzeror[   r[   r\   r@   
  
   
z TestOrdQZ.test_ref.<locals>.sortr@  rw   r@   r[   r[   r\   test_ref
     zTestOrdQZ.test_refc                 C   rF  )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S rG  rH  rK  r[   r[   r\   r@   *
  rN  z TestOrdQZ.test_cef.<locals>.sortr@  rO  r[   r[   r\   test_cef(
  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 )Nr^   rO   r  r  )r   rZ   r   r<  )rw   r1  r[   r[   r\   test_diff_input_types3
  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 )NrO   r   r_   r  r  r  r  r  y             ?y      ?      ?yٿɿ      ?      r   r^   r  )	rQ   rE   r4   r   nanr/  r   rI  r   )rw   r!  r"  	expected1r#  r$  	expected2r%  r&  	expected3r'  r(  	expected4r)  B5	expected5rZ   r   expectedr,  r-  	expectedisortstrexpected_eigvalsr7  r4  r  azerobzeror  r[   r[   r\   test_sort_explicit:
  s\   












zTestOrdQZ.test_sort_explicitN)r   r   r   classmethodr  r2  r<  r>  rA  rC  rD  rE  rP  rR  rS  rb  r[   r[   r[   r\   r  	  s    
6.r  c                   @   s0   e Zd Zejddd Zejjdd ZdS )TestOrdQZWorkspaceSizerq   c                 C   s   t jd}d}t jt jfD ] }|||f|}|||f|}t||dd dd}qt jt jfD ] }|||f|}|||f|}t||dd dd}q5d S )	Nr     c                 S      | |k S r#  r[   r4  r  r[   r[   r\   r  t
  r  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>r4  r  c                 S   rf  r#  r[   rg  r[   r[   r\   r  z
  r  r   )	rQ   rR   r  r:   r  rV   r   r  r;   )rw   rf   r>  ddtyperZ   r   r7  r[   r[   r\   test_decomposek
  s   z%TestOrdQZWorkspaceSize.test_decomposec                 C   sp   t jd}d}t jt jt jt jfD ]#}|||f|}|||f|}t||dd\}}}}	}
}qd S )Nr  re  r  r  )	rQ   rR   r  r:   r  r  r;   rV   r   )rw   rf   r>  rh  rZ   r   SrU   r4  r  Ur  r[   r[   r\   test_decompose_ouc}
  s   z)TestOrdQZWorkspaceSize.test_decompose_oucN)	r   r   r   r   r   	fail_slowri  r  rl  r[   r[   r[   r\   rd  j
  s
    

rd  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   )_datacopiedr^   rO   ro   c                       s   e Zd Zd fdd	ZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1Nc                    s    S r#  r[   )rw   rY   r|   rZ   r[   r\   	__array__
  s   z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__)NN)r   r   r   rq  r[   rp  r[   r\   Fake1
  s    rr  c                       s   e Zd Z jZdS )z-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   __array_interface__r[   rp  r[   r\   Fake2
  s    
rt  FTr   )scipy.linalg._decompro  rG   rB   tolistr|   r   repr)rw   ro  r   LM2rr  rt  F1F2itemstatusarrr[   rp  r\   test_datacopied
  s"   zTestDatacopied.test_datacopiedN)r   r   r   r  r[   r[   r[   r\   rn  
  r  rn  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   rO   r   offsetcountrY   r(  r(  Toverwrite_aN)	r9   rQ   uint8
frombufferdatar:   r?   r	   rU   rx   r  r[   r[   r\   test_aligned_mem_float
  s
   r  ppc64lezcrashes on ppc64lec                  C   r  )
z4Check linalg works with non-aligned memory (float64)i$  r   r  r   r  r  Tr  N)	r9   rQ   r  r  r  r   r?   r	   rU   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)	r8   rQ   r  r  r  r   r?   r	   rU   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  .r^   )r  r   rb   r`   rQ   rD   r8   r   rY   itemsizer  r  r  r?   rU   )funcrA  kwargsr   rx   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  )rQ   rE   r   r9   r?   r  r  r  r   r   r	   dictr
   r   r   r   r   r   r   r   r   r   r   r  )	r   Rrj  r   LUpivr  rA  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   )rF   r	   r%  r[   r[   r\   test_eig     zTestOverwrite.test_eigc                 C   r  r  )rF   r   r%  r[   r[   r\   	test_eigh  r  zTestOverwrite.test_eighc                 C      t tdg d S NrF  )rF   r   r%  r[   r[   r\   ro  
  r  zTestOverwrite.test_eig_bandedc                 C   r  r  )rF   r
   r%  r[   r[   r\   test_eigvals  r  zTestOverwrite.test_eigvalsc                 C   r  r  )rF   r   r%  r[   r[   r\   test_eigvalsh  r  zTestOverwrite.test_eigvalshc                 C   r  r  )rF   r   r%  r[   r[   r\   rf    r  z!TestOverwrite.test_eigvals_bandedc                 C   r  r  )rF   r   r%  r[   r[   r\   test_hessenberg  r  zTestOverwrite.test_hessenbergc                 C   r  r  )rF   r   r%  r[   r[   r\   test_lu_factor  r  zTestOverwrite.test_lu_factorc                    s<   t g dg dg dg}t| t fdddg d S )Nrn   r  )r  r!  r!  c                    s
   t  | S r#  )r   )r   xlur[   r\   r       
 z-TestOverwrite.test_lu_solve.<locals>.<lambda>)ro   )rQ   r3   r   rF   )rw   r  r[   r  r\   test_lu_solve  s   zTestOverwrite.test_lu_solvec                 C   r  r  )rF   r   r%  r[   r[   r\   test_lu!  r  zTestOverwrite.test_luc                 C   r  r  )rF   r   r%  r[   r[   r\   test_qr$  r  zTestOverwrite.test_qrc                 C   r  r  )rF   r   r%  r[   r[   r\   test_rq'  r  zTestOverwrite.test_rqc                 C   r  r  )rF   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   rx   r[   r[   r\   r  .  r  z2TestOverwrite.test_schur_complex.<locals>.<lambda>r   )dtypes)rF   rQ   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  3  s    z(TestOverwrite.test_svd.<locals>.<lambda>)rF   r   r%  r[   r[   r\   test_svd1  s   zTestOverwrite.test_svdc                 C   r  r  )rF   r   r%  r[   r[   r\   test_svdvals5  r  zTestOverwrite.test_svdvalsN)r   r   r   r  r  ro  r  r  rf  r  r  r  r  r  r  r  r  r  r  r[   r[   r[   r\   r    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}|| d|d|  }|d|| d |d|   }||}t|d	d
}t|j| df t|dd
}t|j| df d S d S d S )NrO   r   r  r^   r  rO   r^   rq   -C6?MbP?rcondư>rr   )rQ   r   r   rV   r  r  r   r   r?   r   meanrU   rR   r  rS   )rW   rY   skip_bigXr  r   Yrf   r[   r[   r\   _check_orth9  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  rQ   r  MemoryErrorAssertionError)rW   r  r[   r[   r\   test_orth_memory_efficiencyT  s   r  c                  C   s@   t jt jt jt jg} g d}t| |D ]	\}}t|| qd S )Nr^   rO   ro   r(  r   )rQ   r:   r  r;   r  	itertoolsproductr  )r  r  r   rW   r[   r[   r\   	test_orthe  s
   r  r   c                 C   sJ   t jd| d}t jd| d}t|}|jt|jksJ |jdks#J d S Nr   r   rO   )rQ   r   rE   r   rY   r?   )r   rx   r  oar[   r[   r\   test_orth_emptyk  s
   r  c                   @   sv   e Zd Zdd Zejdeee	j
ee	jgdd Zejdddgejd	ddgejd
ddgdd ZdS )TestNullSpacec           
      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 |d|d  |}t|}	t|	j||d |d  f t||	 d|d |d	krt jd}||d	|d	| }|d
||d |d|  }||}t|dd}	t|	j||d	 f t|dd}	t|	j||d f qd S )Nr^   r  rO   r   r  r   r  r  rq   r  r  r  r  rr   )rQ   rR   r  r:   r  r;   r  r  r  r   r  r  r$   r   r?   r   rU   randnrS   rV   )
rw   rf   r  r  r   rW   r  r  r   r  r[   r[   r\   test_null_spacev  s8   
 
zTestNullSpace.test_null_spacer   c                 C   sJ   t jd|d}t jd|d}t|}|jdksJ |jt|jks#J d S r  )rQ   r   rE   r$   r?   rY   )rw   r   rx   r  nsar[   r[   r\   test_null_space_empty  s
   z#TestNullSpace.test_null_space_emptyr  TFr   r  r  r	  c                 C   s^   t jd}d}|d|d  |f}t| |||d}t|| dt |jj	d d d S )	Nl   'YeN r(  r^   rO   )r  r   r  r   r   r  )
rQ   rR   default_rngstandard_normalr$   r|   r   r  rY   r  )rw   r  r   r  rf   rW   r  r  r[   r[   r\   test_null_space_options  s   $z%TestNullSpace.test_null_space_optionsN)r   r   r   r  r   r   r   ra   r   rQ   r:   r   r;   r  r  r[   r[   r[   r\   r  u  s    %
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 td}td}tt||td td}td}tt||td td}td}tt||td d S ) Nr!  ro   r  r  r  r^   )g4?gVRf?g8!@g6?)gN$ЗW?gJg~'@g3:]$)gvMg ۿgPT#ge,?)g΀?g+?gNG@gS<ʿg"	?rO   r   r  r  gL0?gĹ-?gyv?r   r  )r   r^   r   )r   r   r^   r   r-  rT  rN  r   r   r   r   r  )r!   r   r   r    rQ   pir8   r?   r3   r  r  r   )HrZ   r   r  r\  rx   r   r[   r[   r\   test_subspace_angles  s~   
  0022220







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S )TestCDF2RDFc                 C   s   t d||S )Nz...ij,...jk->...ik)rQ   einsum)rw   rx   r   r[   r[   r\   matmul  rB  zTestCDF2RDF.matmulc                 C   s   t | ||| || d S r#  )r   r  )rw   ry   ri   r  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   )rQ   r   r%   r  rw   r  ry   ri   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 )Nr^   rO   ro   r   rQ   r3   r6   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 )Nr^   rO   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 )Nrn   rp   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 Nrn   )r   r  rq   )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 )Nr^   r  iɚ;r   )	r   rQ   rR   r  rS   r6   r	   r%   r  rw   r   r  ry   ri   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 )Nr^   r  r(  )r   rQ   rR   rS   r6   r	   r%   r  r  r[   r[   r\   test_random_2d_stacked_arrays(  s   z)TestCDF2RDF.test_random_2d_stacked_arraysc                 C   s(   t dt d}}ttt|| d S )Nr[   )rO   )rQ   r   r3   r  r  r%   rw   ry   ri   r[   r[   r\   test_low_dimensionality_error0  s   z)TestCDF2RDF.test_low_dimensionality_errorc                 C   s0   t dt ddd}}ttt|| d S )Nro   rr   rO   rQ   r9   r  r  r  r%   r  r[   r[   r\   r  4     z!TestCDF2RDF.test_not_square_errorc                 C   s>   t g dg dg dg}t j|\}}ttt|| d S r  rQ   r3   r6   r	   r  r  r%   rw   r  ry   ri   r[   r[   r\   test_swapped_v_w_error9  s   z"TestCDF2RDF.test_swapped_v_w_errorc                 C   s0   t dt ddd}}ttt|| d S )Nro   r   r  r  r  r[   r[   r\   test_non_associated_error?  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 )Nrn   r~   )rO   rq   y      @      r  r  r[   r[   r\   test_not_conjugate_pairsD  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  )F)r  platformsysnumpyrQ   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/   scipy.linalg._miscr0   scipy.linalg._decomp_qzr1   scipy.statsr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   scipy.linalg._testutilsrF   scipy.sparse._sputilsrG   scipy._lib._testutilsrH   scipy.linalg.blasrI   scipy.__config__rJ   ImportErrormachineIS_WASMr   r]   r  REAL_DTYPESr  rP   r  rk   rl   r   r!  r  r  r  r  r   r  rm  r  r  r  r  r  r  r  blas_providerblas_versionr  r  rd  rn  r  r  r  r  xfailr  r  r  r  rY   intpr  r  r  r   ra   r   r  r  r  r  r[   r[   r[   r\   <module>   s     ,T*    *   P
>       \
 4 K

 
8
	;E