Skip to content
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(protocol-designer): enable sharing tip racks between pipettes #2753

Merged
merged 3 commits into from
Dec 6, 2018

Conversation

IanLondon
Copy link
Contributor

@IanLondon IanLondon commented Nov 30, 2018

overview

A collaboration with @b-cooper and @mcous 💿

Allow sharing tipracks between pipettes if they are assigned to the same tiprack type.

changelog

  • disable code guarding tiprack sharing and allow old tiprack sharing code to surface :p

review requests

Try it and try real hard to break it

@IanLondon IanLondon added protocol designer Affects the `protocol-designer` project DO NOT MERGE Indicates a PR should not be merged, even if there's a shiny green merge button available labels Nov 30, 2018
@codecov
Copy link

codecov bot commented Nov 30, 2018

Codecov Report

Merging #2753 into edge will decrease coverage by <.01%.
The diff coverage is 100%.

Impacted file tree graph

@@            Coverage Diff             @@
##             edge    #2753      +/-   ##
==========================================
- Coverage   51.09%   51.09%   -0.01%     
==========================================
  Files         656      656              
  Lines       17971    17967       -4     
==========================================
- Hits         9183     9180       -3     
+ Misses       8788     8787       -1
Impacted Files Coverage Δ
...ep-generation/commandCreators/atomic/replaceTip.js 90.47% <ø> (-0.44%) ⬇️
...esigner/src/step-generation/robotStateSelectors.js 65.71% <ø> (-2.71%) ⬇️
...ol-designer/src/file-data/selectors/fileCreator.js 29.41% <ø> (ø) ⬆️
...signer/src/components/modals/NewFileModal/index.js 0% <ø> (ø) ⬆️
app/src/robot/api-client/client.js 86.43% <100%> (+0.06%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b54e33c...162f8ff. Read the comment docs.

Copy link
Contributor

@mcous mcous left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PD looks like it's working to me! I've pushed a little guard for the existing app logic but I think due to existing API behavior it's technically unnecessary

📙

@IanLondon IanLondon added app Affects the `app` project ready for review and removed DO NOT MERGE Indicates a PR should not be merged, even if there's a shiny green merge button available labels Nov 30, 2018
Copy link

@pantslakz pantslakz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WOOP!

@IanLondon IanLondon force-pushed the pd_enable-tip-sharing branch from 1e0321d to 162f8ff Compare December 6, 2018 13:33
@IanLondon IanLondon merged commit 45db100 into edge Dec 6, 2018
@IanLondon IanLondon deleted the pd_enable-tip-sharing branch December 6, 2018 13:48
b-cooper pushed a commit that referenced this pull request Dec 6, 2018
* refactor(components): remove old clickOutside HoC (#2664)

Closes #2590

* refactor(shared-data): Modify z-height logic and docs for labware designer (#2670)

* refactor(shared-data): Modify z-height logic and docs for labware designer

* feat(protocol-designer): liquid placement modal performance boost (#2661)

Move liquid placement modal to use new abstraction, SelectableLabware, and mirror the changes that
went into the performance improvements of the WellSelectionModal.  Also, rename the SelectablePlate
component and container to HighlightableLabware as it is now only being used in the LabwareOnDeck
compound and is neither hoverable, nor selectable.

Closes #2557

* feat(protocol-designer): disconnect well selection modal from hovered step state (#2662)

Well selection modal well contents are now only correlated with the currently selected step (the one
being edited)

Closes #2558

* refactor(protocol-designer): change StepType from number to string (#2666)

* uses UUID for steps
* update step reducer tests to use string IDs not numbers

Closes #2588

* build(travis): Refactor build to use stages (#2668)

* build(app-shell): Add publisherName to electron-builder windows config (#2677)

* ci(travis): Move flow typechecking to separate job in test stage (#2683)

* refactor(protocol-designer): unite delete labware and handleFormChange logic (#2680)

There was some unecessary duplication of concerns between handling unsaved form changes and handling
deletion of labware in all saved forms. This addition creates a function that can be used by both
cases, to unite the logic into one source of truth.

Closes #2657

* fix(api): re-position p1000 droptip/blowout positions (#2681)

* fix(api): re-position p1000 droptip/blowout positions to better handle tip variance

* restores p1000_single_v1 positions to previous API values

* perf(api): Decrease plunger motor max speed by 20% (#2682)

* feat(api): Add 1.5ml tuberack to old labware definition section (#2679)

* refactor(api): more functions use hc (#2675)

* refactor(api): Move smoothie update into smoothie driver

This makes it easier to use hardware control instead of the robot in main and is
where the functionality should have been in the first place.

Note that this doesn’t currently apply to the update server.

* refactor(api): Add a fixture to test with both new and old apis

By using the new old_and_new_client fixture instead of either async_client or
test_client and building a server instance directly, tests can now check both
the old and new versions of the API.

old_and_new_client is a parameterized fixture that pytest will automatically run
once with each parameter, resetting the globals to the correct version.

In addition, the globals in opentrons/__init__ are now defined such that they
can be reset to a different API version by a function call. This has to be used
quite carefully since it will only reset the global instances themselves, not
copies interned elsewhere, but it’s quite useful for this testing purpose.

* refactor(api): Change modules to work with control endpoints

We needed the old and new modules to look a bit more alike, and now can get
attached modules and module info from the run app while using hardware_control.

* refactor(api): Pull light control fully into gpio driver

Previously it lived an uncomfortable life half in robot and half in gpio. Since
lights aren’t controlled by smoothie, robot is a bad place for them (but the
calls remain there for back compatibility).

* refactor(api): Make servers use injected hw and new api if ff set

The RPC and HTTP servers (to a large but not complete extent) and the system as
a whole now rely on an injected hardware instance for talking to hardware.

This does not extend to deck calibration, protocol sessions (including labware
calibration), or testing tools.

In addition, there’s work done on the tests so that tests can more easily run on
both versions of the api while relying on simple fixtures; async_client and
main_router and the things that depend on them, for instance, now will run on
both apis unless marked otherwise.

Many small additions have been made to both the new and old APIs to get them to
work a bit more like each other to make the logic necessary in dependent systems
like the servers to be a little more similar between versions.

* refactor(api): add ability to override critical point in moves and get position

This is needed for the move endpoint because it makes it a lot easier to move
pipettes to a change pipette position guaranteed to neither be too high nor too low.

Closes #2245

* feat(protocol-designer): use tip max vol, not pipette max vol (#2656)

* aspirate/consolidate/transfer/distribute use smallest of (tip max volume, pipette max volume)
* added 200uL Tiprack to PD as an option

Closes #2160

* chore(react): upgrade react to v16.6.3 (#2687)

* feat(protocol-designer): allow user to set touch-tip offset (#2691)

* refactor tip offset components to allow them to also work with touch tip
* add new fields for forms and to step-generation command creator args to allow touch-tip offsets
* rename fields used only by mix to have mix_ prefix
* refactor field types

Closes #2540

* docs(api): Add instructions to set up API locally (#2699)

There have been several customer questions about how to use the API locally to test protocols. While
there is still not a good workflow, these instructions should help.

* feat(protocol-designer): make settings tab always active (#2700)

Closes #2697

* refactor(protocol-designer): remove activeModals selector (#2701)

Closes #2592

* feat(protocol-designer): disambiguate left/right pipette names when they match (#2698)

Closes #2078

* refactor(app): Update app before robot (#2685)

* feat(api): Adds pipette models v1.4 to robot config (#2689)

* feat(api): Adds pipette models v1.4 to robot config

* shift p10-multi blowout position up 1.5mm

* fixed mistake in p1000 v1.4 blow-out position

* adds v1.4 to pipette barcoding scanning tool

* refactor(api): Use modules in protocol api (#2702)

* refactor(api): Use modules in protocol api

There are now ModuleContexts in protocol_api/contexts.py that expose the module
API. The protocol API also has a new workflow for adding labware to modules:

- create a module with ProtocolContext.load_module()
- call module.load_labware[_by_name]() to load the labware

This avoids the shared=True functionality that was only used for modules but was
designed to be super generic.

Modules also now have their own specs file that defines their geometry,
including the offsets from the deck to their labware and their overall shape.

In addition, fix some minor bugs:
- axis maxima bumped by +0.05mm for all axes to avoid floating point precision
problems when positions are run through deck transform
- hardware_control SynchronousAdapter needs to actually return the results of
coroutines it executes
- Reset the protocol context location cache after homing

feature(api): Add magnetic module compatiblity to labware schema

Labware now has an extra couple of parameters. isMagneticModuleCompatible is a
bool indicating whether the labware can be easily used by a magdeck;
magneticModuleEngageHeight is the height to raise the magnets for that piece of
labware. If a labware that is not compatible is loaded onto a magdeck, you get a
warning and must explicitly specify the magnet height.

* Fix failing tests

* docs(api): Fix incorrect labels for rows and columns in labware docs (#2710)

* docs: Correct the link for changing robot gantry speed (#2711)

* chore(release): 3.6.0-beta.1 (#2724)

* refactor(app): Remove padding from wifi connect form (#2730)

* refactor(protocol-designer): rename selectors to start with "get" (#2720)

Closes #2591

* feat(protocol-designer): make multichannel substeps collapsed by default (#2729)

Closes #2678

* feat(protocol-designer): add tooltip to advanced settings icon (#2727)

Closes #2706

* feat(protocol-designer): remove label from 200ul/300ul tiprack image (#2722)

Closes #2704

* fix(api): Fix the flaky tempdeck test (#2725)

* fix(api): Fix the flaky tempdeck test

The tempdeck driver, when it fails, will sleep and try again. When we’re testing
that, we need to wait a bit - since it’s in a thread - before checking the output.

* refactor(app): Add update in progress and restart screens (#2728)

* refactor(shared-data): rename slot width/height constants (#2723)

use separate constants when dealing with robot coordinate system (eg in labwareTools) versus when rendering deck/labware in SVG coordinates

Closes #2535

* refactor(app): Add app update message and release notes toggle (#2738)

* fix(shared-data): fix total-liquid-volume of opentrons-tuberack-50ml (#2744)

Closes #2743

* chore(release): 3.6.0 (#2746)

* feat(protocol-designer): allow user to re-enable dismissed hints (#2726)

Closes #2652

* feat(protocol-designer): highlight tips per substep (#2716)

Closes #2537

* feat(protocol-designer): drag and drop step reordering (#2714)

Add drag and drop functionality allowing users to arbitrarily reorder their steps in the steplist.

Closes #2654

* fix(protocol-designer): fix missing disposal volume in new distribute forms (#2733)

Closes #2705

* feat(protocol-designer): remove option of tiprack-1000ul-chem from pd (#2745)

* feat(protocol-designer): new protocol modal defaults and visual updates (#2739)

remove null selection for pipette models from new file modal. Also condense styles to clean up
visual space.

Closes #2721

* feat(protocol-designer): remove delay from advanced settings of all step types (#2731)

Closes #2579

* feat(protocol-designer): place tipracks on protocol creation (#2750)

By default, when a user creates a protocol, one tip rack for each given mount should be placed on
the deck.

Closes #1327

* new p10s function added to config file (#2774)

* fix(api): new p10s function added to config file

Due to inaccuracy of the old function, this new function was calculated based on testing several pipettes. The function has been tested on the scale and the robot.

* feat(protocol-designer): show file created and modified date (#2754)

* make metadata be a Formik form; remove unsaved metadata fields from redux

Closes #1623

* chore(release): 3.6.1 (#2780)

*  feat(protocol-designer): implement duplicate step (#2715)

* feat(protocol-designer): implement duplicate step

Right click on a step in the step list and you now have the option to duplicate it or delete it.

* feat(protocol-designer): standardize blowout and disposal volume destinations (#2732)

Flesh out differences in options and implementation of blowout destination (disposal volume and
otherwise) across Transfer, Consolidate, Distribute, and Mix type steps.

Closes #1989

*  refactor(step-generation): getNextRobotStateAndWarnings and use in aspirate (#2747)

In an effort to consolidate the logic in step generation that calculates the next robotState given a
command, this adds a function called getNextRobotStateAndWarnings. Eventually this will be used in
all command creators to generate the next robotState given StepArgs. This takes the first step by
migrating the aspirate commandCreator from aspirateUpdateLiquidState to the new
getNextRobotStateAndWarnings

Closes #2734

* feat(protocol-designer): enable sharing tip racks between pipettes (#2753)

* feat(protocol-designer): scroll to top of page when step created/selected (#2785)

* fix(protocol-designer): fix changeTip once bug in distribute step (#2784)

Closes #2748

* fix(protocol-designer): finish implementing flow rate in PD (#2782)

Closes #2773

* fix(protocol-designer): fix when add liquid hint is shown (#2787)

Closes #2777

* feat(protocol-designer): use pipette min vol as default/recommended disposal volume (#2788)

Closes #2777
b-cooper added a commit that referenced this pull request Dec 13, 2018
* refactor(components): remove old clickOutside HoC (#2664)

Closes #2590

* refactor(shared-data): Modify z-height logic and docs for labware designer (#2670)

* refactor(shared-data): Modify z-height logic and docs for labware designer

* feat(protocol-designer): liquid placement modal performance boost (#2661)

Move liquid placement modal to use new abstraction, SelectableLabware, and mirror the changes that
went into the performance improvements of the WellSelectionModal.  Also, rename the SelectablePlate
component and container to HighlightableLabware as it is now only being used in the LabwareOnDeck
compound and is neither hoverable, nor selectable.

Closes #2557

* feat(protocol-designer): disconnect well selection modal from hovered step state (#2662)

Well selection modal well contents are now only correlated with the currently selected step (the one
being edited)

Closes #2558

* refactor(protocol-designer): change StepType from number to string (#2666)

* uses UUID for steps
* update step reducer tests to use string IDs not numbers

Closes #2588

* build(travis): Refactor build to use stages (#2668)

* build(app-shell): Add publisherName to electron-builder windows config (#2677)

* ci(travis): Move flow typechecking to separate job in test stage (#2683)

* refactor(protocol-designer): unite delete labware and handleFormChange logic (#2680)

There was some unecessary duplication of concerns between handling unsaved form changes and handling
deletion of labware in all saved forms. This addition creates a function that can be used by both
cases, to unite the logic into one source of truth.

Closes #2657

* fix(api): re-position p1000 droptip/blowout positions (#2681)

* fix(api): re-position p1000 droptip/blowout positions to better handle tip variance

* restores p1000_single_v1 positions to previous API values

* perf(api): Decrease plunger motor max speed by 20% (#2682)

* feat(api): Add 1.5ml tuberack to old labware definition section (#2679)

* refactor(api): more functions use hc (#2675)

* refactor(api): Move smoothie update into smoothie driver

This makes it easier to use hardware control instead of the robot in main and is
where the functionality should have been in the first place.

Note that this doesn’t currently apply to the update server.

* refactor(api): Add a fixture to test with both new and old apis

By using the new old_and_new_client fixture instead of either async_client or
test_client and building a server instance directly, tests can now check both
the old and new versions of the API.

old_and_new_client is a parameterized fixture that pytest will automatically run
once with each parameter, resetting the globals to the correct version.

In addition, the globals in opentrons/__init__ are now defined such that they
can be reset to a different API version by a function call. This has to be used
quite carefully since it will only reset the global instances themselves, not
copies interned elsewhere, but it’s quite useful for this testing purpose.

* refactor(api): Change modules to work with control endpoints

We needed the old and new modules to look a bit more alike, and now can get
attached modules and module info from the run app while using hardware_control.

* refactor(api): Pull light control fully into gpio driver

Previously it lived an uncomfortable life half in robot and half in gpio. Since
lights aren’t controlled by smoothie, robot is a bad place for them (but the
calls remain there for back compatibility).

* refactor(api): Make servers use injected hw and new api if ff set

The RPC and HTTP servers (to a large but not complete extent) and the system as
a whole now rely on an injected hardware instance for talking to hardware.

This does not extend to deck calibration, protocol sessions (including labware
calibration), or testing tools.

In addition, there’s work done on the tests so that tests can more easily run on
both versions of the api while relying on simple fixtures; async_client and
main_router and the things that depend on them, for instance, now will run on
both apis unless marked otherwise.

Many small additions have been made to both the new and old APIs to get them to
work a bit more like each other to make the logic necessary in dependent systems
like the servers to be a little more similar between versions.

* refactor(api): add ability to override critical point in moves and get position

This is needed for the move endpoint because it makes it a lot easier to move
pipettes to a change pipette position guaranteed to neither be too high nor too low.

Closes #2245

* feat(protocol-designer): use tip max vol, not pipette max vol (#2656)

* aspirate/consolidate/transfer/distribute use smallest of (tip max volume, pipette max volume)
* added 200uL Tiprack to PD as an option

Closes #2160

* chore(react): upgrade react to v16.6.3 (#2687)

* feat(protocol-designer): allow user to set touch-tip offset (#2691)

* refactor tip offset components to allow them to also work with touch tip
* add new fields for forms and to step-generation command creator args to allow touch-tip offsets
* rename fields used only by mix to have mix_ prefix
* refactor field types

Closes #2540

* docs(api): Add instructions to set up API locally (#2699)

There have been several customer questions about how to use the API locally to test protocols. While
there is still not a good workflow, these instructions should help.

* feat(protocol-designer): make settings tab always active (#2700)

Closes #2697

* refactor(protocol-designer): remove activeModals selector (#2701)

Closes #2592

* feat(protocol-designer): disambiguate left/right pipette names when they match (#2698)

Closes #2078

* refactor(app): Update app before robot (#2685)

* feat(api): Adds pipette models v1.4 to robot config (#2689)

* feat(api): Adds pipette models v1.4 to robot config

* shift p10-multi blowout position up 1.5mm

* fixed mistake in p1000 v1.4 blow-out position

* adds v1.4 to pipette barcoding scanning tool

* refactor(api): Use modules in protocol api (#2702)

* refactor(api): Use modules in protocol api

There are now ModuleContexts in protocol_api/contexts.py that expose the module
API. The protocol API also has a new workflow for adding labware to modules:

- create a module with ProtocolContext.load_module()
- call module.load_labware[_by_name]() to load the labware

This avoids the shared=True functionality that was only used for modules but was
designed to be super generic.

Modules also now have their own specs file that defines their geometry,
including the offsets from the deck to their labware and their overall shape.

In addition, fix some minor bugs:
- axis maxima bumped by +0.05mm for all axes to avoid floating point precision
problems when positions are run through deck transform
- hardware_control SynchronousAdapter needs to actually return the results of
coroutines it executes
- Reset the protocol context location cache after homing

feature(api): Add magnetic module compatiblity to labware schema

Labware now has an extra couple of parameters. isMagneticModuleCompatible is a
bool indicating whether the labware can be easily used by a magdeck;
magneticModuleEngageHeight is the height to raise the magnets for that piece of
labware. If a labware that is not compatible is loaded onto a magdeck, you get a
warning and must explicitly specify the magnet height.

* Fix failing tests

* docs(api): Fix incorrect labels for rows and columns in labware docs (#2710)

* docs: Correct the link for changing robot gantry speed (#2711)

* chore(release): 3.6.0-beta.1 (#2724)

* refactor(app): Remove padding from wifi connect form (#2730)

* refactor(protocol-designer): rename selectors to start with "get" (#2720)

Closes #2591

* feat(protocol-designer): make multichannel substeps collapsed by default (#2729)

Closes #2678

* feat(protocol-designer): add tooltip to advanced settings icon (#2727)

Closes #2706

* feat(protocol-designer): remove label from 200ul/300ul tiprack image (#2722)

Closes #2704

* fix(api): Fix the flaky tempdeck test (#2725)

* fix(api): Fix the flaky tempdeck test

The tempdeck driver, when it fails, will sleep and try again. When we’re testing
that, we need to wait a bit - since it’s in a thread - before checking the output.

* refactor(app): Add update in progress and restart screens (#2728)

* refactor(shared-data): rename slot width/height constants (#2723)

use separate constants when dealing with robot coordinate system (eg in labwareTools) versus when rendering deck/labware in SVG coordinates

Closes #2535

* refactor(app): Add app update message and release notes toggle (#2738)

* fix(shared-data): fix total-liquid-volume of opentrons-tuberack-50ml (#2744)

Closes #2743

* chore(release): 3.6.0 (#2746)

* feat(protocol-designer): allow user to re-enable dismissed hints (#2726)

Closes #2652

* feat(protocol-designer): highlight tips per substep (#2716)

Closes #2537

* feat(protocol-designer): drag and drop step reordering (#2714)

Add drag and drop functionality allowing users to arbitrarily reorder their steps in the steplist.

Closes #2654

* fix(protocol-designer): fix missing disposal volume in new distribute forms (#2733)

Closes #2705

* feat(protocol-designer): remove option of tiprack-1000ul-chem from pd (#2745)

* feat(protocol-designer): new protocol modal defaults and visual updates (#2739)

remove null selection for pipette models from new file modal. Also condense styles to clean up
visual space.

Closes #2721

* feat(protocol-designer): remove delay from advanced settings of all step types (#2731)

Closes #2579

* feat(protocol-designer): place tipracks on protocol creation (#2750)

By default, when a user creates a protocol, one tip rack for each given mount should be placed on
the deck.

Closes #1327

* new p10s function added to config file (#2774)

* fix(api): new p10s function added to config file

Due to inaccuracy of the old function, this new function was calculated based on testing several pipettes. The function has been tested on the scale and the robot.

* feat(protocol-designer): show file created and modified date (#2754)

* make metadata be a Formik form; remove unsaved metadata fields from redux

Closes #1623

* chore(release): 3.6.1 (#2780)

*  feat(protocol-designer): implement duplicate step (#2715)

* feat(protocol-designer): implement duplicate step

Right click on a step in the step list and you now have the option to duplicate it or delete it.

* feat(protocol-designer): standardize blowout and disposal volume destinations (#2732)

Flesh out differences in options and implementation of blowout destination (disposal volume and
otherwise) across Transfer, Consolidate, Distribute, and Mix type steps.

Closes #1989

*  refactor(step-generation): getNextRobotStateAndWarnings and use in aspirate (#2747)

In an effort to consolidate the logic in step generation that calculates the next robotState given a
command, this adds a function called getNextRobotStateAndWarnings. Eventually this will be used in
all command creators to generate the next robotState given StepArgs. This takes the first step by
migrating the aspirate commandCreator from aspirateUpdateLiquidState to the new
getNextRobotStateAndWarnings

Closes #2734

* feat(protocol-designer): enable sharing tip racks between pipettes (#2753)

* feat(protocol-designer): scroll to top of page when step created/selected (#2785)

* fix(protocol-designer): fix changeTip once bug in distribute step (#2784)

Closes #2748

* fix(protocol-designer): finish implementing flow rate in PD (#2782)

Closes #2773

* fix(protocol-designer): fix when add liquid hint is shown (#2787)

Closes #2777

* feat(protocol-designer): use pipette min vol as default/recommended disposal volume (#2788)

Closes #2777

* fix(protocol-designer): fix regression of #2370 (#2791)

* feat(api): p10 behavior feature flag (#2794)

This moves the P10 aspiration changes previously introduced in the config to code behind feature flag.

This reverts commit 9c5e0a2.

The revert is because shipping this change might compromise users’ science
efforts if their aspiration volumes change without sufficiently notifying them.
To prevent behavior changing in unexpected ways that
has bad effects on science, it’s now behind a feature flag that is off by
default.

Closes #2792

* refactor(app): Simplify upgrade/downgrade modal render logic (#2751)

* fix(protocol-designer): fix distribute aspirate touchtip offset (#2795)

* fix(protocol-designer): fix bug where new protocol w 1 pipette deleted fixedTrash (#2797)

* feat(shared-data): Add more new labware definitions to shared-data (#2703)

* fix(protocol-designer): fix swap pipettes button dispatch (#2798)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
app Affects the `app` project medium protocol designer Affects the `protocol-designer` project
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants