test_case.h#
-
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.
Defined as empty because onnx-light does not require explicit
__declspec(dllexport)or__attribute__((visibility("default")))annotations — visibility is controlled at the shared-library level. The macro is provided so that vendored ONNX headers that decorate their declarations withONNX_APIcompile without modification.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 onnx_backend_test
Typedefs
-
using OpsetId = onnx_kernels::kernel::OpsetId#
-
using RegisterCasesFn = void (*)(std::vector<TestCase>&)#
Function pointer registering one or more :ref:
TestCaseentries into the caller-suppliedregistry. Used byCollect*TestCasesdispatch tables.
-
using OpRegisterMap = std::unordered_map<std::string_view, RegisterCasesFn>#
Per-category dispatch table: maps an
op_typeto the function that registers its test cases. Built once perCollect*TestCasesas a function-localstatic constso lookup is amortised O(1).
Functions
-
void InitModel(ModelProto &model, int64_t ir_version, const std::vector<OpsetId> &opset_imports, const std::string &producer_name = "backend-test")#
Initializes
modelwithir_version,producer_nameand the givenopset_imports(default ai.onnx domain when an entry’sdomainis empty). Mirrors the boilerplate that opens every manually-built backend test case model so callers don’t have to repeat it.
-
void AppendValueInfo(ValueInfoProto &vi, const std::string &name, int32_t elem_type, const std::vector<int64_t> &shape)#
Fills
viwith a tensor-typed ValueInfo (name,elem_typeand the concrete dimension values fromshape). Mirrors the boilerplate every manually-built graph repeats when declaring graph inputs /value_info/ outputs for which a literal shape is already known (e.g. the gallery shapes used by the shape-inference cases). For Tensor-backed metadata see theFillValueInfo(const Tensor&, ValueInfoProto&)overload insimple_tensor.h.
-
void AppendValueInfo(ValueInfoProto &vi, const std::string &name, int32_t elem_type, const std::vector<DimSpec> &dims)#
Overload of :ref:
AppendValueInfoaccepting a mix of concrete (DimSpec(int64_t)), symbolic (DimSpec("name")) and unannotated (DimSpec()) dimensions. Used by the shape-inference cases to declare symbolicbatch/seq/d_model/nnzdims without repeating theTypeProto::Tensor::add_shape()+add_dim()boilerplate.
-
void AppendValueInfo(ValueInfoProto &vi, const std::string &name, TensorProto::DataType elem_type, const std::vector<DimSpec> &dims)#
Overload of :ref:
AppendValueInfoaccepting a mix of concrete (DimSpec(int64_t)), symbolic (DimSpec("name")) and unannotated (DimSpec()) dimensions. Used by the shape-inference cases to declare symbolicbatch/seq/d_model/nnzdims without repeating theTypeProto::Tensor::add_shape()+add_dim()boilerplate.
-
TypeSpec TensorTypeSpec(int32_t elem_type)#
Returns a
TypeSpecdescribing aTensorofelem_typewith no declared shape (used e.g. for map value types).
-
TypeSpec TensorTypeSpec(int32_t elem_type, std::vector<int64_t> shape)#
Returns a
TypeSpecdescribing aTensorofelem_typewhose declared shape has the given concrete dimension values (an emptyshapedeclares a rank-0 / scalar shape).
-
TypeSpec SequenceTypeSpec(TypeSpec elem)#
Returns a
TypeSpecdescribing aSequencewhose elements have typeelem.
-
TypeSpec MapTypeSpec(int32_t key_type, TypeSpec value)#
Returns a
TypeSpecdescribing aMapfromkey_typekeys tovaluevalues.
-
void AppendValueInfo(ValueInfoProto &vi, const std::string &name, const TypeSpec &spec)#
Fills
viwithnameand the type described byspec.
-
void AppendDataSet(TestCase &tc, std::vector<Tensor> inputs, std::vector<Tensor> outputs)#
Appends a new
DataSettotc.data_setspopulated with the giveninputsandoutputs. Saves theDataSet ds; ds.inputs.push_back(...); ds.outputs.push_back(...); tc.data_sets.emplace_back(std::move(ds));boilerplate that every manually-built TestCase otherwise repeats.
-
void Expect(const NodeProto &node, const std::vector<Tensor> &inputs, const std::vector<Tensor> &outputs, const std::string &name, const std::vector<OpsetId> &opset_imports, const std::string &producer_name, std::vector<TestCase> ®istry, const std::string &tag = "", const std::vector<TypeSpec> &output_types = {})#
Builds a single-node
ModelProtofromnodeand the provided typed inputs/outputs, then appends aTestCasetoregistry.Mirrors
onnx_light.backend.test.case.base.expect(). Only the inputs and outputs whose name is non-empty in the node are wired into the graph.- Parameters:
node – Single-node template; its
op_type,domainandattributes are kept.inputs – Concrete input tensors corresponding to the non-empty entries of
node.input.outputs – Concrete expected output tensors corresponding to the non-empty entries of
node.output.name – Unique test name (used both for
TestCase.nameand the graph name).opset_imports – Opset imports for the generated model. If empty the caller is responsible for ensuring a default has been applied — typically pass at least
DefaultOpset(since_version).producer_name – Producer name written into the model.
registry – Output registry (appended to).
tag – Optional grouping tag (defaults to the node domain for non-default operator domains).
output_types – Optional per-output declared type specs. When non-empty it must contain one entry per output tensor; each output value-info is then declared from its
TypeSpecinstead of the materialized tensor type. Used to declareSequence/Mapvalued outputs whose runtime representation is a plainTensor.
- Throws:
std::invalid_argument – if
inputs.size()does not equal the number of non-empty entries innode.inputor ifoutputs.size()does not equal the number of non-empty entries innode.output, or ifoutput_typesis non-empty and its size does not equaloutputs.size().
-
void DispatchRegisterByOpType(std::vector<TestCase> ®istry, const std::string &op_type, const OpRegisterMap &entries)#
Invokes the
Register*Casesfunctions declared inentries. Whenop_typeis empty, every entry is invoked (order is unspecified). Otherwise, only the entry whose key matchesop_type(case-sensitive) is invoked; if no entry matches, no registration occurs. Used by per-categoryCollect*TestCaseshelpers to dispatch via a hash map instead of an explicitifchain or linear scan.
-
std::vector<TestCase> CollectTestCases(const std::string &op_type = "")#
Collects all C++-implemented backend test node cases. Each call is deterministic and independent: the result owns its
ModelProtos andTensordata.- Parameters:
op_type – Optional operator type filter. When non-empty, only test cases whose top-level graph contains a node with this
op_typeare returned.- Returns:
A fresh registry of test cases (Abs, Add equal-shape, Add scalar broadcast).
-
std::vector<TestCase> CollectTestCasesByName(const std::string &name_regex)#
Collects C++-implemented backend test node cases whose :attr:
TestCase::namematches a regular expression. Usesstd::regex_searchsemantics (substring match by default; anchor with^...$to require a full match).- Parameters:
name_regex – ECMAScript regular expression matched against each test case name. An empty string matches every case (equivalent to :func:
CollectTestCases).- Throws:
std::regex_error – if
name_regexis not a valid ECMAScript regular expression.- Returns:
The subset of cases whose
namematchesname_regex, in the same registration order as :func:CollectTestCases.
-
struct DataSet#
- #include <test_case.h>
A single (inputs, expected outputs) data set associated with a TestCase.
-
struct DimSpec#
- #include <test_case.h>
Describes one tensor dimension entry used to build a ValueInfoProto.
DimSpec(int64_t v)(v >= 0): concretedim_value.DimSpec("name")/DimSpec(std::string): symbolicdim_param.DimSpec(): unannotated dim (neitherdim_valuenordim_param).
-
struct TestCase#
- #include <test_case.h>
A backend test case mirroring
onnx_light.backend.test.case.base.TestCase. It bundles a single-nodeModelPrototogether with the expected input/ output data sets a runtime must reproduce.The string-typed fields (
name,model_name,kind,tag) are declaredconstand must therefore be supplied at construction time.tagis an optional, free-form label used to group families of cases (e.g."empty_shape","nan_inf","inference"); it defaults to the empty string for the ordinary node cases in the defaultai.onnxdomain. For test cases whose underlying node belongs to a non-default operator domain (e.g."ai.onnx.ml","ai.onnx.preview.training"), :func:Expectdefaults the tag to the node’s domain string when the caller does not provide an explicit one.
-
struct TypeSpec#
- #include <test_case.h>
Describes an ONNX value type for a graph value-info, supporting the container kinds the backend test cases need: a plain
Tensor, aSequenceof an element type, or aMapfrom a key type to a value type. Built via the factory helpers :func:TensorTypeSpec, :func:SequenceTypeSpecand :func:MapTypeSpecand consumed by :func:AppendValueInfo/ :func:Expectto emit value-infos whose declared schema type differs from the materializedTensorrepresentation (e.g. sequence- or map-valued outputs).
-
using OpsetId = onnx_kernels::kernel::OpsetId#
-
namespace onnx_backend_test