U
    »mœd|è ã                   @   sJ  d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
Z
d dl
mZ d dlZd dlmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d d	l*m+Z+m,Z, d dl-m.Z/ zd d
lm0Z1 W n e2k
�r   dZ1Y nX d dl(m3Z3 d dl4m5Z5 ej6ej7gZ8ej9ej:gZ;e8e; Z<dd„ Z=dd„ Z>G dd„ dƒZ?G dd„ dƒZ@G dd„ dƒZAe
jB Cde<¡e
jB Cddddg¡dd„ ƒƒZDG dd„ dƒZEG d d!„ d!ƒZFG d"d#„ d#ƒZGG d$d%„ d%ƒZHd&d'„ ZId(d)„ ZJd*d+„ ZKd,d-„ ZLG d.d/„ d/ƒZMG d0d1„ d1ƒZNd2d3„ ZOd4d5„ ZPd6d7„ ZQd8d9„ ZRd:d;„ ZSd<d=„ ZTd>d?„ ZUd@dA„ ZVdBdC„ ZWdDdE„ ZXdFdG„ ZYdHdI„ ZZdJdK„ Z[dLdM„ Z\G dNdO„ dOƒZ]dPdQ„ Z^dRdS„ Z_dTdU„ Z`dVdW„ Zae
jBjbdXdYdZ�d[d\„ ƒZcd]d^„ Zde
jB Cd_d`dag¡e
jB Cde8¡e
jB Cdbeedcƒ¡e
jB Cddeedeƒ¡e
jB Cdfeedeƒ¡e
jB Cdgd dhg¡e
jB Cdid dhg¡�ddjdk„ƒƒƒƒƒƒƒZfe
jB Cde8¡dldm„ ƒZge
jB Cdndbdoidddoidfdoidgdoidpdoididoif¡dqdr„ ƒZhe
jB Cdse idtdudvdwgdxdydzd{gd|d}d~dgd€d�d‚dƒgd„d…d†d‡gdˆd‰dŠd‹gg¡e idŒd�dŽd�g¡e id�d‘d’d“gd”d•d–d—gd˜d™dšd›gdœd�dždŸgd d¡d¢d£gd¤d¥d¦d§gg¡e id¨d©dªd«gd¬d­d®d¯gd°d±d²d³gd´dµd¶d·gg¡fg¡d¸d¹„ ƒZje
jB Cde<¡dºd»„ ƒZke
jB Cd¼e id½d¾d¿dÀg¡e idÁd‡dÂdÃdÄg¡e idÅdÆdÇdÈg¡e id‡dÉdÃdÄg¡e idÅdÆdÊdËdÌg¡e idÍd¿dÎg¡e idÏdÐdedÑdÑg¡e idÒdÓgdÔdÕgdÖd×gdØdÙgdÒdÚgg¡e idÛdÑgdÊdÛgdÐdÜgdÛdÝgdÜdhgg¡f	e idÞdßdàdág¡e idâdâdãdädåg¡e idædçdèdçg¡e idâdãdädåg¡e idædçdèdçdég¡e idßdàdág¡e idÏdÐdedÑdÑg¡e idêdëgdìdígdîdïgdðdñgdòdógg¡e idçdÞgdôdõgdödàgd÷dßgdádøgg¡f	g¡dùdú„ ƒZle
jB Cde<¡e
jB Cddûdüdg¡dýdþ„ ƒƒZme
jB Cdÿene8e8 e<ƒ¡�d �d„ ƒZoe
jB Cdÿene8e8 e<ƒ¡�d�d„ ƒZpe
jB Cdÿene8e8 e<ƒ¡�d�d„ ƒZqe
jB C�de ide�d�d�d	dÑg¡e idÝdË�d
dÎg¡e idedo�d	�ddhg¡e idÔ�ddØd�g¡e idc�dgdodegdÏdog�d�dgdÊ�dgg¡e i�ddÏgdÏdÍgdhdÜgdÍdcgdÐdÉgg¡fe i�d�d�d�dg¡e i�d�d�dg¡e i�ddodhdeg¡e idçdÞ�dg¡e i�d�dg�d�dg�d�dg�d�dgg¡e idß�dgdçdçgdædægdádßgg¡fg¡�d �d!„ ƒZr�d"�d#„ Zse
jB C�d$ene<e8e8 ƒ¡e
jB C�d%eedÐƒ¡�d&�d'„ ƒƒZte
jB C�d$ene<e8e8 ƒ¡e
jB C�d%eedÐƒ¡�d(�d)„ ƒƒZue
jB C�d$ene<e8e8 ƒ¡e
jB C�d%eedÐƒ¡�d*�d+„ ƒƒZve
jB C�d$ene<e8e8 ƒ¡e
jB C�d%eedÐƒ¡�d,�d-„ ƒƒZwe
jB C�d.dÏe i�d/�d0�d1dˆg¡e i�d2�d3�d4g¡e i�d5�d6�d7�d8g¡e i�d9�d:�d;�d<g�d=�d>�d?�d@g�dA�dB�dC�dDg�dE�dF�dG�dHgg¡fg¡�dI�dJ„ ƒZxe
jB Cde<¡e
jB C�dKd�dL�dMg¡�dN�dO„ ƒƒZy�dP�dQ„ Zze
jB C�dR�dS�dT�dU�dVg¡e
jB C�dW�dX�dYg¡�dZ�d[„ ƒƒZ{e
jB C�dR�d\�d]g¡e
jB C�dW�dX�dYg¡�d^�d_„ ƒƒZ|e
jB C�d`e<¡e
jB C�dadh�d�db�dcg¡�dd�de„ ƒƒZ}e
jB C�d`e<¡�df�dg„ ƒZ~e
jB Cde<¡e
jB C�dh�didXg¡e
jB C�dj�dk�dlg¡�dm�dn„ ƒƒƒZe
jB Cde<¡e
jB C�dhd dhg¡e
jB C�dj�dk�dlg¡�do�dp„ ƒƒƒZ€e
jB Cde<dÏ ¡e
jB C�dh�didXg¡e
jB C�dj�dk�dlg¡�dq�dr„ ƒƒƒZ�e
jB C�dse id½d¾d¿dÀg¡e idÁd‡dÂdÃdÄg¡e idÅdÆdÇdÈg¡e idÒdÓgdÔdÕgdÖd×gdØdÙgdÒdÚgg¡e idÛdÑgdÊdÛgdÐdÜgdÛdÝgdÜdhgg¡fe idÞdßdàdág¡e idâdâdãdädåg¡e idædçdèdçg¡e idêdëgdìdígdîdïgdðdñgdòdógg¡e idçdÞgdôdõgdödàgd÷dßgdádøgg¡fg¡�dt�du„ ƒZ‚e
jB C�d$ene<e8e8 ƒ¡e
jB C�dv�dk�dw�dx„ f�dl�dy�dx„ fg¡�dz�d{„ ƒƒZƒe
jB C�d$ene<e8e8 ƒ¡e
jB C�dv�dk�d|�dx„ f�dl�d}�dx„ fg¡�d~�d„ ƒƒZ„e
jB C�d$ene<e8e8 ƒ¡e
jB C�dv�dk�d€�dx„ f�dl�d��dx„ fg¡�d‚�dƒ„ ƒƒZ…e
jB C�d„e ide�d�d�d	dÑg¡e idÝdË�d
dÎg¡e idc�dgdodegdÏdog�d�dgdÊ�dgg¡e i�ddÏgdÏdÍgdhdÜgdÍdcgdÐdÉgg¡fe i�d�d�d�dg¡e i�d�d�dg¡e i�d�dg�d�dg�d�dg�d�dgg¡e idß�dgdçdçgdædægdádßgg¡fg¡�d…�d†„ ƒZ†e
jB C�d‡�didXg¡e
jB Cde<¡�dˆ�d‰„ ƒƒZ‡e
jB Cde<¡�dŠ�d‹„ ƒZˆe
jB C�dŒe i�d��dŽ�d��d�g�d‘�d’�d“�d”g�d‘�d•�d’�d–g�d‘�d‘�d‘�d’gg¡e i�d’�d—�d˜�d™g�dš�d’�d›�dœg�d‘�d‘�d��d�g�d‘�d‘�d‘�d’gg¡dÏdhfe i�dž�dŸ�d �d¡g�d¢�d£�d¤�d¥g�d¢�d¢�d¦�d§g�d¢�d¢�d¢�d¨gg¡e i�d£�d©�dª�d«g�d¢�d¦�d¬�d­g�d¢�d¢�d¨�d®g�d¢�d¢�d¢�džgg¡dhdefg¡�d¯�d°„ ƒZ‰e
jB Cde<¡�d±�d²„ ƒZŠe
jB Cde<¡�d³�d´„ ƒZ‹e
jB C�dµe i�d¶�d·�d¸�d¹g�d‘�dº�d»�d¼g�d‘�d½�dº�d¾g�d‘�d‘�d‘�d¿gg¡e i�dÀ�dÁ�dÂ�dÃg�dÄ�dÅ�dÆ�dÇg�dÈ�dÉ�dÊ�dËg�dÌ�dÍ�d—�dÎgg¡e i�d”�dÏ�dÐ�dÑg�dÒ�dÓdŸ�d”g�dÔ�dÕ�dÖ�d×g�d“�dØ�dÙ�dÚgg¡e idhd d dhg¡�dÛ�dÜfe i�dÝ�dÞ�dß�dàg�d¢�dá�dâ�dãg�d¢�d¢�dä�dåg�d¢�d¢�d¢�dægg¡e i�dç�dè�dé�dêg�dë�dì�dí�dîg�dï�dð�dñ�dòg�dó�dô�dõ�dögg¡e i�d÷�dø�dù�dúg�dû�dü�dý�dþg�dÿ�d �d�dg�d�d�d�dgg¡e idhd d dhg¡�d�dfg¡�d	�d
„ ƒZŒe
jB Cde<¡�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)Ú_compute_lwork)Úortho_groupÚunitary_group)Ú_clapack)Úget_lapack_funcs)Úget_blas_funcsc                 C   s<   |t kr*tjj| Ž tjj| Ž d   |¡S tjj| Ž  |¡S )Nù              ð?)ÚCOMPLEX_DTYPESÚnpÚrandomr   Úastype)ÚshapeÚdtype© r-   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/linalg/tests/test_lapack.pyÚgenerate_random_dtype_array)   s    
ÿÿr/   c                  C   s„   t jdkrt d¡ tt j ¡ ƒ} tddddddd	gƒ}tƒ }tt ƒD ](}| d
¡sF||krF|| krF| 	|¡ qF|g ks€t
dƒ‚dS )z%Test that all entries are in the doc.Nzlapack.__doc__ is NoneÚabsolute_importÚclapackÚdivisionZfind_best_lapack_typeÚflapackÚprint_functionZ	HAS_ILP64Ú_z2Name(s) missing from lapack.__doc__ or ignore_list)r   Ú__doc__ÚpytestÚskipÚsetÚsplitÚlistÚdirÚ
startswithÚappendÚAssertionError)ÚnamesZignore_listÚmissingÚnamer-   r-   r.   Útest_lapack_documented1   s&    

     þÿrC   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestFlapackSimplec           
      C   sö   dddgdddgddd	gg}dd
d
dgdd
d
dgddd
d
gd
dd
d
gg}dD ]¤}t t|d d ƒ}|d krjqL||ƒ\}}}}}	t|	 t|	ƒƒ t||ƒ t||fd
t|d
 ƒd fƒ t|t t|ƒ¡ƒ ||ddd�\}}}}}	t|	 t|	ƒƒ qLd S )Né   é   é   é   é   é   é   é   é	   r   ga2U0*©3?gü©ñÒMb`?ZsdzcZgebal)ZpermuteÚscale)	Úgetattrr3   r   Úreprr   r   Úlenr(   r   )
