a
    ‡ù»jŒ ã                   @   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'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 e3�y   dZ2Y n0 zd dlm4Z5 W n e3�y>   dZ5Y n0 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(ƒZMd)d*„ ZNd+d,„ ZOd-d.„ ZPd/d0„ ZQG d1d2„ d2ƒZRG d3d4„ d4ƒZSd5d6„ ZTd7d8„ ZUd9d:„ ZVd;d<„ ZWd=d>„ ZXd?d@„ ZYdAdB„ ZZdCdD„ Z[dEdF„ Z\dGdH„ Z]dIdJ„ Z^dKdL„ Z_dMdN„ Z`dOdP„ ZaG dQdR„ dRƒZbdSdT„ ZcdUdV„ ZddWdX„ ZedYdZ„ Zfe
jGjgd[d\d]�d^d_„ ƒZhd`da„ Zie
jG Hdbdcddg¡e
jG Hde;¡e
jG Hdeejdfƒ¡e
jG Hdgejdhƒ¡e
jG Hdiejdhƒ¡e
jG Hdjd dkg¡e
jG Hdld dkg¡�d•dmdn„ƒƒƒƒƒƒƒZke
jG Hde;¡dodp„ ƒZle
jG Hdqdedridgdrididridjdridsdridldrif¡dtdu„ ƒZme
jG Hdve ng dw¢g dx¢g dy¢g dz¢g d{¢g d|¢g¡e ng d}¢¡e ng d~¢g d¢g d€¢g d�¢g d‚¢g dƒ¢g¡e ng d„¢g d…¢g d†¢g d‡¢g¡fg¡dˆd‰„ ƒZoe
jG Hde?¡dŠd‹„ ƒZpe
jG HdŒe ng d�¢¡e ng dŽ¢¡e ng d�¢¡e ng d�¢¡e ng d‘¢¡e ng d’¢¡e ng d“¢¡e nd”d•gd–d—gd˜d™gdšd›gd”dœgg¡e nd�džgdŸd�gd d¡gd�d¢gd¡dkgg¡f	e ng d£¢¡e ng d¤¢¡e ng d¥¢¡e ng d¦¢¡e ng d§¢¡e ng d¨¢¡e ng d“¢¡e nd©dªgd«d¬gd­d®gd¯d°gd±d²gg¡e nd³d´gdµd¶gd·d¸gd¹dºgd»d¼gg¡f	g¡d½d¾„ ƒZqe
jG Hde?¡e
jG Hdg d¿¢¡dÀdÁ„ ƒƒZre
jG HdÂese;e; e?ƒ¡dÃdÄ„ ƒZte
jG HdÂese;e; e?ƒ¡dÅdÆ„ ƒZue
jG HdÂese;e; e?ƒ¡dÇdÈ„ ƒZve
jG HdÉe ng dÊ¢¡e ng dË¢¡e ng dÌ¢¡e ng dÍ¢¡e ndfdÎgdrdhgdÏdrgdÐdÑgdŸdÒgg¡e ndÓdÏgdÏdÔgdkd¡gdÔdfgd dÕgg¡fe ng dÖ¢¡e ng d×¢¡e ng dØ¢¡e ng dÙ¢¡e ndÚdÛgdÜdÝgdÞdßgdàdágg¡e ndºdâgd³d³gdãdãgd»dºgg¡fg¡dädå„ ƒZwdædç„ Zxe
jG Hdèese?e;e; ƒ¡e
jG Hdéejd ƒ¡dêdë„ ƒƒZye
jG Hdèese?e;e; ƒ¡e
jG Hdéejd ƒ¡dìdí„ ƒƒZze
jG Hdèese?e;e; ƒ¡e
jG Hdéejd ƒ¡dîdï„ ƒƒZ{e
jG Hdèese?e;e; ƒ¡e
jG Hdéejd ƒ¡dðdñ„ ƒƒZ|e
jG HdòdÏe ng dó¢¡e ng dô¢¡e ng dõ¢¡e ng dö¢g d÷¢g dø¢g dù¢g¡fg¡dúdû„ ƒZ}e
jG Hde?¡e
jG Hdü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d[g¡e
jG H�d�d�dg¡�d�d„ ƒƒƒZ„e
jG Hde?¡e
jG H�dd dkg¡e
jG H�d�d�dg¡�d�d„ ƒƒƒZ…e
jG Hde?dÏ ¡e
jG H�d�dd[g¡e
jG H�d�d�dg¡�d�d„ ƒƒƒZ†e
jG H�de ng d�¢¡e ng dŽ¢¡e ng d�¢¡e nd”d•gd–d—gd˜d™gdšd›gd”dœgg¡e nd�džgdŸd�gd d¡gd�d¢gd¡dkgg¡fe ng d£¢¡e ng d¤¢¡e ng d¥¢¡e nd©dªgd«d¬gd­d®gd¯d°gd±d²gg¡e nd³d´gdµd¶gd·d¸gd¹dºgd»d¼gg¡fg¡�d �d!„ ƒZ‡e
jG Hdèese?e;e; ƒ¡e
jG H�d"�d�d#�d$„ f�d�d%�d$„ fg¡�d&�d'„ ƒƒZˆe
jG Hdèese?e;e; ƒ¡e
jG H�d"�d�d(�d$„ f�d�d)�d$„ fg¡�d*�d+„ ƒƒZ‰e
jG Hdèese?e;e; ƒ¡e
jG H�d"�d�d,�d$„ f�d�d-�d$„ fg¡�d.�d/„ ƒƒZŠe
jG H�d0e ng dÊ¢¡e ng dË¢¡e ndfdÎgdrdhgdÏdrgdÐdÑgdŸdÒgg¡e ndÓdÏgdÏdÔgdkd¡gdÔdfgd dÕgg¡fe ng dÖ¢¡e ng d×¢¡e ndÚdÛgdÜdÝgdÞdßgdàdágg¡e ndºdâgd³d³gdãdãgd»dºgg¡fg¡�d1�d2„ ƒZ‹e
jG H�d3�dd[g¡e
jG Hde?¡�d4�d5„ ƒƒZŒe
jG Hde?¡�d6�d7„ ƒZ�e
jG H�d8e ng �d9¢g �d:¢g �d;¢g �d<¢g¡e ng �d=¢g �d>¢g �d?¢g �d<¢g¡dÏdkfe ng �d@¢g �dA¢g �dB¢g �dC¢g¡e ng �dD¢g �dE¢g �dF¢g �dG¢g¡dkdhfg¡�dH�dI„ ƒZŽe
jG Hde?¡�dJ�dK„ ƒZ�e
jG Hde?¡�dL�dM„ ƒZ�e
jG H�dNe ng �dO¢g �dP¢g �dQ¢g �dR¢g¡e ng �dS¢g �dT¢g �dU¢g �dV¢g¡e ng �dW¢g �dX¢g �dY¢g �dZ¢g¡e ng �d[¢¡�d\�d]fe ng �d^¢g �d_¢g �d`¢g �da¢g¡e ng �db¢g �dc¢g �dd¢g �de¢g¡e ng �df¢g �dg¢g �dh¢g �di¢g¡e ng �d[¢¡�dj�dkfg¡�dl�dm„ ƒZ‘e
jG Hde?¡�dn�do„ ƒZ’e
jG H�dpe ng �dq¢g �dr¢g �ds¢g �dt¢g¡e ng �du¢g �dr¢g �ds¢g �dv¢g¡e ng �dw¢g �dx¢g �dy¢g �dz¢g¡e ng �d{¢g �d|¢g �d}¢g �d~¢g¡e ng �d¢g �d€¢g �d}¢g �d�¢g¡e ng �d‚¢g �dƒ¢g �d„¢g �d…¢g¡e ng �du¢g �d†¢g �d‡¢g �dˆ¢g¡e ng �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”dS (–  é    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Úqz)Ú_compute_lwork)Úortho_groupÚunitary_group)ÚCONFIG)Ú_clapack)Úget_lapack_funcs)Úget_blas_funcszBuild DependenciesZblasÚnameÚversionc                 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© r1   úDE:\soccer\ml_env\Lib\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¡s8||vr8|| vr8| 	|¡ q8|g ksrJ dƒ‚dS )z%Test that all entries are in the doc.Nzlapack.__doc__ is None>   Z	HAS_ILP64Zfind_best_lapack_typeÚprint_functionÚabsolute_importÚdivisionÚflapackÚclapackÚ_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   Ú__doc__ÚpytestÚskipÚsetÚsplitÚlistÚdirÚ
startswithÚappend)ÚnamesZignore_listÚmissingr(   r1   r1   r2   Útest_lapack_documented9   s    

ÿrE   c                   @   s,   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 ]¤}t t|d	 d ƒ}|d u rTq6||ƒ\}}}}}	t|	 t|	ƒƒ t||ƒ t||fd
t|d
 ƒd fƒ t|t t|ƒ¡ƒ ||ddd�\}}}}}	t|	 t|	ƒƒ q6d S )N)é   é   é   )é   é   é   )é   é   é	   )rG   r   r   ga2U0*©3?)rJ   r   r   gü©ñÒMb`?)rM   rG   r   r   )r   rG   r   r   ZsdzcZgebalr   rG   )ZpermuteÚscale)	Úgetattrr7   r   Úreprr   r   Úlenr,   r   )
ÚselfÚaÚa1ÚpÚfÚbaÚloÚhiZpivscaleÚinfor1   r1   r2   Ú
test_gebalL   s"    ý
zTestFlapackSimple.test_gebalc                 C   s\   g d¢g d¢g d¢g}dD ]<}t t|d d ƒ}|d u r8q||ƒ\}}}t| t|ƒƒ qd S )N©ikÿÿÿiÎÿÿÿifÿÿÿ©i  é´   i"  ©iåÿÿÿi÷ÿÿÿiçÿÿÿÚdZgehrd)rQ   r7   r   rR   )rT   rU   rW   rX   ÚhtÚtaur\   r1   r1   r2   Ú
test_gehrda   s    þzTestFlapackSimple.test_gehrdc                 C   s\  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ƒ\}	| ¡ rœ|d  d7  < d}|	|||ƒ\}
}}tt  ||
¡t  |
|¡ || ƒ |	|||||d�\}
}}tt  | ¡ j|
¡t  |
| ¡ j¡ || dd� |	|||dd�\}
}}tt  ||
¡t  |
|¡ || dd� qJd S )NrG   rH   r   rJ   rK   rL   rN   rO   é
   é   é   ÚTÚfdFD)Útrsylr*   ÚC)ZtranaZtranb©Údecimaléÿÿÿÿ)Zisgn)	r,   Úarrayr.   r&   Úisupperr   ÚdotÚ	conjugateri   )rT   rU   ÚbÚcÚtransr0   rV   Úb1Úc1rk   ÚxrP   r\   r1   r1   r2   Ú
test_trsyll   s.    
"ÿ"þÿzTestFlapackSimple.test_trsylc           	      C   s  t  g d¢g d¢g d¢g¡}dD ]ø}dD ]î}| |¡}| ¡ rN|d  d7  < td|fƒ\}|||ƒ}|d	v rª|d
v r|d}nd}t  t  t  t  |¡¡¡¡}t	|||ƒ q(|dv rÄt  
t  |¡¡}nH|dv rèt  
t jt  |¡dd�¡}n$|dv �rt  
t jt  |¡dd�¡}t||ƒ q(q d S )Nr^   r_   ra   rj   ZMm1OoIiFfEe©r   r   r*   )ÚlangeZFfEeZFfrI   rM   ZMmZ1Oor   ©ZaxisZIirG   )r,   rp   r.   rq   r&   ÚsqrtÚsumZsquareÚabsr   Úmaxr   )	rT   rU   r0   Znorm_strrV   r|   Úvaluern   Úrefr1   r1   r2   Ú
test_langeˆ   s2    ý


zTestFlapackSimple.test_langeN)Ú__name__Ú
__module__Ú__qualname__r]   re   rz   r„   r1   r1   r1   r2   rF   J   s   rF   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
TestLapackc                 C   s   t tdƒr
d S ©NZempty_module)Úhasattrr7   ©rT   r1   r1   r2   Útest_flapack¬   s    
zTestLapack.test_flapackc                 C   s   t tdƒr
d S r‰   )rŠ   r8   r‹   r1   r1   r2   Útest_clapack±   s    
zTestLapack.test_clapackN)r…   r†   r‡   rŒ   r�   r1   r1   r1   r2   rˆ   ª   s   rˆ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestLeastSquaresSolversc                 C   sz  t dƒ ttƒD ]–\}}d}d}d}t||ƒ |¡}t|ƒ |¡}td|d�\}}	t|	|||ƒ}
||||
d�\}}}t|dkƒ |||d	| |
d
�\}}}t|dkƒ 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}t||||ƒ}
||||
d�\}}}t|d d… t	j
ddg|d�dt	 |¡j d� ||ƒ\}}}}t||ƒ 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}t||||ƒ}
||||
d�\}}}t|d d… t	j
dd g|d�dt	 |¡j d� ||ƒ\}}}}t||ƒ �q’d S )!NéÒ  rf   é   rG   )ÚgelsÚ
gels_lwork©r0   ©Úlworkr   ZTTCC©rv   r•   ç      ð?ç       @ç      @ç      @ç      @ç       @©ç      0@g      1@g      4@)r‘   r’   ÚgeqrfrH   ro   ç¥ªªªªª,Àçûÿÿÿÿÿ-@é   ©Úrtolù      ð?      @ù      @      à?ù      @      Àù      @       Àù       @ffffffæ?©rž   y      1@       @y      4@      ÀùR úŠ–ò?¤îð\Îjþ¿ùµò£�,Æû?§ÿ² Wø?)r   Ú	enumerateÚDTYPESr   r.   r&   r!   r   ÚREAL_DTYPESr,   rp   r/   rS   r   ÚfinfoÚepsr   r+   )rT   Úindr0   ÚmÚnÚnrhsrV   rw   ZglsZglslwr•   r9   r\   r‘   r’   rŸ   Zlqrry   Z	lqr_truthr1   r1   r2   Ú	test_gels¹   s„    
þþÿ

ÿþý
þþÿ

ÿþýz!TestLeastSquaresSolvers.test_gelsc              
   C   s8  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rr|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_lworkrH   rG   ro   Fr    r¡   r¢   r£   çYNô))1)@ç*@ƒž.«â?r¥   r¦   r§   r¨   r©   rª   r«   r¬   çU‹¯ý.*@çãÊ_ÅY@©r¯   r,   rp   r&   r/   rS   ÚintÚrealr   r°   r±   r+   )rT   r0   rV   rw   r·   r¸   r³   r´   rµ   ÚworkÚiworkr\   r•   Z
iwork_sizery   ÚsÚrankZrworkZ
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rr|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_lworkrH   rG   ro   Fr    r¡   r¢   r£   r¹   rº   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r»   r¼   r½   )rT   r0   rV   rw   rÅ   rÆ   r³   r´   rµ   rÀ   r\   r•   Úvry   rÂ   rÃ   r1   r1   r2   Ú
test_gelss9  s‚    

þþÿ
ÿþý
ÿÿþ

þþÿ
ÿþü
ÿÿþz"TestLeastSquaresSolvers.test_gelssc              	   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rr|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Æ   rH   rG   rf   Fro   r    r¡   r¢   r£   r¥   r¦   r§   r¨   r©   rª   r«   r¬   )r¯   r,   rp   r&   r/   rS   r°   r±   r¾   r¿   r   Zint32r   r+   )rT   r0   rV   rw   rÉ   Zgelsy_lworkr³   r´   rµ   rÀ   r\   r•   ZjptvrÇ   ry   ÚjrÃ   r1   r1   r2   Ú
test_gelsyr  sr    

þþÿ
ÿÿþý

þþÿ
ÿÿþüz"TestLeastSquaresSolvers.test_gelsyN)r…   r†   r‡   r¶   rÄ   rÈ   rË   r1   r1   r1   r2   rŽ   ·   s   D<9rŽ   r0   r/   )©rI   rJ   )rK   rH   ©é   rÎ   c                 C   s2   t d| d�}|\}}|||d�\}}t|dƒ d S )NÚgeqrf_lworkr“   ©r³   r´   r   ©r&   r   )r0   r/   rÏ   r³   r´   r•   r\   r1   r1   r2   Útest_geqrf_lworkª  s    rÒ   c                   @   s   e Zd Zdd„ ZdS )ÚTestRegressionc           
      C   sÞ   t D ]Ô}tjd|d�}tdg|gƒ\}tt||dd� ||ƒ\}}}}|tv r�tdg|gƒ\}tt||dd … |dd� ||dd … |dd� q|tv rtd	g|gƒ\}	tt|	|dd … |dd� |	|dd … |dd� qd S )
N)i,  rH   r“   ÚgerqfrH   r”   ÚorgrqéþÿÿÿrG   Úungrq)r®   r,   r   r&   Úassert_raisesÚ	Exceptionr¯   r+   )
rT   r0   rU   rÔ   Zrqrd   rÀ   r\   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                   @   s   e Zd Zdd„ ZdS )Ú	TestDpotrc           
      C   s¨   dD ]ž}dD ]”}t j d¡ t jjdd�}| |j¡}td|fƒ\}}||||d�\}}|||ƒd }	|r†tt  |	¡t  t	|ƒ¡ƒ qtt  
|	¡t  
t	|ƒ¡ƒ qqd S )N)TFé*   )rI   rI   )Úsize)ÚpotrfZpotri)Úcleanr   )r,   r-   r   Únormalrr   ri   r&   r   r   r   r   )
rT   Úlowerrß   ry   rU   ZdpotrfZdpotriru   r\   Zdptr1   r1   r2   Útest_gh_2691É  s    zTestDpotr.test_gh_2691N)r…   r†   r‡   râ   r1   r1   r1   r2   rÛ   È  s   rÛ   c                   @   s   e Zd Zdd„ ZdS )Ú
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 ]4}
||
||ƒ}|	 |d ¡ t|d
 dkd|
 ƒ qØt  |	¡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   ro   rG   F)Úfull_matricesÚ
compute_uvÚoverwrite_aZcheck_finite©r   Úlasd4rI   zcLAPACK root finding dlasd4 failed to find                                     the singular value %izThere are NaN rootséd   ©Úatolr¤   )r,   rp   ÚhstackZvstackÚdiagr   rS   Znewaxisr   Úconcatenater   r&   ÚrangerB   r   ÚanyÚisnanr   r°   Úfloat64r±   )rT   ZsigmasZm_vecÚMZSMZit_lenZsgmZmvcrê   ÚrootsÚiÚresr1   r1   r2   Útest_sing_val_updateÝ  s4    ÿþ
ÿ*ÿÿzTestDlasd4.test_sing_val_updateN)r…   r†   r‡   rù   r1   r1   r1   r2   rã   Ü  s   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 )Ú	TestTbtrsr0   c                 C   s2  |t v rpt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�}n†|tv ræt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Àrû   g�Âõ(\�+Àg×£p=
—0Àg333333*@gÃõ(\�ÂÀgHáz®G,ÀgìQ¸…ë#ÀrJ   rG   ro   éýÿÿÿrI   rH   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©Úabrt   Úuplor   çñhãˆµøä>©r¤   rí   N)r¯   r,   rp   r+   Ú
ValueErrorr&   r   r   )rT   r0   r   rt   Zx_outrý   ry   r\   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 ))ÚNri   rl   rl   )r¯   )Ú.0r0   rv   r1   r1   r2   Ú
<listcomp>-  s   
þzTestTbtrs.<listcomp>r  ÚUrþ   rï   r  c                    sz  t dƒ d\‰}}tdˆ d�}|dk}|| }	||	 }
t|	|
 d dƒ}‡fdd	„|D ƒ}‡ fd
d	„|D ƒ}|dkr†t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� nH|dk�rNt|j| |dd� n(|dk�rnt|j| |dd� ntdƒ‚d S )Ni¼  )rJ   rI   rH   rý   r“   r	  rG   ro   c                    s   g | ]}ˆ t |ƒ ‘qS r1   )r€   ©r  ry   ©r´   r1   r2   r  A  ó    z2TestTbtrs.test_random_matrices.<locals>.<listcomp>c                    s   g | ]}t |fˆ ƒ‘qS r1   )r3   )r  Úwidthr“   r1   r2   r  B  s   ÿZdia)Úformatr   )r   rt   r  rv   rï   r  g-Cëâ6
?r£   ri   rl   zInvalid trans argument)r   r&   rñ   r,   r   ÚspsZdiagsr   r­   Zdiagonalr�   Úminr3   r   r   ri   ÚHr  )rT   r0   rv   r  rï   rµ   Úkdrý   Zis_upperZkuÚklZband_offsetsZband_widthsZbandsrU   r   ÚrowÚkrt   ry   r\   r1   )r0   r´   r2   Útest_random_matrices,  s6    

ÿ(



zTestTbtrs.test_random_matriceszuplo,trans,diag)r	  r  ÚInvalid)r	  r  r  )r  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 exceptionsrý   r“   rJ   rH   N)r&   r,   rô   r   rØ   rÙ   )rT   r  rv   rï   rý   r   rt   r1   r1   r2   Ú&test_invalid_argument_raises_exception_  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“   rJ   rý   r   )ro   rI   r	  rÿ   N)r,   r   Úfloatr&   r   )rT   r   rt   rý   r9   r\   r1   r1   r2   Útest_zero_element_in_diagonall  s    z'TestTbtrs.test_zero_element_in_diagonalzldab,n,ldb,nrhs)rK   rK   r   rK   )rK   rK   rI   rK   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   r  r&   rØ   rÙ   )rT   Zldabr´   Zldbrµ   r   rt   rý   r1   r1   r2   Útest_invalid_matrix_shapes|  s    z$TestTbtrs.test_invalid_matrix_shapesN)r…   r†   r‡   r;   ÚmarkÚparametrizer®   r  r  r  r  r  r1   r1   r1   r2   rú   ü  s.   
-ÿÿ-þÿ
	þrú   c                  C   s¤   dD ]š} t d| d�}t d| ¡}t d| ¡}t |¡r>|d9 }|||ƒ\}}}t|dƒ t|dƒ t |¡r”t|d	ƒ tt|tƒƒ tt|tƒƒ qt|d
ƒ qd S )Nrj   Úlartgr“   rI   rJ   r*   ç333333ã?rš   y       €š™™™™™é¿çš™™™™™é?)	r&   r,   rp   Úiscomplexobjr   r   Ú
isinstanceÚcomplexr  )r0   r  rX   ÚgÚcsZ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 )Nrj   r   r!  rJ   rI   rf   rG   ÚfdÚrotr“   y       €      ð¿r*   y              @)rK   rK   rK   rK   )r   r   r   r   ©rí   rH   r  )rK   rK   rI   rI   r   )ÚoffxÚoffy)rI   rI   rK   rK   )Úincxr-  r´   )rK   rI   rK   rI   )r,  Úincyr´   )r,  r.  r-  r/  r´   )rI   rI   rK   rI   rÖ   )r.  r/  r´   )Zoverwrite_xZoverwrite_y)r,   Úfullr°   Ú	precisionr'   r&   r   r   )
r0   ru   rÂ   ÚurÇ   rí   r*  rX   rU   rt   r1   r1   r2   Útest_rotŸ  sV    
ÿÿ
ÿÿÿÿÿÿÿr3  c               	   C   s¾  t j d¡ t j d¡} | j | ¡} t j d¡dt j d¡  }|j ¡  |¡}dD �]b}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� qTd S )Nr�   )rJ   rJ   r*   rj   ÚlarfgÚlarfr“   ZFDr   rG   ©rG   r   rH   r{   r—   ÚR©Úsider  r+  )r,   r-   r   ri   rr   Úconjr&   Úcopyr/   r   rs   r   r   )Za0Za0jr0   r4  r5  rU   Úalphary   rd   ÚexpectedrÇ   r1   r1   r2   Útest_larfg_larfÉ  s*    

,>>r>  c                  C   s>   t dtjdd�} d}t| ||ddd�}|dks:|dks:J ‚d S )	NZgesdd_lworkÚ	preferred©r0   Zilp64iA%  T)rç   ræ   i`”Di€”D)r&   r,   Úfloat32r!   )Zsgesdd_lworkr´   r•   r1   r1   r2   Ú test_sgesdd_lwork_bug_workaroundó  s    ÿÿrB  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 )	Ú	TestSytrdr0   c                 C   s*   t jd|d�}td|fƒ}tt||ƒ d S )Nr{   r“   Úsytrd©r,   r   r&   rØ   r  )rT   r0   ÚArD  r1   r1   r2   Útest_sytrd_with_zero_dim_array  s    z(TestSytrd.test_sytrd_with_zero_dim_arrayr´   ©rG   rI   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 ]h}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“   )rD  Úsytrd_lworkrG   rH   r   ©rá   r•   rK   r—   rì   ç        r”   ro   )r,   r   r&   ÚarangeÚtriu_indices_fromr   r   r°   r±   rï   r   r/   r
   rñ   Úouterrr   r   ri   )rT   r0   r´   rF  rD  rI  r•   r\   Údatarb   Úerd   ri   r  Úk2ÚQr÷   rÇ   r  Úi_lowerZQTAQr1   r1   r2   Ú
