Source code for onnx_ir.passes.common.clear_metadata_and_docstring
# Copyright (c) ONNX Project Contributors
# SPDX-License-Identifier: Apache-2.0
"""Clear all metadata and docstring from the model, graphs, nodes, and functions."""
from __future__ import annotations
__all__ = [
"ClearMetadataAndDocStringPass",
]
import logging
import onnx_ir as ir
logger = logging.getLogger(__name__)
[docs]
class ClearMetadataAndDocStringPass(ir.passes.InPlacePass):
"""Clear all metadata and docstring from the model, graphs, nodes, and functions."""
def call(self, model: ir.Model) -> ir.passes.PassResult:
# 0. TODO: Should we clean model metadata and docstring?
# 1. Clean up the graph and the belonged nodes metadata properties
modified = self._clear_graph_or_function_metadata_and_docstring(model.graph)
# 2. Clean up all of the functions metadata properties
for function in model.functions.values():
modified = (
self._clear_graph_or_function_metadata_and_docstring(function) or modified
)
return ir.passes.PassResult(model, modified=modified)
def _clear_graph_or_function_metadata_and_docstring(
self,
graph_or_function: ir.Graph | ir.Function,
) -> bool:
"""Clear metadata and docstring from the graph or function."""
checked_graphs_or_functions: set[ir.Graph | ir.Function] = set()
modified = False
# Clean up all of the nodes metadata properties
for node in ir.traversal.RecursiveGraphIterator(graph_or_function):
if node.metadata_props:
modified = True
logger.debug("Removed metadata from %s nodes", node.name)
node.metadata_props.clear()
node.doc_string = None
# Clean up the owning graph/function metadata properties
# and doc_string if the graph/function is not already checked
assert node.graph is not None
if node.graph not in checked_graphs_or_functions and (
node.graph.metadata_props or node.graph.doc_string
):
modified = True
logger.debug("Removed metadata from %s graph/function", node.graph.name)
node.graph.metadata_props.clear()
node.graph.doc_string = None
checked_graphs_or_functions.add(node.graph)
return modified