tensorcircuit.translation#

Circuit object translation in different packages

tensorcircuit.translation.ctrl_str2ctrl_state(ctrl_str: str, nctrl: int) List[int][源代码]#
tensorcircuit.translation.eqasm2tc(eqasm: str, nqubits: Optional[int] = None, headers: Tuple[int, int] = (6, 1)) tensorcircuit.circuit.Circuit[源代码]#

Translation qexe/eqasm instruction to tensorcircuit Circuit object

参数
  • 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)

返回

_description_

返回类型

Circuit

tensorcircuit.translation.json2qir(tcqasm: List[Dict[str, Any]]) List[Dict[str, Any]][源代码]#
tensorcircuit.translation.json_to_tensor(a: Any) Any[源代码]#
tensorcircuit.translation.perm_matrix(n: int) Any[源代码]#

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

参数

n (int) -- # of qubits

返回

The permutation matrix P

返回类型

Tensor

tensorcircuit.translation.qir2cirq(qir: List[Dict[str, Any]], n: int, extra_qir: Optional[List[Dict[str, Any]]] = None) Any[源代码]#

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───
参数
  • 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

返回

qiskit cirq object

返回类型

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]][源代码]#

transform qir to json compatible list of dict where array is replaced by real and imaginary list

参数
  • 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

返回

_description_

返回类型

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[源代码]#

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)], [])]
参数
  • 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

返回

qiskit QuantumCircuit object

返回类型

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[源代码]#

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
参数
  • 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 or MPSCircuit

  • 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. For Parameter use dictionary

返回

A quantum circuit in tensorcircuit

返回类型

Any

tensorcircuit.translation.qiskit_from_qasm_str_ordered_measure(qasm_str: str) Any[源代码]#

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

参数

qasm_str (str) -- open qasm str

返回

qiskit.circuit.QuantumCircuit

返回类型

Any

tensorcircuit.translation.tensor_to_json(a: Any) Any[源代码]#