test_sytrd  s@    
ÿÿ




$zTestSytrd.test_sytrdN)	r…   r†   r‡   r;   r  r  r¯   rG  rT  r1   r1   r1   r2   rC    s
   
rC  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   s*   t jd|d�}td|fƒ}tt||ƒ d S )Nr{   r“   ÚhetrdrE  )rT   rV  rF  rW  r1   r1   r2   Útest_hetrd_with_zero_dim_arrayT  s    z(TestHetrd.test_hetrd_with_zero_dim_arrayzreal_dtype,complex_dtyper´   rH  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ƒ qŒt	||ƒ}
||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 ]n}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“   )rW  Úhetrd_lworkrG   rH   r*   )r   rG   ©rá   r   rJ  rK   r—   rì   rK  r”   ro   rf   )r,   r   r&   rL  rM  Zfill_diagonalr¿   rï   r   r!   r   r°   r±   r   r/   r¾   r
   rñ   rN  r:  rr   r   ri   )rT   r´   Z
real_dtyperV  rF  rW  rY  ry   r9   r\   r•   rO  rb   rP  rd   ri   r  rQ  rR  r÷   rÇ   r  rS  ZQHAQr1   r1   r2   Ú
test_hetrd[  sR    
ÿ"ÿÿ




ÿÿzTestHetrd.test_hetrdN)r…   r†   r‡   r;   r  r  r+   rX  Úzipr¯   r[  r1   r1   r1   r2   rU  S  s   
ÿrU  c               
   C   sb  t tƒD �]R\} }td|d�\}}t|dddd�}| dk r’t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)ZgglseZgglse_lworkr“   rL   rJ   rH   )r³   r´   rW   )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Ó?rb  g
×£p=
À)g{®Gáz”¿ç{®Gázð?gáz®Gáö¿ç      à?)g      ø¿r_  g®Gáz®ó?gHáz®Gá¿gáz®Gáú¿g=
×£p=ê?rK  )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—   rK  ç      ð¿rK  )rK  r—   rK  re  r”   )çÐ^"ƒ�Lß?ç¢\}éëï?rf  rg  )yàÜ!fñ?$_KÀ–dÿ¿y‰^g¿Åµç¿¸F€�Ö@yàÜ!fñ?}²Þ–dÿ¿y61ŸÅµç¿eðæ_�Ö@rm   )r­   r®   r&   r!   r,   rp   r   r   )r²   r0   ÚfuncÚ
func_lworkr•   rU   ru   rb   rt   r9   Úresultr=  r1   r1   r2   Ú
test_gglse¢  sL    ÿ

ûû
ûû
rk  c                  C   s   t dƒ ttt ƒD �]\} }d}| dk rXt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�   rf   rJ   Úsytrf_lworkr“   )ZsyconÚsytrfZhetrf_lwork)ZheconZhetrfr*   rH   rG   )r•   rá   )rU   ÚipivÚanormrá   ©rW   )r   r­   r®   r+   r&   r   r.   r:  ri   r,   r
   r   r!   r   r€   ÚlinalgÚcond)r²   r0   r´   ri  ZfunconZfunctrfrF  ro  r•   Úldurn  r9   Úrcondr1   r1   r2   Útest_sycon_heconÓ  s     $

