Changelog
Version 1.6.1
Added
Specialized transverse-field propagators and QAOA helpers for hypercube mixers, with native MPI and wavefront implementations
Expanded topology verification tooling and richer
QUOP_DUMP_COMM_INFOdiagnostics for backend, binding, and GPU visibility checksLine-trace profiling support for MPI execution debugging
Benchmark coverage for comparing sparse and transverse-field QAOA propagation paths
Changed
Parallel Jacobian worker coordination now keys communicator leadership and splits from worker identity instead of assuming world rank 0
Sparse CSR inputs now use canonical 0-based contiguous buffers when compliant; legacy 1-based or unsorted inputs are normalized in Python with a deprecation warning and validated again at the native boundary
Environment install/build scripts are quieter by default and more portable across Bash and Z shell environments
MPI test coverage expanded across topology negotiation, communicator lifecycle, logging, sampling, and propagator behavior
Fixed
Wavefront parallel HDF5 saves now use correct collective file creation and dataspace handling
MPI-collective Python exceptions now propagate consistently
NUMA detection and worker splitting fixes improve mixed CPU/GPU wavefront setups
Single-rank and backend-specific MPI paths corrected for FFTW planning and
MPI_IN_PLACEhandling
Version 1.6.1 (Unreleased)
Added
Wavefront backend support across sparse, circulant, momentum, and composite propagators for GPU/CPU workflows
Robust GPU topology discovery and rank-to-device assignment via PCI bus IDs with NUMA-aware fallback mapping
SHAFFT-based wavefront FFT handling with layout negotiation support
Development standards documentation for Python, Fortran, and extension-module conventions
Curated ASX ticker candidate dataset for the portfolio rebalancing example
Profile-based installer (
environments/install.sh) with installation profiles replacing the Spack-driven setupUnified benchmark submission script with single (intra) - and multi-node configurations
run_tests.shtest runner covering unit, MPI, parallel-Jacobian and example testsExample test suite that runs example scripts and validates results against expected bounds
Test documentation in the README
Changed
Migrated build system to scikit-build-core
config.tomlis now the single source of truth for profile-specific module lists and environment settingsEnvironment installer libraries split into sourced modules with shared helpers in
common.shLinux wavefront wheels are now repaired with auditwheel/patchelf to include shared library dependencies
SHAFFT dependency caching and library install paths improved
CMake minimum version raised; Fortran preprocessing uses
Fortran_PREPROCESSproperty (fixes Ninja builds)Communicator/layout lifecycle refactor (including
NODECOMMcreation) with consistent backend-aware negotiation behaviorquop_mpi_layout_tis now encapsulated behind explicit getter/setter APIs in wrappers and testsNative context and propagator paths now return explicit status codes with end-to-end wrapper plumbing
Deterministic lifecycle management for Python wrappers and
Ansatzcleanup replaces finalizer-driven teardownBuild and dependency configuration updated for wavefront workflows (including optional hipfort auto-build and GPU-aware MPI controls)
Canonical API naming now uses
QAOA/QWOA/QMOA/QOWE,Swarm, and<propagator>.Unitarywith deprecation warnings for legacy lowercase aliasesUnitaryBaseis now the canonical base class export (quop_mpi.UnitaryBase), withquop_mpi.Unitaryretained as a deprecated aliasCanonical module imports are now lowercase (
quop_mpi.ansatzandquop_mpi.unitary); legacy CamelCase submodules were removedPublic Python API now includes comprehensive type annotations across core classes and propagators
Portfolio rebalancing example flow updated for deterministic ticker selection and simplified usage
Fixed
Deadlocks and synchronization issues in communicator teardown, transfer paths, and GPU-enabled test execution
Sparse CSR redistribution bug for non-contiguous GPU ranks within
NODECOMMSingle-rank and small-system edge cases in FFT/planning and backend-specific execution paths
Context scalar getter behavior so reductions are consistently returned on all active
SUBCOMMranksSwarm.execute_swarmnow applies tracker-assigned seeds to eachAnsatzinstance before executionNLopt wrapper defaults no longer use mutable arguments (
constraints/boundshelpers), preventing cross-call state leakagePortfolio rebalancing live-data fetch now handles partial Yahoo responses more robustly and falls back cleanly to bundled sample data
Bash 3 compatibility for environment scripts (guarded empty expansions under
set -u)F2PY wrapper module dependencies and build targets corrected for parallel builds
CMAKE_ARGSparsing fixed for environment-driven configurationhipfort module compatibility verification added to wavefront builds
Version 1.5.0 (2026-01-28)
Added
Chebyshev polynomial expansion for sparse matrix exponentiation, replacing scaling-and-squaring method
Unit-valued sparse propagator optimization: automatically detects matrices where all non-zero entries are 1.0 and skips value storage/computation for improved performance
Fixed
Sparse propagator crash when running with single MPI rank (uninitialized arrays in graph communicator setup)
Version 1.4.0 (2026-01-27)
Added
Bindablebase class in_utils/_bindable.pyproviding extensible attribute discovery for QuOp FunctionsAnsatz.prepare()method to fully initialize the Ansatz for inspection without running optimizationAnsatz.print_all_bindable_attributes()method to display bindable attributes for Ansatz and all Unitariesget_bindable_attributes()andprint_bindable_attributes()methods on both Ansatz and Unitary classesExtensible
BINDABLE_ATTRIBUTESclass variable pattern – subclasses (algorithms, propagators) can define their own bindable attributesComprehensive QuOp Functions documentation with implementation patterns (plain function, factory/closure, callable class)
Bindable attributes tables in documentation for both Ansatz and Unitary
Naming convention recommendation (underscore prefix) for custom QuOp Function parameters
Comprehensive MPI-enabled test suite with pytest-mpi (380+ tests)
Unit tests for toolkit module (kronecker, pauli, string functions)
Unit tests for NLopt wrapper module
New
mpi_momentumFortran module for multivariable momentum-space propagation with FFTW MPIPerformance profiling support via
QUOP_PROFILE=1environment variableset_objectivemethod for custom objective functionsDocumentation restructure with navigable API reference
Quick Start example in documentation
Changelog documentation
Changed
Ansatz now inherits from
Bindablebase classUnitary now inherits from
Bindablebase class_interface.pynow properly skips*argsand**kwargswhen parsing function signaturesMajor refactor of Ansatz.py: Extracted cohesive subsystems into mixins for improved maintainability
_sampling.py: Simulated quantum measurement functionality_logging.py: CSV logging and HDF5 parallel I/O_communicator.py: MPI subcommunicator management_optimization/parallel_jacobian.py: Parallel gradient computation_optimization/finite_differences.py: Numerical gradient approximation methods_benchmark.py: Systematic depth study workflow
Reorganized internal module structure with consistent naming conventions
Renamed
__lib/->_lib/,__utils/->_utils/,__profile/->_profile/Renamed internal modules from
__*.pyto_*.py(single underscore for private modules)Moved
_utils/_nlopt_wrap.py->_optimization/nlopt_wrap.py
Circulant propagator now queries FFTW for optimal MPI distribution when determining max communicator size
Replaced legacy
qhost_fourier.f08with modernmpi_momentum.f90implementationRefactored optional dependencies in pyproject.toml (
[dev]replaces[all])Updated documentation sidebar with grouped navigation
NumPy 2.x compatibility
Removed
Orphaned
algorithm/multivariable.py(duplicate ofalgorithm/multivariable/)
Fixed
FFTW MPI crash with system_size=1 (edge case in circulant propagator)
Deadlock in
Ansatz.__post()when MPI ranks are excluded from subcommProfiler crash during Sphinx doc builds (outside MPI context)
OpenMP thread contention causing apparent deadlock with >2 MPI processes
Circulant eigenvalue generation bug when graph is complete
Parallel Jacobian implementation compatibility with parameter maps
Docstring formatting warnings (unescaped asterisks)
Version 1.2.1 (2025-03-07)
Changed
Build system update with modern GitHub Actions workflow
Bumped dawidd6/action-download-artifact from 2 to 6
Updated dependency version ranges
Removed outdated test directory
Version 1.2.0 (2024-08-13)
Added
Parameter mapping functionality for flexible variational parameter control (#11, #12)
Parallel gradient evaluation with MPI subcommunicators
Broadcast of variational parameters from root of MPI_COMM_WORLD
Basic profiling functionality with OpenMP support in release builds
Interleaved local spMV with parallel communication for improved performance
Documentation build GitHub workflow
Changed
CMake build requires cmake>=3.5,<4
Removed self.Ns from operator dict
Version 1.1.0 (2022-10-12)
Added
Composite Ansatz class for multivariable optimization problems
Multivariable optimization examples
QMOA (Quantum Multivariable Optimization Algorithm) experiments
Link to preprint article
Changed
Evaluate returns results to all calling MPI ranks
Support for Python 3.6 and 3.7 builds
Version 1.0.0 (2021-09-30)
This is the first major release, coinciding with the Journal of Computational Science publication.
Added
Complete API redesign with modular Ansatz architecture
QAOA and QWOA algorithm implementations
Circulant, diagonal, and sparse propagator classes
Observable and state modules
Toolkit for common quantum operators (Pauli matrices, Kronecker products)
MPI-parallel state vector simulation
Parallel HDF5 I/O for saving and loading simulation data
Support for NLopt optimizers alongside SciPy
Benchmark infrastructure for performance evaluation
Comprehensive documentation with Sphinx
GitHub Actions CI/CD pipeline
Installation scripts for Ubuntu 20.04
Singularity container support
License (GPLv3) and contributor acknowledgements
Changed
Refactored pre-post execution cycle for unitaries
Communicator resizing for optimal MPI process utilization
Default optimizer changed to L-BFGS-B
Parallel post methods with total_params tracking
Fixed
Circulant operators FFTW compatibility
Deadlock issues in communicator shrinking
Various MPI edge cases for ranks with zero-length local arrays
evolve_state converts list parameters into ndarray
Check for pre or post on cold call to evolve_state
Version 0.0.2 (2020-02-23)
Added
Zenodo DOI for citation
Support for multiple mixing operators in QAOA class
Custom optimizer support beyond default SciPy minimize
Basin-hopping optimization option
Process-independent quality generation using integers or random floats
Updated sparse matrix exponentiation subroutines
Benchmark construct with parameter reuse option
Parallel HDF5 write functionality
MPI hypercube mixer
Objective function mapping to custom scalar values
MacOS installation support
Changed
QuOp_MPI now minimizes the objective function (was maximizing)
Optimizer result ‘success’ field renamed to ‘optimizer_success’
‘success’ metric replaced by ‘quality cutoff’
Method
log_successreplaced bylog_results(breaking change from 0.0.1)Switched to L-BFGS-B optimizer
Split QAOA and QWOA into separate classes
Networkx added as required dependency
Fixed
Bug fix in MPI.py (#1)
Handling of zero-length quality arrays at local MPI process
Initial state handling when rank 0 has local_i = 0
Fourier transform ordering
Initial state defaults to equal superposition if undefined
Version 0.0.1 (2020-01-12)
Initial release.
QWAO_MPI: Quantum Walk-Assisted Optimizer with MPI parallelization
Basic CTQW (Continuous-Time Quantum Walk) implementation
Parallel eigenvalue computation with FFTW
Parallel HDF5 output support
Draft documentation