code: def unbuild(self, table):
      assert isinstance(table, BaseTable)
  
      source = {}
  
      callbackKey = (type(table),)
      if isinstance(table, FormatSwitchingBaseTable):
          source["Format"] = int(table.Format)
          callbackKey += (table.Format,)
  
      for converter in table.getConverters():
          if isinstance(converter, ComputedInt):
              continue
          value = getattr(table, converter.name)
  
          enumClass = getattr(converter, "enumClass", None)
          if enumClass:
              source[converter.name] = value.name.lower()
          elif isinstance(converter, Struct):
              if converter.repeat:
                  source[converter.name] = [
                      self.unbuild(v) for v in value
                  ]
              else:
                  source[converter.name] = self.unbuild(value)
          elif isinstance(converter, SimpleValue):
              # "simple" values (e.g. int, float, str) need no further un-building
              source[converter.name] = value
          else:
              raise NotImplementedError(
                  "Don't know how unbuild {value!r} with {converter!r}"
              )
  
      source = self._callbackTable.get(callbackKey, lambda s: s)(source)
  
      return source
  
file_path: catboost/contrib/python/fonttools/fontTools/colorLib/table_builder.py
imports: import collections
  import enum
  from fontTools.ttLib.tables.otBase import BaseTable, FormatSwitchingBaseTable, UInt8FormatSwitchingBaseTable
  from fontTools.ttLib.tables.otConverters import ComputedInt, SimpleValue, Struct, Short, UInt8, UShort, IntValue, FloatValue, OptionalValue
  from fontTools.misc.roundTools import otRound
label_desc: Use image node_id 2 for calling the TableUnbuilder obj's underlying member method code with example usage: obj.unbuild(table) and returns: source