Skip to content

v0.2.1b1

Choose a tag to compare

@Shiro-Raven Shiro-Raven released this 17 Nov 01:42

0.2.1b1 (2025-08-07)

✨ Added

  • Circuit cutting as a service: added CIRCUIT_CUT job type to QoroService with validation to ensure only one circuit is submitted for circuit-cutting jobs
  • Noisy simulation support in ParallelSimulator: added qiskit_backend parameter (supports "auto" for automatic backend selection or specific backend names) and noise_model parameter for simulating noisy quantum circuits using Qiskit Aer
  • Zero Noise Extrapolation (ZNE) implementation: added ZNE class in divi/qem.py (187 lines) using Mitiq library with modify_circuit() method for circuit folding and postprocess_results() method for extrapolation, supporting configurable scale factors and extrapolation factories
  • QASM import/export functionality for QEM support: added cirq_circuit_from_qasm() and cirq_circuit_to_qasm() functions in divi/exp/cirq/ module for converting between Cirq circuits and QASM strings, enabling QEM protocols like ZNE to work with circuit representations
  • Cirq QASM parser and lexer for QEM support: added _lexer.py (126 lines) and _parser.py (889 lines) modules with PLY-based lexer and parser implementation for parsing QASM 2.0 syntax, including support for parameterized gates with input and angle keywords, required for QEM circuit manipulation
  • Progress bars with polling info: added _pbar.py module (73 lines) using Rich library with make_progress_bar() function, ConditionalSpinnerColumn, and PhaseStatusColumn classes that display job progress, polling attempts, and final status
  • Enhanced logging module (qlogger): improved OverwriteStreamHandler class (85 lines) with message overwriting support using \c prefix for updating progress messages on the same line, and better terminal size handling
  • Circuit folding with modified Cirq conversion code: enhanced QASM export to properly handle parameterized circuits by modifying Cirq's QASM conversion to preserve Sympy symbols for parameters
  • CircuitRunner abstract base class: added divi/interfaces.py (21 lines) with abstract submit_circuits() method for abstracting circuit execution, implemented by ParallelSimulator and QoroService
  • Reporter infrastructure for progress tracking: added progress reporting system in ProgramBatch and QuantumProgram classes that integrates with progress bars and logging for real-time status updates

🔄 Changed

  • Refactored ParallelSimulator to implement CircuitRunner interface: renamed simulate() method to submit_circuits() and made class inherit from CircuitRunner for consistent API
  • Updated QoroService to implement CircuitRunner interface: renamed send_circuits() method to submit_circuits() and made class inherit from CircuitRunner for consistent API
  • Enhanced circuit generation and parameter handling: improved MetaCircuit class to properly handle parameterized circuits with measure_all=True and symbol preservation in QASM export
  • Improved error handling and logging: enhanced error messages and logging throughout codebase, particularly in circuit execution and progress reporting
  • Updated tutorial examples: modified grouping tutorial to work with new API changes

🐛 Fixed

  • Fixed instance variable conflict in QuantumProgram: resolved variable naming conflicts that were causing issues in program execution
  • Fixed issues with standalone Sympy symbols: corrected QASM export to properly handle Sympy symbols in parameterized circuits, preventing Pennylane errors from unresolved symbols
  • Fixed bug with postprocessing function in ProgramBatch: corrected postprocessing logic to properly handle results from batch execution