1
1
// Copyright (c) Microsoft Corporation.
2
2
// Licensed under the MIT License.
3
3
// This code was based on pyqir_generator::python::PyQIR
4
- use pyqir_generator:: emit:: get_ir_string;
4
+ use pyqir_generator:: emit:: { get_ir_string, write_model_to_file } ;
5
5
use pyqir_generator:: interop:: {
6
6
ClassicalRegister , Controlled , Instruction , Measured , QuantumRegister , Rotated , SemanticModel ,
7
7
Single ,
8
8
} ;
9
9
use qasm:: { Argument , AstNode } ;
10
10
use log;
11
11
12
- use crate :: qasm2qir:: arguments:: { QubitRef , Pair } ;
12
+ use crate :: qasm2qir:: arguments:: { Register , Pair } ;
13
13
14
14
pub struct QasmListener {
15
15
pub ( super ) model : SemanticModel ,
@@ -26,6 +26,10 @@ impl QasmListener {
26
26
return get_ir_string ( & self . model ) ;
27
27
}
28
28
29
+ pub fn write_model_to_file ( & mut self , file_name : String ) -> Result < ( ) , String > {
30
+ return write_model_to_file ( & self . model , & file_name)
31
+ }
32
+
29
33
pub fn cx ( & mut self , control : String , target : String ) {
30
34
log:: info!( "cx {} => {}" , control, target) ;
31
35
let controlled = Controlled :: new ( control, target) ;
@@ -159,18 +163,19 @@ impl QasmListener {
159
163
}
160
164
161
165
pub fn measure ( & mut self , qubit : Argument , register : Argument ) {
162
- if let Argument :: Qubit ( _name, _idx) = qubit {
163
- if let Argument :: Register ( _reg_name) = register {
164
- self . m ( format ! ( "{}{}" , _name, _idx) , format ! ( "{}0" , _reg_name) ) ;
165
- }
166
- }
166
+ let qubit: Register = ( & qubit) . try_into ( ) . unwrap ( ) ;
167
+ let register: Register = ( & register) . try_into ( ) . unwrap ( ) ;
168
+ self . m (
169
+ qubit. as_qir_name ( ) ,
170
+ register. as_qir_name ( )
171
+ ) ;
167
172
}
168
-
173
+
169
174
pub fn apply_gate ( & mut self , name : String , qubits : Vec < Argument > ) {
170
175
println ! ( "{:?}" , name) ;
171
176
172
177
if name == "h" {
173
- let qubit: QubitRef = ( & qubits) . try_into ( ) . unwrap ( ) ;
178
+ let qubit: Register = ( & qubits) . try_into ( ) . unwrap ( ) ;
174
179
self . h ( qubit. as_qir_name ( ) ) ;
175
180
} else if name == "CX" {
176
181
let Pair ( control, target) =
0 commit comments