// SPDX-License-Identifier: Apache-2.0 syntax = "proto2"; package {PACKAGE_NAME}; // #if ONNX-ML import "onnx/onnx-ml.proto"; // #else import "onnx/onnx.proto"; // #endif // This file contains the proto definitions for MapProto and // SequenceProto. These protos are used to represent the data structures // of maps and sequence for use in test data or ModelProto. // Sequences // // Defines a dense, ordered, collection of elements that are of homogeneous types. // Sequences can be made out of tensors, maps, or sequences. // // If a sequence is made out of tensors, the tensors must have the same element // type (i.e. int32). In some cases, the tensors in a sequence can have different // shapes. Whether the tensors can have different shapes or not depends on the // type/shape associated with the corresponding "ValueInfo". For example, // "Sequence" means that all tensors have same shape. However, // "Sequence" means they can have different // shapes (all of rank 2), where "omitted" means the corresponding dimension has // no symbolic/constant value. Finally, "Sequence>" means // that the different tensors can have different ranks, when the "shape" itself // is omitted from the tensor-type. For a more complete description, refer to // https://github.com/onnx/onnx/blob/main/docs/IR.md#static-tensor-shapes. // message SequenceProto { optional string name = 1; enum DataType { UNDEFINED = 0; TENSOR = 1; SPARSE_TENSOR = 2; SEQUENCE = 3; MAP = 4; OPTIONAL = 5; } // The data type of the element. // This field MUST have a valid SequenceProto.DataType value optional int32 elem_type = 2; // For TensorProto values. // When this field is present, the elem_type field MUST be TENSOR. repeated TensorProto tensor_values = 3; // For SparseTensorProto values. // When this field is present, the elem_type field MUST be SPARSE_TENSOR. repeated SparseTensorProto sparse_tensor_values = 4; // For SequenceProto values, allowing sequences to be of themselves. // When this field is present, the elem_type field MUST be SEQUENCE. repeated SequenceProto sequence_values = 5; // For MapProto values. // When this field is present, the elem_type field MUST be MAP. repeated MapProto map_values = 6; // For OptionalProto values. // When this field is present, the elem_type field MUST be Optional. repeated OptionalProto optional_values = 7; } // Maps // // Specifies an associative table, defined by keys and values. // MapProto is formed with a repeated field of keys (of type INT8, INT16, INT32, // INT64, UINT8, UINT16, UINT32, UINT64, or STRING) and values (of type TENSOR, // SPARSE_TENSOR, SEQUENCE, or MAP). Key types and value types have to remain // the same throughout the instantiation of the MapProto. // message MapProto { optional string name = 1; // All MapProto data types must have the same length of keys and values. // The data type of the key. // This field MUST have a valid TensorProto.DataType value of // INT8, INT16, INT32, INT64, UINT8, UINT16, UINT32, UINT64, or STRING optional int32 key_type = 2; // Every element of keys has to be one of the following data types // INT8, INT16, INT32, INT64, UINT8, UINT16, UINT32, UINT64, or STRING. // The integer cases are represented by the repeated int64 field keys below. repeated int64 keys = 3; // If keys are strings, they are represented by the repeated bytes field // string_keys below. repeated bytes string_keys = 4; // MapProto values are represented in a SequenceProto of the same length as the // repeated keys field and have to be one of the following data types // TENSOR, SPARSE_TENSOR, MAP, SEQUENCE. optional SequenceProto values = 5; } // Optional // // message OptionalProto { optional string name = 1; enum DataType { UNDEFINED = 0; TENSOR = 1; SPARSE_TENSOR = 2; SEQUENCE = 3; MAP = 4; OPTIONAL = 5; } // The data type of the element, identifies if the OptionalProto value // is Tensor, Sparse Tensor, Sequence, Map, or Optional. // The type of the optional value MUST match the elem_type specified. // This field MUST have a valid OptionalProto.DataType value. optional int32 elem_type = 2; // For TensorProto value. // When this field is present, the elem_type field MUST be TENSOR. optional TensorProto tensor_value = 3; // For SparseTensorProto value. // When this field is present, the elem_type field MUST be SPARSE_TENSOR. optional SparseTensorProto sparse_tensor_value = 4; // For SequenceProto value. // When this field is present, the elem_type field MUST be SEQUENCE. optional SequenceProto sequence_value = 5; // For MapProto value. // When this field is present, the elem_type field MUST be MAP. optional MapProto map_value = 6; // For OptionalProto value, allowing optional to be of itself (completeness) // When this field is present, the elem_type field MUST be OPTIONAL. optional OptionalProto optional_value = 7; }