runmat-builtins 0.6.2

RunMat built-in functions and standard library components
Documentation
use serde::Serialize;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum BuiltinIntegerClass {
    Int8,
    Int16,
    Int32,
    Int64,
    Uint8,
    Uint16,
    Uint32,
    Uint64,
}

pub const ALL_INTEGER_CLASSES: [BuiltinIntegerClass; 8] = [
    BuiltinIntegerClass::Int8,
    BuiltinIntegerClass::Int16,
    BuiltinIntegerClass::Int32,
    BuiltinIntegerClass::Int64,
    BuiltinIntegerClass::Uint8,
    BuiltinIntegerClass::Uint16,
    BuiltinIntegerClass::Uint32,
    BuiltinIntegerClass::Uint64,
];

pub const SIGNED_INTEGER_CLASSES: [BuiltinIntegerClass; 4] = [
    BuiltinIntegerClass::Int8,
    BuiltinIntegerClass::Int16,
    BuiltinIntegerClass::Int32,
    BuiltinIntegerClass::Int64,
];

pub const INTEGER_CLASSES_THROUGH_16_BITS: [BuiltinIntegerClass; 4] = [
    BuiltinIntegerClass::Int8,
    BuiltinIntegerClass::Int16,
    BuiltinIntegerClass::Uint8,
    BuiltinIntegerClass::Uint16,
];

pub const INTEGER_CLASSES_THROUGH_32_BITS: [BuiltinIntegerClass; 6] = [
    BuiltinIntegerClass::Int8,
    BuiltinIntegerClass::Int16,
    BuiltinIntegerClass::Int32,
    BuiltinIntegerClass::Uint8,
    BuiltinIntegerClass::Uint16,
    BuiltinIntegerClass::Uint32,
];

pub const UNSIGNED_8_16_CLASSES: [BuiltinIntegerClass; 2] =
    [BuiltinIntegerClass::Uint8, BuiltinIntegerClass::Uint16];

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum BuiltinIntegerScalarDoubleRule {
    NotApplicable,
    Allowed,
    AllowedExceptWith64BitInteger,
    Rejected,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum BuiltinIntegerInputAvailability {
    Documented,
    RunMatOnly,
    Rejected,
}

#[derive(Debug, Clone, Serialize)]
pub struct BuiltinIntegerInputCapability {
    pub name: &'static str,
    pub classes: &'static [BuiltinIntegerClass],
    pub availability: BuiltinIntegerInputAvailability,
    pub scalar_double: BuiltinIntegerScalarDoubleRule,
    pub notes: &'static str,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum BuiltinIntegerComputationDomain {
    ExactInteger,
    FloatingPoint,
    Predicate,
    Structural,
    FunctionSpecific,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum BuiltinIntegerOutputClassRule {
    PreserveInput,
    PreserveNondoubleInput,
    Double,
    Logical,
    OptionDependent,
    NotApplicable,
    FunctionSpecific,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum BuiltinIntegerOverflowRule {
    Saturate,
    Error,
    NotApplicable,
    EvidenceOpen,
    FunctionSpecific,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum BuiltinIntegerBackendRule {
    HostOnly,
    HostAndGpu,
    GatherFallback,
    GpuRestricted,
    FunctionSpecific,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum BuiltinIntegerOverloadKind {
    ScalarOnly,
    ElementwiseShapePreserving,
    SameSizeOrScalar,
    BroadcastCompatible,
    StructuralParameter,
    Multiple,
    FunctionSpecific,
}

#[derive(Debug, Clone, Serialize)]
pub struct BuiltinIntegerCapabilityDescriptor {
    pub form: &'static str,
    pub inputs: &'static [BuiltinIntegerInputCapability],
    pub computation_domain: BuiltinIntegerComputationDomain,
    pub output_class: BuiltinIntegerOutputClassRule,
    pub overflow: BuiltinIntegerOverflowRule,
    pub backend: BuiltinIntegerBackendRule,
    pub overload: BuiltinIntegerOverloadKind,
    pub notes: &'static str,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum BuiltinIntegerAuditKind {
    AliasOf,
    NotApplicable,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct BuiltinIntegerAuditDescriptor {
    pub kind: BuiltinIntegerAuditKind,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub canonical_builtin: Option<&'static str>,
    pub notes: &'static str,
}