code: def add(self, attr: onnx.AttributeProto) -> None:
      assert self.name in {None, attr.name}
      self.name = attr.name
      value = helper.get_attribute_value(attr)
      # Turn list into tuple so we can put it into set
      # As value can be string, don't blindly turn `collections.Iterable`
      # into tuple.
      if isinstance(value, list):
          value = tuple(value)
      self.values.add(str(value))
  
imports: import csv
  import datetime
  import os
  from collections import OrderedDict, defaultdict
  from typing import IO, Any, Dict, List, Optional, Set
  from tabulate import tabulate
  import onnx
  from onnx import GraphProto, defs, helper
label_desc: Use image node_id 2 for calling the AttrCoverage obj's underlying member method code with example usage: obj.add(attr) without return types