ÚselfÚaÚa1ÚpÚfÚbaÚloÚhiZpivscaleÚinfor-   r-   r.   Ú
test_gebalD   s"    



ý
zTestFlapackSimple.test_gebalc                 C   sb   dddgdddgddd	gg}d
D ]<}t t|d d ƒ}|d kr>q ||ƒ\}}}t| t|ƒƒ q d S )NékÿÿÿéÎÿÿÿéfÿÿÿé  é´   é"  éåÿÿÿé÷ÿÿÿéçÿÿÿÚdZgehrd)rO   r3   r   rP   )rR   rS   rU   rV   ZhtÚtaurZ   r-   r-   r.   Ú
test_gehrdY   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 )NrE   rF   r   rH   rI   rJ   rL   rM   é
   é   é   ÚTÚfdFD)Útrsylr&   ÚC)ZtranaZtranb©Údecimaléÿÿÿÿ)Zisgn)	r(   Úarrayr*   r$   Úisupperr   ÚdotÚ	conjugaterk   )rR   rS   ÚbÚcÚtransr,   rT   Úb1Úc1rm   ÚxrN   rZ   r-   r-   r.   Ú
test_trsyld   s2    
"ÿ" þ ÿzTestFlapackSimple.test_trsylc           	      C   s$  t  dddgdddgddd	gg¡}d
D ]ø}dD ]î}| |¡}| ¡ rT|d  d7  < td|fƒ\}|||ƒ}|dkr°|dkr‚d}nd}t  t  t  t  |¡¡¡¡}t	|||ƒ q.|dkrÊt  
t  |¡¡}nH|dkrît  
t jt  |¡dd�¡}n$|dk�rt  
t jt  |¡dd�¡}t||ƒ q.q&d S )Nr\   r]   r^   r_   r`   ra   rb   rc   rd   rl   ZMm1OoIiFfEe©r   r   r&   )ÚlangeZFfEeZFfrG   rK   ZMmZ1Oor   ©ZaxisZIirE   )r(   rr   r*   rs   r$   ÚsqrtÚsumZsquareÚabsr   Úmaxr   )	rR   rS   r,   Znorm_strrT   r~   Úvaluerp   Úrefr-   r-   r.   Ú
test_lange€   s2    ý


zTestFlapackSimple.test_langeN)Ú__name__Ú
__module__Ú__qualname__r[   rg   r|   r†   r-   r-   r-   r.   rD   B   s   rD   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)Úhasattrr3   ©rR   r-   r-   r.   Útest_flapack¤   s    
zTestLapack.test_flapackc                 C   s   t tdƒr
d S r‹   )rŒ   r1   r�   r-   r-   r.   Útest_clapack©   s    
zTestLapack.test_clapackN)r‡   rˆ   r‰   rŽ   r�   r-   r-   r-   r.   rŠ   ¢   s   rŠ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestLeastSquaresSolversc                 C   s~  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
dddg|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
dd d!g|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éÒ  rh   é   rE   )ÚgelsÚ
gels_lwork©r,   ©Úlworkr   ZTTCC©rx   r—   ç      ð?ç       @ç      @ç      @ç      @ç       @ç      0@ç      1@ç      4@)r“   r”   ÚgeqrfrF   rq   ç¥ªªªªª,Àçûÿÿÿÿÿ-@é   ©Úrtolù      ð?      @ù      @      à?ù      @      Àù      @       Àù       @ffffffæ?ù      1@       @ù      4@      ÀùR úŠ–ò?¤îð\Îjþ¿ùµò£�,Æû?§ÿ² Wø?)r   Ú	enumerateÚDTYPESr   r*   r$   r    r   ÚREAL_DTYPESr(   rr   r+   rQ   r   ÚfinfoÚepsr   r'   )rR   Úindr,   ÚmÚnÚnrhsrT   ry   ZglsZglslwr—   r5   rZ   r“   r”   r¢   Zlqrr{   Z	lqr_truthr-   r-   r.   Ú	test_gels±   sˆ    
þþ ÿ

ÿþý
þþ ÿ

ÿþýz!TestLeastSquaresSolvers.test_gelsc              
   C   s<  t D �]}tjddgddgddgg|d�}tjdd	d
g|d�}td||fƒ\}}|j\}}t|jƒdkrt|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dddg|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Ÿ   r    r¡   )ÚgelsdÚgelsd_lworkrF   rE   rq   Fr£   r¤   r¥   r¦   çYNô))1)@ç*@ƒž.«â?r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   çU‹¯ý.*@çãÊ_ÅY@©r³   r(   rr   r$   r+   rQ   ÚintÚrealr   r´   rµ   r'   )rR   r,   rT   ry   r»   r¼   r·   r¸   r¹   ÚworkÚiworkrZ   r—   Z
iwork_sizer{   ÚsÚrankZrworkZ
rwork_sizer-   r-   r.   Ú
test_gelsdõ   s–    

þþÿ

  ÿÿþý
ÿÿþ

þþÿ
  ÿÿþý
ÿþz"TestLeastSquaresSolvers.test_gelsdc                 C   s(  t D �]}tjddgddgddgg|d�}tjdd	d
g|d�}td||fƒ\}}|j\}}t|jƒdkrt|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dddg|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Ÿ   r    r¡   )ÚgelssÚgelss_lworkrF   rE   rq   Fr£   r¤   r¥   r¦   r½   r¾   r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   r¿   rÀ   rÁ   )rR   r,   rT   ry   rÉ   rÊ   r·   r¸   r¹   rÄ   rZ   r—   Úvr{   rÆ   rÇ   r-   r-   r.   Ú
test_gelss1  s‚    

þþÿ
ÿþý
ÿÿþ

þþÿ
ÿþü
ÿÿþz"TestLeastSquaresSolvers.test_gelssc              	   C   s4  t D �]}tjddgddgddgg|d�}tjdd	d
g|d�}td||fƒ\}}|j\}}t|jƒdkrt|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dddg|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Ÿ   r    r¡   )ÚgelsyrÊ   rF   rE   rh   Frq   r£   r¤   r¥   r¦   r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   )r³   r(   rr   r$   r+   rQ   r´   rµ   rÂ   rÃ   r   Zint32r   r'   )rR   r,   rT   ry   rÍ   Zgelsy_lworkr·   r¸   r¹   rÄ   rZ   r—   ZjptvrË   r{   ÚjrÇ   r-   r-   r.   Ú
test_gelsyj  sz    

þþÿ
  ÿÿþý

þþÿ
  ÿÿþüz"TestLeastSquaresSolvers.test_gelsyN)r‡   rˆ   r‰   rº   rÈ   rÌ   rÏ   r-   r-   r-   r.   r�   ¯   s   D<9r�   r,   r+   ©rG   rH   )rI   rF   )é   rÑ   c                 C   s2   t d| d�}|\}}|||d�\}}t|dƒ d S )NÚgeqrf_lworkr•   ©r·   r¸   r   ©r$   r   )r,   r+   rÒ   r·   r¸   r—   rZ   r-   r-   r.   Ú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kr�tdg|gƒ\}tt||dd … |dd� ||dd … |dd� q|tkrtd	g|gƒ\}	tt|	|dd … |dd� |	|dd … |dd� qd S )
N)i,  rF   r•   ÚgerqfrF   r–   ÚorgrqéþÿÿÿrE   Úungrq)r²   r(   r   r$   Úassert_raisesÚ	Exceptionr³   r'   )
rR   r,   rS   r×   Zrqrf   rÄ   rZ   rØ   rÚ   r-   r-   r.   Útest_ticket_1645­  s    zTestRegression.test_ticket_1645N)r‡   rˆ   r‰   rÝ   r-   r-   r-   r.   rÖ   «  s   rÖ   c                   @   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é*   )rG   rG   )Úsize)ÚpotrfZpotri)Úcleanr   )r(   r)   r   Únormalrt   rk   r$   r   r   r   r   )
rR   Úlowerrâ   r{   rS   ZdpotrfZdpotrirw   rZ   Zdptr-   r-   r.   Útest_gh_2691Á  s    zTestDpotr.test_gh_2691N)r‡   rˆ   r‰   rå   r-   r-   r-   r.   rÞ   À  s   rÞ   c                   @   s   e Zd Zdd„ ZdS )Ú
TestDlasd4c              
   C   st  t  ddddg¡}t  ddddg¡}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 )Nr›   ç      @rš   r   gö(\�Âõ@gÍÌÌÌÌÌ@g333333Àçš™™™™™Àrq   rE   F)Úfull_matricesÚ
compute_uvÚoverwrite_aZcheck_finite©r   Úlasd4rG   zcLAPACK root finding dlasd4 failed to find                                     the singular value %izThere are NaN rootséd   ©Úatolr§   )r(   rr   ÚhstackZvstackÚdiagr   rQ   Znewaxisr   Úconcatenater   r$   Úranger>   r   ÚanyÚisnanr   r´   Úfloat64rµ   )rR   ZsigmasZm_vecÚMZSMZit_lenZsgmZmvcrí   ÚrootsÚiÚresr-   r-   r.   Útest_sing_val_updateÕ  s4    ÿþ
ÿ*ÿÿzTestDlasd4.test_sing_val_updateN)r‡   rˆ   r‰   rü   r-   r-   r-   r.   ræ   Ô  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dddgdddgdddgg¡dd„ ƒZ	dd„ Z
ej dddg¡dd„ ƒZdS )Ú	TestTbtrsr,   c                 C   sF  |t krxtjddddgddddg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krútjddddgddddgdd ddg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/d0gg|d	�}ntd1|› d2�ƒ‚td3|d	�}|||d4d5�\}}t|dƒ t||dd6d7� d8S )9zý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

        g¤p=
×£Àg…ëQ¸@gHáz®G@g{®GázÄ?g      Àgq=
×£p@gHáz®GÀr   r•   g¤p=
×£0Àg�Âõ(\�+Àg×£p=
—0Àg333333*@gÃõ(\�ÂÀgHáz®G,ÀgìQ¸…ë#ÀrH   rE   rq   éýÿÿÿrG   rF   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¤¿yìQ¸…ëù?q=
×£p@y)\�Âõ(Àáz®Gáþ¿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©Úabrv   Úuploçñhãˆµøä>©r§   rð   N)r³   r(   rr   r'   Ú
ValueErrorr$   r   r   )rR   r,   r  rv   Zx_outrÿ   r{   rZ   r-   r-   r.   Útest_nag_example_f07vef_f07vsfö  s\    	
ÿþ
ýü
ýü

þý
ýü
ýü
z(TestTbtrs.test_nag_example_f07vef_f07vsfzdtype,transc                 C   s.   g | ]&}d D ]}|dkr |t ks||f‘qqS ))ÚNrk   rn   rn   )r³   )Ú.0r,   rx   r-   r-   r.   Ú
<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¼  )rH   rG   rF   rÿ   r•   r  rE   rq   c                    s   g | ]}ˆ t |ƒ ‘qS r-   )r‚   ©r	  r{   ©r¸   r-   r.   r
  9  s     z2TestTbtrs.test_random_matrices.<locals>.<listcomp>c                    s   g | ]}t |fˆ ƒ‘qS r-   )r/   )r	  Úwidthr•   r-   r.   r
  :  s   ÿZdia)Úformatr   )r  rv   r  rx   rò   r  g-Cëâ6
?r¦   rk   rn   zInvalid trans argument)r   r$   rô   r(   r   ÚspsZdiagsr   r±   Zdiagonalrƒ   Úminr/   r   r   rk   ÚHr  )rR   r,   rx   r  rò   r¹   Úkdrÿ   Zis_upperZkuÚklZband_offsetsZband_widthsZbandsrS   r  ÚrowÚkrv   r{   rZ   r-   )r,   r¸   r.   Útest_random_matrices$  s6    

ÿ(



zTestTbtrs.test_random_matriceszuplo,trans,diagZInvalidc                 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•   rH   rF   N)r$   r(   r÷   r   rÛ   rÜ   )rR   r  rx   rò   rÿ   r  rv   r-   r-   r.   Ú&test_invalid_argument_raises_exceptionW  s    

z0TestTbtrs.test_invalid_argument_raises_exceptionc                 C   sP   t jdtd�}t jdtd�}tdtd�}d|d< |||dd�\}}t|dƒ d	S )
aH  Test if a matrix with a zero diagonal element is singular

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

        Note that ?tbtrs requires the matrix A to be stored in banded form.
        In this form the diagonal corresponds to the last row.rÐ   r•   rH   rÿ   r   )rq   rG   r  r  N)r(   r   Úfloatr$   r   )rR   r  rv   rÿ   r5   rZ   r-   r-   r.   Útest_zero_element_in_diagonald  s    z'TestTbtrs.test_zero_element_in_diagonalzldab,n,ldb,nrhs)rI   rI   r   rI   )rI   rI   rG   rI   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Ü   )rR   Zldabr¸   Zldbr¹   r  rv   rÿ   r-   r-   r.   Útest_invalid_matrix_shapest  s    z$TestTbtrs.test_invalid_matrix_shapesN)r‡   rˆ   r‰   r7   ÚmarkÚparametrizer²   r  r  r  r  r  r-   r-   r-   r.   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kƒ tt|ƒtkƒ qt|d
ƒ qd S )Nrl   Úlartgr•   rG   rH   r&   ç333333ã?rœ   y       €š™™™™™é¿çš™™™™™é?)	r$   r(   rr   Úiscomplexobjr   r   ÚtypeÚcomplexr  )r,   r  rV   ÚgÚcsZsnÚrr-   r-   r.   Ú
test_lartg€  s    




r(  c            
      C   sB  dD �]6} d}d}t  dd| ¡}t  dd| ¡}dt  | ¡jd   }| dkr^td	| d
�}d}n td	| d
�}|d9 }|d9 }d}t|||||ƒddddgddddgg|d� t|||||dd�ddddgdd||gg|d� t|||||ddd�ddddg||ddgg|d� t|||||dddd�ddddg||ddgg|d� t|||||dddd�ddddgd|d|gg|d� t|||||dddddd�	ddddg||d|gg|d� t|||||dddd�ddddgd|d|gg|d� |||||ddd�\}}	t||kƒ t|	|kƒ t|ddddg|d� t|	ddddg|d� qd S )Nrl   r   r!  rH   rG   rh   rE   ÚfdÚrotr•   y       €      ð¿r&   y              @rI   r   ©rð   rF   r  )ÚoffxÚoffy)Úincxr-  r¸   )r,  Úincyr¸   )r,  r.  r-  r/  r¸   rÙ   )r.  r/  r¸   )Zoverwrite_xZoverwrite_y)r(   Úfullr´   Ú	precisionr%   r$   r   r   )
r,   rw   rÆ   ÚurË   rð   r*  rV   rS   rv   r-   r-   r.   Útest_rot—  s`    

