qibotn package#
Subpackages#
Submodules#
qibotn.circuit_convertor module#
- class qibotn.circuit_convertor.QiboCircuitToEinsum(circuit, dtype='complex128')#
Bases:
object
Convert a circuit to a Tensor Network (TN) representation.
The circuit is first processed to an intermediate form by grouping each gate matrix with its corresponding qubit it is acting on to a list. It is then converted to an equivalent TN expression through the class function state_vector_operands() following the Einstein summation convention in the interleave format.
See document for detail of the format: https://docs.nvidia.com/cuda/cuquantum/python/api/generated/cuquantum.contract.html
The output is to be used by cuQuantum’s contract() for computation of the state vectors of the circuit.
- expectation_operands(ham_gates)#
Create the operands for pauli string expectation computation in the interleave format.
- Parameters:
ham_gates – A list of gates derived from Qibo hamiltonian object.
- Returns:
Operands for the contraction in the interleave format.
- get_pauli_gates(pauli_map, dtype='complex128', backend=cupy)#
Populate the gates for all pauli operators.
- Parameters:
pauli_map – A dictionary mapping qubits to pauli operators.
dtype – Data type for the tensor operands.
backend – The package the tensor operands belong to.
- Returns:
A sequence of pauli gates.
- init_basis_map(backend, dtype)#
Initialize the basis map for the quantum circuit.
This method initializes a basis map for the quantum circuit, which maps binary strings representing qubit states to their corresponding quantum state vectors.
- Parameters:
backend (object) – The backend object providing the array conversion method.
dtype (object) – The data type for the quantum state vectors.
- init_intermediate_circuit(circuit)#
Initialize the intermediate circuit representation.
This method initializes the intermediate circuit representation by extracting gate matrices and qubit IDs from the given quantum circuit.
- Parameters:
circuit (object) – The quantum circuit object.
- init_inverse_circuit(circuit)#
Initialize the inverse circuit representation.
This method initializes the inverse circuit representation by extracting gate matrices and qubit IDs from the given quantum circuit.
- Parameters:
circuit (object) – The quantum circuit object.
- op_shape_from_qubits(nqubits)#
Modify tensor to cuQuantum shape.
- Parameters:
nqubits (int) – The number of qubits in quantum circuit.
- Returns:
(qubit_states,input_output) * nqubits
- state_vector_operands()#
Create the operands for dense vector computation in the interleave format.
- Returns:
Operands for the contraction in the interleave format.
qibotn.circuit_to_mps module#
- class qibotn.circuit_to_mps.QiboCircuitToMPS(circ_qibo, gate_algo, dtype='complex128', rand_seed=0)#
Bases:
object
A helper class to convert Qibo circuit to MPS.
- Parameters:
circ_qibo – The quantum circuit object.
gate_algo (dict) – Dictionary for SVD and QR settings.
datatype (str) – Either single (“complex64”) or double (complex128) precision.
rand_seed (int) – Seed for random number generator.
qibotn.eval module#
qibotn.eval_qu module#
- qibotn.eval_qu.dense_vector_tn_qu(qasm: str, initial_state, mps_opts, backend='numpy')#
Evaluate circuit in QASM format with Quimb.
- Parameters:
qasm (str) – QASM program.
initial_state (list) – Initial state in the dense vector form. If
None
the default|00...0>
state is used.mps_opts (dict) – Parameters to tune the gate_opts for mps settings in
class quimb.tensor.circuit.CircuitMPS
.backend (str) – Backend to perform the contraction with, e.g.
numpy
,cupy
,jax
. Passed toopt_einsum
.
- Returns:
Amplitudes of final state after the simulation of the circuit.
- Return type:
list
- qibotn.eval_qu.init_state_tn(nqubits, init_state_sv)#
Create a matrix product state directly from a dense vector.
- Parameters:
nqubits (int) – Total number of qubits in the circuit.
init_state_sv (list) – Initial state in the dense vector form.
- Returns:
Matrix product state representation of the dense vector.
- Return type:
list
qibotn.mps_contraction_helper module#
- class qibotn.mps_contraction_helper.MPSContractionHelper(num_qubits)#
Bases:
object
A helper class to compute various quantities for a given MPS.
Interleaved format is used to construct the input args for cuquantum.contract.
The following compute quantities are supported:
the norm of the MPS.
the equivalent state vector from the MPS.
the expectation value for a given operator.
the equivalent state vector after multiplying an MPO to an MPS.
- Parameters:
num_qubits – The number of qubits for the MPS.
- contract_expectation(mps_tensors, operator, qubits, options=None, normalize=False)#
Contract the corresponding tensor network to form the expectation of the MPS.
- Parameters:
mps_tensors – A list of rank-3 ndarray-like tensor objects. The indices of the ith tensor are expected to be bonding index to the i-1 tensor, the physical mode, and then the bonding index to the i+1th tensor.
operator – A ndarray-like tensor object. The modes of the operator are expected to be output qubits followed by input qubits, e.g,
A, B, a, b
where a, b denotes the inputs and A, B’ denotes the outputs.qubits – A sequence of integers specifying the qubits that the operator is acting on.
options – Specify the contract and decompose options.
normalize – Whether to scale the expectation value by the normalization factor.
- Returns:
An ndarray-like object as the state vector.
- contract_norm(mps_tensors, options=None)#
Contract the corresponding tensor network to form the norm of the MPS.
- Parameters:
mps_tensors – A list of rank-3 ndarray-like tensor objects. The indices of the ith tensor are expected to be bonding index to the i-1 tensor, the physical mode, and then the bonding index to the i+1th tensor.
options – Specify the contract and decompose options.
- Returns:
The norm of the MPS.
- contract_state_vector(mps_tensors, options=None)#
Contract the corresponding tensor network to form the state vector representation of the MPS.
- Parameters:
mps_tensors – A list of rank-3 ndarray-like tensor objects. The indices of the ith tensor are expected to be bonding index to the i-1 tensor, the physical mode, and then the bonding index to the i+1th tensor.
options – Specify the contract and decompose options.
- Returns:
An ndarray-like object as the state vector.
qibotn.mps_utils module#
- qibotn.mps_utils.apply_gate(mps_tensors, gate, qubits, **kwargs)#
Apply the gate operand to the MPS tensors in-place.
# Reference: https://github.com/NVIDIA/cuQuantum/blob/main/python/samples/cutensornet/tn_algorithms/mps_algorithms.ipynb
- Parameters:
mps_tensors – A list of rank-3 ndarray-like tensor objects. The indices of the ith tensor are expected to be the bonding index to the i-1 tensor, the physical mode, and then the bonding index to the i+1th tensor.
gate – A ndarray-like tensor object representing the gate operand. The modes of the gate is expected to be output qubits followed by input qubits, e.g,
A, B, a, b
wherea, b
denotes the inputs andA, B
denotes the outputs.qubits – A sequence of integers denoting the qubits that the gate is applied onto.
algorithm – The contract and decompose algorithm to use for gate application. Can be either a dict or a ContractDecomposeAlgorithm.
options – Specify the contract and decompose options.
- Returns:
The updated MPS tensors.
- qibotn.mps_utils.initial(num_qubits, dtype)#
Generate the MPS with an initial state of \(\ket{00...00}\)
- Parameters:
num_qubits – Number of qubits in the Quantum Circuit.
dtype – Either single (“complex64”) or double (complex128) precision.
- Returns:
The initial MPS tensors.
- qibotn.mps_utils.mps_site_right_swap(mps_tensors, i, **kwargs)#
Perform the swap operation between the ith and i+1th MPS tensors.
- Parameters:
mps_tensors – Tensors representing MPS
i (int) – index of the tensor to swap
- Returns:
The updated MPS tensors.
qibotn.result module#
- class qibotn.result.TensorNetworkResult(nqubits: int, backend: QibotnBackend, measures: dict, measured_probabilities: Union[dict, ndarray], prob_type: str, statevector: ndarray)#
Bases:
object
Object to store and process the output of a Tensor Network simulation of a quantum circuit.
- Parameters:
nqubits (int) – number of qubits involved in the simulation;
backend (QibotnBackend) – specific backend on which the simulation has been performed;
measures (dict) – measures (if performed) during the tensor network simulation;
measured_probabilities (Union[dict, ndarray]) – probabilities of the final state according to the simulation;
prob_type (str) – string identifying the method used to compute the probabilities. Especially useful in case the QmatchateaBackend is selected.
statevector (ndarray) – if computed, the reconstructed statevector.
- backend: QibotnBackend#
- frequencies()#
Return frequencies if a certain number of shots has been set.
- measured_probabilities: Union[dict, ndarray]#
- measures: dict#
- nqubits: int#
- prob_type: str#
- probabilities()#
Return calculated probabilities according to the given method.
- state()#
Return the statevector if the number of qubits is less than 20.
- statevector: ndarray#