
    e!h}                    b*   d dl mZ d dlZd dlmZmZmZmZmZm	Z	 d dl
Z
d dl
mZ d dlZd dlmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d d	l+m,Z,m-Z- d dl.m/Z0 	 d d
l1m2Z2 	 d dlm4Z5 d dl)m6Z6 d dl7m8Z8 ejr                  ejt                  gZ;ejx                  ejz                  gZ>e;e>z   Z?dxZ@ZAe2e2d   d   d   Z@e2d   d   d   ZAd ZBd ZC G d d      ZD G d d      ZE G d d      ZFe
j                  j                  de?      e
j                  j                  dg d      d               ZI G d d      ZJ G d  d!      ZK G d" d#      ZL G d$ d%      ZMe
j                  j                  de?      e
j                  j                  d&g d'      e
j                  j                  d(d)d*g      e
j                  j                  d+d,d)g      e
j                  j                  d-d.d/g      d0                                    ZNd1 ZOd2 ZPd3 ZQd4 ZR G d5 d6      ZS G d7 d8      ZTd9 ZUd: ZVd; ZWd< ZXd= ZYd> ZZd? Z[d@ Z\dA Z]dB Z^dC Z_dD Z`dE ZadF Zb G dG dH      ZcdI ZddJ ZedK ZfdL Zge
j                  j                  dMdNO      dP        ZidQ Zje
j                  j                  dRdSdTg      e
j                  j                  de;      e
j                  j                  dU ekdV            e
j                  j                  dW ekdX            e
j                  j                  dY ekdX            e
j                  j                  dZd d[g      e
j                  j                  d\d d[g      dbd]                                                 Zle
j                  j                  de;      d^        Zme
j                  j                  d_dUd`idWd`idYd`idZd`idad`id\d`if      db        Zne
j                  j                  dc ej                  g ddg deg dfg dgg dhg dig       ej                  g dj       ej                  g dkg dlg dmg dng dog dpg       ej                  g dqg drg dsg dtg      fg      du        Zpe
j                  j                  de?      dv        Zqe
j                  j                  dw ej                  g dx       ej                  g dy       ej                  g dz       ej                  g d{       ej                  g d|       ej                  g d}       ej                  g d~       ej                  ddgddgddgddgddgg       ej                  ddgddgd.dgddgdd[gg      f	 ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  g d~       ej                  ddgddgddgddgddgg       ej                  ddgddgddgddgddgg      f	g      d        Zre
j                  j                  de?      e
j                  j                  d&g d      e
j                  j                  d-d.d/g      d                      Zse
j                  j                  de?      e
j                  j                  dg d      d               Zte
j                  j                  d eue;e;z   e?            d        Zve
j                  j                  d eue;e;z   e?            d        Zwe
j                  j                  d eue;e;z   e?            d        Zxe
j                  j                  d ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  dVd/gd`dXgdd`gddgddgg       ej                  ddgddgd[dgddVgd.dgg      f ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  ddgddgddgddgg       ej                  ddgddgddgddgg      fg      dʄ        Zyd˄ Zze
j                  j                  d eue?e;e;z               e
j                  j                  d ekd.            d΄               Z{e
j                  j                  d eue?e;e;z               e
j                  j                  d ekd.            dτ               Z|e
j                  j                  d eue?e;e;z               e
j                  j                  d ekd.            dЄ               Z}e
j                  j                  d eue?e;e;z               e
j                  j                  d ekd.            dф               Z~e
j                  j                  dd ej                  g dӢ       ej                  g dԢ       ej                  g dբ       ej                  g d֢g dעg dآg d٢g      fg      dڄ        Ze
j                  j                  de?      e
j                  j                  dg dܢ      d݄               Zdބ Ze
j                  j                  dg d      e
j                  j                  dddg      d               Ze
j                  j                  dddg      e
j                  j                  dddg      d               Ze
j                  j                  de?      e
j                  j                  dg d      d               Ze
j                  j                  de?      d        Ze
j                  j                  de?      e
j                  j                  dddMg      e
j                  j                  ddd,g      d                      Ze
j                  j                  de?      e
j                  j                  dd d[g      e
j                  j                  ddd,g      d                      Ze
j                  j                  de?dz        e
j                  j                  dddMg      e
j                  j                  ddd,g      d                      Ze
j                  j                  d ej                  g dx       ej                  g dy       ej                  g dz       ej                  ddgddgddgddgddgg       ej                  ddgddgd.dgddgdd[gg      f ej                  g d       ej                  g d       ej                  g d       ej                  ddgddgddgddgddgg       ej                  ddgddgddgddgddgg      fg      d        Ze
j                  j                  d eue?e;e;z               e
j                  j                  ddd fd,d fg      d               Ze
j                  j                  d eue?e;e;z               e
j                  j                  ddd fd,d fg      d               Ze
j                  j                  d eue?e;e;z               e
j                  j                  ddd fd,d fg      d               Ze
j                  j                  d  ej                  g d       ej                  g d       ej                  dVd/gd`dXgdd`gddgddgg       ej                  ddgddgd[dgddVgd.dgg      f ej                  g d       ej                  g d       ej                  ddgddgddgddgg       ej                  ddgddgddgddgg      fg      d        Ze
j                  j                  dddMg      e
j                  j                  de?      d               Ze
j                  j                  de?      d        Ze
j                  j                  d ej                  g dg dg dg d	g       ej                  g d
g dg dg d	g      dd[f ej                  g dg dg dg dg       ej                  g dg dg dg dg      d[dXfg      d        Ze
j                  j                  de?      d        Ze
j                  j                  de?      d        Ze
j                  j                  d ej                  g dg dg dg dg       ej                  g dg dg dg d g       ej                  g d!g d"g d#g d$g       ej                  g d%      d&d'f ej                  g d(g d)g d*g d+g       ej                  g d,g d-g d.g d/g       ej                  g d0g d1g d2g d3g       ej                  g d%      d4d5fg      d6        Ze
j                  j                  de?      d7        Ze
j                  j                  d8 ej                  g d9g d:g d;g d<g       ej                  g d=g d:g d;g d>g       ej                  g d?g d@g dAg dBg       ej                  g dCg dDg dEg dFg       ej                  g dGg dHg dEg dIg       ej                  g dJg dKg dLg dMg       ej                  g d=g dNg dOg dPg       ej                  g dQg dRg dSg dTg      fg      e
j                  j                  de;      dU               Ze
j                  j                  de;      e
j                  j                  dVdW      e
j                  j                  dXg dY      dZ                      Ze
j                  j                  d[ddg      e
j                  j                  de?      e
j                  j                  dd\      d]                      Ze
j                  j                  d& ed^            e
j                  j                  d_g d`      e
j                  j                  d+d,d)g      e
j                  j                  de?      da                             Zy# e3$ r dZ2Y w xY w# e3$ r dZ5Y w xY w(c      )reduceN)assert_equalassert_array_almost_equalassert_assert_allcloseassert_almost_equalassert_array_equal)raises)eyeoneszeros
zeros_liketriutriltril_indicestriu_indices)randrandintseed)_flapacklapackinvsvdcholeskysolveldlnorm
block_diagqreighqz)_compute_lwork)ortho_groupunitary_group)CONFIG)_clapack)get_lapack_funcs)get_blas_funcszBuild Dependenciesblasnameversionc                     |t         v r1 |j                  |   |j                  |  dz  z   j                  |      S  |j                  |  j                  |      S )N              ?)COMPLEX_DTYPESr   astype)shapedtyperngs      f/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr4   1   sZ    % #((E"4'()/	7388U""5))    c                  R   t         j                  t        j                  d       t	        t         j                  j                               } h d}t               }t        t               D ]/  }|j                  d      r||vs|| vs|j                  |       1 |g k(  sJ d       y)z%Test that all entries are in the doc.Nzlapack.__doc__ is None>   npclapackflapackdivision	HAS_ILP64print_functionabsolute_importfind_best_lapack_type_z2Name(s) missing from lapack.__doc__ or ignore_list)
r   __doc__pytestskipsetsplitlistdir
startswithappend)namesignore_listmissingr*   s       r3   test_lapack_documentedrL   9   s    ~~,-$$&'E	K fGF !$[)@E!NN4 ! b=NNN=r5   c                   $    e Zd Zd Zd Zd Zd Zy)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        |	              y )N)         )         )      	   )rP   r   r   ga2U0*3?)rS   r   r   gMb`?)rV   rP   r   r   )r   rP   r   r   sdzcgebalr   rP   )permutescale)	getattrr9   r   reprr   r   lenr7   r   )
selfaa1pfbalohipivscaleinfos
             r3   
test_gebalzTestFlapackSimple.test_gebalR   s    	9-  	*A7D1Ay)*1&BB$Hd4j)%b!,"bAs1Q4y{#34%hA@)*2q)B&BB$Hd4j)	*r5   c                     g dg dg dg}dD ];  }t        t        |dz   d       }| ||      \  }}}t        | t        |             = y )Nikiifi     i"  iiidgehrd)r]   r9   r   r^   )r`   ra   rc   rd   httauri   s          r3   
test_gehrdzTestFlapackSimple.test_gehrdg   s\      	*A7D1AyaDMBTHd4j)	*r5   c           	         t        j                  ddgddgg      }t        j                  ddgddgg      }t        j                  dd	gd
dgg      }d}dD ]u  }|j                  |      |j                  |      |j                  |      }}}t        d|f      \  }	|j	                         r|dxx   dz  cc<   d} |	|||      \  }
}}t        t        j                  ||
      t        j                  |
|      z   ||z          |	|||||      \  }
}}t        t        j                  |j                         j                  |
      t        j                  |
|j                         j                        z   ||z  d        |	|||d      \  }
}}t        t        j                  ||
      t        j                  |
|      z
  ||z  d       x y )NrP   rQ   r   rS   rT   rU   rW   rX   
         TfdFD)trsylr-   C)tranatranbdecimal)isgn)	r7   arrayr/   r'   isupperr   dot	conjugatery   )r`   ra   bctransr1   rb   b1c1r{   xr\   ri   s                r3   
test_trsylzTestFlapackSimple.test_trsylr   s   HHq!fq!f%&HHq!fq!f%&HHq"gBx()  	=E%!((5/188E?BB%j2%8FE}}1"2r2.NAud%bffRmbffQm&C&+bj2 #2r2U%HNAud%FF2<<>++Q/"&&BLLN<L<L2MMBJ+ #2r2B7NAud%bffRmbffQm&C&+bj!=#	=r5   c                 :   t        j                  g dg dg dg      }dD ]w  }dD ]n  }|j                  |      }|j                         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            }nA|dv r=t        j                  t        j                  t        j                  |      d            }t        |       q z y )Nrl   rm   ro   rz   Mm1OoIiFfEer   r   r-   )langeFfEeFfrR   rV   Mm1Oor   axisIirP   )r7   r   r/   r   r'   sqrtsumsquareabsr   maxr   )	r`   ra   r1   norm_strrb   r   valuer   refs	            r3   
test_langezTestFlapackSimple.test_lange   sD   HH 
  	-E) -XXe_==?tHNH)*re<h+v%}"#"#''"&&266":)>"?@C'sG<4' ffRVVBZ0!U* ffRVVBFF2JQ%?@!T) ffRVVBFF2JQ%?@ ,1-	-r5   N)__name__
__module____qualname__rj   rt   r   r    r5   r3   rN   rN   P   s    **	*=8-r5   rN   c                       e Zd Zd Zd Zy)
TestLapackc                 &    t        t        d      ry y Nempty_module)hasattrr9   r`   s    r3   test_flapackzTestLapack.test_flapack       7N+ ,r5   c                 &    t        t        d      ry y r   )r   r8   r   s    r3   test_clapackzTestLapack.test_clapack   r   r5   N)r   r   r   r   r   r   r5   r3   r   r      s    
r5   r   c                   $    e Zd Zd Zd Zd Zd Zy)TestLeastSquaresSolversc           	         t        d       t        t              D ]  \  }}d}d}d}t        ||      j	                  |      }t        |      j	                  |      }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!        ||        y )!N  rv      rP   )gels
gels_lworkr1   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrQ   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r   	enumerateDTYPESr   r/   r'   r"   r   REAL_DTYPESr7   r   r0   r_   r   finfoepsr	   r.   )r`   indr1   mnnrhsrb   r   glsglslwr   r?   ri   r   r   r   lqrr   	lqr_truths                      r3   	test_gelsz!TestLeastSquaresSolvers.test_gels   s   T
#F+ 	JCAADa""5)Ba&B)*@NJC #5!Q5ER51JAq$DAIR6#;eDJAq$DAI	 ! 	/EC:::'.35B ,E:B&63b"X'?#D*e 88DAq288}!xx{ #:q!T:EBe4LCDAcrFBHH.A.@.B38%: "$BHHUO$7$7!79 "'rIq!QsI./	/2 $ 	/EHc?$h/$h/18=?B 6eDB&63b"X'?#D*e 88DAq288}!xx{ #:q!T:EBe4LCDAcrFHH&J&J&L+028:288E?;N;N8NP "'rIq!QsI./	/r5   c                    t         D ]U  }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         X t        D ]b  }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         e y )Nr   r   r   r   r   r   r   r   )gelsdgelsd_lworkrQ   rP   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r7   r   r'   r0   r_   intrealr   r   r   r.   )r`   r1   rb   r   r   r   r   r   r   workiworkri   r   
iwork_sizer   srankrwork
rwork_sizes                      r3   
test_gelsdz"TestLeastSquaresSolvers.test_gelsd  s     	9EC:::'.35B ,E:B!12J35r("<E; 88DAq288}!xx{ !,Aq$ ;D%&EJ$RUJ%' 7Aq$AcrFBHH.A.@.B38%: "$BHHUO$7$7!79 Arxx);):)<CH J!#BHHUO$7$7!793	9: $ 	PEHc?$h/$h/18=?B 6eDB!12J35r("<E; 88DAq288}!xx{ (31ar'B$D%&EUJJ$RUJ
%' 7Aq$AcrFHH&J&J&L+028:288E?;N;N8NP AHH&8:K%L+028:288E?;N;N8NP5	Pr5   c           	      x   t         D ]S  }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         V t        D ]S  }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         V y )Nr   r   r   r   r   r   r   r   )gelssgelss_lworkrQ   rP   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r`   r1   rb   r   r   r   r   r   r   r   ri   r   vr   r   r   s                   r3   
test_gelssz"TestLeastSquaresSolvers.test_gelss?  s     	9EC:::'.35B ,E:B!12J35r("<E; 88DAq288}!xx{ %Q44JD$&E(-b"b%(N%Aq!T4AcrFBHH.A.@.B38%: "$BHHUO$7$7!79 Arxx);):)<CH J!#BHHUO$7$7!79/	96 $ 	9EHc?$h/$h/18=?B 6eDB!12J35r("<E; 88DAq288}!xx{ %Q44JD$&E(-b"b%(N%Aq!T4AcrFHH&J&J&L+02 "$BHHUO$7$7!7	9
 Arxx);):)<CH J!#BHHUO$7$7!791	9r5   c           
      (   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} ||||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          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} ||||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          y )Nr   r   r   r   r   r   r   r   )gelsyr   rQ   rP   rv   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r7   r   r'   r0   r_   r   r   r   r   r   int32r   r.   )r`   r1   rb   r   r   gelsy_lworkr   r   r   r   ri   r   jptvr   r   jr   s                    r3   
