Skip to main content

Density-matrix kernel density estimation for anomaly detection (C++ core).

Project description

libdmkde

A production-grade C++17 implementation of Density-Matrix Kernel Density Estimation for anomaly detection, with a streaming O(1)-per-sample update.

The algorithm is not new — it was introduced by Useche, González, et al. in Phys. Rev. A (2024). What this repository provides is the engineering that has been missing from the published research code: a single-header C++ library, a deterministic benchmark harness, reproducible numbers against a classical baseline, and an MIT-licensed build that a production team can adopt without untangling Jupyter notebooks.

Citation — please cite the original authors

If you use this library in academic work, cite the papers, not this repo:

@article{useche2024quantum,
  author  = {Useche, Diego H. and Gonz{\'a}lez, Fabio A. and others},
  title   = {Quantum density estimation with density matrices:
             Application to quantum anomaly detection},
  journal = {Physical Review A},
  volume  = {109},
  pages   = {032418},
  year    = {2024},
  doi     = {10.1103/PhysRevA.109.032418}
}

@misc{useche2022inqmad,
  author = {Useche, Diego H. and others},
  title  = {INQMAD: Incremental Quantum Measurement Anomaly Detection},
  year   = {2022},
  note   = {arXiv:2210.05061}
}

@misc{gonzalez2022addmkde,
  author = {Gonz{\'a}lez, Fabio A. and others},
  title  = {AD-DMKDE: Anomaly Detection through Density Matrices
            and Fourier Features},
  year   = {2022},
  note   = {arXiv:2210.14796}
}

The reference Python notebooks live at diegour1/QuantumAnomalyDetection, diegour1/QDEMDE, and Joaggi/lean-dmkde. The general probabilistic-DL primitives are at fagonzalezo/kdm.

Algorithm in one paragraph

Each input x ∈ R^d is embedded into R^D using Random Fourier Features (Rahimi & Recht, 2007), which approximates a Gaussian kernel k(x, y) = exp(-‖x - y‖² / 2σ²) as an inner product ⟨φ(x), φ(y)⟩. Training builds the empirical density operator

ρ = (1/N) Σᵢ φ(xᵢ) φ(xᵢ)ᵀ      (D × D, PSD, trace 1)

and the Born-rule score

s(x) = φ(x)ᵀ ρ φ(x)             ∈ [0, 1]

estimates the density of x under the training distribution. Low s ⇒ anomalous. The streaming variant updates ρ via a rank-1 EMA:

ρ ← (1 - α) ρ + α · φ(x) φ(x)ᵀ

with O(D²) time and O(1) extra memory per sample.

Why this exists

The published research code is high-quality but not production-ready: all public implementations are Jupyter notebooks with single-digit star counts, none are on PyPI, none have a stable public API, and none have a streaming update path. As of May 2026:

  • No package on PyPI, conda-forge, crates.io, or npm matches.
  • No major quantum library (Qiskit Machine Learning, PennyLane, TensorFlow Quantum, Cirq) exposes a density-matrix anomaly detector.
  • PyOD's 60+ detectors include nothing density-matrix based.
  • Closed commercial offerings (e.g. Multiverse Singularity) use different algorithm families.

This library closes that gap for the C++ side of the stack.

Build

C++ (header-only)

make           # builds benchmark + tests
make test      # runs the unit tests
make bench     # runs the reproducible benchmark

Requires g++ or clang++ with C++17. No external dependencies.

Python bindings

pip install .            # builds the C++ extension and installs the dmkde package
python python/example.py # runs the end-to-end demo

Requires Python ≥ 3.9, pybind11, and numpy. Build uses setuptools + Pybind11Extension; no system-wide installs needed.

Use

C++

#include "dmkde.hpp"

// 4 input dims, 256-D RFF embedding, Gaussian kernel bandwidth σ = 1.5.
dmkde::DMKDE model(/*input_dim=*/4, /*feature_dim=*/256, /*sigma=*/1.5);

std::vector<std::vector<double>> train = /* normal samples */;
model.fit(train);

double s = model.score(new_point.data());        // higher = more "normal"
model.update(drift_point.data(), /*alpha=*/0.01); // streaming EMA update

Python (sklearn-style)

import numpy as np
from dmkde import DMKDE, Mahalanobis, roc_auc

model = DMKDE(feature_dim=256, sigma=1.5).fit(X_train)
scores = model.score_samples(X_test)             # numpy array of Born-rule scores
auc    = roc_auc(model.score_samples(X_normal),
                 model.score_samples(X_anomaly))

model.partial_fit(X_drift, alpha=0.01)           # streaming EMA update
model.calibrate(X_train, contamination=0.05)
preds = model.predict(X_test)                    # +1 inlier, -1 outlier

Benchmark results

Synthetic 4-D data, 400 training points, 300+300 test, D = 256, σ = 1.5, seed = 42. Mahalanobis is included as a strong linear baseline.

Scenario DMKDE AUC Mahalanobis AUC Verdict
Gaussian normal 1.000 1.000 tied
Bimodal manifold (anomalies in gap) 1.000 0.439 DMKDE +0.56 AUC
Ring manifold (anomalies in hub) 0.836 0.000 DMKDE +0.84 AUC
Streaming (after 200 EMA updates) 1.000 n/a converges

Mahalanobis is mathematically optimal on Gaussian data and ties there. On any data where the "normal" class has higher-order structure (multi-modal, manifold, non-convex) Mahalanobis collapses — on the ring scenario it scores exactly 0.000 AUC because anomalies sit at the empirical mean. DMKDE captures the structure because RFF + density-matrix scoring is a kernelized density estimator, not a Gaussian-fit.

Roadmap

  • pybind11 Python bindings with sklearn-style fit / score_samples
  • PyOD plugin (dmkde.pyod.DMKDEDetector)
  • Qiskit backend (dmkde.qiskit_backend.QiskitDMKDE) — reproduces classical scores to floating-point precision via amplitude encoding + statevector estimator
  • Benchmarks vs sklearn baselines on Kaggle Credit Card Fraud + KDDCup'99 — see BENCHMARKS.md
  • cibuildwheel CI building wheels for Linux + macOS + Windows × CPython 3.9–3.13
  • PyPI release (sdist + multi-platform wheels)
  • Qiskit backend hardware execution (transpile + EstimatorV2 + shot budgeting, run on IBM QPU)
  • Latent variant (LADDM autoencoder pre-stage, arXiv:2408.07623)
  • NSL-KDD + IEEE-CIS Fraud + CICIDS-2018 benchmarks

Benchmarks

See BENCHMARKS.md for full results across five detectors and five scenarios. Headline:

  • KDDCup'99 intrusion — DMKDE wins (ROC 0.9965, PR 0.9807)
  • Ring manifold — DMKDE (0.96) and LOF (0.99) are the only methods that don't collapse to 0.000 AUC
  • Credit Card Fraud — DMKDE 0.95 ROC, behind Mahalanobis (0.96) because V1–V28 are PCA-pretreated to be approximately Gaussian

Qiskit backend

The score ⟨φ(x)|ρ|φ(x)⟩ is the expectation value of ρ in the state |φ(x)⟩ — an actual quantum observable on a quantum state. The optional Qiskit backend amplitude-encodes φ(x) on ⌈log₂ D⌉ qubits and evaluates the same expectation via qiskit.quantum_info.Statevector:

from dmkde import DMKDE
from dmkde.qiskit_backend import QiskitDMKDE

model  = DMKDE(feature_dim=16, sigma=1.5).fit(X_train)  # D = 2^4
qmodel = QiskitDMKDE(model)
q_score = qmodel.score(x_test)                          # uses StatePreparation + statevector
c_score = model.score_samples(x_test[None, :])[0]
assert abs(q_score - c_score) < 1e-10                   # matches to FP precision

print(qmodel.to_circuit(x_test).draw())                 # the 4-qubit circuit

pip install qiskit to enable.

PyOD plugin

from dmkde.pyod import DMKDEDetector
det = DMKDEDetector(feature_dim=256, sigma=1.5, contamination=0.05).fit(X_train)
labels = det.predict(X_test)        # 0 = inlier, 1 = outlier (PyOD convention)
scores = det.decision_function(X_test)

pip install pyod to enable.

Santander X Quantum AI Leap submission

SUBMISSION.md contains the full submission narrative for the Santander X Global Challenge: Quantum AI Leap (June 30 2026 deadline).

License

MIT — see LICENSE. Provided AS IS with no warranty.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dmkde-0.1.0.tar.gz (26.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

dmkde-0.1.0-cp313-cp313-win_amd64.whl (114.1 kB view details)

Uploaded CPython 3.13Windows x86-64

dmkde-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (171.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

dmkde-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (123.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

dmkde-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl (130.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

dmkde-0.1.0-cp312-cp312-win_amd64.whl (114.0 kB view details)

Uploaded CPython 3.12Windows x86-64

dmkde-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (171.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

dmkde-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (123.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

dmkde-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl (130.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

dmkde-0.1.0-cp311-cp311-win_amd64.whl (112.2 kB view details)

Uploaded CPython 3.11Windows x86-64

dmkde-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (172.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

dmkde-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (121.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

dmkde-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl (128.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

dmkde-0.1.0-cp310-cp310-win_amd64.whl (111.6 kB view details)

Uploaded CPython 3.10Windows x86-64

dmkde-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (171.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

dmkde-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (120.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

dmkde-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl (127.2 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

dmkde-0.1.0-cp39-cp39-win_amd64.whl (113.3 kB view details)

Uploaded CPython 3.9Windows x86-64

dmkde-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (171.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

dmkde-0.1.0-cp39-cp39-macosx_11_0_arm64.whl (120.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

dmkde-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl (127.3 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file dmkde-0.1.0.tar.gz.

File metadata

  • Download URL: dmkde-0.1.0.tar.gz
  • Upload date:
  • Size: 26.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dmkde-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b475c021bc43d8694debadba93230fbaed9d82b43df18b1343ac3587478b01ec
MD5 9ba8b30eab809816b304951d06207d98
BLAKE2b-256 69f0d95c3052204b824c142b1bb0bead99522444c14f5a48b4231d44bac98a47

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: dmkde-0.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 114.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dmkde-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 780d236ee22e282555fdc991e8ed400388df6c670cb8809dbb4f327e1d867847
MD5 54e490b4e259b081786ee47e8d949ac8
BLAKE2b-256 f1158630d8192487daf303fcadeebc4a890497ff849a43917ad1a89d9b29881f

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 869ebd971d80d68b4af882b691e39c107cade7718996bb2274986921574a9c73
MD5 338c632be4549f78fce9ea70b0a96601
BLAKE2b-256 8aaaad20574840d3f6cc1cbcf8011df1803037ed30a5c2adbe83267dece21d10

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c97a650747494ad18a0346c753f8990f0e882cb9b3a59982256fed29d5c00767
MD5 1fa0a4ac96de03b927cfaf6c8ca5973b
BLAKE2b-256 d542e8cc55ca24f05c299b002c1e3c27121a4de66f2f9b67c67a61c1816abf7a

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 cc406a4c6b28884466e7b63d8e2bf15e770ed31fdabf77e4d044b65597d65f86
MD5 d5e735254a0090578d125fb6df67a80d
BLAKE2b-256 b4023ee3856d489e77dce1b2840a181451bc712f067df56f2f744a26d17c0b23

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: dmkde-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 114.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dmkde-0.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a8a8db85a50308c5a2c7fc252fe80b1a7cb3dc0a298bb39441e4a8d742946c0f
MD5 5af634532195b78d81200f5b39c7fa99
BLAKE2b-256 7cca3e33765bd8f8caa8cdd6a08adbdfdb9b489e6975d1db08550443ff396b6b

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 43bfb0d603b195ded4048866da753e309a23309cf3c02b537d57a3502fc8b758
MD5 267a92b55674e4bf5e36d7d168e211ee
BLAKE2b-256 a1aea928a909ae091a361281e1d987a5c99a960e49ae11816cb832f32cc04d40

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4dcd100d377486c21b3184d8d540fef7adf86568990c9929c6a7b6a1bc0e4f0f
MD5 e89ccad7c300279f29808a01a36a70ee
BLAKE2b-256 d57894bf0cd39aa0b92aefd7b34b860bad4ab5ff2d1edf78444f75eec890128d

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0a56e387acd9d2a0d4eec3688a4b55eec259d5425b5690ddf54423c68b9bfab5
MD5 3fd6c9ab76b8615d2935f9eca44fa957
BLAKE2b-256 a2f71f7baae5f6056fbce573ce4faae19e6c8190c1f6cd13d56a610dfd9e9de1

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: dmkde-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 112.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dmkde-0.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d6f0eb2a385ac1a5271552fb4813eccb59430fdcfd35493c68809ec8d705151c
MD5 0305cb3309cf16d6e8bf132d43878745
BLAKE2b-256 9bfb2d6b0e2ca61804a57e5053bc85ef4b1b0c782b1ca3145e27b72d183d2763

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 102e6b850b49478d5b274f4c017b611b04dd62f4fd5c75462c2c4cde37195a68
MD5 9f26ed9184bc279ede6c50c6fe48894b
BLAKE2b-256 577e81fcfdd90fc952b1f6e184d08cd79eec9b258088f2dcf60f77c07b4f4256

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dbed6888c80ace94e150d69970e8703bd30453dabc37439057a4d71beb682da9
MD5 7a5f476c4545e15d28e3cbcd760e4f70
BLAKE2b-256 a5debbb6db8c54d342ef57bd9ba7ef8eeb45e1b6107409a4ff8c03d4ed0361ba

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e76794f0bdf3d2f89ec1d90cb4518746b8044a4ae9c4cbda5537a249fc03d48a
MD5 cc799fd3b38e025127b66246a1c429be
BLAKE2b-256 071dae8f972b0f91af27d2ff978429d0ef7cd7b09708c9f59e9c211057a1ffac

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: dmkde-0.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 111.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dmkde-0.1.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 899d125889a43e101a875e5deda0531e308a2492057cbe6c0a07c447b5f7e9f4
MD5 27fd930a6453e0270dac3e611b18ee29
BLAKE2b-256 ec67d6bb5b473fbc7ecdc89acc438fe08fab9e39e62e1af91fe3c009fe463ce5

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8f232abf0f5007fec6561a9fa70876746d1d78a6fe26425ec73540a417ba2e0d
MD5 00621814885a5c1cd34e672dd80da7c2
BLAKE2b-256 82f8b00976eba176361aa2a4ddd9e15edc77c07f61f1b3695d970d9a1e83c0a8

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c9a9ddffef3c41dcda240f5fe935691a7bffa6d87dc072e8ae2e9501e5a77024
MD5 c9ed4d2cc815ac11b27ab5c085ce4444
BLAKE2b-256 eda85fd0264ea0b1b7f4f7c341eefb0aa097c5c58e63b08424c6d2ecab0a6312

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1a5854849a6baaccddca97b7a0757db673351c45eaaa4d542a94fae93e08e6b5
MD5 ba4699ab1a66db603f7c4968c1079963
BLAKE2b-256 7b859374afb3dc694ce1d9f8da63908d25e72c0dabdc335e2f429544b0e516d8

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: dmkde-0.1.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 113.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dmkde-0.1.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1d29af3008551e97f7bff2a286a3e62985ffe5a48dfc17a3133b2691d7916e70
MD5 555044e9c9d825f96e63e61a9496116a
BLAKE2b-256 e2f7adb778818145fd44cf358bbc823e1fc5b67386853048edbcfeda3153df9a

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 15e02da538d950d515c392f65d2ab35ab8c30eeb2ea11d672ad2acdb24037842
MD5 82da682cfa29748a00123cbfce8a5ca1
BLAKE2b-256 73823f8a1c0640910efad01fe0fa08445c9c12d0fedb860462753e970d5c3305

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: dmkde-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 120.8 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dmkde-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e1ebde6843c082f1e8e299c8c49825c807ab35a37623006a6c39685adaa944a1
MD5 b838b73dc43d21607911c4d27ddf38e2
BLAKE2b-256 6e408af9cc559cc4e5fcad6bd5e118d7e5a43d72d25b44a1860497326a5a7280

See more details on using hashes here.

File details

Details for the file dmkde-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for dmkde-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6080fe5ed937195ff546d1fe4cf26d4ecd17bcfea873b59c3bc51025ea1da957
MD5 5e794f7ed9a24f0b7f5ec25c5f001486
BLAKE2b-256 57a0405f2c0b4d12508503b532b9fae6391887593029e851159e3a76ba641666

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page