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.

## Macro Definition Documentation

## ◆ 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))