o
    z¨Êh›E ã                   @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z
ddl	mZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddl	mZmZmZmZ ddl	mZ ddlmZmZmZm Z m!Z! dd	l"m#Z# dd
l$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. zddl/Z	W n	 e0y“   Y nw dd„ Z1e)Z2�ddd„Z)dd„ Z3dd„ Z4dd„ Z5h d£Z6G dd„ dƒZ7dd„ Z8e
j9 :d¡ g Z;e;e8de7dedd gd!d"gged#�ed dged#�ƒe7d$edd gd!d"gged#�ed dged#�ƒe7d%edd gd!d"gged#�eg d&¢g d'¢ged#�ƒe7d(ed)d*gd+d,gged#�ed-d)ged#�ƒe7d.ed)d*gd+d,gged#�ed-d)ged#�ƒe7d/ed)d*gd+d,gged#�eg d0¢g d1¢ged#�ƒe7d2e
j<d3ed#�e
j<d4ed#�d5hd6�e7d7e
j9 =d8d8¡e
j9 =d8¡ƒe7d9e
j9 =d:d:¡e
j9 =d:¡ƒe7d;d:d<gd=d>ggd<d:gƒg
ƒ7 Z;e;e8d?e7d@eg dA¢g d'¢ged#�ed dged#�ƒe7dBedd gd!d"gdCdDgged#�eg dE¢ed#�ƒe7dFeg dA¢g d'¢ged#�ed dged#�ƒe7dGedd gd!d"gdCdDgged#�eg dE¢ed#�ƒe7dHeg dI¢g dJ¢ged#�ed-d)ged#�ƒe7dKedLdMgdNdOgdPdQgged#�eg dR¢ed#�ƒe7dSeg dI¢g dJ¢ged#�ed-d)ged#�ƒe7dTedLdMgdNdOgdPdQgged#�eg dR¢ed#�ƒe7dUeg dI¢g dJ¢ged#�ed-d)gdVdWgged#�ƒe7dXedLdMgdNdOgdPdQgged#�ed-d)gdVdWgdVdWgged#�ƒe7dYe
j9 =d8dZ¡e
j9 =d8¡ƒe7d[e
j9 =d:d\¡e
j9 =d:¡ƒe7d]e
j9 =d\d:¡e
j9 =d\¡ƒe7d^e
j9 =dd>¡e
j9 =d¡d5hd6�e7d_e
j9 =d>d¡e
j9 =d>¡d5hd6�gƒ7 Z;e;e8d`e7daedd gd dgged#�dƒe7dbedd gd dgged#�dƒe7dcedd*gddd:gged#�dƒe7deedd*gddd:gged#�dƒe7dfe
j<d3ed#�dd5hd6�e7dgd:d<gd<d:ggdƒe7dhedd gd dggƒdƒe7die
j9 =d:d:¡dƒgƒ7 Z;djdk„ Z>e;e>ƒ 7 Z;dldm„ Z?dndo„ Z@e;e@ƒ 7 Z;G dpdq„ dqƒZAG drds„ dseAƒZBG dtdu„ dueAƒZCG dvdw„ dweAƒZDG dxdy„ dyeAƒZEG dzd{„ d{eAƒZFG d|d}„ d}eAƒZGd~d„ ZHG d€d�„ d�eBeEƒZIG d‚dƒ„ dƒeIƒZJG d„d…„ d…eBeEƒZKG d†d‡„ d‡eKƒZLG dˆd‰„ d‰eBeEƒZMG dŠd‹„ d‹eMƒZNG dŒd�„ d�eBeEƒZOG dŽd�„ d�eOƒZPG d�d‘„ d‘ƒZQG d’d“„ d“eBeEƒZRG d”d•„ d•eReQƒZSG d–d—„ d—eDeGƒZTG d˜d™„ d™eTeQƒZUG dšd›„ d›eBeEƒZVG dœd�„ d�eVƒZWG dždŸ„ dŸeBeCeEeFƒZXG d d¡„ d¡eXƒZYG d¢d£„ d£eDeGƒZZG d¤d¥„ d¥eZƒZ[d¦d§„ Z\G d¨d©„ d©eBeEƒZ]G dªd«„ d«e]ƒZ^G d¬d­„ d­eBeCƒZ_G d®d¯„ d¯e_ƒZ`eja bd°d±d²„ d³D ƒ¡G d´dµ„ dµƒƒZcG d¶d·„ d·eDeGƒZdG d¸d¹„ d¹ƒZeG dºd»„ d»eDeGƒZfG d¼d½„ d½ƒZgG d¾d¿„ d¿ƒZhG dÀdÁ„ dÁehƒZiG dÂdÃ„ dÃehƒZjG dÄdÅ„ dÅejeiƒZkG dÆdÇ„ dÇƒZlG dÈdÉ„ dÉehƒZmG dÊdË„ dËehƒZnG dÌdÍ„ dÍehƒZoG dÎdÏ„ dÏekemƒZpG dÐdÑ„ dÑekenƒZqG dÒdÓ„ dÓekeoƒZrG dÔdÕ„ dÕƒZsdÖd×„ ZtG dØdÙ„ dÙƒZuG dÚdÛ„ dÛƒZvG dÜdÝ„ dÝƒZwdÞdß„ Zxejajye.dàdá�dâdã„ ƒZzejajye {¡ d:kdädá�dådæ„ ƒZ|ejajye.dçdá�ejaj}dèdé„ ƒƒZ~G dêdë„ dëƒZG dìdí„ díƒZ€G dîdï„ dïƒZ�dðdñ„ Z‚ejajƒdòdá�dódô„ ƒZ„ejaj…e- dõdá�död÷„ ƒZ†dødù„ Z‡dúdû„ Zˆdüdý„ Z‰dþdÿ„ ZŠ�d �d„ Z‹�d�d„ ZŒ�d�d„ Z��d�d„ ZŽdS (	  z# Test functions for linalg module

é    N)ÚarrayÚsingleÚdoubleÚcsingleÚcdoubleÚdotÚidentityÚmatmul)Úswapaxes)Ú	AxisError)ÚmultiplyÚ
atleast_2dÚinfÚasarray)Úlinalg)Úmatrix_powerÚnormÚmatrix_rankÚ	multi_dotÚLinAlgError)Ú_multi_dot_matrix_chain_order)
Úassert_Úassert_equalÚassert_raisesÚassert_array_equalÚassert_almost_equalÚassert_allcloseÚsuppress_warningsÚassert_raises_regexÚHAS_LAPACK64ÚIS_WASMc                 C   s$   t | ƒt|tjƒrt |ƒu S tju S ©N)ÚtypeÚ
isinstanceÚnpÚndarray)ÚoutÚin_© r(   úP/var/www/html/env/lib/python3.10/site-packages/numpy/linalg/tests/test_linalg.pyÚconsistent_subclass#   s   ÿr*   é   é   c                 K   s8   t | ƒjjttfv r|}n|}t| |fd|i|¤Ž d S )NÚdecimal)r   Údtyper"   r   r   Úold_assert_almost_equal)ÚaÚbÚsingle_decimalÚdouble_decimalÚkwr-   r(   r(   r)   r   -   s   r   c                 C   s   t t tttt tti|  S r!   )r   r   r   r   ©r.   r(   r(   r)   Úget_real_dtype5   ó
   ÿÿr6   c                 C   s   t ttttttti|  S r!   )r   r   r   r   r5   r(   r(   r)   Úget_complex_dtype:   r7   r8   c                 C   s   | t tfv rdS dS )Ngñhãˆµøä>g•dyáý¥=)r   r   r5   r(   r(   r)   Úget_rtol?   s   r9   >   ÚsquareÚstridedÚ	hermitianÚ	nonsquareÚgeneralizedúsize-0c                   @   s*   e Zd Zeƒ fdd„Zdd„ Zdd„ ZdS )Ú
