
    Ug                    &   d dl mZ d dlmZmZmZmZmZmZ d dl	Z	d dl	m
Z d dlZd dlmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d d	l*m+Z+m,Z, d dl-m.Z/ 	 d d
l0m1Z1 n# e2$ r dZ1Y nw xY w	 d dlm3Z4 n# e2$ r dZ4Y nw xY wd dl(m5Z5 d dl6m7Z7 ej8        ej9        gZ:ej;        ej<        gZ=e:e=z   Z>dxZ?Z@e1(e1d         d         d         Z?e1d         d         d         Z@d ZAd ZB G d d          ZC G d d          ZD G d d          ZEe	jF        G                    de>          e	jF        G                    dg d          d                         ZH G d d          ZI G d  d!          ZJ G d" d#          ZK G d$ d%          ZLd& ZMd' ZNd( ZOd) ZP G d* d+          ZQ G d, d-          ZRd. ZSd/ ZTd0 ZUd1 ZVd2 ZWd3 ZXd4 ZYd5 ZZd6 Z[d7 Z\d8 Z]d9 Z^d: Z_d; Z` G d< d=          Zad> Zbd? Zcd@ ZddA Zee	jF        f                    dBdCD          dE             ZgdF Zhe	jF        G                    dGdHdIg          e	jF        G                    de:          e	jF        G                    dJ eidK                    e	jF        G                    dL eidM                    e	jF        G                    dN eidM                    e	jF        G                    dOd dPg          e	jF        G                    dQd dPg          dQdR                                                                                    Zje	jF        G                    de:          dS             Zke	jF        G                    dTdJdUidLdUidNdUidOdUidVdUidQdUif          dW             Zle	jF        G                    dX ejm        g dYg dZg d[g d\g d]g d^g           ejm        g d_           ejm        g d`g dag dbg dcg ddg deg           ejm        g dfg dgg dhg dig          fg          dj             Zne	jF        G                    de>          dk             Zoe	jF        G                    dl ejm        g dm           ejm        g dn           ejm        g do           ejm        g dp           ejm        g dq           ejm        g dr           ejm        g ds           ejm        dtdugdvdwgdxdygdzd{gdtd|gg           ejm        d}d~gdd}gddgd}dgddPgg          f	 ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        g ds           ejm        ddgddgddgddgddgg           ejm        ddgddgddgddgddgg          f	g          d             Zpe	jF        G                    de>          e	jF        G                    dg d          d                         Zqe	jF        G                    d ere:e:z   e>                    d             Zse	jF        G                    d ere:e:z   e>                    d             Zte	jF        G                    d ere:e:z   e>                    d             Zue	jF        G                    d ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        dKdgdUdMgddUgddgddgg           ejm        ddgddgdPdgddKgddgg          f ejm        g d           ejm        g d           ejm        g d           ejm        g d           ejm        ddgddgddgddgg           ejm        ddgddgddgddgg          fg          d             Zvd Zwe	jF        G                    d ere>e:e:z                       e	jF        G                    d eid                    dÄ                         Zxe	jF        G                    d ere>e:e:z                       e	jF        G                    d eid                    dĄ                         Zye	jF        G                    d ere>e:e:z                       e	jF        G                    d eid                    dń                         Zze	jF        G                    d ere>e:e:z                       e	jF        G                    d eid                    dƄ                         Z{e	jF        G                    dd ejm        g dȢ           ejm        g dɢ           ejm        g dʢ           ejm        g dˢg d̢g d͢g d΢g          fg          dτ             Z|e	jF        G                    de>          e	jF        G                    dg dѢ          d҄                         Z}dӄ Z~e	jF        G                    dg dբ          e	jF        G                    dddg          dل                         Ze	jF        G                    dddg          e	jF        G                    dddg          d܄                         Ze	jF        G                    de>          e	jF        G                    dg dߢ          d                         Ze	jF        G                    de>          d             Ze	jF        G                    de>          e	jF        G                    dddBg          e	jF        G                    dddg          d                                     Ze	jF        G                    de>          e	jF        G                    dd dPg          e	jF        G                    dddg          d                                     Ze	jF        G                    de>dz            e	jF        G                    dddBg          e	jF        G                    dddg          d                                     Ze	jF        G                    d ejm        g dm           ejm        g dn           ejm        g do           ejm        dtdugdvdwgdxdygdzd{gdtd|gg           ejm        d}d~gdd}gddgd}dgddPgg          f ejm        g d           ejm        g d           ejm        g d           ejm        ddgddgddgddgddgg           ejm        ddgddgddgddgddgg          fg          d             Ze	jF        G                    d ere>e:e:z                       e	jF        G                    ddd fdd fg          d                         Ze	jF        G                    d ere>e:e:z                       e	jF        G                    ddd fdd fg          d                         Ze	jF        G                    d ere>e:e:z                       e	jF        G                    ddd fdd fg          d                         Ze	jF        G                    d ejm        g d           ejm        g d           ejm        dKdgdUdMgddUgddgddgg           ejm        ddgddgdPdgddKgddgg          f ejm        g d           ejm        g d           ejm        ddgddgddgddgg           ejm        ddgddgddgddgg          fg          d             Ze	jF        G                    dddBg          e	jF        G                    de>          d                         Ze	jF        G                    de>          d             Ze	jF        G                    d ejm        g dg dg dg dg           ejm        g d g dg dg dg          ddPf ejm        g dg dg dg dg           ejm        g dg dg d	g d
g          dPdMfg          d             Ze	jF        G                    de>          d             Ze	jF        G                    de>          d             Ze	jF        G                    d ejm        g dg dg dg dg           ejm        g dg dg dg dg           ejm        g dg dg dg dg           ejm        g d          ddf ejm        g dg dg d g d!g           ejm        g d"g d#g d$g d%g           ejm        g d&g d'g d(g d)g           ejm        g d          d*d+fg          d,             Ze	jF        G                    de>          d-             Ze	jF        G                    d. ejm        g d/g d0g d1g d2g           ejm        g d3g d0g d1g d4g           ejm        g d5g d6g d7g d8g           ejm        g d9g d:g d;g d<g           ejm        g d=g d>g d;g d?g           ejm        g d@g dAg dBg dCg           ejm        g d3g dDg dEg dFg           ejm        g dGg dHg dIg dJg          fg          e	jF        G                    de:          dK                         Ze	jF        G                    de:          e	jF        G                    dLdM          e	jF        G                    dNg dO          dP                                     ZdS (R      )reduce)assert_equalassert_array_almost_equalassert_assert_allcloseassert_almost_equalassert_array_equalN)raises)eyeoneszeros
zeros_liketriutriltril_indicestriu_indices)randrandintseed)_flapacklapackinvsvdcholeskysolveldlnorm
block_diagqreighqz)_compute_lwork)ortho_groupunitary_group)CONFIG)_clapack)get_lapack_funcs)get_blas_funcszBuild Dependenciesblasnameversionc                     |t           v r=t          j        j        |  t          j        j        |  dz  z                       |          S t          j        j        |                      |          S )N              ?)COMPLEX_DTYPESnprandomr   astype)shapedtypes     ]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr5   0   s\    	&).%(-./5ve}}	=9>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>   r/   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_documentedrL   8   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)         )         )      	   )rP   r   r   ga2U0*3?)rS   r   r   gMb`?)rV   rP   r   r   )r   rP   r   r   sdzcgebalr   rP   )permutescale)	getattrr9   r   reprr   r   lenr/   r   )
selfaa1pfbalohipivscaleinfos
             r4   
test_gebalzTestFlapackSimple.test_gebalQ   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]   r9   r   r^   )r`   ra   rc   rd   httauri   s          r4   
test_gehrdzTestFlapackSimple.test_gehrdf   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 )NrP   rQ   r   rS   rT   rU   rW   rX   
         TfdFD)trsylr-   C)tranatranbdecimal)isgn)	r/   arrayr1   r'   isupperr   dot	conjugatery   )r`   ra   bctransr3   rb   b1c1r{   xr\   ri   s                r4   
