gate.hpp File Reference

Definition and basic functions for QuantumGate. More...

#include "type.hpp"
#include "qubit_info.hpp"
#include <vector>
#include <iostream>
#include <ostream>
#include <string>

Go to the source code of this file.

## Classes

class  QuantumGateBase

## Macros

#define FLAG_PAULI   0x01
Flgas for gate property: gate is Pauli. More...

#define FLAG_CLIFFORD   0x02
Flgas for gate property: gate is Clifford. More...

#define FLAG_GAUSSIAN   0x04
Flgas for gate property: gate is Gaussian. More...

#define FLAG_PARAMETRIC   0x08
Flgas for gate property: gate is parametrized. More...

## Detailed Description

Definition and basic functions for QuantumGate.

## ◆ FLAG_CLIFFORD

 #define FLAG_CLIFFORD   0x02

Flgas for gate property: gate is Clifford.

## ◆ FLAG_GAUSSIAN

 #define FLAG_GAUSSIAN   0x04

Flgas for gate property: gate is Gaussian.

## ◆ FLAG_PARAMETRIC

 #define FLAG_PARAMETRIC   0x08

Flgas for gate property: gate is parametrized.

## ◆ FLAG_PAULI

 #define FLAG_PAULI   0x01

Flgas for gate property: gate is Pauli.

Regulation for argument/qubit/index ordering Read this before treating kronecker product

— arguments — Arguments of create_gate_*** function must be ordered as [control qubit (list), target qubit (list), rotation angle, state, dimension]

E.g. arguments of controlled gate must be ordered as [control qubit, target qubit]. CNOT_gate(0,1) = gate_from_string("CNOT 0 1") = control-0 X-1 gate

When we perform gate->add_control(i, value), the operation is performed on the index where its i-th bit is value, i.e. if (index&(1ULL<<i) != 0)

— state — In C/C++, it is useful to order the computational basis so that the RIGHTmost bit is the lowest bit. e.g. state = [ state[0b00], state[0b01], state[0b10], state[0b11] ]

In quantum circuit, we call the TOP-line qubit as the FIRST qubit.

In the braket representation, we consider the RIGHTmost bit in ket represents the FIRST (or TOP-line) qubit in the quantum circuit. state[0b01] = <01|state|01> = the probability with which the TOP-qubit is one, and the second-top qubit is zero.

— gate — To be consistent with the above index ordering, the order of tensor product is *** REVERSED ***.

X_0 has matrix representation : X_0 = I \otimes X = np.kron(I,X) = [0,1,0,0] |00> state[00] [1,0,0,0] |01> state[01] [0,0,0,1] |10> state[10] [0,0,1,0] |11> state[11]

CNOT(0,1) = control-0 target-NOT-1 has matrix representation [1,0,0,0] |00> [0,0,0,1] |01> [0,0,1,0] |10> [0,1,0,0] |11>

X_0 Y_1 Z_2 = np.kron(Z_2, np.kron(Y1, X0))