Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
CNOT.cpp
Go to the documentation of this file.
1 /*
2 Created on Fri Jun 26 14:13:26 2020
3 Copyright 2020 Peter Rakyta, Ph.D.
4 
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
8 
9  http://www.apache.org/licenses/LICENSE-2.0
10 
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16 
17 @author: Peter Rakyta, Ph.D.
18 */
23 #include "CNOT.h"
24 
25 
26 using namespace std;
27 
28 
32 CNOT::CNOT() : X(){
33 
34  // A string labeling the gate operation
35  name = "CNOT";
36 
37  // A string describing the type of the gate
39 
40  // The index of the qubit which acts as a control qubit (control_qbit >= 0) in controlled gate
41  control_qbit = -1;
42 
43 
44 }
45 
46 
53 CNOT::CNOT(int qbit_num_in, int target_qbit_in, int control_qbit_in) : X(qbit_num_in, target_qbit_in) {
54 
55 
56  // A string labeling the gate operation
57  name = "CNOT";
58 
59  // A string describing the type of the gate
61 
62 
63  if (control_qbit_in >= qbit_num) {
64  std::stringstream sstream;
65  sstream << "The index of the control qubit is larger than the number of qubits" << std::endl;
66  print(sstream, 0);
67  throw sstream.str();
68  }
69 
70  // The index of the qubit which acts as a control qubit (control_qbit >= 0) in controlled gate
71  control_qbit = control_qbit_in;
72 
73 
74 }
75 
80 }
81 
82 
83 
89 
90  CNOT* ret = new CNOT( qbit_num, target_qbit, control_qbit );
91 
92  ret->set_parameter_start_idx( get_parameter_start_idx() );
93  ret->set_parents( parents );
94  ret->set_children( children );
95 
96  return ret;
97 
98 }
99 
100 
101 
std::vector< Gate * > parents
list of parent gates to be applied in the circuit prior to this current gate
Definition: Gate.h:112
Definition: X.h:11
void print(const std::stringstream &sstream, int verbose_level=1) const
Call to print output messages in the function of the verbosity level.
Definition: logging.cpp:55
int control_qbit
The index of the qubit which acts as a control qubit (control_qbit >= 0) in controlled operations...
Definition: Gate.h:100
int target_qbit
The index of the qubit on which the operation acts (target_qbit >= 0)
Definition: Gate.h:98
virtual CNOT * clone() override
Call to create a clone of the present class.
Definition: CNOT.cpp:88
Header file for a class representing a CNOT operation.
gate_type type
The type of the operation (see enumeration gate_type)
Definition: Gate.h:96
int get_parameter_start_idx()
Call to get the starting index of the parameters in the parameter array corresponding to the circuit ...
Definition: Gate.cpp:2535
~CNOT() override
Destructor of the class.
Definition: CNOT.cpp:79
CNOT()
Nullary constructor of the class.
Definition: CNOT.cpp:32
std::string name
A string labeling the gate operation.
Definition: Gate.h:92
std::vector< Gate * > children
list of child gates to be applied after this current gate
Definition: Gate.h:114
int qbit_num
number of qubits spanning the matrix of the operation
Definition: Gate.h:94