code: def _cmp(self, other):
          
          self_gen  = traverse_frozen_data(self.payload)
          other_gen = traverse_frozen_data(other.payload)
          while True:
              try:
                  self_node  = repr(next(self_gen))
              except StopIteration:
                  self_node  = None
              try:
                  other_node = repr(next(other_gen))
              except StopIteration:
                  other_node = None
              if self_node is None or other_node is None:
                  # We iterated to the end
                  if self_node is not None:
                      return 1
                  if other_node is not None:
                      return -1
                  return 0
              if self_node != other_node:
                  return (
                      self_node > other_node
                  ) - (
                      self_node < other_node
                  )
docs: Generic cmp method to support python 2/3