
    ^Mh}                    (+   d dl mZ d dlZd dlmZmZmZmZmZm	Z	 d dl
Z
d dl
mZ d dlZd dlmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d d	l+m,Z,m-Z- d dl.m/Z0 	 d d
l1m2Z2 n# e3$ r dZ2Y nw xY w	 d dlm4Z5 n# e3$ r dZ5Y nw xY wd dl)m6Z6 d dl7m8Z8 ej9        ej:        gZ;ej<        ej=        gZ>e;e>z   Z?dxZ@ZAe2(e2d         d         d         Z@e2d         d         d         ZAd ZBd ZC G d d          ZD G d d          ZE G d d          ZFe
jG        H                    de?          e
jG        H                    dg d          d                         ZI G d d          ZJ G d  d!          ZK G d" d#          ZL G d$ d%          ZMe
jG        H                    de?          e
jG        H                    d&g d'          e
jG        H                    d(d)d*g          e
jG        H                    d+d,d)g          e
jG        H                    d-d.d/g          d0                                                             ZNd1 ZOd2 ZPd3 ZQd4 ZR G d5 d6          ZS G d7 d8          ZTd9 ZUd: ZVd; ZWd< ZXd= ZYd> ZZd? Z[d@ Z\dA Z]dB Z^dC Z_dD Z`dE ZadF Zb G dG dH          ZcdI ZddJ ZedK ZfdL Zge
jG        h                    dMdNO          dP             ZidQ Zje
jG        H                    dRdSdTg          e
jG        H                    de;          e
jG        H                    dU ekdV                    e
jG        H                    dW ekdX                    e
jG        H                    dY ekdX                    e
jG        H                    dZd d[g          e
jG        H                    d\d d[g          dbd]                                                                                    Zle
jG        H                    de;          d^             Zme
jG        H                    d_dUd`idWd`idYd`idZd`idad`id\d`if          db             Zne
jG        H                    dc ejo        g ddg deg dfg dgg dhg dig           ejo        g dj           ejo        g dkg dlg dmg dng dog dpg           ejo        g dqg drg dsg dtg          fg          du             Zpe
jG        H                    de?          dv             Zqe
jG        H                    dw ejo        g dx           ejo        g dy           ejo        g dz           ejo        g d{           ejo        g d|           ejo        g d}           ejo        g d~           ejo        ddgddgddgddgddgg           ejo        ddgddgd.dgddgdd[gg          f	 ejo        g d           ejo        g d           ejo        g d           ejo        g d           ejo        g d           ejo        g d           ejo        g d~           ejo        ddgddgddgddgddgg           ejo        ddgddgddgddgddgg          f	g          d             Zre
jG        H                    de?          e
jG        H                    d&g d          e
jG        H                    d-d.d/g          d                                     Zse
jG        H                    de?          e
jG        H                    dg d          d                         Zte
jG        H                    d eue;e;z   e?                    d             Zve
jG        H                    d eue;e;z   e?                    d             Zwe
jG        H                    d eue;e;z   e?                    d             Zxe
jG        H                    d ejo        g d           ejo        g d           ejo        g d           ejo        g d           ejo        dVd/gd`dXgdd`gddgddgg           ejo        ddgddgd[dgddVgd.dgg          f ejo        g d           ejo        g d           ejo        g d           ejo        g d           ejo        ddgddgddgddgg           ejo        ddgddgddgddgg          fg          dʄ             Zyd˄ Zze
jG        H                    d eue?e;e;z                       e
jG        H                    d ekd.                    d΄                         Z{e
jG        H                    d eue?e;e;z                       e
jG        H                    d ekd.                    dτ                         Z|e
jG        H                    d eue?e;e;z                       e
jG        H                    d ekd.                    dЄ                         Z}e
jG        H                    d eue?e;e;z                       e
jG        H                    d ekd.                    dф                         Z~e
jG        H                    dd ejo        g dӢ           ejo        g dԢ           ejo        g dբ           ejo        g d֢g dעg dآg d٢g          fg          dڄ             Ze
jG        H                    de?          e
jG        H                    dg dܢ          d݄                         Zdބ Ze
jG        H                    dg d          e
jG        H                    dddg          d                         Ze
jG        H                    dddg          e
jG        H                    dddg          d                         Ze
jG        H                    de?          e
jG        H                    dg d          d                         Ze
jG        H                    de?          d             Ze
jG        H                    de?          e
jG        H                    dddMg          e
jG        H                    ddd,g          d                                     Ze
jG        H                    de?          e
jG        H                    dd d[g          e
jG        H                    ddd,g          d                                     Ze
jG        H                    de?dz            e
jG        H                    dddMg          e
jG        H                    ddd,g          d                                     Ze
jG        H                    d ejo        g dx           ejo        g dy           ejo        g dz           ejo        ddgddgddgddgddgg           ejo        ddgddgd.dgddgdd[gg          f ejo        g d           ejo        g d           ejo        g d           ejo        ddgddgddgddgddgg           ejo        ddgddgddgddgddgg          fg          d             Ze
jG        H                    d eue?e;e;z                       e
jG        H                    ddd fd,d fg          d                         Ze
jG        H                    d eue?e;e;z                       e
jG        H                    ddd fd,d fg          d                         Ze
jG        H                    d eue?e;e;z                       e
jG        H                    ddd fd,d fg          d                         Ze
jG        H                    d  ejo        g d           ejo        g d           ejo        dVd/gd`dXgdd`gddgddgg           ejo        ddgddgd[dgddVgd.dgg          f ejo        g d           ejo        g d           ejo        ddgddgddgddgg           ejo        ddgddgddgddgg          fg          d             Ze
jG        H                    dddMg          e
jG        H                    de?          d                         Ze
jG        H                    de?          d             Ze
jG        H                    d ejo        g dg dg dg d	g           ejo        g d
g dg dg d	g          dd[f ejo        g dg dg dg dg           ejo        g dg dg dg dg          d[dXfg          d             Ze
jG        H                    de?          d             Ze
jG        H                    de?          d             Ze
jG        H                    d ejo        g dg dg dg dg           ejo        g dg dg dg d g           ejo        g d!g d"g d#g d$g           ejo        g d%          d&d'f ejo        g d(g d)g d*g d+g           ejo        g d,g d-g d.g d/g           ejo        g d0g d1g d2g d3g           ejo        g d%          d4d5fg          d6             Ze
jG        H                    de?          d7             Ze
jG        H                    d8 ejo        g d9g d:g d;g d<g           ejo        g d=g d:g d;g d>g           ejo        g d?g d@g dAg dBg           ejo        g dCg dDg dEg dFg           ejo        g dGg dHg dEg dIg           ejo        g dJg dKg dLg dMg           ejo        g d=g dNg dOg dPg           ejo        g dQg dRg dSg dTg          fg          e
jG        H                    de;          dU                         Ze
jG        H                    de;          e
jG        H                    dVdW          e
jG        H                    dXg dY          dZ                                     Ze
jG        H                    d[ddg          e
jG        H                    de?          e
jG        H                    dd\          d]                                     Ze
jG        H                    d& ed^                    e
jG        H                    d_g d`          e
jG        H                    d+d,d)g          e
jG        H                    de?          da                                                 ZdS (c      )reduceN)assert_equalassert_array_almost_equalassert_assert_allcloseassert_almost_equalassert_array_equal)raises)eyeoneszeros
zeros_liketriutriltril_indicestriu_indices)randrandintseed)_flapacklapackinvsvdcholeskysolveldlnorm
block_diagqreighqz)_compute_lwork)ortho_groupunitary_group)CONFIG)_clapack)get_lapack_funcs)get_blas_funcszBuild Dependenciesblasnameversionc                     |t           v r+ |j        |   |j        |  dz  z                       |          S  |j        |                      |          S )N              ?)COMPLEX_DTYPESr   astype)shapedtyperngs      ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr4   1   s\    % #(E"4'()/	738U""5)))    c                  r   t           j        t          j        d           t	          t           j                                                  } h d}t                      }t          t                     D ]4}|                    d          s||vr|| vr|	                    |           5|g k    s
J d            dS )z%Test that all entries are in the doc.Nzlapack.__doc__ is None>   npclapackflapackdivision	HAS_ILP64print_functionabsolute_importfind_best_lapack_type_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   __doc__pytestskipsetsplitlistdir
startswithappend)namesignore_listmissingr*   s       r3   test_lapack_documentedrL   9   s    ~,---$$&&''E	 	 	K ffGF ! !$$ 	![)@)@E!!NN4   b===N=====r5   c                   &    e Zd Zd Zd Zd Zd ZdS )TestFlapackSimplec           	         g dg dg dg}g dg dg dg dg}dD ]}t          t          |d	z   d           }| ||          \  }}}}}	t          |	 t          |	                     t	          ||           t          ||fd
t          |d
                   dz
  f           t	          |t          j        t          |                                ||dd          \  }}}}}	t          |	 t          |	                     d S )N)         )         )      	   )rP   r   r   ga2U0*3?)rS   r   r   gMb`?)rV   rP   r   r   )r   rP   r   r   sdzcgebalr   rP   )permutescale)	getattrr9   r   reprr   r   lenr7   r   )
selfaa1pfbalohipivscaleinfos
             r3   
test_gebalzTestFlapackSimple.test_gebalR   s6   YY			999-oooollll  	* 	*A7D11Ay)*1&BB$Hd4jj)))%b!,,,"bAs1Q4yy{#3444%hA@@@)*2q)B)B)B&BB$Hd4jj))))	* 	*r5   c                     g dg dg dg}dD ]K}t          t          |dz   d           }| ||          \  }}}t          | t          |                     Ld S )Nikiifi     i"  iiidgehrd)r]   r9   r   r^   )r`   ra   rc   rd   httauri   s          r3   
test_gehrdzTestFlapackSimple.test_gehrdg   s    __^^  	* 	*A7D11AyAaDDMBTHd4jj))))	* 	*r5   c           	         t          j        ddgddgg          }t          j        ddgddgg          }t          j        dd	gd
dgg          }d}dD ]}|                    |          |                    |          |                    |          }}}t          d|f          \  }	|                                r|dxx         dz  cc<   d} |	|||          \  }
}}t          t          j        ||
          t          j        |
|          z   ||z              |	|||||          \  }
}}t          t          j        |                                j        |
          t          j        |
|                                j                  z   ||z  d            |	|||d          \  }
}}t          t          j        ||
          t          j        |
|          z
  ||z  d           d S )NrP   rQ   r   rS   rT   rU   rW   rX   
         TfdFD)trsylr-   C)tranatranbdecimal)isgn)	r7   arrayr/   r'   isupperr   dot	conjugatery   )r`   ra   bctransr1   rb   b1c1r{   xr\   ri   s                r3   
test_trsylzTestFlapackSimple.test_trsylr   s   Hq!fq!f%&&Hq!fq!f%&&Hq"gBx())  	= 	=E%!((5//188E??BB%j2%88FE}} 1"U2r2..NAud%bfRmmbfQmm&C&+bj2 2 2 #U2r2U%HHHNAud%F2<<>>+Q//"&BLLNN<L2M2MMBJ+ + + + #U2r2B777NAud%bfRmmbfQmm&C&+bj!= = = = =#	= 	=r5   c                 N   t          j        g dg dg dg          }dD ]}dD ]|}|                    |          }|                                r|dxx         dz  cc<   t	          d|f          \  } |||          }|d	v re|d
v rd}nd}t          j        t          j        t          j        t          j        |                                        }t          |||           |dv r't          j
        t          j        |                    }n}|dv r;t          j
        t          j        t          j        |          d                    }n>|dv r:t          j
        t          j        t          j        |          d                    }t          ||           ~d S )Nrl   rm   ro   rz   Mm1OoIiFfEer   r   r-   )langeFfEeFfrR   rV   Mm1Oor   axisIirP   )r7   r   r/   r   r'   sqrtsumsquareabsr   maxr   )	r`   ra   r1   norm_strrb   r   valuer   refs	            r3   
test_langezTestFlapackSimple.test_lange   s   HOONN  
  	- 	-E) - -XXe__==?? #tHHHNHHH)*re<<h++v%%}}"#"#'"&26"::)>)>"?"?@@C'sG<<<<4'' fRVBZZ00!U** fRVBF2JJQ%?%?%?@@!T)) fRVBF2JJQ%?%?%?@@ ,,,,1-	- 	-r5   N)__name__
__module____qualname__rj   rt   r   r    r5   r3   rN   rN   P   sP        * * **	* 	* 	*= = =8- - - - -r5   rN   c                       e Zd Zd Zd ZdS )
TestLapackc                 4    t          t          d          rd S d S Nempty_module)hasattrr9   r`   s    r3   test_flapackzTestLapack.test_flapack   #    7N++ 	D	 	r5   c                 4    t          t          d          rd S d S r   )r   r8   r   s    r3   test_clapackzTestLapack.test_clapack   r   r5   N)r   r   r   r   r   r   r5   r3   r   r      s2          
    r5   r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestLeastSquaresSolversc           	      @   t          d           t          t                    D ]\  }}d}d}d}t          ||                              |          }t          |                              |          }t          d|          \  }}	t          |	|||          }
 ||||
          \  }}}t          |dk                |||d	|         |

          \  }}}t          |dk               t          D ]}t          j
        ddgddgddgg|          }t          j
        g d|          }t          d||f          \  }}}|j        \  }}t          |j                  dk    r|j        d         }nd}t          ||||          }
 ||||
          \  }}}t          |d d         t          j
        ddg|          dt          j        |          j        z              ||          \  }}}}t!          ||           t"          D ]}t          j
        ddgddgddgg|          }t          j
        g d|          }t          d||f          \  }}}|j        \  }}t          |j                  dk    r|j        d         }nd}t          ||||          }
 ||||
          \  }}}t          |d d         t          j
        dd g|          dt          j        |          j        z              ||          \  }}}}t!          ||           d S )!N  rv      rP   )gels
gels_lworkr1   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrQ   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r   	enumerateDTYPESr   r/   r'   r"   r   REAL_DTYPESr7   r   r0   r_   r   finfoepsr	   r.   )r`   indr1   mnnrhsrb   r   glsglslwr   r?   ri   r   r   r   lqrr   	lqr_truths                      r3   	test_gelsz!TestLeastSquaresSolvers.test_gels   s   T


#F++ 	 	JCAADa""5))Ba&&B)*@NNNJC #5!Q55ER5111JAq$DAIR6#;eDDDJAq$DAI  	/ 	/EC:::'.35 5 5B ,,,E:::B&63b"X'? '?#D*e 8DAq28}}!!x{ #:q!T::E4Be444LCDAcrcFBH.A.@.B38%: %: %: "$BHUOO$7!79 9 9 9 "'rIq!QsI....# 	/ 	/EHc?$h/$h/18=? ? ?B 666eDDDB&63b"X'? '?#D*e 8DAq28}}!!x{ #:q!T::E4Be444LCDAcrcFH&J&J&L+02 2 28:28E??;N8NP P P P "'rIq!QsI..../	/ 	/r5   c                    t           D ]X}t          j        ddgddgddgg|          }t          j        g d|          }t          d	||f          \  }}|j        \  }}t          |j                  d
k    r|j        d         }nd} ||||d          \  }	}
}t          t          j        |	                    }|
} |||||ddd          \  }}}}t          |d d         t          j        ddg|          dt          j	        |          j
        z             t          |t          j        ddg|          dt          j	        |          j
        z             Zt          D ]i}t          j        ddgddgddgg|          }t          j        g d|          }t          d	||f          \  }}|j        \  }}t          |j                  d
k    r|j        d         }nd} ||||d          \  }	}}
}t          t          j        |	                    }t          |          }|
} ||||||ddd          \  }}}}t          |d d         t          j        ddg|          dt          j	        |          j
        z             t          |t          j        ddg|          dt          j	        |          j
        z             kd S )Nr   r   r   r   r   r   r   r   )gelsdgelsd_lworkrQ   rP   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r7   r   r'   r0   r_   intrealr   r   r   r.   )r`   r1   rb   r   r   r   r   r   r   workiworkri   r   
iwork_sizer   srankrwork
rwork_sizes                      r3   
test_gelsdz"TestLeastSquaresSolvers.test_gelsd  s     	9 	9EC:::'.35 5 5B ,,,E:::B!12J35r("< "<E; 8DAq28}}!!x{ !,Aq$ ; ;D%&&EJ$uRUJ%' 7  7Aq$AcrcFBH.A.@.B38%: %: %: "$BHUOO$7!79 9 9 9 Arx);):)<CH J  J  J!#BHUOO$7!79 9 9 9 9 $ 	P 	PEHc?$h/$h/18=? ? ?B 666eDDDB!12J35r("< "<E; 8DAq28}}!!x{ (3{1ar'B'B$D%&&EUJJ$uRUJ
%' 7  7Aq$AcrcFH&J&J&L+02 2 28:28E??;N8NP P P P AH&8:K%L+02 2 28:28E??;N8NP P P P P5	P 	Pr5   c           	         t           D ]V}t          j        ddgddgddgg|          }t          j        g d|          }t          d	||f          \  }}|j        \  }}t          |j                  d
k    r|j        d         }nd} ||||d          \  }	}
t          t          j        |	                    } |||d|dd          \  }}}}}	}
t          |d d         t          j        ddg|          dt          j	        |          j
        z             t          |t          j        ddg|          dt          j	        |          j
        z             Xt          D ]V}t          j        ddgddgddgg|          }t          j        g d|          }t          d	||f          \  }}|j        \  }}t          |j                  d
