Quantum Circuit Synthesis¶
The main functionality for synthesizing quantum circuits is provided by the synthesize_clifford()
and the optimize_clifford()
methods.
- synthesize_clifford(target_tableau, initial_tableau=None, include_destabilizers=False, **kwargs)[source]¶
Synthesize a Clifford circuit from a given tableau starting from an (optional) initial tableau.
- Parameters:
target_tableau (
str
|Clifford
|PauliList
|Tableau
) – The target tableau to synthesize. If a string is given, it is interpreted as a semicolon separated binary matrix or a list of Pauli strings. The Pauli strings follow the same format as in Stim. If aClifford
or aPauliList
is given, it is converted to aTableau
. If aTableau
is given, it is used directly.initial_tableau (
str
|Clifford
|PauliList
|Tableau
|None
) – The initial tableau to start from. If a string is given, it is interpreted as a semicolon separated binary matrix or a list of Pauli strings. If aClifford
or aPauliList
is given, it is converted to aTableau
. If aTableau
is given, it is used directly. If no initial tableau is given, the synthesis starts from the identity tableau.include_destabilizers (
bool
) – Flag to set whether destabilizers should be considered in the synthesis**kwargs (
Any
) – Additional keyword arguments to configure the synthesis. SeeSynthesisConfiguration
for a list of available options.- Returns:
tuple
[QuantumCircuit
,SynthesisResults
] – A tuple containing the synthesized circuit and the synthesis results.
- optimize_clifford(circuit, initial_tableau=None, include_destabilizers=False, **kwargs)[source]¶
Optimize a Clifford circuit starting from an (optional) initial tableau.
- Parameters:
circuit (
str
|QuantumCircuit
|QuantumComputation
) – The circuit to optimize. If a string is given, it is interpreted as a QASM string or a filename. If aQuantumCircuit
is given, it is converted to aQuantumComputation
. If aQuantumComputation
is given, it is used as is.initial_tableau (
str
|Clifford
|PauliList
|Tableau
|None
) – The initial tableau to start from. If a string is given, it is interpreted as a semicolon separated binary matrix or a list of Pauli strings. If aClifford
is given or aPauliList
is given, it is converted to a Tableau. If aTableau
is given, it is used directly. If no initial tableau is given, the synthesis starts from the identity tableau.include_destabilizers (
bool
) – Flag to set whether destabilizers should be considered in the synthesis**kwargs (
Any
) – Additional keyword arguments to configure the synthesis. SeeSynthesisConfiguration
for a list of available options.- Returns:
tuple
[QuantumCircuit
,SynthesisResults
] – A tuple containing the optimized circuit and the synthesis results.
Synthesis Configuration¶
The following classes provide a more explicit way of initializing the respective parameters of the synthesize_clifford
and the optimize_clifford
method. Instead of setting parameters via str
members, they can be set with Enumeration.member
where Enumeration
is the enumeration class.
- class TargetMetric¶
Members:
gates : Optimize gate count.
two_qubit_gates : Optimize two-qubit gate count.
depth : Optimize circuit depth.
- class Verbosity¶
Members:
none : No output.
fatal : Only show fatal errors.
error : Show errors.
warning : Show warnings.
info : Show general information.
debug : Show additional debug information.
verbose : Show all information.
The SynthesisConfiguration
class is used to provide several parameters to the synthesize_clifford
and the optimize_clifford
method. The following table lists the parameters and their default values.
- class SynthesisConfiguration¶
Configuration options for the MQT QMAP Clifford synthesis tool.
- property dump_intermediate_results¶
Dump intermediate results of the synthesis process. Defaults to false.
- property gate_limit_factor¶
Factor by which the gate limit is increased when trying to find a better solution for the two-qubit gate optimization. Defaults to 1.1.
- property heuristic¶
Use heuristic to synthesize the circuit. This method synthesizes shallow intermediate circuits and combines them. Defaults to false.
- property initial_timestep_limit¶
Initial timestep limit for the Clifford synthesis. Defaults to 0, which implies that the initial timestep limit is determined automatically.
- property intermediate_results_path¶
Path to the directory where intermediate results should be dumped. Defaults to ./. The path needs to include a path separator at the end.
- json(self: mqt.qmap.pyqmap.SynthesisConfiguration) json ¶
Returns a JSON-style dictionary of all the information present in the
Configuration
- property linear_search¶
Use liner search instead of binary search scheme for finding the optimum. Defaults to false.
- property minimal_timesteps¶
Minimal timestep considered for the Clifford synthesis. This option limits the lower bound of the interval in which the binary search method looks for solutions. Set this if you know a lower bound for the circuit depth. Defaults to 0, which implies that no lower bound for depth is known.
- property minimize_gates_after_depth_optimization¶
Depth optimization might produce a circuit with more gates than necessary. This option enables an additional run of the synthesizer to minimize the overall number of gates. Defaults to false.
- property minimize_gates_after_two_qubit_gate_optimization¶
Two-qubit gate optimization might produce a circuit with more gates than necessary. This option enables an additional run of the synthesizer to minimize the overall number of gates. Defaults to false.
- property n_threads_heuristic¶
Maximum number of threads used for the heuristic optimizer. Defaults to the number of available threads on the system.
- property solver_parameters¶
Parameters to be passed to Z3 as dict[str, bool | int | float | str]
- property split_size¶
Size of subcircuits used in heuristic. Defaults to 5.
- property target_metric¶
Target metric for the Clifford synthesis. Defaults to gates.
- property try_higher_gate_limit_for_two_qubit_gate_optimization¶
When optimizing two-qubit gates, the synthesizer might fail to find an optimal solution for a certain timestep limit, but there might be a better solution for some higher timestep limit. This option enables an additional run of the synthesizer with a higher gate limit. Defaults to false.
- property use_maxsat¶
Use MaxSAT to solve the synthesis problem or to really on the binary search scheme for finding the optimum. Defaults to false.
- property use_symmetry_breaking¶
Use symmetry breaking clauses to speed up the synthesis process. Defaults to true.
- property verbosity¶
Verbosity level for the synthesis process. Defaults to ‘warning’.