qml.qchem.excitations_to_wires

excitations_to_wires(singles, doubles, wires=None)[source]

Map the indices representing the single and double excitations generated with the function excitations() to the wires that the Unitary Coupled-Cluster (UCCSD) template will act on.

Parameters
  • singles (list[list[int]]) – list with the indices r, p of the two qubits representing the single excitation \(\vert r, p \rangle = \hat{c}_p^\dagger \hat{c}_r \vert \mathrm{HF}\rangle\)

  • doubles (list[list[int]]) – list with the indices s, r, q, p of the four qubits representing the double excitation \(\vert s, r, q, p \rangle = \hat{c}_p^\dagger \hat{c}_q^\dagger \hat{c}_r \hat{c}_s \vert \mathrm{HF}\rangle\)

  • wires (Iterable[Any]) – Wires of the quantum device. If None, will use consecutive wires.

The indices \(r, s\) and \(p, q\) in these lists correspond, respectively, to the occupied and virtual orbitals involved in the generated single and double excitations.

Returns

lists with the sequence of wires, resulting from the single and double excitations, that the Unitary Coupled-Cluster (UCCSD) template will act on.

Return type

tuple[list[list[Any]], list[list[list[Any]]]]

Example

>>> singles = [[0, 2], [1, 3]]
>>> doubles = [[0, 1, 2, 3]]
>>> singles_wires, doubles_wires = excitations_to_wires(singles, doubles)
>>> print(single_wires)
[[0, 1, 2], [1, 2, 3]]
>>> print(doubles_wires)
[[[0, 1], [2, 3]]]
>>> wires=['a0', 'b1', 'c2', 'd3']
>>> singles_wires, doubles_wires = excitations_to_wires(singles, doubles, wires=wires)
>>> print(singles_wires)
[['a0', 'b1', 'c2'], ['b1', 'c2', 'd3']]
>>> print(doubles_wires)
[[['a0', 'b1'], ['c2', 'd3']]]