feat: test on QIS instead of relying on the upper stack - #150
Conversation
ceb9320 to
1fcae45
Compare
This avoids running guppy/hugr/tket/qis-compiler in CI testing, and avoids changes in that upper stack from violating snapshots due to e.g. rearranged operations.
1fcae45 to
7362a62
Compare
…st by having section number 0
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Updates Selene’s snapshot testing workflow to run against stored QIS LLVM outputs (and source hashes) rather than rebuilding through the full upstream stack, reducing test flakiness from upstream changes.
Changes:
- Adds checked-in platform-specific LLVM IR snapshots (
.ll) and corresponding Guppy source hashes (.sha256) for multiple tests/plugins. - Introduces symbol-extraction utilities (
symbols.py) and updates build builtins to use them (LLVM viallvmlite, objects vialief). - Makes optional builtin registration conditional on installed packages and adjusts build/test tooling (CMake build dirs; removes
guppylangfrom test requirements; adds--compile-guppytooling).
Reviewed changes
Copilot reviewed 128 out of 428 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| selene-sim/python/tests/resources/from_guppy/test_debug/test_state_cleanup[None-QuestPlugin]/array_state_cleanup.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_state_cleanup[False-StimPlugin]/array_state_cleanup.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_state_cleanup[False-QuestPlugin]/array_state_cleanup.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_qubit_ordering_state[StimPlugin]/qubit_ordering_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_qubit_ordering_state[QuestPlugin]/qubit_ordering_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[1-StimPlugin]/quantum_replay_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[1-StimPlugin]/quantum_replay_state-x86_64-windows-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[1-StimPlugin]/quantum_replay_state-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[1-StimPlugin]/quantum_replay_state-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[1-QuestPlugin]/quantum_replay_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[1-QuestPlugin]/quantum_replay_state-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[1-QuestPlugin]/quantum_replay_state-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[0-StimPlugin]/quantum_replay_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[0-StimPlugin]/quantum_replay_state-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[0-StimPlugin]/quantum_replay_state-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[0-QuestPlugin]/quantum_replay_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[0-QuestPlugin]/quantum_replay_state-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_quantum_replay_state[0-QuestPlugin]/quantum_replay_state-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[StimPlugin]/initial_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[StimPlugin]/initial_state-x86_64-windows-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[StimPlugin]/initial_state-x86_64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[StimPlugin]/initial_state-x86_64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[StimPlugin]/initial_state-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[StimPlugin]/initial_state-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[QuestPlugin]/initial_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[QuestPlugin]/initial_state-x86_64-windows-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[QuestPlugin]/initial_state-x86_64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[QuestPlugin]/initial_state-x86_64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[QuestPlugin]/initial_state-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_initial_state[QuestPlugin]/initial_state-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_array_subscript_state[StimPlugin]/array_subscript_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_array_subscript_state[QuestPlugin]/array_subscript_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_array_state[StimPlugin]/array_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_debug/test_array_state[QuestPlugin]/array_state.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_cleanup/test_file_deletion/file_deletion.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_cleanup/test_file_deletion/file_deletion-x86_64-windows-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_cleanup/test_file_deletion/file_deletion-x86_64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_cleanup/test_file_deletion/file_deletion-x86_64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_cleanup/test_file_deletion/file_deletion-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_cleanup/test_file_deletion/file_deletion-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config2]/strict_build_llvm_bc.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config2]/strict_build_llvm_bc-x86_64-windows-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config2]/strict_build_llvm_bc-x86_64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config2]/strict_build_llvm_bc-x86_64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config2]/strict_build_llvm_bc-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config2]/strict_build_llvm_bc-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config1]/strict_build_llvm_ir.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config1]/strict_build_llvm_ir-x86_64-windows-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config1]/strict_build_llvm_ir-x86_64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config1]/strict_build_llvm_ir-x86_64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config1]/strict_build_llvm_ir-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config1]/strict_build_llvm_ir-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config0]/strict_build_default.sha256 | Adds stored Guppy source hash for this snapshot test case |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config0]/strict_build_default-x86_64-windows-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config0]/strict_build_default-x86_64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config0]/strict_build_default-x86_64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config0]/strict_build_default-aarch64-unknown-linux-gnu.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/tests/resources/from_guppy/test_build_validation/test_strict_builds_guppy[build_config0]/strict_build_default-aarch64-apple-darwin.ll | Adds checked-in LLVM IR snapshot for this platform/target |
| selene-sim/python/selene_sim/interactive/full_stack.py | Adds a simulator capability check before extracting state |
| selene-ext/simulators/classical-replay/rust/lib.rs | Fixes shot ID bounds check in classical replay simulator |
| selene-core/python/selene_core/build_utils/utils.py | Removes symbol-parsing helpers from utils (moved to new module) |
| selene-core/python/selene_core/build_utils/symbols.py | Adds symbol extraction for objects (lief) and LLVM IR/bitcode (llvmlite) |
| selene-core/python/selene_core/build_utils/builtins/selene.py | Switches builtin matching from “undefined symbols list” to symbol tables |
| selene-core/python/selene_core/build_utils/builtins/helios.py | Switches Helios artifact matching to use symbol tables for LLVM/objects |
| selene-core/python/selene_core/build_utils/builtins/init.py | Makes hugr/qir builtins conditional on installed packages; updates exports |
| selene-core/python/selene_core/build_utils/init.py | Updates build_utils public exports to new symbol APIs |
| selene-core/pyproject.toml | Adds llvmlite dependency and clarifies lief purpose for symbol inspection |
| pyproject.toml | Removes guppylang from test dependencies (snapshots now stored) |
| hatch_build.py | Changes CMake build dirs to stable target/* dirs; adjusts configure invocation |
| conftest.py | Adds --compile-guppy option and fixture to validate/rebuild LLVM snapshots |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| from .types import ArtifactKind, Artifact, Step, LibDep, BuildCtx # noqa: F401 | ||
| from .planner import BuildPlanner | ||
| from .builtins import register_builtins | ||
| from .utils import ( | ||
| get_undefined_symbols_from_object, # noqa: F401 | ||
| get_undefined_symbols_from_llvm_ir_file, # noqa: F401 | ||
| get_undefined_symbols_from_llvm_ir_string, # noqa: F401 | ||
| invoke_zig, # noqa: F401 | ||
| from .utils import invoke_zig # noqa: F401 | ||
| from .symbols import ( | ||
| SymbolTable, # noqa: F401 | ||
| get_symbols_from_object, # noqa: F401 | ||
| get_symbols_from_llvm, # noqa: F401 | ||
| ) |
There was a problem hiding this comment.
This changes the selene_core.build_utils public surface by removing the previously re-exported get_undefined_symbols_from_* helpers. If downstream code imports those from build_utils, this is a breaking change. Consider keeping backward-compatible wrappers (possibly deprecated) or documenting the migration to get_symbols_from_object/get_symbols_from_llvm.
There was a problem hiding this comment.
I am not concerned by this, as it is quite low in the implementation detail weeds.
There was a problem hiding this comment.
@copilot apply changes based on this feedback
Expose the existing functions as thin wrappers over the new get_symbols_from_X functions, and mark them deprecated.
There was a problem hiding this comment.
Implemented this with thin backward-compatible wrappers in selene_core.build_utils: get_undefined_symbols_from_object and get_undefined_symbols_from_llvm now delegate to get_symbols_from_* and return .undefined_functions, and both wrappers emit DeprecationWarning. Addressed in cf31cd8.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Agent-Logs-Url: https://github.com/Quantinuum/selene/sessions/d8a1cdf8-0a95-4e21-91b7-86290446f214 Co-authored-by: jake-arkinstall <65358059+jake-arkinstall@users.noreply.github.com>
Agent-Logs-Url: https://github.com/Quantinuum/selene/sessions/d8a1cdf8-0a95-4e21-91b7-86290446f214 Co-authored-by: jake-arkinstall <65358059+jake-arkinstall@users.noreply.github.com>
…p identify the underlying error
🤖 I have created a release *beep* *boop* --- ## [0.2.7](selene-core-v0.2.6...selene-core-v0.2.7) (2026-04-10) ### Features * Build improvements ([#142](#142)) ([12f399b](12f399b)) * test on QIS instead of relying on the upper stack ([#150](#150)) ([b80a9c4](b80a9c4)) * Use mingw instead of msvc for windows wheels ([#143](#143)) ([3d91514](3d91514)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- ## [0.2.13](selene-sim-v0.2.12...selene-sim-v0.2.13) (2026-04-10) ### Features * Build improvements ([#142](#142)) ([12f399b](12f399b)) * test on QIS instead of relying on the upper stack ([#150](#150)) ([b80a9c4](b80a9c4)) * Use mingw instead of msvc for windows wheels ([#143](#143)) ([3d91514](3d91514)) ### Documentation * add repository citation guidance and metadata ([#146](#146)) ([880a58b](880a58b)), closes [#145](#145) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 I have created a release *beep* *boop* --- ## [0.3.0-alpha.1](selene-core-v0.3.0-alpha.0...selene-core-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 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)) * Build improvements ([#142](#142)) ([12f399b](12f399b)) * 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)) * Result stream handling refactor ([#93](#93)) ([607a55e](607a55e)) * Stim improvements (more ops + state printing) ([#115](#115)) ([867d5e5](867d5e5)) * test on QIS instead of relying on the upper stack ([#150](#150)) ([b80a9c4](b80a9c4)) * Traces for analytics ([#160](#160)) ([24b9978](24b9978)) * Use mingw instead of msvc for windows wheels ([#143](#143)) ([3d91514](3d91514)) * 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)) * avoid using qir_major_version string for QIR detection ([#123](#123)) ([deaa0dc](deaa0dc)) * classify lowered qir-qis bitcode as helios ([#157](#157)) ([67fca60](67fca60)) * make qir-qis optional and stabilize CI ([#164](#164)) ([e52c0b2](e52c0b2)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
🤖 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>
Selene's role is to emulate platforms, and the primary input is QIS.
Although Selene provides interfaces for integrating the upper stack (guppy, hugr, tket2, qis-compiler) in normal usage, changes in these components can impact our snapshot tests.
This PR uses stored QIS LLVM to run tests. Guppy is kept inline, by keeping the entire guppy source of a test in a string, validating its hash against a stored hash (to detect changes), and fetching the corresponding LLVM. The LLVM can be regenerated by using
pytest --compile-guppy.