o
    g|                    @   s  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
Z
d dl
mZ d dlZd dlmZmZmZmZmZmZmZmZ d dlmZmZmZ 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' d dl(m)Z) d d	l*m+Z+m,Z, d dl-m.Z/ zd d
lm0Z1 W n e2y   dZ1Y nw d dl(m3Z3 d dl4m5Z5 ej6ej7gZ8ej9ej:gZ;e8e; Z<dd Z=dd Z>G dd dZ?G dd dZ@G dd dZAe
jBCde<e
jBCdg ddd ZDG dd dZEG dd dZFG d d! d!ZGG d"d# d#ZHd$d% ZId&d' ZJd(d) ZKd*d+ ZLG d,d- d-ZMG d.d/ d/ZNd0d1 ZOd2d3 ZPd4d5 ZQd6d7 ZRd8d9 ZSd:d; ZTd<d= ZUd>d? ZVd@dA ZWdBdC ZXdDdE ZYdFdG ZZdHdI Z[dJdK Z\G dLdM dMZ]dNdO Z^dPdQ Z_dRdS Z`dTdU Zae
jBjbdVdWdXdYdZ Zcd[d\ Zde
jBCd]d^d_ge
jBCde8e
jBCd`eedae
jBCdbeedce
jBCddeedce
jBCded dfge
jBCdgd dfgdkdhdiZfe
jBCde8djdk Zge
jBCdld`dmidbdmidddmidedmidndmidgdmifdodp Zhe
jBCdqeig drg dsg dtg dug dvg dwgeig dxeig dyg dzg d{g d|g d}g d~geig dg dg dg dgfgdd Zje
jBCde<dd Zke
jBCdeig deig deig deig deig deig deig deiddgddgddgddgddggeiddgddgddgddgddfggf	eig deig deig deig deig deig deig deiddgddgddgddgddggeiddgddgddgddgddggf	gdd Zle
jBCde<e
jBCdg ddd Zme
jBCdene8e8 e<dd Zoe
jBCdene8e8 e<dd Zpe
jBCdene8e8 e<ddÄ Zqe
jBCdeig dŢeig dƢeig dǢeig dȢeidadgdmdcgddmgddgddggeiddgddgdfdgddagddggfeig dѢeig dҢeig dӢeig dԢeiddgddgddgddggeiddgddgddgddggfgdd Zrdd Zse
jBCdene<e8e8 e
jBCdeeddd Zte
jBCdene<e8e8 e
jBCdeeddd Zue
jBCdene<e8e8 e
jBCdeeddd Zve
jBCdene<e8e8 e
jBCdeeddd Zwe
jBCddeig deig deig deig dg dg dg dgfgdd Zxe
jBCde<e
jBCdg ddd Zydd Zze
jBCdg de
jBCdd dgdd Z{e
jBCdddge
jBCdd dgdd Z|e
jBCde<e
jBCd	g d
dd Z}e
jBCde<dd Z~e
jBCde<e
jBCdddVge
jBCdddgdd Ze
jBCde<e
jBCdd dfge
jBCdddgdd Ze
jBCde<d e
jBCdddVge
jBCdddgdd Ze
jBCdeig deig deig deiddgddgddgddgddggeiddgddgddgddgddfggfeig deig deig deiddgddgddgddgddggeiddgddgddgddgddggfgdd Ze
jBCdene<e8e8 e
jBCdddd fdd d fgd!d" Ze
jBCdene<e8e8 e
jBCddd#d fdd$d fgd%d& Ze
jBCdene<e8e8 e
jBCddd'd fdd(d fgd)d* Ze
jBCd+eig dŢeig dƢeidadgdmdcgddmgddgddggeiddgddgdfdgddagddggfeig dѢeig dҢeiddgddgddgddggeiddgddgddgddggfgd,d- Ze
jBCd.ddVge
jBCde<d/d0 Ze
jBCde<d1d2 Ze
jBCd3eig d4g d5g d6g d7geig d8g d9g d:g d7gddffeig d;g d<g d=g d>geig d?g d@g dAg dBgdfdcfgdCdD Ze
jBCde<dEdF Ze
jBCde<dGdH Ze
jBCdIeig dJg dKg dLg dMgeig dNg dOg dPg dQgeig dRg dSg dTg dUgeig dVdWdXfeig dYg dZg d[g d\geig d]g d^g d_g d`geig dag dbg dcg ddgeig dVdedffgdgdh Ze
jBCde<didj ZdS (l      N)reduce)assert_equalassert_array_almost_equalassert_assert_allcloseassert_almost_equalassert_array_equal)raises)eyeoneszeros
zeros_liketriutriltril_indicestriu_indices)randrandintseed)_flapacklapackinvsvdcholeskysolveldlnorm
block_diagqreigh)_compute_lwork)ortho_groupunitary_group)_clapack)get_lapack_funcs)get_blas_funcsc                 C   s<   |t v rtjj|  tjj|  d  |S tjj|  |S )N              ?)COMPLEX_DTYPESnprandomr   astype)shapedtype r-   \/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_array)   s   
r/   c                  C   sz   t jdu r
td tt j } tg d}t }tt D ]}|ds2||vr2|| vr2|	| q|g ks;J ddS )z%Test that all entries are in the doc.Nzlapack.__doc__ is None)absolute_importclapackdivisionfind_best_lapack_typeflapackprint_function	HAS_ILP64_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   __doc__pytestskipsetsplitlistdir
startswithappend)namesignore_listmissingnamer-   r-   r.   test_lapack_documented1   s   


rE   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestFlapackSimplec           
      C   s   g dg dg dg}g dg dg dg dg}dD ]R}t t|d	 d }|d u r*q||\}}}}}	t|	 t|	 t|| t||fd
t|d
 d f t|tt| ||ddd\}}}}}	t|	 t|	 qd S )N)         )         )      	   )rH   r   r   ga2U0*3?)rK   r   r   gMb`?)rN   rH   r   r   )r   rH   r   r   sdzcgebalr   rH   )permutescale)	getattrr4   r   reprr   r   lenr(   r   )
selfaa1pfbalohipivscaleinfor-   r-   r.   
test_gebalD   s$   
zTestFlapackSimple.test_gebalc                 C   s\   g dg dg dg}dD ]}t t|d d }|d u rq||\}}}t| t| qd S )Nikiifi     i"  iiidgehrd)rU   r4   r   rV   )rX   rY   r[   r\   httaura   r-   r-   r.   
test_gehrdY   s   zTestFlapackSimple.test_gehrdc                 C   sZ  t ddgddgg}t ddgddgg}t dd	gd
dgg}d}dD ]}||||||}}}td|f\}	| rM|d  d7  < d}|	|||\}
}}tt ||
t |
| ||  |	|||||d\}
}}tt | j|
t |
| j || dd |	|||dd\}
}}tt ||
t |
| || dd q%d S )NrH   rI   r   rK   rL   rM   rO   rP   
         TfdFD)trsylr&   C)tranatranbdecimal)isgn)	r(   arrayr*   r$   isupperr   dot	conjugatero   )rX   rY   bctransr,   rZ   b1c1rq   xrT   ra   r-   r-   r.   
test_trsyld   s0   ""zTestFlapackSimple.test_trsylc           	      C   s  t g dg dg dg}dD ]{}dD ]v}||}| r'|d  d7  < td|f\}|||}|d	v rU|d
v r>d}nd}t t t t |}t	||| q|dv rbt 
t |}n#|dv rtt 
t jt |dd}n|dv rt 
t jt |dd}t|| qqd S )Nrc   rd   rf   rp   Mm1OoIiFfEer   r   r&   )langeFfEeFfrJ   rN   Mm1Oor   axisIirH   )r(   ry   r*   rz   r$   sqrtsumsquareabsr   maxr   )	rX   rY   r,   norm_strrZ   r   valuerv   refr-   r-   r.   
test_lange   s6   

zTestFlapackSimple.test_langeN)__name__
__module____qualname__rb   rk   r   r   r-   r-   r-   r.   rG   B   s
    rG   c                   @   s   e Zd Zdd Zdd ZdS )
TestLapackc                 C      t tdr	 d S d S Nempty_module)hasattrr4   rX   r-   r-   r.   test_flapack      
zTestLapack.test_flapackc                 C   r   r   )r   r1   r   r-   r-   r.   test_clapack   r   zTestLapack.test_clapackN)r   r   r   r   r   r-   r-   r-   r.   r      s    r   c                   @   rF   )
TestLeastSquaresSolversc                 C   st  t d ttD ]K\}}d}d}d}t|||}t||}td|d\}}	t|	|||}
||||
d\}}}t|dk |||d	| |
d
\}}}t|dk qtD ]o}t	j
ddgddgddgg|d}t	j
g d|d}td||f\}}}|j\}}t|jdkr|jd }nd}t||||}
||||
d\}}}t|d d t	j
ddg|ddt	|j d ||\}}}}t|| qVtD ]o}t	j
ddgddgddgg|d}t	j
g d|d}td||f\}}}|j\}}t|jdkr|jd }nd}t||||}
||||
d\}}}t|d d t	j
dd g|ddt	|j d ||\}}}}t|| qd S )!N  rl      rH   )gels
gels_lworkr,   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrI   rw   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r   	enumerateDTYPESr   r*   r$   r    r   REAL_DTYPESr(   ry   r+   rW   r   finfoepsr   r'   )rX   indr,   mnnrhsrZ   r   glsglslwr   r7   ra   r   r   r   lqrr   	lqr_truthr-   r-   r.   	test_gels   s   





z!TestLeastSquaresSolvers.test_gelsc              
   C   s0  t D ]}tjddgddgddgg|d}tjg d|d}td	||f\}}|j\}}t|jd
kr8|jd }nd}||||d\}	}
}tt|	}|
}|||||ddd\}}}}t|d d tjddg|ddt	|j
 d t|tjddg|ddt	|j
 d qtD ]}tjddgddgddgg|d}tjg d|d}td	||f\}}|j\}}t|jd
