{ "info": { "author": "Marcell Vazquez-Chanlatte", "author_email": "mvc@linux.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "
\n \"py-aiger-bv\n
pyAiger-BV: Extension of pyAiger for manipulating\n sequential bitvector circuits.
\n
\n\n\n[![Build Status](https://cloud.drone.io/api/badges/mvcisback/py-aiger-bv/status.svg)](https://cloud.drone.io/mvcisback/py-aiger-bv)\n[![codecov](https://codecov.io/gh/mvcisback/py-aiger-bv/branch/master/graph/badge.svg)](https://codecov.io/gh/mvcisback/py-aiger-bv)\n[![Updates](https://pyup.io/repos/github/mvcisback/py-aiger-bv/shield.svg)](https://pyup.io/repos/github/mvcisback/py-aiger-bv/)\n\n[![PyPI version](https://badge.fury.io/py/py-aiger-bv.svg)](https://badge.fury.io/py/py-aiger-bv)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n \n# Table of Contents\n- [About](#about-py-aiger-bv)\n- [Installation](#installation)\n- [BitVector Expr DSL](#bitvector-expression-dsl)\n- [Sequential Circuit DSL](#sequential-circuit-dsl)\n\n# About Py-Aiger-BV\n\nThis library provides word level abstractions on top of\n[py-aiger](https://github.com/mvcisback/py-aiger). This is done by the\n`AIGBV` which groups inputs, outputs, and latches into named\n**ordered** sequences, e.g. bitvectors.\n\nThe resulting objects can be turned into `AIG`s where each input,\noutput, or latches name has its index appended to its name. For example,\nan bitvector input, `'x'` with 3 bits becomes inputs `'x[0]', 'x[1]', 'x[3]'`\n\n\n# Installation\n\nIf you just need to use `aiger_bv`, you can just run:\n\n`$ pip install py-aiger-bv`\n\nFor developers, note that this project uses the\n[poetry](https://poetry.eustace.io/) python package/dependency\nmanagement tool. Please familarize yourself with it and then\nrun:\n\n`$ poetry install`\n\n# BitVector Expression DSL\n\nAs in py-aiger, when writing combinatorial circuits, the Sequential\nCircuit DSL can be somewhat clumsy. For this common usecase, we have\ndeveloped the BitVector Expression DSL. This DSL actually consists of\ntwo DSLs for signed and unsigned BitVectors. All circuits generated\nthis way have a single output word. We use a **big-endian** encoding\nwhere the most significant digit is the first element of the tuple\nrepresenting the word. For signed numbers, two's complement is used.\n\n```python\nimport aiger_bv\n\n# Create 16 bit variables.\nx, y = aiger_bv.atom(16, 'x', signed=True), aiger_bv.atom(16, 'y', signed=True)\n\n# bitwise ops.\nexpr1 = x & y # Bitwise and.\nexpr2 = x | y # Bitwise or.\nexpr3 = x ^ y # Bitwise xor.\nexpr4 = ~x # Bitwise negation.\n\n# arithmetic\nexpr5 = x + y\nexpr6 = x - y\nexpr7 = x << y\nexpr8 = x >> y # logical if unsigned, arithmetic if signed.\nexpr9 = -x # Arithmetic negation. Only defined for signed expr.\nexpr10 = abs(x)\nexpr11 = x @ y # inner product of bitvectors mod 2 (+ is xor).\n\n# comparison\nexpr12 = x == y\nexpr13 = x != y\nexpr14 = x < y\nexpr15 = x <= y\nexpr16 = x > y\nexpr17 = x >= y\n\n# Atoms can be constants.\nexpr18 = x & aiger_bv.atom(16, 3)\nexpr19 = x & aiger_bv.atom(16, 0xff)\n\n# BitVector expressions can be concatenated.\nexpr20 = x.concat(y)\n\n# Particular bits can be indexed to create new expressions.\nexpr21 = x[1]\n\n# Single bit expressions can be repeated.\nexpr22 = x[1].repeat(10)\n\n# And you can inspect the AIGBV if needed.\ncirc = x.aigbv\n\n# And you can inspect the AIG if needed.\ncirc = x.aigbv.aig\n\n# And of course, you can get a BoolExpr from a single output aig.\nexpr = aiger_bv.UnsignedBVExpr(circ)\n```\n\n# Sequential Circuit DSL\n\npy-aiger-bv's Sequential Circuit DSL implements the same basic api as\npy-aiger's Sequential Circuit DSL, but operates at the (variable\nlength) word level rather than the bit level.\n\n```python\nimport aiger\nimport aigerbv\n\n\ncirc = ... # Create a circuit (see below).\n\n# We assume this circuit has word level\n# inputs: x,y, outputs: z, w, q, latches: a, b\nassert circ.inputs == {'x', 'y'}\nassert circ.outputs == {'z', 'w', 'q'}\nassert circ.latches == {'a', 'b'}\n```\n\n## Sequential composition\n```python\ncirc3 = circ1 >> circ2\n```\n\n## Parallel composition\n```python\ncirc3 = circ1 | circ2\n```\n\n## Adding Feedback (inserts a delay)\n```python\n# Connect output y to input x with delay (initialized to True).\n# (Default initialization is False.)\ncir2 = circ.feedback(\n inputs=['x'],\n outputs=['y'],\n initials=[True],\n keep_outputs=True\n)\n```\n\n## Relabeling\n```python\n# Relabel input 'x' to 'z'.\ncirc2 = circ['i', {'x': 'z'}]\n\n# Relabel output 'y' to 'w'.\ncirc2 = circ['o', {'y': 'w'}]\n\n# Relabel latches 'l1' to 'l2'.\ncirc2 = circ['l', {'l1': 'l2'}]\n```\n\n## Evaluation\n```python\n# Combinatoric evaluation.\ncirc(inputs={'x':(True, False, True), 'y': (True, False)})\n\n# Sequential evaluation.\ncirc.simulate([\n {'x': (True, False, True), 'y': (True, False)},\n {'x': (False, False, True), 'y': (False, False)},\n ])\n\n# Simulation Coroutine.\nsim = circ.simulator() # Coroutine\nnext(sim) # Initialize\nprint(sim.send({'x': (True, False, True), 'y': (True, False)}))\nprint(sim.send({'x': (False, False, True), 'y': (False, False)}))\n\n\n# Unroll\ncirc2 = circ.unroll(steps=10, init=True)\n```\n\n## aiger.AIG to aiger.AIGBV\n\nThere are two main ways to take an object `AIG` from `aiger` and\nconvert it into an `AIGBV` object. The first is the `aig2aigbv`\ncommand which simply makes all inputs words of size 1.\n\n\n```python\n# Create aigerbv.AIGERBV object from aiger.AIG object.\ncirc = ... # Some aiger.AIG object\nword_circ = aigerbv.aig2aigbv(circ) # aigerbv.AIGBV object\n\n\n```\n\n## Gadget Library\n\n### General Manipulation\n\n```python\n# Copy outputs 'x' and 'y' to 'w1, w2' and 'z1, z2'.\ncirc1 = circ >> aigerbv.tee(wordlen=3, iomap={\n 'x': ('w1', 'w2'),\n 'y': ('z1', 'z2')\n })\n\n# Take 1 bit output, 'x', duplicate it 5 times, and group into\n# a single 5-length word output, 'y'.\ncirc2 = circ >> aigerbv.repeat(wordlen=5, input='x', output='z')\n\n# Reverse order of a word.\ncirc3 = circ >> aigerbv.reverse_gate(wordlen=5, input='x', output='z')\n\n# Sink and Source circuits (see encoding section for encoding details).\n## Always output binary encoding for 15. \ncirc4 = aigerbv.source(wordlen=4, value=15, name='x', signed=False)\n\n## Absorb output 'y'\ncirc5 = circ >> aigerbv.sink(wordlen=4, inputs=['y'])\n\n# Identity Gate\ncirc6 = circ >> aigerbv.identity_gate(wordlen=3, input='x')\n\n# Combine/Concatenate words\ncirc7 = circ >> aigerbv.combine_gate(\n left_wordlen=3, left='x',\n right_wordlen=3, right='y',\n output='z'\n)\n\n# Split words\ncirc8 = circ >> aigerbv.split_gate(\n input='x',\n left_wordlen=1, left='z',\n right_wordlen=2, right='w'\n)\n\n# Select single index of circuit and make it a wordlen=1 output.\ncirc9 = circ >> aigerbv.index_gate(wordlen=3, idx=1, input='x', output='x1')\n```\n\n## Bitwise Operations\n\n- `aigerbv.bitwise_and(3, left='x', right='y', output='x&y')`\n- `aigerbv.bitwise_or(3, left='x', right='y', output='x|y')`\n- `aigerbv.bitwise_xor(3, left='x', right='y', output='x^y')`\n- `aigerbv.bitwise_negate(3, left='x', output='~x')`\n\n## Arithmetic\n\n- `aigerbv.add_gate(3, left='x', right='y', output='x+y')`\n- `aigerbv.subtract_gate_gate(3, left='x', right='y', output='x-y')`\n- `aigerbv.inc_gate(3, left='x', output='x+1')`\n- `aigerbv.dec_gate(3, left='x', output='x+1')`\n- `aigerbv.negate_gate(3, left='x', output='-x')`\n- `aigerbv.logical_right_shift(3, shift=1, input='x', output='x>>1')`\n- `aigerbv.arithmetic_right_shift(3, shift=1, input='x', output='x>>1')`\n- `aigerbv.left_shift(3, shift=1, input='x', output='x<<1')`\n\n## Comparison\n\n- `aigerbv.is_nonzero_gate(3, input='x', output='is_nonzero')`\n- `aigerbv.is_zero_gate(3, input='x', output='is_zero')`\n- `aigerbv.eq_gate(3, left='x', right='y', output='x=y')`\n- `aigerbv.ne_gate(3, left='x', right='y', output='x!=y')`\n- `aigerbv.unsigned_lt_gate(3, left='x', right='y', output='x=19.1,<20.0)", "funcy (>=1.12,<2.0)", "py-aiger (>=3.3.5,<4.0.0)", "pyrsistent (>=0.15.4,<0.16.0)" ], "requires_python": ">=3.6,<4.0", "summary": "A python library for manipulating sequential and-inverter gates.", "version": "1.0.1" }, "last_serial": 6005441, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "9c13483cee6db8268dd60ccb71ca9abc", "sha256": "f3921b3fe0a079533eaac8399f6babed200b44e961797a85a205bd0ad5edcf97" }, "downloads": -1, "filename": "py-aiger-bv-0.0.1.tar.gz", "has_sig": false, "md5_digest": "9c13483cee6db8268dd60ccb71ca9abc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6953, "upload_time": "2018-08-05T04:43:20", "url": "https://files.pythonhosted.org/packages/d8/9f/9b320a2ff6bcd8d6022661989c8f001d7ab2d6289553ed750dc7e1c8b8f5/py-aiger-bv-0.0.1.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "c407cab17add5e6fb9b3623844d62f09", "sha256": "9849542190b29b54a44962385fc69fe26269f91a4537a27ec231c8a478c47a21" }, "downloads": -1, "filename": "py-aiger-bv-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c407cab17add5e6fb9b3623844d62f09", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11276, "upload_time": "2018-08-27T01:33:02", "url": "https://files.pythonhosted.org/packages/49/ed/c183f75b7fa6443b3f6c728f10c52fc9a284c9177ef590218d809dd5a4d7/py-aiger-bv-0.1.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "8823fd653825eb57acb48ed3773b3f2e", "sha256": "b0bd68624190c2340b911a2d4ef14b6a1c81b88d55a1f0e643f4dcfe24c55e71" }, "downloads": -1, "filename": "py_aiger_bv-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8823fd653825eb57acb48ed3773b3f2e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10470, "upload_time": "2018-09-03T00:12:09", "url": "https://files.pythonhosted.org/packages/3b/96/a3f6e0d296e33496f7c06429686e0fb93738aef02ea55e378cb0b642ed63/py_aiger_bv-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48fe7922a32b50dfdadca432d89c9d43", "sha256": "457669663c8f66cfdfd3d458388ea88d4f0293c616d5f88fd1a67734b5e036bb" }, "downloads": -1, "filename": "py-aiger-bv-0.2.1.tar.gz", "has_sig": false, "md5_digest": "48fe7922a32b50dfdadca432d89c9d43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11278, "upload_time": "2018-09-03T00:11:57", "url": "https://files.pythonhosted.org/packages/af/1d/284859af5b878eb6dc77c6610ec6ba6b0369c90dc864e04ebed9a65aa8e9/py-aiger-bv-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "de93939c5f69c22e9f639bffad25e23d", "sha256": "36137f8b36b48001a556cd5ac23daedaf203de39aff9377030419de33ed2f758" }, "downloads": -1, "filename": "py_aiger_bv-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "de93939c5f69c22e9f639bffad25e23d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11869, "upload_time": "2019-02-22T22:45:15", "url": "https://files.pythonhosted.org/packages/ab/43/97c8073db62440b6b22a3a1b3a9053082aefd240ab18d8e31fafe890738d/py_aiger_bv-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9ff4fcb2e90330f3ae88f9df1b7f21d2", "sha256": "4ccf1160a347492244c6d8cda86b044674acf93811cae0e005025b2476b95eba" }, "downloads": -1, "filename": "py-aiger-bv-0.3.0.tar.gz", "has_sig": false, "md5_digest": "9ff4fcb2e90330f3ae88f9df1b7f21d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11657, "upload_time": "2019-02-22T22:44:45", "url": "https://files.pythonhosted.org/packages/e2/21/4df1965e225ac1e6c9581b64fb7109eed8649d08c91a43e0a3fa16ebdb2b/py-aiger-bv-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "c29135b2c27bf29726b6fade00a28948", "sha256": "cc24ea18cf0cea4e8a5b64a112830e5815b3bc87ecf4043b1bd2a766525a822e" }, "downloads": -1, "filename": "py_aiger_bv-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c29135b2c27bf29726b6fade00a28948", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12327, "upload_time": "2019-03-04T06:56:51", "url": "https://files.pythonhosted.org/packages/f6/21/4888ae2d774dd5d98931748d38321f7c74a183589352969712eb587b0833/py_aiger_bv-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fcd83a2293650d6cbec27dd8f223713b", "sha256": "cb456ce086fe8582158999e5eeb1324a01c6bc37d79c41dd2989ed98295f92ce" }, "downloads": -1, "filename": "py-aiger-bv-0.4.0.tar.gz", "has_sig": false, "md5_digest": "fcd83a2293650d6cbec27dd8f223713b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12111, "upload_time": "2019-03-04T06:57:06", "url": "https://files.pythonhosted.org/packages/da/a2/a6f85e19aea74884905d1773b7b825a35cdc382a89f2a79c58134dc15a94/py-aiger-bv-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "ba739e5052f29c41aff792e83035f210", "sha256": "a086f623c3c960b8e8daf282414b09fe9dcff8538a37b6ed1ed72215d32dbdfe" }, "downloads": -1, "filename": "py_aiger_bv-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ba739e5052f29c41aff792e83035f210", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12330, "upload_time": "2019-03-04T07:06:35", "url": "https://files.pythonhosted.org/packages/f0/ad/10570bc130b41de62573a36ea19fcc375c8e34f994faf7aa4824ad7dfb5a/py_aiger_bv-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5ec0bf98c094746a6aa914e5d79b17f1", "sha256": "cec868e57e6abca64bf1d0662676ac219dd51e48ff6ee9af516bf1993fccf0f3" }, "downloads": -1, "filename": "py-aiger-bv-0.4.1.tar.gz", "has_sig": false, "md5_digest": "5ec0bf98c094746a6aa914e5d79b17f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12111, "upload_time": "2019-03-04T07:06:18", "url": "https://files.pythonhosted.org/packages/ac/bd/2521b03275fdbbb6603296951d06957631865c4354c4a30a938ffb44e395/py-aiger-bv-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "47866062c2a004b0eb88e1ade4883abe", "sha256": "06022b60307429efe967526a652b06a73e799d95f8286723d93e0d4b9dff3084" }, "downloads": -1, "filename": "py_aiger_bv-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "47866062c2a004b0eb88e1ade4883abe", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12342, "upload_time": "2019-03-05T03:56:38", "url": "https://files.pythonhosted.org/packages/15/63/69339307fa685ade2a149841502b46fea7e9c7d0d3238d511c516c08fa5e/py_aiger_bv-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a28920cc8397a604e66816815963a4f", "sha256": "b217ba0913d23c71217820633614a498dd98c3ff6b033dfa6d2e89f62987e926" }, "downloads": -1, "filename": "py-aiger-bv-0.4.2.tar.gz", "has_sig": false, "md5_digest": "5a28920cc8397a604e66816815963a4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12103, "upload_time": "2019-03-05T03:56:51", "url": "https://files.pythonhosted.org/packages/fc/46/7c093cc3c6ef5d2f6d4b17aecb4e846a9488c7444fcddf20b38e0a4a69e3/py-aiger-bv-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "32d3e3a48c2a44c17ce3ea965ce49ca2", "sha256": "faf2987548917030d88717bd097cb69e605db12baf3c23a49bfd0b82ae60934f" }, "downloads": -1, "filename": "py_aiger_bv-0.4.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "32d3e3a48c2a44c17ce3ea965ce49ca2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12378, "upload_time": "2019-03-05T06:47:35", "url": "https://files.pythonhosted.org/packages/81/73/a3c97820b548d59ab132225574c673c62944dc8397d1ce90b1a412174d5b/py_aiger_bv-0.4.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d0377b4316fe9e25483a218b55ede41e", "sha256": "cb28d395959326bbd874e07561605ecac0d054befa4b216c8a92947c58805553" }, "downloads": -1, "filename": "py-aiger-bv-0.4.3.tar.gz", "has_sig": false, "md5_digest": "d0377b4316fe9e25483a218b55ede41e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12146, "upload_time": "2019-03-05T06:47:21", "url": "https://files.pythonhosted.org/packages/81/98/cbdaee79e853182f9f52c47e2b4868183864af1bc3046f698ff790de965a/py-aiger-bv-0.4.3.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "847007012e97687b50516eafc1eb7361", "sha256": "506a209ca49eb6a1fcf4f5fa17f5380d22b0682877931c7ed82f5bda43a403d2" }, "downloads": -1, "filename": "py_aiger_bv-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "847007012e97687b50516eafc1eb7361", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12561, "upload_time": "2019-03-06T07:42:51", "url": "https://files.pythonhosted.org/packages/6c/dc/c6f3fe58de69775a7e86fd3a1351b0ec1deb54f85cf1b04248dfebd4ffae/py_aiger_bv-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f4c63c2aeee1d7148d8ba3759f3f121", "sha256": "5fe6749a59742907bba00b2c8f762152a83228391fec1ee163c047417995ea22" }, "downloads": -1, "filename": "py-aiger-bv-0.5.0.tar.gz", "has_sig": false, "md5_digest": "8f4c63c2aeee1d7148d8ba3759f3f121", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12313, "upload_time": "2019-03-06T07:43:02", "url": "https://files.pythonhosted.org/packages/e6/1e/d1c4229ade30e344ead4766dfefde413655d7434bfd7ec91b736c27ec6c6/py-aiger-bv-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "aefa60167dcb4af07da2653afece4fb4", "sha256": "2a228516b9cb5f34056a6b0c04915c590139dc173ca19844336194d04188dbde" }, "downloads": -1, "filename": "py_aiger_bv-0.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "aefa60167dcb4af07da2653afece4fb4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12585, "upload_time": "2019-03-07T00:57:18", "url": "https://files.pythonhosted.org/packages/70/6f/e5c80a8e07bdff904b003119e2e575f5e4d65fd40c58ccbae488fd13dafe/py_aiger_bv-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd0f54c553b0a29c0c25cf18c89d666d", "sha256": "e99f956014b1aeed7391d440d196ecab30610ca8a635475d265779fd8d02dd5c" }, "downloads": -1, "filename": "py-aiger-bv-0.5.1.tar.gz", "has_sig": false, "md5_digest": "bd0f54c553b0a29c0c25cf18c89d666d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12338, "upload_time": "2019-03-07T00:57:08", "url": "https://files.pythonhosted.org/packages/32/2b/170b86ce30ed07e130476ae4b41c8f48f4a4010cc162da5cea75fc573e7d/py-aiger-bv-0.5.1.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "3b5dcb95082993fd5717911e4619e1b9", "sha256": "d4bfc5bf1079150a5335dd865ee5083de172089b0042db96be28f162d62e2113" }, "downloads": -1, "filename": "py_aiger_bv-0.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "3b5dcb95082993fd5717911e4619e1b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 15254, "upload_time": "2019-07-12T22:16:09", "url": "https://files.pythonhosted.org/packages/b7/ea/75618b7a6e0a8f81a02edba0cd261d60a2e5006c8bf4757196b714efc78a/py_aiger_bv-0.5.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9a8c69a5333bb8cc39a57718164e6c5", "sha256": "2311853aa19da57fc4bcd9c75179799bc7d00fe7f67ec31ae75043c45fd060d3" }, "downloads": -1, "filename": "py-aiger-bv-0.5.3.tar.gz", "has_sig": false, "md5_digest": "f9a8c69a5333bb8cc39a57718164e6c5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 17097, "upload_time": "2019-07-12T22:16:07", "url": "https://files.pythonhosted.org/packages/ab/7c/a6e64fc077d449b4a6b3a97a75af38bfbec5da78bc06945121e0f636ac29/py-aiger-bv-0.5.3.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "5396ec7d4e5842893249d1fbcde001db", "sha256": "ff466b9275bd1ea19cc7d2cdd00e33e57bdb88497dd7fc16053d1e530c7f319d" }, "downloads": -1, "filename": "py_aiger_bv-0.5.4-py3-none-any.whl", "has_sig": false, "md5_digest": "5396ec7d4e5842893249d1fbcde001db", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 15381, "upload_time": "2019-07-15T18:03:23", "url": "https://files.pythonhosted.org/packages/be/6b/90741cdefd7ddbfdf8e8c1518548b2daeaef84bd32a76dfd86a21f1c3854/py_aiger_bv-0.5.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "988178ea979b56fe0063411ccd55606b", "sha256": "fc618625744bcda199a2f3f487b68e47003744357474e4a27ba3c6bc78c8fea0" }, "downloads": -1, "filename": "py-aiger-bv-0.5.4.tar.gz", "has_sig": false, "md5_digest": "988178ea979b56fe0063411ccd55606b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 17248, "upload_time": "2019-07-15T18:03:21", "url": "https://files.pythonhosted.org/packages/21/15/6973101843d694c2c514aab81c25b054bf0c2b9a592b68ada44b27530746/py-aiger-bv-0.5.4.tar.gz" } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "6d1a03fc2ac83e131e1d1721a5897432", "sha256": "4aa8405370f46ae836ab1dd7515725e165412e252e4d555102320438cc680f8d" }, "downloads": -1, "filename": "py_aiger_bv-0.5.5-py3-none-any.whl", "has_sig": false, "md5_digest": "6d1a03fc2ac83e131e1d1721a5897432", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 15510, "upload_time": "2019-07-18T21:43:48", "url": "https://files.pythonhosted.org/packages/78/9d/5f72af03b24fa4dcfb00d8ec3ec808b86d8d08c5970534728d5cad84f2a6/py_aiger_bv-0.5.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "086ae508c82bbd5464c0bd06a5b1bac4", "sha256": "2bd2101085aac03fef548c68bffb21a760d62cd7a0be6345905a7c1bcab6f376" }, "downloads": -1, "filename": "py-aiger-bv-0.5.5.tar.gz", "has_sig": false, "md5_digest": "086ae508c82bbd5464c0bd06a5b1bac4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 17528, "upload_time": "2019-07-18T21:43:46", "url": "https://files.pythonhosted.org/packages/25/8d/6a19ede896e8de5cbee565ae07d5b7fe3a2a0ebb1adff1f442ed4f51f980/py-aiger-bv-0.5.5.tar.gz" } ], "0.5.6": [ { "comment_text": "", "digests": { "md5": "44c3a8afaafc3e5682dc1afabf754f1b", "sha256": "7d1f98ec8aa16a0ccef93bb156a0382fce0318954d605b005baf4adbcaa74314" }, "downloads": -1, "filename": "py_aiger_bv-0.5.6-py3-none-any.whl", "has_sig": false, "md5_digest": "44c3a8afaafc3e5682dc1afabf754f1b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 15559, "upload_time": "2019-07-24T21:27:23", "url": "https://files.pythonhosted.org/packages/0e/52/e07a7070b2e7680508e1c1ac1395e1abd38c6abfbe4a96e3dcb4970da773/py_aiger_bv-0.5.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "03d9b40271661bab61858cd94759a121", "sha256": "b211a1662c4caad866ae8a35c08e05b66fd3f218d3214432db5280a806db7d00" }, "downloads": -1, "filename": "py-aiger-bv-0.5.6.tar.gz", "has_sig": false, "md5_digest": "03d9b40271661bab61858cd94759a121", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 17571, "upload_time": "2019-07-24T21:27:21", "url": "https://files.pythonhosted.org/packages/e5/9e/98def822671fc1ec07f04bd7afa06b332d8b1ec97b701e828968ecd749d6/py-aiger-bv-0.5.6.tar.gz" } ], "0.5.7": [ { "comment_text": "", "digests": { "md5": "ee6f861577f8fe97bb2cf9962a2dca0a", "sha256": "5dc68a419cec3aea7fee5968482cfd07d093d6e1bbfe6c2beb3138915bbd0f94" }, "downloads": -1, "filename": "py_aiger_bv-0.5.7-py3-none-any.whl", "has_sig": false, "md5_digest": "ee6f861577f8fe97bb2cf9962a2dca0a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 15594, "upload_time": "2019-10-15T05:54:21", "url": "https://files.pythonhosted.org/packages/c1/cb/a1363864e8a53441dea98c01cc7c3e3bc5f0010fd01fa95c4a433ca152e2/py_aiger_bv-0.5.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac51c4936ad70ddb173894b51f577114", "sha256": "24adc110578fef633c0602d8e6237927b43815884a90f85592f1478da42de0fe" }, "downloads": -1, "filename": "py-aiger-bv-0.5.7.tar.gz", "has_sig": false, "md5_digest": "ac51c4936ad70ddb173894b51f577114", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 17603, "upload_time": "2019-10-15T05:54:19", "url": "https://files.pythonhosted.org/packages/f7/31/2f500fa664595fff4a0fd5237a7eb7df9edf49705a53599a68b251d96448/py-aiger-bv-0.5.7.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "68cb705738f0d1e177487df641b99709", "sha256": "38714780c062e1e7227bd1a2b24c220f8b7de2e4722890685ed392b1ee22c64e" }, "downloads": -1, "filename": "py_aiger_bv-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "68cb705738f0d1e177487df641b99709", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 17950, "upload_time": "2019-10-21T03:15:00", "url": "https://files.pythonhosted.org/packages/3b/fc/23908af28c3cc0593ef7a1c3539b84f791aa2c1b57f15815d3e80ff66a0c/py_aiger_bv-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e0eba795c0cacf4b071f6b92dc893dc", "sha256": "1d8f68bc57301cdda09a41a1e76736fab6120f68508bace4c87210c0619b6f22" }, "downloads": -1, "filename": "py-aiger-bv-0.7.0.tar.gz", "has_sig": false, "md5_digest": "5e0eba795c0cacf4b071f6b92dc893dc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 19304, "upload_time": "2019-10-21T03:14:58", "url": "https://files.pythonhosted.org/packages/86/e0/154aa341f4ecaa4923de3a0b5c07bd57db3ccf1b47f57d2391c0ceb705d9/py-aiger-bv-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "13f6607ff66dcb5a82e479d7f336d508", "sha256": "d8c3a02413ab8549bb8def04e34acd1b302fb806edfbc8e00023e47e4886b049" }, "downloads": -1, "filename": "py_aiger_bv-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "13f6607ff66dcb5a82e479d7f336d508", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 18142, "upload_time": "2019-10-21T03:21:16", "url": "https://files.pythonhosted.org/packages/f2/b1/533c07bbdbafec017ebd5cab88b0454e8287d9330e58fc3ab255afab01e8/py_aiger_bv-0.7.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65ddabdefcef7f773566cf76c460d693", "sha256": "d36a99f293ec7235f2c398d5466f84e788e9e75b6085ea374501b765e5785304" }, "downloads": -1, "filename": "py-aiger-bv-0.7.1.tar.gz", "has_sig": false, "md5_digest": "65ddabdefcef7f773566cf76c460d693", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 19759, "upload_time": "2019-10-21T03:21:13", "url": "https://files.pythonhosted.org/packages/1f/b1/0e477cf382070da03020ecac9c588371f1221eb8ada1da0a09561f097f42/py-aiger-bv-0.7.1.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "ef4984d33339d9d987b20c9a2b00d936", "sha256": "0461b00c0c0efa67b693a1413ad817805561576833c8a5c7f37109ab083b9d45" }, "downloads": -1, "filename": "py_aiger_bv-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ef4984d33339d9d987b20c9a2b00d936", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 18109, "upload_time": "2019-10-21T04:26:03", "url": "https://files.pythonhosted.org/packages/46/f6/d731ba56bf4dbd0e93f38ef4d6db2709f98a7ad12287bca7fb8eb4c9cbb9/py_aiger_bv-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b2f8b0dd0f3872a14c126abfa82cabe4", "sha256": "1a60069a559134fae7e3ff8888b490e180bc71d65526e275aa8e84adb1ce2491" }, "downloads": -1, "filename": "py-aiger-bv-1.0.1.tar.gz", "has_sig": false, "md5_digest": "b2f8b0dd0f3872a14c126abfa82cabe4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 19625, "upload_time": "2019-10-21T04:26:01", "url": "https://files.pythonhosted.org/packages/39/69/d1ed7170ca972791bd6a85ec25c39019a279cf6880370a7928852c9c2648/py-aiger-bv-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ef4984d33339d9d987b20c9a2b00d936", "sha256": "0461b00c0c0efa67b693a1413ad817805561576833c8a5c7f37109ab083b9d45" }, "downloads": -1, "filename": "py_aiger_bv-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ef4984d33339d9d987b20c9a2b00d936", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 18109, "upload_time": "2019-10-21T04:26:03", "url": "https://files.pythonhosted.org/packages/46/f6/d731ba56bf4dbd0e93f38ef4d6db2709f98a7ad12287bca7fb8eb4c9cbb9/py_aiger_bv-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b2f8b0dd0f3872a14c126abfa82cabe4", "sha256": "1a60069a559134fae7e3ff8888b490e180bc71d65526e275aa8e84adb1ce2491" }, "downloads": -1, "filename": "py-aiger-bv-1.0.1.tar.gz", "has_sig": false, "md5_digest": "b2f8b0dd0f3872a14c126abfa82cabe4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 19625, "upload_time": "2019-10-21T04:26:01", "url": "https://files.pythonhosted.org/packages/39/69/d1ed7170ca972791bd6a85ec25c39019a279cf6880370a7928852c9c2648/py-aiger-bv-1.0.1.tar.gz" } ] }