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