feat: enhance test skipping logic (#925)

* Now when _qdp is not built, the tests will show as skipped with a helpful message instead of being silently ignored.

* fix pre-commit

* bring back

* add -rs

* linter

* feat: add requires_qdp marker for conditional QDP tests and refactor imports
6 files changed
tree: 932b98ad4b58794a0a79792277aac011c4a4f2b0
  1. .devcontainer/
  2. .github/
  3. dev/
  4. docs/
  5. examples/
  6. qdp/
  7. qumat/
  8. testing/
  9. website/
  10. .asf.yaml
  11. .gitignore
  12. .pre-commit-config.yaml
  13. CONTRIBUTING.md
  14. doap_Mahout.rdf
  15. KEYS
  16. LICENSE
  17. NOTICE
  18. pyproject.toml
  19. README.md
  20. uv.lock
README.md

Apache Mahout

License Python GitHub Stars GitHub Contributors

The goal of the Apache Mahoutâ„¢ project is to build an environment for quickly creating scalable, performant machine learning applications.
For additional information about Mahout, visit the Mahout Home Page

Qumat

Qumat is a high-level Python library for quantum computing that provides:

  • Quantum Circuit Abstraction - Build quantum circuits with standard gates (Hadamard, CNOT, Pauli, etc.) and run them on Qiskit, Cirq, or Amazon Braket with a single unified API. Write once, execute anywhere. Check out basic gates for a quick introduction to the basic gates supported across all backends.
  • QDP (Quantum Data Plane) - Encode classical data into quantum states using GPU-accelerated kernels. Zero-copy tensor transfer via DLPack lets you move data between PyTorch, NumPy, and TensorFlow without overhead.

Quick Start

git clone https://github.com/apache/mahout.git
cd mahout
pip install uv
uv sync                     # Core Qumat
uv sync --extra qdp         # With QDP (requires CUDA GPU)

Qumat: Run a Quantum Circuit

from qumat import QuMat

qumat = QuMat({"backend_name": "qiskit", "backend_options": {"simulator_type": "aer_simulator"}})
qumat.create_empty_circuit(num_qubits=2)
qumat.apply_hadamard_gate(0)
qumat.apply_cnot_gate(0, 1)
qumat.execute_circuit()

QDP: Encode data for Quantum ML

import qumat.qdp as qdp

engine = qdp.QdpEngine(device_id=0)
qtensor = engine.encode([1.0, 2.0, 3.0, 4.0], num_qubits=2, encoding_method="amplitude")

Roadmap

2024

  • [x] Transition of Classic to maintenance mode
  • [x] Integration of Qumat with hardened (tests, docs, CI/CD) Cirq, Qiskit, and Braket backends
  • [x] Integration with Amazon Braket
  • [x] Public talk about Qumat

2025

  • [x] FOSDEM talk
  • [x] QDP: Foundation & Infrastructure (Rust workspace, build configuration)
  • [x] QDP: Core Implementation (CUDA kernels, CPU preprocessing, GPU memory management)
  • [x] QDP: Zero-copy and Safety (DLManagedTensor, DLPack structures)
  • [x] QDP: Python Binding (PyO3 wrapping, DLPack protocol)

Q1 2026

  • [ ] QDP: Input Format Support (PyTorch, NumPy, TensorFlow integration)
  • [ ] QDP: Verification and Testing (device testing, benchmarking)
  • [ ] QDP: Additional Encoders (angle/basis encoding, multi-GPU optimization)
  • [ ] QDP: Integration & Release (documentation, example notebooks, PyPI publishing)

Legal

Please see the NOTICE.txt included in this directory for more information.