test_trsylzTestFlapackSimple.test_trsylq   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 )Nrl   rm   ro   rz   Mm1OoIiFfEer   r   r-   )langeFfEeFfrR   rV   Mm1Oor   axisIirP   )r/   r   r1   r   r'   sqrtsumsquareabsr   maxr   )	r`   ra   r3   norm_strrb   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__rj   rt   r   r    r6   r4   rN   rN   O   sP        * * **	* 	* 	*= = =8- - - - -r6   rN   c                       e Zd Zd Zd ZdS )
TestLapackc                 4    t          t          d          rd S d S Nempty_module)hasattrr9   r`   s    r4   test_flapackzTestLapack.test_flapack   #    7N++ 	D	 	r6   c                 4    t          t          d          rd S d S r   )r   r8   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  rv      rP   )gels
gels_lworkr3   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrQ   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r   	enumerateDTYPESr   r1   r'   r"   r   REAL_DTYPESr/   r   r2   r_   r   finfoepsr	   r.   )r`   indr3   mnnrhsrb   r   glsglslwr   r?   ri   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_lworkrQ   rP   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r/   r   r'   r2   r_   intrealr   r   r   r.   )r`   r3   rb   r   r   r   r   r   r   workiworkri   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_lworkrQ   rP   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r`   r3   rb   r   r   r   r   r   r   r   ri   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   rQ   rP   rv   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r/   r   r'   r2   r_   r   r   r   r   r   int32r   r.   )r`   r3   rb   r   r   gelsy_lworkr   r   r   r   ri   r   jptvr   r   jr   s                    r4   
test_gelsyz"TestLeastSquaresSolvers.test_gelsyw  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   r3   r2   )rR   rS   )rT   rQ      r  c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrf_lworkr   r   r   r   r'   r   )r3   r2   r  r   r   r   ri   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,  rQ   r   gerqfrQ   r   orgrqrP   ungrq)r   r/   r   r'   assert_raises	Exceptionr   r.   )
r`   r3   ra   r
  rqrs   r   ri   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*   )rR   rR   )size)potrfpotri)cleanr   )r/   r0   r   normalr   ry   r'   r   r   r   r   )
r`   lowerr  r   ra   dpotrfdpotrir   ri   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|
z             Ht          j        |	          d d d         }	t          t          j        t          j        |	                     df           t#          ||	dt          j        t           j                  j        z  dt          j        t           j                  j        z             d S )N)r         @r   r   )g(\@g@g333333皙r   r   rP   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rR   zcLAPACK root finding dlasd4 failed to find                                     the singular value %izThere are NaN rootsd   atolr   )r/   r   hstackvstackdiagr   r_   newaxisr   concatenater   r'   rangerH   r   anyisnanr   r   float64r   )r`   sigmasm_vecMSMit_lensgmmvcr*  rootsiress               r4   test_sing_val_updatezTestDlasd4.test_sing_val_update  s9   ///**00011Iry"'&2,"7"7"$(As5zzA~+>"?"?"A B BQQQ
]+- . . %Eu#% % % VnfTTrTlVAYU9K-K,LMNNneDDbDk4011 6)44q&!! 	@ 	@A%3$$CLLQ   SVq[ $;=>$? @ @ @ @"%RVBHUOO,,,.CDEEEEBHRZ,@,@,D(D "*!5!5!99	; 	; 	; 	; 	; 	;r6   N)r   r   r   rA  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 )	TestTbtrsr3   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=
ף0rE  g(\+gףp=
0g333333*@g(\gHzG,gQ#rS   rP   r   rR   rQ   r  )y
ףp=
Q@y{Gz@GzyQ?HzGy)\(??)yQQ@yq=
ףpGz@yףp=
?{Gzr   )yQ?q=
ףp@y)\(zGr   r   yQ!
ףp=
yףp=
8Gzyp=
#/)\h7y\(LHzG @yQHz6@yףp=
3@(\=y{Gz-333333yQ+3@GzT5@y               @y      ?      @y      ?      y             yt&m=#yi6@Ug$B@y[a^C?b->y-@ji& *!z	Datatype z not understood.tbtrsLabr   uplor   h㈵>r   r-  N)r   r/   r   r.   
ValueErrorr'   r   r   )r`   r3   rJ  r   x_outrG  r   ri   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 ))Nry   r|   r|   )r   ).0r3   r   s      r4   
<listcomp>zTestTbtrs.<listcomp>2  sP     N N N"'N N6;&+sllu7K7K  %en7K7K7K7Kr6   rK  UrH  r0  rR  c           	         t          d           d\  }}t          d          }|dk    }||z  }	||	z
  }
t          |	|
 dz
  d          }fd|D             }fd	|D             }|dk    rt          j                  ||	<   t          j        ||d
          }t          j        |dz   f          }t          |          D ]@\  }}|	                    |          ||t          |d          t          |z             f<   At          |f          } ||||||          \  }}t          |d           |dk    rt          ||z  |d           d S |dk    rt          |j        |z  |d           d S |dk    r.t          |j                                        |z  |d           d S t#          d          )Ni  )rS   rR   rQ   rG  r   rU  rP   r   c                 4    g | ]}t          |          z
  S r   )r   )rS  r   r   s     r4   rT  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>F  s#    888aq3q66z888r6   c                 2    g | ]}t          |f          S r   )r5   )rS  widthr3   s     r4   rT  z2TestTbtrs.test_random_matrices.<locals>.<listcomp>G  s5     + + + -eXu== + + +r6   dia)formatr   )rJ  r   rK  r   r0  rR  g-C6
?r   ry   r|   zInvalid trans argument)r   r'   r3  r/   r   spsdiagsr   r   diagonalr   minr5   r   r   ry   r   rN  )r`   r3   r   rK  r0  r   kdrG  is_upperkuklband_offsetsband_widthsbandsra   rJ  rowkr   r   ri   r   s    `                   @r4   test_random_matriceszTestTbtrs.test_random_matrices1  s"    	T


 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99%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)rU  rR  Invalid)rU  rj  rR  )rj  rR  rR  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 exceptionsrG  r   rS   rQ   N)r'   r/   r6  r   r  r  )r`   rK  r   r0  rG  rJ  r   s          r4   &test_invalid_argument_raises_exceptionz0TestTbtrs.test_invalid_argument_raises_exceptiond  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   rS   rG  r   )r   rR   rU  rI  N)r/   r   floatr'   r   )r`   rJ  r   rG  r?   ri   s         r4   test_zero_element_in_diagonalz'TestTbtrs.test_zero_element_in_diagonalq  sw     WV5)))GAU### 6665	%2---4T1r6   zldab,n,ldb,nrhs)rT   rT   r   rT   )rT   rT   rR   rT   c                     t          j        ||ft                    }t          j        ||ft                    }t          dt                    }t	          t
          |||           dS )z2Test ?tbtrs fails correctly if shapes are invalid.r   rG  Nr/   r   rn  r'   r  r  )r`   ldabr   ldbr   rJ  r   rG  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   rA   markparametrizer   rP  ri  rl  ro  rt  r   r6   r4   rC  rC    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+7Z [.33333333356 6B B	6 6B    [.**1  / /	 / / /r6   rC  c                     dD ] } t          d|           }t          j        d|           }t          j        d|           }t          j        |          r|dz  } |||          \  }}}t	          |d           t	          |d           t          j        |          rUt	          |d	           t          t          |t                               t          t          |t                               t	          |d
           d S )Nrz   lartgr   rR   rS   r-   333333?r   y       皙?)	r'   r/   r   iscomplexobjr   r   
isinstancecomplexrn  )r3   rx  rd   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 )Nrz   ry  rz  rS   rR   rv   rP   fdrotr   y             r-   y              @)rT   rT   rT   rT   )r   r   r   r   r-  rQ   )r   )rT   rT   rR   rR   r   )offxoffy)rR   rR   rT   rT   )incxr  r   )rT   rR   rT   rR   )r  incyr   )r  r  r  r  r   )rR   rR   rT   rR   r  )r  r  r   )overwrite_xoverwrite_y)r/   fullr   	precisionr(   r'   r   r   )
r3   r   r   ur   r-  r  rd   ra   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   )rS   rS   r-   rz   larfglarfr   FDr   rP   rP   r   rQ   r   r   RsiderL  r  )r/   r0   r   ry   r   conjr'   copyr2   r   r   r   r   )a0a0jr3   r  r  ra   alphar   rs   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r3   ilp64iA%  T)r&  r%  i`DiD)r'   r/   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 )	TestSytrdr3   c                     t          j        d|          }t          d|f          }t          t          ||           d S )Nr   r   sytrdr/   r   r'   r  rN  )r`   r3   Ar  s       r4   test_sytrd_with_zero_dim_arrayz(TestSytrd.test_sytrd_with_zero_dim_array  sA     HV5))) 1$//j%+++++r6   r   rP   rR   c                    t          j        ||f|          }t          d|f          \  }}t          j        d||dz   z  dz  dz   |          |t          j        |          <    ||          \  }}t          |d            ||d|          \  }}	}
}}t          |d           t          ||dt          j        |          j        z  d	           t          |	t          j	        |                     t          |
d
           t          |d
            |||          \  }}	}
}}t          |d           t          j
        ||          }t          j        |j        d                   }|	|||f<   t          j        |j        d         dz
            }|
||dz   |f<   |
|||dz   f<   t          j        |||          }t          |dz
            D ]|}t          j        ||          }|d ||dz   f         |d |<   d||<   t          j        |||          ||         t          j        ||          z  z
  }t          j        ||          }}t          j        |d          }|j        |         ||<   t          j        |j        t          j        ||                    }t          ||dt          j        |          j        z  d	           d S )Nr   )r  sytrd_lworkrP   rQ   r   r  r   rT   r   r,          r   r   )r/   r   r'   arangetriu_indices_fromr   r   r   r   r0  r   r2   r   r3  outerr   r   ry   )r`   r3   r   r  r  r  r   ri   datarp   ers   ry   rh  k2Qr?  r   Hi_lowerQTAQs                        r4   
