Changelog
For detailed release notes with code examples and feature walkthroughs, see the Release Notes section.
Version 2.2.0
See What’s New in Version 2.2 for full details.
Model Context Protocol server (
qcmcp) and command-line interface (qc) exposing the chemistry pipeline as structured tools, plus installable Copilot skills and MCP-configuration assetsRemote algorithm execution and result caching:
run()acceptsremoteandcachefor serializable arguments and results, backed by a file-based request format and pluggable remote and cache backendsRemote backend for Microsoft Discovery, installed with the new
discoveryextraUnary-iteration phase estimation (
phase_estimation/qdk_unary) over a qubitized walk; execution currently requires the sparse-state simulatorBinary encoding for sparse isometry state preparation, reducing the dense amplitude-loading width when \(\lceil \log_2 d \rceil\) is smaller than the reduced support width, in exchange for lookup ancillas and CCZ operations
Controlled-SWAP circuit mapper (
controlled_circuit_mapper/cswap_pauli_sequence) with a vacuum-annihilating term grouper and an additional system-sized vacuum registerAmplitude amplification (
amplitude_amplification/qdk_base) with a registered QPE subspace-marking oracleGauge-fixing orbital localizer (
qdk_gauge_fixing) that searches occupation-degenerate blocks for a lower mapped coefficient norm, and an active-space quantum-information orbital localizer (qdk_active_space_qio) that optimizes total single-orbital entropyeffective_hamiltonian_constructorinterface for registering methods that downfold a Hamiltonian onto a target orbital space; no implementation ships in this releaseMulliken population analysis (
population_analyzer) andWavefunction.compute_s_squared()Native in-process cube generation for orbitals, with no third-party quantum chemistry package required
Native Windows wheels for x86-64 and Arm64, subject to the optional-dependency caveats in the release notes
New tutorial: ground-state molecular energies with quantum phase estimation
Behavior changes:
The
state_prepimplementation"sparse_isometry_gf2x"is renamed"sparse_isometry"; the old name remains as a deprecated aliasOrbital cube generation defaults to the native backend instead of PySCF, and default labels are zero-based (orbital
0now writesorbital_0000.cubeinstead oforbital_0001.cube)ECP-adjusted nuclear charges now determine SCF electron counts, nuclear repulsion energies, and Hamiltonian core energies, changing results for systems with effective core potentials; ECP assignments are keyed by atom rather than element, and pre-2.2 cached results for these systems must be cleared
When a stored one-particle RDM does not match its determinant, orbital occupations are now its natural occupation numbers rather than integer mean-field occupations
Duplicate algorithm, data-class, remote-backend, and cache-backend registrations now raise
DuplicateRegistrationErrorand preserve the existing registrationCustom
DataClasssubclasses must declare a staticdata_type_name()method instead of the former_data_type_nameclass attributeSupported BLAS backends are temporarily restricted to one thread inside GauXC-backed SCF, gradient, and response operations because nested BLAS threading could cause oversubscription or wrong results
Packaging and build changes:
The new
mcpextra installs the MCP server dependencies; on Windows Arm64 it is omitted from theallandtestextras becausecryptographyhas no native wheelThe
jupyterextra no longer installs thepluginsextra; plugin backends require explicit opt-inSource builds and CI now use Libint2 2.13.1 consistently
Fixed a BLIS/libFLAME symbol collision in Linux wheel builds
Bug fixes:
Importing
qdk_chemistryno longer emits theMP2NaturalOrbitalLocalizerdeprecation message, while explicit use ofqdk_mp2_natural_orbitalsstill warnsDerived orbitals survive JSON round trips:
Orbitals.from_jsonreturns the concrete type instead of a sliced baseOrbitalsCache plugin discovery failures are logged instead of being swallowed
Corrected exponent rendering in the controlled-IQPE tutorial diagram
Version 2.1.0
See What’s New in Version 2.1 for full details.
Geometry optimization as a first-class algorithm type (
geometry_optimizer), with a geomeTRIC-backed implementation driven by the existing nuclear derivative calculatorsVendored Q# utilities load into a private
qdk.Contextinstead of the global interpreter, so importingqdk_chemistryno longer changes the caller’s target profileQiskit extras supported on Python 3.14
Bug fixes:
Corrected the iterative phase estimation phase convention: for \(U = e^{-iHt}\) the energy is recovered as \(E = -\theta / t\), the feedback phase is negated, and
QpeResult.bits_msb_firstis now genuinely most-significant-bit firstQpeResultfiles written by v1 are now upgraded bypython -m qdk_chemistry.migrate
Version 2.0.0
See What’s New in Version 2.0 for full details and migration guidance.
Symmetry-blocked storage unifying restricted and unrestricted orbital, integral, and index data
Consolidated wavefunction containers (
StateVectorContainer,AmplitudeContainer)Nuclear gradients and finite-difference Hessians
Stabilized SCF and ROHF geometric direct minimization
Block-encoding/LCU qubitization, Hadamard test, and Zassenhaus product formulas
Real-time dynamics for driven, time-dependent Hamiltonians
Fermion-to-qubit mapping carried as data (
MajoranaMapping), including a Verstraete-Cirac encodingExplicit Pauli term grouping and generalized expectation estimation
Composable standard and iterative phase-estimation circuit builders
QDK Quantum Resource Estimator integration for generated circuits (
Circuit.estimate/get_qre_application)Algorithm result caching and data-file migration tooling
Windows build support with CI
Breaking changes:
Wavefunction containers consolidated from five classes into two:
SlaterDeterminantContainer,CasWavefunctionContainer, andSciWavefunctionContainer(structurally identical apart from a type tag) merge intoStateVectorContainer, distinguished by a stored sector;MP2ContainerandCoupledClusterContainermerge intoAmplitudeContainer, distinguished by anAmplitudeTypetag.Wavefunction.get_container_type()now returns"state_vector"/"amplitude"(old names remain as deprecated aliases)Serialization schema bumped from
0.1.0to0.2.0for theOrbitals/ModelOrbitals,CanonicalFourCenterHamiltonianContainer/SparseHamiltonianContainer/CholeskyHamiltonianContainer,Wavefunction/StateVectorContainer,QpeResult, andUnitaryRepresentationdata classes;AmplitudeContainerand the top-levelHamiltonianare unchanged. Upgrade supported files withpython -m qdk_chemistry.migrate; v1TimeEvolutionUnitaryfiles must be regenerated because they do not store the scale required by v2Expectation estimator no longer auto-groups terms
Qubit mapper takes a
MajoranaMappinginstead of anencodingstringSilent semantic change: the
Wavefunctionaccessorget_active_two_rdm_spin_dependent()now returns blocks as(aaaa, aabb, bbbb)(was(aabb, aaaa, bbbb)), with theaabbblock in alpha-alpha-beta-beta index order (was alpha-beta-alpha-beta), to match the two-electron integral block order inHamiltonian; theWavefunctionconstructor takes the same new order. Positional unpacking reads incorrect data until updatedConfigurationstring and bitset constructors replaced by explicit factoriesPhase estimation now uses the
"qdk_iterative"and"qdk_standard"variants;num_bits, unitary-builder, evolution-time, and controlled-mapper settings belong to the nestedqpe_circuit_builderreference, and the executor is configured throughcircuit_executor. The v1"qiskit_standard"variant is composed from"qdk_standard"with Qiskit builder and executor referencesRenames (deprecated aliases retained):
QubitHamiltoniantoQubitOperator,EnergyEstimatortoExpectationEstimator,TimeEvolutionUnitarytoUnitaryRepresentation, andTimeEvolutionUnitaryContainertoUnitaryContainerv1
Orbitalsdense accessors deprecated in favor of the symmetry-blocked accessorsC++ only: FCIDUMP writer, Cholesky container, and
ModelOrbitalsconstructor changes
Version 1.1.0
See What’s New in Version 1.1 for full details.
Q#-native circuit architecture with lazy QIR compilation
Model Hamiltonians (Hückel, Hubbard, PPP, Ising, Heisenberg)
Arbitrary-order Trotter-Suzuki product formulas
Native ROHF with DIIS acceleration
Cholesky-based AO→MO integral transformation
OpenFermion qubit-mapping plugin
MACIS active-space expansion to 2048 orbitals
One-shot VVHV orbital localization
Version 1.0.2
Make qiskit-aer and qiskit-nature optional dependencies
Loosen matplotlib version requirement to >=3.10.0
Fixed installation instructions for Ubuntu compatibility
Improved iQPE demo notebook
Version 1.0.1
Added support for Python 3.10
Enhanced INSTALL.md with clearer installation steps
Version 1.0.0
Initial release of QDK/Chemistry