o
    i                    @   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)CONFIGZ
emscripten)Zwasm32Z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 rX   X/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/linalg/tests/test_decomp.py_random_hermitian_matrix,   s    
rZ   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'.
    rL      r   zinput type not supported.      ?)
isinstanceintrO   rD   lenr?   	TypeErrorr2   ZrvsrR   rQ   r4   )Zdim_or_eigvrngdimdvhrX   rX   rY   symrandB   s   
	


rf   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[   rL      rL         	   ]   rL   r   r
   r=   r   selfawexact_wrX   rX   rY   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 )Nri   rk   rc   rn   ro   rL   r   )r3   rR   copyr
   r=   r   rq   rX   rX   rY   test_simple_trd   s   "zTestEigVals.test_simple_trc                 C   rh   )Nri   rL   rl   y      @      ?y      "@      ?y      W@      @rL   r   rp   rq   rX   rX   rY   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 )	Nri   rk   Fcheck_finitern   ro   rL   r   rp   rq   rX   rX   rY   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   rV   r   rL   TZhomogeneous_eigvalsrL   r   )rN   emptyr
   r?   rV   rE   )rr   r~   rs   rt   rX   rX   rY   
test_emptyz   s   "zTestEigVals.test_emptyN)__name__
__module____qualname__rv   rx   rz   r}   pytestmarkparametrizer^   floatr:   complexr;   r   rX   rX   rX   rY   rg   \   s    rg   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 )Nri   rk   rn   ro   rL   r   r[   rj         @r   r   r   r[   r   rL   leftright)r3   r	   r=   r0   r   rA   rangerR   	rr   rs   rt   rd   ru   v0Zv1Zv2irX   rX   rY   rv      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[   rL   r         ?       @y      ?       )r3   r	   r   r   rQ   rR   rr   rs   rt   Zvlvrr   rX   rX   rY   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 )Nri   ry   r[   r   rj   )r3   r	   r   r   rQ   rR   r   rX   rX   rY   rz      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   rN   inf)rr   rs   brt   r   rX   rX   rY   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             rK   g|=)tolr   )rB   rN   rE   r?   r	   r
   r   r   Zlexsortr   r_   r0   onessizeallrC   Zreal_if_closer7   absimagr@   )rr   rW   B
atol_homogZ
rtol_homogr   r   B0msgrt   r   ZwtZval1Zval2r   permZpermtlengthZbeta_nonzeroZwhresZw_finZwt_finrX   rX   rY   _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   rN   errstater   rr   rW   r   rX   rX   rY   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   rj   )rL   r   r   )r   rL   r   )r   r   rL   )r[   r   r   )r   r[   r   r   r   r   rj   rj   rj   r   r   )r4   r3   r8   rE   rN   blockr   r   )rr   MKDZZI3rW   r   rX   rX   rY   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 )	NrL   )r[   r   r   r   )r   r[   r   r   r   )r   r   r[   r   )r   r   r   r[   r[   rX   )omegac1c2rW   r   rX   rX   rY   matrices&  s   


z)TestEig.test_bad_geneig.<locals>.matricesr   r   d         @)r   )rN   r   r   r   )rr   r   krW   r   rX   rX   rY   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  rj   r   rK   )rN   rO   RandomStaterf   r   )rr   ra   rW   r   rX   rX   rY   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 )Nri   rk   Fr{   rn   ro   rL   r   r[   rj   r   r   r   r   )r	   r=   r3   r0   r   rA   r   r   rX   rX   rY   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.rm   rj   rL   N)rN   r9   reshapeassert_raises
ValueErrorr	   )rr   rW   rX   rX   rY   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.rL         "@rj   N)rE   rN   r9   r   r   r   r	   r   rX   rX   rY   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          @)	rN   r3   r	   ZtestingZsuppress_warningsfilterRuntimeWarningiscloseany)rr   rW   r   r   VsuprX   rX   rY   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   rL   r   Tr   r   )rN   r   r	   rE   r?   rV   r   )rr   r~   rs   rt   r   w_nZvr_nrX   rX   rY   r     s   zTestEig.test_emptyN)r   r   r   r   )r   r   r   rv   r   rz   r   r   r   r   r   r   r   r   r   r  r   r   r   r^   r   rN   r:   r   r;   r   rX   rX   rX   rY   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rr   rX   rX   rY   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`.
   rL         ?r[         r          r   rK         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)rr   NewevargsZLDABr   rX   rX   rY   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+   r!  r7   r   r@   r  r   r  rr   rt   evecinfoevec_rX   rX   rY   
test_dsbev     zTestEigBanded.test_dsbevc                 C   r*  )zUCompare dsbevd eigenvalues and eigenvectors with
           the result of linalg.eig.r[   r+  N)r,   r!  r7   r   r@   r  r   r  r-  rX   rX   rY   test_dsbevd  r2  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[   rL   r,  r   N)
r?   r  r-   r!  r7   r   r@   r  r   r  rr   r&  rt   r.  numZifailr/  r0  rX   rX   rY   test_dsbevx     zTestEigBanded.test_dsbevxc                 C   r*  )zUCompare zhbevd eigenvalues and eigenvectors
           with the result of linalg.eig.r[   r+  N)r.   r"  r7   r   r@   r  r   r   r-  rX   rX   rY   test_zhbevd	  r2  zTestEigBanded.test_zhbevdc              	   C   r4  )zUCompare zhbevx eigenvalues and eigenvectors
           with the result of linalg.eig.r5  r[   rL   r6  N)
