Skip to content
This repository was archived by the owner on Apr 1, 2018. It is now read-only.

Commit 9f87aea

Browse files
committed
Change Namespace
1 parent 654f43a commit 9f87aea

File tree

5 files changed

+91
-84
lines changed

5 files changed

+91
-84
lines changed

src/gates.cpp

Lines changed: 47 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -46,63 +46,64 @@ float TDagger_coef[] = {
4646
1, 0, 0, 0,
4747
0, 0, 0.7071067811865475244008443621048490393, -0.7071067811865475244008443621048490393
4848
};
49+
namespace QC {
50+
namespace Gates {
51+
// Pauli-X / Not Gate
52+
af::array X = af::array(2, 2, (af::cfloat*) X_coef);
4953

50-
namespace Gates {
51-
// Pauli-X / Not Gate
52-
af::array X = af::array(2, 2, (af::cfloat*) X_coef);
54+
// Pauli-Y Gate
55+
af::array Y = af::array(2, 2, (af::cfloat*) Y_coef);
5356

54-
// Pauli-Y Gate
55-
af::array Y = af::array(2, 2, (af::cfloat*) Y_coef);
57+
// Pauli-Z Gate
58+
af::array Z = af::array(2, 2, (af::cfloat*) Z_coef);
5659

57-
// Pauli-Z Gate
58-
af::array Z = af::array(2, 2, (af::cfloat*) Z_coef);
60+
// Hadamard Gate
61+
af::array H = (1/sqrt(2)) * af::array(2, 2, (af::cfloat*) H_coef);
5962

60-
// Hadamard Gate
61-
af::array H = (1/sqrt(2)) * af::array(2, 2, (af::cfloat*) H_coef);
63+
// Identity Gate
64+
af::array Id = af::array(2, 2, (af::cfloat*) Id_coef);
6265

63-
// Identity Gate
64-
af::array Id = af::array(2, 2, (af::cfloat*) Id_coef);
66+
// S Gate
67+
af::array S = af::array(2, 2, (af::cfloat*) S_coef);
6568

66-
// S Gate
67-
af::array S = af::array(2, 2, (af::cfloat*) S_coef);
69+
// S-Dagger Gate
70+
af::array SDagger = af::array(2, 2, (af::cfloat*) SDagger_coef);
6871

69-
// S-Dagger Gate
70-
af::array SDagger = af::array(2, 2, (af::cfloat*) SDagger_coef);
72+
// T / Pi over 8 Gate
73+
af::array T = af::array(2, 2, (af::cfloat*) T_coef);
7174

72-
// T / Pi over 8 Gate
73-
af::array T = af::array(2, 2, (af::cfloat*) T_coef);
74-
75-
// T-Dagger Gate
76-
af::array TDagger = af::array(2, 2, (af::cfloat*) TDagger_coef);
77-
}
75+
// T-Dagger Gate
76+
af::array TDagger = af::array(2, 2, (af::cfloat*) TDagger_coef);
77+
}
7878

79-
af::array generateGate(af::array gate, int numQubits, int a) {
80-
// identity = 1
81-
af::array id = af::identity(2, 2, c32);
82-
af::array K;
79+
af::array generateGate(af::array gate, int numQubits, int a) {
80+
// identity = 1
81+
af::array id = af::identity(2, 2, c32);
82+
af::array K;
83+
84+
for (int i = 0; i < numQubits; i++) {
85+
if (i == 0) {
86+
if (a == 0) {
87+
K = gate;
88+
} else {
89+
K = id;
90+
}
91+
} else if (i == a) {
92+
try {
93+
K = kron(K, gate);
94+
} catch (const std::exception& e) {
95+
std::cout << e.what();
96+
}
8397

84-
for (int i = 0; i < numQubits; i++) {
85-
if (i == 0) {
86-
if (a == 0) {
87-
K = gate;
8898
} else {
89-
K = id;
90-
}
91-
} else if (i == a) {
92-
try {
93-
K = kron(K, gate);
94-
} catch (const std::exception& e) {
95-
std::cout << e.what();
96-
}
97-
98-
} else {
99-
try {
100-
K = kron(K, id);
101-
} catch (const std::exception& e) {
102-
std::cout << e.what();
99+
try {
100+
K = kron(K, id);
101+
} catch (const std::exception& e) {
102+
std::cout << e.what();
103+
}
103104
}
104105
}
105-
}
106106

107-
return K;
108-
}
107+
return K;
108+
}
109+
}

src/gates.h

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,21 @@
22
#define GATES_H_
33

44
#include <arrayfire.h>
5+
namespace QC {
6+
namespace Gates {
7+
extern af::array X;
8+
extern af::array Y;
9+
extern af::array Z;
10+
extern af::array H;
11+
extern af::array Id;
12+
extern af::array S;
13+
extern af::array SDagger;
14+
extern af::array T;
15+
extern af::array TDagger;
16+
}
517

6-
namespace Gates {
7-
extern af::array X;
8-
extern af::array Y;
9-
extern af::array Z;
10-
extern af::array H;
11-
extern af::array Id;
12-
extern af::array S;
13-
extern af::array SDagger;
14-
extern af::array T;
15-
extern af::array TDagger;
16-
}
18+
af::array generateGate(af::array gate, int numQubits, int a);
1719

18-
af::array generateGate(af::array gate, int numQubits, int a);
20+
}
1921

2022
#endif

src/main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
#include <arrayfire.h>
22
#include <iostream>
3+
34
#include "gates.h"
45
#include "quantum.h"
5-
#include "kron.h"
66

77
using namespace af;
88

99
int main(int argc, char** argv) {
1010
//af::info();
1111

12-
QReg q(3);
12+
QC::QReg q(3);
1313

14-
q.applyGate(Gates::H, 0);
15-
q.applyGate(Gates::H, 1);
16-
q.applyGate(Gates::H, 2);
14+
q.applyGate(QC::Gates::H, 0);
15+
q.applyGate(QC::Gates::H, 1);
16+
q.applyGate(QC::Gates::H, 2);
1717

1818
float results[8] = {0,0,0,0,0,0,0,0};
1919

src/quantum.cpp

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,27 @@
44

55
#include "gates.h"
66
#include "helper.h"
7-
8-
QReg::QReg(int n)
9-
: numQubits(n) {
10-
amplitudes = af::constant(0, 2 << (n - 1), c32);
11-
amplitudes(0) = 1;
12-
measured = false;
13-
}
14-
15-
void QReg::applyGate(af::array gate, int a) {
16-
amplitudes = af::matmul(generateGate(gate, numQubits, a), amplitudes);
7+
namespace QC {
8+
QReg::QReg(int n)
9+
: numQubits(n) {
10+
amplitudes = af::constant(0, 2 << (n - 1), c32);
11+
amplitudes(0) = 1;
12+
measured = false;
13+
}
14+
15+
void QReg::applyGate(af::array gate, int a) {
16+
amplitudes = af::matmul(generateGate(gate, numQubits, a), amplitudes);
17+
}
18+
19+
int QReg::measure() {
20+
af::array probabilities = af::pow(af::abs(amplitudes), 2);
21+
22+
return select(probabilities);
23+
}
24+
25+
af::array QReg::getAmplitudes() {
26+
return amplitudes;
27+
}
1728
}
1829

19-
int QReg::measure() {
20-
af::array probabilities = af::pow(af::abs(amplitudes), 2);
21-
22-
return select(probabilities);
23-
}
24-
25-
af::array QReg::getAmplitudes() {
26-
return amplitudes;
27-
}
2830

src/quantum.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#define QUANTUM_H_
33

44
#include <arrayfire.h>
5-
6-
class QReg {
5+
namespace QC {
6+
class QReg {
77
private:
88
af::array amplitudes;
99
int numQubits;
@@ -16,4 +16,6 @@ class QReg {
1616
af::array getAmplitudes();
1717
};
1818

19+
}
20+
1921
#endif

0 commit comments

Comments
 (0)