Changelog¶
All notable changes to this project will be documented in this file.
The format is based on a mixture of Keep a Changelog and Common Changelog. This project adheres to Semantic Versioning, with the exception that minor releases may include breaking changes.
Unreleased¶
Added¶
✨ Expose each ABC command wrapper’s switch translation as
.cmd(...), which builds theabc.Commandthe wrapper would run instead of running it, so a parameterized command reachesrun_scriptandrun_manyas itself rather than as a hand-written switch string (#486) (@marcelwa)👷 Add a
cpp-lintnox session that reproduces the🚨 Clang-Tidycheck locally, running the samecpp-linterinvocation CI runs over the files that differ fromorigin/main(#488) (@marcelwa)✨ Add
run_manyto theaigverse.abcbridge, running one ABC script over many networks in parallel and reporting each failure in place instead of losing the batch to the first bad design (#467) (@marcelwa)
Changed¶
🔧 Drop the global
CMAKE_POSITION_INDEPENDENT_CODEoverride; mockturtle now builds its own archives as position-independent code (#501) (@marcelwa)👷 Run native Linux CI and Read the Docs on Ubuntu 26.04 with the runner’s default compiler (#513) (@marcelwa)
🔧 Stop the extensions from re-exporting the internals of the static libraries they embed (#490) (@marcelwa)
⚡️ Run
examples/abc_recipe_study.py’s sweep as one batch per recipe instead of one ABC call at a time, with a new--jobsflag. Its CSV loses thesecondscolumn, which a concurrent run cannot measure per item (#467) (@marcelwa)⚡️ Release the GIL in the
generatorsbindings, so random and structured network construction overlaps across threads instead of blocking every other worker (#478) (@marcelwa)⚡️ Release the GIL in the
iobindings, so reading networks and writing AIGER overlaps across threads instead of serializing against every other worker (#477, #481) (@marcelwa)
Fixed¶
🐛 Use a NumPy version with Python 3.15 wheels when resolving minimum dependencies (#439) (@marcelwa)
🐛 Hide C++ implementation symbols from Linux extensions while preserving nanobind’s shared exception ABI (#531) (@marcelwa)
📝 Correct the README’s Stable ABI and free-threading claims (#489) (@marcelwa)
🐛 Stop
equivalence_checking,aig_cut_rewriting,balancing, andcleanup_danglingfrom returning silently wrong results when several threads call them on one shared network. Each wrote traversal state into the caller’s network through a mockturtle view while the GIL was released (#483) (@marcelwa)🐛 Look the ABC executable up on
PATHonce perrun_scriptcall instead of twice. The second lookup ran after ABC finished purely to name the binary in an error, so a binary that disappeared mid-run discarded a successful result (#467) (@marcelwa)
0.1.5 - 2026-08-24¶
Added¶
✨ Add
simulate_sequential, which runs aSequentialAigover a number of clock cycles from its reset state and returns the primary output values and the register values per cycle (#458) (@marcelwa)👷 Run
nox -s minimumsin CI across the full platform matrix, so the declared dependency floors are actually installed and tested instead of only claimed (#453) (@marcelwa)✨ Add a
--fullflag to thetestsandminimumsnox sessions that installs every optional dependency group and selects every marker, replacing the implicitCIenvironment check (#453) (@marcelwa)✨ Add an
examples/directory of standalone, PEP 723 scripts that run withuv runand no setup, starting with an ABC recipe study that asks whether one best recipe exists (#410) (@marcelwa)👷 Smoke-run the examples in the ABC workflow, so a library change that breaks one is caught by CI rather than by the next person to run it (#410) (@marcelwa)
✨ Support
SequentialAigin theaigverse.abcbridge, carrying registers through ABC along with their reset values in the classic namespace (#406) (@marcelwa)
Changed¶
👷 Restructure CI into a thin
ci.ymlcaller over one reusable workflow per concern, gated by change detection and aggregated into a single required🚦 Check(#422) (@marcelwa)⚡️ Adopt nanobind 3.0’s split mode, so one
abi3wheel per platform covers every supported Python from 3.10 up instead of three. Cold build time drops 3.15x and the shipped payload 4.3x; the extensions themselves shrink 26% by no longer each carrying their own copy of the nanobind library, which is now the separatenanobind-backendruntime dependency. Free-threaded interpreters are not supported until Python 3.15 brings them a stable ABI (#463) (@marcelwa)⚡️ Build the extension once per wheel tag in the
testsandminimumsnox sessions instead of once per interpreter, so interpreters sharing a tag reuse one wheel rather than each getting a purpose-built one (#456) (@marcelwa)
Fixed¶
🐛 Refuse an AIGER file with latches in
read_aiger_into_aigandread_ascii_aiger_into_aig, which used to segfault or silently drop the registers, and point users at the sequential reader instead (#457) (@marcelwa)👷 Cache Windows compiles.
scikit-build-coredefaults to the Visual Studio generator, which ignoresCMAKE_<LANG>_COMPILER_LAUNCHER, so the compiler cache was configured on Windows and then never invoked – every job rebuilt every translation unit once per interpreter. Windows now builds with Ninja and caches withsccache, whose MSVC support, unlike ccache’s, actually hits (#456) (@marcelwa)🐛 Forward
-hand--helptosphinx-buildin thedocsnox session, which its own argument parser used to intercept (#453) (@marcelwa)🐛 Gate the
numpyandtorchfloors by Python version. Both predate every interpreter in the matrix except 3.10, so resolving them as the lowest direct versions fell back to a NumPy source build that fails and to a PyTorch release with no installable distribution (#453) (@marcelwa)
0.1.4 - 2026-08-19¶
Added¶
Changed¶
🔧 Raise the CMake policy upper bound to 4.4, so the project no longer runs under three-release-old policy defaults on CMake 4.2-4.4 (#447) (@marcelwa)
🔧 Add
Developers,Information Technology, andSoftware Development :: Libraries :: Python Modulestrove classifiers, soaigversesurfaces on PyPI for its non-research audience too (#447) (@marcelwa)🔧 Derive the version from
vcs-versioninginstead ofsetuptools-scm, dropping the transitivesetuptoolsdependency from every wheel build (#447) (@marcelwa)🔧 Drop the no-op submodule checkout steps from
.readthedocs.yamlanddocs/DevelopmentGuide.md; the project has no submodules (#447) (@marcelwa)
Fixed¶
0.1.3 - 2026-08-04¶
Added¶
✨ Add a benchmark loader that fetches and caches the EPFL suite on demand (#409) (@marcelwa)
✨ Emit
llms.txtandllms-full.txtfrom the documentation build, so agents read the docs as markdown instead of scraping HTML (#417) (@marcelwa)📝 Add a visualization page to the documentation (#419) (@marcelwa)
Changed¶
Fixed¶
🐛 Raise
IndexErrorinstead of segfaulting on an out-of-range node ID (#420) (@marcelwa)🐛 Fix the named AIG example in the AIG documentation (#407) (@marcelwa)
👷 Drop the
cp313t-*cibuildwheelskip selector, which matched a group the project never enables and made every wheel job warn (#421) (@marcelwa)
0.1.2 - 2026-07-24¶
Added¶
✨ Add cut enumeration over AIGs (#368) (@wjrforcyber)
✨ Add
to_graph_tensors, which exports an AIG as DLPack sparse tensors for zero-copy interop with PyTorch, JAX, and TensorFlow (#308) (@marcelwa)👷 Add a Zizmor workflow that scans the GitHub Actions workflows and uploads its findings to code scanning (#392) (@marcelwa)
📝 Add
AGENTS.mdandWORKFLOW.mdto steer agentic coding tools (#382) (@marcelwa)📝 Document the gitmoji convention for commit messages and pull request titles (#390) (@marcelwa)
Changed¶
Fixed¶
0.1.1 - 2026-05-18¶
Fixed¶
0.1.0 - 2026-05-09¶
If you are upgrading: please see UPGRADING.md.
Added¶
Changed¶
💥 Split the monolithic package into the
networks,algorithms,io, andutilsextension modules (#285) (@marcelwa)💥 Rework the API to be Pythonic: the optimization passes return a new cleaned
Aigby default and takeinplace, andcleanup_danglingmoves toaigverse.algorithms(#298) (@marcelwa)💥 Make every optimization parameter except the input network keyword-only (#306) (@marcelwa)
♻️ Migrate the bindings from
pybind11tonanobind(#297) (@marcelwa)🔧 Modernize the tooling and adopt the Scientific Python repo review (#314, #335) (@marcelwa)
✅ Restructure the test suite around markers and shared fixtures (#313) (@marcelwa)
📝 Streamline the README and the documentation (#334) (@marcelwa)