# Ansatzes¶

Generally, an ansatz represents a state, with parameters to be optimized as part of a variational algorithm in order to find accurate approximations to ground and/or excited states. An ansatz class in InQuanto handles generation of a single circuit that can prepare the ansatz state on a quantum device, as well as manipulation of its parameters (such as symbol substitution or evaluation), keeping track of the number of qubits over which an ansatz is defined, managing reference state, and conversion of an underlying circuit into symbolic and numeric representations.

InQuanto provides a range of ansatzes for the simulation of molecules and solid state systems. The ansatz classes comprise the chemically-inspired approaches constituting the Unitary Coupled Cluster (UCC) ansatz family which includes the specially optimized Chemically Aware Ansatz; or, the less physically motivated Hardware Efficient Ansatz (HEA), which has lower resource requirements when running on quantum hardware.

Many ansatzes (such as non-generalized Unitary Coupled Cluster (UCC)) are single-reference, as they must be applied to a simple product-type (Hartree-Fock) state (i.e. a single configuration in Hilbert space). InQuanto however also contains a method which can treat Multiconfigurational States using Givens rotations, allowing the user to essentially perform Configuration Interaction at the quantum circuit level: prepare a circuit in a specified multi-configurational state with the configuration coefficients controlled by gate rotation angles. Finally, there is a Real Basis Rotation Ansatz, encoding a unitary rotation of an arbitrary basis - an important building block for many algorithms.

In addition, InQuanto provides tools for a user to construct their own ansatzes, either by using
some of the intermediate base classes, such as Trotter Ansatz and Fermionic Exponentiated Ansatz,
combining various ansatz classes using Composed Ansatz, wrapping an externally-provided
circuit in a Circuit Ansatz, or even implementing their own ansatz class, using InQuanto’s
abstract `GeneralAnsatz`

class.

## Trotter based¶

## Basic ansatz¶

## Other Ansatz¶

Finally, InQuanto contains classes for representing the Parameters used to specify ansatzes – these contain methods for the easy construction and manipulation of parameter sets.