k    r|j        d         }nd} ||||d          \  }	}
t          t          j        |	                    } |||d|dd          \  }}}}}	}
t          |d d         t          j        ddg|          dt          j	        |          j
        z             t          |t          j        ddg|          dt          j	        |          j
        z             Xd S )Nr   r   r   r   r   r   r   r   )gelssgelss_lworkrQ   rP   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r`   r1   rb   r   r   r   r   r   r   r   ri   r   vr   r   r   s                   r3   
test_gelssz"TestLeastSquaresSolvers.test_gelss?  sw     	9 	9EC:::'.35 5 5B ,,,E:::B!12J35r("< "<E; 8DAq28}}!!x{ %Q444JD$&&E(-b"b%(N(N%Aq!T4AcrcFBH.A.@.B38%: %: %: "$BHUOO$7!79 9 9 9 Arx);):)<CH J  J  J!#BHUOO$7!79 9 9 9 9 $ 	9 	9EHc?$h/$h/18=? ? ?B 666eDDDB!12J35r("< "<E; 8DAq28}}!!x{ %Q444JD$&&E(-b"b%(N(N%Aq!T4AcrcFH&J&J&L+02 2 2 "$BHUOO$7!7	9 9 9 9
 Arx);):)<CH J  J  J!#BHUOO$7!79 9 9 9 91	9 	9r5   c           
         t           D ]r}t          j        ddgddgddgg|          }t          j        g d|          }t          d	||f          \  }}|j        \  }}t          |j                  d
k    r|j        d         }nd} ||||dt          j        |          j        z            \  }	}
t          t          j	        |	                    }t          j
        |j        d         dft          j                  } ||||t          j        |          j        |dd          \  }}}}}
t          |d d         t          j        ddg|          dt          j        |          j        z             tt          D ]r}t          j        ddgddgddgg|          }t          j        g d|          }t          d	||f          \  }}|j        \  }}t          |j                  d
k    r|j        d         }nd} ||||dt          j        |          j        z            \  }	}
t          t          j	        |	                    }t          j
        |j        d         dft          j                  } ||||t          j        |          j        |dd          \  }}}}}
t          |d d         t          j        ddg|          dt          j        |          j        z             td S )Nr   r   r   r   r   r   r   r   )gelsyr   rQ   rP   rv   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r7   r   r'   r0   r_   r   r   r   r   r   int32r   r.   )r`   r1   rb   r   r   gelsy_lworkr   r   r   r   ri   r   jptvr   r   jr   s                    r3   
test_gelsyz"TestLeastSquaresSolvers.test_gelsyx  sU     	9 	9EC:::'.35 5 5B ,,,E:::B!12J35r("< "<E; 8DAq28}}!!x{ %Q4BHUOO4G1GHHJD$&&E8RXa[!,BH===D"'%Bbhuoo6I(-ue#= #=Aq!T4AcrcFBH.A.@.B38%: %: %: "$BHUOO$7!79 9 9 9 9
 $ 	9 	9EHc?$h/$h/18=? ? ?B 666eDDDB!12J35r("< "<E; 8DAq28}}!!x{ %Q4BHUOO4G1GHHJD$&&E8RXa[!,BH===D"'%Bbhuoo6I(-ue#= #=Aq!T4AcrcFH&J&J&L+02 2 2 "$BHUOO$7!7	9 9 9 9 9+	9 	9r5   N)r   r   r   r   r   r   r   r   r5   r3   r   r      sY        B/ B/ B/H:P :P :Px79 79 79r59 59 59 59 59r5   r   r1   r0   )rR   rS   )rT   rQ      r  c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrf_lworkr   r   r   r   r'   r   )r1   r0   r  r   r   r   ri   s          r3   test_geqrf_lworkr    sM     #M%@@@KDAq+Q'''KE4qr5   c                       e Zd Zd ZdS )TestRegressionc                    t           D ]}t          j        d|          }t          dg|g          \  }t	          t
          ||d            ||          \  }}}}|t          v rLt          dg|g          \  }t	          t
          ||dd          |d            ||dd          |d           |t          v rKt          d	g|g          \  }	t	          t
          |	|dd          |d            |	|dd          |d           d S )
N)i,  rQ   r   gerqfrQ   r   orgrqrP   ungrq)r   r7   r   r'   assert_raises	Exceptionr   r.   )
r`   r1   ra   r
  rqrs   r   ri   r  r  s
             r3   test_ticket_1645zTestRegression.test_ticket_1645  s5    	- 	-E///A%wi!55FE)UAQ7777"'%((BT4##)7)aS99i233AFFFFbgs!,,,,,.(()7)aS99i233AFFFFbgs!,,,,	- 	-r5   N)r   r   r   r  r   r5   r3   r  r    s#        - - - - -r5   r  c                       e Zd Zd ZdS )	TestDpotrc           
      L   dD ]}dD ]}t           j                            d           t           j                            d          }|                    |j                  }t          d|f          \  }} ||||          \  }} |||          d         }	|rBt          t          j        |	          t          j        t          |                               t          t          j
        |	          t          j
        t          |                               !d S )N)TF*   )rR   rR   size)potrfpotri)cleanr   )r7   randomr   normalr   ry   r'   r   r   r   r   )
r`   lowerr  r   ra   dpotrfdpotrir   ri   dpts
             r3   test_gh_2691zTestDpotr.test_gh_2691  s   " 	C 	CE& C C	r"""I$$&$11EE!#JJ!12Dqe!L!L &E7774fQ&&q) C#BGCLL"'#a&&//BBBB#BGCLL"'#a&&//BBBBC	C 	Cr5   N)r   r   r   r!  r   r5   r3   r  r    s(        C C C C Cr5   r  c                       e Zd Zd ZdS )
TestDlasd4c                 ~   t          j        g d          }t          j        g d          }t          j        t          j        t          j        |dd                   t          j        dt          |          dz
  f          f          |d d t           j        f         f          }t          |dddd          }t          |          }t          j	        |d d d         |d         |t          |          z  z   gf          }t          j	        |d d d         df          }t          d	|f          }g }	t          d|          D ]G}
 ||
||          }|	                    |d                    t          |d
         dk    d|
z             Ht          j        |	          d d d         }	t          t          j        t          j        |	                     df           t#          ||	dt          j        t           j                  j        z  dt          j        t           j                  j        z             d S )N)r         @r   r   )g(\@g@g333333皙r   r   rP   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rR   zcLAPACK root finding dlasd4 failed to find                                     the singular value %izThere are NaN rootsd   atolr   )r7   r   hstackvstackdiagr   r_   newaxisr   concatenater   r'   rangerH   r   anyisnanr   r   float64r   )r`   sigmasm_vecMSMit_lensgmmvcr,  rootsiress               r3   test_sing_val_updatezTestDlasd4.test_sing_val_update  s9   ///**00011Iry"'&2,"7"7"$(As5zzA~+>"?"?"A B BQQQ
]+- . . %Eu#% % % VnfTTrTlVAYU9K-K,LMNNneDDbDk4011 6)44q&!! 	@ 	@A%3$$CLLQ   SVq[ $;=>$? @ @ @ @"%RVBHUOO,,,.CDEEEEBHRZ,@,@,D(D "*!5!5!99	; 	; 	; 	; 	; 	;r5   N)r   r   r   rC  r   r5   r3   r#  r#    s#        ; ; ; ; ;r5   r#  c                      e Zd Zej                            de          d             Zej                            dd eD                       ej                            dddg          ej                            dd	dg          d
                                     Zej                            dg dg dg dg          d             Z	d Z
ej                            dddg          d             ZdS )	TestTbtrsr1   c                 d   |t           v rat          j        g dg dg|          }t          j        ddgddgdd	gd
dgg|          }t          j        ddgddgddgddgg|          }n|t          v rdt          j        g dg dg dg|          }t          j        ddgddgddgddgg|          }t          j        ddgd d!gd"d#gd$d%gg|          }nt	          d&| d'          t          d(|          } |||d)*          \  }}t          |d+           t          ||d+d,-           d.S )/zTest real (f07vef) and complex (f07vsf) examples from NAG

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

        )p=
ףgQ@gHzG@g{Gz?)g      gq=
ףp@gHzGr   r   gp=
ף0rG  g(\+gףp=
0g333333*@g(\gHzG,gQ#rS   rP   r   rR   rQ   r  )y
ףp=
Q@y{Gz@GzyQ?HzGy)\(??)yQQ@yq=
ףpGz@yףp=
?{Gzr   )yQ?q=
ףp@y)\(zGr   r   yQ!
ףp=
yףp=
8Gzyp=
#/)\h7y\(LHzG @yQHz6@yףp=
3@(\=y{Gz-333333yQ+3@GzT5@y               @y      ?      @y      ?      y             yt&m=#yi6@Ug$B@y[a^C?b->y-@ji& *!z	Datatype z not understood.tbtrsLabr   uplor   h㈵>r   r/  N)r   r7   r   r.   
ValueErrorr'   r   r   )r`   r1   rL  r   x_outrI  r   ri   s           r3   test_nag_example_f07vef_f07vsfz(TestTbtrs.test_nag_example_f07vef_f07vsf  s    K4442224 %' ' 'B 65/!6* %.!5/+  %	& & &A
 Hq!f!2h !f "g' $)	* * *EE
 n$$KKKFFF:::< !&' ' 'B =.9*N;)>:)>:<  %	& & &A
 Hr6l%w/46JK35JKM $)	* * *EE @@@@AAA '%888%2---4T15qt444444r5   zdtype,transc                 >    g | ]}d D ]}|dk    r	|t           v ||fS ))Nry   r|   r|   )r   ).0r1   r   s      r3   
<listcomp>zTestTbtrs.<listcomp>3  sP     N N N"'N N6;&+sllu7K7K  %en7K7K7K7Kr5   rM  UrJ  r2  rT  c           	         t           j                            d          d\  }}t          d          }|dk    }||z  }	||	z
  }
t	          |	|
 dz
  d          }fd|D             }fd	|D             }|dk    rt          j                  ||	<   t          j        ||d
          }t          j        |dz   f          }t          |          D ]@\  }}|
                    |          ||t          |d          t          |z             f<   At          |f          } ||||||          \  }}t          |d           |dk    rt          ||z  |d           d S |dk    rt          |j        |z  |d           d S |dk    r.t          |j                                        |z  |d           d S t%          d          )Ni  )rS   rR   rQ   rI  r   rW  rP   r   c                 4    g | ]}t          |          z
  S r   )r   )rU  r   r   s     r3   rV  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>H  s#    888aq3q66z888r5   c                 4    g | ]}t          |f          S r   )r4   )rU  widthr1   r2   s     r3   rV  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>I  s7     + + + -eXucBB + + +r5   dia)formatr   )rL  r   rM  r   r2  rT  g-C6
?r   ry   r|   zInvalid trans argument)r7   r  RandomStater'   r5  r   spsdiagsr   r   diagonalr   minr4   r   r   ry   r   rP  )r`   r1   r   rM  r2  r   kdrI  is_upperkuklband_offsetsband_widthsbandsra   rL  rowkr   r   ri   r   r2   s    `                   @@r3   test_random_matriceszTestTbtrs.test_random_matrices2  s4    i##D))
 4 666CK(]"W R"q"--8888<888+ + + + +)+ + + 3;;///E"I Ie\%888 XrAvqk5))-- 	; 	;FC-.ZZ]]BsC1IIc!A#qkk))** (D	5#>>%2UFFF4T1C<<AE14000000c\\AC!GQT222222c\\ACMMOOa/>>>>>>5666r5   zuplo,trans,diag)rW  rT  Invalid)rW  rm  rT  )rm  rT  rT  c           	          t          dt          j                  }t          dd          }t          dd          }t	          t
          ||||||           dS )z?Test if invalid values of uplo, trans and diag raise exceptionsrI  r   rS   rQ   N)r'   r7   r8  r   r  r  )r`   rM  r   r2  rI  rL  r   s          r3   &test_invalid_argument_raises_exceptionz0TestTbtrs.test_invalid_argument_raises_exceptionf  sR     !
;;;!QZZAJJiAtUDAAAAAr5   c                     t          j        dt                    }t          j        dt                    }t          dt                    }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   rS   rI  r   )r   rR   rW  rK  N)r7   r   floatr'   r   )r`   rL  r   rI  r?   ri   s         r3   test_zero_element_in_diagonalz'TestTbtrs.test_zero_element_in_diagonals  sw     WV5)))GAU### 6665	%2---4T1r5   zldab,n,ldb,nrhs)rT   rT   r   rT   )rT   rT   rR   rT   c                     t          j        ||ft                    }t          j        ||ft                    }t          dt                    }t	          t
          |||           dS )z2Test ?tbtrs fails correctly if shapes are invalid.r   rI  Nr7   r   rq  r'   r  r  )r`   ldabr   ldbr   rL  r   rI  s           r3   test_invalid_matrix_shapesz$TestTbtrs.test_invalid_matrix_shapes  s`     WdAYe,,,GS$Ku--- 666iA.....r5   N)r   r   r   rA   markparametrizer   rR  rl  ro  rr  rw  r   r5   r3   rE  rE    s       [Wf--+5 +5 .-+5Z []N N+1N N NO O [Vc3Z00[Vc3Z00,7 ,7 10 10	O O,7\ [.33333333356 6B B	6 6B    [.**1  / /	 / / /r5   rE  r   )I1OrM  rW  rJ  r2  rT  r   rR   rv   c           	         t          j        |  | | | |            t          j                             t          j        dd                    }|                     ||f          |                     ||f          dz  z   }|                    t          j        d|                    dd          |                    }||z  }t          j        | t          j	                  r|j
        n|}|dk    rt          j        |          nt          j        |          }|dk    r+|t          j        |          d d t          j        f         z  }|                    |           }t!          d|f          } |||||          \  }	}
|d	k    r|t          j                            |t          j        
          }t          j                            t          j                            |          t          j        
          }d||z  z  }nnt          j        |                              d                                          }t!          d|f          \  }} ||          \  }}} ||||          \  }}
d}t1          |	||           d S )Nr   l   a$r  r-   rv   rW  trcon)r   rM  r2  rz  )ordrP   r   gecongetrfr   r   )r  r   r7   default_rngr   permutedlogspaceintegers
issubdtypefloatingr   r   r   r2  r3  r/   r'   linalgr   infr   r   r   r   r   )r1   r   rM  r2  r   r2   Aoffsetr~  rB  r?   norm_A
norm_inv_Ar   anormr  r  luipvtri   r   s                        r3   
test_trconr    sC    K5/$//d/A//000
)

q- @ @
A
AC

A
#**1a&*"9"9""<<A\\"+aa)<)<a@@AAFKA-r{33:Ackk


rwqzzAs{{	RWQZZ2:&&	AWqd++EU14d666FCs{{rv..Y^^BIMM!$4$4"&^AA
6J&'q		1%%))++'(:QDAAuqD$r5t,,,Q
 DC4((((((r5   c                     dD ] } t          d|           }t          j        d|           }t          j        d|           }t          j        |          r|dz  } |||          \  }}}t	          |d           t	          |d           t          j        |          rUt	          |d	           t          t          |t                               t          t          |t                               t	          |d
           d S )Nrz   lartgr   rR   rS   r-   333333?r   y       皙?)	r'   r7   r   iscomplexobjr   r   
isinstancecomplexrq  )r1   r  rd   gcssnrs          r3   
test_lartgr    s    ) ) 666HQHQ?1 	GAE!QKK	BG$$$3?1 	)B	***Jq'**+++Jr5))****B((((') )r5   c                     dD ]} d}d}t          j        dd|           }t          j        dd|           }dt          j        |           j        dz
   z  }| dv rt	          d	| 
          }d}nt          d	| 
          }|dz  }|dz  }d}t           |||||          g dg dg|           t           |||||d          g ddd||gg|           t           |||||dd          g d||ddgg|           t           |||||ddd          g d||ddgg|           t           |||||ddd          g dd|d|gg|           t           |||||ddddd	  	        g d||d|gg|           t           |||||ddd          g dd|d|gg|            |||||dd          \  }}	t          ||u            t          |	|u            t          |g d|           t          |	g d|           d S )Nrz   r  r  rS   rR   rv   rP   fdrotr   y             r-   y              @)rT   rT   rT   rT   )r   r   r   r   r/  rQ   )r   )rT   rT   rR   rR   r   )offxoffy)rR   rR   rT   rT   )incxr  r   )rT   rR   rT   rR   )r  incyr   )r  r  r  r  r   )rR   rR   rT   rR   r  )r  r  r   )overwrite_xoverwrite_y)r7   fullr   	precisionr(   r'   r   r   )
r1   r   r   ur   r/  r  rd   ra   r   s
             r3   test_rotr    s4     $4 $4GAq%  GAq%  RXe__.q011D== e444CAA"5666CHAGAAAq!Q,,,*6,,*8>B	D 	D 	D 	DAq!Q!,,,|||011a|/=CG	I 	I 	I 	IAq!QQQ777%1a|44	A 	A 	A 	AAq!QQQ!<<<%1a|44	A 	A 	A 	AAq!QQQ!<<<%1a|44	A 	A 	A 	AAq!QQQQQ!LLL%1a|44	A 	A 	A 	AAq!QRbA>>>%1a|44	A 	A 	A 	A s1aA1!<<<1QQ<<<d3333<<<d33333I$4 $4r5   c            
         t           j                            d           t           j                            d          } | j                            |           } t           j                            d          dt           j                            d          z  z   }|j                                                            |          }dD ]}t          ddg|          \  }}|dv r|                                }n|                                 } ||j        d	         d
