
    Yh                    -   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, d d
l-m.Z.m/Z/ d dl0m1Z2 	 d dl3m4Z4 n# e5$ r dZ4Y nw xY w	 d dlm6Z7 n# e5$ r dZ7Y nw xY wd dl+m8Z8 d dl9m:Z: ej;        ej<        gZ=ej>        ej?        gZ@e=e@z   ZAdxZBZCe4(e4d         d         d         ZBe4d         d         d         ZCd ZDd ZE G d d          ZF G d d          ZG G d d          ZHe
jI        J                    deA          e
jI        J                    dg d          d                         ZK G d d           ZL G d! d"          ZM G d# d$          ZN G d% d&          ZOe
jI        J                    deA          e
jI        J                    d'g d(          e
jI        J                    d)d*d+g          e
jI        J                    d,d-d*g          e
jI        J                    d.d/d0g          d1                                                             ZPd2 ZQd3 ZRd4 ZSd5 ZT G d6 d7          ZU G d8 d9          ZVd: ZWd; ZXd< ZYd= ZZd> Z[d? Z\d@ Z]dA Z^dB Z_dC Z`dD ZadE ZbdF ZcdG Zd G dH dI          ZedJ ZfdK ZgdL ZhdM Zie
jI        j                    dNdOP          dQ             ZkdR Zle
jI        J                    dSdTdUg          e
jI        J                    de=          e
jI        J                    dV emdW                    e
jI        J                    dX emdY                    e
jI        J                    dZ emdY                    e
jI        J                    d[d d\g          e
jI        J                    d]d d\g          dhd^                                                                                    Zne
jI        J                    de=          d_             Zoe
jI        J                    d`dVdaidXdaidZdaid[daidbdaid]daif          dc             Zpe
jI        J                    dd ejq        g deg dfg dgg dhg dig djg           ejq        g dk           ejq        g dlg dmg dng dog dpg dqg           ejq        g drg dsg dtg dug          fg          dv             Zre
jI        J                    deA          dw             Zse
jI        J                    dx ejq        g dy           ejq        g dz           ejq        g d{           ejq        g d|           ejq        g d}           ejq        g d~           ejq        g d           ejq        ddgddgddgddgddgg           ejq        ddgddgd/dgddgdd\gg          f	 ejq        g d           ejq        g d           ejq        g d           ejq        g d           ejq        g d           ejq        g d           ejq        g d           ejq        ddgddgddgddgddgg           ejq        ddgddgddgddgddgg          f	g          d             Zte
jI        J                    deA          e
jI        J                    d'g d          e
jI        J                    d.d/d0g          d                                     Zue
jI        J                    deA          e
jI        J                    dg d          d                         Zve
jI        J                    d ewe=e=z   eA                    d             Zxe
jI        J                    d ewe=e=z   eA                    d             Zye
jI        J                    d ewe=e=z   eA                    d             Zze
jI        J                    d ejq        g d           ejq        g d           ejq        g d           ejq        g d           ejq        dWd0gdadYgddagddgddgg           ejq        ddgddgd\dgddWgd/dgg          f ejq        g d           ejq        g d           ejq        g d           ejq        g d           ejq        ddgddgddgddgg           ejq        ddgddgddgddgg          fg          d˄             Z{d̄ Z|e
jI        J                    d eweAe=e=z                       e
jI        J                    d emd/                    dτ                         Z}e
jI        J                    d eweAe=e=z                       e
jI        J                    d emd/                    dЄ                         Z~e
jI        J                    d eweAe=e=z                       e
jI        J                    d emd/                    dф                         Ze
jI        J                    d eweAe=e=z                       e
jI        J                    d emd/                    d҄                         Ze
jI        J                    dd ejq        g dԢ           ejq        g dբ           ejq        g d֢           ejq        g dעg dآg d٢g dڢg          fg          dۄ             Ze
jI        J                    deA          e
jI        J                    dg dݢ          dބ                         Zd߄ Ze
jI        J                    dg d          e
jI        J                    dddg          d                         Ze
jI        J                    dddg          e
jI        J                    dddg          d                         Ze
jI        J                    deA          e
jI        J                    dg d          d                         Ze
jI        J                    deA          d             Ze
jI        J                    deA          e
jI        J                    dddNg          e
jI        J                    ddd-g          d                                     Ze
jI        J                    deA          e
jI        J                    dd d\g          e
jI        J                    ddd-g          d                                     Ze
jI        J                    deAdz            e
jI        J                    dddNg          e
jI        J                    ddd-g          d                                     Ze
jI        J                    d ejq        g dy           ejq        g dz           ejq        g d{           ejq        ddgddgddgddgddgg           ejq        ddgddgd/dgddgdd\gg          f ejq        g d           ejq        g d           ejq        g d           ejq        ddgddgddgddgddgg           ejq        ddgddgddgddgddgg          fg          d             Ze
jI        J                    d eweAe=e=z                       e
jI        J                    ddd fd-d fg          d                         Ze
jI        J                    d eweAe=e=z                       e
jI        J                    ddd fd-d fg          d                         Ze
jI        J                    d eweAe=e=z                       e
jI        J                    ddd fd-d fg          d                          Ze
jI        J                    d ejq        g d           ejq        g d           ejq        dWd0gdadYgddagddgddgg           ejq        ddgddgd\dgddWgd/dgg          f ejq        g d           ejq        g d           ejq        ddgddgddgddgg           ejq        ddgddgddgddgg          fg          d             Ze
jI        J                    dddNg          e
jI        J                    deA          d                         Ze
jI        J                    deA          d             Ze
jI        J                    d ejq        g dg dg d	g d
g           ejq        g dg dg dg d
g          dd\f ejq        g dg dg dg dg           ejq        g dg dg dg dg          d\dYfg          d             Ze
jI        J                    deA          d             Ze
jI        J                    deA          d             Ze
jI        J                    d ejq        g dg dg dg dg           ejq        g dg dg d g d!g           ejq        g d"g d#g d$g d%g           ejq        g d&          d'd(f ejq        g d)g d*g d+g d,g           ejq        g d-g d.g d/g d0g           ejq        g d1g d2g d3g d4g           ejq        g d&          d5d6fg          d7             Ze
jI        J                    deA          d8             Ze
jI        J                    d9 ejq        g d:g d;g d<g d=g           ejq        g d>g d;g d<g d?g           ejq        g d@g dAg dBg dCg           ejq        g dDg dEg dFg dGg           ejq        g dHg dIg dFg dJg           ejq        g dKg dLg dMg dNg           ejq        g d>g dOg dPg dQg           ejq        g dRg dSg dTg dUg          fg          e
jI        J                    de=          dV                         Ze
jI        J                    de=          e
jI        J                    dWdX          e
jI        J                    dYg dZ          d[                                     Ze
jI        J                    d\ddg          e
jI        J                    deA          e
jI        J                    dd]          d^                                     Ze
jI        J                    d\ddg          e
jI        J                    deA          e
jI        J                    dd]          d_                                     Ze
jI        J                    d' ed`                    e
jI        J                    dag db          e
jI        J                    d,d-d*g          e
jI        J                    deA          dc                                                 Ze
jI        J                    deA          e
jI        J                    d'g d          dd                         Ze
jI        J                    d' ed`                    e
jI        J                    deA          de                         Ze
jI        J                    de=          e
jI        J                    dfd]          dg                         ZdS (i      )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)
_to_banded)_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      p/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr5   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       r4   test_lapack_documentedrM   9   s    ~,---$$&&''E	 	 	K ffGF ! !$$ 	![)@)@E!!NN4   b===N=====r6   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)         )         )      	   )rQ   r   r   ga2U0*3?)rT   r   r   gMb`?)rW   rQ   r   r   )r   rQ   r   r   sdzcgebalr   rQ   )permutescale)	getattrr:   r   reprr   r   lenr8   r   )
selfaa1pfbalohipivscaleinfos
             r4   
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))))	* 	*r6   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^   r:   r   r_   )ra   rb   rd   re   httaurj   s          r4   
test_gehrdzTestFlapackSimple.test_gehrdg   s    __^^  	* 	*A7D11AyAaDDMBTHd4jj))))	* 	*r6   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 )NrQ   rR   r   rT   rU   rV   rX   rY   
         TfdFD)trsylr.   C)tranatranbdecimal)isgn)	r8   arrayr0   r(   isupperr   dot	conjugaterz   )ra   rb   bctransr2   rc   b1c1r|   xr]   rj   s                r4   
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!= = = = =#	= 	=r6   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 )Nrm   rn   rp   r{   Mm1OoIiFfEer   r   r.   )langeFfEeFfrS   rW   Mm1Oor   axisIirQ   )r8   r   r0   r   r(   sqrtsumsquareabsr   maxr   )	ra   rb   r2   norm_strrc   r   valuer   refs	            r4   
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-	- 	-r6   N)__name__
__module____qualname__rk   ru   r   r    r6   r4   rO   rO   P   sP        * * **	* 	* 	*= = =8- - - - -r6   rO   c                       e Zd Zd Zd ZdS )
TestLapackc                 4    t          t          d          rd S d S Nempty_module)hasattrr:   ra   s    r4   test_flapackzTestLapack.test_flapack   #    7N++ 	D	 	r6   c                 4    t          t          d          rd S d S r   )r   r9   r   s    r4   test_clapackzTestLapack.test_clapack   r   r6   N)r   r   r   r   r   r   r6   r4   r   r      s2          
    r6   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  rw      rQ   )gels
gels_lworkr2   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrR   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r   	enumerateDTYPESr   r0   r(   r#   r   REAL_DTYPESr8   r   r1   r`   r   finfoepsr	   r/   )ra   indr2   mnnrhsrc   r   glsglslwr   r@   rj   r   r   r   lqrr   	lqr_truths                      r4   	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..../	/ 	/r6   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_lworkrR   rQ   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r8   r   r(   r1   r`   intrealr   r   r   r/   )ra   r2   rc   r   r   r   r   r   r   workiworkrj   r   
iwork_sizer   srankrwork
rwork_sizes                      r4   
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r6   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_lworkrR   rQ   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )ra   r2   rc   r   r   r   r   r   r   r   rj   r   vr   r   r   s                   r4   
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 	9r6   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   rR   rQ   rw   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r8   r   r(   r1   r`   r   r   r   r   r   int32r   r/   )ra   r2   rc   r   r   gelsy_lworkr   r   r   r   rj   r   jptvr   r   jr   s                    r4   
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 	9r6   N)r   r   r   r   r   r   r   r   r6   r4   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9r6   r   r2   r1   )rS   rT   )rU   rR      r  c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrf_lworkr   r   r   r   r(   r   )r2   r1   r  r   r   r   rj   s          r4   test_geqrf_lworkr    sM     #M%@@@KDAq+Q'''KE4qr6   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,  rR   r   gerqfrR   r   orgrqrQ   ungrq)r   r8   r   r(   assert_raises	Exceptionr   r/   )
ra   r2   rb   r  rqrt   r   rj   r  r  s
             r4   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!,,,,	- 	-r6   N)r   r   r   r  r   r6   r4   r	  r	    s#        - - - - -r6   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*   )rS   rS   size)potrfpotri)cleanr   )r8   randomr   normalr   rz   r(   r   r   r   r   )