test_sytrdzTestSytrd.test_sytrd  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   rA   ru  rv  r   r  r  r   r6   r4   r  r    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  )r`   r  r  r  s       r4   test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_arrayY  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_lworkrP   rQ   r-   )r   rP   r  r   r  rT   r   r,  r  r   r   rv   )r/   r   r'   r  r  fill_diagonalr   r0  r   r"   r   r   r   r   r2   r   r   r3  r  r  r   r   ry   )r`   r   
real_dtyper  r  r  r  r   r?   ri   r   r  rp   r  rs   ry   rh  r  r  r?  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   rA   ru  rv  r.   r  zipr   r  r   r6   r4   r  r  X  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   rU   rS   rQ   )r   r   rc   )g=
ףp=g{Gzg(\ؿ      ?)zGgHzG?gףp=
ӿQ)ffffff@gQ?g?gffffffֿ)r  g{Gz?Qg{Gz?)333333?g333333?r  g
ףp=
)g{Gz{Gz?gzG      ?)g      r  gGz?gHzGgzGg=
ףp=?r  )yQ?QyQQ?yQ{Gz @y=
ףp=?)y\(\￮Gz?y333333RQ?yQzG?yQQ?)yףp=
?q=
ףpݿy)\(?{Gz?y)\(?(\ſy(\333333?)yGz?RQ?yRQ?HzGy\(\
ףp=
׿y)\(?ɿ)y(\?RQ?y?{Gz?y(\ſq=
ףpݿyQ?q=
ףp?)yHzG?Qѿy?QyQ뱿Gz?yp=
ף?p=
ף?yRQ
ףp=
?yffffff?GzyzG GzyQ?ffffff
@yp=
ף)\(@y(\ @Q?)r   r        r  )r  r   r  r  r   )^"L?\}?r  r  )y!f?$_Kdy^gŵ翸F@y!f?}dy61ŵe_@r   )r   r   r'   r"   r/   r   r   r   )r   r3   func
func_lworkr   ra   r   rp   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   rv   rS   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr-   rQ   rP   )r   r  )ra   ipivanormr  rc   )r   r   r   r.   r'   r   r1   r  ry   r/   r   r   r"   r   r   linalgcond)r   r3   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   rv   )r  sygstsyevdsygvdr   rQ   r   giUMu?r   )r   r   r   r'   r   r1   ry   r/   r   r   r   )r   r3   r   r  r  r  r  r  Beig_gvdr?   ri   r   ra   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   rv   )r  hegstheevdhegvdr   r-   rQ   r   -C6?r   )r   r   r.   r'   r   r1   r  ry   r/   r   r   r   )r   r3   r   r  r  r  r  r  r  r  r?   ri   r   ra   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          d           d\  } }t          t                    D ]\  }}t          d|          \  }}t	          || |          }|dk     r1t          t          | |                              |                    }nDt          t          | |          t          | |          dz  z                       |                    }t          t          ||j
                    |||          \  }}	t          |	dk               t          j        |d	d	d	| f         t          j        | || z
  f|          f          }
t          j        t          j        | |          |d	d	| d	f         f          t          j        ||          fd
t!          |           D             }t#          t          j        |          }t'          |
                    |          |z
  t)          ||          dt          j         |d          j                  z  d            d	S )z
    This test performs an RZ decomposition in which an m x n upper trapezoidal
    array M (m <= n) is factorized as M = [R 0] * Z where R is upper triangular
    and Z is unitary.
    r   rv      tzrzftzrzf_lworkr   rQ   r-   r   r   Nc           
          g | ]P}|         |gd d f         j                             |gd d f                                                   z  z
  QS Nry   r   r  rS  r   IdVrs   s     r4   rT  ztest_tzrzf.<locals>.<listcomp>M  s[    MMMqr#a&A36A36)9)9::::MMMr6   rv   r   r  r,  )r   r   r   r'   r"   r   r   r1   r  r  ry   r   r/   r.  r   r   r3  r   r   r   r   spacingr   )r   r   r   r3   r  tzrzf_lwr   r  rzri   r  r   Zr  r	  rs   s                @@@r4   
test_tzrzfr  1  s/    	JJJDAq'' F F
U*+C168 8 8xxA..77T!QZZ&&u--..AAd1ajj41::b=088??@@A 	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            	      F   t          d           t          t                    D ]{\  } }d}| dk    rWt          t	          ||          t	          ||          dz  z   t          |          z                                 |          }d}nBt          t	          ||          t          |          z                                 |          }d}t          d|          \  }}} ||          \  }}	t	          |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           t	          d|                              |          } |d
|||dd          }t          |t          | |j                  
                                j        | d	z  dk    rdnd           }dS )z
    Test for solving a linear system with the coefficient matrix is a
    triangular array stored in Full Packed (RFP) format.
    r   r   rP   r-   r|   ry   )trttftfttrtfsmr   rQ   r   r   rS   rU   r   r   r   rU  )r   r0  rR   r  )r   r0  r  N)r   r   r   r   r   r   r1   r'   r   r   r  ry   r/   r  )r   r3   r   r  r   r  r  r  Afpr?   r  solnB2s                r4   	test_tfsmr  S  s   
 	JJJ''  D  D
U77T!QZZ$q!**R-/#a&&899@@GGAEET!QZZ#a&&())0077AE-.H49; ; ;ud qQAJJe$$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 !QZZu%%tBRu3SAAA!$qb"$(<(<(>(>(@/2Qw!||!!	D 	D 	D 	D 	D? D  Dr6   c            	         t          d           d\  } }}t          t                    D ]\  }}t          d|          \  }}t	          || |          }|dk     rht          t          | |                              |                    }t          ||                              |          }	t          d|          \  }
}nt          t          | |          t          | |          dz  z                       |                    }t          ||          t          ||          dz  z                       |          }	t          d|          \  }
}t	          |||          } |||	          \  }}t          j	        t          j
        | |          |d
d
| d
f         f          t          j
        ||          fdt          |           D             }t          t          j        |          }|dk     rdnd}dt          j         |d          j                  z  } |
||	|	          \  }}t!          |dk               t#          ||                    |	          z
  t%          |	          |d            |
||	||          \  }}t!          |dk               t#          ||                                j                            |	          z
  t%          |	          |d            |
||	d|          \  }}t!          |dk               t#          ||	                    |          z
  t%          |	          |d            |
||	d||          \  }}t!          |dk               t#          ||	                    |                                j                  z
  t%          |	          |d           d
S )a  
    This test performs a matrix multiplication with an arbitrary m x n matrix C
    and a unitary matrix Q without explicitly forming the array. The array data
    is encoded in the rectangular part of A which is obtained from ?TZRZF. Q
    size is inferred by m, n, side keywords.
    r   )rv   r   r   r  r   rQ   )ormrzormrz_lworkr-   )unmrzunmrz_lworkr   Nc           
          g | ]P}|         |gd d f         j                             |gd d f                                                   z  z
  QS r  r  r  s     r4   rT  z$test_ormrz_unmrz.<locals>.<listcomp>  s[    NNNqr#a&A36A36)9)9::::NNNr6   ry   r|   rv   r   r   r  r,  r   r  )r  r   )r  r   r   )r   r   r   r'   r"   r   r   r1   r/   r.  r   r3  r   r   r
  r   r   r   r   r  ry   )qmqncnr   r3   r  r  lwork_rzr  r|   orun_mrzorun_mrz_lw	lwork_mrzr  ri   r   r  r   tolcqr  r	  rs   s                       @@@r4   test_ormrz_unmrzr'  |  s    	JJJJBB'' .! .!
U*+C168 8 8x!(B3377T"b\\((//00AR##E**A$45M;@%B %B %B!Hkk d2rllT"b\\"_4<<UCCDDAb"RR/77>>A$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            	      8   t          d           t          t                    D ]\  } }d}| dk    r:t          ||          t          ||          dz  z                       |          }d}n%t          ||                              |          }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 Rectengular Full Packed (RFP) format
    and Standard Triangular Array (TR)
    r   r   rP   r-   r|   ry   )r  r  r   r   rH  rK  rU  )transrrK  rQ   Nr   F)order)r   r   r   r   r1   r'   r   r   r   r  ry   r   r   reshape)r   r3   r   A_fullr+  r  r  A_tf_Uri   A_tf_LA_tf_U_TA_tf_L_TA_tf_U_mA_tf_L_mA_tr_UA_tr_LA_tr_U_TA_tr_L_Ts                     r4   test_tfttr_trttfr:    sm   
 	JJJ'' 1: 1:
