Welcome to emu-mps
Emu-mps is a backend for the Pulser low-level Quantum Programming toolkit that lets you run Quantum Algorithms on a simulated device, using GPU acceleration if available. More in depth, emu-mps is designed to emulate the dynamics of programmable arrays of neutral atoms, with matrix product states (mps). While benchmarking is incomplete as of this writing, early results suggest that this design makes emu-mps faster and more memory-efficient than previous generations of quantum emulators at running simulations with large numbers of qubits.
Installation
Warning: installing emu-mps will update pulser-core
Using hatch
, uv
or any pyproject-compatible Python manager
To add emu-mps
to your project, edit your pyproject.toml
to add the line
to the list of dependencies
.
Using pip
or pipx
To install the pipy
package using pip
or pipx
- Create a
venv
if that's not done yet
- Enter the venv
If you're running Unix:
If you're running Windows:
- Install the package
Join us on Slack or by e-mail to give us feedback about how you plan to use Emu-MPS or if you require specific feature-upgrades.
Usage
For the time being, the easiest way to learn how to use this package is to look at the examples and notebooks.
See also the full documentation for the API, information about contributing, benchmarks, etc.
Getting in touch
- Pasqal Community Portal (forums, chat, tutorials, examples, code library).
- GitHub Repository (source code, issue tracker).
- Professional Support (if you need tech support, custom licenses, a variant of this library optimized for your workload, your own QPU, remote access to a QPU, ...)
Running a Pulser sequence and getting results
Several example notebooks are included in the online documentation. The index page for them can be found here.
Supported features
The following features are currently supported:
- All Pulser sequences that use only the rydberg channel
- MPS and MPO can be constructed using the abstract Pulser format.
- The following noise types:
- SPAM
- Monte Carlo quantum jumps
- A Gaussian laser waist for the global pulse channels.
- The following basis states in a sequence:
- The following properties from a Pulser Sequence are also correctly applied:
- hardware modulation
- SLM mask
- A complex phase for the omega parameter
- Customizable output, with the folowing inbuilt options:
- The quantum state in MPS format
- Bitstrings
- The fidelity with respect to a given state
- The expectation of a given operator
- The qubit density (magnetization)
- The correlation matrix
- The mean, second moment and variance of the energy
- Specification of
- initial state
- various precision parameters
- whether to run on cpu or gpu(s)
- the \(U_{ij}\) coefficients from here
- A cutoff below which \(U_{ij}\) are set to 0 (this makes the computation more memory efficient)
Planned features
- Parallel TDVP on multiple GPUs
- More noise:
- the currently unsupported noises in the Pulser
NoiseModel
- the currently unsupported noises in the Pulser
- Differentiability
More Info
Please see the API specification for a list of available config options (see here), and the Observables page for how to compute observables (see here). Those configuration options relating to the mathematical functioning of the backend are explained in more detail in the Config page (see here). For notebooks with examples for how to do various things, please see the notebooks page (see here).