test_gelsyz"TestLeastSquaresSolvers.test_gelsyx  s     	9EC:::'.35B ,E:B!12J35r("<E; 88DAq288}!xx{ %Q4BHHUO4G4G1GHJD$&E88RXXa[!,BHH=D"'Bbhhuo6I6I(-ue#=Aq!T4AcrFBHH.A.@.B38%: "$BHHUO$7$7!79+	94 $ 	9EHc?$h/$h/18=?B 6eDB!12J35r("<E; 88DAq288}!xx{ %Q4BHHUO4G4G1GHJD$&E88RXXa[!,BHH=D"'Bbhhuo6I6I(-ue#=Aq!T4AcrFHH&J&J&L+02 "$BHHUO$7$7!7	9+	9r5   N)r   r   r   r   r   r   r   r   r5   r3   r   r      s    B/H:Px79r59r5   r   r1   r0   )rR   rS   )rT   rQ      r  c                 Z    t        d|       }|\  }} |||      \  }}t        |d       y )Ngeqrf_lworkr   r   r   r   r'   r   )r1   r0   r  r   r   r   ri   s          r3   test_geqrf_lworkr    s3     #M%@KDAqQ'KE4qr5   c                       e Zd Zd Zy)TestRegressionc                    t         D ]  }t        j                  d|      }t        dg|g      \  }t	        t
        ||d        ||      \  }}}}|t        v r6t        dg|g      \  }t	        t
        ||dd  |d        ||dd  |d       |t        v st        d	g|g      \  }	t	        t
        |	|dd  |d        |	|dd  |d        y )
N)i,  rQ   r   gerqfrQ   r   orgrqrP   ungrq)r   r7   r   r'   assert_raises	Exceptionr   r.   )
r`   r1   ra   r
  rqrs   r   ri   r  r  s
             r3   test_ticket_1645zTestRegression.test_ticket_1645  s     	-E/A%wi!5FE)UAQ7"'(BT4#)7)aS9i23AFbgs!,.()7)aS9i23AFbgs!,	-r5   N)r   r   r   r  r   r5   r3   r  r    s    -r5   r  c                       e Zd Zd Zy)	TestDpotrc           
      "   dD ]	  }dD ]   }t         j                  j                  d       t         j                  j                  d      }|j	                  |j
                        }t        d|f      \  }} ||||      \  }} |||      d   }	|r<t        t        j                  |	      t        j                  t        |                   t        t        j                  |	      t        j                  t        |                     y )N)TF*   )rR   rR   size)potrfpotri)cleanr   )r7   randomr   normalr   ry   r'   r   r   r   r   )
r`   lowerr  r   ra   dpotrfdpotrir   ri   dpts
             r3   test_gh_2691zTestDpotr.test_gh_2691  s    " 	CE& C		r"II$$&$1EE!##J!12Dqe!L E74Q&q)#BGGCL"''#a&/B#BGGCL"''#a&/BC	Cr5   N)r   r   r   r!  r   r5   r3   r  r    s    Cr5   r  c                       e Zd Zd Zy)
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 ]5  }
 ||
||      }|	j                  |d          t        |d
   dk  d|
z         7 t        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         y )N)r         @r   r   )g(\@g@g333333皙r   r   rP   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rR   zcLAPACK root finding dlasd4 failed to find                                     the singular value %izThere are NaN rootsd   atolr   )r7   r   hstackvstackdiagr   r_   newaxisr   concatenater   r'   rangerH   r   anyisnanr   r   float64r   )r`   sigmasm_vecMSMit_lensgmmvcr,  rootsiress               r3   test_sing_val_updatezTestDlasd4.test_sing_val_update  s   /*01IIryy"''&2,"7"$((As5zA~+>"?"A BQ

]+- . %Eu#% VnnfTrTlVAYU9K-K,LMNnneDbDk401 6)4q&! 	@A3$CLLQ SVq[ $;=>$? @		@ "%RVVBHHUO,,.CDEEBHHRZZ,@,D,D(D "**!5!9!99	;r5   N)r   r   r   rC  r   r5   r3   r#  r#    s    ;r5   r#  c                       e Zd Zej                  j                  de      d        Zej                  j                  deD  cg c]  }dD ]  }|dk(  r|t        v s||f  c}}}}       ej                  j                  dddg      ej                  j                  d	d
dg      d                      Z	ej                  j                  dg dg dg dg      d        Z
d Zej                  j                  dddg      d        Zyc c}}}} w )	TestTbtrsr1   c                 D   |t         v rdt        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 rgt        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,-       y.)/zTest real (f07vef) and complex (f07vsf) examples from NAG

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

        )p=
ףgQ@gHzG@g{Gz?)g      gq=
ףp@gHzGr   r   gp=
ף0rG  g(\+gףp=
0g333333*@g(\gHzG,gQ#rS   rP   r   rR   rQ   r  )y
ףp=
Q@y{Gz@GzyQ?HzGy)\(??)yQQ@yq=
ףpGz@yףp=
?{Gzr   )yQ?q=
ףp@y)\(zGr   r   yQ!
ףp=
yףp=
8Gzyp=
#/)\h7y\(LHzG @yQHz6@yףp=
3@(\=y{Gz-333333yQ+3@GzT5@y               @y      ?      @y      ?      y             yt&m=#yi6@Ug$B@y[a^C?b->y-@ji& *!z	Datatype z not understood.tbtrsLabr   uplor   h㈵>r   r/  N)r   r7   r   r.   
ValueErrorr'   r   r   )r`   r1   rL  r   x_outrI  r   ri   s           r3   test_nag_example_f07vef_f07vsfz(TestTbtrs.test_nag_example_f07vef_f07vsf  s    K424 %'B 65/!6* %.!5/+  %	&A
 HHq!f!2h !f "g' $)	*E
 n$KF:< !&'B =.9*N;)>:)>:<  %	&A
 HHr6l%w/46JK35JKM $)	*E y/?@AA '%82-4T15qt4r5   zdtype,trans)Nry   r|   r|   rM  UrJ  r2  rS  c           	         t         j                  j                  d      }d\  }}}t        d|      }	|dk(  }
||
z  }||z
  }t	        || dz
  d      }|D cg c]  }|t        |      z
   }}|D cg c]  }t        |f||       }}|dk(  rt        j                  ||      ||<   t        j                  ||d	      }t        j                  |dz   |f|      }t        |      D ]4  \  }}|j                  |      ||t        |d
      t        ||z   |      f<   6 t        ||f||      } |	|||||      \  }}t        |d
       |dk(  rt!        ||z  |d       y |dk(  rt!        |j"                  |z  |d       y |dk(  r*t!        |j"                  j%                         |z  |d       y t'        d      c c}w c c}w )Ni  )rS   rR   rQ   rI  r   rT  rP   r   dia)formatr   )rL  r   rM  r   r2  rS  g-C6
?r   ry   r|   zInvalid trans argument)r7   r  RandomStater'   r5  r   r4   r   spsdiagsr   r   diagonalr   minr   r   ry   r   rP  )r`   r1   r   rM  r2  r2   r   r   kdrI  is_upperkuklband_offsetsr   band_widthswidthbandsra   rL  rowkr   ri   s                           r3   test_random_matriceszTestTbtrs.test_random_matrices2  s    ii##D)
 4 6CK(]"W R"q"-+78aq3q6z88)+ -eXucB + + 3;/E"I IIe\%8 XXrAvqk5)- 	;FC-.ZZ]BsC1Ic!A#qk))*	; (D	5#>2UF4T1C<AE140c\ACC!GQT2c\ACCMMOa/>5669 9+s   F:2F?zuplo,trans,diag)rT  rS  Invalid)rT  rh  rS  )rh  rS  rS  c           	          t        dt        j                        }t        dd      }t        dd      }t	        t
        ||||||       y)z?Test if invalid values of uplo, trans and diag raise exceptionsrI  r   rS   rQ   N)r'   r7   r8  r   r  r  )r`   rM  r   r2  rI  rL  r   s          r3   &test_invalid_argument_raises_exceptionz0TestTbtrs.test_invalid_argument_raises_exceptionf  s>     !

;!QZAJiAtUDAr5   c                     t        j                  dt              }t        j                  dt              }t        dt              }d|d<    |||d      \  }}t	        |d       y	)
aH  Test if a matrix with a zero diagonal element is singular

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

        Note that ?tbtrs requires the matrix A to be stored in banded form.
        In this form the diagonal corresponds to the last row.r   r   rS   rI  r   )r   rR   rT  rK  N)r7   r   floatr'   r   )r`   rL  r   rI  r?   ri   s         r3   test_zero_element_in_diagonalz'TestTbtrs.test_zero_element_in_diagonals  sU     WWV5)GGAU# 65	2-4T1r5   zldab,n,ldb,nrhs)rT   rT   r   rT   )rT   rT   rR   rT   c                     t        j                  ||ft              }t        j                  ||ft              }t        dt              }t	        t
        |||       y)z2Test ?tbtrs fails correctly if shapes are invalid.r   rI  Nr7   r   rl  r'   r  r  )r`   ldabr   ldbr   rL  r   rI  s           r3   test_invalid_matrix_shapesz$TestTbtrs.test_invalid_matrix_shapes  sF     WWdAYe,GGS$Ku- 6iA.r5   N)r   r   r   rA   markparametrizer   rR  r   rg  rj  rm  rr  ).0r1   r   r   s   0000r3   rE  rE    s@   [[Wf-+5 .+5Z [[]+1N N"'N6;&+slu7K  %en Nn NO [[Vc3Z0[[Vc3Z0,7 1 1	O,7\ [[.33356B	6B  [[.**1 /	/iNs   DrE  r   )I1OrM  rT  rJ  r2  rS  r   rR   rv   c           	         t        j                  |  | | | |        t        j                   j                  t        j                  dd            }|j                  ||f      |j                  ||f      dz  z   }|j                  t        j                  d|j                  dd      |            }||z  }t        j                  | t        j                        r|j                  n|}|dk(  rt        j                  |      nt        j                  |      }|dk(  r-|t        j                  |      d d t        j                  f   z  }|j                  |       }t!        d|f      } |||||      \  }	}
|d	k(  rt        j"                  j%                  |t        j&                  
      }t        j"                  j%                  t        j"                  j)                  |      t        j&                  
      }d||z  z  }n]t        j*                  |      j-                  d      j/                         }t!        d|f      \  }} ||      \  }}} ||||      \  }}
d}t1        |	||       y )Nr   l   a$r  r-   rv   rT  trcon)r   rM  r2  rv  )ordrP   r   gecongetrfr   r   )r  r   r7   default_rngr   permutedlogspaceintegers
issubdtypefloatingr   r   r   r2  r3  r/   r'   linalgr   infr   r   r   r   r   )r1   r   rM  r2  r   r2   Aoffsetrz  rB  r?   norm_A
norm_inv_Ar   anormr}  r~  luipvtri   r   s                        r3   
test_trconr    s    KK5'$vdVA3/0
))

q- @
AC

A
#**1a&*"9""<<A\\"++aa)<a@AFKA--r{{3Ack
rwwqzAs{	RWWQZ2::&&	AWqd+E14d6FCs{rvv.YY^^BIIMM!$4"&&^A
6J&'q	1%))+'(:QDAuqD$r5t,Q
 DC4(r5   c                     dD ]  } t        d|       }t        j                  d|       }t        j                  d|       }t        j                  |      r|dz  } |||      \  }}}t	        |d       t	        |d       t        j                  |      r?t	        |d	       t        t        |t                     t        t        |t                     t	        |d
        y )Nrz   lartgr   rR   rS   r-   333333?r   y       皙?)	r'   r7   r   iscomplexobjr   r   
isinstancecomplexrl  )r1   r  rd   gcssnrs          r3   
test_lartgr    s     ) 6HHQHHQ??1GA!QK	BG$3??1B	*Jq'*+Jr5)*B(')r5   c                     dD ]  } d}d}t        j                  dd|       }t        j                  dd|       }dt        j                  |       j                  dz
   z  }| dv rt	        d	| 
      }d}nt        d	| 
      }|dz  }|dz  }d}t         |||||      g dg dg|       t         |||||d      g ddd||gg|       t         |||||dd      g d||ddgg|       t         |||||ddd      g d||ddgg|       t         |||||ddd      g dd|d|gg|       t         |||||ddddd	      g d||d|gg|       t         |||||ddd      g dd|d|gg|        |||||dd      \  }}	t        ||u        t        |	|u        t        |g d|       t        |	g d|        y )Nrz   r  r  rS   rR   rv   rP   fdrotr   y             r-   y              @)rT   rT   rT   rT   )r   r   r   r   r/  rQ   )r   )rT   rT   rR   rR   r   )offxoffy)rR   rR   rT   rT   )incxr  r   )rT   rR   rT   rR   )r  incyr   )r  r  r  r  r   )rR   rR   rT   rR   r  )r  r  r   )overwrite_xoverwrite_y)r7   fullr   	precisionr(   r'   r   r   )
r1   r   r   ur   r/  r  rd   ra   r   s
             r3   test_rotr    s     $4GGAq% GGAq% RXXe_..q011D= e4CA"56CHAGAAAq!Q,*6*8>B	DAq!Q!,|011a|/=CG	IAq!QQQ7%1a|44	AAq!QQQ!<%1a|44	AAq!QQQ!<%1a|44	AAq!QQQQQ!L%1a|44	AAq!QRbA>%1a|44	A 1aA1!<1QQ<d3<d3I$4r5   c            
      b   t         j                  j                  d       t         j                  j                  d      } | j                  j	                  |       } t         j                  j                  d      dt         j                  j                  d      z  z   }|j                  j                         j	                  |      }dD ]e  }t        ddg|      \  }}|dv r|j                         }n| j                         } ||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   ||
