@@ -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