LinalgCasec                 C   s.   t t|tƒƒ || _|| _|| _t|ƒ| _dS )z¢
        A bundle of arguments to be passed to a test case, with an identifying
        name, the operands a and b, and a set of tags to filter the tests
        N)r   r#   ÚstrÚnamer0   r1   Ú	frozensetÚtags)ÚselfrB   r0   r1   rD   r(   r(   r)   Ú__init__O   s
   zLinalgCase.__init__c                 C   s   || j | j| jd� dS )zN
        Run the function `do` on this test case, expanding arguments
        ©rD   N)r0   r1   rD   )rE   Údor(   r(   r)   ÚcheckZ   s   zLinalgCase.checkc                 C   s   d| j › d�S )Nz<LinalgCase: ú>)rB   ©rE   r(   r(   r)   Ú__repr__`   s   zLinalgCase.__repr__N)Ú__name__Ú
__module__Ú__qualname__ÚsetrF   rI   rL   r(   r(   r(   r)   r@   N   s    r@   c                 C   s,   | t v sJ dƒ‚|D ]	}|j| hB |_q
|S )z^
    Add the given tag (a string) to each of the cases (a list of LinalgCase
    objects)
    zInvalid tag)Úall_tagsrD   )ÚtagÚcasesÚcaser(   r(   r)   Ú	apply_tagd   s   rU   éÒ  r:   r   ç      ð?ç       @ç      @ç      @r5   r   Údouble_2)rX   rW   rZ   )rY   rZ   ç      @r   ù      ð?       @y       @      @y      @      @y      @      @ù       @      ð?r   Ú	cdouble_2)r^   r]   y      ð?      @)y      ð?       Ày      ð?      Ày      ð?      ÀÚ0x0©r   r   ©r   r?   rG   Ú8x8é   Ú1x1é   Únonarrayé   é   é   r=   Úsingle_nsq_1)rW   rX   rY   Úsingle_nsq_2g      @r\   )rX   rW   rY   Údouble_nsq_1Údouble_nsq_2Úcsingle_nsq_1)ù      ð?      ð?ù       @       @ù      @      À)y      @      Ày      @      "@y      @       @Úcsingle_nsq_2rp   rq   rr   y      @      "Ày      @      Ày      @       @)r^   r]   rr   Úcdouble_nsq_1Úcdouble_nsq_2Úcdouble_nsq_1_2y      ð?      ð¿y       @       ÀÚcdouble_nsq_2_2Ú8x11é   Ú1x5é   Ú5x1Ú0x4Ú4x0r<   ÚhsingleÚhdoubleÚhcsingley       @      ÀÚhcdoubleÚhemptyÚ	hnonarrayÚmatrix_b_onlyÚhmatrix_1x1c                  C   sn  g } t D ]°}t|jtjƒsqt |jd|j d|j g¡}|jd u r%d }n|jjdkr/|j}nt |jd|j d|j g¡}t|j	d |||j
dhB d�}|  |¡ t |jgd d ¡ d	|jj ¡}|jd u rld }n4|jjdkrŽt |jgd d |jd
  ¡ d	|jjdd …  ¡}nt |jgd d ¡ d	|jj ¡}t|j	d |||j
dhB d�}|  |¡ q| S )Nrh   ri   rf   é   r+   Ú_tile3r>   rG   ©ri   rh   éÿÿÿÿéþÿÿÿÚ_tile213)ÚCASESr#   r0   r$   r%   r   r1   Úndimr@   rB   rD   ÚappendÚreshapeÚshape)Ú	new_casesrT   r0   r1   Únew_caser(   r(   r)   Ú_make_generalized_casesô   s6   

ÿ
$
ÿ$
ÿr”   c                 c   sà  � t | tjƒs| dfV  dS dg| j }d|d< | jdkr!d|d< | jdkr*d	|d
< tjt|ƒŽ D ]¼}dd„ t| j|ƒD ƒ}tdd„ |D ƒƒ}tj	|| j
d�}| tj¡ d¡ || }| |d< | | j¡}tt || k¡ƒ |dd dd„ |D ƒ¡ fV  | jdkr¡| jd dkr¡t| jƒ}d|d< tjjj| |d�}|dfV  | jdkrÄ| jd dkrÄt| jƒ}d|d< tjjj| |d�}|dfV  | jdkrí| jdd… dkrít| jƒ}d|d< d|d< tjjj| |d�}|dfV  q1dS )z<
    Generate cartesian product of strides for all axes
    ÚnopN©rf   )rf   ri   éüÿÿÿrŠ   rf   r‹   rh   )rf   r—   éýÿÿÿc                 S   s   g | ]
\}}t || ƒ‘qS r(   )Úabs)Ú.0r0   r1   r(   r(   r)   Ú
<listcomp>,  s    z%_stride_comb_iter.<locals>.<listcomp>c                 S   s   g | ]}t d d |ƒ‘qS r!   )Úslice)rš   Úrepeatr(   r(   r)   r›   -  s    r5   l   ï>[= .Ústride_Ú_c                 S   s   g | ]}d | ‘qS )z%+dr(   )rš   Újr(   r(   r)   r›   6  s    r   )ÚstridesÚstride_xxx_0Ústride_xxx_0_x©rf   rf   Ústride_xxx_0_0)r#   r$   r%   rŽ   Ú	itertoolsÚproductÚtupleÚzipr‘   Úemptyr.   ÚviewÚuint32ÚfillÚ	__class__r   ÚallÚjoinÚlistr¡   ÚlibÚstride_tricksÚ
as_strided)ÚxÚ
stride_setÚrepeatsÚ	new_shapeÚslicesÚxiÚsr(   r(   r)   Ú_stride_comb_iter  sL   €








€ãr¼   c               	   C   sn   g } t D ]0}t|jƒD ](\}}t|jƒD ]\}}t|jd | d | |||jdhB d�}|  |¡ qqq| S )NrŸ   r;   rG   )r�   r¼   r0   r1   r@   rB   rD   r�   )r’   rT   r0   Úa_labelr1   Úb_labelr“   r(   r(   r)   Ú_make_strided_casesK  s   
ÿýÿr¿   c                   @   s"   e Zd ZeZeƒ eƒ fdd„ZdS )ÚLinalgTestCasec                 C   sv   | j D ]5}|j|@ |krq|j|@ rqz| | j¡ W q ty8 } zd|›d�}|t ¡ 7 }t|ƒ|‚d}~ww dS )zx
        Run func on each of the cases with all of the tags in require, and none
        of the tags in exclude
        zIn test case: z

N)Ú
TEST_CASESrD   rI   rH   Ú	ExceptionÚ	tracebackÚ
format_excÚAssertionError)rE   ÚrequireÚexcluderT   ÚeÚmsgr(   r(   r)   Úcheck_cases_  s   


€ý÷zLinalgTestCase.check_casesN)rM   rN   rO   r�   rÁ   rP   rÊ   r(   r(   r(   r)   rÀ   \  s    rÀ   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚLinalgSquareTestCasec                 C   ó   | j dhddhd� d S )Nr:   r>   r?   ©rÆ   rÇ   ©rÊ   rK   r(   r(   r)   Útest_sq_casesu  ó   
ÿz"LinalgSquareTestCase.test_sq_casesc                 C   ó   | j ddhdhd� d S )Nr:   r?   r>   rÎ   rÏ   rK   r(   r(   r)   Útest_empty_sq_casesy  ó   

ÿz(LinalgSquareTestCase.test_empty_sq_casesN)rM   rN   rO   rÐ   rÓ   r(   r(   r(   r)   rÌ   s  ó    rÌ   c                   @   rË   )ÚLinalgNonsquareTestCasec                 C   rÍ   )Nr=   r>   r?   rÎ   rÏ   rK   r(   r(   r)   Útest_nonsq_cases€  rÑ   z(LinalgNonsquareTestCase.test_nonsq_casesc                 C   rÒ   )Nr=   r?   r>   rÎ   rÏ   rK   r(   r(   r)   Útest_empty_nonsq_cases„  rÔ   z.LinalgNonsquareTestCase.test_empty_nonsq_casesN)rM   rN   rO   r×   rØ   r(   r(   r(   r)   rÖ   ~  rÕ   rÖ   c                   @   rË   )ÚHermitianTestCasec                 C   rÍ   )Nr<   r>   r?   rÎ   rÏ   rK   r(   r(   r)   Útest_herm_cases‹  rÑ   z!HermitianTestCase.test_herm_casesc                 C   rÒ   )Nr<   r?   r>   rÎ   rÏ   rK   r(   r(   r)   Útest_empty_herm_cases�  rÔ   z'HermitianTestCase.test_empty_herm_casesN)rM   rN   rO   rÚ   rÛ   r(   r(   r(   r)   rÙ   ‰  rÕ   rÙ   c                   @   ó,   e Zd Zejjdd„ ƒZejjdd„ ƒZdS )ÚLinalgGeneralizedSquareTestCasec                 C   rÒ   )Nr>   r:   r?   rÎ   rÏ   rK   r(   r(   r)   Útest_generalized_sq_cases–  ó   

ÿz9LinalgGeneralizedSquareTestCase.test_generalized_sq_casesc                 C   ó   | j h d£d� d S )N>   r:   r>   r?   ©rÆ   rÏ   rK   r(   r(   r)   Útest_generalized_empty_sq_cases›  ó   z?LinalgGeneralizedSquareTestCase.test_generalized_empty_sq_casesN)rM   rN   rO   ÚpytestÚmarkÚslowrÞ   râ   r(   r(   r(   r)   rÝ   ”  ó
    
rÝ   c                   @   rÜ   )Ú"LinalgGeneralizedNonsquareTestCasec                 C   rÒ   )Nr>   r=   r?   rÎ   rÏ   rK   r(   r(   r)   Útest_generalized_nonsq_cases¢  rß   z?LinalgGeneralizedNonsquareTestCase.test_generalized_nonsq_casesc                 C   rà   )N>   r=   r>   r?   rá   rÏ   rK   r(   r(   r)   Ú"test_generalized_empty_nonsq_cases§  rã   zELinalgGeneralizedNonsquareTestCase.test_generalized_empty_nonsq_casesN)rM   rN   rO   rä   rå   ræ   ré   rê   r(   r(   r(   r)   rè      rç   rè   c                   @   rÜ   )ÚHermitianGeneralizedTestCasec                 C   rÒ   )Nr>   r<   r?   rÎ   rÏ   rK   r(   r(   r)   Útest_generalized_herm_cases®  rß   z8HermitianGeneralizedTestCase.test_generalized_herm_casesc                 C   s   | j h d£dhd� d S )N>   r<   r>   r?   ÚnonerÎ   rÏ   rK   r(   r(   r)   Ú!test_generalized_empty_herm_cases³  rß   z>HermitianGeneralizedTestCase.test_generalized_empty_herm_casesN)rM   rN   rO   rä   rå   ræ   rì   rî   r(   r(   r(   r)   rë   ¬  rç   rë   c                 C   sH   t | ƒ} | jdkrtj| j| jd�}t| jd ƒ|d< |S t| jd ƒS )Nri   r5   r‹   .r   )r   rŽ   r$   rª   r‘   r.   r   )r0   Úrr(   r(   r)   Úidentity_like_generalized¹  s   
rð   c                   @   ó   e Zd Zdd„ ZdS )Ú
SolveCasesc                 C   sj   t  ||¡}t |¡jdkr"t||d ƒd }tt ||j¡|ƒ n
t||ƒ}t||ƒ t	t
||ƒƒ d S )Nrf   ).N©.r   )r   Úsolver$   r   rŽ   r	   r   Úbroadcast_tor‘   r   r*   )rE   r0   r1   rD   rµ   Úadotxr(   r(   r)   rH   Å  s   

zSolveCases.doN©rM   rN   rO   rH   r(   r(   r(   r)   rò   Ã  ó    rò   c                   @   óB   e Zd Zej deeee	g¡dd„ ƒZ
dd„ Zdd„ Zdd	„ Zd
S )Ú	TestSolver.   c                 C   s2   t jddgddgg|d�}tt ||¡j|ƒ d S ©Nrf   ç      à?r5   )r$   r   r   r   rô   r.   ©rE   r.   rµ   r(   r(   r)   Ú
test_typesÓ  s   zTestSolve.test_typesc                 C   s®   G dd„ dt jƒ}t  d¡ ddd¡}t  d¡ |¡}t ||¡}|jdks(J ‚t  d¡ dd¡ |¡}t ||¡}|jdksAJ ‚t  d¡ dd¡ |¡}tt	tj||ƒ d S )	Nc                   @   ó   e Zd ZdS )z)TestSolve.test_1_d.<locals>.ArraySubclassN©rM   rN   rO   r(   r(   r(   r)   ÚArraySubclassÙ  ó    r  rd   rh   ©rh   rh   rj   )rh   rh   rh   rf   )
r$   r%   Úaranger�   r«   r   rô   r‘   r   Ú
ValueError)rE   r  r0   r1   Úresultr(   r(   r)   Útest_1_dØ  s   zTestSolve.test_1_dc              	   C   s  G dd„ dt jƒ}t  d¡ ddd¡}t  d¡ ddd¡ |¡}t ||¡d d …dd…d d …f }t |d d …dd…dd…f |d d …dd…d d …f ¡}t||ƒ tt	||ƒƒ t
tjtj|d d …dd…dd…f |ƒ t
ttj||d d …dd…d d …f ƒ t  d¡ ddd¡}t
ttj||ƒ t
ttj|dd… |dd… ƒ t  d¡ |¡}t ||¡d d …dd…f }t |d d …dd…dd…f |dd… ¡}t||ƒ tt	||ƒƒ t  d¡ dd¡}t
ttj||ƒ t
ttj|dd… |dd… ƒ t
ttj|d d …dd…dd…f |ƒ d S )	Nc                   @   rÿ   )z,TestSolve.test_0_size.<locals>.ArraySubclassNr   r(   r(   r(   r)   r  ê  r  r  rd   rh   r+   rf   ri   r   )r$   r%   r  r�   r«   r   rô   r   r   r#   r   r   r  ©rE   r  r0   r1   Úexpectedr  r(   r(   r)   Útest_0_sizeé  s*   "8
(& *
 *zTestSolve.test_0_sizec                 C   s  G dd„ dt jƒ}t  d¡ ddd¡}t  d¡ ddd¡ |¡}t ||¡d d …d d …dd…f }t ||d d …d d …dd…f ¡}t||ƒ tt	||ƒƒ t ||¡d d …dd…dd…f }t |d d …dd…dd…f |d d …dd…dd…f ¡}t||ƒ tt	||ƒƒ d S )	Nc                   @   rÿ   )z.TestSolve.test_0_size_k.<locals>.ArraySubclassNr   r(   r(   r(   r)   r    r  r  rj   rf   rh   r+   ri   r   )
r$   r%   r  r�   r«   r   rô   r   r   r#   r  r(   r(   r)   Útest_0_size_k
  s   ""
"8
zTestSolve.test_0_size_kN)rM   rN   rO   rä   rå   Úparametrizer   r   r   r   rþ   r  r
  r  r(   r(   r(   r)   rú   Ò  s    
!rú   c                   @   rñ   )ÚInvCasesc                 C   s0   t  |¡}tt||ƒt|ƒƒ tt||ƒƒ d S r!   )r   Úinvr   r	   rð   r   r*   )rE   r0   r1   rD   Úa_invr(   r(   r)   rH     s
   

ÿzInvCases.doNr÷   r(   r(   r(   r)   r    rø   r  c                   @   ó2   e Zd Zej deeee	g¡dd„ ƒZ
dd„ ZdS )ÚTestInvr.   c                 C   s0   t jddgddgg|d�}tt |¡j|ƒ d S rû   )r$   r   r   r   r  r.   rý   r(   r(   r)   rþ   '  s   zTestInv.test_typesc                 C   s²   G dd„ dt jƒ}t jdt jd� |¡}t |¡}t|jj	t j
u ƒ t|j|jƒ tt||ƒƒ t jdt jd� |¡}t |¡}t|jj	t ju ƒ t|j|jƒ tt||ƒƒ d S )Nc                   @   rÿ   )z*TestInv.test_0_size.<locals>.ArraySubclassNr   r(   r(   r(   r)   r  .  r  r  ©r   rf   rf   r5   ra   )r$   r%   ÚzerosÚint_r«   r   r  r   r.   r"   Úfloat64r   r‘   r#   Ú	complex64©rE   r  r0   Úresr(   r(   r)   r
  ,  s   

zTestInv.test_0_sizeN©rM   rN   rO   rä   rå   r  r   r   r   r   rþ   r
  r(   r(   r(   r)   r  &  s    
r  c                   @   rñ   )ÚEigvalsCasesc                 C   s&   t  |¡}t  |¡\}}t||ƒ d S r!   )r   ÚeigvalsÚeigr   )rE   r0   r1   rD   ÚevÚevaluesÚevectorsr(   r(   r)   rH   ?  s   
zEigvalsCases.doNr÷   r(   r(   r(   r)   r  =  rø   r  c                   @   r  )ÚTestEigvalsr.   c                 C   s`   t jddgddgg|d�}tt |¡j|ƒ t jddgddgg|d�}tt |¡jt|ƒƒ d S ©Nrf   rü   r5   rŠ   )r$   r   r   r   r  r.   r8   rý   r(   r(   r)   rþ   F  s   zTestEigvals.test_typesc                 C   s²   G dd„ dt jƒ}t jdt jd� |¡}t |¡}t|jj	t j
u ƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡}t|jj	t ju ƒ td|jƒ tt|t jƒƒ d S )Nc                   @   rÿ   )z.TestEigvals.test_0_size.<locals>.ArraySubclassNr   r(   r(   r(   r)   r  O  r  r  r  r5   ©r   rf   ra   rb   )r$   r%   r  r  r«   r   r  r   r.   r"   r  r   r‘   r#   r  r  r(   r(   r)   r
  M  ó   

zTestEigvals.test_0_sizeNr  r(   r(   r(   r)   r   E  s    
r   c                   @   rñ   )ÚEigCasesc                 C   sb   t  |¡}|j|j}}tt||ƒt |¡t |¡dd d d …f  t|j	ƒd� t
t||ƒƒ d S )N.©Úrtol)r   r  ÚeigenvaluesÚeigenvectorsr   r	   r$   r   r9   r.   r   r*   )rE   r0   r1   rD   r  r'  r(  r(   r(   r)   rH   b  s   

 þzEigCases.doNr÷   r(   r(   r(   r)   r$  `  rø   r$  c                   @   r  )ÚTestEigr.   c                 C   s�   t jddgddgg|d�}t j |¡\}}t|j|ƒ t|j|ƒ t jddgddgg|d�}t j |¡\}}t|jt|ƒƒ t|jt|ƒƒ d S r!  )r$   r   r   r  r   r.   r8   ©rE   r.   rµ   ÚwÚvr(   r(   r)   rþ   l  s   zTestEig.test_typesc                 C   sú   G dd„ dt jƒ}t jdt jd� |¡}t |¡\}}t|jj	t j
u ƒ t|jj	t j
u ƒ t|j|jƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡\}}t|jj	t ju ƒ t|jj	t ju ƒ t|j|jƒ td|jƒ tt|t jƒƒ d S )Nc                   @   rÿ   )z*TestEig.test_0_size.<locals>.ArraySubclassNr   r(   r(   r(   r)   r  z  r  r  r  r5   r"  ra   rb   )r$   r%   r  r  r«   r   r  r   r.   r"   r  r   r‘   r#   r  ©rE   r  r0   r  Úres_vr(   r(   r)   r
  x  ó   zTestEig.test_0_sizeNr  r(   r(   r(   r)   r)  k  s    
r)  c                   @   s.   e Zd ZdZej deee	e
g¡dd„ ƒZdS )ÚSVDBaseTestsFr.   c                 C   sˆ   t jddgddgg|d�}t |¡}|j|j|j}}}t|j|ƒ t|jt	|ƒƒ t|j|ƒ tj|d| j
d�}t|jt	|ƒƒ d S )Nrf   rü   r5   F©Ú
compute_uvr<   )r$   r   r   ÚsvdÚUÚSÚVhr   r.   r6   r<   )rE   r.   rµ   r  r4  r5  r6  r»   r(   r(   r)   rþ   ’  s   
zSVDBaseTests.test_typesN)rM   rN   rO   r<   rä   rå   r  r   r   r   r   rþ   r(   r(   r(   r)   r0  �  s    r0  c                   @   rñ   )ÚSVDCasesc              	   C   sp   t  |d¡\}}}t|tt |¡t |¡dd d d …f  t |¡ƒt|jƒd� tt	||ƒƒ tt	||ƒƒ d S )NF.r%  )
r   r3  r   r	   r$   r   r9   r.   r   r*   )rE   r0   r1   rD   Úur»   Úvtr(   r(   r)   rH      s   &ÿþzSVDCases.doNr÷   r(   r(   r(   r)   r7  ž  rø   r7  c                   @   rË   )ÚTestSVDc                 C   s˜   t  d¡}tj|d| jd�\}}}t|jdƒ t|jdƒ t|t  d¡ƒ t  d¡}tj|d| jd�\}}}t|jdƒ t|jdƒ t|t  d¡ƒ dS )	z6 Empty input should put an identity matrix in u or vh )rj   r   Tr1  ©rj   rj   ra   rj   )r   rj   N)r$   rª   r   r3  r<   r   r‘   Úeye)rE   rµ   r8  r»   Úvhr(   r(   r)   Útest_empty_identityª  s   

zTestSVD.test_empty_identityc                 C   s@   t  ddgddgg¡}tj|d| jd�}t |¡}t||ƒ d S )Nrf   rü   Fr1  )r$   r   r   r3  r<   Úsvdvalsr   )rE   rµ   Ú
s_from_svdÚs_from_svdvalsr(   r(   r)   Útest_svdvals¸  s   
zTestSVD.test_svdvalsN)rM   rN   rO   r>  rB  r(   r(   r(   r)   r:  ©  s    r:  c                   @   rñ   )ÚSVDHermitianCasesc              	   C   sò   t j|ddd�\}}}t|tt |¡t |¡dd d d …f  t |¡ƒt|jƒd� dd„ }tt |||ƒ¡t 	t 
|jd ¡|j¡ƒ tt |||ƒ¡t 	t 
|jd ¡|j¡ƒ tt |¡dd d d…f |ƒ tt||ƒƒ tt||ƒƒ d S )	NFT©r<   .r%  c                 S   s<   t t| jƒƒ}|d |d |d< |d< t tj| |d�¡S )Nr‹   rŠ   ©Úaxes)r±   ÚrangerŽ   r$   ÚconjÚ	transpose)ÚmatrF  r(   r(   r)   r<   Æ  s   z'SVDHermitianCases.do.<locals>.hermitianrŠ   )r   r3  r   r	   r$   r   r9   r.   r   rõ   r<  r‘   r   Úsortr   r*   )rE   r0   r1   rD   r8  r»   r9  r<   r(   r(   r)   rH   Á  s   &ÿþ,,zSVDHermitianCases.doNr÷   r(   r(   r(   r)   rC  ¿  rø   rC  c                   @   s   e Zd ZdZdS )ÚTestSVDHermitianTN)rM   rN   rO   r<   r(   r(   r(   r)   rL  Ò  s    rL  c                   @   rñ   )Ú	CondCasesc                 C   sê  t |ƒ}d|v rtttj|ƒ d S tj|dd�}tt |¡|d |d  ddd� tt |d	¡|d |d  ddd� tt |d
¡|d |d  ddd� tj |¡}tt |d¡t	|ƒ 
d
¡ d¡t	|ƒ 
d
¡ d¡ ddd� tt |d¡t	|ƒ 
d
¡ d¡t	|ƒ 
d
¡ d¡ ddd� tt |tj¡t	|ƒ 
d¡ d¡t	|ƒ 
d¡ d¡ ddd� tt |tj ¡t	|ƒ 
d¡ d¡t	|ƒ 
d¡ d¡ ddd� tt |d¡t t	|ƒd	  
d¡ 
d¡t	|ƒd	  
d¡ 
d¡ ¡ddd� d S )Nr?   F)r2  ró   ).rŠ   r{   ry   ©r2   r3   rh   r‹   rf   rŠ   Úfro)r   r   r   r   Úcondr3  r   r$   r  r™   ÚsumÚmaxÚminr   Úsqrt)rE   r0   r1   rD   Úcr»   Úcinvr(   r(   r)   rH   Ù  sZ   þþþ
&ý
&ý&ý&ý
ÿ
üzCondCases.doNr÷   r(   r(   r(   r)   rM  Ö  s    rM  c                   @   s>   e Zd Zdd„ Zdd„ Zejjdddd�d	d
„ ƒZdd„ Z	dS )ÚTestCondc                 C   s€   t g d¢g d¢g d¢gƒ}tt |t¡dƒ tt |t ¡dƒ tt |d¡dƒ tt |d¡dƒ tt |d	¡t d
¡ƒ d S )N)rW   r   rf   )r   g       Àr   )r   r   rY   rj   gUUUUUUå?rf   rŠ   rü   rO  gUUUUU6@)r   r   r   rP  r   r$   rT  ©rE   ÚAr(   r(   r)   Útest_basic_nonsvd  s   zTestCond.test_basic_nonsvdc                 C   st   t  d¡t  d¡g}g d¢}ddg}t ||¡D ]\}}tt ||¡dkƒ qt ||¡D ]
\}}t ||¡ q-d S )Nr  ©Nrf   rh   rO  rŠ   r‹   ç  4&õkC)r$   r  Úonesr¦   r§   r   r   rP  )rE   ÚAsÚp_posÚp_negrY  Úpr(   r(   r)   Útest_singular  s   ÿzTestCond.test_singularTFz/Platform/LAPACK-dependent failure, see gh-18914)ÚrunÚreasonc                 C   sê   g d¢}g d¢}t  d¡}t j|d< |D ]}t ||¡}tt|t jƒƒ tt  |¡ƒ qt  d¡}t j|d< |D ]:}t ||¡}tt  |d ¡ƒ ||v r^t|d d	kƒ t|d
 d	kƒ q8tt  |d ¡ ƒ tt  |d
 ¡ ƒ q8d S )N)Nrf   rŠ   rh   r‹   rO  r[  r  r"  )ri   rh   rh   ©rf   r   rf   rf   r   r\  rh   )	r$   r]  Únanr   rP  r   r#   r  Úisnan)rE   Úpsr_  rY  ra  rU  r(   r(   r)   Útest_nan  s&   



øzTestCond.test_nanc                 C   sŒ   t j d¡ t j dddd¡}d|d< d|d< dD ]*}t ||¡}t|d t jƒ t|d t jƒ tt  	|d ¡ƒ tt  	|d ¡ƒ qd S )	NrV   rh   r   ra   r¤   )Nrf   rh   rO  rŠ   r‹   r"  ©rf   r   )
r$   ÚrandomÚseedÚrandr   rP  r   r   r   Úisfinite)rE   rY  ra  rU  r(   r(   r)   Útest_stacked_singular7  s   ûzTestCond.test_stacked_singularN)
rM   rN   rO   rZ  rb  rä   rå   Úxfailri  ro  r(   r(   r(   r)   rW    s    	
ÿ
rW  c                   @   rñ   )Ú	PinvCasesc                 C   s<   t  |¡}t}t||||ƒ|ƒ|ddd� tt||ƒƒ d S )Nr{   ry   rN  ©r   Úpinvr	   r   r   r*   ©rE   r0   r1   rD   Úa_ginvr   r(   r(   r)   rH   L  s   
zPinvCases.doNr÷   r(   r(   r(   r)   rq  G  s    rq  c                   @   rÿ   )ÚTestPinvNr   r(   r(   r(   r)   rv  T  r  rv  c                   @   rñ   )ÚPinvHermitianCasesc                 C   s@   t j|dd�}t}t||||ƒ|ƒ|ddd� tt||ƒƒ d S )NTrD  r{   ry   rN  rr  rt  r(   r(   r)   rH   Z  s   zPinvHermitianCases.doNr÷   r(   r(   r(   r)   rw  X  rø   rw  c                   @   rÿ   )ÚTestPinvHermitianNr   r(   r(   r(   r)   rx  b  r  rx  c                  C   s„   t  g d¢g d¢g d¢g¡} tt jj| dd�t jj| dd�ƒ tjtdd�� t jj| ddd	� W d   ƒ d S 1 s;w   Y  d S )
N©rf   rh   ri   )rj   rf   rf   )rh   ri   rf   rü   ©Úrcondr%  z%`rtol` and `rcond` can't be both set.)Úmatch)r{  r&  )r$   r   r   r   rs  rä   Úraisesr  )r0   r(   r(   r)   Útest_pinv_rtol_argf  s   þÿ"ýr~  c                   @   rñ   )ÚDetCasesc                 C   sÖ   t  |¡}t  |¡}|j|j}}t|ƒjjtt	fv r#t|ƒ 
t	¡}nt|ƒ 
t¡}t  |¡}	t|tj|	dd�ƒ t|t |¡ tj|	dd�ƒ t |¡}t |¡}|dk}
tt ||
 ¡dƒ t||
  t ƒ d S )NrŠ   ©Úaxisr   rf   )r   ÚdetÚslogdetÚsignÚ	logabsdetr   r.   r"   r   r   Úastyper   r  r   r   Úreducer$   ÚexpÚ
atleast_1dr™   r   r   )rE   r0   r1   rD   Údr  r»   ÚldÚadr  Úmr(   r(   r)   rH   v  s   




zDetCases.doNr÷   r(   r(   r(   r)   r  t  rø   r  c                   @   s:   e Zd Zdd„ Zej deee	e
g¡dd„ ƒZdd„ ZdS )	ÚTestDetc                 C   s   t t dgg¡dƒ t tt dgg¡ƒtƒ t t dgg¡dƒ t tt dgg¡ƒtƒ t t dgg¡dt fƒ t tt dgg¡d ƒtƒ t tt dgg¡d ƒtƒ t t dgg¡dt fƒ t tt dgg¡d ƒtƒ t tt dgg¡d ƒtƒ d S )Nç        y                r   rf   )r   r   r‚  r"   r   r   rƒ  r   rK   r(   r(   r)   Ú	test_zeroŠ  s    zTestDet.test_zeror.   c                 C   s^   t jddgddgg|d�}tt j |¡j|ƒ t j |¡\}}t|jt|ƒƒ t|j|ƒ d S rû   )r$   r   r   r   r‚  r.   rƒ  r6   )rE   r.   rµ   Úphr»   r(   r(   r)   rþ   —  s
   zTestDet.test_typesc                 C   sð   t jdt jd�}t |¡}t|dƒ t|jjt ju ƒ t 	|¡}t|dƒ t|d jjt ju ƒ t|d jjt j
u ƒ t jdt jd�}t |¡}t|dƒ t|jjt ju ƒ t 	|¡}t|dƒ t|d jjt ju ƒ t|d jjt ju ƒ d S )Nra   r5   rW   rj  r   rf   )r$   r  r  r   r‚  r   r   r.   r"   rƒ  Úfloat32r  )rE   r0   r  r(   r(   r)   r
  Ÿ  s    







zTestDet.test_0_sizeN)rM   rN   rO   r�  rä   rå   r  r   r   r   r   rþ   r
  r(   r(   r(   r)   rŽ  ‰  s
    
rŽ  c                   @   rñ   )Ú
LstsqCasesc                 C   sL  t  |¡}|j\}}t |d¡\}}}	tj||dd�\}
}}}|dkr+t|
dk ¡ ƒ ||kr=t|t	||
ƒƒ t
||ƒ nt
||ƒ t|| |¡ƒ ||kr}||kr}t  tt  	||
¡| ƒ¡d jdd�}t  |¡}t  |¡jdkr|d|_t
|j|jƒ n
t  g ¡ t|
ƒ¡}t||ƒ tt  |jt j¡ƒ tt|
|ƒƒ tt||ƒƒ d S )	NFrŠ   rz  r   rh   r€  rf   r–   )r$   r   r‘   r   r3  Úlstsqr   r¯   r   r   r   Ú__array_wrap__r™   rQ  rŽ   r   r«   r"   Ú
issubdtyper.   Úfloatingr*   )rE   r0   r1   rD   Úarrr�  Únr8  r»   r9  rµ   Ú	residualsÚrankÚsvÚexpect_residsr(   r(   r)   rH   µ  s0   


 ÿ
€
zLstsqCases.doNr÷   r(   r(   r(   r)   r“  ³  rø   r“  c                   @   s:   e Zd Zdd„ Zej g d¢g d¢¡dd„ ƒZdd„ Zd	S )
Ú	TestLstsqc                 C   sž   t  g d¢g d¢g d¢g d¢g¡j}t  g d¢¡}tj||dd�\}}}}t|dkƒ t ||¡\}}}}t|d	kƒ tj||d d�\}}}}t|d	kƒ d S )
N)r�  rW   r�  rW   rX   r�  )r�  rX   r�  r�  rW   r�  )rW   r�  rW   r�  r�  rZ   )r�  r�  r�  rX   rY   r�  )rf   r   r   r   r   r   rŠ   rz  rj   ri   )r$   r   ÚTr   r”  r   )rE   r0   r1   rµ   rš  r›  r»   r(   r(   r)   Ú
test_rcondÒ  s   
ýýzTestLstsq.test_rcond)r�  r™  Ún_rhs))rj   rh   rh   )r   rj   rf   )r   rj   rh   )rj   r   rf   )rj   r   rh   )rj   rh   r   ©r   r   r   c                 C   sÜ   t  || ¡ ||¡}t  ||f¡}tj||d d�\}}}}	|dkr*t|dk ¡ ƒ t|j	||fƒ t|j	||kr<|fndƒ ||krZ|dkrZ|t  
||¡ }
t||
|
 jdd�ƒ t|t||ƒƒ t|	j	t||ƒfƒ d S )Nrz  r   rb   r‹   r€  )r$   r  r�   r]  r   r”  r   r¯   r   r‘   r   r   rQ  rS  )rE   r�  r™  r¡  r0   r1   rµ   rš  r›  r»   rï   r(   r(   r)   Útest_empty_a_bá  s   
zTestLstsq.test_empty_a_bc                 C   sv   t  g d¢¡}t  g d¢¡}t  |t  t|ƒ¡g¡j}ttdƒ� tj	||d d� W d   ƒ d S 1 s4w   Y  d S )N)r   rf   rh   ri   )rŠ   gš™™™™™É?gÍÌÌÌÌÌì?gÍÌÌÌÌÌ @gffffff
@zIncompatible dimensionsrz  )
r$   r   Úvstackr]  ÚlenrŸ  r   r   r   r”  )rE   rµ   ÚyrY  r(   r(   r)   Útest_incompatible_dimsù  s   "ÿz TestLstsq.test_incompatible_dimsN)	rM   rN   rO   r   rä   rå   r  r£  r§  r(   r(   r(   r)   rž  Ñ  s
    
	rž  Údtc                 C   s   g | ]}t  |¡‘qS r(   )r$   r.   )rš   rU  r(   r(   r)   r›     s    r›   z?bBhHiIqQefdgFDGOc                   @   sÜ   e Zd Ze d¡Zeg d¢ Zeg d¢ Zeg d¢ ZeeeegZ	e
ddgddggƒZe egggd ¡Zee d¡e d	¡e d
¡gZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejjedd�dd„ ƒZdS )ÚTestMatrixPowerrj   )ri   r   rf   rh   )rh   ri   r   rf   )rf   rh   ri   r   rf   r   rh   rÈ   ÚgÚGc                 C   s˜   | j  |¡}tt|dd d d d ƒ| jƒ tt|dd d d d ƒ| j ƒ tt|dd d d d ƒ| jƒ tt|dd d d d ƒ| jƒ d S )Nrh   éd   i   é    r   rf   ri   )Úrshft_1r†  r   r   Úrshft_0Úrshft_2Úrshft_3)rE   r¨  Úrshftr(   r(   r)   Útest_large_power  s   ÿÿÿÿz TestMatrixPower.test_large_powerc                 C   ó>   dd„ }| j D ]}|| |¡ƒ |tkr|| j |¡ƒ qd S )Nc                 S   s*   t | dƒ}t|t| ƒƒ t|j| jƒ d S )Nr   )r   r   rð   r.   )ÚMÚmzr(   r(   r)   Útz  s   
z.TestMatrixPower.test_power_is_zero.<locals>.tz©Ú	rshft_allr†  ÚobjectÚstacked©rE   r¨  r·  rJ  r(   r(   r)   Útest_power_is_zero  ó   
€ýz"TestMatrixPower.test_power_is_zeroc                 C   r´  )Nc                 S   s&   t | dƒ}t|| ƒ t|j| jƒ d S )Nrf   )r   r   r.   )rJ  r¶  r(   r(   r)   r·  &  s   

z-TestMatrixPower.test_power_is_one.<locals>.tzr¸  r¼  r(   r(   r)   Útest_power_is_one%  r¾  z!TestMatrixPower.test_power_is_onec                 C   r´  )Nc                 S   s>   t | dƒ}| jtkrtnt}t||| | ƒƒ t|j| jƒ d S )Nrh   )r   r.   rº  r	   r   r   )rJ  r¶  Úmmulr(   r(   r)   r·  1  s   
z-TestMatrixPower.test_power_is_two.<locals>.tzr¸  r¼  r(   r(   r)   Útest_power_is_two0  s   
€ýz!TestMatrixPower.test_power_is_twoc                 C   s0   dd„ }| j D ]}|| jvr|| |¡ƒ qd S )Nc                 S   s4   t | dƒ}| jtkrtnt}t||| ƒt| ƒƒ d S ©NrŠ   )r   r.   rº  r	   r   r   rð   )rJ  ÚinvmatrÀ  r(   r(   r)   r·  =  s
   
ÿz3TestMatrixPower.test_power_is_minus_one.<locals>.tz)r¹  Údtnoinvr†  r¼  r(   r(   r)   Útest_power_is_minus_one<  s   

€þz'TestMatrixPower.test_power_is_minus_onec                 C   s.   | j  |¡}ttt|dƒ ttt|dgƒ d S )Ng      ø?rf   )r¯  r†  r   Ú	TypeErrorr   ©rE   r¨  rJ  r(   r(   r)   Útest_exceptions_bad_powerG  s   z)TestMatrixPower.test_exceptions_bad_powerc                 C   sP   t ttt dg|¡dƒ t ttt dgdgg|¡dƒ t ttt d|¡dƒ d S )Nrf   rh   )rj   ri   rh   )r   r   r   r$   r   r]  )rE   r¨  r(   r(   r)   Útest_exceptions_non_squareL  s   z*TestMatrixPower.test_exceptions_non_squareúfp errors don't work in wasm©rd  c                 C   s,   || j v rd S | j |¡}ttt|dƒ d S rÂ  )rÄ  Únoninvr†  r   r   r   rÇ  r(   r(   r)   Útest_exceptions_not_invertibleQ  s   
z.TestMatrixPower.test_exceptions_not_invertibleN)rM   rN   rO   r$   r<  r¯  r®  r°  r±  r¹  r   rÌ  Úblockr»  rº  r.   rÄ  r³  r½  r¿  rÁ  rÅ  rÈ  rÉ  rä   rå   Úskipifr    rÍ  r(   r(   r(   r)   r©    s$    
r©  c                   @   rñ   )ÚTestEigvalshCasesc                 C   s^   t  |d¡}t  |¡\}}|jdd� t||t|jƒd� t  |d¡}t||t|jƒd� d S )NÚLrŠ   r€  r%  r4  )r   Úeigvalshr  rK  r   r9   r.   )rE   r0   r1   rD   r  r  r  Úev2r(   r(   r)   rH   [  s   zTestEigvalshCases.doNr÷   r(   r(   r(   r)   rÐ  Y  rø   rÐ  c                   @   rù   )ÚTestEigvalshr.   c                 C   s:   t jddgddgg|d�}t j |¡}t|jt|ƒƒ d S rû   )r$   r   r   rÒ  r   r.   r6   )rE   r.   rµ   r+  r(   r(   r)   rþ   h  s   zTestEigvalsh.test_typesc                 C   óX   t jddgddggt jd�}ttt jj|dd� ttt jj|dƒ ttt jj|dƒ d S ©Nrf   rü   r5   Úlrong©ÚUPLOÚlowerÚupper)r$   r   r’  r   r  r   rÒ  ©rE   rµ   r(   r(   r)   Útest_invalidn  ó   zTestEigvalsh.test_invalidc                 C   sì   t jddgddggt jd�}t jddgddggt jd�}t jddgt jd�}tt jƒ}t j |¡}t|||d� t jj|dd�}t|||d� t jj|dd�}t|||d� t jj|d	d�}t|||d� t jj|d
d�}t|||d� d S ©Nr   rf   r5   rŠ   r%  rÑ  rØ  Úlr4  r8  )r$   r   r   r9   r   rÒ  r   )rE   ÚKloÚKupÚtgtr&  r+  r(   r(   r)   Ú	test_UPLOt  s   
zTestEigvalsh.test_UPLOc                 C   s²   G dd„ dt jƒ}t jdt jd� |¡}t |¡}t|jj	t j
u ƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡}t|jj	t ju ƒ td|jƒ tt|t jƒƒ d S )Nc                   @   rÿ   )z/TestEigvalsh.test_0_size.<locals>.ArraySubclassNr   r(   r(   r(   r)   r  Œ  r  r  r  r5   r"  ra   rb   )r$   r%   r  r  r«   r   rÒ  r   r.   r"   r  r   r‘   r#   r  r’  r  r(   r(   r)   r
  Š  r#  zTestEigvalsh.test_0_sizeN©rM   rN   rO   rä   rå   r  r   r   r   r   rþ   rÝ  rä  r
  r(   r(   r(   r)   rÔ  g  s    
rÔ  c                   @   rñ   )ÚTestEighCasesc                 C   sÐ   t  |¡}|j|j}}t  |¡\}}|jdd� t||ƒ tt||ƒt	 
|¡dd d d …f t	 
|¡ t|jƒd� t  |d¡\}	}
t|	|ƒ tt||
ƒt	 
|	¡dd d d …f t	 
|
¡ t|jƒt|ƒd� d S )NrŠ   r€  .r%  r4  )r&  Úerr_msg)r   Úeighr'  r(  r  rK  r   r   r	   r$   r   r9   r.   Úrepr)rE   r0   r1   rD   r  r  Úevcr  r  rÓ  Úevc2r(   r(   r)   rH   Ÿ  s   


 þ

 
þzTestEighCases.doNr÷   r(   r(   r(   r)   ræ  �  rø   ræ  c                   @   rù   )ÚTestEighr.   c                 C   sJ   t jddgddgg|d�}t j |¡\}}t|jt|ƒƒ t|j|ƒ d S rû   )r$   r   r   rè  r   r.   r6   r*  r(   r(   r)   rþ   µ  s   zTestEigh.test_typesc                 C   rÕ  rÖ  )r$   r   r’  r   r  r   rè  rÜ  r(   r(   r)   rÝ  ¼  rÞ  zTestEigh.test_invalidc                 C   s   t jddgddggt jd�}t jddgddggt jd�}t jddgt jd�}tt jƒ}t j |¡\}}t|||d� t jj|dd�\}}t|||d� t jj|dd�\}}t|||d� t jj|d	d�\}}t|||d� t jj|d
d�\}}t|||d� d S rß  )r$   r   r   r9   r   rè  r   )rE   rá  râ  rã  r&  r+  r,  r(   r(   r)   rä  Â  s   
zTestEigh.test_UPLOc                 C   sú   G dd„ dt jƒ}t jdt jd� |¡}t |¡\}}t|jj	t j
u ƒ t|jj	t j
u ƒ t|j|jƒ td|jƒ tt|t jƒƒ t jdt jd� |¡}t |¡\}}t|jj	t ju ƒ t|jj	t ju ƒ t|j|jƒ td|jƒ tt|t jƒƒ d S )Nc                   @   rÿ   )z+TestEigh.test_0_size.<locals>.ArraySubclassNr   r(   r(   r(   r)   r  Ú  r  r  r  r5   r"  ra   rb   )r$   r%   r  r  r«   r   rè  r   r.   r"   r  r   r‘   r#   r  r’  r-  r(   r(   r)   r
  Ø  r/  zTestEigh.test_0_sizeNrå  r(   r(   r(   r)   rì  ´  s    
rì  c                   @   s    e Zd ZdZdZedd„ ƒZdS )Ú_TestNormBaseNc                 C   s<   t | jjtjƒrt|j| jjƒ d S tt |jjtjƒƒ d S r!   )	Ú
issubclassr.   r"   r$   Úinexactr   Úrealr   r—  )rµ   r  r(   r(   r)   Úcheck_dtypeó  s   z_TestNormBase.check_dtype)rM   rN   rO   r¨  ÚdecÚstaticmethodrñ  r(   r(   r(   r)   rí  ï  s
    rí  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú_TestNormGeneralc                 C   sF   t tg ƒdƒ t ttg | jd�ƒdƒ t tttg | jd�ƒƒdƒ d S )Nr�  r5   )r   r   r   r¨  r   rK   r(   r(   r)   Ú
test_emptyþ  s    z_TestNormGeneral.test_emptyc           	   	   C   s‚  t  g d¢¡}t jd }t jd }|| }|D ]§}| |¡}t|t j ƒ}|  ||¡ t|dƒ tƒ �}| 	t
d¡ t|dƒ}|  ||¡ t|dƒ W d   ƒ n1 sTw   Y  t|dƒ}|  ||¡ t|dƒ t|d	ƒ}|  ||¡ t|d
ƒ t|dƒ}|  ||¡ t||j d
¡|j d¡ ƒ t|dƒ}|  ||¡ t||j d
¡|j d¡ ƒ t|t jƒ}|  ||¡ t|dƒ qd S )Nre  Ú
AllIntegerÚAllFloatr�  údivide by zero encounteredrŠ   r   rh   rf   rX   rü   rj   g      Ð?rW   )r$   r   Ú	typecodesr†  r   r   rñ  r   r   ÚfilterÚRuntimeWarningr.   r"   ©	rE   r0   Úexact_typesÚinexact_typesÚ	all_typesÚ	each_typeÚatÚanÚsupr(   r(   r)   Útest_vector_return_type  s>   




ü





áz(_TestNormGeneral.test_vector_return_typec                    sv   g d¢}g d¢}g d¢}‡ fdd„}|||fD ]}||ƒ qt |ˆ jd�t |ˆ jd�t |ˆ jd�fD ]}||ƒ q2d S )N)rf   rh   ri   rj   )rŠ   r‹   r˜   r—   )rŠ   rh   r˜   rj   c                    sÔ   t jjt| ƒdˆ jd� t jjt| tƒdˆ jd� t jjt| t ƒdˆ jd� t jjt| dƒdˆ jd� t jjt| dƒdˆ jd� t jjt| d	ƒdˆ jd� t jjt| d
ƒdˆ jd� t jjt| dƒdˆ jd� d S )Ng�¥6Ò­è@©r-   rZ   rW   rf   ç      $@rŠ   g¸…ëQ¸Þ?rh   r‹   gÊsÔcÙÑê?r   rj   )r$   Útestingr   r   rò  r   )r,  rK   r(   r)   Ú_test1  s0   ÿÿÿÿÿÿÿ
ÿz+_TestNormGeneral.test_vector.<locals>._testr5   )r   r¨  )rE   r0   r1   rU  r  r,  r(   rK   r)   Útest_vector,  s   
ÿ
þz_TestNormGeneral.test_vectorc           	   	      s°  t g d¢g d¢g| jd�‰ d dddddtjtj fD ]4‰‡ ‡fd	d
„tˆ jd ƒD ƒ}ttˆ ˆdd�|ƒ ‡ ‡fdd
„tˆ jd ƒD ƒ}ttˆ ˆdd�|ƒ qtjdd| jd� 	ddd¡‰ˆj
}d ddddtjtj dfD ]h‰t t| |ƒd¡D ][}|\}}|dk r‡||7 }|dk r�||7 }||kr�tttˆˆ|d� qytˆˆ|d�}|||  ‰||k r¿‡‡‡fdd
„tˆjˆ ƒD ƒ}n‡‡‡fdd
„tˆjˆ ƒD ƒ}t||ƒ qyqmd S )Nry  ©rj   r{   r+   r5   rŠ   r   rf   rh   ri   c                    s$   g | ]}t ˆ d d …|f ˆd�‘qS ©N©Úord©r   ©rš   Úk©rY  Úorderr(   r)   r›   P  ó   $ z._TestNormGeneral.test_axis.<locals>.<listcomp>©r  r�  c                    s$   g | ]}t ˆ |d d …f ˆd�‘qS r  r  r  r  r(   r)   r›   R  r  é   rj   r‹   rO  c                    s*   g | ]}t ˆ d d … j|ˆd�ˆd�‘qS ©Nr€  r  )r   Útaker  ©ÚBÚk_indexr  r(   r)   r›   h  s    "ÿc                    s,   g | ]}t ˆ d d … j|ˆd�jˆd�‘qS r  )r   r  rŸ  r  r  r(   r)   r›   k  s    $ÿ)r   r¨  r$   r   rG  r‘   r   r   r  r�   rŽ   r¦   Úcombinationsr   r  )	rE   Ú	expected0Ú	expected1Úndr�  Úrow_axisÚcol_axisr™  r	  r(   )rY  r  r  r  r)   Ú	test_axisJ  s:   ÿÿìÿz_TestNormGeneral.test_axisc           	   
   C   sâ  t jdd| jd� ddd¡}d}d}t|d d d	�}t|d d d
d�}tt  |¡|| d d ¡d� d}t|j	|k| |j	|d d ¡ƒ d dddddt j
t j
 fD ]C}t|jƒD ];}t|||d	�}t|||d
d�}tt  |¡|| ||¡d� t|j	ƒ}d||< t|ƒ}t|j	|k| |j	|||¡ƒ qTqMd ddddt j
t j
 ddf	D ]O}t t|jƒd¡D ]C}t|||d	�}t|||d
d�}tt  |¡|| ||¡d� t|j	ƒ}d||d < d||d < t|ƒ}t|j	|k| |j	|||¡ƒ qªqŸd S )Nrf   r  r5   rh   ri   rj   zorder {0}, axis = {1}z;Shape mismatch found {0}, expected {1}, order={2}, axis={3}r  T)r  r�  Úkeepdims)rç  )rf   rf   rf   rŠ   r   r‹   rO  Únuc)r$   r  r¨  r�   r   r   ÚsqueezeÚformatr   r‘   r   rG  rŽ   r±   r¨   r¦   Úpermutations)	rE   rY  Úallclose_errÚ	shape_errr	  ÚfoundÚexpected_shaper  r  r(   r(   r)   Útest_keepdimso  sT   
ÿ
ÿ
ÿ

ÿø 
ÿ

ÿ÷ÿz_TestNormGeneral.test_keepdimsN)rM   rN   rO   rõ  r  r	  r!  r+  r(   r(   r(   r)   rô  ü  s    )%rô  c                   @   s:   e Zd ZejZdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dS )Ú_TestNorm2Dc                 C   s    t t| jg g| jd�ƒdƒ d S )Nr5   r�  )r   r   r   r¨  rK   r(   r(   r)   Útest_matrix_emptyŸ  s    z_TestNorm2D.test_matrix_emptyc           	   	   C   s„  |   g d¢g d¢g¡}tjd }d}|| }|D ]§}| |¡}t|tj ƒ}|  ||¡ t|dƒ tƒ �}| 	t
d¡ t|dƒ}|  ||¡ t|dƒ W d   ƒ n1 sUw   Y  t|d	ƒ}|  ||¡ t|dƒ t|d
ƒ}|  ||¡ t|dƒ t|dƒ}|  ||¡ t|dƒ t|tjƒ}|  ||¡ t|dƒ t|dƒ}|  ||¡ t|dƒ t|dƒ}|  ||¡ tjj|ddd� qd S )Nre  r  rö  ÚfdFDrX   rø  rŠ   rW   rf   rh   gªLXèz¶û?r‹   rO  r#  gU&,t=Û@r+   r  )r   r$   rù  r†  r   r   rñ  r   r   rú  rû  r  rü  r(   r(   r)   Útest_matrix_return_type¢  sD   



ü









Ûz#_TestNorm2D.test_matrix_return_typec                 C   sÚ   | j ddgddgg| jd�}tt|ƒdƒ tt|dƒdƒ tt|dƒd	ƒ tt|tƒd
ƒ tt|t ƒdƒ tt|dƒd	ƒ tt|dƒdƒ tt|dƒdƒ tt|dƒdƒ ttt|dƒ ttt|dƒ ttt|dƒ d S )Nrf   ri   r{   r‡   r5   g…¹ŽT"@rO  r#  r  g      (@rZ   rŠ   r\   rh   g„öW³?"@r‹   gÑ—€Ê„ì?Únofror˜   r   )r   r¨  r   r   r   r   r  rX  r(   r(   r)   Útest_matrix_2x2Õ  s   z_TestNorm2D.test_matrix_2x2c                 C   sº   d| j g d¢g d¢g d¢g| jd� }tt|ƒdƒ tt|dƒdƒ tt|dƒd	ƒ tt|tƒd
ƒ tt|t ƒdƒ tt|dƒdƒ tt|dƒdƒ tt|dƒdƒ tt|dƒdƒ d S )Ngš™™™™™¹?ry  )r+   r   r{   )ri   rh   rf   r5   grj=Q0î?rO  r#  gþB+pcõ?gš™™™™™ñ?g333333ã?rf   rW   rŠ   gš™™™™™Ù?rh   gû&Þê.dì?r‹   gÜ¸Õ ˆçÈ?)r   r¨  r   r   r   rX  r(   r(   r)   Útest_matrix_3x3å  s    ÿz_TestNorm2D.test_matrix_3x3c                 C   s  | j g d¢g d¢g| jd�}tjdd| jd� ddd¡}ttt|d	d
ƒ ttt|dd
ƒ tttddgd	d ƒ tttddgdd ƒ tttddgdd ƒ dD ]}ttt||d ƒ ttt||dƒ ttt||dƒ qLttt|d dƒ ttt|d dƒ ttt|d dƒ d S )Nry  r
  r5   rf   r  rh   ri   rj   rO  r   r#  Útest©r   ri   r"  )rf   rh   ©rh   ri   ©r   rf   rh   )	r   r¨  r$   r  r�   r   r  r   r   )rE   rY  r  r  r(   r(   r)   Útest_bad_argsö  s   z_TestNorm2D.test_bad_argsN)
rM   rN   rO   r$   r   r-  r/  r1  r2  r7  r(   r(   r(   r)   r,  š  s    3r,  c                   @   rÿ   )Ú	_TestNormNr   r(   r(   r(   r)   r8    r  r8  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestNorm_NonSystematicc                 C   s*   t jdt jd�}tt|dd�ddd� d S )Né
   r5   ri   r  gÍÌÌÌÌL)@rh   r  )r$   r  Ú
longdoubler/   r   rÜ  r(   r(   r)   Útest_longdouble_norm  s   z+TestNorm_NonSystematic.test_longdouble_normc                 C   s,   t jdgt jd�}tt|dd�ddd� d S )Ni   €r5   ri   r  l        r{   r  )r$   r   Úint32r/   r   rÜ  r(   r(   r)   Útest_intmin  s   z"TestNorm_NonSystematic.test_intminc                 C   sŽ   t jdt jd�}d|d< d|d< d}tt jj|dd	�|d
d� | t j¡}tt jj|dd	�|dd� | t j¡}tt jj|dd	�|dd� d S )N©rh   r5   y      @      @r   y      À      @rf   g¨ËþÿV;'@ri   r  r:  r  é	   r{   )	r$   rª   Úclongdoubler/   r   r   r†  Ú
complex128r  )rE   rŠ  r  r(   r(   r)   Útest_complex_high_ord$  s   z,TestNorm_NonSystematic.test_complex_high_ordN)rM   rN   rO   r<  r>  rC  r(   r(   r(   r)   r9    s    r9  c                   @   ó   e Zd ZejZdZdS )Ú_TestNormDoubleBaser,   N)rM   rN   rO   r$   r   r¨  rò  r(   r(   r(   r)   rE  2  ó    rE  c                   @   rD  )Ú_TestNormSingleBaser+   N)rM   rN   rO   r$   r’  r¨  rò  r(   r(   r(   r)   rG  7  rF  rG  c                   @   rD  )Ú_TestNormInt64Baser,   N)rM   rN   rO   r$   Úint64r¨  rò  r(   r(   r(   r)   rH  <  rF  rH  c                   @   rÿ   )ÚTestNormDoubleNr   r(   r(   r(   r)   rJ  A  r  rJ  c                   @   rÿ   )ÚTestNormSingleNr   r(   r(   r(   r)   rK  E  r  rK  c                   @   rÿ   )ÚTestNormInt64Nr   r(   r(   r(   r)   rL  I  r  rL  c                   @   rË   )ÚTestMatrixRankc                 C   sþ   t dtt d¡ƒƒ t d¡}d|d< t t|ƒdƒ t tt d¡ƒdƒ t tg d¢ƒdƒ t tt d	¡ƒdƒ t tdgƒdƒ t |t d¡t d¡g¡}t t|ƒt g d
¢¡ƒ t tdƒdƒ ttdƒ� t|ddd� W d   ƒ d S 1 sxw   Y  d S )Nrj   r�  ©rŠ   rŠ   ri   r;  r   )rf   r   r   r   rf   )rj   )ri   rj   r   z#`tol` and `rtol` can't be both set.g{®Gáz„?)Útolr&  )r   r   r$   r<  r  r   r   r  )rE   ÚIÚmsr(   r(   r)   Útest_matrix_rankO  s    
ÿ"ýzTestMatrixRank.test_matrix_rankc                 C   s    t dtt d¡dd�ƒ t dtt d¡dd�ƒ t dtt d¡dd�ƒ t d¡}d|d< t d	t|dd�ƒ d
|d< t dt|ddd�ƒ t d	t|ddd�ƒ d S )Nrj   TrD  rf   r;  r   r�  rN  ri   g:Œ0âŽyE>g¾Ü|"•BE>)r<   rO  gµ;ä¡ˆ°E>)r   r   r$   r<  r]  r  )rE   rP  r(   r(   r)   Útest_symmetric_rankh  s   
z"TestMatrixRank.test_symmetric_rankN)rM   rN   rO   rR  rS  r(   r(   r(   r)   rM  M  s    rM  c                  C   sž   t j d¡} tdƒD ]B}| jdd�}|d d …df |d d …df  |d d …df< tt|ƒdƒ |d d …d	f |d d …d
f  |d d …df< tt|ƒdƒ q
d S )NiŠ3r¬  )é(   r:  ©Úsizerf   rh   r   r@  rj   r{   ri   rd   )r$   rk  ÚRandomStaterG  Únormalr   r   )ÚrngÚiÚXr(   r(   r)   Útest_reduced_rankv  s   ,,ùr\  c                	   @   sš   e Zd ZejZdd„ Zej ddgg d¢¡dd„ ƒZ	dd	„ Z
d
d„ Zdd„ Zej dg d¢¡ej dg d¢¡ej dejejejejg¡dd„ ƒƒƒZdS )ÚTestQRc                 C   s¸  t |ƒ}|j}|j\}}t||ƒ}tj|dd�}|j|j}}	t|j|kƒ t|	j|kƒ tt	||ƒƒ tt	|	|ƒƒ t|j||fkƒ t|	j||fkƒ t
t||	ƒ|ƒ t
t|j ¡ |ƒt |¡ƒ t
t |	¡|	ƒ tj|dd�\}
}t|
j|kƒ t|j|kƒ tt	|
|ƒƒ tt	||ƒƒ t|
j||fkƒ t|j||fkƒ t
t|
|ƒ|ƒ t
t|
j ¡ |
ƒt |¡ƒ t
t |¡|ƒ tj|dd�}t|j|kƒ tt	||ƒƒ t
||ƒ d S )NÚcomplete©ÚmodeÚreducedrï   )r"   r.   r‘   rS  r   ÚqrÚQÚRr   r#   r   r   rŸ  rH  r$   r<  Útriu)rE   r0   Úa_typeÚa_dtyper�  r™  r  r  rc  rd  Úq1Úr1Úr2r(   r(   r)   Úcheck_qr‡  s:   

zTestQR.check_qrr�  r™  )©ri   r   r4  ra   c                 C   st   t ||ƒ}t ||f¡}|  |¡ tjj|dd�\}}t|jtjƒ t|jtjƒ t|j	||fƒ t|j	|fƒ d S )NÚrawr_  )
rS  r$   rª   rk  r   rb  r   r.   r   r‘   )rE   r�  r™  r  r0   ÚhÚtaur(   r(   r)   Útest_qr_empty¯  s   

zTestQR.test_qr_emptyc                 C   sÄ   | j ddgddgddggtjd�}tj|dd	�\}}t|jtjkƒ t|jtjkƒ t|jd
kƒ t|jdkƒ tj|jdd	�\}}t|jtjkƒ t|jtjkƒ t|jdkƒ t|jdkƒ d S )Nrf   rh   ri   rj   r{   r+   r5   rm  r_  r5  r?  r‰   )	r   r$   r   r   rb  r   r.   r‘   rŸ  )rE   r0   rn  ro  r(   r(   r)   Útest_mode_rawÀ  s   "zTestQR.test_mode_rawc                 C   sÂ   |   ddgddgg¡}|   ddgddgddgg¡}dD ]}| |¡}| |¡}|  |¡ |  |¡ |  |j¡ qdD ]$}dd| |¡  }dd| |¡  }|  |¡ |  |¡ |  |j¡ q:d S )	Nrf   rh   ri   rj   r{   r+   Úfdù              ð?)r   r†  rk  rŸ  )rE   r0   r1   r¨  Úm1Úm2r(   r(   r)   Útest_mode_all_but_economicÖ  s   





ûz!TestQR.test_mode_all_but_economicc                 C   sf  t |ƒ}|j}|jdd … \}}t||ƒ}tj|dd�\}}t|j|kƒ t|j|kƒ tt||ƒƒ tt||ƒƒ t|jdd … ||fkƒ t|jdd … ||fkƒ tt	||ƒ|ƒ t
 |jd ¡}	t
 |	|jd d… |jd fd  ¡}
tt	t|ddƒ ¡ |ƒ|
ƒ tt
 |dd d …d d …f ¡|ƒ tj|dd�\}}t|j|kƒ t|j|kƒ tt||ƒƒ tt||ƒƒ t|jdd … ||fkƒ t|jdd … ||fkƒ tt	||ƒ|ƒ t
 |jd ¡}	t
 |	|jd d… |jd fd  ¡}
tt	t|ddƒ ¡ |ƒ|
ƒ tt
 |dd d …d d …f ¡|ƒ tj|dd�}t|j|kƒ tt||ƒƒ t||ƒ d S )	Nr‹   r^  r_  rŠ   rh   .ra  rï   )r"   r.   r‘   rS  r   rb  r   r#   r   r	   r$   r   rõ   r
   rH  re  )rE   r0   rf  rg  r�  r™  r  Úqrï   ÚI_matÚstack_I_matrh  ri  rj  r(   r(   r)   Úcheck_qr_stackedç  sL   
ÿ"ÿÿ"zTestQR.check_qr_stackedrV  ))ri   rj   )rj   ri   r;  rl  r4  Ú
outer_size)r  r?  )rh   ri   rj   r¨  c                 C   sX   t j d¡}|j|| d� |¡}|j|| d� |¡}|  |¡ |  |d|  ¡ d S )Né{   rU  rs  )r$   rk  Údefault_rngrX  r†  rz  )rE   r{  rV  r¨  rY  rY  r  r(   r(   r)   Útest_stacked_inputs  s
   

zTestQR.test_stacked_inputsN)rM   rN   rO   r$   r   rk  rä   rå   r  rp  rq  rv  rz  r   r   r   r   r~  r(   r(   r(   r)   r]  ƒ  s    (
-þr]  c                   @   sf   e Zd Zej dg d¢¡ej dejejej	ej
f¡ej dddg¡dd„ ƒƒƒZd	d
„ Zdd„ ZdS )ÚTestCholeskyr‘   )r¤   r  ©ri   ri   )é2   r�  )ri   r:  r:  r.   rÛ  FTc           
      C   s^  t j d¡ t jj|Ž }t  |t j¡r|dt jj|Ž   }ttt|ƒƒƒ}d|dd …< t  	| 
|¡ ¡ |¡}t j||d�}t jj||d�}|rSt  	| 
|¡ ¡ |¡}nt  	|| 
|¡ ¡ ¡}t  ¡ � d|jd  t  |¡j }W d   ƒ n1 szw   Y  t||||› d	|› d
|› d
|› �d� t j|ddd�}	tt  t  |	¡¡ƒ tt  |	dk¡ƒ d S )Nrf   rs  )rŠ   r‹   r‹   r5   ©rÛ  iô  r   ú Ú
)Úatolrç  rŠ   )Úaxis1Úaxis2)r$   rk  rl  Úrandnr–  Úcomplexfloatingr±   rG  r¥  r	   rI  rH  r   r   ÚcholeskyÚ_no_nep50_warningr‘   ÚfinfoÚepsr   Údiagonalr   r¯   Úisreal)
rE   r‘   r.   rÛ  r0   ÚtrU  r1   r…  rŠ  r(   r(   r)   Útest_basic_property'  s&   	
ÿ&z TestCholesky.test_basic_propertyc                 C   s¶   G dd„ dt jƒ}t jdt jd� |¡}t |¡}t|j|jƒ t	|j
jt ju ƒ t	t|t jƒƒ t jdt jd� |¡}t |¡}t|j|jƒ t	|j
jt ju ƒ t	t|t jƒƒ d S )Nc                   @   rÿ   )z/TestCholesky.test_0_size.<locals>.ArraySubclassNr   r(   r(   r(   r)   r  L  r  r  r  r5   )rf   r   r   )r$   r%   r  r  r«   r   rŠ  r   r‘   r   r.   r"   r  r#   r  r  r(   r(   r)   r
  K  s   

zTestCholesky.test_0_sizec                 C   sT   t  ddgddgg¡}tt |¡tj|dd�ƒ ttj|dd�t |¡j ¡ ƒ d S )Ny      ð?        y               Ày               @y      @        Fr‚  T)r$   r   r   r   rŠ  rŸ  rH  )rE   r0   r(   r(   r)   Útest_upper_lower_arg[  s   þz!TestCholesky.test_upper_lower_argN)rM   rN   rO   rä   rå   r  r$   r’  r  r  rB  r‘  r
  r’  r(   r(   r(   r)   r  %  s    ÿÿÿr  c                   @   s˜   e Zd Ze d¡Ze d¡Ze g d¢g d¢g d¢g¡Ze	ej
 ee¡eƒ eedƒ� ej
 edd…ejf e¡ W d  ƒ dS 1 sEw   Y  dS )Ú	TestOuterri   r¢  r6  )r   rh   rj   z$Input arrays must be one-dimensionalN)rM   rN   rO   r$   r  Úarr1Úarr2r   r	  r   r   Úouterr   r  Únewaxisr(   r(   r(   r)   r“  g  s    

þÿÿ"ýr“  c                  C   s¨   t jdkrd} nd} tjtjfD ]A}tjd|d�}| |j | ¡¡}| |j d¡¡ 	¡ }t
|jjdƒ tjtjtjfD ]}||ƒ}t|||ƒƒ t|||ƒƒ q<qd S )NÚlittleú<rJ   rj   r5   r5  ú=)ÚsysÚ	byteorderr$   r’  r  r<  r«   r.   ÚnewbyteorderÚbyteswapr   r   r  r‚  rs  r   )ÚnativeÚdttr˜  Ún_arrÚsw_arrÚroutiner  r(   r(   r)   Útest_byteorder_checkx  s   
úûr¤  rÊ  rË  c                  C   sl   t  ddgddgg¡} t  ddgddgg¡}t  g d¢¡dd d… }| |d< ||d< tt jjt jj|ƒ d S )Nrf   rh   ri   rj   )rj   rj   rh   rh   .ra   )r$   r   r  r   r   r   r  )Ú
invertibleÚnon_invertiblerµ   r(   r(   r)   Ú test_generalized_raise_multiloop�  s   r§  z?skipping test that uses fork because there are multiple threadsc                  C   sL  d} zt  ¡ }W n ttfy   t d¡ Y nw |dkr�t  d¡ t  d¡ dd l}| |j	d¡ zt
jj ¡  W n tyC   Y n tyQ   t  t j¡ Y nw zt
 dgg¡}t
jj ddd|d||dd¡	 W n ty‡ } zdt|ƒv r}t  | ¡ W Y d }~nd }~ww t  t j¡ d S t  ¡ \}}t  |¡| kr¤t d¡ d S d S )	Néÿ   zNot POSIX or fork failed.r   rf   ra   rW   zDORGQR parameter number 5zNumpy xerbla not linked in.)ÚosÚforkÚOSErrorÚAttributeErrorrä   ÚskipÚcloseÚresourceÚ	setrlimitÚRLIMIT_COREr$   r   Úlapack_liteÚxerblar  rÂ   Ú_exitÚ	EX_CONFIGr   ÚdorgqrrA   ÚwaitÚWEXITSTATUS)Ú	XERBLA_OKÚpidr¯  r0   rÈ   Ústatusr(   r(   r)   Útest_xerbla_override›  sF   þ

ÿý
€üÿr¼  zCannot start subprocessc                  C   sd   ddg} t  d¡}| D ]$}|jdd|d�}t tjd|g¡ |jdd|d�}t tjd|g¡ qd S )	NzPyQt5.QtWidgetsÚIPythonzÕ
    import sys
    {before}
    try:
        import {bad_lib}
    except ImportError:
        sys.exit(0)
    {after}
    x = np.ones(2, dtype=np.float32)
    sys.exit(0 if np.allclose(x.dot(x), 2.0) else 1)
    zimport numpy as npÚ )ÚbeforeÚafterÚbad_libz-c)rÀ  r¿  rÁ  )ÚtextwrapÚdedentr%  Ú
subprocessÚ
check_callr›  Ú
executable)Úbad_libsÚtemplaterÁ  Úcoder(   r(   r)   Útest_sdot_bug_8577Ï  s   
ÿÿørÊ  c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestMultiDotc              	   C   sl   t j d¡}t j d¡}t j d¡}tt|||gƒ| |¡ |¡ƒ tt|||gƒt  |t  ||¡¡ƒ d S ©N©r+   rh   ©rh   r+   ©r$   rk  r   r   r   )rE   rY  r  ÚCr(   r(   r)   Ú(test_basic_function_with_three_argumentsõ  s
    (z5TestMultiDot.test_basic_function_with_three_argumentsc                 C   sN   t j d¡}t j d¡}tt||gƒ| |¡ƒ tt||gƒt  ||¡ƒ d S rÌ  rÏ  )rE   rY  r  r(   r(   r)   Ú&test_basic_function_with_two_argumentsÿ  s   z3TestMultiDot.test_basic_function_with_two_argumentsc                 C   s\   t j d¡}t j d¡}t j d¡}t j d¡}tt||||gƒ| |¡ |¡ |¡ƒ d S )NrÍ  rÎ  ©rh   rf   rÏ  )rE   rY  r  rÐ  ÚDr(   r(   r)   Ú9test_basic_function_with_dynamic_programming_optimization  s
   ,zFTestMultiDot.test_basic_function_with_dynamic_programming_optimizationc                 C   sL   t j d¡}t j d¡}t j d¡}t j d¡}tt||||gƒjdƒ d S )Nrh   rÎ  rÍ  r  r?  ©r$   rk  r   r   r‘   )rE   ÚA1dr  rÐ  rÔ  r(   r(   r)   Útest_vector_as_first_argument  ó
   z*TestMultiDot.test_vector_as_first_argumentc                 C   sL   t j d¡}t j d¡}t j d¡}t j d¡}tt||||gƒjdƒ d S )NrÍ  rÎ  rh   )r+   rÖ  )rE   rY  r  rÐ  ÚD1dr(   r(   r)   Útest_vector_as_last_argument  rÙ  z)TestMultiDot.test_vector_as_last_argumentc                 C   sL   t j d¡}t j d¡}t j d¡}t j d¡}tt||||gƒjdƒ d S )Nrh   rÎ  rÍ  r(   rÖ  )rE   r×  r  rÐ  rÚ  r(   r(   r)   Ú&test_vector_as_first_and_last_argument$  rÙ  z3TestMultiDot.test_vector_as_first_and_last_argumentc              	   C   s€   t j d¡}t j d¡}t j d¡}t  d¡}t|||g|d�}||u s&J ‚t|| |¡ |¡ƒ t|t  |t  ||¡¡ƒ d S )NrÍ  rÎ  ©r&   ©r$   rk  r  r   r   r   )rE   rY  r  rÐ  r&   Úretr(   r(   r)   Útest_three_arguments_and_out.  s   
z)TestMultiDot.test_three_arguments_and_outc                 C   sd   t j d¡}t j d¡}t  d¡}t||g|d�}||u sJ ‚t|| |¡ƒ t|t  ||¡ƒ d S )NrÍ  rÎ  )r+   r+   rÝ  rÞ  )rE   rY  r  r&   rß  r(   r(   r)   Útest_two_arguments_and_out;  s   
z'TestMultiDot.test_two_arguments_and_outc                 C   sz   t j d¡}t j d¡}t j d¡}t j d¡}t  d¡}t||||g|d�}||u s-J ‚t|| |¡ |¡ |¡ƒ d S )NrÍ  rÎ  rÓ  )r+   rf   rÝ  rÞ  )rE   rY  r  rÐ  rÔ  r&   rß  r(   r(   r)   Ú-test_dynamic_programming_optimization_and_outE  s   
 z:TestMultiDot.test_dynamic_programming_optimization_and_outc              	   C   s  t j d¡t j d¡t j d¡t j d¡t j d¡t j d¡g}t  g d¢g d¢g d	¢g d
¢g d¢g d¢g¡}t jg d¢g d¢g d¢g d¢g d¢g d¢gtd�}|d8 }t|dd�\}}tt  |d d…dd …f ¡t  |d d…dd …f ¡ƒ tt  |¡t  |¡ƒ d S )N)é   é#   )rä  é   )rå  r{   )r{   r:  )r:  é   )ræ  r  )r�  g     ÃÎ@g     Ã¾@g    €OÂ@g    €1Ç@g    €ŠÍ@)r�  r�  g     ‚¤@g     ±@g     Õ»@g     ‚Ä@)r�  r�  r�  g     p‡@g     ˆ£@g     ÿ´@)r�  r�  r�  r�  g     @�@g     X«@)r�  r�  r�  r�  r�  g     ˆ³@)r�  r�  r�  r�  r�  r�  )r   rf   rf   ri   ri   ri   )r   r   rh   ri   ri   ri   )r   r   r   ri   ri   ri   )r   r   r   r   rj   r{   )r   r   r   r   r   r{   )r   r   r   r   r   r   r5   rf   T)Úreturn_costsrŠ   )r$   rk  r   Úintr   r   re  )rE   ÚarraysÚ
m_expectedÚ
s_expectedr»   r�  r(   r(   r)   Útest_dynamic_programming_logicQ  s:   





û
û
ûûÿz+TestMultiDot.test_dynamic_programming_logicc                 C   s&   t ttg ƒ t tttj d¡gƒ d S )Nr€  )r   r  r   r$   rk  rK   r(   r(   r)   Útest_too_few_input_arrayso  s   z&TestMultiDot.test_too_few_input_arraysN)rM   rN   rO   rÑ  rÒ  rÕ  rØ  rÛ  rÜ  rà  rá  râ  rì  rí  r(   r(   r(   r)   rË  ó  s    
	



rË  c                   @   sv   e Zd Zej de d¡dfe d¡dfg¡dd„ ƒZej dd	d
g¡dd„ ƒZ	ej dddg¡dd„ ƒZ
dd„ ZdS )ÚTestTensorinvzarr, ind©rj   r+   rd   rh   rh   ©ri   ri   rh   rf   c                 C   s<   t tƒ� tj||d� W d   ƒ d S 1 sw   Y  d S )N©Úind)r   r   r   Ú	tensorinv)rE   r˜  rò  r(   r(   r)   Útest_non_square_handlingv  s   
"ÿz&TestTensorinv.test_non_square_handlingz
shape, ind)©rj   r+   rd   ri   rh   )©é   rd   ri   rf   c                 C   sN   t  d¡}||_tj||d�}|j|d … |jd |…  }|j}t||ƒ d S )Nr÷  ©r0   rò  )r$   r<  r‘   r   ró  r   )rE   r‘   rò  r0   Úainvr	  Úactualr(   r(   r)   Útest_tensorinv_shape~  s   
z"TestTensorinv.test_tensorinv_shaperò  r   r‹   c                 C   sL   t  d¡}d|_ttƒ� tj||d� W d   ƒ d S 1 sw   Y  d S )Nr÷  rõ  rø  )r$   r<  r‘   r   r  r   ró  )rE   rò  r0   r(   r(   r)   Útest_tensorinv_ind_limit‹  s
   

"ÿz&TestTensorinv.test_tensorinv_ind_limitc                 C   sJ   t  d¡}d|_tj|dd�}t  d¡}tt  ||d¡t j ||¡ƒ d S )Nr÷  rö  rf   rñ  )	r$   r<  r‘   r   ró  r]  r   Ú	tensordotÚtensorsolve)rE   r0   rù  r1   r(   r(   r)   Útest_tensorinv_result”  s
   

"z#TestTensorinv.test_tensorinv_resultN)rM   rN   rO   rä   rå   r  r$   r]  rô  rû  rü  rÿ  r(   r(   r(   r)   rî  t  s     þ
ý
ÿ
rî  c                   @   sT   e Zd Zej de d¡dfe d¡dfg¡dd„ ƒZej dg d	¢¡d
d„ ƒZ	dS )ÚTestTensorsolveza, axesrï  Nrð  )r   rh   c                 C   sR   t tƒ� t |jd d… ¡}tj|||d� W d   ƒ d S 1 s"w   Y  d S ©Nrh   rE  )r   r   r$   r]  r‘   r   rþ  )rE   r0   rF  r1   r(   r(   r)   rô  Ÿ  s   
"þz(TestTensorsolve.test_non_square_handlingr‘   ))rh   ri   r+   )ri   rj   rj   ri   )r   ri   ri   r   c                 C   sN   t jj|Ž }t  |jd d… ¡}t j ||¡}tt j||t	|jƒd�|ƒ d S r  )
r$   rk  rˆ  r]  r‘   r   rþ  r   rý  r¥  )rE   r‘   r0   r1   rµ   r(   r(   r)   Útest_tensorsolve_result¨  s    z'TestTensorsolve.test_tensorsolve_result)
rM   rN   rO   rä   rå   r  r$   r]  rô  r  r(   r(   r(   r)   r   �  s    þ
ÿr   c                  C   sT   t jddgddggdd�} ttdƒ� t | ¡ W d   ƒ d S 1 s#w   Y  d S )Nrf   r‹   rh   r{   Úfloat16r5   zunsupported in linalg)r$   r   r   rÆ  r   rŠ  )r˜  r(   r(   r)   Útest_unsupported_commontype²  s   "ÿr  z,Bad memory reports lead to OOM in ci testingc                  C   sR   d} t jd| gt jd�}t jddgt jd�}d|d< t  ||¡}t|d dƒ d S )Nì        rf   r5   )r   rŠ   )r$   r  r’  r]  r   r   )r™  r0   r1   rU  r(   r(   r)   Útest_blas64_dot½  s   r  z*Numpy not compiled with 64-bit BLAS/LAPACKc            
   	   C   sÀ   t j} t jjj}d}d}|}t jddg| d�}t jdg| d�}t jdg| d�}|||||||ddƒ}t|d dƒ t|d |ƒ t|d |ƒ t| ¡ ƒ}	t	d	|	  k oZd
k ƒ d S   ƒ d S )Nl       rf   r5   rŠ   r   Úinfor�  r™  r  l        )
r$   r  r   r²  Údgeqrfr  r   rè  Úitemr   )
r.   Úlapack_routiner�  r™  Úldar0   Úworkro  ÚresultsÚlworkr(   r(   r)   Ú!test_blas64_geqrf_lwork_smoketestÇ  s   
&r  c                  C   sF   t  d¡ d¡} t j | ¡}t  g d¢g d¢g d¢g¡}t||ƒ d S )Né<   ©ri   rj   r{   )r   r+   r,   é   )ræ  é   r­  é&   )rT  é.   é4   é:   )r$   r  r�   r   rŽ  r   r   ©rµ   rú  r	  r(   r(   r)   Útest_diagonalã  s   ýÿr  c                  C   s8   t  d¡ d¡} t j | ¡}t  g d¢¡}t||ƒ d S )Nr  r  )é$   ét   éÄ   )r$   r  r�   r   Útracer   r   r  r(   r(   r)   Ú
test_traceó  s   r  c                  C   sÎ   t  d¡ d¡} t j | | d ¡}t  g d¢g d¢g d¢g¡}t||ƒ g d¢}g d¢}t j ||¡}tg d¢ƒ}t||ƒ ttdƒ� | d d …dd …f }t j ||¡ W d   ƒ d S 1 s`w   Y  d S )	Nr@  r€  rf   )rŠ   rh   rŠ   ry  r
  )r˜   r+   r˜   z8input arrays must be \(arrays of\) 3-dimensional vectors)	r$   r  r�   r   Úcrossr   r   r   r  )rµ   rú  r	  r8  r,  Úx_2dimr(   r(   r)   Ú
test_crossþ  s(   ý

þ"ûr!  c                  C   sH   t  d¡ d¡} t j | | ¡dksJ ‚t jj| | ddgd�dks"J ‚d S )Nr+   r5  é7   r"  rE  )r$   r  r�   r   rý  )rµ   r(   r(   r)   Útest_tensordot	  s   "r#  c                  C   sD   t  d¡ d¡} t j | | j¡}t  ddgddgg¡}t||ƒ d S )Nr+   r5  r{   é   r�  )r$   r  r�   r   r	   rŸ  r   r   r  r(   r(   r)   Útest_matmul!	  s   r%  c                  C   st   t  d¡ d¡} t j | ¡}| j}t||ƒ ttdƒ� t j | d d …df ¡ W d   ƒ d S 1 s3w   Y  d S )Nr+   r5  z$array must be at least 2-dimensionalr   )	r$   r  r�   r   Úmatrix_transposerŸ  r   r   r  r  r(   r(   r)   Útest_matrix_transpose+	  s   
ÿ"ýr'  c                  C   s\   t  d¡ d¡} t j | ¡}t|t  d¡dd� t jj| dd�}t|t  dgg¡dd� d S )Nr@  r€  çž^)Ë�,@ri   ©r3   T©r"  )r$   r  r�   r   Úmatrix_normr   r  r   )rµ   rú  r(   r(   r)   Útest_matrix_norm8	  s
   r,  c                  C   s˜   t  d¡ d¡} t j | ¡}t|t  d¡dd� t jj| dd�}t|t  g d¢¡dd� t jj| d	d
�}t jdddd�}t	|j
|j
ƒ t||dd� d S )Nr@  r€  r(  ri   r)  r   r€  )gÚ|a2Õ@gsh‘í|? @gDioð…I#@Tr*  r¤   r  r5   )r$   r  r�   r   Úvector_normr   r  r   Úfullr   r‘   r  r(   r(   r)   Útest_vector_normC	  s   ÿr/  )r+   r,   )�Ú__doc__r©  r›  r¦   Ú	threadingrÃ   rÂ  rÄ  rä   Únumpyr$   r   r   r   r   r   r   r   r	   Únumpy._corer
   Únumpy.exceptionsr   r   r   r   r   r   Únumpy.linalgr   r   r   r   r   Únumpy.linalg._linalgr   Únumpy.testingr   r   r   r   r   r   r   r   r   r    Únumpy.linalg.lapack_liteÚImportErrorr*   r/   r6   r8   r9   rQ   r@   rU   rk  rl  r�   rª   rm  r”   r¼   r¿   rÀ   rÌ   rÖ   rÙ   rÝ   rè   rë   rð   rò   rú   r  r  r  r   r$  r)  r0  r7  r:  rC  rL  rM  rW  rq  rv  rw  rx  r~  r  rŽ  r“  rž  rå   r  r©  rÐ  rÔ  ræ  rì  rí  rô  r,  r8  r9  rE  rG  rH  rJ  rK  rL  rM  r\  r]  r  r“  r¤  rÏ  r§  Úactive_countr¼  ræ   rÊ  rË  rî  r   r  r­  r  rp  r  r  r  r!  r#  r%  r'  r,  r/  r(   r(   r(   r)   Ú<module>   s6   (0ü	þþþþþþý
þ
þþã#þþþþÿýÿýÿýÿýÿýÿý
þ
þ
þ
ý
ýÎ9þþþþýþþþé 
!0

K	$.Cý
*1V6; x) #B

þ
1" )

	ÿ

