Added
- Interop bridge for Qiskit and PennyLane —
from_qiskit/from_pennylane convert an existing circuit to a QASMCircuit by reusing the existing QASMParser (via qiskit.qasm2.dumps / qml.to_openqasm) instead of a bespoke gate-by-gate translator; run_qiskit_circuit/run_pennylane_circuit execute it directly on DenseSVSimulator.
- Bit-order mismatch handled explicitly: Qiskit indexes arrays little-endian (qubit 0 = LSB), Dense-Evolution is MSB-first everywhere else, so
run_qiskit_circuit reorders its output to match Qiskit's own convention (verified against Statevector(...).probabilities()). PennyLane's own wire order already matches Dense-Evolution's natively (verified the same way), so run_pennylane_circuit does not reorder — kept as two separate code paths on purpose.
- New optional extras:
dense-evolution[qiskit], dense-evolution[pennylane].
Fixed
- Found while building the Qiskit bridge:
qiskit.qasm2.dumps exports composite gates (e.g. mcx) as a gate NAME params { ... } definition on a single line — the same brace-delimited block corruption already fixed for QASM3 for/if/while/def in v8.1.13, just not covered because gate wasn't in that fix's keyword set (verified: before the fix, a 4-qubit circuit using mcx silently inflated to n_qubits=5 with a ghost op). Extended the same brace-matching preprocessor to also strip gate definitions cleanly.
PyPI: https://pypi.org/project/dense-evolution/8.1.14/