z
  |d         |dd d	f                   \  }}}t          j	        |d d d	f                   }	|d         |	d	<   ||	d
<   t          j	        |d
d d	f                   }
d|
d	<   ||
d
d <    ||
|
                                |d
d d d f         t          j        |j        d
                             |d
d d d f<    ||
||d d d
d f         t          j        |j        d	                   d          |d d d
d f<   t          |d d d	f         |	d           t          |d	d d f         |	d           d S )Nr   )rS   rS   r-   rz   larfglarfr   FDr   rP   rP   r   rQ   r   r   RsiderN  r  )r7   r  r   ry   r   conjr'   copyr0   r   r   r   r   )a0a0jr1   r  r  ra   alphar   rs   expectedr   s              r3   test_larfg_larfr    s^   INN4			&	!	!B	"B
)

6
"
"R	(8(8(@(@%@
@C
%**,,

3

C
  6 6&'8FFFtD==

AA		A agajlAdGQqrr1uX>>q# =111a4))g M!ABBE(##!!"" 43==??Aabb!!!eHbhqwqz6J6JKK!""aaa% 43!!!QRR%"(171:*>*>SIII!!!QRR%!!!Q$5555!QQQ$5555596 6r5   c                      t          dt          j        d          } d}t          | ||dd          }|dk    s|dk    sJ d S d S )	Ngesdd_lwork	preferredr1   ilp64iA%  T)r(  r'  i`DiD)r'   r7   float32r"   )sgesdd_lworkr   r   s      r3    test_sgesdd_lwork_bug_workaroundr  #  sq     $M*57 7 7LA<A&*$@ @ @E  I)!3!3!3!3!3!3r5   c                       e Zd Zej                            de          d             Zej                            de          ej                            dd          d                         ZdS )	TestSytrdr1   c                     t          j        d|          }t          d|f          }t          t          ||           d S )Nr   r   sytrdr7   r   r'   r  rP  )r`   r1   r  r  s       r3   test_sytrd_with_zero_dim_arrayz(TestSytrd.test_sytrd_with_zero_dim_array@  sA     HV5))) 1$//j%+++++r5   r   rP   rR   c                    t          j        ||f|          }t          d|f          \  }}t          j        d||dz   z  dz  dz   |          |t          j        |          <    ||          \  }}t          |d            ||d|          \  }}	}
}}t          |d           t          ||dt          j        |          j        z  d	           t          |	t          j	        |                     t          |
d
           t          |d
            |||          \  }}	}
}}t          |d           t          j
        ||          }t          j        |j        d                   }|	|||f<   t          j        |j        d         dz
            }|
||dz   |f<   |
|||dz   f<   t          j        |||          }t          |dz
            D ]|}t          j        ||          }|d ||dz   f         |d |<   d||<   t          j        |||          ||         t          j        ||          z  z
  }t          j        ||          }}t          j        |d          }|j        |         ||<   t          j        |j        t          j        ||                    }t          ||dt          j        |          j        z  d	           d S )Nr   )r  sytrd_lworkrP   rQ   r   r  r   rT   r   r.          r   r   )r7   r   r'   arangetriu_indices_fromr   r   r   r   r2  r   r0   r   r5  outerr   r   ry   )r`   r1   r   r  r  r  r   ri   datarp   ers   ry   rk  k2QrA  r   Hi_lowerQTAQs                        r3   
test_sytrdzTestSytrd.test_sytrdG  s    HaV5))) 5t<< 	{
 IaAaC!AU333 	
"
q
!
!" "k!nntT1 !&aq > > >aCT1aa(;&;#FFFF271::&&&3S!!! !&au 5 5 5aCT1
 M!5)))Iagaj!!!Q$Yqwqz!|$$"Q$("bd( F1au%%%qs 	 	A%(((A!QqSMAbqbEAaDq!5)))CFRXa^^,CCAq!AA /!R((S\'
vac26!Q<<(( 	aa(;&;#FFFFFFr5   N)	r   r   r   rA   rx  ry  r   r  r  r   r5   r3   r  r  ?  s        [Wk22, , 32, [Wk22[S&))7G 7G *) 327G 7G 7Gr5   r  c                       e Zd Zej                            de          d             Zej                            d ee	e                    ej                            dd          d                         Z
dS )	TestHetrdcomplex_dtypec                     t          j        d|          }t          d|f          }t          t          ||           d S )Nr   r   hetrdr  )r`   r  r  r  s       r3   test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_array  sA     HV=111 1$//j%+++++r5   zreal_dtype,complex_dtyper   r  c           	      >   t          j        ||f|          }t          d|f          \  }}t          j        d||dz   z  dz  dz   |          dt          j        d||dz   z  dz  dz   |          z  z   |t          j        |          <   t          j        |t          j        t          j        |                               dD ]"} |||          \  }}	t          |	d           #t          ||          }
 ||d|
	          \  }}}}}	t          |	d           t          ||d
t          j        |          j        z  d           t          |t          j        t          j        |                               t          |d           t          |d            |||
          \  }}}}}	t          |	d           t          j        ||          }t          j        |j        d         t                    }||||f<   t          j        |j        d         dz
  t                    }|||dz   |f<   ||||dz   f<   t          j        |||          }t#          |dz
            D ]}t          j        ||          }|d ||dz   f         |d |<   d||<   t          j        |||          ||         t          j        |t          j        |                    z  z
  }t          j        ||          }t          j        |d          }t          j        |j        |                   ||<   t          j        t          j        |j                  t          j        ||                    }t          ||dt          j        |          j        z  d           d S )Nr   )r  hetrd_lworkrP   rQ   r-   r   rP   r  r   r  rT   r   r.  r  r   r   rv   )r7   r   r'   r  r  fill_diagonalr   r2  r   r"   r   r   r   r   r0   r   r   r5  r  r  r   r   ry   )r`   r   
real_dtyper  r  r  r  r   r?   ri   r   r  rp   r  rs   ry   rk  r  r  rA  r   r  r  QHAQs                           r3   
test_hetrdzTestHetrd.test_hetrd  s    HaV=1115t<< 	{
 IaAaC!AZ88829Q1Q3
1J????@ 	
"
q
!
!" 	BGBGAJJ//000  	" 	"A!k!1---GAtq!!!! {A.. !&aq > > >aCT1aa(<(<(@&@sKKKK27271::..///3S!!! !&au 5 5 5aCT1
 M!:...Iagaj,,,!Q$Yqwqz!|3///"Q$("bd( F1a}---qs 	 	A-000A!QqSMAbqbEAaDq!=111a&28Arwqzz2223Aq!AA /!R((WQS\**'
vbgacllBF1aLL11 	!"RXj1155C	 	 	 	 	 	r5   N)r   r   r   rA   rx  ry  r.   r  zipr   r  r   r5   r3   r  r    s        [_n==, , >=, [7 Sn==? ?[S&))A A *)? ?A A Ar5   r  c            
         t          t                    D ]_\  } }t          d|          \  }}t          |ddd          }| dk     rYt	          j        g dg dg d	g d
g dg dg|          }t	          j        g d|          }t	          j        ddg|          }n\t	          j        g dg dg dg dg dg dg          }t	          j        dgdgdgdgdgdgg          }t	          j        d|          }t	          j        g dg dg|          } ||||||          \  }	}	}	}
}	| dk     rt	          j        g d          }nt	          j        g d          }t          |
|d            ad S )!N)gglsegglse_lworkr   rU   rS   rQ   )r   r   rc   )g=
ףp=g{Gzg(\ؿ      ?)zGgHzG?gףp=
ӿQ)ffffff@gQ?g?gffffffֿ)r  g{Gz?Qg{Gz?)333333?g333333?r  g
ףp=
)g{Gz{Gz?gzG      ?)g      r  gGz?gHzGgzGg=
ףp=?r  )yQ?QyQQ?yQ{Gz @y=
ףp=?)y\(\￮Gz?y333333RQ?yQzG?yQQ?)yףp=
?q=
ףpݿy)\(?{Gz?y)\(?(\ſy(\333333?)yGz?RQ?yRQ?HzGy\(\
ףp=
׿y)\(?ɿ)y(\?RQ?y?{Gz?y(\ſq=
ףpݿyQ?q=
ףp?)yHzG?Qѿy?QyQ뱿Gz?yp=
ף?p=
ף?yRQ
ףp=
?yffffff?GzyzG GzyQ?ffffff
@yp=
ף)\(@y(\ @Q?)r   r        r  )r  r   r  r  r   )^"L?\}?r  r  )y!f?$_Kdy^gŵ翸F@y!f?}dy61ŵe_@r   )r   r   r'   r"   r7   r   r   r   )r   r1   func
func_lworkr   ra   r   rp   r   r?   resultr  s               r3   
test_gglser    sF   '' ,? ,?
U+,D279 9 9jzQ!q999775555553334443334446
 >CD D DA AAAOOOA"b///AA MMMNNNKKKKKKKKKKKKM N NA ;-%,&-%,&-%,( ) )A %(((AH'''):):):;5III!T!Q1E:::1a77x !- !- !- . .HH
 x !: !: !: ; ;H 	"&(A>>>>>Y,? ,?r5   c            
      P   t          d           t          t          t          z             D ]x\  } }d}| dk     rIt	          d|          }t	          d|          \  }}t          ||                              |          }n\t	          d|          }t	          d|          \  }}t          ||          t          ||          d	z  z                       |          }||                                j        z   d
z  d
t          j
        ||          z  z   }t          |d          }t          ||          } |||d          \  }	}
} ||	|
|d          \  }}t          t          d|z  t          j                            |d          z
            |z  dk                zd S )Nr   rv   rS   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr-   rQ   rP   )r   r  )ra   ipivr  r  rc   )r   r   r   r.   r'   r   r/   r  ry   r7   r   r   r"   r   r   r  cond)r   r1   r   r  funconfunctrfr  r  r   ldur  r?   rconds                r3   test_sycon_heconr
    s   JJJ~ 566 A A
U77)-uEEEJ./AOOOOFGa##E**AA *-uEEEJ./AOOOOFGad1ajjm+33E::A ^Q26!5#9#9#9!99Q

z1--wqQ777T16Cd%qAAAqAeGbinnQ!n44455e;a?@@@@-A Ar5   c                     t          d           t          t                    D ]2\  } }d}t          d|          \  }}}}t	          ||                              |          }||j        z   dz  }t	          ||                              |          }||j        z   dz  dt          j        ||          z  z   } |||          \  }	}
}t          |dk                ||          \  }}t          |dk                |||          \  }}t          |dk                ||          \  }}
}t          |dk               t          ||	d           4d S )	Nr   rv   )r  sygstsyevdsygvdr   rQ   r   giUMu?r   )r   r   r   r'   r   r/   ry   r7   r   r   r   )r   r1   r   r  r  r  r  r  Beig_gvdr?   ri   r   ra   eigs                  r3   
test_sygstr    s   JJJ,, 3 3
U%5 7I<A&C &C &C"ueU AJJe$$WaKAJJe$$WaK!bfQe44444 !5A;;D	 %((4	%1++4	uQxxQ	W62222253 3r5   c                     t          d           t          t                    D ]\  } }d}t          d|          \  }}}}t	          ||                              |          dt	          ||                              |          z  z   }||                                j        z   dz  }t	          ||                              |          dt	          ||                              |          z  z   }||                                j        z   dz  dt          j	        ||          z  z   } |||          \  }	}
}t          |dk                ||          \  }}t          |dk                |||          \  }}t          |dk                ||          \  }}
}t          |dk               t          ||	d	           d S )
Nr   rv   )r  hegstheevdhegvdr   r-   rQ   r   -C6?r   )r   r   r.   r'   r   r/   r  ry   r7   r   r   r   )r   r1   r   r  r  r  r  r  r  r  r?   ri   r   ra   r  s                  r3   
test_hegstr  =  s   JJJ// 1 1
U%5 7I<A&C &C &C"ueU AJJe$$rDAJJ,=,=e,D,D'DD^QAJJe$$rDAJJ,=,=e,D,D'DD^QRVAU%;%;%;!;; !5A;;D	 %((4	%1++4	uQxxQ	W40000051 1r5   c                     t           j                            d          } d\  }}t          t                    D ]\  }}t          d|          \  }}t          |||          }|dk     r7t          |                     ||          	                    |                    }nPt          |                     ||          |                     ||          dz  z   	                    |                    }t          t          ||j                    |||          \  }	}
t          |
dk               t          j        |	d	d	d	|f         t          j        |||z
  f|          f          }t          j        t          j        ||          |	d	d	|d	f         f          t          j        ||          fd
t#          |          D             }t%          t           j        |          }t)          |                    |          |z
  t+          ||          dt          j         |d          j                  z  d           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   rv      tzrzftzrzf_lworkr   rQ   r-   r   r   Nc           
          g | ]P}|         |gd d f         j                             |gd d f                                                   z  z
  QS Nry   r   r  rU  r   IdVrs   s     r3   rV  ztest_tzrzf.<locals>.<listcomp>x  s[    MMMqr#a&A36A36)9)9::::MMMr5   rv   r   r  r.  )r7   r  r^  r   r   r'   r"   r   r   r/   r  r  ry   r   r0  r   r   r5  r   r   r   r   spacingr   )r2   r   r   r   r1   r  tzrzf_lwr   r  rzri   r  r   Zr#  r$  rs   s                 @@@r3   
test_tzrzfr)  \  sF    )


%
%CDAq'' F F
U*+C168 8 8xxA..77SXXa^^**51122AAchhq!nnsxx1~~b'88@@GGHHA 	i,,,au---C	 Ir!!!RaR%y"(Aqs85"A"A"ABCCIrvau---r!!!QRR%y9::VAU###MMMMMME!HHMMM263a1j%&@&@&@
55::? ; ;;"	F 	F 	F 	F 	F-F Fr5   c            	         t           j                            d          } t          t                    D ]\  }}d}|dk    rct          |                     ||          |                     ||          dz  z   t          |          z                                 |          }d}nHt          |                     ||          t          |          z                                 |          }d}t          d|          \  }}} ||          \  }	}
|                     |d	                              |          } |d
|	|          }t          |t          | |          |d	z  dk    rdnd            |d
|	||          }t          |t          |                                j         |          |d	z  dk    rdnd            |d          |t          j        |          t          j        |          f<    |d
|	||d          }t          |t          |                                j         |          |d	z  dk    rdnd           |                     d|                              |          } |d
|	||dd          }t          |t          | |j                                                  j        |d	z  dk    rdnd           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   rP   r-   r|   ry   )trttftfttrtfsmr   rQ   r   r   rS   rU   r   r   r   rW  )r   r2  rR   r  )r   r2  r  N)r7   r  r^  r   r   r   r   r   r/   r'   r   r   r  ry   r  )r2   r   r1   r   r  r   r+  r,  r-  Afpr?   r  solnB2s                 r3   	test_tfsmr2  ~  s   
 )


%
%C''  D  D
U77SXXa^^chhq!nnR&77#a&&@AAHHOOAEESXXa^^c!ff,--44U;;AE-.H49; ; ;ud qQHHQNN!!%((tBQ!$qb!/2Qw!||!!	D 	D 	D 	D tBQe,,,!$qvvxxzk1(=(=/2Qw!||!!	D 	D 	D 	D ).b		")A,,	!
$%tBQe#666!$qvvxxzk1(=(=/2Qw!||!!	D 	D 	D 	D XXa^^""5))tBRu3SAAA!$qb"$(<(<(>(>(@/2Qw!||!!	D 	D 	D 	D 	D? D  Dr5   c            	         t           j                            d          } d\  }}}t          t                    D ]\  }}t          d|          \  }}t          |||          }|dk     rtt          |                     ||          	                    |                    }	|                     ||          	                    |          }
t          d|          \  }}nt          |                     ||          |                     ||          dz  z   	                    |                    }	|                     ||          t          ||          dz  z   	                    |          }
t          d|          \  }}t          |||          } ||	|	          \  }}t          j
        t          j        ||          |d
d
|d
f         f          t          j        ||          fdt          |          D             }t          t           j        |          }|dk     rdnd}dt          j         |d          j                  z  } |||
|	          \  }}t#          |dk               t%          ||                    |
          z
  t'          |
          |d            |||
||          \  }}t#          |dk               t%          ||                                j                            |
          z
  t'          |
          |d            |||
d|          \  }}t#          |dk               t%          ||
                    |          z
  t'          |
          |d            |||
d||          \  }}t#          |dk               t%          ||
                    |                                j                  z
  t'          |
          |d           d
