ariadnetor_tensor/dense/
tensor_data.rs1use ariadnetor_core::backend::MemoryOrder;
4
5use crate::{DenseLayout, DenseStorage, TensorData};
6
7pub type DenseTensorData<T = f64> = TensorData<DenseStorage<T>, DenseLayout>;
9
10impl<T> DenseTensorData<T> {
11 pub fn from_raw_parts(data: Vec<T>, shape: Vec<usize>, order: MemoryOrder) -> Self
18 where
19 T: Clone,
20 {
21 let storage = DenseStorage::new(data);
22 let layout = DenseLayout::new(shape, order);
23 Self::new(storage, layout)
24 }
25
26 pub fn data(&self) -> &[T] {
28 self.storage().data()
29 }
30
31 pub fn shape(&self) -> &[usize] {
33 self.layout().shape()
34 }
35
36 pub fn order(&self) -> MemoryOrder {
38 self.layout().order()
39 }
40
41 pub fn rank(&self) -> usize {
43 self.layout().rank()
44 }
45
46 pub fn len(&self) -> usize {
48 self.shape().iter().product()
49 }
50
51 pub fn is_empty(&self) -> bool {
53 self.len() == 0
54 }
55}