From 1754667f0fe9a4be684eb2c19bcd95666683b691 Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Wed, 5 Jun 2024 15:15:19 -0400 Subject: [PATCH] fix(shared-data): Re-apply update tip overlap values for Flex Pipettes (#15147) (#15284) This is #15147 again but this time outside the context of an extremely imminent release. While this code needs to be merged, we should carefully consider how we do so. We can't ship this until we can separate this behavior by API level so that customers who may have tuned in offsets based on the old incorrect tip offsets won't have their protocols invalidated - this data needs to be loaded by API level. Closes EXEC-452 --------- Co-authored-by: Carlos-fernandez --- .../protocol_api/core/engine/instrument.py | 8 +++- .../core/engine/overlap_versions.py | 16 ++++++++ .../protocol_api/core/engine/protocol.py | 9 ++-- .../core/engine/test_instrument_core.py | 26 +++++++++++- .../core/engine/test_overlap_versions.py | 26 ++++++++++++ .../core/engine/test_protocol_core.py | 41 ++++++++++++++++++- shared-data/js/__tests__/pipettes.test.ts | 19 +++++++++ .../eight_channel/p1000/default/3_4.json | 9 ++++ .../eight_channel/p1000/default/3_5.json | 9 ++++ .../liquid/eight_channel/p50/default/3_4.json | 5 +++ .../liquid/eight_channel/p50/default/3_5.json | 5 +++ .../p50/lowVolumeDefault/3_4.json | 5 +++ .../p50/lowVolumeDefault/3_5.json | 5 +++ .../ninety_six_channel/p1000/default/3_4.json | 9 ++++ .../ninety_six_channel/p1000/default/3_5.json | 9 ++++ .../ninety_six_channel/p1000/default/3_6.json | 6 +++ .../single_channel/p1000/default/3_4.json | 9 ++++ .../single_channel/p1000/default/3_5.json | 9 ++++ .../single_channel/p1000/default/3_6.json | 9 ++++ .../single_channel/p50/default/3_4.json | 5 +++ .../single_channel/p50/default/3_5.json | 5 +++ .../single_channel/p50/default/3_6.json | 5 +++ .../p50/lowVolumeDefault/3_4.json | 5 +++ .../p50/lowVolumeDefault/3_5.json | 5 +++ .../p50/lowVolumeDefault/3_6.json | 5 +++ .../pipette/pipette_definition.py | 2 +- 26 files changed, 258 insertions(+), 8 deletions(-) create mode 100644 api/src/opentrons/protocol_api/core/engine/overlap_versions.py create mode 100644 api/tests/opentrons/protocol_api/core/engine/test_overlap_versions.py diff --git a/api/src/opentrons/protocol_api/core/engine/instrument.py b/api/src/opentrons/protocol_api/core/engine/instrument.py index 8accc51c41f..d2057a7605d 100644 --- a/api/src/opentrons/protocol_api/core/engine/instrument.py +++ b/api/src/opentrons/protocol_api/core/engine/instrument.py @@ -34,7 +34,7 @@ from opentrons.protocol_api._nozzle_layout import NozzleLayout from opentrons.hardware_control.nozzle_manager import NozzleConfigurationType from opentrons.hardware_control.nozzle_manager import NozzleMap -from . import deck_conflict +from . import deck_conflict, overlap_versions from ..instrument import AbstractInstrument from .well import WellCore @@ -745,7 +745,11 @@ def set_flow_rate( def configure_for_volume(self, volume: float) -> None: self._engine_client.configure_for_volume( - pipette_id=self._pipette_id, volume=volume, tip_overlap_version="v0" + pipette_id=self._pipette_id, + volume=volume, + tip_overlap_version=overlap_versions.overlap_for_api_version( + self._protocol_core.api_version + ), ) def prepare_to_aspirate(self) -> None: diff --git a/api/src/opentrons/protocol_api/core/engine/overlap_versions.py b/api/src/opentrons/protocol_api/core/engine/overlap_versions.py new file mode 100644 index 00000000000..ed14859ecd3 --- /dev/null +++ b/api/src/opentrons/protocol_api/core/engine/overlap_versions.py @@ -0,0 +1,16 @@ +"""Mappings between API versions and overlap versions.""" +from functools import lru_cache +from typing_extensions import Final +from opentrons.protocols.api_support.types import APIVersion + +_OVERLAP_VERSION_MAP: Final = {APIVersion(2, 0): "v0", APIVersion(2, 19): "v1"} + + +@lru_cache(1) +def overlap_for_api_version(api_version: APIVersion) -> str: + """Get the overlap version for a specific API version.""" + defined = list(reversed(sorted(_OVERLAP_VERSION_MAP.keys()))) + for version in defined: + if version <= api_version: + return _OVERLAP_VERSION_MAP[version] + return _OVERLAP_VERSION_MAP[APIVersion(2, 0)] diff --git a/api/src/opentrons/protocol_api/core/engine/protocol.py b/api/src/opentrons/protocol_api/core/engine/protocol.py index b65dc92cb91..28fb0376c40 100644 --- a/api/src/opentrons/protocol_api/core/engine/protocol.py +++ b/api/src/opentrons/protocol_api/core/engine/protocol.py @@ -66,8 +66,7 @@ MagneticBlockCore, ) from .exceptions import InvalidModuleLocationError -from . import load_labware_params -from . import deck_conflict +from . import load_labware_params, deck_conflict, overlap_versions if TYPE_CHECKING: from ...labware import Labware @@ -499,7 +498,11 @@ def load_instrument( """ engine_mount = MountType[mount.name] load_result = self._engine_client.load_pipette( - instrument_name, engine_mount, tip_overlap_version="v0" + instrument_name, + engine_mount, + tip_overlap_version=overlap_versions.overlap_for_api_version( + self._api_version + ), ) return InstrumentCore( diff --git a/api/tests/opentrons/protocol_api/core/engine/test_instrument_core.py b/api/tests/opentrons/protocol_api/core/engine/test_instrument_core.py index a71f33a9637..b7e77a44d63 100644 --- a/api/tests/opentrons/protocol_api/core/engine/test_instrument_core.py +++ b/api/tests/opentrons/protocol_api/core/engine/test_instrument_core.py @@ -47,6 +47,8 @@ from opentrons.protocols.api_support.types import APIVersion from opentrons.types import Location, Mount, MountType, Point +from ... import versions_below, versions_at_or_above + @pytest.fixture def mock_engine_client(decoy: Decoy) -> EngineClient: @@ -1173,15 +1175,37 @@ def test_is_tip_tracking_available( assert subject.is_tip_tracking_available() == expected_result -def test_configure_for_volume( +@pytest.mark.parametrize("version", versions_below(APIVersion(2, 19), flex_only=False)) +def test_configure_for_volume_pre_219( decoy: Decoy, mock_engine_client: EngineClient, + mock_protocol_core: ProtocolCore, subject: InstrumentCore, + version: APIVersion, ) -> None: """Configure_for_volume should specify overlap version.""" + decoy.when(mock_protocol_core.api_version).then_return(version) subject.configure_for_volume(123.0) decoy.verify( mock_engine_client.configure_for_volume( pipette_id=subject.pipette_id, volume=123.0, tip_overlap_version="v0" ) ) + + +@pytest.mark.parametrize("version", versions_at_or_above(APIVersion(2, 19))) +def test_configure_for_volume_post_219( + decoy: Decoy, + mock_engine_client: EngineClient, + mock_protocol_core: ProtocolCore, + subject: InstrumentCore, + version: APIVersion, +) -> None: + """Configure_for_volume should specify overlap version.""" + decoy.when(mock_protocol_core.api_version).then_return(version) + subject.configure_for_volume(123.0) + decoy.verify( + mock_engine_client.configure_for_volume( + pipette_id=subject.pipette_id, volume=123.0, tip_overlap_version="v1" + ) + ) diff --git a/api/tests/opentrons/protocol_api/core/engine/test_overlap_versions.py b/api/tests/opentrons/protocol_api/core/engine/test_overlap_versions.py new file mode 100644 index 00000000000..9d41a431026 --- /dev/null +++ b/api/tests/opentrons/protocol_api/core/engine/test_overlap_versions.py @@ -0,0 +1,26 @@ +"""Test the tip overlap selection logic in the API core.""" +import pytest + +from opentrons.protocol_api.core.engine.overlap_versions import overlap_for_api_version +from opentrons.protocols.api_support.types import APIVersion + +from ... import versions_below, versions_at_or_above + + +@pytest.mark.parametrize( + "api_version", versions_below(APIVersion(2, 19), flex_only=False) +) +def test_all_below_219_use_v0(api_version: APIVersion) -> None: + """Versions below 2.19 should use v0.""" + assert overlap_for_api_version(api_version) == "v0" + + +@pytest.mark.parametrize("api_version", versions_at_or_above(APIVersion(2, 19))) +def test_all_above_219_use_v1(api_version: APIVersion) -> None: + """Versions above 2.19 should use v1.""" + assert overlap_for_api_version(api_version) == "v1" + + +def test_future_api_version_uses_v1() -> None: + """Future versions should use v1.""" + assert overlap_for_api_version(APIVersion(2, 99)) == "v1" diff --git a/api/tests/opentrons/protocol_api/core/engine/test_protocol_core.py b/api/tests/opentrons/protocol_api/core/engine/test_protocol_core.py index 46ddd0a88f6..dfe29bc10d0 100644 --- a/api/tests/opentrons/protocol_api/core/engine/test_protocol_core.py +++ b/api/tests/opentrons/protocol_api/core/engine/test_protocol_core.py @@ -86,6 +86,8 @@ STANDARD_OT3_DECK, ) +from ... import versions_below, versions_at_or_above + @pytest.fixture(scope="session") def ot2_standard_deck_def() -> DeckDefinitionV5: @@ -235,7 +237,10 @@ def test_get_slot_item_empty( assert subject.get_slot_item(DeckSlotName.SLOT_1) is None -def test_load_instrument( +@pytest.mark.parametrize( + "api_version", versions_below(APIVersion(2, 19), flex_only=False) +) +def test_load_instrument_pre_219( decoy: Decoy, mock_sync_hardware_api: SyncHardwareAPI, mock_engine_client: EngineClient, @@ -268,6 +273,40 @@ def test_load_instrument( assert result.pipette_id == "cool-pipette" +@pytest.mark.parametrize("api_version", versions_at_or_above(APIVersion(2, 19))) +def test_load_instrument_post_219( + decoy: Decoy, + mock_sync_hardware_api: SyncHardwareAPI, + mock_engine_client: EngineClient, + subject: ProtocolCore, +) -> None: + """It should issue a LoadPipette command.""" + decoy.when( + mock_engine_client.load_pipette( + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + tip_overlap_version="v1", + ) + ).then_return(commands.LoadPipetteResult(pipetteId="cool-pipette")) + + decoy.when( + mock_engine_client.state.pipettes.get_flow_rates("cool-pipette") + ).then_return( + FlowRates( + default_aspirate={"1.1": 22}, + default_dispense={"3.3": 44}, + default_blow_out={"5.5": 66}, + ), + ) + + result = subject.load_instrument( + instrument_name=PipetteNameType.P300_SINGLE, mount=Mount.LEFT + ) + + assert isinstance(result, InstrumentCore) + assert result.pipette_id == "cool-pipette" + + def test_load_labware( decoy: Decoy, mock_engine_client: EngineClient, diff --git a/shared-data/js/__tests__/pipettes.test.ts b/shared-data/js/__tests__/pipettes.test.ts index 4b43e3a9ba2..744df6f08e2 100644 --- a/shared-data/js/__tests__/pipettes.test.ts +++ b/shared-data/js/__tests__/pipettes.test.ts @@ -92,6 +92,15 @@ describe('pipette data accessors', () => { 'opentrons/opentrons_flex_96_filtertiprack_200ul/1': 10.5, 'opentrons/opentrons_flex_96_filtertiprack_50ul/1': 10.5, }, + v1: { + default: 10.5, + 'opentrons/opentrons_flex_96_tiprack_1000ul/1': 9.65, + 'opentrons/opentrons_flex_96_tiprack_200ul/1': 9.76, + 'opentrons/opentrons_flex_96_tiprack_50ul/1': 10.09, + 'opentrons/opentrons_flex_96_filtertiprack_1000ul/1': 9.65, + 'opentrons/opentrons_flex_96_filtertiprack_200ul/1': 9.76, + 'opentrons/opentrons_flex_96_filtertiprack_50ul/1': 10.09, + }, }, defaultTipracks: [ 'opentrons/opentrons_flex_96_tiprack_1000ul/1', @@ -156,6 +165,11 @@ describe('pipette data accessors', () => { [tiprackFilter50uL]: 10.5, [tiprack50uL]: 10.5, }, + v1: { + default: 10.5, + [tiprackFilter50uL]: 10.09, + [tiprack50uL]: 10.09, + }, }, defaultTipracks: [tiprack50uL, tiprackFilter50uL], maxVolume: 50, @@ -206,6 +220,11 @@ describe('pipette data accessors', () => { [tiprackFilter50uL]: 10.5, [tiprack50uL]: 10.5, }, + v1: { + default: 10.5, + [tiprackFilter50uL]: 10.09, + [tiprack50uL]: 10.09, + }, }, defaultTipracks: [tiprack50uL, tiprackFilter50uL], maxVolume: 30, diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_4.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_4.json index 4d104ad2d47..3840097c460 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_4.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_4.json @@ -362,6 +362,15 @@ "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 9.42, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 9.27, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 9.67, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 9.42, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 9.27, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 9.67 } } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_5.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_5.json index 11becd4e743..a56e09e6cd5 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_5.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_5.json @@ -242,6 +242,15 @@ "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.1, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05, "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.17 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 9.42, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 9.27, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 9.67, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 9.42, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 9.27, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 9.67 } } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_4.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_4.json index 4d69cf14ff6..00389f15f96 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_4.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_4.json @@ -100,6 +100,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 9.27, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 9.27 } } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_5.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_5.json index ee52441eb85..665ce7c318a 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_5.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_5.json @@ -92,6 +92,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 9.27, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 9.27 } } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_4.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_4.json index 349b9f7bbb3..81f6528ae5d 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_4.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_4.json @@ -90,6 +90,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 9.27, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 9.27 } } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_5.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_5.json index 349b9f7bbb3..81f6528ae5d 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_5.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_5.json @@ -90,6 +90,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 9.27, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 9.27 } } } diff --git a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_4.json b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_4.json index 36a7ee32a35..58c10652179 100644 --- a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_4.json +++ b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_4.json @@ -194,6 +194,15 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.16, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.21, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 9.74, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.21, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 9.74, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.16 } } } diff --git a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_5.json b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_5.json index 078263ecbbf..0ba6ba1ec99 100644 --- a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_5.json +++ b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_5.json @@ -194,6 +194,15 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.16, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.21, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 9.74, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.21, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 9.74, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.16 } } } diff --git a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_6.json b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_6.json index 278ee388499..d1461ca5553 100644 --- a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_6.json +++ b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_6.json @@ -188,6 +188,12 @@ "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.16, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.21, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 9.74 } } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_4.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_4.json index c68ec36eedb..d56e4fb7318 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_4.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_4.json @@ -288,6 +288,15 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 9.65, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 9.76, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 9.65, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 9.76, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 } } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_5.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_5.json index d07a90ac697..82909a73807 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_5.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_5.json @@ -210,6 +210,15 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 9.65, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 9.76, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 9.65, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 9.76, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 } } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_6.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_6.json index c9de2a951b2..9cabfe93441 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_6.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_6.json @@ -210,6 +210,15 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 9.65, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 9.76, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_1000ul/1": 9.65, + "opentrons/opentrons_flex_96_filtertiprack_200ul/1": 9.76, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 } } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_4.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_4.json index 38bf1c28e05..8bc3080c0bf 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_4.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_4.json @@ -102,6 +102,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 } } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_5.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_5.json index f16747766d4..9240c08904a 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_5.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_5.json @@ -82,6 +82,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 } } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_6.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_6.json index f16747766d4..9240c08904a 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_6.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_6.json @@ -82,6 +82,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 } } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_4.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_4.json index 6ed26283b69..9eac17173ce 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_4.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_4.json @@ -80,6 +80,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 } } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_5.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_5.json index 4e8cbabb40a..ea3d08790c7 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_5.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_5.json @@ -78,6 +78,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 } } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_6.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_6.json index 6e8f4c9c70b..8fa4aadbdc8 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_6.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_6.json @@ -78,6 +78,11 @@ "default": 10.5, "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + }, + "v1": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.09, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.09 } } } diff --git a/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py b/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py index 093cbc7ac77..8b9ada8c06f 100644 --- a/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py +++ b/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py @@ -8,7 +8,7 @@ # The highest and lowest existing overlap version values. TIP_OVERLAP_VERSION_MINIMUM = 0 -TIP_OVERLAP_VERSION_MAXIMUM = 0 +TIP_OVERLAP_VERSION_MAXIMUM = 1 PLUNGER_CURRENT_MINIMUM = 0.1 PLUNGER_CURRENT_MAXIMUM = 1.5