S )a  
    This test performs a matrix multiplication with an arbitrary m x n matrix C
    and a unitary matrix Q without explicitly forming the array. The array data
    is encoded in the rectangular part of A which is obtained from ?TZRZF. Q
    size is inferred by m, n, side keywords.
    r   )rv   r  r  r  r   rQ   )ormrzormrz_lworkr-   )unmrzunmrz_lworkr   Nc           
          g | ]P}|         |gd d f         j                             |gd d f                                                   z  z
  QS r   r!  r"  s     r3   rV  z$test_ormrz_unmrz.<locals>.<listcomp>  s[    NNNqr#a&A36A36)9)9::::NNNr5   ry   r|   rv   r   r   r  r.  r   r  )r  r   )r  r   r   )r7   r  r^  r   r   r'   r"   r   r   r/   r0  r   r5  r   r   r%  r   r   r   r   r  ry   )r2   qmqncnr   r1   r  r&  lwork_rzr  r|   orun_mrzorun_mrz_lw	lwork_mrzr'  ri   r   r  r   tolcqr#  r$  rs   s                        @@@r3   test_ormrz_unmrzrB    s    )


%
%CJBB'' .! .!
U*+C168 8 8x!(B3377SXXb"%%,,U3344AR  ''..A$45M;@%B %B %B!Hkk chhr2&&"b)9)9")<<DDUKKLLA"b!!DRLLO3;;EBBA$45M;@%B %B %B!Hk #;B77	ax000C Irvb...111bcc6
;<<VBe$$$NNNNNNE"IINNN263 QwwCEE#JJO,,,8BQi888D	QUU1XXz!}}3RHHHH8BQe9EEED	QVVXXZ^^A...
1C	! 	! 	! 	! 8BQS	BBBD	QUU1XXz!}}3RHHHH8BQSYOOOD	QUU16688:...
1C	! 	! 	! 	! 	![.! .!r5   c            	      |   t           j                            d          } t          t                    D ]\  }}d}|dk    rF|                     ||          |                     ||          dz  z                       |          }d}n+|                     ||                              |          }d}t          d|          \  }} ||          \  }}	t          |	d	k                ||d
          \  }
}	t          |	d	k                |||d          \  }}	t          |	d	k                |||d
          \  }}	t          |	d	k               t          |dz   |dz  f|          }t          |          dd|dz  df         |ddddf<   ||dz  dz   dddfxx         t          |          d|dz  d|dz  f                                         j        z  cc<   t          |dz   |dz  f|          }t          |          ddd|dz  f         |ddddf<   |d|dz  ddfxx         t          |          |dz  d|dz  df                                         j        z  cc<   t          ||                    dd                     t          ||                                j                            dd                     t          |
|                    dd                     t          ||                                j                            dd                      |||          \  }}	t          |	d	k                |||
d
          \  }}	t          |	d	k                ||||d          \  }}	t          |	d	k                ||||d
          \  }}	t          |	d	k               t          |t          |                     t          |t          |                     t          |t          |                     t          |t          |                     dS )z
    Test conversion routines between the Rectangular Full Packed (RFP) format
    and Standard Triangular Array (TR)
    r   r   rP   r-   r|   ry   )r+  r,  r   r   rJ  rM  rW  )transrrM  rQ   Nr   F)order)r7   r  r^  r   r   r   r/   r'   r   r   r   r  ry   r   r   reshape)r2   r   r1   r   A_fullrF  r+  r,  A_tf_Uri   A_tf_LA_tf_U_TA_tf_L_TA_tf_U_mA_tf_L_mA_tr_UA_tr_LA_tr_U_TA_tr_L_Ts                      r3   test_tfttr_trttfrU    s   
 )


%
%C'' 1: 1:
U77hhq!nnsxx1~~b'88@@GGFFFhhq!nn,,U33FF'(:%HHHuuV}}	uV#...	vf3???$	vf3???$	 !A#q!tE222<<1a4551"aaaAa!!!VUadUEQTE\ : ? ? A A CC!A#q!tE222v,,qqq%1a4%x0QQQ!Q$d6ll1a455!Q$%%<8==??AA!&(*:*:2S*:*I*IJJJ!("*--//"3";";Bc";"J"J	L 	L 	L 	"&(*:*:2S*:*I*IJJJ!("*--//"3";";Bc";"J"J	L 	L 	L uQ''	uQS111	q(6DDD$	q(6DDD$	!&$v,,777!(DLL999!&$v,,777!(DLL9999c1: 1:r5   c                  v   t           j                            d          } t          t                    D ]\  }}d}|dk    rD|                     ||          |                     ||          dz  z                       |          }n)|                     ||                              |          }t          d|          \  }} ||          \  }}t          |dk                ||d	          \  }	}t          |dk               t          |          }
t          ||dz   z  d
z  |          }t          |          j        |
         |dd<   t          |          }
t          ||dz   z  d
z  |          }t          |          j        |
         |dd<   t          ||           t          |	|            |||          \  }}t          |dk                |||	d	          \  }}t          |dk               t          |t          |                     t          |t          |                     dS )rD  r   r   rP   r-   )trttptpttrr   r   rJ  rE  rQ   N)r7   r  r^  r   r   r   r/   r'   r   r   r   r   ry   r   r   r   )r2   r   r1   r   rJ  rW  rX  A_tp_Uri   A_tp_LindsA_tp_U_mA_tp_L_mrQ  rR  s                  r3   test_tpttr_trttpr^    s3   
 )


%
%C''  8  8
U77hhq!nnsxx1~~b'88@@GGFFhhq!nn,,U33F'(:%HHHuuV}}	uV#...	 AAaC!5111F||~t,AAaC!5111F||~t,!&(333!&(333 uQ''	uQS111	!&$v,,777!&$v,,7777A 8  8r5   c                     t           j                            d          } t          t                    D ]:\  }}d}|dk    rs|                     ||          |                     ||          dz  z                       |          }||                                j        z   |t          |          z  z   }nF|                     ||                              |          }||j        z   |t          |          z  z   }t          d|          \  }}} ||          \  }}	 |||          \  }
}	t          |	dk                |||
          \  }}t          |          }t          ||           <dS )	zk
    Test Cholesky factorization of a positive definite Rectangular Full
    Packed (RFP) format array
    r   r   rP   r-   )pftrfr+  r,  r   r   N)r7   r  r^  r   r   r   r/   r  ry   r   r'   r   r   r   )r2   r   r1   r   r  r`  r+  r,  r/  ri   	Achol_rfpA_chol_rr?   Achols                 r3   
test_pftrfrd  D  sj   
 )


%
%C'' 3 3
U77!Q#((1a.."33;;EBBAAFFHHJ3q66)AA!Q''..AAC!CFF("A./J5:< < <ue E!HH	T%3--	4	eAy))!!(E2222%3 3r5   c                  8   t           j                            d          } t          t                    D ]d\  }}d}|dk    rs|                     ||          |                     ||          dz  z                       |          }||                                j        z   |t          |          z  z   }nF|                     ||                              |          }||j        z   |t          |          z  z   }t          d|          \  }}}} ||          \  }	}
 |||	          \  }}
 |||          \  }}
t          |
dk                |||          \  }}t          |          }t          |t          |          |dz  dk    rd	nd
           fdS )z
    Test Cholesky factorization of a positive definite Rectangular Full
    Packed (RFP) format array to find its inverse
    r   r   rP   r-   )pftrir`  r+  r,  r   r   rQ   rS   rU   r   N)r7   r  r^  r   r   r   r/   r  ry   r   r'   r   r   r   r   )r2   r   r1   r   r  rf  r`  r+  r,  r/  ri   
A_chol_rfp	A_inv_rfpA_inv_rr?   Ainvs                   r3   
test_pftrirk  _  s   
 )


%
%C'' D D
U77!Q#((1a.."33;;EBBAAFFHHJ3q66)AA!Q''..AAC!CFF("A%5 7@ =B	&C &C &C"ueU E!HH	T 5C==
D%:..	4	U1i((
1vv!'4::/2Qw!||!!	D 	D 	D 	D 	D-D Dr5   c                     t           j                            d          } t          t                    D ]\  }}d}|dk    rs|                     ||          |                     ||          dz  z                       |          }||                                j        z   |t          |          z  z   }nF|                     ||                              |          }||j        z   |t          |          z  z   }t          |df|          }t          |dz   df|          }t          |dz
  df|          }t          d|          \  }}	}
} |
|          \  }} |	||          \  }} ||||          \  }}t          |d	k               t          t          ||||            ||||          \  }}t          |d	k               t          t!          ||          ||dz  d	k    rd
nd           dS )z
    Test Cholesky factorization of a positive definite Rectangular Full
    Packed (RFP) format array and solve a linear system
    r   r   rP   r-   rR   r   rQ   )pftrsr`  r+  r,  r   rS   rU   r   N)r7   r  r^  r   r   r   r/   r  ry   r   r   r'   r   r  r  r   r   )r2   r   r1   r   r  r  Bf1Bf2rm  r`  r+  r,  r/  ri   rg  r0  s                   r3   
test_pftrsrp    s'   
 )


%
%C'' D D
U77!Q#((1a.."33;;EBBAAFFHHJ3q66)AA!Q''..AAC!CFF("A!Qu%%%AaC85)))AaC85)))%5 7@ =B	&C &C &C"ueU E!HH	T 5C==
DU1j#..
d	i:s;;;U1j!,,
d	!%1++t/2Qw!||!!	D 	D 	D 	D 	D7D Dr5   c            
         t           j                            d          } t          t                    D ]\  }}d}|dk    rs|                     ||          |                     ||          dz  z                       |          }||                                j        z   |t          |          z  z   }nF|                     ||                              |          }||j        z   |t          |          z  z   }|dk     rdnd}t          dd	| d
f|          \  }}} ||          \  }	}
|                     |d                              |          } ||dd|d|	          } |||          \  }}
t          |t          |                    |                                j                   d|z  z             |dz  dk    rdnd           dS )zT
    Test for performing a symmetric rank-k operation for matrix in RFP format.
    r   r   rP   r-   rQ   r   hr+  r,  frkr   r   r   rS   rU   r   N)r7   r  r^  r   r   r   r/   r  ry   r   r'   r   r   r   )r2   r   r1   r   r  prefixr+  r,  shfrkr/  r?   r|   Afp_outA_outs                 r3   test_sfrk_hfrkrx    s    )


%
%C'' D D
U77!Q#((1a.."33;;EBBAAFFHHJ3q66)AA!Q''..AAC!CFF("AQwwC.V.../Q5:< < <ue qQHHQNN!!%((%1b!Q,,5G$$q!%quuQVVXXZ/@/@.@1Q3.F)G)G/2Qw!||!!	D 	D 	D 	D 	D#D Dr5   c            
      p   t           j                            d          } t          t                    D ] \  }}d}|dk    rf|                     dd||f          |                     dd||f          dz  z                       |          }||                                j        z   }nI|                     dd||f                              |          }||j        z   |t          |          z  z   }dt          j
         |d          j                  z  }t          d	|
          \  }}}t          ||d          }	t          |dd          \  }
}}t          ||d          }	 ||d|	          \  }}} |||d          \  }}}t          t!          |d          t!          |
|ddf         d          |d           t          |dd          \  }}} ||d          \  }}} |||d          \  }}}t          t#          |d          t#          ||ddf         d          |d           dS )zt
    Test for going back and forth between the returned format of he/sytrf to
    L and D factors/permutations.
    r   rv   rP   i   r-   r-  r   )syconvr  r  r   r  F)r  	hermitianr  r   Nr  r.  r   )r7   r  r^  r   r   r   r/   r  ry   r   r%  r   r'   r"   r   r   r   r   )r2   r   r1   r   r  r@  r{  trf	trf_lworklwrJ  Dpermr  r  ri   ra   r  rW  s                      r3   test_syconvr    sk   
 )


%
%C'' L L
U77S"q!f--S"q!f--b0128&--  AFFHHJAACaV,,33E::AAC!CFF("A"*UU3ZZ_---!1 3BIN"P "P "PYIq222!u555
1dIq222#aq333T4VCQ///
1dQd1T111W:r&:&:2NNNN !u555
1d#aq///T4VCQ///
1dQ

D47Q$7$7cKKKKK5L Lr5   c                       e Zd ZdZd Zd ZdS )TestBlockedQRzd
    Tests for the blocked QR factorization, namely through geqrt, gemqrt, tpqrt
    and tpmqr.
    c           
      2   t           j                            d          }t          t                    D ]\  }}d}|dk    rD|                    ||          |                    ||          dz  z                       |          }n)|                    ||                              |          }dt          j         |d          j                  z  }t          d|          \  }} |||          \  }	}
}|d	k    sJ t          j
        |	d
          t          j        ||          z   }t          j        ||          ||
z  |j                                        z  z
  }t          j        |	          }t          |j                                        |z  t          j        ||          |d           t          ||z  ||d           |dk    rF|                    ||          |                    ||          dz  z                       |          }d}n+|                    ||                              |          }d}dD ]}d|fD ]} ||	|
|||          \  }}|d	k    sJ ||k    r|j                                        }n|}|dk    r||z  }n||z  }t          |||d           ||fdk    r( ||	|
|          \  }}|d	k    sJ t!          ||           t#          t$          ||	|
|d           t#          t$          ||	|
|d           d S )Nr   r   rP   r-   r-  r   )geqrtgemqrtr   r   r   r  r.  r|   ry   rJ  r  rT  r  r   rJ  rJ  rT  r  r  r.  )r7   r  r^  r   r   r   r/   r%  r   r'   r   r   ry   r  r   r   r   r  r  )r`   r2   r   r1   r   r  r@  r  r  ra   tri   r   r  r  r|   	transposer  r   r   qqC	c_defaults                          r3   test_geqrt_gemqrtzTestBlockedQR.test_geqrt_gemqrt  sD   i##D))#F++ :	A :	AJCAQwwXXa^^chhq!nnR&77??FFXXa^^++E22bjs111C,-@NNNME6q!JAq$19999 2!7!7!77Aq&&&Q);;A

A ACHHJJNBF1E,B,B,B!#% % % %AE13R8888QwwXXa^^chhq!nnR&77??FF		XXa^^++E22	" 3 3!9- 3 3E$fQ14uEEEGAt19999	))CHHJJs{{UU#Ar"==== e}
22*0&Aq//	4#qyyyy$Y222)3. )VQ13????)VQ1C@@@@@u:	A :	Ar5   c                 
   t           j                            d          }t          t                    D ]?\  }}d}|dk    r|                    ||          |                    ||          dz  z                       |          }|                    ||          |                    ||          dz  z                       |          }nR|                    ||                              |          }|                    ||                              |          }dt          j         |d          j                  z  }t          d|          \  }}	d	|d
z  |fD ]}
 ||
|||          \  }}}}|d	k    sJ t          t          j        |d          t          j        |d                     t          t          j        ||
|z
  dz
            t          j        ||
|z
  dz
                       t          j        ||
|z
            t          j        ||
|z
            }}t          j        t          j        ||          |f          }t          j        d
|z  |          ||z  |j                                        z  z
  }t          j        t          j        |          t          j        |          f          }t%          |j                                        |z  t          j        d
|z  |          |d           t%          ||z  t          j        t          j        |          |f          |d           |dk    r|                    ||          |                    ||          dz  z                       |          }|                    ||          |                    ||          dz  z                       |          }d}nT|                    ||                              |          }|                    ||                              |          }d}dD ]}d|fD ]
} |	|
||||||          \  }}}|d	k    sJ ||k    r|j                                        }n|}|dk    r6t          j        ||fd	          }t          j        ||fd	          }||z  }n5t          j        ||fd          }t          j        ||fd          }||z  }t%          |||d           ||fdk    r; |	|
||||          \  }} }|d	k    sJ t          ||           t          | |           t'          t(          |	|
||||d           t'          t(          |	|
||||d           Ad S )Nr   r   rP   r-   r-  r   )tpqrttpmqrtr   r   rQ   r   r  r.  r|   ry   r  rT  r  rJ  r   r  r  r  r.  )r7   r  r^  r   r   r   r/   r%  r   r'   r   r   r   r4  r   ry   r  r   r   r  r  )!r`   r2   r   r1   r   r  r  r@  r  r  lra   r   r  ri   B_pentb_pentr   r  r  r|   r  r  r  r   r   rp   r  cdCDqCDr  	d_defaults!                                    r3   test_tpqrt_tpmqrtzTestBlockedQR.test_tpqrt_tpmqrt%  sx   i##D))#F++ O	K O	KJCAQwwXXa^^chhq!nnR&77??FFXXa^^chhq!nnR&77??FFXXa^^++E22XXa^^++E22bjs111C,-@NNNME6 a^ @K @K %aAq 1 11aqyyyy RWQ^^RWQ^^<<< RWQA	22BGAq1uqy4I4IJJJ "$AE!2!2BGAq1u4E4E NBF1E$:$:$:F#CDDF1q5...Q1CCNBGAJJa0@0@#ABB  

Qq1uE0J0J0J%(r3 3 3 3Ar~rwqzz66J'K'K%(r3 3 3 3 77!Q#((1a..*;;CCEJJA!Q#((1a..*;;CCEJJA #II!Q//66A!Q//66A #I& 7 7D"%y!1 7 7%+VAq!Q27&9 &9 &9
1d#qyyyy I-- !

AA !A3;;!#AQ!?!?!?B!#AQ!?!?!?B"#b&CC!#AQ!?!?!?B!#AQ!?!?!?B"$q&C'CcCCCC %=J669?1aA9N9N6Iy$#'19999(A666(A666378 iAq!QSIIIIiAq!QcJJJJJA@KO	K O	Kr5   N)r   r   r   r@   r  r  r   r5   r3   r  r    sJ         
<A <A <A|QK QK QK QK QKr5   r  c                  p   t           j                            d          } t          t                    D ]\  }}d}d}t          d|          }|dk    ry|                     |||z
                                |          d|                     |||z
                                |          z  z   }||                                j	        z  }n6|                     |||z
                                |          }||j	        z  } ||          \  }}}	}
t          |          }d||	|z
  d |	|z
  d f<   t          |
d           d	t          j        t           j                  j        z  }d	t          j        t           j                  j        z  }|d
v r|n|}t!          ||dz
           d d |dz
  f         |                                j	        |z  d|            ||d          \  }}}	}
t#          |          }d||	|z
  d |	|z
  d f<   t          |
d           d	t          j        t           j                  j        z  }d	t          j        t           j                  j        z  }|d
v r|n|}t!          ||dz
           d d |dz
  f         ||                                j	        z  d|           d S )Nr   rv   rQ   pstrfr   rP   r-   r    r   rQ   rO  r  r7   r  r^  r   r   r'   r   r/   r  ry   r   r   r   r  r   r8  r   r   )r2   r   r1   r   r  r  r  r   pivr_cri   rW  single_atoldouble_atolr/  rJ  s                   r3   
test_pstrfr  y     
)


%
%C'' #P #P
U 666 77AaC  ''..chhq!A#6F6F6M6Me6T6T1TTAAFFHHJAAAaC  ''..AACA!E!HH3TGG "#'((C!GHH
T1 RXbj1155RXbj1155!Vmm{{#a%CE*AFFHHJN$OOOO!E!1---3TGG "#'((C!GHH
T1RXbj1155RXbj1155!Vmm{{#a%CE*A
N$OOOOOG#P #Pr5   c                  p   t           j                            d          } t          t                    D ]\  }}d}d}t          d|          }|dk    ry|                     |||z
                                |          d|                     |||z
                                |          z  z   }||                                j	        z  }n6|                     |||z
                                |          }||j	        z  } ||          \  }}}	}
t          |          }d||	|z
  d |	|z
  d f<   t          |
d           d	t          j        t           j                  j        z  }d	t          j        t           j                  j        z  }|d
v r|n|}t!          ||dz
           d d |dz
  f         |                                j	        |z  d|            ||d          \  }}}	}
t#          |          }d||	|z
  d |	|z
  d f<   t          |
d           d	t          j        t           j                  j        z  }d	t          j        t           j                  j        z  }|d
v r|n|}t!          ||dz
           d d |dz
  f         ||                                j	        z  d|           d S )Nr   rv   rQ   pstf2r   rP   r-   r  r  r  rO  r  r  )r2   r   r1   r   r  r  r  r   r  r  ri   rW  r  r  r/  rJ  s                   r3   
test_pstf2r    r  r5   c                  
   t          j        g dg dg dg dg          } t          j        g dg dg dg          }t          t                    D ]/\  }}|dk     r6t          j        g d	g d
g dg dg          }|                    |          }nWt          j        g dg dg dg|          }|t          j        g dg dg dg          dz  z  }|                    |          }t          d|          } ||          \  }}}}	}
}|dk     r7t          |                     |          |d d d f         |z  |z  dd           t          |                    |          |d d d f         |z  |z  dd           1d S )N)g      ?r   g1w-!?gd`TRۿ)r   gsr  r  )gs?r  g2%䃮g,eX)r  gsFg%ug??)y/nҿ&?yDioɴ?Af?y o_[ Acп)ysֿAfҿyPkw?JY8y5;NёCl?)yYڊ?1*?y=yXѿ@a+?yh oſFxrQ   )g   ЈBg   tBgffffff @g   ٓ )      @gg#fDgffffff)gHzG?gQg'Vgp=
ף)g(\r  gS7нr  )gq=
ףpg   Ag(\)g333333g   Bg333333ÿ)gZ9=gQgֽr   )gffffff@g   tޅBr&  )g(\g   Zgq=
ףp?)gEop=gQ?gZEqҽr-   geequr   r  rO  )r7   r   r   r   r/   r'   r   )desired_realdesired_cplxr   r1   r  r  r  r   rowcndcolcndamaxri   s               r3   
test_geequr    sZ   8>>>@@@@@@@@@B C CL
 8 1 1 11 1 11 1 12 3 3L  '' / /
U77CCCEEEEEEEEEG H HA AA:::::::::<CHJ J JA :::;;;:::< = ==?@ @A A 666+0588(1ffdD77L//66!!!T'
1Q!"/ / / / / L//66!!!T'
1Q!"/ / / / /3/ /r5   c                  "  
 t          j        g d          } t          t                    D ]\  }}t          j        d|          } ||dk     rdnd          
t          j        
fdt          dd	          D             |          }|t          j        t          j        |                    z  }t          d
|          } ||          \  }}}}	t          t          j
        |                              t                    |            d S )N)
r   r   r   r   r   r   r   r   r  rH  rv   r   rQ   r   r-   c                      g | ]
}d |z  z  S )r   r   )rU  r   r  s     r3   rV  ztest_syequb.<locals>.<listcomp>  s!    :::eb!em:::r5   rT   syequb)r7   r   r   r   r   r5  rot90r2  r'   r   log2r/   r   )desired_log2sr   r1   r  rp   r  r   scondr  ri   r  s             @r3   test_syequbr    s   H???@@M'' 	< 	<
UF2U###C!GGbb--H::::U2q\\:::%HHH	RXbgajj!!!!(%888%vayy5$RWQZZ&&s++];;;;	< 	<r5   Tz.Failing on some OpenBLAS version, see gh-12276)reasonc            	         t          j        dgdz  dgdz  z             t          j        t          j        d          d          dz  z   } t          j        |           \  }}}}t          |d           t          t          j        |          d	d
gdz  d	gz   dgdz  z              t          j        dt          j        t          j	        dd                    z  dz             } d| d<   d| d<   t          j
        |                     t           j                  d          \  }}}}t          |d           t          t          j        |          g d           d S )NrQ   rT   i  rX   rP   )rk  r-   r   r  r  r  rU                   i   rT   rT   y              0@)rT   r   r  )r  r   r   r   r   r  r   r   r   r  r  )r7   r2  r   r   zheequbr   r   r  r   r  cheequbr/   	complex64)r  r   r  r  ri   s        r3   test_heequbr    s@    	Aq !!BGBGAJJ!$<$<$<R$??A!>!,,AudDqBGAJJS	!rd 2bT!V ;<<<
26")B**+++b011AAdGAdG!>!((2<*@*@JJJAudDqBGAJJ I I IJJJJJr5   c                     t           j                            d          } d}|                     |          }|                     |          |                     |          dz  z   }t	          t
                    D ]P\  }}|dk     rF|                     ||          }|                    |          }||z  }|                    |          }n_|                     ||          |                     ||          dz  z   }|                    |          }||z  }|                    |          }t          d|          }t          d|          }	 ||d	          \  }
}}} |	|
|||d
          \  }}|dk     r*t          |                    |          ||z  d           (t          |                    |          ||z  d           Rd S )Nr  rv   r-   rQ   getc2r   gesc2r   r)  )overwrite_rhsrS   r   )	r7   r  r^  r   r   r   r/   r'   r   )r2   r   r  r  r   r1   r  r   r  r  r  r  jpivri   r   r\   s                   r3   test_getc2_gesc2r    s   
)


#
#C
A88A;;L88A;;!R/L'' : :
U77AAAL AAAA!Q!22AAL AA 666 666$uQA666D$5Qd!<<<577%l&9&9%&@&@&'gq: : : : : &l&9&9%&@&@&'gq: : : : :+: :r5   r  )rU   rT   r  jobarU   joburS   jobvjobrrP   jobpc                 H   t           j                            d          }| \  }	}
dt          j        |          j        z  }t          | ||          }t          d|          }|dk     }|dk     }|dk    o|	|
k    }t          j        |          }|dk    o| o| }|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          ||||||||	  	         dS  ||||||||
          \  }}}}}}t          ||           |s|d	         |d         z  |d|
         z  }t          |t          |d          |           |dk    r|ddd|
f         }|rC|rAt          |t          j        |          z  |                                j        z  ||           |r>t          |                                j        |z  t          j        |
          |           |r>t          |                                j        |z  t          j        |
          |           t          |d	         t           j                            |                     t          |d         t          j        |                     t          |d         d	           dS dS )a  Test the lapack routine ?gejsv.

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

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

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

    jobt is, as of v3.9.0, still experimental and removed to cut down number of
    test cases. However keyword itself is tested externally.
    r  r-  gejsvr   rQ   rP   r  rH  r   )r  r  r  r  jobtr  NF)r(  r  )r7   r  r^  r   r   r4   r'   r  r  r  r   r   r   r2  r  ry   identityr  matrix_rankcount_nonzero)r  r1   r  r  r  r  r  r  r2   r   r   r/  r  r  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvar  r   r   r   ri   sigmas                                r3   test_gejsv_generalr  8  s   B )


#
#C DAq%$$D#D%55AWE222E
 1HE1HEai%a1fF##JHUHZMU-=v(>M:MU-=v(>M:
  	 / qtqyyi4tT4NNNNN',uQ262626262626(8 (8 (8$Q4 	T;'''  	& !WtAw&#bqb'1EE3qU#;#;#;$GGGGqyy aaa!eH O OBGENN 2QVVXXZ ?NNNN K
QATJJJJ K
QATJJJJq29#8#8#;#;<<<q2#3E#:#:;;; q1%%%%%5	& 	&r5   c                 V   t          d|           } |d          \  }}}}}}t          |d           t          |j        d           t          |j        d           t          |t          j        dg|                      t          j        d|           } ||          \  }}}}}}t          |d           t          |j        d           t          |j        d           t          |t          j        dg|                      t          j        d|           } ||          \  }}}}}}t          |d           t          |j        d           t          |j        d           t          |t          j        g |                      t          j        t          j        d                              d	d	                    	                    |           }t          j
        ||j        z             }|                    d
          }	 ||          }
t          ||	           dS )z*Test edge arguments return expected statusr  r   r   r   rP   rP   rP   r  r-  rv   r  N)r'   r   r0   r7   r   r   sinr  rI  r/   asfortranarrayry   r  r   )r1   r  r  r  r   r   r   ri   r  Acr?   s              r3   test_gejsv_edge_argumentsr    s    WE222E $)599 CAtUDq&!!!&!!!bht5111222 	E"""A#(588 CAtUDq&!!!&!!!bht5111222 	e$$$A#(588 CAtUDq&!!!&!!!bhr///000 	ry~~%%b"--..55e<<A
!ac'""A	
BaAArr5   kwargsrX   r  c                     t          j        dt                    }t          dt                    }t	          t
          ||fi |  dS )z-Test invalid job arguments raise an Exception)rQ   rQ   r   r  Nrt  )r  r  r  s      r3    test_gejsv_invalid_job_argumentsr    sJ     	e$$$AWE222E)UA0000000r5   zA,sva_expect,u_expect,v_expect)g)\(@gp=
ףgffffff?g
ףp=
)gQ?gQgGz?g(\)gQ޿gQgGz?gzGʿ)gQ?gQ?gHzG?g)\(?)ggq=
ףp@g333333r  )ףp=
?g(\r  g(\)g cZB#@gI.!v@g?ܵ?r  )gC?g=yX5gc=yXga4?)gB`"?g:pΈҞgʡE?gn4@?)g[B>٬?g٬\m?gJ{/L?gOe?)gc]Fgꕲq׿g\m?fc]F)g؁sFڿgZB>?g0L
F%?gq=
ףp)g ?gR!u?guVſg&Sٿ)gǘ?gV-g	^)p?g()gFx$g6[ ٿgUN@giq?)g1Zd?gOnӿgΈ?g_vO?)g}?5^Iؿg58EGr?gi o?g7[ Ac                     d}t          d| j                  } ||           \  }}}}	}
}t          |||           t          |||           t          |||           dS )z~
    This test implements the example found in the NAG manual, f08khf.
    An example was not found for the complex case.
    r  r  r   r  N)r'   r1   r   )r  
sva_expectu_expectv_expectr/  r  r  r  r   r   r   ri   s               r3   test_gejsv_NAGr    s|    0 DWAG444E#(588 CAtUDJ$////Had++++Had++++++r5   c           	         t           j                            d          }d}dt          j        |           j        z  }t          |dz
  f| |          }t          |f| |          }t          |dz
  f| |          }|                                |                                |                                g}t          j        |          t          j        |d          z   t          j        |d          z   }t           j                            |          }	||	z  }
t          d|           \  }} ||||          \  }}}}}}t          ||d	                    t          ||d                    t          ||d
                    t          j        |d	          t          j        |d          z   t          j        |d
          z   }t          j        ||           }t          |          D ]K\  }}||         dz
  }|d d ||gf         |d d ||gf<   |d d |fxx         |d d |dz   f         |z  z  cc<   Ld|d         dz
  }}|d d ||gf         |d d ||gf<   t          |||z  |           |
                                } |||||||
          \  }}t          |
|           t          |	||           | t          v rd}|j        |	z  }nd}|                                j        |	z  } ||||||||          \  }}t          |	||           t#          t$                    5   ||d d         ||           d d d            n# 1 swxY w Y   t#          t$                    5   |||d d         |           d d d            n# 1 swxY w Y   t#          t$                    5   ||||d d                    d d d            n# 1 swxY w Y   t#          t$                    5   ||d	         |d d         |d	                    d d d            n# 1 swxY w Y   d	|d	<   d	|d	<    ||||          \  }}}}} }!t           j                            ||dz
           d	k    d||dz
            d           d S )Nr  rv   r-  rP   r1   r2   r   gttrfgttrsr   r   rQ   r  ry   r|   r.  z?gttrf: _d[info-1] is , not the illegal value :0.)r7   r  r^  r   r   r4   r  r2  r   r'   r	   r   r   r   r   ry   r  r  rP  testingr   )"r1   r2   r   r/  durp   dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  ri   rW  rJ  rA  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos"                                     r3   test_gttrf_gttrsr
    s    )


#
#C
A%$$D 
%acV5c	B	B	BB#QD3???A	$acV5c	B	B	BB		16688RWWYY/H


RWR__$rwr1~~5A
	qA	AA#$6eDDDLE5$)E"a$4$4!CS#tTr8A;'''q(1+&&&r8A;''' 	Aa(273??:A
qA#  1 1gk111sAh;!!!aX+	!!!Q$1QQQ!V9Q; bAsAqqq3({^Aaaa!SkN Aq1u4((((FFHHEE#r3T155MGTq%   AwT**** #'&&((*q.E#r3T7%HHHMGTAwT**** 
z	"	"  b"gq"              	z	"	"  b!CRC&"              	z	"	"  b!RW               
z	"	" # #beQrrUBqE"""# # # # # # # # # # # # # # # BqEAaD*/%Ar*:*:'D#tT5%Js4!8}) -ISPQ] -I -I -I K K K K KsH   )MMM*NNN+OOO,"PP!Pz1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)g @r  ffffff?r   )r%  r        ffffff@)333333@@r         )r  r  r  r  )r  r  rV   gC>)r   r  rW   )rQ   rR   rS   rT   rT   g@gffffff@      g%@g@g	r  gffffff&g3@r  rT   rV   rH  r  )       @             @      ?            ?      ?      )?r  ffffff
@333333ӿ333333@ffffff
?)      ?             ?      ?       @      r  )r  r  r  r  )r  r  r  r  y ~:pffffff?)r  r  r  y333333@      y@@y333333@3333332@y333333yffffff-ffffff#@y      333333yfffff?@y333333"@y      𿚙?y      ffffff(@r  r  y      @      y      ?       @y      @      @r  y             r  r  y       @       c	                 :   t          d| d         | d         f          \  }	}
 |	|||           \  }}}}}}t          ||           t          ||           t          ||d           t          ||            |
||||||          \  }}t          ||           d S )Nr  r   r  r  )r'   r   )r  rp   r  du_expd_expdu2_expipiv_expr   r   r  r  r  r  r  r   r  ri   r  s                     r3   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr$  U  s    d $$6A1GGLE5$)E"a$4$4!CS#tTC!!!C   BD))))D(###E#r3T155MGTGQr5   )r{  rz  r|  c           	         t           j                            d          }|                    |          |                    |          dz  z   }|                    |dz
            |                    |dz
            dz  z   }|                    |dz
            |                    |dz
            dz  z   }t          j        |          t          j        |d          z   t          j        |d          z   }t          j        | t           j                  r|j        |j        |j        |j        f\  }}}}|                    |           |                    |           |                    |           |                    |           f\  }}}}t          j        |          	                    d          
                                }t          d|f          \  }	}
 |	|||          \  }}}}}} |
|||||||          \  }}t          d	|f          \  }} ||          \  }}} ||||          \  }}t          j        |           j        d
z  }t          |||           d S )NiTfr-   rP   r   r   r   )r  gtconr  r  g      ?r   )r7   r  r  r2  r  r  r   r/   r   r   r   r'   r   r   r   )r1   r   r   r2   rp   r  r  r  r  r  r&  r   r  ri   rB  r?   r  r  r  r  r   r   s                         r3   
test_gtconr'    s.    )


)
)C

1

1b((A	AE		SZZA..r1	1B	AE		SZZA..r1	1B


RWR__$rwr1~~5A	}UBK(( 8vqvrw71b"88E??AHHUOORYYu5E5EryyQVGWGWWLAq"bF1IIMMqM!!%%''E#$6==LE5!&r1b!1!1B2sD$U2q"c4T:::FC#$6==LE5U1XXNBdU2u4(((FC8E??$DC4((((((r5   ))rR   rV   )rV   rR   r   c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrfp_lworkr   r  r   r  )r1   r0   r)  r   r   r   ri   s          r3   test_geqrfp_lworkr*    sM     $^EBBBLDAq,a(((KE4qr5   zddtype,dtypec                 p   t           j                            d          }dt          j        |          j        z  }d}t          |f| |          dz   }t          |dz
  f||          }t          j        |          t          j        |d          z   t          j        t          j        |          d          z   }|                                |                                g}t          d|          }	 |	||          \  }
}}t          ||d	                    t          ||d                    t          |d	d
| d           t          j        |d          t          j        t          j        |                    z   }t          j        |
          }t          |||z  |                                j        z  |           t          |f||          }||z  }t          d|          } ||
|                                |          \  }}t          |d	d| d           t          |||           d S )Nr  r-  rv   rS   rP   r   pttrfr   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r7   r  r^  r   r   r4   r2  r  r  r'   r	   r   r   r   r   ry   )ddtyper1   r2   r/  r   rp   r  r  r  r,  r  _eri   rJ  r  r   r   r.  _xs                      r3   test_pttrf_pttrsr2    s    )


#
#Crx""D
A
 	$QD&#66:A#QqSFE377A 	

RWQ^^#bgbgajj!&<&<<A!&&((#HWE222E5A;;LBDq(1+&&&q(1+&&&q"F4"F"F"FGGGG 	B"'"'!**---A
AAqs1;;==?*6666 	$QD%55A	!A WE222EuRA&&HBq"F4"F"F"FGGGG Ar%%%%%%r5   c                 :   d}t           j                            d          }t          d|          }t	          |f| |          dz   }t	          |dz
  f||          }t          t          ||d d         |           t          t          |||d d                    d S )Nrv   r   r,  r   rQ   rP   r   )r7   r  r^  r'   r4   r  rP  )r/  r1   r   r2   r,  rp   r  s          r3   *test_pttrf_pttrs_errors_incompatible_shaper4    s     	A
)


%
%CWE222E#QD&#66:A#QqSFE377A*eQssVQ///*eQ#2#/////r5   c                    d}t           j                            d          }t          d|          }t	          |f| |          dz   }t	          |dz
  f||          }d|d<   d|d<    |||          \  }}}	t          ||	dz
           dd||	dz
            d	           t	          |f| |          } |||          \  }}}	t          |	dk    d
           d S )Nrv   r  r,  r   rQ   rP   r   z?pttrf: _d[info-1] is r  z2?pttrf should fail with non-spd matrix, but didn't)r7   r  r^  r'   r4   r   r   )
r/  r1   r   r2   r,  rp   r  r  r0  ri   s
             r3   'test_pttrf_pttrs_errors_singular_nonSPDr6    s    	A
)


#
#CWE222E#QD&#66:A#QqSFE377AAaDAaD5A;;LBDD1HqS"TAX,SSSU U U 	$QD&#66A5A;;LBDDAIKLLLLLr5   z%d, e, d_expect, e_expect, b, x_expect)rS   rv      r   rT   )r  r  r  rW   )rS   rX   r      rP   )r  gK=Ur  r  rQ      A      g      @r   r  )r8  )   .      )y      0@      0@y      2@      "      ?      )r8  rX   rP   rS   )r  r  r?  y      P@      0@y      0      @y     @W@      O@y     N@     Py     S@      Ty     Q@     Ry      ,@      ;y     A@      .@y             r  c                    d}t          d|d                   } || |          \  }}	}
t          |||           t          |	||           t          d|d                   } |||	                                |          \  }}
t          |||           |j        t          v r& |||	|d          \  }}
t          |||           d S d S )	Nr  r,  r   r   r  r.  rP   r  )r'   r   r  r1   r.   )rp   r  d_expecte_expectr   x_expectr/  r,  r  r0  ri   r.  r1  s                r3   test_pttrf_pttrs_NAGrD  	  s    4 DWAaD111E5A;;LBDBt,,,,Bt,,,,WAaD111EuRA&&HBBt,,,, 	w.  5R!,,,DH4000000 ! r5   c                    t           j                            d          }|dk    rt          ||f| |          }|t          j        t          j        |          d|z  z             z   }||                                j        z   dz  }t          |          d         }t          |f||          dz   }t          |dz
  f||          }t          j        |          t          j        |d          z   t          j        |d          z   }	||	z  |                                j        z  }
|}nt          |f||          }t          |dz
  f||          }|dz   }t          j        |          t          j        |d          z   t          j        |d          z   }
t          j        |          t          j        |d          z   t          j        |d          z   }|||
|fS )Nr  rP   rS   rQ   r   )	r7   r  r^  r4   r2  r   r  ry   r    )r1   realtyper   	compute_zr2   A_eigvrrp   r  trir  zs               r3   pteqr_get_d_e_A_zrL  6	  s    )


#
#CA~~+QFE3??ac 1222'1,%[[^'h<<q@'1#>>gajj271a==(271b>>9Hrwwyy{" (h<<'1#>> EGAJJA&B7GAJJB'"'!Q--7q!Q<r5   zdtype,realtyperG  c                    t          d           dt          j        |           j        z  }t	          d|           }d}t          | |||          \  }}}}	 ||||	|          \  }
}}}t          |dd| d	           t          t          j        t          |          d                   t          j        |
          |
           |rt          |t          j
        |          j        z  t          j        |          |
           t          |t          j        |
          z  t          j
        |          j        z  ||
           dS dS )a  
    Tests the ?pteqr lapack routine for all dtypes and compute_z parameters.
    It generates random SPD matrix diagonals d and e, and then confirms
    correct eigenvalues with scipy.linalg.eig. With applicable compute_z=2 it
    tests that z can reform A.
    r  r  pteqrr   rv   rp   r  rK  rG  r   zinfo = z, should be 0.r  N)r   r7   r   r   r'   rL  r   r   sortr    r  ry   r  r2  )r1   rF  rG  r/  rN  r   rp   r  r  rK  d_pteqre_pteqrz_pteqrri   s                 r3   
test_pteqrrT  V	  s_    	HHH##Dge444E
A"5(AyAAJAq!Q&+ea1Y&O&O&O#GWgtq8D888999 BGDGGAJ'')9)9EEEE &"''"2"2"44bk!nn!	# 	# 	# 	# 	"''"2"22RWW5E5E5GG	& 	& 	& 	& 	& 	&& &r5   c                     t          d           t          d|           }d}t          | |||          \  }}}} ||dz
  |||          \  }	}
}}|dk    sJ d S )Nr  rN  r   rv   rS   rK  rG  r   r   r'   rL  r1   rF  rG  rN  r   rp   r  r  rK  rQ  rR  rS  ri   s                r3   test_pteqr_error_non_spdrY  w	  sy     	HHHge444E
A"5(AyAAJAq!Q ',eAE1Y&O&O&O#GWgt!888888r5   c           	      L   t          d           t          d|           }d}t          | |||          \  }}}}t          t          ||d d         |||           t          t          |||d d         ||           |r$t          t          ||||d d         |           d S d S )Nr  rN  r   rv   r   rV  )r   r'   rL  r  rP  )	r1   rF  rG  rN  r   rp   r  r  rK  s	            r3   "test_pteqr_raise_error_wrong_shaper[  	  s     	HHHge444E
A"5(AyAAJAq!Q*eQssVQ!yIIII*eQ#2#!yIIII Nj%A3B39MMMMMMN Nr5   c                     t          d           t          d|           }d}t          | |||          \  }}}}d|d<   d|d<    |||||          \  }	}
}}|dk    sJ d S )Nr  rN  r   rv   r   rV  rW  rX  s                r3   test_pteqr_error_singularr]  	  s     	HHHge444E
A"5(AyAAJAq!QAaDAaD&+eAqA&K&K&K#GWgt!888888r5   zcompute_z,d,e,d_expect,z_expect)gp=
ף@r  gq=
ףp?r  )g\(\	@g
ףp=
g?)gŏ1w- @gR'?g/n?g&䃞ͪ?)g cZB>?gCl?g:pΈڿg??)gaTR'?gSۿg}гY?g%uο)g\mg٬\m?gAf?gL
F%u)gǘgŏ1w-!?g333333?gz6?c                 n   d}t          d|j                  }t          j        |          t          j        |d          z   t          j        |d          z   } |||||           \  }}	}
}t	          |||           t	          t          j        |
          t          j        |          |           dS )	zb
    Implements real (f08jgf) example from NAG Manual Mark 26.
    Tests for correct outputs.
    r  rN  r   rP   r   rO  r  N)r'   r1   r7   r2  r   r   )rG  rp   r  rA  z_expectr/  rN  rK  r  r0  _zri   s               r3   test_pteqr_NAG_f08jgfra  	  s      Dgag666E


RWQ]]"RWQ^^3AuqAi@@@BBBt,,,,BF2JJx 0 0t<<<<<<r5   matrix_size)r   )rV   rU   rU   rU   c                 Z   t           j                            d          }dt          j        |           j        z  }dt          j        |           j        z  }t          d|           }t          d|           }|\  }}t          ||f| |          }	 ||	          \  }
}}t          j        |
          }||k    r8t          j        ||f|           }|
|d d d |f<    ||||          d	         }n  ||
d d d |f         ||          d	         }t          ||z  |	|
           t          t          j
        |j        d	                   ||                                j        z  ||           t          |t          j        |          |
           t          t          j        t          j        |          t          j        t#          t          j        |                              k                         t          |d	k               t          ||f| |          dz  }t%          |          \  }} ||          \  }}}t          t          j        t          j        |          d	k               o)t          j        t          j        |          d	k                         d S )Nr     r-  geqrfpr   orgqrr  )rs   r   r   r   rO  r   )r7   r  r^  r   r   r'   r4   r   r   r   r   r0   r  ry   r   allr2  r_   r   r6  )r1   rb  r2   r   r/  rf  gqrr   r   r  qr_Ars   ri   r  qqrr  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                         r3   test_geqrfprr  	  s    )


#
#Crx""Drx""Dx666F
GE
2
2
2CDAq 	$QF%SAAAAfQiiOD#t 	A
 	1uu h1vU+++AAArrE
 CA&&&q)CQQQUA...q1 AaC&&&&BF171:&&16688:T    Arwqzz----BF271::RWQZZ 9 99::;;;DAI -aV5cJJJROJJHh"(&"4"4Hgx BF278$$q()) #F271::>""$ $ $ $ $r5   c                      t          j        g           } t          d| j                  }t	          t
          ||            d S )Nrf  r   )r7   r   r'   r1   r  r  )A_emptyrf  s     r3   #test_geqrfp_errors_with_empty_arrayru  	  s;    hrllGhgm<<<F)VW-----r5   driver)evevdevrevxpfxsyhec                 X   d}| dk    rt           nt          }t          | |z   dz   |d                   }t          | |z   dz   |d                   }	 t          ||d           t          ||d           d S # t          $ r'}t          j        | |z    d|            Y d }~d S d }~ww xY w)	N  r|  _lworkr   r   rP   r  $_lwork raised unexpected exception: r   r.   r'   r"   r  rA   failr{  rv  r   r1   sc_dlwdz_dlwr  s          r3   test_standard_eigh_lworksr  
  s     	A$;;KKNEc&j1qBBBFc&j1qBBBFLvq****vq****** L L Ls6zJJqJJKKKKKKKKKL   $A8 8
B)B$$B)gvgvxc                 X   d}| dk    rt           nt          }t          | |z   dz   |d                   }t          | |z   dz   |d                   }	 t          ||d           t          ||d           d S # t          $ r'}t          j        | |z    d	|            Y d }~d S d }~ww xY w)
Nr  r|  r  r   r   rP   rJ  rE  r  r  r  s          r3   test_generalized_eigh_lworksr  
  s     	A$;;KKNEc&j1qBBBFc&j1qBBBFLvqs++++vqs++++++ L L Ls6zJJqJJKKKKKKKKKLr  dtype_r   )rP   rv   r-  r  c                    t          d           t          d|          }||z
  }| t          v rdnd}|dz   }t          ||           }t	          ||||          }|dk    r|n|f}t          d |D                       sJ d S )Nr   r   orun	csd_lworkr   c                     g | ]}|d k    	S r+  r   )rU  r   s     r3   rV  z*test_orcsd_uncsd_lwork.<locals>.<listcomp>.
  s    %%%!A%%%r5   )r   r   r   r'   r"   rh  )r  r   rc   r  r{  dlwr  lwvals           r3   test_orcsd_uncsd_lworkr  #
  s     	JJJ1A	AAK''$$TC

C	#V	,	,	,B2q!Q''ED[[EEuhE%%u%%%&&&&&&&r5   c           
      n   d\  }}}| t           v rdnd}|dk    rt          j        |          nt          j        |          }t	          |dz   |dz   f|           \  }}t          ||||          }|dk    rd|int          t          ddg|                    }	 ||d |d |f         |d ||d f         ||d d |f         ||d |d f         fi |	\
  }
}}}}}}}}}|d	k    sJ t          ||          }t          ||          }t          t          ||          t          ||z
  ||z
                      }t          ||          |z
  }t          |||z
            |z
  }t          ||z
  |          |z
  }t          ||z
  ||z
            |z
  }t          j        ||f|           } | d
          }t          |          D ]	}||||f<   
t          |          D ]}||||z   ||z   f<   t          |          D ]}| |||z   |z   ||z   |z   |z   |z   |z   f<    t          |          D ]}||||z   |z   |z   ||z   |z   f<   t          |          D ]}t          j        ||                   |||z   ||z   f<   t          j        ||                   |||z   |z   ||z   |z   |z   f<   t          j        ||                    |||z   ||z   |z   |z   |z   f<   t          j        ||                   |||z   |z   ||z   f<   ||z  |z  }t          ||ddt          j        |           j        z             d S )N)re  P      r  r  csdr  r   r   lrworkr   r   r  g     @rO  )r   r#   rvsr$   r'   r"   dictr  r   rb  r7   r   r5  cosr  r   r   r   )r  r   rc   r  r{  Xdrvr  r  lwvalscs11cs12cs21cs22thetau1u2v1tv2tri   rW  VHr  n11n12n21n22SonerA  Xcs                                  r3   test_orcsd_uncsdr  1
  s   GAq!K''$$TC!Tkk}/@/C/CAucK.? @OOOHC31a((E!$gu$sG<D<FGL8N 8N 3O 3OF 	Abqb"1"fIq!QRRy!ABBF)Qqrr122vYAA&AA :D$dE2r3T 199992rA	C		BC1IIs1Q3!}}%%A
a))a-C
a1++/C
ac1++/C
ac1Q3--!
C
!Qv&&&A
&**C3ZZ  !Q$3ZZ  !A#qs(3ZZ - -),!C%'1S573;s?1$
$%%3ZZ $ $ #!C%'!)SU1W
1XX - -&q**!C%3,"$&q"2"2!C%'1Q3s73;
%'VE!H%5%5$5!C%3s3q
 !F58,,!C%'1S5.	
QBArRXf-=-=-A)ABBBBBBr5   
trans_boolFfactrG  c                    t           j                            d          }dt          j        |           j        z  }t          d|           \  }}d}t          |dz
  f| |          }t          |f| |          }	t          |dz
  f| |          }
t          j        |d          t          j        |	          z   t          j        |
d          z   }t          |d	f| |          }|r| t          v rd
ndnd}|r|	                                j
        n||z  }|                                |	                                |
                                |                                g}|dk    r |||	|
          ndgdz  \  }}}}}} |||	|
||||||||          }|\
  }}}}}}}}}} t          | dk    d|  d           t          ||d                    t          |	|d                    t          |
|d	                    t          ||d                    t          |||           t          t          |d          dud|            t          |j        d         |j        d         k    d|j        d          d|j        d                     t          |j        d         |j        d         k    d|j        d          d|j        d                     dS )aS  
    These tests uses ?gtsvx to solve a random Ax=b system for each dtype.
    It tests that the outputs define an LU matrix, that inputs are unmodified,
    transposal options, incompatible shapes, singular matrices, and
    singular factorizations. It parametrizes DTYPES and the 'fact' value along
    with the fact related inputs.
    r  r-  gtsvxr  r   rv   rP   r  r   rQ   ry   r|   rT  rG  NrU   r  r   dlfdfdufr   r  r   z?gtsvx info = z, should be zerorR   r  __len__Trcond should be scalar but is ferr.shape is z but should be berr.shape is )r7   r  r^  r   r   r'   r4   r2  r   r  ry   r  r   r	   r   r   r0   )!r1   r  r  r2   r/  r  r  r   r  rp   r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr	  ferrberrri   s!                                    r3   
