DS - A Deductive System
A deductive system for logical inference, implemented in C++. The library provides bindings for Python (via pybind11) and TypeScript/JavaScript (via Emscripten/WebAssembly).
Architecture
- C++ Core: The core implementation in
src/andinclude/ds/provides the fundamental data structures and algorithms - Python Bindings: Built with pybind11, wrapping the C++ core (see
apyds/) - TypeScript/JavaScript Bindings: Built with Emscripten, compiling C++ to WebAssembly (see
atsds/)
Features
- Multi-Language Support: Seamlessly use the same deductive system in C++, Python, or TypeScript/JavaScript.
- WebAssembly Performance: Run high-performance deductive system in the browser or Node.js via Emscripten.
- Rich Logical Terms: Comprehensive support for variables, items, and nested lists.
- Rule-Based Inference: Flexible framework for defining rules and facts to perform complex logical deduction.
- Unification Engine: Powerful built-in mechanisms for term unification and rule matching.
- Automated Search: Built-in search engine for iterative inference.
- Chain Inference: Chain engine that matches all premises of a rule in a single cycle.
Installation
TypeScript/JavaScript (npm)
The TypeScript/JavaScript package wraps the C++ core via WebAssembly.
npm install atsds
The package includes WebAssembly binaries and TypeScript type definitions.
Python (pip)
The Python package wraps the C++ core via pybind11.
pip install apyds
Requires Python 3.11-3.14.
C++ (Core Library)
The C++ library is the core implementation. Both Python and TypeScript bindings are built on top of it.
Using vcpkg
Clone the repository and use the overlay port:
git clone https://github.com/USTC-KnowledgeComputingLab/ds.git
vcpkg install ds --overlay-ports=./ds/ports
Add to your vcpkg.json:
{
"dependencies": ["ds"]
}
In your CMakeLists.txt:
find_package(ds CONFIG REQUIRED)
target_link_libraries(your_target PRIVATE ds::ds)
Building from Source
git clone https://github.com/USTC-KnowledgeComputingLab/ds.git
cd ds
cmake -B build
cmake --build build
Include the headers from include/ds/ in your C++ project.
Quick Start
TypeScript/JavaScript Example
import { Rule, Search } from "atsds";
// Create a search engine
const search = new Search(1000, 10000);
// Modus ponens: P -> Q, P |- Q
search.add("(`P -> `Q) `P `Q");
// Axiom schema 1: p -> (q -> p)
search.add("(`p -> (`q -> `p))");
// Axiom schema 2: (p -> (q -> r)) -> ((p -> q) -> (p -> r))
search.add("((`p -> (`q -> `r)) -> ((`p -> `q) -> (`p -> `r)))");
// Axiom schema 3: (!p -> !q) -> (q -> p)
search.add("(((! `p) -> (! `q)) -> (`q -> `p))");
// Premise: !!X
search.add("(! (! X))");
// Target: X (double negation elimination)
const target = new Rule("X");
// Execute search until target is found
while (true) {
let found = false;
search.execute((candidate) => {
if (candidate.key() === target.key()) {
console.log("Found:", candidate.toString());
found = true;
return true; // Stop search
}
return false; // Continue searching
});
if (found) break;
}
Python Example
import apyds
# Create a search engine
search = apyds.Search(1000, 10000)
# Modus ponens: P -> Q, P |- Q
search.add("(`P -> `Q) `P `Q")
# Axiom schema 1: p -> (q -> p)
search.add("(`p -> (`q -> `p))")
# Axiom schema 2: (p -> (q -> r)) -> ((p -> q) -> (p -> r))
search.add("((`p -> (`q -> `r)) -> ((`p -> `q) -> (`p -> `r)))")
# Axiom schema 3: (!p -> !q) -> (q -> p)
search.add("(((! `p) -> (! `q)) -> (`q -> `p))")
# Premise: !!X
search.add("(! (! X))")
# Target: X (double negation elimination)
target = apyds.Rule("X")
# Execute search until target is found
while True:
found = False
def callback(candidate):
global found
if candidate == target:
print("Found:", candidate)
found = True
return True # Stop search
return False # Continue searching
search.execute(callback)
if found:
break
C++ Example
#include <cstdio>
#include <cstring>
#include <ds/ds.hh>
#include <ds/search.hh>
#include <ds/utility.hh>
int main() {
ds::search_t search(1000, 10000);
// Modus ponens: P -> Q, P |- Q
search.add("(`P -> `Q) `P `Q");
// Axiom schema 1: p -> (q -> p)
search.add("(`p -> (`q -> `p))");
// Axiom schema 2: (p -> (q -> r)) -> ((p -> q) -> (p -> r))
search.add("((`p -> (`q -> `r)) -> ((`p -> `q) -> (`p -> `r)))");
// Axiom schema 3: (!p -> !q) -> (q -> p)
search.add("(((! `p) -> (! `q)) -> (`q -> `p))");
// Premise: !!X
search.add("(! (! X))");
// Target: X (double negation elimination)
auto target = ds::text_to_rule("X", 1000);
// Execute search until target is found
while (true) {
bool found = false;
search.execute([&](ds::rule_t* candidate) {
if (candidate->data_size() == target->data_size() &&
memcmp(candidate->head(), target->head(), candidate->data_size()) == 0) {
printf("Found: %s", ds::rule_to_text(candidate, 1000).get());
found = true;
return true; // Stop search
}
return false; // Continue searching
});
if (found) break;
}
return 0;
}
Core Concepts
Terms
Terms are the basic building blocks of the deductive system:
- Variables: Prefixed with backtick, e.g.,
`X,`P,`Q - Items: Constants or functors, e.g.,
a,father,! - Lists: Ordered sequences enclosed in parentheses, e.g.,
(a b c),(father john mary)
Rules
Rules consist of zero or more premises (above the line) and a conclusion (below the line):
premise1
premise2
----------
conclusion
A fact is a rule without premises:
----------
(parent john mary)
Grounding
Grounding substitutes variables with values using a dictionary:
const a = new Term("`a");
const dict = new Term("((`a b))"); // Substitute `a with b
const result = a.ground(dict);
console.log(result.toString()); // "b"
Matching
Matching unifies the first premise of a rule with a fact to produce a new rule. For example, applying modus ponens to double negation elimination:
// Modus ponens rule: (p -> q), p |- q
const mp = new Rule("(`p -> `q)\n`p\n`q\n");
// Double negation elimination axiom: !!x -> x
const pq = new Rule("((! (! `x)) -> `x)");
// Match produces: !!x |- x
console.log(mp.match(pq).toString()); // "(! (! `x))\n----------\n`x\n"
API Overview
TypeScript/JavaScript
buffer_size(size?: number): Get/set buffer size for internal operationsString_: String wrapper classVariable: Logical variable classItem: Item (constant/functor) classList: List classTerm: General term class (variable, item, or list)Rule: Logical rule classSearch: Search engine for inferenceChain: Chain engine for inference (matches all premises in a single cycle)
Python
buffer_size(size: int): Set buffer sizescoped_buffer_size(size: int): Context manager for temporary buffer sizeString: String wrapper classVariable: Logical variable classItem: Item (constant/functor) classList: List classTerm: General term classRule: Logical rule classSearch: Search engine for inferenceChain: Chain engine for inference (matches all premises in a single cycle)
C++ (Core)
All classes are in the ds namespace:
string_t: String handlingvariable_t: Logical variablesitem_t: Items (constants/functors)list_t: Liststerm_t: General termsrule_t: Logical rulessearch_t: Search engine (in<ds/search.hh>)chain_t: Chain engine (in<ds/chain.hh>)
See header files in include/ds/ for detailed API documentation.
Building from Source
Prerequisites
- For TypeScript: Emscripten SDK
- For Python: Python 3.11-3.14, C++20 compatible compiler, CMake 3.30+
- For C++: C++20 compatible compiler, CMake 3.30+
Build All Components
# Clone repository
git clone https://github.com/USTC-KnowledgeComputingLab/ds.git
cd ds
# Build TypeScript/JavaScript (requires Emscripten)
npm install
npm run build
# Build Python package
uv sync --extra dev
# Build C++ library
cmake -B build
cmake --build build
Running Tests
# TypeScript/JavaScript tests
npm test
# Python tests
uv run pytest
# C++ tests (if available)
cd build && ctest
Examples
Example programs are provided in the examples/ directory:
examples/main.mjs: TypeScript/JavaScript exampleexamples/main.py: Python exampleexamples/main.cc: C++ example
Each example demonstrates logical inference using propositional logic axioms.
Support Packages
- BNF Conversion Library (apyds-bnf, atsds-bnf): Bidirectional conversion between DS syntax formats. See /bnf for details.
- E-Graph Library (apyds-egg, atsds-egg): E-Graph implementation for efficient equality reasoning. See /egg for details.
Development
Code Formatting
The project uses code formatting tools for consistency:
- C++: clang-format (
.clang-formatconfig provided) - Python: ruff (configured in
pyproject.toml) - TypeScript: Biome (configured in
biome.json)
Pre-commit Hooks
Pre-commit hooks are configured in .pre-commit-config.yaml.
License
This project is licensed under the GNU Affero General Public License v3.0 or later. See LICENSE.md for details.
Documentation
For comprehensive documentation including tutorials, API reference, and examples, visit:
Repository
- GitHub: USTC-KnowledgeComputingLab/ds
- Documentation: ustc-knowledgecomputinglab.github.io/ds
- npm package: atsds
- PyPI package: apyds
Author
Hao Zhang hzhangxyz@outlook.com
Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
Metadata
Release files for apyds 0.0.21
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| apyds-0.0.21.tar.gz | 378.1 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| apyds-0.0.21-cp314-cp314t-win_amd64.whl | CPython 3.14 | CPython 3.14 free-threading | Windows x86-64 | Details |
| apyds-0.0.21-cp314-cp314t-musllinux_1_2_x86_64.whl | CPython 3.14 | CPython 3.14 free-threading | Linux musl 1.2+ x86-64 | Details |
| apyds-0.0.21-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.14 | CPython 3.14 free-threading | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| apyds-0.0.21-cp314-cp314t-macosx_10_15_universal2.whl | CPython 3.14 | CPython 3.14 free-threading | macOS 10.15+ universal2 (ARM64, x86-64) | Details |
| apyds-0.0.21-cp314-cp314-win_amd64.whl | CPython 3.14 | CPython 3.14 | Windows x86-64 | Details |
| apyds-0.0.21-cp314-cp314-musllinux_1_2_x86_64.whl | CPython 3.14 | CPython 3.14 | Linux musl 1.2+ x86-64 | Details |
| apyds-0.0.21-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.14 | CPython 3.14 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| apyds-0.0.21-cp314-cp314-macosx_10_15_universal2.whl | CPython 3.14 | CPython 3.14 | macOS 10.15+ universal2 (ARM64, x86-64) | Details |
| apyds-0.0.21-cp313-cp313-win_amd64.whl | CPython 3.13 | CPython 3.13 | Windows x86-64 | Details |
| apyds-0.0.21-cp313-cp313-musllinux_1_2_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux musl 1.2+ x86-64 | Details |
| apyds-0.0.21-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| apyds-0.0.21-cp313-cp313-macosx_10_13_universal2.whl | CPython 3.13 | CPython 3.13 | macOS 10.13+ universal2 (ARM64, x86-64) | Details |
| apyds-0.0.21-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| apyds-0.0.21-cp312-cp312-musllinux_1_2_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux musl 1.2+ x86-64 | Details |
| apyds-0.0.21-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| apyds-0.0.21-cp312-cp312-macosx_10_13_universal2.whl | CPython 3.12 | CPython 3.12 | macOS 10.13+ universal2 (ARM64, x86-64) | Details |
| apyds-0.0.21-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| apyds-0.0.21-cp311-cp311-musllinux_1_2_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux musl 1.2+ x86-64 | Details |
| apyds-0.0.21-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| apyds-0.0.21-cp311-cp311-macosx_10_9_universal2.whl | CPython 3.11 | CPython 3.11 | macOS 10.9+ universal2 (ARM64, x86-64) | Details |
Total release size: 10.0 MB
Release files / apyds-0.0.21.tar.gz
| Download URL | apyds-0.0.21.tar.gz |
|---|---|
| Size | 378.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f40ea6b6e25f92915cd4f2cbf8074ee358e618ea177f5582378168d9d5f49364
|
|
BLAKE2b-256 checksum How to use checksums |
fb0249e8eabd47162f8204c23d9424da4342edea3ac4ce3e39d179ab7d47af14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp314-cp314t-win_amd64.whl
| Download URL | apyds-0.0.21-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 187.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
88d2f0ac67cb51668a742ed363810e63f4b30f3c8e468cb5e14a52a1cff86015
|
|
BLAKE2b-256 checksum How to use checksums |
5fe8ae720c8ab43445463b30524f8ebcb82d34d374e2e1d6fef990d5d1a1d13e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp314-cp314t-musllinux_1_2_x86_64.whl
| Download URL | apyds-0.0.21-cp314-cp314t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
b55bbfd70985483f34a180c33e878afd0977c1d121c4f02e2b0772989b04dc59
|
|
BLAKE2b-256 checksum How to use checksums |
9ab70dbe6de36ddcbc0eca7d39c7ccba160d064d28027046a23c862b9510dbb7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | apyds-0.0.21-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 202.5 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
718b1325c5b95efa324c1ee9477b36bcf2843932676884241c5d6e493f733c83
|
|
BLAKE2b-256 checksum How to use checksums |
68509b3515026de7fbd5a85902a16013e3ae5fb54bbc8b5cdb4d8f69acf1bb00
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp314-cp314t-macosx_10_15_universal2.whl
| Download URL | apyds-0.0.21-cp314-cp314t-macosx_10_15_universal2.whl |
|---|---|
| Size | 328.5 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
e2cf5649469c4e7426d5b01ea0bccca6f45df3eae311ce1d6ed41e712ec777a8
|
|
BLAKE2b-256 checksum How to use checksums |
45de4abe6d3f051dc71c9c4a4033f0e5a40f2f552c4e862a8d32e960e29e9af3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp314-cp314-win_amd64.whl
| Download URL | apyds-0.0.21-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 168.4 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ec316dccd5ecf7ebe82d585f49e11378998af2f6a1d87aca56b6556e5b32b2de
|
|
BLAKE2b-256 checksum How to use checksums |
55c12af980dc20e7b90c494a5d99c20204b9bc46ad3ec61a198442da67985a2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | apyds-0.0.21-cp314-cp314-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
cc61d469b36cc1ef7721f916dccaf898428804010d602036533465fe37fa838a
|
|
BLAKE2b-256 checksum How to use checksums |
a2f4c7741f1789206f08f493469083bda3be84e0884d54299d87382d3b7f6319
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | apyds-0.0.21-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 200.9 kB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
a3e9c6896a91b86538aeb20065d217d1d9b101adeb9da1b101fecd6242dc778b
|
|
BLAKE2b-256 checksum How to use checksums |
6cc758c4a4abc1209ae504176eeffe8c932f454b8c5fce1c431007baa2ab14cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp314-cp314-macosx_10_15_universal2.whl
| Download URL | apyds-0.0.21-cp314-cp314-macosx_10_15_universal2.whl |
|---|---|
| Size | 308.9 kB |
| Tags | CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
d951f4b52a98eca7ed96a8deb733797cc9bf3ad4e07be7d3b634287205c54452
|
|
BLAKE2b-256 checksum How to use checksums |
f652050620b2ac8fed012dab1b19c3238d4785f97e7b679b96259770c8fad874
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp313-cp313-win_amd64.whl
| Download URL | apyds-0.0.21-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 164.6 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
139ec48697923655686cc6a4b604980293b4aa19641b7fce88860730b61f187f
|
|
BLAKE2b-256 checksum How to use checksums |
2cb58275a99b899ed6f43e611e8cccba2ebaf41fcbec67311abfa4aa0d1171e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | apyds-0.0.21-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
cf8daf93efed7c363cc73398665a501c2dd0d53cb62808472cb936ab9faa1347
|
|
BLAKE2b-256 checksum How to use checksums |
47995aefbee4702a0a44d41234ea666a47c45de2172d014a1e1df991b5516af4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | apyds-0.0.21-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 200.7 kB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
0bf18c44f68ae7f13bfc607829eeb00f4d2bcb350ffdd82d4c15e8798d203dcd
|
|
BLAKE2b-256 checksum How to use checksums |
ed117ce6fc0de3e6566e3fb7a0e6fe987ad8658902fe237e0410a43a4bae5332
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp313-cp313-macosx_10_13_universal2.whl
| Download URL | apyds-0.0.21-cp313-cp313-macosx_10_13_universal2.whl |
|---|---|
| Size | 307.6 kB |
| Tags | CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
506f589dcce388d9e8b3cf5b5d69f3b3134fc81ee4f93cb82e5ac40daaf7e88b
|
|
BLAKE2b-256 checksum How to use checksums |
ccb7a554b87f19dbbf29e874a645a7a261e9655c7c313631e56d786187cf1cf9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp312-cp312-win_amd64.whl
| Download URL | apyds-0.0.21-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 164.5 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f6e7e80748726042586356255abffbe8637247540ccbe0c81874ea458346379c
|
|
BLAKE2b-256 checksum How to use checksums |
685326dc090a48867c45d7261275007d00c9793456234753f969f586de714b72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | apyds-0.0.21-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
2a69235a1d0e98c0fb1220f231e7f1b3a01906ae4e2a64ac10ccc087807143ac
|
|
BLAKE2b-256 checksum How to use checksums |
40d4160ff40cd943c8d787a8f56653531ede263b20a7f6ad2a4b1938e71e89a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | apyds-0.0.21-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 200.7 kB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f81dcf68eda161383826d1fee121ea3f1e314ded08f9f09bfefbb4dc688321ea
|
|
BLAKE2b-256 checksum How to use checksums |
7387d5dedf52a374a4aacd2dd2107ee8a7c77bdc2733ac800b6622c4fc8d23d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp312-cp312-macosx_10_13_universal2.whl
| Download URL | apyds-0.0.21-cp312-cp312-macosx_10_13_universal2.whl |
|---|---|
| Size | 307.5 kB |
| Tags | CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
638fcb1ed2bd1f00dbe265fab82cd7c705cbc93e14ec2975d2ff3b0aff24b8f3
|
|
BLAKE2b-256 checksum How to use checksums |
9e9809db7380e86a481ffb86a471919caf3b4c9fc1a8f0c573ad058abe4b35ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp311-cp311-win_amd64.whl
| Download URL | apyds-0.0.21-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 162.6 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b61b43c5b83bf5980453cb094f9594401c7d59b9b019bf13b2ed12178ab720d1
|
|
BLAKE2b-256 checksum How to use checksums |
9ee35842043413a8ff46817bb9f76e8794611338e6d751b7e06d11d999fb599b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | apyds-0.0.21-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
fe1d9403acd5e15654784d3a6e823fe86a969d9d27ab6a8a2ee0ccb00b786d99
|
|
BLAKE2b-256 checksum How to use checksums |
9b6573c1a4284754d2fad4adda01039d21f2614e3af509b8eb6bfade37e644f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | apyds-0.0.21-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 198.4 kB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
68e7e1b1f640a0016b8a936a3b508f9f0455e2060aa150a0d20b144543aeb97b
|
|
BLAKE2b-256 checksum How to use checksums |
89aed039395482d37683196719e2a7235a7d8cbfef45150acdbe4744e39faa78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / apyds-0.0.21-cp311-cp311-macosx_10_9_universal2.whl
| Download URL | apyds-0.0.21-cp311-cp311-macosx_10_9_universal2.whl |
|---|---|
| Size | 306.3 kB |
| Tags | CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
f9570c93e8e2f1fc735b283d4e880ad52ce09734748e9f3cd86afe23b3562b5b
|
|
BLAKE2b-256 checksum How to use checksums |
c295910c82368ed0e0a9f17397825d441689b4a2a8628643d249570ece877ae7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency log