как найти все группы подмножеств множества A? Установить разделы в Python

Я хочу найти алгоритм, который задан наборA найти все группы подмножеств, которые удовлетворяют следующему условию:

x ∪ y ∪ .... z = A, где x, y, ... z ∈ Group

а также

∀ x, y ∈ Группа: x ⊆ A, y ⊆ A, x ∩ y = ∅ = {}

а также

∀ x ∈ Группа: x! = ∅

Примечание: я надеюсь определить это хорошо, я плохо разбираюсь в математических символах

Я применил следующий подход к группам поиска только из двух подмножеств:

from itertools import product, combinations

def my_combos(A):
  subsets = []
  for i in xrange(1, len(A)):
    subsets.append(list(combinations(A,i)))
  combos = []
  for i in xrange(1, 1+len(subsets)/2):
    combos.extend(list(product(subsets[i-1], subsets[-i])))
  if not len(A) % 2:
    combos.extend(list(combinations(subsets[len(A)/2-1], 2)))
  return [combo for combo in combos if not set(combo[0]) & set(combo[1])]

my_combos({1,2,3,4})

Я получаю следующий вывод, это все группы, состоящие из двух подмножеств

[
  ((1,), (2, 3, 4)), 
  ((2,), (1, 3, 4)), 
  ((3,), (1, 2, 4)), 
  ((4,), (1, 2, 3)), 
  ((1, 2), (3, 4)), 
  ((1, 3), (2, 4)), 
  ((1, 4), (2, 3))
]

..... но группы, состоящие из одного, трех, четырех подмножеств ....

Вопрос:

как я могу найти общее решение?

например, следующий ожидаемый результат:

my_combos({1,2,3,4})

[
  ((1,2,3,4)),
  ((1,2,3),(4,)),
  ((1,2,4),(3,)),
  ((1,3,4),(2,)),
  ((2,3,4),(1,)),
  ((1,2),(3,4)),
  ((1,3),(2,4)),
  ((1,4),(2,3)),
  ((1,2),(3,),(4,)),
  ((1,3),(2,),(4,)),
  ((1,4),(2,),(3,)),
  ((1,),(2,),(3,4)),
  ((1,),(3,),(2,4)),
  ((1,),(4,),(2,3)),
  ((1,),(4,),(2,),(3,))
]

Ответы на вопрос(1)

Ваш ответ на вопрос