test_gtsvxr  `
  s-    )


#
#C%$$D#$6eDDDLE5
A	$acV5c	B	B	BB#QD3???A	$acV5c	B	B	BB
B"'!**$rwr1~~5A#QF%SAAAA6@IE[((SScccE!	(qA-A ''))QVVXXrwwyy!&&((;J !CKKb!RdVAX )D#tUE5 b!RUE7 7 7I@I=CS$feT4DAI>>>>??? r:a=)))q*Q-(((r:a=)))q*Q-((( AvD)))) GE9%%T14U446 6 6 DJqMQWQZ' +>4:a= +> +>12+> +> @ @ @ DJqMQWQZ' +>4:a= +> +>12+> +> @ @ @ @ @r5   c                    t           j                            d          }t          d|           \  }}d}t	          |dz
  f| |          }t	          |f| |          }t	          |dz
  f| |          }	t          j        |d          t          j        |          z   t          j        |	d          z   }
t	          |df| |          }| t          v rd	nd
}|r|
                                j        n|
|z  }|dk    r ||||	          nd gdz  \  }}}}}} ||||	||||||||          }|\
  }}}}}}}}}}|dk    r7d|d<   d|d<    ||||	|          }|\
  }}}}}}}}}}|dk    s
J d            d S |dk    rAd|d<   d|d<   d|d<    ||||	|||||||
  
        }|\
  }}}}}}}}}}|dk    sJ d            d S d S )Nr  r  r   rv   rP   r  r   rQ   ry   r|   rG  rU   r  rT  r   z&info should be > 0 for singular matrix)r  r  r  r  r   r  )	r7   r  r^  r'   r4   r2  r   r  ry   )r1   r  r  r2   r  r  r   r  rp   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  ri   s                                  r3   test_gtsvx_error_singularr  
  sa    )


#
#C#$6eDDDLE5
A	$acV5c	B	B	BB#QD3???A	$acV5c	B	B	BB
B"'!**$rwr1~~5A#QF%SAAAAK''CCSE!	(qA-A !CKKb!RdVAX )D#tUE5 b!RUE7 7 7I@I=CS$feT4 s{{"2E"aQ''	DMARdD&%tTaxxxAxxxxx	BRb	E"aQTt#%1 1 1	DMARdD&%tTaxxxAxxx 
 xr5   c                    t           j                            d          }t          d|           \  }}d}t	          |dz
  f| |          }t	          |f| |          }t	          |dz
  f| |          }	t          j        |d          t          j        |          z   t          j        |	d          z   }
t	          |df| |          }| t          v rd	nd
}|r|
                                j        n|
|z  }|dk    r ||||	          nd gdz  \  }}}}}}|dk    rt          t          ||d d         ||	||||||||           t          t          |||d d         |	||||||||           t          t          ||||	d d         ||||||||           t          t          ||||	|d d         |||||||           d S t          t          ||||	||||d d         ||||           t          t          ||||	|||||d d         |||           t          t          ||||	||||||d d         ||           t          t          ||||	|||||||d d         |           d S )Nr  r  r   rv   rP   r  r   rQ   ry   r|   rG  rU   rT  r  )r7   r  r^  r'   r4   r2  r   r  ry   r  rP  r  )r1   r  r  r2   r  r  r   r  rp   r  r  r   r   r   r  r  r  r  r  r  s                       r3   "test_gtsvx_error_incompatible_sizer  
  s.    )


#
#C#$6eDDDLE5
A	$acV5c	B	B	BB#QD3???A	$acV5c	B	B	BB
B"'!**$rwr1~~5A#QF%SAAAAK''CCSE!	(qA-A !CKKb!RdVAX )D#tUE5 s{{j%CRC!Ru$3E	7 	7 	7 	7 	j%QssVRu$3E	7 	7 	7 	7 	j%Q3B3u$3E	7 	7 	7 	7 	iAr1SbS6u$3E	7 	7 	7 	7 	7 	7 	j%QAu$ss)E	7 	7 	7 	7 	j%QAu$3ss8E	7 	7 	7 	7 	j%QAu$3ss)U	< 	< 	< 	< 	j%QAu$3E#2#JU	< 	< 	< 	< 	< 	<r5   zdu,d,dl,b,xc           
          t          d|j                  } |||| |          }|\
  }}}	}
}}}}}}t          ||           d S )Nr  r   r'   r1   r   )r  rp   r  r   r   r  r  r  r  r  r  r  r  r	  r  r  ri   s                    r3   test_gtsvx_NAGr    s]    . WAG444Eb!R##I@I=CS$feT4a(((((r5   zfact,df_de_lambdac                 B     t          d|j                  | |          S Nr,  r   r'   r1   rp   r  s     r3   <lambda>r  &  7     )H(8?@w)H )H )HHI1)N )N r5   c                     dS N)NNNr   r  s     r3   r  r  (      -? r5   c                 (   t           j                            d          }dt          j        |           j        z  }t          d|           }d}t          |f||          dz   }t          |dz
  f| |          }	t          j        |          t          j        |	d          z   t          j        t          j        |	          d          z   }
t          |d	f| |
          }|
|z  } |||	          \  }}}|	                                |		                                |	                                g} |||	||||          \  }}}}}}}t          ||d                    t          |	|d                    t          ||d	                    t          |dk    d| d           t          ||           t          j        |d          t          j        t          j        |                    z   }t          j        |          }t          |
||z  t          j        |          j        z  |           t!          |d          rJ d|             t          |j        dk    d|j         d           t          |j        dk    d|j         d           dS )a  
    This tests the ?ptsvx lapack routine wrapper to solve a random system
    Ax = b for all dtypes and input variations. Tests for: unmodified
    input parameters, fact options, incompatible matrix shapes raise an error,
    and singular matrices return info of illegal value.
    r  r-  ptsvxr   rT   rS   rP   r   rQ   r  r  r  efr   zinfo should be 0 but is .r  r  r  )rQ   r  z# but should be ({x_soln.shape[1]},)r  N)r7   r  r^  r   r   r'   r4   r2  r  r  r	   r   r   r   r   ry   r   r0   )r1   rF  r  df_de_lambdar2   r/  r  r   rp   r  r  r  r   r  r  ri   r  r   r	  r  r  rJ  r  s                          r3   
test_ptsvxr  "  s    )


#
#C%$$DWE222E	A#QD(C881<A#QqSFE377A


RWQ^^#bgbgajj!&<&<<A(!Qu#FFFF	F
A  <1%%LBD !&&((AFFHH-H */q!QT24*= *= *=&BAudD$ q(1+&&&q(1+&&&q(1+&&&DAI9$999:::fa((( 	B"'"'!**---A
AAqsBGAJJL)5555 ui(( 1 10001 1 1 DJ$ "8$* "8 "8 "8 : : : DJ$ "8$* "8 "8 "8 : : : : :r5   c                 B     t          d|j                  | |          S r  r  r  s     r3   r  r  a  r  r5   c                     dS r  r   r  s     r3   r  r  c  r  r5   c           
         t           j                            d          }t          d|           }d}t	          |f||          dz   }t	          |dz
  f| |          }t          j        |          t          j        |d          z   t          j        t          j        |          d          z   }	t	          |df| |	          }
|	|
z  } |||          \  }}}t          t          ||d d         |||||
           t          t          |||d d         ||||
           t          t          ||||d d         |||
           d S )Nr  r  r   rT   rS   rP   r   rQ   r  r  )
r7   r  r^  r'   r4   r2  r  r  rP  r  )r1   rF  r  r  r2   r  r   rp   r  r  r  r   r  r  ri   s                  r3   test_ptsvx_error_raise_errorsr  ]  sK    )


#
#CWE222E	A#QD(C881<A#QqSFE377A


RWQ^^#bgbgajj!&<&<<A(!Qu#FFFF	F
A  <1%%LBD *eQssVQKKKK*eQ#2#KKKK)UAq!CRC&trJJJJJJr5   c                 B     t          d|j                  | |          S r  r  r  s     r3   r  r  |  r  r5   c                     dS r  r   r  s     r3   r  r  ~  r  r5   c                    t           j                            d          }t          d|           }d}t	          |f||          dz   }t	          |dz
  f| |          }t          j        |          t          j        |d          z   t          j        t          j        |          d          z   }	t	          |df| |	          }
|	|
z  } |||          \  }}}|d
k    rod|d<    |||          \  }}} ||||          \  }}}}}}}|dk    r||k    sJ t	          |f||          } ||||          \  }}}}}}}|dk    r||k    sJ d S  |||          \  }}}d|d<   d|d<    |||||||          \  }}}}}}}|dk    sJ d S )Nr  r  r   rT   rS   rP   r   rQ   r  rT  r   rR   r  )r7   r  r^  r'   r4   r2  r  )r1   rF  r  r  r2   r  r   rp   r  r  r  r   r  r  ri   r   r	  r  r  s                      r3   test_ptsvx_non_SPD_singularr  x  s    )


#
#CWE222E	A#QD(C881<A#QqSFE377A


RWQ^^#bgbgajj!&<&<<A(!Qu#FFFF	F
A  <1%%LBDs{{!#|Aq))B-2U1a^^*B5$daxxDAIIII (h<<-2U1a^^*B5$daxxDAIIIIII $|Aq))B11-2U1a68R.A .A .A*B5$daxxxxxxr5   zd,e,b,xc                 |    t          d|j                  } || ||          \  }}}}}	}
}t          ||           d S )Nr  r   r  )rp   r  r   r   r  r  r  x_ptsvxr	  r  r  ri   s               r3   test_ptsvx_NAGr    sN    . WAG444E/4uQ1~~,BGUD$a)))))r5   r  c           	         t           j                            d          }t          j        |           j        dz  }d\  }t          g| |          }t          |g| |          }|                                j        |z   t          j        |            | d          z  z   }|r7fdt                    D             fdt                    D             f}n:d	 t          d
d
z             D             d t          d
d
z             D             f}||         }t          d| d          \  }	}
}}} |
||          \  }}t          |d           t          ||          |         }t          ||d|            |||          \  }}t          |d           t          |          |         }t          ||d|            ||||          \  }}t          |d           t          ||          }t          ||d|            |	|||          \  }}t          |d           t          ||d|           t           j                            |d
          } ||||          \  }}t          |d           t%          t'          d
|z  t           j                            |d
          z
            |z  d
k                d S )Nr   r-  )rv   rS   r  r   r   c                 :    g | ]}t          |          D ]}|S r   r5  rU  yr   r   s      r3   rV  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  .    :::qeAqkk::::::r5   c                 :    g | ]}t          |          D ]}|S r   r  r  s      r3   rV  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  r  r5   c                 6    g | ]}t          |          D ]}|S r   r  rU  r  r   s      r3   rV  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s+    <<<q588<<a<<<<r5   rP   c                 <    g | ]}t          |          D ]}|d z
  S r  r  r  s      r3   rV  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s/    >>>U1XX>>1>>>>r5   )ppsvpptrfpptrspptrippconr  r  r  r   rO  )r  r  r  )r7   r  r^  r   r   r4   r  ry   r   r5  r'   r   r   r   r   r   r  r   r   r   r  )r1   r  r2   r/  r   ra   r   r[  apr  r  r  r  r  ulri   aululiaulir   bxxvr  r	  r   s                           @r3   !test_pptrs_pptri_pptrf_ppsv_ppconr    s    )


%
%C8E??s"DGAt#QF%SAAAA#QIUDDDA	
Q///%%));;A @::::E!HH:::::::E!HH:::< =<E!QqSMM<<<>>eAqsmm>>>@	
4B'74( ( ($D%u
 uQ%(((HBq
1E
"
"
"4
(CB!$////a5)))ICqq66$<DCAD1111eAr1E***GAtq	q!BAr----tAr1E***HBqB....INN1a  E%2U%888KE4qC%")..a.00011%7!;<<<<<r5   c                 \   t           j                            d          }t          j        |           j        dz  }d}t          ||g| |          }t          d|           \  }} |d |d	          }t          |d
         d           |d         }|d         }	|d         }
| t          v r%t          |t          j
        |          d|           t          |	|z  |	                                j        z  |d|            |||	dd          }t          |d
         d           |d         }|d         }	| t          v r%t          |t          j
        |          d|           t          |	|z  |	                                j        z  |d|           t          |d         |
d|           d S )Nr   r-  rv   r  )geestrexcr   c                     d S r   r   r   s    r3   r  z!test_gees_trexc.<locals>.<lambda>      D r5   Fr  r   r   rH  rc  rO  rV   rP   r  r   r7   r  r^  r   r   r4   r'   r   r.   r   r   r  ry   )r1   r2   r/  r   ra   r  r  r  r  rK  d2s              r3   test_gees_trexcr    s   
)


%
%C8E??s"D
A#QF%SAAAA"#4EBBBKD%T..!777FQq	Ar
A	
4B271::AD9999AEAFFHHJ&====U1aAFQq	Ar
A271::AD9999AEAFFHHJ&====AdGRad333333r5   zt, expect, ifst, ilst)r  g)\({Gz?gQ?)r  皙r  ffffff?)r  gr  g?)r  r  r  r  )r  lV}gV_?g|?5^?)g?r  gV/?g;On?)r  r  r  ggj+)            y
ףp=
?
ףp=
׿yRQȿQ?y)\(?      п)r               @yQ
ףp=
yq=
ףpͿp=
ף?)r  r         @      yGz?(\?)r  r  r        @      )r  y1%Ŀq?ys??ܵ|ȿyHzG??ܵ?)r  r  yV/?ݓ?yjt?vտ)r  r  r  yB>٬?=U?)r  r  r  r  c                     d}t          d| j                  } || | ||d          }t          |d         d           |d         } t          || |           dS )	zg
    This test implements the example found in the NAG manual,
    f08qfc, f08qtc, f08qgc, f08quc.
    r  r  r   r   )wantqr   r  N)r'   r1   r   r   )r  ifstilstexpectr/  r  r  s          r3   test_trexc_NAGr    so    < DWAG444EU1at1---FQq	AFAD))))))r5   c                    t           j                            d          }t          j        |           j        dz  }d}t          ||g| |          }t          ||g| |          }t          d|           \  }} |d ||dd	          }t          |d
         d           |d         }	|d         }
|d         }|d         }|	d         |
d         z  }|	d         |
d         z  }| t          v rJt          |	t          j
        |	          d|           t          |
t          j
        |
          d|           t          ||	z  |                                j        z  |d|           t          ||
z  |                                j        z  |d|            ||	|
||dd          }t          |d
         d           |d         }	|d         }
|d         }|d         }| t          v rJt          |	t          j
        |	          d|           t          |
t          j
        |
          d|           t          ||	z  |                                j        z  |d|           t          ||
z  |                                j        z  |d|           t          |	d         |
d         z  |d|           t          |	d         |
d         z  |d|           d S )Nr   r-  rv   r  )ggestgexcr   c                     d S r   r   r
  s    r3   r  z!test_gges_tgexc.<locals>.<lambda>J  r  r5   Fr)  overwrite_br   r   rP   r  rH  r   rc  rO  rV   rQ   rR   r  r  )r1   r2   r/  r   ra   r   r  r  r  r   r  r  rK  d1r  s                  r3   test_gges_tgexcr$  ?  s   
)


%
%C8E??s"D
A#QF%SAAAA#QF%SAAAA"#4EBBBKD%T..!QEuMMMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B271::AD9999271::AD9999AEAFFHHJ&====AEAFFHHJ&====U1aAq!$$FQq	Aq	Aq	Aq	A271::AD9999271::AD9999AEAFFHHJ&====AEAFFHHJ&====AdGag%r====AdGag%r======r5   c                    t           j                            d          }t          j        |           j        dz  }d}t          ||g| |          }t          d|           \  }}} |d |d	          }t          |d
         d           |d         }	|d         }
|	d         }| t          v r%t          |	t          j
        |	          d|           t          |
|	z  |
                                j        z  |d|           t          j        |          }d|d<   t          |||	          }| t          v r |||	|
|          }n |||	|
||d                   }t          |d
         d           |d         }	|d         }
| t          v r%t          |	t          j
        |	          d|           t          |
|	z  |
                                j        z  |d|           t          |	d         |d|           d S )Nr   r-  rv   r  )r  trsentrsen_lworkr   c                     d S r   r   r
  s    r3   r  z!test_gees_trsen.<locals>.<lambda>z  r  r5   Fr  r   r   rH  rc  rO  rP   rU   r   r   liworkr   r7   r  r^  r   r   r4   r'   r   r.   r   r   r  ry   r   r"   )r1   r2   r/  r   ra   r  r&  r'  r  r  rK  r  selectr   s                 r3   test_gees_trsenr-  o  s   
)


%
%C8E??s"D
A#QF%SAAAA/( 7  7  7D% T..!777FQq	Ar
A	
4B271::AD9999AEAFFHHJ&====Xa[[FF1I;22Evq!5111vq!5qBBBQq	Aq	A271::AD9999AEAFFHHJ&====AdGRad333333r5   z*t, q, expect, select, expect_s, expect_sep)g/$?gQIg~jtx?gJ4?)r  58EGrgGr?gyX5;?)r  g?߾r.  gt?)r  r  r  gyǹ)g؁sF?g_L?gGz?gUN@?)goT?g0*g'gz6>W)g(g&䃞ͪӿgbX9ҿg-!lV?)gb=y?gۊe?r  g8EGr?)r  g?gQg(\ſ)g
ףp=
?gQ?r  r  )g)\(ܿgQտgQg(\?)r  g{GzԿgp=
ףg)\(?)rP   r   r   rP   g      ?g(\	@)yqh yfc]F?ڊe׿yMbȿ&S?y&1??п)r  y      ?5^I @yo0*yZd;OͿ~:p?)r  r  yx$(@4@y[ A?&?)r  r  r  y?ܵ@St$)y?ܵ꿽R!uy2U0*6[?yV-?=yXy8m4?1%̿)ySt$?\mҿyʡE?S㥛?y~:p	cڿyK7A`?[ A?)y:pΈ~jtԿyH}?9#J{yH}?	cZy+eXw?-ٿ)y"u?	c?y?տN@ayRQȿ{GzĿyh"lxz?EGrǿ)y47)yS!uqF%u@yyտGx$(?y3ı.n?rh|)yv?
F%uyd`TR?I&ۿyN@?ݓy4@
@	^)?)ys{
@ o_yH.@|Pk@y0*?*:Hy]m{?Gz)y)0[<?yI.!? ryqh 
@ׁsF?y1w-!?h ogRQ?gK?c                 &   d}d}t          d| j                  \  }}	t          |	||           }
| j        t          v r ||| ||
          }n ||| ||
|
d                   }t	          |d         d	           |d	         } |d         }| j        t          v r|d
         }|d         }n|d         }|d         }t          ||| z  |                                j        z  |           t          |d|z  |           t          |d|z  |           dS )zW
    This test implements the example found in the NAG manual,
    f08qgc, f08quc.
    r  r  )r&  r'  r   r   rP   r)  r   r   rS   rT   rU   r  N)r'   r1   r"   r.   r   r   r  ry   )r  r  r,  r  expect_s
expect_sepr/  atol2r&  r'  r   r  r   seps                 r3   test_trsen_NAGr4    s@   ` DE) 1 1 1E; ;22Ew.  vq!5111vq!5qBBBQq	Aq	Aw.  1IQi1IQiFAEAFFHHJ.T::::Ha!e%0000JCe444444r5   c                 *   t           j                            d          }t          j        |           j        dz  }d}t          ||g| |          }t          ||g| |          }t          d|           \  }}} |d ||dd	          }	t          |	d
         d           |	d         }