kr|jd }nd}||||d\}	}}
}tt|	}t|}|
}||||||ddd\}}}}t|d d tjddg|ddt	|j
 d t|tjddg|ddt	|j
 d qd S )Nr   r   r   r   r   r   r   r   )gelsdgelsd_lworkrI   rH   rw   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r(   ry   r$   r+   rW   intrealr   r   r   r'   )rX   r,   rZ   r   r   r   r   r   r   workiworkra   r   
iwork_sizer   srankrwork
rwork_sizer-   r-   r.   
test_gelsd   s   






z"TestLeastSquaresSolvers.test_gelsdc                 C   s  t D ]}tjddgddgddgg|d}tjg d|d}td	||f\}}|j\}}t|jd
kr8|jd }nd}||||d\}	}
tt|	}|||d|dd\}}}}}	}
t|d d tjddg|ddt	|j
 d t|tjddg|ddt	|j
 d qtD ]}tjddgddgddgg|d}tjg d|d}td	||f\}}|j\}}t|jd
kr|jd }nd}||||d\}	}
tt|	}|||d|dd\}}}}}	}
t|d d tjddg|ddt	|j
 d t|tjddg|ddt	|j
 d qd S )Nr   r   r   r   r   r   r   r   )gelssgelss_lworkrI   rH   rw   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rX   r,   rZ   r   r   r   r   r   r   r   ra   r   vr   r   r   r-   r-   r.   
test_gelss1  s   





z"TestLeastSquaresSolvers.test_gelssc              	   C   s(  t D ]}tjddgddgddgg|d}tjg d|d}td	||f\}}|j\}}t|jd
kr8|jd }nd}||||dt|j \}	}
tt	|	}tj
|jd dftjd}||||t|j|dd\}}}}}
t|d d tjddg|ddt|j d qtD ]}tjddgddgddgg|d}tjg d|d}td	||f\}}|j\}}t|jd
kr|jd }nd}||||dt|j \}	}
tt	|	}tj
|jd dftjd}||||t|j|dd\}}}}}
t|d d tjddg|ddt|j d qd S )Nr   r   r   r   r   r   r   r   )gelsyr   rI   rH   rl   Frw   r   r   r   r   r   r   r   r   r   r   r   r   )r   r(   ry   r$   r+   rW   r   r   r   r   r   int32r   r'   )rX   r,   rZ   r   r   gelsy_lworkr   r   r   r   ra   r   jptvr   r   jr   r-   r-   r.   
test_gelsyj  st   



z"TestLeastSquaresSolvers.test_gelsyN)r   r   r   r   r   r   r   r-   r-   r-   r.   r      s
    D<9r   r,   r+   )rJ   rK   )rL   rI      r   c                 C   2   t d| d}|\}}|||d\}}t|d d S )Ngeqrf_lworkr   r   r   r   r$   r   )r,   r+   r   r   r   r   ra   r-   r-   r.   test_geqrf_lwork     r   c                   @      e Zd Zdd ZdS )TestRegressionc           
      C   s   t D ]j}tjd|d}tdg|g\}tt||dd ||\}}}}|tv rHtdg|g\}tt||dd  |dd ||dd  |dd q|tv rltd	g|g\}	tt|	|dd  |dd |	|dd  |dd qd S )
N)i,  rI   r   gerqfrI   r   orgrqrH   ungrq)r   r(   r   r$   assert_raises	Exceptionr   r'   )
rX   r,   rY   r   rqrj   r   ra   r   r   r-   r-   r.   test_ticket_1645  s   zTestRegression.test_ticket_1645N)r   r   r   r   r-   r-   r-   r.   r     s    r   c                   @   r   )	TestDpotrc           
      C   s   dD ]O}dD ]J}t jd t jjdd}||j}td|f\}}||||d\}}|||d }	|rCtt |	t t	| qtt 
|	t 
t	| qqd S )N)TF*   )rJ   rJ   )size)potrfpotri)cleanr   )r(   r)   r   normalr{   ro   r$   r   r   r   r   )
rX   lowerr  r   rY   dpotrfdpotrir~   ra   dptr-   r-   r.   test_gh_2691  s   zTestDpotr.test_gh_2691N)r   r   r   r
  r-   r-   r-   r.   r         r   c                   @   r   )
TestDlasd4c              
   C   sl  t g d}t g d}t t t |dd t dt|d ff|d d t jf f}t|ddddd}t|}t 	|d d d |d |t
|  gf}t 	|d d d df}td	|f}g }	td|D ]}
||
||}|	|d  t|d
 dkd|
  qlt |	d d d }	tt t |	 df t||	dt t jj dt t jj d d S )N)r         @r   r   )g(\@g@g333333皙r   rw   rH   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rJ   zcLAPACK root finding dlasd4 failed to find                                     the singular value %izThere are NaN rootsd   atolr   )r(   ry   hstackvstackdiagr   rW   newaxisr   concatenater   r$   ranger@   r   anyisnanr   r   float64r   )rX   sigmasm_vecMSMit_lensgmmvcr  rootsiresr-   r-   r.   test_sing_val_update  s4   
*
zTestDlasd4.test_sing_val_updateN)r   r   r   r+  r-   r-   r-   r.   r    r  r  c                   @   s   e Zd Zejdedd Zejddd eD ejddd	gejd
ddgdd Zejdg dg dg dgdd Z	dd Z
ejdddgdd ZdS )	TestTbtrsr,   c                 C   s2  |t v r8tjg dg dg|d}tjddgddgdd	gd
dgg|d}tjddgddgddgddgg|d}nC|tv rstjg dg dg dg|d}tjddgddgddgddgg|d}tjddgd d!gd"d#gd$d%gg|d}ntd&| d'td(|d}|||d)d*\}}t|d+ t||d+d,d- d.S )/zTest real (f07vef) and complex (f07vsf) examples from NAG

        Examples available from:
        * https://www.nag.com/numeric/fl/nagdoc_latest/html/f07/f07vef.html
        * https://www.nag.com/numeric/fl/nagdoc_latest/html/f07/f07vsf.html

        )p=
ףgQ@gHzG@g{Gz?)g      gq=
ףp@gHzGr   r   gp=
ף0r-  g(\+gףp=
0g333333*@g(\gHzG,gQ#rK   rH   rw   rJ   rI   r   )y
ףp=
Q@y{Gz@GzyQ?HzGy)\(??)yQQ@yq=
ףpGz@yףp=
?{Gzr   )yQ?q=
ףp@y)\(zGr   r   yQ!
ףp=
yףp=
8Gzyp=
#/)\h7y\(LHzG @yQHz6@yףp=
3@(\=y{Gz-333333yQ+3@GzT5@y               @y      ?      @y      ?      y             yt&m=#yi6@Ug$B@y[a^C?b->y-@ji& *!z	Datatype z not understood.tbtrsLabr}   uplor   h㈵>r   r  N)r   r(   ry   r'   
ValueErrorr$   r   r   )rX   r,   r2  r}   x_outr/  r   ra   r-   r-   r.   test_nag_example_f07vef_f07vsf  s\   	






z(TestTbtrs.test_nag_example_f07vef_f07vsfzdtype,transc                 C   s.   g | ]}d D ]}|dkr|t v s||fqqS ))Nro   rr   rr   )r   ).0r,   r   r-   r-   r.   
<listcomp>%  s    zTestTbtrs.<listcomp>r3  Ur0  r  r9  c                    sv  t d d\}}td d}|dk}|| }	||	 }
t|	|
 d d}fdd	|D } fd
d	|D }|dkrCtj d||	< tj||dd}t|d f }t|D ]\}}|	|||t
|dt| f< qYt|f }||||||d\}}t|d |dkrt|| |dd d S |dkrt|j| |dd d S |dkrt|j| |dd d S td)Ni  )rK   rJ   rI   r/  r   r<  rH   rw   c                    s   g | ]} t | qS r-   )r   r:  r   r   r-   r.   r;  9      z2TestTbtrs.test_random_matrices.<locals>.<listcomp>c                    s   g | ]}t |f qS r-   )r/   )r:  widthr   r-   r.   r;  :  s    dia)formatr   )r2  r}   r3  r   r  r9  g-C6
?r   ro   rr   zInvalid trans argument)r   r$   r  r(   r   spsdiagsr   r   diagonalr   minr/   r   r   ro   Hr6  )rX   r,   r   r3  r  r   kdr/  is_upperkuklband_offsetsband_widthsbandsrY   r2  rowkr}   r   ra   r-   )r,   r   r.   test_random_matrices$  s6   

(
zTestTbtrs.test_random_matriceszuplo,trans,diag)r<  r9  Invalid)r<  rR  r9  )rR  r9  r9  c                 C   s:   t dtjd}tdd}tdd}tt|||||| dS )z?Test if invalid values of uplo, trans and diag raise exceptionsr/  r   rK   rI   N)r$   r(   r   r   r   r   )rX   r3  r   r  r/  r2  r}   r-   r-   r.   &test_invalid_argument_raises_exceptionW  s   

z0TestTbtrs.test_invalid_argument_raises_exceptionc                 C   sP   t jdtd}t jdtd}tdtd}d|d< |||dd\}}t|d d	S )
aH  Test if a matrix with a zero diagonal element is singular

        If the i-th diagonal of A is zero, ?tbtrs should return `i` in `info`
        indicating the provided matrix is singular.

        Note that ?tbtrs requires the matrix A to be stored in banded form.
        In this form the diagonal corresponds to the last row.r   r   rK   r/  r   )rw   rJ   r<  r1  N)r(   r   floatr$   r   )rX   r2  r}   r/  r7   ra   r-   r-   r.   test_zero_element_in_diagonald  s   z'TestTbtrs.test_zero_element_in_diagonalzldab,n,ldb,nrhs)rL   rL   r   rL   )rL   rL   rJ   rL   c                 C   sB   t j||ftd}t j||ftd}tdtd}tt||| dS )z2Test ?tbtrs fails correctly if shapes are invalid.r   r/  Nr(   r   rT  r$   r   r   )rX   ldabr   ldbr   r2  r}   r/  r-   r-   r.   test_invalid_matrix_shapest  s   z$TestTbtrs.test_invalid_matrix_shapesN)r   r   r   r9   markparametrizer   r8  rQ  rS  rU  rY  r-   r-   r-   r.   r,    s0    