ra   lowerr  r   rb   dpotrfdpotrir   rj   dpts
             r4   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r6   N)r   r   r   r"  r   r6   r4   r  r    s(        C C C C Cr6   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|
            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   rQ   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rS   z=LAPACK root finding dlasd4 failed to find the singular value zThere are NaN rootsd   atolr   )r8   r   hstackvstackdiagr   r`   newaxisr   concatenater   r(   rangerI   r   anyisnanr   r   float64r   )ra   sigmasm_vecMSMit_lensgmmvcr-  rootsiress               r4   test_sing_val_updatezTestDlasd4.test_sing_val_update  s5   ///**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   Q1SPQSS    "%RVBHUOO,,,.CDEEEEBHRZ,@,@,D(D "*!5!5!99	; 	; 	; 	; 	; 	;r6   N)r   r   r   rD  r   r6   r4   r$  r$    s#        ; ; ; ; ;r6   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 )	TestTbtrsr2   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=
ף0rH  g(\+gףp=
0g333333*@g(\gHzG,gQ#rT   rQ   r   rS   rR   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   r0  N)r   r8   r   r/   
ValueErrorr(   r   r   )ra   r2   rM  r   x_outrJ  r   rj   s           r4   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4r6   zdtype,transc                 >    g | ]}d D ]}|dk    r	|t           v ||fS ))Nrz   r}   r}   )r   ).0r2   r   s      r4   
<listcomp>zTestTbtrs.<listcomp>5  sP     N N N"'N N6;&+sllu7K7K  %en7K7K7K7Kr6   rN  UrK  r3  rU  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  )rT   rS   rR   rJ  r   rX  rQ   r   c                 4    g | ]}t          |          z
  S r   )r   )rV  r   r   s     r4   rW  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>J  s#    888aq3q66z888r6   c                 4    g | ]}t          |f          S r   )r5   )rV  widthr2   r3   s     r4   rW  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>K  s7     + + + -eXucBB + + +r6   dia)formatr   )rM  r   rN  r   r3  rU  g-C6
?r   rz   r}   zInvalid trans argument)r8   r  RandomStater(   r6  r   spsdiagsr   r   diagonalr   minr5   r   r   rz   r   rQ  )ra   r2   r   rN  r3  r   kdrJ  is_upperkuklband_offsetsband_widthsbandsrb   rM  rowkr   r   rj   r   r3   s    `                   @@r4   test_random_matriceszTestTbtrs.test_random_matrices4  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6r6   zuplo,trans,diag)rX  rU  Invalid)rX  rn  rU  )rn  rU  rU  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 exceptionsrJ  r   rT   rR   N)r(   r8   r9  r   r  r  )ra   rN  r   r3  rJ  rM  r   s          r4   &test_invalid_argument_raises_exceptionz0TestTbtrs.test_invalid_argument_raises_exceptionh  sR     !
;;;!QZZAJJiAtUDAAAAAr6   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   rT   rJ  r   )r   rS   rX  rL  N)r8   r   floatr(   r   )ra   rM  r   rJ  r@   rj   s         r4   test_zero_element_in_diagonalz'TestTbtrs.test_zero_element_in_diagonalu  sw     WV5)))GAU### 6665	%2---4T1r6   zldab,n,ldb,nrhs)rU   rU   r   rU   )rU   rU   rS   rU   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   rJ  Nr8   r   rr  r(   r  r  )ra   ldabr   ldbr   rM  r   rJ  s           r4   test_invalid_matrix_shapesz$TestTbtrs.test_invalid_matrix_shapes  s`     WdAYe,,,GS$Ku--- 666iA.....r6   N)r   r   r   rB   markparametrizer   rS  rm  rp  rs  rx  r   r6   r4   rF  rF    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  / /	 / / /r6   rF  r   )I1OrN  rX  rK  r3  rU  r   rS   rw   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  }nUt          j                            |d
          }t!          d|f          \  }} ||          \  }}} ||||          \  }}
