docs: def bipartition_indices(N):
      """Return indices for undirected bipartitions of a sequence.
  
      Args:
          N (int): The length of the sequence.
  
      Returns:
          list: A list of tuples containing the indices for each of the two
          parts.
  
      Example:
          >>> N = 3
          >>> bipartition_indices(N)
          [((), (0, 1, 2)), ((0,), (1, 2)), ((1,), (0, 2)), ((0, 1), (2,))]
      """
      result = []
      if N <= 0:
          return result
  
      for i in range(2**(N - 1)):
          part = [[], []]
          for n in range(N):
              bit = (i >> n) & 1
              part[bit].append(n)
          result.append((tuple(part[1]), tuple(part[0])))
      return result