Skip to content

Commit b5b92e3

Browse files
committed
Replace vec_uninit by vec_uninit2
1 parent dd425f4 commit b5b92e3

13 files changed

+53
-67
lines changed

lax/src/eig.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,13 @@ macro_rules! impl_eig_complex {
4141
} else {
4242
(EigenVectorFlag::Not, EigenVectorFlag::Not)
4343
};
44-
let mut eigs: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(n as usize) };
45-
let mut rwork: Vec<MaybeUninit<Self::Real>> =
46-
unsafe { vec_uninit2(2 * n as usize) };
44+
let mut eigs: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(n as usize) };
45+
let mut rwork: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit(2 * n as usize) };
4746

4847
let mut vl: Option<Vec<MaybeUninit<Self>>> =
49-
jobvl.then(|| unsafe { vec_uninit2((n * n) as usize) });
48+
jobvl.then(|| unsafe { vec_uninit((n * n) as usize) });
5049
let mut vr: Option<Vec<MaybeUninit<Self>>> =
51-
jobvr.then(|| unsafe { vec_uninit2((n * n) as usize) });
50+
jobvr.then(|| unsafe { vec_uninit((n * n) as usize) });
5251

5352
// calc work size
5453
let mut info = 0;
@@ -75,7 +74,7 @@ macro_rules! impl_eig_complex {
7574

7675
// actal ev
7776
let lwork = work_size[0].to_usize().unwrap();
78-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(lwork) };
77+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(lwork) };
7978
let lwork = lwork as i32;
8079
unsafe {
8180
$ev(
@@ -150,13 +149,13 @@ macro_rules! impl_eig_real {
150149
} else {
151150
(EigenVectorFlag::Not, EigenVectorFlag::Not)
152151
};
153-
let mut eig_re: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(n as usize) };
154-
let mut eig_im: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(n as usize) };
152+
let mut eig_re: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(n as usize) };
153+
let mut eig_im: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(n as usize) };
155154

156155
let mut vl: Option<Vec<MaybeUninit<Self>>> =
157-
jobvl.then(|| unsafe { vec_uninit2((n * n) as usize) });
156+
jobvl.then(|| unsafe { vec_uninit((n * n) as usize) });
158157
let mut vr: Option<Vec<MaybeUninit<Self>>> =
159-
jobvr.then(|| unsafe { vec_uninit2((n * n) as usize) });
158+
jobvr.then(|| unsafe { vec_uninit((n * n) as usize) });
160159

161160
// calc work size
162161
let mut info = 0;
@@ -183,7 +182,7 @@ macro_rules! impl_eig_real {
183182

184183
// actual ev
185184
let lwork = work_size[0].to_usize().unwrap();
186-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(lwork) };
185+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(lwork) };
187186
let lwork = lwork as i32;
188187
unsafe {
189188
$ev(
@@ -238,7 +237,7 @@ macro_rules! impl_eig_real {
238237

239238
let n = n as usize;
240239
let v = vr.or(vl).unwrap();
241-
let mut eigvecs: Vec<MaybeUninit<Self::Complex>> = unsafe { vec_uninit2(n * n) };
240+
let mut eigvecs: Vec<MaybeUninit<Self::Complex>> = unsafe { vec_uninit(n * n) };
242241
let mut col = 0;
243242
while col < n {
244243
if eig_im[col] == 0. {

lax/src/eigh.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ macro_rules! impl_eigh {
4242
assert_eq!(layout.len(), layout.lda());
4343
let n = layout.len();
4444
let jobz = if calc_v { EigenVectorFlag::Calc } else { EigenVectorFlag::Not };
45-
let mut eigs: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit2(n as usize) };
45+
let mut eigs: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit(n as usize) };
4646

4747
$(
48-
let mut $rwork_ident: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit2(3 * n as usize - 2 as usize) };
48+
let mut $rwork_ident: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit(3 * n as usize - 2 as usize) };
4949
)*
5050

5151
// calc work size
@@ -69,7 +69,7 @@ macro_rules! impl_eigh {
6969

7070
// actual ev
7171
let lwork = work_size[0].to_usize().unwrap();
72-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(lwork) };
72+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(lwork) };
7373
let lwork = lwork as i32;
7474
unsafe {
7575
$ev(
@@ -101,10 +101,10 @@ macro_rules! impl_eigh {
101101
assert_eq!(layout.len(), layout.lda());
102102
let n = layout.len();
103103
let jobz = if calc_v { EigenVectorFlag::Calc } else { EigenVectorFlag::Not };
104-
let mut eigs: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit2(n as usize) };
104+
let mut eigs: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit(n as usize) };
105105

106106
$(
107-
let mut $rwork_ident: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit2(3 * n as usize - 2) };
107+
let mut $rwork_ident: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit(3 * n as usize - 2) };
108108
)*
109109

