Library for modeling functions over discrete sets using aiger circuits.
Project description
py-aiger-discrete
Library for modeling functions over discrete sets using aiger circuits.
Installation
If you just need to use py-aiger-discrete, you can just run:
$ pip install py-aiger-discrete
For developers, note that this project uses the poetry python package/dependency management tool. Please familarize yourself with it and then run:
$ poetry install
About
This library helps with modeling functions over finite sets using circuits.
f : A → B₁ × B₂ × … × Bₘ
where A ⊆ A₁ × A₂ × … × Aₙ.
This is done by providing:
- A encoder/decoder pair for each set to and from (unsigned) integers.
- A circuit that uses the bit-vector representation of these integers
to compute
f. - A circuit that monitors if the input bit-vector sequence is
valid, i.e., a member ofA.
Functionally, the py-aiger-discrete library centers around the
aiger_discrete.FiniteFunc class which has 4 attributes an aiger_bv.AIGBV object.
- A string
valid_idindicating - A circuit,
circ, over named bit-vectors in the form of anaiger_bv.AIGBVobject. One of the outputs must be namedvalid_id. - A mapping from inputs to
aiger_discrete.Encodingobjects which encode/decode objects to integers. The standard bit-encoding of unsigned integers is feed intocirc. - A mapping from outputs to
aiger_discrete.Encodingobjects which encode/decode objects to integers. These encodings are used to decode the resulting bit-vectors ofcirc.
Usage
Below we provide a basic usage example. This example assumes basic
knowledge of the py-aiger ecosystem and particularly py-aiger-bv.
import aiger_bv as BV
from aiger_discrete import Encoding, from_aigbv
# Will assume inputs are in 'A', 'B', 'C', 'D', or 'E'.
ascii_encoder = Encoding(
decode=lambda x: chr(x + ord('A')), # Make 'A' map to 0.
encode=lambda x: ord(x) - ord('A'),
)
# Create function which maps: A -> B, B -> C, C -> D, D -> E.
x = BV.uatom(3, 'x') # need 3 bits to capture 5 input types.
update_expr = (x + 1) & 0b111
circ = update_expr.with_output('y').aigbv
# Need to assert that the inputs are less than 4.
circ |= (x <= 4).with_output('##valid').aigbv
func = from_aigbv(
circ,
input_encodings={'x': ascii_encoder},
output_encodings={'y': ascii_encoder},
valid_id='##valid',
)
assert func('A') == 'B'
assert func('B') == 'C'
assert func('C') == 'D'
assert func('D') == 'E'
assert func('E') == 'A'
Note that py-aiger-discrete implements most of the circuit API as aiger_bv.AIGBV.
For example, sequential composition:
func12 = func1 >> func2
or parallel composition:
func12 = func1 | func2
or unrolling:
func_unrolled = func1.unroll(5)
or feedback:
func_cycle = func1.loopback({
'input': 'x',
'output': 'y',
'keep_output': True,
`input_encoder`: True,
`init`: 'A',
})
Note that feedback now supports additional flag per wiring description
called input_encoder which determines if the input or output
encoding is used for initial latch value resp. The default is the
input encoding.
or renaming:
func_renamed = func1['i', {'x': 'z'}]
assert func1.inputs == {'z'}
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 py-aiger-discrete-0.1.10.tar.gz.
File metadata
- Download URL: py-aiger-discrete-0.1.10.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.14 CPython/3.9.13 Linux/6.0.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89a3448c04d9629ff572e972442d15cf444beedc76f9b1670dd6be496d66ce99
|
|
| MD5 |
9f439662f9e8de2bc3d17e23cc4e7bd2
|
|
| BLAKE2b-256 |
4377ccac681e91d148053c95cd44b3be6b494525b0b370c8f70d0a2e071f78a9
|
File details
Details for the file py_aiger_discrete-0.1.10-py3-none-any.whl.
File metadata
- Download URL: py_aiger_discrete-0.1.10-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.14 CPython/3.9.13 Linux/6.0.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
946999bed701458e0678680ed0bac9b49305cef3712c313344961c5d05905a65
|
|
| MD5 |
8f9faf87c0203cd0ed610efc3640154a
|
|
| BLAKE2b-256 |
c271d6b7bcc357dcac67b0ff0861f60268f785f732e255bbbe33bcc9aab16902
|