|	d         }|	d         }|	d         }|
d         |d         z  }|
d         |d         z  }| t          v rJt          |
t          j
        |
          d|           t          |t          j
        |          d|           t          ||
z  |                                j        z  |d|           t          ||z  |                                j        z  |d|           t          j        |          }d|d<   t          |||
|          }|d         dz   |d         f} |||
||||          }	t          |	d
         d           |	d         }
|	d         }|	d         }|	d         }| t          v rJt          |
t          j
        |
          d|           t          |t          j
        |          d|           t          ||
z  |                                j        z  |d|           t          ||z  |                                j        z  |d|           t          |
d         |d         z  |d|           t          |
d         |d         z  |d|           d S )Nr   r-  rv   r  )r  tgsentgsen_lworkr   c                     d S r   r   r
  s    r3   r  z!test_gges_tgsen.<locals>.<lambda>  r  r5   Fr!  r   r   rP   r  rH  r   rc  rO  rU   r   ir  r  r+  )r1   r2   r/  r   ra   r   r  r6  r7  r  r   r  r  rK  r#  r  r,  r   s                     r3   test_gges_tgsenr9    s   
)


%
%C8E??s"D
A#QF%SAAAA#QF%SAAAA/( 7  7  7D% T..!QEuMMMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B271::AD9999271::AD9999AEAFFHHJ&====AEAFFHHJ&====Xa[[FF1I;155E 1XaZq"EU61aAU333FQq	Aq	Ar
Ar
A271::AD9999271::AD9999AEAFFHHJ&====AEAFFHHJ&====AdGag%r====AdGag%r======r5   za, b, c, d, e, f, rans, lans)r   r   r   r   )r  r%  r   r   )r  r   r%  r   )r  r  r  g      @)r   r   r   r   )r  r  r  r   )      r   r   g      (@)g      "r          r;  )r:  r   r;  r   )      r   r  g      3@)r   r   r   r%  )r  r   r   r   )r  r  r   r   )r  r  r  r   )r   r   r   r   )r  r   r   r   )r  r  r  r   )r<  r   r  r   )r  r   g       r  )r  r         r   )r=  r   r  r   )r  r   r  r  )r  r   r%  r   )r  r   r  r   )r   r  r   r  )r   r%  r  r   )r  r   r   r  )r   r  r   r   c	                 |   d}	t          d|          }
 |
| |||||          \  }}}}}t          |d           t          |ddt          j        |          j        dz  d           t          |d	dt          j        |          j        dz  d
           t          |||	d           t          |||	d           d S )Nr  tgsylr   r   r   r-  zSCALE must be 1.0r   r/  r-  r  zDIF must be nearly 0zSolution for R is incorrect)r/  r-  zSolution for L is incorrect)r'   r   r   r7   r   r   )ra   r   r   rp   r  rd   ranslansr1   r/  r?  routloutr\   difri   s                   r3   test_tgsyl_NAGrF  !  s    H Dge444E#(5Aq!Q#:#: D$sDqE3QRXe__-@-D/1 1 1 1C128E??+>s+B24 4 4 4D$T9; ; ; ;D$T9; ; ; ; ; ;r5   r   )rT  ry   ijob)r   rP   rQ   rR   rS   c           
      x   | t           j        k    rdnd}t           j                            d          }d\  }}t	          |                    dd||g                              |           |                    dd||g                              |           d          ^}}}	t	          |                    dd||g                              |           |                    dd||g                              |           d          ^}
}}	|                    d	d
||g                              |           }|                    d	d
||g                              |           }t          d|           } |||
||||||          \  }}}}}|dk    s
J d            |dk    s
J d            |dk    r/t          |ddt          j	        |           j
        dz  d           n|dk    s
J d            |d
k    r|dk    r!||z  ||
z  z
  }||z  }||z  ||z  z
  }||z  }nq|dk    rkt          j        |          |z  t          j        |          |z  z   }||z  }|t          j        |
          z  |t          j        |          z  z   }d|z  |z  }t          |||dd           t          |||dd           d S d S )NgMbP?g|=l   OElt/ r  irv   r   )outputr  rQ   r?  r   )r   rG  r   zINFO is non-zeror  zSCALE must be non-negativer-  zDIF must be 0 for ijob =0r@  zDIF must be non-negativerT  ry   r  zlhs1 and rhs1 do not match)r/  r   r-  zlhs2 and rhs2 do not match)r7   r  r  r  r!   uniformr/   r'   r   r   r   r  )r1   r   rG  r/  r2   r   r   ra   rp   r?   r   r  r   rd   r?  rC  rD  r\   rE  ri   lhs1rhs1lhs2rhs2s                           r3   
test_tgsylrO  U  s%   
 BJ&&44ED
)

 0
1
1CDAq#++c21v..55e<<++c21v..55e<<! ! !HAq1 #++c21v..55e<<++c21v..55e<<! ! !HAq1 	BAq6""))%00ABAq6""))%00Age444E#(5Aq!Q/44$A $A $A D$sD 1999(999C<<<5<<<qyySqrx/B3/F ;	= 	= 	= 	= 	= czzz5zzz qyyC<<t8dQh&D7Dt8dQh&D7DDc\\<??T)BLOOd,BBD7D",q//)D2<??,BBD:a<DdB <	> 	> 	> 	>dB <	> 	> 	> 	> 	> 	> yr5   mtyper  c                 f   | dk    r|t           v rt          j        d           t          j                            d          }d\  }}|t          v rH|                    ||f          |                    ||f          dz  z                       |          }n+|                    ||f                              |          }| dk    r
||j	        z   n||
                                j	        z   }|                    ||f                              |          }|  d|  d	|  d
f}t          ||          \  }	}
} |
||          } |	||          \  }}}|dk    sJ  ||||          \  }}|dk    sJ t          j        |          j        }t          ||z  |d|z  |z             d S )Nr}  zhetrs not for real dtypes.l   *M/t|0 )r   rT   r  r-   r|  r}  r~  trsr   r  r   r   )ra   r  r   r-  r  )r   rA   rB   r7   r  r  r.   rJ  r/   ry   r  r'   r   r   r   )rP  r1   r  r2   r   r   r  r   rI   r}  r~  rR  r   r  r  ri   r   r   s                     r3   test_sy_hetrsrS    s    }}+--0111
)

 0
1
1CGAt[[q!f[%%!Q(@(@(CCKKERRKKaVK$$++E22D==ACa!&&((*nA!T##**511AMMMe...5=E*5>>>CCIau%%%Ec!5)))OCt19999cCda(((GAt19999
(5//
CAaCQs++++++r5   r   z
uplo, m, n))rW  rT   rv   )rW  rv   rv   )rJ  rv   rT   )rJ  rv   rv   c                    t           j                            d          }|                    ||f                              |          }t	          d|f          \  }}	 || |||          }
|dk    rt          j        |          nt          j        |          }|dk    r)t          j        t          ||                    }d|||f<    |	| |          }t          |
|d           d S )	Nl   8#q9
r  )lantrr   )rM  r2  rW  rP   g>r   )
r7   r  r  r/   r'   r   r   r  rb  r   )r   rM  r   r   r2  r1   r2   r  rU  r   rB  rA  r   s                r3   
test_lantrrV    s     )

 1
2
2C

A
&&u--A#$6==LE5
%ad
.
.
.C ckk


rwqzzAs{{Ic!Qii  !Q$
%a..CC4((((((r5   r+  )	functoolsr   r  numpy.testingr   r   r   r   r   r	   rA   r
   r  numpyr7   r   r   r   r   r   r   r   r   numpy.randomr   r   r   scipy.linalgr   r9   r   r   r   r   r   r   r   r   r   r    r!   scipy.linalg.lapackr"   scipy.statsr#   r$   scipy.sparsesparser_  scipy.__config__r%   ImportErrorr&   r8   r'   scipy.linalg.blasr(   r  r8  r   r  
complex128r.   r   blas_providerblas_versionr4   rL   rN   r   r   rx  ry  r  r  r  r#  rE  r  r  r  r  r  r  r  r  r
  r  r  r)  r2  rB  rU  r^  rd  rk  rp  rx  r  r  r  r  r  r  skipifr  r  r5  r  r  r  r   r  r
  r$  r'  r*  r  r2  r4  r6  rD  rL  rT  rY  r[  r]  ra  rr  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r-  r4  r9  rF  rO  rS  rE   rV  r   r5   r3   <module>rg     s#  
       / / / / / / / / / / / / / / / /  * * * * * *    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! - , , , , , , , , ,F F F F F F F F F F F F F F F F F F F F F F F F F F F F / . . . . . 2 2 2 2 2 2 2 2      '''''''   FFF0000000   GGG 0 0 0 0 0 0 , , , , , ,z2:&,.	~	%# #	/08@M./7	BL* * *O O O.]- ]- ]- ]- ]- ]- ]- ]-@
 
 
 
 
 
 
 
p9 p9 p9 p9 p9 p9 p9 p9f &))"B"B"BCC  DC *)- - - - - - - -*C C C C C C C C(; ; ; ; ; ; ; ;@J/ J/ J/ J/ J/ J/ J/ J/\ &))11#s,,#s,,q"g&& )  ) '& -, -, 21 *)
 )F) ) ).'4 '4 '4T'6 '6 '6T4 4 48AG AG AG AG AG AG AG AGHL L L L L L L L^.? .? .?bA A A63 3 3>1 1 1>F F FD&D &D &DR7! 7! 7!t7: 7: 7:t&8 &8 &8R3 3 36D D D@"D "D "DJD D D4 L  L  LFUK UK UK UK UK UK UK UKp%P %P %PP%P %P %PP*/ */ */Z< < < DK  M MK KM MK$: : :> &&!122+..q**q**q**!Q((!Q((b& b& b& )( )( +* +* +* /. 32b&J +..    /. F (!1+!1+!1+!1+!1+!1+' 1 1 1 9#28%?%?%?%?%?%?%@%@%@%=%=%=%?%?%?%?%?%?%A B B $28$D$D$DEE#28%G%G%G%F%F%F%E%E%E%H%H%H%G%G%G%G%G%G%I J J $28%G%G%G%H%H%H%F%F%F%G%G%G%I J JK LM M$, ,%M M$,  &))XK XK *)XKv L#28$9$9$9::%RX&@&@&@AA%RX&;&;&;<<%RX&9&9&9::%RX&B&B&BCC%RXlll33%RXooo66%RXSz(,d|(+T{(+U|(+T{	') * * &RXAw()2w()2w(*Bx(*Aw	'0 1 12& &RX&G&G&GHH%RX '4 '4 '4 5 5 &RX&F&F&FGG%RX 'A 'A 'A B B%RX ': ': ': ; ;%RX&?&?&?@@%RXooo66%RX*'=(3\'B(4i'@(3['A(1:'>	'@ A A
 &RX'7(.'7(.'8(/'8(.'7	'9 : :%%)*  * V   W*  * V ( &))11q"g&&) ) '& 21 *))2 &))"B"B"BCC  DC *) [;6??A A,& ,&A A,&^ [;6??A A0 0A A0 [;6??A AM MA AM& A""(#5#5#566""(???33""(#4#4#455""(#8#8#899""(QGaVaVb"X%&G$- . .""(S!Hq"g2wQ%&G$- . . #"(#3#3#344""(#>#>#>??""(===11""(#5#5#566""(VW$57G%+V$4vv6F$H I I""(T5MD$<$%)4L$2 3 3	E  &1 1' &1.  @ )V[;%>??A AeeAhh//& & 0/A A&< )V[;%>??A AeeAhh//	 	 0/A A	 )V[;%>??A AeeAhh//	N 	N 0/A A	N )V[;%>??A AeeAhh//	 	 0/A A	 :#28$;$;$;<<#28$5$5$566#28$D$D$DEE#28%F%F%F%G%G%G%G%G%G%F%F%F%H I I	J 	 	= =	 	= &))(@(@(@AA=$ =$ BA *)=$@. . . #>#>#>??t--	L 	L .- @?	L D%=11t--
L 
L .- 21
L 6**00011	' 	' 21 +*	' 6**+C +C +*+C\ &))t}55#s,,7@ 7@ -, 65 *)7@t &))1v..#s,,-B -B -, /. *)-B` &(++t}55#s,,-< -< -, 65 ,+-<` #28$9$9$9::#28$?$?$?@@#28$9$9$9::#28c3Z#tsDk&(%[3+%? @ @#28b!Wq"g2wR&(!W%. / /0 $28$E$E$EFF#28 %> %> %> ? ?#28$D$D$DEE#28h
%;&1;%?&2H%=&1;%?&/%<	%> ? ?
 $28ff%57G&,g%6&8I&,f%5%7 8 89:; ;() )); ;() )33v{1<8= ,> ,> ? ?,N NO  ? ?@BC C
1: 1:C C? ?1:h )33v{1<8= ,> ,> ? ?,N NO  ? ?@BC C
K KC C? ?K( )33v{1<8= ,> ,> ? ?,N NO  ? ?@BC C
" "C C? ?"J #28$6$6$677#28OOO44#28aWq!fq!fr2h&'W%. / /#28c1X2wB&(!Wq"g%7 8 8	9 $28$4$4$455#28$?$?$?@@#28h	%:&.%9&.%9&.%9%; < < $28fg%6&,f%5&,f%5&,f%5%7 8 8	9:; ;"
* 
*#; ;"
* 5$-00&))+= += *) 10+=\ &))!4 !4 *)!4H bh))))))***)))+ , , bh2221111111113 4 4  bhJJJKKKHHHHHHJ K K bh 5 5 55 5 55 5 56 6 67 8 8  0* *1 0*  &)),> ,> *),>^ &))*4 *4 *)*4Z 0bh1111112221113 4 4 bh0003333331113 4 4 bh2221113332224 5 5 bh||| bh 6 6 67 7 75 5 55 5 56 7 7 bh 5 5 56 6 65 5 56 6 67 8 8 bh 6 6 65 5 55 5 55 5 56 7 7 bh|||3') )T5 5U) )T5B &))5> 5> *)5>p "bh((((((((((((* + + bh((((((((((((* + + bh((((((((((((* + + bh((((((((((((* + + bh((((((((((((* + + bh((((((((((((* + + bh((((((((((((* + + bh((((((((((((* + +9, -!. !.D +..; ; /.E!. !.F;" +..*--11-> -> 21 .- /.->` 4,//&))&)), , *) *) 0/,. m!4!455 (E (E (E F F#s,,&))) ) *) -,F F 65
) ) )s$   8A? ?B	B	B BB