o
    Ö­j} ã                   @   s  d dl m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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'm(Z( d dl)m*Z* d d	l+m,Z,m-Z- d dl.m/Z0 zd d
l1m2Z2 W n e3y‰   dZ2Y nw zd dlm4Z5 W n e3y�   dZ5Y nw d dl)m6Z6 d dl7m8Z8 ej9ej:gZ;ej<ej=gZ>e;e> Z?d Z@ZAe2durÒe2d d d Z@e2d d d ZAdd„ ZBdd„ ZCG dd„ dƒZDG dd„ dƒZEG dd„ dƒZFe
jG Hde?¡e
jG Hdg d¢¡dd „ ƒƒZIG d!d"„ d"ƒZJG d#d$„ d$ƒZKG d%d&„ d&ƒZLG d'd(„ d(ƒZMe
jG Hde?¡e
jG Hd)g d*¢¡e
jG Hd+d,d-g¡e
jG Hd.d/d,g¡e
jG Hd0d1d2g¡d3d4„ ƒƒƒƒƒZNd5d6„ ZOd7d8„ ZPd9d:„ ZQd;d<„ ZRG d=d>„ d>ƒZSG d?d@„ d@ƒZTdAdB„ ZUdCdD„ ZVdEdF„ ZWdGdH„ ZXdIdJ„ ZYdKdL„ ZZdMdN„ Z[dOdP„ Z\dQdR„ Z]dSdT„ Z^dUdV„ Z_dWdX„ Z`dYdZ„ Zad[d\„ ZbG d]d^„ d^ƒZcd_d`„ Zddadb„ Zedcdd„ Zfdedf„ Zge
jGjhdgdhdi�djdk„ ƒZidldm„ Zje
jG Hdndodpg¡e
jG Hde;¡e
jG Hdqekdrƒ¡e
jG Hdsekdtƒ¡e
jG Hduekdtƒ¡e
jG Hdvd dwg¡e
jG Hdxd dwg¡�dªdydz„ƒƒƒƒƒƒƒZle
jG Hde;¡d{d|„ ƒZme
jG Hd}dqd~idsd~idud~idvd~idd~idxd~if¡d€d�„ ƒZne
jG Hd‚e og dƒ¢g d„¢g d…¢g d†¢g d‡¢g dˆ¢g¡e og d‰¢¡e og dŠ¢g d‹¢g dŒ¢g d�¢g dŽ¢g d�¢g¡e og d�¢g d‘¢g d’¢g d“¢g¡fg¡d”d•„ ƒZpe
jG Hde?¡d–d—„ ƒZqe
jG Hd˜e og d™¢¡e og dš¢¡e og d›¢¡e og dœ¢¡e og d�¢¡e og dž¢¡e og dŸ¢¡e od d¡gd¢d£gd¤d¥gd¦d§gd d¨gg¡e od©dªgd«d©gd1d¬gd©d­gd¬dwgg¡f	e og d®¢¡e og d¯¢¡e og d°¢¡e og d±¢¡e og d²¢¡e og d³¢¡e og dŸ¢¡e od´dµgd¶d·gd¸d¹gdºd»gd¼d½gg¡e od¾d¿gdÀdÁgdÂdÃgdÄdÅgdÆdÇgg¡f	g¡dÈdÉ„ ƒZre
jG Hde?¡e
jG Hd)g dÊ¢¡e
jG Hd0d1d2g¡dËdÌ„ ƒƒƒZse
jG Hde?¡e
jG Hdg dÍ¢¡dÎdÏ„ ƒƒZte
jG HdÐeue;e; e?ƒ¡dÑdÒ„ ƒZve
jG HdÐeue;e; e?ƒ¡dÓdÔ„ ƒZwe
jG HdÐeue;e; e?ƒ¡dÕdÖ„ ƒZxe
jG Hd×e og dØ¢¡e og dÙ¢¡e og dÚ¢¡e og dÛ¢¡e odrd2gd~dtgdÜd~gdÝdÞgd«dßgg¡e odàdÜgdÜdágdwd¬gdádrgd1dâgg¡fe og dã¢¡e og dä¢¡e og då¢¡e og dæ¢¡e odçdègdédêgdëdìgdídîgg¡e odÅdïgd¾d¾gdðdðgdÆdÅgg¡fg¡dñdò„ ƒZydódô„ Zze
jG Hdõeue?e;e; ƒ¡e
jG Hdöekd1ƒ¡d÷dø„ ƒƒZ{e
jG Hdõeue?e;e; ƒ¡e
jG Hdöekd1ƒ¡dùdú„ ƒƒZ|e
jG Hdõeue?e;e; ƒ¡e
jG Hdöekd1ƒ¡dûdü„ ƒƒZ}e
jG Hdõeue?e;e; ƒ¡e
jG Hdöekd1ƒ¡dýdþ„ ƒƒZ~e
jG HdÿdÜe og �d ¢¡e og �d¢¡e og �d¢¡e og �d¢g �d¢g �d¢g �d¢g¡fg¡�d�d„ ƒZe
jG Hde?¡e
jG H�d	g �d
¢¡�d�d„ ƒƒZ€�d�d„ Z�e
jG H�dg �d¢¡e
jG H�d�d�dg¡�d�d„ ƒƒZ‚e
jG H�d�d�dg¡e
jG H�d�d�dg¡�d�d„ ƒƒZƒe
jG H�de?¡e
jG H�dg �d¢¡�d�d„ ƒƒZ„e
jG H�de?¡�d�d „ ƒZ…e
jG Hde?¡e
jG H�d!�d"dgg¡e
jG H�d#�d$d/g¡�d%�d&„ ƒƒƒZ†e
jG Hde?¡e
jG H�d!d dwg¡e
jG H�d#�d$d/g¡�d'�d(„ ƒƒƒZ‡e
jG Hde?dÜ ¡e
jG H�d!�d"dgg¡e
jG H�d#�d$d/g¡�d)�d*„ ƒƒƒZˆe
jG H�d+e og d™¢¡e og dš¢¡e og d›¢¡e od d¡gd¢d£gd¤d¥gd¦d§gd d¨gg¡e od©dªgd«d©gd1d¬gd©d­gd¬dwgg¡fe og d®¢¡e og d¯¢¡e og d°¢¡e od´dµgd¶d·gd¸d¹gdºd»gd¼d½gg¡e od¾d¿gdÀdÁgdÂdÃgdÄdÅgdÆdÇgg¡fg¡�d,�d-„ ƒZ‰e
jG Hdõeue?e;e; ƒ¡e
jG H�d.�d$�d/�d0„ fd/�d1�d0„ fg¡�d2�d3„ ƒƒZŠe
jG Hdõeue?e;e; ƒ¡e
jG H�d.�d$�d4�d0„ fd/�d5�d0„ fg¡�d6�d7„ ƒƒZ‹e
jG Hdõeue?e;e; ƒ¡e
jG H�d.�d$�d8�d0„ fd/�d9�d0„ fg¡�d:�d;„ ƒƒZŒe
jG H�d<e og dØ¢¡e og dÙ¢¡e odrd2gd~dtgdÜd~gdÝdÞgd«dßgg¡e odàdÜgdÜdágdwd¬gdádrgd1dâgg¡fe og dã¢¡e og dä¢¡e odçdègdédêgdëdìgdídîgg¡e odÅdïgd¾d¾gdðdðgdÆdÅgg¡fg¡�d=�d>„ ƒZ�e
jG H�d?�d"dgg¡e
jG Hde?¡�d@�dA„ ƒƒZŽe
jG Hde?¡�dB�dC„ ƒZ�e
jG H�dDe og �dE¢g �dF¢g �dG¢g �dH¢g¡e og �dI¢g �dJ¢g �dK¢g �dH¢g¡dÜdwfe og �dL¢g �dM¢g �dN¢g �dO¢g¡e og �dP¢g �dQ¢g �dR¢g �dS¢g¡dwdtfg¡�dT�dU„ ƒZ�e
jG Hde?¡�dV�dW„ ƒZ‘e
jG Hde?¡�dX�dY„ ƒZ’e
jG H�dZe og �d[¢g �d\¢g �d]¢g �d^¢g¡e og �d_¢g �d`¢g �da¢g �db¢g¡e og �dc¢g �dd¢g �de¢g �df¢g¡e og �dg¢¡�dh�dife og �dj¢g �dk¢g �dl¢g �dm¢g¡e og �dn¢g �do¢g �dp¢g �dq¢g¡e og �dr¢g �ds¢g �dt¢g �du¢g¡e og �dg¢¡�dv�dwfg¡�dx�dy„ ƒZ“e
jG Hde?¡�dz�d{„ ƒZ”e
jG H�d|e og �d}¢g �d~¢g �d¢g �d€¢g¡e og �d�¢g �d~¢g �d¢g �d‚¢g¡e og �dƒ¢g �d„¢g �d…¢g �d†¢g¡e og �d‡¢g �dˆ¢g �d‰¢g �dŠ¢g¡e og �d‹¢g �dŒ¢g �d‰¢g �d�¢g¡e og �dŽ¢g �d�¢g �d�¢g �d‘¢g¡e og �d�¢g �d’¢g �d“¢g �d”¢g¡e og �d•¢g �d–¢g �d—¢g �d˜¢g¡fg¡e
jG Hde;¡�d™�dš„ ƒƒZ•e
jG Hde;¡e
jG H�d›�dœ¡e
jG H�d�g �dž¢¡�dŸ�d „ ƒƒƒZ–e
jG H�d¡�d�dg¡e
jG Hde?¡e
jG H�d?�d¢¡�d£�d¤„ ƒƒƒZ—e
jG Hd)e˜�d¥ƒ¡e
jG H�d¦g �d§¢¡e
jG Hd.d/d,g¡e
jG Hde?¡�d¨�d©„ ƒƒƒƒZ™dS («  é    )ÚreduceN)Ú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Úqz)Ú_compute_lwork)Úortho_groupÚunitary_group)ÚCONFIG)Ú_clapack)Úget_lapack_funcs)Úget_blas_funcszBuild DependenciesÚblasÚnameÚversionc                 C   s6   |t v r|j| Ž |j| Ž d   |¡S |j| Ž  |¡S )Nù              ð?)ÚCOMPLEX_DTYPESr   Úastype)ÚshapeÚdtypeÚrng© r1   ú[/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_lapack.pyÚgenerate_random_dtype_array1   s   ÿÿr3   c                  C   sv   t jdu r
t d¡ tt j ¡ ƒ} h d£}tƒ }tt ƒD ]}| d¡s0||vr0|| vr0| 	|¡ q|g ks9J dƒ‚dS )z%Test that all entries are in the doc.Nzlapack.__doc__ is None>   ÚnpÚclapackÚflapackÚdivisionÚ	HAS_ILP64Úprint_functionÚabsolute_importÚfind_best_lapack_typeÚ_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   Ú__doc__ÚpytestÚskipÚsetÚsplitÚlistÚdirÚ
startswithÚappend)ÚnamesÚignore_listÚmissingr)   r1   r1   r2   Útest_lapack_documented9   s   



€rI   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)é   é   é   )é   é   é   )é   é   é	   )rL   r   r   ga2U0*©3?)rO   r   r   gü©ñÒMb`?)rR   rL   r   r   )r   rL   r   r   ÚsdzcÚgebalr   rL   )ÚpermuteÚscale)	Úgetattrr6   r   Úreprr   r   Úlenr4   r   )
ÚselfÚaÚa1ÚpÚfÚbaÚloÚhiÚpivscaleÚinfor1   r1   r2   Ú
test_gebalR   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©ikÿÿÿiÎÿÿÿifÿÿÿ©i  é´   i"  ©iåÿÿÿi÷ÿÿÿiçÿÿÿÚdÚgehrd)rY   r6   r   rZ   )r\   r]   r_   r`   ÚhtÚtaure   r1   r1   r2   Ú
test_gehrdg   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 )NrL   rM   r   rO   rP   rQ   rS   rT   é
   é   é   ÚTÚfdFD)Útrsylr+   ÚC)ÚtranaÚtranb©Údecimaléÿÿÿÿ)Úisgn)	r4   Úarrayr-   r&   Úisupperr   ÚdotÚ	conjugaters   )r\   r]   ÚbÚcÚtransr/   r^   Úb1Úc1ru   ÚxrX   re   r1   r1   r2   Ú
