Skip to main content

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.

Build Status docs badge PyPI version License: MIT

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:

  1. A encoder/decoder pair for each set to and from (unsigned) integers.
  2. A circuit that uses the bit-vector representation of these integers to compute f.
  3. A circuit that monitors if the input bit-vector sequence is valid, i.e., a member of A.

Functionally, the py-aiger-discrete library centers around the aiger_discrete.FiniteFunc class which has 4 attributes an aiger_bv.AIGBV object.

  1. A string valid_id indicating
  2. A circuit, circ, over named bit-vectors in the form of an aiger_bv.AIGBV object. One of the outputs must be named valid_id.
  3. A mapping from inputs to aiger_discrete.Encoding objects which encode/decode objects to integers. The standard bit-encoding of unsigned integers is feed into circ.
  4. A mapping from outputs to aiger_discrete.Encoding objects which encode/decode objects to integers. These encodings are used to decode the resulting bit-vectors of circ.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py-aiger-discrete-0.1.10.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

py_aiger_discrete-0.1.10-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

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

Hashes for py-aiger-discrete-0.1.10.tar.gz
Algorithm Hash digest
SHA256 89a3448c04d9629ff572e972442d15cf444beedc76f9b1670dd6be496d66ce99
MD5 9f439662f9e8de2bc3d17e23cc4e7bd2
BLAKE2b-256 4377ccac681e91d148053c95cd44b3be6b494525b0b370c8f70d0a2e071f78a9

See more details on using hashes here.

File details

Details for the file py_aiger_discrete-0.1.10-py3-none-any.whl.

File metadata

File hashes

Hashes for py_aiger_discrete-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 946999bed701458e0678680ed0bac9b49305cef3712c313344961c5d05905a65
MD5 8f9faf87c0203cd0ed610efc3640154a
BLAKE2b-256 c271d6b7bcc357dcac67b0ff0861f60268f785f732e255bbbe33bcc9aab16902

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page