// Copyright (c) 2020-2024, ARM Limited. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. namespace tosa; // This corresponds to the version. file_identifier "TOSA"; // File extension of any written files. file_extension "tosa"; // NOTE: New values added to the schema should be placed // at the end of the list in order to keep schema stable. enum DType:uint32 { UNKNOWN = 0, BOOL, UINT8, INT4, INT8, INT16, INT32, INT48, FP32, UINT16, FP16, BF16, SHAPE, FP8E4M3, FP8E5M2, } enum ResizeMode:uint32 { UNKNOWN = 0, NEAREST, BILINEAR, } enum Op:uint32 { UNKNOWN = 0, ARGMAX, AVG_POOL2D, CONV2D, CONV3D, DEPTHWISE_CONV2D, FULLY_CONNECTED, MATMUL, MAX_POOL2D, TRANSPOSE_CONV2D, CLAMP, RESERVED, SIGMOID, TANH, ADD, ARITHMETIC_RIGHT_SHIFT, BITWISE_AND, BITWISE_OR, BITWISE_XOR, INTDIV, LOGICAL_AND, LOGICAL_LEFT_SHIFT, LOGICAL_RIGHT_SHIFT, LOGICAL_OR, LOGICAL_XOR, MAXIMUM, MINIMUM, MUL, POW, SUB, TABLE, ABS, BITWISE_NOT, CEIL, CLZ, EXP, FLOOR, LOG, LOGICAL_NOT, NEGATE, RECIPROCAL, RSQRT, SELECT, EQUAL, GREATER, GREATER_EQUAL, REDUCE_ANY, REDUCE_ALL, REDUCE_MAX, REDUCE_MIN, REDUCE_PRODUCT, REDUCE_SUM, CONCAT, PAD, RESHAPE, REVERSE, SLICE, TILE, TRANSPOSE, GATHER, SCATTER, RESIZE, CAST, RESCALE, CONST, IDENTITY, CUSTOM, COND_IF, WHILE_LOOP, FFT2D, RFFT2D, ERF, DIM, CONST_SHAPE, CONCAT_SHAPE, ADD_SHAPE, SUB_SHAPE, MUL_SHAPE, DIV_SHAPE, COS, SIN, } union Attribute { PoolAttribute, ConvAttribute, TransposeConvAttribute, PadAttribute, AxisAttribute, ResizeAttribute, ClampAttribute, RescaleAttribute, MulAttribute, ArithmeticRightShiftAttribute, CondIfAttribute, WhileLoopAttribute, TransposeAttribute, TableAttribute, MatMulAttribute, FullyConnectedAttribute, NegateAttribute, CustomAttribute, FFTAttribute, RFFTAttribute, } table PoolAttribute { pad: [int32]; kernel: [int32]; stride: [int32]; input_zp: int32; output_zp: int32; acc_type: DType; } table ConvAttribute { pad: [int32]; stride: [int32]; dilation: [int32]; input_zp: int32; weight_zp: int32; local_bound: bool; acc_type: DType; } table TransposeConvAttribute { out_pad: [int32]; stride: [int32]; input_zp: int32; weight_zp: int32; local_bound: bool; acc_type: DType; } table PadAttribute { pad_const: [ubyte] (force_align: 8); } table AxisAttribute { axis: int32; } table ResizeAttribute { scale: [int16]; offset: [int16]; border: [int16]; mode: ResizeMode; } table ClampAttribute { min_val: [ubyte] (force_align: 8); max_val: [ubyte] (force_align: 8); } table RescaleAttribute { input_zp: int32; output_zp: int32; scale32: bool; double_round: bool; per_channel: bool; input_unsigned: bool; output_unsigned: bool; } table MulAttribute { shift: int32; } table ArithmeticRightShiftAttribute { round: bool; } table CondIfAttribute { then_graph: string; else_graph: string; } table WhileLoopAttribute { cond_graph: string; body_graph: string; } table TransposeAttribute { perms: [int32]; } table TableAttribute { table: [int16]; } table MatMulAttribute { a_zp: int32; b_zp: int32; } table FullyConnectedAttribute { input_zp: int32; weight_zp: int32; } table NegateAttribute { input1_zp: int32; output_zp: int32; } table CustomAttribute { operator_name:string; domain_name:string; implementation_attrs:[ubyte]; } table FFTAttribute { inverse: bool; local_bound: bool; } table RFFTAttribute { local_bound: bool; } table Version { _major: int32 = -1; _minor: int32 = -1; _patch: int32 = -1; _draft: bool = true; } table TosaTensor { name:string; // name of the tensor, used for solving dependency shape:[int32]; // shape of the tensor type:DType; // data type of the tensor data: [ubyte] (force_align: 8); // raw data array if it's a constant tensor. variable: bool; // is this a variable tensor is_unranked: bool; // whether this is an unranked tensor variable_name:string; // name for variable attribute } table TosaOperator { op:Op; // operator enum attribute:Attribute; // union structure. operator attribute inputs:[string]; // list of input tensor names outputs:[string]; // list of output tensor names } table TosaBasicBlock { name:string; // basic block name operators:[TosaOperator]; // operators array tensors:[TosaTensor]; // tensors array inputs:[string]; // name of graph inputs outputs:[string]; // name of graph outputs } table TosaRegion { name:string; // name of region blocks:[TosaBasicBlock]; // basic blocks array } table TosaGraph { version:Version (required); regions:[TosaRegion]; // regions array } root_type TosaGraph;