Simulators

QVMs promise to behave like a real QPU. However, under-the-hood there is usually a simulation that has fewer constraints than a physical device. For example, in a wavefunction (or statevector) simulation, you can directly inspect amplitudes and probabilities.

WavefunctionSimulator([connection, random_seed])

A simulator that propagates a wavefunction representation of a quantum state.

ReferenceWavefunctionSimulator(n_qubits[, rs])

A wavefunction simulator that prioritizes readability over performance.

ReferenceDensitySimulator(n_qubits[, rs])

A density matrix simulator that prioritizes readability over performance.

NumpyWavefunctionSimulator(n_qubits[, rs])

A wavefunction simulator that uses numpy’s tensordot or einsum to update a state vector

Reference Utilities

lifted_pauli(pauli_sum, qubits)

Takes a PauliSum object along with a list of qubits and returns a matrix corresponding the tensor representation of the object.

lifted_gate(gate, n_qubits)

Lift a pyquil Gate in a full n_qubits-qubit Hilbert space.

program_unitary(program, n_qubits)

Return the unitary of a pyQuil program.

all_bitstrings(n_bits)

All bitstrings in lexicographical order as a 2d np.ndarray.

Numpy Utilities

targeted_einsum(gate, wf, wf_target_inds)

Left-multiplies the given axes of the wf tensor by the given gate matrix.

targeted_tensordot(gate, wf, wf_target_inds)

Left-multiplies the given axes of the wf tensor by the given gate matrix.