Skip to content

Commit

Permalink
Consolidate string generation code
Browse files Browse the repository at this point in the history
Cleaned up lots of overlap in the to_unicode and to_latex
methods.
  • Loading branch information
cjdrake committed Feb 14, 2015
1 parent 874aad0 commit a1fcfe2
Showing 1 changed file with 27 additions and 110 deletions.
137 changes: 27 additions & 110 deletions pyeda/boolalg/expr.py
Original file line number Diff line number Diff line change
Expand Up @@ -1325,6 +1325,27 @@ def __init__(self, *xs):
def __str__(self):
return self.STROP + "(" + self._joinargs(", ") + ")"

def to_unicode(self):
parts = list()
for x in sorted(self.xs):
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_unicode() + ')')
else:
parts.append(x.to_unicode())
sep = " " + self.SYMBOL + " "
return sep.join(parts)

def to_latex(self):
parts = list()
for x in sorted(self.xs):
# lower precedence: implies, equal
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_latex() + ')')
else:
parts.append(x.to_latex())
sep = " " + self.LATEX_SYMBOL + " "
return sep.join(parts)

@property
def args(self):
warn("Operator.args is deprecated. Use Operator.xs instead.")
Expand Down Expand Up @@ -1576,28 +1597,6 @@ class ExprOr(ExprOrAnd):
IDENTITY = EXPRZERO
DOMINATOR = EXPRONE

def to_unicode(self):
parts = list()
for x in sorted(self.xs):
# lower precedence: implies, equal
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_unicode() + ')')
else:
parts.append(x.to_unicode())
sep = " " + self.SYMBOL + " "
return sep.join(parts)

def to_latex(self):
parts = list()
for x in sorted(self.xs):
# lower precedence: implies, equal
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_latex() + ')')
else:
parts.append(x.to_latex())
sep = " " + self.LATEX_SYMBOL + " "
return sep.join(parts)

# From Expression
def is_dnf(self):
# a | b
Expand Down Expand Up @@ -1684,28 +1683,6 @@ def __exit__(self, exc_type, exc_val, traceback):
else:
raise ValueError("expected assumption to be a literal")

def to_unicode(self):
parts = list()
for x in sorted(self.xs):
# lower precedence: or, xor, implies, equal
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_unicode() + ')')
else:
parts.append(x.to_unicode())
sep = " " + self.SYMBOL + " "
return sep.join(parts)

def to_latex(self):
parts = list()
for x in sorted(self.xs):
# lower precedence: or, xor, implies, equal
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_latex() + ')')
else:
parts.append(x.to_latex())
sep = " " + self.LATEX_SYMBOL + " "
return sep.join(parts)

# From Expression
def is_dnf(self):
# a & b
Expand Down Expand Up @@ -1781,28 +1758,6 @@ class ExprXor(NaryOp):
PRECEDENCE = 1
IDENTITY = EXPRZERO

def to_unicode(self):
parts = list()
for x in sorted(self.xs):
# lower precedence: or, implies, equal
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_unicode() + ')')
else:
parts.append(x.to_unicode())
sep = " " + self.SYMBOL + " "
return sep.join(parts)

def to_latex(self):
parts = list()
for x in sorted(self.xs):
# lower precedence: or, implies, equal
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_latex() + ')')
else:
parts.append(x.to_latex())
sep = " " + self.LATEX_SYMBOL + " "
return sep.join(parts)

# From Expression
def simplify(self):
if self._simplified:
Expand Down Expand Up @@ -1901,26 +1856,11 @@ class ExprEqual(NaryOp):
IDENTITY = EXPRONE

def to_unicode(self):
parts = list()
for x in self.xs:
# lower precedence:
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_unicode() + ')')
else:
parts.append(x.to_unicode())
sep = " " + self.SYMBOL + " "
return sep.join(parts)

def to_latex(self):
parts = list()
for x in self.xs:
# lower precedence:
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_latex() + ')')
else:
parts.append(x.to_latex())
sep = " " + self.LATEX_SYMBOL + " "
return sep.join(parts)
if len(self.xs) == 2:
return super().to_unicode()
else:
unicode_args = [x.to_unicode() for x in sorted(self.xs)]
return "eq(" + ", ".join(unicode_args) + ")"

# From Expression
def simplify(self):
Expand Down Expand Up @@ -2050,28 +1990,6 @@ def __init__(self, p, q):
self.p = p
self.q = q

def to_unicode(self):
parts = list()
for x in (self.p, self.q):
# lower precedence: equal
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_unicode() + ')')
else:
parts.append(x.to_unicode())
sep = " " + self.SYMBOL + " "
return sep.join(parts)

def to_latex(self):
parts = list()
for x in (self.p, self.q):
# lower precedence: equal
if x.PRECEDENCE >= self.PRECEDENCE:
parts.append('(' + x.to_latex() + ')')
else:
parts.append(x.to_latex())
sep = " " + self.LATEX_SYMBOL + " "
return sep.join(parts)

# From Expression
def simplify(self):
p = self.p.simplify()
Expand Down Expand Up @@ -2116,8 +2034,7 @@ def __init__(self, s, d1, d0):
self.d0 = d0

def to_unicode(self):
unicode_args = [self.s.to_unicode(),
self.d1.to_unicode(), self.d0.to_unicode()]
unicode_args = [x.to_unicode() for x in self.xs]
return "ite({}, {}, {})".format(*unicode_args)

def to_latex(self):
Expand Down

0 comments on commit a1fcfe2

Please sign in to comment.