ÿÿ
ÿÿ ÿ ÿ ÿ ÿ ÿ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k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‘   )rH   rH   r&   rl   ÚlarfgÚlarfr•   ZFDr   rE   ©rE   r   rF   r}   r™   ÚR©Úsider  r+  )r(   r)   r   rk   rt   Úconjr$   Úcopyr+   r   ru   r   r   )Za0Za0jr,   r4  r5  rS   Úalphar{   rf   ÚexpectedrË   r-   r-   r.   Ú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:t‚d S )	NZgesdd_lworkÚ	preferred©r,   Zilp64iA%  T)rê   ré   i`”Di€”D)r$   r(   Úfloat32r    r?   )Zsgesdd_lworkr¸   r—   r-   r-   r.   Ú 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 )	Ú	TestSytrdr,   c                 C   s*   t jd|d�}td|fƒ}tt||ƒ d S )Nr}   r•   Úsytrd©r(   r   r$   rÛ   r  )rR   r,   ÚArD  r-   r-   r.   Útest_sytrd_with_zero_dim_array  s    z(TestSytrd.test_sytrd_with_zero_dim_arrayr¸   ©rE   rG   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_lworkrE   rF   r   ©rä   r—   rI   r™   rï   ç        r–   rq   )r(   r   r$   ÚarangeÚtriu_indices_fromr   r   r´   rµ   rò   r   r+   r
   rô   Úouterrt   r   rk   )rR   r,   r¸   rF  rD  rI  r—   rZ   Údatare   Úerf   rk   r  Úk2ÚQrú   rË   r  Úi_lowerZQTAQr-   r-   r.   Ú
test_sytrd  s@    
ÿÿ




$zTestSytrd.test_sytrdN)	r‡   rˆ   r‰   r7   r  r  r³   rG  rT  r-   r-   r-   r.   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  )rR   rV  rF  rW  r-   r-   r.   Útest_hetrd_with_zero_dim_arrayL  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_lworkrE   rF   r&   )r   rE   ©rä   r   rJ  rI   r™   rï   rK  r–   rq   rh   )r(   r   r$   rL  rM  Zfill_diagonalrÃ   rò   r   r    r   r´   rµ   r   r+   rÂ   r
   rô   rN  r:  rt   r   rk   )rR   r¸   Z
real_dtyperV  rF  rW  rY  r{   r5   rZ   r—   rO  re   rP  rf   rk   r  rQ  rR  rú   rË   r  rS  ZQHAQr-   r-   r.   Ú
test_hetrdS  sX    
ÿ"ÿÿ




ÿ   ÿzTestHetrd.test_hetrdN)r‡   rˆ   r‰   r7   r  r  r'   rX  Úzipr³   r[  r-   r-   r-   r.   rU  K  s   
ÿrU  c                  C   sª  t tƒD �]š\} }td|d�\}}t|dddd�}| dk r²tjddd	d
gddddgddddgddddgddddgddddgg|d�}tjddddd d!g|d�}tjd"d"g|d�}nvt d#d$d%d&gd'd(d)d*gd+d,d-d.gd/d0d1d2gd3d4d5d6gd7d8d9d:gg¡}t d;gd<gd=gd>gd?gd@gg¡}tjd|d�}tjdAd"dBd"gd"dAd"dBgg|d�}||||||dC�\}	}	}	}
}	| dk �r„t dDdEdDdEg¡}nt dFdGdHdIg¡}t|
|ddJ� qd S )KN)ZgglseZgglse_lworkr•   rJ   rH   rF   )r·   r¸   rU   g=
×£p=â¿g{®Gázô¿gö(\�ÂõØ¿ç      Ð?gáz®Gáþ¿gHáz®Gñ?g×£p=
×Ó¿g…ëQ¸Àçffffff@g¸…ëQ¸Î?gš™™™™™Ù?gffffffÖ¿g{®Gázä?ç…ëQ¸å¿g{®Gáz´?g333333Ã?g333333Ó?g
×£p=
Àg{®Gáz”¿ç{®Gázð?gáz®Gáö¿ç      à?g      ø¿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™   ç      ð¿r–   gÐ^"ƒ�Lß?g¢\}éëï?yàÜ!fñ?$_KÀ–dÿ¿y‰^g¿Åµç¿¸F€�Ö@yàÜ!fñ?}²Þ–dÿ¿y61ŸÅµç¿eðæ_�Ö@ro   )r±   r²   r$   r    r(   rr   r   r   )r¶   r,   ÚfuncÚ
func_lworkr—   rS   rw   re   rv   r5   Úresultr=  r-   r-   r.   Ú
test_gglseš  s\    ÿ





ûû




ûû"
ýýrf  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‘   rh   rH   Úsytrf_lworkr•   )ZsyconÚsytrfZhetrf_lwork)ZheconZhetrfr&   rF   rE   )r—   rä   )rS   ÚipivÚanormrä   ©rU   )r   r±   r²   r'   r$   r   r*   r:  rk   r(   r
   r   r    r   r‚   ÚlinalgÚcond)r¶   r,   r¸   rd  ZfunconZfunctrfrF  rj  r—   Úlduri  r5   Úrcondr-   r-   r.   Útest_sycon_heconË  s     $

rp  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‘   rh   )rá   ÚsygstÚsyevdÚsygvdr•   rF   r   ç-Cëâ6?r¦   )r   r±   r³   r$   r   r*   rk   r(   r
   r   r   )r¶   r,   r¸   rá   rq  rr  rs  rF  ÚBÚeig_gvdr5   rZ   rv   rS   Úeigr-   r-   r.   Ú
test_sygstæ  s&    þ rx  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‘   rh   )rá   ÚhegstÚheevdÚhegvdr•   r&   rF   r   rt  r¦   )r   r±   r'   r$   r   r*   r:  rk   r(   r
   r   r   )r¶   r,   r¸   rá   ry  rz  r{  rF  ru  rv  r5   rZ   rv   rS   rw  r-   r-   r.   Ú
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‘   )rh   é   ©ÚtzrzfZtzrzf_lworkr•   rF   r&   r–   r   Nc              
      sD   g | ]<}ˆ ˆ| ˆ|gd d …f j  ˆ|gd d …f  ¡ ¡  ‘qS ©N©rk   rt   r:  r  ©ZIdÚVrf   r-   r.   r
  @  s     ztest_tzrzf.<locals>.<listcomp>rh   r™   rK  rï   )r   r±   r²   r$   r    r   r   r*   rÛ   rÜ   rk   r   r(   rñ   r   r
   rô   r   rt   r   r   ÚspacingrÃ   )r·   r¸   r¶   r,   r  Útzrzf_lwr—   rF  ÚrzrZ   r7  r…   ÚZr-   r‚  r.   Ú
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’   rE   r&   rn   rk   )ÚtrttfÚtfttrÚtfsmr•   rF   rq   r   rH   rJ   ro   ©rx   r™   r  )rx   rò   rG   r7  )rx   rò   r9  N)r   r±   r²   r   r   r
   r*   r$   r   r   r:  rk   r(   rL  )r¶   r,   r¸   rF  rx   r‰  rŠ  r‹  ÚAfpr5   ru  ÚsolnZB2r-   r-   r.   Ú	test_tfsmF  s>    *ÿÿÿÿÿr�  c               	      s€  t dƒ d\} }}ttƒD �]^\}}td|d�\}}t|| |ƒ}|dk r~tt| |ƒ |¡ƒ}t||ƒ |¡}	td|d�\}
}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 matric C
    and a unitary matrix Q without explicitly forming the array. The array data
    is encoded in the rectangular part of A which is obtained from ?TZRZF. Q
    size is inferred by m, n, side keywords.
    r‘   )rh   r}  r}  r~  r•   rF   )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‚  r-   r.   r
  Ž  s     z$test_ormrz_unmrz.<locals>.<listcomp>rk   rn   rh   r™   r   rK  rï   r˜   r7  )r9  r—   )r9  rx   r—   )r   r±   r²   r$   r    r   r   r*   r(   rñ   r
   rô   r   rt   r„  rÃ   r   r   r   r:  rk   )ZqmÚqnZcnr¶   r,   r  r…  Zlwork_rzrF  rn   Zorun_mrzZorun_mrz_lwZ	lwork_mrzr†  rZ   r…   rR  rx   ÚtolZcqr-   r‚  r.   Útest_ormrz_unmrzo  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’   rE   r&   rn   rk   )r‰  rŠ  r•   r   r   ©r  r  )Útransrr  rF   Nrq   ÚF)Úorder)r   r±   r²   r   r*   r$   r   r   r   r:  rk   r   r   Úreshape)r¶   r,   r¸   ÚA_fullr•  r‰  rŠ  ZA_tf_UrZ   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_Tr-   r-   r.   Ú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’   rE   r&   )ÚtrttpÚtpttrr•   r   r   r”  rF   N)r   r±   r²   r   r*   r$   r   r   r   r   rk   r   r   r   )r¶   r,   r¸   r™  r�  rž  ZA_tp_UrZ   ZA_tp_LÚindsZA_tp_U_mZA_tp_L_mrš  r›  r-   r-   r.   Ú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’   rE   r&   )Úpftrfr‰  rŠ  r•   r   N)r   r±   r²   r   r*   r:  rk   r
   r$   r   r   r   )r¶   r,   r¸   rF  r¡  r‰  rŠ  r�  rZ   Z	Achol_rfpZA_chol_rr5   ZAcholr-   r-   r.   Ú
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’   rE   r&   )Úpftrir¡  r‰  rŠ  r•   r   rF   rH   rJ   ro   N)r   r±   r²   r   r*   r:  rk   r
   r$   r   r   r   r   )r¶   r,   r¸   rF  r£  r¡  r‰  rŠ  r�  rZ   Ú
A_chol_rfpZ	A_inv_rfpZA_inv_rr5   ZAinvr-   r-   r.   Ú
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’   rE   r&   rG   r•   rF   )Úpftrsr¡  r‰  rŠ  r   rH   rJ   ro   N)r   r±   r²   r   r*   r:  rk   r
   r   r$   r   rÛ   rÜ   r   r   )r¶   r,   r¸   rF  ru  ZBf1ZBf2r¦  r¡  r‰  rŠ  r�  rZ   r¤  rŽ  r-   r-   r.   Ú
test_pftrsG  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’   rE   r&   rF   rÆ   Úhr‰  rŠ  z{}frkr•   rq   r   rH   rJ   ro   N)r   r±   r²   r   r*   r:  rk   r
   r$   r  r(   r)   r   r   rt   )r¶   r,   r¸   rF  Úprefixr‰  rŠ  Zshfrkr�  r5   rn   ZAfp_outZA_outr-   r-   r.   Útest_sfrk_hfrkl  s*    
ÿþ ÿrª  c                  C   sš  t dƒ ttƒD �]‚\} }d}| dkr`tdd||fƒtdd||fƒd   |¡}|| ¡ j }n,tdd||fƒ |¡}||j |t|ƒ  }dt 	|dƒj
¡ }td	|d
�\}}}t||dd�}t|ddd�\}	}
}t||dd�}||d|d�\}}}|||dd�\}}}tt|dƒt|	|dd…f dƒ|dd� t|ddd�\}}
}||dd�\}}}|||dd�\}}}tt|dƒt||dd…f dƒ|dd� qdS )zt
    Test for going back and forth between the returned format of he/sytrf to
    L and D factors/permutations.
    r‘   rh   rE   iâÿÿÿé   r&   rî   r™   )Úsyconvrh  rg  r•   rZ  F)rä   Z	hermitianrJ  rq   NrK  rï   r   )r   r±   r²   r   r*   r:  rk   r
   r(   r„  rÃ   r$   r    r   r   r   r   )r¶   r,   r¸   rF  r‘  r¬  ZtrfZ	trf_lworkÚlwr   ÚDÚpermrn  ri  rZ   rS   rP  r  r-   r-   r.   Ú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–t	‚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Œt	‚||k�r¢|j ¡ }n|}|dk�rº|| }n|| }t|||dd� ||fdk�rd|||	|ƒ\}}