|j                         |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       h y )Nr   )rS   rS   r-   rz   larfglarfr   FDr   rP   rP   r   rQ   r   r   RsiderN  r  )r7   r  r   ry   r   conjr'   copyr0   r   r   r   r   )a0a0jr1   r  r  ra   alphar   rs   expectedr   s              r3   test_larfg_larfr    s   IINN4			&	!B	"B
))

6
"R		(8(8(@%@
@C
%%**,

3
C
  6&'8FtD=
A	A aggajlAdGQqr1uX>q# ==1a4)g MM!ABE(#!!" 3==?Aab!eHbhhqwwqz6JK!"a% 3!QR%"((1771:*>SI!QR%!Q$5!Q$596r5   c                  z    t        dt        j                  d      } d}t        | ||dd      }|dk(  s|dk(  sJ y y )	Ngesdd_lwork	preferredr1   ilp64iA%  T)r(  r'  i`DiD)r'   r7   float32r"   )sgesdd_lworkr   r   s      r3    test_sgesdd_lwork_bug_workaroundr  #  sQ     $M*57LA<A&*$@E  I)!333!3r5   c                       e Zd Zej                  j                  de      d        Zej                  j                  de      ej                  j                  dd      d               Zy)	TestSytrdr1   c                 n    t        j                  d|      }t        d|f      }t        t        ||       y )Nr   r   sytrdr7   r   r'   r  rP  )r`   r1   r  r  s       r3   test_sytrd_with_zero_dim_arrayz(TestSytrd.test_sytrd_with_zero_dim_array@  s.     HHV5) 1$/j%+r5   r   rP   rR   c                    t        j                  ||f|      }t        d|f      \  }}t        j                  d||dz   z  dz  dz   |      |t        j                  |      <    ||      \  }}t        |d        ||d|      \  }}	}
}}t        |d       t        ||dt        j                  |      j                  z  d	       t        |	t        j                  |             t        |
d
       t        |d
        |||      \  }}	}
}}t        |d       t        j                  ||      }t        j                  |j                  d         }|	|||f<   t        j                  |j                  d   dz
        }|
||dz   |f<   |
|||dz   f<   t        j                  |||      }t        |dz
        D ]x  }t        j                  ||      }|d ||dz   f   |d | d||<   t        j                  |||      ||   t        j                  ||      z  z
  }t        j                  ||      }z t        j                   |d      }|j"                  |   ||<   t        j                  |j"                  t        j                  ||            }t        ||dt        j                  |      j                  z  d	       y )Nr   )r  sytrd_lworkrP   rQ   r   r  r   rT   r   r.          r   r   )r7   r   r'   arangetriu_indices_fromr   r   r   r   r2  r   r0   r   r5  outerr   r   ry   )r`   r1   r   r  r  r  r   ri   datarp   ers   ry   rf  k2QrA  r   Hi_lowerQTAQs                        r3   
test_sytrdzTestSytrd.test_sytrdG  s|    HHaV5) 5t< 	{
 IIaAaC!AU3 	
"

q
!" "!ntT1 !&aq >aCT1aa(;(;&;#F2771:&3S! !&au 5aCT1
 MM!5)IIaggaj!!Q$YYqwwqz!|$"Q$("bd( FF1au%qs 	A%(A!QqSMAbqEAaDq!5)CFRXXa^,CCAq!A	 //!R(SS\'
vvacc266!Q<( 	aa(;(;&;#Fr5   N)	r   r   r   rA   rs  rt  r   r  r  r   r5   r3   r  r  ?  se    [[Wk2, 3, [[Wk2[[S&)7G * 37Gr5   r  c                       e Zd Zej                  j                  de      d        Zej                  j                  d ee	e            ej                  j                  dd      d               Z
y)	TestHetrdcomplex_dtypec                 n    t        j                  d|      }t        d|f      }t        t        ||       y )Nr   r   hetrdr  )r`   r  r  r  s       r3   test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_array  s.     HHV=1 1$/j%+r5   zreal_dtype,complex_dtyper   r  c           	      "   t        j                  ||f|      }t        d|f      \  }}t        j                  d||dz   z  dz  dz   |      dt        j                  d||dz   z  dz  dz   |      z  z   |t        j                  |      <   t        j
                  |t        j                  t        j                  |                   dD ]  } |||      \  }}	t        |	d        t        ||      }
 ||d|
	      \  }}}}}	t        |	d       t        ||d
t        j                  |      j                  z  d       t        |t        j                  t        j                  |                   t        |d       t        |d        |||
      \  }}}}}	t        |	d       t        j                  ||      }t        j                  |j                  d   t              }||||f<   t        j                  |j                  d   dz
  t              }|||dz   |f<   ||||dz   f<   t        j                   |||      }t#        |dz
        D ]  }t        j                  ||      }|d ||dz   f   |d | d||<   t        j                   |||      ||   t        j$                  |t        j&                  |            z  z
  }t        j(                  ||      } t        j*                  |d      }t        j&                  |j,                  |         ||<   t        j(                  t        j&                  |j,                        t        j(                  ||            }t        ||dt        j                  |      j                  z  d       y )Nr   )r  hetrd_lworkrP   rQ   r-   r   rP   r  r   r  rT   r   r.  r  r   r   rv   )r7   r   r'   r  r  fill_diagonalr   r2  r   r"   r   r   r   r   r0   r   r   r5  r  r  r   r   ry   )r`   r   
real_dtyper  r  r  r  r   r?   ri   r   r  rp   r  rs   ry   rf  r  r  rA  r   r  r  QHAQs                           r3   
test_hetrdzTestHetrd.test_hetrd  s    HHaV=15t< 	{
 IIaAaC!AZ8299Q1Q3
1J??@ 	
"

q
!" 	BGGBGGAJ/0  	"A!!1-GAtq!	"
 {A. !&aq >aCT1aa(<(@(@&@sK2772771:./3S! !&au 5aCT1
 MM!:.IIaggaj,!Q$YYqwwqz!|3/"Q$("bd( FF1a}-qs 	A-0A!QqSMAbqEAaDq!=1a&288Arwwqz223Aq!A	 //!R(WWQSS\*'
vvbggacclBFF1aL1 	!"RXXj1555C	r5   N)r   r   r   rA   rs  rt  r.   r  zipr   r  r   r5   r3   r  r    sp    [[_n=, >, [[7 n=?[[S&)A *?Ar5   r  c            
         t        t              D ]W  \  } }t        d|      \  }}t        |ddd      }| dk  r\t	        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        Z y )!N)gglsegglse_lworkr   rU   rS   rQ   )r   r   rc   )g=
ףp=g{Gzg(\ؿ      ?)zGgHzG?gףp=
ӿQ)ffffff@gQ?g?gffffffֿ)r  g{Gz?Qg{Gz?)333333?g333333?r  g
ףp=
)g{Gz{Gz?gzG      ?)g      r  gGz?gHzGgzGg=
ףp=?r  )yQ?QyQQ?yQ{Gz @y=
ףp=?)y\(\￮Gz?y333333RQ?yQzG?yQQ?)yףp=
?q=
ףpݿy)\(?{Gz?y)\(?(\ſy(\333333?)yGz?RQ?yRQ?HzGy\(\
ףp=
׿y)\(?ɿ)y(\?RQ?y?{Gz?y(\ſq=
ףpݿyQ?q=
ףp?)yHzG?Qѿy?QyQ뱿Gz?yp=
ף?p=
ף?yRQ
ףp=
?yffffff?GzyzG GzyQ?ffffff
@yp=
ף)\(@y(\ @Q?)r   r        r  )r  r   r  r  r   )^"L?\}?r  r  )y!f?$_Kdy^gŵ翸F@y!f?}dy61ŵe_@r   )r   r   r'   r"   r7   r   r   r   )r   r1   func
func_lworkr   ra   r   rp   r   r?   resultr  s               r3   
test_gglser    sx   ' ,?
U+,D279jzQ!q975534346
 >CDA AOA"b/A MNKKKKM NA ;-%,&-%,&-%,( )A %(AHH'):;5I!!Q1E:1a7xx !- .H
 xx !: ;H 	"&(A>Y,?r5   c            
         t        d       t        t        t        z         D ]>  \  } }d}| dk  r9t	        d|      }t	        d|      \  }}t        ||      j                  |      }nHt	        d|      }t	        d|      \  }}t        ||      t        ||      d	z  z   j                  |      }||j                         j                  z   d
z  d
t        j                  ||      z  z   }t        |d      }t        ||      } |||d      \  }	}
} ||	|
|d      \  }}t        t        d|z  t        j                  j!                  |d      z
        |z  dk         A y )Nr   rv   rS   sytrf_lworkr   )syconsytrfhetrf_lwork)heconhetrfr-   rQ   rP   )r   r  )ra   ipivr  r  rc   )r   r   r   r.   r'   r   r/   r  ry   r7   r   r   r"   r   r   r  cond)r   r1   r   r  funconfunctrfr  r  r   ldur  r?   rconds                r3   test_sycon_heconr    sJ   J~ 56 A
U7)-uEJ./AOOFGa##E*A *-uEJ./AOOFGad1ajm+33E:A ^Q266!5#9!99Q
z1-qQ7T1Cd%qAqAeGbiinnQ!n445e;a?@-Ar5   c                  J   t        d       t        t              D ]  \  } }d}t        d|      \  }}}}t	        ||      j                  |      }||j                  z   dz  }t	        ||      j                  |      }||j                  z   dz  dt        j                  ||      z  z   } |||      \  }	}
}t        |dk(          ||      \  }}t        |dk(          |||      \  }}t        |dk(          ||      \  }}
}t        |dk(         t        ||	d        y )	Nr   rv   )r  sygstsyevdsygvdr   rQ   r   giUMu?r   )r   r   r   r'   r   r/   ry   r7   r   r   r   )r   r1   r   r  r  r	  r
  r  Beig_gvdr?   ri   r   ra   eigs                  r3   
test_sygstr    s%   J, 3
U%5 7I<A&C"ueU AJe$WaKAJe$WaK!bffQe444 !A;D	 (4	1+4	QxQ	W6253r5   c                     t        d       t        t              D ]_  \  } }d}t        d|      \  }}}}t	        ||      j                  |      dt	        ||      j                  |      z  z   }||j                         j                  z   dz  }t	        ||      j                  |      dt	        ||      j                  |      z  z   }||j                         j                  z   dz  dt        j                  ||      z  z   } |||      \  }	}
}t        |dk(          ||      \  }}t        |dk(          |||      \  }}t        |dk(          ||      \  }}
}t        |dk(         t        ||	d	       b y )
Nr   rv   )r  hegstheevdhegvdr   r-   rQ   r   -C6?r   )r   r   r.   r'   r   r/   r  ry   r7   r   r   r   )r   r1   r   r  r  r  r  r  r  r  r?   ri   r   ra   r  s                  r3   
test_hegstr  =  si   J/ 1
U%5 7I<A&C"ueU AJe$rDAJ,=,=e,D'DD^QAJe$rDAJ,=,=e,D'DD^QRVVAU%;!;; !A;D	 (4	1+4	QxQ	W4051r5   c                     t         j                  j                  d      } d\  }}t        t              D ]  \  }}t        d|      \  }}t        |||      }|dk  r+t        | j                  ||      j                  |            }n@t        | j                  ||      | j                  ||      dz  z   j                  |            }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                   ||      }t#        |      D cg c]D  }||
|   ||gd	d	f   j                  j%                  ||gd	d	f   j'                               z  z
  F }}t)        t         j$                  |      }t+        |j%                  |      |z
  t-        ||      d
t        j.                   |d      j0                        z  d        y	c c}w )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   Nrv   r   r  r.  )r7   r  rX  r   r   r'   r"   r   r   r/   r  r  ry   r   r0  r   r   r5  r   r  r   r   r   spacingr   )r2   r   r   r   r1   r  tzrzf_lwr   r  rzrs   ri   r  VIdr   r   Zs                     r3   
test_tzrzfr!  \  s    ))


%CDAq' F
U*+C168xxA.7SXXa^**512Achhq!nsxx1~b'88@@GHA 	i,au-C	 IIr!RaR%y"((Aqs85"ABCIIrvvau-r!QR%y9:VVAU#DI!HMqr#a&A36A36)9:::MM2663a1j%&@

5:?? ;;"	F-F( Ns   A	Ic            	         t         j                  j                  d      } t        t              D ]4  \  }}d}|dkD  rOt        | j                  ||      | j                  ||      dz  z   t        |      z         j                  |      }d}n8t        | j                  ||      t        |      z         j                  |      }d}t        d|      \  }}} ||      \  }	}
| j                  |d	      j                  |      } |d
|	|      }t        |t        | |      |d	z  dk(  rdnd        |d
|	||      }t        |t        |j                         j                   |      |d	z  dk(  rdnd        |d      |t        j                  |      t        j                  |      f<    |d
|	||d      }t        |t        |j                         j                   |      |d	z  dk(  rdnd       | j                  d|      j                  |      } |d
|	||dd      }t        |t        | |j                        j                         j                  |d	z  dk(  rdnd       7 y)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   rT  )r   r2  rR   r  )r   r2  r  N)r7   r  rX  r   r   r   r   r   r/   r'   r   r   r  ry   r  )r2   r   r1   r   r  r   r#  r$  r%  Afpr?   r  solnB2s                 r3   	test_tfsmr*  ~  s,   
 ))


%C'  D
U7SXXa^chhq!nR&77#a&@AHHOAESXXa^c!f,-44U;AE-.H49;ud qQHHQN!!%(BQ!$qb!/2Qw!|!	D BQe,!$qvvxzzk1(=/2Qw!|!	D ).b	"))A,		!
$%BQe#6!$qvvxzzk1(=/2Qw!|!	D XXa^""5)BRu3SA!$qb"$$(<(<(>(@(@/2Qw!|!	D? Dr5   c                  <   t         j                  j                  d      } d\  }}}t        t              D ]_  \  }}t        d|      \  }}t        |||      }|dk  r\t        | j                  ||      j                  |            }	| j                  ||      j                  |      }
t        d|      \  }}nt        | j                  ||      | j                  ||      dz  z   j                  |            }	| j                  ||      t        ||      dz  z   j                  |      }
t        d|      \  }}t        |||      } ||	|	      \  }}}t        j                  t        j                  ||      |d
d
|d
f   f      }t        j                  ||      }t        |      D cg c]D  }|||   ||gd
d
f   j                  j                  ||gd
d
f   j                               z  z
  F }}t!        t         j                  |      }|dk  rdnd}dt        j"                   |d      j$                        z  } ||||