test_trsylr   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 r…t  
t jt  |¡dd�¡}t||ƒ qqd S )Nrg   rh   rj   rt   ÚMm1OoIiFfEe©r   r   r+   )ÚlangeÚFfEeÚFfrN   rR   ÚMmÚ1Oor   ©ÚaxisÚIirL   )r4   r}   r-   r~   r&   ÚsqrtÚsumÚsquareÚabsr   Úmaxr   )	r\   r]   r/   Únorm_strr^   rŠ   Úvaluerz   Úrefr1   r1   r2   Ú
test_langeŽ   s6   ý

èÿzTestFlapackSimple.test_langeN)Ú__name__Ú
__module__Ú__qualname__rf   ro   r‡   rš   r1   r1   r1   r2   rK   P   s
    rK   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)Úhasattrr6   ©r\   r1   r1   r2   Útest_flapack²   ó   
þzTestLapack.test_flapackc                 C   rŸ   r    )r¢   r5   r£   r1   r1   r2   Útest_clapack·   r¥   zTestLapack.test_clapackN)r›   rœ   r�   r¤   r¦   r1   r1   r1   r2   rž   °   s    rž   c                   @   rJ   )
Ú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||ƒ qÈd S )!NéÒ  rp   é   rL   )ÚgelsÚ
gels_lwork©r/   ©Úlworkr   ÚTTCC©rƒ   r®   ç      ð?ç       @ç      @ç      @ç      @ç       @©ç      0@g      1@g      4@)rª   r«   ÚgeqrfrM   r{   ç¥ªªªªª,Àçûÿÿÿÿÿ-@é   ©Úrtolù      ð?      @ù      @      à?ù      @      Àù      @       Àù       @ffffffæ?©r¸   y      1@       @y      4@      ÀùR úŠ–ò?¤îð\Îjþ¿ùµò£�,Æû?§ÿ² Wø?)r   Ú	enumerateÚDTYPESr   r-   r&   r!   r   ÚREAL_DTYPESr4   r}   r.   r[   r   ÚfinfoÚepsr   r,   )r\   Úindr/   ÚmÚnÚnrhsr^   r„   ÚglsÚglslwr®   r<   re   rª   r«   r¹   Úlqrr†   Ú	lqr_truthr1   r1   r2   Ú	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� qŠd S )Nr±   r²   r³   r´   rµ   r¶   r¬   r·   )ÚgelsdÚgelsd_lworkrM   rL   r{   Frº   r»   r¼   r½   çYNô))1)@ç*@ƒž.«â?r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   çU‹¯ý.*@çãÊ_ÅY@©rÉ   r4   r}   r&   r.   r[   ÚintÚrealr   rÊ   rË   r,   )r\   r/   r^   r„   rÕ   rÖ   rÍ   rÎ   rÏ   ÚworkÚiworkre   r®   Ú
iwork_sizer†   ÚsÚrankÚrworkÚ
rwork_sizer1   r1   r2   Ú
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� qˆd S )Nr±   r²   r³   r´   rµ   r¶   r¬   r·   )ÚgelssÚgelss_lworkrM   rL   r{   Frº   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Þ   re   r®   Úvr†   rá   râ   r1   r1   r2   Ú
test_gelss?  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� q‹d S )Nr±   r²   r³   r´   rµ   r¶   r¬   r·   )Úgelsyrç   rM   rL   rp   Fr{   rº   r»   r¼   r½   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   )rÉ   r4   r}   r&   r.   r[   rÊ   rË   rÜ   rÝ   r   Úint32r   r,   )r\   r/   r^   r„   rê   Úgelsy_lworkrÍ   rÎ   rÏ   rÞ   re   r®   Újptvrè   r†   Újrâ   r1   r1   r2   Ú
test_gelsyx  st   
þþÿ
ÿÿþý
þþÿ
ÿÿþüëz"TestLeastSquaresSolvers.test_gelsyN)r›   rœ   r�   rÔ   rå   ré   rï   r1   r1   r1   r2   r§   ½   s
    D<9r§   r/   r.   )©rN   rO   )rP   rM   ©é   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®   re   r1   r1   r2   Ú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,  rM   r¬   ÚgerqfrM   r­   ÚorgrqéþÿÿÿrL   Úungrq)rÈ   r4   r   r&   Úassert_raisesÚ	ExceptionrÉ   r,   )
r\   r/   r]   rû   Úrqrn   rÞ   re   rü   rþ   r1   r1   r2   Útest_ticket_1645»  s   €òzTestRegression.test_ticket_1645N)r›   rœ   r�   r  r1   r1   r1   r2   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é*   )rN   rN   ©Úsize)ÚpotrfÚpotri)Úcleanr   )r4   Úrandomr   Únormalr   rs   r&   r   r   r   r   )
r\   Úlowerr	  r†   r]   ÚdpotrfÚdpotrir‚   re   Údptr1   r1   r2   Útest_gh_2691Ï  s   óÿzTestDpotr.test_gh_2691N)r›   rœ   r�   r  r1   r1   r1   r2   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   r{   rL   F)Úfull_matricesÚ
compute_uvÚoverwrite_aÚcheck_finite©r   Úlasd4rN   zcLAPACK root finding dlasd4 failed to find                                     the singular value %izThere are NaN rootséd   ©Úatolr¾   )r4   r}   ÚhstackÚvstackÚdiagr   r[   Únewaxisr   Úconcatenater   r&   ÚrangerE   r   ÚanyÚisnanr   rÊ   Úfloat64rË   )r\   ÚsigmasÚm_vecÚMÚSMÚit_lenÚsgmÚmvcr  ÚrootsÚiÚresr1   r1   r2   Útest_sing_val_updateã  s4   ÿþ
ÿ*ÿ
ÿzTestDlasd4.test_sing_val_updateN)r›   rœ   r�   r1  r1   r1   r1   r2   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 )/zýTest 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¸@gHáz®G@g{®GázÄ?)g      Àgq=
×£p@gHáz®GÀr   r¬   g¤p=
×£0Àr3  g�Âõ(\�+Àg×£p=
—0Àg333333*@gÃõ(\�ÂÀgHáz®G,ÀgìQ¸…ë#ÀrO   rL   r{   éýÿÿÿrN   rM   rý   )y
×£p=
ÿ¿¸…ëQ¸@y{®Gáz@®GázÀy…ëQ¸…Û?Ház®GÀy)\�Âõ(Ü?š™™™™™¹?)y…ëQ¸À…ëQ¸…@yq=
×£pý¿®Gáz@y×£p=
×û?{®Gáz¤¿r   )yìQ¸…ëù?q=
×£p@y)\�Âõ(Àáz®Gáþ¿r   r   y¸…ëQ¸!À
×£p=
Ày×£p=
8À®GázÀy¤p=
×#/À)\�Âõh7Ày\�Âõ(üLÀHáz®G @y…ëQ¸…ÀHáz®Ç6@y×£p=
3@Ãõ(\�‚=Ày{®Gáz-À333333ÀyìQ¸…+3@®GázT5@y               @y      ð?      @y      ð?      Ày      À       Àyt&mªîÀâ=–#ôÀy×i¤¥ò6@U¾g$B@y[aú^Cðÿ?b->À¸ð¿y-@ÛjÖiÀ& ÿ”*ù!Àz	Datatype z not understood.ÚtbtrsÚL©Úabr�   Úuplor   çñhãˆµøä>©r¾   r  N)rÉ   r4   r}   r,   Ú
ValueErrorr&   r   r   )r\   r/   r8  r�   Úx_outr5  r†   re   r1   r1   r2   Ú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 ))ÚNrs   rv   rv   )rÉ   )Ú.0r/   rƒ   r1   r1   r2   Ú
<listcomp>3  s    ÿþzTestTbtrs.<listcomp>r9  ÚUr6  r   r?  c                    s‚  t j d¡‰d\‰}}tdˆ d�}|dk}|| }	||	 }
t|	|
 d dƒ}‡fdd	„|D ƒ}‡ ‡fd
d	„|D ƒ}|dkrFt jˆˆ d�||	< tj||dd�}t  |d ˆfˆ ¡}t	|ƒD ]\}}| 
|¡||t|dƒtˆ| ˆƒ…f< q\tˆ|fˆ ˆƒ}||||||d�\}}t|dƒ |dkr›t|| |dd� d S |dkr«t|j| |dd� d S |dkr½t|j ¡ | |dd� d S tdƒ‚)Ni¼  )rO   rN   rM   r5  r¬   rB  rL   r{   c                    s   g | ]}ˆ t |ƒ ‘qS r1   )r•   ©r@  r†   ©rÎ   r1   r2   rA  H  ó    z2TestTbtrs.test_random_matrices.<locals>.<listcomp>c                    s   g | ]	}t |fˆ ˆƒ‘qS r1   )r3   )r@  Úwidth©r/   r0   r1   r2   rA  I  s    ÿÚdia)Úformatr   )r8  r�   r9  rƒ   r   r?  g-Cëâ6
?r½   rs   rv   zInvalid trans argument)r4   r
  ÚRandomStater&   r#  r   ÚspsÚdiagsr   rÇ   Údiagonalr–   Úminr3   r   r   rs   r€   r<  )r\   r/   rƒ   r9  r   rÏ   Úkdr5  Úis_upperÚkuÚklÚband_offsetsÚband_widthsÚbandsr]   r8  ÚrowÚkr�   r†   re   r1   )r/   rÎ   r0   r2   Útest_random_matrices2  s6   
ÿ(
zTestTbtrs.test_random_matriceszuplo,trans,diag)rB  r?  ÚInvalid)rB  rY  r?  )rY  r?  r?  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 exceptionsr5  r¬   rO   rM   N)r&   r4   r&  r   rÿ   r   )r\   r9  rƒ   r   r5  r8  r�   r1   r1   r2   Ú&test_invalid_argument_raises_exceptionf  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¬   rO   r5  r   )r{   rN   rB  r7  N)r4   r   Úfloatr&   r   )r\   r8  r�   r5  r<   re   r1   r1   r2   Útest_zero_element_in_diagonals  s   z'TestTbtrs.test_zero_element_in_diagonalzldab,n,ldb,nrhs)rP   rP   r   rP   )rP   rP   rN   rP   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¬   r5  N©r4   r   r[  r&   rÿ   r   )r\   ÚldabrÎ   ÚldbrÏ   r8  r�   r5  r1   r1   r2   Útest_invalid_matrix_shapesƒ  s   z$TestTbtrs.test_invalid_matrix_shapesN)r›   rœ   r�   r>   ÚmarkÚparametrizerÈ   r>  rX  rZ  r\  r`  r1   r1   r1   r2   r2    s0    
-ÿÿ.þÿ
	þr2  r   )ÚIÚ1ÚOr9  rB  r6  r   r?  rÎ   rN   rp   c              	   C   sš  t  | › |› |› |› |› �¡ tj  t  dd¡¡}|j ||fd�|j ||fd�d  }| t d| dd¡|¡¡}||7 }t | tj	¡rG|j
n|}|dkrRt |¡nt |¡}|dkri|t |¡d d …tjf  }| | ¡}td|fƒ}|||||d�\}	}
|d	krŸtjj|tjd
�}tjjtj |¡tjd
�}d||  }n#t |¡jdd� ¡ }td|fƒ\}}||ƒ\}}}||||d�\}}
d}t|	||d� d S )Nr   l   ÿåa$r  r+   rp   rB  Útrcon)r   r9  r   rc  )ÚordrL   r�   ©ÚgeconÚgetrf©r   r½   )r
  r   r4   Údefault_rngr   ÚpermutedÚlogspaceÚintegersÚ
issubdtypeÚfloatingrÝ   r   r   r   r!  r-   r&   Úlinalgr   Úinfr   r•   r“   r–   r   )r/   r   r9  r   rÎ   r0   ÚAÚoffsetrf  r0  r<   Únorm_AÚ
norm_inv_Ar™   Úanormri  rj  ÚluÚipvtre   r¾   r1   r1   r2   Ú
test_trcon�  s,   $
r{  c                  C   s¤   dD ]M} t d| d�}t d| ¡}t d| ¡}t |¡r|d9 }|||ƒ\}}}t|dƒ t|dƒ t |¡rJt|d	ƒ tt|tƒƒ tt|tƒƒ qt|d
ƒ qd S )Nrt   Úlartgr¬   rN   rO   r+   ç333333ã?r´   y       €š™™™™™é¿çš™™™™™é?)	r&   r4   r}   Úiscomplexobjr   r   Ú
isinstanceÚcomplexr[  )r/   r|  r`   ÚgÚcsÚsnÚrr1   r1   r2   Ú
test_lartg¸  s   




ír†  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 )Nrt   r}  r~  rO   rN   rp   rL   ÚfdÚrotr¬   y       €      ð¿r+   y              @)rP   rP   rP   rP   )r   r   r   r   ©r  rM   rD  )rP   rP   rN   rN   r   )ÚoffxÚoffy)rN   rN   rP   rP   )Úincxr‹  rÎ   )rP   rN   rP   rN   )rŠ  ÚincyrÎ   )rŠ  rŒ  r‹  r�  rÎ   )rN   rN   rP   rN   rý   )rŒ  r�  rÎ   )Úoverwrite_xÚoverwrite_y)r4   ÚfullrÊ   Ú	precisionr'   r&   r   r   )
r/   r‚   rá   Úurè   r  rˆ  r`   r]   r�   r1   r1   r2   Útest_rotÏ  sX   
ÿÿ
ÿÿÿÿÿÿÿÜr“  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¨   )rO   rO   r+   rt   ÚlarfgÚlarfr¬   ÚFDr   rL   ©rL   r   rM   r‰   r±   ÚR©Úsider:  r‰  )r4   r
  r   rs   r   Úconjr&   Úcopyr.   r   r€   r   r   )Úa0Úa0jr/   r”  r•  r]   Úalphar†   rn   Úexpectedrè   r1   r1   r2   Ú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i€”D)r&   r4   Úfloat32r!   )Úsgesdd_lworkrÎ   r®   r1   r1   r2   Ú 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©r4   r   r&   rÿ   r<  )r\   r/   rt  r«  r1   r1   r2   Útest_sytrd_with_zero_dim_array@  ó   z(TestSytrd.test_sytrd_with_zero_dim_arrayrÎ   ©rL   rN   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  ||¡}q¯t  |d¡}|j| ||< t  |jt  ||¡¡}t||dt  |¡j dd	� d S )Nr¬   )r«  Úsytrd_lworkrL   rM   r   ©r  r®   rP   r±   r  ç        r­   r{   )r4   r   r&   ÚarangeÚtriu_indices_fromr   r   rÊ   rË   r   r   r.   r
   r#  Úouterr   r   rs   )r\   r/   rÎ   rt  r«  r°  r®   re   Údatark   Úern   rs   rW  Úk2ÚQr/  rè   ÚHÚi_lowerÚQTAQr1   r1   r2   Ú
test_sytrdG  s@   
ÿÿ




$ zTestSytrd.test_sytrdN)	r›   rœ   r�   r>   ra  rb  rÉ   r­  r½  r1   r1   r1   r2   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¬  )r\   r¿  rt  rÀ  r1   r1   r2   Útest_hetrd_with_zero_dim_array„  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  ||¡}qàt  |d¡}t  |j| ¡||< t  t  |j¡t  ||¡¡}t
||dt  |¡j dd� d S )Nr¬   )rÀ  Úhetrd_lworkrL   rM   r+   ©r   rL   ©r  r   r±  rP   r±   r  r²  r­   r{   rp   )r4   r   r&   r³  r´  Úfill_diagonalrÝ   r   r   r!   r   rÊ   rË   r   r.   rÜ   r
   r#  rµ  r›  r   r   rs   )r\   rÎ   Ú
real_dtyper¿  rt  rÀ  rÂ  r†   r<   re   r®   r¶  rk   r·  rn   rs   rW  r¸  r¹  r/  rè   rº  r»  ÚQHAQr1   r1   r2   Ú
test_hetrd‹  sR   
ÿ"ÿÿ




ÿ
ÿzTestHetrd.test_hetrdN)r›   rœ   r�   r>   ra  rb  r,   rÁ  ÚziprÉ   rÈ  r1   r1   r1   r2   r¾  ƒ  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 ržt g d¢¡}nt g d¢¡}t|
|dd � qd S )!N)ÚgglseÚgglse_lworkr¬   rQ   rO   rM   )rÍ   rÎ   r_   )g=
×£p=â¿g{®Gázô¿gö(\�ÂõØ¿ç      Ð?)çáz®Gáþ¿gHáz®Gñ?g×£p=
×Ó¿ç…ëQ¸À)çffffff@g¸…ëQ¸Î?gš™™™™™Ù?gffffffÖ¿)rÍ  g{®Gázä?ç…ëQ¸å¿g{®Gáz´?)ç333333Ã?g333333Ó?rÑ  g
×£p=
À)g{®Gáz”¿ç{®Gázð?gáz®Gáö¿ç      à?)g      ø¿rÎ  g®Gáz®ó?gHáz®Gá¿gáz®Gáú¿g=
×£p=ê?r²  )y¸…ëQ¸î?ìQ¸…ëé¿y¸…ëQ¸ž¿¸…ëQ¸î?y…ëQ¸í¿{®Gáz @yš™™™™™©¿=
×£p=Ú?)y\�Âõ(\ï¿®Gáz®ÿ?y333333ó¿R¸…ëQÈ?y…ëQ¸å¿áz®GáÚ?yìQ¸…ëé¿ìQ¸…ëá?)y×£p=
×ã?q=
×£pÝ¿y)\�Âõ(ð?{®Gáz”?y)\�Âõ(ä?Ãõ(\�ÂÅ¿yÃõ(\�Âñ¿333333ã?)y®Gáz®×?R¸…ëQØ?yR¸…ëQÈ?Ház®Gá¿y\�Âõ(\ï¿
×£p=
×¿y)\�Âõ(Ì?š™™™™™É¿)y�Âõ(\�ê?R¸…ëQà?yš™™™™™É?{®Gáz„?yÃõ(\�ÂÅ¿q=
×£pÝ¿y…ëQ¸…÷?q=
×£pù?)yHáz®Gñ?ìQ¸…ëÑ¿yš™™™™™É?¸…ëQ¸¾¿yìQ¸…ë±¿®Gáz®ó?y¤p=
×£Ð?¤p=
×£Ð?yR¸…ëQÀ
×£p=
·?yffffffú?®GázÀyáz®Gá À®Gáz®Ày…ëQ¸ý?ffffff
@y¤p=
×£À)\�Âõ(@y�Âõ(\� @…ëQ¸å?)r±   r²  ç      ð¿r²  )r²  r±   r²  rÔ  r­   )çÐ^"ƒ�Lß?ç¢\}éëï?rÕ  rÖ  )yàÜ!fñ?$_KÀ–dÿ¿y‰^g¿Åµç¿¸F€�Ö@yàÜ!fñ?}²Þ–dÿ¿y61ŸÅµç¿eðæ_�Ö@ry   )rÇ   rÈ   r&   r!   r4   r}   r   r   )rÌ   r/   ÚfuncÚ
func_lworkr®   r]   r‚   rk   r�   r<   Úresultr   r1   r1   r2   Ú
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¨   rp   rO   Úsytrf_lworkr¬   )ÚsyconÚsytrfÚhetrf_lwork)ÚheconÚhetrfr+   rM   rL   )r®   r  )r]   Úipivrx  r  ©r_   )r   rÇ   rÈ   r,   r&   r   r-   r›  rs   r4   r
   r   r!   r   r•   rr  Úcond)rÌ   r/   rÎ   rØ  ÚfunconÚfunctrfrt  rx  r®   Úldurá  r<   Úrcondr1   r1   r2   Ú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¨   rp   )r  ÚsygstÚsyevdÚsygvdr¬   rM   r   giUMu?r½   )r   rÇ   rÉ   r&   r   r-   rs   r4   r
   r   r   )rÌ   r/   rÎ   r  ré  rê  rë  rt  ÚBÚeig_gvdr<   re   r�   r]   Úeigr1   r1   r2   Ú
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¨   rp   )r  ÚhegstÚheevdÚhegvdr¬   r+   rM   r   ç-Cëâ6?r½   )r   rÇ   r,   r&   r   r-   r›  rs   r4   r
   r   r   )rÌ   r/   rÎ   r  rð  rñ  rò  rt  rì  rí  r<   re   r�   r]   rî  r1   r1   r2   Ú
test_hegst=  s(   þ$$$ærô  c               	      sv  t j d¡} d\}}ttƒD ]ª\}}td|d�\}}t|||ƒ}|dk r0t|  ||¡ 	|¡ƒ}n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¨   ©rp   é   ©ÚtzrzfÚtzrzf_lworkr¬   rM   r+   r­   r   Nc              
      óD   g | ]}ˆ ˆ| ˆ|gd d …f j  ˆ|gd d …f  ¡ ¡  ‘qS ©N©rs   r   r›  rC  ©ÚIdÚVrn   r1   r2   rA  x  ó   D ztest_tzrzf.<locals>.<listcomp>rp   r±   r²  r  )r4   r
  rJ  rÇ   rÈ   r&   r!   r   r   r-   rÿ   r   rs   r   r  r   r
   r#  r   r   r   r   ÚspacingrÝ   )r0   rÍ   rÎ   rÌ   r/   rø  Útzrzf_lwr®   rt  Úrzre   r˜  r™   ÚZr1   rý  r2   Ú
test_tzrzf\  s,   
ÿ&0(ÿêr  c               	   C   sÐ  t j d¡} ttƒD ]Û\}}d}|dkr.t|  ||¡|  ||¡d  t|ƒ ƒ |¡}d}nt|  ||¡t|ƒ ƒ |¡}d}t	d|d�\}}}||ƒ\}	}
|  |d	¡ |¡}|d
|	|ƒ}t
|t| |ƒ|d	 dkrldndd� |d
|	||d�}t
|t| ¡ j |ƒ|d	 dkrŠdndd� |dƒ|t  |¡t  |¡f< |d
|	||dd�}t
|t| ¡ j |ƒ|d	 dkr·dndd� |  d|¡ |¡}|d
|	||ddd�}t
|t| |jƒ ¡ j|d	 dkrád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©   rL   r+   rv   rs   )ÚtrttfÚtfttrÚtfsmr¬   rM   r{   r   rO   rQ   ry   ©rƒ   r±   rB  )rƒ   r   rN   r˜  )rƒ   r   rš  N)r4   r
  rJ  rÇ   rÈ   r   r   r
   r-   r&   r   r   r›  rs   r³  )r0   rÌ   r/   rÎ   rt  rƒ   r  r  r  ÚAfpr<   rì  ÚsolnÚB2r1   r1   r2   Ú	test_tfsm~  s@   .ÿÿÿÿÿár  c               	      sŒ  t j d¡} d\}}}ttƒD �]3\}}td|d�\}}t|||ƒ}|dk rCt|  ||¡ 	|¡ƒ}	|  ||¡ 	|¡}
td|d�\}}n+t|  ||¡|  ||¡d   	|¡ƒ}	|  ||¡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 r±d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 matrix 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¨   )rp   rö  rö  r÷  r¬   rM   )ÚormrzÚormrz_lworkr+   )ÚunmrzÚunmrz_lworkr­   Nc              
      rú  rû  rü  rC  rý  r1   r2   rA  Æ  r   z$test_ormrz_unmrz.<locals>.<listcomp>rs   rv   rp   r±   r   r²  r  r°   r˜  )rš  r®   )rš  rƒ   r®   )r4   r
  rJ  rÇ   rÈ   r&   r!   r   r   r-   r  r
   r#  r   r   r  rÝ   r   r   r   r›  rs   )r0   ÚqmÚqnÚcnrÌ   r/   rø  r  Úlwork_rzrt  rv   Úorun_mrzÚorun_mrz_lwÚ	lwork_mrzr  re   r™   r¹  rƒ   ÚtolÚcqr1   rý  r2   Útest_ormrz_unmrz§  sV   

ÿÿ& 
ÿ(ÿÿÓr  c               	   C   s
  t j d¡} ttƒD �]w\}}d}|dkr)|  ||¡|  ||¡d   |¡}d}n|  ||¡ |¡}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 Rectangular Full Packed (RFP) format
    and Standard Triangular Array (TR)
    r¨   r©   rL   r+   rv   rs   )r  r  r¬   r   r6  ©r9  rB  )Útransrr9  rM   Nr{   ÚF)Úorder)r4   r
  rJ  rÇ   rÈ   r   r-   r&   r   r   r   r›  rs   r   r   Úreshape)r0   rÌ   r/   rÎ   ÚA_fullr  r  r  ÚA_tf_Ure   Ú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_Tr1   r1   r2   Útest_tfttr_trttfá  sX   ",F,BÿÿÏr-  c                  C   s|  t j d¡} ttƒD ]±\}}d}|dkr&|  ||¡|  ||¡d   |¡}n	|  ||¡ |¡}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©   rL   r+   )ÚtrttpÚtpttrr¬   r   r6  r  rM   N)r4   r
  rJ  rÇ   rÈ   r   r-   r&   r   r   r   r   rs   r   r   r   )r0   rÌ   r/   rÎ   r"  r.  r/  ÚA_tp_Ure   ÚA_tp_LÚindsÚA_tp_U_mÚA_tp_L_mr)  r*  r1   r1   r2   Útest_tpttr_trttp  s4   $

àr5  c                  C   sì   t j d¡} ttƒD ]i\}}d}|dkr3|  ||¡|  ||¡d   |¡}|| ¡ j |t	|ƒ  }n|  ||¡ |¡}||j |t	|ƒ  }t
d|d�\}}}||ƒ\}}	|||ƒ\}
}	t|	dkƒ |||
ƒ\}}t|ƒ}t||ƒ q
dS )	zk
    Test Cholesky factorization of a positive definite Rectangular Full
    Packed (RFP) format array
    r¨   r©   rL   r+   )Úpftrfr  r  r¬   r   N)r4   r
  rJ  rÇ   rÈ   r   r-   r›  rs   r
   r&   r   r   r   )r0   rÌ   r/   rÎ   rt  r6  r  r  r
  re   Ú	Achol_rfpÚA_chol_rr<   ÚAcholr1   r1   r2   Ú
test_pftrfD  s$   "ÿîr:  c                  C   s  t j d¡} ttƒD ]}\}}d}|dkr3|  ||¡|  ||¡d   |¡}|| ¡ j |t	|ƒ  }n|  ||¡ |¡}||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 Rectangular Full
    Packed (RFP) format array to find its inverse
    r¨   r©   rL   r+   )Úpftrir6  r  r  r¬   r   rM   rO   rQ   ry   N)r4   r
  rJ  rÇ   rÈ   r   r-   r›  rs   r
   r&   r   r   r   r   )r0   rÌ   r/   rÎ   rt  r;  r6  r  r  r
  re   Ú
A_chol_rfpÚ	A_inv_rfpÚA_inv_rr<   ÚAinvr1   r1   r2   Ú
test_pftri_  s*   "ü
ÿêr@  c                  C   sf  t j d¡} ttƒD ]¦\}}d}|dkr3|  ||¡|  ||¡d   |¡}|| ¡ j |t	|ƒ  }n|  ||¡ |¡}||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r¬d
ndd� q
dS )z…
    Test Cholesky factorization of a positive definite Rectangular Full
    Packed (RFP) format array and solve a linear system
    r¨   r©   rL   r+   rN   r¬   rM   )Úpftrsr6  r  r  r   rO   rQ   ry   N)r4   r
  rJ  rÇ   rÈ   r   r-   r›  rs   r
   r   r&   r   rÿ   r   r   r   )r0   rÌ   r/   rÎ   rt  rì  ÚBf1ÚBf2rA  r6  r  r  r
  re   r<  r  r1   r1   r2   Ú
test_pftrs  s2   "üÿårD  c                  C   s8  t j d¡} ttƒD ]�\}}d}|dkr3|  ||¡|  ||¡d   |¡}|| ¡ j |t	|ƒ  }n|  ||¡ |¡}||j |t	|ƒ  }|dk rMdnd}t
dd	|› d
�f|d�\}}}||ƒ\}	}
|  |d¡ |¡}||dd|d|	ƒ}|||ƒ\}}
t|t| | ¡ j¡ d|  ƒ|d dkr•dndd� q
dS )zT
    Test for performing a symmetric rank-k operation for matrix in RFP format.
    r¨   r©   rL   r+   rM   rá   Úhr  r  Úfrkr¬   r{   r   rO   rQ   ry   N)r4   r
  rJ  rÇ   rÈ   r   r-   r›  rs   r
   r&   r   r   r   )r0   rÌ   r/   rÎ   rt  Úprefixr  r  Úshfrkr
  r<   rv   ÚAfp_outÚA_outr1   r1   r2   Útest_sfrk_hfrk¤  s(   "ÿ ÿïrK  c                  C   s¢  t j d¡} ttƒD ]Ä\}}d}|dkr3|  dd||f¡|  dd||f¡d   |¡}|| ¡ j }n|  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¨   rp   rL   iâÿÿÿé   r+   r  r±   )ÚsyconvrÝ  rÛ  r¬   rÄ  F)r  Ú	hermitianr±  r{   Nr²  r  r   )r4   r
  rJ  rÇ   rÈ   r   r-   r›  rs   r
   r  rÝ   r&   r!   r   r   r   r   )r0   rÌ   r/   rÎ   rt  r  rM  ÚtrfÚ	trf_lworkÚlwr6  ÚDÚpermræ  rá  re   r]   r·  rB  r1   r1   r2   Útest_syconv¾  s6   ÿÿÿ(*ærT  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   sB  t j d¡}ttƒD �]\}}d}|dkr'| ||¡| ||¡d   |¡}n	| ||¡ |¡}dt  |dƒj¡ }t	d|d�\}}|||ƒ\}	}
}|d	ksPJ ‚t  
|	d
¡t j||d� }t j||d�||
 |j ¡   }t  |	¡}t|j ¡ | t j||d�|dd� t|| ||dd� |dkr¦| ||¡| ||¡d   |¡}d}n| ||¡ |¡}d}dD ]V}d|fD ]O}||	|
|||d�\}}|d	ksÌJ ‚||krÖ|j ¡ }n|}|dkrá|| }n|| }t|||dd� ||fdk�r||	|
|ƒ\}}|d	k�sJ ‚t||ƒ q¹q³tt||	|
|dd� tt||	|
|dd� q
d S )Nr¨   r©   rL   r+   r  r±   )ÚgeqrtÚgemqrtr¬   r   r{   r²  r  rv   rs   ©r6  r˜  r?  ©rš  rƒ   r6  ©r6  r?  rt  r™  r	  )r4   r
  rJ  rÇ   rÈ   r   r-   r  rÝ   r&   r   r
   rs   r›  r   r   r   rÿ   r   )r\   r0   rÌ   r/   rÎ   rt  r  rV  rW  r]   Útre   rè   r¹  r˜  rv   Ú	transposerš  rƒ   r‚   ÚqÚqCÚ	c_defaultr1   r1   r2   Útest_geqrt_gemqrtç  sT   $ 
ÿ"

€ìÆzTestBlockedQR.test_geqrt_gemqrtc           !      C   sÄ  t j d¡}ttƒD �]Ô\}}d}|dkr8| ||¡| ||¡d   |¡}| ||¡| ||¡d   |¡}n| ||¡ |¡}| ||¡ |¡}dt  |dƒj¡ }t	d|d�\}}	d	|d
 |fD �]z}
||
|||ƒ\}}}}|d	kswJ ‚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%| ||¡| ||¡d   |¡}| ||¡| ||¡d   |¡}d}n| ||¡ |¡}| ||¡ |¡}d}dD ]Š}d|fD ]‚}|	|
||||||d�\}}}|d	k�sXJ ‚||k�rc|j ¡ }n|}|dk�r�t 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�s¸J ‚t
||ƒ t
| |ƒ �qA�q;tt|	|
||||dd� tt|	|
||||dd� qcq
d S )Nr¨   r©   rL   r+   r  r±   )ÚtpqrtÚtpmqrtr¬   r   rM   r{   r²  r  rv   rs   rX  r?  rY  r6  r�   rZ  rt  r™  r	  )r4   r
  rJ  rÇ   rÈ   r   r-   r  rÝ   r&   r   r   r   r"  r
   rs   r›  r   r   rÿ   r   )!r\   r0   rÌ   r/   rÎ   rt  rì  r  ra  rb  Úlr]   r�   r[  re   ÚB_pentÚb_pentrè   r¹  r˜  rv   rR  r\  rš  rƒ   r‚   rk   r]  ÚcdÚCDÚqCDr_  Ú	d_defaultr1   r1   r2   Útest_tpqrt_tpmqrt%  sx   "$*"$ÿÿ
""ÿ




