
    >qj!                    4-   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mZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d d	l'm(Z(m)Z) d d
l*m+Z+ d dl%m,Z, d dl-m.Z. d dl/m0Z0 dxZ1Z2e0d   d   d   Z1e0d   d   d   Z2ejf                  ejh                  gZ5ejl                  ejn                  gZ8e5e8z   Z9d Z:d Z;d Z< G d d      Z= G d d      Z>e
j~                  j                  de9      e
j~                  j                  dg d      d               ZA G d d      ZB G d d       ZC G d! d"      ZD G d# d$      ZEe
j~                  j                  de9      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      d/                                    ZFd0 ZGd1 ZHd2 ZId3 ZJ G d4 d5      ZK G d6 d7      ZLd8 ZMd9 ZNd: ZOd; ZPd< ZQd= ZRd> ZSd? ZTd@ ZUdA ZVdB ZWdC ZXdD ZYdE ZZ G dF dG      Z[dH Z\dI Z]dJ Z^dK Z_e
j~                  j                  dLdMN      dO        ZadP Zbe
j~                  j                  dQdRdSg      e
j~                  j                  de5      e
j~                  j                  dT ec eddU                  e
j~                  j                  dV ec eddW                  e
j~                  j                  dX ec eddW                  e
j~                  j                  dYd dZg      e
j~                  j                  d[d dZg      dfd\                                                 Zee
j~                  j                  de5      d]        Zfe
j~                  j                  d^dTd_idVd_idXd_idYd_id`d_id[d_if      da        Zge
j~                  j                  db ej                  g dcg ddg deg dfg dgg dhg       ej                  g di       ej                  g djg dkg dlg dmg dng dog       ej                  g dpg dqg drg dsg      fg      dt        Zie
j~                  j                  de9      du        Zje
j~                  j                  dv ej                  g 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                  d~dgddgddgddgd~dgg       ej                  ddgddgd-dgddgddZg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        Zke
j~                  j                  de9      e
j~                  j                  d%g d      e
j~                  j                  d,d-d.g      d                      Zle
j~                  j                  de9      e
j~                  j                  dg d      d               Zme
j~                  j                  d ec ene5e5z   e9                  d        Zoe
j~                  j                  d ec ene5e5z   e9                  d        Zpe
j~                  j                  d ec ene5e5z   e9                  d        Zqe
j~                  j                  d ej                  g d       ej                  g d       ej                  g d       ej                  g d       ej                  dUd.gd_dWgdd_gddgddgg       ej                  ddgddgdZdgddUg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Ʉ        Zrdʄ Zse
j~                  j                  d ec ene9e5e5z                     e
j~                  j                  d ec edd-                  d̈́               Zte
j~                  j                  d ec ene9e5e5z                     e
j~                  j                  d ec edd-                  d΄               Zue
j~                  j                  d ec ene9e5e5z                     e
j~                  j                  d ec edd-                  dτ               Zve
j~                  j                  d ec ene9e5e5z                     e
j~                  j                  d ec edd-                  dЄ               Zwe
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ل        Zxe
j~                  j                  de9      e
j~                  j                  dg dۢ      d܄               Zyd݄ Zze
j~                  j                  dg dߢ      e
j~                  j                  dddg      d               Z{e
j~                  j                  dddg      e
j~                  j                  dddg      d               Z|e
j~                  j                  de9      e
j~                  j                  dg d      d               Z}e
j~                  j                  de9      d        Z~e
j~                  j                  de9      e
j~                  j                  dddLg      e
j~                  j                  ddd+g      d                      Ze
j~                  j                  de9      e
j~                  j                  dd dZg      e
j~                  j                  ddd+g      d                      Ze
j~                  j                  de9dz        e
j~                  j                  dddLg      e
j~                  j                  ddd+g      d                      Ze
j~                  j                  d ej                  g dw       ej                  g dx       ej                  g dy       ej                  d~dgddgddgddgd~dgg       ej                  ddgddgd-dgddgddZg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 ec ene9e5e5z                     e
j~                  j                  ddd fd+d fg      d               Ze
j~                  j                  d ec ene9e5e5z                     e
j~                  j                  ddd fd+d fg      d               Ze
j~                  j                  d ec ene9e5e5z                     e
j~                  j                  ddd fd+d fg      d               Ze
j~                  j                  d ej                  g d       ej                  g d       ej                  dUd.gd_dWgdd_gddgddgg       ej                  ddgddgdZdgddUg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ddLg      e
j~                  j                  de9      d               Ze
j~                  j                  de9      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      ddZf ej                  g dg dg dg dg       ej                  g dg dg dg dg      dZdWfg      d        Ze
j~                  j                  de9      d        Ze
j~                  j                  de9      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 d/g d0g d1g d2g       ej                  g d$      d3d4fg      d5        Ze
j~                  j                  de9      d6        Ze
j~                  j                  d7 ej                  g d8g d9g d:g d;g       ej                  g d<g d9g d:g d=g       ej                  g d>g d?g d@g dAg       ej                  g dBg dCg dDg dEg       ej                  g dFg dGg dDg dHg       ej                  g dIg dJg dKg dLg       ej                  g d<g dMg dNg dOg       ej                  g dPg dQg dRg dSg      fg      e
j~                  j                  de5      dT               Ze
j~                  j                  de5      e
j~                  j                  dUdV      e
j~                  j                  dWg dX      dY                      Ze
j~                  j                  dZddg      e
j~                  j                  de9      e
j~                  j                  dd[      d\                      Ze
j~                  j                  dZddg      e
j~                  j                  de9      e
j~                  j                  dd[      d]                      Ze
j~                  j                  d% ecd^            e
j~                  j                  d_g d`      e
j~                  j                  d*d+d(g      e
j~                  j                  de9      da                             Ze
j~                  j                  de9      e
j~                  j                  d%g d      db               Ze
j~                  j                  d% ecd^            e
j~                  j                  de9      dc               Ze
j~                  j                  de5      e
j~                  j                  ddd[      de               Zy(g      )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)lapackinvsvdcholeskysolveldlnorm
block_diagqreighqz)
_to_banded)_compute_lwork)ortho_groupunitary_group)diags_array)get_lapack_funcs)get_blas_funcs)CONFIGzBuild Dependenciesblasnameversionc                     |t         v r1 |j                  |   |j                  |  dz  z   j                  |      S  |j                  |  j                  |      S )N              ?)COMPLEX_DTYPESrandastype)shapedtyperngs      ]/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/linalg/tests/test_lapack.pygenerate_random_dtype_arrayr2   '   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flapackHAS_LP64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       r1   test_lapack_documentedrJ   /   s    ~~,-$$&'E	K fGF !$[)@E!NN4 ! b=NNN=r3   c                  P    ddl m}  ddlm} | |k(  sJ ddl m} ddlm} ||k(  sJ y )Nr   )r9   )r7   )scipy.linalg.blasr9   scipy.linalg.lapackr7   )blas_has_ilp64lapack_has_ilp64blas_has_lp64lapack_has_lp64s       r1   (test_lp64_ilp64_blas_lapack_both_or_nonerR   F   s+    =A----;?O+++r3   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}t         D ]  }t        d|	      }| ||      \  }}}}}	t        |	 t        |	             t	        ||       t        ||fd
t        |d
         dz
  f       t	        |t        j                  t        |                    ||dd      \  }}}}}	t        |	 t        |	              y )N)         )         )      	   )rV   r   r   ga2U0*3?)rY   r   r   gMb`?)r\   rV   r   r   )r   rV   r   r   gebalr/   r   rV   )permutescale)	DTYPESr#   r   reprr   r   lenr5   r   )
selfaa1r/   fbalohipivscaleinfos
             r1   
test_gebalzTestFlapackSimple.test_gebalR   s    	9-  	*E 6Ay)*1&BB$Hd4j)%b!,"bAs1Q4y{#34%hA@)*2q)B&BB$Hd4j)	*r3   c                     g dg dg dg}t         j                  fD ]4  }t        d|      }| ||      \  }}}t        | t	        |             6 y )Nikiifi     i"  iiigehrdr`   )r5   float64r#   r   rd   )rf   rg   r/   ri   httaurn   s          r1   
test_gehrdzTestFlapackSimple.test_gehrdg   s\     jj\ 	*E 6AyaDMBTHd4j)	*r3   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 )NrV   rW   r   rY   rZ   r[   r]   r^   
         TfdFD)trsylr*   C)tranatranbdecimal)isgn)	r5   arrayr-   r#   isupperr   dot	conjugater~   )rf   rg   bctransr/   rh   b1c1r   xrb   rn   s                r1   
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!=#	=r3   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 )Nrq   rr   rt   r   Mm1OoIiFfEer   r   r*   )langeFfEeFfrX   r\   Mm1Oor   axisIirV   )r5   r   r-   r   r#   sqrtsumsquareabsr   maxr   )	rf   rg   r/   norm_strrh   r   valuer   refs	            r1   
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-	-r3   N)__name__
__module____qualname__ro   ry   r   r    r3   r1   rT   rT   P   s    **	*=8-r3   rT   c                   $    e Zd Zd Zd Zd Zd Zy)TestLeastSquaresSolversc           	         t         j                  j                  d      }t        t              D ]  \  }}d}d}d}|j                  ||f      j                  |      }|j                  |      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  r{      rV   )gels
gels_lworkr`   lworkr   TTCCr   r         ?       @      @      @      @       @      0@g      1@g      4@)r   r   geqrfrW   r   祪,-@   rtol      ?      @      @      ?      @            @              @ffffff?r   y      1@       @y      4@      R ?\j,? W?)r5   randomdefault_rng	enumeraterc   r-   r#   r   r   REAL_DTYPESr   r.   re   r   finfoepsr	   r+   )rf   r0   indr/   mnnrhsrh   r   glsglslwr   r=   rn   r   r   r   lqrr   	lqr_truths                       r1   	test_gelsz!TestLeastSquaresSolvers.test_gels   s   ii##D)#F+ 	JCAADQF#**51BA%%e,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./	/r3   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_lworkrW   rV   r   Fr   r   r   r   YN))1)@*@.?r   r   r   r   r   r   r   r   U.*@_Y@r   r5   r   r#   r.   re   intrealr   r   r   r+   )rf   r/   rh   r   r   r   r   r   r   workiworkrn   r   
iwork_sizer   srankrwork
rwork_sizes                      r1   
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r3   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_lworkrW   rV   r   Fr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rf   r/   rh   r   r   r   r   r   r   r   rn   r   vr   r   r   s                   r1   
test_gelssz"TestLeastSquaresSolvers.test_gelss2  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	9r3   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   rW   rV   r{   Fr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r5   r   r#   r.   re   r   r   r   r   r   int32r   r+   )rf   r/   rh   r   r   gelsy_lworkr   r   r   r   rn   r   jptvr   r   jr   s                    r1   
test_gelsyz"TestLeastSquaresSolvers.test_gelsyk  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+	9r3   N)r   r   r   r   r   r   r   r   r3   r1   r   r      s    B/H:Px79r59r3   r   r/   r.   )rX   rY   )rZ   rW      r   c                 Z    t        d|       }|\  }} |||      \  }}t        |d       y )Ngeqrf_lworkr`   r   r   r   r#   r   )r/   r.   r   r   r   r   rn   s          r1   test_geqrf_lworkr     s3     #M%@KDAqQ'KE4qr3   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,  rW   r`   gerqfrW   r   orgrqrV   ungrq)rc   r5   r   r#   assert_raises	Exceptionr   r+   )
rf   r/   rg   r  rqrx   r   rn   r  r  s
             r1   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!,	-r3   N)r   r   r   r  r   r3   r1   r  r    s    -r3   r  c                       e Zd Zej                  j                  dddg      ej                  j                  dddg      d               Zy)	TestDpotrlowerTFcleanc                    t         j                  j                  d      }|j                  d      }|j	                  |j
                        }t        d|f      \  }} ||||      \  }}	 |||      d   }
