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
**Breaking Changes**
- `overlapwithpaulisum()` now has an extra factor of `2^nqubits` to be in line with other `overlap` functions. `scalarproduct()` takes its place instead.
- The Y Clifford gate definition had a missing minus sign.
- Removal of some toy functions like `commutes()` between two symbols.
- The low-level truncation functions are no longer exported
**Further Changes**
- Many docs clarifications or removals for functions exposed on the docs page
- Addition of functions like `+` and `*` between `PauliSum` and `PauliString`
- Automatic promotion of types for these operations
- Automatic wrapping of coefficients into `PauliFreqTracker` when `max_sin` or `max_freq` are not `Inf`.
`PauliPropagation.jl` is a Julia package for Pauli propagation simulation of quantum circuits and quantum systems.
6
+
`PauliPropagation.jl` is a Julia package for simulating Pauli propagation in quantum circuits and systems. It focuses on simulating the evolution of observables expressed in the Pauli basis under the action of unitary gates and non-unitary channels in a quantum circuit.
3
7
4
-
The package simulates the evolution of objects expressed in the Pauli basis under noiseless and noisy quantum circuits. Commonly, this is used for the Heisenberg picture evolution of an observable. For example, if $`\hat{O}`$ is an observable that is preferably sparse in Pauli basis and $`\mathcal{E}`$ is a quantum circuit, we simulate $`\mathcal{E}^\dagger(\hat{O})`$ instead of most quantum simulation packages simulating the Schrödinger evolution $`\mathcal{E}(\rho)`$ of states $`\rho`$. For the case of unitary quantum circuits $`U`$, the evolved observable $`\mathcal{E}^\dagger(\hat{O})`$ is usually written like $`U^\dagger \hat{O} U`$.
8
+
Unlike traditional simulators which simulate a circuit $\mathcal{E}$ evolving the state $\rho$ in the Schrödinger picture, Pauli propagation often adopts the Heisenberg picture, evolving an observable $O$ under $\mathcal{E}^\dagger$. This can be particularly efficient when the observables remain sparse or structured under evolution, and is useful for estimating expectation values such as $\text{Tr}\left[\rho \mathcal{E}^{\dagger}(O)\right]$, studying operator dynamics, and computing correlation functions.
5
9
6
-
Some opt-in truncations or approximations are particularly suited for estimating expectation values $`Tr[\rho \mathcal{E}^\dagger(\hat{O})]`$ of evolved observables with quantum states.
10
+
Pauli propagation is related to the so-called (extended) stabilizer simulation, but is fundamentally different from, for example, tensor networks. It offers a distinct approach that can handle different regimes of quantum dynamics.
7
11
12
+
Implemented in Julia, `PauliPropagation.jl` combines high-performance computation (using features such as multiple dispatch) with an accessible and high-level interface.
8
13
9
14
## Installation
10
15
16
+
> Note the current package requires `Julia 1.10+`.
17
+
11
18
The `PauliPropagation.jl` package is registered and can be installed into your environment in the following way:
Inside this cloned repository you can now freely import `PauliPropagation` or install it into your environment.\
39
+
Inside this cloned repository, you can now freely import `PauliPropagation` or install it into your environment.\
33
40
Alternatively, you can push the relative path to the cloned repository to the Julia package load path called `LOAD_PATH` via
34
41
```julia
35
42
rel_path ="your/relative/path/PauliPropagation"
36
43
push!(LOAD_PATH,rel_path);
37
44
```
38
45
This may require that you have no global installation of `PauliPropagation` in your enviroment.
39
46
40
-
## Examples
47
+
### A note on installing Julia
48
+
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
49
+
50
+
```juliaup add lts```
51
+
52
+
To get started running Jupyter notebooks, start a Julia session and install the `IJulia` package.
53
+
54
+
If you are working on several projects with potentially conflicting packages, it is recommended to work with within local environments or projects.
41
55
42
-
You can find example notebooks in the `examples` folder.
56
+
For more details, we refer to this useful [guide](https://modernjuliaworkflows.org/writing/).
57
+
58
+
## Quick Start
59
+
60
+
You can find detailed example notebooks in the `examples` folder. We provide a brief example of how to use `PauliPropagation.jl`.
61
+
62
+
Consider simulating the dynamics of an operator $O=Z_{16}$ under the evolution of a unitary channel $\mathcal{E}(\cdot) = U^\dagger \cdot U$ in a $n=32$ qubits system.
43
63
44
-
Here is a tiny working example where we approximately simulate the expectation value of a quantum circuit.
where `periodic` specifies the boundary condition of the gates. The library has built-in circuits with e.g. a circuit containing alternating RX and RZZ Pauli gates on the topology. This can be defined by Trotterization of a transverse field Ising Hamiltonian with $l$ steps
In our simulations, we can choose the circuit parameter $dt$
72
97
98
+
```julia
99
+
dt =0.1# time step
100
+
101
+
parameters =ones(countparameters(circuit)) * dt # all parameters
102
+
```
103
+
**Important:** The circuit and parameters are defined in the order that they would act in the Schrödinger picture. Within our `propagate()` function, the order will be _reversed_ to act on the observable.
104
+
105
+
During the propagation via `propagate()`, we employ truncation strategies such as coefficient or weight truncations, these options can be specified as keywords.
Therefore, the trace is equivalent to the sum over the coefficients of Pauli strings containing only `I` and `Z` Paulis,
136
+
137
+
```math
138
+
\mathrm{Tr}[U^\dagger O U \rho] \approx \sum_{\alpha \in \{\mathbb{I}, Z\}\, \text{strings}} c_{\alpha}.
139
+
```
140
+
87
141
## Important Notes and Caveats
88
-
All of the following points can be addressed by you writing the necessary missing code due to the nice extensibility of Julia.
89
-
- The package is tested for Julia `1.10` and `1.11`.
90
-
- The default is the Heisenberg _backpropagation_. Schrödinger propagation may soon be natively supported. At this moment, there are options to transpose `PauliRotation` gates by multiplying their angles with `-1` and `CliffordGate`s by using `transposecliffordmap()`.
91
-
- We currently do not support the strong simulation of quantum states in non-exponential time (even for Stabilizer states). Pauli propagation could in principle be used as a backend for extended stabilizer simulation.
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()`.
144
+
- While Pauli propagation can, in principle, be used for _extended_ stabilizer simulation, we do not currently support sub-exponential strong simulation of stabilizer states.
92
145
- Sampling quantum states is currently not supported.
93
146
- Many underlying data structures and functions can be used for other purposes involving Pauli operators.
94
147
148
+
All of the above can be addressed by writing the additional missing code due to the nice extensibility of Julia.
149
+
95
150
## Upcoming Features
96
151
This package is still work-in-progress. You will probably find certain features that you would like to have and that are currently missing.\
97
152
Here are some features that we want to implement in the future. Feel free to contribute!
98
-
-**A documentation website!**
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.
99
154
-**Easier Schrödinger picture propagation**. Currently, the default is Heisenberg and there is no easy way to transpose the gates.
100
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.
101
156
@@ -110,12 +165,11 @@ Otherwise, feel free to reach out to the developers!
110
165
111
166
## Authors
112
167
113
-
The main developer of this package is Manuel S. Rudolph in the Quantum Information and Computation Laboratory of Prof. Zoë Holmes at EPFL, Switzerland.
168
+
The main developer of this package is [Manuel S. Rudolph](https://github.com/MSRudolph) in the Quantum Information and Computation Laboratory of Prof. Zoë Holmes at EPFL, Switzerland.
114
169
Contact Manuel via manuel.rudolph@epfl.ch.
115
170
116
-
This package is the derivative of ongoing collaborations with Armando Angrisani and [Tyson Jones](https://github.com/TysonRayJones) at EPFL, supervised by Prof. Zoë Holmes at EPFL.
117
-
118
-
Further contributors to this package include [Yanting Teng](https://github.com/teng10) and [Su Yeon Chang](https://github.com/sychang42).
171
+
Further contributors to this package include [Yanting Teng](https://github.com/teng10), [Tyson Jones](https://github.com/TysonRayJones), and [Su Yeon Chang](https://github.com/sychang42).
172
+
This package is the derivative of ongoing work at the Quantum Information and Computation lab at EPFL, supervised by Prof. Zoë Holmes.
119
173
120
174
For more specific code issues, bug fixes, etc. please open a [GitHub issue](https://github.com/MSRudolph/PauliPropagation.jl/issues).
0 commit comments