r?   r  r/   r"  r7   r   r@   r  r   r   r7  rX   rX   rY   test_zhbevx  r:  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.rL   rm   r   selectselect_ranger[   h㈵>rd   Fr{   N)
r   r!  r  r   r@   r  r"  r  rN   Zlonglong)rr   w_symw_hermind1ind2	w_sym_ind
w_herm_indv_lowerv_upper	w_sym_val
w_herm_valrX   rX   rY   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. NrL   rm   r   r=  r[   r@  rd   Fr{   )r   r!  r7   r  r   r@   r  r   r  r"  r  r   )rr   rA  Zevec_symZ	evec_sym_rB  Z	evec_hermZ
evec_herm_rC  rD  rE  Zevec_sym_indrF  Zevec_herm_indrG  rH  rI  Zevec_sym_valrJ  Zevec_herm_valrX   rX   rY   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.rL   Nr[   r   Z	permute_l)
r?   r  r'   r#  r  r  r4   r   r   r   rr   r   r&  lu_symm_bandipivr/  ur   Zp_linZl_linZu_linrX   rX   rY   test_dgbtrf     2zTestEigBanded.test_dgbtrfc                 C   rM  )zZCompare zgbtrf  LU factorisation with the LU factorisation result
           of linalg.lu.rL   Nr[   r   rN  )
r?   r  r)   r$  r  r  r4   r   r   r   rO  rX   rX   rY   test_zgbtrf  rT  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   r  r   rr   rP  rQ  r/  yZy_linrX   rX   rY   test_dgbtrs     zTestEigBanded.test_dgbtrsc                 C   rV  )zhCompare zgbtrs  solutions for linear equation system  A*x = b
           with solutions of linalg.solve.N)
r)   r$  r  r  r*   r%  r6   r   r  r   rW  rX   rX   rY   test_zgbtrs  rZ  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Zeigvals_only)rN   r   r   r3   r?   rV   )rr   r~   Za_bandrt   rd   r  v_nrX   rX   rY   r     s   "zTestEigBanded.test_emptyN)r   r   r   r  r  r1  r3  r9  r;  r<  rK  rL  rS  rU  rY  r[  r   r   r   r^   r   rN   r:   r   r;   r   rX   rX   rX   rY   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  rX   rX   rY   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   rc   er4   Zfull_matr6   r	   r  r7   rt   r.  )rr   r&  r'  r(  r)  rX   rX   rY   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   rK   r  lapack_driverfoor   r   r   r=  )r   r   r"   rc   r`  r`   r  rX   rX   rY   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autora  )rf  rg  r   r   rb  r>  r?  rh  ri  rj  r   r[   r>  r?  rb  rL   rm   r@  rd   N)	r"   rc   r`  r   r@   rt   r   r   r_   )	rr   driverrt   Zw_indrC  rD  rG  rH  Zw_valrX   rX   rY   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. rf  ra  )rh  rg  ri  rj  Nrg  r   r   rk  rl  r   r[   rm  rL   rm   r@  rd   )r   r   r#   rc   r`  r7   r   r@   rt   r   r.  r_   )	rr   rn  rt   r.  r0  rC  rD  rG  rH  rX   rX   rY   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   r=  rL   r  rd   )r   r   r   r   r   N)rN   r3   r#   ndimr   r   r?   )rr   rs   r   xr  rX   rX   rY   test_eigh_tridiagonal_1x1/  s   


z,TestEigTridiagonal.test_eigh_tridiagonal_1x1N)	r   r   r   r  r_  re  ro  rp  rs  rX   rX   rX   rY   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   )rN   rO   seedr  rX   rX   rY   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[   rL   rj      )type)subset_by_valuesubset_by_indexr   r{  r   rz  Zwrongrn  gvxevrgvd)rn  r{  )r   r   r   rN   r   r  rX   rX   rY   test_wrong_inputsF  s@   ""
zTestEigh.test_wrong_inputsc                 C   s&   t tttddgtddg d S )Nrj   )r   r&   r   rN   r   r  rX   rX   rY   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   rL   r}  r[   T)rU   rV   )	enumerateDTYPESrZ   r   r   r?   r_   r   )rr   indr~   rs   rt   rd   r   rX   rX   rY   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[   rL      rj   rl   )r3   r   )rr   rs   r   rt   zrX   rX   rY   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   rL   )	Zscipy.sparsesparseidentityZtocscrN   Z
atleast_2dr   r   r   )rr   Zscipyrs   r   rX   rX   rY   test_eigh_of_sparse  s
   
zTestEigh.test_eigh_of_sparsedtype_rn  )r(  Zevdr  Zevxc                 C   sH   t d|d}t||d\}}t|| ||  ddt|j dd d S )Nr  )rT   rV   r~  r5    r   r   )rZ   r   r   rN   finfoeps)rr   rn  r  rs   rt   rd   rX   rX   rY   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   rK   r   )r   r   r3   )rr   rn  rt   rd   rX   rX   rY   test_1x1_lwork  s   zTestEigh.test_1x1_lworkry  ri   )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)rU   )rs   r   rn  ry  r[   r5  r  rL   )rN   spacingrZ   r   r   )rr   rn  ry  r   rs   r   rt   rd   rX   rX   rY    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 )
Nrl   r[   rL   r|  )r[   333333??      ?rL   gffffff?r}  r  r  )rZ   r   r   r_   r   rN   r4   r3   )rr   rs   rt   Zw2r   Zw3rX   rX   rY   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   rL   r   Tr\  )rN   r   r   rE   r?   rV   r   )rr   r~   rs   rt   rd   r  r]  rX   rX   rY   r     s   zTestEigh.test_emptyN)r   r   r   rv  r  r  r  r  r  r   r   r   r  r  r  r  r  r^   r   rN   r:   r   r;   r   rX   rX   rX   rY   rt  B  s$    &