--
	r,  c                  C   s   dD ]O} t d| d}td| }td| }t|r|d9 }|||\}}}t|d t|d t|rLt|d	 tt|tk tt|tk qt|d
 qd S )Nrp   lartgr   rJ   rK   r&   333333?r   y       皙?)	r$   r(   ry   iscomplexobjr   r   typecomplexrT  )r,   r\  r\   gcssnrr-   r-   r.   
test_lartg  s   




rf  c            
      C   s  dD ]} d}d}t dd| }t dd| }dt | jd   }| dv r/td	| d
}d}ntd	| d
}|d9 }|d9 }d}t|||||g dg dg|d t|||||ddg ddd||gg|d t|||||dddg d||ddgg|d t|||||ddddg d||ddgg|d t|||||ddddg dd|d|gg|d t|||||dddddd	g d||d|gg|d t|||||ddddg dd|d|gg|d |||||ddd\}}	t||u  t|	|u  t|g d|d t|	g d|d qd S )Nrp   r]  r^  rK   rJ   rl   rH   fdrotr   y             r&   y              @)rL   rL   rL   rL   )r   r   r   r   r  rI   r>  )rL   rL   rJ   rJ   r   )offxoffy)rJ   rJ   rL   rL   )incxrk  r   )rL   rJ   rL   rJ   )rj  incyr   )rj  rl  rk  rm  r   )rJ   rJ   rL   rJ   r   )rl  rm  r   )overwrite_xoverwrite_y)r(   fullr   	precisionr%   r$   r   r   )
r,   r~   r   ur   r  rh  r\   rY   r}   r-   r-   r.   test_rot  sX   

rs  c               	   C   s  t jd t jd} | j| } t jddt jd  }|j |}dD ]}tddg|d\}}|dv r?| }n|  }||jd	 d
 |d |dd d	f \}}}t 	|d d d	f }	|d |	d	< ||	d
< t 	|d
d d	f }
d|
d	< ||
d
d < ||
|
 |d
d d d f t |jd
 |d
d d d f< ||
||d d d
d f t |jd	 dd|d d d
d f< t|d d d	f |	dd t|d	d d f |	dd q*d S )Nr   )rK   rK   r&   rp   larfglarfr   FDr   rH   rH   r   rI   r   r   Rsider4  ri  )r(   r)   r   ro   r{   conjr$   copyr+   r   r|   r   r   )a0a0jr,   rt  ru  rY   alphar   rj   expectedr   r-   r-   r.   test_larfg_larf  s,   
,>>r  c                  C   sB   t dtjdd} d}t| ||ddd}|dks|dksJ d S d S )	Ngesdd_lwork	preferredr,   ilp64iA%  T)r  r  i`DiD)r$   r(   float32r    )sgesdd_lworkr   r   r-   r-   r.    test_sgesdd_lwork_bug_workaround  s   r  c                   @   sF   e Zd Zejdedd Zejdeejdddd ZdS )		TestSytrdr,   c                 C   *   t jd|d}td|f}tt|| d S )Nr   r   sytrdr(   r   r$   r   r6  )rX   r,   Ar  r-   r-   r.   test_sytrd_with_zero_dim_array     z(TestSytrd.test_sytrd_with_zero_dim_arrayr   rH   rJ   c                 C   s  t j||f|d}td|f\}}t jd||d  d d |d|t |< ||\}}t|d ||d|d\}}	}
}}t|d t||dt |j dd	 t|	t 	| t|
d
 t|d
 |||d\}}	}
}}t|d t j
||d}t |jd }|	|||f< t |jd d }|
||d |f< |
|||d f< t j|||d}t|d D ]3}t j||d}|d ||d f |d |< d||< t j|||d|| t ||  }t ||}qt |d}|j| ||< t |jt ||}t||dt |j dd	 d S )Nr   )r  sytrd_lworkrH   rI   r   r  r   rL   r   r          r   rw   )r(   r   r$   arangetriu_indices_fromr   r   r   r   r  r   r+   r
   r  outerr{   r   ro   )rX   r,   r   r  r  r  r   ra   datarg   erj   ro   rP  k2Qr)  r   rG  i_lowerQTAQr-   r-   r.   
test_sytrd  s@   





$ zTestSytrd.test_sytrdN)	r   r   r   r9   rZ  r[  r   r  r  r-   r-   r-   r.   r    s    
r  c                   @   sL   e Zd Zejdedd Zejdee	eejdddd Z
d	S )
	TestHetrdcomplex_dtypec                 C   r  )Nr   r   hetrdr  )rX   r  r  r  r-   r-   r.   test_hetrd_with_zero_dim_arrayL  r  z(TestHetrd.test_hetrd_with_zero_dim_arrayzreal_dtype,complex_dtyper   r  c              	   C   s  t j||f|d}td|f\}}t jd||d  d d |ddt jd||d  d d |d  |t |< t |t t | dD ]}|||d\}}	t|	d qFt	||}
||d|
d	\}}}}}	t|	d t
||d
t |j dd t
|t t | t
|d t
|d |||
d\}}}}}	t|	d t j||d}t j|jd td}||||f< t j|jd d td}|||d |f< ||||d f< t j|||d}t|d D ]6}t j||d}|d ||d f |d |< d||< t j|||d|| t |t |  }t ||}qt |d}t |j| ||< t t |jt ||}t
||dt |j dd d S )Nr   )r  hetrd_lworkrH   rI   r&   )r   rH   r  r   r  rL   r   r  r  r   rw   rl   )r(   r   r$   r  r  fill_diagonalr   r  r   r    r   r   r   r   r+   r   r
   r  r  r{  r{   r   ro   )rX   r   
real_dtyper  r  r  r  r   r7   ra   r   r  rg   r  rj   ro   rP  r  r  r)  r   rG  r  QHAQr-   r-   r.   
test_hetrdS  sR   
"





zTestHetrd.test_hetrdN)r   r   r   r9   rZ  r[  r'   r  zipr   r  r-   r-   r-   r.   r  K  s    
r  c               
   C   s^  t tD ]\} }td|d\}}t|dddd}| dk rHtjg dg dg d	g d
g dg dg|d}tjg d|d}tjddg|d}n/tg dg dg dg dg dg dg}tdgdgdgdgdgdgg}tjd|d}tjg dg dg|d}||||||d\}	}	}	}
}	| dk rtg d}ntg d}t|
|dd  qd S )!N)gglsegglse_lworkr   rM   rK   rI   )r   r   r[   )g=
ףp=g{Gzg(\ؿ      ?)zGgHzG?gףp=
ӿQ)ffffff@gQ?g?gffffffֿ)r  g{Gz?Qg{Gz?)333333?g333333?r  g
ףp=
)g{Gz{Gz?gzG      ?)g      r  gGz?gHzGgzGg=
ףp=?r  )yQ?QyQQ?yQ{Gz @y=
ףp=?)y\(\￮Gz?y333333RQ?yQzG?yQQ?)yףp=
?q=
ףpݿy)\(?{Gz?y)\(?(\ſy(\333333?)yGz?RQ?yRQ?HzGy\(\
ףp=
׿y)\(?ɿ)y(\?RQ?y?{Gz?y(\ſq=
ףpݿyQ?q=
ףp?)yHzG?Qѿy?QyQ뱿Gz?yp=
ף?p=
ף?yRQ
ףp=
?yffffff?GzyzG GzyQ?ffffff
@yp=
ף)\(@y(\ @Q?)r   r        r  )r  r   r  r  r   )^"L?\}?r  r  )y!f?$_Kdy^gŵ翸F@y!f?}dy61ŵe_@ru   )r   r   r$   r    r(   ry   r   r   )r   r,   func
func_lworkr   rY   r~   rg   r}   r7   resultr  r-   r-   r.   
test_gglse  sN   


r  c                  C   s  t d ttt D ]\} }d}| dk r+td|d}td|d\}}t|||}ntd|d}td|d\}}t||t||d	  |}|| j d
 d
t	j
||d  }t|d}t||}|||dd\}	}
}||	|
|dd\}}ttd| t	jj|dd | dk  q
d S )Nr   rl   rK   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr&   rI   rH   )r   r  )rY   ipivanormr  r[   )r   r   r   r'   r$   r   r*   r{  ro   r(   r
   r   r    r   r   linalgcond)r   r,   r   r  funconfunctrfr  r  r   ldur  r7   rcondr-   r-   r.   test_sycon_hecon  s"   $

*r  c                  C   s   t d ttD ]r\} }d}td|d\}}}}t|||}||j d }t|||}||j d dtj||d  }|||\}	}
}t	|dk ||\}}t	|dk |||\}}t	|dk ||\}}
}t	|dk t
||	dd qd S )	Nr   rl   )r  sygstsyevdsygvdr   rI   r   -C6?r   )r   r   r   r$   r   r*   ro   r(   r
   r   r   )r   r,   r   r  r  r  r  r  Beig_gvdr7   ra   r}   rY   eigr-   r-   r.   
test_sygst  s(    r  c                  C   s*  t d ttD ]\} }d}td|d\}}}}t|||dt|||  }|| j d }t|||dt|||  }|| j d dtj	||d  }|||\}	}
}t
|dk ||\}}t
|dk |||\}}t
|dk ||\}}
}t
|dk t||	dd	 qd S )
Nr   rl   )r  hegstheevdhegvdr   r&   rI   r   r  r   )r   r   r'   r$   r   r*   r{  ro   r(   r
   r   r   )r   r,   r   r  r  r  r  r  r  r  r7   ra   r}   rY   r  r-   r-   r.   
test_hegst  s(   $$$r  c               	      sl  t d d\} }ttD ]\}}td|d\}}t|| |}|dk r-tt| ||}ntt| |t| |d  |}tt	||j
 |||d\}}	t|	dk t|d	d	d	| f tj| ||  f|df}
ttj| |d|d	d	| d	f ftj||d  fd
dt| D }ttj|}t|
|| t||ddt|dj dd qd	S )z
    This test performs an RZ decomposition in which an m x n upper trapezoidal
    array M (m <= n) is factorized as M = [R 0] * Z where R is upper triangular
    and Z is unitary.
    r   )rl      tzrzftzrzf_lworkr   rI   r&   r   r   Nc              
      D   g | ]} | |gd d f j |gd d f    qS Nro   r{   r{  r=  IdVrj   r-   r.   r;  @     D ztest_tzrzf.<locals>.<listcomp>rl   r   r  r  )r   r   r   r$   r    r   r   r*   r   r   ro   r   r(   r  r   r
   r  r   r{   r   r   spacingr   )r   r   r   r,   r  tzrzf_lwr   r  rzra   rx  r   Zr-   r  r.   
test_tzrzf$  s,   
"0(r  c               	   C   s  t d ttD ]\} }d}| dkr*tt||t||d  t| |}d}ntt||t| |}d}td|d\}}}||\}}	t|d	|}
|d
||
}t|t	| |
| d	 dkrfdndd |d
||
|d}t|t	|
 j |
| d	 dkrdndd |d|t|t|f< |d
||
|dd}t|t	|
 j |
| d	 dkrdndd td||}|d
|||ddd}t|t	| |j
 j| d	 dkrdndd qdS )z
    Test for solving a linear system with the coefficient matrix is a
    triangular array stored in Full Packed (RFP) format.
    r   r   rH   r&   rr   ro   )trttftfttrtfsmr   rI   rw   r   rK   rM   ru   r   r   r<  )r   r  rJ   rx  )r   r  rz  N)r   r   r   r   r   r
   r*   r$   r   r   r{  ro   r(   r  )r   r,   r   r  r   r  r  r  Afpr7   r  solnB2r-   r-   r.   	test_tfsmF  s@   *r  c               	      s~  t d d\} }}ttD ].\}}td|d\}}t|| |}|dk r?tt| ||}t|||}	td|d\}
}n(tt| |t| |d  |}t||t||d  |}	td|d\}
}t|||}|||d	\}}t	tj
| |d|d
d
| d
f ftj
||d  fddt| D }ttj|}|dk rdnd}dt|dj }|
||	|d	\}}t|dk t|||	 t|	|dd |
||	||d\}}t|dk t|| j|	 t|	|dd |
||	d|d\}}t|dk t||	| t|	|dd |
||	d||d\}}t|dk t||	| j t|	|dd qd
S )a  
    This test performs a matrix multiplication with an arbitrary m x n matric C
    and a unitary matrix Q without explicitly forming the array. The array data
    is encoded in the rectangular part of A which is obtained from ?TZRZF. Q
    size is inferred by m, n, side keywords.
    r   )rl   r  r  r  r   rI   )ormrzormrz_lworkr&   )unmrzunmrz_lworkr   Nc              
      r  r  r  r=  r  r-   r.   r;    r  z$test_ormrz_unmrz.<locals>.<listcomp>ro   rr   rl   r   r   r  r  r   rx  )rz  r   )rz  r   r   )r   r   r   r$   r    r   r   r*   r(   r  r
   r  r   r{   r  r   r   r   r   r{  ro   )qmqncnr   r,   r  r  lwork_rzr  rr   orun_mrzorun_mrz_lw	lwork_mrzr  ra   r   r  r   tolcqr-   r  r.   test_ormrz_unmrzo  sV   

"
(r  c               	   C   s   t d ttD ]t\} }d}| dkr%t||t||d  |}d}n
t|||}d}td|d\}}||\}}t|d	k ||d
d\}	}t|d	k |||dd\}
}t|d	k |||d
d\}}t|d	k t|d |d f|d}t|dd|d df |ddddf< ||d d dddf  t|d|d d|d f 	 j
7  < t|d |d f|d}t|ddd|d f |ddddf< |d|d ddf  t||d d|d df 	 j
7  < t||jddd t|
|	 j
jddd t|	|jddd t||	 j
jddd |||\}}t|d	k |||	d
d\}}t|d	k |||
|dd\}}t|d	k ||||d
d\}}t|d	k t|t| t|t| t|t| t|t| qdS )z
    Test conversion routines between the Rectengular Full Packed (RFP) format
    and Standard Triangular Array (TR)
    r   r   rH   r&   rr   ro   )r  r  r   r   r0  r3  r<  )transrr3  rI   Nrw   F)order)r   r   r   r   r*   r$   r   r   r   r{  ro   r   r   reshape)r   r,   r   A_fullr  r  r  A_tf_Ura   A_tf_LA_tf_U_TA_tf_L_TA_tf_U_mA_tf_L_mA_tr_UA_tr_LA_tr_U_TA_tr_L_Tr-   r-   r.   test_tfttr_trttf  sX   ,F,Br  c                  C   sr  t d ttD ]\} }d}| dkr"t||t||d  |}nt|||}td|d\}}||\}}t|dk ||dd	\}}t|dk t|}	t||d  d
 |d}
t	|j
|	 |
dd< t|}	t||d  d
 |d}t|j
|	 |dd< t||
 t|| |||\}}t|dk |||dd	\}}t|dk t|t	| t|t| qdS )r  r   r   rH   r&   )trttptpttrr   r   r0  r  rI   N)r   r   r   r   r*   r$   r   r   r   r   ro   r   r   r   )r   r,   r   r  r  r  A_tp_Ura   A_tp_LindsA_tp_U_mA_tp_L_mr	  r
  r-   r-   r.   test_tpttr_trttp  s4    

r  c                  C   s   t d ttD ]f\} }d}| dkr/t||t||d  |}|| j |t|  }nt|||}||j |t|  }td|d\}}}||\}}|||\}	}t	|dk |||	\}
}t
|}t|
| qdS )	zk
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array
    r   r   rH   r&   )pftrfr  r  r   r   N)r   r   r   r   r*   r{  ro   r
   r$   r   r   r   )r   r,   r   r  r  r  r  r  ra   	Achol_rfpA_chol_rr7   Acholr-   r-   r.   
test_pftrf  s$   r  c                  C   s
  t d ttD ]z\} }d}| dkr/t||t||d  |}|| j |t|  }nt|||}||j |t|  }td|d\}}}}||\}}	|||\}
}	|||
\}}	t	|	dk |||\}}t
|}t|t|| d dkr~d	nd
d qdS )z
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array to find its inverse
    r   r   rH   r&   )pftrir  r  r  r   r   rI   rK   rM   ru   N)r   r   r   r   r*   r{  ro   r
   r$   r   r   r   r   )r   r,   r   r  r  r  r  r  r  ra   
A_chol_rfp	A_inv_rfpA_inv_rr7   Ainvr-   r-   r.   
test_pftri'  s*   
r   c                  C   s\  t d ttD ]\} }d}| dkr/t||t||d  |}|| j |t|  }nt|||}||j |t|  }t|df|d}t|d df|d}t|d df|d}t	d|d\}}}	}
|	|\}}|||\}}||||\}}t
|d	k tt|||| ||||\}}t
|d	k tt|||| d d	krd
ndd qdS )z
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array and solve a linear system
    r   r   rH   r&   rJ   r   rI   )pftrsr  r  r  r   rK   rM   ru   N)r   r   r   r   r*   r{  ro   r
   r   r$   r   r   r   r   r   )r   r,   r   r  r  Bf1Bf2r!  r  r  r  r  ra   r  r  r-   r-   r.   
test_pftrsG  s2   r$  c                  C   s0  t d ttD ]\} }d}| dkr/t||t||d  |}|| j |t|  }nt|||}||j |t|  }| dk rHdnd}tdd	d
	|f|d\}}}||\}}	t
j|d|}
||dd|
d|}|||\}}	t|t|
|
 j d|  | d dkrdndd qdS )zT
    Test for performing a symmetric rank-k operation for matrix in RFP format.
    r   r   rH   r&   rI   r   hr  r  z{}frkr   rw   r   rK   rM   ru   N)r   r   r   r   r*   r{  ro   r
   r$   rB  r(   r)   r   r   r{   )r   r,   r   r  prefixr  r  shfrkr  r7   rr   Afp_outA_outr-   r-   r.   test_sfrk_hfrkl  s,    r*  c                  C   s  t d ttD ]\} }d}| dkr/tdd||ftdd||fd  |}|| j }ntdd||f|}||j |t|  }dt	|dj
 }td	|d
\}}}t||dd}t|ddd\}	}
}t||dd}||d|d\}}}|||dd\}}}tt|dt|	|ddf d|dd t|ddd\}}
}||dd\}}}|||dd\}}}tt|dt||ddf d|dd qdS )zt
    Test for going back and forth between the returned format of he/sytrf to
    L and D factors/permutations.
    r   rl   rH   i   r&   r  r   )syconvr  r  r   r  F)r  	hermitianr  rw   Nr  r  r   )r   r   r   r   r*   r{  ro   r
   r(   r  r   r$   r    r   r   r   r   )r   r,   r   r  r  r,  trf	trf_lworklwr0  Dpermr  r  ra   rY   r  r<  r-   r-   r.   test_syconv  s6   (*r3  c                   @   s    e Zd ZdZdd Zdd ZdS )TestBlockedQRzd
    Tests for the blocked QR factorization, namely through geqrt, gemqrt, tpqrt
    and tpmqr.
    c              
   C   s.  t d ttD ]\}}d}|dkr#t||t||d  |}nt|||}dt|dj }td|d\}}|||\}}	}
|
d	ksKJ t	|d
tj
||d }tj
||d||	 |j   }t|}t|j | tj
||d|dd t|| ||dd |dkrt||t||d  |}d}n
t|||}d}dD ]T}d|fD ]M}|||	|||d\}}
|
d	ksJ ||kr|j }n|}|dkr|| }n|| }t|||dd ||fdkr|||	|\}}
|
d	ksJ t|| qqtt|||	|dd tt|||	|dd qd S )Nr   r   rH   r&   r  r   )geqrtgemqrtr   r   rw   r  r  rr   ro   r0  rx  r9  rz  r   r0  r0  r9  r  ry  r  )r   r   r   r   r*   r(   r  r   r$   r   r
   ro   r{  r   r   r   r   r   )rX   r   r,   r   r  r  r5  r6  rY   tra   r   r  rx  rr   	transposerz  r   r~   qqC	c_defaultr-   r-   r.   test_geqrt_gemqrt  sT     


zTestBlockedQR.test_geqrt_gemqrtc                  C   s  t d ttD ]\}}d}|dkr2t||t||d  |}t||t||d  |}nt|||}t|||}dt|dj }td|d\}}d	|d
 |fD ]t}	||	|||\}
}}}|d	ksoJ t	t
|
dt
|d t	t
||	| d t
||	| d  t||	| t||	| }}ttj||d|f}tjd
| |d|| |j   }tt|
t|
f}t|j | tjd
| |d|dd t|| tt||f|dd |dkrt||t||d  |}t||t||d  |}d}nt|||}t|||}d}dD ]}d|fD ]}||	||||||d\}}}|d	ksJJ ||krU|j }n|}|dkrstj||fd	d}tj||fd	d}|| }ntj||fdd}tj||fdd}|| }t|||dd ||fdkr||	||||\}}}|d	ksJ t	|| t	|| q3q-tt||	||||dd tt||	||||dd q[qd S )Nr   r   rH   r&   r  r   )tpqrttpmqrtr   r   rI   rw   r  r  rr   ro   r7  r9  r8  r0  r   r9  r  ry  r  )r   r   r   r   r*   r(   r  r   r$   r   r   r   r  r
   ro   r{  r   r   r   r   ) rX   r   r,   r   r  r  r  r@  rA  lrY   r}   r:  ra   B_pentb_pentr   r  rx  rr   r1  r;  rz  r   r~   rg   r<  cdCDqCDr>  	d_defaultr-   r-   r.   test_tpqrt_tpmqrt  sx    *"$





zTestBlockedQR.test_tpqrt_tpmqrtN)r   r   r   r8   r?  rI  r-   r-   r-   r.   r4    s    >r4  c                  C     t d ttD ]\} }d}d}td|d}| dkr8t||| |dt||| |  }|| j }nt||| |}||j }||\}}}}	t|}
d|
|| d || d f< t	|	d d	t
t
jj }d	t
t
jj }| d
v r~|n|}t||d  d d |d f |
 j|
 d|d ||dd\}}}}	t|}d||| d || d f< t	|	d d	t
t
jj }d	t
t
jj }| d
v r|n|}t||d  d d |d f || j d|d qd S )Nr   rl   rI   pstrfr   rH   r&   r    r   rI   r5  r  r   r   r   r$   r   r*   r{  ro   r   r   r(   r   r  r   r   r   r   )r   r,   r   re  rK  r  r~   pivr_cra   r<  single_atoldouble_atolr  r0  r-   r-   r.   
test_pstrfB  6   ,

2
4rS  c                  C   rJ  )Nr   rl   rI   pstf2r   rH   r&   r  rL  rM  r5  r  rN  )r   r,   r   re  rU  r  r~   rO  rP  ra   r<  rQ  rR  r  r0  r-   r-   r.   
test_pstf2j  rT  rV  c                  C   sV  t g dg dg dg dg} t g dg dg dg}ttD ]\}}|dk rBt g d	g d
g dg dg}||}n't jg dg dg dg|d}|t g dg dg dgd 7 }||}td|d}||\}}}}	}
}|dk rt| ||d d d f | | ddd q#t|||d d d f | | ddd q#d S )N)g      ?r   g1w-!?gd`TRۿ)r   gsr  r  )gs?r  g2%䃮g,eX)r  gsFg%ug??)y/nҿ&?yDioɴ?Af?y o_[ Acп)ysֿAfҿyPkw?JY8y5;NёCl?)yYڊ?1*?y=yXѿ@a+?yh oſFxrI   )g   ЈBg   tBgffffff @g   ٓ )      @gg#fDgffffff)gHzG?gQg'Vgp=
ף)g(\r  gS7нr^  )gq=
ףpg   Ag(\)g333333g   Bg333333ÿ)gZ9=gQgֽr   )gffffff@g   tޅBr  )g(\g   Zgq=
ףp?)gEop=gQ?gZEqҽr&   geequr   r  r5  )r(   ry   r   r   r*   r$   r   )desired_realdesired_cplxr   r,   r  rX  re  r~   rowcndcolcndamaxra   r-   r-   r.   
test_geequ  sP   





  r^  c            
         s   t g d} ttD ]I\}}t jd|d}||dk rdnd t j fddtd	d
D |d}|t t |7 }td|d}||\}}}}	t	t 
|t|  qd S )N)
r   r   r   r   r   r   rw   rw   r   r.  rl   r   rI   r   r&   c                    s   g | ]} d |  qS )r   r-   r=  r  r-   r.   r;    r?  ztest_syequb.<locals>.<listcomp>rL   syequb)r(   ry   r   r   r
   r  rot90r  r$   r   log2r*   r   )
desired_log2sr   r,   r  rg   ra  r   scondr]  ra   r-   r_  r.   test_syequb  s   "rf  Tz.Failing on some OpenBLAS version, see gh-12276)reasonc               	   C   s   t dgd dgd  t jt dddd  } t| \}}}}t|d tt |d	d
gd d	g dgd   t dt t 	dd d } d| d< d| d< tj
| t jdd\}}}}t|d tt |g d d S )NrI   rL   i  rP   rH   )rP  r&   r   r  r  r`  rM                   i   rL   rL   y              0@)rL   r   r  )r   rw   rw   r   r   r`  r   rw   rw   r   r   )r(   r  r   r   zheequbr   r   rc  r   r  cheequbr*   	complex64)r  r   re  r]  ra   r-   r-   r.   test_heequb  s   2
( 
rn  c                  C   s:  t jd d} t j| }t j| t j| d  }ttD ]z\}}|dk r>t j| | }||}|| }||}nt j| | t j| | d  }||}|| }||}td|d}td|d}||dd	\}	}
}}||	||
|dd
\}}|dk rt|||| dd q t|||| dd q d S )Nr   rl   r&   rI   getc2r   gesc2r   r  )overwrite_rhsrK   ru   )	r(   r)   r   r   r   r   r*   r$   r   )r   rY  rZ  r   r,   r  r}   ro  rp  lur  jpivra   r   rT   r-   r-   r.   test_getc2_gesc2  s4   
 



ru  r  )rM   rL   rj  jobarM   joburK   jobvjobrrH   jobpc              
   C   s  t d | \}}	dt|j }
t| |}td|d}|dk }|dk }|dko*||	k}t|}|dko9| o9| }|dkoD|oA| oD|}|dkoO|oL| oO|}|rUd}n	|sY|r\d}nd	}|dkrt|dkrttt||||||||	 dS ||||||||d
\}}}}}}t	|| |s	|d	 |d  |d|	  }t
|t|dd|
d |dkr|ddd|	f }|r|rt
|t| | j ||
d |rt
| j| t|	|
d |rt
| j| t|	|
d t	|d	 tj| t	|d t| t	|d d	 dS dS )a  Test the lapack routine ?gejsv.

    This function tests that a singular value decomposition can be performed
    on the random M-by-N matrix A. The test performs the SVD using ?gejsv
    then performs the following checks:

    * ?gejsv exist successfully (info == 0)
    * The returned singular values are correct
    * `A` can be reconstructed from `u`, `SIGMA`, `v`
    * Ensure that u.T @ u is the identity matrix
    * Ensure that v.T @ v is the identity matrix
    * The reported matrix rank
    * The reported number of singular values
    * If denormalized floats are required

    Notes
    -----
    joba specifies several choices effecting the calculation's accuracy
    Although all arguments are tested, the tests only check that the correct
    solution is returned - NOT that the prescribed actions are performed
    internally.

    jobt is, as of v3.9.0, still experimental and removed to cut down number of
    test cases. However keyword itself is tested externally.
    r   r  gejsvr   rI   rH   r   r.  r   )rv  rw  rx  ry  jobtrz  NF)r  ri  )r   r(   r   r   r/   r$   r_  r   r   r   r   r   r  r{  ro   identityr  matrix_rankcount_nonzero)r  r,   rv  rw  rx  ry  rz  r|  r   r   r  r  r{  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvarr  r   r   r   ra   sigmar-   r-   r.   test_gejsv_general  sV   !


	"r  c                 C   sX  t d| d}|d\}}}}}}t|d t|jd t|jd t|tjdg| d tjd| d}||\}}}}}}t|d t|jd t|jd t|tjdg| d tjd| d}||\}}}}}}t|d t|jd t|jd t|tjg | d ttdd	d		| }t
||j }|d
}	||}
t||	 dS )z*Test edge arguments return expected statusr{  r   r   r   rH   rH   rH   rw  r  rl   r  N)r$   r   r+   r(   ry   r   sinr  r  r*   asfortranarrayro   r|  r   )r,   r{  r  rr  r   r   r   ra   r  Acr7   r-   r-   r.   test_gejsv_edge_argumentsm  s.   



r  kwargsrP   r|  c                 C   s2   t jdtd}tdtd}tt||fi |  dS )z-Test invalid job arguments raise an Exception)rI   rI   r   r{  NrV  )r  r  r{  r-   r-   r.    test_gejsv_invalid_job_arguments  s   
r  zA,sva_expect,u_expect,v_expect)g)\(@gp=
ףgffffff?g
ףp=
)gQ?gQgGz?g(\)gQ޿gQgGz?gzGʿ)gQ?gQ?gHzG?g)\(?)ggq=
ףp@g333333r  )ףp=
?g(\r  g(\)g cZB#@gI.!v@g?ܵ?r  )gC?g=yX5gc=yXga4?)gB`"?g:pΈҞgʡE?gn4@?)g[B>٬?g٬\m?gJ{/L?gOe?)gc]Fgꕲq׿g\m?fc]F)g؁sFڿgZB>?g0L
F%?gq=
ףp)g ?gR!u?guVſg&Sٿ)gǘ?gV-g	^)p?g()gFx$g6[ ٿgUN@giq?)g1Zd?gOnӿgΈ?g_vO?)g}?5^Iؿg58EGr?gi o?g7[ Ac                 C   sT   d}t d| jd}|| \}}}}	}
}t|||d t|||d t|||d dS )z~
    This test implements the example found in the NAG manual, f08khf.
    An example was not found for the complex case.
    r  r{  r   ri  N)r$   r,   r   )r  
sva_expectu_expectv_expectr  r{  r  rr  r   r   r   ra   r-   r-   r.   test_gejsv_NAG  s   r  c           !   	   C   s  t d d}dt| j }t|d f| d}t|f| d}t|d f| d}| | | g}t|t|d t|d }tj|}|| }	t	d| d\}
}|
|||\}}}}}}t
||d  t
||d  t
||d	  t|dt|d t|d	 }tj|| d}t|D ]2\}}|| d }|d d ||gf |d d ||gf< |d d |f  |d d |d f | 7  < qd|d d }}|d d ||gf |d d ||gf< t||| |d
 |	 }|||||||	\}}t
|	| t|||d
 | tv rd}|j| }n	d}| j| }||||||||d\}}t|||d
 tt |
|d d || W d    n	1 sIw   Y  tt |
||d d | W d    n	1 shw   Y  tt |
|||d d  W d    n	1 sw   Y  tt |
|d |d d |d  W d    n	1 sw   Y  d|d< d|d< |
|||\}}}}}} tj||d  dkd||d   d S )Nr   rl   r  rH   r   rw   gttrfgttrsr   rI   ri  ro   rr   r  z3?gttrf: _d[info-1] is {}, not the illegal value :0.)r   r(   r   r   r/   r|  r  r)   r   r$   r   r
   r   r   r   ro   r{  r   r6  r   testingr   rB  )!r,   r   r  durg   dldiag_cpyr  r   r}   r  r  _dl_d_dudu2r  ra   r<  r0  r)  r   rO  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infor-   r-   r.   test_gttrf_gttrs  sl   "$$.$





r  z1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)g @r  ffffff?r   )r  r  g      ffffff@)333333@@r   g      )r  r`  r  r  )r  r  rN   gC>)rw   r  rO   )rI   rJ   rK   rL   rL   g@gffffff@      g%@g@g	r]  gffffff&g3@rh  rL   rN   rJ   r.  r   )       @             @      ?            ?      ?      )?r  ffffff
@333333ӿ333333@ffffff
?)      ?             ?      ?       @      r  )r  r  r  r  )r  r  r  r  y ~:pffffff?)r  r  r  y333333@      y@@y333333@3333332@y333333yffffff-ffffff#@y      333333yfffff?@y333333"@y      𿚙?y      ffffff(@r  r  y      @      y      ?       @y      @      @r  y             r  r  y       @       c	                 C   s   t d| d | d f\}	}
|	||| \}}}}}}t|| t|| t||dd t|| |
||||||\}}t|| d S )Nr  r   r  ri  )r$   r   )r  rg   r  du_expd_expdu2_expipiv_expr}   r   r  r  r  r  r  r  r  ra   r  r-   r-   r.   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csf  s   2


r  ))rJ   rN   )rN   rJ   r   c                 C   r   )Ngeqrfp_lworkr   r   r   r   )r,   r+   r  r   r   r   ra   r-   r-   r.   test_geqrfp_lwork^  r   r  zddtype,dtypec                 C   s\  t d dt|j }d}t|f| d }t|d f|}t|t|d tt|d }| | g}td|d}|||\}	}
}t	||d	  t	||d  t
|d	d
|d t|
dtt| }t|	}t||| | j |d t|f|}|| }td|d}||	|
 |\}}t
|d	d|d t|||d d S )Nr   r  rl   rK   rH   rw   pttrfr   r   zpttrf: info = {}, should be 0)err_msgri  pttrszpttrs: info = {}, should be 0)r   r(   r   r   r/   r  r{  r|  r$   r   r   rB  r   r   r|   ro   )ddtyper,   r  r   rg   r  r  r  r  r  _era   r0  r1  r   r}   r  _xr-   r-   r.   test_pttrf_pttrsg  s*   (
r  c                 C   s`   d}t d|d}t|f| d }t|d f|}tt||d d | tt|||d d  d S )Nrl   r  r   rI   rH   rw   )r$   r/   r   r6  )r  r,   r   r  rg   r  r-   r-   r.   *test_pttrf_pttrs_errors_incompatible_shape  s   r  c           	      C   s   d}t d|d}t|f| d }t|d f|}d|d< d|d< |||\}}}t||d  dd||d   t|f| }|||\}}}t|dkd d S )	Nrl   r  r   rI   rH   r   z3?pttrf: _d[info-1] is {}, not the illegal value :0.z2?pttrf should fail with non-spd matrix, but didn't)r$   r/   r   rB  r   )	r  r,   r   r  rg   r  r  r  ra   r-   r-   r.   'test_pttrf_pttrs_errors_singular_nonSPD  s   r  z%d, e, d_expect, e_expect, b, x_expect)rK   rl      r   rL   )r   r  r  rO   )rK   rP   r      rH   )r  gK=Ur]  r  rl   rI      A      g      @rw   r`  )r  )   .      )y      0@      0@y      2@      "      ?      )r  rP   rH   rK   )r  r  r  y      P@      0@y      0      @y     @W@      O@y     N@     Py     S@      Ty     Q@     Ry      ,@      ;y     A@      .@y             r  c                 C   s   d}t d|d d}|| |\}}	}
t|||d t|	||d t d|d d}|||	 |\}}
t|||d |jtv rQ|||	|dd\}}
t|||d d S d S )	Nr  r  r   r   ri  r  rH   r  )r$   r   r{  r,   r'   )rg   r  d_expecte_expectr}   x_expectr  r  r  r  ra   r  r  r-   r-   r.   test_pttrf_pttrs_NAG  s   
r  c                 C   s  |dkrUt ||f| }|tt|d|   }|| j d }t|d }t |f|d }t |d f|}t|t|d t|d }|| | j }	|}
n4t |f|}t |d f|}|d }t|t|d t|d }	t|t|d t|d }
|||	|
fS )NrH   rK   rI   rw   )r/   r(   r  r   r{  ro   r   )r,   realtyper   	compute_zA_eigvrrg   r  trir  zr-   r-   r.   pteqr_get_d_e_A_z  s    """r  zdtype,realtyper  c                 C   s   t d dt| j }td| d}d}t| |||\}}}}	||||	|d\}
}}}t|dd| tt	t
|d t	|
|d	 |rkt|t|j t||d	 t|t|
 t|j ||d	 d
S d
S )a  
    Tests the ?pteqr lapack routine for all dtypes and compute_z parameters.
    It generates random SPD matrix diagonals d and e, and then confirms
    correct eigenvalues with scipy.linalg.eig. With applicable compute_z=2 it
    tests that z can reform A.
    r   rL  pteqrr   rl   rg   r  r  r  r   zinfo = {}, should be 0.ri  N)r   r(   r   r   r$   r  r   rB  r   sortr   r{  ro   r}  r  )r,   r  r  r  r  r   rg   r  r  r  d_pteqre_pteqrz_pteqrra   r-   r-   r.   
test_pteqr	  s    
"
r  c                 C   sZ   t d td| d}d}t| |||\}}}}||d |||d\}	}
}}|dks+J d S )Nr   r  r   rl   rK   r  r  r   r   r$   r  r,   r  r  r  r   rg   r  r  r  r  r  r  ra   r-   r-   r.   test_pteqr_error_non_spd#	  s   r  c           	      C   s   t d td| d}d}t| |||\}}}}tt||d d |||d tt|||d d ||d |rEtt||||d d |d d S d S )Nr   r  r   rl   rw   r  )r   r$   r  r   r6  )	r,   r  r  r  r   rg   r  r  r  r-   r-   r.   "test_pteqr_raise_error_wrong_shape2	  s    r  c                 C   sf   t d td| d}d}t| |||\}}}}d|d< d|d< |||||d\}	}
}}|dks1J d S )Nr   r  r   rl   r   r  r  r  r-   r-   r.   test_pteqr_error_singularA	  s   r  zcompute_z,d,e,d_expect,z_expect)gp=
ף@rW  gq=
ףp?r  )g\(\	@g
ףp=
g?)gŏ1w- @gR'?g/n?g&䃞ͪ?)g cZB>?gCl?g:pΈڿg??)gaTR'?gSۿg}гY?g%uο)g\mg٬\m?gAf?gL
F%u)gǘgŏ1w-!?g333333?gz6?c                 C   sx   d}t d|jd}t|t|d t|d }||||| d\}}	}
}t|||d tt|
t||d dS )	zb
    Implements real (f08jgf) example from NAG Manual Mark 26.
    Tests for correct outputs.
    r  r  r   rH   rw   r  ri  N)r$   r,   r(   r  r   r   )r  rg   r  r  z_expectr  r  r  r  r  _zra   r-   r-   r.   test_pteqr_NAG_f08jgfP	  s   "r  matrix_size)r   )rN   rM   rM   rM   c              
   C   s  t jd dt | j }dt | j }td| d}td| d}|\}}t||f| d}||\}	}
}t |	}||kr[t j||f| d}|	|d d d |f< |||
|dd }n||	d d d |f |
|dd }t	|| ||d	 t	t 
|jd || j ||d
 t	|t ||d	 tt t |t tt |k t|dk t||f| dd }t|\}}||\}}}tt t |dk ot t |dk d S )Nr      r  geqrfpr   orgqr)rj   r   r   r   r5  rw   )r(   r)   r   r   r   r$   r/   r   r   r   r
   r+   r{  ro   r   allr  rW   r   r  )r,   r  r   r  r  gqrr   r   r  qr_Arj   ra   re  qqrr<  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negr-   r-   r.   test_geqrfpi	  s6   
"(r  c                  C   s(   t g } td| jd}tt||  d S )Nr  r   )r(   ry   r$   r,   r   r   )A_emptyr  r-   r-   r.   #test_geqrfp_errors_with_empty_array	  s   
r  driver)evevdevrevxpfxsyhec              
   C   s   d}| dkrt nt}t| | d |d d}t| | d |d d}zt||dd t||dd W d S  tyQ } ztd| | | W Y d }~d S d }~ww )	N  r  _lworkr   r   rH   r  ({}_lwork raised unexpected exception: {}r   r'   r$   r    r   r9   failrB  r  r  r   r,   sc_dlwdz_dlwr  r-   r-   r.   test_standard_eigh_lworks	  s   r  gvgvxc              
   C   s   d}| dkrt nt}t| | d |d d}t| | d |d d}zt||dd t||dd W d S  tyQ } ztd	| | | W Y d }~d S d }~ww )
Nr  r  r  r   r   rH   r0  r  r  r  r  r-   r-   r.   test_generalized_eigh_lworks	  s   r  dtype_r   )rH   rl   r  rL  c                 C   sx   t d td|}|| }| tv rdnd}|d }t|| d}t||||}|dkr,|n|f}tdd |D s:J d S )	Nr   r   orun	csd_lworkr   c                 S   s   g | ]}|d kqS r  r-   r=  r-   r-   r.   r;  	  s    z*test_orcsd_uncsd_lwork.<locals>.<listcomp>)r   r   r   r$   r    r  )r  r   r[   r<  r  dlwr0  lwvalr-   r-   r.   test_orcsd_uncsd_lwork	  s   
r   c              
   C   s  d\}}}| t v rdnd}|dkrt|nt|}t|d |d f| d\}}t||||}|dkr8d|inttddg|}	||d |d |f |d ||d f ||d d |f ||d |d f fi |	\
}
}}}}}}}}}|d	ks|J t||}t||}t	t	||t	|| || }t	||| }t	||| | }t	|| || }t	|| || | }t
j||f| d}| d
}t|D ]}||||f< qt|D ]}|||| || f< qt|D ]}| ||| | || | | | | f< qt|D ]}|||| | | || | f< qt|D ]N}t
|| ||| || f< t
|| ||| | || | | f< t
||  ||| || | | | f< t
|| ||| | || f< q|| | }t||ddt
| j d d S )N)r  P      r  r  csdr  r   r   lrworkr   r   r  g     @r5  )r   r!   rvsr"   r$   r    dictr  r   rF  r(   r   r  cosr  r   r   r   )r  r   r[   r<  r  Xdrvr  r  lwvalscs11cs12cs21cs22thetau1u2v1tv2tra   r<  VHre  n11n12n21n22Soner)  Xcr-   r-   r.   test_orcsd_uncsd	  sJ   
T

,$*,& r<  
trans_boolFfactr  r9  c                  C   s  t d dt| j }td| d\}}d}t|d f| d}t|f| d}t|d f| d}	t|dt| t|	d }
t|df| d}|rR| tv rPd	nd
nd}|r[|
 j	n|
| }|
 |
 |	
 |
 g}|dkrw||||	ndgd \}}}}}}||||	||||||||d}|\
}}}}}}}}}}t|dkd| t||d  t||d  t|	|d  t||d  t|||d tt|ddud| t|jd |jd kd|jd |jd  t|jd |jd kd|jd |jd  dS )aS  
    These tests uses ?gtsvx to solve a random Ax=b system for each dtype.
    It tests that the outputs define an LU matrix, that inputs are unmodified,
    transposal options, incompatible shapes, singular matrices, and
    singular factorizations. It parametrizes DTYPES and the 'fact' value along
    with the fact related inputs.
    r   r  gtsvxr  r   rl   rH   rw   rI   ro   rr   r9  r  NrM   r>  r   dlfdfdufr  r  r   z ?gtsvx info = {}, should be zerorJ   ri  __len__T rcond should be scalar but is {}z!ferr.shape is {} but shoud be {},z!berr.shape is {} but shoud be {},)r   r(   r   r   r$   r/   r  r   r{  ro   r|  r   rB  r   r   r   r+   ) r,   r=  r>  r  r@  r  r   r  rg   r  r  r   r   r}   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outrB  rC  rD  du2fr  x_solnr  ferrberrra   r-   r-   r.   
test_gtsvx
  sB   "rS  c                 C   s  t d td| d\}}d}t|d f| d}t|f| d}t|d f| d}t|dt| t|d }	t|df| d}
| tv rFdnd	}|rO|	 jn|	|
 }|d
kr]||||nd gd \}}}}}}||||||||||||d}|\
}}}}}}}}}}|dkrd|d< d|d< |||||}|\
}}}}}}}}}}|dksJ dd S |d
krd|d< d|d< d|d< |||||||||||d
}|\
}}}}}}}}}}|dksJ dd S d S )Nr   r?  r   rl   rH   rw   rI   ro   rr   r  rM   rA  r9  r   z&info should be > 0 for singular matrix)r>  rB  rC  rD  r  r  )r   r$   r/   r(   r  r   r{  ro   )r,   r=  r>  r@  r  r   r  rg   r  r  r   r   r}   rH  rI  rJ  rK  rL  rM  rN  rB  rC  rD  rO  r  rP  r  rQ  rR  ra   r-   r-   r.   test_gtsvx_error_singularK
  sB   "
rT  c                 C   s0  t d td| d\}}d}t|d f| d}t|f| d}t|d f| d}t|dt| t|d }	t|df| d}
| tv rFdnd	}|rO|	 jn|	|
 }|d
kr]||||nd gd \}}}}}}|dkrtt	||d d ||||||||||d tt	|||d d |||||||||d tt	||||d d ||||||||d tt
|||||d d |||||||d d S tt	||||||||d d ||||d tt	|||||||||d d |||d tt	||||||||||d d ||d tt	|||||||||||d d |d d S )Nr   r?  r   rl   rH   rw   rI   ro   rr   r  rM   r9  rA  )r   r$   r/   r(   r  r   r{  ro   r   r6  r   )r,   r=  r>  r@  r  r   r  rg   r  r  r   r   r}   rH  rI  rJ  rK  rL  rM  r-   r-   r.   "test_gtsvx_error_incompatible_size~
  sZ   "

rU  zdu,d,dl,b,xc              
   C   sB   t d|jd}|||| |}|\
}}}	}
}}}}}}t|| d S )Nr@  r   r$   r,   r   )r  rg   r  r}   r   r@  rN  rB  rC  rD  rO  r  rP  r  rQ  rR  ra   r-   r-   r.   test_gtsvx_NAG
  s   rW  zfact,df_de_lambdac                 C      t d|jd| |S Nr  r   r$   r,   rg   r  r-   r-   r.   <lambda>
  
    r\  c                 C      dS N)NNNr-   r[  r-   r-   r.   r\  
      c                 C   s  t d dt| j }td| d}d}t|f|d }t|d f| }t|t|d tt|d }	t|d	f| d}
|	|
 }|||\}}}| | | g}|||||||d
\}}}}}}}t	||d  t	||d  t	||d	  t
|dkd| t|
| t|dtt| }t|}t|	|| t|j |d t|drJ d|t
|jdkd|j|
jd  t
|jdkd|j|
jd  dS )a  
    This tests the ?ptsvx lapack routine wrapper to solve a random system
    Ax = b for all dtypes and input variations. Tests for: unmodified
    input parameters, fact options, incompatible matrix shapes raise an error,
    and singular matrices return info of illegal value.
    r   r  ptsvxr   rL   rK   rH   rw   rI   r>  rC  efr   zinfo should be 0 but is {}.ri  rE  rF  )rI   z#ferr.shape is {} but shoud be ({},)z#berr.shape is {} but shoud be ({},)N)r   r(   r   r   r$   r/   r  r{  r|  r   r   rB  r   r   r   ro   r   r+   )r,   r  r>  df_de_lambdar  ra  r   rg   r  r  rP  r}   rC  rc  ra   r  r   r  rQ  rR  r0  r1  r-   r-   r.   
test_ptsvx
  s>   (


re  c                 C   rX  rY  rZ  r[  r-   r-   r.   r\    r]  c                 C   r^  r_  r-   r[  r-   r-   r.   r\    r`  c              
   C   s   t d td| d}d}t|f|d }t|d f| }t|t|d tt|d }t|df| d}	||	 }
