|
7 | 7 | * the LICENSE.txt file in the root directory of this source tree. |
8 | 8 | */ |
9 | 9 |
|
| 10 | +const { i, typeOf } = require("mathjs"); |
10 | 11 | var math = require("mathjs"); |
11 | 12 |
|
12 | 13 | var QASMImport = require("./qasm_import/QASMImport.js"); |
@@ -5754,6 +5755,51 @@ QuantumCircuit.prototype.exportQuirk = function(decompose) { |
5754 | 5755 | var gateLocations = {}; |
5755 | 5756 | var customGateCircuit = new QuantumCircuit(); |
5756 | 5757 |
|
| 5758 | + var tempCircuit = new QuantumCircuit(); |
| 5759 | + tempCircuit.load(this.save(decompose)); |
| 5760 | + |
| 5761 | + var gatesToBeAdded = []; |
| 5762 | + |
| 5763 | + if(!decompose) { |
| 5764 | + var numCols = tempCircuit.numCols(); |
| 5765 | + for(var column = numCols - 1; column >= 0; column--) { |
| 5766 | + for(var wire = 0; wire < tempCircuit.numQubits; wire++) { |
| 5767 | + var gate = tempCircuit.gates[wire][column]; |
| 5768 | + if(gate && gate.connector == 0 && !tempCircuit.basicGates[gate.name]) { |
| 5769 | + customDecomposedCircuit = tempCircuit.decomposeGateAt(column, wire); |
| 5770 | + var isDecomposeCustomCircuit = false; |
| 5771 | + for(var decomposedColumn = 0; decomposedColumn < numCols; decomposedColumn++) { |
| 5772 | + for(var decomposedWire = 0; decomposedWire < customDecomposedCircuit.numQubits; decomposedWire++) { |
| 5773 | + var gateInCustomCircuit = customDecomposedCircuit.getGateAt(decomposedColumn, decomposedWire); |
| 5774 | + gatesToBeAdded.push(gateInCustomCircuit); |
| 5775 | + if(gateInCustomCircuit){ |
| 5776 | + var basicGateInCustomCircuit = customDecomposedCircuit.basicGates[gateInCustomCircuit.name]; |
| 5777 | + if(basicGateInCustomCircuit.exportInfo && !basicGateInCustomCircuit.exportInfo.quirk){ |
| 5778 | + isDecomposeCustomCircuit = true; |
| 5779 | + } |
| 5780 | + } |
| 5781 | + |
| 5782 | + if(isDecomposeCustomCircuit){ |
| 5783 | + var tempGates = circuit.gates; |
| 5784 | + circuit.gates.map(function(circuitGate, index){ |
| 5785 | + if(circuitGate[0] && circuitGate[0].name == gate.name){ |
| 5786 | + circuit.removeGate(circuitGate[0].id); |
| 5787 | + } |
| 5788 | + }); |
| 5789 | + } |
| 5790 | + } |
| 5791 | + } |
| 5792 | + } |
| 5793 | + } |
| 5794 | + } |
| 5795 | + } |
| 5796 | + |
| 5797 | + gatesToBeAdded.map(function(gateToAdd){ |
| 5798 | + if(gateToAdd){ |
| 5799 | + circuit.addGate(gateToAdd.name, gateToAdd.column, gateToAdd.wires, gateToAdd.options); |
| 5800 | + } |
| 5801 | + }) |
| 5802 | + |
5757 | 5803 | var numCols = circuit.numCols(); |
5758 | 5804 | for(var column = 0; column < numCols; column++) { |
5759 | 5805 | var quirkColumn = []; |
@@ -5863,7 +5909,6 @@ QuantumCircuit.prototype.exportQuirk = function(decompose) { |
5863 | 5909 | } |
5864 | 5910 | quirkColumn.push(quirkName); |
5865 | 5911 | } else { |
5866 | | - // wireRange = range(gate.wires.length); |
5867 | 5912 | var changeWires = JSON.stringify(gateWires.sort()) == JSON.stringify(wireRange); |
5868 | 5913 | if(!changeWires && isWireInRange(gate.wire, wireRange)){ |
5869 | 5914 | quirkColumn.push(1); |
@@ -5895,6 +5940,7 @@ QuantumCircuit.prototype.exportQuirk = function(decompose) { |
5895 | 5940 | quirk.cols.push(quirkColumn); |
5896 | 5941 | } |
5897 | 5942 |
|
| 5943 | + |
5898 | 5944 | // user defined gates |
5899 | 5945 | if(!decompose) { |
5900 | 5946 | var usedGates = circuit.usedGates(); |
|
0 commit comments