Skip to content

Migrate Tecan Infinite 200 PRO to Device/Driver/Capability architecture#989

Open
rickwierenga wants to merge 3 commits intov1b1from
tecan-infinite-migration
Open

Migrate Tecan Infinite 200 PRO to Device/Driver/Capability architecture#989
rickwierenga wants to merge 3 commits intov1b1from
tecan-infinite-migration

Conversation

@rickwierenga
Copy link
Copy Markdown
Member

Summary

  • Split monolithic ExperimentalTecanInfinite200ProBackend (~1345 lines) into the new Device/Driver/CapabilityBackend/Capability architecture under pylabrobot/tecan/infinite/
  • New TecanInfinite200Pro device class with reader.absorbance.read(), reader.fluorescence.read(), reader.luminescence.read() API
  • Legacy wrapper delegates to new backends with zero duplicated logic — all 18 legacy tests pass with minimal test changes (patch targets moved from wrapper to driver)
  • 12 new tests for the new architecture (protocol, decoders, geometry, backend integration)
  • Updated docs notebook to use new API
  • Added Sphinx API docs for pylabrobot.tecan

New files

File Purpose
pylabrobot/tecan/infinite/protocol.py Pure protocol: framing, stream parsing, decoders, calibration math
pylabrobot/tecan/infinite/driver.py TecanInfiniteDriver — USB I/O, scan orchestration, geometry
pylabrobot/tecan/infinite/absorbance_backend.py TecanInfiniteAbsorbanceBackend + params
pylabrobot/tecan/infinite/fluorescence_backend.py TecanInfiniteFluorescenceBackend + params
pylabrobot/tecan/infinite/luminescence_backend.py TecanInfiniteLuminescenceBackend + params
pylabrobot/tecan/infinite/infinite.py TecanInfinite200Pro(Resource, Device)
pylabrobot/tecan/infinite/infinite_tests.py 12 new tests
docs/api/pylabrobot.tecan.rst Sphinx API docs

Test plan

  • All 18 legacy tests pass unchanged (test targets updated from wrapper to driver)
  • 12 new architecture tests pass
  • All import paths verified (new + legacy + re-exports)
  • Notebook API verified against source signatures
  • Reviewed by 12 specialized agents covering protocol correctness, driver compliance, backend fidelity, legacy compat, test coverage, architecture compliance, lint, cross-codebase impact, and end-to-end verification

🤖 Generated with Claude Code

@rickwierenga rickwierenga force-pushed the tecan-infinite-migration branch 2 times, most recently from d56dab6 to 5aa8dfa Compare April 9, 2026 02:30
rickwierenga and others added 3 commits April 8, 2026 19:30
Split the monolithic ExperimentalTecanInfinite200ProBackend (~1345 lines)
into the new architecture:

- pylabrobot/tecan/infinite/protocol.py: pure protocol utilities (framing,
  stream parsing, decoders, calibration math)
- pylabrobot/tecan/infinite/driver.py: TecanInfiniteDriver (USB I/O,
  scan orchestration, well-to-stage geometry)
- pylabrobot/tecan/infinite/absorbance_backend.py: AbsorbanceBackend impl
- pylabrobot/tecan/infinite/fluorescence_backend.py: FluorescenceBackend impl
- pylabrobot/tecan/infinite/luminescence_backend.py: LuminescenceBackend impl
- pylabrobot/tecan/infinite/infinite.py: TecanInfinite200Pro device frontend

The legacy wrapper now delegates to the new backends (zero duplicated
logic). Legacy tests patched to target the driver directly. All 30 tests
pass (18 legacy + 12 new).

Also updates the docs notebook to use the new API and adds Sphinx API
docs for pylabrobot.tecan.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace direct open()/close() methods with LoadingTray capability
using HasLoadingTray mixin. Commands sent directly via
TecanInfiniteLoadingTrayBackend.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.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