You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Performance fixes:
- dispatch to Base.iterate() for PauliSum
- replace Pauli rotation gate with gate bitmask in commutes()
- inline iterate(), add!(), sett!()
Inside this cloned repository, you can now freely import `PauliPropagation` or install it into your environment.\
40
-
Alternatively, you can push the relative path to the cloned repository to the Julia package load path called `LOAD_PATH` via
41
-
```julia
42
-
rel_path ="your/relative/path/PauliPropagation"
43
-
push!(LOAD_PATH,rel_path);
44
-
```
45
-
This may require that you have no global installation of `PauliPropagation` in your enviroment.
46
34
47
35
### A note on installing Julia
48
36
It is recommended to install julia using `juliaup` with instructions from [here](https://github.com/JuliaLang/juliaup). Then, Julia's _long-term support_ version (currently a `1.10` version) can be installed via
@@ -139,20 +127,19 @@ Therefore, the trace is equivalent to the sum over the coefficients of Pauli str
139
127
```
140
128
141
129
## Important Notes and Caveats
142
-
- Circuits are specified in the _Schrödinger_ picture, as if operated upon states. Behind the scenes, `propagate()` will (by default) apply the _adjoint_ circuit upon the passed `PauliSum` which is treated as the observable operator.
143
-
- Schrödinger propagation is planned but not yet supported _except_ through manually passing the _adjoint_ of the intended circuit to `propagate()`. This is often easy. For instance, with the circuit order reversed, angles in `PauliRotation` gates are negated, and `CliffordGate` are passed to `transposecliffordmap()`.
130
+
- Circuits are specified in the _Schrödinger_ picture, as if operated upon states. Behind the scenes, `propagate()` will (by default) apply the _adjoint_ circuit upon the passed `PauliSum` which is treated as the observable operator. The default can be changed by passing `heisenberg=false` to `propagate()`, though it will not make simulating dense quantum states efficient.
131
+
- Schrödinger propagation via `heisenberg=false` is supported since version `0.7`, but not for all gates. So far, we natively support `PauliRotation`, `CliffordGate`, and `<:PauliNoise` gates. `ImaginaryPauliRotation` is _only_ supported with `heisenberg=false`.
144
132
- While Pauli propagation can, in principle, be used for _extended_ stabilizer simulation, we do not currently support sub-exponential strong simulation of stabilizer states.
145
-
- Sampling quantum states is currently not supported.
133
+
- Sampling quantum states is currently not supported, but is coming soon.
146
134
- Many underlying data structures and functions can be used for other purposes involving Pauli operators.
147
135
148
136
All of the above can be addressed by writing the additional missing code due to the nice extensibility of Julia.
149
137
150
138
## Upcoming Features
151
139
This package is still work-in-progress. You will probably find certain features that you would like to have and that are currently missing.\
152
140
Here are some features that we want to implement in the future. Feel free to contribute!
153
-
-**Multi-threading and improved scalability**. Currently, PauliPropagation.jl works uses a single CPU thread and may run your hardware out of memory. Future versions should be even faster and with options to trade-off computational runtime and memory requirements.
154
-
-**Easier Schrödinger picture propagation**. Currently, the default is Heisenberg and there is no easy way to transpose the gates.
155
-
-**A fast and flexible Surrogate version**. Currently, we provide a version of the Pauli propagation Surrogate that is _good_ and _works_, at least for Pauli gates and Clifford gates. Stay tuned for a whole lot more.
141
+
-**GPU acceleration**. Since version `0.7`, we provide a PauliPropagationCUDA extension in `ext/`. So far, it only works with `PauliRotation` gates and is not yet maximally performant.
142
+
-**Stochastic evolution**. Propagation methods are mainly memory-limited. We aim to change this and introduce time vs memory trade-offs.
156
143
157
144
## How to contribute
158
145
We have a Slack channel `#pauli-propagation` in the [Julia Slack](https://join.slack.com/t/julialang/shared_invite/zt-2zljxdwnl-kSXbwuwFHeERyxSD3iFJdQ).
@@ -187,13 +174,15 @@ If you are publishing research using `PauliPropagation.jl`, please cite this lib
187
174
```
188
175
189
176
## Related publications
190
-
Some of the developers of this package are co-authors in the following papers using Pauli propagation and (at least parts of) this code:
177
+
Some of the developers of this package are co-authors in the following papers using Pauli propagation and (at least parts of) this code.
178
+
If you are using our package, please consider citing some of these works:
191
179
-[Classical simulations of noisy variational quantum circuits](https://arxiv.org/abs/2306.05400)
192
180
-[Classical surrogate simulation of quantum systems with LOWESA](https://arxiv.org/abs/2308.09109)
193
181
-[Quantum Convolutional Neural Networks are (Effectively) Classically Simulable](https://arxiv.org/abs/2408.12739)
194
182
-[Classically estimating observables of noiseless quantum circuits](https://arxiv.org/abs/2409.01706)
195
183
-[Efficient quantum-enhanced classical simulation for patches of quantum landscapes](https://arxiv.org/abs/2411.19896)
196
184
-[Simulating quantum circuits with arbitrary local noise using Pauli Propagation](https://arxiv.org/abs/2501.13101)
197
185
-[Leveraging Symmetry Merging in Pauli Propagation](https://arxiv.org/abs/2512.12094)
186
+
-[Thermal State Simulation with Pauli and Majorana Propagation](https://www.arxiv.org/abs/2602.04878)
0 commit comments