Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Boolean expression in human readable format #189

Open
YuriyTigiev opened this issue Jun 16, 2024 · 0 comments
Open

Boolean expression in human readable format #189

YuriyTigiev opened this issue Jun 16, 2024 · 0 comments

Comments

@YuriyTigiev
Copy link

Hello,

Please add a function that converts Boolean expressions to a human-readable string format using the operators &, ^, |, ~. I tried to write my own function, but I couldn't get it to work.

from pyeda.inter import expr
from pyeda.boolalg.expr import AndOp, OrOp, XorOp, NotOp, Variable

# Create Boolean variables
a, b, c, d = map(expr, "abcd")

# Construct Boolean expressions
expression_and = a & b
expression_or = a | b
expression_xor = a ^ c
nested_expression = (a & b) | (c & d)
negated_expression = ~a & b
complex_expression = a & (b | ~c) ^ d

def convert_expr_to_symbols(expression):
    if expression.is_zero() or expression.is_one():
        return str(expression)
    elif isinstance(expression, Variable):
        return str(expression)
    elif isinstance(expression, NotOp):
        return f"~{convert_expr_to_symbols(expression.x)}"
    elif isinstance(expression, AndOp):
        return ' & '.join(f"({convert_expr_to_symbols(term)})" if isinstance(term, (OrOp, XorOp)) else convert_expr_to_symbols(term) for term in expression.xs)
    elif isinstance(expression, OrOp):
        return ' | '.join(f"({convert_expr_to_symbols(term)})" if isinstance(term, (AndOp, XorOp)) else convert_expr_to_symbols(term) for term in expression.xs)
    elif isinstance(expression, XorOp):
        return ' ^ '.join(f"({convert_expr_to_symbols(term)})" if isinstance(term, (AndOp, OrOp)) else convert_expr_to_symbols(term) for term in expression.xs)
    else:
        raise ValueError(f"Unknown expression type: {expression}")

# Display the expressions with the desired symbols
print(f"AND expression: {convert_expr_to_symbols(expression_and)}")
print(f"OR expression: {convert_expr_to_symbols(expression_or)}")
print(f"XOR expression: {convert_expr_to_symbols(expression_xor)}")
print(f"Nested expression: {convert_expr_to_symbols(nested_expression)}")
print(f"Negated expression: {convert_expr_to_symbols(negated_expression)}")
print(f"Complex expression: {convert_expr_to_symbols(complex_expression)}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant