Skip to content

Feat: correct shot end strategy and error processing - #91

Merged
jake-arkinstall merged 2 commits into
mainfrom
feat/correct-shot-end-strategy
Oct 29, 2025
Merged

jake-arkinstall merged 2 commits into
mainfrom
feat/correct-shot-end-strategy

Conversation

@jake-arkinstall

@jake-arkinstall jake-arkinstall commented Oct 27, 2025

Copy link
Copy Markdown
Collaborator

Currently metadata is being written before shot_end is called, which means that teardown information (e.g. instruction logs) are not preserved. This PR fixes that.

This highlights that the emission of extra information after shot_end is quite useful, while in the current implementation we prevent output upon a panic. As such, this PR also modifies error handling to allow additional data to be provided after the exception has been introduced, allowing for inspection of metadata (e.g. instruction logs) even after the panic message has been emitted to the results stream. It does this by removing an inherent assumption that the last 4 entries correspond directly to the error details, and upon missing information it now returns a useful error message instead of None.

The latter topic currently only makes sense in the context of parse_results=False, as the default (parse_results=True) behaviour is to raise an exception upon spotting the panic message in the results stream, thus eliminating the extraction of previous results.

I am strongly leaning towards the following position: selene runs should not raise exceptions but a golang-style (shots, err) pair - i.e. enforce parse_results=False. Now that guppylang ships its own selene frontend, I think we have the opportunity to do that without disrupting users too much. I have found the exception flow to be problematic WRT lifetimes of child processes, handling of the TCP stream, preservation of shot information, and so on. As such I am considering making that change for the future selene 0.3-series. Opinions appreciated.

@doug-q doug-q 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.

Awesome, thank you Jake.

@jake-arkinstall
jake-arkinstall merged commit 93eaeb0 into main Oct 29, 2025
10 checks passed
@jake-arkinstall
jake-arkinstall deleted the feat/correct-shot-end-strategy branch October 29, 2025 11:49
jake-arkinstall pushed a commit that referenced this pull request Nov 7, 2025
🤖 I have created a release *beep* *boop*
---


##
[0.2.5](selene-sim-v0.2.4...selene-sim-v0.2.5)
(2025-11-07)


### Features

* Add support for object files provided as bytes
([#94](#94))
([c4cfac6](c4cfac6))
* Cleanup error'd processes before log collection
([#98](#98))
([77e698e](77e698e))
* 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))
* Result stream handling refactor
([#93](#93))
([607a55e](607a55e))

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

2 participants