Skip to main content

scir_nd/
lib.rs

1//! ndarray interoperability helpers for SciR.
2#![deny(missing_docs)]
3
4use ndarray::Array1;
5
6/// Convert a `Vec<T>` into an ndarray `Array1<T>`.
7///
8/// # Examples
9/// ```
10/// use ndarray::Array1;
11/// let v = vec![1,2,3];
12/// let a: Array1<i32> = scir_nd::vec_to_array1(v);
13/// assert_eq!(a.len(), 3);
14/// ```
15pub fn vec_to_array1<T>(v: Vec<T>) -> Array1<T> {
16    Array1::from(v)
17}
18
19/// Convert an `Array1<T>` into a `Vec<T>`.
20///
21/// # Examples
22/// ```
23/// use ndarray::Array1;
24/// let a = Array1::from_vec(vec![1,2,3]);
25/// let v = scir_nd::array1_to_vec(&a);
26/// assert_eq!(v, vec![1,2,3]);
27/// ```
28pub fn array1_to_vec<T: Clone>(a: &Array1<T>) -> Vec<T> {
29    a.to_vec()
30}
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35    use scir_core::assert_close;
36
37    #[test]
38    fn roundtrip_vec() {
39        let v = vec![1.0, 2.0, 3.0];
40        let arr = vec_to_array1(v.clone());
41        let back = array1_to_vec(&arr);
42        assert_close!(&v, &back, slice, tol = 0.0);
43    }
44
45    #[test]
46    fn roundtrip_array() {
47        let arr = Array1::from_vec(vec![1.0, 2.0, 3.0]);
48        let back = vec_to_array1(array1_to_vec(&arr));
49        assert_close!(&arr, &back, array, tol = 0.0);
50    }
51}