d}t+          |	||           d S )Nr   l   a$r  r.   rw   rX  trcon)r   rN  r3  r{  ordrQ   gecongetrfr   r   )r  r   r8   default_rngr   permutedlogspaceintegers
issubdtypefloatingr   r   r   r3  r4  r0   r(   linalgr   infr   r   )r2   r   rN  r3  r   r3   Aoffsetr  rC  r@   norm_A
norm_inv_Ar   anormr  r  luipvtrj   r   s                        r4   
test_trconr    s3    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&'	qa(('(:QDAAuqD$r5t,,,Q
 DC4((((((r6   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 )Nr{   lartgr   rS   rT   r.   333333?r   y       皙?)	r(   r8   r   iscomplexobjr   r   
isinstancecomplexrr  )r2   r  re   gcssnrs          r4   
test_lartgr    s    ) ) 666HQHQ?1 	GAE!QKK	BG$$$3?1 	)B	***Jq'**+++Jr5))****B((((') )r6   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 )Nr{   r  r  rT   rS   rw   rQ   fdrotr   y             r.   y              @)rU   rU   rU   rU   )r   r   r   r   r0  rR   )r   )rU   rU   rS   rS   r   )offxoffy)rS   rS   rU   rU   )incxr  r   )rU   rS   rU   rS   )r  incyr   )r  r  r  r  r   )rS   rS   rU   rS   r  )r  r  r   )overwrite_xoverwrite_y)r8   fullr   	precisionr)   r(   r   r   )
r2   r   r   ur   r0  r  re   rb   r   s
             r4   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 $4r6   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   )rT   rT   r.   r{   larfglarfr   FDr   rQ   rQ   r   rR   r   r   RsiderO  r  )r8   r  r   rz   r   conjr(   copyr1   r   r   r   r   )a0a0jr2   r  r  rb   alphar   rt   expectedr   s              r4   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 6r6   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r2   ilp64iA%  T)r)  r(  i`DiD)r(   r8   float32r#   )sgesdd_lworkr   r   s      r4    test_sgesdd_lwork_bug_workaroundr  %  sq     $M*57 7 7LA<A&*$@ @ @E  I)!3!3!3!3!3!3r6   c                       e Zd Zej                            de          d             Zej                            de          ej                            dd          d                         ZdS )	TestSytrdr2   c                     t          j        d|          }t          d|f          }t          t          ||           d S )Nr   r   sytrdr8   r   r(   r  rQ  )ra   r2   r  r  s       r4   test_sytrd_with_zero_dim_arrayz(TestSytrd.test_sytrd_with_zero_dim_arrayB  sA     HV5))) 1$//j%+++++r6   r   rQ   rS   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_lworkrQ   rR   r   r  r   rU   r   r/          r   r   )r8   r   r(   arangetriu_indices_fromr   r   r   r   r3  r   r1   r   r6  outerr   r   rz   )ra   r2   r   r  r  r  r   rj   datarq   ert   rz   rl  k2QrB  r   Hi_lowerQTAQs                        r4   
test_sytrdzTestSytrd.test_sytrdI  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Fr6   N)	r   r   r   rB   ry  rz  r   r  r  r   r6   r4   r  r  A  s        [Wk22, , 32, [Wk22[S&))7G 7G *) 327G 7G 7Gr6   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  )ra   r  r  r  s       r4   test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_array  sA     HV=111 1$//j%+++++r6   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_lworkrQ   rR   r.   r   rQ   r  r   r  rU   r   r/  r  r   r   rw   )r8   r   r(   r  r  fill_diagonalr   r3  r   r#   r   r   r   r   r1   r   r   r6  r  r  r   r   rz   )ra   r   
real_dtyper  r  r  r  r   r@   rj   r   r  rq   r  rt   rz   rl  r  r  rB  r   r  r  QHAQs                           r4   
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	 	 	 	 	 	r6   N)r   r   r   rB   ry  rz  r/   r  zipr   r  r   r6   r4   r  r    s        [_n==, , >=, [7 Sn==? ?[S&))A A *)? ?A A Ar6   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   rV   rT   rR   )r   r   rd   )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#   r8   r   r   r   )r   r2   func
func_lworkr   rb   r   rq   r   r@   resultr  s               r4   
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,? ,?r6   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   rw   rT   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr.   rR   rQ   r   r  )rb   ipivr  r  rd   )r   r   r   r/   r(   r   r0   r  rz   r8   r   r   r#   r   r   r  cond)r   r2   r   r  funconfunctrfr  r  r   ldur  r@   rconds                r4   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r6   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   rw   )r  sygstsyevdsygvdr   rR   r   giUMu?r   )r   r   r   r(   r   r0   rz   r8   r   r   r   )r   r2   r   r  r  r  r  r  Beig_gvdr@   rj   r   rb   eigs                  r4   
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 3r6   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   rw   )r  hegstheevdhegvdr   r.   rR   r   -C6?r   )r   r   r/   r(   r   r0   r  rz   r8   r   r   r   )r   r2   r   r  r  r  r  r  r  r  r@   rj   r   rb   r  s                  r4   
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 1r6   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   rw      tzrzftzrzf_lworkr   rR   r.   r   r   Nc           
          g | ]P}|         |gd d f         j                             |gd d f                                                   z  z
  QS Nrz   r   r  rV  r   IdVrt   s     r4   rW  ztest_tzrzf.<locals>.<listcomp>z  s[    MMMqr#a&A36A36)9)9::::MMMr6   rw   r   r  r/  )r8   r  r_  r   r   r(   r#   r   r   r0   r  r  rz   r   r1  r   r   r6  r   r   r   r   spacingr   )r3   r   r   r   r2   r   tzrzf_lwr   r  rzrj   r  r   Zr&  r'  rt   s                 @@@r4   
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r6   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   rQ   r.   r}   rz   )trttftfttrtfsmr   rR   r   r   rT   rV   r   r   r   rX  )r   r3  rS   r  )r   r3  r  N)r8   r  r_  r   r   r   r   r   r0   r(   r   r   r  rz   r  )r3   r   r2   r   r  r   r.  r/  r0  Afpr@   r  solnB2s                 r4   	test_tfsmr5    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r6   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   )rw   r  r  r  r   rR   )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     r4   rW  z$test_ormrz_unmrz.<locals>.<listcomp>  s[    NNNqr#a&A36A36)9)9::::NNNr6   rz   r}   rw   r   r   r  r/  r   r  )r  r   )r  r   r   )r8   r  r_  r   r   r(   r#   r   r   r0   r1  r   r6  r   r   r(  r   r   r   r   r  rz   )r3   qmqncnr   r2   r   r)  lwork_rzr  r}   orun_mrzorun_mrz_lw	lwork_mrzr*  rj   r   r  r   tolcqr&  r'  rt   s                        @@@r4   test_ormrz_unmrzrE    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	! 	! 	! 	! 	![.! .!r6   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   rQ   r.   r}   rz   )r.  r/  r   r   rK  rN  rX  )transrrN  rR   Nr   F)order)r8   r  r_  r   r   r   r0   r(   r   r   r   r  rz   r   r   reshape)r3   r   r2   r   A_fullrI  r.  r/  A_tf_Urj   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                      r4   test_tfttr_trttfrX    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:r6   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 )rG  r   r   rQ   r.   )trttptpttrr   r   rK  rH  rR   N)r8   r  r_  r   r   r   r0   r(   r   r   r   r   rz   r   r   r   )r3   r   r2   r   rM  rZ  r[  A_tp_Urj   A_tp_LindsA_tp_U_mA_tp_L_mrT  rU  s                  r4   test_tpttr_trttpra    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  8r6   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   rQ   r.   )pftrfr.  r/  r   r   N)r8   r  r_  r   r   r   r0   r  rz   r   r(   r   r   r   )r3   r   r2   r   r  rc  r.  r/  r2  rj   	Achol_rfpA_chol_rr@   Achols                 r4   
test_pftrfrg  F  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 3r6   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   rQ   r.   )pftrirc  r.  r/  r   r   rR   rT   rV   r   N)r8   r  r_  r   r   r   r0   r  rz   r   r(   r   r   r   r   )r3   r   r2   r   r  ri  rc  r.  r/  r2  rj   
A_chol_rfp	A_inv_rfpA_inv_rr@   Ainvs                   r4   
test_pftrirn  a  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r6   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   rQ   r.   rS   r   rR   )pftrsrc  r.  r/  r   rT   rV   r   N)r8   r  r_  r   r   r   r0   r  rz   r   r   r(   r   r  r  r   r   )r3   r   r2   r   r  r  Bf1Bf2rp  rc  r.  r/  r2  rj   rj  r3  s                   r4   
test_pftrsrs    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r6   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   rQ   r.   rR   r   hr.  r/  frkr   r   r   rT   rV   r   N)r8   r  r_  r   r   r   r0   r  rz   r   r(   r   r   r   )r3   r   r2   r   r  prefixr.  r/  shfrkr2  r@   r}   Afp_outA_outs                 r4   test_sfrk_hfrkr{    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r6   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   rw   rQ   i   r.   r.  r   )syconvr  r  r   r  F)r  	hermitianr  r   Nr  r/  r   )r8   r  r_  r   r   r   r0   r  rz   r   r(  r   r(   r#   r   r   r   r   )r3   r   r2   r   r  rC  r~  trf	trf_lworklwrK  Dpermr  r  rj   rb   r  rX  s                      r4   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r6   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   rQ   r.   r.  r   )geqrtgemqrtr   r   r   r  r/  r}   rz   rK  r  rU  r  r   rK  rK  rU  r  r  r1  )r8   r  r_  r   r   r   r0   r(  r   r(   r   r   rz   r  r   r   r   r  r  )ra   r3   r   r2   r   r  rC  r  r  rb   trj   r   r  r  r}   	transposer  r   r   qqC	c_defaults                          r4   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r6   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   rQ   r.   r.  r   )tpqrttpmqrtr   r   rR   r   r  r/  r}   rz   r  rU  r  rK  r   r  r  r  r1  )r8   r  r_  r   r   r   r0   r(  r   r(   r   r   r   r5  r   rz   r  r   r   r  r  )!ra   r3   r   r2   r   r  r  rC  r  r  lrb   r   r  rj   B_pentb_pentr   r  r  r}   r  r  r  r   r   rq   r  cdCDqCDr  	d_defaults!                                    r4   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r6   N)r   r   r   rA   r  r  r   r6   r4   r  r    sJ         
<A <A <A|QK QK QK QK QKr6   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   rw   rR   pstrfr   rQ   r.   r    r   rR   rP  r  r8   r  r_  r   r   r(   r   r0   r  rz   r   r   r   r  r   r9  r   r   )r3   r   r2   r   r  r  r  r   pivr_crj   rX  single_atoldouble_atolr0  rK  s                   r4   
test_pstrfr  {     
)


%
%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r6   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   rw   rR   pstf2r   rQ   r.   r  r  r  rP  r  r  )r3   r   r2   r   r  r  r  r   r  r  rj   rX  r  r  r0  rK  s                   r4   
test_pstf2r    r  r6   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ſFxrR   )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  rP  )r8   r   r   r   r0   r(   r   )desired_realdesired_cplxr   r2   r  r  r  r   rowcndcolcndamaxrj   s               r4   
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/ /r6   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  rI  rw   r   rR   r   r.   c                      g | ]
}d |z  z  S )r   r   )rV  r   r  s     r4   rW  ztest_syequb.<locals>.<listcomp>  s!    :::eb!em:::r6   rU   syequb)r8   r   r   r   r   r6  rot90r3  r(   r   log2r0   r   )desired_log2sr   r2   r  rq   r  r   scondr  rj   r  s             @r4   test_syequbr    s   H???@@M'' 	< 	<
UF2U###C!GGbb--H::::U2q\\:::%HHH	RXbgajj!!!!(%888%vayy5$RWQZZ&&s++];;;;	< 	<r6   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 )NrR   rU   i  rY   rQ   )rl  r.   r   r  r  r  rV                   i   rU   rU   y              0@)rU   r   r  )r  r   r   r   r   r  r   r   r   r  r  )r8   r3  r   r   zheequbr   r   r  r   r  cheequbr0   	complex64)r  r   r  r  rj   s        r4   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Jr6   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  rw   r.   rR   getc2r   gesc2r   r*  )overwrite_rhsrT   r   )	r8   r  r_  r   r   r   r0   r(   r   )r3   r   r  r  r   r2   r  r   r  r  r  r  jpivrj   r   r]   s                   r4   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: : : : :+: :r6   r  )rV   rU   r  jobarV   joburT   jobvjobrrQ   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   rR   rQ   r  rI  r   )r  r  r  r  jobtr  NF)r)  r  )r8   r  r_  r   r   r5   r(   r  r  r  r   r   r   r3  r  rz   identityr  matrix_rankcount_nonzero)r  r2   r  r  r  r  r  r  r3   r   r   r0  r  r  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvar  r   r   r   rj   sigmas                                r4   test_gejsv_generalr  :  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	& 	&r6   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   rQ   rQ   rQ   r  r.  rw   r  N)r(   r   r1   r8   r   r   sinr  rL  r0   asfortranarrayrz   r  r   )r2   r  r  r  r   r   r   rj   r  Acr@   s              r4   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r6   kwargsrY   r  c                     t          j        dt                    }t          dt                    }t	          t
          ||fi |  dS )z-Test invalid job arguments raise an Exception)rR   rR   r   r  Nru  )r  r  r  s      r4    test_gejsv_invalid_job_argumentsr    sJ     	e$$$AWE222E)UA0000000r6   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(   r2   r   )r  
sva_expectu_expectv_expectr0  r  r  r  r   r   r   rj   s               r4   test_gejsv_NAGr    s|    0 DWAG444E#(588 CAtUDJ$////Had++++Had++++++r6   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  rw   r.  rQ   r2   r3   r   gttrfgttrsr   r   rR   r  rz   r}   r1  z?gttrf: _d[info-1] is , not the illegal value :0.)r8   r  r_  r   r   r5   r  r3  r   r(   r	   r   r   r   r   rz   r  r  rQ  testingr   )"r2   r3   r   r0  durq   dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  rj   rX  rK  rB  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos"                                     r4   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  rW   gC>)r   r  rX   )rR   rS   rT   rU   rU   g@gffffff@      g%@g@g	r  gffffff&g3@r  rU   rW   rI  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  rq   r  du_expd_expdu2_expipiv_expr   r   r  r  r   r  r  r  r  rj   r  s                     r4   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr'  W  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r6   )r|  r{  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k    rt           j
        nd          }t          d|f          \  }	}
 |	|||          \  }}}}}} |
|||||||          \  }}t          d	|f          \  }} ||          \  }}} ||||          \  }}t          j        |           j        d
z  }t          |||           d S )NiTfr.   rQ   r   r{  r  )r  gtconr  r  g      ?r   )r8   r  r  r3  r  r  r   r0   r  r   r  r(   r   r   r   )r2   r   r   r3   rq   r  r  r  r  r  r)  r  r  rj   rC  r@   r  r  r  r  r   r   s                         r4   
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INN1DCKK"&&QN??E#$6==LE5!&r1b!1!1B2sD$U2q"c4T:::FC#$6==LE5U1XXNBdU2u4(((FC8E??$DC4((((((r6   ))rS   rW   )rW   rS   r  c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrfp_lworkr   r  r   r  )r2   r1   r,  r   r   r   rj   s          r4   test_geqrfp_lworkr-    sM     $^EBBBLDAq,a(((KE4qr6   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.  rw   rT   rQ   r   pttrfr   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r8   r  r_  r   r   r5   r3  r  r  r(   r	   r   r   r   r   rz   )ddtyper2   r3   r0  r   rq   r  r  r  r/  r  _erj   rK  r  r   r   r1  _xs                      r4   test_pttrf_pttrsr5    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%%%%%%r6   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 )Nrw   r   r/  r   rR   rQ   r   )r8   r  r_  r(   r5   r  rQ  )r2  r2   r   r3   r/  rq   r  s          r4   *test_pttrf_pttrs_errors_incompatible_shaper7    s     	A
)


%
%CWE222E#QD&#66:A#QqSFE377A*eQssVQ///*eQ#2#/////r6   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 )Nrw   r  r/  r   rR   rQ   r   z?pttrf: _d[info-1] is r  z2?pttrf should fail with non-spd matrix, but didn't)r8   r  r_  r(   r5   r   r   )
r2  r2   r   r3   r/  rq   r  r  r3  rj   s
             r4   'test_pttrf_pttrs_errors_singular_nonSPDr9    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Lr6   z%d, e, d_expect, e_expect, b, x_expect)rT   rw      r   rU   )r  r  r  rX   )rT   rY   r      rQ   )r  gK=Ur  r  rR      A      g      @r   r  )r;  )   .      )y      0@      0@y      2@      "      ?      )r;  rY   rQ   rT   )r   r  rB  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  r1  rQ   r  )r(   r   r  r2   r/   )rq   r  d_expecte_expectr   x_expectr0  r/  r  r3  rj   r1  r4  s                r4   test_pttrf_pttrs_NAGrG  	  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 ! r6   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  rQ   rT   rR   r   )	r8   r  r_  r5   r3  r   r  rz   r    )r2   realtyper   	compute_zr3   A_eigvrrq   r  trir  zs               r4   pteqr_get_d_e_A_zrO  8	  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<r6   zdtype,realtyperJ  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   rw   rq   r  rN  rJ  r   zinfo = z, should be 0.r  N)r   r8   r   r   r(   rO  r   r   sortr    r  rz   r  r3  )r2   rI  rJ  r0  rQ  r   rq   r  r  rN  d_pteqre_pteqrz_pteqrrj   s                 r4   
test_pteqrrW  X	  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	& 	& 	& 	& 	& 	&& &r6   c                     t          d           t          d|           }d}t          | |||          \  }}}} ||dz
  |||          \  }	}
}}|dk    sJ d S )Nr  rQ  r   rw   rT   rN  rJ  r   r   r(   rO  r2   rI  rJ  rQ  r   rq   r  r  rN  rT  rU  rV  rj   s                r4   test_pteqr_error_non_spdr\  y	  sy     	HHHge444E
A"5(AyAAJAq!Q ',eAE1Y&O&O&O#GWgt!888888r6   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  rQ  r   rw   r   rY  )r   r(   rO  r  rQ  )	r2   rI  rJ  rQ  r   rq   r  r  rN  s	            r4   "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r6   c                     t          d           t          d|           }d}t          | |||          \  }}}}d|d<   d|d<    |||||          \  }	}
}}|dk    sJ d S )Nr  rQ  r   rw   r   rY  rZ  r[  s                r4   test_pteqr_error_singularr`  	  s     	HHHge444E
A"5(AyAAJAq!QAaDAaD&+eAqA&K&K&K#GWgt!888888r6   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  rQ  r   rQ   r   rR  r  N)r(   r2   r8   r3  r   r   )rJ  rq   r  rD  z_expectr0  rQ  rN  r  r3  _zrj   s               r4   test_pteqr_NAG_f08jgfrd  	  s      Dgag666E


RWQ]]"RWQ^^3AuqAi@@@BBBt,,,,BF2JJx 0 0t<<<<<<r6   matrix_size)r   )rW   rV   rV   rV   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  )rt   r   r   r   rP  r   )r8   r  r_  r   r   r(   r5   r   r   r   r   r1   r  rz   r   allr3  r`   r   r7  )r2   re  r3   r   r0  ri  gqrr   r   r  qr_Art   rj   r  qqrr  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                         r4   test_geqrfpru  	  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::>""$ $ $ $ $r6   c                      t          j        g           } t          d| j                  }t	          t
          ||            d S )Nri  r   )r8   r   r(   r2   r  r  )A_emptyri  s     r4   #test_geqrfp_errors_with_empty_arrayrx  
  s;    hrllGhgm<<<F)VW-----r6   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   rQ   r  $_lwork raised unexpected exception: r   r/   r(   r#   r  rB   failr~  ry  r   r2   sc_dlwdz_dlwr  s          r4   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   rQ   rK  rH  r  r  r  s          r4   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   )rQ   rw   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   )rV  r   s     r4   rW  z*test_orcsd_uncsd_lwork.<locals>.<listcomp>0
  s    %%%!A%%%r6   )r   r   r   r(   r#   rk  )r  r   rd   r  r~  dlwr  lwvals           r4   test_orcsd_uncsd_lworkr  %
  s     	JJJ1A	AAK''$$TC

C	#V	,	,	,B2q!Q''ED[[EEuhE%%u%%%&&&&&&&r6   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)rh  P      r  r  csdr  r   r   lrworkr   r   r  g     @rP  )r   r$   rvsr%   r(   r#   dictr  r   rc  r8   r   r6  cosr  r   r   r   )r  r   rd   r  r~  Xdrvr  r  lwvalscs11cs12cs21cs22thetau1u2v1tv2trj   rX  VHr  n11n12n21n22SonerB  Xcs                                  r4   test_orcsd_uncsdr  3
  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Br6   
trans_boolFfactrJ  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   rw   rQ   r  r   rR   rz   r}   rU  rJ  NrV   r  r   dlfdfdufr  r  r   z?gtsvx info = z, should be zerorS   r  __len__Trcond should be scalar but is ferr.shape is z but should be berr.shape is )r8   r  r_  r   r   r(   r5   r3  r   r  rz   r  r   r	   r   r   r1   )!r2   r  r  r3   r0  r  r  r   r  rq   r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr  ferrberrrj   s!                                    r4   
test_gtsvxr  b
  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+> +> @ @ @ @ @r6   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   rw   rQ   r  r   rR   rz   r}   rJ  rV   r  rU  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r  )	r8   r  r_  r(   r5   r3  r   r  rz   )r2   r  r  r3   r  r  r   r  rq   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rj   s                                  r4   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 
 xr6   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   rw   rQ   r  r   rR   rz   r}   rJ  rV   rU  r  )r8   r  r_  r(   r5   r3  r   r  rz   r  rQ  r  )r2   r  r  r3   r  r  r   r  rq   r  r  r   r   r   r  r  r  r  r  r  s                       r4   "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	< 	< 	< 	< 	< 	<r6   zdu,d,dl,b,xc           
          t          d|j                  } |||| |          }|\
  }}}	}
}}}}}}t          ||           d S )Nr  r   r(   r2   r   )r  rq   r  r   r   r  r  r  r  r  r  r  r  r  r  r  rj   s                    r4   test_gtsvx_NAGr    s]    . WAG444Eb!R##I@I=CS$feT4a(((((r6   zfact,df_de_lambdac                 B     t          d|j                  | |          S Nr/  r   r(   r2   rq   r  s     r4   <lambda>r  (  7     )H(8?@w)H )H )HHI1)N )N r6   c                     dS N)NNNr   r  s     r4   r  r  *      -? r6   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   rU   rT   rQ   r   rR   r  r  r  efr   zinfo should be 0 but is .r  r  r  )rR   r  z# but should be ({x_soln.shape[1]},)r  N)r8   r  r_  r   r   r(   r5   r3  r  r  r	   r   r   r   r   rz   r   r1   )r2   rI  r  df_de_lambdar3   r0  r  r   rq   r  r  r  r   r  r  rj   r  r   r  r  r  rK  r  s                          r4   
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 : : : : :r6   c                 B     t          d|j                  | |          S r  r  r  s     r4   r  r  c  r  r6   c                     dS r  r   r  s     r4   r  r  e  r  r6   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   rU   rT   rQ   r   rR   r  r  )
r8   r  r_  r(   r5   r3  r  r  rQ  r  )r2   rI  r  r  r3   r  r   rq   r  r  r  r   r  r  rj   s                  r4   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Jr6   c                 B     t          d|j                  | |          S r  r  r  s     r4   r  r  ~  r  r6   c                     dS r  r   r  s     r4   r  r    r  r6   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   rU   rT   rQ   r   rR   r  rU  r   rS   r  )r8   r  r_  r(   r5   r3  r  )r2   rI  r  r  r3   r  r   rq   r  r  r  r   r  r  rj   r   r  r  r  s                      r4   test_ptsvx_non_SPD_singularr  z  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axxxxxxr6   zd,e,b,xc                 |    t          d|j                  } || ||          \  }}}}}	}
}t          ||           d S )Nr  r   r  )rq   r  r   r   r  r  r  x_ptsvxr  r  r  rj   s               r4   test_ptsvx_NAGr    sN    . WAG444E/4uQ1~~,BGUD$a)))))r6   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.  )rw   rT   r  r   r   c                 :    g | ]}t          |          D ]}|S r   r6  rV  yr   r   s      r4   rW  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  .    :::qeAqkk::::::r6   c                 :    g | ]}t          |          D ]}|S r   r  r  s      r4   rW  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  r  r6   c                 6    g | ]}t          |          D ]}|S r   r  rV  r  r   s      r4   rW  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s+    <<<q588<<a<<<<r6   rQ   c                 <    g | ]}t          |          D ]}|d z
  S r  r  r  s      r4   rW  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s/    >>>U1XX>>1>>>>r6   )ppsvpptrfpptrspptrippconr  r  r  r   rP  )r  r  r  )r8   r  r_  r   r   r5   r  rz   r   r6  r(   r   r   r   r   r   r  r   r   r   r  )r2   r  r3   r0  r   rb   r   r^  apr  r  r  r  r   ulrj   aululiaulir   bxxvr  r  r   s                           @r4   !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!;<<<<<r6   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.  rw   r  )geestrexcr   c                     d S r#  r   r   s    r4   r  z!test_gees_trexc.<locals>.<lambda>      D r6   Fr  r   r   rI  rf  rP  rW   rQ   r  r   r8   r  r_  r   r   r5   r(   r   r/   r   r   r  rz   )r2   r3   r0  r   rb   r
  r  r  r  rN  d2s              r4   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3r6   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(   r2   r   r   )r  ifstilstexpectr0  r  r  s          r4   test_trexc_NAGr    so    < DWAG444EU1at1---FQq	AFAD))))))r6   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.  rw   r  )ggestgexcr   c                     d S r#  r   r  s    r4   r  z!test_gges_tgexc.<locals>.<lambda>L  r  r6   Fr*  overwrite_br   r   rQ   r  rI  r   rf  rP  rW   rR   rS   r  r  )r2   r3   r0  r   rb   r   r!  r"  r  r   r  r  rN  d1r  s                  r4   test_gges_tgexcr'  A  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======r6   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.  rw   r  )r
  trsentrsen_lworkr   c                     d S r#  r   r  s    r4   r  z!test_gees_trsen.<locals>.<lambda>|  r  r6   Fr  r   r   rI  rf  rP  rQ   rV   r   r   liworkr   r8   r  r_  r   r   r5   r(   r   r/   r   r   r  rz   r   r#   )r2   r3   r0  r   rb   r
  r)  r*  r  r  rN  r  selectr   s                 r4   test_gees_trsenr0  q  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3r6   z*t, q, expect, select, expect_s, expect_sep)g/$?gQIg~jtx?gJ4?)r  58EGrgGr?gyX5;?)r  g?߾r1  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)\(?)rQ   r   r   rQ   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   rQ   r,  r   r   rT   rU   rV   r  N)r(   r2   r#   r/   r   r   r  rz   )r  r  r/  r  expect_s
expect_sepr0  atol2r)  r*  r   r  r   seps                 r4   test_trsen_NAGr7    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4r6   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.  rw   r  )r!  tgsentgsen_lworkr   c                     d S r#  r   r  s    r4   r  z!test_gges_tgsen.<locals>.<lambda>  r  r6   Fr$  r   r   rQ   r  rI  r   rf  rP  rV   r   ir  r  r.  )r2   r3   r0  r   rb   r   r!  r9  r:  r  r   r  r  rN  r&  r  r/  r   s                     r4   test_gges_tgsenr<    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======r6   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   r0  r0  r  zDIF must be nearly 0zSolution for R is incorrect)r0  r0  zSolution for L is incorrect)r(   r   r   r8   r   r   )rb   r   r   rq   r  re   ranslansr2   r0  rB  routloutr]   difrj   s                   r4   test_tgsyl_NAGrI  #  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; ; ; ; ; ;r6   r   )rU  rz   ijob)r   rQ   rR   rS   rT   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  irw   r   )outputr  rR   rB  r   )r   rJ  r   zINFO is non-zeror  zSCALE must be non-negativer.  zDIF must be 0 for ijob =0rC  zDIF must be non-negativerU  rz   r  zlhs1 and rhs1 do not match)r0  r   r0  zlhs2 and rhs2 do not match)r8   r  r  r  r!   uniformr0   r(   r   r   r   r  )r2   r   rJ  r0  r3   r   r   rb   rq   r@   r   r  r   re   rB  rF  rG  r]   rH  rj   lhs1rhs1lhs2rhs2s                           r4   
test_tgsylrR  W  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 <	> 	> 	> 	> 	> 	> yr6   mtyper  c                 j   | 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.   *M/t|0 )r   rU   r  r.   r  r  r  trsr   r  r  r   )rb   r  r   r  r.  r  )r   rB   rC   r8   r  r  r/   rM  r0   rz   r  r(   r   r   r   )rS  r2   r  r3   r   r   r  r   rJ   r  r  rV  r   r  r  rj   r   r   s                     r4   test_sy_hetrsrW    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666OCt19999cCdau555GAt19999
(5//
CAaCQs++++++r6   c                    |dk    r| t           v rt          j        d           t          j                            d          }d}|                    ||f          |                    ||f          dz  z   }t          j        | t          j                  r|j        }|	                    |           }|dk    r
||j
        z   n||                                j
        z   }| d| df}t          || 	          \  }} |||
          \  }	}
}|dk    sJ  ||	|
|          \  }}|dk    sJ t          j        |           j        }t          j                            |          }|r>t#          t          j        |          t          j        |          d|z  |z             d S t#          t          j        |          t          j        |          d|z  |z             d S )Nr  zhetri not for real dtypes.rU  r   r.   r  r  rM  r   r  r   )rb   r  r  r.  r  )r   rB   rC   r8   r  r  r  r  r   r0   rz   r  r(   r   r   r  r   r   r   r   )r2   r  rS  r3   r   r  rJ   r  rM  r  r  rj   A_invr   r   s                  r4   test_sy_he_trirZ    s    }}+--0111
)

 0