|r<t        t        j                  |
      t        j                  t        |                   y t        t        j                  |
      t        j                  t        |                   y )N*   )rX   rX   size)potrfpotri)r  r   )r5   r   r   normalr   r~   r#   r   r   r   r   )rf   r  r  r0   r   rg   dpotrfdpotrir   r=   dpts              r1   test_gh_2691zTestDpotr.test_gh_2691  s     ii##B'JJFJ#EE!##J)*<qeDae,1Qq!BGGCL"''#a&/:BGGCL"''#a&/:r3   N)r   r   r   r?   markparametrizer  r   r3   r1   r  r    sF    [[WtUm4[[WtUm4; 5 5;r3   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|
        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   rV   F)full_matrices
compute_uvoverwrite_acheck_finiter   lasd4rX   z=LAPACK root finding dlasd4 failed to find the singular value zThere are NaN rootsd   atolr   )r5   r   hstackvstackdiagr   re   newaxisr   concatenater   r#   rangerF   r   anyisnanr   r   rv   r   )rf   sigmasm_vecMSMit_lensgmmvcr'  rootsiress               r1   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 Q1OPQsS		 "%RVVBHHUO,,.CDEEBHHRZZ,@,D,D(D "**!5!9!99	;r3   N)r   r   r   r=  r   r3   r1   r  r    s    ;r3   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 )	TestTbtrsr/   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=
ף0rA  g(\+gףp=
0g333333*@g(\gHzG,gQ#rY   rV   r   rX   rW   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   r5   r   r+   
ValueErrorr#   r   r   )rf   r/   rF  r   x_outrC  r   rn   s           r1   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4r3   zdtype,trans)Nr~   r   r   rG  UrD  r-  rM  c           	      t   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        ||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  )rY   rX   rW   rC  r`   rN  rV   r   dia)offsetsformatr   )rF  r   rG  r   r-  rM  g-C6
?r   r~   r   zInvalid trans argument)r5   r   RandomStater#   r0  r   r2   r   r"   r   r   diagonalr   minr   r   r~   r   rJ  )rf   r/   r   rG  r-  r0   r   r   kdrC  is_upperkuklband_offsetsr   band_widthswidthbandsrg   rF  rowkr   rn   s                           r1   test_random_matriceszTestTbtrs.test_random_matrices'  s    ii##D)
 4 6CK(]"W R"q"-+78aq3q6z88)+ -eXucB + + 3;/E"I |EB 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   F02F5zuplo,trans,diag)rN  rM  Invalid)rN  ra  rM  )ra  rM  rM  c           	          t        dt        j                        }t        j                  j	                  d      }|j                  d      }|j                  d      }t        t        ||||||       y)z?Test if invalid values of uplo, trans and diag raise exceptionsrC  r`   r   )rY   rW   )rW   rY   N)r#   r5   rv   r   r   r  r	  )rf   rG  r   r-  rC  r0   rF  r   s           r1   &test_invalid_argument_raises_exceptionz0TestTbtrs.test_invalid_argument_raises_exception[  sX     !

;ii##D)ZZJJviAtUDAr3   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`   rY   rC  r   )r   rX   rN  rE  N)r5   r   floatr#   r   )rf   rF  r   rC  r=   rn   s         r1   test_zero_element_in_diagonalz'TestTbtrs.test_zero_element_in_diagonali  sU     WWV5)GGAU# 65	2-4T1r3   zldab,n,ldb,nrhs)rZ   rZ   r   rZ   )rZ   rZ   rX   rZ   c                     t        j                  ||ft              }t        j                  ||ft              }t        dt              }t	        t
        |||       y)z2Test ?tbtrs fails correctly if shapes are invalid.r`   rC  Nr5   r   re  r#   r  r	  )rf   ldabr   ldbr   rF  r   rC  s           r1   test_invalid_matrix_shapesz$TestTbtrs.test_invalid_matrix_shapesy  sF     WWdAYe,GGS$Ku- 6iA.r3   N)r   r   r   r?   r  r  rc   rL  r   r`  rc  rf  rk  ).0r/   r   r   s   0000r1   r?  r?    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 /	/kNs   Dr?  r   )I1OrG  rN  rD  r-  rM  r   rX   r{   c           	         t        |  | | | | j                               }t        j                  j	                  |      }|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  }nKt        j"                  j%                  |d
	      }t!        d|f      \  }} ||      \  }}} ||||      \  }}d
}t+        |
||       y )Nr  r*   r   r{   rN  trcon)r   rG  r-  rm  ordrV   gecongetrfr   r   )rC   encoder5   r   r   permutedlogspaceintegers
issubdtypefloatingr   r   r   r-  r.  r-   r#   linalgr   infr   r   )r/   r   rG  r-  r   seedr0   Aoffsetrq  r<  r=   norm_A
norm_inv_Ar   anormru  rv  luipvtrn   r   s                         r1   
test_trconr    s    5'$vdVA3/6689D
))


