Skip to content

Commit 44f0e57

Browse files
author
Rúben André Barreiro
committed
More registers added
1 parent cc03829 commit 44f0e57

File tree

3 files changed

+91
-77
lines changed

3 files changed

+91
-77
lines changed

src/main/java/org/quisl/framework/java/registers/Register.java

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,84 @@ public abstract class Register {
66

77
private Long id;
88

9+
private Character prefix;
10+
911
private String registerName;
1012

11-
public Register(Long id, String registerName) {
13+
private Integer registerSize;
14+
15+
16+
public Register(Long id, Character prefix, String registerName, Integer registerSize) {
17+
1218
this.id = id;
19+
20+
this.prefix = prefix;
21+
1322
this.registerName = registerName;
23+
24+
this.registerSize = registerSize;
25+
1426
}
1527

28+
1629
public Long getId() {
30+
1731
return this.id;
32+
1833
}
1934

2035
public void setId(Long id) {
2136
this.id = id;
2237
}
2338

39+
public Character getPrefix() {
40+
return this.prefix;
41+
}
42+
43+
public void setPrefix(Character prefix) {
44+
this.prefix = prefix;
45+
}
46+
47+
public String getRegisterName() {
48+
49+
return this.registerName;
50+
51+
}
52+
53+
public void setRegisterName(String registerName) {
54+
55+
this.registerName = registerName;
56+
57+
}
58+
59+
public Integer getRegisterSize() {
60+
61+
return this.registerSize;
62+
63+
}
64+
65+
public void setRegisterSize(Integer registerSize) {
66+
67+
this.registerSize = registerSize;
68+
69+
}
70+
2471
@Override
2572
public boolean equals(Object o) {
2673

2774
if (this == o) {
75+
2876
return true;
77+
2978
}
3079

3180
if (o == null || getClass() != o.getClass()) {
81+
3282
return false;
83+
3384
}
3485

86+
3587
Register register = (Register) o;
3688

3789
return Objects.equals(this.id, register.id);
Lines changed: 31 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,137 +1,96 @@
11
package org.quisl.framework.java.registers.classical;
22

3-
import org.quisl.framework.java.math.complex.ComplexNumber;
43
import org.quisl.framework.java.registers.Register;
4+
import org.quisl.framework.java.registers.common.RegisterUnitPrefixes;
55
import org.quisl.framework.java.units.computing.classical.binary.deterministic.bits.Bit;
6-
import org.quisl.framework.java.units.computing.quantum.binary.qubits.Qubit;
76

8-
import java.util.Arrays;
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
import java.util.Objects;
910

1011
public class ClassicalRegister extends Register {
1112

12-
private Bit[] bits;
13+
private List<Bit> bits;
1314

14-
private float[] bitsProbabilities;
1515

16+
public ClassicalRegister(Long id, Integer numBits) {
1617

17-
public ClassicalRegister(Long id) {
18+
super( id, RegisterUnitPrefixes.CLASSICAL_REGISTER_UNIT.getRegisterUnitCharacter(),
19+
( "cl-reg-" + id ), numBits );
1820

19-
super(id, "cl_reg" + id);
21+
this.bits = new ArrayList<>(numBits);
2022

21-
this.setup("|0⟩", "|1⟩");
23+
this.addBits(numBits);
2224

2325
}
2426

25-
public ClassicalRegister(Long id, String stateNameBitNum1, String stateNameBitNum2) {
27+
public ClassicalRegister(Long id, String classicalRegisterName, Integer numBits) {
2628

27-
super(id, "cl_reg" + id);
29+
super( id, RegisterUnitPrefixes.CLASSICAL_REGISTER_UNIT.getRegisterUnitCharacter(),
30+
classicalRegisterName, numBits );
2831

29-
this.setup(stateNameBitNum1, stateNameBitNum2);
32+
this.bits = new ArrayList<>(numBits);
3033

31-
}
32-
33-
public ClassicalRegister(Long id, String classicalRegisterName, String stateNameBitNum1, String stateNameBitNum2) {
34-
35-
super(id, classicalRegisterName);
36-
37-
this.setup(stateNameBitNum1, stateNameBitNum2);
34+
this.addBits(numBits);
3835

3936
}
4037

41-
private void setup(String stateNameBitNum1, String stateNameBitNum2) {
38+
public void addBits(Integer numBits) {
4239

43-
this.setupBits(stateNameBitNum1, stateNameBitNum2);
44-
this.setupBitsProbabilities();
40+
for(Long currentBit = 0L; currentBit < numBits; currentBit++) {
4541

46-
}
42+
Bit bit = new Bit(currentBit);
4743

48-
private void setupBits(String stateNameBitNum1, String stateNameBitNum2) {
44+
this.bits.add(bit);
4945

50-
this.bits = new Bit[2];
51-
52-
this.bits[0] = new Bit(1L, Bit.ZERO_STATE, stateNameBitNum1);
53-
this.bits[1] = new Bit(2L, Bit.ONE_STATE, stateNameBitNum2);
46+
}
5447

5548
}
5649

57-
private void setupBitsProbabilities() {
58-
59-
this.bitsProbabilities = new float[2];
60-
61-
this.bitsProbabilities[Bit.ZERO_STATE] = 1.0f;
62-
this.bitsProbabilities[Bit.ONE_STATE] = 0.0f;
50+
public List<Bit> getBits() {
6351

64-
}
65-
66-
public Bit[] getBits() {
6752
return this.bits;
68-
}
69-
70-
public void setBits(Bit[] bits) {
71-
this.bits = bits;
72-
}
73-
74-
public float[] getBitsProbabilities() {
75-
return this.bitsProbabilities;
76-
}
7753

78-
public void setBitsProbabilities(float[] bitsProbabilities) {
79-
this.bitsProbabilities = bitsProbabilities;
8054
}
8155

82-
public void retrieveMeasurement(Qubit qubit) {
56+
public void setBits(List<Bit> bits) {
8357

84-
if ( qubit.isMeasurementPerformed() ) {
85-
86-
ComplexNumber[] qubitAmplitudes = qubit.getAmplitudes();
87-
88-
this.bitsProbabilities[0] = (float) Math.pow(qubitAmplitudes[0].modulus(), 2.0);
89-
this.bitsProbabilities[1] = (float) Math.pow(qubitAmplitudes[1].modulus(), 2.0);
90-
91-
}
58+
this.bits = bits;
9259

9360
}
9461

9562
@Override
9663
public boolean equals(Object o) {
9764

9865
if (this == o) {
66+
9967
return true;
68+
10069
}
10170

10271
if (o == null || getClass() != o.getClass()) {
72+
10373
return false;
74+
10475
}
10576

10677
if (!super.equals(o)) {
78+
10779
return false;
80+
10881
}
10982

11083
ClassicalRegister that = (ClassicalRegister) o;
11184

112-
return Arrays.equals(bits, that.bits) &&
113-
Arrays.equals(bitsProbabilities, that.bitsProbabilities);
85+
return Objects.equals(this.bits, that.bits);
11486

11587
}
11688

11789
@Override
11890
public int hashCode() {
11991

120-
int result = super.hashCode();
121-
122-
result = 31 * result + Arrays.hashCode(bits);
123-
124-
result = 31 * result + Arrays.hashCode(bitsProbabilities);
125-
126-
return result;
92+
return Objects.hash(super.hashCode(), this.bits);
12793

12894
}
12995

130-
@Override
131-
public String toString() {
132-
return "ClassicalRegister{" +
133-
"bits=" + Arrays.toString(bits) +
134-
", bitsProbabilities=" + Arrays.toString(bitsProbabilities) +
135-
'}';
136-
}
13796
}

src/main/java/org/quisl/framework/java/registers/quantum/QuantumRegister.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.quisl.framework.java.registers.quantum;
22

33
import org.quisl.framework.java.registers.Register;
4+
import org.quisl.framework.java.registers.common.RegisterUnitPrefixes;
45
import org.quisl.framework.java.units.computing.quantum.binary.qubits.Qubit;
56

67
import java.util.ArrayList;
@@ -14,19 +15,21 @@ public class QuantumRegister extends Register {
1415

1516
public QuantumRegister(Long id, Integer numQubits) {
1617

17-
super(id, "qu_reg" + id);
18+
super( id, RegisterUnitPrefixes.QUANTUM_REGISTER_UNIT.getRegisterUnitCharacter(),
19+
( "qu-reg-" + id ), numQubits );
1820

19-
this.qubits = new ArrayList<>();
21+
this.qubits = new ArrayList<>(numQubits);
2022

2123
this.addQubits(numQubits);
2224

2325
}
2426

2527
public QuantumRegister(Long id, String quantumRegisterName, Integer numQubits) {
2628

27-
super(id, quantumRegisterName);
29+
super( id, RegisterUnitPrefixes.QUANTUM_REGISTER_UNIT.getRegisterUnitCharacter(),
30+
quantumRegisterName, numQubits );
2831

29-
this.qubits = new ArrayList<>();
32+
this.qubits = new ArrayList<>(numQubits);
3033

3134
this.addQubits(numQubits);
3235

0 commit comments

Comments
 (0)