rt  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  ra  rc  )r   r`   r   r   r  rX   rX   rY   re    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 )Nri   r[   r  rj   rk   TFfull_matricesrb  rj   r   r   rb  r   rR   rE   r8   r?   rV   charr   r_   rr   rs   r  rR  svhsigmar   rX   rX   rY   rv        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 )Nri   rk   r  r  rj   r   r  r  rX   rX   rY   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 )Nri   rx  rl   rm   r  r  r   r   rb  r   rR   rE   r?   r8   rV   r  r   r_   r  rX   rX   rY   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[   rL   rx  rl   rj   r  r  r   r  r  rX   rX   rY   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   rj   r  r  r[   r   )rN   rO   r   r   r   rb  r   rR   rE   r?   r8   rV   r  r_   )rr   ra   rT   mr   rs   r  rR  r  r  r  rX   rX   rY   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 )Nri   )r[   y               @rj   rk   r  r  r[   r   )r   rb  r   rQ   rR   rE   r?   r8   rV   r  r   r_   r  rX   rX   rY   rz     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   rj   r  rK   r  r[   r   )rN   rO   r   r   listr?   r   rb  r   rQ   rR   rE   r8   rV   r  r_   )rr   ra   rT   r  r   r  rs   rR  r  r  r  rX   rX   rY   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   ra  )rN   rO   r   r:   r   r;   
complex128rP   rS   r   rb  )rr   ra   sizesszr~   rs   rX   rX   rY   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 )Nri   r  rk   F)r|   rb  rj   r   r  )rr   rs   rR  r  r  r  r   rX   rX   rY   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  r5  r5  r5  )r5  r  r  r  r5  r5  )r5  r5  r  r  r  r5  )r5  r5  r5  r  r  r  ra  )rN   r3   r   rb  )rr   r   rX   rX   rY   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  )Zfree_mbr[   l        r   rd  Fr  r   r  r   )rH   rN   r8   r:   r   r   )rr   rW   rR  r  r  rX   rX   rY   test_large_matrixX  s   
zTestSVD_GESDD.test_large_matrixr  r   r[   rL   rT   rV   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   ZFDFr  Z
compute_uv)	rN   r8   minrV   r  lowerr   r   r?   )rr   r  rT   rV   rs   r   ZdcharZ
real_dcharrR  r  rd   rX   rX   rY   test_shape_dtypeb  s*   
zTestSVD_GESDD.test_shape_dtyper~   r  rT   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 )Nrj   r   r   Fr  r   r  )rN   rE   r   r   r   r  rV   )rr   r~   r  rT   a0Zu0s0r   rs   rR  r  rd   rX   rX   rY   r     s(   zTestSVD_GESDD.test_emptyN)r   r   r   rb  re  rv   r  r  r  r  rz   r  r  r   r  r   r   skipifrI   slowr  r   r  r  r^   r   rN   r:   r   r;   r   rX   rX   rX   rY   r    s.    	
r  c                   @   s   e Zd ZdZdS )TestSVD_GESVDgesvdN)r   r   r   rb  rX   rX   rX   rY   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   )rN   r   r   r   r   r   )ZdfrX   rX   rY   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   rj   r   r   rL   )rN   r   r   r3   r   r   rE   rV   )rr   r~   rs   r  r  rX   rX   rY   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 )Nri   rk   rj   r   r[   rL   r   r   r_   rr   rs   r  rX   rX   rY   rv        2zTestSVDVals.test_simplec                 C   @   g dg dg}t |}tt|dk t|d |d k d S )Nri   r  rL   r   r[   r  r  rX   rX   rY   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[   rL   rx  rl   rj   r   r  r  rX   rX   rY   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 )Nri   )r[   r                @rk   rj   r   r[   rL   r  r  rX   rX   rY   rz     r  zTestSVDVals.test_simple_complexc                 C   r  )Nri   )rx  y              @rm   rL   r   r[   r  r  rX   rX   rY   test_simple_underdet_complex  r  z(TestSVDVals.test_simple_underdet_complexc                 C   r  )Nr[   rL   rx  rl   r  r   r  r  rX   rX   rY   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 )	Nri   rk   Fr{   rj   r   r[   rL   r  r  rX   rX   rY   r     s   2zTestSVDVals.test_check_finitec                 C   s&   t jd t jdd}t| d S )Nr   i  i
  )rN   rO   ru  rP   r   rr   rs   rX   rX   rY   test_crash_2609  s   zTestSVDVals.test_crash_2609N)r   r   r   r   r   r   r^   r   rN   r:   r   r;   r   rv   r  r  rz   r  r  r   r  r  rX   rX   rX   rY   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   rj   r   )r   r   r  rX   rX   rY   rv     s   zTestDiagSVD.test_simpleN)r   r   r   rv   rX   rX   rX   rY   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   rL   rj   rL   rn   rj   rl   rj   rm   rj   r   r   rR   rE   rr   rs   qrrX   rX   rY   rv        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  ri   r   rj   r   r   r   rE   rr   rs   r  r  cqcr2rX   rX   rY   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  ri   rj   r  r  rX   rX   rY   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   rj   
rN   rB   r   r   r4   r   r   r   rR   rE   rr   rs   r  r  prc   q2r  rX   rX   rY   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  Tr  ri   r   r   r   r   rr   rs   r  r  jpvtr  r  rX   rX   rY   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  Tr  ri   r  r  rX   rX   rY   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  rL   r  r  rX   rX   rY   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  Tr  r[   r   rL   r  r  rX   rX   rY   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  rL   rn   rl   rj   r  r  rX   rX   rY   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  rL   rn   rl   rj   Tr  r[   r   r  r  rX   rX   rY   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  rL   rn   rl   rj   economicmoderj   rL   rL   rL   r   r   rR   rE   r   r?   r  rX   rX   rY   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  rL   rn   rl   rj   Tr  r  r  r[   r   r  r  r  rX   rX   rY   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  rL   rn   rl   rj   r  r  r[   r   r[   rL   r   TZoverwrite_cr   r   r   r3   rE   r  rX   rX   rY   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  rL   rn   rl   rj   r  Tr  r  r[   r   )r   r   r   r   rE   )rr   rs   r  r  r  r  r  ZkpvtrX   rX   rY   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  rL   rn   rl   rj   r  r  ri   r  rr   rs   r  r  r  cqr  rX   rX   rY   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  rL   rn   rl   rj   Tr  r  ri   r  r  rr   rs   r  r  r  r  r  rX   rX   rY   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  rL   rl   r  rL   r
  rL   rj   r  r  rX   rX   rY   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  r  Tr  r[   r   rL   r
  r  rN   rB   r   r   r4   r   r   r   rR   rE   r   r?   r  rX   rX   rY   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  rL   rn   rl   r  r  rL   r
  r  r  r  rX   rX   rY   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   Tr  r  r[   r   rL   r
  r  r  r  r  rX   rX   rY   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   r  r  r[   rL   r   r  r  rX   rX   rY   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   r  Tr  r[   rL   r   r  r  rX   rX   rY   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   r  r  r[   rL   r  r  rX   rX   rY   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   Tr  r  r[   rL   r  r  r  rX   rX   rY   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rj         @      @rl   rl   rL   y       @      @rj   rL   r  rj   )r   r   rQ   rR   rE   r  rX   rX   rY   rz        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,  r[   rL   r*  r   rj   r  rr   rs   r  r  r  r  rX   rX   rY   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.  rj   r  r/  rX   rX   rY   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       @      @rL   rn   y      @      @rj   r  r  r[          @       @r   r  Tr  r  r  rX   rX   rY   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   rQ   r/  rX   rX   rY   "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 )Nrj   r*  rl   r2  rL   r  r  r[   r   Tr4  r6  r/  rX   rX   rY   '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.  Tr4  )r   rN   r3   r   r   rQ   r/  rX   rX   rY   #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  r[   r   rj   )r3   r   r   r4   r   rN   r   r   rQ   rR   rE   r  rX   rX   rY   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 )Nr)  r+  r,  Tr  r.  r   r3   r   r   r   r  rX   rX   rY   !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 )Nr)  r+  r,  Tr  r.  r;  r  rX   rX   rY   "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  rL   rN   rO   r   r   r   r   rR   rE   rr   ra   rT   r   rs   r  r  rX   rX   rY   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  rL   r   rN   rO   r   r   r   r   r   rE   	rr   ra   rT   r   rs   r  r  r  r  rX   rX   rY   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?  rC  	rr   ra   rT   r   rs   r  r  r  r  rX   rX   rY   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  rL   Tr  r[   r   rN   rO   r   r   r   r   r4   r   r   r   rR   rE   rr   ra   rT   r   rs   r  r  r  rc   r  r  rX   rX   rY   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   rL   r@  rr   ra   r  rT   r   rs   r  r  rX   rX   rY   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   rM  r   rL   r  r  r   rC  )
rr   ra   r  rT   r   rs   r  r  r  r  rX   rX   rY   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   rM  r   rL   r  r  rC  )
rr   ra   r  rT   r   rs   r  r  r  r  rX   rX   rY   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   rM  r   rL   Tr  r[   r   rH  rr   ra   r  rT   r   rs   r  r  r  rc   r  r  rX   rX   rY   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 rQ  )
rN   rO   r   r   r   r   rR   rE   r   r?   rN  rX   rX   rY   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   rM  r   rL   Tr  r  r[   r   r  )rN   rO   r   r   r   r   r4   r   r   r   rR   rE   r   r?   rT  rX   rX   rY   test_random_tall_e_pivoting  s    "
z"TestQR.test_random_tall_e_pivotingc                 C   rK  Nr   r   rM  rL   r@  rN  rX   rX   rY   test_random_trap     zTestQR.test_random_trapc                 C   rS  )	Nr   r   rM  rL   Tr  r[   r   rH  rT  rX   rX   rY   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  rL   rK   )	rN   rO   r   r   r   r   rQ   rR   rE   rA  rX   rX   rY   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  rL   rK   r   rC  rD  rX   rX   rY   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\  rC  rF  rX   rX   rY   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  rL   rK   Tr  r[   r   )rN   rO   r   r   r   r   r4   r   r   r   rQ   rR   rE   rI  rX   rX   rY   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{   rj   r  r  rX   rX   rY   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  )lworkrj   r  r   rc  r   rL   )r   r   r   	Exception)
rr   rs   r  r  r  r  q3Zr3Zq4Zr4rX   rX   rY   
test_lwork  s   





zTestQR.test_lworkr  r  rT   r  FTrV   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   r  r[   r   r  r  r  raw)	r  rN   r8   r   r   r?   rV   r_   Zint32)rr   r  rT   r  rV   r   rs   r  r  otherr  rg  taurX   rX   rY   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 )NTr  r  r  r  rg  )r  rN   r   r   r   r  r9   )
rr   r  rT   r   rs   r  r  r  rg  ri  rX   rX   rY   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   )rN   r   r   r   )rr   rs   r  r  r  rX   rX   rY   test_multiply_emptyi  s   





zTestQR.test_multiply_emptyN)>r   r   r   rv   r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r!  r"  r#  r$  r&  r'  rz   r0  r1  r3  r7  r8  r9  r:  r<  r>  r  rE  rG  rJ  rO  rP  rR  rU  rV  rW  rY  r[  r  r^  r_  r`  r   rf  r   r   r   r  r  r   rj  rX   rX   rX   rY   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   rR   rE   rr   rs   r  r  rX   rX   rY   rv   {  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  r  )r   r   )rr   rs   r  r  r  rX   rX   rY   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?  rN   rO   r   r   r   r   rR   rE   rr   ra   rT   r   rs   r  r  rX   rX   rY   r    rB  zTestRQ.test_randomc                 C   sB   g dg dg}t |\}}t|j| td t|| | d S )Nr  r  rj   rl  rm  rX   rX   rY   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  rl  rm  rX   rX   rY   r    r  zTestRQ.test_simple_tallc                 C   sB   g dg dg}t |\}}t||j td t|| | d S )Nr  r  rj   rl  rm  rX   rX   rY   r    r  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   rQ   rR   rE   rm  rX   rX   rY   rz     r-  zTestRQ.test_simple_complexc                 C   b   t jd}d}d}tdD ] }|||g}t|\}}t||j t| t|| | qd S rL  ro  rr   ra   r  rT   r   rs   r  r  rX   rX   rY   rO    rZ  zTestRQ.test_random_tallc                 C   rq  rX  ro  rr  rX   rX   rY   rY    rZ  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   rM  rL   r  r  )
rN   rO   r   r   r   r   rR   rE   r   r?   rr  rX   rX   rY   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\  )	rN   rO   r   r   r   r   rQ   rR   rE   rp  rX   rX   rY   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   rM  rL   rK   r  r  )rN   rO   r   r   r   r   rQ   rR   rE   r   r?   rr  rX   rX   rY   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 ra  rl  rm  rX   rX   rY   r     rb  zTestRQ.test_check_finiter  r  rT   rV   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  r  r  )r  rN   r8   r   r   r?   rV   )rr   r  rT   rV   r   rs   r  r  rX   rX   rY   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  r  r  )r  rN   r   r   r   r  )rr   r  rT   r   rs   r  r  rX   rX   rY   r     s   
zTestRQ.test_emptyN)r   r   r   rv   rn  r  r   r  r  rz   rO  rY  rs  r  rt  r   r   r   r   r  r  r   rX   rX   rX   rY   rk  z  s(    	

	rk  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   rQ   rR   rN   rE   r_   )rr   rs   trR  r   r   rX   rX   rY   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     rj   r  r  rj   rm   r   +<r   r   r   )r   rw  r   rN   r  r<   r>   r   )rr   rs   rv  r  ZtcZzcZtc2Zzc2rX   rX   rY   rv     s   (zTestSchur.test_simplezsort, expected_diaglhprL         r\   rhpiucoucc                 C   s   | dkS )Nr5  rX   )rr  rX   rX   rY   <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   rL   )r   rw  r   rN   r4   r   )rr   r@   Zexpected_diagrs   rv  rR  sdimrX   rX   rY   	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  rX   rX   rY   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 )Nrx  r  rz  Fr{   )r   r   rQ   rR   )rr   rs   rv  r  rX   rX   rY   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   rL   r}  r  r   )rN   r   r   rE   r   rV   r   )rr   r~   rs   rv  r  t0Zz0r  rX   rX   rY   r   A  s   
zTestSchur.test_emptyr@   outputr  r   rV   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   rL   r@   r  r   r  r   )rN   rB   r   rS   )rr   r@   r  rV   rW   r  rX   rX   rY   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   rL   r  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 )NrK   r  )rN   ZiscomplexobjZisrealr   )rr  rX  r  Zall_realrX   rY   r@   y  s   
z1TestSchur.test_gh_13137_sort_custom.<locals>.sortr  r   r[   r  )rN   rB   r:   r   r   rS   )rr   r  rV   rW   r@   r  rX   r  rY   test_gh_13137_sort_customh  s
   $z#TestSchur.test_gh_13137_sort_customN)r   r   r   rw  rv   r   r   r   rN   r=   r  r  r   r^   r   r:   r   r;   r   r   r  r  r  rX   rX   rX   rY   ru    s8    	
 

ru  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_qrx  decimalr   r   rR   rr   rs   Zh1re   r  rX   rX   rY   rv     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   rQ   rR   rr   rs   re   r  rX   rX   rY   rz     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[   rL   rj   rx  rl   rm   r  )r   rL   rj   rx  rm   r  rL   )r   rL   rL   rj   r   rj   rL   )r   r   rL   r  r   r   rL   )r   rj   r[   rL   r   r[   rL   )r   r[   rL   rj   r   r[   r   )r   r   r   r   r   r[   rL   r[   r  r  r  rX   rX   rY   test_simple2  s   zTestHessenberg.test_simple2c                 C   s:   t d}d|d< t|dd\}}t|j| | | d S )Nrj   rL   )r   r   r[   r  )rN   rE   r   r   rR   r  rX   rX   rY   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  rL   r[   r  )rN   rO   r   r   r   r   rR   rr   ra   rT   r   rs   re   r  rX   rX   rY   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  rL   rK   r[   r  )rN   rO   r   r   r   r   rQ   rR   r  rX   rX   rY   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|   rx  r  r  r  rX   rX   rY   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 )
NrL   r[   r  ry  r  y       @      r   y      @      @y      (@       )r   r   rN   rE   )rr   rs   re   r  r   Zh2r  rX   rX   rY   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   rj   Tr  )rN   r   r   r?   rV   rE   )rr   r~   rs   re   r  Zh3re  rX   rX   rY   r     s   zTestHessenberg.test_emptyN)r   r   r   rv   rz   r  r  r  r  r   r  r   r   r   r^   r   r:   r   r;   r   rX   rX   rX   rY   r    s    r  zBuild DependenciesZ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  rl   r  r   )rN   rO   r   rS   r:   r   r   rR   rE   r   r   r4   	rr   ra   rT   rW   r   AABBQr   rX   rX   rY   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  rl   r   
rN   rO   r   r   r   rR   rE   r   r   r4   r  rX   rX   rY   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  rl   rK   r   )rN   rO   r   r   r   rQ   rR   rE   r   r   r4   r   r  rX   rX   rY   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  rl   rK   r  r   )rN   rO   r   rS   r;   r   r   rQ   rR   rE   r   r   r4   r   r  rX   rX   rY   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  rl   r   )r  r   )rN   rO   r   r   rQ   rR   r   r  r   rE   r   r   r4   )rr   ra   rT   rW   r   r  r  r  r   aaZbbrX   rX   rY   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   rX   )arZaibetarX   rX   rY   r  H	  r  z,TestQZ.test_qz_double_sort.<locals>.<lambda>r  )	rN   r3   r   r   r   r   r   rR   r   )rr   rW   r   r  r  r  r   r  rX   rX   rY   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  rl   Fr{   r   r  r  rX   rX   rY   r   	  s   zTestQZ.test_check_finiteN)
r   r   r   r  r  r  r  r  r  r   rX   rX   rX   rY   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              )rK   y333333@y              y      @      )r  r  r  r~  r  )r  r  r  r  )r  g      :@r  r  )r[   rL   r[   )r[   rj   rx  )r[   rj   rj   )r[   rj   r  rx  )r   r  r   r   )r   r   r   r   )r   r   r  r   )r5  r   r   r   )r   r   r  r   )r   r   r   r   )r   r  r  r  )r   r  r   r   rL   r   r[   )rN   r3   rE   r4   rW   r   )
clsA1B1A2B2A3B3A4B4A5rX   rX   rY   rv  	  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  rX   rY   
<listcomp>	  s    z'TestOrdQZ.qz_decomp.<locals>.<listcomp>)rN   r   ziprW   r   tuple)rr   r@   retrX   r  rY   	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[   rL   T)rN   rE   r?   r   rR   rQ   r   Ztrilr8   r   r	   r   r   r   r1   r3   )rr   rW   r   r@   r  r  alphar  r  r   ZIdr   Zevals_tmpZsortfunZlastsortZcursortrX   rX   rY   check	  s@   &> ,"
zTestOrdQZ.checkc                 C   s@   |  |}t|| j| jD ]\}}}| j|||g|R   qd S r  )r  r  rW   r   r  )rr   r@   r  Zretir  r  rX   rX   rY   	check_all
  s   
