libmir-metal 0.1.0

Metal inference backend for libmir
use thiserror::Error;

pub type Result<T> = std::result::Result<T, Error>;

#[derive(Debug, Error)]
pub enum Error {
    #[error("MLX {0} returned a null handle")]
    NullHandle(&'static str),
    #[error("model tensor is missing: {0}")]
    MissingTensor(String),
    #[error("invalid quantized tensor layout: {0}")]
    InvalidQuantization(String),
    #[error("invalid native model configuration: {0}")]
    InvalidModel(String),
    #[error("invalid sampling configuration: {0}")]
    InvalidSampling(String),
    #[error("float conversion failed: {0}")]
    Float(#[from] std::num::ParseFloatError),
    #[error("model layout error: {0}")]
    Model(#[from] models::ModelsError),
    #[error("mirtal error: {0}")]
    Mirtal(#[from] mirtal::Error),
    #[error("integer conversion failed: {0}")]
    Integer(#[from] std::num::TryFromIntError),
    #[error("integer parse failed: {0}")]
    IntegerParse(#[from] std::num::ParseIntError),
    #[cfg(test)]
    #[error("benchmark output failed: {0}")]
    BenchmarkOutput(#[from] std::io::Error),
    #[error("shape {shape:?} contains {elements} elements, data contains {data}")]
    Shape {
        shape: Vec<i32>,
        elements: usize,
        data: usize,
    },
    #[error("shape element count overflowed usize")]
    ShapeOverflow,
}