use super::super::*;
use crate::{Result, TensorError};
pub fn execute_einsum_matmul<T>(
lhs: &GpuBuffer<T>,
rhs: &GpuBuffer<T>,
_lhs_shape: &[usize],
_rhs_shape: &[usize],
output_len: usize,
) -> Result<GpuBuffer<T>>
where
T: bytemuck::Pod + bytemuck::Zeroable + Clone + Send + Sync + 'static,
{
crate::gpu::ops::binary_ops::execute_binary_op(
lhs,
rhs,
crate::gpu::binary_ops::BinaryOp::MatMul,
output_len,
)
}
pub fn execute_einsum_batched_matmul<T>(
_lhs: &GpuBuffer<T>,
_rhs: &GpuBuffer<T>,
_lhs_shape: &[usize],
_rhs_shape: &[usize],
_output_len: usize,
) -> Result<GpuBuffer<T>>
where
T: bytemuck::Pod + bytemuck::Zeroable + Clone + Send + Sync + 'static,
{
Err(TensorError::unsupported_operation_simple(
"GPU einsum batched matmul not correctly implemented".to_string(),
))
}
pub fn execute_einsum_transpose<T>(_input: &GpuBuffer<T>, _axes: &[usize]) -> Result<GpuBuffer<T>>
where
T: bytemuck::Pod + bytemuck::Zeroable + Clone + Send + Sync + 'static,
{
Err(TensorError::unsupported_operation_simple(
"GPU einsum transpose not correctly implemented".to_string(),
))
}
pub fn execute_einsum_diagonal<T>(
_input: &GpuBuffer<T>,
_input_shape: &[usize],
_axes: &[usize],
_output_len: usize,
) -> Result<GpuBuffer<T>>
where
T: bytemuck::Pod + bytemuck::Zeroable + Clone + Send + Sync + 'static,
{
Err(TensorError::unsupported_operation_simple(
"GPU einsum diagonal not correctly implemented".to_string(),
))
}
pub fn execute_einsum_outer_product<T>(
_lhs: &GpuBuffer<T>,
_rhs: &GpuBuffer<T>,
_lhs_shape: &[usize],
_rhs_shape: &[usize],
_output_len: usize,
) -> Result<GpuBuffer<T>>
where
T: bytemuck::Pod + bytemuck::Zeroable + Clone + Send + Sync + 'static,
{
Err(TensorError::unsupported_operation_simple(
"GPU einsum outer product not correctly implemented".to_string(),
))
}
pub fn execute_einsum_vector_dot<T>(
lhs: &GpuBuffer<T>,
rhs: &GpuBuffer<T>,
lhs_shape: &[usize],
_rhs_shape: &[usize],
output_len: usize,
) -> Result<GpuBuffer<T>>
where
T: bytemuck::Pod + bytemuck::Zeroable + Clone + Send + Sync + 'static,
{
let temp_result = crate::gpu::ops::binary_ops::execute_binary_op(
lhs,
rhs,
crate::gpu::binary_ops::BinaryOp::Mul,
lhs.len(), )?;
let result = crate::gpu::ops::reduction_ops::execute_axis_reduction_op(
&temp_result,
super::operation_types::ReductionOp::Sum,
lhs_shape,
None, false, output_len,
)?;
Ok(result)
}
pub fn execute_einsum_trace<T>(_input: &GpuBuffer<T>, _axes: &[usize]) -> Result<GpuBuffer<T>>
where
T: bytemuck::Pod + bytemuck::Zeroable + Clone + Send + Sync + 'static,
{
Err(TensorError::unsupported_operation_simple(
"GPU einsum trace not correctly implemented".to_string(),
))
}