5cbd3f29e3
Fuzz / Run fuzz harnesses (${{ github.event_name == 'schedule' && 'nightly' || 'smoke' }}) (push) Has been cancelled
Create Releases / call-mac (push) Has been cancelled
Create Releases / call-linux (push) Has been cancelled
Create Releases / call-sdist (push) Has been cancelled
Create Releases / call-win (push) Has been cancelled
Create Releases / call-pyodide (push) Has been cancelled
Windows_No_Exception_CI / build (x64, 3.10) (push) Has been cancelled
Check URLs / build (push) Has been cancelled
Create Releases / Attest CI build artifacts (push) Has been cancelled
Create Releases / Check for Publish release build to pypi (push) Has been cancelled
Create Releases / Check for Publish preview build to test.pypi-weekly (push) Has been cancelled
Create Releases / Publish preview build to test.pypi-weekly (push) Has been cancelled
Create Releases / Check for Publish release build to test.pypi (rc-candidates) (push) Has been cancelled
Create Releases / Publish release build to test.pypi (push) Has been cancelled
Create Releases / Check for Publish preview build to pypi-weekly (push) Has been cancelled
Create Releases / Publish preview build to pypi-weekly (push) Has been cancelled
Create Releases / Publish release build to pypi (push) Has been cancelled
Create Releases / test source distribution (push) Has been cancelled
clang-tidy / clang-tidy (push) Has been cancelled
Lint / Validate SBOM (push) Has been cancelled
Lint / Enforce style (push) Has been cancelled
CI / Test windows-2022, 3.14, External, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, Internal, debug=1, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=1, onnx_ml=1, autogen=1 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=0, onnx_ml=0, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
Pixi CI / Install and lint (ubuntu-24.04-arm) (push) Has been cancelled
Pixi CI / Install and lint (windows-2022) (push) Has been cancelled
Pixi CI / Xcode generator build (push) Has been cancelled
Pixi CI / Install and test (macos-latest, default) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-24.04-arm, default) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-latest, default) (push) Has been cancelled
Pixi CI / Install and test (windows-2022, default) (push) Has been cancelled
Pixi CI / Install and test (macos-latest, oldies) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-24.04-arm, oldies) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-latest, oldies) (push) Has been cancelled
Pixi CI / Install and test (windows-2022, oldies) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Copilot Setup Steps / copilot-setup-steps (push) Has been cancelled
Generate and publish ONNX docs / build (push) Has been cancelled
Generate and publish ONNX docs / deploy (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
70 lines
2.4 KiB
C++
70 lines
2.4 KiB
C++
// Copyright (c) ONNX Project Contributors
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <unordered_map>
|
|
|
|
#include "onnx/common/visitor.h"
|
|
|
|
namespace ONNX_NAMESPACE {
|
|
namespace internal { // internal/private API
|
|
|
|
using AttributeMap = std::unordered_map<std::string, const AttributeProto*>;
|
|
|
|
// Class for binding formal attribute-parameters (in a node or graph) to their values.
|
|
|
|
class AttributeBinder : public MutableVisitor {
|
|
public:
|
|
explicit AttributeBinder(const AttributeMap& attr_map) : attr_map_(attr_map) {}
|
|
|
|
// Binding a formal attribute-parameter to a value may, as a special case, also
|
|
// remove the attribute from the list of attributes of a node (when the attribute
|
|
// has no specified value). Hence, we need to do the processing at a Node level
|
|
// rather than an attribute level.
|
|
void VisitNode(NodeProto& node) override {
|
|
auto& attributes = *node.mutable_attribute();
|
|
for (auto attr_iter = attributes.begin(); attr_iter != attributes.end();) {
|
|
auto& attr = *attr_iter;
|
|
if (!attr.ref_attr_name().empty()) {
|
|
// Attribute-references must be replaced by the corresponding attribute-value in the call-node
|
|
// if the call-node contains the attribute. Otherwise, this attribute must be removed.
|
|
auto it = attr_map_.find(attr.ref_attr_name());
|
|
if (it != attr_map_.end()) {
|
|
const AttributeProto* replacement = it->second;
|
|
// Copy value of attribute, but retain original name:
|
|
std::string name = attr.name();
|
|
attr = *replacement;
|
|
attr.set_name(name);
|
|
++attr_iter;
|
|
} else {
|
|
attr_iter = attributes.erase(attr_iter);
|
|
}
|
|
} else {
|
|
// For regular attributes, we process subgraphs, if present, recursively.
|
|
VisitAttribute(attr);
|
|
++attr_iter;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Updates a FunctionProto by replacing all attribute-references with the corresponding
|
|
// attribute-values in the call-node, if present. Otherwise, the attribute is removed.
|
|
static void BindAttributes(const NodeProto& callnode, FunctionProto& callee) {
|
|
AttributeMap map;
|
|
for (const auto& attr : callnode.attribute()) {
|
|
map[attr.name()] = &attr;
|
|
}
|
|
AttributeBinder attr_binder(map);
|
|
attr_binder.VisitFunction(callee);
|
|
}
|
|
|
|
private:
|
|
const AttributeMap& attr_map_;
|
|
};
|
|
|
|
} // namespace internal
|
|
} // namespace ONNX_NAMESPACE
|