|
d	k�sþt	‚t||ƒ �qd�qXtt|||	|dd� tt|||	|dd� qd S )Nr‘   r’   rE   r&   rî   r™   )ÚgeqrtÚgemqrtr•   r   rq   rK  rï   rn   rk   ©r   r7  r  ©r9  rx   r   ©r   r  rF  r8  rŒ  )r   r±   r²   r   r*   r(   r„  rÃ   r$   r?   r   r
   rk   r:  r   r   r   rÛ   rÜ   )rR   r¶   r,   r¸   rF  r‘  r²  r³  rS   ÚtrZ   rË   rR  r7  rn   Ú	transposer9  rx   rw   ÚqZqCÚ	c_defaultr-   r-   r.   Ú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Þt	‚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˜t	‚||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�sXt	‚t
||ƒ t
||ƒ �qh�qZtt||	||||dd� tt||	||||dd� q¶qd S )Nr‘   r’   rE   r&   rî   r™   )ÚtpqrtÚtpmqrtr•   r   rF   rq   rK  rï   rn   rk   r´  r  rµ  r   r   r¶  rF  r8  rŒ  )r   r±   r²   r   r*   r(   r„  rÃ   r$   r?   r   r   r   ró   r
   rk   r:  r   r   rÛ   rÜ   ) rR   r¶   r,   r¸   rF  ru  r‘  r¼  r½  ÚlrS   rv   r·  rZ   ZB_pentZb_pentrË   rR  r7  rn   r®  r¸  r9  rx   rw   re   r¹  ÚcdZCDZqCDrº  Z	d_defaultr-   r-   r.   Útest_tpqrt_tpmqrtî  st     *"$ ÿ ÿ

ÿ



zTestBlockedQR.test_tpqrt_tpmqrtN)r‡   rˆ   r‰   r6   r»  rÀ  r-   r-   r-   r.   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
k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
k�r¨|n|}t||d  d d …|d f || ¡ j d|d� qd S )Nr‘   rh   rF   Úpstrfr•   rE   r&   rK  éè  ©r   rF   r  rZ  ©r   r±   r²   r$   r   r*   r:  rk   r   r   r(   r´   rA  rµ   r÷   r   r   )r¶   r,   r¸   r'  rÁ  rF  rw   ÚpivÚr_crZ   r  Úsingle_atolÚdouble_atolrð   r   r-   r-   r.   Ú
test_pstrfB  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
k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
k�r¨|n|}t||d  d d …|d f || ¡ j d|d� qd S )Nr‘   rh   rF   Úpstf2r•   rE   r&   rK  rÂ  rÃ  r  rZ  rÄ  )r¶   r,   r¸   r'  rÊ  rF  rw   rÅ  rÆ  rZ   r  rÇ  rÈ  rð   r   r-   r-   r.   Ú
test_pstf2j  s4    ,

2
rË  c               
   C   sŒ  t  ddddgddddgdddd	gdd
ddgg¡} t  dddgdddgdddgg¡}ttƒD �](\}}|dk r¬t  ddddgddddgdd d!d"gd#d$d%d&gg¡}| |¡}nZt jd'd(d)gd*d+d,gd-d.d/gg|d0�}|t  d1d2d3gd4d5d6gd7d8d9gg¡d: 7 }| |¡}td;|d0�}||ƒ\}}}}	}
}|dk �r\t|  |¡|d d …d f | | d<d=d>� q\t| |¡|d d …d f | | d<d=d>� q\d S )?Ng      ä?r™   g�1w-!¤?gÃdª`TRÛ¿g³êsµûá¿rb  gësµûËâ?g2æ®%äƒ®¿g,eâXá¿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Á¿rF   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   rt  r  )r(   rr   r±   r²   r*   r$   r   )Údesired_realÚdesired_cplxr¶   r,   rF  rÍ  r'  rw   ZrowcndZcolcndÚamaxrZ   r-   r-   r.   Ú
test_geequ’  sd    


ýþþþú



ýþþþþ

  ÿ  ÿrÑ  c            
         s¾   t  ddddddddddg
¡} ttƒD ]’\}}t jd|d�}||dk rJdnd	ƒ‰ t j‡ fd
d„tddƒD ƒ|d�}|t  t  |¡¡7 }td|d�}||ƒ\}}}}	t	t  
|¡ t¡| ƒ q&d S )Nr   rq   rÙ   rþ   rh   r•   rF   r™   r&   c                    s   g | ]}ˆ d |  ‘qS )rš   r-   r  ©r<  r-   r.   r
  Å  s     ztest_syequb.<locals>.<listcomp>éûÿÿÿrI   Úsyequb)r(   rr   r±   r²   r
   rô   Zrot90rò   r$   r   Úlog2r*   rÂ   )
Zdesired_log2sr¶   r,   rF  re   rÔ  rÆ   ÚscondrÐ  rZ   r-   rÒ  r.   Ú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  |¡dddddddddddgƒ d S )NrF   rI   iê  rM   rE   )r  r&   r   rK  rb  éüÿÿÿrÓ  rJ   ù                i   ©rI   rI   y              0@)rI   r   rZ  rÙ   rq   )r(   rò   r   r   Zzheequbr   r   rÕ  r‚   rL  Zcheequbr*   Ú	complex64)rF  rÆ   rÖ  rÐ  rZ   r-   r-   r.   Ú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ß   rh   r&   rF   Úgetc2r•   Úgesc2r   ©rë   )Zoverwrite_rhsrH   ro   )	r(   r)   r   r   r±   r²   r*   r$   r   )r¸   rÎ  rÏ  r¶   r,   rF  rv   rÞ  rß  Zluri  ZjpivrZ   r{   rN   r-   r-   r.   Útest_getc2_gesc2â  s6    
 



 ÿ
 ÿrá  rà   )rJ   rI   rÛ  ÚjobarJ   ÚjoburH   ÚjobvÚjobrrE   Ú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•   rF   rE   rÙ   rþ   r   )râ  rã  rä  rå  Újobtræ  NF)rê   r+  )r   r(   r´   rµ   r/   r$   r"  rÛ   rÜ   r   r   r   rò   r:  rk   Úidentityrl  Zmatrix_rankZcount_nonzero)rà   r,   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_jobvÚexit_statusÚsvar2  rË   rÄ   rÅ   rZ   Úsigmar-   r-   r.   Ú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   ©rE   rE   ©rE   r6  rî   rh   rF  N)r$   r   r+   r(   rr   r   ÚsinrL  r˜  r*   Zasfortranarrayrk   r;  r   )r,   rç  rë  r2  rË   rÄ   rÅ   rZ   rF  ZAcr5   r-   r-   r.   Útest_gejsv_edge_argumentsm  s.    



rñ  ÚkwargsrM   rè  c                 C   s.   t jdtd�}tdtd�}tt||f| Ž dS )z-Test invalid job arguments raise an Exception)rF   rF   r•   rç  Nr  )rò  rF  rç  r-   r-   r.   Ú test_gejsv_invalid_job_arguments‘  s    
ró  zA,sva_expect,u_expect,v_expectg)\�Âõ(@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^  g×£p=
×ã?g�Âõ(\�Àr`  g�Âõ(\�Àg cîZBþ#@gI.ÿ!ýv@g?ÆÜµõ?ra  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Åþ²å?gfˆ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.
    rt  rç  r•   r+  N)r$   r,   r   )rF  Z
