tensorcircuit.translationΒΆ

Circuit object translation in different packages

tensorcircuit.translation.cirq2tc(qc: Any, n: int | None = None, inputs: List[float] | None = None, is_dm: bool = False, circuit_constructor: Any = None, circuit_params: Dict[str, Any] | None = None) Any[source]ΒΆ

Generate a tensorcircuit circuit from the cirq circuit.

Parameters:
  • qc (cirq.Circuit) – A quantum circuit in cirq

  • n (Optional[int], optional) – # of qubits, defaults to None

  • inputs (Optional[List[float]], optional) – Input state of the circuit, defaults to None

  • is_dm (bool, optional) – whether to use DMCircuit, defaults to False

  • circuit_constructor (Any, optional) – circuit class to construct (e.g. Circuit or DMCircuit), defaults to None (inferred from is_dm)

  • circuit_params (Optional[Dict[str, Any]], optional) – keyword arguments passed to the circuit constructor, defaults to None

Returns:

the converted tensorcircuit circuit

Return type:

Any

tensorcircuit.translation.ctrl_str2ctrl_state(ctrl_str: str, nctrl: int) List[int][source]ΒΆ
tensorcircuit.translation.eqasm2tc(eqasm: str, nqubits: int | None = None, headers: Tuple[int, int] = (6, 1)) Circuit[source]ΒΆ

Translation qexe/eqasm instruction to tensorcircuit Circuit object

Parameters:
  • eqasm (str) – qexe/eqasm instruction string

  • nqubits (Optional[int], optional) – number of qubits, defaults to None (parsed from the eqasm header)

  • headers (Tuple[int, int], optional) – lines of ignored code at the head and the tail, defaults to (6, 1)

Returns:

the converted tensorcircuit Circuit

Return type:

Circuit

tensorcircuit.translation.get_qiskit_qasm(qc: Any) str[source]ΒΆ
tensorcircuit.translation.json2qir(tcqasm: List[Dict[str, Any]]) List[Dict[str, Any]][source]ΒΆ
tensorcircuit.translation.json_to_tensor(a: Any) Any[source]ΒΆ
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: List[Dict[str, Any]] | None = 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:

A cirq.Circuit object.

Return type:

Any

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]]) – the quantum intermediate representation of a circuit

  • 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:

json-compatible list of dicts (complex arrays split into real/imaginary lists)

Return type:

List[Dict[str, Any]]

tensorcircuit.translation.qir2qiskit(qir: List[Dict[str, Any]], n: int, extra_qir: List[Dict[str, Any]] | None = None, initialization: Any | None = 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(qc: Any, n: int, inputs: List[float] | None = None, is_dm: bool = False, circuit_constructor: Any = None, circuit_params: Dict[str, Any] | None = None, binding_params: Sequence[float] | Dict[Any, float] | None = None) Any[source]ΒΆ

Generate a tensorcircuit circuit from the qiskit circuit.

Example:

>>> qisc = QuantumCircuit(2)
>>> qisc.h(0)
>>> qisc.x(1)
>>> qc = tc.translation.qiskit2tc(qisc, 2)
>>> qc.to_qir()[0]['gatef']
Parameters:
  • qc (QuantumCircuit) – A quantum circuit in qiskit.

  • n (int) – # of qubits

  • inputs (Optional[List[float]]) – Input state of the circuit. Default is None.

  • circuit_constructor (Any) – 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.

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

tensorcircuit.translation.stim2tc(stim_circuit: Any, n: int | None = None, is_dm: bool = False, circuit_constructor: Any = None, circuit_params: Dict[str, Any] | None = None) Any[source]ΒΆ

Generate a tensorcircuit circuit from the stim circuit.

Parameters:
  • stim_circuit (stim.Circuit) – A quantum circuit in stim

  • n (Optional[int], optional) – # of qubits, defaults to None

  • is_dm (bool, optional) – whether to use DMCircuit, defaults to False

  • circuit_constructor (Any, optional) – circuit class to construct (e.g. Circuit or DMCircuit), defaults to None (inferred from is_dm)

  • circuit_params (Optional[Dict[str, Any]], optional) – keyword arguments passed to the circuit constructor, defaults to None

Returns:

the converted tensorcircuit circuit

Return type:

Any

tensorcircuit.translation.tensor_to_json(a: Any) Any[source]ΒΆ