€çÀñzTestBlockedQR.test_tpqrt_tpmqrtN)r›   rœ   r�   r=   r`  rj  r1   r1   r1   r2   rU  á  s    >rU  c                  C   óê  t j d¡} ttƒD ]è\}}d}d}td|d�}|dkr<|  ||| ¡ |¡d|  ||| ¡ |¡  }|| ¡ j	 }n|  ||| ¡ |¡}||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¨   rp   rM   Úpstrfr¬   rL   r+   r²  éè  ©r   rM   r;  rÄ  ©r4   r
  rJ  rÇ   rÈ   r&   r   r-   r›  rs   r   r   rÊ   r¦  rË   r&  r   r   )r0   rÌ   r/   rÎ   r…  rl  rt  r‚   ÚpivÚr_cre   rB  Úsingle_atolÚdouble_atolr  r6  r1   r1   r2   Ú
test_pstrfy  ó6   0

2
4Ýrt  c                  C   rk  )Nr¨   rp   rM   Úpstf2r¬   rL   r+   r²  rm  rn  r;  rÄ  ro  )r0   rÌ   r/   rÎ   r…  rv  rt  r‚   rp  rq  re   rB  rr  rs  r  r6  r1   r1   r2   Ú
test_pstf2¡  ru  rw  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 r“t|  |¡|d d …d f | | ddd� q#t| |¡|d d …d f | | ddd� q#d S )N)g      ä?r±   g�1w-!¤?gÃdª`TRÛ¿)r±   g³êsµûá¿rÔ  rÔ  )gësµûËâ?rÔ  g2æ®%äƒ®¿g,eâXá¿)rÔ  g‚sF”öã¿g%ušž¿g?ÆÜï?)y/n£¼Ò¿¥½Á&á?yDioð…É´?×òAÏfí?y Òo_Îç¿À[ AñcÐ¿)yësµûËÖ¿òAÏfÕçÒ¿y±Pkšwœî?ñôJY†8¦¿y¨5Í;NÑ‘¿�•C‹lçÃ?)y´Yõ¹ÚŠë?1™*•ÔÁ?yÙ=yX¨Ñ¿@aÃÓ+ç?yÜh o�Å¿F¶óýÔxÁ¿rM   )g   ÐˆÃBg   €tÒBgffffff @g   ÈÙ“ Â)ç      @gš™™™™™ÀgÑ®#®fD¾gffffffÀ)gHáz®Gù?g…ëQ¸…Àg'Vä»íó½g¤p=
×£ð¿)gÃõ(\�Âñ¿rÐ  gÈSƒÁ7Ð½r~  )gq=
×£põ¿g   €“ÜäAg�Âõ(\�À)g333333û¿g   ¬§ÓBg333333Ã¿)gZ9œ‚·�ð=gìQ¸…ëá¿gŽ‹‡›ÐÖ½r¬   )gffffff@g   tÞ…Br  )g�Âõ(\�ö¿g   ÀZÖÁgq=
×£põ?)gEõoÃpÅ=g…ëQ¸…÷?gZ€Eq÷Ò½r+   Úgeequr   ró  r;  )r4   r}   rÇ   rÈ   r-   r&   r   )Údesired_realÚdesired_cplxrÌ   r/   rt  ry  r…  r‚   ÚrowcndÚcolcndÚamaxre   r1   r1   r2   Ú
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   r{   r{   rý   r4  rp   r¬   rM   r±   r+   c                    s   g | ]}ˆ d |  ‘qS )r²   r1   rC  ©rŸ  r1   r2   rA  ü  rE  ztest_syequb.<locals>.<listcomp>éûÿÿÿrP   Úsyequb)r4   r}   rÇ   rÈ   r
   r#  Úrot90r   r&   r   Úlog2r-   rÜ   )
Údesired_log2srÌ   r/   rt  rk   r‚  rá   Úscondr~  re   r1   r€  r2   Útest_syequbö  s   "÷r‡  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 )NrM   rP   iê  rT   rL   )rW  r+   r   r²  rÔ  éüÿÿÿr�  rQ   ù                i   ©rP   rP   y              0@)rP   r   rÄ  )rý   r{   r{   r   r   r�  r   r{   r{   rý   rý   )r4   r   r   r   Úzheequbr   r   r„  r•   r³  Úcheequbr-   Ú	complex64)rt  rá   r†  r~  re   r1   r1   r2   Útest_heequb  s   2
( 
r�  c                  C   s.  t j d¡} d}|  |¡}|  |¡|  |¡d  }ttƒD ]w\}}|dk r:|  ||¡}| |¡}|| }| |¡}n|  ||¡|  ||¡d  }| |¡}|| }| |¡}td|d�}td|d�}	||dd	�\}
}}}|	|
|||dd
�\}}|dk rˆt| |¡|| dd� qt| |¡|| dd� qd S )Nr  rp   r+   rM   Úgetc2r¬   Úgesc2r   ©r  )Úoverwrite_rhsrO   ry   )	r4   r
  rJ  r   rÇ   rÈ   r-   r&   r   )r0   rÎ   rz  r{  rÌ   r/   rt  r�   r�  r‘  ry  rá  Újpivre   r†   rX   r1   r1   r2   Útest_getc2_gesc2  s4   




ÿ
ÿër•  r  )rQ   rP   r‹  ÚjobarQ   ÚjoburO   ÚjobvÚjobrrL   Újobpc              
   C   s  t j d¡}| \}	}
dt  |¡j }t| ||ƒ}td|d�}|dk }|dk }|dko-|	|
k}t  |¡}|dko<| o<| }|dkoG|oD| oG|}|dkoR|oO| oR|}|rXd}n	|s\|r_d}nd	}|dkrw|dkrwtt	||||||||ƒ	 dS ||||||||d
�\}}}}}}t
||ƒ |�s|d	 |d  |d|
…  }t|t|dd�|d� |dkr·|dd…d|
…f }|rÌ|rÌt|t  |¡ | ¡ j ||d� |rÝt| ¡ j| t  |
¡|d� |rît| ¡ 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¬   rM   rL   rý   r4  r   )r–  r—  r˜  r™  Újobtrš  NF)r  r‰  )r4   r
  rJ  rÊ   rË   r3   r&   r  rÿ   r   r   r   r   r   r›  rs   Úidentityrr  Úmatrix_rankÚcount_nonzero)r  r/   r–  r—  r˜  r™  rš  rœ  r0   rÍ   rÎ   r  rt  r›  ÚlsvecÚrsvecÚl2tranÚ
is_complexÚinvalid_real_jobvÚinvalid_cplx_jobuÚinvalid_cplx_jobvÚexit_statusÚsvar’  rè   rÞ   rß   re   Úsigmar1   r1   r2   Útest_gejsv_general8  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   ©rL   rL   ©rL   r—  r  rp   rt  N)r&   r   r.   r4   r}   r   Úsinr³  r!  r-   Úasfortranarrayrs   rœ  r   )r/   r›  r¨  r’  rè   rÞ   rß   re   rt  ÚAcr<   r1   r1   r2   Útest_gejsv_edge_arguments¤  s.   



r°  ÚkwargsrT   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)rM   rM   r¬   r›  Nr]  )r±  rt  r›  r1   r1   r2   Ú test_gejsv_invalid_job_argumentsÈ  s   
r²  zA,sva_expect,u_expect,v_expect)g)\�Âõ(@g¤p=
×£ø¿gffffffò?g
×£p=
ÿ¿)gìQ¸…ëÑ?g¸…ëQ¸ú¿g®Gázî?gö(\�Âõè¿)g¸…ëQ¸Þ¿g¸…ëQ¸Àg®Gáz®ï?gáz®GáÊ¿)g…ëQ¸ñ?g…ëQ¸…ó?gHáz®Gé?g)\�Âõ(ä?)gÍÌÌÌÌÌÀgq=
×£p@g333333÷¿rÏ  )ç×£p=
×ã?g�Âõ(\�ÀrÒ  g�Âõ(\�À)g cîZBþ#@gI.ÿ!ýv@g?ÆÜµõ?rÓ  )gþCúíëÀÑ?gÙ=yX¨5ã¿gcÙ=yXÀ¿gåa¡Ö4ïÀ?)gB`åÐ"ÛÉ?gû:pÎˆÒž¿gÁÊ¡E¶óÑ?gn4€·@‚æ?)g[B>èÙ¬Ò?gèÙ¬ú\mÕ?gJ{ƒ/L¦ä?g„O¯”eÈ?)gˆc]ÜF¸¿gê•²q¬×¿gû\mÅþ²å?çfˆc]ÜFá¿)gØ�sF”öÚ¿gîZB>èÙà?g0L¦
F%¥?gq=
×£p­¿)g·Ñ Þé?g½R–!ŽuÕ?gu“VÅ¿g¥½Á&SÙ¿)g‚âÇ˜»–È?gV-²é¿g	ž^)Ëp?gçŒ(íâ¿)gÜFx$ì¿gã6À[ Ù¿gUÁ¨¤N@³¿g­iÞqŠŽÐ?)g1¬ZdË?gßO�—nÓ¿gÎˆÒÞàé?gÙ_vOà?)g}?5^ºIØ¿g5ï8EGrÕ?gi o�Åã?g7À[ Aã¿c                 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¬   r‰  N)r&   r/   r   )rt  Ú
sva_expectÚu_expectÚv_expectr  r›  r¨  r’  rè   rÞ   rß   re   r1   r1   r2   Útest_gejsv_NAG×  s   r¸  c           "   	   C   s¾  t j 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  < q˜d|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 �sNw   Y  ttƒ� |||d d… |ƒ W d   ƒ n	1 �smw   Y  ttƒ� ||||d d… ƒ W d   ƒ n	1 �sŒw   Y  ttƒ� ||d	 |d d… |d	 ƒ W d   ƒ n	1 �s¯w   Y  d	|d	< d	|d	< ||||ƒ\}}}}} }!t j ||d  d	kd||d  › d�¡ d S )Nr  rp   r  rL   rG  r{   ©ÚgttrfÚgttrsr¬   r   rM   r‰  rs   rv   r	  z?gttrf: _d[info-1] is ú, not the illegal value :0.)r4   r
  rJ  rÊ   rË   r3   rœ  r   r   r&   r   r
   rÇ   r   rÉ   rs   r›  rÿ   r<  Útestingr   )"r/   r0   rÎ   r  Údurk   ÚdlÚdiag_cpyrt  r†   r�   rº  r»  Ú_dlÚ_dÚ_duÚdu2rá  re   rB  r6  r/  rÍ   rp  Úb_cpyÚx_gttrsrƒ   Úb_transÚ__dlÚ__dÚ__duÚ_du2Ú_ipivÚ_infor1   r1   r2   Útest_gttrf_gttrsù  sf   "$$.$


ÿ
ÿ
ÿ
ÿ.rÎ  z1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)gÍÌÌÌÌÌ @rÔ  çffffffþ?r¶   )r  rÏ  ç      ÀçÍÌÌÌÌÌì¿çffffff@)ç333333@çÍÌÌÌÌÌ@rµ   ç      À)rÏ  r�  rÑ  rÒ  )rÓ  rÔ  rR   éúÿÿÿgÏÜCÂ÷>ð¿)r{   rÏ  rS   )rM   rN   rO   rP   rP   gš™™™™™@gffffff@ç      à¿gš™™™™™%@gÍÌÌÌÌÌ@gš™™™™™	Àr}  gffffff&Àgš™™™™3@r‰  rP   rR   r4  rý   )ù       @      ð¿ù       @      ð?ù      ð¿      ð?ù      ð?      ð¿)ùÍÌÌÌÌÌô¿ÍÌÌÌÌÌô?rÜ  ùÍÌÌÌÌÌô¿ffffff
@ù333333Ó¿333333@ùffffff
ÀÍÌÌÌÌÌô?)ù      ð?       Àù      ð?      ð?ù       @      Àrá  )rÜ  rÝ  rÞ  rß  )rà  rá  râ  rá  y ‘~û:põ¿ffffffÒ?)rÙ  rÚ  rÛ  y333333@      Àyš™™™™™@š™™™™™@y333333@3333332@yš™™™™™À333333Àyffffff-Àffffff#@y      À333333ã¿yfffffæ?@ÍÌÌÌÌÌÀ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ó  r‰  )r&   r   )r¾  rk   r¿  Údu_expÚd_expÚdu2_expÚipiv_expr�   r†   rº  r»  rÁ  rÂ  rÃ  rÄ  rá  re   rÆ  r1   r1   r2   Ú0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfU  s   2


rç  )rd  rc  re  c              	   C   s†  t j d¡}| |¡| |¡d  }| |d ¡| |d ¡d  }| |d ¡| |d ¡d  }t  |¡t  |d¡ t  |d¡ }t  | t j¡rX|j|j|j|jf\}}}}| | ¡| | ¡| | ¡| | ¡f\}}}}t  |¡j	dd� 
¡ }td|fƒ\}	}
|	|||ƒ\}}}}}}|
|||||||d�\}}td	|fƒ\}}||ƒ\}}}||||d�\}}t  | ¡jd
 }t|||d� d S )NiTŽfr+   rL   r{   r   r�   )rº  Úgtconrk  rh  g      è?r½   )r4   r
  rl  r   rp  rq  rÝ   r-   r•   r“   r–   r&   rÊ   rË   r   )r/   r   rÎ   r0   rk   r¿  r¾  rt  rx  rº  rè  rÄ  rá  re   r0  r<   ri  rj  ry  rz  r™   r¾   r1   r1   r2   Ú
test_gtcon”  s"     ",ré  ))rN   rR   )rR   rN   rñ   c                 C   ró   )NÚgeqrfp_lworkr¬   rõ   r   rö   )r/   r.   rê  rÍ   rÎ   r®   re   r1   r1   r2   Útest_geqrfp_lwork°  rø   rë  zddtype,dtypec                 C   sj  t j 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�d� t  |d¡t  t  |¡¡ }t  |
¡}t||| | ¡ j |d� t|f||ƒ}|| }t	d|d�}||
| ¡ |ƒ\}}t|d	d|› d�d� t|||d� d S )Nr  r  rp   rO   rL   r{   Úpttrfr¬   r   zpttrf: info = z, should be 0)Úerr_msgr‰  Úpttrszpttrs: info = )r4   r
  rJ  rÊ   rË   r3   r   r›  rœ  r&   r   r   r   r   r€   rs   )Úddtyper/   r0   r  rÎ   rk   r·  rt  rÀ  rì  rÂ  Ú_ere   r6  rR  r†   r�   rî  Ú_xr1   r1   r2   Útest_pttrf_pttrs¹  s*   (
rò  c                 C   sp   d}t j d¡}td|d�}t|f| |ƒd }t|d f||ƒ}tt||d d… |ƒ tt|||d d… ƒ d S )Nrp   r¨   rì  r¬   rM   rL   r{   )r4   r
  rJ  r&   r3   rÿ   r<  )rï  r/   rÎ   r0   rì  rk   r·  r1   r1   r2   Ú*test_pttrf_pttrs_errors_incompatible_shapeê  s   ró  c           
      C   s´   d}t j d¡}td|d�}t|f| |ƒd }t|d f||ƒ}d|d< d|d< |||ƒ\}}}	t||	d  dd||	d  › d	�ƒ t|f| |ƒ}|||ƒ\}}}	t|	dkd
ƒ d S )Nrp   r  rì  r¬   rM   rL   r   z?pttrf: _d[info-1] is r¼  z2?pttrf should fail with non-spd matrix, but didn't)r4   r
  rJ  r&   r3   r   r   )
rï  r/   rÎ   r0   rì  rk   r·  rÂ  rð  re   r1   r1   r2   Ú'test_pttrf_pttrs_errors_singular_nonSPD÷  s   ÿrô  z%d, e, d_expect, e_expect, b, x_expect)rO   rp   é   r¼   rP   )rý   rÖ  rö  rS   )rO   rT   r¼   é   rL   )r×  gKÈ=›Uå¿r}  rÓ  rM   é   éA   é   g      @r{   r�  )rö  é)   é.   é   )y      0@      0@y      2@      "Àù      ð?      À)rö  rT   rL   rO   )rá  rØ  rý  y      P@      0@y      0À      @Ày     @W@      O@y     €N@     €PÀy     €S@      TÀy     ÀQ@     €RÀy      ,@      ;À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¬   r‰  rî  rL   rÄ  )r&   r   r›  r/   r,   )rk   r·  Úd_expectÚe_expectr�   Úx_expectr  rì  rÂ  rð  re   rî  rñ  r1   r1   r2   Útest_pttrf_pttrs_NAG	  s   
þr  c                 C   s4  t j d¡}|dkr^t||f| |ƒ}|t  t  |¡d|  ¡ }|| ¡ j d }t|ƒd }t|f||ƒd }t|d f||ƒ}t  |¡t  |d¡ t  |d¡ }	||	 | ¡ j }
|}n6t|f||ƒ}t|d f||ƒ}|d }t  |¡t  |d¡ t  |d¡ }
t  |¡t  |d¡ t  |d¡ }|||
|fS )Nr  rL   rO   rM   r{   )	r4   r
  rJ  r3   r   r   r›  rs   r   )r/   ÚrealtyperÎ   Ú	compute_zr0   ÚA_eigÚvrrk   r·  Útrirt  Úzr1   r1   r2   Úpteqr_get_d_e_A_z6	  s"   """r  zdtype,realtyper  c                 C   sÜ   t dƒ dt | ¡j }td| d�}d}t| |||ƒ\}}}}	||||	|d�\}
}}}t|dd|› d	�ƒ tt t	|ƒd ¡t |
¡|d
� |rlt|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  rm  Úpteqrr¬   rp   ©rk   r·  r  r  r   zinfo = z, should be 0.r‰  N)r   r4   rÊ   rË   r&   r  r   r   Úsortr   r›  rs   r�  r   )r/   r  r  r  r	  rÎ   rk   r·  rt  r  Úd_pteqrÚe_pteqrÚz_pteqrre   r1   r1   r2   Ú
test_pteqrV	  s    
"ÿ
ÿûr  c                 C   sZ   t dƒ td| d�}d}t| |||ƒ\}}}}||d |||d�\}	}
}}|dks+J ‚d S )Nr  r	  r¬   rp   rO   ©r  r  r   ©r   r&   r  ©r/   r  r  r	  rÎ   rk   r·  rt  r  r  r  r  re   r1   r1   r2   Útest_pteqr_error_non_spdw	  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¬   rp   r{   r  )r   r&   r  rÿ   r<  )	r/   r  r  r	  rÎ   rk   r·  rt  r  r1   r1   r2   Ú"test_pteqr_raise_error_wrong_shape†	  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¬   rp   r   r  r  r  r1   r1   r2   Útest_pteqr_error_singular•	  s   r  zcompute_z,d,e,d_expect,z_expect)g¤p=
×£@rx  gq=
×£pñ?r³  )g\�Âõ(\	@g
×£p=
ï¿gš™™™™™á?)gÅ�1w- @gR' ‰°áÿ?g/n£¼ð?g&äƒžÍª¿?)g cîZB>ä?g–C‹lçûã?gû:pÎˆÒÚ¿gÉå?¤Ç?)gaTR' ‰è?g‡ÙÎ÷SÛ¿g}Ð³Yõ¹Ú?g%ušÎ¿)gû\mÅþ²»¿gèÙ¬ú\mã?g×òAÏfÝ?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¬   rL   r{   r
  r‰  N)r&   r/   r4   r   r   r•   )r  rk   r·  rþ  Úz_expectr  r	  r  rÂ  rð  Ú_zre   r1   r1   r2   Útest_pteqr_NAG_f08jgf¤	  s   "r  Úmatrix_size)rð   )rR   rQ   ©rQ   rQ   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 ¡oÙt  t  |¡d	k¡ƒ d S )Nr  éú   r  Úgeqrfpr¬   ÚorgqrrG  )rn   r®   r   r½   r;  r{   )r4   r
  rJ  rÊ   rË   r&   r3   r   r   r   r
   r.   r›  rs   r   Úallr   r[   r   r$  )r/   r  r0   r¾   r  r  ÚgqrrÍ   rÎ   rt  Úqr_Arn   re   r…  Úqqrr]  Ú
A_negativeÚr_rq_negÚq_rq_negÚrq_A_negÚtau_negÚinfo_negr1   r1   r2   Útest_geqrfp½	  s6   
"ÿ(ÿr(  c                  C   s(   t  g ¡} td| jd�}tt|| ƒ d S )Nr  r¬   )r4   r}   r&   r/   rÿ   r   )ÚA_emptyr  r1   r1   r2   Ú#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yR } zt | | › d|› �¡ W Y d }~d S d }~ww )	Né°  r1  Ú_lworkr   r¬   rL   rÄ  ú$_lwork raised unexpected exception: ©rÉ   r,   r&   r!   r   r>   Úfail©r0  r+  rÎ   r/   Úsc_dlwÚdz_dlwr·  r1   r1   r2   Ú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yR } zt | | › d	|› �¡ W Y d }~d S d }~ww )
Nr3  r1  r4  r   r¬   rL   r6  r  r5  r6  r8  r1   r1   r2   Útest_generalized_eigh_lworks
  s   &€ÿr>  Údtype_rÍ   )rL   rp   r  rm  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  r1   rC  r1   r1   r2   rA  .
  s    z*test_orcsd_uncsd_lwork.<locals>.<listcomp>)r   r   rÉ   r&   r!   r  )r?  rÍ   r_   r]  r0  ÚdlwrQ  Úlwvalr1   r1   r2   Útest_orcsd_uncsd_lwork#
  s   
rE  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< qÊt|ƒD ]}|||| || f< q×t|ƒD ]}| ||| | || | | | | f< qèt|ƒ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@  rA  ÚcsdrB  r¬   r®   Úlrworkr   r±   r²  g     ˆÃ@r;  )rÉ   r"   Úrvsr#   r&   r!   ÚdictrÉ  r   rN  r4   r   r#  Úcosr­  r   rÊ   rË   )r?  rÍ   r_   r]  r0  ÚXÚdrvrC  rD  ÚlwvalsÚcs11Úcs12Úcs21Úcs22ÚthetaÚu1Úu2Úv1tÚv2tre   rB  ÚVHr…  Ún11Ún12Ún21Ún22ÚSÚoner/  ÚXcr1   r1   r2   Útest_orcsd_uncsd1
  sJ   
ÿÿTÿ

,$*,& ra  Ú
trans_boolFÚfactr  c           !      C   s$  t j 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�}|rX| tv rVd
ndnd}|ra| 	¡ j
n|| }| ¡ |	 ¡ |
 ¡ | ¡ g}|dkr}|||	|
ƒndgd \}}}}}}|||	|
||||||||d�}|\
}}}}}}}}}} t| dkd| › 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 › d|jd › �ƒ t|jd |jd kd|jd › 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¬   rp   rL   rG  r{   rM   rs   rv   r?  r  NrQ   ©rc  rƒ   ÚdlfÚdfÚdufrÄ  rá  r   z?gtsvx info = z, should be zerorN   r‰  Ú__len__Túrcond should be scalar but is úferr.shape is z but should be úberr.shape is )r4   r
  rJ  rÊ   rË   r&   r3   r   rÉ   r›  rs   rœ  r   r   r   r¢   r.   )!r/   rb  rc  r0   r  re  rº  rÎ   r¿  rk   r¾  rt  r†   rƒ   r�   Ú
inputs_cpyÚdlf_Údf_Úduf_Údu2f_Úipiv_Úinfo_Ú	gtsvx_outrg  rh  ri  Údu2frá  Úx_solnrç  ÚferrÚberrre   r1   r1   r2   Ú
test_gtsvx`
  sB   "ÿÿÿ"ÿ"ÿrz  c                 C   sÐ  t j 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 rLd	nd
}|rU|
 ¡ jn|
| }|dkrc||||	ƒnd gd \}}}}}}||||	||||||||d�}|\
}}}}}}}}}}|dkr²d|d< d|d< ||||	|ƒ}|\
}}}}}}}}}}|dks°J dƒ‚d S |dkräd|d< d|d< d|d< ||||	|||||||d�
}|\
}}}}}}}}}}|dksæJ dƒ‚d S d S )Nr  rd  r¬   rp   rL   rG  r{   rM   rs   rv   r  rQ   rf  r?  r   z&info should be > 0 for singular matrix)rc  rg  rh  ri  rÄ  rá  )	r4   r
  rJ  r&   r3   r   rÉ   r›  rs   )r/   rb  rc  r0   re  rº  rÎ   r¿  rk   r¾  rt  r†   rƒ   r�   ro  rp  rq  rr  rs  rt  ru  rg  rh  ri  rv  rá  rw  rç  rx  ry  re   r1   r1   r2   Útest_gtsvx_error_singular�
  sB   "ÿÿÿö
r{  c                 C   s<  t j 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 rLd	nd
}|rU|
 ¡ jn|
| }|dkrc||||	ƒnd gd \}}}}}}|dkrÈt	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  rd  r¬   rp   rL   rG  r{   rM   rs   rv   r  rQ   r?  rf  )r4   r
  rJ  r&   r3   r   rÉ   r›  rs   rÿ   r<  r   )r/   rb  rc  r0   re  rº  rÎ   r¿  rk   r¾  rt  r†   rƒ   r�   ro  rp  rq  rr  rs  rt  r1   r1   r2   Ú"test_gtsvx_error_incompatible_sizeÐ
  sZ   "ÿþþþ
þþþþ
þr|  zdu,d,dl,b,xc              
   C   sB   t d|jd�}|||| |ƒ}|\
}}}	}
}}}}}}t||ƒ d S )Nre  r¬   ©r&   r/   r   )r¾  rk   r¿  r�   r†   re  ru  rg  rh  ri  rv  rá  rw  rç  rx  ry  re   r1   r1   r2   Útest_gtsvx_NAG  s   r~  zfact,df_de_lambdac                 C   ó   t d|jd�| |ƒS ©Nrì  r¬   ©r&   r/   ©rk   r·  r1   r1   r2   Ú<lambda>&  ó
    ÿÿrƒ  c                 C   ó   dS ©N)NNNr1   r‚  r1   r1   r2   rƒ  (  ó    c                 C   s¸  t j 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|› d�ƒ t||ƒ t  |d¡t  t  |¡¡ }t  |¡}t|
|| t  |¡j |d� t|dƒrÀJ d|› �ƒ‚t|jdkd|j› d�ƒ t|jdkd|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¬   rP   rO   rL   r{   rM   rG  ©rc  rh  Úefr   zinfo should be 0 but is Ú.r‰  rj  rk  )rM   rl  z# but should be ({x_soln.shape[1]},)rm  N)r4   r
  rJ  rÊ   rË   r&   r3   r   r›  rœ  r   r   r   r   r   rs   r¢   r.   )r/   r  rc  Údf_de_lambdar0   r  rˆ  rÎ   rk   r·  rt  rw  r�   rh  rŠ  re   rÀ  r†   rç  rx  ry  r6  rR  r1   r1   r2   Ú
test_ptsvx"  s6   (
ÿ

ÿr�  c                 C   r  r€  r�  r‚  r1   r1   r2   rƒ  a  r„  c                 C   r…  r†  r1   r‚  r1   r1   r2   rƒ  c  r‡  c              
   C   sö   t j 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  rˆ  r¬   rP   rO   rL   r{   rM   rG  r‰  )
r4   r
  rJ  r&   r3   r   r›  rÿ   r<  r   )r/   r  rc  rŒ  r0   rˆ  rÎ   rk   r·  rt  rw  r�   rh  rŠ  re   r1   r1   r2   Útest_ptsvx_error_raise_errors]  s   (  $rŽ  c                 C   r  r€  r�  r‚  r1   r1   r2   rƒ  |  r„  c                 C   r…  r†  r1   r‚  r1   r1   r2   rƒ  ~  r‡  c                 C   sr  t j d¡}td| d�}d}t|f||ƒd }t|d f| |ƒ}t  |¡t  |d¡ t  t  |¡d¡ }	t|df| |d	�}
|	|
 }|||ƒ\}}}|d
kr�d|d< |||ƒ\}}}||||ƒ\}}}}}}}|dkrn||kspJ ‚t|f||ƒ}||||ƒ\}}}}}}}|dkrŒ||ksŽJ ‚d S |||ƒ\}}}d|d< d|d< |||||||d�\}}}}}}}|dks·J ‚d S )Nr  rˆ  r¬   rP   rO   rL   r{   rM   rG  r?  r   rN   r‰  )r4   r
  rJ  r&   r3   r   r›  )r/   r  rc  rŒ  r0   rˆ  rÎ   rk   r·  rt  rw  r�   rh  rŠ  re   r†   rç  rx  ry  r1   r1   r2   Útest_ptsvx_non_SPD_singularx  s0   (
ÿr�  zd,e,b,xc                 C   s6   t d|jd�}|| ||ƒ\}}}}}	}
}t||ƒ d S )Nrˆ  r¬   r}  )rk   r·  r�   r†   rˆ  rh  rŠ  Úx_ptsvxrç  rx  ry  re   r1   r1   r2   Útest_ptsvx_NAG¤  s   r‘  r  c                    s   t j d¡}t  | ¡jd }d\‰ }tˆ ˆ g| |d�}tˆ |g| |d�}| ¡ j| t jˆ | d�| dƒ  }|rO‡ 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  )rp   rO   rG  r¬   r´   c                    s    g | ]}t |ˆ ƒD ]}|‘q	qS r1   ©r#  ©r@  Úyr†   rD  r1   r2   rA  Î  ó     z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>c                    s    g | ]}t |ˆ ƒD ]}|‘q	qS r1   r’  r“  rD  r1   r2   rA  Ï  r•  c                 S   s   g | ]}t |ƒD ]}|‘qqS r1   r’  r“  r1   r1   r2   rA  Ñ  s    rL   c                 S   s"   g | ]}t |ƒD ]}|d  ‘qqS r¬  r’  r“  r1   r1   r2   rA  Ò  s   " )ÚppsvÚpptrfÚpptrsÚpptriÚppconr£  r¤  rÄ  r   r;  )rx  r  râ  )r4   r
  rJ  rÊ   rË   r3   r›  rs   r
   r#  r&   r   r   r   r   r   rr  r   r   r•   rã  )r/   r  r0   r  rÏ   r]   r�   r2  Úapr–  r—  r˜  r™  rš  Úulre   ÚaulÚuliÚaulir†   ÚbxÚxvrx  rç  r1   rD  r2   Ú!test_pptrs_pptri_pptrf_ppsv_ppconÂ  sL   $ÿÿý





,r¢  c                 C   s6  t j d¡}t  | ¡jd }d}t||g| |d�}td| d�\}}|dd„ |d	d
�}t|d dƒ |d }|d }	|d }
| tv rLt	|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  rp   rG  )ÚgeesÚtrexcr¬   c                 S   ó   d S rû  r1   ©r†   r1   r1   r2   rƒ  ü  r‡  z!test_gees_trexc.<locals>.<lambda>Fr’  r{   r   r4  r  r;  rR   rL   rý   r‰   ©r4   r
  rJ  rÊ   rË   r3   r&   r   r,   r   r   r›  rs   )r/   r0   r  rÎ   r]   r£  r¤  rÙ  r[  r  Úd2r1   r1   r2   Útest_gees_trexcò  s*   r©  zt, expect, ifst, ilst)r~  g)\�Âõ(¼¿ç{®Gáz„?g¸…ëQ¸ž?)r²  çš™™™™™¹¿rÌ  çffffffÖ?)r²  gÍÌÌÌÌÌä¿r«  gš™™™™™É?)r²  r²  r²  r«  )r«  çôlV}®ä¿gVŸ«­Ø_¶?gî|?5^ºÉ?)g»¸�ðÐ?r«  gÐÕVì/»·?g;ßO�—nÖ?)r²  r²  r~  ggÕçj+ö‡¿)ù      À      Ày
×£p=
×?
×£p=
×¿yR¸…ëQÈ¿¸…ëQ¸Þ?y)\�Âõ(ì?      Ð¿)rŠ  ù      À       @y¸…ëQ¸ž¿
×£p=
ç¿yq=
×£pÍ¿¤p=
×£À?)rŠ  rŠ  ù       @      ð¿y®Gázî?ö(\�Âõà?)rŠ  rŠ  rŠ  ù      @      À)r¯  y¡ø1æ®%Ä¿³q¬‹Ûæ?yësµûËÆ??ÆÜµ„|È¿yHáz®GÙ??ÆÜµØ?)rŠ  r°  y«ÏÕVì/ñ?ö—Ý“‡…Â?yj¼t“Ð?vàœ¥½Õ¿)rŠ  rŠ  r±  yB>èÙ¬úÌ?=›UŸ«­ì?)rŠ  rŠ  rŠ  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   )Úwantqr{   r‰  N)r&   r/   r   r   )r[  ÚifstÚilstÚexpectr  r¤  rÙ  r1   r1   r2   Útest_trexc_NAG  s   r¶  c                 C   s  t j 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 rvt	|	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 rÎt	|	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  rp   rG  )ÚggesÚtgexcr¬   c                 S   r¥  rû  r1   r¦  r1   r1   r2   rƒ  J  r‡  z!test_gges_tgexc.<locals>.<lambda>F©r  Úoverwrite_br{   r   rL   r‰  r4  r‰   r  r;  rR   rM   rN   r«  r§  )r/   r0   r  rÎ   r]   r�   r·  r¸  rÙ  rá   r[  r]  r  Úd1r¨  r1   r1   r2   Útest_gges_tgexc?  s@    r¼  c                 C   sx  t j d¡}t  | ¡jd }d}t||g| |d�}td| d�\}}}|dd„ |d	d
�}t|d dƒ |d }	|d }
|	d }| tv rMt	|	t  
|	¡d|d� t	|
|	 |
 ¡ j |d|d� t  |¡}d|d< t|||	ƒ}| tv rx|||	|
|d�}n|||	|
||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  rp   rG  )r£  ÚtrsenÚtrsen_lworkr¬   c                 S   r¥  rû  r1   r¦  r1   r1   r2   rƒ  z  r‡  z!test_gees_trsen.<locals>.<lambda>Fr’  r{   r   r4  r  r;  rL   rQ   r­   ©r®   Úliworkr‰   ©r4   r
  rJ  rÊ   rË   r3   r&   r   r,   r   r   r›  rs   r   r!   )r/   r0   r  rÎ   r]   r£  r½  r¾  rÙ  r[  r  r¨  Úselectr®   r1   r1   r2   Útest_gees_trseno  s8   ÿ
rÃ  z*t, q, expect, select, expect_s, expect_sep)g/Ý$�•é?g“©‚QI½¿gú~j¼t“x?gŒJê4¡?)r²  ç5ï8EGr¹¿gGrùé·Ï?gyX¨5Í;Ö?)r²  gÉå?¤ß¾ä¿rÄ  gtµûËîÉ?)r²  r²  r²  gµ¦yÇ¹¿)gØ�sF”öä?g_˜LŒº?g®GázÖ?gUÁ¨¤N@å?)goð…ÉTÁà?g¾0™*•â¿g»'µ¦ã¿gz6«>W»¿)g¸¯çŒ(á¿g&äƒžÍªÓ¿gbX9´ÈÒ¿g-!ôlVç?)g·bÙ=y¸?gÛŠýe÷äç?r­  gï8EGrù¿?)r¬  gÍÌÌÌÌÌÜ?gìQ¸…ëÁ¿gÃõ(\�ÂÅ¿)g
×£p=
·?gìQ¸…ë±?r´  r¬  )g)\�Âõ(Ü¿g…ëQ¸Õ¿g¸…ëQ¸ž¿gÃõ(\�ÂÅ?)rÌ  g{®GázÔ¿g¤p=
×£À¿g)\�Âõ(¼?)rL   r   r   rL   g      ü?gÃõ(\�Â	@)yq¬‹Ûh ÀäÉåÿÀyfˆc]ÜF×?õ¹ÚŠýe×¿yªñÒMbÈ¿Â&S£Þ?yé&1¬ì?äÉå?Ð¿)rŠ  y      À?5^ºI @y�äòÒoŸ¿¾0™*ç¿yZd;ßOÍ¿‘~û:pÎÀ?)rŠ  rŠ  yx$(þ@4€·@‚âï¿yÀ[ Añí?¥½Á&á?)rŠ  rŠ  rŠ  y?ÆÜµ@�St$—ÿÀ)y?ÆÜµê¿½R–!ŽuÁ¿y2U0*©°¿ëâ6À[Ø?yV-²Ñ?Ù=yX¨µ¿y†8ÖÅm4°?¡ø1æ®%Ì¿)y�St$—ÿ°?­ú\mÅþÒ¿yƒÀÊ¡EÎ?øSã¥›Äà?y‘~û:pÎâ¿	ŠcîÚ¿yÇK7‰A`µ?À[ AñË?)yû:pÎˆ¢¿ú~j¼t“Ô¿yÌH¿}Ô?Á9#J{ƒá¿y’ËH¿}­?	ŠcîZâ¿yÔ+eâXw?à-� øÙ¿)y"ýöuàœ�?	ŠcîÒ?y?ÆÜÕ¿©¤N@a³¿yR¸…ëQÈ¿{®GázÄ¿yh"lxz¥ê?EGrùéÇ¿)y4¢´7øÂÀÓÞà“)ÀyS–!ŽuqÀF%uš@yµ¦yÇÕ¿Gx$(ð?y3Ä±.n£ô?°rh‘í|ë¿)yvàœ¥½Õ?¦
F%uø¿yÃdª`TRø?I�€&Â†Û¿yÁ¨¤N@þ?ö—Ý“‡…Ày4€·@‚â
@	ž^)Ëä?)y³êsµ{
@ Òo_ÎÀy§èH.ÿ@|ò°Pkš@yí¾0™*ì?*:’ËHñ¿y]mÅþ²{ä?®Gáz®÷¿)y)í¾0™ñ¿[±¿ìž<ê?yI.ÿ!ýöü?¦›Ä °rù¿yq¬‹Ûh 
@õÛ×�sFõ?y�1w-!ù?Üh o�„ÀgR¸…ëQð?g²�ï§ÆKÇ?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­   rL   r¿  r{   r   rO   rP   rQ   r‰  N)r&   r/   r!   r,   r   r   r›  rs   )r[  r]  rÂ  rµ  Úexpect_sÚ
expect_sepr  Úatol2r½  r¾  r®   rÙ  rá   Úsepr1   r1   r2   Útest_trsen_NAG�  s(   0
ÿ


rÉ  c                 C   sL  t j 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 rwt	|
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 rêt	|
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  rp   rG  )r·  ÚtgsenÚtgsen_lworkr¬   c                 S   r¥  rû  r1   r¦  r1   r1   r2   rƒ  ô  r‡  z!test_gges_tgsen.<locals>.<lambda>Fr¹  r{   r   rL   r‰  r4  r‰   r  r;  rQ   r­   iùÿÿÿrÖ  r«  rÁ  )r/   r0   r  rÎ   r]   r�   r·  rÊ  rË  rÙ  rá   r[  r]  r  r»  r¨  rÂ  r®   r1   r1   r2   Útest_gges_tgsenè  sL   ÿ
 rÌ  za, b, c, d, e, f, rans, lans)r³   r±   r±   r²   )r²  r  r³   r±   )r²  r±   r  r±   )r²  r²  r²  g      @)r±   r±   r±   r±   )r²  r²  r²  r³   )ç      Àrµ   r±   g      (@)g      "Àr²   ç       ÀrÎ  )rÍ  r²   rÎ  r¶   )ç      Àrµ   rÕ  g      3@)r²   r±   r±   r  )r²  r±   r²   r±   )r²  r²  r±   r±   )r²  r²  r²  r²   )r±   r±   r±   r²   )r²  r±   r³   r±   )r²  r²  r²  r±   )rÏ  r´   r²  rµ   )rÐ  r±   g       Àr²  )rÔ  r²   ç      Àr´   )rÐ  r²   r²  r´   )rÔ  r²   rÔ  rÔ  )rÔ  r±   r  r±   )rÔ  r±   rÔ  r³   )r³   rÔ  r±   rÔ  )r±   r  rÔ  r±   )rÔ  r±   r²   rÔ  )r±   rÔ  r±   r±   c	                 C   s–   d}	t d|d�}
|
| |||||ƒ\}}}}}t|dƒ t|ddt |¡jd dd� t|d	dt |¡jd d
d� t|||	dd� t|||	dd� d S )Nró  Útgsylr¬   r   r±   r  zSCALE must be 1.0©r¾   r  rí  r²  zDIF must be nearly 0zSolution for R is incorrect)r  rí  zSolution for L is incorrect)r&   r   r   r4   rÊ   rË   )r]   r�   r‚   rk   r·  r`   ÚransÚlansr/   r  rÑ  ÚroutÚloutrX   Údifre   r1   r1   r2   Útest_tgsyl_NAG!  s    $
ÿÿÿ
ÿrØ  rƒ   )r?  rs   Úijob)r   rL   rM   rN   rO   c              
   C   s  | t jkrdnd}t j d¡}d\}}t| dd||g¡ | ¡| dd||g¡ | ¡dd�^}}}	t| dd||g¡ | ¡| dd||g¡ | ¡dd�^}
}}	| d	d
||g¡ | ¡}| d	d
||g¡ | ¡}td| d�}|||
||||||d�\}}}}}|dks†J dƒ‚|dksŽJ dƒ‚|dkr¢t|ddt  	| ¡j
d dd� n|dksªJ dƒ‚|d
k�r
|dkrÌ|| ||
  }|| }|| ||  }|| }n*|dkröt  |¡| t  |¡|  }|| }|t  |
