Forma Normal Disjuntiva em Python

Usando python, qual é a melhor maneira de converter uma sequência de ANDs e ORs emforma normal disjuntiva (também conhecido como "soma de produtos")?

b AND (c OR (a AND d))

torna-se

(b AND c) OR (b AND a AND d)

Eu também gostaria de classificá-los, lexicograficamente

(a AND b AND d) OR (b AND c)

questionAnswers(1)

yourAnswerToTheQuestion