|	      \  }}t'        |dk(         t)        ||j                  |
      z
  t+        |
      |d        ||||
||      \  }}t'        |dk(         t)        ||j                         j                  j                  |
      z
  t+        |
      |d        ||||
d|      \  }}t'        |dk(         t)        ||
j                  |      z
  t+        |
      |d        ||||
d||      \  }}t'        |dk(         t)        ||
j                  |j                         j                        z
  t+        |
      |d       b y
c c}w )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   Nry   r|   rv   r   r   r  r.  r   r  )r  r   )r  r   r   )r7   r  rX  r   r   r'   r"   r   r   r/   r0  r   r5  ry   r   r  r   r  r   r   r   r   )r2   qmqncnr   r1   r  r  lwork_rzr  r|   orun_mrzorun_mrz_lw	lwork_mrzr  rs   ri   r  r  r   r   r  r   tolcqs                            r3   test_ormrz_unmrzr9    s6    ))


%CJBB' .!
U*+C168x!(B37SXXb"%,,U34AR ''.A$45M;@%B!Hk chhr2&"b)9")<<DDUKLA"b!DRLO3;;EBA$45M;@%B!Hk #;B7	ax0C IIrvvb.1bc6
;<VVBe$DI"INqr#a&A36A36)9:::NN2663 QwCE#JOO,,BQi8D	QUU1Xz!}3RHBQe9ED	QVVXZZ^^A..
1C	! BQS	BD	QUU1Xz!}3RHBQSYOD	QUU1668::..
1C	![.!, Os   /A	Nc            	         t         j                  j                  d      } t        t              D ]G  \  }}d}|dkD  r:| j                  ||      | j                  ||      dz  z   j                  |      }d}n#| j                  ||      j                  |      }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                         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                         j                  z  cc<   t        ||j                  dd             t        ||j                         j                  j                  dd             t        |
|j                  dd             t        ||j                         j                  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        |             J y)z
    Test conversion routines between the Rectangular Full Packed (RFP) format
    and Standard Triangular Array (TR)
    r   r   rP   r-   r|   ry   )r#  r$  r   r   rJ  rM  rT  )transrrM  rQ   Nr   F)order)r7   r  rX  r   r   r   r/   r'   r   r   r   r  ry   r   r   reshape)r2   r   r1   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                      r3   test_tfttr_trttfrL    sX   
 ))


%C' 1:
U7hhq!nsxx1~b'88@@GFFhhq!n,,U3FF'(:%HuV}	V#.	vf3?$	vf3?$	 !A#q!tE2<1a451"aAa!VUadUEQTE\ : ? ? A C CC!A#q!tE2v,q%1a4%x0Q!Q$d6l1a45!Q$%<8==?AAA!&(*:*:2S*:*IJ!("*--/"3"3";";Bc";"J	L 	"&(*:*:2S*:*IJ!("*--/"3"3";";Bc";"J	L Q'	QS1	q(6D$	q(6D$	!&$v,7!(DL9!&$v,7!(DL9c1:r5   c                     t         j                  j                  d      } t        t              D ]  \  }}d}|dkD  r8| j                  ||      | j                  ||      dz  z   j                  |      }n!| j                  ||      j                  |      }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        |              y)r;  r   r   rP   r-   )trttptpttrr   r   rJ  r<  rQ   N)r7   r  rX  r   r   r   r/   r'   r   r   r   r   ry   r   r   r   )r2   r   r1   r   rA  rN  rO  A_tp_Uri   A_tp_LindsA_tp_U_mA_tp_L_mrH  rI  s                  r3   test_tpttr_trttprU    s   
 ))


%C'  8
U7hhq!nsxx1~b'88@@GFhhq!n,,U3F'(:%HuV}	V#.	 AAaC!51F|~~t,AAaC!51F|~~t,!&(3!&(3 Q'	QS1	!&$v,7!&$v,7A 8r5   c                  z   t         j                  j                  d      } t        t              D ]	  \  }}d}|dkD  rd| j                  ||      | j                  ||      dz  z   j                  |      }||j                         j                  z   |t        |      z  z   }n?| j                  ||      j                  |      }||j                  z   |t        |      z  z   }t        d|      \  }}} ||      \  }}	 |||      \  }
}	t        |	dk(          |||
      \  }}t        |      }t        ||        y)	zk
    Test Cholesky factorization of a positive definite Rectangular Full
    Packed (RFP) format array
    r   r   rP   r-   )pftrfr#  r$  r   r   N)r7   r  rX  r   r   r   r/   r  ry   r   r'   r   r   r   )r2   r   r1   r   r  rW  r#  r$  r'  ri   	Achol_rfpA_chol_rr?   Achols                 r3   
test_pftrfr[  D  s"   
 ))


%C' 3
U7!Q#((1a."33;;EBAAFFHJJ3q6)A!Q''.AACC!CF("A./J5:<ue !H	T3-	4	Ay)!!(E2%3r5   c                     t         j                  j                  d      } t        t              D ]+  \  }}d}|dkD  rd| j                  ||      | j                  ||      dz  z   j                  |      }||j                         j                  z   |t        |      z  z   }n?| j                  ||      j                  |      }||j                  z   |t        |      z  z   }t        d|      \  }}}} ||      \  }	}
 |||	      \  }}
 |||      \  }}
t        |
dk(          |||      \  }}t        |      }t        |t        |      |dz  dk(  rd	nd
       . y)z
    Test Cholesky factorization of a positive definite Rectangular Full
    Packed (RFP) format array to find its inverse
    r   r   rP   r-   )pftrirW  r#  r$  r   r   rQ   rS   rU   r   N)r7   r  rX  r   r   r   r/   r  ry   r   r'   r   r   r   r   )r2   r   r1   r   r  r]  rW  r#  r$  r'  ri   
A_chol_rfp	A_inv_rfpA_inv_rr?   Ainvs                   r3   
test_pftrirb  _  sT   
 ))


%C' D
U7!Q#((1a."33;;EBAAFFHJJ3q6)A!Q''.AACC!CF("A%5 7@ =B	&C"ueU !H	T C=
D:.	4	1i(
1v!'4:/2Qw!|!	D-Dr5   c                  V   t         j                  j                  d      } t        t              D ]w  \  }}d}|dkD  rd| j                  ||      | j                  ||      dz  z   j                  |      }||j                         j                  z   |t        |      z  z   }n?| j                  ||      j                  |      }||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       z y)z
    Test Cholesky factorization of a positive definite Rectangular Full
    Packed (RFP) format array and solve a linear system
    r   r   rP   r-   rR   r   rQ   )pftrsrW  r#  r$  r   rS   rU   r   N)r7   r  rX  r   r   r   r/   r  ry   r   r   r'   r   r  r  r   r   )r2   r   r1   r   r  r  Bf1Bf2rd  rW  r#  r$  r'  ri   r^  r(  s                   r3   
test_pftrsrg    s   
 ))


%C' D
U7!Q#((1a."33;;EBAAFFHJJ3q6)A!Q''.AACC!CF("A!Qu%AaC85)AaC85)%5 7@ =B	&C"ueU !H	T C=
D1j#.
d	i:s;1j!,
d	!%1+t/2Qw!|!	D7Dr5   c            
      0   t         j                  j                  d      } t        t              D ]d  \  }}d}|dkD  rd| j                  ||      | j                  ||      dz  z   j                  |      }||j                         j                  z   |t        |      z  z   }n?| j                  ||      j                  |      }||j                  z   |t        |      z  z   }|dk  rdnd}t        dd	| d
f|      \  }}} ||      \  }	}
| j                  |d      j                  |      } ||dd|d|	      } |||      \  }}
t        |t        |j                  |j                         j                         d|z  z         |dz  dk(  rdnd       g y)zT
    Test for performing a symmetric rank-k operation for matrix in RFP format.
    r   r   rP   r-   rQ   r   hr#  r$  frkr   r   r   rS   rU   r   N)r7   r  rX  r   r   r   r/   r  ry   r   r'   r   r   r   )r2   r   r1   r   r  prefixr#  r$  shfrkr'  r?   r|   Afp_outA_outs                 r3   test_sfrk_hfrkro    s}    ))


%C' D
U7!Q#((1a."33;;EBAAFFHJJ3q6)A!Q''.AACC!CF("AQwC.VHC./Q5:<ue qQHHQN!!%(1b!Q,G$q!%quuQVVXZZ/@.@1Q3.F)G/2Qw!|!	D#Dr5   c            
         t         j                  j                  d      } t        t              D ]  \  }}d}|dkD  r[| j                  dd||f      | j                  dd||f      dz  z   j                  |      }||j                         j                  z   }nB| j                  dd||f      j                  |      }||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        y)zt
    Test for going back and forth between the returned format of he/sytrf to
    L and D factors/permutations.
    r   rv   rP   i   r-   r-  r   )syconvr  r  r   r  F)r  	hermitianr  r   Nr  r.  r   )r7   r  rX  r   r   r   r/   r  ry   r   r  r   r'   r"   r   r   r   r   )r2   r   r1   r   r  r7  rr  trf	trf_lworklwrJ  Dpermr  r  ri   ra   r  rT  s                      r3   test_syconvry    s   
 ))


%C' L
U7S"q!f-S"q!f-b0128&-  AFFHJJACaV,33E:AACC!CF("A"**U3Z__--!1 3BIN"PYIq2!u5
1dIq2aq3T4CQ/
1dQd1T1W:r&:2N !u5
1daq/T4CQ/
1dQ
D47Q$7cK5Lr5   c                       e Zd ZdZd Zd Zy)TestBlockedQRzd
    Tests for the blocked QR factorization, namely through geqrt, gemqrt, tpqrt
    and tpmqr.
    c           
         t         j                  j                  d      }t        t              D ]  \  }}d}|dkD  r8|j                  ||      |j                  ||      dz  z   j                  |      }n!|j                  ||      j                  |      }dt        j                   |d      j                        z  }t        d|      \  }} |||      \  }	}
}|d	k(  sJ t        j                  |	d
      t        j                  ||      z   }t        j                  ||      ||
z  |j                  j                         z  z
  }t        j                  |	      }t        |j                  j                         |z  t        j                  ||      |d       t        ||z  ||d       |dkD  r:|j                  ||      |j                  ||      dz  z   j                  |      }d}n#|j                  ||      j                  |      }d}dD ]  }d|fD ]  } ||	|
|||      \  }}|d	k(  sJ ||k(  r|j                  j                         }n|}|dk(  r||z  }n||z  }t        |||d       ||fdk(  sc ||	|
|      \  }}|d	k(  sJ t!        ||         t#        t$        ||	|
|d       t#        t$        ||	|
|d        y )Nr   r   rP   r-   r-  r   )geqrtgemqrtr   r   r   r  r.  r|   ry   rJ  r  rS  r  r   rJ  rJ  rS  r  r  r&  )r7   r  rX  r   r   r   r/   r  r   r'   r   r   ry   r  r   r   r   r  r  )r`   r2   r   r1   r   r  r7  r}  r~  ra   tri   r   r  r  r|   	transposer  r   r   qqC	c_defaults                          r3   test_geqrt_gemqrtzTestBlockedQR.test_geqrt_gemqrt  s   ii##D)#F+ :	AJCAQwXXa^chhq!nR&77??FXXa^++E2bjjs11C,-@NME6q!JAq$199 2!77Aq&Q);;A
A ACCHHJNBFF1E,B!#%AE13R8QwXXa^chhq!nR&77??F	XXa^++E2	" 3!9- 3E$Q14uEGAt19$9	)CCHHJs{UU#Ar"= e}
2*0Aq/	4#qy(y$Y2)330 )VQ13?)VQ1C@u:	Ar5   c                 
   t         j                  j                  d      }t        t              D ]  \  }}d}|dkD  ro|j                  ||      |j                  ||      dz  z   j                  |      }|j                  ||      |j                  ||      dz  z   j                  |      }nB|j                  ||      j                  |      }|j                  ||      j                  |      }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                  j!                         z  z
  }t        j                  t        j                  |      t        j"                  |      f      }t%        |j                  j!                         |z  t        j                  d
|z  |      |d       t%        ||z  t        j                  t        j                  |      |f      |d       |dkD  rq|j                  ||      |j                  ||      dz  z   j                  |      }|j                  ||      |j                  ||      dz  z   j                  |      }d}nD|j                  ||      j                  |      }|j                  ||      j                  |      }d}dD ]  }d|fD ]  } |	|
||||||      \  }}}|d	k(  sJ ||k(  r|j                  j!                         }n|}|dk(  r8t        j                  ||fd	      }t        j                  ||fd	      }||z  }n7t        j                  ||fd      }t        j                  ||fd      }||z  }t%        |||d       ||fdk(  s |	|
||||      \  }} }|d	k(  sJ t        ||       t        | |         t'        t(        |	|
||||d       t'        t(        |	|
||||d         y )Nr   r   rP   r-   r-  r   )tpqrttpmqrtr   r   rQ   r   r  r.  r|   ry   r  rS  r  rJ  r   r  r  r  r&  )r7   r  rX  r   r   r   r/   r  r   r'   r   r   r   r4  r   ry   r  r   r   r  r  )!r`   r2   r   r1   r   r  r  r7  r  r  lra   r   r  ri   B_pentb_pentr   r  r  r|   rw  r  r  r   r   rp   r  cdCDqCDr  	d_defaults!                                    r3   test_tpqrt_tpmqrtzTestBlockedQR.test_tpqrt_tpmqrt%  s{   ii##D)#F+ O	KJCAQwXXa^chhq!nR&77??FXXa^chhq!nR&77??FXXa^++E2XXa^++E2bjjs11C,-@NME6 a^ @K %aAq 11aqy y RWWQ^RWWQ^< RWWQA	2BGGAq1uqy4IJ "$AE!2BGGAq1u4E NNBFF1E$:F#CDFF1q5.Q1CCNNBGGAJa0@#AB  
Qq1uE0J%(r3Ar~~rwwqz66J'K%(r3 7!Q#((1a.*;;CCEJA!Q#((1a.*;;CCEJA #I!Q//6A!Q//6A #I& 7D"%y!1 7%+Aq!Q27&9
1d#qy(y I- !
A !A3;!#AQ!?B!#AQ!?B"#b&C!#AQ!?B!#AQ!?B"$q&C'CcC %=J69?1aA9N6Iy$#'19,9(A6(A6377: iAq!QSIiAq!QcJA@KO	Kr5   N)r   r   r   r@   r  r  r   r5   r3   r{  r{    s    
<A|QKr5   r{  c                  :   t         j                  j                  d      } t        t              D ]i  \  }}d}d}t        d|      }|dkD  rj| j                  |||z
        j                  |      d| j                  |||z
        j                  |      z  z   }||j                         j                  z  }n3| j                  |||z
        j                  |      }||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                         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                         j                  z  d|       l y )Nr   rv   rQ   pstrfr   rP   r-   r    r   rQ   rO  r  r7   r  rX  r   r   r'   r   r/   r  ry   r   r   r   r  r   r8  r   r   )r2   r   r1   r   r  r  r  r   pivr_cri   rT  single_atoldouble_atolr/  rJ  s                   r3   