¡ |t  |¡  }d| | }t|||ddd� t|||ddd� d S d S )Ngü©ñÒMbP?g»½×Ùß|Û=l   OElÔt/ rõ  iöÿÿÿrp   rÝ   )Úoutputrý   rM   rÑ  r¬   )rƒ   rÙ  r   zINFO is non-zeror²  zSCALE must be non-negativer  zDIF must be 0 for ijob =0rÒ  zDIF must be non-negativer?  rs   rÔ  zlhs1 and rhs1 do not match)r  r¾   rí  zlhs2 and rhs2 do not match)r4   r¦  r
  rl  r    Úuniformr-   r&   r   rÊ   rË   r\  )r/   rƒ   rÙ  r  r0   rÍ   rÎ   r]   rk   r<   r�   r·  r‚   r`   rÑ  rÕ  rÖ  rX   r×  re   Úlhs1Úrhs1Úlhs2Úrhs2r1   r1   r2   Ú
test_tgsylU  sT   þþÿÿ


ÿ

ÿòrà  ÚmtyperÃ  c                 C   sN  | dkr|t v rt d¡ tj d¡}d\}}|tv r1|j||fd�|j||fd�d   |¡}n|j||fd� |¡}| dkrE||j	 n|| 
¡ j	 }|j||fd� |¡}| › d�| › d	�| › d
�f}t||d�\}	}
}|
||d�}|	||d�\}}}|dksƒJ ‚||||d�\}}|dks’J ‚t |¡j}t|| |d| | d� d S )Nr2  zhetrs not for real dtypes.l   *Mö/t|0 )r©   rP   r  r+   r1  rO  rP  Útrsr¬   rÄ  r­   r   )r]   rá  r�   r  r‰  )rÉ   r>   r?   r4   r
  rl  r,   rÛ  r-   rs   r›  r&   rÊ   rË   r   )rá  r/   r  r0   rÎ   rÏ   rt  r�   rF   rO  rP  râ  r®   ræ  rá  re   r†   rË   r1   r1   r2   Útest_sy_hetrsˆ  s$   
, rã  rˆ   z
uplo, m, n))rB  rP   rp   )rB  rp   rp   )r6  rp   rP   )r6  rp   rp   c                 C   sž   t j d¡}|j||fd� |¡}td|fƒ\}}	|| |||d�}
|dkr*t  |¡nt  |¡}|dkrAt  t||ƒ¡}d|||f< |	| |ƒ}t	|
|dd� d S )	Nl   8#ìqà9í
r  )ÚlantrrŠ   )r9  r   rB  rL   g�íµ ÷ÆÀ>r½   )
r4   r
  rl  r-   r&   r   r   r³  rN  r   )r   r9  rÍ   rÎ   r   r/   r0   rt  rä  rŠ   r0  r/  r™   r1   r1   r2   Ú
test_lantr¢  s   
rå  r  )šÚ	functoolsr   r
  Únumpy.testingr   r   r   r   r   r   r>   r	   rÿ   Únumpyr4   r
   r   r   r   r   r   r   r   Únumpy.randomr   r   r   Úscipy.linalgr   r6   r   r   r   r   r   r   r   r   r   r   r    Úscipy.linalg.lapackr!   Úscipy.statsr"   r#   Úscipy.sparseÚsparserK  Úscipy.__config__r$   ÚImportErrorr%   r5   r&   Úscipy.linalg.blasr'   r¦  r&  rÉ   rŽ  Ú
complex128r,   rÈ   Úblas_providerÚblas_versionr3   rI   rK   rž   r§   ra  rb  r÷   rú   r  r  r2  r{  r†  r“  r¡  r¨  r©  r¾  rÚ  rè  rï  rô  r  r  r  r-  r5  r:  r@  rD  rK  rT  rU  rt  rw  r  r‡  Úskipifr�  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>  rE  ra  rz  r{  r|  r~  r�  rŽ  r�  r‘  r¢  r©  r¶  r¼  rÃ  rÉ  rÌ  rØ  rà  rã  rB   rå  r1   r1   r1   r2   Ú<module>   sð   (8ÿÿ` t  #**DO1")::) %# ((-ÿ
e
#ûÿ

û
û
ýóÿ

[
ü
üó
ü
üîîÿ
+ÿ
/ÿ
ÿ
ÿÿú	ÿÿù÷
 ÿÿÿÿýüÿ
@.:0
0ÿÿû
üþ÷ùÿÿ

ÿýÿ4ÿ

ÿýÿÿ

ÿýÿ
%ÿÿü
ý
ýúúÿ.$ýýø	ýúô÷þ/-ýýýóúúúçòþ*!8ýýýýýýýýäþ"0