sva_expectZu_expectZv_expectrð   rç  rë  r2  rË   rÄ   rÅ   rZ   r-   r-   r.   Útest_gejsv_NAG   s    rô  c           !   	   C   s\  t dƒ d}dt | ¡j }t|d f| d�}t|f| d�}t|d f| d�}| ¡ | ¡ | ¡ g}t |¡t |d¡ t |d¡ }tj |¡}|| }	t	d| d�\}
}|
|||ƒ\}}}}}}t
||d ƒ t
||d ƒ t
||d	 ƒ t |d¡t |d¡ t |d	¡ }tj|| d�}t|ƒD ]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k�r&d}|j| }nd}| ¡ j| }||||||||d�\}}t|||d
� ttƒ� |
|d d… ||ƒ W 5 Q R X ttƒ� |
||d d… |ƒ W 5 Q R X ttƒ� |
|||d d… ƒ W 5 Q R X ttƒ�" |
|d |d d… |d ƒ W 5 Q R X d|d< d|d< |
|||ƒ\}}}}}} tj ||d  dkd ||d  ¡¡ d S )Nrß   rh   rî   rE   r•   rq   ©ÚgttrfÚgttrsr   rF   r+  rk   rn   rŒ  z3?gttrf: _d[info-1] is {}, not the illegal value :0.)r   r(   r´   rµ   r/   r;  rò   r)   r   r$   r   r
   r±   r   r³   rk   r:  rÛ   r  rÜ   Útestingr   r  )!r,   r¸   rð   Údure   ÚdlÚdiag_cpyrF  r{   rv   rö  r÷  Ú_dlÚ_dÚ_duÚdu2ri  rZ   r  r   rú   r·   rÅ  Zb_cpyÚx_gttrsrx   Zb_transZ__dlZ__dZ__duZ_du2Z_ipivÚ_infor-   r-   r.   Útest_gttrf_gttrsÂ  sf    "$$0$





&
ÿÿr  z1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, xgÍÌÌÌÌÌ @rb  gffffffþ?rž   rç   g      ÀgÍÌÌÌÌÌì¿gffffff@g333333@gÍÌÌÌÌÌ@r�   g      ÀrÓ  rK   éúÿÿÿgÏÜCÂ÷>ð¿rq   rL   rF   rG   rI   gš™™™™™@gffffff@g      à¿gš™™™™™%@gÍÌÌÌÌÌ@gš™™™™™	Àr   gffffff&Àgš™™™™3@rÙ  rþ   rÙ   y       @      ð¿y       @      ð?y      ð¿      ð?y      ð?      ð¿yÍÌÌÌÌÌô¿ÍÌÌÌÌÌô?yÍÌÌÌÌÌô¿ffffff
@y333333Ó¿333333@yffffff
ÀÍÌÌÌÌÌô?y      ð?       Ày      ð?      ð?y       @      Ày ‘~û:põ¿ffffffÒ?y333333@      Àyš™™™™™@š™™™™™@y333333@3333332@yš™™™™™À333333Àyffffff-Àffffff#@y      À333333ã¿yfffffæ?@ÍÌÌÌÌÌÀy333333Àš™™™™™"@y      ð¿š™™™™™ù?y      Àffffff(@y      @      ð¿y      ð?       @y      @      @y      ð¿       Ày       @       Àc	                 C   s‚   t d| d | d fƒ\}	}
|	||| ƒ\}}}}}}t||ƒ t||ƒ t||dd� t||ƒ |
||||||ƒ\}}t||ƒ d S )Nrõ  r   rt  r+  )r$   r   )rù  re   rú  Zdu_expZd_expZdu2_expZipiv_exprv   r{   rö  r÷  rü  rý  rþ  rÿ  ri  rZ   r   r-   r-   r.   Ú0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csf  s    2


r  )rG   rK   )rK   rG   c                 C   s2   t d| d�}|\}}|||d�\}}t|dƒ d S )NÚgeqrfp_lworkr•   rÓ   r   rÔ   )r,   r+   r  r·   r¸   r—   rZ   r-   r-   r.   Útest_geqrfp_lwork^  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� t |
d¡t t |¡¡ }t |	¡}t||| | ¡ j |d� t|f|ƒ}|| }td|d�}||	|
 ¡ |ƒ\}}t