|||\}}}tt||d d ||
|||d	 tt|||d d |
|||d	 tt||||
d d |||d	 d S )
Nr   ra  r   rL   rK   rH   rw   rI   rb  )	r   r$   r/   r(   r  r{  r   r6  r   )r,   r  r>  rd  ra  r   rg   r  r  rP  r}   rC  rc  ra   r-   r-   r.   test_ptsvx_error_raise_errors  s   (  $rf  c                 C   rX  rY  rZ  r[  r-   r-   r.   r\  *  r]  c                 C   r^  r_  r-   r[  r-   r-   r.   r\  ,  r`  c                 C   sf  t d td| d}d}t|f|d }t|d f| }t|t|d tt|d }t|df| d}	||	 }
|||\}}}|d	krd
|d< |||\}}}||||
\}}}}}}}|d
kri||kskJ t|f|}||||
\}}}}}}}|d
kr||ksJ d S |||\}}}d
|d
< d
|d
< ||||
|||d\}}}}}}}|d
ksJ d S )Nr   ra  r   rL   rK   rH   rw   rI   r9  r   rJ   rb  )r   r$   r/   r(   r  r{  )r,   r  r>  rd  ra  r   rg   r  r  rP  r}   rC  rc  ra   r   r  rQ  rR  r-   r-   r.   test_ptsvx_non_SPD_singular&  s0   (
rg  zd,e,b,xc                 C   s6   t d|jd}|| ||\}}}}}	}
}t|| d S )Nra  r   rV  )rg   r  r}   r   ra  rC  rc  x_ptsvxr  rQ  rR  ra   r-   r-   r.   test_ptsvx_NAGR  s   ri  r  c                    s  t d t| jd }d\ }t  g| d}t |g| d}| j| tj | d| d  }|rK fddt D  fddt D f}nd	d td
 d
 D dd td
 d
 D f}|| }t	d| dd\}}	}
}}|	 ||d\}}t
|d t||d| }t||d|d | ||d\}}t
|d t|| }t||d|d |
 |||d\}}t
|d t||}t||d|d | |||d\}}t
|d t||d|d tj|d
}| |||d\}}t
|d ttd
| tjj|d
d | d
k  d S )Nr   r  )rl   rK   r   r   c                    s    g | ]}t | D ]}|q	qS r-   r  r:  yr   r>  r-   r.   r;  |       z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>c                    s    g | ]}t | D ]}|q	qS r-   rj  rk  r>  r-   r.   r;  }  rm  c                 S   s   g | ]}t |D ]}|qqS r-   rj  rk  r-   r-   r.   r;    s    rH   c                 S   s"   g | ]}t |D ]}|d  qqS r  rj  rk  r-   r-   r.   r;    s   " )ppsvpptrfpptrspptrippconr  r  r  r   r5  )r  r  r  )r   r(   r   r   r/   r{  ro   r
   r  r$   r   r   r   r   r   r  r   r   r   r  )r,   r  r  r   rY   r}   r  aprn  ro  rp  rq  rr  ulra   aululiaulir   bxxvr  r  r-   r>  r.   !test_pptrs_pptri_pptrf_ppsv_ppconp  sL   $





,rz  c           
      C   s0  t d t| jd }d}t||g| d}td| d\}}|dd |dd	}t|d
 d |d }|d }|d }	| tv rIt|t	|d|d t|| |
 j |d|d |||dd}t|d
 d |d }|d }| tv r}t|t	|d|d t|| |
 j |d|d t|d |	d|d d S )Nr   r  rl   r   )geestrexcc                 S      d S r  r-   r   r-   r-   r.   r\    r`  z!test_gees_trexc.<locals>.<lambda>Frq  rw   r   r.  r  r5  rN   rH   r   r   )r   r(   r   r   r/   r$   r   r'   r   r   r{  ro   )
r,   r  r   rY   r{  r|  r  r:  r  d2r-   r-   r.   test_gees_trexc  s*   r  zt, expect, ifst, ilst)r^  g)\({Gz?gQ?)r  皙r  ffffff?)r  gr  g?)r  r  r  r  )r  lV}gV_?g|?5^?)g?r  gV/?g;On?)r  r  r^  ggj+)            y
ףp=
?
ףp=
׿yRQȿQ?y)\(?      п)ri               @yQ
ףp=
yq=
ףpͿp=
ף?)ri  ri         @      yGz?(\?)ri  ri  ri        @      )r  y1%Ŀq?ys??ܵ|ȿyHzG??ܵ?)ri  r  yV/?ݓ?yjt?vտ)ri  ri  r  yB>٬?=U?)ri  ri  ri  r  c                 C   sL   d}t d| jd}|| | ||dd}t|d d |d } t|| |d dS )	zg
    This test implements the example found in the NAG manual,
    f08qfc, f08qtc, f08qgc, f08quc.
    r  r|  r   r   )wantqrw   ri  N)r$   r,   r   r   )r:  ifstilstexpectr  r|  r  r-   r-   r.   test_trexc_NAG  s   r  c                 C   s*  | t jkrtjdkrtd td t | jd }d}t	||g| d}t	||g| d}t
d| d\}}|dd	 ||d
d
d}t|d d |d }|d }	|d }
|d }|d |	d  }|d |	d  }| tv rt|t |d|d t|	t |	d|d t|
| | j |d|d t|
|	 | j |d|d |||	|
|dd}t|d d |d }|d }	|d }
|d }| tv rt|t |d|d t|	t |	d|d t|
| | j |d|d t|
|	 | j |d|d t|d |	d  |d|d t|d |	d  |d|d d S )Ndarwin8gges[float32] broken for OpenBLAS on macOS, see gh-16949r   r  rl   r   )ggestgexcc                 S   r}  r  r-   r~  r-   r-   r.   r\    r`  z!test_gges_tgexc.<locals>.<lambda>Fr  overwrite_brw   r   rH   rh  r.  r   r  r5  rN   rI   rJ   r  )r(   r  sysplatformr9   xfailr   r   r   r/   r$   r   r'   r   r   r{  ro   )r,   r  r   rY   r}   r  r  r  r   r:  r<  r  d1r  r-   r-   r.   test_gges_tgexc  sD   
 r  c                 C   sr  t d t| jd }d}t||g| d}td| d\}}}|dd |dd	}t|d
 d |d }|d }	|d }
| tv rJt|t	|d|d t|	| |	
 j |d|d t|}d|d< t|||}| tv ru||||	|d}n||||	||d d}t|d
 d |d }|d }	| tv rt|t	|d|d t|	| |	
 j |d|d t|d |
d|d d S )Nr   r  rl   r   )r{  trsentrsen_lworkc                 S   r}  r  r-   r~  r-   r-   r.   r\  +  r`  z!test_gees_trsen.<locals>.<lambda>Frq  rw   r   r.  r  r5  rH   rM   r   r   liworkr   )r   r(   r   r   r/   r$   r   r'   r   r   r{  ro   r   r    )r,   r  r   rY   r{  r  r  r  r:  r  r  selectr   r-   r-   r.   test_gees_trsen   s8   
r  z*t, q, expect, select, expect_s, expect_sep)g/$?gQIg~jtx?gJ4?)r  58EGrgGr?gyX5;?)r  g?߾r  gt?)r  r  r  gyǹ)g؁sF?g_L?gGz?gUN@?)goT?g0*g'gz6>W)g(g&䃞ͪӿgbX9ҿg-!lV?)gb=y?gۊe?r  g8EGr?)r  g?gQg(\ſ)g
ףp=
?gQ?r  r  )g)\(ܿgQտgQg(\?)r  g{GzԿgp=
ףg)\(?)rH   r   r   rH   g      ?g(\	@)yqh yfc]F?ڊe׿yMbȿ&S?y&1??п)ri  y      ?5^I @yo0*yZd;OͿ~:p?)ri  ri  yx$(@4@y[ A?&?)ri  ri  ri  y?ܵ@St$)y?ܵ꿽R!uy2U0*6[?yV-?=yXy8m4?1%̿)ySt$?\mҿyʡE?S㥛?y~:p	cڿyK7A`?[ A?)y:pΈ~jtԿyH}?9#J{yH}?	cZy+eXw?-ٿ)y"u?	c?y?տN@ayRQȿ{GzĿyh"lxz?EGrǿ)y47)yS!uqF%u@yyտGx$(?y3ı.n?rh|)yv?
F%uyd`TR?I&ۿyN@?ݓy4@
@	^)?)ys{
@ o_yH.@|Pk@y0*?*:Hy]m{?Gz)y)0[<?yI.!? ryqh 
@ׁsF?y1w-!?h ogRQ?gK?c                 C   s   d}d}t d| jd\}}	t|	|| }
| jtv r!||| ||
d}n||| ||
|
d d}t|d d	 |d	 } |d }| jtv rI|d
 }|d }n|d }|d }t|||  | j |d t|d| |d t|d| |d dS )zW
    This test implements the example found in the NAG manual,
    f08qgc, f08quc.
    r  r  )r  r  r   r   rH   r  rw   r   rK   rL   rM   ri  N)r$   r,   r    r'   r   r   r{  ro   )r:  r<  r  r  expect_s
expect_sepr  atol2r  r  r   r  r   sepr-   r-   r.   test_trsen_NAGN  s(   0



r  c                 C   sb  | t jkrtjdkrtd td t | jd }d}t	||g| d}t	||g| d}t
d| d\}}}|dd	 ||d
d
d}t|d d |d }	|d }
|d }|d }|	d |
d  }|	d |
d  }| tv rt|	t |	d|d t|
t |
d|d t||	 | j |d|d t||
 | j |d|d t |}d|d< t|||	|
}|d d |d f}|||	|
|||d}t|d d |d }	|d }
|d }|d }| tv rt|	t |	d|d t|
t |
d|d t||	 | j |d|d t||
 | j |d|d t|	d |
d  |d|d t|	d |
d  |d|d d S )Nr  r  r   r  rl   r   )r  tgsentgsen_lworkc                 S   r}  r  r-   r~  r-   r-   r.   r\    r`  z!test_gges_tgsen.<locals>.<lambda>Fr  rw   r   rH   rh  r.  r   r  r5  rM   r   ir  r  )r(   r  r  r  r9   r  r   r   r   r/   r$   r   r'   r   r   r{  ro   r   r    )r,   r  r   rY   r}   r  r  r  r  r   r:  r<  r  r  r  r  r   r-   r-   r.   test_gges_tgsen  sP   

 r  r  )r  	functoolsr   numpy.testingr   r   r   r   r   r   r9   r	   r   numpyr(   r
   r   r   r   r   r   r   r   numpy.randomr   r   r   scipy.linalgr   r4   r   r   r   r   r   r   r   r   r   r   scipy.linalg.lapackr    scipy.statsr!   r"   scipy.sparsesparserC  r#   r1   ImportErrorr$   scipy.linalg.blasr%   r  r   r   rm  
complex128r'   r   r/   rE   rG   r   r   rZ  r[  r   r   r   r  r,  rf  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r$  r*  r3  r4  rS  rV  r^  rf  skipifrn  ru  r  r  r  r  ry   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r<  rS  rT  rU  rW  re  rf  rg  ri  rz  r  r  r  r  r  r  r-   r-   r-   r.   <module>   sT   (4` t  **DO1")::) %# ((-
e
#





\




+
/


	



@.:0
0


4




%

.$	2-*!