feat(hamilton): add Prep device over TCP transport - #1196
Open
cmoscy wants to merge 13 commits into
Open
Conversation
Replace the thin post-PyLabRobot#1000 stub with the HOI/HARP session client, command layer, wire types, and introspection stack so Prep/Nimbus can build on it.
Python 3.9 binds asyncio.Lock to the current loop at Socket construction, so HamiltonTCPClient cannot be created in sync TestCase methods. Use IsolatedAsyncioTestCase for those cases.
Plain Prep package with channels/head8/gripper over HamiltonTCPClient, kwargs for LH params, local op types, PrepDeck, and liquid_class_resolver.
…pick Expose resource-aware plate drop with deck reassignment, arm-level pick_up_at_location, and optional resource_width on pick_up_resource so notebooks no longer compute grip geometry by hand.
Delete prep/standard op dataclasses; peers take TipSpots/wells + vols with kwargs instead of constructing op objects.
Queue intents before device commands and commit or roll back from ChannelSuccesses so labware trackers stay consistent for deck and visualizer updates without vendor-specific bookkeeping.
Replace private mounted-tip maps with TipTrackers and call shared finalize after pick/drop and aspirate/dispense so spot, well, and mount state update from command outcomes.
Move to mount XY at traverse height before PrepPickUpTool, matching tip pickup, so tool engage does not swoop down from an arbitrary pose.
Show deck-rooted visualizer updates for tip spots and well fills, with status prints for channel mount state during dual-channel transfer.
Capture tip/volume tracking through dual-channel and 8MPH sections, link the notebook under Hamilton Prep docs, add channels volume-tracker coverage, and apply ruff formatting on the related Prep modules.
Drop field(kw_only=...) (3.10+), default dest in __post_init__, and declare dest on constructors that pass it. Also fix liquid-class test typing, gripper mount isinstance, and head8 test formatting for CI.
Those investigation notebooks are not in the PR; listing them in conf.py leaked local-only paths into shared docs config. Demo wiring stays via hamilton/prep/index.md.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Stacked on #1195.
Adds a plain
Prepdevice on the Hamilton TCP transport (channels/head8/ gripper), plus PrepDeck, liquid-class resolver, shared tip/volume finalize helpers, and a basic demo wired into the Hamilton docs.Resource-facing APIs (no LiquidHandler/Backend) are intentionally not included.