docs: def reduce_to_cycles(self):
          """
          Iteratively eliminate leafs to reduce the set of objects to only those
          that build cycles. Return the reduced graph. If there are no cycles,
          None is returned.
          """
          if not self._reduced:
              reduced = copy(self)
              reduced.objects = self.objects[:]
              reduced.metadata = []
              reduced.edges = []
              self.num_in_cycles = reduced._reduce_to_cycles()
              reduced.num_in_cycles = self.num_in_cycles
              if self.num_in_cycles:
                  reduced._get_edges()
                  reduced._annotate_objects()
                  for meta in reduced.metadata:
                      meta.cycle = True
              else:
                  reduced = None
              self._reduced = reduced
          return self._reduced