Catalog
The concept of the catalog is to provide the user a set of basic of qbit or photonic gate or circuit.
All circuits share the same interface that is describe by the following class CatalogItem
:
- class perceval.components.component_catalog.CatalogItem(name)
- abstract build_circuit(**kwargs)
Build the component as circuit
- Return type:
- Returns:
A Perceval circuit
- abstract build_processor(**kwargs)
Build the component as processor
- kwargs:
backend(Union[ABackend, str]): Name or instance of a simulation backend. Default “SLOS”
- Return type:
- Returns:
A Perceval processor
- property name: str
Name of the component
- Returns:
Name of the component
The catalog object work as a dictionary. To select the wanted component you must address it with its catalog key.
For example to get an heralded CZ gate, you must call it as followed:
from perceval import catalog
catalog['heralded cz']
You can after either get it as a circuit or a processor:
from perceval import catalog
processor = catalog['heralded cz'].build_processor() # Will return a processor
circuit = catalog['heralded cz'].build_circuit() # Will return a circuit
If a gate have parameters, like for instance a Mach-Zehnder interferometer phase first you can set those parameters as followed:
import math
from perceval import catalog
circuit = catalog["mzi phase first"].build_circuit(phi_a=math.pi,
phi_b=math.pi))
Klm Cnot
Catalog key: klm cnot
KLM CNOT gate with 4 ancillary modes You probably shouldn’t use the KLM CNOT, except for educational purpose. The Knill CNOT is better in every aspect (see ‘heralded cnot’ in the catalog)
╭─────╮
ctrl (dual rail) ─────┤ ├───── ctrl (dual rail)
─────┤ ├─────
│ │
data (dual rail) ─────┤ ├───── data (dual rail)
─────┤ ├─────
╰─────╯
See also: postprocessed cnot and heralded cnot (using cz)
Scientific article reference: https://doi.org/10.1073/pnas.1018839108
Heralded Cnot
Catalog key: heralded cnot
Knill CNOT gate with 2 heralded modes (built using Heralded CZ and H).
╭──────────╮
ctrl (dual rail) ─────────────┤ ├───────────── ctrl (dual rail)
─────────────┤ Heralded ├─────────────
╭───╮ │ CZ │ ╭───╮
data (dual rail) ─────┤ H ├───┤ ├───┤ H ├───── data (dual rail)
─────┤ ├───┤ ├───┤ ├─────
╰───╯ ╰──────────╯ ╰───╯
See also: heralded cz, postprocessed cnot and klm cnot
Postprocessed Cnot
Catalog key: postprocessed cnot
CNOT gate with 2 heralded modes and a post-selection function
╭─────╮
ctrl (dual rail) ─────┤ ├───── ctrl (dual rail)
─────┤ ├─────
│ │
data (dual rail) ─────┤ ├───── data (dual rail)
─────┤ ├─────
╰─────╯
See also: klm cnot and heralded cnot (using cz)
Scientific article reference: https://journals.aps.org/pra/abstract/10.1103/PhysRevA.65.062324
Heralded Cz
Catalog key: heralded cz
Knill CZ gate with 2 heralded modes
╭─────╮
ctrl (dual rail) ─────┤ ├───── ctrl (dual rail)
─────┤ ├─────
│ │
data (dual rail) ─────┤ ├───── data (dual rail)
─────┤ ├─────
╰─────╯
Scientific article reference: https://arxiv.org/abs/quant-ph/0110144
Generic 2 Mode Circuit
Catalog key: generic 2 mode circuit
A universal 2 mode component, implemented as a beam splitter with variable theta + 3 free phases
- Parameters:
theta
: name or numerical value for beam splitter ‘theta’ parameter (default ‘theta’)phi_tl
: name or numerical value for top left phase (default ‘phi_tl’)phi_bl
: name or numerical value for bottom left phase (default ‘phi_bl’)phi_tr
: name or numerical value for top right phase (default ‘phi_tr’)
╭──────╮╭─────╮╭──────╮
0:──┤phi_tl├┤ ├┤phi_tr├──:0
╰──────╯│BS.H │╰──────╯
╭──────╮│theta│
1:──┤phi_bl├┤ ├──────────:1
╰──────╯╰─────╯
Mzi Phase First
Catalog key: mzi phase first
Mach-Zehnder interferometer
- Parameters:
phi_a
: first phase of the MZI (default ‘phi_a’)phi_b
: second phase of the MZI (default ‘phi_b’)theta_a
: theta value of the first beam splitter (default pi/2)theta_b
: theta value of the second beam splitter (default pi/2)
╭─────╮╭─────╮╭─────╮╭─────╮
0:──┤phi_a├┤BS.Rx├┤phi_b├┤BS.Rx├──:0
╰─────╯│ │╰─────╯│ │
1:─────────┤ ├───────┤ ├──:1
╰─────╯ ╰─────╯
See also: mzi phase last
Mzi Phase Last
Catalog key: mzi phase last
Mach-Zehnder interferometer
- Parameters:
phi_a
: first phase of the MZI (default ‘phi_a’)phi_b
: second phase of the MZI (default ‘phi_b’)theta_a
: theta value of the first beam splitter (default pi/2)theta_b
: theta value of the second beam splitter (default pi/2)
╭─────╮ ╭─────╮
0:──┤BS.Rx├───────┤BS.Rx├─────────:0
│ │╭─────╮│ │╭─────╮
1:──┤ ├┤phi_a├┤ ├┤phi_b├──:1
╰─────╯╰─────╯╰─────╯╰─────╯
See also: mzi phase first
Symmetric Mzi
Catalog key: symmetric mzi
Mach-Zehnder interferometer
- Parameters:
phi_a
: first phase of the MZI (default ‘phi_a’)phi_b
: second phase of the MZI (default ‘phi_b’)theta_a
: theta value of the first beam splitter (default pi/2)theta_b
: theta value of the second beam splitter (default pi/2)
╭─────╮╭─────╮╭─────╮
0:──┤BS.Rx├┤phi_a├┤BS.Rx├──:0
│ │╰─────╯│ │
│ │╭─────╮│ │
1:──┤ ├┤phi_b├┤ ├──:1
╰─────╯╰─────╯╰─────╯
See also: mzi phase first
Postprocessed Ccz
Catalog key: postprocessed ccz
CCZ gate with 6 heralded modes and a post-selection function
╭─────╮
ctrl0 (dual rail) ─────┤ ├───── ctrl0 (dual rail)
─────┤ ├─────
│ │
ctrl1 (dual rail) ─────┤ ├───── ctrl1 (dual rail)
─────┤ ├─────
│ │
data (dual rail) ─────┤ ├───── data (dual rail)
─────┤ ├─────
╰─────╯
Scientific article reference: https://journals.aps.org/pra/abstract/10.1103/PhysRevA.65.062324
Toffoli
Catalog key: toffoli
Toffoli gate CCNOT gate with 6 heralded modes and a post-selection function (built using post-processed CCZ and H).
╭──────────╮
ctrl0 (dual rail) ─────────────┤ ├───────────── ctrl0 (dual rail)
─────────────┤ ├─────────────
ctrl1 (dual rail) ─────────────┤ ├───────────── ctrl1 (dual rail)
─────────────┤ CCZ ├─────────────
╭───╮ │ │ ╭───╮
data (dual rail) ─────┤ H ├───┤ ├───┤ H ├───── data (dual rail)
─────┤ ├───┤ ├───┤ ├─────
╰───╯ ╰──────────╯ ╰───╯
Postprocessed Controlled Gate
Catalog key: postprocessed controlled gate
n-qubit controlled rotation gate C…CZ(alpha) with 2*n ancillary modes and a post-selection function
- Parameters:
n
: number of qubit of the gatealpha
: angle of the controlled-rotation
╭─────╮
ctrl0 (dual rail) ─────┤ ├───── ctrl0 (dual rail)
─────┤ ├─────
│ │
ctrl1 (dual rail) ─────┤ ├───── ctrl1 (dual rail)
─────┤ ├─────
. . .
. . .
. . .
ctrlN (dual rail) ─────┤ ├───── ctrlN (dual rail)
─────┤ ├─────
╰─────╯
Scientific article reference: https://arxiv.org/abs/2405.01395