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 codecov 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.3.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file py-aiger-discrete-0.1.3.tar.gz.

File metadata

  • Download URL: py-aiger-discrete-0.1.3.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.10 CPython/3.8.2 Linux/5.4.0-48-generic

File hashes

Hashes for py-aiger-discrete-0.1.3.tar.gz
Algorithm Hash digest
SHA256 1c6190b2ad418f4170df6a743b34ab78b7be621889d91f0fa630675a73300b87
MD5 d0f1baf7f5881175a99e6d9523795a4a
BLAKE2b-256 c8c94464c556b624e2a8ded111e26cac9a1b24f9e0fc7b4e2e11962d735129c2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: py_aiger_discrete-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.10 CPython/3.8.2 Linux/5.4.0-48-generic

File hashes

Hashes for py_aiger_discrete-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 82559ed4ee9f586e59e84b699b6dc21f062767217f311bef61ae4cdce59b56d5
MD5 a2776fbbc1770ea597f6dd3db11e1feb
BLAKE2b-256 b7882382fe756639feb1bc84a1c1b4b2f568fac4d85e01413cdda1832348a804

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