Skip to content

Commit 92bcbd2

Browse files
committed
Improved exportToGenerator method
1 parent 5f905fd commit 92bcbd2

File tree

1 file changed

+43
-24
lines changed

1 file changed

+43
-24
lines changed

lib/quantum-circuit.js

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5042,7 +5042,6 @@ QuantumCircuit.prototype.exportToGenerator = function(options) {
50425042
var qasm = this.exportQASM(null, false, null, false, true);
50435043
var usedGates = this.usedGates({ noCustomGates: true, unitariesOnly: true });
50445044
var couplingMap = this.getCouplingMap({ unitariesOnly: true });
5045-
var numSamples = options.numSamples || (this.numQubits < 5 ? ((1 << this.numQubits) + 1) : (this.numQubits < 9 ? (this.numQubits * 4) : this.numQubits));
50465045

50475046
var output = {
50485047
source: {
@@ -5064,40 +5063,60 @@ QuantumCircuit.prototype.exportToGenerator = function(options) {
50645063
var circuit = new QuantumCircuit();
50655064
circuit.load(this.save(true));
50665065

5067-
var stateCircuit = new QuantumCircuit();
5066+
if(options.fromMatrix) {
5067+
var matrix = circuit.circuitMatrix();
5068+
var unitary = [];
50685069

5069-
for(var i = 0; i < numSamples + 1; i++) {
5070+
matrix.map(function(row) {
5071+
row.map(function(value) {
5072+
if(typeof value == "object") {
5073+
unitary.push([value.re, value.im]);
5074+
} else {
5075+
unitary.push(value);
5076+
}
5077+
});
5078+
});
50705079

5071-
var set = { input: [], output: [] };
5080+
output.problem.push({
5081+
unitary: unitary
5082+
});
5083+
} else {
5084+
var stateCircuit = new QuantumCircuit();
50725085

5073-
var initialVector = [];
5086+
var numSamples = options.numSamples || (this.numQubits < 3 ? 8 : (this.numQubits < 5 ? ((1 << this.numQubits) + 1) : (this.numQubits < 9 ? (this.numQubits * 4) : this.numQubits)));
5087+
for(var i = 0; i < numSamples + 1; i++) {
50745088

5075-
if(i > 0) {
5076-
stateCircuit.randomCircuit(this.numQubits, 20, { useGates: ["u3", "cx"], noClassicControl: true, noMeasure: true, noReset: true });
5077-
stateCircuit.run();
5089+
var set = { input: [], output: [] };
50785090

5079-
stateCircuit.stateAsArray().map(function(state) {
5080-
set.input.push([ state.amplitude.re, state.amplitude.im ]);
5081-
});
5091+
var initialVector = [];
50825092

5083-
initialVector = stateCircuit.state;
5084-
} else {
5085-
circuit.initState();
5093+
if(i > 0) {
5094+
stateCircuit.randomCircuit(this.numQubits, 20, { useGates: ["u3", "cx"], noClassicControl: true, noMeasure: true, noReset: true });
5095+
stateCircuit.run();
50865096

5087-
circuit.stateAsArray().map(function(state) {
5088-
set.input.push([ state.amplitude.re, state.amplitude.im ]);
5089-
});
5097+
stateCircuit.stateAsArray().map(function(state) {
5098+
set.input.push([ state.amplitude.re, state.amplitude.im ]);
5099+
});
50905100

5091-
initialVector = circuit.state;
5092-
}
5101+
initialVector = stateCircuit.state;
5102+
} else {
5103+
circuit.initState();
50935104

5094-
circuit.run(null, { initialState: initialVector });
5105+
circuit.stateAsArray().map(function(state) {
5106+
set.input.push([ state.amplitude.re, state.amplitude.im ]);
5107+
});
50955108

5096-
circuit.stateAsArray().map(function(state) {
5097-
set.output.push([ state.amplitude.re, state.amplitude.im ]);
5098-
});
5109+
initialVector = circuit.state;
5110+
}
50995111

5100-
output.problem.push(set);
5112+
circuit.run(null, { initialState: initialVector });
5113+
5114+
circuit.stateAsArray().map(function(state) {
5115+
set.output.push([ state.amplitude.re, state.amplitude.im ]);
5116+
});
5117+
5118+
output.problem.push(set);
5119+
}
51015120
}
51025121

51035122
return output;

0 commit comments

Comments
 (0)