pub trait TensorFactory: Send + Sync {
// Required methods
fn empty(
&self,
shape: &[usize],
dtype: DataType,
device: Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn zeros_like(
&self,
tensor: &Arc<dyn TensorLike>,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn from_slice(
&self,
data: &[f32],
shape: &[usize],
dtype: DataType,
device: Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn to_device(
&self,
tensor: &Arc<dyn TensorLike>,
device: Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn narrow(
&self,
tensor: &Arc<dyn TensorLike>,
dim: usize,
start: usize,
length: usize,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn reshape(
&self,
tensor: &Arc<dyn TensorLike>,
shape: &[usize],
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn zeros(
&self,
shape: &[usize],
dtype: DataType,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn ones(
&self,
shape: &[usize],
dtype: DataType,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn uniform(
&self,
shape: &[usize],
low: f32,
high: f32,
dtype: DataType,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn normal(
&self,
shape: &[usize],
mean: f32,
std: f32,
dtype: DataType,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
fn from_tensor(
&self,
tensor: &Arc<dyn TensorLike>,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>;
}Expand description
Tensor factory for creating tensors on specific backends
Required Methods§
Sourcefn empty(
&self,
shape: &[usize],
dtype: DataType,
device: Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn empty( &self, shape: &[usize], dtype: DataType, device: Device, ) -> Result<Arc<dyn TensorLike>, FerrumError>
创建指定形状/数据类型的空张量([MVP])
Sourcefn zeros_like(
&self,
tensor: &Arc<dyn TensorLike>,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn zeros_like( &self, tensor: &Arc<dyn TensorLike>, ) -> Result<Arc<dyn TensorLike>, FerrumError>
基于已有张量创建零填充张量([MVP])
Sourcefn from_slice(
&self,
data: &[f32],
shape: &[usize],
dtype: DataType,
device: Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn from_slice( &self, data: &[f32], shape: &[usize], dtype: DataType, device: Device, ) -> Result<Arc<dyn TensorLike>, FerrumError>
通过 slice 数据创建张量([MVP])
Sourcefn to_device(
&self,
tensor: &Arc<dyn TensorLike>,
device: Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn to_device( &self, tensor: &Arc<dyn TensorLike>, device: Device, ) -> Result<Arc<dyn TensorLike>, FerrumError>
迁移张量到目标设备([MVP])
Sourcefn narrow(
&self,
tensor: &Arc<dyn TensorLike>,
dim: usize,
start: usize,
length: usize,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn narrow( &self, tensor: &Arc<dyn TensorLike>, dim: usize, start: usize, length: usize, ) -> Result<Arc<dyn TensorLike>, FerrumError>
执行窄视图操作([MVP])
Sourcefn reshape(
&self,
tensor: &Arc<dyn TensorLike>,
shape: &[usize],
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn reshape( &self, tensor: &Arc<dyn TensorLike>, shape: &[usize], ) -> Result<Arc<dyn TensorLike>, FerrumError>
reshape 张量([MVP])
Sourcefn zeros(
&self,
shape: &[usize],
dtype: DataType,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn zeros( &self, shape: &[usize], dtype: DataType, device: &Device, ) -> Result<Arc<dyn TensorLike>, FerrumError>
Create tensor filled with zeros([Phase 2+] 可选实现)
Sourcefn ones(
&self,
shape: &[usize],
dtype: DataType,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn ones( &self, shape: &[usize], dtype: DataType, device: &Device, ) -> Result<Arc<dyn TensorLike>, FerrumError>
Create tensor filled with ones([Phase 2+])
Sourcefn uniform(
&self,
shape: &[usize],
low: f32,
high: f32,
dtype: DataType,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn uniform( &self, shape: &[usize], low: f32, high: f32, dtype: DataType, device: &Device, ) -> Result<Arc<dyn TensorLike>, FerrumError>
Create tensor from uniform random distribution([Phase 2+])
Sourcefn normal(
&self,
shape: &[usize],
mean: f32,
std: f32,
dtype: DataType,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn normal( &self, shape: &[usize], mean: f32, std: f32, dtype: DataType, device: &Device, ) -> Result<Arc<dyn TensorLike>, FerrumError>
Create tensor from normal distribution([Phase 2+])
Sourcefn from_tensor(
&self,
tensor: &Arc<dyn TensorLike>,
device: &Device,
) -> Result<Arc<dyn TensorLike>, FerrumError>
fn from_tensor( &self, tensor: &Arc<dyn TensorLike>, device: &Device, ) -> Result<Arc<dyn TensorLike>, FerrumError>
Create tensor from existing tensor reference (may involve copying)