U771ajj41::b=088??FFF1ajj((//F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                  2   t          d           t          t                    D ]\  } }d}| dk    r8t          ||          t          ||          dz  z                       |          }n#t          ||                              |          }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 )r)  r   r   rP   r-   )trttptpttrr   r   rH  r*  rQ   N)r   r   r   r   r1   r'   r   r   r   r   ry   r   r   r   )r   r3   r   r/  r<  r=  A_tp_Uri   A_tp_LindsA_tp_U_mA_tp_L_mr6  r7  s                 r4   test_tpttr_trttprC    s   
 	JJJ''  8  8
U771ajj41::b=088??FF1ajj((//F'(:%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          d           t          t                    D ](\  } }d}| dk    rgt          ||          t          ||          dz  z                       |          }||                                j        z   |t          |          z  z   }n@t          ||                              |          }||j        z   |t          |          z  z   }t          d|          \  }}} ||          \  }} |||          \  }	}t          |dk                |||	          \  }
}t          |          }t          |
|           *dS )	zk
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array
    r   r   rP   r-   )pftrfr  r  r   r   N)r   r   r   r   r1   r  ry   r   r'   r   r   r   )r   r3   r   r  rE  r  r  r  ri   	Achol_rfpA_chol_rr?   Achols                r4   
test_pftrfrI    sS   
 	JJJ'' 3 3
U77ad1ajjm+33E::AAFFHHJ3q66)AAa##E**AAC!CFF("A./J5:< < <ue E!HH	T%3--	4	eAy))!!(E2222%3 3r6   c                     t          d           t          t                    D ]R\  } }d}| dk    rgt          ||          t          ||          dz  z                       |          }||                                j        z   |t          |          z  z   }n@t          ||                              |          }||j        z   |t          |          z  z   }t          d|          \  }}}} ||          \  }}	 |||          \  }
}	 |||
          \  }}	t          |	dk                |||          \  }}t          |          }t          |t          |          | dz  dk    rd	nd
           TdS )z
    Test Cholesky factorization of a positive definite Rectengular Full
    Packed (RFP) format array to find its inverse
    r   r   rP   r-   )pftrirE  r  r  r   r   rQ   rS   rU   r   N)r   r   r   r   r1   r  ry   r   r'   r   r   r   r   )r   r3   r   r  rK  rE  r  r  r  ri   
A_chol_rfp	A_inv_rfpA_inv_rr?   Ainvs                  r4   
test_pftrirP  4  s   
 	JJJ'' D D
U77ad1ajjm+33E::AAFFHHJ3q66)AAa##E**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          d           t          t                    D ]\  } }d}| dk    rgt          ||          t          ||          dz  z                       |          }||                                j        z   |t          |          z  z   }n@t          ||                              |          }||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 Rectengular Full
    Packed (RFP) format array and solve a linear system
    r   r   rP   r-   rR   r   rQ   )pftrsrE  r  r  r   rS   rU   r   N)r   r   r   r   r1   r  ry   r   r   r'   r   r  r  r   r   )r   r3   r   r  r  Bf1Bf2rR  rE  r  r  r  ri   rL  r  s                  r4   
test_pftrsrU  T  s   
 	JJJ'' D D
U77ad1ajjm+33E::AAFFHHJ3q66)AAa##E**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            
      z   t          d           t          t                    D ]\  } }d}| dk    rgt          ||          t          ||          dz  z                       |          }||                                j        z   |t          |          z  z   }n@t          ||                              |          }||j        z   |t          |          z  z   }| dk     rdnd}t          dd	| d
f|          \  }}} ||          \  }}	t          j
                            |d                              |          }
 ||dd|
d|          } |||          \  }}	t          |t          |
                    |
                                j                   d|z  z             | dz  dk    rdnd           dS )zT
    Test for performing a symmetric rank-k operation for matrix in RFP format.
    r   r   rP   r-   rQ   r   hr  r  frkr   r   r   rS   rU   r   N)r   r   r   r   r1   r  ry   r   r'   r/   r0   r   r   r   )r   r3   r   r  prefixr  r  shfrkr  r?   r|   Afp_outA_outs                r4   test_sfrk_hfrkr]  y  s    	JJJ'' D D
U77ad1ajjm+33E::AAFFHHJ3q66)AAa##E**AAC!CFF("AQwwC.V.../Q5:< < <ue qQINN1a  ''..%1b!Q,,5G$$q!%quuQVVXXZ/@/@.@1Q3.F)G)G/2Qw!||!!	D 	D 	D 	D 	D#D Dr6   c            
      ,   t          d           t          t                    D ]\  } }d}| dk    rZt          dd||f          t          dd||f          dz  z                       |          }||                                j        z   }nCt          dd||f                              |          }||j        z   |t          |          z  z   }dt          j	         |d          j
                  z  }t          d	|
          \  }}}t          ||d          }t          |dd          \  }	}
}t          ||d          } ||d|          \  }}} |||d          \  }}}t          t          |d          t          |	|ddf         d          |d           t          |dd          \  }}
} ||d          \  }}} |||d          \  }}}t          t!          |d          t!          ||ddf         d          |d           dS )zt
    Test for going back and forth between the returned format of he/sytrf to
    L and D factors/permutations.
    r   rv   rP   i   r-   r+  r   )syconvr  r  r   r  F)r  	hermitianr  r   Nr  r,  r   )r   r   r   r   r1   r  ry   r   r/   r
  r   r'   r"   r   r   r   r   )r   r3   r   r  r%  r`  trf	trf_lworklwrH  Dpermr  r  ri   ra   r  rU  s                     r4   test_syconvrg    sU   
 	JJJ'' L L
U77b1a&))b1a&))",-.4fUmm  AFFHHJAAR!Q((//66A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           
         t          d           t          t                    D ]\  }}d}|dk    r8t          ||          t          ||          dz  z                       |          }n#t          ||                              |          }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    r:t          ||          t          ||          dz  z                       |          }d}n%t          ||                              |          }d}dD ]}d|fD ]} |||	|||          \  }}
|
d	k    sJ ||k    r|j                                        }n|}|dk    r||z  }n||z  }t          |||d           ||fdk    r( |||	|          \  }}
|
d	k    sJ t          ||           t!          t"          |||	|d           t!          t"          |||	|d           d S )Nr   r   rP   r-   r+  r   )geqrtgemqrtr   r   r   r  r,  r|   ry   rH  r  rR  r  r   rH  rH  rR  r  r  r  )r   r   r   r   r1   r/   r
  r   r'   r   r   ry   r  r   r   r   r  r  )r`   r   r3   r   r  r%  rk  rl  ra   tri   r   r  r  r|   	transposer  r   r   qqC	c_defaults                         r4   test_geqrt_gemqrtzTestBlockedQR.test_geqrt_gemqrt  s    T


#F++ :	A :	AJCAQww!QZZ$q!**R-/77>>!QZZ''..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!QZZ$q!**R-/77>>		!QZZ''..	" 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          d           t          t                    D ]\  }}d}|dk    rot          ||          t          ||          dz  z                       |          }t          ||          t          ||          dz  z                       |          }nFt          ||                              |          }t          ||                              |          }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    rqt          ||          t          ||          dz  z                       |          }t          ||          t          ||          dz  z                       |          }d}nHt          ||                              |          }t          ||                              |          }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           d S )Nr   r   rP   r-   r+  r   )tpqrttpmqrtr   r   rQ   r   r  r,  r|   ry   rm  rR  rn  rH  r   ro  r  r  r  )r   r   r   r   r1   r/   r
  r   r'   r   r   r   r2  r   ry   r  r   r   r  r  ) r`   r   r3   r   r  r  r%  rw  rx  lra   r   rp  ri   B_pentb_pentr   r  r  r|   re  rq  r  r   r   rp   rr  cdCDqCDrt  	d_defaults                                    r4   test_tpqrt_tpmqrtzTestBlockedQR.test_tpqrt_tpmqrt  s:   T


#F++ O	K O	KJCAQww!QZZ$q!**R-/77>>!QZZ$q!**R-/77>>!QZZ''..!QZZ''..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ad1ajjm3;;EBBAad1ajjm3;;EBBA #IIa++E22Aa++E22A #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   r@   ru  r  r   r6   r4   ri  ri    sJ         
<A <A <A|QK QK QK QK QKr6   ri  c                  ,   t          d           t          t                    D ]n\  } }d}d}t          d|          }| dk    rmt	          |||z
                                |          dt	          |||z
                                |          z  z   }||                                j        z  }n0t	          |||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|           pd S )Nr   rv   rQ   pstrfr   rP   r-   r    r   rQ   rM  r  r   r   r   r'   r   r1   r  ry   r   r   r/   r   r  r   r6  r   r   )r   r3   r   r  r  r  r   pivr_cri   rU  single_atoldouble_atolr-  rH  s                  r4   
