#[cutile::module]
mod two_cga_trait_impl_module {
use cutile::core::*;
#[cuda_tile::variadic_trait(N = 6)]
pub trait TwoCgaTraitOp<E: ElementType, const A: [i32; N], const B: [i32; N]> {
fn two_cga_op(self, a: Tile<E, A>, b: Shape<B>);
}
#[cuda_tile::variadic_trait_impl()]
#[cuda_tile::variadic_impl(N = 6)]
impl<E: ElementType, const A: [i32; N], const B: [i32; N]> TwoCgaTraitOp<E, A, B> for () {
fn two_cga_op(self, _a: Tile<E, A>, _b: Shape<B>) {
unreachable!()
}
}
#[cuda_tile::variadic_trait(N = 6, M = 6)]
pub trait TwoCgaIndependent<E: ElementType, const A: [i32; N], const B: [i32; M]> {
fn two_cga_independent(self, a: Tile<E, A>, b: Shape<B>);
}
#[cuda_tile::variadic_trait_impl()]
#[cuda_tile::variadic_impl(N = 6, M = 6)]
impl<E: ElementType, const A: [i32; N], const B: [i32; M]> TwoCgaIndependent<E, A, B> for () {
fn two_cga_independent(self, _a: Tile<E, A>, _b: Shape<B>) {
unreachable!()
}
}
#[cuda_tile::variadic_trait(N = 6)]
pub trait MethodlessTwoCga<E: ElementType, const D: [i32; N]> {
fn methodless_two_cga(self, a: Tile<E, D>);
}
#[cuda_tile::variadic_trait_impl()]
impl<E: ElementType, const D: [i32; N]> MethodlessTwoCga<E, D> for () {
fn methodless_two_cga(self, _a: Tile<E, D>) {
unreachable!()
}
}
}