zTestOrdQZ.check_allc                 C      |  d d S )Nr}  r  r  rX   rX   rY   test_lhp
     zTestOrdQZ.test_lhpc                 C   r  )Nr  r  r  rX   rX   rY   test_rhp
  r  zTestOrdQZ.test_rhpc                 C   r  )Nr  r  r  rX   rX   rY   test_iuc
  r  zTestOrdQZ.test_iucc                 C   r  )Nr  r  r  rX   rX   rY   test_ouc
  r  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rN   
empty_likeboolr   rr  rX  outZnonzerorX   rX   rY   r@   
  
   
z TestOrdQZ.test_ref.<locals>.sortr  rr   r@   rX   rX   rY   test_ref
     zTestOrdQZ.test_refc                 C   r  )Nc                 S   s>   t j| td}|dk}d|| < | | ||  jdk||< |S r  r  r  rX   rX   rY   r@   *
  r  z TestOrdQZ.test_cef.<locals>.sortr  r  rX   rX   rY   test_cef(
  r  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[   rL   r}  r  )r   rW   r   r  )rr   r  rX   rX   rY   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 )NrL   r   r\   r}  r~  r  r  r  y             ?y      ?      ?yٿɿ      ?      r   r[   r  )	rN   rE   r4   r   nanr  r   r  r   )rr   r  r  Z	expected1r  r  Z	expected2r  r  Z	expected3r  r  Z	expected4r  ZB5Z	expected5rW   r   expectedr  r  Z	expectediZsortstrZexpected_eigvalsr  r  r  ZazeroZbzerorr  rX   rX   rY   test_sort_explicit:
  s\   












