class_docstr: Stores useful variable tracking information.
  
  In essence, replaces collections, and this way
  we don't have to deal with `MetaGraphs`.
docstr: Add a variable to our info tracker.
docstr_tok: ["Add","a","variable","to","our","info","tracker","."]
code: def _add_variable(self, var: VariableType):
      """Add a variable to our info tracker."""
      if isinstance(var, VariableDef):
          proto = var
      elif isinstance(var, dict):
          proto = VariableDef()
          for k, v in var.items():
              setattr(proto, k, v)
      else:
          proto = var.to_proto()
      self.variables.append(proto)
  
imports: import contextlib
  import copy
  import functools
  from collections import defaultdict
  from typing import Union, Callable
  from google.protobuf.any_pb2 import Any
  from tensorflow.core.framework.graph_pb2 import GraphDef
  from tensorflow.core.framework.variable_pb2 import VariableDef
  from tensorflow.core.protobuf.saver_pb2 import SaverDef
  from tensorflow.python.framework import ops
  from tensorflow.python.framework.importer import import_graph_def
  from tensorflow.python.ops.resource_variable_ops import _from_proto_fn
  from tensorflow.python.ops.variables import Variable
  from autodist.const import COLOCATION_PREFIX
  from autodist.kernel.common import op_info
  from autodist.kernel.common.utils import parse_name_scope, get_op_name
  from autodist.proto import graphitem_pb2
  from autodist.utils import logging
label_desc: Use image node_id 5 for calling the Info obj's underlying member method code with example usage: obj._add_variable(var) without return types