Metadata-Version: 2.1
Name: pyboolean
Version: 0.1.post4
Summary: Parse infix boolean expressions to RPN, evaluate and generate truth tables.
Home-page: https://github.com/PetarPeychev/pyboolean
Author: PetarPeychev
Author-email: petarpeychev98@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: Public Domain
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown

# pyboolean
Parse infix boolean expressions to postfix (RPN), evaluate and generate truth tables.

Compatibilities
------------

* *Python 3.x*
* *Any Operating System*

Installation
------------

pyboolean is published on **PyPi**, so you only need to run the following command:

    $ pip install pyboolean

Usage
------------

Creating a new boolean expression:

```python
from pyboolean import BoolExpr

bool_expr = BoolExpr('1 or 0')
```

Printing the formatted version of the expression:

```python
print(bool_expr)
# Output: "1 + 0"
```
Evaluating our boolean expression:

```python
print(bool_expr.eval())
# Output: "1"
```

A boolean expression can also include variables:

```python
bool_expr = BoolExpr('1 . m + ( 0 + ! n ) . m')
```

In order to evaluate an expression with variables, the eval() function can take arguments to replace them:

```python
print(bool_expr.eval(1, 0))
# Output: "1"
```

For expressions with variables, one can generate a truth table like so:

```python
print(bool_expr.truthtable())
# Output:
#╔════════════╗
#║  m  n  ┃ O ║
#║━━━━━━━━╋━━━║
#║  0  0  ┃ 0 ║
#║────────╂───║
#║  0  1  ┃ 0 ║
#║────────╂───║
#║  1  0  ┃ 1 ║
#║────────╂───║
#║  1  1  ┃ 1 ║
#╚════════════╝
```

Or if you need to manipulate the raw truth table data, generate a dictionary:

```python
print(bool_expr.truthdict())
# Output: "{('0', '0'): '0', ('0', '1'): '0', ('1', '0'): '1', ('1', '1'): '1'}"
```

Finally, a note on formatting. When creating an expression, all spaces are ignored and many different versions of the operator symbols are accepted, so one can be very 'creative' with the input and not need to worry:

```python
bool_expr = BoolExpr('p+1and   ¬m.(1∧p ) ∨notxand~0')
print(bool_expr)
# Output: "p + 1 . ! m . ( 1 . p ) + ! x . ! 0"
```

Full list of accepted operator symbols:

**AND:**

and . & ∧

**OR:**

or + | ∨

**NOT:**

not ! ~ ¬