test_pstrfr  N     JJJ'' #P #P
U 666 77Q!##E**R$q!A#,,2E2Ee2L2L-LLAAFFHHJAAQ!##E**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                  ,   t          d           t          t                    D ]n\  } }d}d}t          d|          }| dk    rmt	          |||z
                                |          dt	          |||z
                                |          z  z   }||                                j        z  }n0t	          |||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|           pd S )Nr   rv   rQ   pstf2r   rP   r-   r  r  r  rM  r  r  )r   r3   r   r  r  r  r   r  r  ri   rU  r  r  r-  rH  s                  r4   
test_pstf2r  v  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ſFxrQ   )g   ЈBg   tBgffffff @g   ٓ )      @gg#fDgffffff)gHzG?gQg'Vgp=
ף)g(\r  gS7нrz  )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  rM  )r/   r   r   r   r1   r'   r   )desired_realdesired_cplxr   r3   r  r  r  r   rowcndcolcndamaxri   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  rF  rv   r   rQ   r   r-   c                      g | ]
}d |z  z  S )r   r   )rS  r   r  s     r4   rT  ztest_syequb.<locals>.<listcomp>  s!    :::eb!em:::r6   rT   syequb)r/   r   r   r   r   r3  rot90r0  r'   r   log2r1   r   )desired_log2sr   r3   r  rp   r  r   scondr  ri   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 )NrQ   rT   i  rX   rP   )rh  r-   r   r  r  r  rU                   i   rT   rT   y              0@)rT   r   r  )r  r   r   r   r   r  r   r   r   r  r  )r/   r0  r   r   zheequbr   r   r  r   r  cheequbr1   	complex64)r  r   r  r  ri   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} t           j                            |           }t           j                            |           t           j                            |           dz  z   }t	          t
                    D ]n\  }}|dk     rPt           j                            | |           }|                    |          }||z  }|                    |          }nst           j                            | |           t           j                            | |           dz  z   }|                    |          }||z  }|                    |          }t          d|          }t          d|          } ||d	          \  }	}
}} ||	||
|d
          \  }}|dk     r*t          |                    |          ||z  d           Ft          |                    |          ||z  d           pd S )Nr  rv   r-   rQ   getc2r   gesc2r   r'  )overwrite_rhsrS   r   )	r/   r0   r   r   r   r   r1   r'   r   )r   r  r  r   r3   r  r   r  r  lur  jpivri   r   r\   s                  r4   test_getc2_gesc2r    s   INN2
A9>>!$$L9>>!$$ry~~a'8'8';;L'' : :
U77	q!$$AAL AAA	q!$$ry~~a';';B'>>A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  )rU   rT   r  jobarU   joburS   jobvjobrrP   jobpc                 &   t          d           | \  }}	dt          j        |          j        z  }
t	          | |          }t          d|          }|dk     }|dk     }|dk    o||	k    }t          j        |          }|dk    o| o| }|dk    o|o| o|}|dk    o|o| o|}|rd}n	|s|rd}nd	}|dk    r$|dk    rt          t          ||||||||	  	         dS  ||||||||
          \  }}}}}}t          ||           |s|d	         |d         z  |d|	         z  }t          |t          |d          |
           |dk    r|ddd|	f         }|rC|rAt          |t          j        |          z  |                                j        z  ||
           |r>t          |                                j        |z  t          j        |	          |
           |r>t          |                                j        |z  t          j        |	          |
           t          |d	         t          j                            |                     t          |d         t          j        |                     t          |d         d	           dS dS )a  Test the lapack routine ?gejsv.

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

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

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

    jobt is, as of v3.9.0, still experimental and removed to cut down number of
    test cases. However keyword itself is tested externally.
    r  r+  gejsvr   rQ   rP   r  rF  r   )r  r  r  r  jobtr  NF)r&  r  )r   r/   r   r   r5   r'   r{  r  r  r   r   r   r0  r  ry   identityr  matrix_rankcount_nonzero)r  r3   r  r  r  r  r  r  r   r   r-  r  r  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvar  r   r   r   ri   sigmas                               r4   test_gejsv_generalr    s   B 	HHH DAq%$$D#D%00A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   rP   rP   rP   r  r+  rv   r  N)r'   r   r2   r/   r   r   sinr  r.  r1   asfortranarrayry   r  r   )r3   r  r  r  r   r   r   ri   r  Acr?   s              r4   test_gejsv_edge_argumentsr  y  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   kwargsrX   r  c                     t          j        dt                    }t          dt                    }t	          t
          ||fi |  dS )z-Test invalid job arguments raise an Exception)rQ   rQ   r   r  Nrq  )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'   r3   r   )r  
sva_expectu_expectv_expectr-  r  r  r  r   r   r   ri   s               r4   test_gejsv_NAGr    s|    0 DWAG444E#(588 CAtUDJ$////Had++++Had++++++r6   c           	         t          d           d}dt          j        |           j        z  }t	          |dz
  f|           }t	          |f|           }t	          |dz
  f|           }|                                |                                |                                g}t          j        |          t          j        |d          z   t          j        |d          z   }t          j                            |          }||z  }	t          d|           \  }
} |
|||          \  }}}}}}t          ||d                    t          ||d                    t          ||d	                    t          j        |d          t          j        |d          z   t          j        |d	          z   }t          j        ||           }t          |          D ]K\  }}||         dz
  }|d d ||gf         |d d ||gf<   |d d |fxx         |d d |dz   f         |z  z  cc<   Ld|d         dz
  }}|d d ||gf         |d d ||gf<   t          |||z  |
           |	                                } |||||||	          \  }}t          |	|           t          |||
           | t          v rd}|j        |z  }nd}|                                j        |z  } ||||||||          \  }}t          |||
           t#          t$                    5   |
|d d         ||           d d d            n# 1 swxY w Y   t#          t$                    5   |
||d d         |           d d d            n# 1 swxY w Y   t#          t$                    5   |
|||d d                    d d d            n# 1 swxY w Y   t#          t&                    5   |
|d         |d d         |d                    d d d            n# 1 swxY w Y   d|d<   d|d<    |
|||          \  }}}}}} t          j                            ||dz
           dk    d||dz
            d           d S )Nr  rv   r+  rP   r   r   gttrfgttrsr   rQ   r  ry   r|   r  z?gttrf: _d[info-1] is , not the illegal value :0.)r   r/   r   r   r5   r  r0  r0   r   r'   r	   r   r   r   r   ry   r  r  rN  r  testingr   )!r3   r   r-  durp   dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  ri   rU  rH  r?  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos!                                    r4   test_gttrf_gttrsr    s    	HHH
A%$$D 
%acV5	9	9	9B#QD666A	$acV5	9	9	9B		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               
y	!	! # #beQrrUBqE"""# # # # # # # # # # # # # # # BqEAaD*/%Ar*:*:'D#tT5%Js4!8}) -ISPQ] -I -I -I K K K K KsH   L88L<?L<M99M= M=N::N>N>"PPPz1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)g @r  ffffff?r   )r#  r        ffffff@)333333@@r         )r  r  r  r  )r  r  rV   gC>)r   r  rW   )rQ   rR   rS   rT   rT   g@gffffff@      g%@g@g	ry  gffffff&g3@r  rT   rV   rR   rF  r  )       @             @      ?            ?      ?      )?r  ffffff
@333333ӿ333333@ffffff
?)      ?             ?      ?       @      r  )r  r  r  r   )r  r  r  r  y ~:pffffff?)r  r  r  y333333@      y@@y333333@3333332@y333333yffffff-ffffff#@y      333333yfffff?@y333333"@y      𿚙?y      ffffff(@r  r  y      @      y      ?       @y      @      @r  y             r  r  y       @       c	                 :   t          d| d         | d         f          \  }	}
 |	|||           \  }}}}}}t          ||           t          ||           t          ||d           t          ||            |
||||||          \  }}t          ||           d S )Nr  r   r  r  )r'   r   )r  rp   r  du_expd_expdu2_expipiv_expr   r   r  r  r  r  r  r  r  ri   r  s                     r4   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr	  *  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   ))rR   rV   )rV   rR   r   c                 r    t          d|           }|\  }} |||          \  }}t          |d           d S )Ngeqrfp_lworkr   r  r   r  )r3   r2   r  r   r   r   ri   s          r4   test_geqrfp_lworkr  i  sM     $^EBBBLDAq,a(((KE4qr6   zddtype,dtypec                 J   t          d           dt          j        |          j        z  }d}t	          |f|           dz   }t	          |dz
  f|          }t          j        |          t          j        |d          z   t          j        t          j        |          d          z   }|                                |                                g}t          d|          } |||          \  }	}
}t          ||d	                    t          ||d                    t          |d	d
| d           t          j        |
d          t          j        t          j        |                    z   }t          j        |	          }t          |||z  |                                j        z  |           t	          |f|          }||z  }t          d|          } ||	|
                                |          \  }}t          |d	d| d           t          |||           d S )Nr  r+  rv   rS   rP   r   pttrfr   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r   r/   r   r   r5   r0  r  r  r'   r	   r   r   r   r   ry   )ddtyper3   r-  r   rp   r  r  r  r  r  _eri   rH  re  r   r   r  _xs                     r4   test_pttrf_pttrsr  r  s    	HHHrx""D
A
 	$QD&11A5A#QqSFE22A 	

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%00A	!A WE222EuRA&&HBq"F4"F"F"FGGGG Ar%%%%%%r6   c                     d}t          d|          }t          |f|           dz   }t          |dz
  f|          }t          t          ||d d         |           t          t          |||d d                    d S )Nrv   r  r   rQ   rP   r   )r'   r5   r  rN  )r  r3   r   r  rp   r  s         r4   *test_pttrf_pttrs_errors_incompatible_shaper    s     	AWE222E#QD&11A5A#QqSFE22A*eQssVQ///*eQ#2#/////r6   c                 h   d}t          d|          }t          |f|           dz   }t          |dz
  f|          }d|d<   d|d<    |||          \  }}}t          ||dz
           dd||dz
            d           t          |f|           } |||          \  }}}t          |dk    d	           d S )
Nrv   r  r   rQ   rP   r   z?pttrf: _d[info-1] is r  z2?pttrf should fail with non-spd matrix, but didn't)r'   r5   r   r   )	r  r3   r   r  rp   r  r  r  ri   s	            r4   'test_pttrf_pttrs_errors_singular_nonSPDr    s     	AWE222E#QD&11A5A#QqSFE22AAaDAaD5A;;LBDD1HqS"TAX,SSSU U U 	$QD&11A5A;;LBDDAIKLLLLLr6   z%d, e, d_expect, e_expect, b, x_expect)rS   rv      r   rT   )r  r  r   rW   )rS   rX   r      rP   )r  gK=Ury  r  rv   rQ      A      g      @r   r  )r  )   .      )y      0@      0@y      2@      "      ?      )r  rX   rP   rS   )r  r  r!  y      P@      0@y      0      @y     @W@      O@y     N@     Py     S@      Ty     Q@     Ry      ,@      ;y     A@      .@y             r  c                    d}t          d|d                   } || |          \  }}	}
t          |||           t          |	||           t          d|d                   } |||	                                |          \  }}
t          |||           |j        t          v r& |||	|d          \  }}
t          |||           d S d S )	Nr  r  r   r   r  r  rP   r  )r'   r   r  r3   r.   )rp   r  d_expecte_expectr   x_expectr-  r  r  r  ri   r  r  s                r4   test_pttrf_pttrs_NAGr&    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                 l   |dk    rt          ||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 )NrP   rS   rQ   r   )r5   r/   r0  r   r  ry   r    )r3   realtyper   	compute_zA_eigvrrp   r  trir  zs              r4   pteqr_get_d_e_A_zr.    sy    A~~+QFE::ac 1222'1,%[[^'h77!;'199gajj271a==(271b>>9Hrwwyy{" (h77'199 EGAJJA&B7GAJJB'"'!Q--7q!Q<r6   zdtype,realtyper)  c                    t          d           dt          j        |           j        z  }t	          d|           }d}t          | |||          \  }}}}	 ||||	|          \  }
}}}t          |dd| d	           t          t          j        t          |          d                   t          j        |
          |
           |rt          |t          j
        |          j        z  t          j        |          |
           t          |t          j        |
          z  t          j
        |          j        z  ||
           dS dS )a  
    Tests the ?pteqr lapack routine for all dtypes and compute_z parameters.
    It generates random SPD matrix diagonals d and e, and then confirms
    correct eigenvalues with scipy.linalg.eig. With applicable compute_z=2 it
    tests that z can reform A.
    r  r  pteqrr   rv   rp   r  r-  r)  r   zinfo = z, should be 0.r  N)r   r/   r   r   r'   r.  r   r   sortr    r  ry   r  r0  )r3   r(  r)  r-  r0  r   rp   r  r  r-  d_pteqre_pteqrz_pteqrri   s                 r4   
test_pteqrr6  	  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  r0  r   rv   rS   r-  r)  r   r   r'   r.  r3   r(  r)  r0  r   rp   r  r  r-  r3  r4  r5  ri   s                r4   test_pteqr_error_non_spdr;  -	  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  r0  r   rv   r   r8  )r   r'   r.  r  rN  )	r3   r(  r)  r0  r   rp   r  r  r-  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  r0  r   rv   r   r8  r9  r:  s                r4   test_pteqr_error_singularr?  K	  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  r0  r   rP   r   r1  r  N)r'   r3   r/   r0  r   r   )r)  rp   r  r#  z_expectr-  r0  r-  r  r  _zri   s               r4   test_pteqr_NAG_f08jgfrC  Z	  s      Dgag666E


RWQ]]"RWQ^^3AuqAi@@@BBBt,,,,BF2JJx 0 0t<<<<<<r6   matrix_size)r   )rV   rU   rU   rU   c                 V   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   orgqr)rs   r   r   r   rM  r   )r/   r0   r   r   r   r'   r5   r   r   r   r   r2   r  ry   r   allr0  r_   r   r4  )r3   rD  r   r-  rH  gqrr   r   r  qr_Ars   ri   r  qqrrr  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                        r4   test_geqrfprT  s	  s    INN2rx""Drx""Dx666F
GE
2
2
2CDAq 	$QF%888A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V5AAABFJJHh"(&"4"4Hgx BF278$$q()) #F271::>""$ $ $ $ $r6   c                      t          j        g           } t          d| j                  }t	          t
          ||            d S )NrH  r   )r/   r   r'   r3   r  r  )A_emptyrH  s     r4   #test_geqrfp_errors_with_empty_arrayrW  	  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   rP   r  $_lwork raised unexpected exception: r   r.   r'   r"   r  rA   failr]  rX  r   r3   sc_dlwdz_dlwr  s          r4   test_standard_eigh_lworksri  	  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)
Nra  r^  rb  r   r   rP   rH  r*  rc  rd  rf  s          r4   test_generalized_eigh_lworksrn  	  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rj  dtype_r   )rP   rv   r+  r  c                    t          d           t          d|          }||z
  }| t          v rdnd}|dz   }t          ||           }t	          ||||          }|dk    r|n|f}t          d |D                       sJ d S )Nr   r   orun	csd_lworkr   c                     g | ]}|d k    	S r)  r   )rS  r   s     r4   rT  z*test_orcsd_uncsd_lwork.<locals>.<listcomp>	  s    %%%!A%%%r6   )r   r   r   r'   r"   rJ  )ro  r   rc   rr  r]  dlwrd  lwvals           r4   test_orcsd_uncsd_lworkrw  	  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)rG  P      rq  rr  csdrs  r   r   lrworkr   r   r  g     @rM  )r   r#   rvsr$   r'   r"   dictr  r   r_  r/   r   r3  cosr  r   r   r   )ro  r   rc   rr  r]  Xdrvru  rv  lwvalscs11cs12cs21cs22thetau1u2v1tv2tri   rU  VHr  n11n12n21n22Soner?  Xcs                                  r4   test_orcsd_uncsdr  	  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factr,  rR  c                    t          d           dt          j        |           j        z  }t	          d|           \  }}d}t          |dz
  f|           }t          |f|           }t          |dz
  f|           }	t          j        |d          t          j        |          z   t          j        |	d          z   }
t          |df|           }|r| t          v rd	nd
nd}|r|
                                j	        n|
|z  }|
                                |
                                |	
                                |
                                g}|dk    r ||||	          ndgdz  \  }}}}}} ||||	||||||||          }|\
  }}}}}}}}}}t          |dk    d| d           t          ||d                    t          ||d                    t          |	|d                    t          ||d                    t          |||           t          t          |d          dud|            t          |j        d         |j        d         k    d|j        d          d|j        d                     t          |j        d         |j        d         k    d|j        d          d|j        d                     dS )aS  
    These tests uses ?gtsvx to solve a random Ax=b system for each dtype.
    It tests that the outputs define an LU matrix, that inputs are unmodified,
    transposal options, incompatible shapes, singular matrices, and
    singular factorizations. It parametrizes DTYPES and the 'fact' value along
    with the fact related inputs.
    r  r+  gtsvxr  r   rv   rP   r   rQ   ry   r|   rR  r,  NrU   r  r   dlfdfdufr  r  r   z?gtsvx info = z, should be zerorR   r  __len__Trcond should be scalar but is ferr.shape is z but should be berr.shape is )r   r/   r   r   r'   r5   r0  r   r  ry   r  r   r	   r   r   r2   ) r3   r  r  r-  r  r  r   r  rp   r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr  ferrberrri   s                                    r4   
test_gtsvxr  
  s    	HHH%$$D#$6eDDDLE5
A	$acV5	9	9	9B#QD666A	$acV5	9	9	9B
B"'!**$rwr1~~5A#QF%888A6@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                 Z   t          d           t          d|           \  }}d}t          |dz
  f|           }t          |f|           }t          |dz
  f|           }t          j        |d          t          j        |          z   t          j        |d          z   }	t          |df|           }
| t
          v rdnd	}|r|	                                j        n|	|
z  }|d
k    r ||||          nd gdz  \  }}}}}} ||||||||||||          }|\
  }}}}}}}}}}|dk    r7d|d<   d|d<    |||||          }|\
  }}}}}}}}}}|dk    s
J d            d S |d
k    rAd|d<   d|d<   d|d<    |||||||||||
  
        }|\
  }}}}}}}}}}|dk    sJ d            d S d S )Nr  r  r   rv   rP   r   rQ   ry   r|   r,  rU   r  rR  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r  )r   r'   r5   r/   r0  r   r  ry   )r3   r  r  r  r  r   r  rp   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ri   s                                 r4   test_gtsvx_error_singularr  S
  sO    	HHH#$6eDDDLE5
A	$acV5	9	9	9B#QD666A	$acV5	9	9	9B
B"'!**$rwr1~~5A#QF%888A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          d           t          d|           \  }}d}t          |dz
  f|           }t          |f|           }t          |dz
  f|           }t          j        |d          t          j        |          z   t          j        |d          z   }	t          |df|           }
| t
          v rdnd	}|r|	                                j        n|	|
z  }|d
k    r ||||          nd gdz  \  }}}}}}|dk    rt          t          ||d d         ||||||||||           t          t          |||d d         |||||||||           t          t          ||||d d         ||||||||           t          t          |||||d d         |||||||           d S t          t          ||||||||d d         ||||           t          t          |||||||||d d         |||           t          t          ||||||||||d d         ||           t          t          |||||||||||d d         |           d S )Nr  r  r   rv   rP   r   rQ   ry   r|   r,  rU   rR  r  )r   r'   r5   r/   r0  r   r  ry   r  rN  r  )r3   r  r  r  r  r   r  rp   r  r  r   r   r   r  r  r  r  r  r  s                      r4   "test_gtsvx_error_incompatible_sizer  
  s    	HHH#$6eDDDLE5
A	$acV5	9	9	9B#QD666A	$acV5	9	9	9B
B"'!**$rwr1~~5A#QF%888A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'   r3   r   )r  rp   r  r   r   r  r  r  r  r  r  r  r  r  r  r  ri   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'   r3   rp   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          d           dt          j        |           j        z  }t	          d|           }d}t          |f|          dz   }t          |dz
  f|           }t          j        |          t          j        |d          z   t          j        t          j        |          d          z   }	t          |d	f|           }
|	|
z  } |||          \  }}}|                                |                                |                                g} |||||||
          \  }}}}}}}t          ||d                    t          ||d                    t          ||d	                    t          |dk    d| d           t          |
|           t          j        |d          t          j        t          j        |                    z   }t          j        |          }t          |	||z  t          j        |          j        z  |           t          |d          rJ d|             t          |j        dk    d|j         d           t          |j        dk    d|j         d           dS )a  
    This tests the ?ptsvx lapack routine wrapper to solve a random system
    Ax = b for all dtypes and input variations. Tests for: unmodified
    input parameters, fact options, incompatible matrix shapes raise an error,
    and singular matrices return info of illegal value.
    r  r+  ptsvxr   rT   rS   rP   r   rQ   r  r  efr   zinfo should be 0 but is .r  r  r  )rQ   r  z# but should be ({x_soln.shape[1]},)r  N)r   r/   r   r   r'   r5   r0  r  r  r	   r   r   r   r   ry   r   r2   )r3   r(  r  df_de_lambdar-  r  r   rp   r  r  r  r   r  r  ri   r  r   r  r  r  rH  re  s                         r4   
test_ptsvxr  
  s    	HHH%$$DWE222E	A#QD(33a7A#QqSFE22A


RWQ^^#bgbgajj!&<&<<A(!Qu===F	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    r  r6   c                     dS r  r   r  s     r4   r  r    r  r6   c           
      f   t          d           t          d|           }d}t          |f|          dz   }t          |dz
  f|           }t          j        |          t          j        |d          z   t          j        t          j        |          d          z   }t          |df|           }	||	z  }
 |||          \  }}}t          t          ||d d         ||
|||	           t          t          |||d d         |
|||	           t          t          ||||
d d         |||	           d S )
Nr  r  r   rT   rS   rP   r   rQ   r  )	r   r'   r5   r/   r0  r  r  rN  r  )r3   r(  r  r  r  r   rp   r  r  r  r   r  r  ri   s                 r4   test_ptsvx_error_raise_errorsr    s;    	HHHWE222E	A#QD(33a7A#QqSFE22A


RWQ^^#bgbgajj!&<&<<A(!Qu===F	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  2  r  r6   c                     dS r  r   r  s     r4   r  r  4  r  r6   c                    t          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    rnd
|d<    |||          \  }}} ||||
          \  }}}}}}}|d
k    r||k    sJ t          |f|          } ||||
          \  }}}}}}}|d
k    r||k    sJ d S  |||          \  }}}d
|d
<   d
|d
<    ||||
|||          \  }}}}}}}|d
k    sJ d S )Nr  r  r   rT   rS   rP   r   rQ   rR  r   rR   r  )r   r'   r5   r/   r0  r  )r3   r(  r  r  r  r   rp   r  r  r  r   r  r  ri   r   r  r  r  s                     r4   test_ptsvx_non_SPD_singularr  .  s    	HHHWE222E	A#QD(33a7A#QqSFE22A


RWQ^^#bgbgajj!&<&<<A(!Qu===F	F
A  <1%%LBDs{{!#|Aq))B-2U1a^^*B5$daxxDAIIII (h77-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  )rp   r  r   r   r  r  r  x_ptsvxr  r  r  ri   s               r4   test_ptsvx_NAGr  Z  sN    . WAG444E/4uQ1~~,BGUD$a)))))r6   r  c           	         t          d           t          j        |           j        dz  }d\  }t	          g|           }t	          |g|           }|                                j        |z   t          j        |            | d          z  z   }|r7fdt                    D             fdt                    D             f}n:d t          d	d	z             D             d
 t          d	d	z             D             f}||         }t          d| d          \  }}	}
}} |	||          \  }}t          |d           t          ||          |         }t          ||d|            |||          \  }}t          |d           t          |          |         }t          ||d|            |
|||          \  }}t          |d           t          ||          }t          ||d|            ||||          \  }}t          |d           t          ||d|           t          j                            |d	          } ||||          \  }}t          |d           t#          t%          d	|z  t          j                            |d	          z
            |z  d	k                d S )Nr   r+  )rv   rS   r   r   c                 :    g | ]}t          |          D ]}|S r   r3  rS  yr   r   s      r4   rT  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  .    :::qeAqkk::::::r6   c                 :    g | ]}t          |          D ]}|S r   r  r  s      r4   rT  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  r  r6   c                 6    g | ]}t          |          D ]}|S r   r  rS  r  r   s      r4   rT  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s+    <<<q588<<a<<<<r6   rP   c                 <    g | ]}t          |          D ]}|d z
  S r  r  r  s      r4   rT  z5test_pptrs_pptri_pptrf_ppsv_ppcon.<locals>.<listcomp>  s/    >>>U1XX>>1>>>>r6   )ppsvpptrfpptrspptrippconr  r  r  r   rM  )r  r  r  )r   r/   r   r   r5   r  ry   r   r3  r'   r   r   r   r   r   r  r   r   r   r  )r3   r  r-  r   ra   r   r@  apr  r  r  r  r  ulri   aululiaulir   bxxvr  r  r   s                          @r4   !test_pptrs_pptri_pptrf_ppsv_ppconr  x  s    	JJJ8E??s"DGAt#QF%888A#QIU;;;A	
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          d           t          j        |           j        dz  }d}t	          ||g|           }t          d|           \  }} |d |d          }t          |d	         d
           |d
         }|d         }|d         }	| t          v r%t          |t          j	        |          d
|           t          ||z  |
                                j        z  |d
|            |||dd          }t          |d	         d
           |d
         }|d         }| t          v r%t          |t          j	        |          d
|           t          ||z  |
                                j        z  |d
|           t          |d         |	d
|           d S )Nr   r+  rv   r   )geestrexcc                     d S r  r   r   s    r4   r  z!test_gees_trexc.<locals>.<lambda>      D r6   Fr  r   r   rF  rE  rM  rV   rP   r  r   r   r/   r   r   r5   r'   r   r.   r   r   r  ry   )
r3   r-  r   ra   r  r  r  rp  r-  d2s
             r4   test_gees_trexcr    s   JJJ8E??s"D
A#QF%888A"#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)rz  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  rz  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'   r3   r   r   )rp  ifstilstexpectr-  r  r  s          r4   test_trexc_NAGr    so    < DWAG444EU1at1---FQq	AFAD))))))r6   c                    t          d           t          j        |           j        dz  }d}t	          ||g|           }t	          ||g|           }t          d|           \  }} |d ||dd          }t          |d	         d
           |d
         }|d         }	|d         }
