A boolean gate circuit description package for saving, loading, and evaluating logic circuits.
Project description
circuit-static-description
A text-based boolean gate circuit description format that is easy to save and port.
Installation
Install from PyPI:
pip install circuit-static-description
Python package usage
This project provides a Python package named circuit_static_description. The package supports saving circuits, loading circuits, and evaluating outputs.
Importing
from circuit_static_description import Circuit
Circuit description format
A circuit description contains the number of inputs, the number of outputs, optional intermediate variables, and the expression for each output.
- Input references use
I0,I1,I2, etc. - Intermediate variables use
V0,V1,V2, etc. OnlyVfollowed by an integer is accepted as a variable name. - Variable definitions use
V<number> = expressionand may reference inputs and earlier or later variables. - Output lines use fixed names
OUT0,OUT1, etc. - Output definitions may reference inputs, variables, and supported logic operators.
- Supported logic operators:
AND,OR,NOT,XOR,NAND,NOR. - Circular variable dependencies and undefined variable references are rejected when the circuit is loaded or parsed.
Example:
INPUTS 3
OUTPUTS 2
V0 = AND(I0, I1)
V1 = XOR(V0, I2)
OUT0 = V0
OUT1 = NOR(I2, V1)
Saving a circuit
from circuit_static_description import Circuit
circuit = Circuit(
input_count=3,
output_count=2,
variables=[
("V0", "AND(I0, I1)"),
("V1", "XOR(V0, I2)"),
],
outputs=[
"V0",
"NOR(I2, V1)",
],
)
circuit.save("example.circuit")
Loading a circuit
from circuit_static_description import Circuit
circuit = Circuit.load("example.circuit")
Evaluating a circuit
result = circuit.evaluate([1, 0, 1])
print(result)
# Example output: [0, 0]
Notes
evaluateaccepts a list of input values in input order.- The output is returned as a list of
0or1values. - Custom variable names are not supported. Intermediate variables must be named
V0,V1,V2, etc. - Old files without variable definitions still load normally.
Benchmarking sequential evaluation
The repository includes a local benchmark script in tests/benchmark.py for measuring sequential Circuit.evaluate(...) performance on random circuits.
The benchmark script uses tqdm to show progress while running evaluation loops.
Run the benchmark from the project root with the Poetry environment active:
python tests/benchmark.py
For a shorter run, use the quick mode:
python tests/benchmark.py --quick
This script is for local testing only and is not included in the published PyPI package.
Benchmark details
tests/benchmark.pygenerates a random circuit with input size, output size, and depth.- It performs a small calibration run first to choose a comfortable workload that should finish in under 5 minutes.
- It reports the sequential evaluation time for the generated circuit.
Example output
Circuit benchmark
Input count: 16, output count: 128, depth: 6
Rounds: 200
Sequential time: 2.1234s
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file circuit_static_description-0.1.2.tar.gz.
File metadata
- Download URL: circuit_static_description-0.1.2.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.11.15 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
266c3eb996721ea95a581aa3e8771fa4fa5277b114e45d0e4988c1fa8059069e
|
|
| MD5 |
07837a41ed4c3080f999cfa608978e3e
|
|
| BLAKE2b-256 |
2ae4a55aad363dcb6550ca608f43cd0846783c3ffd4c0d36fe3d94781aec9b5d
|
File details
Details for the file circuit_static_description-0.1.2-py3-none-any.whl.
File metadata
- Download URL: circuit_static_description-0.1.2-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.11.15 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f49c79535a1bcd21af3d74e3d822815937ba3e564ab155b1dcc4b0eee831a380
|
|
| MD5 |
671352514eb1ab2d804897750c733d2e
|
|
| BLAKE2b-256 |
91cbe5bb49d7fe023fe400b0d4747ec46b54ff580089e27d2bd02ae9b52a997c
|