catalyst
catalyst copied to clipboard
A JIT compiler for hybrid quantum programs in PennyLane
**Context:** For saving IR, `apply-transform-sequence` pass is counted as a single pass instead of potentially many passes ```python @qjit(keep_intermediate='pass', verbose=True) @apply_pass("merge-rotations") @apply_pass("remove-chained-self-inverse") @qml.qnode(qml.device("lightning.qubit", wires=2)) def test_chained_apply_passes_workflow(x: float): qml.Hadamard(wires=[1]) qml.RX(x, wires=[0])...
**Context:** A *Pauli frame tracker* [1] is a system that tracks gates from the Pauli group in classical electronics instead of physically applying them to qubits on the device. Doing...
Currently, both `commute_ppr` and `merge_ppr_ppm` use the `sortTopologically` function to sort a range of operations in said block in topological order. However, this approach will lead to a problem where...
**Context:** **Description of the Change:** **Benefits:** **Possible Drawbacks:** **Related GitHub Issues:**
**Context:** **Description of the Change:** 1. API change of `lower_jaxpr_to_fun`, update it in catalyst accordingly 2. API change of `jaxpr_subcomp`, update it in catalyst accordingly 3. `_jaxpr_replicas` has been moved...
:construction: **WIP** :construction: ### Before submitting Please complete the following checklist when submitting a PR: - [ ] All new functions and code must be clearly commented and documented. -...
`qjit` is not detecting the need for recompilation when keyword arguments change shape. For example: ``` @qml.qjit def f(x, y): return x + y ``` ``` >>> f(1, y=2), f(1,...
**Context:** As part of the work to allow higher order primitives to take in dynamically allocated registers, the underlying `quantum.adjoint` op needs to be able to take in multiple registers....
**Context:** To better keep track of what is and isn't supported with program capture, I'm trying out adding markers for things that just work the old frontend, and features we...