use std::sync::Arc;
use oxmera_core::{DType, Device, Layout, Result, Shape};
use crate::storage::Storage;
#[derive(Debug, Clone)]
pub struct Tensor {
storage: Arc<Storage>,
layout: Layout,
}
impl Tensor {
pub fn from_storage(storage: Arc<Storage>, layout: Layout) -> Result<Self> {
let _ = (storage, layout);
todo!("exercise A1: shape and strides")
}
pub fn from_vec_f32(data: Vec<f32>, shape: Shape) -> Result<Self> {
let _ = (data, shape);
todo!("exercise A1: shape and strides")
}
pub fn shape(&self) -> &Shape {
&self.layout.shape
}
pub fn layout(&self) -> &Layout {
&self.layout
}
pub fn dtype(&self) -> DType {
self.storage.dtype()
}
pub fn device(&self) -> Device {
self.storage.device()
}
pub fn storage(&self) -> &Arc<Storage> {
&self.storage
}
pub fn reshape(&self, shape: Shape) -> Result<Self> {
let _ = shape;
todo!("exercise A3: strided views")
}
pub fn permute(&self, perm: &[usize]) -> Result<Self> {
let _ = perm;
todo!("exercise A3: strided views")
}
pub fn narrow(&self, dim: usize, start: usize, len: usize) -> Result<Self> {
let _ = (dim, start, len);
todo!("exercise A3: strided views")
}
pub fn contiguous(&self) -> Result<Self> {
todo!("exercise A3: strided views")
}
pub fn get_f32(&self, index: &[usize]) -> Result<f32> {
let _ = index;
todo!("exercise A1: shape and strides")
}
}