ru  c                  C   sú   t dƒ ttƒD ]ä\} }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�   rf   )rÞ   ÚsygstÚsyevdÚsygvdr“   rH   r   giUMu?r£   )r   r­   r¯   r&   r   r.   ri   r,   r
   r   r   )r²   r0   r´   rÞ   rv  rw  rx  rF  ÚBÚeig_gvdr9   r\   rt   rU   Ú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�   rf   )rÞ   ÚhegstÚheevdÚhegvdr“   r*   rH   r   ç-Cëâ6?r£   )r   r­   r+   r&   r   r.   r:  ri   r,   r
   r   r   )r²   r0   r´   rÞ   r}  r~  r  rF  ry  rz  r9   r\   rt   rU   r{  r1   r1   r2   Ú
test_hegst  s&    þ$$$r�  c               	      sn  t dƒ d\} }ttƒD �]N\}}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�   ©rf   é   ©ÚtzrzfZtzrzf_lworkr“   rH   r*   r”   r   Nc              
      sD   g | ]<}ˆ ˆ| ˆ|gd d …f j  ˆ|gd d …f  ¡ ¡  ‘qS ©N©ri   rr   r:  r
  ©ZIdÚVrd   r1   r2   r  H  r  ztest_tzrzf.<locals>.<listcomp>rf   r—   rK  rì   )r   r­   r®   r&   r!   r   r   r.   rØ   rÙ   ri   r   r,   rî   r   r
   rñ   r   rr   r   r   Úspacingr¿   )r³   r´   r²   r0   r…  Útzrzf_lwr•   rF  Úrzr\   r7  rƒ   ÚZr1   rˆ  r2   Ú
test_tzrzf,  s*    ÿ
"0(ÿrŽ  c               	   C   sÊ  t dƒ ttƒD �]²\} }d}| dkrVtt||ƒt||ƒd  t|ƒ ƒ |¡}d}n tt||ƒt|ƒ ƒ |¡}d}td|d�\}}}||ƒ\}}	t|d	ƒ |¡}
|d
||
ƒ}t|t	| |
ƒ| d	 dkrÎd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�rhdndd� t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�   rG   r*   rl   ri   )ÚtrttfÚtfttrÚtfsmr“   rH   ro   r   rJ   rL   rm   ©rv   r—   r	  )rv   rï   rI   r7  )rv   rï   r9  N)r   r­   r®   r   r   r
   r.   r&   r   r   r:  ri   r,   rL  )r²   r0   r´   rF  rv   r�  r�  r‘  ÚAfpr9   ry  ÚsolnZB2r1   r1   r2   Ú	test_tfsmN  s>    *ÿÿÿÿÿr•  c               	      s€  t dƒ d\} }}ttƒD �]^\}}td|d�\}}t|| |ƒ}|dk r~tt| |ƒ |¡ƒ}t||ƒ |¡}	td|d�\}
}nPt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 �rVd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�   )rf   rƒ  rƒ  r„  r“   rH   )ZormrzZormrz_lworkr*   )ZunmrzZunmrz_lworkr”   Nc              
      sD   g | ]<}ˆ ˆ| ˆ|gd d …f j  ˆ|gd d …f  ¡ ¡  ‘qS r†  r‡  r
  rˆ  r1   r2   r  –  r  z$test_ormrz_unmrz.<locals>.<listcomp>ri   rl   rf   r—   r   rK  rì   r–   r7  )r9  r•   )r9  rv   r•   )r   r­   r®   r&   r!   r   r   r.   r,   rî   r
   rñ   r   rr   rŠ  r¿   r   r   r   r:  ri   )ZqmÚqnZcnr²   r0   r…  r‹  Zlwork_rzrF  rl   Zorun_mrzZorun_mrz_lwZ	lwork_mrzrŒ  r\   rƒ   rR  rv   ÚtolZcqr1   rˆ  r2   Útest_ormrz_unmrzw  sT    
ÿ
ÿ"ÿ
(ÿÿr˜  c               	   C   s   t dƒ ttƒD �]è\} }d}| dkrJt||ƒ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�   rG   r*   rl   ri   )r�  r�  r“   r   rþ   ©r  r	  )Útransrr  rH   Nro   ÚF)Úorder)r   r­   r®   r   r.   r&   r   r   r   r:  ri   r   r   Úreshape)r²   r0   r´   ÚA_fullr›  r�  r�  ZA_tf_Ur\   ZA_tf_LZA_tf_U_TZA_tf_L_TZA_tf_U_mZA_tf_L_mÚA_tr_UÚA_tr_LZA_tr_U_TZA_tr_L_Tr1   r1   r2   Útest_tfttr_trttf±  sV    ,F,Bÿÿr¢  c                  C   st  t dƒ ttƒD �]\\} }d}| dkrFt||ƒ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�   rG   r*   )ÚtrttpÚtpttrr“   r   rþ   rš  rH   N)r   r­   r®   r   r.   r&   r   r   r   r   ri   r   r   r   )r²   r0   r´   rŸ  r£  r¤  ZA_tp_Ur\   ZA_tp_LÚindsZA_tp_U_mZA_tp_L_mr   r¡  r1   r1   r2   Útest_tpttr_trttpë  s2     

r¦  c                  C   sâ   t dƒ ttƒD ]Ì\} }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�   rG   r*   )Úpftrfr�  r�  r“   r   N)r   r­   r®   r   r.   r:  ri   r
   r&   r   r   r   )r²   r0   r´   rF  r§  r�  r�  r“  r\   Z	Achol_rfpZA_chol_rr9   ZAcholr1   r1   r2   Ú
test_pftrf  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|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�   rG   r*   )Úpftrir§  r�  r�  r“   r   rH   rJ   rL   rm   N)r   r­   r®   r   r.   r:  ri   r
   r&   r   r   r   r   )r²   r0   r´   rF  r©  r§  r�  r�  r“  r\   Ú
A_chol_rfpZ	A_inv_rfpZA_inv_rr9   ZAinvr1   r1   r2   Ú
test_pftri/  s(    ü
ÿr«  c                  C   s`  t dƒ ttƒD �]H\} }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�rRd
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�   rG   r*   rI   r“   rH   )Úpftrsr§  r�  r�  r   rJ   rL   rm   N)r   r­   r®   r   r.   r:  ri   r
   r   r&   r   rØ   rÙ   r   r   )r²   r0   r´   rF  ry  ZBf1ZBf2r¬  r§  r�  r�  r“  r\   rª  r”  r1   r1   r2   Ú
test_pftrsO  s0    üÿr­  c                  C   s4  t dƒ ttƒD �]\} }d}| dkr`t||ƒt||ƒd   |¡}|| ¡ j |t|ƒ  }n&t||ƒ |¡}||j |t|ƒ  }| dk r’dnd}tdd	|› d
�f|d�\}}}||ƒ\}}	t	j
 |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�   rG   r*   rH   rÂ   Úhr�  r�  Zfrkr“   ro   r   rJ   rL   rm   N)r   r­   r®   r   r.   r:  ri   r
   r&   r,   r-   r   r   rr   )r²   r0   r´   rF  Úprefixr�  r�  Zshfrkr“  r9   rl   ZAfp_outZA_outr1   r1   r2   Útest_sfrk_hfrkt  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�   rf   rG   iâÿÿÿé   r*   rë   r—   )Úsyconvrm  rl  r“   rZ  F)rá   Z	hermitianrJ  ro   NrK  rì   r   )r   r­   r®   r   r.   r:  ri   r
   r,   rŠ  r¿   r&   r!   r   r   r   r   )r²   r0   r´   rF  r—  r²  ZtrfZ	trf_lworkÚlwrþ   ÚDÚpermrs  rn  r\   rU   rP  r	  r1   r1   r2   Útest_syconvŽ  s4    ÿÿÿ(r¶  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rFt||ƒt||ƒd   |¡}nt||ƒ |¡}dt |dƒj¡ }td|d�\}}|||ƒ\}}	}