zTestOrdQZ.test_sort_explicitN)r   r   r   classmethodrv  r  r  r  r  r  r  r  r  r  r  r  rX   rX   rX   rY   r  	  s    
6.r  c                   @   s0   e Zd Zejddd Zejjdd ZdS )TestOrdQZWorkspaceSizerl   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  rX   r  r  rX   rX   rY   r  t
  r  z7TestOrdQZWorkspaceSize.test_decompose.<locals>.<lambda>r  r  c                 S   r  r  rX   r  rX   rX   rY   r  z
  r  r   )	rN   rO   r   r:   r   rS   r   r  r;   )rr   ra   r&  ddtyperW   r   r  rX   rX   rY   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  r   r  r  )	rN   rO   r   r:   r   r  r;   rS   r   )rr   ra   r&  r  rW   r   SrR   r  r  Ur  rX   rX   rY   test_decompose_ouc}
  s   z)TestOrdQZWorkspaceSize.test_decompose_oucN)	r   r   r   r   r   	fail_slowr  r  r  rX   rX   rX   rY   r  j
  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   )_datacopiedr[   rL   rj   c                       s   e Zd Zd fdd	ZdS )z-TestDatacopied.test_datacopied.<locals>.Fake1Nc                    s    S r  rX   )rr   rV   rw   rW   rX   rY   	__array__
  s   z7TestDatacopied.test_datacopied.<locals>.Fake1.__array__)NN)r   r   r   r  rX   r  rX   rY   Fake1
  s    r  c                       s   e Zd Z jZdS )z-TestDatacopied.test_datacopied.<locals>.Fake2N)r   r   r   Z__array_interface__rX   r  rX   rY   Fake2
  s    
