cuquantum.CircuitToEinsum¶
- class cuquantum.CircuitToEinsum(circuit, dtype='complex128', backend='cupy')[source]¶
Create a converter object that can generate Einstein summation expressions and tensor operands for a given circuit.
The supported circuit types include
cirq.Circuit
andqiskit.QuantumCircuit
. The input circuit must be fully parameterized and can not contain operations that are not well-defined in tensor network simulation, for instance, resetting the quantum state or performing any intermediate measurement.- Parameters
circuit – A fully parameterized
cirq.Circuit
orqiskit.QuantumCircuit
object.dtype – The datatype for the output tensor operands. If not specified, double complex is used.
backend – The backend for the output tensor operands. If not specified,
cupy
is used.
Note
For
qiskit.QuantumCircuit
, composite gates will be decomposed into either Qiskit standard gates or customized unitary gates.
Examples
Examples using Qiskit:
>>> import qiskit.circuit.random >>> from cuquantum import contract, CircuitToEinsum
Generate a random quantum circuit:
>>> qc = qiskit.circuit.random.random_circuit(num_qubits=8, depth=7)
Create a
CircuitToEinsum
object:>>> converter = CircuitToEinsum(qc, backend='cupy')
Find the Einstein summation expression and tensor operands for the state vector:
>>> expression, operands = converter.state_vector()
Contract the equation above to compute the state vector:
>>> sv = contract(expression, *operands) >>> print(sv.shape) (2, 2, 2, 2, 2, 2, 2, 2)
Find the Einstein summation expression and tensor operands for computing the probability amplitude of bitstring 00000000:
>>> expression, operands = converter.amplitude('00000000')
Contract the equation above to compute the amplitude:
>>> amplitude = contract(expression, *operands)
Find the Einstein summation expression and tensor operands for computing reduced density matrix on the first two qubits with the condition that the last qubit is fixed at state
1
:>>> where = qc.qubits[:2] >>> fixed = {qc.qubits[-1]: '1'} >>> expression, operands = converter.reduced_density_matrix(where, fixed=fixed)
Contract the equation above to compute the reduced density matrix:
>>> rdm = contract(expression, *operands) >>> print(rdm.shape) (2, 2, 2, 2)
Methods
- amplitude(bitstring)[source]¶
Generate the Einstein summation expression and tensor operands to compute the probability amplitude of a bitstring for the input circuit.
- Parameters
bitstring – A sequence of 0/1 specifying the desired measured state. The order of the bitstring is expected to be consistent with
CircuitToEinsum.qubits
. Forcirq.Circuit
, this order corresponds to all qubits in the circuit sorted in ascending order. Forqiskit.QuantumCircuit
, this order is the same asqiskit.QuantumCircuit.qubits
.- Returns
The Einstein summation expression and a list of tensor operands
- batched_amplitudes(fixed)[source]¶
Generate the Einstein summation expression and tensor operands to compute a batch of bitstring amplitudes for the input circuit.
- Parameters
fixed – A dictionary that maps certain qubits to the corresponding fixed states 0 or 1.
- Returns
The Einstein summation expression and a list of tensor operands. The order of the output mode labels is consistent with
CircuitToEinsum.qubits
. Forcirq.Circuit
, this order corresponds to all qubits in the circuit sorted in ascending order. Forqiskit.QuantumCircuit
, this order is the same asqiskit.QuantumCircuit.qubits
.
- expectation(pauli_string, lightcone=True)[source]¶
Generate the Einstein summation expression and tensor operands to compute the expectation value of a Pauli string for the input circuit.
Unitary reverse lightcone cancellation refers to removing the identity formed by a unitary gate (from the ket state) and its inverse (from the bra state) when there exists no additional operators in-between. One can take advantage of this technique to reduce the effective network size by only including the causal gates (gates residing in the lightcone).
- Parameters
pauli_string –
The Pauli string for expectation value computation. It can be:
a sequence of characters
'I'
/'X'
/'Y'
/'Z'
. The length must be equal to the number of qubits.a dictionary mapping the selected qubits to Pauli characters. Qubits not specified are assumed to be applied with the identity operator
'I'
.
lightcone – Whether to apply the unitary reverse lightcone cancellation technique to reduce the number of tensors in expectation value computation.
- Returns
The Einstein summation expression and a list of tensor operands.
Note
When
lightcone=True
, the identity Pauli operators will be omitted in the output operands. The unitary reverse lightcone cancellation technique is then applied based on the remaining causal qubits to further reduce the size of the network. The reduction effect depends on the circuit topology and the input Pauli string (so the contraction path cannot be reused for the contraction of different Pauli strings). Whenlightcone=False
, the identity Pauli operators are preserved in the output operands such that the output tensor network has the identical topology for different Pauli strings, and the contraction path only needs to be computed once and can be reused for all Pauli strings.
- reduced_density_matrix(where, fixed=None, lightcone=True)[source]¶
Generate the Einstein summation expression and tensor operands to compute the reduced density matrix for the input circuit.
Unitary reverse lightcone cancellation refers to removing the identity formed by a unitary gate (from the ket state) and its inverse (from the bra state) when there exists no additional operators in-between. One can take advantage of this technique to reduce the effective network size by only including the causal gates (gates residing in the lightcone).
- Parameters
where – A sequence of qubits specifying where the density matrix are reduced onto.
fixed – Optional, a dictionary that maps certain qubits to the corresponding fixed states 0 or 1.
lightcone – Whether to apply the unitary reverse lightcone cancellation technique to reduce the number of tensors in density matrix computation.
- Returns
The Einstein summation expression and a list of tensor operands. The mode labels for output of the expression has the same order as the where argument. For example, if where = (\(a, b\)), the mode labels for the reduced density matrix would be (\(a, b, a^{\prime}, b^{\prime}\))
- state_vector()[source]¶
Generate the Einstein summation expression and tensor operands to compute the statevector for the input circuit.
- Returns
The Einstein summation expression and a list of tensor operands. The order of the output mode labels is consistent with
CircuitToEinsum.qubits
. Forcirq.Circuit
, this order corresponds to all qubits in the circuit sorted in ascending order. Forqiskit.QuantumCircuit
, this order is the same asqiskit.QuantumCircuit.qubits
.
Attributes
- gates¶
A sequence of 2-tuple (
gate_operand
,qubits
) representing all gates in the circuit:- Returns
gate_operand
: A ndarray-like tensor object. The modes of the operands are ordered asAB...ab...
, whereAB...
denotes all output modes andab...
denotes all input modes.qubits
: A list of arrays corresponding to all the qubits and gate tensor operands.
- Return type
- qubits¶
A sequence of all qubits in the circuit.