%C

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&'		qa('(:QDAuqD$r5t,Q
 DC4(r3   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 )Nr   lartgr`   rX   rY   r*   333333?r   y       皙?)	r#   r5   r   iscomplexobjr   r   
isinstancecomplexre  )r/   r  ri   gcssnrs          r1   
test_lartgr    s     ) 6HHQHHQ??1GA!QK	BG$3??1B	*Jq'*+Jr5)*B(')r3   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 )Nr   r  r  rY   rX   r{   rV   fdrotr`   y             r*   y              @)rZ   rZ   rZ   rZ   )r   r   r   r   r*  rW   )r   )rZ   rZ   rX   rX   r   )offxoffy)rX   rX   rZ   rZ   )incxr  r   )rZ   rX   rZ   rX   )r  incyr   )r  r  r  r  r   )rX   rX   rZ   rX   r  )r  r  r   )overwrite_xoverwrite_y)r5   fullr   	precisionr$   r#   r   r   )
r/   r   r   ur   r*  r  ri   rg   r   s
             r1   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$4r3   c            
         t         j                  j                  d      } | j                  d      }|j                  j	                  |      }| j                  d      d| 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   )rY   rY   r*   r   larfglarfr`   FDr   rV   rV   r   rW   r   r   RsiderH  r  )r5   r   r   r~   r   conjr#   copyr.   r   r   r   r   )r0   a0a0jr/   r  r  rg   alphar   rx   expectedr   s               r1   test_larfg_larfr    s   
))


%C	F	B	"B
**V
r#**V"44
4C
%%**,

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6r3   c                  z    t        dt        j                  d      } d}t        | ||dd      }|dk(  s|dk(  sJ y y )	Ngesdd_lwork	preferredr/   ilp64iA%  T)r#  r"  i`DiD)r#   r5   float32r   )sgesdd_lworkr   r   s      r1    test_sgesdd_lwork_bug_workaroundr    sQ     $M*57LA<A&*$@E  I)!333!3r3   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)	TestSytrdr/   c                 n    t        j                  d|      }t        d|f      }t        t        ||       y )Nr   r`   sytrdr5   r   r#   r  rJ  )rf   r/   r  r  s       r1   test_sytrd_with_zero_dim_arrayz(TestSytrd.test_sytrd_with_zero_dim_array6  s.     HHV5) 1$/j%+r3   r   rV   rX   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_lworkrV   rW   r   r  r   rZ   r   r)          r   r   )r5   r   r#   arangetriu_indices_fromr   r   r   r   r-  r   r.   r   r0  outerr   r   r~   )rf   r/   r   r  r  r  r   rn   dataderx   r~   r_  k2Qr;  r   Hi_lowerQTAQs                        r1   
test_sytrdzTestSytrd.test_sytrd=  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(;(;&;#Fr3   N)	r   r   r   r?   r  r  r   r  r  r   r3   r1   r  r  5  se    [[Wk2, 3, [[Wk2[[S&)7G * 37Gr3   r  c            	           e Zd Zej                  j                  de      d        Zej                  j                  d e 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  )rf   r  r  r  s       r1   test_hetrd_with_zero_dim_arrayz(TestHetrd.test_hetrd_with_zero_dim_arrayz  s.     HHV=1 1$/j%+r3   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_lworkrV   rW   r*   r   rV   r  r   r  rZ   r   r)  r  r   r   r{   )r5   r   r#   r  r  fill_diagonalr   r-  r   r   r   r   r   r   r.   r   r   r0  r  r  r   r   r~   )rf   r   
real_dtyper  r  r  r  r   r=   rn   r   r  r  r  rx   r~   r_  r  r  r;  r   r  r  QHAQs                           r1   
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	r3   N)r   r   r   r?   r  r  r+   r  rC   zipr   r  r   r3   r1   r  r  y  sw    [[_n=, >, [[7!#k>"BCE[[S&)A *EAr3   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`   r[   rY   rW   )r   r   p)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   rc   r#   r   r5   r   r   r   )r   r/   func
func_lworkr   rg   r   r  r   r=   resultr  s               r1   
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,?r3   c            
         t         j                  j                  d      } t        t        t
        z         D ]S  \  }}d}|dk  r@t        d|      }t        d|      \  }}| j                  ||f      j                  |      }nVt        d|      }t        d|      \  }}| j                  ||f      | j                  ||f      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         V y )Nr   r{   rY   sytrf_lworkr`   )syconsytrfhetrf_lwork)heconhetrfr*   rW   rV   r   r  )rg   ipivr  r  r  )r5   r   r   r   rc   r+   r#   r-   r  r~   r   r   r   r   r   r~  cond)r0   r   r/   r   r  funconfunctrfr  r  r   ldur  r=   rconds                 r1   test_sycon_heconr    sm   
))


%C~ 56 A
U7)-uEJ./AOOFGQF#++E2A *-uEJ./AOOFGQF#cjj!Q&8&;;CCEJA ^Q266!5#9!99Q
z1-qQ7T1Cd%qAqAeGbiinnQ!n445e;a?@-Ar3   c                     t         j                  j                  d      } t        t              D ]  \  }}d}t        d|      \  }}}}| j                  ||f      j                  |      }||j                  z   dz  }| j                  ||f      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   r{   )r  sygstsyevdsygvdr`   rW   r   giUMu?r   )r5   r   r   r   r   r#   r-   r~   r   r   r   )r0   r   r/   r   r  r  r  r  r  Beig_gvdr=   rn   r   rg   eigs                   r1   
test_sygstr
    s@   
))


