@@ -75,9 +75,6 @@ The :code:`molecule_options` structure provides extensive configuration for mole
7575+---------------------+---------------+------------------+------------------------------------------+
7676| integrals_casscf | bool | false | Use CASSCF orbitals for integrals |
7777+---------------------+---------------+------------------+------------------------------------------+
78- | potfile | optional | nullopt | Path to external potential file |
79- | | <string> | | |
80- +---------------------+---------------+------------------+------------------------------------------+
8178| verbose | bool | false | Enable detailed output logging |
8279+---------------------+---------------+------------------+------------------------------------------+
8380
@@ -495,12 +492,32 @@ Available Operator Pools
495492
496493CUDA-QX provides several pre-built operator pools for ADAPT-VQE:
497494
498- * **spin_complement_gsd **: Spin-complemented generalized singles and doubles
499- * **uccsd **: UCCSD operators
495+ * **spin_complement_gsd **: Spin-complemented generalized singles and doubles.
496+ This operator pool combines generalized excitations with enforced spin symmetry. It is
497+ more powerful than UCCSD because its generalized operators capture more electron correlation,
498+ and it is more reliable than both UCCSD and UCCGSD because its spin-complemented
499+ construction prevents the unphysical "spin-symmetry breaking".
500+ * **uccsd **: UCCSD operators.
501+ The standard, chemically-inspired ansatz. Excitation Space
502+ is Restricted. It only includes single and double excitations
503+ where electrons move from a reference-occupied orbital (i)
504+ to a reference-virtual orbital (a),
505+ relative to the starting Hartree-Fock state. Excellent at capturing dynamic correlation
506+ (short-range, instantaneous electron interactions).
507+ * **uccgsd **: UCC generalized singles and doubles.
508+ More expressive than UCCSD, as it includes all possible
509+ single and double excitations, regardless of their occupied/virtual status in the reference state.
510+ Capable of capturing both dynamic and static (strong) correlation
511+ but at the cost of increased circuit depth and parameter count.
500512* **qaoa **: QAOA mixer excitation operators
501-
513+ It generates all possible single-qubit X and Y terms, along with all possible
514+ two-qubit interaction terms (XX, YY, XY, YX, XZ, ZX, YZ, ZY) across every pair of qubits.
515+ This pool offers a rich basis for constructing the mixer Hamiltonian for ADAPT-QAOA algorithms.
516+
502517.. code-block :: python
503518
519+ import cudaq_solvers as solvers
520+
504521 # Generate different operator pools
505522 gsd_ops = solvers.get_operator_pool(
506523 " spin_complement_gsd" ,
@@ -513,6 +530,60 @@ CUDA-QX provides several pre-built operator pools for ADAPT-VQE:
513530 num_electrons = molecule.n_electrons
514531 )
515532
533+ uccgsd_ops = solvers.get_operator_pool(
534+ " uccgsd" ,
535+ num_orbitals = molecule.n_orbitals
536+ )
537+
538+ Available Ansatz
539+ ^^^^^^^^^^^^^^^^^^
540+
541+ CUDA-QX provides several state preparations ansatz for VQE.
542+
543+ * **uccsd **: UCCSD operators
544+ * **uccgsd **: UCC generalized singles and doubles
545+
546+ .. code-block :: python
547+
548+ import cudaq_solvers as solvers
549+
550+ # Using UCCSD ansatz
551+ geometry = [(' H' , (0 ., 0 ., 0 .)), (' H' , (0 ., 0 ., .7474 ))]
552+ molecule = solvers.create_molecule(geometry, ' sto-3g' , 0 , 0 , casci = True )
553+
554+ numQubits = molecule.n_orbitals * 2
555+ numElectrons = molecule.n_electrons
556+ spin = 0
557+
558+ @cudaq.kernel
559+ def ansatz (thetas : list[float ]):
560+ q = cudaq.qvector(numQubits)
561+ for i in range (numElectrons):
562+ x(q[i])
563+ solvers.stateprep.uccsd(q, thetas, numElectrons, spin)
564+
565+
566+ # Using UCCGSD ansatz
567+ geometry = [(' H' , (0 ., 0 ., 0 .)), (' H' , (0 ., 0 ., .7474 ))]
568+ molecule = solvers.create_molecule(geometry, ' sto-3g' , 0 , 0 , casci = True )
569+
570+ numQubits = molecule.n_orbitals * 2
571+ numElectrons = molecule.n_electrons
572+
573+ # Get grouped Pauli words and coefficients from UCCGSD pool
574+ pauliWordsList, coefficientsList = solvers.stateprep.get_uccgsd_pauli_lists(
575+ numQubits, only_singles = False , only_doubles = False )
576+
577+ @cudaq.kernel
578+ def ansatz (numQubits : int , numElectrons : int , thetas : list[float ],
579+ pauliWordsList : list[list[cudaq.pauli_word]],
580+ coefficientsList : list[list[float ]]):
581+ q = cudaq.qvector(numQubits)
582+ for i in range (numElectrons):
583+ x(q[i])
584+ solvers.stateprep.uccgsd(q, thetas, pauliWordsList, coefficientsList)
585+
586+
516587 Algorithm Parameters
517588^^^^^^^^^^^^^^^^^^^^^^
518589
0 commit comments