use cubecl::prelude::*;
use cubecl::std::tensor::{View, layout::linear::LinearView};
use crate::scale::{GlobalScale, Scale};
#[derive(CubeType)]
pub struct Scales<'a, FS: CubePrimitive> {
grid: &'a View<'a, FS, usize>,
global: GlobalScale,
}
#[cube]
impl<'a, FS: CubePrimitive> Scales<'a, FS> {
pub fn new(
grid: &'a View<'a, FS, usize>,
global: ComptimeOption<LinearView<'_, f32>>,
) -> Scales<'a, FS> {
Scales::<'a, FS> {
grid,
global: GlobalScale::read(global),
}
}
pub fn read(&self, pos: usize) -> Scale<FS> {
self.global.at::<FS>(self.grid.read(pos))
}
}