%C, 3
U%5 7I<A&C"ueU JJ1v%%e,WaKJJ1v%%e,WaK!bffQe444 !A;D	 (4	1+4	QxQ	W6253r3   c                  ^   t         j                  j                  d      } t        t              D ]{  \  }}d}t        d|      \  }}}}| j                  ||f      j                  |      d| j                  ||f      j                  |      z  z   }||j                         j                  z   dz  }| j                  ||f      j                  |      d| j                  ||f      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	       ~ y )
Nr   r{   )r  hegstheevdhegvdr`   r*   rW   r   -C6?r   )r5   r   r   r   r+   r#   r-   r  r~   r   r   r   )r0   r   r/   r   r  r  r  r  r  r  r  r=   rn   r   rg   r	  s                   r1   
test_hegstr  3  s   
))


%C/ 1
U%5 7I<A&C"ueU JJ1v%%e,rCJJ1v4F4M4Me4T/TT^QJJ1v%%e,rCJJ1v4F4M4Me4T/TT^QRVVAU%;!;; !A;D	 (4	1+4	QxQ	W4051r3   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   r{      tzrzftzrzf_lworkr`   rW   r*   r   r   Nr{   r   r  r)  )r5   r   rS  r   rc   r#   r   r   r,   r-   r  r	  r~   r   r+  r   r   r0  r   r  r   r   r   spacingr   )r0   r   r   r   r/   r  tzrzf_lwr   r  rzrx   rn   r  VIdr   r   Zs                     r1   
test_tzrzfr  R  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   rV   r*   r   r~   )trttftfttrtfsmr`   rW   r   r   rY   r[   r   r   r   rN  )r   r-  rX   r  )r   r-  r  N)r5   r   rS  r   rc   r   r,   r   r-   r#   r   r   r  r~   r  )r0   r   r/   r   r  r   r  r   r!  Afpr=   r  solnB2s                 r1   	test_tfsmr&  t  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r3   c                  T   t         j                  j                  d      } d\  }}}t        t              D ]k  \  }}t        d|      \  }}t        |||      }|dk  r^t        | j                  ||f      j                  |            }	| j                  ||f      j                  |      }
t        d|      \  }}nt        | j                  ||f      | j                  ||f      dz  z   j                  |            }	| j                  ||f      | j                  ||f      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       n 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   )r{   r  r  r  r`   rW   )ormrzormrz_lworkr*   )unmrzunmrz_lworkr   Nr~   r   r{   r   r   r  r)  r   r  )r  r   )r  r   r   )r5   r   rS  r   rc   r#   r   r   r-   r+  r   r0  r~   r   r  r   r  r   r   r   r   )r0   qmqncnr   r/   r  r  lwork_rzr  r   orun_mrzorun_mrz_lw	lwork_mrzr  rx   rn   r  r  r   r   r  r   tolcqs                            r1   test_ormrz_unmrzr5    sH    ))


%CJBB' .!
U*+C168x!(B37SZZR)0078A

B8$++E2A$45M;@%B!Hk cjj"b*SZZR-A"-DDLLUSTARH%

