API specification
The emu-sv API is based on the specification here. Concretely, the classes are as follows:
SVBackend
Bases: EmulatorBackend
A backend for emulating Pulser sequences using state vectors and sparse matrices.
Source code in pulser/backend/abc.py
run()
Emulates the given sequence.
RETURNS | DESCRIPTION |
---|---|
Results
|
the simulation results |
Source code in emu_sv/sv_backend.py
SVConfig
Bases: EmulationConfig
The configuration of the emu-sv SVBackend. The kwargs passed to this class are passed on to the base class. See the API for that class for a list of available options.
PARAMETER | DESCRIPTION |
---|---|
dt
|
the timestep size that the solver uses. Note that observables are only calculated if the evaluation_times are divisible by dt.
TYPE:
|
max_krylov_dim
|
the size of the krylov subspace that the Lanczos algorithm maximally builds
TYPE:
|
krylov_tolerance
|
the Lanczos algorithm uses this as the convergence tolerance
TYPE:
|
gpu
|
Use 1 gpu if True, and a GPU is available, otherwise, cpu. Will cause errors if True when a gpu is not available
TYPE:
|
kwargs
|
arguments that are passed to the base class
TYPE:
|
Examples:
>>> gpu = True
>>> dt = 1 #this will impact the runtime
>>> krylov_tolerance = 1e-8 #the simulation will be faster, but less accurate
>>> SVConfig(gpu=gpu, dt=dt, krylov_tolerance=krylov_tolerance,
>>> with_modulation=True) #the last arg is taken from the base class
Source code in emu_sv/sv_config.py
StateVector
Bases: State[complex, Tensor]
Represents a quantum state vector in a computational basis.
This class extends the State
class to handle state vectors,
providing various utilities for initialization, normalization,
manipulation, and measurement. The state vector must have a length
that is a power of 2, representing 2ⁿ basis states for n qubits.
ATTRIBUTE | DESCRIPTION |
---|---|
vector |
1D tensor representation of a state vector.
|
gpu |
store the vector on GPU if True, otherwise on CPU
|
Source code in emu_sv/state_vector.py
n_qudits
property
The number of qudits in the state.
__add__(other)
Sum of two state vectors
PARAMETER | DESCRIPTION |
---|---|
other
|
the vector to add to this vector
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
StateVector
|
The summed state |
Source code in emu_sv/state_vector.py
__rmul__(scalar)
Scalar multiplication
PARAMETER | DESCRIPTION |
---|---|
scalar
|
the scalar to multiply with
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
StateVector
|
The scaled state |
inner(other)
Compute
PARAMETER | DESCRIPTION |
---|---|
other
|
the other state
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Tensor
|
the inner product |
Source code in emu_sv/state_vector.py
make(num_sites, gpu=True)
classmethod
Returns a State vector in the ground state |00..0>.
PARAMETER | DESCRIPTION |
---|---|
num_sites
|
the number of qubits
TYPE:
|
gpu
|
whether gpu or cpu
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
StateVector
|
The described state |
Examples:
Source code in emu_sv/state_vector.py
norm()
Returns the norm of the state
RETURNS | DESCRIPTION |
---|---|
Tensor
|
the norm of the state |
sample(*, num_shots=1000, one_state=None, p_false_pos=0.0, p_false_neg=0.0)
Samples bitstrings, taking into account the specified error rates.
PARAMETER | DESCRIPTION |
---|---|
num_shots
|
how many bitstrings to sample
TYPE:
|
p_false_pos
|
the rate at which a 0 is read as a 1
TYPE:
|
p_false_neg
|
teh rate at which a 1 is read as a 0
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Counter[str]
|
the measured bitstrings, by count |
Source code in emu_sv/state_vector.py
zero(num_sites, gpu=True)
classmethod
Returns a zero uninitialized "state" vector. Warning, this has no physical meaning as-is!
PARAMETER | DESCRIPTION |
---|---|
num_sites
|
the number of qubits
TYPE:
|
gpu
|
whether gpu or cpu
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
StateVector
|
The zero state |
Examples:
Source code in emu_sv/state_vector.py
inner
Wrapper around StateVector.inner.
PARAMETER | DESCRIPTION |
---|---|
left
|
StateVector argument
TYPE:
|
right
|
StateVector argument
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Tensor
|
the inner product |
Examples:
>>> factor = math.sqrt(2.0)
>>> basis = ("r","g")
>>> string_state1 = {"gg":1.0,"rr":1.0}
>>> state1 = StateVector.from_state_string(basis=basis,
... nqubits=nqubits,strings=string_state1)
>>> string_state2 = {"gr":1.0/factor,"rr":1.0/factor}
>>> state2 = StateVector.from_state_string(basis=basis,
... nqubits=nqubits,strings=string_state2)
>>> state1 = StateVector.from_state_amplitudes(eigenstates=basis,
... amplitudes=string_state1)
>>> string_state2 = {"gr":1.0/factor,"rr":1.0/factor}
>>> state2 = StateVector.from_state_amplitudes(eigenstates=basis,
... amplitudes=string_state2)
>>> inner(state1,state2).item()
(0.49999999144286444+0j)
Source code in emu_sv/state_vector.py
DenseOperator
Bases: Operator[complex, Tensor, StateVector]
DenseOperator in EMU-SV use dense matrices
Source code in emu_sv/dense_operator.py
__add__(other)
Element-wise addition of two DenseOperators.
PARAMETER | DESCRIPTION |
---|---|
other
|
a DenseOperator instance.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
DenseOperator
|
A new DenseOperator representing the sum. |
Source code in emu_sv/dense_operator.py
__matmul__(other)
Compose two DenseOperators via matrix multiplication.
PARAMETER | DESCRIPTION |
---|---|
other
|
a DenseOperator instance.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
DenseOperator
|
A new DenseOperator representing the product |
Source code in emu_sv/dense_operator.py
__rmul__(scalar)
Scalar multiplication of the DenseOperator.
PARAMETER | DESCRIPTION |
---|---|
scalar
|
a number to scale the operator.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
DenseOperator
|
A new DenseOperator scaled by the given scalar. |
Source code in emu_sv/dense_operator.py
apply_to(other)
Apply the DenseOperator to a given StateVector.
PARAMETER | DESCRIPTION |
---|---|
other
|
a StateVector instance.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
StateVector
|
A new StateVector after applying the operator. |
Source code in emu_sv/dense_operator.py
expect(state)
Compute the expectation value of the operator with respect to a state.
PARAMETER | DESCRIPTION |
---|---|
state
|
a StateVector instance.
TYPE:
|
RETURNS | DESCRIPTION |
---|---|
Tensor
|
The expectation value as a float or complex number. |