A boolean algebra toolkit to: evaluate expressions, truth tables, and produce logic diagrams
Project description
Boolean Algebra Toolkit
- Truth Table to Boolean Expression and Logic Diagram Generator
- Boolean Expression Evaluator and Truth Table Generator
Installation
pip install balg-MustafaAamir==0.0.1
Usage
Token | Equivalent |
---|---|
& | AND |
^ | XOR |
+ | OR |
~ | NOT |
[A-z] | Variable |
from boolean import Boolean
booleanObject = Boolean()
- To generate an expression's truth table:
input_expression: str = "~(A & B & C)+(A & B)+(B & C)"
tt: str = booleanObject.expr_to_tt(input_expression)
- To generate an expression given the minterms and variables:
variables: List[str] = ['A', 'B', 'C']
minterms: List[int] = [0, 1, 3, 7]
expression: str = booleanObject.tt_to_expr(variables, minterms)
- To generate a logic diagram given an expression:
input_expression: str = "~(A & B & C)+(A & B)+(B & C)"
file_name: str = "logic_diagram12"
format: str = "png"
directory: str = "examples" # stores in the current directory by default
booleanObject.expr_to_dg(input_expression, file_name, directory, format)
- To generate a logic diagram given variables and minterms
variables: List[str] = ['A', 'B', 'C']
minterms: List[int] = [0, 1, 3, 7]
file_name: str = "logic_diagram12"
directory: str = "examples"
format: str = "png"
booleanObject.tt_to_dg(variables, minterms, file_name, directory, format)
Example Diagrams
((A & B) & C) + (~C)
(A & B) + (~(A & B) & ~C) + (C & B)
Other diagrams can be found in diagrams/
Explanation of the Quine-McCluskey Algorithm
This section deals with converting a given truth table to a minimized boolean expression using the Quine-McCluskey algorithm and producing a logic diagram.
Overview
- Initialize variables & Minterms
- Identify essential Prime implicants
- Minimize & Synthesize the boolean function
Initialization
- The synthesizer is initialized with a list of character variables and minterms:
- Minterms refer to values for which the output is 1.
- Prime implicants are found by repeatedly combining minterms that differ by only one variable:
The Quine-McCluskey Algorithm
The Quine-McCluskey Algorithm
+-----------------------------------+
| initialize variables and minterms |
| variables := [A, B, C] |
| minterms := [0, 3, 6, 7] |
| minters := [000, 011, 110, 111] |
+-----------------------------------+
|
/
/
|
V
+-----------------------+
| find prime_implicants |
| | A | B | C | out | |
| |---|---|---|------| |
| | 0 | 0 | 0 | 1 | |
| | 0 | 0 | 1 | 0 | |
| | 0 | 1 | 0 | 0 | |
| | 0 | 1 | 1 | 1 | |
| | 1 | 0 | 0 | 0 | |
| | 1 | 0 | 1 | 0 | |
| | 1 | 1 | 0 | 1 | |
| | 1 | 1 | 1 | 1 | |
+-----------------------+
|
|
\
|
V
+----------------------------------+
| | group | minterm | A | B | C | |
| |-------|---------|---|---|---| |
| | 0 | m[0] | 0 | 0 | 0 | |
| | 2 | m[1] | 0 | 1 | 1 | |
| | | m[2] | 1 | 1 | 0 | |
| | 3 | m[3] | 1 | 1 | 1 | |
| |-------|---------|---|---|---| |
+----------------------------------+
\
\
|
V
+-------------------------------------------+
| find pair where only one variable differs |
| | group | minterm | A | B | C | expr |
| |-------|------------|---|---|---|--------|
| | 0 | m[0] | 0 | 0 | 0 | ~(ABC) |
| | 2 | m[1]-m[3] | _ | 1 | 1 | BC |
| | | m[2]-m[3] | 1 | 1 | _ | AB |
+-------------------------------------------+
|
/
|
V
+-------------------------------------------+
| since the bit-diff between pairs in each |
| class is > 1, we move onto the next step |
| |
| | expr | m0 | m1 | m2 | m3 | |
| |--------|-----|-----|-----|------| |
| | ~(ABC) | X | | | | |
| | BC | | X | | | |
| | AB | | | X | | |
| |--------|-----|-----|-----|------| |
+-------------------------------------------+
|
|
/
|
V
+-----------------------------------------+
| If each column contains one element |
| the expression can't be eliminated. |
| Therefore, the resulting expression is: |
| ~(ABC) + BC + AB |
+-----------------------------------------+
Tips
- Use parentheses when the order of operations are ambiguous.
- The precedence is as follows, starting from the highest: NOT -> OR -> (AND, XOR)
- Modify
BooleanExpression.tt
to produce markdown tables for a better UI
Documentation (for developers)
class TruthTableSynthesizer(variables: List[str], minterms: List[int])
class BooleanExpression(expression: str)
class Boolean()
TruthTableSynthesizer.decimal_to_binary(num: int) -> str
TruthTableSynthesizer.combine_implicants(implicants: List[Set[str]]) -> Set[str]
TruthTableSynthesizer.get_prime_implicants() -> Set[str]
TruthTableSynthesizer.covers_minterm(implicant: str, minterm: str) -> bool
TruthTableSynthesizer.get_essential_prime_implicants(prime_implicants: Set[str]) -> Set[str]
TruthTableSynthesizer.minimize_function(prime_implicants: Set[str], essential_implicants: Set[str]) -> List[str]
TruthTableSynthesizer.implicant_to_expression(implicant: str) -> str
TruthTableSynthesizer.synthesize() -> str
BooleanExpression.to_postfix(inifx: str) -> List[str]
BooleanExpression.evaluate(values: Dict[str, bool]) -> bool
BooleanExpression.truth_table() -> List[Tuple[Dict[str, bool], bool]]
BooleanExpression.tt() -> str
BooleanExpression.generate_logic_diagram() -> graphviz.Digraph
Boolean.expr_to_tt(input_expression: str) -> str
Boolean.tt_to_expr(variables: List[str], minterms: List[int]) -> str
Boolean.tt_to_dg(variables: List[str], minterms: List[int], file: str | None = None, directory: str | None = None, format: str = "png") -> str
Boolean.expr_to_dg(input_expression: str, file: str | None = None, directory: str | None = None, format: str = "png") -> str
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
balg-0.0.3.tar.gz
(192.1 kB
view details)
Built Distribution
balg-0.0.3-py3-none-any.whl
(9.1 kB
view details)
File details
Details for the file balg-0.0.3.tar.gz
.
File metadata
- Download URL: balg-0.0.3.tar.gz
- Upload date:
- Size: 192.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d19b3ad8310d9a6c0faa5804d584af20cce47e8e1d125d834dbf69ecfe733f64 |
|
MD5 | 2306d21d3397fec0d95298b0d13f6666 |
|
BLAKE2b-256 | 659a8204825f822b44459eebf9e449a1d78ccaa34dcae0e2bd1bf7c0681697eb |
File details
Details for the file balg-0.0.3-py3-none-any.whl
.
File metadata
- Download URL: balg-0.0.3-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7bbbcb42ae3c1cf2ff5ad450ede410a4858da3ef116b77e09319556efc3290fa |
|
MD5 | 72844ec18f246dcf087a4d0f943602b5 |
|
BLAKE2b-256 | 73f82b59e6c883b98ed29a513f0ee76e944428cb363d04134f25f0d766b6b10a |