Skip to content

feat: Record simulated delays in event hooks - #154

Merged
jake-arkinstall merged 2 commits into
mainfrom
feat/add-delay-item-to-circuit-extractor
Apr 13, 2026
Merged

jake-arkinstall merged 2 commits into
mainfrom
feat/add-delay-item-to-circuit-extractor

Conversation

@jake-arkinstall

Copy link
Copy Markdown
Collaborator

Although simulated delays' impacts can be seen indirectly through timing information, we should record them explicitly in event hooks so that users can use the information however they see fit, e.g. statistical analyses of simulated delays in a program run.

closes #153

Copilot AI review requested due to automatic review settings April 13, 2026 11:14

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds explicit logging of simulated (classical) delays to the instruction/event hook stream so downstream consumers (e.g., CircuitExtractor) can observe and analyze delays directly rather than inferring them from timing.

Changes:

  • Introduces a new event hook operation variant for simulated delays (ClassicalDelay).
  • Extends instruction log serialization/deserialization (Rust encoder + Python parser) to support the new operation.
  • Updates the QIS Python test to assert the delay is present in the extracted instruction stream.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
selene-sim/rust/event_hooks.rs Adds Operation::ClassicalDelay(u64) to the shared event-hook operation enum.
selene-sim/rust/event_hooks/instruction_log.rs Serializes ClassicalDelay into the instruction log with a new operation index.
selene-sim/rust/emulator.rs Emits a ClassicalDelay user-call hook during simulate_delay.
selene-sim/python/selene_sim/event_hooks/instruction_log.py Adds Python-side ClassicalDelay operation and parses the new operation index.
selene-sim/python/tests/test_qis.py Extends test_simulate_delay to assert the delay appears explicitly in CircuitExtractor output.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread selene-sim/rust/emulator.rs Outdated
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@jake-arkinstall
jake-arkinstall merged commit 608884a into main Apr 13, 2026
10 checks passed
@jake-arkinstall
jake-arkinstall deleted the feat/add-delay-item-to-circuit-extractor branch April 13, 2026 13:32
jake-arkinstall pushed a commit that referenced this pull request Apr 21, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.2.14](selene-sim-v0.2.13...selene-sim-v0.2.14)
(2026-04-21)


### Features

* add timing to builtin runtimes and batching options to softrz runtime
([#158](#158))
([049e123](049e123))
* Record simulated delays in event hooks
([#154](#154))
([608884a](608884a))
* Traces for analytics
([#160](#160))
([24b9978](24b9978))


### Bug Fixes

* classify lowered qir-qis bitcode as helios
([#157](#157))
([67fca60](67fca60))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
jake-arkinstall added a commit that referenced this pull request Jun 12, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.3.0-alpha.1](selene-sim-v0.3.0-alpha.0...selene-sim-v0.3.0-alpha.1)
(2026-06-12)


### ⚠ BREAKING CHANGES

* Use struct exports for all plugin types, separate error model and
simulator ([#169](#169))
* Add handling for an additional gateset
([#119](#119))

### Features

* Add __version__ attributes
([#137](#137))
([379ae01](379ae01))
* Add event hook which records measurement results
([#104](#104))
([01300ee](01300ee)),
closes [#103](#103)
* Add handling for an additional gateset
([#119](#119))
([5180b80](5180b80))
* Add simulate_delay functionality
([#139](#139))
([cca97fa](cca97fa))
* Add support for object files provided as bytes
([#94](#94))
([c4cfac6](c4cfac6))
* add timing to builtin runtimes and batching options to softrz runtime
([#158](#158))
([049e123](049e123))
* Better exception handling for parse_shots=False
([#70](#70))
([3caf530](3caf530))
* Build improvements
([#142](#142))
([12f399b](12f399b))
* Bump selene-core dependency and relax guppylang testing dependency
([#120](#120))
([6375791](6375791))
* Cleanup error'd processes before log collection
([#98](#98))
([77e698e](77e698e))
* **compiler:** Bump tket version; add wasm + gpu to the hugr-qis
registry
([c69155d](c69155d))
* correct shot end strategy and error processing
([#91](#91))
([93eaeb0](93eaeb0))
* Emit a nicer error when trying to emulate unsupported pytket ops
([#72](#72))
([d88a28a](d88a28a))
* Fine-grained timeout configuration
([#69](#69))
([072842e](072842e))
* Interactive use of Selene from python
([#135](#135))
([db3028d](db3028d))
* Make interfaces shared, add ArgReader
([#171](#171))
([143e742](143e742))
* QIR support using QIR-QIS
([#114](#114))
([70ab294](70ab294))
* Quest performance improvements
([#133](#133))
([af640e9](af640e9))
* random_advance ([#55](#55))
([974b496](974b496))
* Record simulated delays in event hooks
([#154](#154))
([608884a](608884a))
* Result stream handling refactor
([#93](#93))
([607a55e](607a55e))
* Stim improvements (more ops + state printing)
([#115](#115))
([867d5e5](867d5e5))
* Support state-dump passthrough on quantum replay simulator
([#108](#108))
([1b01a01](1b01a01))
* test on QIS instead of relying on the upper stack
([#150](#150))
([b80a9c4](b80a9c4))
* Test on QIS snapshots
([#134](#134))
([c4d58ab](c4d58ab))
* Traces for analytics
([#160](#160))
([24b9978](24b9978))
* update to tket-qsystem 0.20
([#66](#66))
([7191b07](7191b07))
* Use mingw instead of msvc for windows wheels
([#143](#143))
([3d91514](3d91514))
* Use SeleneStartupError for errors before shot_start
([#170](#170))
([85c2907](85c2907))
* Use struct exports for all plugin types, separate error model and
simulator ([#169](#169))
([c44a5c9](c44a5c9))


### Bug Fixes

* add `___barrier` to Helios QIS for QIR emulation
([#136](#136))
([dfbc4c3](dfbc4c3))
* Add ENDING to allowed shot state on receiving meta information
([#100](#100))
([fc4d673](fc4d673))
* Add numpy dependency back
([#127](#127))
([c9a01eb](c9a01eb))
* avoid using qir_major_version string for QIR detection
([#123](#123))
([deaa0dc](deaa0dc))
* classify lowered qir-qis bitcode as helios
([#157](#157))
([67fca60](67fca60))
* **compiler:** error when entrypoint has arguments
([#84](#84))
([604b131](604b131))
* **compiler:** update tket-qystem to fix CZ bug
([#78](#78))
([3991f11](3991f11))
* correct post_runtime duration metric
([#74](#74))
([0bef66a](0bef66a))
* make qir-qis optional and stabilize CI
([#164](#164))
([e52c0b2](e52c0b2))


### Documentation

* add repository citation guidance and metadata
([#146](#146))
([880a58b](880a58b)),
closes [#145](#145)
* Correct URL to guppy repository
([#121](#121))
([27ded00](27ded00))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: Jake Arkinstall <65358059+jake-arkinstall@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add explicit "simulated delay" blocks in user program output in CircuitExtractor

2 participants