-
Notifications
You must be signed in to change notification settings - Fork 180
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
fix(api): Tip pickup call validation near wastechute #14415
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## edge #14415 +/- ##
=======================================
Coverage 68.21% 68.21%
=======================================
Files 2520 2520
Lines 71892 71892
Branches 9188 9188
=======================================
Hits 49042 49042
Misses 20677 20677
Partials 2173 2173
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Tested the protocol in the Testing Plan on Flex, resulted correctly with the following expected error:
|
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 to merge if it's been tested.
I have a few code-level comments, plus one bigger comment about how we're approaching this validation, architecturally.
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.
Sorry for getting this in late. Added comments
if deck_config: | ||
slot_cutout_id = DECK_SLOT_TO_CUTOUT_MAP[slot_name] | ||
slot_cutout_fixture = None | ||
# This will only ever be one under current assumptions |
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.
Not sure what this means. Can you clarify?
break | ||
if slot_cutout_fixture is None: | ||
raise CutoutDoesNotExistError( | ||
f"No Cutout was found in the Deck that matched provided slot {slot_name}." |
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.
f"No Cutout was found in the Deck that matched provided slot {slot_name}." | |
f"No Cutout matching the provided slot ({slot_name}) was found in the deck configuration." |
Special Note: This is a replacement for #14371 due to a potentially problematic keyerror bug that would occur on any height checking that resulted in a fixture being the highest item in the adjacent slots. This seeks to add back the capability of #14371 as well as fix that bug.
Overview
This seeks to fix issues related to RSS-375 and RSS-422.
Of note, this will only fix issues during runtime. Currently when in partial tip configuration the engine will attempt to check the height of object adjacent to the slot that an action (such as pickup tip) is occurring in. However, only the heigh of labware and module is checked, the system does not check for the height of fixtures loaded into the deck configuration.
To solve this, a method has been added to allow for searching of Cutout fixtures by deck slot name, and then the height of a returned fixture is then checked alongside the labware and module heights. If, for example a waste chute is loaded in D3 and a partial tip pickup is attempted in D2, the engine will raise an error.
Test Plan
Ensure that a protocol with a waste chute loaded in D3 with a 96 channel in partial tip configuration set to pick up tips from column A12 of a tiprack in D2 using column A1 of the instrument raises an error during operation before a collision would occur.
The following protocol ought to produce the expected results:
Risk assessment
While the robot will prevent a collision during runtime, a protocol where a crash would occur would still pass analysis. This is in part due to the fact that we do not load a true deck configuration for analysis, so when checking the set of loaded fixtures we see that there are "None", even if that is untrue. This is yet another item that would become simpler with multipass analysis.