Protocols represent low-level strategies through which useful quantities such as expectation values, phases, overlaps, fidelities, and derivatives can be calculated and measured using quantum circuits. Protocols can also provide evaluator functions to computables and algorithms which work based on real measurements, statevector or shot-based simulations. Moreover, they can work together with noise mitigation methods, provide resource estimation, and apply measurement optimization. While some protocols are multifunctional, others are highly specialized in computing a single quantity.

Crucially, protocols are the entry point for defining the backend device on which to run experiments. InQuanto makes use of the pytket backend class, and supports the use of third-party backends through pytket extensions.

Generally, protocols fall into three major categories:

1. Statevector Protocols: These protocols, such as SparseStatevectorProtocol or SymbolicProtocol, calculate quantities that can be expressed in the form of \(\langle \text{bra} | \text{operator} | \text{ket} \rangle\), where the \(\langle \text{bra}|\) and \(| \text{ket} \rangle\) states internally will be represented as statevectors.

2. Averaging Protocols: These protocols build measurement circuits for Pauli strings, typically averaging over the distributions retrieved from a quantum device or simulator. Examples include PauliAveraging and HadamardTest. These protocols are specialized for one or only a few quantities. For instance, PauliAveraging calculates expectation values.

3. Quantum Phase Estimation Protocols: These come in various flavors, including those for the construction of canonical and iterative phase estimation variants, and the interpretation of relevant measurement results.

While some protocols share a common API, there is generally no strictly enforced universal API across all protocols, given their potentially diverse functionalities and the different quantities they calculate. In the subsections, protocols are discussed in more details.