B8(<R(??GGNA$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   rV   r*   r   r~   )r  r   r`   r   rD  rG  rN  )transrrG  rW   Nr   F)order)r5   r   rS  r   rc   r,   r-   r#   r   r   r   r  r~   r   r   reshape)r0   r   r/   r   A_fullr9  r  r   A_tf_Urn   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                      r1   test_tfttr_trttfrH    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:r3   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)r7  r   r   rV   r*   )trttptpttrr`   r   rD  r8  rW   N)r5   r   rS  r   rc   r,   r-   r#   r   r   r   r   r~   r   r   r   )r0   r   r/   r   r=  rJ  rK  A_tp_Urn   A_tp_LindsA_tp_U_mA_tp_L_mrD  rE  s                  r1   test_tpttr_trttprQ    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 8r3   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   rV   r*   )pftrfr  r   r`   r   N)r5   r   rS  r   rc   r,   r-   r  r~   r   r#   r   r   r   )r0   r   r/   r   r  rS  r  r   r#  rn   	Achol_rfpA_chol_rr=   Achols                 r1   
test_pftrfrW  :  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%3r3   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   rV   r*   )pftrirS  r  r   r`   r   rW   rY   r[   r   N)r5   r   rS  r   rc   r,   r-   r  r~   r   r#   r   r   r   r   )r0   r   r/   r   r  rY  rS  r  r   r#  rn   
A_chol_rfp	A_inv_rfpA_inv_rr=   Ainvs                   r1   
test_pftrir^  U  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r3   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   rV   r*   rX   r`   rW   )pftrsrS  r  r   r   rY   r[   r   N)r5   r   rS  r   rc   r,   r-   r  r~   r   r   r#   r   r  r	  r   r   )r0   r   r/   r   r  r  Bf1Bf2r`  rS  r  r   r#  rn   rZ  r$  s                   r1   
test_pftrsrc  u  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r3   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   rV   r*   rW   r   hr  r   frkr`   r   r   rY   r[   r   N)r5   r   rS  r   rc   r,   r-   r  r~   r   r#   r   r   r   )r0   r   r/   r   r  prefixr  r   shfrkr#  r=   r   Afp_outA_outs                 r1   test_sfrk_hfrkrk    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r3   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   r{   rV   i   r*   r(  r   )syconvr  r  r`   r  F)r  	hermitianr  r   Nr  r)  r   )r5   r   rS  r   rc   randintr-   r  r~   r   r  r   r#   r   r   r   r   r   )r0   r   r/   r   r  r3  rn  trf	trf_lworklwrD  Dpermr   r  rn   rg   r  rN  s                      r1   test_syconvrv    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r3   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   rV   r*   r(  r   )geqrtgemqrtr`   r   r   r  r)  r   r~   rD  r  rM  r  r   rD  rD  rM  r  r  r"  )r5   r   rS  r   rc   r,   r-   r  r   r#   r   r   r~   r  r   r   r   r  r	  )rf   r0   r   r/   r   r  r3  rz  r{  rg   trn   r   r  r  r   	transposer  r   r   qqC	c_defaults                          r1   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r3   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   rV   r*   r(  r   )tpqrttpmqrtr`   r   rW   r   r  r)  r   r~   r|  rM  r}  rD  r   r~  r  r  r"  )r5   r   rS  r   rc   r,   r-   r  r   r#   r   r   r   r/  r   r~   r  r   r   r  r	  )!rf   r0   r   r/   r   r  r  r3  r  r  lrg   r   r  rn   B_pentb_pentr   r  r  r   rt  r  r  r   r   r  r  cdCDqCDr  	d_defaults!                                    r1   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r3   N)r   r   r   r>   r  r  r   r3   r1   rx  rx    s    
<A|QKr3   rx  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   r{   rW   pstrfr`   rV   r*   r    r   rW   rI  r  r5   r   rS  r   rc   r#   r,   r-   r  r~   r   r   r   r  r   rv   r   r   )r0   r   r/   r   r  r  r  r   pivr_crn   rN  single_atoldouble_atolr*  rD  s                   r1   
test_pstrfr  o  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r3   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   r{   rW   pstf2r`   rV   r*   r  r  r  rI  r  r  )r0   r   r/   r   r  r  r  r   r  r  rn   rN  r  r  r*  rD  s                   r1   
test_pstf2r    r  r3   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ſFxrW   )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  rI  )r5   r   r   rc   r-   r#   r   )desired_realdesired_cplxr   r/   r  r  r  r   rowcndcolcndamaxrn   s               r1   
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/r3   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  rB  r{   r`   rW   r   r*   rZ   r   syequb)r5   r   r   rc   r   r0  rot90r-  r#   r   log2r-   r   )desired_log2sr   r/   r  r  r   r  r  r   scondr  rn   s               r1   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 )NrW   rZ   i  r^   rV   )r_  r*   r   r  r  r  r[                   i   rZ   rZ   y              0@)rZ   r   r  )r  r   r   r   r   r  r   r   r   r  r  )r5   r-  r   r   zheequbr   r   r  r   r  cheequbr-   	complex64)r  r   r  r  rn   s        r1   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Jr3   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  r{   r*   rW   getc2r`   gesc2r   r$  )overwrite_rhsrY   r   )	r5   r   rS  r,   r   rc   r-   r#   r   )r0   r   r  r  r   r/   r  r   r  r  r  r  jpivrn   r   rb   s                   r1   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:+:r3   r  )r[   rZ   r  jobar[   joburY   jobvjobrrV   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`   rW   rV   r  rB  r   )r  r  r  r  jobtr  NF)r#  r  )r5   r   rS  r   r   r2   r#   r  r  r	  r   r   r   r-  r  r~   identityr~  matrix_rankcount_nonzero)r  r/   r  r  r  r  r  r  r0   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   rn   sigmas                                r1   test_gejsv_generalr  .  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 r3   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   rV   rV   )rV   r  r(  r{   r  N)r#   r   r.   r5   r   r   sinr  r<  r-   asfortranarrayr~   r  r   )r/   r  r  r  r   r   r   rn   r  Acr=   s              r1   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r3   kwargsr^   r  c                     t        j                  dt              }t        dt              }t	        t
        ||fi |  y)z-Test invalid job arguments raise an Exception)rW   rW   r`   r  Nrh  )r  r  r  s      r1    test_gejsv_invalid_job_argumentsr    s1     	e$AWE2E)UA00r3   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#   r/   r   )r  
sva_expectu_expectv_expectr*  r  r  r  r   r   r   rn   s               r1   test_gejsv_NAGr    sS    0 DWAGG4E#(8 CAtUDJ$/Had+Had+r3   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   }|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  r{   r(  rV   r/   r0   r   gttrfgttrsr`   r   rW   r  r~   r   r"  z?gttrf: _d[info-1] is , not the illegal value :0.)r5   r   rS  r   r   r2   r  r-  r#   r	   r   r   r   r   r~   r  r  rJ  testingr   )"r/   r0   r   r*  dur  dldiag_cpyr  r   r   r  r  _dl_d_dudu2r  rn   rN  rD  r;  r   r  b_cpyx_gttrsr   b_trans__dl__d__du_du2_ipiv_infos"                                     r1   test_gttrf_gttrsr    s    ))


#C
A%$$$D 
%acV5c	BB#QD3?A	$acV5c	BB	1668RWWY/H

RWWR_$rwwr1~5A

1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 +N,N85O N),N58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  r\   gC>)r   r  r]   )rW   rX   rY   rZ   rZ   g@gffffff@      g%@g@g	r  gffffff&g3@r  rZ   r\   rB  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  r  r  du_expd_expdu2_expipiv_expr   r   r  r  r  r  r  r  r  rn   r  s                     r1   0test_gttrf_gttrs_NAG_f07cdf_f07cef_f07crf_f07csfr  K  s    d $$6A1GLE5$)"a$4!CS#tTC!C BD)D(##r3T15MGTGQr3   )rn  rm  ro  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k(  rt         j                  nd      }t        d|f      \  }	}
 |	|||      \  }}}}}} |
