|
1 | 1 | use std::collections::HashSet; |
2 | 2 | use num_bigint::BigUint; |
3 | 3 | use num_complex::Complex; |
4 | | -use qsc::{interpret::Value, Backend}; |
| 4 | +use qsc::{interpret::{GenericReceiver, Value}, Backend, PackageType, TargetCapabilityFlags}; |
| 5 | + |
| 6 | +use crate::sim::{create_interpreter, QsError}; |
| 7 | + |
| 8 | +pub fn qasm2(source: &str, generation_options: QasmGenerationOptions) -> Result<String, QsError> { |
| 9 | + let mut stdout = vec![]; |
| 10 | + let mut out = GenericReceiver::new(&mut stdout); |
| 11 | + let mut backend = Qasm2Backend::new(generation_options); |
| 12 | + |
| 13 | + let mut interpreter = create_interpreter(Some(source), PackageType::Exe, TargetCapabilityFlags::empty())?; |
| 14 | + let _ = interpreter.eval_entry_with_sim(&mut backend, &mut out)?; |
| 15 | + |
| 16 | + let qasm = backend.get_qasm().map_err(|errors| QsError::ErrorMessage { error_text: errors.join(", ") })?; |
| 17 | + Ok(qasm) |
| 18 | +} |
| 19 | + |
| 20 | +pub fn qasm2_expression(expression: &str, generation_options: QasmGenerationOptions) -> Result<String, QsError> { |
| 21 | + let mut stdout = vec![]; |
| 22 | + let mut out = GenericReceiver::new(&mut stdout); |
| 23 | + let mut backend = Qasm2Backend::new(generation_options); |
| 24 | + |
| 25 | + let mut interpreter = create_interpreter(None, PackageType::Lib, TargetCapabilityFlags::empty())?; |
| 26 | + let _ = interpreter.run_with_sim(&mut backend, &mut out, Some(expression))?; |
| 27 | + |
| 28 | + let qasm = backend.get_qasm().map_err(|errors| QsError::ErrorMessage { error_text: errors.join(", ") })?; |
| 29 | + Ok(qasm) |
| 30 | +} |
5 | 31 |
|
6 | 32 | pub(crate) struct Qasm2Backend { |
7 | 33 | code: Vec<String>, |
|
0 commit comments