code: def compile(self, offset):
      nTracks = len(self)
      sizes = self.sizes()
      nSizes = len(sizes)
  
      # offset to the start of the size subtable
      offset += (
          TRACK_DATA_FORMAT_SIZE
          + TRACK_TABLE_ENTRY_FORMAT_SIZE * nTracks
      )
      trackDataHeader = sstruct.pack(
          TRACK_DATA_FORMAT,
          {
              "nTracks": nTracks,
              "nSizes": nSizes,
              "sizeTableOffset": offset,
          },
      )
  
      entryDataList = []
      perSizeDataList = []
      # offset to per-size tracking values
      offset += SIZE_VALUE_FORMAT_SIZE * nSizes
      # sort track table entries by track value
      for track, entry in sorted(self.items()):
          assert entry.nameIndex is not None
          entry.track = track
          entry.offset = offset
          entryDataList += [
              sstruct.pack(TRACK_TABLE_ENTRY_FORMAT, entry)
          ]
          # sort per-size values by size
          for size, value in sorted(entry.items()):
              perSizeDataList += [
                  struct.pack(PER_SIZE_VALUE_FORMAT, value)
              ]
          offset += PER_SIZE_VALUE_FORMAT_SIZE * nSizes
      # sort size values
      sizeDataList = [
          struct.pack(SIZE_VALUE_FORMAT, fl2fi(sv, 16))
          for sv in sorted(sizes)
      ]
  
      data = bytesjoin(
          [trackDataHeader]
          + entryDataList
          + sizeDataList
          + perSizeDataList
      )
      return data
  
imports: from fontTools.misc import sstruct
  from fontTools.misc.fixedTools import fixedToFloat, floatToFixed, floatToFixedToStr, strToFixedToFloat
  from fontTools.misc.textTools import bytesjoin, safeEval
  from fontTools.ttLib import TTLibError
  from .None import DefaultTable
  import struct
  from collections.abc import MutableMapping
label_desc: Use image node_id 2 for calling the TrackData obj's underlying member method code with example usage: obj.compile(offset) and returns: data