rstsr_core/device_cpu_serial/
conversion.rs1use 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}