Name | aigverse JSON |
Version |
0.0.24
JSON |
| download |
home_page | None |
Summary | A Python library for working with logic networks, synthesis, and optimization. |
upload_time | 2025-09-03 12:24:31 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | MIT License
Copyright (c) 2025 Marcel Walter
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
|
keywords |
aigverse
logic
synthesis
aig
eda
optimization
machine learning
artificial intelligence
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# aigverse: A Python Library for Logic Networks, Synthesis, and Optimization
[](https://github.com/marcelwa/aigverse/actions/workflows/aigverse-pypi-deployment.yml)
[](https://aigverse.readthedocs.io/)
[](https://pypi.org/project/aigverse/)
[](https://github.com/marcelwa/aigverse/blob/main/LICENSE)
[](https://github.com/marcelwa/aigverse/releases)
> [!Important]
> This project is still in the early stages of development. The API is subject to change, and some features may not be
> fully implemented. I appreciate your patience and understanding as work to improve the library continues.
<p align="center">
<a href="https://aigverse.readthedocs.io">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/marcelwa/aigverse/refs/heads/main/docs/_static/aigverse_logo_dark_mode.svg" width="60%">
<img src="https://raw.githubusercontent.com/marcelwa/aigverse/refs/heads/main/docs/_static/aigverse_logo_light_mode.svg" width="60%" alt="aigverse logo">
</picture>
</a>
</p>
`aigverse` is a Python framework designed to bridge the gap between logic synthesis and AI/ML applications. It allows
you to represent and manipulate logic circuits efficiently, making it easier to integrate logic synthesis tasks into
machine learning pipelines. `aigverse` is built directly upon the powerful [EPFL Logic Synthesis Libraries](https://arxiv.org/abs/1805.05121),
particularly [mockturtle](https://github.com/lsils/mockturtle), providing a high-level Python interface to
state-of-the-art algorithms for And-Inverter Graph (AIG) manipulation and logic synthesis, widely used in formal
verification, hardware design, and optimization tasks.
<p align="center">
<a href="https://aigverse.readthedocs.io/">
<img width=30% src="https://img.shields.io/badge/documentation-blue?style=for-the-badge&logo=read%20the%20docs" alt="Documentation" />
</a>
</p>
## β¨ Features
- **Efficient Logic Representation**: Use And-Inverter Graphs (AIGs) to model and manipulate logic circuits in Python.
- **File Format Support**: Read and write AIGER, Verilog, Bench, PLA, ... files for interoperability with other logic
synthesis tools.
- **C++ Backend**: Leverage the performance of the EPFL Logic Synthesis Libraries for fast logic synthesis and
optimization.
- **High-Level API**: Simplify logic synthesis tasks with a Pythonic interface for AIG manipulation and optimization.
- **Integration with Machine Learning**: Convenient integration with popular data science libraries.
## π€ Motivation
As AI and machine learning (ML) increasingly impact hardware design automation, there's a growing need for tools that
integrate logic synthesis with ML workflows. `aigverse` provides a Python-friendly interface for logic synthesis, making
it easier to develop applications that blend both AI/ML and traditional circuit synthesis techniques. By building upon the
robust foundation of the EPFL Logic Synthesis Libraries, `aigverse` delivers powerful logic manipulation capabilities while
maintaining accessibility through its Python interface. With `aigverse`, you can parse, manipulate, and optimize logic circuits
directly from Python. Eventually, we aim to provide seamless integration with popular ML libraries, enabling the development
of novel AI-driven synthesis and optimization tools.
## π¦ Installation
`aigverse` is built using the EPFL Logic Synthesis Libraries with [pybind11](https://github.com/pybind/pybind11).
It is available via PyPI for all major operating systems and supports Python 3.9 to 3.13.
```bash
pip install aigverse
```
### π Adapters
To keep the core library lightweight, machine learning integration adapters are not installed by default. These adapters
enable seamless conversion of AIGs to graph and array formats for use with ML and data science libraries (such as
[NetworkX](https://networkx.org/), [NumPy](https://numpy.org/), etc.). To install `aigverse` with the adapters extra,
use:
```bash
pip install "aigverse[adapters]"
```
This will install additional dependencies required for ML workflows. See the
[documentation](https://aigverse.readthedocs.io/en/latest/installation.html#machine-learning-adapters) for more details.
## π Usage
The following gives a shallow overview on `aigverse`. Detailed documentation and examples are available at
[ReadTheDocs](https://aigverse.readthedocs.io/).
### ποΈ Basic Example: Creating an AIG
In `aigverse`, you can create a simple And-Inverter Graph (AIG) and manipulate it using various logic operations.
```python
from aigverse import Aig
# Create a new AIG network
aig = Aig()
# Create primary inputs
x1 = aig.create_pi()
x2 = aig.create_pi()
# Create logic gates
f_and = aig.create_and(x1, x2) # AND gate
f_or = aig.create_or(x1, x2) # OR gate
# Create primary outputs
aig.create_po(f_and)
aig.create_po(f_or)
# Print the size of the AIG network
print(f"AIG Size: {aig.size()}")
```
Note that all primary inputs (PIs) must be created before any logic gates.
### π Iterating over AIG Nodes
You can iterate over all nodes in the AIG, or specific subsets like the primary inputs or only logic nodes (gates).
```python
# Iterate over all nodes in the AIG
for node in aig.nodes():
print(f"Node: {node}")
# Iterate only over primary inputs
for pi in aig.pis():
print(f"Primary Input: {pi}")
# Iterate only over logic nodes (gates)
for gate in aig.gates():
print(f"Gate: {gate}")
# Iterate over the fanins of a node
n_and = aig.get_node(f_and)
for fanin in aig.fanins(n_and):
print(f"Fanin of {n_and}: {fanin}")
```
### π Depth and Level Computation
You can compute the depth of the AIG network and the level of each node. Depth information is useful for estimating the
critical path delay of a respective circuit.
```python
from aigverse import DepthAig
depth_aig = DepthAig(aig)
print(f"Depth: {depth_aig.num_levels()}")
for node in aig.nodes():
print(f"Level of {node}: {depth_aig.level(node)}")
```
### πΈοΈ AIGs with Fanout Information
If needed, you can retrieve the fanouts of AIG nodes as well:
```python
from aigverse import FanoutAig
fanout_aig = FanoutAig(aig)
n_and = aig.get_node(f_and)
# Iterate over the fanouts of a node
for fanout in fanout_aig.fanouts(n_and):
print(f"Fanout of node {n_and}: {fanout}")
```
### π Sequential AIGs
`aigverse` also supports sequential AIGs, which are AIGs with registers.
```python
from aigverse import SequentialAig
seq_aig = SequentialAig()
x1 = seq_aig.create_pi() # Regular PI
x2 = seq_aig.create_ro() # Register output (sequential PI)
f_and = seq_aig.create_and(x1, x2) # AND gate
seq_aig.create_ri(f_and) # Register input (sequential PO)
print(seq_aig.registers()) # Prints the association of registers
```
It is to be noted that the construction of sequential AIGs comes with some caveats:
1. All register outputs (ROs) must be created after all primary inputs (PIs).
2. All register inputs (RIs) must be created after all primary outputs (POs).
3. As for regular AIGs, all PIs and ROs must be created before any logic gates.
### β‘ Logic Optimization
You can optimize AIGs using various algorithms. For example, you can perform _resubstitution_ to simplify logic using
shared divisors. Similarly, _refactoring_ collapses maximal fanout-free cones (MFFCs) into truth tables and resynthesizes
them into new structures. Cut _rewriting_ optimizes the AIG by replacing cuts with improved ones from a pre-computed NPN
database. Finally, _balancing_ performs (E)SOP factoring to minimize the number of levels in the AIG.
```python
from aigverse import aig_resubstitution, sop_refactoring, aig_cut_rewriting, balancing
# Clone the AIG network for size comparison
aig_clone = aig.clone()
# Optimize the AIG with several optimization algorithms
for optimization in [aig_resubstitution, sop_refactoring, aig_cut_rewriting, balancing]:
optimization(aig)
# Print the size of the unoptimized and optimized AIGs
print(f"Original AIG Size: {aig_clone.size()}")
print(f"Optimized AIG Size: {aig.size()}")
```
### β
Equivalence Checking
Equivalence of AIGs (e.g., after optimization) can be checked using SAT-based equivalence checking.
```python
from aigverse import equivalence_checking
# Perform equivalence checking
equiv = equivalence_checking(aig1, aig2)
if equiv:
print("AIGs are equivalent!")
else:
print("AIGs are NOT equivalent!")
```
### π File Format Support
You can read and write AIGs in various file formats, including (ASCII) [AIGER](https://fmv.jku.at/aiger/), gate-level
Verilog and PLA.
#### βοΈ Writing
```python
from aigverse import write_aiger, write_verilog, write_dot
# Write an AIG network to an AIGER file
write_aiger(aig, "example.aig")
# Write an AIG network to a Verilog file
write_verilog(aig, "example.v")
# Write an AIG network to a DOT file
write_dot(aig, "example.dot")
```
#### π Parsing
```python
from aigverse import (
read_aiger_into_aig,
read_ascii_aiger_into_aig,
read_verilog_into_aig,
read_pla_into_aig,
)
# Read AIGER files into AIG networks
aig1 = read_aiger_into_aig("example.aig")
aig2 = read_ascii_aiger_into_aig("example.aag")
# Read a Verilog file into an AIG network
aig3 = read_verilog_into_aig("example.v")
# Read a PLA file into an AIG network
aig4 = read_pla_into_aig("example.pla")
```
Additionally, you can read AIGER files into sequential AIGs using `read_aiger_into_sequential_aig` and
`read_ascii_aiger_into_sequential_aig`.
### π₯ `pickle` Support
AIGs support Python's `pickle` protocol, allowing you to serialize and deserialize AIG objects for persistent storage or
interface with data science or machine learning workflows.
```python
import pickle
with open("aig.pkl", "wb") as f:
pickle.dump(aig, f)
with open("aig.pkl", "rb") as f:
unpickled_aig = pickle.load(f)
```
You can also pickle multiple AIGs at once by storing them in a tuple or list.
### π§ Machine Learning Integration
With the `adapters` extra, you can convert an AIG to a [NetworkX](https://networkx.org/) directed graph, enabling
visualization and use with graph-based ML tools:
```python
import aigverse.adapters
G = aig.to_networkx(levels=True, fanouts=True, node_tts=True)
```
Graph, node, and edge attributes provide logic, level, fanout, and function information for downstream ML or
visualization tasks.
For more details and examples, see the
[machine learning integration documentation](https://aigverse.readthedocs.io/en/latest/machine_learning.html).
### π’ Truth Tables
Small Boolean functions can be efficiently represented using truth tables. `aigverse` enables the creation and
manipulation of truth tables by wrapping a portion of the [kitty](https://github.com/msoeken/kitty) library.
#### π Creation
```python
from aigverse import TruthTable
# Initialize a truth table with 3 variables
tt = TruthTable(3)
# Create a truth table from a hex string representing the MAJ function
tt.create_from_hex_string("e8")
```
#### π§ Manipulation
```python
# Flip each bit in the truth table
for i in range(tt.num_bits()):
print(f"Flipping bit {int(tt.get_bit(i))}")
tt.flip_bit(i)
# Print a binary string representation of the truth table
print(tt.to_binary())
# Clear the truth table
tt.clear()
# Check if the truth table is constant 0
print(tt.is_const0())
```
#### π£ Symbolic Simulation of AIGs
```python
from aigverse import simulate, simulate_nodes
# Obtain the truth table of each AIG output
tts = simulate(aig)
# Print the truth tables
for i, tt in enumerate(tts):
print(f"PO{i}: {tt.to_binary()}")
# Obtain the truth tables of each node in the AIG
n_to_tt = simulate_nodes(aig)
# Print the truth tables of each node
for node, tt in n_to_tt.items():
print(f"Node {node}: {tt.to_binary()}")
```
#### π Exporting as Lists or NumPy Arrays
For machine learning applications, it is often useful to convert truth tables into standard data structures like Python
lists or NumPy arrays. Since `TruthTable` objects are iterable, conversion is straightforward.
```python
import numpy as np
# Export to a list
tt_list = list(tt)
# Export to NumPy arrays
tt_np_bool = np.array(tt)
tt_np_int = np.array(tt, dtype=np.int32)
tt_np_float = np.array(tt, dtype=np.float64)
```
#### π₯ `pickle` Support
Truth tables also support Python's `pickle` protocol, allowing you to serialize and deserialize them.
```python
import pickle
with open("tt.pkl", "wb") as f:
pickle.dump(tt, f)
with open("tt.pkl", "rb") as f:
unpickled_tt = pickle.load(f)
```
## π Contributing
Contributions are welcome! If you'd like to contribute to `aigverse`, please see the
[contribution guide](https://aigverse.readthedocs.io/en/latest/contributing.html). I appreciate feedback and suggestions
for improving the library.
## πΌ Support and Consulting
`aigverse` is and will always be a free, open-source library. If you or your organization require dedicated support,
specific new features, or integration of `aigverse` into your projects, professional consulting services are available.
This is a great way to get the features you need while also supporting the ongoing maintenance and development of the
library.
For inquiries, please reach out to [@marcelwa](https://github.com/marcelwa/). More information can be found in the
[documentation](https://aigverse.readthedocs.io/en/latest/support.html).
## π License
`aigverse` is available under the MIT License.
Raw data
{
"_id": null,
"home_page": null,
"name": "aigverse",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "aigverse, logic, synthesis, AIG, EDA, optimization, machine learning, artificial intelligence",
"author": null,
"author_email": "Marcel Walter <marcel.walter@tum.de>",
"download_url": "https://files.pythonhosted.org/packages/01/9c/dd81f05ecf7ef0a83ce36fc35c23f10b0e3d79221b1b1d2fe86ae643305b/aigverse-0.0.24.tar.gz",
"platform": null,
"description": "# aigverse: A Python Library for Logic Networks, Synthesis, and Optimization\n\n[](https://github.com/marcelwa/aigverse/actions/workflows/aigverse-pypi-deployment.yml)\n[](https://aigverse.readthedocs.io/)\n[](https://pypi.org/project/aigverse/)\n[](https://github.com/marcelwa/aigverse/blob/main/LICENSE)\n[](https://github.com/marcelwa/aigverse/releases)\n\n> [!Important]\n> This project is still in the early stages of development. The API is subject to change, and some features may not be\n> fully implemented. I appreciate your patience and understanding as work to improve the library continues.\n\n<p align=\"center\">\n <a href=\"https://aigverse.readthedocs.io\">\n <picture>\n <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/marcelwa/aigverse/refs/heads/main/docs/_static/aigverse_logo_dark_mode.svg\" width=\"60%\">\n <img src=\"https://raw.githubusercontent.com/marcelwa/aigverse/refs/heads/main/docs/_static/aigverse_logo_light_mode.svg\" width=\"60%\" alt=\"aigverse logo\">\n </picture>\n </a>\n</p>\n\n`aigverse` is a Python framework designed to bridge the gap between logic synthesis and AI/ML applications. It allows\nyou to represent and manipulate logic circuits efficiently, making it easier to integrate logic synthesis tasks into\nmachine learning pipelines. `aigverse` is built directly upon the powerful [EPFL Logic Synthesis Libraries](https://arxiv.org/abs/1805.05121),\nparticularly [mockturtle](https://github.com/lsils/mockturtle), providing a high-level Python interface to\nstate-of-the-art algorithms for And-Inverter Graph (AIG) manipulation and logic synthesis, widely used in formal\nverification, hardware design, and optimization tasks.\n\n<p align=\"center\">\n <a href=\"https://aigverse.readthedocs.io/\">\n <img width=30% src=\"https://img.shields.io/badge/documentation-blue?style=for-the-badge&logo=read%20the%20docs\" alt=\"Documentation\" />\n </a>\n</p>\n\n## \u2728 Features\n\n- **Efficient Logic Representation**: Use And-Inverter Graphs (AIGs) to model and manipulate logic circuits in Python.\n- **File Format Support**: Read and write AIGER, Verilog, Bench, PLA, ... files for interoperability with other logic\n synthesis tools.\n- **C++ Backend**: Leverage the performance of the EPFL Logic Synthesis Libraries for fast logic synthesis and\n optimization.\n- **High-Level API**: Simplify logic synthesis tasks with a Pythonic interface for AIG manipulation and optimization.\n- **Integration with Machine Learning**: Convenient integration with popular data science libraries.\n\n## \ud83e\udd14 Motivation\n\nAs AI and machine learning (ML) increasingly impact hardware design automation, there's a growing need for tools that\nintegrate logic synthesis with ML workflows. `aigverse` provides a Python-friendly interface for logic synthesis, making\nit easier to develop applications that blend both AI/ML and traditional circuit synthesis techniques. By building upon the\nrobust foundation of the EPFL Logic Synthesis Libraries, `aigverse` delivers powerful logic manipulation capabilities while\nmaintaining accessibility through its Python interface. With `aigverse`, you can parse, manipulate, and optimize logic circuits\ndirectly from Python. Eventually, we aim to provide seamless integration with popular ML libraries, enabling the development\nof novel AI-driven synthesis and optimization tools.\n\n## \ud83d\udce6 Installation\n\n`aigverse` is built using the EPFL Logic Synthesis Libraries with [pybind11](https://github.com/pybind/pybind11).\nIt is available via PyPI for all major operating systems and supports Python 3.9 to 3.13.\n\n```bash\npip install aigverse\n```\n\n### \ud83d\udd0c Adapters\n\nTo keep the core library lightweight, machine learning integration adapters are not installed by default. These adapters\nenable seamless conversion of AIGs to graph and array formats for use with ML and data science libraries (such as\n[NetworkX](https://networkx.org/), [NumPy](https://numpy.org/), etc.). To install `aigverse` with the adapters extra,\nuse:\n\n```bash\npip install \"aigverse[adapters]\"\n```\n\nThis will install additional dependencies required for ML workflows. See the\n[documentation](https://aigverse.readthedocs.io/en/latest/installation.html#machine-learning-adapters) for more details.\n\n## \ud83d\ude80 Usage\n\nThe following gives a shallow overview on `aigverse`. Detailed documentation and examples are available at\n[ReadTheDocs](https://aigverse.readthedocs.io/).\n\n### \ud83c\udfd7\ufe0f Basic Example: Creating an AIG\n\nIn `aigverse`, you can create a simple And-Inverter Graph (AIG) and manipulate it using various logic operations.\n\n```python\nfrom aigverse import Aig\n\n# Create a new AIG network\naig = Aig()\n\n# Create primary inputs\nx1 = aig.create_pi()\nx2 = aig.create_pi()\n\n# Create logic gates\nf_and = aig.create_and(x1, x2) # AND gate\nf_or = aig.create_or(x1, x2) # OR gate\n\n# Create primary outputs\naig.create_po(f_and)\naig.create_po(f_or)\n\n# Print the size of the AIG network\nprint(f\"AIG Size: {aig.size()}\")\n```\n\nNote that all primary inputs (PIs) must be created before any logic gates.\n\n### \ud83d\udd0d Iterating over AIG Nodes\n\nYou can iterate over all nodes in the AIG, or specific subsets like the primary inputs or only logic nodes (gates).\n\n```python\n# Iterate over all nodes in the AIG\nfor node in aig.nodes():\n print(f\"Node: {node}\")\n\n# Iterate only over primary inputs\nfor pi in aig.pis():\n print(f\"Primary Input: {pi}\")\n\n# Iterate only over logic nodes (gates)\nfor gate in aig.gates():\n print(f\"Gate: {gate}\")\n\n# Iterate over the fanins of a node\nn_and = aig.get_node(f_and)\nfor fanin in aig.fanins(n_and):\n print(f\"Fanin of {n_and}: {fanin}\")\n```\n\n### \ud83d\udccf Depth and Level Computation\n\nYou can compute the depth of the AIG network and the level of each node. Depth information is useful for estimating the\ncritical path delay of a respective circuit.\n\n```python\nfrom aigverse import DepthAig\n\ndepth_aig = DepthAig(aig)\nprint(f\"Depth: {depth_aig.num_levels()}\")\nfor node in aig.nodes():\n print(f\"Level of {node}: {depth_aig.level(node)}\")\n```\n\n### \ud83d\udd78\ufe0f AIGs with Fanout Information\n\nIf needed, you can retrieve the fanouts of AIG nodes as well:\n\n```python\nfrom aigverse import FanoutAig\n\nfanout_aig = FanoutAig(aig)\nn_and = aig.get_node(f_and)\n# Iterate over the fanouts of a node\nfor fanout in fanout_aig.fanouts(n_and):\n print(f\"Fanout of node {n_and}: {fanout}\")\n```\n\n### \ud83d\udd04 Sequential AIGs\n\n`aigverse` also supports sequential AIGs, which are AIGs with registers.\n\n```python\nfrom aigverse import SequentialAig\n\nseq_aig = SequentialAig()\nx1 = seq_aig.create_pi() # Regular PI\nx2 = seq_aig.create_ro() # Register output (sequential PI)\n\nf_and = seq_aig.create_and(x1, x2) # AND gate\n\nseq_aig.create_ri(f_and) # Register input (sequential PO)\n\nprint(seq_aig.registers()) # Prints the association of registers\n```\n\nIt is to be noted that the construction of sequential AIGs comes with some caveats:\n\n1. All register outputs (ROs) must be created after all primary inputs (PIs).\n2. All register inputs (RIs) must be created after all primary outputs (POs).\n3. As for regular AIGs, all PIs and ROs must be created before any logic gates.\n\n### \u26a1 Logic Optimization\n\nYou can optimize AIGs using various algorithms. For example, you can perform _resubstitution_ to simplify logic using\nshared divisors. Similarly, _refactoring_ collapses maximal fanout-free cones (MFFCs) into truth tables and resynthesizes\nthem into new structures. Cut _rewriting_ optimizes the AIG by replacing cuts with improved ones from a pre-computed NPN\ndatabase. Finally, _balancing_ performs (E)SOP factoring to minimize the number of levels in the AIG.\n\n```python\nfrom aigverse import aig_resubstitution, sop_refactoring, aig_cut_rewriting, balancing\n\n# Clone the AIG network for size comparison\naig_clone = aig.clone()\n\n# Optimize the AIG with several optimization algorithms\nfor optimization in [aig_resubstitution, sop_refactoring, aig_cut_rewriting, balancing]:\n optimization(aig)\n\n# Print the size of the unoptimized and optimized AIGs\nprint(f\"Original AIG Size: {aig_clone.size()}\")\nprint(f\"Optimized AIG Size: {aig.size()}\")\n```\n\n### \u2705 Equivalence Checking\n\nEquivalence of AIGs (e.g., after optimization) can be checked using SAT-based equivalence checking.\n\n```python\nfrom aigverse import equivalence_checking\n\n# Perform equivalence checking\nequiv = equivalence_checking(aig1, aig2)\n\nif equiv:\n print(\"AIGs are equivalent!\")\nelse:\n print(\"AIGs are NOT equivalent!\")\n```\n\n### \ud83d\udcc4 File Format Support\n\nYou can read and write AIGs in various file formats, including (ASCII) [AIGER](https://fmv.jku.at/aiger/), gate-level\nVerilog and PLA.\n\n#### \u270f\ufe0f Writing\n\n```python\nfrom aigverse import write_aiger, write_verilog, write_dot\n\n# Write an AIG network to an AIGER file\nwrite_aiger(aig, \"example.aig\")\n# Write an AIG network to a Verilog file\nwrite_verilog(aig, \"example.v\")\n# Write an AIG network to a DOT file\nwrite_dot(aig, \"example.dot\")\n```\n\n#### \ud83d\udc53 Parsing\n\n```python\nfrom aigverse import (\n read_aiger_into_aig,\n read_ascii_aiger_into_aig,\n read_verilog_into_aig,\n read_pla_into_aig,\n)\n\n# Read AIGER files into AIG networks\naig1 = read_aiger_into_aig(\"example.aig\")\naig2 = read_ascii_aiger_into_aig(\"example.aag\")\n# Read a Verilog file into an AIG network\naig3 = read_verilog_into_aig(\"example.v\")\n# Read a PLA file into an AIG network\naig4 = read_pla_into_aig(\"example.pla\")\n```\n\nAdditionally, you can read AIGER files into sequential AIGs using `read_aiger_into_sequential_aig` and\n`read_ascii_aiger_into_sequential_aig`.\n\n### \ud83e\udd52 `pickle` Support\n\nAIGs support Python's `pickle` protocol, allowing you to serialize and deserialize AIG objects for persistent storage or\ninterface with data science or machine learning workflows.\n\n```python\nimport pickle\n\nwith open(\"aig.pkl\", \"wb\") as f:\n pickle.dump(aig, f)\n\nwith open(\"aig.pkl\", \"rb\") as f:\n unpickled_aig = pickle.load(f)\n```\n\nYou can also pickle multiple AIGs at once by storing them in a tuple or list.\n\n### \ud83e\udde0 Machine Learning Integration\n\nWith the `adapters` extra, you can convert an AIG to a [NetworkX](https://networkx.org/) directed graph, enabling\nvisualization and use with graph-based ML tools:\n\n```python\nimport aigverse.adapters\n\nG = aig.to_networkx(levels=True, fanouts=True, node_tts=True)\n```\n\nGraph, node, and edge attributes provide logic, level, fanout, and function information for downstream ML or\nvisualization tasks.\n\nFor more details and examples, see the\n[machine learning integration documentation](https://aigverse.readthedocs.io/en/latest/machine_learning.html).\n\n### \ud83d\udd22 Truth Tables\n\nSmall Boolean functions can be efficiently represented using truth tables. `aigverse` enables the creation and\nmanipulation of truth tables by wrapping a portion of the [kitty](https://github.com/msoeken/kitty) library.\n\n#### \ud83c\udf89 Creation\n\n```python\nfrom aigverse import TruthTable\n\n# Initialize a truth table with 3 variables\ntt = TruthTable(3)\n# Create a truth table from a hex string representing the MAJ function\ntt.create_from_hex_string(\"e8\")\n```\n\n#### \ud83d\udd27 Manipulation\n\n```python\n# Flip each bit in the truth table\nfor i in range(tt.num_bits()):\n print(f\"Flipping bit {int(tt.get_bit(i))}\")\n tt.flip_bit(i)\n\n# Print a binary string representation of the truth table\nprint(tt.to_binary())\n\n# Clear the truth table\ntt.clear()\n\n# Check if the truth table is constant 0\nprint(tt.is_const0())\n```\n\n#### \ud83d\udd23 Symbolic Simulation of AIGs\n\n```python\nfrom aigverse import simulate, simulate_nodes\n\n# Obtain the truth table of each AIG output\ntts = simulate(aig)\n\n# Print the truth tables\nfor i, tt in enumerate(tts):\n print(f\"PO{i}: {tt.to_binary()}\")\n\n# Obtain the truth tables of each node in the AIG\nn_to_tt = simulate_nodes(aig)\n\n# Print the truth tables of each node\nfor node, tt in n_to_tt.items():\n print(f\"Node {node}: {tt.to_binary()}\")\n```\n\n#### \ud83d\udcc3 Exporting as Lists or NumPy Arrays\n\nFor machine learning applications, it is often useful to convert truth tables into standard data structures like Python\nlists or NumPy arrays. Since `TruthTable` objects are iterable, conversion is straightforward.\n\n```python\nimport numpy as np\n\n# Export to a list\ntt_list = list(tt)\n\n# Export to NumPy arrays\ntt_np_bool = np.array(tt)\ntt_np_int = np.array(tt, dtype=np.int32)\ntt_np_float = np.array(tt, dtype=np.float64)\n```\n\n#### \ud83e\udd52 `pickle` Support\n\nTruth tables also support Python's `pickle` protocol, allowing you to serialize and deserialize them.\n\n```python\nimport pickle\n\nwith open(\"tt.pkl\", \"wb\") as f:\n pickle.dump(tt, f)\n\nwith open(\"tt.pkl\", \"rb\") as f:\n unpickled_tt = pickle.load(f)\n```\n\n## \ud83d\ude4c Contributing\n\nContributions are welcome! If you'd like to contribute to `aigverse`, please see the\n[contribution guide](https://aigverse.readthedocs.io/en/latest/contributing.html). I appreciate feedback and suggestions\nfor improving the library.\n\n## \ud83d\udcbc Support and Consulting\n\n`aigverse` is and will always be a free, open-source library. If you or your organization require dedicated support,\nspecific new features, or integration of `aigverse` into your projects, professional consulting services are available.\nThis is a great way to get the features you need while also supporting the ongoing maintenance and development of the\nlibrary.\n\nFor inquiries, please reach out to [@marcelwa](https://github.com/marcelwa/). More information can be found in the\n[documentation](https://aigverse.readthedocs.io/en/latest/support.html).\n\n## \ud83d\udcdc License\n\n`aigverse` is available under the MIT License.\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2025 Marcel Walter\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n ",
"summary": "A Python library for working with logic networks, synthesis, and optimization.",
"version": "0.0.24",
"project_urls": {
"Documentation": "https://aigverse.readthedocs.io/en/latest/",
"Source": "https://github.com/marcelwa/aigverse",
"Tracker": "https://github.com/marcelwa/aigverse/issues"
},
"split_keywords": [
"aigverse",
" logic",
" synthesis",
" aig",
" eda",
" optimization",
" machine learning",
" artificial intelligence"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3749508700a9985d1ca0971ecae2ce4d621be5337807fd24092488cff8e54e1f",
"md5": "e5a9835a6120714130f50bfe98e2931a",
"sha256": "01f98cd53f8cbdea5cd4d78f1d8f8e9d7f0ee5526507d15292790e668249e777"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "e5a9835a6120714130f50bfe98e2931a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 561611,
"upload_time": "2025-09-03T12:23:32",
"upload_time_iso_8601": "2025-09-03T12:23:32.609999Z",
"url": "https://files.pythonhosted.org/packages/37/49/508700a9985d1ca0971ecae2ce4d621be5337807fd24092488cff8e54e1f/aigverse-0.0.24-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6dea14c8327f86acb5bf77a5fd3d0915d0265374af74c093d51baf3b027f1930",
"md5": "e37e592d0778d24414fab4c8cfaa500d",
"sha256": "17a519d0b33a52a672ae596e5f573bb9705f9c90645df317bc2e2c952aac9c53"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp310-cp310-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "e37e592d0778d24414fab4c8cfaa500d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 670067,
"upload_time": "2025-09-03T12:23:34",
"upload_time_iso_8601": "2025-09-03T12:23:34.490796Z",
"url": "https://files.pythonhosted.org/packages/6d/ea/14c8327f86acb5bf77a5fd3d0915d0265374af74c093d51baf3b027f1930/aigverse-0.0.24-cp310-cp310-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4f6f205b641b13af86bb6991895ef47419b2722604c3e1d73acd958a14545e58",
"md5": "7c04c0ad0d493d2c59ca67aeec6f8787",
"sha256": "289e7e6d606b428450099e8d92bd76c712fbdbc7bef9e592a311922289b2662d"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "7c04c0ad0d493d2c59ca67aeec6f8787",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 645193,
"upload_time": "2025-09-03T12:23:35",
"upload_time_iso_8601": "2025-09-03T12:23:35.635638Z",
"url": "https://files.pythonhosted.org/packages/4f/6f/205b641b13af86bb6991895ef47419b2722604c3e1d73acd958a14545e58/aigverse-0.0.24-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "82ae5860e546bd52d0c80ca303e0f309f0942b536afab60ce154ba8577771180",
"md5": "38ef9dc81940f60ec87d1da1a1becad5",
"sha256": "5efb03350655fb335a7af70260c253f1e0c8b5616317551424585b9cbe1cf399"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "38ef9dc81940f60ec87d1da1a1becad5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 705327,
"upload_time": "2025-09-03T12:23:37",
"upload_time_iso_8601": "2025-09-03T12:23:37.284322Z",
"url": "https://files.pythonhosted.org/packages/82/ae/5860e546bd52d0c80ca303e0f309f0942b536afab60ce154ba8577771180/aigverse-0.0.24-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "57229ab6b0e5c78ae80f55980f32ce62bb823b9ece20de9cea05f436636ecc06",
"md5": "106ccbbbba95ce24c5e2606658735fa7",
"sha256": "0037e8327d887d7706594cdee7b7f858f3389cb2d77c635cb7290a9ce298dcb5"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "106ccbbbba95ce24c5e2606658735fa7",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 548025,
"upload_time": "2025-09-03T12:23:38",
"upload_time_iso_8601": "2025-09-03T12:23:38.525662Z",
"url": "https://files.pythonhosted.org/packages/57/22/9ab6b0e5c78ae80f55980f32ce62bb823b9ece20de9cea05f436636ecc06/aigverse-0.0.24-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cd8a0f57ce02e263714c334cfa4a3c28548aa42fb30626d04ad6828993ff9a1b",
"md5": "1dfa7ce514984fa0a0f5b2cedd19a389",
"sha256": "e4f2cf61d8a4b6d8d8c92bbcc9e79bdf9b47e547da61f6f57e9600237e93f3dc"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1dfa7ce514984fa0a0f5b2cedd19a389",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 562551,
"upload_time": "2025-09-03T12:23:40",
"upload_time_iso_8601": "2025-09-03T12:23:40.281215Z",
"url": "https://files.pythonhosted.org/packages/cd/8a/0f57ce02e263714c334cfa4a3c28548aa42fb30626d04ad6828993ff9a1b/aigverse-0.0.24-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8e84b75688e7ebb0a24642d0f11596ce71fd2063df5c32a644cfdc0f9b3e48c6",
"md5": "12789211af1b6be2d06010e134dd2b87",
"sha256": "93aa9e9d2f90caa9861c70da5d9c940154c6d73a1844cac24766614b32ea8310"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp311-cp311-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "12789211af1b6be2d06010e134dd2b87",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 671344,
"upload_time": "2025-09-03T12:23:42",
"upload_time_iso_8601": "2025-09-03T12:23:42.014697Z",
"url": "https://files.pythonhosted.org/packages/8e/84/b75688e7ebb0a24642d0f11596ce71fd2063df5c32a644cfdc0f9b3e48c6/aigverse-0.0.24-cp311-cp311-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ddf4107e6f0262ed74bd7dbdca6db606f08986c7ff21d2b2450c0a5e962a959f",
"md5": "c5f77ff02d70a0cccb5f3615b10545f3",
"sha256": "a7d83e6a28549ccda22408d938be5d6e656037455e78246389f172cd12747b52"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "c5f77ff02d70a0cccb5f3615b10545f3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 646541,
"upload_time": "2025-09-03T12:23:43",
"upload_time_iso_8601": "2025-09-03T12:23:43.171882Z",
"url": "https://files.pythonhosted.org/packages/dd/f4/107e6f0262ed74bd7dbdca6db606f08986c7ff21d2b2450c0a5e962a959f/aigverse-0.0.24-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "556b99b05d51a3de733d6884b8c8f7c0c36587cbfe447eefd6912e18ae7aac75",
"md5": "a558a132dc9ca2bae62d4897ebaabef6",
"sha256": "9087b110032c2213d490472e02d38286552a57f48fe5bb3f86cde17109b7adea"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "a558a132dc9ca2bae62d4897ebaabef6",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 706911,
"upload_time": "2025-09-03T12:23:44",
"upload_time_iso_8601": "2025-09-03T12:23:44.307531Z",
"url": "https://files.pythonhosted.org/packages/55/6b/99b05d51a3de733d6884b8c8f7c0c36587cbfe447eefd6912e18ae7aac75/aigverse-0.0.24-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2a881b631205b2e21eb15af0d5875adad6a7fdab034154cc2e62e4ba51df7077",
"md5": "603630e3fc492370b4fee84ba49f3b8b",
"sha256": "4a5ddf65e47f6014dcef04a98db43fcce8bb48cbfe1395a124fce362b5515254"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "603630e3fc492370b4fee84ba49f3b8b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 549078,
"upload_time": "2025-09-03T12:23:45",
"upload_time_iso_8601": "2025-09-03T12:23:45.594519Z",
"url": "https://files.pythonhosted.org/packages/2a/88/1b631205b2e21eb15af0d5875adad6a7fdab034154cc2e62e4ba51df7077/aigverse-0.0.24-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0a9d61ea8dda5819991e21e1f72c604c5c69dc9282d1b01eb51191b0df21541d",
"md5": "20ded8ad7dede7c2a00a290ebba9e5d8",
"sha256": "ff25c73172f60e8b81785c4fe144ef630231641b14adc228de1b7ea1cbca4d71"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "20ded8ad7dede7c2a00a290ebba9e5d8",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 564830,
"upload_time": "2025-09-03T12:23:46",
"upload_time_iso_8601": "2025-09-03T12:23:46.929779Z",
"url": "https://files.pythonhosted.org/packages/0a/9d/61ea8dda5819991e21e1f72c604c5c69dc9282d1b01eb51191b0df21541d/aigverse-0.0.24-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "74fe9693103548cfc6bb5970d5cea78a9ffb021d4936d580aa459085dfbcbba7",
"md5": "520de5cf05f2dfa1ffc0fe79a1f4c2fc",
"sha256": "b459c145b0a3ad3be69541fe104084420b8e31104c025fd67b3f5cf532742fb5"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp312-cp312-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "520de5cf05f2dfa1ffc0fe79a1f4c2fc",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 680019,
"upload_time": "2025-09-03T12:23:48",
"upload_time_iso_8601": "2025-09-03T12:23:48.155843Z",
"url": "https://files.pythonhosted.org/packages/74/fe/9693103548cfc6bb5970d5cea78a9ffb021d4936d580aa459085dfbcbba7/aigverse-0.0.24-cp312-cp312-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9bcc53dabce4cbb118c2f3e63d28de1f00c5b8666826d1b1c2623e2ef7190b57",
"md5": "5c229662c5e82dfb32bc85facb12a726",
"sha256": "06dcc6502df416289de471da020a9e805fb7db1291539a907dd1331e853fcce8"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "5c229662c5e82dfb32bc85facb12a726",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 647260,
"upload_time": "2025-09-03T12:23:49",
"upload_time_iso_8601": "2025-09-03T12:23:49.651532Z",
"url": "https://files.pythonhosted.org/packages/9b/cc/53dabce4cbb118c2f3e63d28de1f00c5b8666826d1b1c2623e2ef7190b57/aigverse-0.0.24-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b1a44c71c79a96b1849ef9a3ddf5b531a59776f8e08e72d4e7f19b7259bf614a",
"md5": "d582c19216c6eccec9bf36dba5a4c316",
"sha256": "1efdba4d0e261cdafc4e0b2a4359d1989b2813f43b71215493065a0d8ceabf39"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "d582c19216c6eccec9bf36dba5a4c316",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 709993,
"upload_time": "2025-09-03T12:23:51",
"upload_time_iso_8601": "2025-09-03T12:23:51.319588Z",
"url": "https://files.pythonhosted.org/packages/b1/a4/4c71c79a96b1849ef9a3ddf5b531a59776f8e08e72d4e7f19b7259bf614a/aigverse-0.0.24-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f0baf44a16157f71b3c0f9160563c92b3de744b0929dc3bb47fa7217b4850e94",
"md5": "a9b636a7d41a97ecad388abc1ef926a7",
"sha256": "00b2582e30e7e71f486304139245ea47376f71f64c73cbc27ade2336e801c3fe"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "a9b636a7d41a97ecad388abc1ef926a7",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 551140,
"upload_time": "2025-09-03T12:23:53",
"upload_time_iso_8601": "2025-09-03T12:23:53.357307Z",
"url": "https://files.pythonhosted.org/packages/f0/ba/f44a16157f71b3c0f9160563c92b3de744b0929dc3bb47fa7217b4850e94/aigverse-0.0.24-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "54667e16fb56d0d16c2d63e247bb4f28f44a29cb0112ed599b40748f3b6f7cd5",
"md5": "3ae468ffbbeaefa82675a5a7d7141bbe",
"sha256": "fa9484bb6704959d8c85efb829ff192a894fb03d9674848bff81f521cac2fd30"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "3ae468ffbbeaefa82675a5a7d7141bbe",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 564821,
"upload_time": "2025-09-03T12:23:54",
"upload_time_iso_8601": "2025-09-03T12:23:54.545930Z",
"url": "https://files.pythonhosted.org/packages/54/66/7e16fb56d0d16c2d63e247bb4f28f44a29cb0112ed599b40748f3b6f7cd5/aigverse-0.0.24-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1f45db5f8298358351b12c70a7d16526dd4335246c074744ef26473d856d3881",
"md5": "8f64fec0de8e42b30533445e6c337f68",
"sha256": "869da848ccf422f7521102a73fa9114e9e1a99b7557a8208e4e37decc5534c75"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "8f64fec0de8e42b30533445e6c337f68",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 679971,
"upload_time": "2025-09-03T12:23:55",
"upload_time_iso_8601": "2025-09-03T12:23:55.690510Z",
"url": "https://files.pythonhosted.org/packages/1f/45/db5f8298358351b12c70a7d16526dd4335246c074744ef26473d856d3881/aigverse-0.0.24-cp313-cp313-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5e42a1f6323ab248752380074280f550abf03f55cc36395282be5a2b364df7b5",
"md5": "13c1334e7d0f8d8df37fb95fc65ebb90",
"sha256": "2c9d92c6f9e25bc2798863d845c28e3710d66ea089d01ced7bf25343b5fabc76"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "13c1334e7d0f8d8df37fb95fc65ebb90",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 647175,
"upload_time": "2025-09-03T12:23:56",
"upload_time_iso_8601": "2025-09-03T12:23:56.814322Z",
"url": "https://files.pythonhosted.org/packages/5e/42/a1f6323ab248752380074280f550abf03f55cc36395282be5a2b364df7b5/aigverse-0.0.24-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4673f0972373e8031cc51dfb215942a9331d9be6fc91f76bc8767da695a8a295",
"md5": "37b48c0110672c0897607e4f290aebec",
"sha256": "27bfe259b30da69eb20664e9643719c8a40ad7cdf172bf867686df720f15b56b"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "37b48c0110672c0897607e4f290aebec",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 710175,
"upload_time": "2025-09-03T12:23:57",
"upload_time_iso_8601": "2025-09-03T12:23:57.910684Z",
"url": "https://files.pythonhosted.org/packages/46/73/f0972373e8031cc51dfb215942a9331d9be6fc91f76bc8767da695a8a295/aigverse-0.0.24-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6002d137c2ec0df67590a969f6fc434563b04f8a16fdda31f0bff2ddb976f56a",
"md5": "6a8724d4cfa20b0181a497523cc3a183",
"sha256": "9cc8829cfdce4e34d2d1f73c3ca5ccbe5821c573b4f7fdd1ba9d2f09b92cca68"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313t-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "6a8724d4cfa20b0181a497523cc3a183",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 586794,
"upload_time": "2025-09-03T12:24:01",
"upload_time_iso_8601": "2025-09-03T12:24:01.358452Z",
"url": "https://files.pythonhosted.org/packages/60/02/d137c2ec0df67590a969f6fc434563b04f8a16fdda31f0bff2ddb976f56a/aigverse-0.0.24-cp313-cp313t-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a9724572987541a2445520bcec395e234264225b4b1d849498af4ba04f3436f0",
"md5": "d3ae06df3662ee7d845b3bbff0d9b0b7",
"sha256": "bf21a09de4442f61d8d22565dfa28e9ef14845d67347e9e851734af8affeba60"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313t-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "d3ae06df3662ee7d845b3bbff0d9b0b7",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 698767,
"upload_time": "2025-09-03T12:24:02",
"upload_time_iso_8601": "2025-09-03T12:24:02.795280Z",
"url": "https://files.pythonhosted.org/packages/a9/72/4572987541a2445520bcec395e234264225b4b1d849498af4ba04f3436f0/aigverse-0.0.24-cp313-cp313t-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "371021e7c6a4c4ead7962d40e2b662dc1f3e4da43905e1aab666a5fc537819d1",
"md5": "aa291abd2dd0185ece980578de7837c0",
"sha256": "2b3681250a256269860dc598f77ee0c9531b685ea95401c15396c8550ca1efe6"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "aa291abd2dd0185ece980578de7837c0",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 650922,
"upload_time": "2025-09-03T12:24:04",
"upload_time_iso_8601": "2025-09-03T12:24:04.433505Z",
"url": "https://files.pythonhosted.org/packages/37/10/21e7c6a4c4ead7962d40e2b662dc1f3e4da43905e1aab666a5fc537819d1/aigverse-0.0.24-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f99bbd19ad02cc95c633eafb87d70ab0fb7eaa778e23c887e9cb583299660449",
"md5": "6e5d93a820175aed5655d7a384211039",
"sha256": "b8ab9625259a29b6a48169a9404ca9fef67df58c4534c076f3e3491205bc4342"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "6e5d93a820175aed5655d7a384211039",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 713383,
"upload_time": "2025-09-03T12:24:06",
"upload_time_iso_8601": "2025-09-03T12:24:06.100085Z",
"url": "https://files.pythonhosted.org/packages/f9/9b/bd19ad02cc95c633eafb87d70ab0fb7eaa778e23c887e9cb583299660449/aigverse-0.0.24-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "98c5f718a75092bb39e9bd2521293f706065915b5cc9909c8432b1e1f120d1b7",
"md5": "d10d7077e6dc1e190d7307980d1f5df6",
"sha256": "43233fecad32dc7190d96c0d98db5252675990fe0d211c38728b0292e5d0d24b"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313t-win_amd64.whl",
"has_sig": false,
"md5_digest": "d10d7077e6dc1e190d7307980d1f5df6",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 572369,
"upload_time": "2025-09-03T12:24:07",
"upload_time_iso_8601": "2025-09-03T12:24:07.583506Z",
"url": "https://files.pythonhosted.org/packages/98/c5/f718a75092bb39e9bd2521293f706065915b5cc9909c8432b1e1f120d1b7/aigverse-0.0.24-cp313-cp313t-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dc58eb78657aaa61ce181bdabe1239927f061a478b00c44b5318caa88c6e379a",
"md5": "9711a95da7c7f6c67189ee61af422b45",
"sha256": "71341da2cfee4e6fcee28957bfa6d244e198faa3c5006919d0ee55b40cb78923"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "9711a95da7c7f6c67189ee61af422b45",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 551084,
"upload_time": "2025-09-03T12:24:00",
"upload_time_iso_8601": "2025-09-03T12:24:00.212743Z",
"url": "https://files.pythonhosted.org/packages/dc/58/eb78657aaa61ce181bdabe1239927f061a478b00c44b5318caa88c6e379a/aigverse-0.0.24-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ab94832a560727e737c909ab2d027c54acede0d1ddebc3188eea119afc134c1e",
"md5": "7bd1a3aba461acda5965e86aa9b208d6",
"sha256": "6b09ecc847f0f926cedd302b04959f011bd3d237f40159d70562830950fee874"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "7bd1a3aba461acda5965e86aa9b208d6",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 565576,
"upload_time": "2025-09-03T12:24:08",
"upload_time_iso_8601": "2025-09-03T12:24:08.653176Z",
"url": "https://files.pythonhosted.org/packages/ab/94/832a560727e737c909ab2d027c54acede0d1ddebc3188eea119afc134c1e/aigverse-0.0.24-cp314-cp314-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fe3f8349850bee9356fc7c0f24859f9bfde9f3b623434e32ce034b5b73c64381",
"md5": "2acc269520c2cbb383fbd4cefdfa31af",
"sha256": "371941817bd95630372cfc65b6d53d096364f6e70eb703fb9413ada2f2bced4e"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "2acc269520c2cbb383fbd4cefdfa31af",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 679969,
"upload_time": "2025-09-03T12:24:09",
"upload_time_iso_8601": "2025-09-03T12:24:09.740756Z",
"url": "https://files.pythonhosted.org/packages/fe/3f/8349850bee9356fc7c0f24859f9bfde9f3b623434e32ce034b5b73c64381/aigverse-0.0.24-cp314-cp314-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "061841513fb9149dd62d42cd4c9ff969a3c2d704582321069347edaf2c9f359e",
"md5": "f6929be50239ae0513041465dda3f659",
"sha256": "97fcda19f8964f403180a580b81235f93ac9375d8aee6c14c2b2f0ea2d7e9265"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "f6929be50239ae0513041465dda3f659",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 648587,
"upload_time": "2025-09-03T12:24:10",
"upload_time_iso_8601": "2025-09-03T12:24:10.801708Z",
"url": "https://files.pythonhosted.org/packages/06/18/41513fb9149dd62d42cd4c9ff969a3c2d704582321069347edaf2c9f359e/aigverse-0.0.24-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3e072951965a2bf1186e1975d548c4d7caef92645f85a55d9f5715e89f0955ce",
"md5": "acb262b06a6b1b57f38a481dfc10d9a9",
"sha256": "d6295414feb48e7171b264ac334f6aeb2beebcf51a86c766d2369abca1079c71"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "acb262b06a6b1b57f38a481dfc10d9a9",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 710250,
"upload_time": "2025-09-03T12:24:11",
"upload_time_iso_8601": "2025-09-03T12:24:11.938940Z",
"url": "https://files.pythonhosted.org/packages/3e/07/2951965a2bf1186e1975d548c4d7caef92645f85a55d9f5715e89f0955ce/aigverse-0.0.24-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f42549fedd552848dacbf356acbec0f5b9c234c5df437b373383728fa5bcdb71",
"md5": "e496e0ac406d7bddd810c2c7933b22c1",
"sha256": "76cc9fc1f06dda5b8e6ac314bcd6955db43299a0be5594120e5541285d1a30b0"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314t-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "e496e0ac406d7bddd810c2c7933b22c1",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 586805,
"upload_time": "2025-09-03T12:24:14",
"upload_time_iso_8601": "2025-09-03T12:24:14.814355Z",
"url": "https://files.pythonhosted.org/packages/f4/25/49fedd552848dacbf356acbec0f5b9c234c5df437b373383728fa5bcdb71/aigverse-0.0.24-cp314-cp314t-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b850f5a07e9f34cf7880678cfee5e33673e2fe7a6e8b3a0667ba4cfea2086a3c",
"md5": "9b84150aa94751c59be68fdad8226078",
"sha256": "5af9ed16e9e0660dbb361964b732e6ccfd67f0622e13718fe1d22863fd27f5ba"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314t-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "9b84150aa94751c59be68fdad8226078",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 698783,
"upload_time": "2025-09-03T12:24:16",
"upload_time_iso_8601": "2025-09-03T12:24:16.535973Z",
"url": "https://files.pythonhosted.org/packages/b8/50/f5a07e9f34cf7880678cfee5e33673e2fe7a6e8b3a0667ba4cfea2086a3c/aigverse-0.0.24-cp314-cp314t-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b6607d0ed893e55d225e1463398f1c20f01322512be04c3b80f43fff92c6e6af",
"md5": "3e0d8ba8c610ab865ce8fb48ada30071",
"sha256": "5a725862b1ad7e2f6d53affe6d3b0f75943d880a5351153e50faee237becad5f"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "3e0d8ba8c610ab865ce8fb48ada30071",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 650920,
"upload_time": "2025-09-03T12:24:18",
"upload_time_iso_8601": "2025-09-03T12:24:18.199967Z",
"url": "https://files.pythonhosted.org/packages/b6/60/7d0ed893e55d225e1463398f1c20f01322512be04c3b80f43fff92c6e6af/aigverse-0.0.24-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eea14bc7f9bba5203cbc5780677092d06ae131ce99b8422fbcefeaded24c87c5",
"md5": "d0e7a065cd3220275d82a8533cc49818",
"sha256": "5fac508f29c84cead8ebd33d763a754b3bd902ae5c80fb757452f500e0cd6233"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "d0e7a065cd3220275d82a8533cc49818",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 713381,
"upload_time": "2025-09-03T12:24:20",
"upload_time_iso_8601": "2025-09-03T12:24:20.712359Z",
"url": "https://files.pythonhosted.org/packages/ee/a1/4bc7f9bba5203cbc5780677092d06ae131ce99b8422fbcefeaded24c87c5/aigverse-0.0.24-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "65a6baf909f5a687d820e25a9876f09b54bab3fd3e1e32a37096886a23b250dd",
"md5": "272b8622f08fab08f9e9b0eea1d88662",
"sha256": "64c2b81f819d7d9eeb6105357c36d8ab4f685712f0837eb5b8d3a654d5fef4f1"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314t-win_amd64.whl",
"has_sig": false,
"md5_digest": "272b8622f08fab08f9e9b0eea1d88662",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 596337,
"upload_time": "2025-09-03T12:24:22",
"upload_time_iso_8601": "2025-09-03T12:24:22.425312Z",
"url": "https://files.pythonhosted.org/packages/65/a6/baf909f5a687d820e25a9876f09b54bab3fd3e1e32a37096886a23b250dd/aigverse-0.0.24-cp314-cp314t-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "32d58f2d0d5548f7494648ea090d6a4cf5ecedf770a470bb93eb0712c23d47f7",
"md5": "cfba9a30392e2f3d3ba555254ccba6ba",
"sha256": "4e6329ab28f85f57be16d5f01ed088623645abf2e067087ecd8e5fd3b737504e"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp314-cp314-win_amd64.whl",
"has_sig": false,
"md5_digest": "cfba9a30392e2f3d3ba555254ccba6ba",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 567594,
"upload_time": "2025-09-03T12:24:13",
"upload_time_iso_8601": "2025-09-03T12:24:13.170714Z",
"url": "https://files.pythonhosted.org/packages/32/d5/8f2d0d5548f7494648ea090d6a4cf5ecedf770a470bb93eb0712c23d47f7/aigverse-0.0.24-cp314-cp314-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2779ed1b52f717a7340ec5998dea85d6b4fc7c7dbcba8d077fbb4dc034cc0d17",
"md5": "90ad9b87fe3800fd25d5ebd3a5c64d8a",
"sha256": "54592988c2fbe85e09876af711856c3d15afb00a3a865c34947f0a03c789aab8"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "90ad9b87fe3800fd25d5ebd3a5c64d8a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 561689,
"upload_time": "2025-09-03T12:24:24",
"upload_time_iso_8601": "2025-09-03T12:24:24.642553Z",
"url": "https://files.pythonhosted.org/packages/27/79/ed1b52f717a7340ec5998dea85d6b4fc7c7dbcba8d077fbb4dc034cc0d17/aigverse-0.0.24-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1354a765e28e5eef3bc0f656a55404520151a453e6ed04bc9b334794443fed1c",
"md5": "dd99cd4dd2974a046312096efed093f2",
"sha256": "8c35fd9c49af5d0e9deb35a1749dd26af2abb81e3b48499270ca6cbb375fbb1b"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp39-cp39-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "dd99cd4dd2974a046312096efed093f2",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 670059,
"upload_time": "2025-09-03T12:24:25",
"upload_time_iso_8601": "2025-09-03T12:24:25.793548Z",
"url": "https://files.pythonhosted.org/packages/13/54/a765e28e5eef3bc0f656a55404520151a453e6ed04bc9b334794443fed1c/aigverse-0.0.24-cp39-cp39-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f81b3f0db44e68b0e22a79a440ea70f6389ea2d0f00e27f48a54fd41b4a50d0b",
"md5": "488a75b1a38e0768a2e9dbbd56c693fe",
"sha256": "943b53297ee5a442794eab9fc7ab6cddb42397d603a3fe3de4d6045631f9908a"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "488a75b1a38e0768a2e9dbbd56c693fe",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 645389,
"upload_time": "2025-09-03T12:24:26",
"upload_time_iso_8601": "2025-09-03T12:24:26.957855Z",
"url": "https://files.pythonhosted.org/packages/f8/1b/3f0db44e68b0e22a79a440ea70f6389ea2d0f00e27f48a54fd41b4a50d0b/aigverse-0.0.24-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c520d7a5b00b453d8e6ffadd12257043db8aadaa9d9135f28b559b8649f409f0",
"md5": "b453f7b738f509f6eb743d2cff5cf233",
"sha256": "f7e774ac41be70c4c1b867446ee37c5a594f10a08099af36797a8e70c7e8beeb"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "b453f7b738f509f6eb743d2cff5cf233",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 706018,
"upload_time": "2025-09-03T12:24:28",
"upload_time_iso_8601": "2025-09-03T12:24:28.349138Z",
"url": "https://files.pythonhosted.org/packages/c5/20/d7a5b00b453d8e6ffadd12257043db8aadaa9d9135f28b559b8649f409f0/aigverse-0.0.24-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0ed6c15df77f0854a7b95793ab2cd22869e4df5d0d844d875c3a57f870f90773",
"md5": "b4fad3c21e5ae0ff757932e3444316d3",
"sha256": "bfe326d07899445575297e36cb30875f726f82e0159a912d4341656c82076ffc"
},
"downloads": -1,
"filename": "aigverse-0.0.24-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "b4fad3c21e5ae0ff757932e3444316d3",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 569433,
"upload_time": "2025-09-03T12:24:30",
"upload_time_iso_8601": "2025-09-03T12:24:30.095231Z",
"url": "https://files.pythonhosted.org/packages/0e/d6/c15df77f0854a7b95793ab2cd22869e4df5d0d844d875c3a57f870f90773/aigverse-0.0.24-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "019cdd81f05ecf7ef0a83ce36fc35c23f10b0e3d79221b1b1d2fe86ae643305b",
"md5": "82227d9507e5d97c71c1d7e50e5ac951",
"sha256": "ac29dd940b710925f338877cb167b407fdbc84252c226126a40d4bd56b8f993f"
},
"downloads": -1,
"filename": "aigverse-0.0.24.tar.gz",
"has_sig": false,
"md5_digest": "82227d9507e5d97c71c1d7e50e5ac951",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 25995733,
"upload_time": "2025-09-03T12:24:31",
"upload_time_iso_8601": "2025-09-03T12:24:31.885685Z",
"url": "https://files.pythonhosted.org/packages/01/9c/dd81f05ecf7ef0a83ce36fc35c23f10b0e3d79221b1b1d2fe86ae643305b/aigverse-0.0.24.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-03 12:24:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "marcelwa",
"github_project": "aigverse",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "aigverse"
}