test_pstrfr  y  G   
))


%C' #P
U 6 7AaC ''.chhq!A#6F6M6Me6T1TTAAFFHJJAAaC ''.AACCA!!H3TG "#'(C!GH
T1 RXXbjj1555RXXbjj1555!Vm{#a%CE*AFFHJJN$O!!1-3TG "#'(C!GH
T1RXXbjj1555RXXbjj1555!Vm{#a%CE*A

N$OG#Pr5   c                  :   t         j                  j                  d      } t        t              D ]i  \  }}d}d}t        d|      }|dkD  rj| j                  |||z
        j                  |      d| j                  |||z
        j                  |      z  z   }||j                         j                  z  }n3| j                  |||z
        j                  |      }||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                         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                         j                  z  d|       l y )Nr   rv   rQ   pstf2r   rP   r-   r  r  r  rO  r  r  )r2   r   r1   r   r  r  r  r   r  r  ri   rT  r  r  r/  rJ  s                   r3   
test_pstf2r    r  r5   c                     t        j                  g dg dg dg dg      } t        j                  g dg dg dg      }t        t              D ]  \  }}|dk  r3t        j                  g d	g d
g dg dg      }|j	                  |      }nUt        j                  g dg dg dg|      }|t        j                  g dg dg dg      dz  z  }|j	                  |      }t        d|      } ||      \  }}}}	}
}|dk  r,t        | j	                  |      |d d d f   |z  |z  dd       t        |j	                  |      |d d d f   |z  |z  dd        y )N)g      ?r   g1w-!?gd`TRۿ)r   gsr  r  )gs?r  g2%䃮g,eX)r  gsFg%ug??)y/nҿ&?yDioɴ?Af?y o_[ Acп)ysֿAfҿyPkw?JY8y5;NёCl?)yYڊ?1*?y=yXѿ@a+?yh oſFxrQ   )g   ЈBg   tBgffffff @g   ٓ )      @gg#fDgffffff)gHzG?gQg'Vgp=
ף)g(\r  gS7нr  )gq=
ףpg   Ag(\)g333333g   Bg333333ÿ)gZ9=gQgֽr   )gffffff@g   tޅBr&  )g(\g   Zgq=
ףp?)gEop=gQ?gZEqҽr-   geequr   r  rO  )r7   r   r   r   r/   r'   r   )desired_realdesired_cplxr   r1   r  r  r  r   rowcndcolcndamaxri   s               r3   
test_geequr    sy   88>@@@B CL
 88 1112 3L  ' /
U7CEEEG HA A:::<CHJA :;:< ==?@ @A A 6+08(1ffdD7L//6!T'
1Q!"/ L//6!T'
1Q!"/3/r5   c            	         t        j                  g d      } t        t              D ]  \  }}t        j                  d|      } ||dk  rdnd      }t        j                  t        dd      D cg c]
  }|d	|z  z   c}|      }|t        j                  t        j                  |            z  }t        d
|      } ||      \  }}	}
}t        t        j                  |      j                  t              |         y c c}w )N)
r   r   r   r   r   r   r   r   r  rH  rv   r   rQ   r   r-   rT   r   syequb)r7   r   r   r   r   r5  rot90r2  r'   r   log2r/   r   )desired_log2sr   r1   r  r  r   rp   r  r   scondr  ri   s               r3   test_syequbr    s    HH?@M' 	<
UFF2U#C!Gb-HHU2q\:eb!em:%H	RXXbggaj!!!(%8%ay5$RWWQZ&&s+];	< ;s   0D
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                  | j                  t         j                        d      \  }}}}t        |d       t        t        j                  |      g d       y )NrQ   rT   i  rX   rP   )rf  r-   r   r  r  r  rU                   i   rT   rT   y              0@)rT   r   r  )r  r   r   r   r   r  r   r   r   r  r  )r7   r2  r   r   zheequbr   r   r  r   r  cheequbr/   	complex64)r  r   r  r  ri   s        r3   test_heequbr    s    	Aq !BGGBGGAJ!$<R$??A!>>!,AudDqBGGAJS	!rd 2bT!V ;<
266"))B*++b01AAdGAdG!>>!((2<<*@JAudDqBGGAJ IJr5   c                      t         j                  j                  d      } d}| j                  |      }| j                  |      | j                  |      dz  z   }t	        t
              D ]  \  }}|dk  r:| j                  ||      }|j                  |      }||z  }|j                  |      }nO| j                  ||      | j                  ||      dz  z   }|j                  |      }||z  }|j                  |      }t        d|      }t        d|      }	 ||d	      \  }
}}} |	|
|||d
      \  }}|dk  r!t        |j                  |      ||z  d       t        |j                  |      ||z  d        y )Nr  rv   r-   rQ   getc2r   gesc2r   r)  )overwrite_rhsrS   r   )	r7   r  rX  r   r   r   r/   r'   r   )r2   r   r  r  r   r1   r  r   r  r  r  r  jpivri   r   r\   s                   r3   test_getc2_gesc2r    sg   
))


#C
A88A;L88A;!R/L' :
U7AAAL AAA!Q!22AAL AA 6 6$QA6D$Qd!<57%l&9&9%&@&'gq: &l&9&9%&@&'gq:+:r5   r  )rU   rT   r  jobarU   joburS   jobvjobrrP   jobpc                    t         j                  j                  d      }| \  }	}
dt        j                  |      j                  z  }t        | ||      }t        d|      }|dk  }|dk  }|dk(  xr |	|
k(  }t        j                  |      }|dk(  xr | xr | }|dk(  xr |xr | xr |}|dk(  xr |xr | xr |}|rd}n	|s|rd}nd	}|dkD  r|dk(  rt        t        ||||||||	       y ||||||||
      \  }}}}}}t        ||       |sW|d	   |d   z  |d|
 z  }t        |t        |d      |       |dk(  r|ddd|
f   }|rA|r?t        |t        j                  |      z  |j                         j                  z  ||       |r<t        |j                         j                  |z  t        j                   |
      |       |r<t        |j                         j                  |z  t        j                   |
      |       t        |d	   t         j"                  j%                  |             t        |d   t        j&                  |             t        |d   d	       yy)a  Test the lapack routine ?gejsv.

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

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

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

    jobt is, as of v3.9.0, still experimental and removed to cut down number of
    test cases. However keyword itself is tested externally.
    r  r-  gejsvr   rQ   rP   r  rH  r   )r  r  r  r  jobtr  NF)r(  r  )r7   r  rX  r   r   r4   r'   r  r  r  r   r   r   r2  r  ry   identityr  matrix_rankcount_nonzero)r  r1   r  r  r  r  r  r  r2   r   r   r/  r  r  lsvecrsvecl2tran
is_complexinvalid_real_jobvinvalid_cplx_jobuinvalid_cplx_jobvexit_statussvar  r   r   r   ri   sigmas                                r3   test_gejsv_generalr  8  sc   B ))


#C DAq%$$$D#D%5AWE2E
 1HE1HEai%a1fF#JHUHZMU-=v(>M:MU-=v(>M:
 	/qtqyi4tT4N',Q262626262626(8$Q4 	T;'  !WtAw&#bq'1EE3qU#;$Gqy a!eHBGGEN 2QVVXZZ ?N

QATJ

QATJq299#8#8#;<q2#3#3E#:; q1%5 r5   c                 
   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      j                  d	d	            j                  |       }t        j                  ||j                  z         }|j                  d
      }	 ||      }
t        ||	       y)z*Test edge arguments return expected statusr  r   r   r   rP   rP   )rP   r  r-  rv   r  N)r'   r   r0   r7   r   r   sinr  r@  r/   asfortranarrayry   r  r   )r1   r  r  r  r   r   r   ri   r  Acr?   s              r3   test_gejsv_edge_argumentsr    s    WE2E $)9 CAtUDq&!&!bhht512 	E"A#(8 CAtUDq&!&!bhht512 	e$A#(8 CAtUDq&!&!bhhr/0 	ryy~%%b"-.55e<A
!acc'"A	
BaAArr5   kwargsrX   r  c                     t        j                  dt              }t        dt              }t	        t
        ||fi |  y)z-Test invalid job arguments raise an Exception)rQ   rQ   r   r  Nro  )r  r  r  s      r3    test_gejsv_invalid_job_argumentsr    s1     	e$AWE2E)UA00r5   zA,sva_expect,u_expect,v_expect)g)\(@gp=
ףgffffff?g
ףp=
)gQ?gQgGz?g(\)gQ޿gQgGz?gzGʿ)gQ?gQ?gHzG?g)\(?)ggq=
ףp@g333333r  )ףp=
?g(\r  g(\)g cZB#@gI.!v@g?ܵ?r  )gC?g=yX5gc=yXga4?)gB`"?g:pΈҞgʡE?gn4@?)g[B>٬?g٬\m?gJ{/L?gOe?)gc]Fgꕲq׿g\m?fc]F)g؁sFڿgZB>?g0L
F%?gq=
ףp)g ?gR!u?guVſg&Sٿ)gǘ?gV-g	^)p?g()gFx$g6[ ٿgUN@giq?)g1Zd?gOnӿgΈ?g_vO?)g}?5^Iؿg58EGr?gi o?g7[ Ac                     d}t        d| j                        } ||       \  }}}}	}
}t        |||       t        |||       t        |||       y)z~
    This test implements the example found in the NAG manual, f08khf.
    An example was not found for the complex case.
    r  r  r   r  N)r'   r1   r   )r  
sva_expectu_expectv_expectr/  r  r  r  r   r   r   ri   s               r3   test_gejsv_NAGr    sS    0 DWAGG4E#(8 CAtUDJ$/Had+Had+r5   c           	         t         j                  j                  d      }d}dt        j                  |       j                  z  }t        |dz
  f| |      }t        |f| |      }t        |dz
  f| |      }|j                         |j                         |j                         g}t        j                  |      t        j                  |d      z   t        j                  |d      z   }t         j                  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 ]?  \  }}||   dz
  }|d d ||gf   |d d ||gf<   |d d |fxx   |d d |dz   f   |z  z  cc<   A d|d   dz
  }}|d d ||gf   |d d ||gf<   t        |||z  |       |
j                         } |||||||
      \  }}t        |
|       t        |	||       | t        v rd}|j                  |	z  }nd}|j!                         j                  |	z  } ||||||||      \  }}t        |	||       t#        t$              5   ||d d ||       d d d        t#        t$              5   |||d d |       d d d        t#        t$              5   ||||d d        d d d        t#        t$              5   ||d	   |d d |d	          d d d        d	|d	<   d	|d	<    ||||      \  }}}}} }!t         j&                  j)                  ||dz
     d	k(  d||dz
      d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w)Nr  rv   r-  rP   r1   r2   r   gttrfgttrsr   r   rQ   r  ry   r|   r&  z?gttrf: _d[info-1] is , not the illegal value :0.)r7   r  rX  r   r   r4   r  r2  r   r'   r	   r   r   r   r   ry   r  r  rP  testingr   )"r1   r2   r   r/  durp   dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  ri   rT  rJ  rA  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos"                                     r3   test_gttrf_gttrsr    s    ))


#C
A%$$$D 
%acV5c	BB#QD3?A	$acV5c	BB	1668RWWY/H

RWWR_$rwwr1~5A
		qA	AA#$6eDLE5$)"a$4!CS#tTr8A;'q(1+&r8A;' 	Aa(2773?:A
qA# 1 1gk1sAh;!aX+	!Q$1Q!V9Q; bAsAq3({^Aa!SkN Aq1u4(FFHE#r3T15MGTq% AwT* ##'&&(**q.#r3T7%HMGTAwT* 
z	" b"gq"	z	" b!CR&"	z	" b!RW 
z	" #beQrUBqE"# BqEAaD*/Ar*:'D#tT5%JJs4!8}).DSPQ]O TI -I K   # #s0   N.9N:OO.N7:OOOz1du, d, dl, du_exp, d_exp, du2_exp, ipiv_exp, b, x)g @r  ffffff?r   )r%  r        ffffff@)333333@@r         )r  r  r  r  )r  r  rV   gC>)r   r   rW   )rQ   rR   rS   rT   rT   g@gffffff@      g%@g@g	r  gffffff&g3@r  rT   rV   rH  r  )       @             @      ?            ?      ?      )?r  ffffff
@333333ӿ333333@ffffff
?)      ?             ?      ?       @      r  )r  r  r  r  )r  r  r  r  y ~:pffffff?)r
  r  r  y333333@      y@@y333333@3333332@y333333yffffff-ffffff#@y      333333yfffff?@y333333"@y      𿚙?y      ffffff(@r  r	  y      @      y      ?       @y      @      @r  y             r
  r  y       @       c	                     t        d| d   | d   f      \  }	}
 |	|||       \  }}}}}}t        ||       t        ||       t        ||d       t        ||        |
||||||      \  }}t        ||       y )Nr  r   r  r  )r'   r   )r  rp   r  du_expd_expdu2_expipiv_expr   r   r  r  r  r  r  r  r  ri   r  s                     r3   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr  U  s    d $$6A1GLE5$)"a$4!CS#tTC!C BD)D(##r3T15MGTGQr5   )rw  rv  rx  c           	         t         j                  j                  d      }|j                  |      |j                  |      dz  z   }|j                  |dz
        |j                  |dz
        dz  z   }|j                  |dz
        |j                  |dz
        dz  z   }t        j                  |      t        j                  |d      z   t        j                  |d      z   }t        j                  | t         j
                        r3|j                  |j                  |j                  |j                  f\  }}}}|j                  |       |j                  |       |j                  |       |j                  |       f\  }}}}t        j                  |      j                  d      j                         }t        d|f      \  }	}
 |	|||      \  }}}}}} |