|
d	ks–J ‚t 	|d
¡tj
||d� }tj
||d�||	 |j ¡   }t |¡}t|j ¡ | tj
||d�|dd� t|| ||dd� |dk�r@t||ƒt||ƒd   |¡}d}nt||ƒ |¡}d}dD ]¶}d|fD ]¦}|||	|||d�\}}
|
d	k�sŒJ ‚||k�r¢|j ¡ }n|}|dk�rº|| }n|| }t|||dd� ||fdk�rd|||	|ƒ\}}
|
d	k�sþJ ‚t||ƒ �qd�qXtt|||	|dd� tt|||	|dd� qd S )Nr�   r�   rG   r*   rë   r—   )ÚgeqrtÚgemqrtr“   r   ro   rK  rì   rl   ri   ©rþ   r7  r  ©r9  rv   rþ   ©rþ   r  rF  r8  r’  )r   r­   r®   r   r.   r,   rŠ  r¿   r&   r   r
   ri   r:  r   r   r   rØ   rÙ   )rT   r²   r0   r´   rF  r—  r¸  r¹  rU   Útr\   rÇ   rR  r7  rl   Ú	transposer9  rv   ru   ÚqZqCÚ	c_defaultr1   r1   r2   Útest_geqrt_gemqrt·  sN      
ÿ



zTestBlockedQR.test_geqrt_gemqrtc                  C   s¬  t dƒ ttƒD �]”\}}d}|dkrdt||ƒt||ƒd   |¡}t||ƒt||ƒd   |¡}n t||ƒ |¡}t||ƒ |¡}dt |dƒj¡ }td|d�\}}d	|d
 |fD �]ì}	||	|||ƒ\}
}}}|d	ksÞJ ‚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�r2t||ƒt||ƒd   |¡}t||ƒt||ƒd   |¡}d}n$t||ƒ |¡}t||ƒ |¡}d}dD �]}d|fD �]}||	||||||d�\}}}|d	k�s˜J ‚||k�r®|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�rh||	||||ƒ\}}}|d	k�sXJ ‚t	||ƒ t	||ƒ �qh�qZtt||	||||dd� tt||	||||dd� q¶qd S )Nr�   r�   rG   r*   rë   r—   )ÚtpqrtÚtpmqrtr“   r   rH   ro   rK  rì   rl   ri   rº  r  r»  rþ   r}   r¼  rF  r8  r’  )r   r­   r®   r   r.   r,   rŠ  r¿   r&   r   r   r   rð   r
   ri   r:  r   r   rØ   rÙ   ) rT   r²   r0   r´   rF  ry  r—  rÂ  rÃ  ÚlrU   rt   r½  r\   ZB_pentZb_pentrÇ   rR  r7  rl   r´  r¾  r9  rv   ru   rb   r¿  ÚcdZCDZqCDrÀ  Z	d_defaultr1   r1   r2   Útest_tpqrt_tpmqrtõ  sp     *"$ÿÿ

ÿ



zTestBlockedQR.test_tpqrt_tpmqrtN)r…   r†   r‡   r:   rÁ  rÆ  r1   r1   r1   r2   r·  ±  s   >r·  c                  C   sä  t dƒ ttƒD �]Ì\} }d}d}td|d�}| dkrrt||| ƒ |¡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�   rf   rH   Úpstrfr“   rG   r*   rK  éè  ©r   rH   r  rZ  ©r   r­   r®   r&   r   r.   r:  ri   r   r   r,   r°   rA  r±   rô   r   r   )r²   r0   r´   r'  rÇ  rF  ru   ÚpivÚr_cr\   r	  Úsingle_atolÚdouble_atolrí   rþ   r1   r1   r2   Ú
test_pstrfI  s4    ,

2
rÏ  c                  C   sä  t dƒ ttƒD �]Ì\} }d}d}td|d�}| dkrrt||| ƒ |¡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�   rf   rH   Úpstf2r“   rG   r*   rK  rÈ  rÉ  r  rZ  rÊ  )r²   r0   r´   r'  rÐ  rF  ru   rË  rÌ  r\   r	  rÍ  rÎ  rí   rþ   r1   r1   r2   Ú
test_pstf2q  s4    ,

