¿Cómo encontrar todos los grupos de subconjuntos del conjunto A? Establecer particiones en Python

Quiero encontrar un algoritmo que proporcione un conjuntoA para encontrar todos los grupos de subconjuntos que satisfacen la siguiente condición:

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

y

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

y

∀ x ∈ Grupo: x! = ∅

Nota: espero definirlo bien, no soy bueno con los símbolos matemáticos

Hice el siguiente enfoque para buscar grupos de dos subconjuntos solamente:

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

Obtengo el siguiente resultado, todos estos grupos están compuestos por dos 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))
]

..... pero, grupos compuestos por uno, tres, cuatro subconjuntos ...

Pregunta:

¿Cómo puedo encontrar una solución general?

por ejemplo el siguiente resultado esperado:

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta