Skip to main content

runmat_builtins/catalog/
integer.rs

1use serde::Serialize;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
4pub enum BuiltinIntegerClass {
5    Int8,
6    Int16,
7    Int32,
8    Int64,
9    Uint8,
10    Uint16,
11    Uint32,
12    Uint64,
13}
14
15pub const ALL_INTEGER_CLASSES: [BuiltinIntegerClass; 8] = [
16    BuiltinIntegerClass::Int8,
17    BuiltinIntegerClass::Int16,
18    BuiltinIntegerClass::Int32,
19    BuiltinIntegerClass::Int64,
20    BuiltinIntegerClass::Uint8,
21    BuiltinIntegerClass::Uint16,
22    BuiltinIntegerClass::Uint32,
23    BuiltinIntegerClass::Uint64,
24];
25
26pub const SIGNED_INTEGER_CLASSES: [BuiltinIntegerClass; 4] = [
27    BuiltinIntegerClass::Int8,
28    BuiltinIntegerClass::Int16,
29    BuiltinIntegerClass::Int32,
30    BuiltinIntegerClass::Int64,
31];
32
33pub const INTEGER_CLASSES_THROUGH_16_BITS: [BuiltinIntegerClass; 4] = [
34    BuiltinIntegerClass::Int8,
35    BuiltinIntegerClass::Int16,
36    BuiltinIntegerClass::Uint8,
37    BuiltinIntegerClass::Uint16,
38];
39
40pub const INTEGER_CLASSES_THROUGH_32_BITS: [BuiltinIntegerClass; 6] = [
41    BuiltinIntegerClass::Int8,
42    BuiltinIntegerClass::Int16,
43    BuiltinIntegerClass::Int32,
44    BuiltinIntegerClass::Uint8,
45    BuiltinIntegerClass::Uint16,
46    BuiltinIntegerClass::Uint32,
47];
48
49pub const UNSIGNED_8_16_CLASSES: [BuiltinIntegerClass; 2] =
50    [BuiltinIntegerClass::Uint8, BuiltinIntegerClass::Uint16];
51
52#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
53pub enum BuiltinIntegerScalarDoubleRule {
54    NotApplicable,
55    Allowed,
56    AllowedExceptWith64BitInteger,
57    Rejected,
58}
59
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
61pub enum BuiltinIntegerInputAvailability {
62    Documented,
63    RunMatOnly,
64    Rejected,
65}
66
67#[derive(Debug, Clone, Serialize)]
68pub struct BuiltinIntegerInputCapability {
69    pub name: &'static str,
70    pub classes: &'static [BuiltinIntegerClass],
71    pub availability: BuiltinIntegerInputAvailability,
72    pub scalar_double: BuiltinIntegerScalarDoubleRule,
73    pub notes: &'static str,
74}
75
76#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
77pub enum BuiltinIntegerComputationDomain {
78    ExactInteger,
79    FloatingPoint,
80    Predicate,
81    Structural,
82    FunctionSpecific,
83}
84
85#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
86pub enum BuiltinIntegerOutputClassRule {
87    PreserveInput,
88    PreserveNondoubleInput,
89    Double,
90    Logical,
91    OptionDependent,
92    NotApplicable,
93    FunctionSpecific,
94}
95
96#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
97pub enum BuiltinIntegerOverflowRule {
98    Saturate,
99    Error,
100    NotApplicable,
101    EvidenceOpen,
102    FunctionSpecific,
103}
104
105#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
106pub enum BuiltinIntegerBackendRule {
107    HostOnly,
108    HostAndGpu,
109    GatherFallback,
110    GpuRestricted,
111    FunctionSpecific,
112}
113
114#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
115pub enum BuiltinIntegerOverloadKind {
116    ScalarOnly,
117    ElementwiseShapePreserving,
118    SameSizeOrScalar,
119    BroadcastCompatible,
120    StructuralParameter,
121    Multiple,
122    FunctionSpecific,
123}
124
125#[derive(Debug, Clone, Serialize)]
126pub struct BuiltinIntegerCapabilityDescriptor {
127    pub form: &'static str,
128    pub inputs: &'static [BuiltinIntegerInputCapability],
129    pub computation_domain: BuiltinIntegerComputationDomain,
130    pub output_class: BuiltinIntegerOutputClassRule,
131    pub overflow: BuiltinIntegerOverflowRule,
132    pub backend: BuiltinIntegerBackendRule,
133    pub overload: BuiltinIntegerOverloadKind,
134    pub notes: &'static str,
135}
136
137#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
138pub enum BuiltinIntegerAuditKind {
139    AliasOf,
140    NotApplicable,
141}
142
143#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
144pub struct BuiltinIntegerAuditDescriptor {
145    pub kind: BuiltinIntegerAuditKind,
146    #[serde(skip_serializing_if = "Option::is_none")]
147    pub canonical_builtin: Option<&'static str>,
148    pub notes: &'static str,
149}