2
rÑ  c                  C   sZ  t  g d¢g d¢g d¢g d¢g¡} t  g d¢g d¢g d¢g¡}ttƒD �]\}}|dk r†t  g d	¢g d
¢g d¢g d¢g¡}| |¡}nNt 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� qFt| |¡|d d …d f | | ddd� qFd S )N)g      ä?r—   g�1w-!¤?gÃdª`TRÛ¿)r—   g³êsµûá¿re  re  )gësµûËâ?re  g2æ®%äƒ®¿g,eâXá¿)re  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Á¿rH   )g   ÐˆÃBg   €tÒBgffffff @g   ÈÙ“ Â)ç      @gš™™™™™ÀgÑ®#®fD¾gffffffÀ)gHáz®Gù?g…ëQ¸…Àg'Vä»íó½g¤p=
×£ð¿)gÃõ(\�Âñ¿ra  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  )r,   rp   r­   r®   r.   r&   r   )Údesired_realÚdesired_cplxr²   r0   rF  rÓ  r'  ru   ZrowcndZcolcndÚamaxr\   r1   r1   r2   Ú
test_geequ™  sN    
ý
ú

ý
þþþþ

 ÿ ÿr×  c            
         s®   t  g d¢¡} ttƒD ]’\}}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   ro   ro   rÖ   rü   rf   r“   rH   r—   r*   c                    s   g | ]}ˆ d |  ‘qS )r˜   r1   r
  ©r<  r1   r2   r  Ì  r  ztest_syequb.<locals>.<listcomp>éûÿÿÿrK   Úsyequb)r,   rp   r­   r®   r
   rñ   Zrot90rï   r&   r   Úlog2r.   r¾   )
Zdesired_log2sr²   r0   rF  rb   rÚ  rÂ   ÚscondrÖ  r\   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 )NrH   rK   iê  rO   rG   )r  r*   r   rK  re  éüÿÿÿrÙ  rL   ù                i   ©rK   rK   y              0@)rK   r   rZ  )rÖ   ro   ro   r   r   rÙ  r   ro   ro   rÖ   rÖ   )r,   rï   r   r   Zzheequbr   r   rÛ  r€   rL  Zcheequbr.   Ú	complex64)rF  rÂ   rÜ  rÖ  r\   r1   r1   r2   Útest_heequbÕ  s    2
( 
rã  c                  C   s<  t j d¡ d} t j | ¡}t j | ¡t j | ¡d  }ttƒD ]ö\}}|dk r|t j | | ¡}| |¡}|| }| |¡}n<t j | | ¡t j | | ¡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Ü   rf   r*   rH   Úgetc2r“   Úgesc2r   ©rè   )Zoverwrite_rhsrJ   rm   )	r,   r-   r   r   r­   r®   r.   r&   r   )r´   rÔ  rÕ  r²   r0   rF  rt   rä  rå  Zlurn  Zjpivr\   ry   rP   r1   r1   r2   Útest_getc2_gesc2é  s2    
 



ÿ
ÿrç  rÝ   )rL   rK   rá  ÚjobarL   ÚjoburJ   ÚjobvÚjobrrG   Újobpc              
   C   s  t dƒ | \}}	dt |¡j }
t| |ƒ}td|d�}|dk }|dk }|dkoT||	k}t |¡}|dkor| or| }|dkoˆ|o‚| oˆ|}|dkož|o˜| ož|}|rªd}n|s²|r¸d}nd	}|dkrè|dkrètt||||||||ƒ	 �n0||||||||d
�\}}}}}}t	||ƒ |�s|d	 |d  |d|	…  }t
|t|dd�|
d� |dk�rj|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 )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“   rH   rG   rÖ   rü   r   )rè  ré  rê  rë  Újobtrì  NF)rç   r+  )r   r,   r°   r±   r3   r&   r"  rØ   rÙ   r   r   r   rï   r:  ri   Úidentityrq  Zmatrix_rankZcount_nonzero)rÝ   r0   rè  ré  rê  rë  rì  rî  r³   r´   rí   rF  rí  ZlsvecZrsvecZl2tranZ
is_complexZinvalid_real_jobvZinvalid_cplx_jobuZinvalid_cplx_jobvZexit_statusÚsvar2  rÇ   rÀ   rÁ   r\   Úsigmar1   r1   r2   Útest_gejsv_general  sT    !

ú	

"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   ©rG   rG   ©rG   r6  rë   rf   rF  N)r&   r   r/   r,   rp   r   ÚsinrL  rž  r.   Zasfortranarrayri   r;  r   )r0   rí  rð  r2  rÇ   rÀ   rÁ   r\   rF  ZAcr9   r1   r1   r2   Útest_gejsv_edge_argumentst  s.    



rö  ÚkwargsrO   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)rH   rH   r“   rí  Nr  )r÷  rF  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�Âõ(\�Àrc  g�Âõ(\�À)g cîZBþ#@gI.ÿ!ýv@g?ÆÜµõ?rd  )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&   r0   r   )rF  Z
sva_expectZu_expectZv_expectrí   rí  rð  r2  rÇ   rÀ   rÁ   r\   r1   r1   r2   Ú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 ]f\}}|| 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 �s”0    Y  ttƒ�$ |
||d d… |ƒ W d   ƒ n1 �sÒ0    Y  ttƒ�$ |
|||d d… ƒ W d   ƒ n1 �s0    Y  ttƒ�, |
|d |d d… |d ƒ W d   ƒ n1 �sV0    Y  d|d< d|d< |
|||ƒ\}}}}}} tj ||d  dkd ||d  ¡¡ d S )NrÜ   rf   rë   rG   r“   ro   ©ÚgttrfÚgttrsr   rH   r+  ri   rl   r’  z3?gttrf: _d[info-1] is {}, not the illegal value :0.)r   r,   r°   r±   r3   r;  rï   r-   r   r&   r   r
   r­   r   r¯   ri   r:  rØ   r  rÙ   Ztestingr   r  )!r0   r´   rí   Údurb   ÚdlÚdiag_cpyrF  ry   rt   rý  rþ  Ú_dlÚ_dÚ_duÚdu2rn  r\   r	  rþ   r÷   r³   rË  Zb_cpyÚx_gttrsrv   Zb_transZ__dlZ__dZ__duZ_du2Z_ipivÚ_infor1   r1   r2   Útest_gttrf_gttrsÉ  sf    "$$0$


4
4
4
<
ÿÿr  z1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)gÍÌÌÌÌÌ @re  çffffffþ?rœ   )rä   r`  ç      ÀçÍÌÌÌÌÌì¿çffffff@)ç333333@çÍÌÌÌÌÌ@r›   ç      À)r`  rÙ  r  r  )r  r  rM   éúÿÿÿgÏÜCÂ÷>ð¿)ro   r	  rN   )rH   rI   rJ   rK   rK   gš™™™™™@gffffff@ç      à¿gš™™™™™%@gÍÌÌÌÌÌ@gš™™™™™	Àr   gffffff&Àgš™™™™3@rß  rK   rM   rI   rü   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ÿ  rb   r   Zdu_expZd_expZdu2_expZipiv_exprt   ry   rý  rþ  r  r  r  r  rn  r\   r  r1   r1   r2   Ú0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csf&  s    2


r  ))rI   rM   )rM   rI   rÍ   c                 C   s2   t d| d�}|\}}|||d�\}}t|dƒ d S )NÚgeqrfp_lworkr“   rÐ   r   rÑ   )r0   r/   r  r³   r´   r•   r\   r1   r1   r2   Útest_geqrfp_lworke  s    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�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ë   rf   rJ   rG   ro   Úpttrfr“   r   zpttrf: info = z, should be 0)Úerr_msgr+  Úpttrszpttrs: info = )r   r,   r°   r±   r3   rï   r:  r;  r&   r   r   r   r   rs   ri   )Úddtyper0   rí   r´   rb   rP  rF  r  r   r  Ú_er\   rþ   r´  ry   rt   r"  Ú_xr1   r1   r2   Útest_pttrf_pttrsn  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 )Nrf   r   r“   rH   rG   ro   )r&   r3   rØ   r  )r#  r0   r´   r   rb   rP  r1   r1   r2   Ú*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  › d�ƒ t|f| ƒ}|||ƒ\}}}t|dkd	ƒ d S )
Nrf   r   r“   rH   rG   r   z?pttrf: _d[info-1] is z, not the illegal value :0.z2?pttrf should fail with non-spd matrix, but didn't)r&   r3   r   r   )	r#  r0   r´   r   rb   rP  r  r$  r\   r1   r1   r2   Ú'test_pttrf_pttrs_errors_singular_nonSPD«  s    ÿr(  z%d, e, d_expect, e_expect, b, x_expect)rJ   rf   é   r¢   rK   )rÖ   r  rƒ  rN   )rJ   rO   r¢   é   rG   )r  gKÈ=›Uå¿r   rd  rf   rH   é   éA   é   g      @ro   rÙ  )r*  é)   é.   é   )y      0@      0@y      2@      "Àù      ð?      À)r*  rO   rG   rJ   )r  r  r1  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 rž|||	|dd�\}}
t|||d� d S )	Nr€  r   r   r“   r+  r"  rG   rZ  )r&   r   r:  r0   r+   )rb   rP  Úd_expectZe_expectrt   Zx_expectrí   r   r  r$  r\   r"  r%  r1   r1   r2   Útest_pttrf_pttrs_NAG¿  s    
r3  c                 C   s  |dkrªt ||f| ƒ}|t t |¡d|  ¡ }|| ¡ j d }t|ƒd }t |f|ƒd }t |d f|ƒ}t |¡t |d¡ t |d¡ }|| | ¡ j }	|}
nht |f|ƒ}t |d f|ƒ}|d }t |¡t |d¡ t |d¡ }	t |¡t |d¡ t |d¡ }
|||	|
fS )NrG   rJ   rH   ro   )r3   r,   rï   r   r:  ri   r   )r0   Úrealtyper´   Ú	compute_zZA_eigZvrrb   rP  ZtrirF  Úzr1   r1   r2   Úpteqr_get_d_e_A_zé  s     """r7  zdtype,realtyper5  c                 C   sØ   t dƒ dt | ¡j }td| d�}d}t| |||ƒ\}}}}	||||	|d�\}
}}}t|dd|› d	�ƒ tt t	|ƒd ¡t |
¡|d
� |rÔt|t 
|¡j t |¡|d
� t|t |
¡ t 
|¡j ||d
� 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Ü   rÈ  Úpteqrr“   rf   ©rb   rP  r6  r5  r   zinfo = z, should be 0.r+  N)r   r,   r°   r±   r&   r7  r   r   Úsortr   r:  ri   rï  rï   )r0   r4  r5  rí   r8  r´   rb   rP  rF  r6  Úd_pteqrÚe_pteqrÚz_pteqrr\   r1   r1   r2   Ú
test_pteqr	  s    
"ÿÿr>  c                 C   sZ   t dƒ td| d�}d}t| |||ƒ\}}}}||d |||d�\}	}
}}|dksVJ ‚d S )NrÜ   r8  r“   rf   rJ   ©r6  r5  r   ©r   r&   r7  ©r0   r4  r5  r8  r´   rb   rP  rF  r6  r;  r<  r=  r\   r1   r1   r2   Útest_pteqr_error_non_spd)	  s    rB  c           	      C   sŠ   t dƒ td| d�}d}t| |||ƒ\}}}}tt||d d… |||d� tt|||d d… ||d� |r†tt||||d d… |d� d S )NrÜ   r8  r“   rf   ro   r?  )r   r&   r7  rØ   r  )	r0   r4  r5  r8  r´   rb   rP  rF  r6  r1   r1   r2   Ú"test_pteqr_raise_error_wrong_shape8	  s    rC  c                 C   sf   t dƒ td| d�}d}t| |||ƒ\}}}}d|d< d|d< |||||d�\}	}
}}|dksbJ ‚d S )NrÜ   r8  r“   rf   r   r?  r@  rA  r1   r1   r2   Útest_pteqr_error_singularG	  s    rD  zcompute_z,d,e,d_expect,z_expect)g¤p=
×£@rÒ  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€  r8  r“   rG   ro   r9  r+  N)r&   r0   r,   rï   r   r€   )r5  rb   rP  r2  Zz_expectrí   r8  r6  r  r$  Z_zr\   r1   r1   r2   Útest_pteqr_NAG_f08jgfV	  s    "rE  Úmatrix_size)rÌ   )rM   rL   ©rL   rL   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“   Zorgqr)rd   r•   r   r£   r  ro   )r,   r-   r   r°   r±   r&   r3   r   r   r   r
   r/   r:  ri   r   Úallrï   rS   r   rò   )r0   rF  r¤   rí   rI  Zgqrr³   r´   rF  Zqr_Ard   r\   r'  Zqqrr¿  Z
A_negativeZr_rq_negZq_rq_negZrq_A_negZtau_negZinfo_negr1   r1   r2   Útest_geqrfpo	  s6    
"ÿ(ÿrK  c                  C   s(   t  g ¡} td| jd�}tt|| ƒ d S )NrI  r“   )r,   rp   r&   r0   rØ   rÙ   )ZA_emptyrI  r1   r1   r2   Ú#test_geqrfp_errors_with_empty_array±	  s    
rL  Údriver)ZevZevdZevrZ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 n< ty  } z$t | | › d|› �¡ W Y d }~n
d }~0 0 d S )	Né°  rO  Ú_lworkr   r“   rG   rZ  ú$_lwork raised unexpected exception: ©r¯   r+   r&   r!   rÙ   r;   Zfail©rN  rM  r´   r0   Zsc_dlwZdz_dlwrP  r1   r1   r2   Útest_standard_eigh_lworks¸	  s    rV  ÚgvZ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 n< ty  } z$t | | › d	|› �¡ W Y d }~n
d }~0 0 d S )
NrQ  rO  rR  r   r“   rG   rþ   rš  rS  rT  rU  r1   r1   r2   Útest_generalized_eigh_lworksÆ	  s    rX  Údtype_r³   )rG   rf   rë   rÈ  c                 C   sx   t dƒ td|ƒ}|| }| tv r&dnd}|d }t|| d�}t||||ƒ}|dkrX|n|f}tdd„ |D ƒƒstJ ‚d S )	Nr�   r   ÚorÚunÚ	csd_lworkr“   c                 S   s   g | ]}|d k‘qS ré   r1   r
  r1   r1   r2   r  à	  r  z*test_orcsd_uncsd_lwork.<locals>.<listcomp>)r   r   r¯   r&   r!   rJ  )rY  r³   rW   r¿  rN  Údlwr³  Úlwvalr1   r1   r2   Ú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rpd|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 ]0}| ||| | || | | | | f< �qÔt|ƒD ]&}|||| | | || | f< �qt|ƒD ]œ}t
 || ¡||| || f< t
 || ¡||| | || | | f< t
 || ¡ ||| || | | | f< t
 || ¡||| | || f< �q>|| | }t||ddt
 | ¡j d� d S )N)rH  éP   éª   rZ  r[  Úcsdr\  r“   r•   Zlrworkr   r—   rK  g     ˆÃ@r  )r¯   r"   Zrvsr#   r&   r!   Údictr\  r   r  r,   r   rñ   Úcosrõ  r   r°   r±   )rY  r³   rW   r¿  rN  ÚXÚdrvr]  r^  ZlwvalsZcs11Zcs12Zcs21Zcs22ÚthetaÚu1Úu2Zv1tZv2tr\   r	  ZVHr'  Zn11Zn12Zn21Zn22ÚSÚoner÷   ZXcr1   r1   r2   Útest_orcsd_uncsdã	  sJ    
ÿÿTÿ

.$*,&rl  Ú
trans_boolFÚfactrœ  r  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�}|r¤| tv r d	q¦d
nd}|r¶|
 ¡ 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 |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“   rf   rG   ro   rH   ri   rl   r  rœ  NrL   ©rn  rv   ÚdlfÚdfÚdufr  rn  r   z?gtsvx info = z, should be zerorI   r+  Ú__len__Túrcond should be scalar but is z"ferr.shape is {} but should be {},z"berr.shape is {} but should be {},)r   r,   r°   r±   r&   r3   rï   r¯   r:  ri   r;  r   r   r   rŠ   r/   r  ) r0   rm  rn  rí   rp  rý  r´   r   rb   rÿ  rF  ry   rv   rt   Z
inputs_cpyÚdlf_Údf_Úduf_Údu2f_Úipiv_Úinfo_Ú	gtsvx_outrr  rs  rt  Údu2frn  Úx_solnrt  ÚferrÚberrr\   r1   r1   r2   Ú
test_gtsvx
  sB    "ÿÿÿÿÿr‚  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 rŒdnd	}|rž|	 ¡ jn|	|
 }|d
krº||||ƒnd gd \}}}}}}||||||||||||d�}|\
}}}}}}}}}}|dk�rZd|d< d|d< |||||ƒ}|\
}}}}}}}}}}|dk�sÂJ dƒ‚nh|d
k�rÂd|d< d|d< d|d< |||||||||||d�
}|\
}}}}}}}}}}|dk�sÂJ dƒ‚d S )NrÜ   ro  r“   rf   rG   ro   rH   ri   rl   rœ  rL   rq  r  r   z&info should be > 0 for singular matrix)rn  rr  rs  rt  r  rn  )r   r&   r3   r,   rï   r¯   r:  ri   )r0   rm  rn  rp  rý  r´   r   rb   rÿ  rF  ry   rv   rt   rw  rx  ry  rz  r{  r|  r}  rr  rs  rt  r~  rn  r  rt  r€  r�  r\   r1   r1   r2   Útest_gtsvx_error_singularO
  s>    "ÿÿ

ÿrƒ  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 rŒdnd	}|rž|	 ¡ jn|	|
 }|d
krº||||ƒ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� n¨tt	||||||||d d… ||||d� tt	|||||||||d d… |||d� tt	||||||||||d d… ||d� tt	|||||||||||d d… |d� d S )NrÜ   ro  r“   rf   rG   ro   rH   ri   rl   rœ  rL   r  rq  )r   r&   r3   r,   rï   r¯   r:  ri   rØ   r  rÙ   )r0   rm  rn  rp  rý  r´   r   rb   rÿ  rF  ry   rv   rt   rw  rx  ry  rz  r{  r|  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 )Nrp  r“   ©r&   r0   r   )rÿ  rb   r   rt   ry   rp  r}  rr  rs  rt  r~  rn  r  rt  r€  r�  r\   r1   r1   r2   Útest_gtsvx_NAGµ
  s    r†  zfact,df_de_lambdac                 C   s   t d|jd�| |ƒS ©Nr   r“   ©r&   r0   ©rb   rP  r1   r1   r2   Ú<lambda>Ø
  s   ÿÿrŠ  c                 C   s   dS ©N)NNNr1   r‰  r1   r1   r2   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|› d�ƒ t|
|ƒ t |d¡t t |¡¡ }t |¡}t|	|| t |¡j |d� t|dƒ�rxJ 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“   rK   rJ   rG   ro   rH   ©rn  rs  Úefr   zinfo should be 0 but is Ú.r+  ru  rv  )rH   z$ferr.shape is {} but should be ({},)z$berr.shape is {} but should be ({},)N)r   r,   r°   r±   r&   r3   rï   r:  r;  r   r   r   r   r   ri   rŠ   r/   r  )r0   r4  rn  Údf_de_lambdarí   rŒ  r´   rb   rP  rF  r  rt   rs  rŽ  r\   r  ry   rt  r€  r�  rþ   r´  r1   r1   r2   Ú
test_ptsvxÔ
  s>    (
ÿ

ÿÿÿr‘  c                 C   s   t d|jd�| |ƒS r‡  rˆ  r‰  r1   r1   r2   rŠ    s   ÿÿc                 C   s   dS r‹  r1   r‰  r1   r1   r2   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Ü   rŒ  r“   rK   rJ   rG   ro   rH   r�  )	r   r&   r3   r,   rï   r:  rØ   r  rÙ   )r0   r4  rn  r�  rŒ  r´   rb   rP  rF  r  rt   rs  rŽ  r\   r1   r1   r2   Útest_ptsvx_error_raise_errors  s    (  r’  c                 C   s   t d|jd�| |ƒS r‡  rˆ  r‰  r1   r1   r2   rŠ  .  s   ÿÿc                 C   s   dS r‹  r1   r‰  r1   r1   r2   rŠ  0  r  c                 C   sl  t 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rÔ||ksØJ ‚t|f|ƒ}||||
ƒ\}}}}}}}|d
k�r||k�shJ ‚nP|||ƒ\}}}d
|d
< d
|d
< ||||
|||d�\}}}}}}}|d
k�shJ ‚d S )NrÜ   rŒ  r“   rK   rJ   rG   ro   rH   r  r   rI   r�  )r   r&   r3   r,   rï   r:  )r0   r4  rn  r�  rŒ  r´   rb   rP  rF  r  rt   rs  rŽ  r\   ry   rt  r€  r�  r1   r1   r2   Útest_ptsvx_non_SPD_singular*  s0    (

ÿr“  zd,e,b,xc                 C   s6   t d|jd�}|| ||ƒ\}}}}}	}
}t||ƒ d S )NrŒ  r“   r…  )rb   rP  rt   ry   rŒ  rs  rŽ  Zx_ptsvxrt  r€  r�  r\   r1   r1   r2   Útest_ptsvx_NAGV  s    r”  rá   c                    s  t dƒ t | ¡jd }d\‰ }tˆ ˆ g| d�}tˆ |g| d�}| ¡ j| tjˆ | d�| dƒ  }|r–‡ fdd„tˆ ƒD ƒ‡ fdd„tˆ ƒD ƒf}n0d	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ë   )rf   rJ   r“   rš   c                    s    g | ]}t |ˆ ƒD ]}|‘qqS r1   ©rñ   ©r  Úyry   r  r1   r2   r  €  r  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>c                    s    g | ]}t |ˆ ƒD ]}|‘qqS r1   r•  r–  r  r1   r2   r  �  r  c                 S   s   g | ]}t |ƒD ]}|‘qqS r1   r•  r–  r1   r1   r2   r  ƒ  r  rG   c                 S   s"   g | ]}t |ƒD ]}|d  ‘qqS rô  r•  r–  r1   r1   r2   r  „  r  )ÚppsvÚpptrfÚpptrsÚpptriÚppconr?  r@  rZ  r   r  )ro  rá   rp  )r   r,   r°   r±   r3   r:  ri   r
   rñ   r&   r   r   r   r   r   rq  r   r   r€   rr  )r0   rá   rí   rµ   rU   rt   r¥  Zapr˜  r™  rš  r›  rœ  Zulr\   ZaulZuliZauliry   ÚbxZxvro  rt  r1   r  r2   Ú!test_pptrs_pptri_pptrf_ppsv_ppcont  sL    $ÿÿý





rž  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 r’t|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ë   rf   r“   )ÚgeesÚtrexcc                 S   s   d S r†  r1   ©ry   r1   r1   r2   rŠ  ®  r  z!test_gees_trexc.<locals>.<lambda>Fræ  ro   r   rü   rG  r  rM   rG   rÖ   r{   )r   r,   r°   r±   r3   r&   r   r+   r   r   r:  ri   )
r0   rí   r´   rU   rŸ  r   rj  r½  r6  Úd2r1   r1   r2   Útest_gees_trexc¤  s*    r£  zt, expect, ifst, ilst)r!  g)\�Âõ(¼¿ç{®Gáz„?g¸…ëQ¸ž?)rK  çš™™™™™¹¿r]  çffffffÖ?)rK  gÍÌÌÌÌÌä¿r¥  gš™™™™™É?)rK  rK  rK  r¥  )r¥  çôlV}®ä¿gVŸ«­Ø_¶?gî|?5^ºÉ?)g»¸�ðÐ?r¥  gÐÕVì/»·?g;ßO�—nÖ?)rK  rK  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   )Zwantqro   r+  N)r&   r0   r   r   )r½  ZifstZilstÚexpectrí   r   rj  r1   r1   r2   Útest_trexc_NAGÉ  s    r­  c                 C   s>  | t jkr.tjdkr.tdkr.t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 �rt|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 )NÚdarwinÚopenblasú
0.3.21.devú8gges[float32] broken for OpenBLAS on macOS, see gh-16949r�   rë   rf   r“   )ÚggesÚtgexcc                 S   s   d S r†  r1   r¡  r1   r1   r2   rŠ    r  z!test_gges_tgexc.<locals>.<lambda>F©rè   Zoverwrite_bro   r   rG   rß  rü   r{   rG  r  rM   rH   rI   ró  )r,   rA  ÚsysÚplatformÚblas_providerÚblas_versionr;   Úxfailr   r°   r±   r3   r&   r   r+   r   r   r:  ri   )r0   rí   r´   rU   rt   r²  r³  rj  rÂ   r½  r¿  r6  Úd1r¢  r1   r1   r2   Útest_gges_tgexcñ  sR    ÿþýü


r»  c                 C   st  t dƒ t | ¡jd }d}t||g| d�}td| d�\}}}|dd„ |dd	�}t|d
 dƒ |d }|d }	|d }
| tv r”t|t 	|¡d|d� t|	| |	 
¡ j |d|d� t |¡}d|d< t|||ƒ}| tv rê||||	|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ë   rf   r“   )rŸ  ÚtrsenÚtrsen_lworkc                 S   s   d S r†  r1   r¡  r1   r1   r2   rŠ  4  r  z!test_gees_trsen.<locals>.<lambda>Fræ  ro   r   rü   rG  r  rG   rL   r”   ©r•   Zliworkr{   )r   r,   r°   r±   r3   r&   r   r+   r   r   r:  ri   r   r!   )r0   rí   r´   rU   rŸ  r¼  r½  rj  r½  r6  r¢  Úselectr•   r1   r1   r2   Útest_gees_trsen)  s8    ÿ

rÀ  z*t, q, expect, select, expect_s, expect_sep)g/Ý$�•é?g“©‚QI½¿gú~j¼t“x?gŒJê4¡?)rK  ç5ï8EGr¹¿gGrùé·Ï?gyX¨5Í;Ö?)rK  gÉå?¤ß¾ä¿rÁ  gtµûËîÉ?)rK  rK  rK  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)\�Âõ(¼?)rG   r   r   rG   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 rB||| ||
d�}n||| ||
|
d d�}t|d d	ƒ |d	 } |d }| jtv r’|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”   rG   r¾  ro   r   rJ   rK   rL   r+  N)r&   r0   r!   r+   r   r   r:  ri   )r½  r¿  r¿  r¬  Zexpect_sZ
expect_seprí   Zatol2r¼  r½  r•   rj  rÂ   Úsepr1   r1   r2   Útest_trsen_NAGW  s(    0ÿ



rÃ  c                 C   sv  | t jkr.tjdkr.tdkr.t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 �rt|	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¯  r°  r±  r�   rë   rf   r“   )r²  ÚtgsenÚtgsen_lworkc                 S   s   d S r†  r1   r¡  r1   r1   r2   rŠ  ¶  r  z!test_gges_tgsen.<locals>.<lambda>Fr´  ro   r   rG   rß  rü   r{   rG  r  rL   r”   iùÿÿÿr  ró  )r,   rA  rµ  r¶  r·  r¸  r;   r¹  r   r°   r±   r3   r&   r   r+   r   r   r:  ri   r   r!   )r0   rí   r´   rU   rt   r²  rÄ  rÅ  rj  rÂ   r½  r¿  r6  rº  r¢  r¿  r•   r1   r1   r2   Útest_gges_tgsen¢  s^    ÿþýü
ÿ


rÆ  za, b, c, d, e, f, rans, lans)r™   r—   r—   r˜   )rK  rä   r™   r—   )rK  r—   rä   r—   )rK  rK  rK  g      @)r—   r—   r—   r—   )rK  rK  rK  r™   )ç      Àr›   r—   g      (@)g      "Àr˜   ç       ÀrÈ  )rÇ  r˜   rÈ  rœ   )ç      Àr›   r  g      3@)r˜   r—   r—   rä   )rK  r—   r˜   r—   )rK  rK  r—   r—   )rK  rK  rK  r˜   )r—   r—   r—   r˜   )rK  r—   r™   r—   )rK  rK  rK  r—   )rÉ  rš   rK  r›   )r
  r—   g       ÀrK  )re  r˜   ç      Àrš   )rÊ  r˜   rK  rš   )re  r˜   re  re  )re  r—   rä   r—   )re  r—   re  r™   )r™   re  r—   re  )r—   rä   re  r—   )re  r—   r˜   re  )r—   re  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!  rK  zDIF must be nearly 0zSolution for R is incorrect)rí   r!  zSolution for L is incorrect)r&   r   r   r,   r°   r±   )rU   rt   ru   rb   rP  rX   ZransZlansr0   rí   rË  ÚroutÚloutrP   Údifr\   r1   r1   r2   Útest_tgsyl_NAGã  s     $
ÿÿÿÿrÐ  rv   )r  ri   Úijob)r   rG   rH   rI   rJ   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�rJt|ddt  	| ¡j
d dd� n|dk�s\J dƒ‚|d
k�r|dk�r¢|| ||
  }|| }|| ||  }|| }nV|dk�røt  |¡| t  |¡|  }|| }|t  |
¡ |t  |¡  }d| | }t|||ddd� t|||ddd� d S )Ngü©ñÒMbP?g»½×Ùß|Û=l   OElÔt/ r‚  iöÿÿÿrf   r¿   )ÚoutputrÖ   rH   rË  r“   )rv   rÑ  r   zINFO is non-zerorK  zSCALE must be non-negativerë   zDIF must be 0 for ijob =0rÌ  zDIF must be non-negativer  ri   re  zlhs1 and rhs1 do not match)rí   r¤   r!  zlhs2 and rhs2 do not match)r,   rA  r-   Zdefault_rngr    Úuniformr.   r&   r   r°   r±   r¾  )r0   rv   rÑ  rí   Úrngr³   r´   rU   rb   r9   rt   rP  ru   rX   rË  rÍ  rÎ  rP   rÏ  r\   Zlhs1Zrhs1Zlhs2Zrhs2r1   r1   r2   Ú
test_tgsyl  sR    þþÿ
ÿ




ÿ
ÿrÕ  )r   )•rµ  Ú	functoolsr   Znumpy.testingr   r   r   r   r   r   r;   r	   rØ   Únumpyr,   r
   r   r   r   r   r   r   r   Znumpy.randomr   r   r   Zscipy.linalgr   r7   r   r   r   r   r   r   r   r   r   r   r    Zscipy.linalg.lapackr!   Zscipy.statsr"   r#   Zscipy.sparseÚsparser  Zscipy.__config__r$   ÚImportErrorr%   r8   r&   Zscipy.linalg.blasr'   rA  rô   r¯   râ  Z
complex128r+   r®   r·  r¸  r3   rE   rF   rˆ   rŽ   r  r  rÒ   rÓ   rÛ   rã   rú   r(  r3  r>  rB  rC  rU  rk  ru  r|  r�  rŽ  r•  r˜  r¢  r¦  r¨  r«  r­  r°  r¶  r·  rÏ  rÑ  r×  rÝ  Zskipifrã  rç  rñ   rò  rö  rø  rp   rû  r  r  r  r\  r&  r'  r(  r3  r7  r>  rB  rC  rD  rE  rK  rL  rV  rX  r_  rl  r‚  rƒ  r„  r†  r‘  r’  r“  r”  rž  r£  r­  r»  rÀ  rÃ  rÆ  rÐ  rÕ  r1   r1   r1   r2   Ú<module>   sÄ   (8


` t  **DO1")::) %# ((-ÿ
e
#ûÿ

û
û
ýóÿ

\
ü
üó
ü
üîîÿ+
ÿ
/ÿ

ÿ
ÿÿú	ÿÿù÷
ÿÿÿÿ
ýüÿ

@.:00
ÿÿû
üþ÷ùÿÿ

ÿýÿ4ÿ

ÿýÿÿ

ÿýÿ%
ÿÿü
ý
ýúúÿ.$ýýø	ýúô÷þ7-ýýýóúúúçòþ*!@ýýýýýýýýäþ"