code: def _parentage(self, categories, levels):
          
          # exhausting levels is the expected recursion termination condition
          if not levels:
              return tuple(categories)
  
          # guard against edge case where next level is present but empty. That
          # situation is not prohibited for some reason.
          if not levels[0]:
              return tuple(categories)
  
          parent_level, remaining_levels = levels[0], levels[1:]
          leaf_node = categories[0]
  
          # Make the first parent the default. A possible edge case is where no
          # parent is defined for one or more leading values, e.g. idx > 0 for
          # the first parent.
          parent = parent_level[0]
          for category in parent_level:
              if category.idx > leaf_node.idx:
                  break
              parent = category
  
          extended_categories = tuple(categories) + (parent,)
          return self._parentage(extended_categories, remaining_levels)
docs: Return a tuple formed by recursively concatenating *categories* with
          its next ancestor from *levels*. The idx value of the first category
          in *categories* determines parentage in all levels. The returned
          sequence is in child -> parent order. A parent category is the
          Category object in a next level having the maximum idx value not
          exceeding that of the leaf category.