1
1C
A

Aq6SZZA//22A	}UBK(( F	AD==ACa!&&((*nAMMMe===(EU333HCc!5)))OCt19999#$e444KE419999
(5//
C
)--

C F3q59EEEEEE3q59EEEEEEr6   r   z
uplo, m, n))rX  rU   rw   )rX  rw   rw   )rK  rw   rU   )rK  rw   rw   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   )rN  r3  rX  rQ   >r   )
r8   r  r  r0   r(   r   r   r  rc  r   )r   rN  r   r   r3  r2   r3   r  r\  r   rC  rB  r   s                r4   
test_lantrr^    s     )

 1
2
2C

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


rwqzzAs{{Ic!Qii  !Q$
%a..CC4((((((r6   c           	         t           j                            d          }d\  }}}|                    ||f          |                    ||f          dz  z   }|                    t          j        d|                    dd          |                    }||z  }t          j        | t           j                  r|j        }|	                    |           }d|t          j
        ||dz             <   d|t          j        || dz
            <   t          |||          }d|z  |z   dz   }	t          j        |	|f|           }
||
|d d d f<   t           j                            ||d	k    rt           j        nd
          }t#          d|
f          \  }} ||
||          \  }}} |||||||          d         }t#          d|f          \  }} ||          d         } ||||          d         }t%          ||d           d S )N   2 rw   rR   rR   r.   r   rw   rQ   rR   r   r{  r  )gbcongbtrf)r   rg  rf  rM  r  r  r  r  r   )r8   r  r  r  r  r  r  r  r   r0   r   r   r"   r   r  r   r  r(   r   )r2   r   r3   r   rf  rg  r  r  tmpLDABrM  r  rb  rc  lu_bandr  r@   rC  r  r  r  r   s                         r4   
test_gbconrg    s    )