|||||||      \  }}t        d	|f      \  }} ||      \  }}} ||||      \  }}t        j                  |       j                  d
z  }t        |||       y )NiTfr-   rP   r   r   r   )r  gtconr  r|  g      ?r   )r7   r  r  r2  r  r  r   r/   r   r   r   r'   r   r   r   )r1   r   r   r2   rp   r  r  r  r  r  r  r  r  ri   rB  r?   r}  r~  r  r  r   r   s                         r3   
test_gtconr    s    ))


)C

1

1b((A	AE	SZZA.r1	1B	AE	SZZA.r1	1B

RWWR_$rwwr1~5A	}}UBKK(vvqvvrww71b"88E?AHHUORYYu5EryyQVGWWLAq"bFF1IMMqM!%%'E#$6=LE5!&r1b!1B2sD$2q"c4T:FC#$6=LE51XNBd2u4(FC88E?$DC4(r5   ))rR   rV   )rV   rR   r   c                 Z    t        d|       }|\  }} |||      \  }}t        |d       y )Ngeqrfp_lworkr   r  r   r  )r1   r0   r  r   r   r   ri   s          r3   test_geqrfp_lworkr    s3     $^EBLDAqa(KE4qr5   zddtype,dtypec                    t         j                  j                  d      }dt        j                  |      j                  z  }d}t        |f| |      dz   }t        |dz
  f||      }t        j                  |      t        j                  |d      z   t        j                  t        j                  |      d      z   }|j                         |j                         g}t        d|      }	 |	||      \  }
}}t        ||d	          t        ||d          t        |d	d
| d       t        j                  |d      t        j                  t        j                  |            z   }t        j                  |
      }t        |||z  |j                         j                  z  |       t        |f||      }||z  }t        d|      } ||
|j                         |      \  }}t        |d	d| d       t        |||       y )Nr  r-  rv   rS   rP   r   pttrfr   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r7   r  rX  r   r   r4   r2  r  r  r'   r	   r   r   r   r   ry   )ddtyper1   r2   r/  r   rp   r  r  r  r!  r  _eri   rJ  rw  r   r   r#  _xs                      r3   test_pttrf_pttrsr'    s    ))


#Crxx"""D
A
 	$QD&#6:A#QqSFE37A 	
RWWQ^#bggbggaj!&<<A!&&(#HWE2EA;LBDq(1+&q(1+&qN4&"FG 	B"''"''!*--A
AAqs1;;=??*6 	$QD%5A	!A WE2ERA&HBqN4&"FG Ar%r5   c                     d}t         j                  j                  d      }t        d|      }t	        |f| |      dz   }t	        |dz
  f||      }t        t        ||d d |       t        t        |||d d        y )Nrv   r   r!  r   rQ   rP   r   )r7   r  rX  r'   r4   r  rP  )r$  r1   r   r2   r!  rp   r  s          r3   *test_pttrf_pttrs_errors_incompatible_shaper)    sz     	A
))


%CWE2E#QD&#6:A#QqSFE37A*eQsVQ/*eQ#2/r5   c                 `   d}t         j                  j                  d      }t        d|      }t	        |f| |      dz   }t	        |dz
  f||      }d|d<   d|d<    |||      \  }}}	t        ||	dz
     dd||	dz
      d	       t	        |f| |      } |||      \  }}}	t        |	dk7  d
       y )Nrv   r  r!  r   rQ   rP   r   z?pttrf: _d[info-1] is r  z2?pttrf should fail with non-spd matrix, but didn't)r7   r  rX  r'   r4   r   r   )
r$  r1   r   r2   r!  rp   r  r  r%  ri   s
             r3   'test_pttrf_pttrs_errors_singular_nonSPDr+    s     	A
))


#CWE2E#QD&#6:A#QqSFE37AAaDAaDA;LBDD1Hq)"TAX,7RSU 	$QD&#6AA;LBDDAIKLr5   z%d, e, d_expect, e_expect, b, x_expect)rS   rv      r   rT   )r  r  r  rW   )rS   rX   r      rP   )r  gK=Ur  r  rQ      A      g      @r   r  )r-  )   .      )y      0@      0@y      2@      "      ?      )r-  rX   rP   rS   )r  r	  r4  y      P@      0@y      0      @y     @W@      O@y     N@     Py     S@      Ty     Q@     Ry      ,@      ;y     A@      .@y             r  c                 L   d}t        d|d         } || |      \  }}	}
t        |||       t        |	||       t        d|d         } |||	j                         |      \  }}
t        |||       |j                  t        v r |||	|d      \  }}
t        |||       y y )	Nr  r!  r   r   r  r#  rP   r  )r'   r   r  r1   r.   )rp   r  d_expecte_expectr   x_expectr/  r!  r  r%  ri   r#  r&  s                r3   test_pttrf_pttrs_NAGr9  	  s    4 DWAaD1EA;LBDBt,Bt,WAaD1ERA&HBBt, 	ww. R!,DH40 !r5   c                    t         j                  j                  d      }|dk(  rt        ||f| |      }|t        j                  t        j
                  |      d|z  z         z   }||j                         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                         j                  z  }
|}nt        |f||      }t        |dz
  f||      }|dz   }t        j                  |      t        j                  |d      z   t        j                  |d      z   }
t        j                  |      t        j                  |d      z   t        j                  |d      z   }|||
|fS )Nr  rP   rS   rQ   r   )	r7   r  rX  r4   r2  r   r  ry   r    )r1   realtyper   	compute_zr2   A_eigvrrp   r  trir  zs               r3   pteqr_get_d_e_A_zrA  6	  s    ))


#CA~+QFE3?ac 122'1,%[^'h<q@'1#>ggaj2771a=(2771b>9Hrwwy{{" (h<'1#> EGGAJA&B7GGAJB'"''!Q-7q!Q<r5   zdtype,realtyper<  c                 v   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  ||
       yy)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   r7   r   r   r'   rA  r   r   sortr    r  ry   r  r2  )r1   r;  r<  r/  rC  r   rp   r  r  r@  d_pteqre_pteqrz_pteqrri   s                 r3   
test_pteqrrI  V	  s    	H###Dge4E
A"5(AyAJAq!Q&+a1Y&O#GWgtqGD689 BGGDGAJ')9E"'''"2"4"44bkk!n!	# 	"'''"22RWWW5E5G5GG	& r5   c                     t        d       t        d|       }d}t        | |||      \  }}}} ||dz
  |||      \  }	}
}}|dkD  sJ y )Nr  rC  r   rv   rS   r@  r<  r   r   r'   rA  r1   r;  r<  rC  r   rp   r  r  r@  rF  rG  rH  ri   s                r3   test_pteqr_error_non_spdrN  w	  s^     	Hge4E
A"5(AyAJAq!Q ',AE1Y&O#GWgt!8O8r5   c           	          t        d       t        d|       }d}t        | |||      \  }}}}t        t        ||d d |||       t        t        |||d d ||       |rt        t        ||||d d |       y y )Nr  rC  r   rv   r   rK  )r   r'   rA  r  rP  )	r1   r;  r<  rC  r   rp   r  r  r@  s	            r3   "test_pteqr_raise_error_wrong_shaperP  	  s     	Hge4E
A"5(AyAJAq!Q*eQsVQ!yI*eQ#2!yIj%A3B9M r5   c                     t        d       t        d|       }d}t        | |||      \  }}}}d|d<   d|d<    |||||      \  }	}
}}|dkD  sJ y )Nr  rC  r   rv   r   rK  rL  rM  s                r3   test_pteqr_error_singularrR  	  sj     	Hge4E
A"5(AyAJAq!QAaDAaD&+AqA&K#GWgt!8O8r5   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                 b   d}t        d|j                        }t        j                  |      t        j                  |d      z   t        j                  |d      z   } |||||       \  }}	}
}t	        |||       t	        t        j
                  |
      t        j
                  |      |       y)	zb
    Implements real (f08jgf) example from NAG Manual Mark 26.
    Tests for correct outputs.
    r  rC  r   rP   r   rD  r  N)r'   r1   r7   r2  r   r   )r<  rp   r  r6  z_expectr/  rC  r@  r  r%  _zri   s               r3   test_pteqr_NAG_f08jgfrV  	  s      Dgagg6E

RWWQ]"RWWQ^3AqAi@BBBt,BFF2Jx 0t<r5   matrix_size)r   )rV   rU   rU   rU   c                    t         j                  j                  d      }dt        j                  |       j                  z  }dt        j                  |       j                  z  }t        d|       }t        d|       }|\  }}t        ||f| |      }	 ||	      \  }
}}t        j                  |
      }||kD  r3t        j                  ||f|       }|
|d d d |f<    ||||      d	   }n ||
d d d |f   ||      d	   }t        ||z  |	|
       t        t        j                  |j                  d	         ||j                         j                  z  ||       t        |t        j                  |      |
       t        t        j                  t        j                   |      t        j                  t#        t        j                   |                  kD               t        |d	k(         t        ||f| |      dz  }t%        |      \  }} ||      \  }}}t        t        j&                  t        j                   |      d	k        xr+ t        j                  t        j                   |      d	kD               y )Nr     r-  geqrfpr   orgqrr  )rs   r   r   r   rO  r   )r7   r  rX  r   r   r'   r4   r   r   r   r   r0   r  ry   r   allr2  r_   r   r6  )r1   rW  r2   r   r/  r[  gqrr   r   r  qr_Ars   ri   r  qqrr  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                         r3   test_geqrfprg  	  s    ))


#Crxx"""Drxx"""Dx6F
GE
2CDAq 	$QF%SAAQiOD#t 	A
 	1u hh1vU+ArrE
 A&q)QUA.q1 AaC&BFF1771:&1668::T Arwwqz-BFF2771:RWWQZ 99:;DAI -aV5cJROJJHh"("4Hgx BFF2778$q() #FF2771:>"$r5   c                  ~    t        j                  g       } t        d| j                        }t	        t
        ||        y )Nr[  r   )r7   r   r'   r1   r  r  )A_emptyr[  s     r3   #test_geqrfp_errors_with_empty_arrayrj  	  s+    hhrlGhgmm<F)VW-r5   driver)evevdevrevxpfxsyhec                 "   d}| dk(  rt         nt        }t        | |z   dz   |d         }t        | |z   dz   |d         }	 t        ||d       t        ||d       y # t        $ r'}t        j                  | |z    d|        Y d }~y d }~ww xY w)	N  rq  _lworkr   r   rP   r  $_lwork raised unexpected exception: r   r.   r'   r"   r  rA   failrp  rk  r   r1   sc_dlwdz_dlwr  s          r3   test_standard_eigh_lworksr|  
  s     	A$;KNEc&j1qBFc&j1qBFLvq*vq* Ls6zl"FqcJKKL   A 	B'B		Bgvgvxc                 "   d}| dk(  rt         nt        }t        | |z   dz   |d         }t        | |z   dz   |d         }	 t        ||d       t        ||d       y # t        $ r'}t        j                  | |z    d	|        Y d }~y d }~ww xY w)
Nrt  rq  ru  r   r   rP   rJ  r<  rv  rw  ry  s          r3   test_generalized_eigh_lworksr  
  s     	A$;KNEc&j1qBFc&j1qBFLvqs+vqs+ Ls6zl"FqcJKKLr}  dtype_r   )rP   rv   r-  r  c                     t        d       t        d|      }||z
  }| t        v rdnd}|dz   }t        ||       }t	        ||||      }|dk(  r|n|f}t        |D cg c]  }|dkD  	 c}      sJ y c c}w )Nr   r   orun	csd_lworkr   )r   r   r   r'   r"   r]  )	r  r   rc   r  rp  dlwrv  lwvalr   s	            r3   test_orcsd_uncsd_lworkr  #
  s     	J1A	AAK'$TC

C	#V	,B2q!Q'ED[EuhEu%!A%&&&%s   A2c           
         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         y )N)rZ  P      r  r  csdr  r   r   lrworkr   r   r  g     @rO  )r   r#   rvsr$   r'   r"   dictr  r   r\  r7   r   r5  cosr  r   r   r   )r  r   rc   r  rp  Xdrvr  r  lwvalscs11cs12cs21cs22thetau1u2v1tv2tri   rT  VHr  n11n12n21n22SonerA  Xcs                                  r3   test_orcsd_uncsdr  1
  s_   GAq!K'$TC!Tk}/@/@/CAucK.? @OHC31a(E!$gu$sG<D<FGL8N 3OF 	Abqb"1"fIq!QRy!ABF)Qqr12vYA&A :D$dE2r3T 1992rA	C	BC1Is1Q3!}%A
a)a-C
a1+/C
ac1+/C
ac1Q3-!
C
!Qv&A
*C3Z !Q$3Z !A#qs(3Z -),!C%'1S573;s?1$
$%-3Z $ #!C%'!)SU1W
$ 1X -&&q*!C%3,"$&&q"2!C%'1Q3s73;
%'VVE!H%5$5!C%3s3q
 !FF58,!C%'1S5.- 
QBArRXXf-=-A-A)ABr5   
trans_boolFfactr>  c                     t         j                  j                  d      }dt        j                  |       j                  z  }t        d|       \  }}d}t        |dz
  f| |      }t        |f| |      }	t        |dz
  f| |      }
t        j                  |d      t        j                  |	      z   t        j                  |
d      z   }t        |d	f| |      }|r| t        v rd
ndnd}|r|j                         j                  n||z  }|j                         |	j                         |
j                         |j                         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           y)aS  
    These tests uses ?gtsvx to solve a random Ax=b system for each dtype.
    It tests that the outputs define an LU matrix, that inputs are unmodified,
    transposal options, incompatible shapes, singular matrices, and
    singular factorizations. It parametrizes DTYPES and the 'fact' value along
    with the fact related inputs.
    r  r-  gtsvxr  r   rv   rP   r  r   rQ   ry   r|   rS  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 )r7   r  rX  r   r   r'   r4   r2  r   r  ry   r  r   r	   r   r   r0   )!r1   r  r  r2   r/  r  r  r   r  rp   r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr  ferrberrri   s!                                    r3   
