diff --git a/lax/src/eig.rs b/lax/src/eig.rs index ce84cd43..f11f5287 100644 --- a/lax/src/eig.rs +++ b/lax/src/eig.rs @@ -41,14 +41,13 @@ macro_rules! impl_eig_complex { } else { (EigenVectorFlag::Not, EigenVectorFlag::Not) }; - let mut eigs: Vec> = unsafe { vec_uninit2(n as usize) }; - let mut rwork: Vec> = - unsafe { vec_uninit2(2 * n as usize) }; + let mut eigs: Vec> = unsafe { vec_uninit(n as usize) }; + let mut rwork: Vec> = unsafe { vec_uninit(2 * n as usize) }; let mut vl: Option>> = - jobvl.then(|| unsafe { vec_uninit2((n * n) as usize) }); + jobvl.then(|| unsafe { vec_uninit((n * n) as usize) }); let mut vr: Option>> = - jobvr.then(|| unsafe { vec_uninit2((n * n) as usize) }); + jobvr.then(|| unsafe { vec_uninit((n * n) as usize) }); // calc work size let mut info = 0; @@ -75,7 +74,7 @@ macro_rules! impl_eig_complex { // actal ev let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2(lwork) }; + let mut work: Vec> = unsafe { vec_uninit(lwork) }; let lwork = lwork as i32; unsafe { $ev( @@ -150,13 +149,13 @@ macro_rules! impl_eig_real { } else { (EigenVectorFlag::Not, EigenVectorFlag::Not) }; - let mut eig_re: Vec> = unsafe { vec_uninit2(n as usize) }; - let mut eig_im: Vec> = unsafe { vec_uninit2(n as usize) }; + let mut eig_re: Vec> = unsafe { vec_uninit(n as usize) }; + let mut eig_im: Vec> = unsafe { vec_uninit(n as usize) }; let mut vl: Option>> = - jobvl.then(|| unsafe { vec_uninit2((n * n) as usize) }); + jobvl.then(|| unsafe { vec_uninit((n * n) as usize) }); let mut vr: Option>> = - jobvr.then(|| unsafe { vec_uninit2((n * n) as usize) }); + jobvr.then(|| unsafe { vec_uninit((n * n) as usize) }); // calc work size let mut info = 0; @@ -183,7 +182,7 @@ macro_rules! impl_eig_real { // actual ev let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2(lwork) }; + let mut work: Vec> = unsafe { vec_uninit(lwork) }; let lwork = lwork as i32; unsafe { $ev( @@ -238,7 +237,7 @@ macro_rules! impl_eig_real { let n = n as usize; let v = vr.or(vl).unwrap(); - let mut eigvecs: Vec> = unsafe { vec_uninit2(n * n) }; + let mut eigvecs: Vec> = unsafe { vec_uninit(n * n) }; let mut col = 0; while col < n { if eig_im[col] == 0. { diff --git a/lax/src/eigh.rs b/lax/src/eigh.rs index 2a112217..0692f921 100644 --- a/lax/src/eigh.rs +++ b/lax/src/eigh.rs @@ -42,10 +42,10 @@ macro_rules! impl_eigh { assert_eq!(layout.len(), layout.lda()); let n = layout.len(); let jobz = if calc_v { EigenVectorFlag::Calc } else { EigenVectorFlag::Not }; - let mut eigs: Vec> = unsafe { vec_uninit2(n as usize) }; + let mut eigs: Vec> = unsafe { vec_uninit(n as usize) }; $( - let mut $rwork_ident: Vec> = unsafe { vec_uninit2(3 * n as usize - 2 as usize) }; + let mut $rwork_ident: Vec> = unsafe { vec_uninit(3 * n as usize - 2 as usize) }; )* // calc work size @@ -69,7 +69,7 @@ macro_rules! impl_eigh { // actual ev let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2(lwork) }; + let mut work: Vec> = unsafe { vec_uninit(lwork) }; let lwork = lwork as i32; unsafe { $ev( @@ -101,10 +101,10 @@ macro_rules! impl_eigh { assert_eq!(layout.len(), layout.lda()); let n = layout.len(); let jobz = if calc_v { EigenVectorFlag::Calc } else { EigenVectorFlag::Not }; - let mut eigs: Vec> = unsafe { vec_uninit2(n as usize) }; + let mut eigs: Vec> = unsafe { vec_uninit(n as usize) }; $( - let mut $rwork_ident: Vec> = unsafe { vec_uninit2(3 * n as usize - 2) }; + let mut $rwork_ident: Vec> = unsafe { vec_uninit(3 * n as usize - 2) }; )* // calc work size @@ -131,7 +131,7 @@ macro_rules! impl_eigh { // actual evg let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2(lwork) }; + let mut work: Vec> = unsafe { vec_uninit(lwork) }; let lwork = lwork as i32; unsafe { $evg( diff --git a/lax/src/layout.rs b/lax/src/layout.rs index e83923b3..e695d8e7 100644 --- a/lax/src/layout.rs +++ b/lax/src/layout.rs @@ -202,7 +202,7 @@ pub fn transpose(layout: MatrixLayout, input: &[T]) -> (MatrixLayout, V let n = n as usize; assert_eq!(input.len(), m * n); - let mut out: Vec> = unsafe { vec_uninit2(m * n) }; + let mut out: Vec> = unsafe { vec_uninit(m * n) }; match layout { MatrixLayout::C { .. } => { diff --git a/lax/src/least_squares.rs b/lax/src/least_squares.rs index 71e0dbf5..6be44f33 100644 --- a/lax/src/least_squares.rs +++ b/lax/src/least_squares.rs @@ -87,7 +87,7 @@ macro_rules! impl_least_squares { }; let rcond: Self::Real = -1.; - let mut singular_values: Vec> = unsafe { vec_uninit2( k as usize) }; + let mut singular_values: Vec> = unsafe { vec_uninit( k as usize) }; let mut rank: i32 = 0; // eval work size @@ -120,12 +120,12 @@ macro_rules! impl_least_squares { // calc let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2(lwork) }; + let mut work: Vec> = unsafe { vec_uninit(lwork) }; let liwork = iwork_size[0].to_usize().unwrap(); - let mut iwork: Vec> = unsafe { vec_uninit2(liwork) }; + let mut iwork: Vec> = unsafe { vec_uninit(liwork) }; $( let lrwork = $rwork[0].to_usize().unwrap(); - let mut $rwork: Vec> = unsafe { vec_uninit2(lrwork) }; + let mut $rwork: Vec> = unsafe { vec_uninit(lrwork) }; )* unsafe { $gelsd( diff --git a/lax/src/lib.rs b/lax/src/lib.rs index bc908da6..c8d2264d 100644 --- a/lax/src/lib.rs +++ b/lax/src/lib.rs @@ -269,19 +269,7 @@ impl EigenVectorFlag { /// ------ /// - Memory is not initialized. Do not read the memory before write. /// -unsafe fn vec_uninit(n: usize) -> Vec { - let mut v = Vec::with_capacity(n); - v.set_len(n); - v -} - -/// Create a vector without initialization -/// -/// Safety -/// ------ -/// - Memory is not initialized. Do not read the memory before write. -/// -unsafe fn vec_uninit2(n: usize) -> Vec> { +unsafe fn vec_uninit(n: usize) -> Vec> { let mut v = Vec::with_capacity(n); v.set_len(n); v diff --git a/lax/src/opnorm.rs b/lax/src/opnorm.rs index ba831456..fca7704c 100644 --- a/lax/src/opnorm.rs +++ b/lax/src/opnorm.rs @@ -19,7 +19,7 @@ macro_rules! impl_opnorm { MatrixLayout::C { .. } => t.transpose(), }; let mut work: Vec> = if matches!(t, NormType::Infinity) { - unsafe { vec_uninit2(m as usize) } + unsafe { vec_uninit(m as usize) } } else { Vec::new() }; diff --git a/lax/src/qr.rs b/lax/src/qr.rs index 4dc1d5a7..553bb606 100644 --- a/lax/src/qr.rs +++ b/lax/src/qr.rs @@ -25,7 +25,7 @@ macro_rules! impl_qr { let m = l.lda(); let n = l.len(); let k = m.min(n); - let mut tau = unsafe { vec_uninit2(k as usize) }; + let mut tau = unsafe { vec_uninit(k as usize) }; // eval work size let mut info = 0; @@ -62,7 +62,7 @@ macro_rules! impl_qr { // calc let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2(lwork) }; + let mut work: Vec> = unsafe { vec_uninit(lwork) }; unsafe { match l { MatrixLayout::F { .. } => { @@ -136,7 +136,7 @@ macro_rules! impl_qr { // calc let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2(lwork) }; + let mut work: Vec> = unsafe { vec_uninit(lwork) }; unsafe { match l { MatrixLayout::F { .. } => $gqr( diff --git a/lax/src/rcond.rs b/lax/src/rcond.rs index 39dc4799..dfc8a941 100644 --- a/lax/src/rcond.rs +++ b/lax/src/rcond.rs @@ -17,8 +17,8 @@ macro_rules! impl_rcond_real { let mut rcond = Self::Real::zero(); let mut info = 0; - let mut work: Vec> = unsafe { vec_uninit2(4 * n as usize) }; - let mut iwork: Vec> = unsafe { vec_uninit2(n as usize) }; + let mut work: Vec> = unsafe { vec_uninit(4 * n as usize) }; + let mut iwork: Vec> = unsafe { vec_uninit(n as usize) }; let norm_type = match l { MatrixLayout::C { .. } => NormType::Infinity, MatrixLayout::F { .. } => NormType::One, @@ -54,9 +54,8 @@ macro_rules! impl_rcond_complex { let (n, _) = l.size(); let mut rcond = Self::Real::zero(); let mut info = 0; - let mut work: Vec> = unsafe { vec_uninit2(2 * n as usize) }; - let mut rwork: Vec> = - unsafe { vec_uninit2(2 * n as usize) }; + let mut work: Vec> = unsafe { vec_uninit(2 * n as usize) }; + let mut rwork: Vec> = unsafe { vec_uninit(2 * n as usize) }; let norm_type = match l { MatrixLayout::C { .. } => NormType::Infinity, MatrixLayout::F { .. } => NormType::One, diff --git a/lax/src/solve.rs b/lax/src/solve.rs index 84affe39..ae76f190 100644 --- a/lax/src/solve.rs +++ b/lax/src/solve.rs @@ -33,7 +33,7 @@ macro_rules! impl_solve { return Ok(Vec::new()); } let k = ::std::cmp::min(row, col); - let mut ipiv = unsafe { vec_uninit2(k as usize) }; + let mut ipiv = unsafe { vec_uninit(k as usize) }; let mut info = 0; unsafe { $getrf( @@ -75,7 +75,7 @@ macro_rules! impl_solve { // actual let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2(lwork) }; + let mut work: Vec> = unsafe { vec_uninit(lwork) }; unsafe { $getri( &l.len(), diff --git a/lax/src/solveh.rs b/lax/src/solveh.rs index 09221f03..9f65978d 100644 --- a/lax/src/solveh.rs +++ b/lax/src/solveh.rs @@ -20,7 +20,7 @@ macro_rules! impl_solveh { impl Solveh_ for $scalar { fn bk(l: MatrixLayout, uplo: UPLO, a: &mut [Self]) -> Result { let (n, _) = l.size(); - let mut ipiv = unsafe { vec_uninit2(n as usize) }; + let mut ipiv = unsafe { vec_uninit(n as usize) }; if n == 0 { return Ok(Vec::new()); } @@ -44,7 +44,7 @@ macro_rules! impl_solveh { // actual let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2(lwork) }; + let mut work: Vec> = unsafe { vec_uninit(lwork) }; unsafe { $trf( uplo.as_ptr(), @@ -65,7 +65,7 @@ macro_rules! impl_solveh { fn invh(l: MatrixLayout, uplo: UPLO, a: &mut [Self], ipiv: &Pivot) -> Result<()> { let (n, _) = l.size(); let mut info = 0; - let mut work: Vec> = unsafe { vec_uninit2(n as usize) }; + let mut work: Vec> = unsafe { vec_uninit(n as usize) }; unsafe { $tri( uplo.as_ptr(), diff --git a/lax/src/svd.rs b/lax/src/svd.rs index 2968cff6..8c731c7a 100644 --- a/lax/src/svd.rs +++ b/lax/src/svd.rs @@ -65,21 +65,21 @@ macro_rules! impl_svd { let m = l.lda(); let mut u = match ju { - FlagSVD::All => Some(unsafe { vec_uninit2( (m * m) as usize) }), + FlagSVD::All => Some(unsafe { vec_uninit( (m * m) as usize) }), FlagSVD::No => None, }; let n = l.len(); let mut vt = match jvt { - FlagSVD::All => Some(unsafe { vec_uninit2( (n * n) as usize) }), + FlagSVD::All => Some(unsafe { vec_uninit( (n * n) as usize) }), FlagSVD::No => None, }; let k = std::cmp::min(m, n); - let mut s = unsafe { vec_uninit2( k as usize) }; + let mut s = unsafe { vec_uninit( k as usize) }; $( - let mut $rwork_ident: Vec> = unsafe { vec_uninit2( 5 * k as usize) }; + let mut $rwork_ident: Vec> = unsafe { vec_uninit( 5 * k as usize) }; )* // eval work size @@ -108,7 +108,7 @@ macro_rules! impl_svd { // calc let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2( lwork) }; + let mut work: Vec> = unsafe { vec_uninit( lwork) }; unsafe { $gesvd( ju.as_ptr(), diff --git a/lax/src/svddc.rs b/lax/src/svddc.rs index 6a703bd6..f956d848 100644 --- a/lax/src/svddc.rs +++ b/lax/src/svddc.rs @@ -39,7 +39,7 @@ macro_rules! impl_svddc { let m = l.lda(); let n = l.len(); let k = m.min(n); - let mut s = unsafe { vec_uninit2( k as usize) }; + let mut s = unsafe { vec_uninit( k as usize) }; let (u_col, vt_row) = match jobz { UVTFlag::Full | UVTFlag::None => (m, n), @@ -47,12 +47,12 @@ macro_rules! impl_svddc { }; let (mut u, mut vt) = match jobz { UVTFlag::Full => ( - Some(unsafe { vec_uninit2( (m * m) as usize) }), - Some(unsafe { vec_uninit2( (n * n) as usize) }), + Some(unsafe { vec_uninit( (m * m) as usize) }), + Some(unsafe { vec_uninit( (n * n) as usize) }), ), UVTFlag::Some => ( - Some(unsafe { vec_uninit2( (m * u_col) as usize) }), - Some(unsafe { vec_uninit2( (n * vt_row) as usize) }), + Some(unsafe { vec_uninit( (m * u_col) as usize) }), + Some(unsafe { vec_uninit( (n * vt_row) as usize) }), ), UVTFlag::None => (None, None), }; @@ -64,12 +64,12 @@ macro_rules! impl_svddc { UVTFlag::None => 7 * mn, _ => std::cmp::max(5*mn*mn + 5*mn, 2*mx*mn + 2*mn*mn + mn), }; - let mut $rwork_ident: Vec> = unsafe { vec_uninit2( lrwork) }; + let mut $rwork_ident: Vec> = unsafe { vec_uninit( lrwork) }; )* // eval work size let mut info = 0; - let mut iwork: Vec> = unsafe { vec_uninit2( 8 * k as usize) }; + let mut iwork: Vec> = unsafe { vec_uninit( 8 * k as usize) }; let mut work_size = [Self::zero()]; unsafe { $gesdd( @@ -94,7 +94,7 @@ macro_rules! impl_svddc { // do svd let lwork = work_size[0].to_usize().unwrap(); - let mut work: Vec> = unsafe { vec_uninit2( lwork) }; + let mut work: Vec> = unsafe { vec_uninit( lwork) }; unsafe { $gesdd( jobz.as_ptr(), diff --git a/lax/src/tridiagonal.rs b/lax/src/tridiagonal.rs index 3f86bd0e..ef8dfdf6 100644 --- a/lax/src/tridiagonal.rs +++ b/lax/src/tridiagonal.rs @@ -152,8 +152,8 @@ macro_rules! impl_tridiagonal { impl Tridiagonal_ for $scalar { fn lu_tridiagonal(mut a: Tridiagonal) -> Result> { let (n, _) = a.l.size(); - let mut du2 = unsafe { vec_uninit2( (n - 2) as usize) }; - let mut ipiv = unsafe { vec_uninit2( n as usize) }; + let mut du2 = unsafe { vec_uninit( (n - 2) as usize) }; + let mut ipiv = unsafe { vec_uninit( n as usize) }; // We have to calc one-norm before LU factorization let a_opnorm_one = a.opnorm_one(); let mut info = 0; @@ -182,9 +182,9 @@ macro_rules! impl_tridiagonal { fn rcond_tridiagonal(lu: &LUFactorizedTridiagonal) -> Result { let (n, _) = lu.a.l.size(); let ipiv = &lu.ipiv; - let mut work: Vec> = unsafe { vec_uninit2( 2 * n as usize) }; + let mut work: Vec> = unsafe { vec_uninit( 2 * n as usize) }; $( - let mut $iwork: Vec> = unsafe { vec_uninit2( n as usize) }; + let mut $iwork: Vec> = unsafe { vec_uninit( n as usize) }; )* let mut rcond = Self::Real::zero(); let mut info = 0;