|||||||      \  }}t        d	|f      \  }} ||      \  }}} ||||      \  }}t        j                  |       j                  d
z  }t        |||       y )NiTfr*   rV   r   rm  rr  )r  gtconrw  rt  g      ?r   )r5   r   r   r-  r|  r}  r   r-   r~  r   r  r#   r   r   r   )r/   r   r   r0   r  r  r  r  r  r  r  r  r  rn   r<  r=   ru  rv  r  r  r   r   s                         r1   
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IINN1DCK"&&QN?E#$6=LE5!&r1b!1B2sD$2q"c4T:FC#$6=LE51XNBd2u4(FC88E?$DC4(r3   ))rX   r\   )r\   rX   r   c                 Z    t        d|       }|\  }} |||      \  }}t        |d       y )Ngeqrfp_lworkr`   r   r   r   )r/   r.   r  r   r   r   rn   s          r1   test_geqrfp_lworkr    s3     $^EBLDAqa(KE4qr3   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(  r{   rY   rV   r   pttrfr`   r   zpttrf: info = z, should be 0)err_msgr  pttrszpttrs: info = )r5   r   rS  r   r   r2   r-  r  r  r#   r	   r   r   r   r   r~   )ddtyper/   r0   r*  r   r  r  r  r  r  r  _ern   rD  rt  r   r   r   _xs                      r1   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%r3   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 )Nr{   r   r  r`   rW   rV   r   )r5   r   rS  r#   r2   r  rJ  )r!  r/   r   r0   r  r  r  s          r1   *test_pttrf_pttrs_errors_incompatible_shaper&    sz     	A
))


%CWE2E#QD&#6:A#QqSFE37A*eQsVQ/*eQ#2/r3   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 )Nr{   r  r  r`   rW   rV   r   z?pttrf: _d[info-1] is r  z2?pttrf should fail with non-spd matrix, but didn't)r5   r   rS  r#   r2   r   r   )
r!  r/   r   r0   r  r  r  r  r"  rn   s
             r1   '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Lr3   z%d, e, d_expect, e_expect, b, x_expect)rY   r{      r   rZ   )r  r  r  r]   )rY   r^   r      rV   )r  gK=Ur  r  rW      A      g      @r   r  )r*  )   .      )y      0@      0@y      2@      "      ?      )r*  r^   rV   rY   )r  r  r1  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   rV   r  )r#   r   r  r/   r+   )r  r  d_expecte_expectr   x_expectr*  r  r  r"  rn   r   r#  s                r1   test_pttrf_pttrs_NAGr6  	  s    4 DWAaD1EA;LBDBt,Bt,WAaD1ERA&HBBt, 	ww. R!,DH40 !r3   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  rV   rY   rW   r   )	r5   r   rS  r2   r-  r   r  r~   r   )r/   realtyper   	compute_zr0   A_eigvrr  r  trir  zs               r1   pteqr_get_d_e_A_zr>  ,	  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<r3   zdtype,realtyper9  c                 `   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  pteqrr`   r{   r  r  r=  r9  r   zinfo = z, should be 0.r  N)r5   r   r   r#   r>  r   r   sortr   r  r~   r  r-  )r/   r8  r9  r*  r@  r   r  r  r  r=  d_pteqre_pteqrz_pteqrrn   s                 r1   
test_pteqrrF  L	  s    ###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	& r3   c                 ~    t        d|       }d}t        | |||      \  }}}} ||dz
  |||      \  }	}
}}|dkD  sJ y )Nr@  r`   r{   rY   r=  r9  r   r#   r>  r/   r8  r9  r@  r   r  r  r  r=  rC  rD  rE  rn   s                r1   test_pteqr_error_non_spdrK  l	  sW     ge4E
A"5(AyAJAq!Q ',AE1Y&O#GWgt!8O8r3   c           	          t        d|       }d}t        | |||      \  }}}}t        t        ||d d |||       t        t        |||d d ||       |rt        t        ||||d d |       y y )Nr@  r`   r{   r   rH  )r#   r>  r  rJ  )	r/   r8  r9  r@  r   r  r  r  r=  s	            r1   "test_pteqr_raise_error_wrong_shaperM  z	  s}     ge4E
A"5(AyAJAq!Q*eQsVQ!yI*eQ#2!yIj%A3B9M r3   c                     t        d|       }d}t        | |||      \  }}}}d|d<   d|d<    |||||      \  }	}
}}|dkD  sJ y )Nr@  r`   r{   r   rH  rI  rJ  s                r1   test_pteqr_error_singularrO  	  sc     ge4E
A"5(AyAJAq!QAaDAaD&+AqA&K#GWgt!8O8r3   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  r@  r`   rV   r   rA  r  N)r#   r/   r5   r-  r   r   )r9  r  r  r3  z_expectr*  r@  r=  r  r"  _zrn   s               r1   test_pteqr_NAG_f08jgfrS  	  s      Dgagg6E

RWWQ]"RWWQ^3AqAi@BBBt,BFF2Jx 0t<r3   matrix_size)r   )r\   r[   r[   r[   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  )rx   r   r   r   rI  r   )r5   r   rS  r   r   r#   r2   r   r   r   r   r.   r  r~   r   allr-  re   r   r1  )r/   rT  r0   r   r*  rX  gqrr   r   r  qr_Arx   rn   r  qqrr  
A_negativer_rq_negq_rq_negrq_A_negtau_neginfo_negs                         r1   test_geqrfprd  	  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:>"$r3   c                  ~    t        j                  g       } t        d| j                        }t	        t
        ||        y )NrX  r`   )r5   r   r#   r/   r  r	  )A_emptyrX  s     r1   #test_geqrfp_errors_with_empty_arrayrg  	  s+    hhrlGhgmm<F)VW-r3   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  rn  _lworkr   r`   rV   r  $_lwork raised unexpected exception: r   r+   r#   r   r	  r?   failrm  rh  r   r/   sc_dlwdz_dlwr  s          r1   test_standard_eigh_lworksry  	  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)
Nrq  rn  rr  r   r`   rV   rD  r8  rs  rt  rv  s          r1   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rz  dtype_r   )rV   r{   r(  r  c                 "   t         j                  j                  d      }|j                  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`   )r5   r   r   r{  r   r#   r   rZ  )
r  r   r0   r  r  rm  dlwrs  lwvalr   s
             r1   test_orcsd_uncsd_lworkr  
  s     ))


%CQA	AAK'$TC

C	#V	,B2q!Q'ED[EuhEu%!A%&&&%s   6B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)rW  P      r  r  csdr  r`   r   lrworkr   r   r  g     @rI  )r   r    rvsr!   r#   r   dictr  r   rU  r5   r   r0  cosr  r   r   r   )r  r   r  r  rm  Xdrvr  r  lwvalscs11cs12cs21cs22thetau1u2v1tv2trn   rN  VHr  n11n12n21n22Soner;  Xcs                                  r1   test_orcsd_uncsdr  #
  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Br3   
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`   r{   rV   r  r   rW   r~   r   rM  r:  Nr[   r  r   dlfdfdufr  r  r   z?gtsvx info = z, should be zerorX   r  __len__Trcond should be scalar but is ferr.shape is z but should be berr.shape is )r5   r   rS  r   r   r#   r2   r-  r   r  r~   r  r   r	   r   hasattrr.   )!r/   r  r  r0   r*  r  r  r   r  r  r  r  r   r   r   
inputs_cpydlf_df_duf_du2f_ipiv_info_	gtsvx_outr  r  r  du2fr  x_solnr  ferrberrrn   s!                                    r1   
test_gtsvxr  R
  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+> @r3   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`   r{   rV   r  r   rW   r~   r   r:  r[   r  rM  r   z&info should be > 0 for singular matrix)r  r  r  r  r  r  )	r5   r   rS  r#   r2   r-  r   r  r~   )r/   r  r  r0   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  rn   s                                  r1   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 
