como encontrar todos os grupos de subconjuntos do conjunto A? Definir partições em Python

Eu quero encontrar um algoritmo que dado um conjuntoA para encontrar todos os grupos de subconjuntos que atendem à seguinte condição:

x ∪ y ∪ .... z = A, onde x, y, ... z ∈ Grupo

e

∀ x, y ∈ Grupo: x ⊆ A, y ⊆ A, x ∩ y = ∅ = {}

e

∀ x ∈ Grupo: x! = ∅

Nota: Espero definir bem, não sou bom com símbolos matemáticos

Fiz a seguinte abordagem para pesquisar apenas grupos de dois subconjuntos:

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})

Eu recebo a seguinte saída, estes são todos os grupos compostos por dois subconjuntos

[
  ((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))
]

..... mas, grupos compostos por um, três, quatro subconjuntos ...

Pergunta, questão:

como posso encontrar uma solução geral?

por exemplo, a seguinte saída esperada:

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,))
]

questionAnswers(1)

yourAnswerToTheQuestion