use super::{Tensor,Int};
use crate::{TensorPrimitive,moe::{MoeOps,MoeRouterWeightOptions}};
pub fn selected_router_weights<B:MoeOps>(logits:Tensor<B,2>,indices:Tensor<B,2,Int>,options:MoeRouterWeightOptions) -> Result<Tensor<B,2>,B::MoeError> {
B::moe_selected_weights(logits.into_primitive().tensor(),indices.into_primitive(),options)
.map(|output|Tensor::from_primitive(TensorPrimitive::Float(output)))
}
pub fn selected_router_weights_backward<B:MoeOps>(logits:Tensor<B,2>,indices:Tensor<B,2,Int>,gradient:Tensor<B,2>,options:MoeRouterWeightOptions)
-> Result<Tensor<B,2>,B::MoeError> {
B::moe_selected_weights_backward(logits.into_primitive().tensor(),indices.into_primitive(),gradient.into_primitive().tensor(),options)
.map(|output|Tensor::from_primitive(TensorPrimitive::Float(output)))
}