test_gtsvxr  `
  s    ))


#C%$$$D#$6eDLE5
A	$acV5c	BB#QD3?A	$acV5c	BB
B"''!*$rwwr1~5A#QF%SAA6@E[(SccE!qA-A '')QVVXrwwy!&&(;J !CKb!RdVAX )D#tUE5 b!RUE7I@I=CS$feT4DAIv-=>? r:a=)q*Q-(r:a=)q*Q-( AvD) GE9%T1,UG46 DJJqMQWWQZ'N4::a=/ J112+> @ DJJqMQWWQZ'N4::a=/ J112+> @r5   c                 ,   t         j                  j                  d      }t        d|       \  }}d}t	        |dz
  f| |      }t	        |f| |      }t	        |dz
  f| |      }	t        j
                  |d      t        j
                  |      z   t        j
                  |	d      z   }
t	        |df| |      }| t        v rd	nd
}|r|
j                         j                  n|
|z  }|dk(  r
 ||||	      nd gdz  \  }}}}}} ||||	||||||||      }|\
  }}}}}}}}}}|dk(  r/d|d<   d|d<    ||||	|      }|\
  }}}}}}}}}}|dkD  sJ d       y |dk(  r;d|d<   d|d<   d|d<    ||||	|||||||
      }|\
  }}}}}}}}}}|dkD  sJ d       y y )Nr  r  r   rv   rP   r  r   rQ   ry   r|   r>  rU   r  rS  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r  )	r7   r  rX  r'   r4   r2  r   r  ry   )r1   r  r  r2   r  r  r   r  rp   r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ri   s                                  r3   test_gtsvx_error_singularr  
  s    ))


#C#$6eDLE5
A	$acV5c	BB#QD3?A	$acV5c	BB
B"''!*$rwwr1~5A#QF%SAAK'CSE!qA-A !CKb!RdVAX )D#tUE5 b!RUE7I@I=CS$feT4 s{"2"aQ'	DMARdD&%tTaxAAAx	BRb	"aQTt#%1	DMARdD&%tTaxAAAx 
r5   c                     t         j                  j                  d      }t        d|       \  }}d}t	        |dz
  f| |      }t	        |f| |      }t	        |dz
  f| |      }	t        j
                  |d      t        j
                  |      z   t        j
                  |	d      z   }
t	        |df| |      }| t        v rd	nd
}|r|
j                         j                  n|
|z  }|dk(  r
 ||||	      nd gdz  \  }}}}}}|dk(  r}t        t        ||d d ||	||||||||       t        t        |||d d |	||||||||       t        t        ||||	d d ||||||||       t        t        ||||	|d d |||||||       y t        t        ||||	||||d d ||||       t        t        ||||	|||||d d |||       t        t        ||||	||||||d d ||       t        t        ||||	|||||||d d |       y )Nr  r  r   rv   rP   r  r   rQ   ry   r|   r>  rU   rS  r  )r7   r  rX  r'   r4   r2  r   r  ry   r  rP  r  )r1   r  r  r2   r  r  r   r  rp   r  r  r   r   r   r  r  r  r  r  r  s                       r3   "test_gtsvx_error_incompatible_sizer  
  s]    ))


#C#$6eDLE5
A	$acV5c	BB#QD3?A	$acV5c	BB
B"''!*$rwwr1~5A#QF%SAAK'CSE!qA-A !CKb!RdVAX )D#tUE5 s{j%CR!Ru$3E	7 	j%QsVRu$3E	7 	j%Q3Bu$3E	7 	iAr1Sb6u$3E	7 	j%QAu$s)E	7 	j%QAu$3s8E	7 	j%QAu$3s)U	< 	j%QAu$3E#2JU	<r5   zdu,d,dl,b,xc           
      z    t        d|j                        } |||| |      }|\
  }}}	}
}}}}}}t        ||       y )Nr  r   r'   r1   r   )r  rp   r  r   r   r  r  r  r  r  r  r  r  r  r  r  ri   s                    r3   test_gtsvx_NAGr    sH    . WAGG4Eb!R#I@I=CS$feT4a(r5   zfact,df_de_lambdac                 >     t        d|j                        | |      S Nr!  r   r'   r1   rp   r  s     r3   <lambda>r  &  '     )H(8?@ww)HHI1)N r5   c                      yN)NNNr   r  s     r3   r  r  (      r5   c                    t         j                  j                  d      }dt        j                  |       j                  z  }t        d|       }d}t        |f||      dz   }t        |dz
  f| |      }	t        j                  |      t        j                  |	d      z   t        j                  t        j                  |	      d      z   }
t        |d	f| |
      }|
|z  } |||	      \  }}}|j                         |	j                         |j                         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       y)a  
    This tests the ?ptsvx lapack routine wrapper to solve a random system
    Ax = b for all dtypes and input variations. Tests for: unmodified
    input parameters, fact options, incompatible matrix shapes raise an error,
    and singular matrices return info of illegal value.
    r  r-  ptsvxr   rT   rS   rP   r   rQ   r  r  r  efr   zinfo should be 0 but is .r  r  r  )rQ   r  z# but should be ({x_soln.shape[1]},)r  N)r7   r  rX  r   r   r'   r4   r2  r  r  r	   r   r   r   r   ry   r   r0   )r1   r;  r  df_de_lambdar2   r/  r  r   rp   r  r  r  r   r  r  ri   r  r   r  r  r  rJ  rw  s                          r3   
test_ptsvxr  "  s-    ))


#C%$$$DWE2E	A#QD(C81<A#QqSFE37A

RWWQ^#bggbggaj!&<<A(!Qu#FF	F
A  1%LBD !&&(AFFH-H */q!QT24*=&BAudD$ q(1+&q(1+&q(1+&DAI1$q9:fa( 	B"''"''!*--A
AAqsBGGAJLL)5 ui( 1
(01( DJJ$>$** >8 "8 : DJJ$>$** >8 "8 :r5   c                 >     t        d|j                        | |      S r  r  r  s     r3   r  r  a  r  r5   c                      yr  r   r  s     r3   r  r  c  r  r5   c           
      0   t         j                  j                  d      }t        d|       }d}t	        |f||      dz   }t	        |dz
  f| |      }t        j
                  |      t        j
                  |d      z   t        j
                  t        j                  |      d      z   }	t	        |df| |	      }
|	|
z  } |||      \  }}}t        t        ||d d |||||
       t        t        |||d d ||||
       t        t        ||||d d |||
       y )Nr  r  r   rT   rS   rP   r   rQ   r  r  )
r7   r  rX  r'   r4   r2  r  r  rP  r  )r1   r;  r  r  r2   r  r   rp   r  r  r  r   r  r  ri   s                  r3   test_ptsvx_error_raise_errorsr  ]  s    ))


#CWE2E	A#QD(C81<A#QqSFE37A

RWWQ^#bggbggaj!&<<A(!Qu#FF	F
A  1%LBD *eQsVQK*eQ#2K)UAq!CR&trJr5   c                 >     t        d|j                        | |      S r  r  r  s     r3   r  r  |  r  r5   c                      yr  r   r  s     r3   r  r  ~  r  r5   c                    t         j                  j                  d      }t        d|       }d}t	        |f||      dz   }t	        |dz
  f| |      }t        j
                  |      t        j
                  |d      z   t        j
                  t        j                  |      d      z   }	t	        |df| |	      }
|	|
z  } |||      \  }}}|d
k(  r]d|d<    |||      \  }}} ||||      \  }}}}}}}|dkD  r||k  sJ t	        |f||      } ||||      \  }}}}}}}|dkD  r||k  sJ y  |||      \  }}}d|d<   d|d<    |||||||      \  }}}}}}}|dkD  sJ y )Nr  r  r   rT   rS   rP   r   rQ   r  rS  r   rR   r  )r7   r  rX  r'   r4   r2  r  )r1   r;  r  r  r2   r  r   rp   r  r  r  r   r  r  ri   r   r  r  r  s                      r3   test_ptsvx_non_SPD_singularr  x  s    ))


#CWE2E	A#QD(C81<A#QqSFE37A

RWWQ^#bggbggaj!&<<A(!Qu#FF	F
A  1%LBDs{!#Aq)B-21a^*B5$daxDAI%% (h<-21a^*B5$daxDAI%%I $Aq)B11-21a68R.A*B5$daxxr5   zd,e,b,xc                 n    t        d|j                        } || ||      \  }}}}}	}
}t        ||       y )Nr  r   r  )rp   r  r   r   r  r  r  x_ptsvxr  r  r  ri   s               r3   test_ptsvx_NAGr    s:    . WAGG4E/4Q1~,BGUD$a)r5   r  c           	         t         j                  j                  d      }t        j                  |       j                  dz  }d\  }}t        ||g| |      }t        ||g| |      }|j                         j                  |z   t        j                  ||        | d      z  z   }|rYt        |      D 	cg c]  }t        ||      D ]  }	|	  c}	}t        |      D 	cg c]  }t        ||      D ]  }	|  c}	}f}
nat        d|dz         D 	cg c]  }t        |      D ]  }	|	  c}	}t        d|dz         D 	cg c]  }t        |      D ]  }	|dz
  	  c}	}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                   j#                  |d      } |||||      \  }}t        |d       t%        t'        d|z  t         j                   j)                  |d      z
        |z  dk         y c c}	}w c c}	}w c c}	}w c c}	}w )Nr   r-  )rv   rS   r  r   r   rP   )ppsvpptrfpptrspptrippconr  r  r  r   rO  )r  r  r   )r7   r  rX  r   r   r4   r  ry   r   r5  r'   r   r   r   r   r   r  r   r   r   r  )r1   r  r2   r/  r   r   ra   r   yr   rR  apr  r  r  r  r  ulri   aululiaulibxxvr  r  s                             r3   !test_pptrs_pptri_pptrf_ppsv_ppconr    s    ))


%C88E?s"DGAt#QF%SAA#QIUDA	

Q/%);;A!!H:qeAqk:::!!H:qeAqk:::< "!QqSM<q58<a<<#Aqsm>U1X>1>>@	
4B'74($D%u
 Q%(HBq
1E
"4
(CB!$/a5)ICqq6$<DCAD1Ar1E*GAtq	q!BAr-Ar1E*HBqB.IINN1a E2U%8KE4qC%"))..a.001%7!;<C ;:<>s   5K KK Kc                    t         j                  j                  d      }t        j                  |       j                  dz  }d}t        ||g| |      }t        d|       \  }} |d |d	      }t        |d
   d       |d   }|d   }	|d   }
| t        v r"t        |t        j                  |      d|       t        |	|z  |	j                         j                  z  |d|        |||	dd      }t        |d
   d       |d   }|d   }	| t        v r"t        |t        j                  |      d|       t        |	|z  |	j                         j                  z  |d|       t        |d   |
d|       y )Nr   r-  rv   r  )geestrexcr   c                      y Nr   r   s    r3   r  z!test_gees_trexc.<locals>.<lambda>  r  r5   Fr  r   r   rH  rX  rO  rV   rP   r  r   r7   r  rX  r   r   r4   r'   r   r.   r   r   r  ry   )r1   r2   r/  r   ra   r  r  r  r  r@  d2s              r3   test_gees_trexcr    sM   
))


%C88E?s"D
A#QF%SAA"#4EBKD%.!7FQq	Ar
A	
4B2771:AD9AEAFFHJJ&=1aAFQq	Ar
A2771:AD9AEAFFHJJ&=AdGRad3r5   zt, expect, ifst, ilst)r  g)\({Gz?gQ?)r  皙r  ffffff?)r  gr  g?)r  r  r  r  )r  lV}gV_?g|?5^?)g?r  gV/?g;On?)r  r  r  ggj+)            y
ףp=
?
ףp=
׿yRQȿQ?y)\(?      п)r               @yQ
ףp=
yq=
ףpͿp=
ף?)r  r         @      yGz?(\?)r  r  r        @      )r   y1%Ŀq?ys??ܵ|ȿyHzG??ܵ?)r  r  yV/?ݓ?yjt?vտ)r  r  r  yB>٬?=U?)r  r  r  r  c                     d}t        d| j                        } || | ||d      }t        |d   d       |d   } t        || |       y)	zg
    This test implements the example found in the NAG manual,
    f08qfc, f08qtc, f08qgc, f08quc.
    r  r  r   r   )wantqr   r  N)r'   r1   r   r   )r  ifstilstexpectr/  r  r  s          r3   test_trexc_NAGr    sN    < DWAGG4E1at1-FQq	AFAD)r5   c                    t         j                  j                  d      }t        j                  |       j                  dz  }d}t        ||g| |      }t        ||g| |      }t        d|       \  }} |d ||dd	      }t        |d
   d       |d   }	|d   }
|d   }|d   }|	d   |
d   z  }|	d   |
d   z  }| t        v rDt        |	t        j                  |	      d|       t        |
t        j                  |
      d|       t        ||	z  |j                         j                  z  |d|       t        ||
z  |j                         j                  z  |d|        ||	|
||dd      }t        |d
   d       |d   }	|d   }
|d   }|d   }| t        v rDt        |	t        j                  |	      d|       t        |
t        j                  |
      d|       t        ||	z  |j                         j                  z  |d|       t        ||
z  |j                         j                  z  |d|       t        |	d   |
d   z  |d|       t        |	d   |
d   z  |d|       y )Nr   r-  rv   r  )ggestgexcr   c                      y r  r   r  s    r3   r  z!test_gges_tgexc.<locals>.<lambda>J  r  r5   Fr)  overwrite_br   r   rP   r  rH  r   rX  rO  rV   rQ   rR   r  r  )r1   r2   r/  r   ra   r   r
  r  r  r   r  r  r@  d1r  s                  r3   test_gges_tgexcr  ?  s8   
))


%C88E?s"D
A#QF%SAA#QF%SAA"#4EBKD%.!QEuMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=1aAq!$FQq	Aq	Aq	Aq	A2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r5   c                 j   t         j                  j                  d      }t        j                  |       j                  dz  }d}t        ||g| |      }t        d|       \  }}} |d |d	      }t        |d
   d       |d   }	|d   }
|	d   }| t        v r"t        |	t        j                  |	      d|       t        |
|	z  |
j                         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                         j                  z  |d|       t        |	d   |d|       y )Nr   r-  rv   r  )r  trsentrsen_lworkr   c                      y r  r   r  s    r3   r  z!test_gees_trsen.<locals>.<lambda>z  r  r5   Fr  r   r   rH  rX  rO  rP   rU   r   r   liworkr   r7   r  rX  r   r   r4   r'   r   r.   r   r   r  ry   r   r"   )r1   r2   r/  r   ra   r  r  r  r  r  r@  r  selectr   s                 r3   test_gees_trsenr  o  s   
))


%C88E?s"D
A#QF%SAA/( 7D% .!7FQq	Ar
A	
4B2771:AD9AEAFFHJJ&=XXa[FF1I;2Evq!51vq!5qBQq	Aq	A2771:AD9AEAFFHJJ&=AdGRad3r5   z*t, q, expect, select, expect_s, expect_sep)g/$?gQIg~jtx?gJ4?)r  58EGrgGr?gyX5;?)r  g?߾r  gt?)r  r  r  gyǹ)g؁sF?g_L?gGz?gUN@?)goT?g0*g'gz6>W)g(g&䃞ͪӿgbX9ҿg-!lV?)gb=y?gۊe?r  g8EGr?)r  g?gQg(\ſ)g
ףp=
?gQ?r  r  )g)\(ܿgQտgQg(\?)r  g{GzԿgp=
ףg)\(?)rP   r   r   rP   g      ?g(\	@)yqh yfc]F?ڊe׿yMbȿ&S?y&1??п)r  y      ?5^I @yo0*yZd;OͿ~:p?)r  r  yx$(@4@y[ A?&?)r  r  r  y?ܵ@St$)y?ܵ꿽R!uy2U0*6[?yV-?=yXy8m4?1%̿)ySt$?\mҿyʡE?S㥛?y~:p	cڿyK7A`?[ A?)y:pΈ~jtԿyH}?9#J{yH}?	cZy+eXw?-ٿ)y"u?	c?y?տN@ayRQȿ{GzĿyh"lxz?EGrǿ)y47)yS!uqF%u@yyտGx$(?y3ı.n?rh|)yv?
F%uyd`TR?I&ۿyN@?ݓy4@
@	^)?)ys{
@ o_yH.@|Pk@y0*?*:Hy]m{?Gz)y)0[<?yI.!? ryqh 
@ׁsF?y1w-!?h ogRQ?gK?c                    d}d}t        d| j                        \  }}	t        |	||       }
| j                  t        v r ||| ||
      }n ||| ||
|
d         }t	        |d   d	       |d	   } |d   }| j                  t        v r|d
   }|d   }n
|d   }|d   }t        ||| z  |j                         j                  z  |       t        |d|z  |       t        |d|z  |       y)zW
    This test implements the example found in the NAG manual,
    f08qgc, f08quc.
    r  r  )r  r  r   r   rP   r  r   r   rS   rT   rU   r  N)r'   r1   r"   r.   r   r   r  ry   )r  r  r  r  expect_s
expect_sepr/  atol2r  r  r   r  r   seps                 r3   test_trsen_NAGr     s    ` DE) 1E; ;2Eww. vq!51vq!5qBQq	Aq	Aww. 1IQi1IQiFAEAFFHJJ.T:Ha!e%0JCe4r5   c                 >   t         j                  j                  d      }t        j                  |       j                  dz  }d}t        ||g| |      }t        ||g| |      }t        d|       \  }}} |d ||dd	      }	t        |	d
   d       |	d   }
