numerics
Loading...
Searching...
No Matches
num::Circuit Class Reference

Chainable quantum circuit builder. More...

#include <circuit.hpp>

Public Member Functions

 Circuit (int n_qubits)
 
Circuith (int q)
 Hadamard.
 
Circuitx (int q)
 Pauli-X (NOT)
 
Circuity (int q)
 Pauli-Y.
 
Circuitz (int q)
 Pauli-Z.
 
Circuits (int q)
 Phase S = sqrtZ.
 
Circuitsdg (int q)
 S†
 
Circuitt (int q)
 T = sqrtS.
 
Circuittdg (int q)
 T†
 
Circuitrx (real theta, int q)
 R_x(theta) = e^{-ithetaX/2}.
 
Circuitry (real theta, int q)
 R_y(theta) = e^{-ithetaY/2}.
 
Circuitrz (real theta, int q)
 R_z(theta) = e^{-ithetaZ/2}.
 
Circuitp (real lambda, int q)
 Phase P(lambda)
 
Circuitu (real theta, real phi, real lambda, int q)
 General SU(2)
 
Circuitcx (int ctrl, int tgt)
 CNOT.
 
Circuitcy (int ctrl, int tgt)
 Controlled-Y.
 
Circuitcz (int ctrl, int tgt)
 Controlled-Z.
 
Circuitcp (real lambda, int ctrl, int tgt)
 Controlled phase.
 
Circuitswap (int q0, int q1)
 SWAP.
 
Circuitccx (int c0, int c1, int tgt)
 Toffoli (CCX)
 
Circuitcswap (int ctrl, int q0, int q1)
 Fredkin (CSWAP)
 
Circuitgate (const quantum::Gate &G, int q, std::string label="U")
 
Circuitgate (const quantum::Gate2Q &G, int q0, int q1, std::string label="U2")
 
quantum::Statevector statevector () const
 Run full circuit -> statevector (no measurement collapse)
 
quantum::Statevector statevector_at (int n) const
 Apply first n gates only (0 = bare |0...0>). Useful for stepping through the circuit in a visualiser.
 
Result run (int shots=1024, unsigned seed=42) const
 Sample shots measurements from the ideal distribution. Uses pre-computed statevector probabilities – O(2^n + shots).
 
std::string diagram () const
 ASCII wire diagram (Unicode box-drawing characters)
 
void print () const
 Print diagram to stdout.
 
int n_qubits () const
 
int n_gates () const
 
std::vector< GateViewviews () const
 Gate descriptions with layout columns – for renderers.
 

Detailed Description

Chainable quantum circuit builder.

Gates are stored in order and applied to a fresh zero-state statevector when execution is requested. The circuit itself is immutable between calls.

Definition at line 78 of file circuit.hpp.

Constructor & Destructor Documentation

◆ Circuit()

num::Circuit::Circuit ( int  n_qubits)
explicit

Definition at line 48 of file circuit.cpp.

Member Function Documentation

◆ ccx()

Circuit & num::Circuit::ccx ( int  c0,
int  c1,
int  tgt 
)

Toffoli (CCX)

Definition at line 99 of file circuit.cpp.

References num::ipow().

◆ cp()

Circuit & num::Circuit::cp ( real  lambda,
int  ctrl,
int  tgt 
)

Controlled phase.

Definition at line 89 of file circuit.cpp.

References num::ipow().

Referenced by num::qft_circuit().

◆ cswap()

Circuit & num::Circuit::cswap ( int  ctrl,
int  q0,
int  q1 
)

Fredkin (CSWAP)

Definition at line 102 of file circuit.cpp.

References num::ipow().

◆ cx()

Circuit & num::Circuit::cx ( int  ctrl,
int  tgt 
)

CNOT.

Definition at line 80 of file circuit.cpp.

References num::ipow().

Referenced by num::bell_pair(), and num::ghz_state().

◆ cy()

Circuit & num::Circuit::cy ( int  ctrl,
int  tgt 
)

Controlled-Y.

Definition at line 83 of file circuit.cpp.

References num::ipow().

◆ cz()

Circuit & num::Circuit::cz ( int  ctrl,
int  tgt 
)

Controlled-Z.

Definition at line 86 of file circuit.cpp.

References num::ipow().

◆ diagram()

std::string num::Circuit::diagram ( ) const

ASCII wire diagram (Unicode box-drawing characters)

Definition at line 266 of file circuit.cpp.

References num::ipow().

Referenced by print().

◆ gate() [1/2]

Circuit & num::Circuit::gate ( const quantum::Gate G,
int  q,
std::string  label = "U" 
)

Definition at line 108 of file circuit.cpp.

References num::ipow().

◆ gate() [2/2]

Circuit & num::Circuit::gate ( const quantum::Gate2Q G,
int  q0,
int  q1,
std::string  label = "U2" 
)

Definition at line 113 of file circuit.cpp.

References num::ipow().

◆ h()

Circuit & num::Circuit::h ( int  q)

Hadamard.

Definition at line 52 of file circuit.cpp.

Referenced by num::bell_pair(), num::ghz_state(), and num::qft_circuit().

◆ n_gates()

int num::Circuit::n_gates ( ) const
inline

Definition at line 140 of file circuit.hpp.

Referenced by main().

◆ n_qubits()

int num::Circuit::n_qubits ( ) const
inline

Definition at line 139 of file circuit.hpp.

Referenced by main().

◆ p()

Circuit & num::Circuit::p ( real  lambda,
int  q 
)

Phase P(lambda)

Definition at line 70 of file circuit.cpp.

References num::ipow().

◆ print()

void num::Circuit::print ( ) const

Print diagram to stdout.

Definition at line 385 of file circuit.cpp.

References diagram().

◆ run()

Result num::Circuit::run ( int  shots = 1024,
unsigned  seed = 42 
) const

Sample shots measurements from the ideal distribution. Uses pre-computed statevector probabilities – O(2^n + shots).

Definition at line 167 of file circuit.cpp.

References num::ipow(), num::quantum::probabilities(), statevector(), and num::Result::sv.

◆ rx()

Circuit & num::Circuit::rx ( real  theta,
int  q 
)

R_x(theta) = e^{-ithetaX/2}.

Definition at line 61 of file circuit.cpp.

References num::ipow().

◆ ry()

Circuit & num::Circuit::ry ( real  theta,
int  q 
)

R_y(theta) = e^{-ithetaY/2}.

Definition at line 64 of file circuit.cpp.

References num::ipow().

◆ rz()

Circuit & num::Circuit::rz ( real  theta,
int  q 
)

R_z(theta) = e^{-ithetaZ/2}.

Definition at line 67 of file circuit.cpp.

References num::ipow().

◆ s()

Circuit & num::Circuit::s ( int  q)

Phase S = sqrtZ.

Definition at line 56 of file circuit.cpp.

◆ sdg()

Circuit & num::Circuit::sdg ( int  q)

S†

Definition at line 57 of file circuit.cpp.

◆ statevector()

quantum::Statevector num::Circuit::statevector ( ) const

Run full circuit -> statevector (no measurement collapse)

Definition at line 155 of file circuit.cpp.

References statevector_at().

Referenced by run().

◆ statevector_at()

quantum::Statevector num::Circuit::statevector_at ( int  n) const

Apply first n gates only (0 = bare |0...0>). Useful for stepping through the circuit in a visualiser.

Definition at line 159 of file circuit.cpp.

References num::ipow(), and num::quantum::zero_state().

Referenced by main(), and statevector().

◆ swap()

Circuit & num::Circuit::swap ( int  q0,
int  q1 
)

SWAP.

Definition at line 93 of file circuit.cpp.

References num::ipow().

Referenced by num::qft_circuit().

◆ t()

Circuit & num::Circuit::t ( int  q)

T = sqrtS.

Definition at line 58 of file circuit.cpp.

◆ tdg()

Circuit & num::Circuit::tdg ( int  q)

T†

Definition at line 59 of file circuit.cpp.

◆ u()

Circuit & num::Circuit::u ( real  theta,
real  phi,
real  lambda,
int  q 
)

General SU(2)

Definition at line 73 of file circuit.cpp.

References num::ipow(), and num::phi.

◆ views()

std::vector< GateView > num::Circuit::views ( ) const

Gate descriptions with layout columns – for renderers.

Definition at line 217 of file circuit.cpp.

References num::GateView::col, num::ipow(), num::GateView::kind, num::GateView::label, num::GateView::q0, num::GateView::q1, and num::GateView::q2.

Referenced by main().

◆ x()

Circuit & num::Circuit::x ( int  q)

Pauli-X (NOT)

Definition at line 53 of file circuit.cpp.

◆ y()

Circuit & num::Circuit::y ( int  q)

Pauli-Y.

Definition at line 54 of file circuit.cpp.

◆ z()

Circuit & num::Circuit::z ( int  q)

Pauli-Z.

Definition at line 55 of file circuit.cpp.


The documentation for this class was generated from the following files: