Added
dense_evolution.autodiff.circuit_to_energy_fn(circuit, n_qubits) — the real VQE gradient engine (jax.value_and_grad through a jax.lax.scan circuit template, verified against finite differences to ~1e-11) is now public API, independent of dashboard_core.py/Streamlit. Composes with the Qiskit/PennyLane interop bridge: circuit_to_energy_fn(from_pennylane(qnode, ...), n_qubits) gives a real, non-zero jax.grad, where run_pennylane_circuit alone silently returns 0.0.
Fixed
from_pennylane broke on Python 3.10 — CI caught it (3.10 job red, 3.11/3.12 green). Newer PennyLane releases dropped Python 3.10 support, so pip resolves an older PennyLane (0.42.3) there; qml.to_openqasm(tape) behaves incompatibly between versions for a bare tape/QuantumScript input. Verified against both versions directly. from_pennylane now picks whichever serialization path the installed PennyLane version actually supports.
Note
- v8.1.15's published PyPI package does not contain this fix, despite its own changelog entry describing it — the fix landed in the repo before the PyPI upload, but the actual uploaded wheel/sdist were built from an earlier commit, and PyPI doesn't allow re-uploading files under an already-published version. No git tag/GitHub Release was ever created for 8.1.15. If you're on 8.1.15, upgrade to 8.1.16.
PyPI: https://pypi.org/project/dense-evolution/8.1.16/