light_op_schema.h#
Declares the lightweight ONNX operator schema types used by onnx_light.
This header defines the core data structures that onnx_light uses to describe ONNX operators without depending on the full onnx library:
::ONNX_LIGHT_NAMESPACE::core::schema::LightOpSchema, a read-only record that captures a single operator at a specific opset version (name, domain,
since_version, documentation string, formal inputs and outputs, and type constraints).::ONNX_LIGHT_NAMESPACE::core::schema::FormalParameter and ::ONNX_LIGHT_NAMESPACE::core::schema::TypeConstraintParam, the building blocks used to describe input/output parameters and their type constraints.
::ONNX_LIGHT_NAMESPACE::core::schema::TensorType, an enumeration of every element-tensor, sequence-tensor, and optional-tensor type used in type constraints, together with ::ONNX_LIGHT_NAMESPACE::core::schema::ToTypeString to convert it to the canonical ONNX type string (e.g.
"tensor(float)").A collection of helper functions returning common type sets reused across operator schemas (
FloatTypes(),AllNumericTypes(),AllTensorTypes(),CastTypesVer*(),EqualTypesV*(), etc.).::ONNX_LIGHT_NAMESPACE::core::schema::StripDocs to obtain a memory-light copy of a schema list with documentation strings cleared, useful in memory-constrained environments.
The schemas produced by the helpers in the sibling operator_sets_*.h headers are aggregated by operator_sets.h via GetAllOnnxOpSchemasWithHistory() and consumed by both documentation generators and the onnx_shapes shape inference library.
Constructing a schema with invalid arguments throws a ::ONNX_LIGHT_NAMESPACE::core::schema::SchemaError.
-
namespace onnx_light
Alias that makes onnx-light headers compatible with code that references
ONNX_LIGHT_NAMESPACE(the macro used in the standard onnx package).Set to
ONNX_LIGHT_NAMESPACEso both names resolve to the same namespace.Symbol-visibility attribute for the public onnx-light C++ API.
Maps the upstream compatibility macro to onnx-light’s explicit proto ABI annotation. This keeps declarations from vendored ONNX headers visible when
lib_onnx_protouses hidden visibility by default.Namespace alias so that ONNX C++ code (and consumers such as onnxruntime) that refers to the literal
onnxnamespace — rather than theONNX_NAMESPACEmacro — resolves to the onnx-light namespace. The standard onnx package lives innamespace onnx; onnx-light usesonnx_light(via ONNX_LIGHT_NAMESPACE), so this alias keeps onnx-light a true drop-in. It is only introduced when the onnx-light namespace differs fromonnx.-
namespace core
-
namespace schema#
Typedefs
-
using AttributeDefault = std::variant<std::monostate, int64_t, double, std::string, std::vector<int64_t>, std::vector<double>, std::vector<std::string>>#
Typed default value carried by an :class:
AttributeParam.Mirrors the subset of
onnx::AttributeProtovalue fields that can sensibly be expressed as a literal default in an operator schema:std::monostate— no default value (the attribute is required or has no documented default).int64_t— default forAttributeType::INT(also used for boolean-valuedINTattributes;0/1).double— default forAttributeType::FLOAT.std::string— default forAttributeType::STRING.std::vector<int64_t>/std::vector<double>/std::vector<std::string>— defaults forINTS/FLOATS/STRINGS.
TENSOR/GRAPH/SPARSE_TENSOR/TYPE_PROTOattributes have no literal default in practice and are therefore represented asstd::monostate.
-
using TensorType = onnx_proto::TensorType#
Re-exports
onnx_proto::TensorTypeso that existing consumers ofcore::schema::TensorTypecontinue to compile without change.
-
using SchemaInputValue = std::variant<ValueInfoProto, symbolic::SymTensor, symbolic::SymSequence>#
One concrete value supplied for a node input when calling ::ONNX_LIGHT_NAMESPACE::core::schema::LightOpSchema::Verify, used to check the input against the schema’s type constraints. Exactly one alternative describes a given input:
ValueInfoProto— type/shape as it would appear in aGraphProtovalue_info entry. Tensor, sequence, and optional value_info types are all supported.core::symbolic::SymTensor— a single tensor descriptor, as used by theonnx_shapes/onnx_optimoptimisation stack.core::symbolic::SymSequence— a tensor-sequence descriptor, as used by the same optimisation stack (e.g. the output ofSequenceConstruct).
-
using SchemaBuilder = std::function<std::vector<LightOpSchema>()>#
Type of a builder function that produces the versioned schema history for a single ONNX operator. Each per-domain
GetAllOnnxOp*SchemasWithHistoryfunction maintains a staticstd::map<std::string, SchemaBuilder>keyed byop_typeso that, when a caller requests a specific operator, only the matching builder runs instead of constructing the entire domain. This mirrors the dispatch-table pattern used by the shape-inference subsystem.
Enums
-
enum class AttributeType : int32_t#
Enumeration of attribute scalar/list types supported by ONNX.
The enumerator values mirror
onnx::AttributeProto::AttributeTypeso anAttributeTypefromonnx_opcan be compared against (or converted to) the proto enum without a lookup table. The enumeration is duplicated here so thatonnx_opremains free of any dependency on the full ONNX schema registry.Values:
-
enumerator UNDEFINED#
-
enumerator FLOAT#
-
enumerator INT#
-
enumerator STRING#
-
enumerator TENSOR#
-
enumerator GRAPH#
-
enumerator FLOATS#
-
enumerator INTS#
-
enumerator STRINGS#
-
enumerator TENSORS#
-
enumerator GRAPHS#
-
enumerator SPARSE_TENSOR#
-
enumerator SPARSE_TENSORS#
-
enumerator TYPE_PROTO#
-
enumerator TYPE_PROTOS#
-
enumerator UNDEFINED#
Functions
-
inline constexpr const char *AttributeType_Name(AttributeType t)#
Returns the canonical ONNX name for an
AttributeType(e.g."INTS").
-
std::string AttributeDefaultRepr(const AttributeDefault &d)#
Returns a stable textual representation of an
AttributeDefault(e.g."1","0.5","foo","[1, 2, 3]", or""for monostate).
-
inline constexpr const char *ToTypeString(TensorType type)#
Returns the ONNX type-string representation of a TensorType value.
Forwards to
onnx_proto::ToTypeString; kept here so that existing callers ofcore::schema::ToTypeStringcontinue to compile unchanged.- Parameters:
type – Tensor type enumerator to convert.
- Returns:
Null-terminated string such as
"tensor(float)"or"seq(tensor(int64))".
-
std::vector<TensorType> FloatTypes()#
Returns floating-point tensor types (float16, float, double, bfloat16).
-
std::vector<TensorType> NumericTypesForMathReduction()#
Returns numeric types used in reduction ops (excludes low-precision floats).
-
std::vector<TensorType> NumericTypesForMathReductionIr4()#
Returns numeric types used in reduction ops for IR version 4 and later.
-
std::vector<TensorType> AllNumericTypes()#
Returns all numeric (integer and floating-point) tensor types.
-
std::vector<TensorType> AllNumericTypesIr4()#
Returns all numeric tensor types for IR version 4 and later.
-
std::vector<TensorType> AllTensorTypes()#
Returns all scalar tensor types (no sequence types).
-
std::vector<TensorType> AllTensorSequenceTypes()#
Returns all sequence-of-tensor types.
-
std::vector<TensorType> AllOptionalTypes()#
Returns all optional tensor and optional sequence tensor types. Matches
OpSchema::all_optional_types()from the full ONNX library.
-
std::vector<TensorType> CastTypesVer1And6()#
Returns the Cast input/output types valid for opset versions 1 and 6.
-
std::vector<TensorType> CastTypesVer9()#
Returns the Cast input/output types valid from opset version 9.
-
std::vector<TensorType> CastTypesVer13()#
Returns the Cast input/output types valid from opset version 13.
-
std::vector<TensorType> CastTypesVer19()#
Returns the Cast input/output types valid from opset version 19.
-
std::vector<TensorType> CastTypesVer21()#
Returns the Cast input/output types valid from opset version 21.
-
std::vector<TensorType> CastTypesVer23()#
Returns the Cast input/output types valid from opset version 23.
-
std::vector<TensorType> CastTypesVer24()#
Returns the Cast input/output types valid from opset version 24.
-
std::vector<TensorType> CastTypesVer25()#
Returns the Cast input/output types valid from opset version 25.
-
std::vector<TensorType> EqualTypesV1V7()#
Returns the Equal input types valid for opset versions 1 and 7.
-
std::vector<TensorType> EqualTypesV11()#
Returns the Equal input types valid from opset version 11.
-
std::vector<TensorType> EqualTypesV13()#
Returns the Equal input types valid from opset version 13.
-
std::vector<TensorType> EqualTypesV19()#
Returns the Equal input types valid from opset version 19.
-
std::vector<TensorType> ConcatTypesVer1()#
Returns the Concat input/output types valid for opset version 1 (float16, float, double).
-
std::vector<TensorType> ConcatTypesVer4And11()#
Returns the Concat input/output types valid for opset versions 4 and 11 (matches
OpSchema::all_tensor_types()from the full ONNX library).
-
std::vector<TensorType> ConcatTypesVer13()#
Returns the Concat input/output types valid from opset version 13 (matches
OpSchema::all_tensor_types_ir4()from the full ONNX library).
-
std::vector<LightOpSchema> StripDocs(const std::vector<LightOpSchema> &schemas)#
Returns a copy of
schemaswith all documentation strings replaced by an empty string. Useful when callers want the schema metadata but do not need documentation, saving memory in memory-constrained environments.
-
std::vector<LightOpSchema> CollectSchemasFromBuilders(const std::map<std::string, SchemaBuilder> &builders, const std::string &op_type, bool init_doc)#
Invokes builders from a name → SchemaBuilder map and concatenates their results. When
op_typeis empty, every builder is invoked (in alphabetical order of keys whenbuildersis astd::map). Whenop_typeis non-empty, only the builder whose key equalsop_typeis invoked (returning an empty vector if absent). Ifinit_docis false, the resulting schemas have their documentation strings stripped (see StripDocs).
Variables
-
constexpr const char *kOnnxDomain = "ai.onnx"#
The standard ONNX operator domain string.
-
struct AttributeParam#
- #include <light_op_schema.h>
Describes a single operator attribute as exposed by LightOpSchema.
Attribute metadata is intentionally lightweight to keep
onnx_opfree of any dependency on the full ONNX schema registry. Thetypefield uses theAttributeTypeenumeration above;default_valueis a typed variant (see :type:AttributeDefault) and isstd::monostatewhen the attribute is required or has no documented default.Public Members
-
AttributeType type#
Attribute type (mirrors
onnx::AttributeProto::AttributeType).
-
bool required#
True if the attribute is required (no default value).
-
AttributeDefault default_value = {}#
Typed default value (
std::monostatewhen required or absent).
-
AttributeType type#
-
struct FormalParameter#
- #include <light_op_schema.h>
Describes a single formal input or output parameter of an ONNX operator.
-
class LightOpSchema#
- #include <light_op_schema.h>
Lightweight, read-only description of an ONNX operator schema at one specific opset version.
A LightOpSchema captures everything that documentation and validation tools need about a single versioned operator: its name, domain, the opset version it was introduced in, its documentation string, the formal inputs and outputs, and the type constraints that govern them.
Public Types
-
enum class NodeDeterminism : uint8_t#
Describes whether evaluating the operator produces deterministic outputs.
Mirrors
OpSchema::NodeDeterminismfrom the full ONNX library.Values:
-
enumerator Unknown#
Determinism has not been specified for this operator.
-
enumerator NonDeterministic#
The operator may produce different outputs for identical inputs.
-
enumerator Deterministic#
The operator always produces the same outputs for identical inputs.
-
enumerator Unknown#
Public Functions
-
inline LightOpSchema(std::string name, std::string domain, int since_version, std::string doc, std::vector<FormalParameter> inputs, std::vector<FormalParameter> outputs, std::vector<TypeConstraintParam> type_constraints, bool has_function_implementation = false, bool init_doc = true)#
Constructs a schema record for a versioned ONNX operator.
- Parameters:
name – Operator name (e.g. “Add”).
domain – Operator domain (e.g. “ai.onnx”).
since_version – Opset version at which this schema was introduced.
doc – Documentation string (may contain Markdown).
inputs – Ordered list of formal input parameters.
outputs – Ordered list of formal output parameters.
type_constraints – Type constraints referenced by the parameters.
has_function_implementation – Whether the op has a function body.
init_doc – If true (default), the documentation string is stored on the schema. When false, the
docargument is discarded and doc() returns an empty string. This can be used to save memory when documentation is not needed by the consumer.
-
inline LightOpSchema(std::string name, std::string domain, int since_version, std::string doc, std::vector<FormalParameter> inputs, std::vector<FormalParameter> outputs, std::vector<TypeConstraintParam> type_constraints, std::vector<AttributeParam> attributes, bool has_function_implementation = false, bool init_doc = true)#
Constructs a schema record for a versioned ONNX operator with attributes.
Same as the other constructor but also stores the operator’s attribute metadata, which the documentation generator uses to surface cross-version attribute differences.
-
inline int since_version() const#
Returns the opset version at which this schema was introduced.
-
inline const std::vector<FormalParameter> &inputs() const#
Returns the list of formal input parameters.
-
inline const std::vector<FormalParameter> &outputs() const#
Returns the list of formal output parameters.
-
inline const std::vector<TypeConstraintParam> &type_constraints() const#
Returns the type constraints for this schema.
-
inline const std::vector<AttributeParam> &attributes() const#
Returns the operator attributes (may be empty when not populated).
-
inline bool has_function_implementation() const#
Returns true if the operator has a function body implementation.
-
inline int min_output() const#
Returns the minimum number of outputs supported by this operator. Defaults to
outputs().size(); can be overridden viaset_min_outputfor operators with variadic outputs.
-
inline int max_output() const#
Returns the maximum number of outputs supported by this operator. Defaults to
outputs().size(); can be overridden viaset_max_outputfor operators with variadic outputs (usestd::numeric_limits<int>::max()for unbounded variadic outputs).
-
inline bool deprecated() const#
Returns true if this versioned operator is deprecated.
-
inline NodeDeterminism node_determinism() const#
Returns the operator’s node determinism (
Unknownwhen unspecified).
-
inline bool non_deterministic() const#
Returns true if the operator is explicitly marked non-deterministic.
-
inline LightOpSchema &set_min_output(int v)#
Sets the minimum number of outputs. Returns *this for chaining.
-
inline LightOpSchema &set_max_output(int v)#
Sets the maximum number of outputs. Returns *this for chaining.
-
inline LightOpSchema &set_deprecated(bool v = true)#
Marks this operator as deprecated. Returns *this for chaining.
-
inline LightOpSchema &set_node_determinism(NodeDeterminism v)#
Sets the operator’s node determinism. Returns *this for chaining.
-
void Verify(const NodeProto &node, const std::vector<std::optional<SchemaInputValue>> *inputs = nullptr) const#
Verifies that
nodeis a valid instantiation of this operator schema, throwing ::ONNX_LIGHT_NAMESPACE::core::schema::SchemaError on the first violation found.The checks performed are, in order:
nodeis not deprecated (deprecated()is false).node.op_type()matchesname(), andnode.domain()matchesdomain()(an empty node domain is treated as ::ONNX_LIGHT_NAMESPACE::core::schema::kOnnxDomain).node.output_size()lies within [min_output(),max_output()].Every attribute in
node.attribute()is recognized (declared inattributes(), or its name starts with"__", an internal-symbol convention that is always accepted), has atype()matching the declared ::ONNX_LIGHT_NAMESPACE::core::schema::AttributeType, and every required attribute (AttributeParam::required) is present.When
inputsis non-null, each populated (non-std::nullopt) entry is resolved to a ::ONNX_LIGHT_NAMESPACE::onnx_proto::TensorType and, if the corresponding formal input’stypenames one oftype_constraints(), checked for membership in that constraint’sallowed_type_strs. Entries beyondinputs().size()are checked against the last formal input (variadic convention), and entries whose concrete type cannot be determined (e.g. aValueInfoProtowith amap_typeoropaque_type) are silently skipped, since LightOpSchema does not model every ONNX type category.
Input arity itself is intentionally not bounded here: unlike outputs, LightOpSchema does not track per-parameter Optional/Variadic metadata for inputs, so
nodemay declare fewer or more inputs thaninputs().size()without being rejected.- Parameters:
node – Node to verify against this schema.
node.op_type()/node.domain()are expected to already match this schema (see above); callers are responsible for having selected the schema version matching the node’s opset import.inputs – Optional, one entry per node input, describing its concrete type for type-constraint checking. When null (the default), no input type checking is performed.
Private Members
-
int since_version_#
-
std::vector<FormalParameter> inputs_#
-
std::vector<FormalParameter> outputs_#
-
std::vector<TypeConstraintParam> type_constraints_#
-
std::vector<AttributeParam> attributes_#
-
bool has_function_implementation_#
-
int min_output_#
-
int max_output_#
-
bool deprecated_#
-
NodeDeterminism node_determinism_ = NodeDeterminism::Unknown#
-
enum class NodeDeterminism : uint8_t#
-
class SchemaError : public std::runtime_error#
- #include <light_op_schema.h>
Thrown when a LightOpSchema is constructed with invalid arguments, or when ::ONNX_LIGHT_NAMESPACE::core::schema::LightOpSchema::Verify rejects a node.
Public Functions
-
inline explicit SchemaError(const std::string &message)#
Constructs a SchemaError with the given diagnostic message.
-
inline explicit SchemaError(const std::string &message)#
-
struct TypeConstraintParam#
- #include <light_op_schema.h>
Specifies which tensor types are permitted for a named type parameter.
-
using AttributeDefault = std::variant<std::monostate, int64_t, double, std::string, std::vector<int64_t>, std::vector<double>, std::vector<std::string>>#
-
namespace schema#
-
namespace core