Skip to content

feat: Fine-grained timeout configuration - #69

Merged
jake-arkinstall merged 4 commits into
mainfrom
fix/timeout-configuration
Aug 26, 2025
Merged

jake-arkinstall merged 4 commits into
mainfrom
fix/timeout-configuration

Conversation

@jake-arkinstall

@jake-arkinstall jake-arkinstall commented Aug 22, 2025

Copy link
Copy Markdown
Collaborator

The timeout parameter for run_shots required more fine-grained control so that different timeout aspects can be configured.

Previously:

  • the timeout parameter was a timedelta|None that corresponded to a socket read timeout, which was counter-intuitive for many users.

With this PR:

  • The timeout parameter is a Timeout|timedelta|None.
  • Timeout is a new class that allows independent setting of:
    • Overall simulation time: maximum time for all shots to finish
    • Per-shot simulation time: maximum time for a shot to finish
    • Per-result simulation time: maximum time to wait between results in a shot
    • Backend startup time: maximum time for the frontend TCP host to wait for client connections before giving up
  • If given a timedelta, this sets the overall time.

As the original input format (a datetime) is still supported, and will have the behaviour that users are expecting anyway, that aspect is not necessarily breaking.

This PR also introduces a SeleneTimeoutError. This is triggered on any timeout except for the backend startup time, as this keeps the existing behaviour of SeleneStartupError. Technically the addition of a new exception is breaking - how concerned are we about that @ss2165 @CalMacCQ?

…meouts. Add tests. Datetime still accepted as run_shots timeout parameter, and takes the meaning of overall timeout.


@dataclass
class Timeout:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nice to have some docstrings on these classes

return time.perf_counter() - self.start_timestamp

def remaining_seconds(self) -> float | None:
"""

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

again only some methods seem to have docstrings?

@CalMacCQ

Copy link
Copy Markdown

This sounds useful to me from a user's perspective :) I don't have a whole lot to add.

Is this change only breaking in the sense that the error is changed? Meaning that code which does exception handling around SeleneStartupError or SeleneTimeoutError would break? This seems quite niche to me. Not particularly concerned.

@jake-arkinstall
jake-arkinstall merged commit 072842e into main Aug 26, 2025
11 checks passed
@jake-arkinstall
jake-arkinstall deleted the fix/timeout-configuration branch August 26, 2025 11:37
jake-arkinstall pushed a commit that referenced this pull request Aug 26, 2025
🤖 I have created a release *beep* *boop*
---


##
[0.2.3](selene-sim-v0.2.2...selene-sim-v0.2.3)
(2025-08-26)


### Features

* Better exception handling for parse_shots=False
([#70](#70))
([3caf530](3caf530))
* Fine-grained timeout configuration
([#69](#69))
([072842e](072842e))
* update to tket-qsystem 0.20
([#66](#66))
([7191b07](7191b07))

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

3 participants