-
Notifications
You must be signed in to change notification settings - Fork 179
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(api): Support the new pipette configurations and 96 channel in the hardware controller #11830
feat(api): Support the new pipette configurations and 96 channel in the hardware controller #11830
Conversation
Codecov Report
@@ Coverage Diff @@
## RLIQ-131-support-96-channel #11830 +/- ##
===============================================================
+ Coverage 74.14% 74.19% +0.04%
===============================================================
Files 2106 2108 +2
Lines 58491 58636 +145
Branches 6218 6218
===============================================================
+ Hits 43371 43504 +133
- Misses 13654 13666 +12
Partials 1466 1466
Flags with carried forward coverage won't be shown. Click here to find out more.
|
…ed data We have a completely new shape for pipette configurations that need to be loaded in.
0e86423
to
63a8e4a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Couple inline changes; some are critical, like using float
s for versions - we really shouldn't do that.
There's also a whole lot of tests that effectively get mark-skipped for the ot3. Is there any way at all we can avoid that? IMO we really shouldn't check in PRs that disable swathes of tests like this.
Are the ot3 variants of pipette
and pipette_handler
straight copies of the ot2 variants? if not, can you point at where they're different?
) | ||
new_p.act_as(p.acting_as) | ||
self._attached_instruments[m] = new_p | ||
if isinstance(m, OT3Mount): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the linter will also be satisfied if you make reset_pipette_offset
generic across mount
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All of the code is separated -- including calibration stuff right now. Would rather address this when I'm recombining all the instruments
code.
@@ -670,26 +671,50 @@ async def test_blowout_flow_rate(sim_and_instr): | |||
|
|||
|
|||
async def test_reset_instruments(monkeypatch, sim_and_instr): | |||
sim_builder, dummy_instruments = sim_and_instr | |||
instruments = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should have a version of this for ot2 and ot3, since those are now separate pieces of code
api/tests/opentrons/protocols/advanced_control/test_transfers.py
Outdated
Show resolved
Hide resolved
The main differences include:
Other than that both of those files are straight copies that I hope to be able to merge back together once the OT2 pipette configurations are ported over. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks good as a first step to me, yeah. I think your refactor plans will help the other stuff I like less.
return PipetteVersionType(major, minor) | ||
|
||
|
||
def version_from_int(version: int) -> PipetteVersionType: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When do we end up using this?
…he hardware controller (#11830) * feat(api): change pipette functions based on the tip working volume * feat(api): do not use "pipette name" and "pipette model" to look up pipettes via configurations
…he hardware controller (#11830) * feat(api): change pipette functions based on the tip working volume * feat(api): do not use "pipette name" and "pipette model" to look up pipettes via configurations
Overview
This PR is an initial pass at supporting the new pipette configurations from shared data in the hardware controller. As a result of this, we also get to control the 96 channel in the hardware controller. Another benefit is that the ot3 api can now switch between pipetting functions depending on the working volume of the pipette.
A lot of the work in this PR will require refactoring once we have the ot2 pipettes ported over to the new pipette configuration. I hope to combine a lot of repeat code at that time. The shape of the configurations is very different, so I did not bother trying to combine it at this time.
A separate PR will be put up to support full tip rack pick up with the 96 channel.
A few things that need more thought in the follow-ups:
Changelog
Pipette
object / hardware controllerHIGH_THROUGHPUT
when a 96 channel is attached to the left (the only supported configuration)ot2_only
for now. A lot of them were old protocol api tests which I'm assuming we plan to delete at some point as well.Planned fast follows
pipette_handler
and separate out pipette objects only where functionality divergesPipette
object class.Risk assessment
High. This changes where configurations are loaded in for pipettes. It should be thoroughly tested for all pipette types.