|d         }|d         |	d         z  }|d         |	d         z  }| t          v rJt          |t          j	        |          d
|           t          |	t          j	        |	          d
|           t          |
|z  |
                                j        z  |d
|           t          |
|	z  |
                                j        z  |d
|            |||	|
|dd          }t          |d	         d
           |d
         }|d         }	|d         }
|d         }| t          v rJt          |t          j	        |          d
|           t          |	t          j	        |	          d
|           t          |
|z  |
                                j        z  |d
|           t          |
|	z  |
                                j        z  |d
|           t          |d         |	d         z  |d
|           t          |d         |	d         z  |d
|           d S )Nr   r+  rv   r   )ggestgexcc                     d S r  r   r  s    r4   r  z!test_gges_tgexc.<locals>.<lambda>   r  r6   Fr'  overwrite_br   r   rP   r  rF  r   rE  rM  rV   rQ   rR   r  r  )r3   r-  r   ra   r   r   r  r  r   rp  rr  r-  d1r  s                 r4   test_gges_tgexcr    s   JJJ8E??s"D
A#QF%888A#QF%888A"#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          d           t          j        |           j        dz  }d}t	          ||g|           }t          d|           \  }}} |d |d          }t          |d	         d
           |d
         }|d         }	|d         }
| t          v r%t          |t          j	        |          d
|           t          |	|z  |	
                                j        z  |d
|           t          j        |          }d|d<   t          |||          }| t          v r ||||	|          }n ||||	||d                   }t          |d	         d
           |d
         }|d         }	| t          v r%t          |t          j	        |          d
|           t          |	|z  |	
                                j        z  |d
|           t          |d         |
d
|           d S )Nr   r+  rv   r   )r  trsentrsen_lworkc                     d S r  r   r  s    r4   r  z!test_gees_trsen.<locals>.<lambda>0  r  r6   Fr  r   r   rF  rE  rM  rP   rU   r   r   liworkr   r   r/   r   r   r5   r'   r   r.   r   r   r  ry   r   r"   )r3   r-  r   ra   r  r  r	  r  rp  r-  r  selectr   s                r4   test_gees_trsenr  %  s   JJJ8E??s"D
A#QF%888A/( 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?߾r  gt?)r  r  r  gyǹ)g؁sF?g_L?gGz?gUN@?)goT?g0*g'gz6>W)g(g&䃞ͪӿgbX9ҿg-!lV?)gb=y?gۊe?r  g8EGr?)r  g?gQg(\ſ)g
ףp=
?gQ?r  r  )g)\(ܿgQտgQg(\?)r  g{GzԿgp=
ףg)\(?)rP   r   r   rP   g      ?g(\	@)yqh yfc]F?ڊe׿yMbȿ&S?y&1??п)r  y      ?5^I @yo0*yZd;OͿ~:p?)r  r  yx$(@4@y[ A?&?)r  r  r  y?ܵ@St$)y?ܵ꿽R!uy2U0*6[?yV-?=yXy8m4?1%̿)ySt$?\mҿyʡE?S㥛?y~:p	cڿyK7A`?[ A?)y:pΈ~jtԿyH}?9#J{yH}?	cZy+eXw?-ٿ)y"u?	c?y?տN@ayRQȿ{GzĿyh"lxz?EGrǿ)y47)yS!uqF%u@yyտGx$(?y3ı.n?rh|)yv?
F%uyd`TR?I&ۿyN@?ݓy4@
@	^)?)ys{
@ o_yH.@|Pk@y0*?*:Hy]m{?Gz)y)0[<?yI.!? ryqh 
@ׁsF?y1w-!?h ogRQ?gK?c                 &   d}d}t          d| j                  \  }}	t          |	||           }
| j        t          v r ||| ||
          }n ||| ||
|
d                   }t	          |d         d	           |d	         } |d         }| j        t          v r|d
         }|d         }n|d         }|d         }t          ||| z  |                                j        z  |           t          |d|z  |           t          |d|z  |           dS )zW
    This test implements the example found in the NAG manual,
    f08qgc, f08quc.
    r  r  )r  r	  r   r   rP   r  r   r   rS   rT   rU   r  N)r'   r3   r"   r.   r   r   r  ry   )rp  rr  r  r  expect_s
expect_sepr-  atol2r  r	  r   r  r   seps                 r4   test_trsen_NAGr  S  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          d           t          j        |           j        dz  }d}t	          ||g|           }t	          ||g|           }t          d|           \  }}} |d ||dd          }t          |d	         d
           |d
         }	|d         }
|d         }|d         }|	d         |
d         z  }|	d         |
d         z  }| t          v rJt          |	t          j	        |	          d
|           t          |
t          j	        |
          d
|           t          ||	z  |
                                j        z  |d
|           t          ||
z  |
                                j        z  |d
|           t          j        |          }d|d<   t          |||	|
          }|d
         dz   |d         f} |||	|
|||          }t          |d	         d
           |d
         }	|d         }
|d         }|d         }| t          v rJt          |	t          j	        |	          d
|           t          |
t          j	        |
          d
|           t          ||	z  |
                                j        z  |d
|           t          ||
z  |
                                j        z  |d
|           t          |	d         |
d         z  |d
|           t          |	d         |
d         z  |d
|           d S )Nr   r+  rv   r   )r   tgsentgsen_lworkc                     d S r  r   r  s    r4   r  z!test_gges_tgsen.<locals>.<lambda>  r  r6   Fr  r   r   rP   r  rF  r   rE  rM  rU   r   ir  r  r  )r3   r-  r   ra   r   r   r  r  r  r   rp  rr  r-  r  r  r  r   s                    r4   test_gges_tgsenr    s
   JJJ8E??s"D
A#QF%888A#QF%888A/( 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   r-  r  r  zDIF must be nearly 0zSolution for R is incorrect)r-  r  zSolution for L is incorrect)r'   r   r   r/   r   r   )ra   r   r   rp   r  rd   ranslansr3   r-  r!  routloutr\   difri   s                   r4   test_tgsyl_NAGr(    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   )rR  ry   ijob)r   rP   rQ   rR   rS   c           
      x   | t           j        k    rdnd}t           j                            d          }d\  }}t	          |                    dd||g                              |           |                    dd||g                              |           d          ^}}}	t	          |                    dd||g                              |           |                    dd||g                              |           d          ^}
}}	|                    d	d
||g                              |           }|                    d	d
||g                              |           }t          d|           } |||
||||||          \  }}}}}|dk    s
J d            |dk    s
J d            |dk    r/t          |ddt          j	        |           j
        dz  d           n|dk    s
J d            |d
k    r|dk    r!||z  ||
z  z
  }||z  }||z  ||z  z
  }||z  }nq|dk    rkt          j        |          |z  t          j        |          |z  z   }||z  }|t          j        |
          z  |t          j        |          z  z   }d|z  |z  }t          |||dd           t          |||dd           d S d S )NgMbP?g|=l   OElt/ r  irv   r   )outputr  rQ   r!  r   )r   r)  r   zINFO is non-zeror  zSCALE must be non-negativer+  zDIF must be 0 for ijob =0r"  zDIF must be non-negativerR  ry   r  zlhs1 and rhs1 do not match)r-  r   r  zlhs2 and rhs2 do not match)r/   r  r0   default_rngr!   uniformr1   r'   r   r   r   rq  )r3   r   r)  r-  rngr   r   ra   rp   r?   r   r  r   rd   r!  r%  r&  r\   r'  ri   lhs1rhs1lhs2rhs2s                           r4   
test_tgsylr3    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   r)  )	functoolsr   numpy.testingr   r   r   r   r   r	   rA   r
   r  numpyr/   r   r   r   r   r   r   r   r   numpy.randomr   r   r   scipy.linalgr   r9   r   r   r   r   r   r   r   r   r   r    r!   scipy.linalg.lapackr"   scipy.statsr#   r$   scipy.sparsesparser\  scipy.__config__r%   ImportErrorr&   r8   r'   scipy.linalg.blasr(   r  r6  r   r  
complex128r.   r   blas_providerblas_versionr5   rL   rN   r   r   ru  rv  r  r  r  r!  rC  r  r  r  r  r  r  r  r  r  r  r  r  r'  r:  rC  rI  rP  rU  r]  rg  ri  r  r  r  r  skipifr  r  r3  r  r  r  r   r  r  r	  r  r  r  r  r  r&  r.  r6  r;  r=  r?  rC  rT  rW  ri  rn  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r3  r   r6   r4   <module>rD     sY!  
      / / / / / / / / / / / / / / / /  * * * * * *    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! - , , , , , , , , ,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0 0 0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(; ; ; ; ; ; ; ;@I/ I/ I/ I/ I/ I/ I/ I/X) ) ).'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 ( &))"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 .- /.-> -> ->s$   4A; ;BB	B BB