110110
// calc work size
@@ -131,7 +131,7 @@ macro_rules! impl_eigh {
131131

132132
// actual evg
133133
let lwork = work_size[0].to_usize().unwrap();
134-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(lwork) };
134+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(lwork) };
135135
let lwork = lwork as i32;
136136
unsafe {
137137
$evg(

lax/src/layout.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ pub fn transpose<T: Copy>(layout: MatrixLayout, input: &[T]) -> (MatrixLayout, V
202202
let n = n as usize;
203203
assert_eq!(input.len(), m * n);
204204

205-
let mut out: Vec<MaybeUninit<T>> = unsafe { vec_uninit2(m * n) };
205+
let mut out: Vec<MaybeUninit<T>> = unsafe { vec_uninit(m * n) };
206206

207207
match layout {
208208
MatrixLayout::C { .. } => {

lax/src/least_squares.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ macro_rules! impl_least_squares {
8787
};
8888

8989
let rcond: Self::Real = -1.;
90-
let mut singular_values: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit2( k as usize) };
90+
let mut singular_values: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit( k as usize) };
9191
let mut rank: i32 = 0;
9292

9393
// eval work size
@@ -120,12 +120,12 @@ macro_rules! impl_least_squares {
120120

121121
// calc
122122
let lwork = work_size[0].to_usize().unwrap();
123-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(lwork) };
123+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(lwork) };
124124
let liwork = iwork_size[0].to_usize().unwrap();
125-
let mut iwork: Vec<MaybeUninit<i32>> = unsafe { vec_uninit2(liwork) };
125+
let mut iwork: Vec<MaybeUninit<i32>> = unsafe { vec_uninit(liwork) };
126126
$(
127127
let lrwork = $rwork[0].to_usize().unwrap();
128-
let mut $rwork: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit2(lrwork) };
128+
let mut $rwork: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit(lrwork) };
129129
)*
130130
unsafe {
131131
$gelsd(

lax/src/lib.rs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -269,19 +269,7 @@ impl EigenVectorFlag {
269269
/// ------
270270
/// - Memory is not initialized. Do not read the memory before write.
271271
///
272-
unsafe fn vec_uninit<T: Sized>(n: usize) -> Vec<T> {
273-
let mut v = Vec::with_capacity(n);
274-
v.set_len(n);
275-
v
276-
}
277-
278-
/// Create a vector without initialization
279-
///
280-
/// Safety
281-
/// ------
282-
/// - Memory is not initialized. Do not read the memory before write.
283-
///
284-
unsafe fn vec_uninit2<T: Sized>(n: usize) -> Vec<MaybeUninit<T>> {
272+
unsafe fn vec_uninit<T: Sized>(n: usize) -> Vec<MaybeUninit<T>> {
285273
let mut v = Vec::with_capacity(n);
286274
v.set_len(n);
287275
v

lax/src/opnorm.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ macro_rules! impl_opnorm {
1919
MatrixLayout::C { .. } => t.transpose(),
2020
};
2121
let mut work: Vec<MaybeUninit<Self::Real>> = if matches!(t, NormType::Infinity) {
22-
unsafe { vec_uninit2(m as usize) }
22+
unsafe { vec_uninit(m as usize) }
2323
} else {
2424
Vec::new()
2525
};

lax/src/qr.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ macro_rules! impl_qr {
2525
let m = l.lda();
2626
let n = l.len();
2727
let k = m.min(n);
28-
let mut tau = unsafe { vec_uninit2(k as usize) };
28+
let mut tau = unsafe { vec_uninit(k as usize) };
2929

3030
// eval work size
3131
let mut info = 0;
@@ -62,7 +62,7 @@ macro_rules! impl_qr {
6262

6363
// calc
6464
let lwork = work_size[0].to_usize().unwrap();
65-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(lwork) };
65+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(lwork) };
6666
unsafe {
6767
match l {
6868
MatrixLayout::F { .. } => {
@@ -136,7 +136,7 @@ macro_rules! impl_qr {
136136

137137
// calc
138138
let lwork = work_size[0].to_usize().unwrap();
139-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(lwork) };
139+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(lwork) };
140140
unsafe {
141141
match l {
142142
MatrixLayout::F { .. } => $gqr(

lax/src/rcond.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ macro_rules! impl_rcond_real {
1717
let mut rcond = Self::Real::zero();
1818
let mut info = 0;
1919

20-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(4 * n as usize) };
21-
let mut iwork: Vec<MaybeUninit<i32>> = unsafe { vec_uninit2(n as usize) };
20+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(4 * n as usize) };
21+
let mut iwork: Vec<MaybeUninit<i32>> = unsafe { vec_uninit(n as usize) };
2222
let norm_type = match l {
2323
MatrixLayout::C { .. } => NormType::Infinity,
2424
MatrixLayout::F { .. } => NormType::One,
@@ -54,9 +54,8 @@ macro_rules! impl_rcond_complex {
5454
let (n, _) = l.size();
5555
let mut rcond = Self::Real::zero();
5656
let mut info = 0;
57-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(2 * n as usize) };
58-
let mut rwork: Vec<MaybeUninit<Self::Real>> =
59-
unsafe { vec_uninit2(2 * n as usize) };
57+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(2 * n as usize) };
58+
let mut rwork: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit(2 * n as usize) };
6059
let norm_type = match l {
6160
MatrixLayout::C { .. } => NormType::Infinity,
6261
MatrixLayout::F { .. } => NormType::One,

lax/src/solve.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ macro_rules! impl_solve {
3333
return Ok(Vec::new());
3434
}
3535
let k = ::std::cmp::min(row, col);
36-
let mut ipiv = unsafe { vec_uninit2(k as usize) };
36+
let mut ipiv = unsafe { vec_uninit(k as usize) };
3737
let mut info = 0;
3838
unsafe {
3939
$getrf(
@@ -75,7 +75,7 @@ macro_rules! impl_solve {
7575

7676
// actual
7777
let lwork = work_size[0].to_usize().unwrap();
78-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(lwork) };
78+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(lwork) };
7979
unsafe {
8080
$getri(
8181
&l.len(),

lax/src/solveh.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ macro_rules! impl_solveh {
2020
impl Solveh_ for $scalar {
2121
fn bk(l: MatrixLayout, uplo: UPLO, a: &mut [Self]) -> Result<Pivot> {
2222
let (n, _) = l.size();
23-
let mut ipiv = unsafe { vec_uninit2(n as usize) };
23+
let mut ipiv = unsafe { vec_uninit(n as usize) };
2424
if n == 0 {
2525
return Ok(Vec::new());
2626
}
@@ -44,7 +44,7 @@ macro_rules! impl_solveh {
4444

4545
// actual
4646
let lwork = work_size[0].to_usize().unwrap();
47-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(lwork) };
47+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(lwork) };
4848
unsafe {
4949
$trf(
5050
uplo.as_ptr(),
@@ -65,7 +65,7 @@ macro_rules! impl_solveh {
6565
fn invh(l: MatrixLayout, uplo: UPLO, a: &mut [Self], ipiv: &Pivot) -> Result<()> {
6666
let (n, _) = l.size();
6767
let mut info = 0;
68-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2(n as usize) };
68+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit(n as usize) };
6969
unsafe {
7070
$tri(
7171
uplo.as_ptr(),

lax/src/svd.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,21 @@ macro_rules! impl_svd {
6565

6666
let m = l.lda();
6767
let mut u = match ju {
68-
FlagSVD::All => Some(unsafe { vec_uninit2( (m * m) as usize) }),
68+
FlagSVD::All => Some(unsafe { vec_uninit( (m * m) as usize) }),
6969
FlagSVD::No => None,
7070
};
7171

7272
let n = l.len();
7373
let mut vt = match jvt {
74-
FlagSVD::All => Some(unsafe { vec_uninit2( (n * n) as usize) }),
74+
FlagSVD::All => Some(unsafe { vec_uninit( (n * n) as usize) }),
7575
FlagSVD::No => None,
7676
};
7777

7878
let k = std::cmp::min(m, n);
79-
let mut s = unsafe { vec_uninit2( k as usize) };
79+
let mut s = unsafe { vec_uninit( k as usize) };
8080

8181
$(
82-
let mut $rwork_ident: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit2( 5 * k as usize) };
82+
let mut $rwork_ident: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit( 5 * k as usize) };
8383
)*
8484

8585
// eval work size
@@ -108,7 +108,7 @@ macro_rules! impl_svd {
108108

109109
// calc
110110
let lwork = work_size[0].to_usize().unwrap();
111-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2( lwork) };
111+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit( lwork) };
112112
unsafe {
113113
$gesvd(
114114
ju.as_ptr(),

lax/src/svddc.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,20 @@ macro_rules! impl_svddc {
3939
let m = l.lda();
4040
let n = l.len();
4141
let k = m.min(n);
42-
let mut s = unsafe { vec_uninit2( k as usize) };
42+
let mut s = unsafe { vec_uninit( k as usize) };
4343

4444
let (u_col, vt_row) = match jobz {
4545
UVTFlag::Full | UVTFlag::None => (m, n),
4646
UVTFlag::Some => (k, k),
4747
};
4848
let (mut u, mut vt) = match jobz {
4949
UVTFlag::Full => (
50-
Some(unsafe { vec_uninit2( (m * m) as usize) }),
51-
Some(unsafe { vec_uninit2( (n * n) as usize) }),
50+
Some(unsafe { vec_uninit( (m * m) as usize) }),
51+
Some(unsafe { vec_uninit( (n * n) as usize) }),
5252
),
5353
UVTFlag::Some => (
54-
Some(unsafe { vec_uninit2( (m * u_col) as usize) }),
55-
Some(unsafe { vec_uninit2( (n * vt_row) as usize) }),
54+
Some(unsafe { vec_uninit( (m * u_col) as usize) }),
55+
Some(unsafe { vec_uninit( (n * vt_row) as usize) }),
5656
),
5757
UVTFlag::None => (None, None),
5858
};
@@ -64,12 +64,12 @@ macro_rules! impl_svddc {
6464
UVTFlag::None => 7 * mn,
6565
_ => std::cmp::max(5*mn*mn + 5*mn, 2*mx*mn + 2*mn*mn + mn),
6666
};
67-
let mut $rwork_ident: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit2( lrwork) };
67+
let mut $rwork_ident: Vec<MaybeUninit<Self::Real>> = unsafe { vec_uninit( lrwork) };
6868
)*
6969

7070
// eval work size
7171
let mut info = 0;
72-
let mut iwork: Vec<MaybeUninit<i32>> = unsafe { vec_uninit2( 8 * k as usize) };
72+
let mut iwork: Vec<MaybeUninit<i32>> = unsafe { vec_uninit( 8 * k as usize) };
7373
let mut work_size = [Self::zero()];
7474
unsafe {
7575
$gesdd(
@@ -94,7 +94,7 @@ macro_rules! impl_svddc {
9494

9595
// do svd
9696
let lwork = work_size[0].to_usize().unwrap();
97-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2( lwork) };
97+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit( lwork) };
9898
unsafe {
9999
$gesdd(
100100
jobz.as_ptr(),

lax/src/tridiagonal.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ macro_rules! impl_tridiagonal {
152152
impl Tridiagonal_ for $scalar {
153153
fn lu_tridiagonal(mut a: Tridiagonal<Self>) -> Result<LUFactorizedTridiagonal<Self>> {
154154
let (n, _) = a.l.size();
155-
let mut du2 = unsafe { vec_uninit2( (n - 2) as usize) };
156-
let mut ipiv = unsafe { vec_uninit2( n as usize) };
155+
let mut du2 = unsafe { vec_uninit( (n - 2) as usize) };
156+
let mut ipiv = unsafe { vec_uninit( n as usize) };
157157
// We have to calc one-norm before LU factorization
158158
let a_opnorm_one = a.opnorm_one();
159159
let mut info = 0;
@@ -182,9 +182,9 @@ macro_rules! impl_tridiagonal {
182182
fn rcond_tridiagonal(lu: &LUFactorizedTridiagonal<Self>) -> Result<Self::Real> {
183183
let (n, _) = lu.a.l.size();
184184
let ipiv = &lu.ipiv;
185-
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit2( 2 * n as usize) };
185+
let mut work: Vec<MaybeUninit<Self>> = unsafe { vec_uninit( 2 * n as usize) };
186186
$(
187-
let mut $iwork: Vec<MaybeUninit<i32>> = unsafe { vec_uninit2( n as usize) };
187+
let mut $iwork: Vec<MaybeUninit<i32>> = unsafe { vec_uninit( n as usize) };
188188
)*
189189
let mut rcond = Self::Real::zero();
190190
let mut info = 0;

0 commit comments

Comments
 (0)