rstsr_core/device_cpu_serial/
conversion.rs

1use crate::prelude_dev::*;
2
3impl<'a, R, T, D> DeviceChangeAPI<'a, DeviceCpuSerial, R, T, D> for DeviceCpuSerial
4where
5    T: Clone + Send + Sync + 'a,
6    D: DimAPI,
7    R: DataCloneAPI<Data = Vec<T>>,
8{
9    type Repr = R;
10    type ReprTo = DataRef<'a, Vec<T>>;
11
12    fn change_device(
13        tensor: TensorAny<R, T, DeviceCpuSerial, D>,
14        device: &DeviceCpuSerial,
15    ) -> Result<TensorAny<Self::Repr, T, DeviceCpuSerial, D>> {
16        let (storage, layout) = tensor.into_raw_parts();
17        let (data, _) = storage.into_raw_parts();
18        let storage = Storage::new(data, device.clone());
19        let tensor = TensorAny::new(storage, layout);
20        Ok(tensor)
21    }
22
23    fn into_device(
24        tensor: TensorAny<R, T, DeviceCpuSerial, D>,
25        device: &DeviceCpuSerial,
26    ) -> Result<TensorAny<DataOwned<Vec<T>>, T, DeviceCpuSerial, D>> {
27        let tensor = tensor.into_owned();
28        DeviceChangeAPI::change_device(tensor, device)
29    }
30
31    fn to_device(
32        tensor: &'a TensorAny<R, T, DeviceCpuSerial, D>,
33        device: &DeviceCpuSerial,
34    ) -> Result<TensorView<'a, T, DeviceCpuSerial, D>> {
35        let view = tensor.view();
36        DeviceChangeAPI::change_device(view, device)
37    }
38}