Unipolator allows for n dimensional unitary interpolation, and the calculation of propagators using unitary interpolation. Speeds up your propagators for linear quantum systems.
Project description
unipolator
Unitary Interpolation, allows for the fast repeated exponentiation of parametric Hamiltonians [1]. Construct propagators (and their derivatives) of time dependent quantum systems of the form $H(t) = H_0 + \sum_{i=1} c_i(t) H_i$ (for example in optimal control problems) or quantum circuits with parametric gates. We utilize a grid based interpolation scheme to calculate propagators from cached matrix decompositions. The computation of a propagator for a time step is as fast as a single Trotter step, but with the ability to achieve machine precision.
Update: Now supports numpy $\geq$ 2.0.
To reproduce the plots from the publication (see the .ipynb scripts in the test/ folder) use python $\leq$ 3.10, as tikzplotlib currently does not support python 3.11.
Install and Import
Install via
pip install unipolator
and then simply import into a project via
from unipolator import *
Initialize the Unitary Interpolation Object:
Describe a system with a double complex array of Hamiltonians H_s, with H_s[i,...] = H_i ∆t, so that for $n$ control Hamiltonians H_s is a $(n+1) \times d \times d$ array for a $d$ dimensional Hilbert space. Define the bounds of the interpolation (hyper-) volume via $n$ dimensional double arrays c_mins and c_maxs and define the number of bins for every dimension via the $n$ dimensional int64 array c_bins, to initialize the unitary interpolation cache
ui = UI(H_s, c_mins, c_maxs, c_bins)
Equivalently if we wish to propagate only wavevectors $\ket{\psi(t)} = U(t) \ket{\psi(0)}$ we initialize the unitary interpolation cache via
ui_vector = UI_vector(H_s, c_mins, c_maxs, c_bins, m)
where m is the number of wavevectors that are calculated in parallel.
The package contains further methods listed at the bottom of this document.
Automatic Binning
The method UI_bins automatically calculates the optimal binning for a target infidelity (default I_tar=1e-10). Use via
bins = UI_bins(H_s, c_mins, c_maxs, I_tar=1e-10)
By calling
ui = UI_auto(H_s, c_mins, c_maxs, I_tar=1e-10)
or
ui_vector = UI_vector_auto(H_s, c_mins, c_maxs, I_tar=1e-10, m)
this method is called automatically during the initialization of the unitary interpolation cache.
Calculate:
We can now use ui to calculate matrix exponentials, their derivatives, pulse sequences, and their gradients via the following methods:
-
expmHcalculates the unitary $U = \exp(-i H(c) \Delta t)$ for a given set of coefficientsc(double array of length $n$), passU_uito the method to store the result (this avoids allocating new memory for every call, and allows reusing the same arrays)ui.expmH( c, U_ui)Similarly we pass two $d \times m$ arrays
V_inandV_out, with the $m$ input wavevectors and for the propagated wavevectors, viaui_vector.expmH( c, V_in, V_out) -
dexpmHalso outputs the derivatives of the unitaris (wavevectors) with respect to the control paractersc. This requires the additional passing of a $n \times d \times d$ arraydUto store the derivatives inui.dexpmH( c, U, dU)During the initalization we can also select which dervatives we wish to compute, via the additional argument
which_diffswhich requires an int64 array with the indexes of the control parameters for which we wish to compute the derivatives.In the wavevector case, we replace the output variable
dUwith an additional $n \times m \times n$ arraysdV_out, so thatui_vector.dexpmH( c, V_in, V_out, dV_out) -
expmH_pulsecalculates the propagator of a piecewise constant pulse for a given set of coefficientsc_s, now a 2d array of shape $N \times n$, where $N$ is the number of timestepsui.expmH_pulse(cs, U) -
grapecalculates the infidelity of such a pulse with respect to a arget unitaryU_target(using the indexestarget_indexesofU_target), as well as the gradients of the control parameters along the pulse by using the GRAPE trick. We pass an arraydI_djof shape $n \times N$ to store the gradients at every time step for every control parameterui.grape(cs, U_target, target_indexes, U, dU, dI_dj)
Other Methods:
The package also contains classes for eigenvalue based exponentiations, Krylov based exponentiations and (symmetric-) Trotterisations, namely
-
Hamiltonian_System(H_s), -
Hamiltonian_System_vector(H_s, m), wheremis the number of wavevectors that are calculated in parallel, -
Trotter_System=(H_s, m_times), wherem_timesis the number of doublings $2^\mathrm{m}$ Trotter steps, -
Symmetric_Trotter_System=(H_s, m_times), -
Trotter_System_vector(H_s, n_times)wheren_timesis the number of performed Trotter steps , -
Symmetric_Trotter_System_vector(H_s, n_times). -
In the test Subdirectory we provide additional functions to generate Random Hamiltonians, construct infidelities and more.
Author:
Michael Schilling
References:
[1] Schilling, Michael, et al. Exponentiation of Parametric Hamiltonians via Unitary Interpolation arxiv.org/abs/2402.01498
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unipolator-0.3.7.tar.gz.
File metadata
- Download URL: unipolator-0.3.7.tar.gz
- Upload date:
- Size: 2.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec19ff2cb21516003f5b7b874f4c9935fc047e5d61b805fe8d890f34d2398343
|
|
| MD5 |
39761b1209c8cf69b8c0572651862da0
|
|
| BLAKE2b-256 |
0de6462d9ec7d30a2fdd36b8a72ed9ceda9228c458ea900cc1391dd91f976935
|
File details
Details for the file unipolator-0.3.7-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: unipolator-0.3.7-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5a76aab49a89c5c04be73af6cb06bbf20acf3e99d9c41ace5c9a79cd141cfc0
|
|
| MD5 |
56ab379e192a1e68f51c2369172e790f
|
|
| BLAKE2b-256 |
8a197803fdb08b99e5acd43c0401b5178d44a2b8c3571eb993ad151606cd90a5
|