r  FTr   )Zscipy.linalg._decompr
  rG   rB   tolistrw   r   repr)rr   r
  r   LZM2r  r  ZF1ZF2itemstatusZarrrX   r  rY   test_datacopied
  s"   zTestDatacopied.test_datacopiedN)r   r   r   r  rX   rX   rX   rY   r	  
  r  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   rL   r   offsetcountrV   r  r  Toverwrite_aN)	r9   rN   uint8
frombufferdatar:   r?   r	   rR   rs   r  rX   rX   rY   test_aligned_mem_float
  s
   r   ppc64lezcrashes on ppc64lec                  C   r  )
z4Check linalg works with non-aligned memory (float64)i$  r   rx  r   r  r  Tr  N)	r9   rN   r  r  r  r   r?   r	   rR   r  rX   rX   rY   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   rN   r  r  r  r   r?   r	   rR   r  rX   rX   rY   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   rx  r  .r[   )r  r   r_   r]   rN   rD   r8   r   rV   itemsizer  r  r  r?   rR   )funcr)  kwargsr   rs   r  rX   rX   rY   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  rx  r  Tr  )overwrite_b)r  r)  )rN   rE   r   r9   r?   r  r  r  r   r   r	   dictr
   r   r   r   r   r   r   r   r   r   r   r'  )	r   Rr  r   ZLUpivr%  r)  r&  rX   rX   rY   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  rX   rX   rY   test_eig     zTestOverwrite.test_eigc                 C   r/  r0  )rF   r   r  rX   rX   rY   	test_eigh  r2  zTestOverwrite.test_eighc                 C      t tdg d S Nr	  )rF   r   r  rX   rX   rY   rL  
  rw  zTestOverwrite.test_eig_bandedc                 C   r4  r0  )rF   r
   r  rX   rX   rY   test_eigvals  rw  zTestOverwrite.test_eigvalsc                 C   r4  r0  )rF   r   r  rX   rX   rY   test_eigvalsh  rw  zTestOverwrite.test_eigvalshc                 C   r4  r5  )rF   r   r  rX   rX   rY   rK    rw  z!TestOverwrite.test_eigvals_bandedc                 C   r4  r0  )rF   r   r  rX   rX   rY   test_hessenberg  rw  zTestOverwrite.test_hessenbergc                 C   r4  r0  )rF   r   r  rX   rX   rY   test_lu_factor  rw  zTestOverwrite.test_lu_factorc                    s<   t g dg dg dg}t| t fdddg d S )Nri   r  )r  r  r  c                    s
   t  | S r  )r   )r   ZxlurX   rY   r       
 z-TestOverwrite.test_lu_solve.<locals>.<lambda>)rj   )rN   r3   r   rF   )rr   rr  rX   r:  rY   test_lu_solve  s   zTestOverwrite.test_lu_solvec                 C   r4  r0  )rF   r   r  rX   rX   rY   test_lu!  rw  zTestOverwrite.test_luc                 C   r4  r0  )rF   r   r  rX   rX   rY   test_qr$  rw  zTestOverwrite.test_qrc                 C   r4  r0  )rF   r   r  rX   rX   rY   test_rq'  rw  zTestOverwrite.test_rqc                 C   r4  r0  )rF   r   r  rX   rX   rY   
test_schur*  rw  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   rs   rX   rX   rY   r  .  r;  z2TestOverwrite.test_schur_complex.<locals>.<lambda>r   )dtypes)rF   rN   r:   r   r  rX   rX   rY   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  ra  )r   rA  rX   rX   rY   r  3  s    z(TestOverwrite.test_svd.<locals>.<lambda>)rF   r   r  rX   rX   rY   test_svd1  s   zTestOverwrite.test_svdc                 C   r4  r0  )rF   r   r  rX   rX   rY   test_svdvals5  rw  zTestOverwrite.test_svdvalsN)r   r   r   r1  r3  rL  r6  r7  rK  r8  r9  r<  r=  r>  r?  r@  rC  rD  rE  rX   rX   rX   rY   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 )NrL   r   r  r[   r   rL   r[   rl   -C6?MbP?Zrcondư>rm   )rN   r   r   rS   r  r  r   r   r?   r   meanrR   rO   r   rP   )rT   rV   skip_bigXr  r   Yra   rX   rX   rY   _check_orth9  s&   
 
rO  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)rL  z.memory error perhaps caused by orth regression)rO  rN   r   MemoryErrorAssertionError)rT   r`  rX   rX   rY   test_orth_memory_efficiencyT  s   rR  c                  C   s@   t jt jt jt jg} g d}t| |D ]	\}}t|| qd S )Nr[   rL   rj   r  r   )rN   r:   r   r;   r  	itertoolsproductrO  )rB  r  r~   rT   rX   rX   rY   	test_orthe  s
   rV  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   rL   )rN   r   rE   r   rV   r?   )r~   rs   r  ZoarX   rX   rY   test_orth_emptyk  s
   rX  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[   rS  rL   r   r  r   r   rF  rl   rG  rH  rI  rJ  rm   )rN   rO   r   r:   r   r;   r  rT  rU  r   r  r  r$   r   r?   r   rR   ZrandnrP   rS   )
rr   ra   rB  r  r~   rT   rM  r  r   rN  rX   rX   rY   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 rW  )rN   r   rE   r$   r?   rV   )rr   r~   rs   r  ZnsarX   rX   rY   test_null_space_empty  s
   z#TestNullSpace.test_null_space_emptyr  TFr|   rb  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[   rL   )r  r|   rb  r   r   r   )
rN   rO   Zdefault_rngZstandard_normalr$   rw   r   r  rV   r  )rr   r  r|   rb  ra   rT   rM  rN  rX   rX   rY   test_null_space_options  s   $z%TestNullSpace.test_null_space_optionsN)r   r   r   rZ  r   r   r   r^   r   rN   r:   r   r;   r[  r\  rX   rX   rX   rY   rY  u  s    %
rY  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  rj   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"	?rL   r   r  r  gL0?gĹ-?gyv?r   r  )r   r[   r   )r   r   r[   r   r  r  r5  r   r   r   r   r  )r!   r   r   r    rN   pir8   r?   r3   r   r   r   )HrW   r   rr  r  rs   r   rX   rX   rY   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)rN   Zeinsum)rr   rs   r   rX   rX   rY   matmul  r  zTestCDF2RDF.matmulc                 C   s   t | ||| || d S r  )r   ra  )rr   rt   rd   rr  rX   rX   rY   assert_eig_valid  s   

zTestCDF2RDF.assert_eig_validc                 C   s@   t d}t dt d}}t||\}}| ||| d S )Nr   r   )rN   r   r%   rb  rr   rM  rt   rd   wrr   rX   rX   rY   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[   rL   rj   r   rN   r3   r6   r	   r%   rb  rc  rX   rX   rY   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[   rL   r   rf  rc  rX   rX   rY   test_single_array2x2_complex  rh  z(TestCDF2RDF.test_single_array2x2_complexc                 C   sL   t g dg dg dg}t j|\}}t||\}}| ||| d S )Nri   rk   rf  rc  rX   rX   rY   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 Nri   )r   rx  rl   )r   r  rx  rf  rc  rX   rX   rY   test_single_array3x3_complex  rk  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   rN   rO   ru  rP   r6   r	   r%   rb  rr   r   rM  rt   rd   rd  r   rX   rX   rY   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   rN   rO   rP   r6   r	   r%   rb  rn  rX   rX   rY   test_random_2d_stacked_arrays(  s   z)TestCDF2RDF.test_random_2d_stacked_arraysc                 C   s(   t dt d}}ttt|| d S )NrX   )rL   )rN   r   r3   r   r   r%   rr   rt   rd   rX   rX   rY   test_low_dimensionality_error0  s   z)TestCDF2RDF.test_low_dimensionality_errorc                 C   s0   t dt ddd}}ttt|| d S )Nrj   rm   rL   rN   r9   r   r   r   r%   rq  rX   rX   rY   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 rl  rN   r3   r6   r	   r   r   r%   rr   rM  rt   rd   rX   rX   rY   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 )Nrj   r   rx  rs  rq  rX   rX   rY   test_non_associated_error?  rt  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 )Nri   ry   )rL   rl   y      @      ru  rv  rX   rX   rY   test_not_conjugate_pairsD  s   z$TestCDF2RDF.test_not_conjugate_pairsN)r   r   r   ra  rb  re  rg  ri  rj  rm  ro  rp  rr  r   rw  rx  ry  rX   rX   rX   rY   r`    s    	r`  )F)rT  platformsysnumpyrN   Znumpy.testingr   r   r   r   r   r   r   r   r   Z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&   Zscipy.linalg.lapackr'   r(   r)   r*   r+   r,   r-   r.   r/   Zscipy.linalg._miscr0   Zscipy.linalg._decomp_qzr1   Zscipy.statsr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   Zscipy.linalg._testutilsrF   Zscipy.sparse._sputilsrG   Zscipy._lib._testutilsrH   Zscipy.linalg.blasrI   Zscipy.__config__rJ   ImportErrormachineZIS_WASMr   rZ   r   ZREAL_DTYPESr  rM   r  rf   rg   r   r	  r^  rt  r  r  r   r  r  r  r  r  r  rk  ru  r  Zblas_providerZblas_versionr  r  r  r	  r   r"  r#  r'  Zxfailr-  r.  rO  r  rV   Zintpr$  rR  rV  r   r^   r   rX  rY  r_  r`  rX   rX   rX   rY   <module>   s     ,T*    *   P
>       \
 4 K

 
8
	;E