|d	d |¡d� t|||d� d S )Nrß   rî   rh   rH   rE   rq   Úpttrfr•   r   zpttrf: info = {}, should be 0)Úerr_msgr+  Úpttrszpttrs: info = {}, should be 0)r   r(   r´   rµ   r/   rò   r:  r;  r$   r   r   r  r   r   ru   rk   )Úddtyper,   rð   r¸   re   rP  rF  rû  r  rý  Ú_erZ   r   r®  r{   rv   r	  Ú_xr-   r-   r.   Útest_pttrf_pttrsg  s*    (
r  c                 C   s`   d}t d|d�}t|f| ƒd }t|d f|ƒ}tt||d d… |ƒ tt|||d d… ƒ d S )Nrh   r  r•   rF   rE   rq   )r$   r/   rÛ   r  )r
  r,   r¸   r  re   rP  r-   r-   r.   Ú*test_pttrf_pttrs_errors_incompatible_shape˜  s    r  c           	      C   s    d}t d|d�}t|f| ƒd }t|d f|ƒ}d|d< d|d< |||ƒ\}}}t||d  dd ||d  ¡ƒ t|f| ƒ}|||ƒ\}}}t|dkdƒ d S )	Nrh   r  r•   rF   rE   r   z3?pttrf: _d[info-1] is {}, not the illegal value :0.z2?pttrf should fail with non-spd matrix, but didn't)r$   r/   r   r  r   )	r
  r,   r¸   r  re   rP  rý  r  rZ   r-   r-   r.   Ú'test_pttrf_pttrs_errors_singular_nonSPD¤  s    
ÿÿr  z%d, e, d_expect, e_expect, b, x_expectrh   é   r¥   r}  é   gKÈ=›Uå¿é   éA   é   g      @é)   é.   é   y      0@      0@y      2@      "Ày      ð?      Ày      P@      0@y      0À      @Ày     @W@      O@y     €N@     €PÀy     €S@      TÀy     ÀQ@     €RÀy      ,@      ;Ày     €A@      .@y      À       Àc                 C   s¢   d}t d|d d�}|| |ƒ\}}	}
t|||d� t|	||d� t d|d d�}|||	 ¡ |ƒ\}}
t|||d� |jtkrž|||	|dd�\}}
t|||d� d S )	Nrt  r  r   r•   r+  r	  rE   rZ  )r$   r   r:  r,   r'   )re   rP  Úd_expectZe_expectrv   Zx_expectrð   r  rý  r  rZ   r	  r  r-   r-   r.   Útest_pttrf_pttrs_NAG¹  s    
r  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 )NrE   rH   rF   rq   )r/   r(   rò   r   r:  rk   r   )r,   Úrealtyper¸   Ú	compute_zZA_eigZvrre   rP  ZtrirF  Úzr-   r-   r.   Úpteqr_get_d_e_A_zã  s     """r  zdtype,realtyper  c                 C   sÖ   t dƒ dt | ¡j }td| d�}d}t| |||ƒ\}}}}	||||	|d�\}
}}}t|dd |¡ƒ tt 	t
|ƒd ¡t 	|
¡|d	� |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•   rh   ©re   rP  r  r  r   zinfo = {}, should be 0.r+  N)r   r(   r´   rµ   r$   r  r   r  r   Úsortr   r:  rk   ré  rò   )r,   r  r  rð   r  r¸   re   rP  rF  r  Úd_pteqrÚe_pteqrÚz_pteqrrZ   r-   r-   r.   Ú
test_pteqr	  s     
"ÿ ÿr$  c                 C   sZ   t dƒ td| d�}d}t| |||ƒ\}}}}||d |||d�\}	}
}}|dksVt‚d S )Nrß   r  r•   rh   rH   ©r  r  r   ©r   r$   r  r?   ©r,   r  r  r  r¸   re   rP  rF  r  r!  r"  r#  rZ   r-   r-   r.   Útest_pteqr_error_non_spd#	  s    r(  c           	      C   sŠ   t dƒ td| d�}d}t| |||ƒ\}}}}tt||d d… |||d� tt|||d d… ||d� |r†tt||||d d… |d� d S )Nrß   r  r•   rh   rq   r%  )r   r$   r  rÛ   r  )	r,   r  r  r  r¸   re   rP  rF  r  r-   r-   r.   Ú"test_pteqr_raise_error_wrong_shape2	  s    r)  c                 C   sf   t dƒ td| d�}d}t| |||ƒ\}}}}d|d< d|d< |||||d�\}	}
}}|dksbt‚d S )Nrß   r  r•   rh   r   r%  r&  r'  r-   r-   r.   Útest_pteqr_error_singularA	  s    r*  zcompute_z,d,e,d_expect,z_expectg¤p=
×£@rÌ  gq=
×£pñ?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.
    rt  r  r•   rE   rq   r  r+  N)r$   r,   r(   rò   r   r‚   )r  re   rP  r  Zz_expectrð   r  r  rý  r  Z_zrZ   r-   r-   r.   Útest_pteqr_NAG_f08jgfP	  s    "r+  Úmatrix_size)rK   rJ   ©rJ   rJ   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)rf   r—   r   r¦   r  rq   )r(   r)   r   r´   rµ   r$   r/   r   r   r   r
   r+   r:  rk   r   Úallrò   rQ   r   rõ   )r,   r,  r§   rð   r/  Zgqrr·   r¸   rF  Zqr_Arf   rZ   r'  Zqqrr¹  Z
A_negativeZr_rq_negZq_rq_negZrq_A_negZtau_negZinfo_negr-   r-   r.   Útest_geqrfpi	  s6    
"ÿ(ÿr1  c                  C   s(   t  g ¡} td| jd�}tt|| ƒ d S )Nr/  r•   )r(   rr   r$   r,   rÛ   rÜ   )ZA_emptyr/  r-   r-   r.   Ú#test_geqrfp_errors_with_empty_array«	  s    
r2  ÚdriverZ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 n8 tk
rœ } zt d | | |¡¡ W 5 d }~X Y nX d S )	Né°  r5  Ú_lworkr   r•   rE   rZ  ú({}_lwork raised unexpected exception: {}©r³   r'   r$   r    rÜ   r7   Zfailr  ©r4  r3  r¸   r,   Zsc_dlwZdz_dlwrP  r-   r-   r.   Útest_standard_eigh_lworks²	  s     ÿr<  Ú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 n8 tk
rœ } zt d	 | | |¡¡ W 5 d }~X Y nX d S )
Nr7  r5  r8  r   r•   rE   r   r”  r9  r:  r;  r-   r-   r.   Útest_generalized_eigh_lworksÁ	  s     ÿr>  Údtype_r·   rî   rÂ  c                 C   sx   t dƒ td|ƒ}|| }| tkr&dnd}|d }t|| d�}t||||ƒ}|dkrX|n|f}tdd„ |D ƒƒstt‚d S )	Nr‘   r   ÚorÚunÚ	csd_lworkr•   c                 S   s   g | ]}|d k‘qS rì   r-   r  r-   r-   r.   r
  Ü	  s     z*test_orcsd_uncsd_lwork.<locals>.<listcomp>)r   r   r³   r$   r    r0  r?   )r?  r·   rU   r¹  r4  Údlwr­  Úlwvalr-   r-   r.   Útest_orcsd_uncsd_lworkÑ	  s    
rE  c              
   C   s  d\}}}| t k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|	Ž\
}
}}}}}}}}}|d	ksôt‚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)r.  éP   éª   r@  rA  ÚcsdrB  r•   r—   Zlrworkr   r™   rK  g     ˆÃ@r  )r³   r!   Zrvsr"   r$   r    Údictr\  r?   r   r  r(   r   rô   Úcosrð  r   r´   rµ   )r?  r·   rU   r¹  r4  ÚXÚdrvrC  rD  ZlwvalsZcs11Zcs12Zcs21Zcs22ÚthetaÚu1Úu2Zv1tZv2trZ   r  ZVHr'  Zn11Zn12Zn21Zn22ÚSÚonerú   ZXcr-   r-   r.   Útest_orcsd_uncsdß	  sJ    
ÿÿPÿ

.$*,&rR  Ú
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kr d	q¦d
nd}|r¶|
 ¡ j	n|
| }| 
¡ | 
¡ |	 
¡ | 
¡ g}|dkrî||||	ƒndgd \}}}}}}||||	||||||||d�}|\
}}}}}}}}}}t|dkd |¡ƒ t||d ƒ t||d ƒ t|	|d ƒ t||d ƒ t|||d� tt|dƒdk	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•   rh   rE   rq   rF   rk   rn   r  r–  NrJ   ©rT  rx   ÚdlfÚdfÚdufrÿ  ri  r   z ?gtsvx info = {}, should be zerorG   r+  Ú__len__Tú rcond should be scalar but is {}z!ferr.shape is {} but shoud be {},z!berr.shape is {} but shoud be {},)r   r(   r´   rµ   r$   r/   rò   r³   r:  rk   r;  r   r  r   r   rŒ   r+   ) r,   rS  rT  rð   rV  rö  r¸   rú  re   rù  rF  r{   rx   rv   Z
inputs_cpyÚdlf_Údf_Úduf_Údu2f_Úipiv_Úinfo_Ú	gtsvx_outrX  rY  rZ  Údu2fri  Úx_solnro  ÚferrÚberrrZ   r-   r-   r.   Ú
test_gtsvx
  sJ    "ÿ  ÿÿ ÿ ÿrh  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krŒdnd	}|rž|	 ¡ jn|	|
 }|d
krº||||ƒnd gd \}}}}}}||||||||||||d�}|\
}}}}}}}}}}|dk�rZd|d< d|d< |||||ƒ}|\
}}}}}}}}}}|dk�sÂtdƒ‚nh|d
k�rÂd|d< d|d< d|d< |||||||||||d�
}|\
}}}}}}}}}}|dk�sÂtdƒ‚d S )Nrß   rU  r•   rh   rE   rq   rF   rk   rn   r–  rJ   rW  r  r   z&info should be > 0 for singular matrix)rT  rX  rY  rZ  rÿ  ri  )	r   r$   r/   r(   rò   r³   r:  rk   r?   )r,   rS  rT  rV  rö  r¸   rú  re   rù  rF  r{   rx   rv   r]  r^  r_  r`  ra  rb  rc  rX  rY  rZ  rd  ri  re  ro  rf  rg  rZ   r-   r-   r.   Útest_gtsvx_error_singularK
  sD    "ÿ  ÿ

 ÿri  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k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ß   rU  r•   rh   rE   rq   rF   rk   rn   r–  rJ   r  rW  )r   r$   r/   r(   rò   r³   r:  rk   rÛ   r  rÜ   )r,   rS  rT  rV  rö  r¸   rú  re   rù  rF  r{   rx   rv   r]  r^  r_  r`  ra  rb  r-   r-   r.   Ú"test_gtsvx_error_incompatible_size~
  sª    "ÿ
     þ     þ     þ     þ  
   þ   
  þ   
  þ    
 þrj  zdu,d,dl,b,xc              
   C   sB   t d|jd�}|||| |ƒ}|\
}}}	}
}}}}}}t||ƒ d S )NrV  r•   ©r$   r,   r   )rù  re   rú  rv   r{   rV  rc  rX  rY  rZ  rd  ri  re  ro  rf  rg  rZ   r-   r-   r.   Útest_gtsvx_NAG±
  s    rl  zfact,df_de_lambdac                 C   s   t d|jd�| |ƒS ©Nr  r•   ©r$   r,   ©re   rP  r-   r-   r.   Ú<lambda>Ô
  s
   ÿ ÿrp  c                 C   s   dS ©N)NNNr-   ro  r-   r-   r.   rp  Ö
  ó    c                 C   sº  t dƒ dt | ¡j }td| d�}d}t|f|ƒd }t|d f| ƒ}t |¡t |d¡ t t |¡d¡ }	t|d	f| d�}
|	|
 }|||ƒ\}}}| ¡ | ¡ | ¡ g}|||||||d
�\}}}}}}}t	||d ƒ t	||d ƒ t	||d	 ƒ t
|dkd |¡ƒ t|
|ƒ t |d¡t t |¡¡ }t |¡}t|	|| t |¡j |d� t|dƒ�rvt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•   rI   rH   rE   rq   rF   ©rT  rY  Úefr   zinfo should be 0 but is {}.r+  r[  r\  )rF   z#ferr.shape is {} but shoud be ({},)z#berr.shape is {} but shoud be ({},)N)r   r(   r´   rµ   r$   r/   rò   r:  r;  r   r   r  r   r   r   rk   rŒ   r?   r+   )r,   r  rT  Údf_de_lambdarð   rs  r¸   re   rP  rF  re  rv   rY  ru  rZ   rû  r{   ro  rf  rg  r   r®  r-   r-   r.   Ú
test_ptsvxÐ
  sD    (
 ÿ

ÿ ÿ ÿrw  c                 C   s   t d|jd�| |ƒS rm  rn  ro  r-   r-   r.   rp    s
   ÿ ÿc                 C   s   dS rq  r-   ro  r-   r-   r.   rp    rr  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ß   rs  r•   rI   rH   rE   rq   rF   rt  )	r   r$   r/   r(   rò   r:  rÛ   r  rÜ   )r,   r  rT  rv  rs  r¸   re   rP  rF  re  rv   rY  ru  rZ   r-   r-   r.   Útest_ptsvx_error_raise_errors  s    (  rx  c                 C   s   t d|jd�| |ƒS rm  rn  ro  r-   r-   r.   rp  *  s
   ÿ ÿc                 C   s   dS rq  r-   ro  r-   r-   r.   rp  ,  rr  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Øt‚t|f|ƒ}||||
ƒ\}}}}}}}|d
k�r||k�sht‚nP|||ƒ\}}}d
|d
< d
|d
< ||||
|||d�\}}}}}}}|d
k�sht‚d S )Nrß   rs  r•   rI   rH   rE   rq   rF   r  r   rG   rt  )r   r$   r/   r(   rò   r:  r?   )r,   r  rT  rv  rs  r¸   re   rP  rF  re  rv   rY  ru  rZ   r{   ro  rf  rg  r-   r-   r.   Útest_ptsvx_non_SPD_singular&  s2    (

 ÿry  zd,e,b,xc                 C   s6   t d|jd�}|| ||ƒ\}}}}}	}
}t||ƒ d S )Nrs  r•   rk  )re   rP  rv   r{   rs  rY  ru  Zx_ptsvxro  rf  rg  rZ   r-   r-   r.   Útest_ptsvx_NAGR  s    rz  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î   )rh   rH   r•   rœ   c                    s    g | ]}t |ˆ ƒD ]}|‘qqS r-   ©rô   ©r	  Úyr{   r  r-   r.   r
  |  s       z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>c                    s    g | ]}t |ˆ ƒD ]}|‘qqS r-   r{  r|  r  r-   r.   r
  }  s       c                 S   s   g | ]}t |ƒD ]}|‘qqS r-   r{  r|  r-   r-   r.   r
    s     
  rE   c                 S   s"   g | ]}t |ƒD ]}|d  ‘qqS rï  r{  r|  r-   r-   r.   r
  €  s     
  )ÚppsvÚpptrfÚpptrsÚpptriÚppconr?  r@  rZ  r   r  )rj  rä   rk  )r   r(   r´   rµ   r/   r:  rk   r
   rô   r$   r   r   r   r   r   rl  r   r   r‚   rm  )r,   rä   rð   r¹   rS   rv   rŸ  Zapr~  r  r€  r�  r‚  ZulrZ   ZaulZuliZaulir{   ZbxZxvrj  ro  r-   r  r.   Ú!test_pptrs_pptri_pptrf_ppsv_ppconp  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kr’t|t 	|¡d|d� t|| | 
¡ j |d|d� |||ddƒ}t|d
 dƒ |d }|d }| tkrút|t 	|¡d|d� t|| | 
¡ j |d|d� t|d |	d|d� d S )Nr‘   rî   rh   r•   )ÚgeesÚtrexcc                 S   s   d S r€  r-   ©r{   r-   r-   r.   rp  ª  rr  z!test_gees_trexc.<locals>.<lambda>Frà  rq   r   rþ   r-  r  rK   rE   rÙ   r}   )r   r(   r´   rµ   r/   r$   r   r'   r   r   r:  rk   )
r,   rð   r¸   rS   r„  r…  re  r·  r  Úd2r-   r-   r.   Útest_gees_trexc   s*    rˆ  zt, expect, ifst, ilstr!  g)\�Âõ(¼¿ç{®Gáz„?g¸…ëQ¸ž?rK  gš™™™™™¹¿r]  gffffffÖ?gÍÌÌÌÌÌä¿gš™™™™™É?gôlV}®ä¿gVŸ«­Ø_¶?gî|?5^ºÉ?g»¸�ðÐ?gÐÕVì/»·?g;ßO�—nÖ?ggÕçj+ö‡¿y      À      Ày
×£p=
×?
×£p=
×¿yR¸…ëQÈ¿¸…ëQ¸Þ?y)\�Âõ(ì?      Ð¿rÚ  y      À       @y¸…ëQ¸ž¿
×£p=
ç¿yq=
×£pÍ¿¤p=
×£À?y       @      ð¿y®Gázî?ö(\�Âõà?y      @      Ày¡ø1æ®%Ä¿³q¬‹Ûæ?yësµûËÆ??ÆÜµ„|È¿yHáz®GÙ??ÆÜµØ?y«ÏÕVì/ñ?ö—Ý“‡…Â?yj¼t“Ð?vàœ¥½Õ¿yB>èÙ¬úÌ?=›UŸ«­ì?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.
    rt  r…  r•   r   )Zwantqrq   r+  N)r$   r,   r   r   )r·  ZifstZilstÚexpectrð   r…  re  r-   r-   r.   Útest_trexc_NAGÅ  s    r‹  c                 C   s.  | t jkrtjdkrt d¡ tdƒ t  | ¡jd }d}t	||g| d�}t	||g| d�}t
d| d�\}}|dd	„ ||d
d
d�}t|d dƒ |d }|d }	|d }
|d }|d |	d  }|d |	d  }| tk�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k�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ú8gges[float32] broken for OpenBLAS on macOS, see gh-16949r‘   rî   rh   r•   )ÚggesÚtgexcc                 S   s   d S r€  r-   r†  r-   r-   r.   rp  û  rr  z!test_gges_tgexc.<locals>.<lambda>F©rë   Zoverwrite_brq   r   rE   rÙ  rþ   r}   r-  r  rK   rF   rG   rî  )r(   rA  ÚsysÚplatformr7   Úxfailr   r´   rµ   r/   r$   r   r'   r   r   r:  rk   )r,   rð   r¸   rS   rv   rŽ  r�  re  rÆ   r·  r¹  r  Úd1r‡  r-   r-   r.   Útest_gges_tgexcí  sD    


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kr”t|t 	|¡d|d� t|	| |	 
¡ j |d|d� t |¡}d|d< t|||ƒ}| tkrê||||	|d�}n||||	||d d�}t|d
 dƒ |d }|d }	| tk�r>t|t 	|¡d|d� t|	| |	 
¡ j |d|d� t|d |
d|d� d S )Nr‘   rî   rh   r•   )r„  ÚtrsenÚtrsen_lworkc                 S   s   d S r€  r-   r†  r-   r-   r.   rp  +  rr  z!test_gees_trsen.<locals>.<lambda>Frà  rq   r   rþ   r-  r  rE   rJ   r–   ©r—   Zliworkr}   )r   r(   r´   rµ   r/   r$   r   r'   r   r   r:  rk   r   r    )r,   rð   r¸   rS   r„  r–  r—  re  r·  r  r‡  Úselectr—   r-   r-   r.   Útest_gees_trsen   s:     ÿ

rš  z*t, q, expect, select, expect_s, expect_sepg/Ý$�•é?g“©‚QI½¿gú~j¼t“x?gŒJê4¡?g5ï8EGr¹¿gGrùé·Ï?gyX¨5Í;Ö?gÉå?¤ß¾ä¿gtµûËîÉ?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÷äç?gï8EGrù¿?gÍÌÌÌÌÌÜ?gìQ¸…ëÁ¿gÃõ(\�ÂÅ¿g
×£p=
·?gìQ¸…ë±?g)\�Âõ(Ü¿g…ëQ¸Õ¿g¸…ëQ¸ž¿gÃõ(\�ÂÅ?g{®GázÔ¿g¤p=
×£À¿g)\�Âõ(¼?g      ü?gÃõ(\�Â	@yq¬‹Ûh ÀäÉåÿÀyfˆc]ÜF×?õ¹ÚŠýe×¿yªñÒMbÈ¿Â&S£Þ?yé&1¬ì?äÉå?Ð¿y      À?5^ºI @y�äòÒoŸ¿¾0™*ç¿yZd;ßOÍ¿‘~û:pÎÀ?yx$(þ@4€·@‚âï¿yÀ[ Añí?¥½Á&á?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krB||| ||
d�}n||| ||
|
d d�}t|d d	ƒ |d	 } |d }| jtk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.
    rt  r‰  )r–  r—  r•   r–   rE   r˜  rq   r   rH   rI   rJ   r+  N)r$   r,   r    r'   r   r   r:  rk   )r·  r¹  r™  rŠ  Zexpect_sZ
expect_seprð   Zatol2r–  r—  r—   re  rÆ   Úsepr-   r-   r.   Útest_trsen_NAGN  s*    0 ÿ



rœ  c                 C   sf  | t jkrtjdkrt d¡ tdƒ t  | ¡jd }d}t	||g| d�}t	||g| d�}t
d| d�\}}}|dd	„ ||d
d
d�}t|d dƒ |d }	|d }
|d }|d }|	d |
d  }|	d |
d  }| tk�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k�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î   rh   r•   )rŽ  ÚtgsenÚtgsen_lworkc                 S   s   d S r€  r-   r†  r-   r-   r.   rp  ¨  rr  z!test_gges_tgsen.<locals>.<lambda>Fr�  rq   r   rE   rÙ  rþ   r}   r-  r  rJ   r–   iùÿÿÿr  rî  )r(   rA  r‘  r’  r7   r“  r   r´   rµ   r/   r$   r   r'   r   r   r:  rk   r   r    )r,   rð   r¸   rS   rv   rŽ  r�  rž  re  rÆ   r·  r¹  r  r”  r‡  r™  r—   r-   r-   r.   Útest_gges_tgsen™  sR    
 ÿ


rŸ  )r   )Žr‘  Ú	functoolsr   Znumpy.testingr   r   r   r   r   r   r7   r	   rÛ   Únumpyr(   r
   r   r   r   r   r   r   r   Znumpy.randomr   r   r   Zscipy.linalgr   r3   r   r   r   r   r   r   r   r   r   r   Zscipy.linalg.lapackr    Zscipy.statsr!   r"   Zscipy.sparseÚsparser  r#   r1   ÚImportErrorr$   Zscipy.linalg.blasr%   rA  r÷   r³   rÜ  Z
complex128r'   r²   r/   rC   rD   rŠ   r�   r  r  rÕ   rÖ   rÞ   ræ   rý   r(  r3  r>  rB  rC  rU  rf  rp  rx  r|  rˆ  r�  r’  rœ  r   r¢  r¥  r§  rª  r°  r±  rÉ  rË  rÑ  r×  ZskipifrÝ  rá  rô   rí  rñ  ró  rr   rô  r  r  r  r\  r  r  r  r  r  r$  r(  r)  r*  r+  r1  r2  r<  r>  rE  rR  rh  ri  rj  rl  rw  rx  ry  rz  rƒ  rˆ  r‹  r•  rš  rœ  rŸ  r-   r-   r-   r.   Ú<module>   sØ   (4
` t  **DO1")::) %# ((-ÿ
e
#ûÿ





û




û


ýóÿ

\
ü
üó þ ÿÿ
ü
üîîÿ+
ÿ/ÿ
ÿ
"ÿÿú	
 
ÿÿù÷
ÿ
ÿ
ÿ
ÿ
ýüÿ
@.:00
 ÿÿû
 ÿ
ü þ÷ùÿÿ

ÿýÿ4ÿ

ÿýÿÿ

ÿýÿ%
"ÿ ÿü


ýýúúÿ.$ýý ø	ý ÿ ÿ ÿ ÿú ô÷þ2-ýýý ó ÿ ÿ ÿ ÿú ÿ ÿ ÿ ÿú ÿ ÿ ÿ ÿú çòþ*!