,
,C IAr2

Aq6SZZA//22A\\"+aa)<)<a@@AAFKA	}UBK(( F	A$%Aboaa  !%&Aboa"q!!" RQ

CR4"9q=D	4)5	)	)	)BBrssAAAvJINN1DCKK"&&QN??E#$6>>LE5uRR((GT1
%TbRG$   C $$6==LE5	q!B
%E
%
%
%a
(C C1%%%%%%r6   c                 :   t           j                            d          }d\  }}}|                    ||f          |                    ||f          dz  z   }t          j        | t           j                  r|j        }|                    |           }d|t          j        ||dz             <   d|t          j        || dz
            <   t          |||          }t          d|f          \  }}	 |	||          }
 |||||          }t          ||
d           d S )	Nr`  ra  r.   r   rQ   )langbr   r]  r   )r8   r  r  r  r  r   r0   r   r   r"   r(   r   )r2   r   r3   r   rf  rg  r  rM  ri  r   r   rC  s               r4   
test_langbrj    s    )


,
,C IAr2

Aq6SZZA//22A	}UBK(( F	A$%Aboaa  !%&Aboa"q!!"	BA		B#$6==LE5
%a..C
%b"b
!
!CC4((((((r6   	compute_vc                    t           j                            d          }d}|                    ||           }|                    |dz
  |           }t          j        |d          t          j        |          z   t          j        |d          z   }t           j                            |          }t          d          } ||||          \  }	}
}|dk    sJ t          t          j        |	          t          j        |                     |rMt          j	        |           j
        }t          |
t          j        |	          z  |
j        z  ||d	z  
           d S d S )Nl   J*Os{Urw   r   rQ   r   stevd)rk  r   r  r  )r8   r  r  r3  r  eigvalshr(   r   rS  r   r   rz   )r2   rk  r3   r   rq   r  r  r   rm  rX  r'  rj   r   s                r4   
test_stevdro    s:    )

 2
3
3C
A

1E
""A

1q5
&&A
2#bgamm3A
)

Q

CW%%Eq!y111JAq$19999BGAJJ--- @huoo!BGAJJ,ac3h??????@ @r6   r,  )	functoolsr   r  numpy.testingr   r   r   r   r   r	   rB   r
   r  numpyr8   r   r   r   r   r   r   r   r   numpy.randomr   r   r   scipy.linalgr   r:   r   r   r   r   r   r   r   r   r   r    r!   scipy.linalg._basicr"   scipy.linalg.lapackr#   scipy.statsr$   r%   scipy.sparsesparser`  scipy.__config__r&   ImportErrorr'   r9   r(   scipy.linalg.blasr)   r  r9  r   r  
complex128r/   r   blas_providerblas_versionr5   rM   rO   r   r   ry  rz  r  r	  r  r$  rF  r  r  r  r  r  r  r  r  r  r  r  r,  r5  rE  rX  ra  rg  rn  rs  r{  r  r  r  r  r  r  skipifr  r  r6  r  r  r  r   r  r  r'  r*  r-  r  r5  r7  r9  rG  rO  rW  r\  r^  r`  rd  ru  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r0  r7  r<  rI  rR  rW  rZ  rF   r^  rg  rj  ro  r   r6   r4   <module>r     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(; ; ; ; ; ; ; ;D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/,. 4,//&))&))F F *) *) 0/F0 m!4!455 (E (E (E F F#s,,&))) ) *) -,F F 65
)  &))11!& !& 21 *)!&H m!4!455&))) ) *) 65)& +..f--@ @ .- /.@ @ @s$   >B BBB B$#B$