tensorcircuit.translation#
Circuit object translation in different packages
- tensorcircuit.translation.eqasm2tc(eqasm: str, nqubits: Optional[int] = None, headers: Tuple[int, int] = (6, 1)) tensorcircuit.circuit.Circuit [source]#
Translation qexe/eqasm instruction to tensorcircuit Circuit object
- Parameters
eqasm (str) β _description_
nqubits (Optional[int], optional) β _description_, defaults to None
headers (Tuple[int, int], optional) β lines of ignored code at the head and the tail, defaults to (6, 1)
- Returns
_description_
- Return type
- tensorcircuit.translation.perm_matrix(n: int) Any [source]#
Generate a permutation matrix P. Due to the different convention or qubitsβ order in qiskit and tensorcircuit, the unitary represented by the same circuit is different. They are related by this permutation matrix P: P @ U_qiskit @ P = U_tc
- Parameters
n (int) β # of qubits
- Returns
The permutation matrix P
- Return type
Tensor
- tensorcircuit.translation.qir2cirq(qir: List[Dict[str, Any]], n: int, extra_qir: Optional[List[Dict[str, Any]]] = None) Any [source]#
Generate a cirq circuit using the quantum intermediate representation (qir) in tensorcircuit.
- Example
>>> c = tc.Circuit(2) >>> c.H(1) >>> c.X(1) >>> cisc = tc.translation.qir2cirq(c.to_qir(), 2) >>> print(cisc) 1: βββHβββXβββ
- Parameters
qir (List[Dict[str, Any]]) β The quantum intermediate representation of a circuit.
n (int) β # of qubits
extra_qir (Optional[List[Dict[str, Any]]]) β The extra quantum IR of tc circuit including measure and reset on hardware, defaults to None
- Returns
qiskit cirq object
- Return type
Any
#TODO(@erertertet): add default theta to iswap gate add more cirq built-in gate instead of customized add unitary test with tolerance add support of cirq built-in ControlledGate for multiplecontroll support more element in qir, e.g. barrier, measureβ¦
- tensorcircuit.translation.qir2json(qir: List[Dict[str, Any]], simplified: bool = False) List[Dict[str, Any]] [source]#
transform qir to json compatible list of dict where array is replaced by real and imaginary list
- Parameters
qir (List[Dict[str, Any]]) β _description_
simplified (bool) β If False, keep all info for each gate, defaults to be False. If True, suitable for IO since less information is required
- Returns
_description_
- Return type
List[Dict[str, Any]]
- tensorcircuit.translation.qir2qiskit(qir: List[Dict[str, Any]], n: int, extra_qir: Optional[List[Dict[str, Any]]] = None, initialization: Optional[Any] = None) Any [source]#
Generate a qiskit quantum circuit using the quantum intermediate representation (qir) in tensorcircuit.
- Example
>>> c = tc.Circuit(2) >>> c.H(1) >>> c.X(1) >>> qisc = tc.translation.qir2qiskit(c.to_qir(), 2) >>> qisc.data [(Instruction(name='h', num_qubits=1, num_clbits=0, params=[]), [Qubit(QuantumRegister(2, 'q'), 1)], []), (Instruction(name='x', num_qubits=1, num_clbits=0, params=[]), [Qubit(QuantumRegister(2, 'q'), 1)], [])]
- Parameters
qir (List[Dict[str, Any]]) β The quantum intermediate representation of a circuit.
n (int) β # of qubits
extra_qir (Optional[List[Dict[str, Any]]]) β The extra quantum IR of tc circuit including measure and reset on hardware, defaults to None
initialization (Optional[Tensor]) β Circuit initial state in qiskit format
- Returns
qiskit QuantumCircuit object
- Return type
Any
- tensorcircuit.translation.qiskit2tc(qcdata: List[Any], n: int, inputs: Optional[List[float]] = None, is_dm: bool = False, circuit_constructor: Optional[Any] = None, circuit_params: Optional[Dict[str, Any]] = None, binding_params: Optional[Union[Sequence[float], Dict[Any, float]]] = None) Any [source]#
Generate a tensorcircuit circuit using the quantum circuit data in qiskit.
- Example
>>> qisc = QuantumCircuit(2) >>> qisc.h(0) >>> qisc.x(1) >>> qc = tc.translation.qiskit2tc(qisc.data, 2) >>> qc.to_qir()[0]['gatef'] h
- Parameters
qcdata (List[CircuitInstruction]) β Quantum circuit data from qiskit.
n (int) β # of qubits
inputs (Optional[List[float]]) β Input state of the circuit. Default is None.
circuit_constructor β
Circuit
,DMCircuit
orMPSCircuit
circuit_params (Optional[Dict[str, Any]]) β kwargs given in Circuit.__init__ construction function, default to None.
binding_params (Optional[Union[Sequence[float], Dict[Any, float]]]) β (variational) parameters for the circuit. Could be either a sequence or dictionary depending on the type of parameters in the Qiskit circuit. For
ParameterVectorElement
use sequence. ForParameter
use dictionary
- Returns
A quantum circuit in tensorcircuit
- Return type
Any
- tensorcircuit.translation.qiskit_from_qasm_str_ordered_measure(qasm_str: str) Any [source]#
qiskit
from_qasm_str
method cannot keep the order of measure as the qasm file, we provide this alternative function in case the order of measure instruction matters- Parameters
qasm_str (str) β open qasm str
- Returns
qiskit.circuit.QuantumCircuit
- Return type
Any