Separando uma String

Dada uma string, quero gerar todas as combinações possíveis. Em outras palavras, todas as maneiras possíveis de colocar uma vírgula em algum lugar da string.

Por exemplo:

input:  ["abcd"]
output: ["abcd"]
        ["abc","d"]
        ["ab","cd"]
        ["ab","c","d"]
        ["a","bc","d"]
        ["a","b","cd"]
        ["a","bcd"]
        ["a","b","c","d"]

Estou um pouco preso em como gerar todas as listas possíveis. As combinações fornecerão apenas listas com o comprimento do subconjunto do conjunto de strings, as permutações fornecerão todas as formas possíveis de ordem.

Posso fazer todos os casos com apenas uma vírgula na lista devido à iteração nas fatias, mas não posso fazer casos com duas vírgulas como "ab", "c", "d" e "a", "b" ,"CD"

Minha tentativa com fatia:

test="abcd"

for x in range(len(test)):
     print test[:x],test[x:]

questionAnswers(5)

yourAnswerToTheQuestion