|	d   }|	d   }|	d   }|
d   |d   z  }|
d   |d   z  }| t        v rDt        |
t        j                  |
      d|       t        |t        j                  |      d|       t        ||
z  |j                         j                  z  |d|       t        ||z  |j                         j                  z  |d|       t        j                  |      }d|d<   t        |||
|      }|d   dz   |d   f} |||
||||      }	t        |	d
   d       |	d   }
|	d   }|	d   }|	d   }| t        v rDt        |
t        j                  |
      d|       t        |t        j                  |      d|       t        ||
z  |j                         j                  z  |d|       t        ||z  |j                         j                  z  |d|       t        |
d   |d   z  |d|       t        |
d   |d   z  |d|       y )Nr   r-  rv   r  )r
  tgsentgsen_lworkr   c                      y r  r   r  s    r3   r  z!test_gges_tgsen.<locals>.<lambda>  r  r5   Fr  r   r   rP   r  rH  r   rX  rO  rU   r   ir  r  r  )r1   r2   r/  r   ra   r   r
  r"  r#  r  r   r  r  r@  r  r  r  r   s                     r3   test_gges_tgsenr%    s}   
))


%C88E?s"D
A#QF%SAA#QF%SAA/( 7D% .!QEuMFQq	Aq	Ar
Ar
A	
41T7	B	
41T7	B2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=XXa[FF1I;15E 1XaZq"E61aAU3FQq	Aq	Ar
Ar
A2771:AD92771:AD9AEAFFHJJ&=AEAFFHJJ&=AdGag%r=AdGag%r=r5   za, b, c, d, e, f, rans, lans)r   r   r   r   )r  r%  r   r   )r  r   r%  r   )r  r  r  g      @)r   r   r   r   )r  r  r  r   )      r   r   g      (@)g      "r          r'  )r&  r   r'  r   )      r   r  g      3@)r   r   r   r%  )r  r   r   r   )r  r  r   r   )r  r  r  r   )r   r   r   r   )r  r   r   r   )r  r  r  r   )r(  r   r  r   )r  r   g       r  )r  r         r   )r)  r   r  r   )r  r   r  r  )r  r   r%  r   )r  r   r  r   )r   r  r   r  )r   r%  r  r   )r  r   r   r  )r   r  r   r   c	                 \   d}	t        d|      }
 |
| |||||      \  }}}}}t        |d       t        |ddt        j                  |      j
                  dz  d       t        |d	dt        j                  |      j
                  dz  d
       t        |||	d       t        |||	d       y )Nr  tgsylr   r   r   r-  zSCALE must be 1.0r   r/  r"  r  zDIF must be nearly 0zSolution for R is incorrect)r/  r"  zSolution for L is incorrect)r'   r   r   r7   r   r   )ra   r   r   rp   r  rd   ranslansr1   r/  r+  routloutr\   difri   s                   r3   test_tgsyl_NAGr2  !  s    H Dge4E#(Aq!Q#: D$sDqE3QRXXe_-@-@-D/1C1288E?+>+>s+B24D$T9;D$T9;r5   r   )rS  ry   ijob)r   rP   rQ   rR   rS   c           
         | t         j                  k(  rdnd}t         j                  j                  d      }d\  }}t	        |j                  dd||g      j                  |       |j                  dd||g      j                  |       d      ^}}}	t	        |j                  dd||g      j                  |       |j                  dd||g      j                  |       d      ^}
}}	|j                  d	d
||g      j                  |       }|j                  d	d
||g      j                  |       }t        d|       } |||
||||||      \  }}}}}|dk(  sJ d       |dk\  sJ d       |dk(  r1t        |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  }nt|dk(  rot        j                  |      |z  t        j                  |      |z  z   }||z  }|t        j                  |
      z  |t        j                  |      z  z   }d|z  |z  }t        |dd       t        |dd       y y )NgMbP?g|=l   OElt/ r  irv   r   )outputr  rQ   r+  r   )r   r3  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-negativerS  ry   r  zlhs1 and rhs1 do not match)r/  r   r"  zlhs2 and rhs2 do not match)r7   r  r  r  r!   uniformr/   r'   r   r   r   r  )r1   r   r3  r/  r2   r   r   ra   rp   r?   r   r  r   rd   r+  r/  r0  r\   r1  ri   lhs1rhs1lhs2rhs2s                           r3   
test_tgsylr;  U  s   
 BJJ&4ED
))

 0
1CDAq#++c21v.55e<++c21v.55e<!HAq1 #++c21v.55e<++c21v.55e<!HAq1 	BAq6"))%0ABAq6"))%0Age4E#(Aq!Q/44$A D$sD 19(((9C<555<qySqrxx/B/B3/F ;	= cz555z qyC<t8dQh&D7Dt8dQh&D7Dc\<<?T)BLLOd,BBD7D",,q/)D2<<?,BBD:a<DdB <	>dB <	> r5   mtyper  c                    | dk(  r|t         v rt        j                  d       t        j                  j                  d      }d\  }}|t        v r<|j                  ||f      |j                  ||f      dz  z   j                  |      }n#|j                  ||f      j                  |      }| dk(  r||j                  z   n||j                         j                  z   }|j                  ||f      j                  |      }|  d|  d	|  d
f}t        ||      \  }	}
} |
||      } |	||      \  }}}|dk(  sJ  ||||      \  }}|dk(  sJ t        j                  |      j                  }t        ||z  |d|z  |z         y )Nrr  zhetrs not for real dtypes.l   *M/t|0 )r   rT   r  r-   rq  rt  ru  trsr   r  r   r   )ra   r  r   r-  r  )r   rA   rB   r7   r  r  r.   r6  r/   ry   r  r'   r   r   r   )r<  r1   r  r2   r   r   r  r   rI   rt  ru  r>  r   r  r  ri   r   r   s                     r3   test_sy_hetrsr?    s    }+-01
))

 0
1CGAt[[q!f[%!Q(@(CCKKERKKaVK$++E2D=ACCa!&&(**nA!T#**51AgSMeWI.5'=E*5>CCau%E!5)OCt199Cda(GAt199
((5/

CAaCQs+r5   r   z
uplo, m, n))rT  rT   rv   )rT  rv   rv   )rJ  rv   rT   )rJ  rv   rv   c                    t         j                  j                  d      }|j                  ||f      j                  |      }t	        d|f      \  }}	 || |||      }
|dk(  rt        j
                  |      nt        j                  |      }|dk(  r&t        j                  t        ||            }d|||f<    |	| |      }t        |
|d       y )	Nl   8#q9
r  )lantrr   )rM  r2  rT  rP   g>r   )
r7   r  r  r/   r'   r   r   r  r\  r   )r   rM  r   r   r2  r1   r2   r  rA  r   rB  rA  r   s                r3   
test_lantrrB    s     ))

 1
2C

A
&&u-A#$6=LE5
ad
.C ck
rwwqzAs{IIc!Qi !Q$
a.CC4(r5   r+  )	functoolsr   r  numpy.testingr   r   r   r   r   r	   rA   r
   r  numpyr7   r   r   r   r   r   r   r   r   numpy.randomr   r   r   scipy.linalgr   r9   r   r   r   r   r   r   r   r   r   r    r!   scipy.linalg.lapackr"   scipy.statsr#   r$   scipy.sparsesparserY  scipy.__config__r%   ImportErrorr&   r8   r'   scipy.linalg.blasr(   r  r8  r   r  
complex128r.   r   blas_providerblas_versionr4   rL   rN   r   r   rs  rt  r  r  r  r#  rE  r  r  r  r  r  r  r  r  r  r  r  r!  r*  r9  rL  rU  r[  rb  rg  ro  ry  r{  r  r  r  r  skipifr  r  r5  r  r  r  r   r  r  r  r  r  r  r'  r)  r+  r9  rA  rI  rN  rP  rR  rV  rg  rj  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r%  r2  r;  r?  rE   rB  r   r5   r3   <module>rS     s  
  / /  * ! ! ! - ,F F F F / 2 '0 1 ,zz2::&,,.	~	%# #	/08@M./7	BL*O.]- ]-@
 
p9 p9f &)"BC D *- -*C C(; ;@J/ J/\ &)1#s,#s,q"g& ) ' - - 2 *
 )F).'4T'6T48AG AGHL L^.?bA63>1>FD&DR7!t7:t&8R36D@"DJD4 LFUK UKp%PP%PP*/Z< DK  MKMK$:> &&!12+.q*q*q*!Q(!Q(b& ) ) + + + / 3b&J +.  / F (!1+!1+!1+!1+!1+!1+'11 9#288%?%?%@%=%?%?%A B $288$DE#288%G%F%E%H%G%G%I J $288%G%H%F%G%I JK LM$,%M$,  &)XK *XKv L#288$9:%RXX&@A%RXX&;<%RXX&9:%RXX&BC%RXXl3%RXXo6%RXXSz(,d|(+T{(+U|(+T{	') * &RXXAw()2w()2w(*Bx(*Aw	'0 12& &RXX&GH%RXX '4 5 &RXX&FG%RXX 'A B%RXX ': ;%RXX&?@%RXXo6%RXX*'=(3\'B(4i'@(3['A(1:'>	'@ A
 &RXX'7(.'7(.'8(/'8(.'7	'9 :%%)* V W* V ( &)1q"g&) ' 2 *)2 &)"BC D * [;6?A,&A,&^ [;6?A0A0 [;6?AMAM& A""((#56""((?3""((#45""((#89""((QGaVaVb"X%&G$- .""((S!Hq"g2wQ%&G$- . #"((#34""((#>?""((=1""((#56""((VW$57G%+V$4vv6F$H I""((T5MD$<$%)4L$2 3	E &1'&1.@ )V[;%>?AeAh/& 0A&< )V[;%>?AeAh/	 0A	 )V[;%>?AeAh/	N 0A	N )V[;%>?AeAh/	 0A	 :#288$;<#288$56#288$DE#288%F%G%G%F%H I	J 	=	= &)(@A=$ B *=$@. #>?t-	L . @	L D%=1t-
L . 2
L 6*01	' 2 +	' 6*+C ++C\ &)t}5#s,7@ - 6 *7@t &)1v.#s,-B - / *-B` &(+t}5#s,-< - 6 ,-<` #288$9:#288$?@#288$9:#288c3Z#tsDk&(%[3+%? @#288b!Wq"g2wR&(!W%. /0 $288$EF#288 %> ?#288$DE#288h
%;&1;%?&2H%=&1;%?&/%<	%> ?
 $288ff%57G&,g%6&8I&,f%5%7 89:;());() )3v{1<8= ,> ?,NO  ?@BC
1:C?1:h )3v{1<8= ,> ?,NO  ?@BC
KC?K( )3v{1<8= ,> ?,NO  ?@BC
"C?"J #288$67#288O4#288aWq!fq!fr2h&'W%. /#288c1X2wB&(!Wq"g%7 8	9 $288$45#288$?@#288h	%:&.%9&.%9&.%9%; < $288fg%6&,f%5&,f%5&,f%5%7 8	9:;"
*#;"
* 5$-0&)+= * 1+=\ &)!4 *!4H bhh))*)+ , bhh21113 4  bhhJKHHJ K bhh 55567 8 0*10*  &),> *,>^ &)*4 **4Z 0bhh11213 4 bhh03313 4 bhh21324 5 bhh| bhh 67556 7 bhh 56567 8 bhh 65556 7 bhh|3')T5U)T5B &)5> *5>p "bhh((((* + bhh((((* + bhh((((* + bhh((((* + bhh((((* + bhh((((* + bhh((((* + bhh((((* +9, -!.D +.; /E!.F;" +.*-1-> 2 . /->` 4,/&)&), * * 0,. m!45 (E F#s,&)) * -F 6
)Ul  F
  Gs.   8AT ?AT# TAT TAT T#AT.T-AT.