macro_rules! circuit {
(qubits: $num_qubits:expr, $($rest:tt)*) => { ... };
}Expand description
Creates a Circuit object using a domain-specific language.
The macro provides a concise, intuitive way to define a quantum circuit.
§Syntax
The basic structure is:
ⓘ
circuit! {
qubits: <number_of_qubits>,
<operation_1>,
<operation_2>,
...
}Where <operation> can be one of the following:
§Single-Qubit Gates
Apply a gate to a single qubit or multiple qubits individually.
h(qubit)orh([qubit1, qubit2, ...])x(qubit)orx([qubit1, qubit2, ...])y(qubit)ory([qubit1, qubit2, ...])z(qubit)orz([qubit1, qubit2, ...])s(qubit)ors([qubit1, qubit2, ...])t(qubit)ort([qubit1, qubit2, ...])sdag(qubit)orsdag([qubit1, qubit2, ...])tdag(qubit)ortdag([qubit1, qubit2, ...])id(qubit)orid([qubit1, qubit2, ...])
§Two-Qubit Gates
cnot(control, target)swap(qubit1, qubit2)
§Controlled Gates
Controlled gates can have single or multiple targets and controls.
ch(target, control)orch([targets], [controls])cx(target, control)orcx([targets], [controls])cy(target, control)orcy([targets], [controls])cz(target, control)orcz([targets], [controls])cs(target, control)orcs([targets], [controls])csdag(target, control)orcsdag([targets], [controls])ct(target, control)orct([targets], [controls])ctdag(target, control)orctdag([targets], [controls])
§Gates with Angles
Angles are f64 values.
rx(qubit, angle)orrx([qubits], angle)ry(qubit, angle)orry([qubits], angle)rz(qubit, angle)orrz([qubits], angle)p(qubit, angle)orp([qubits], angle)ry_phase(qubit, theta, phi)orry_phase([qubits], theta, phi)ry_phase_dag(qubit, theta, phi)orry_phase_dag([qubits], theta, phi)
§Controlled Gates with Angles
crx(target, control, angle)orcrx([targets], [controls], angle)cry(target, control, angle)orcry([targets], [controls], angle)crz(target, control, angle)orcrz([targets], [controls], angle)cp(target, control, angle)orcp([targets], [controls], angle)cry_phase(target, control, theta, phi)orcry_phase([targets], [controls], theta, phi)cry_phase_dag(target, control, theta, phi)orcry_phase_dag([targets], [controls], theta, phi)
§Special Gates
toffoli(target, control1, control2)cswap(target1, target2, control)orcswap(target1, target2, [controls])matchgate(target, theta, phi1, phi2)cmatchgate(target, control, theta, phi1, phi2)orcmatchgate(target, [controls], theta, phi1, phi2)pauli_string(pauli_string)pauli_time_evolution(pauli_string, time)
§Unitary Gates
Apply a custom unitary matrix.
unitary(qubit, matrix)unitary([qubits], matrix)cunitary(target, control, matrix)orcunitary([targets], [controls], matrix)
§Warning
- The
matrixmust be a valid unitary matrix. if the matrix is not unitary, the macro will panic.
§Measurement Gates
measurex(qubit)ormeasurex([qubits])measurey(qubit)ormeasurey([qubits])measurez(qubit)ormeasurez([qubits])measure_custom(qubit, matrix)ormeasure_custom([qubits], matrix)
§Returns
Result<Circuit, Error>- A result containing the constructedCircuitor an error if the circuit cannot be built.