r3   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`   r{   rV   r  r   rW   r~   r   r:  r[   rM  r  )r5   r   rS  r#   r2   r-  r   r  r~   r  rJ  r	  )r/   r  r  r0   r  r  r   r  r  r  r  r   r   r   r  r  r  r  r  r  s                       r1   "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	<r3   zdu,d,dl,b,xc           
      z    t        d|j                        } |||| |      }|\
  }}}	}
}}}}}}t        ||       y )Nr  r`   r#   r/   r   )r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  rn   s                    r1   test_gtsvx_NAGr  
  sH    . WAGG4Eb!R#I@I=CS$feT4a(r3   zfact,df_de_lambdac                 >     t        d|j                        | |      S Nr  r`   r#   r/   r  r  s     r1   <lambda>r    '     )H(8?@ww)HHI1)N r3   c                      yN)NNNr   r  s     r1   r  r        r3   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`   rZ   rY   rV   r   rW   r  r  r  efr   zinfo should be 0 but is .r  r  r  )rW   r  z# but should be ({x_soln.shape[1]},)r  N)r5   r   rS  r   r   r#   r2   r-  r  r  r	   r   r   r   r   r~   r  r.   )r/   r8  r  df_de_lambdar0   r*  r  r   r  r  r  r  r   r  r  rn   r  r   r  r  r  rD  rt  s                          r1   
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 :r3   c                 >     t        d|j                        | |      S r  r  r  s     r1   r  r  S  r  r3   c                      yr  r   r  s     r1   r  r  U  r  r3   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`   rZ   rY   rV   r   rW   r  r  )
r5   r   rS  r#   r2   r-  r  r  rJ  r	  )r/   r8  r  r  r0   r  r   r  r  r  r  r   r  r  rn   s                  r1   test_ptsvx_error_raise_errorsr  O  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Jr3   c                 >     t        d|j                        | |      S r  r  r  s     r1   r  r  n  r  r3   c                      yr  r   r  s     r1   r  r  p  r  r3   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`   rZ   rY   rV   r   rW   r  rM  r   rX   r  )r5   r   rS  r#   r2   r-  r  )r/   r8  r  r  r0   r  r   r  r  r  r  r   r  r  rn   r   r  r  r  s                      r1   test_ptsvx_non_SPD_singularr  j  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xr3   zd,e,b,xc                 n    t        d|j                        } || ||      \  }}}}}	}
}t        ||       y )Nr  r`   r  )r  r  r   r   r  r  r  x_ptsvxr  r  r  rn   s               r1   test_ptsvx_NAGr    s:    . WAGG4E/4Q1~,BGUD$a)r3   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(  )r{   rY   r  r`   r   rV   )ppsvpptrfpptrspptrippconr  r  r  r   rI  )r  r  r  )r5   r   rS  r   r   r2   r  r~   r   r0  r#   r   r   r   r   r   r~  r   r   r   r  )r/   r  r0   r*  r   r   rg   r   yr   rN  apr  r  r  r  r  ulrn   aululiaulibxxvr  r  s                             r1   !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(  r{   r  )geestrexcr`   c                      y Nr   r   s    r1   r  z!test_gees_trexc.<locals>.<lambda>  r  r3   Fr  r   r   rB  rU  rI  r\   rV   r  r   r5   r   rS  r   r   r2   r#   r   r+   r   r   r  r~   )r/   r0   r*  r   rg   r  r  r  r  r=  d2s              r1   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3r3   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#   r/   r   r   )r  ifstilstexpectr*  r  r  s          r1   test_trexc_NAGr  	  sN    < DWAGG4E1at1-FQq	AFAD)r3   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(  r{   r  )ggestgexcr`   c                      y r  r   r  s    r1   r  z!test_gges_tgexc.<locals>.<lambda><  r  r3   Fr$  overwrite_br   r   rV   r  rB  r   rU  rI  r\   rW   rX   r  r  )r/   r0   r*  r   rg   r   r  r	  r  r   r  r  r=  d1r  s                  r1   test_gges_tgexcr  1  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=r3   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(  r{   r  )r  trsentrsen_lworkr`   c                      y r  r   r  s    r1   r  z!test_gees_trsen.<locals>.<lambda>l  r  r3   Fr  r   r   rB  rU  rI  rV   r[   r   r   liworkr   r5   r   rS  r   r   r2   r#   r   r+   r   r   r  r~   r   r   )r/   r0   r*  r   rg   r  r  r  r  r  r=  r  selectr   s                 r1   test_gees_trsenr  a  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3r3   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)\(?)rV   r   r   rV   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   rV   r  r   r   rY   rZ   r[   r  N)r#   r/   r   r+   r   r   r  r~   )r  r  r  r  expect_s
expect_sepr*  atol2r  r  r   r  r   seps                 r1   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4r3   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(  r{   r  )r  tgsentgsen_lworkr`   c                      y r  r   r  s    r1   r  z!test_gges_tgsen.<locals>.<lambda>  r  r3   Fr  r   r   rV   r  rB  r   rU  rI  r[   r   ir  r  r  )r/   r0   r*  r   rg   r   r  r   r!  r  r   r  r  r=  r  r  r  r   s                     r1   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=r3   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   r5   r   r   )rg   r   r   r  r  ri   ranslansr/   r*  r)  routloutrb   difrn   s                   r1   test_tgsyl_NAGr0    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;r3   r   )rM  r~   ijob)r   rV   rW   rX   rY   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  ir{   r   )outputr  rW   r)  r`   )r   r1  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-negativerM  r~   r  zlhs1 and rhs1 do not match)r*  r   r  zlhs2 and rhs2 do not match)r5   r  r   r   r   uniformr-   r#   r   r   r   r  )r/   r   r1  r*  r0   r   r   rg   r  r=   r   r  r   ri   r)  r-  r.  rb   r/  rn   lhs1rhs1lhs2rhs2s                           r1   
test_tgsylr9  G  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 <	> r3   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 )Nro  zhetrs not for real dtypes.   *M/t|0 )r   rZ   r  r*   rn  rq  rr  trsr`   r  r  r   )rg   r  r   r  r(  r  )r   r?   r@   r5   r   r   r+   r4  r-   r~   r  r#   r   r   r   )r:  r/   r  r0   r   r   r  r   rG   rq  rr  r=  r   r   r  rn   r   r   s                     r1   test_sy_hetrsr>  z  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6OCt199Cdau5GAt199
((5/

CAaCQs+r3   c                    |dk(  r| t         v rt        j                  d       t        j                         dk(  r| t
        v rt        j                  d       t        j                  j                  d      }d}|j                  ||f      |j                  ||f      dz  z   }t        j                  | t        j                        r|j                  }|j                  |       }|dk(  r||j                  z   n||j                         j                  z   }| d	| d
f}t        ||       \  }} |||      \  }	}
}|dk(  sJ  ||	|
|      \  }}|dk(  sJ t        j                   |       j"                  }t        j$                  j'                  |      }|r;t)        t        j*                  |      t        j*                  |      d|z  |z         y t)        t        j,                  |      t        j,                  |      d|z  |z         y )Nro  zhetri not for real dtypes.z	win-arm64z1Test segfaulting on win-arm64 in CI, see gh-23133r<  r   r*   rn  rq  r<  r`   r  r   )rg   r  r  r(  r  )r   r?   r@   	sysconfigget_platformr+   r5   r   r   r|  r}  r   r-   r~   r  r#   r   r   r~  r   r   r   r   )r/   r  r:  r0   r   r  rG   rq  r<  r   r  rn   A_invr   r   s                  r1   test_sy_he_trirC    s    }+-01;.5N3JGH
))

 0
