Custom Ansatz

slowquant.qiskit_interface.custom_ansatz.SDSfUCC(num_orbs: int, num_elec: tuple[int, int], mapper: FermionicMapper, ansatz_options: dict[str, Any]) tuple[QuantumCircuit, dict[str, int]]

Create SDS ordered factorized UCC.

The operator ordering of this implementation is,

\[\boldsymbol{U}\left|\text{CSF}\right> = \prod_{ijab}\exp\left(\theta_{jb}\left(\hat{T}_{jb}-\hat{T}_{jb}^\dagger\right)\right) \exp\left(\theta_{ijab}\left(\hat{T}_{ijab}-\hat{T}_{ijab}^\dagger\right)\right) \exp\left(\theta_{ia}\left(\hat{T}_{ia}-\hat{T}_{ia}^\dagger\right)\right)\left|\text{CSF}\right>\]
  1. 10.1063/1.5133059, Eq. 25, Eq. 35 (SDS)

  2. 10.1103/PhysRevA.102.062612 (efficient circuits for JW)

  3. 10.1021/acs.jctc.8b01004 (k-UpCCGSD)

Ansatz Options:
  • n_layers [int]: Number of layers.

  • D [bool]: Add double excitations.

  • pD [bool]: Add pair double excitations.

  • GpD [bool]: Add generalized pair double excitations.

Parameters:
  • num_orbs – Number of spatial orbitals.

  • num_elec – Number of alpha and beta electrons.

  • mapper – Fermioinc to qubit mapper.

  • ansatz_options – Ansatz options.

Returns:

SDS ordered fUCC ansatz circuit and R parameters needed for gradients.

slowquant.qiskit_interface.custom_ansatz.fUCC(num_orbs: int, num_elec: tuple[int, int], mapper: FermionicMapper, ansatz_options: dict[str, Any]) tuple[QuantumCircuit, dict[str, int]]

Create factorized UCC ansatz.

  1. 10.1103/PhysRevA.102.062612 (efficient circuits for JW)

  2. 10.1021/acs.jctc.8b01004 (k-UpCCGSD)

Ansatz Options:
  • n_layers [int]: Number of layers.

  • S [bool]: Add single excitations.

  • SAS [bool]: Add spin-adapted single excitations.

  • SAGS [bool]: Add generalized spin-adapted single excitations.

  • D [bool]: Add double excitations.

  • pD [bool]: Add pair double excitations.

  • GpD [bool]: Add generalized pair double excitations.

Parameters:
  • num_orbs – Number of spatial orbitals.

  • num_elec – Number of alpha and beta electrons.

  • mapper – Fermioinc to qubit mapper.

  • ansatz_options – Ansatz options.

Returns:

Factorized UCC ansatz circuit and R parameters needed for gradients.

slowquant.qiskit_interface.custom_ansatz.tUPS(num_orbs: int, num_elec: tuple[int, int], mapper: FermionicMapper, ansatz_options: dict[str, Any]) tuple[QuantumCircuit, dict[str, int]]

Create tUPS ansatz.

  1. 10.1103/PhysRevResearch.6.023300 (tUPS)

  2. 10.1088/1367-2630/ac2cb3 (QNP)

Ansatz Options:
  • n_layers [int]: Number of layers.

  • do_pp [bool]: Do perfect pairing. (default: False)

  • do_qnp [bool]: Do QNP tiling. (default: False)

  • skip_last_singles [bool]: Skip last layer of singles operators. (default: False)

Parameters:
  • num_orbs – Number of spatial orbitals.

  • num_elec – Number of alpha and beta electrons.

  • mapper – Fermionic to qubit mapper.

  • ansatz_options – Ansatz options.

Returns:

tUPS ansatz circuit and R parameters needed for gradients.