use crate::{
backend::Backend,
ops::{ConvOptions, ConvTransposeOptions},
Int, Tensor,
};
pub fn embedding<B>(weights: Tensor<B, 2>, indices: Tensor<B, 2, Int>) -> Tensor<B, 3>
where
B: Backend,
{
Tensor::new(B::embedding(weights.primitive, indices.primitive))
}
pub fn conv1d<B>(
x: Tensor<B, 3>,
weight: Tensor<B, 3>,
bias: Option<Tensor<B, 1>>,
options: ConvOptions<1>,
) -> Tensor<B, 3>
where
B: Backend,
{
Tensor::new(B::conv1d(
x.primitive,
weight.primitive,
bias.map(|b| b.primitive),
options,
))
}
pub fn conv2d<B>(
x: Tensor<B, 4>,
weight: Tensor<B, 4>,
bias: Option<Tensor<B, 1>>,
options: ConvOptions<2>,
) -> Tensor<B, 4>
where
B: Backend,
{
Tensor::new(B::conv2d(
x.primitive,
weight.primitive,
bias.map(|b| b.primitive),
options,
))
}
pub fn conv_transpose1d<B>(
x: Tensor<B, 3>,
weight: Tensor<B, 3>,
bias: Option<Tensor<B, 1>>,
options: ConvTransposeOptions<1>,
) -> Tensor<B, 3>
where
B: Backend,
{
Tensor::new(B::conv_transpose1d(
x.primitive,
weight.primitive,
bias.map(|b| b.primitive),
options,
))
}
pub fn conv_transpose2d<B>(
x: Tensor<B, 4>,
weight: Tensor<B, 4>,
bias: Option<Tensor<B, 1>>,
options: ConvTransposeOptions<2>,
) -> Tensor<B, 4>
where
B: Backend,
{
Tensor::new(B::conv_transpose2d(
x.primitive,
weight.primitive,
bias.map(|b| b.primitive),
options,
))
}
pub fn max_pool2d<B>(
x: Tensor<B, 4>,
kernel_size: [usize; 2],
stride: [usize; 2],
padding: [usize; 2],
) -> Tensor<B, 4>
where
B: Backend,
{
Tensor::new(B::max_pool2d(x.primitive, kernel_size, stride, padding))
}
pub fn avg_pool2d<B>(
x: Tensor<B, 4>,
kernel_size: [usize; 2],
stride: [usize; 2],
padding: [usize; 2],
) -> Tensor<B, 4>
where
B: Backend,
{
Tensor::new(B::avg_pool2d(x.primitive, kernel_size, stride, padding))
}
pub fn avg_pool1d<B>(
x: Tensor<B, 3>,
kernel_size: usize,
stride: usize,
padding: usize,
) -> Tensor<B, 3>
where
B: Backend,
{
Tensor::new(B::avg_pool1d(x.primitive, kernel_size, stride, padding))
}
pub fn max_pool2d_with_indices<B>(
x: Tensor<B, 4>,
kernel_size: [usize; 2],
stride: [usize; 2],
padding: [usize; 2],
) -> (Tensor<B, 4>, Tensor<B, 4, Int>)
where
B: Backend,
{
let output = B::max_pool2d_with_indices(x.primitive, kernel_size, stride, padding);
(Tensor::new(output.output), Tensor::new(output.indices))
}