knok 0.1.0

Compile-time linalg graphs for Rust
#[derive(Clone, Copy, Debug)]
pub struct GraphArtifact {
    pub function_name: &'static str,
    pub input_shapes: &'static [&'static [usize]],
    pub output_shape: &'static [usize],
    pub variants: &'static [GraphArtifactVariant],
}

impl GraphArtifact {
    pub fn variant_for_driver(&self, driver: &str) -> Option<GraphArtifactVariant> {
        self.variants
            .iter()
            .copied()
            .find(|variant| variant.driver == driver)
    }

    pub fn first_variant(&self) -> Option<GraphArtifactVariant> {
        self.variants.first().copied()
    }
}

#[derive(Clone, Copy, Debug)]
pub struct GraphArtifactVariant {
    pub vmfb: &'static [u8],
    pub backend: &'static str,
    pub driver: &'static str,
    pub compile_flags: &'static [&'static str],
}