1C
A

Aq6SZZA/22A	}}UBKK(FF	AD=ACCa!&&(**nAgSMeWC=(EU3HC!5)OCt199$e4KE4199
((5/

C
))--
C3q59E3q59Er3   r   z
uplo, m, n))rN  rZ   r{   )rN  r{   r{   )rD  r{   rZ   )rD  r{   r{   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   )rG  r-  rN  rV   >r   )
r5   r   r   r-   r#   r   r   r  rU  r   )r   rG  r   r   r-  r/   r0   r  rE  r   r<  r;  r   s                r1   
test_lantrrG    s     ))

 1
2C

A
&&u-A#$6=LE5
ad
.C ck
rwwqzAs{IIc!Qi !Q$
a.CC4(r3   c           	         t         j                  j                  d      }d\  }}}|j                  ||f      |j                  ||f      dz  z   }|j                  t        j                  d|j                  dd      |            }||z  }t        j                  | t         j                        r|j                  }|j                  |       }d|t        j                  ||dz         <   d|t        j                  || dz
        <   t        |||      }d|z  |z   dz   }	t        j                  |	|f|       }
||
|d d d f<   t         j                  j                  ||d	k(  rt         j                   nd
      }t#        d|
f      \  }} ||
||      \  }}} |||||||      d   }t#        d|f      \  }} ||      d   } ||||      d   }t%        ||d       y )N   2 r{   rW   rW   r*   r   r{   rV   rW   r`   rm  rr  )gbcongbtrf)r   rY  rX  rF  r  r  rt  rw  r   )r5   r   r   ry  rz  r{  r|  r}  r   r-   r   r   r   r   r~  r   r  r#   r   )r/   r   r0   r   rX  rY  r  r  tmpLDABrF  r  rK  rL  lu_bandr  r=   r<  ru  rv  r  r   s                         r1   
test_gbconrP    s    ))


,C IAr2

Aq6SZZA/22A\\"++aa)<a@AFKA	}}UBKK(FF	A$%Abooaa !%&Abooa"q!" RQ
CR4"9q=D	4)5	)BBrsAvJIINN1DCK"&&QN?E#$6>LE5RR(GT1
TbRG$ C $$6=LE5	q!B
E
%a
(C C1%r3   c                    t         j                  j                  d      }d\  }}}|j                  ||f      |j                  ||f      dz  z   }t        j                  | t         j                        r|j
                  }|j                  |       }d|t        j                  ||dz         <   d|t        j                  || dz
        <   t        |||      }t        d|f      \  }}	 |	||      }
 |||||      }t        ||
d       y )	NrI  rJ  r*   r   rV   )langbr   rF  r   )r5   r   r   r|  r}  r   r-   r   r   r   r#   r   )r/   r   r0   r   rX  rY  r  rF  rR  r   r   r<  s               r1   
test_langbrS    s     ))


,C IAr2

Aq6SZZA/22A	}}UBKK(FF	A$%Abooaa !%&Abooa"q!"	BA	B#$6=LE5
a.C
b"b
!CC4(r3   	compute_vc                    t         j                  j                  d      }d}|j                  ||       }|j                  |dz
  |       }t        j                  |d      t        j                  |      z   t        j                  |d      z   }t         j                  j                  |      }t        d      } ||||      \  }	}
}|dk(  sJ t        t        j                  |	      t        j                  |             |rTt        j                  |       j                  }t        |
t        j                  |	      z  |
j                  z  ||d	z  
       y y )Nl   J*Os{Ur{   r`   rV   r   stevd)rT  r   r  r  )r5   r   r   r-  r~  eigvalshr#   r   rB  r   r   r~   )r/   rT  r0   r   r  r  r  r   rV  rN  r  rn   r   s                r1   
test_stevdrX    s	    ))

 2
3C
A

1E
"A

1q5
&A
2#bggam3A
))

Q
CW%Eq!y1JAq$199BGGAJ-hhuo!!BGGAJ,ac3h? r3   r&  )	functoolsr   r@  numpy.testingr   r   r   r   r   r	   r?   r
   r  numpyr5   r   r   r   r   r   r   r   r   scipy.linalgr   r   r   r   r   r   r   r   r   r   r   scipy.linalg._basicr   rM   r   scipy.statsr    r!   scipy.sparser"   r#   rL   r$   scipy.__config__r%   blas_providerblas_versionr  rv   r   r  
complex128r+   rc   r2   rJ   rR   rT   r   r  r  r   r  r  r  r?  r  r  r  r  r  r  r  r  r  r
  r  r  r&  r5  rH  rQ  rW  r^  rc  rk  rv  rx  r  r  r  r  skipifr  r  rC   r0  r  r  r  r   r  r  r  r  r  r  r$  r&  r(  r6  r>  rF  rK  rM  rO  rS  rd  rg  ry  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r0  r9  r>  rC  rG  rP  rS  rX  r   r3   r1   <module>re     s  
  / /  * ! ! !    + . 2 $ 0 , ## #+,V4V<*+F3I>zz2::&,,.	~	%*O.,]- ]-@p9 p9f &)"BC D *- -*; ;(; ;DK/ K/^ &)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+.eAh0eAh0eAh0!Q(!Q(b& ) ) 1 1 1 / 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 * c+";VDEG,&G,&^ c+";VDEG0G0 S{!:FCDFMF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.@ )c&+*CDEGd58n5& 6G&: )c&+*CDEGd58n5 6G )c&+*CDEGd58n5N 6GN )c&+*CDEGd58n5 6G :#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:;());() )4FK1<== 1> ,? @,NO  ?@BC
1:C@1:h )4FK1<== 1> ,? @,NO  ?@BC
KC@K( )4FK1<== 1> ,? @,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,. 4,/&)&)F * * 0F6 m!45 (E F#s,&)) * -F 6
)  &)1!& 2 *!&H m!45&)) * 6)& +.f-@ . /@r3   