From c34aed7cf0f3e0c8a9303e9890dfbd5f2d1c1990 Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Fri, 31 May 2024 12:42:41 -0400 Subject: [PATCH 1/7] chore(api): add API version 2.19 (#15302) This carves out a 2.19 API version that will contain updated tip overlap data. Closes EXEC-452 --- api/src/opentrons/protocols/api_support/definitions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/opentrons/protocols/api_support/definitions.py b/api/src/opentrons/protocols/api_support/definitions.py index 01fbddbc41f..483f95f4801 100644 --- a/api/src/opentrons/protocols/api_support/definitions.py +++ b/api/src/opentrons/protocols/api_support/definitions.py @@ -1,6 +1,6 @@ from .types import APIVersion -MAX_SUPPORTED_VERSION = APIVersion(2, 18) +MAX_SUPPORTED_VERSION = APIVersion(2, 19) """The maximum supported protocol API version in this release.""" MIN_SUPPORTED_VERSION = APIVersion(2, 0) From f1c2a4962131530ce5dede235b59a73907e186a5 Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Tue, 4 Jun 2024 14:36:34 -0400 Subject: [PATCH 2/7] feat(api,robot-server,shared-data): Specify tip overlap by version (#15323) We need to have multiple versions of the tip overlap data for at least flex pipettes so that we can ship updated overlap data without inadvertently changing the behavior of protocols on stable API versions. This PR accomplishes that. # Details ## separate versioning The data in shared-data has a version, but that version is separate from versions in other parts of the stack. This is on purpose, because the version has to be written in shared-data, and read in protocol engine. I think it's gross to write API versions in shared data, but we've done it before and could do it again; the real sticking point was the engine. The engine, in modern protocols, loads the tip overlap and does all that data management itself; it would need to select the appropriate version from the dict. We really don't want API versions there. Therefore, there's a separate simple versioning scheme that's a little more like the alternate liquid handling function scheme that we haven't used in years, but with an actual string key for the version instead of implicit versioning by positioning in an array. There will instead be a specific map of API versions to overlap versions living inside the source of the engine core for the python protocol API (that's the only place it needs to be - for why, read on). ## engine state management and data lifecycle There were basically two ways to implement this. The first way is to save all the data - save the full versioned tip overlap dictionary, and save which version we've selected. Since I listed this first, you can guess I didn't do this. Instead, what I did was add a version to the two engine commands that load pipette data - `load_pipette` and `configure_for_volume` - and then have the functions those commands call pull the specified version out of the full config, which means that we only have to save the specific version in state and state doesn't have to change. This also means that we don't have to worry about data storage migration and compatibility. One huge note here: **the engine argument parsing gives you the MOST RECENT tip overlap if you don't specify one**. That's in bold because it's not the way we've implemented similar things. It's necessary because we want PD protocols to get the new overlap values without having to change anything. ## python api integration The python API, however, really wants to keep the old values (until you're on a certain version - we'll implement that when we actually add the new values). We do that in a couple ways: - the old pipette dictionary value that has the tip overlap dict is still there, using "v0". That means that protocol API versions that use that dict, which is all those not using the engine core, get the old values consistently for free - for protocol api versions that do use the engine core, for now we hard specify v0. ## json protocol integration New JSON protocols, any that directly create engine commands rather than being mapped through python protocol API values, will get the new overlaps because they won't specify the parameter to the load pipette or configure for volume engine commands. Older JSON protocols that do adapt the python protocol API commands will get the python behavior. # Testing - This PR gets regression tested - it doesn't really contain any new features, because it doesn't really contain any new data. - OT-2 protocol behavior should be adequately covered by the g-code testing - OT-2 calibration should probably be run real quick - Flex behavior should be adequately tested by running LPC and a protocol - this applies to all protocols and can be easily tested. - Flex calibration and LPC doesn't use tips and therefore isn't affected Closes EXEC-451 --- .../opentrons/hardware_control/dev_types.py | 1 + .../instruments/ot2/pipette.py | 9 +- .../instruments/ot2/pipette_handler.py | 1 + .../instruments/ot3/pipette.py | 11 +- .../instruments/ot3/pipette_handler.py | 1 + .../protocol_api/core/engine/instrument.py | 2 +- .../protocol_api/core/engine/protocol.py | 4 +- .../protocol_engine/clients/sync_client.py | 13 +- .../commands/configure_for_volume.py | 8 ++ .../protocol_engine/commands/load_pipette.py | 8 ++ .../protocol_engine/execution/equipment.py | 29 ++++- .../resources/pipette_data_provider.py | 80 ++++++++++-- .../protocol_runner/legacy_command_mapper.py | 5 +- .../core/engine/test_instrument_core.py | 14 ++ .../core/engine/test_protocol_core.py | 4 +- .../commands/test_configure_for_volume.py | 24 +++- .../commands/test_load_pipette.py | 24 +++- .../execution/test_equipment_handler.py | 66 ++++++++-- .../resources/test_pipette_data_provider.py | 109 +++++++++++++--- .../test_legacy_command_mapper.py | 2 +- .../robot/calibration/check/user_flow.py | 4 +- .../robot/calibration/deck/user_flow.py | 2 +- .../calibration/pipette_offset/user_flow.py | 2 +- .../robot/calibration/tip_length/user_flow.py | 2 +- shared-data/command/schemas/8.json | 10 ++ shared-data/js/__tests__/pipettes.test.ts | 38 +++--- .../createIrregularLabware.test.ts.snap | 2 - .../__snapshots__/createLabware.test.ts.snap | 2 - shared-data/js/types.ts | 2 +- .../liquid/eight_channel/p10/default/1_0.json | 18 +-- .../liquid/eight_channel/p10/default/1_3.json | 18 +-- .../liquid/eight_channel/p10/default/1_4.json | 18 +-- .../liquid/eight_channel/p10/default/1_5.json | 18 +-- .../liquid/eight_channel/p10/default/1_6.json | 18 +-- .../eight_channel/p1000/default/1_0.json | 16 ++- .../eight_channel/p1000/default/3_0.json | 22 ++-- .../eight_channel/p1000/default/3_3.json | 22 ++-- .../eight_channel/p1000/default/3_4.json | 22 ++-- .../eight_channel/p1000/default/3_5.json | 22 ++-- .../liquid/eight_channel/p20/default/2_0.json | 22 ++-- .../liquid/eight_channel/p20/default/2_1.json | 22 ++-- .../eight_channel/p300/default/1_0.json | 16 ++- .../eight_channel/p300/default/1_3.json | 16 ++- .../eight_channel/p300/default/1_4.json | 16 ++- .../eight_channel/p300/default/1_5.json | 16 ++- .../eight_channel/p300/default/2_0.json | 14 +- .../eight_channel/p300/default/2_1.json | 14 +- .../liquid/eight_channel/p50/default/1_0.json | 16 ++- .../liquid/eight_channel/p50/default/1_3.json | 16 ++- .../liquid/eight_channel/p50/default/1_4.json | 16 ++- .../liquid/eight_channel/p50/default/1_5.json | 16 ++- .../liquid/eight_channel/p50/default/3_0.json | 14 +- .../liquid/eight_channel/p50/default/3_3.json | 14 +- .../liquid/eight_channel/p50/default/3_4.json | 14 +- .../liquid/eight_channel/p50/default/3_5.json | 14 +- .../p50/lowVolumeDefault/3_0.json | 14 +- .../p50/lowVolumeDefault/3_3.json | 14 +- .../p50/lowVolumeDefault/3_4.json | 14 +- .../p50/lowVolumeDefault/3_5.json | 14 +- .../ninety_six_channel/p1000/default/1_0.json | 38 +++--- .../ninety_six_channel/p1000/default/3_0.json | 38 +++--- .../ninety_six_channel/p1000/default/3_3.json | 38 +++--- .../ninety_six_channel/p1000/default/3_4.json | 38 +++--- .../ninety_six_channel/p1000/default/3_5.json | 38 +++--- .../ninety_six_channel/p1000/default/3_6.json | 16 ++- .../single_channel/p10/default/1_0.json | 18 +-- .../single_channel/p10/default/1_3.json | 18 +-- .../single_channel/p10/default/1_4.json | 18 +-- .../single_channel/p10/default/1_5.json | 18 +-- .../single_channel/p1000/default/1_0.json | 18 +-- .../single_channel/p1000/default/1_3.json | 18 +-- .../single_channel/p1000/default/1_4.json | 18 +-- .../single_channel/p1000/default/1_5.json | 18 +-- .../single_channel/p1000/default/2_0.json | 16 ++- .../single_channel/p1000/default/2_1.json | 16 ++- .../single_channel/p1000/default/2_2.json | 16 ++- .../single_channel/p1000/default/3_0.json | 22 ++-- .../single_channel/p1000/default/3_3.json | 22 ++-- .../single_channel/p1000/default/3_4.json | 22 ++-- .../single_channel/p1000/default/3_5.json | 22 ++-- .../single_channel/p1000/default/3_6.json | 22 ++-- .../single_channel/p20/default/2_0.json | 22 ++-- .../single_channel/p20/default/2_1.json | 22 ++-- .../single_channel/p20/default/2_2.json | 22 ++-- .../single_channel/p300/default/1_0.json | 16 ++- .../single_channel/p300/default/1_3.json | 16 ++- .../single_channel/p300/default/1_4.json | 16 ++- .../single_channel/p300/default/1_5.json | 16 ++- .../single_channel/p300/default/2_0.json | 14 +- .../single_channel/p300/default/2_1.json | 14 +- .../single_channel/p50/default/1_0.json | 16 ++- .../single_channel/p50/default/1_3.json | 16 ++- .../single_channel/p50/default/1_4.json | 16 ++- .../single_channel/p50/default/1_5.json | 16 ++- .../single_channel/p50/default/3_0.json | 14 +- .../single_channel/p50/default/3_3.json | 14 +- .../single_channel/p50/default/3_4.json | 14 +- .../single_channel/p50/default/3_5.json | 14 +- .../single_channel/p50/default/3_6.json | 14 +- .../p50/lowVolumeDefault/3_0.json | 14 +- .../p50/lowVolumeDefault/3_3.json | 14 +- .../p50/lowVolumeDefault/3_4.json | 14 +- .../p50/lowVolumeDefault/3_5.json | 14 +- .../p50/lowVolumeDefault/3_6.json | 14 +- .../2/pipetteLiquidPropertiesSchema.json | 24 ++-- .../pipette/pipette_definition.py | 10 +- .../tests/pipette/test_pipette_definition.py | 4 +- .../tests/pipette/test_validate_schema.py | 120 +++++++++++------- .../fixtureGeneration.test.ts.snap | 80 +++++++----- 109 files changed, 1286 insertions(+), 807 deletions(-) diff --git a/api/src/opentrons/hardware_control/dev_types.py b/api/src/opentrons/hardware_control/dev_types.py index 6eb459fef0f..e6122bf86aa 100644 --- a/api/src/opentrons/hardware_control/dev_types.py +++ b/api/src/opentrons/hardware_control/dev_types.py @@ -84,6 +84,7 @@ class PipetteDict(InstrumentDict): tip_length: float working_volume: float tip_overlap: Dict[str, float] + versioned_tip_overlap: Dict[str, Dict[str, float]] available_volume: float return_tip_height: float default_aspirate_flow_rates: Dict[str, float] diff --git a/api/src/opentrons/hardware_control/instruments/ot2/pipette.py b/api/src/opentrons/hardware_control/instruments/ot2/pipette.py index f8a9d48da60..be126f8513f 100644 --- a/api/src/opentrons/hardware_control/instruments/ot2/pipette.py +++ b/api/src/opentrons/hardware_control/instruments/ot2/pipette.py @@ -148,7 +148,7 @@ def __init__( self._active_tip_settings.default_blowout_flowrate.default ) - self._tip_overlap_lookup = self._liquid_class.tip_overlap_dictionary + self._tip_overlap_lookup = self._liquid_class.versioned_tip_overlap_dictionary if use_old_aspiration_functions: self._pipetting_function_version = PIPETTING_FUNCTION_FALLBACK_VERSION @@ -216,7 +216,7 @@ def pipette_offset(self) -> PipetteOffsetByPipetteMount: return self._pipette_offset @property - def tip_overlap(self) -> Dict[str, float]: + def tip_overlap(self) -> Dict[str, Dict[str, float]]: return self._tip_overlap_lookup @property @@ -290,7 +290,7 @@ def reset_state(self) -> None: self.active_tip_settings.default_blowout_flowrate.default ) - self._tip_overlap_lookup = self.liquid_class.tip_overlap_dictionary + self._tip_overlap_lookup = self.liquid_class.versioned_tip_overlap_dictionary self._nozzle_manager = ( nozzle_manager.NozzleConfigurationManager.build_from_config(self._config) ) @@ -571,7 +571,8 @@ def as_dict(self) -> "Pipette.DictType": "default_dispense_flow_rates": self.dispense_flow_rates_lookup, "tip_length": self.current_tip_length, "return_tip_height": self.active_tip_settings.default_return_tip_height, - "tip_overlap": self.tip_overlap, + "tip_overlap": self.tip_overlap["v0"], + "versioned_tip_overlap": self.tip_overlap, "back_compat_names": self._config.pipette_backcompat_names, "supported_tips": self.liquid_class.supported_tips, } diff --git a/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py b/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py index 35b38a1732a..e1d87f499a9 100644 --- a/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +++ b/api/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py @@ -212,6 +212,7 @@ def get_attached_instrument(self, mount: MountType) -> PipetteDict: "blow_out_flow_rate", "working_volume", "tip_overlap", + "versioned_tip_overlap", "available_volume", "return_tip_height", "default_aspirate_flow_rates", diff --git a/api/src/opentrons/hardware_control/instruments/ot3/pipette.py b/api/src/opentrons/hardware_control/instruments/ot3/pipette.py index 7d72058d1ce..9372cf90ae1 100644 --- a/api/src/opentrons/hardware_control/instruments/ot3/pipette.py +++ b/api/src/opentrons/hardware_control/instruments/ot3/pipette.py @@ -133,7 +133,7 @@ def __init__( ) self._flow_acceleration = self._active_tip_settings.default_flow_acceleration - self._tip_overlap_lookup = self._liquid_class.tip_overlap_dictionary + self._tip_overlap_lookup = self._liquid_class.versioned_tip_overlap_dictionary if use_old_aspiration_functions: self._pipetting_function_version = PIPETTING_FUNCTION_FALLBACK_VERSION @@ -161,7 +161,7 @@ def backlash_distance(self) -> float: return self._backlash_distance @property - def tip_overlap(self) -> Dict[str, float]: + def tip_overlap(self) -> Dict[str, Dict[str, float]]: return self._tip_overlap_lookup @property @@ -254,7 +254,7 @@ def reset_state(self) -> None: ) self._flow_acceleration = self._active_tip_settings.default_flow_acceleration - self._tip_overlap_lookup = self.liquid_class.tip_overlap_dictionary + self._tip_overlap_lookup = self.liquid_class.versioned_tip_overlap_dictionary self._nozzle_manager = ( nozzle_manager.NozzleConfigurationManager.build_from_config(self._config) ) @@ -560,7 +560,8 @@ def as_dict(self) -> "Pipette.DictType": "default_flow_acceleration": self.active_tip_settings.default_flow_acceleration, "tip_length": self.current_tip_length, "return_tip_height": self.active_tip_settings.default_return_tip_height, - "tip_overlap": self.tip_overlap, + "tip_overlap": self.tip_overlap["v0"], + "versioned_tip_overlap": self.tip_overlap, "back_compat_names": self._config.pipette_backcompat_names, "supported_tips": self.liquid_class.supported_tips, } @@ -655,7 +656,7 @@ def set_tip_type(self, tip_type: pip_types.PipetteTipType) -> None: self._flow_acceleration = self._active_tip_settings.default_flow_acceleration self._fallback_tip_length = self._active_tip_settings.default_tip_length - self._tip_overlap_lookup = self.liquid_class.tip_overlap_dictionary + self._tip_overlap_lookup = self.liquid_class.versioned_tip_overlap_dictionary self._working_volume = min(tip_type.value, self.liquid_class.max_volume) def get_pick_up_configuration_for_tip_count( diff --git a/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py b/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py index 1dc40a4caa0..70d62156181 100644 --- a/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +++ b/api/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py @@ -228,6 +228,7 @@ def get_attached_instrument(self, mount: OT3Mount) -> PipetteDict: "blow_out_flow_rate", "working_volume", "tip_overlap", + "versioned_tip_overlap", "available_volume", "return_tip_height", "default_aspirate_flow_rates", diff --git a/api/src/opentrons/protocol_api/core/engine/instrument.py b/api/src/opentrons/protocol_api/core/engine/instrument.py index 485f45d0e94..8accc51c41f 100644 --- a/api/src/opentrons/protocol_api/core/engine/instrument.py +++ b/api/src/opentrons/protocol_api/core/engine/instrument.py @@ -745,7 +745,7 @@ 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 + pipette_id=self._pipette_id, volume=volume, tip_overlap_version="v0" ) def prepare_to_aspirate(self) -> None: diff --git a/api/src/opentrons/protocol_api/core/engine/protocol.py b/api/src/opentrons/protocol_api/core/engine/protocol.py index 4089dff4b4d..b65dc92cb91 100644 --- a/api/src/opentrons/protocol_api/core/engine/protocol.py +++ b/api/src/opentrons/protocol_api/core/engine/protocol.py @@ -498,7 +498,9 @@ def load_instrument( An instrument core configured to use the requested instrument. """ engine_mount = MountType[mount.name] - load_result = self._engine_client.load_pipette(instrument_name, engine_mount) + load_result = self._engine_client.load_pipette( + instrument_name, engine_mount, tip_overlap_version="v0" + ) return InstrumentCore( pipette_id=load_result.pipetteId, diff --git a/api/src/opentrons/protocol_engine/clients/sync_client.py b/api/src/opentrons/protocol_engine/clients/sync_client.py index ed6a499090b..35ea6b9c14d 100644 --- a/api/src/opentrons/protocol_engine/clients/sync_client.py +++ b/api/src/opentrons/protocol_engine/clients/sync_client.py @@ -172,10 +172,15 @@ def load_pipette( self, pipette_name: PipetteNameType, mount: MountType, + tip_overlap_version: Optional[str] = None, ) -> commands.LoadPipetteResult: """Execute a LoadPipette command and return the result.""" request = commands.LoadPipetteCreate( - params=commands.LoadPipetteParams(mount=mount, pipetteName=pipette_name) + params=commands.LoadPipetteParams( + mount=mount, + pipetteName=pipette_name, + tipOverlapNotAfterVersion=tip_overlap_version, + ) ) result = self._transport.execute_command(request=request) @@ -376,12 +381,14 @@ def drop_tip_in_place( return cast(commands.DropTipInPlaceResult, result) def configure_for_volume( - self, pipette_id: str, volume: float + self, pipette_id: str, volume: float, tip_overlap_version: Optional[str] = None ) -> commands.ConfigureForVolumeResult: """Execute a ConfigureForVolume command.""" request = commands.ConfigureForVolumeCreate( params=commands.ConfigureForVolumeParams( - pipetteId=pipette_id, volume=volume + pipetteId=pipette_id, + volume=volume, + tipOverlapNotAfterVersion=tip_overlap_version, ) ) result = self._transport.execute_command(request=request) diff --git a/api/src/opentrons/protocol_engine/commands/configure_for_volume.py b/api/src/opentrons/protocol_engine/commands/configure_for_volume.py index f1f59c35bcb..ed0dfec0657 100644 --- a/api/src/opentrons/protocol_engine/commands/configure_for_volume.py +++ b/api/src/opentrons/protocol_engine/commands/configure_for_volume.py @@ -28,6 +28,13 @@ class ConfigureForVolumeParams(PipetteIdMixin): "than a pipette-specific maximum volume.", ge=0, ) + tipOverlapNotAfterVersion: Optional[str] = Field( + None, + description="A version of tip overlap data to not exceed. The highest-versioned " + "tip overlap data that does not exceed this version will be used. Versions are " + "expressed as vN where N is an integer, counting up from v0. If None, the current " + "highest version will be used.", + ) class ConfigureForVolumePrivateResult(PipetteConfigUpdateResultMixin): @@ -61,6 +68,7 @@ async def execute( pipette_result = await self._equipment.configure_for_volume( pipette_id=params.pipetteId, volume=params.volume, + tip_overlap_version=params.tipOverlapNotAfterVersion, ) return ConfigureForVolumeResult(), ConfigureForVolumePrivateResult( diff --git a/api/src/opentrons/protocol_engine/commands/load_pipette.py b/api/src/opentrons/protocol_engine/commands/load_pipette.py index 5b6be4dea76..e623ecb6d7f 100644 --- a/api/src/opentrons/protocol_engine/commands/load_pipette.py +++ b/api/src/opentrons/protocol_engine/commands/load_pipette.py @@ -52,6 +52,13 @@ class LoadPipetteParams(BaseModel): description="An optional ID to assign to this pipette. If None, an ID " "will be generated.", ) + tipOverlapNotAfterVersion: Optional[str] = Field( + None, + description="A version of tip overlap data to not exceed. The highest-versioned " + "tip overlap data that does not exceed this version will be used. Versions are " + "expressed as vN where N is an integer, counting up from v0. If None, the current " + "highest version will be used.", + ) class LoadPipetteResult(BaseModel): @@ -112,6 +119,7 @@ async def execute( pipette_name=params.pipetteName, mount=params.mount, pipette_id=params.pipetteId, + tip_overlap_version=params.tipOverlapNotAfterVersion, ) return LoadPipetteResult( diff --git a/api/src/opentrons/protocol_engine/execution/equipment.py b/api/src/opentrons/protocol_engine/execution/equipment.py index 7dc2f3bcfaa..d6898ef0863 100644 --- a/api/src/opentrons/protocol_engine/execution/equipment.py +++ b/api/src/opentrons/protocol_engine/execution/equipment.py @@ -203,6 +203,7 @@ async def load_pipette( pipette_name: PipetteNameType, mount: MountType, pipette_id: Optional[str], + tip_overlap_version: Optional[str], ) -> LoadedPipetteData: """Ensure the requested pipette is attached. @@ -211,6 +212,8 @@ async def load_pipette( mount: The mount on which pipette must be attached. pipette_id: An optional identifier to assign the pipette. If None, an identifier will be generated. + tip_overlap_version: An optional specifier for the version of tip overlap data to use. + If None, defaults to v0. Does not need to be format checked - this function does it. Returns: A LoadedPipetteData object. @@ -225,6 +228,11 @@ async def load_pipette( if isinstance(pipette_name, PipetteNameType) else pipette_name ) + sanitized_overlap_version = ( + pipette_data_provider.validate_and_default_tip_overlap_version( + tip_overlap_version + ) + ) pipette_id = pipette_id or self._model_utils.generate_id() if not use_virtual_pipettes: @@ -257,14 +265,16 @@ async def load_pipette( serial_number = pipette_dict["pipette_id"] static_pipette_config = pipette_data_provider.get_pipette_static_config( - pipette_dict + pipette_dict=pipette_dict, tip_overlap_version=sanitized_overlap_version ) else: serial_number = self._model_utils.generate_id(prefix="fake-serial-number-") static_pipette_config = ( self._virtual_pipette_data_provider.get_virtual_pipette_static_config( - pipette_name_value, pipette_id + pipette_name=pipette_name_value, + pipette_id=pipette_id, + tip_overlap_version=sanitized_overlap_version, ) ) serial = serial_number or "" @@ -367,9 +377,7 @@ async def load_module( ) async def configure_for_volume( - self, - pipette_id: str, - volume: float, + self, pipette_id: str, volume: float, tip_overlap_version: Optional[str] ) -> LoadedConfigureForVolumeData: """Ensure the requested volume can be configured for the given pipette. @@ -381,6 +389,11 @@ async def configure_for_volume( A LoadedConfiguredVolumeData object. """ use_virtual_pipettes = self._state_store.config.use_virtual_pipettes + sanitized_overlap_version = ( + pipette_data_provider.validate_and_default_tip_overlap_version( + tip_overlap_version + ) + ) if not use_virtual_pipettes: mount = self._state_store.pipettes.get_mount(pipette_id).to_hw_mount() @@ -390,7 +403,7 @@ async def configure_for_volume( serial_number = pipette_dict["pipette_id"] static_pipette_config = pipette_data_provider.get_pipette_static_config( - pipette_dict + pipette_dict=pipette_dict, tip_overlap_version=sanitized_overlap_version ) else: @@ -401,7 +414,9 @@ async def configure_for_volume( serial_number = self._model_utils.generate_id(prefix="fake-serial-number-") static_pipette_config = self._virtual_pipette_data_provider.get_virtual_pipette_static_config_by_model_string( - model, pipette_id + pipette_model_string=model, + pipette_id=pipette_id, + tip_overlap_version=sanitized_overlap_version, ) return LoadedConfigureForVolumeData( diff --git a/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py b/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py index d2a674516ff..3357b7d591d 100644 --- a/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py +++ b/api/src/opentrons/protocol_engine/resources/pipette_data_provider.py @@ -1,6 +1,7 @@ """Pipette config data providers.""" from dataclasses import dataclass -from typing import Dict, Optional +from typing import Dict, Optional, Sequence +import re from opentrons_shared_data.pipette.dev_types import PipetteName, PipetteModel from opentrons_shared_data.pipette import ( @@ -10,16 +11,40 @@ pipette_definition, ) - from opentrons.hardware_control.dev_types import PipetteDict from opentrons.hardware_control.nozzle_manager import ( NozzleConfigurationManager, NozzleMap, ) +from ..errors.exceptions import InvalidLoadPipetteSpecsError from ..types import FlowRates from ...types import Point +_TIP_OVERLAP_VERSION_RE = re.compile(r"^v\d+$") + + +def validate_and_default_tip_overlap_version(version_spec: Optional[str]) -> str: + """Validate and sanitize tip overlap versions for later consumption. + + Something that comes out of this function will be of the correct format, but a given kind of + pipette may not have this version of data. + """ + if version_spec is None: + return f"v{pipette_definition.TIP_OVERLAP_VERSION_MAXIMUM}" + valid = _TIP_OVERLAP_VERSION_RE.match(version_spec) + if not valid: + raise InvalidLoadPipetteSpecsError( + f"Tip overlap version specification {version_spec} is invalid." + ) + try: + _ = int(version_spec[1:]) + except ValueError: + raise InvalidLoadPipetteSpecsError( + f"Tip overlap version specification {version_spec} is invalid." + ) + return version_spec + @dataclass(frozen=True) class LoadedStaticPipetteData: @@ -104,14 +129,14 @@ def get_nozzle_layout_for_pipette(self, pipette_id: str) -> NozzleMap: return self._nozzle_manager_layout_by_id[pipette_id].current_configuration def get_virtual_pipette_static_config_by_model_string( - self, pipette_model_string: str, pipette_id: str + self, pipette_model_string: str, pipette_id: str, tip_overlap_version: str ) -> LoadedStaticPipetteData: """Get the config of a pipette when you know its model string (e.g. from state).""" pipette_model = pipette_load_name.convert_pipette_model( PipetteModel(pipette_model_string) ) return self._get_virtual_pipette_static_config_by_model( - pipette_model, pipette_id + pipette_model, pipette_id, tip_overlap_version ) def _get_virtual_pipette_full_config_by_model_string( @@ -128,7 +153,10 @@ def _get_virtual_pipette_full_config_by_model_string( ) def _get_virtual_pipette_static_config_by_model( - self, pipette_model: pipette_definition.PipetteModelVersionType, pipette_id: str + self, + pipette_model: pipette_definition.PipetteModelVersionType, + pipette_id: str, + tip_overlap_version: str, ) -> LoadedStaticPipetteData: if pipette_id not in self._liquid_class_by_id: self._liquid_class_by_id[pipette_id] = pip_types.LiquidClasses.default @@ -173,9 +201,10 @@ def _get_virtual_pipette_static_config_by_model( default_aspirate=tip_configuration.default_aspirate_flowrate.values_by_api_level, default_dispense=tip_configuration.default_dispense_flowrate.values_by_api_level, ), - nominal_tip_overlap=config.liquid_properties[ - liquid_class - ].tip_overlap_dictionary, + nominal_tip_overlap=get_latest_tip_overlap_before_version( + config.liquid_properties[liquid_class].versioned_tip_overlap_dictionary, + tip_overlap_version, + ), nozzle_map=nozzle_manager.current_configuration, back_left_corner_offset=Point( pip_back_left[0], pip_back_left[1], pip_back_left[2] @@ -186,16 +215,18 @@ def _get_virtual_pipette_static_config_by_model( ) def get_virtual_pipette_static_config( - self, pipette_name: PipetteName, pipette_id: str + self, pipette_name: PipetteName, pipette_id: str, tip_overlap_version: str ) -> LoadedStaticPipetteData: """Get the config for a virtual pipette, given only the pipette name.""" pipette_model = pipette_load_name.convert_pipette_name(pipette_name) return self._get_virtual_pipette_static_config_by_model( - pipette_model, pipette_id + pipette_model, pipette_id, tip_overlap_version ) -def get_pipette_static_config(pipette_dict: PipetteDict) -> LoadedStaticPipetteData: +def get_pipette_static_config( + pipette_dict: PipetteDict, tip_overlap_version: str +) -> LoadedStaticPipetteData: """Get the config for a pipette, given the state/config object from the HW API.""" back_left_offset = pipette_dict["pipette_bounding_box_offsets"].back_left_corner front_right_offset = pipette_dict["pipette_bounding_box_offsets"].front_right_corner @@ -213,7 +244,9 @@ def get_pipette_static_config(pipette_dict: PipetteDict) -> LoadedStaticPipetteD tip_configuration_lookup_table={ k.value: v for k, v in pipette_dict["supported_tips"].items() }, - nominal_tip_overlap=pipette_dict["tip_overlap"], + nominal_tip_overlap=get_latest_tip_overlap_before_version( + pipette_dict["versioned_tip_overlap"], tip_overlap_version + ), # TODO(mc, 2023-02-28): these two values are not present in PipetteDict # https://opentrons.atlassian.net/browse/RCORE-655 home_position=0, @@ -226,3 +259,26 @@ def get_pipette_static_config(pipette_dict: PipetteDict) -> LoadedStaticPipetteD front_right_offset[0], front_right_offset[1], front_right_offset[2] ), ) + + +def get_latest_tip_overlap_before_version( + overlap: Dict[str, Dict[str, float]], version: str +) -> Dict[str, float]: + """Get the latest tip overlap definitions that are equal or older than the version.""" + # TODO: make this less awful + def _numeric(versionstr: str) -> int: + return int(versionstr[1:]) + + def _latest(versions: Sequence[int], target: int) -> int: + last = 0 + for version in versions: + if version > target: + return last + last = version + return last + + numeric_target = _numeric(version) + numeric_versions = sorted([_numeric(k) for k in overlap.keys()]) + found_numeric_version = _latest(numeric_versions, numeric_target) + found_version = f"v{found_numeric_version}" + return overlap[found_version] diff --git a/api/src/opentrons/protocol_runner/legacy_command_mapper.py b/api/src/opentrons/protocol_runner/legacy_command_mapper.py index 9243f50f70d..e92cc2407aa 100644 --- a/api/src/opentrons/protocol_runner/legacy_command_mapper.py +++ b/api/src/opentrons/protocol_runner/legacy_command_mapper.py @@ -690,7 +690,10 @@ def _map_instrument_load( pipette_id=pipette_id, serial_number=serial, config=pipette_data_provider.get_pipette_static_config( - instrument_load_info.pipette_dict + # Compatibility note - this is the version of tip overlap data, it stays at 0 + # so protocol behavior does not change when you run a legacy JSON protocol + instrument_load_info.pipette_dict, + "v0", ), ) queue_action = pe_actions.QueueCommandAction( 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 6ac0e9aaaf0..a71f33a9637 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 @@ -1171,3 +1171,17 @@ def test_is_tip_tracking_available( mock_engine_client.state.pipettes.get_primary_nozzle(subject.pipette_id) ).then_return(primary_nozzle) assert subject.is_tip_tracking_available() == expected_result + + +def test_configure_for_volume( + decoy: Decoy, + mock_engine_client: EngineClient, + subject: InstrumentCore, +) -> None: + """Configure_for_volume should specify overlap 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" + ) + ) 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 8f6589b1104..46ddd0a88f6 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 @@ -244,7 +244,9 @@ def test_load_instrument( """It should issue a LoadPipette command.""" decoy.when( mock_engine_client.load_pipette( - pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + tip_overlap_version="v0", ) ).then_return(commands.LoadPipetteResult(pipetteId="cool-pipette")) diff --git a/api/tests/opentrons/protocol_engine/commands/test_configure_for_volume.py b/api/tests/opentrons/protocol_engine/commands/test_configure_for_volume.py index 333662d4bcf..625e8322e31 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_configure_for_volume.py +++ b/api/tests/opentrons/protocol_engine/commands/test_configure_for_volume.py @@ -1,4 +1,5 @@ """Test load pipette commands.""" +import pytest from decoy import Decoy from opentrons.protocol_engine.execution import ( @@ -21,18 +22,26 @@ from opentrons.types import Point +@pytest.mark.parametrize( + "data", + [ + ConfigureForVolumeParams( + pipetteId="some id", + volume=1, + ), + ConfigureForVolumeParams( + pipetteId="some id", + volume=1, + tipOverlapNotAfterVersion="v3", + ), + ], +) async def test_configure_for_volume_implementation( - decoy: Decoy, - equipment: EquipmentHandler, + decoy: Decoy, equipment: EquipmentHandler, data: ConfigureForVolumeParams ) -> None: """A ConfigureForVolume command should have an execution implementation.""" subject = ConfigureForVolumeImplementation(equipment=equipment) - data = ConfigureForVolumeParams( - pipetteId="some id", - volume=1, - ) - config = LoadedStaticPipetteData( model="some-model", display_name="Hello", @@ -55,6 +64,7 @@ async def test_configure_for_volume_implementation( await equipment.configure_for_volume( pipette_id="some id", volume=1, + tip_overlap_version=data.tipOverlapNotAfterVersion, ) ).then_return( LoadedConfigureForVolumeData( diff --git a/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py b/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py index 91e86ad1376..6896808e574 100644 --- a/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py +++ b/api/tests/opentrons/protocol_engine/commands/test_load_pipette.py @@ -22,10 +22,27 @@ from ..pipette_fixtures import get_default_nozzle_map +@pytest.mark.parametrize( + "data", + [ + LoadPipetteParams( + pipetteName=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + pipetteId="some id", + ), + LoadPipetteParams( + pipetteName=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + pipetteId="some id", + tipOverlapNotAfterVersion="v2", + ), + ], +) async def test_load_pipette_implementation( decoy: Decoy, equipment: EquipmentHandler, state_view: StateView, + data: LoadPipetteParams, ) -> None: """A LoadPipette command should have an execution implementation.""" subject = LoadPipetteImplementation(equipment=equipment, state_view=state_view) @@ -46,17 +63,13 @@ async def test_load_pipette_implementation( back_left_corner_offset=Point(x=1, y=2, z=3), front_right_corner_offset=Point(x=4, y=5, z=6), ) - data = LoadPipetteParams( - pipetteName=PipetteNameType.P300_SINGLE, - mount=MountType.LEFT, - pipetteId="some id", - ) decoy.when( await equipment.load_pipette( pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, pipette_id="some id", + tip_overlap_version=data.tipOverlapNotAfterVersion, ) ).then_return( LoadedPipetteData( @@ -110,6 +123,7 @@ async def test_load_pipette_implementation_96_channel( pipette_name=PipetteNameType.P1000_96, mount=MountType.LEFT, pipette_id="some id", + tip_overlap_version=None, ) ).then_return( LoadedPipetteData( diff --git a/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py b/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py index 1177894e977..c8db4b3191f 100644 --- a/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py +++ b/api/tests/opentrons/protocol_engine/execution/test_equipment_handler.py @@ -1,9 +1,10 @@ """Test equipment command execution side effects.""" import pytest +from _pytest.fixtures import SubRequest import inspect from datetime import datetime from decoy import Decoy, matchers -from typing import Any, Optional, cast +from typing import Any, Optional, cast, Dict from opentrons_shared_data.pipette.dev_types import PipetteNameType from opentrons_shared_data.pipette import pipette_definition @@ -121,9 +122,16 @@ async def temp_module_v2(decoy: Decoy) -> TempDeck: return temp_mod +@pytest.fixture(params=["v0", "v1", "v3"]) +def tip_overlap_versions(request: SubRequest) -> str: + """Get a series of tip overlap versions.""" + return cast(str, request.param) + + @pytest.fixture def loaded_static_pipette_data( supported_tip_fixture: pipette_definition.SupportedTipsDefinition, + target_tip_overlap_data: Dict[str, float], ) -> LoadedStaticPipetteData: """Get a pipette config data value object.""" return LoadedStaticPipetteData( @@ -138,7 +146,7 @@ def loaded_static_pipette_data( default_dispense={"c": 7.89}, ), tip_configuration_lookup_table={4.56: supported_tip_fixture}, - nominal_tip_overlap={"default": 9.87}, + nominal_tip_overlap=target_tip_overlap_data, home_position=10.11, nozzle_offset_z=12.13, nozzle_map=get_default_nozzle_map(PipetteNameType.P300_SINGLE), @@ -147,6 +155,12 @@ def loaded_static_pipette_data( ) +@pytest.fixture +def target_tip_overlap_data(tip_overlap_versions: str) -> Dict[str, float]: + """Get the corresponding overlap data for the version.""" + return {"default": 2.13 * int(tip_overlap_versions[1:])} + + @pytest.fixture def virtual_pipette_data_provider( decoy: Decoy, @@ -606,6 +620,7 @@ async def test_load_pipette( hardware_api: HardwareControlAPI, state_store: StateStore, loaded_static_pipette_data: LoadedStaticPipetteData, + tip_overlap_versions: str, subject: EquipmentHandler, ) -> None: """It should load pipette data, check attachment, and generate an ID.""" @@ -621,7 +636,14 @@ async def test_load_pipette( ) decoy.when( - pipette_data_provider.get_pipette_static_config(pipette_dict) + pipette_data_provider.validate_and_default_tip_overlap_version( + tip_overlap_versions + ) + ).then_return(tip_overlap_versions) + decoy.when( + pipette_data_provider.get_pipette_static_config( + pipette_dict=pipette_dict, tip_overlap_version=tip_overlap_versions + ), ).then_return(loaded_static_pipette_data) decoy.when(hardware_api.get_instrument_max_height(mount=HwMount.LEFT)).then_return( @@ -632,6 +654,7 @@ async def test_load_pipette( pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, pipette_id=None, + tip_overlap_version=tip_overlap_versions, ) assert result == LoadedPipetteData( @@ -656,6 +679,7 @@ async def test_load_pipette_96_channels( hardware_api: HardwareControlAPI, state_store: StateStore, loaded_static_pipette_data: LoadedStaticPipetteData, + tip_overlap_versions: str, subject: EquipmentHandler, ) -> None: """It should load pipette data, check attachment, and generate an ID.""" @@ -667,7 +691,14 @@ async def test_load_pipette_96_channels( pipette_dict ) decoy.when( - pipette_data_provider.get_pipette_static_config(pipette_dict) + pipette_data_provider.validate_and_default_tip_overlap_version( + tip_overlap_versions + ) + ).then_return(tip_overlap_versions) + decoy.when( + pipette_data_provider.get_pipette_static_config( + pipette_dict=pipette_dict, tip_overlap_version=tip_overlap_versions + ) ).then_return(loaded_static_pipette_data) decoy.when(hardware_api.get_instrument_max_height(mount=HwMount.LEFT)).then_return( @@ -678,6 +709,7 @@ async def test_load_pipette_96_channels( pipette_name=PipetteNameType.P1000_96, mount=MountType.LEFT, pipette_id=None, + tip_overlap_version=tip_overlap_versions, ) assert result == LoadedPipetteData( @@ -692,6 +724,7 @@ async def test_load_pipette_uses_provided_id( hardware_api: HardwareControlAPI, state_store: StateStore, loaded_static_pipette_data: LoadedStaticPipetteData, + tip_overlap_versions: str, subject: EquipmentHandler, ) -> None: """It should use the provided ID rather than generating an ID for the pipette.""" @@ -702,13 +735,21 @@ async def test_load_pipette_uses_provided_id( pipette_dict ) decoy.when( - pipette_data_provider.get_pipette_static_config(pipette_dict) + pipette_data_provider.validate_and_default_tip_overlap_version( + tip_overlap_versions + ) + ).then_return(tip_overlap_versions) + decoy.when( + pipette_data_provider.get_pipette_static_config( + pipette_dict=pipette_dict, tip_overlap_version=tip_overlap_versions + ) ).then_return(loaded_static_pipette_data) result = await subject.load_pipette( pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, pipette_id="my-pipette-id", + tip_overlap_version=tip_overlap_versions, ) assert result == LoadedPipetteData( @@ -724,6 +765,7 @@ async def test_load_pipette_use_virtual( state_store: StateStore, loaded_static_pipette_data: LoadedStaticPipetteData, subject: EquipmentHandler, + tip_overlap_versions: str, virtual_pipette_data_provider: pipette_data_provider.VirtualPipetteDataProvider, ) -> None: """It should use the provided ID rather than generating an ID for the pipette.""" @@ -733,15 +775,22 @@ async def test_load_pipette_use_virtual( decoy.when(model_utils.generate_id(prefix="fake-serial-number-")).then_return( "fake-serial" ) - + decoy.when( + pipette_data_provider.validate_and_default_tip_overlap_version( + tip_overlap_versions + ) + ).then_return(tip_overlap_versions) decoy.when( virtual_pipette_data_provider.get_virtual_pipette_static_config( - PipetteNameType.P300_SINGLE.value, "unique-id" + PipetteNameType.P300_SINGLE.value, "unique-id", tip_overlap_versions ) ).then_return(loaded_static_pipette_data) result = await subject.load_pipette( - pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, pipette_id=None + pipette_name=PipetteNameType.P300_SINGLE, + mount=MountType.LEFT, + pipette_id=None, + tip_overlap_version=tip_overlap_versions, ) assert result == LoadedPipetteData( @@ -781,6 +830,7 @@ async def test_load_pipette_raises_if_pipette_not_attached( pipette_name=PipetteNameType.P300_SINGLE, mount=MountType.LEFT, pipette_id=None, + tip_overlap_version="v9999", ) diff --git a/api/tests/opentrons/protocol_engine/resources/test_pipette_data_provider.py b/api/tests/opentrons/protocol_engine/resources/test_pipette_data_provider.py index 049441da52a..61d177ba42f 100644 --- a/api/tests/opentrons/protocol_engine/resources/test_pipette_data_provider.py +++ b/api/tests/opentrons/protocol_engine/resources/test_pipette_data_provider.py @@ -1,9 +1,12 @@ """Test pipette data provider.""" +from typing import Dict +from sys import maxsize import pytest from opentrons_shared_data.pipette.dev_types import PipetteNameType, PipetteModel from opentrons_shared_data.pipette import pipette_definition, types as pip_types from opentrons_shared_data.pipette.pipette_definition import ( PipetteBoundingBoxOffsetDefinition, + TIP_OVERLAP_VERSION_MAXIMUM, ) from opentrons.hardware_control.dev_types import PipetteDict @@ -11,9 +14,12 @@ from opentrons.protocol_engine.resources.pipette_data_provider import ( LoadedStaticPipetteData, VirtualPipetteDataProvider, + validate_and_default_tip_overlap_version, + get_latest_tip_overlap_before_version, ) from opentrons.protocol_engine.resources import pipette_data_provider as subject +from opentrons.protocol_engine.errors.exceptions import InvalidLoadPipetteSpecsError from ..pipette_fixtures import get_default_nozzle_map from opentrons.types import Point @@ -29,7 +35,7 @@ def test_get_virtual_pipette_static_config( ) -> None: """It should return config data given a pipette name.""" result = subject_instance.get_virtual_pipette_static_config( - PipetteNameType.P20_SINGLE_GEN2.value, "some-id" + PipetteNameType.P20_SINGLE_GEN2.value, "some-id", "v0" ) assert result == LoadedStaticPipetteData( @@ -66,7 +72,7 @@ def test_configure_virtual_pipette_for_volume( ) -> None: """It should return an updated config if the liquid class changes.""" result1 = subject_instance.get_virtual_pipette_static_config( - PipetteNameType.P50_SINGLE_FLEX.value, "my-pipette" + PipetteNameType.P50_SINGLE_FLEX.value, "my-pipette", "v0" ) assert result1 == LoadedStaticPipetteData( model="p50_single_v3.6", @@ -91,7 +97,7 @@ def test_configure_virtual_pipette_for_volume( "my-pipette", 1, result1.model ) result2 = subject_instance.get_virtual_pipette_static_config( - PipetteNameType.P50_SINGLE_FLEX.value, "my-pipette" + PipetteNameType.P50_SINGLE_FLEX.value, "my-pipette", "v0" ) assert result2 == LoadedStaticPipetteData( model="p50_single_v3.6", @@ -119,7 +125,7 @@ def test_load_virtual_pipette_by_model_string( ) -> None: """It should return config data given a pipette model.""" result = subject_instance.get_virtual_pipette_static_config_by_model_string( - "p300_multi_v2.1", "my-pipette" + "p300_multi_v2.1", "my-pipette", "v0" ) assert result == LoadedStaticPipetteData( model="p300_multi_v2.1", @@ -180,12 +186,12 @@ def test_load_virtual_pipette_nozzle_layout( assert result.configuration.value == "COLUMN" -def test_get_pipette_static_config( +@pytest.fixture +def pipette_dict( supported_tip_fixture: pipette_definition.SupportedTipsDefinition, -) -> None: - """It should return config data given a PipetteDict.""" - dummy_nozzle_map = get_default_nozzle_map(PipetteNameType.P300_SINGLE_GEN2) - pipette_dict: PipetteDict = { +) -> PipetteDict: + """Get a pipette dict.""" + return { "name": "p300_single_gen2", "min_volume": 20, "max_volume": 300, @@ -204,6 +210,12 @@ def test_get_pipette_static_config( "opentrons/opentrons_96_tiprack_300ul/1": 8.2, "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, }, + "versioned_tip_overlap": { + "v0": { + "default": 8.2, + }, + "v2": {"default": 9.3}, + }, "available_volume": 300.0, "return_tip_height": 0.5, "default_aspirate_flow_rates": {"2.0": 46.43, "2.1": 92.86}, @@ -220,14 +232,31 @@ def test_get_pipette_static_config( "default_aspirate_speeds": {"2.0": 5.021202, "2.6": 10.042404}, "default_push_out_volume": 3, "supported_tips": {pip_types.PipetteTipType.t300: supported_tip_fixture}, - "current_nozzle_map": dummy_nozzle_map, + "current_nozzle_map": get_default_nozzle_map(PipetteNameType.P300_SINGLE_GEN2), "pipette_bounding_box_offsets": PipetteBoundingBoxOffsetDefinition( backLeftCorner=[10, 20, 30], frontRightCorner=[40, 50, 60], ), } - result = subject.get_pipette_static_config(pipette_dict) + +@pytest.mark.parametrize( + "tip_overlap_version,overlap_data", + [ + ("v0", {"default": 8.2}), + ("v1", {"default": 8.2}), + ("v2", {"default": 9.3}), + ("v10000", {"default": 9.3}), + ], +) +def test_get_pipette_static_config( + supported_tip_fixture: pipette_definition.SupportedTipsDefinition, + pipette_dict: PipetteDict, + tip_overlap_version: str, + overlap_data: Dict[str, float], +) -> None: + """It should return config data given a PipetteDict.""" + result = subject.get_pipette_static_config(pipette_dict, tip_overlap_version) assert result == LoadedStaticPipetteData( model="p300_single_v2.0", @@ -241,16 +270,62 @@ def test_get_pipette_static_config( default_blow_out={"2.0": 46.43, "2.2": 92.86}, ), tip_configuration_lookup_table={300: supported_tip_fixture}, - nominal_tip_overlap={ - "default": 8.2, - "opentrons/opentrons_96_tiprack_300ul/1": 8.2, - "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, - }, + nominal_tip_overlap=overlap_data, # TODO(mc, 2023-02-28): these two values are not present in PipetteDict # https://opentrons.atlassian.net/browse/RCORE-655 nozzle_offset_z=0, home_position=0, - nozzle_map=dummy_nozzle_map, + nozzle_map=get_default_nozzle_map(PipetteNameType.P300_SINGLE_GEN2), back_left_corner_offset=Point(10, 20, 30), front_right_corner_offset=Point(40, 50, 60), ) + + +@pytest.mark.parametrize( + "version", + [ + "", + "qwe", + "v", + "v-1", + "vab", + ], +) +def test_validate_bad_tip_overlap_versions(version: str) -> None: + """Raise for bad tip overlap version specs.""" + with pytest.raises(InvalidLoadPipetteSpecsError): + validate_and_default_tip_overlap_version(version) + + +def test_default_tip_overlap_versions() -> None: + """Default None tip overlap version specs.""" + assert ( + validate_and_default_tip_overlap_version(None) + == f"v{TIP_OVERLAP_VERSION_MAXIMUM}" + ) + + +@pytest.mark.parametrize("version", ["v0", "v1", f"v{maxsize+1}"]) +def test_pass_valid_tip_overlap_versions(version: str) -> None: + """Pass valid tip overlap specs.""" + assert validate_and_default_tip_overlap_version(version) == version + + +@pytest.mark.parametrize( + "version,target_data", + [ + ("v0", {"default": 123.0}), + ("v1", {"default": 321.1}), + ("v3", {"default": 333.5}), + ("v9999", {"default": 4414.99}), + ], +) +def test_get_latest_tip_overlap(version: str, target_data: Dict[str, float]) -> None: + """Test the search function for latest offset.""" + overlap = { + "v0": {"default": 123.0}, + "v1": {"default": 321.1}, + "v2": {"default": 333.5}, + "v1231": {"default": 4414.99}, + } + assert get_latest_tip_overlap_before_version(overlap, version) == target_data diff --git a/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py b/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py index a0581001a82..38a9cec60d8 100644 --- a/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py +++ b/api/tests/opentrons/protocol_runner/test_legacy_command_mapper.py @@ -342,7 +342,7 @@ def test_map_instrument_load(decoy: Decoy) -> None: pipette_config = cast(LoadedStaticPipetteData, {"config": True}) decoy.when( - pipette_data_provider.get_pipette_static_config(pipette_dict) + pipette_data_provider.get_pipette_static_config(pipette_dict, "v0"), ).then_return(pipette_config) expected_id_and_key = "commands.LOAD_PIPETTE-0" diff --git a/robot-server/robot_server/robot/calibration/check/user_flow.py b/robot-server/robot_server/robot/calibration/check/user_flow.py index 1366c0054ed..bdd343b8c7c 100644 --- a/robot-server/robot_server/robot/calibration/check/user_flow.py +++ b/robot-server/robot_server/robot/calibration/check/user_flow.py @@ -851,8 +851,8 @@ def _get_tip_length(self) -> float: self.active_tiprack._core.get_definition(), ).tipLength except cal_types.TipLengthCalNotFound: - tip_overlap = self.hw_pipette.tip_overlap.get( - self.active_tiprack.uri, self.hw_pipette.tip_overlap["default"] + tip_overlap = self.hw_pipette.tip_overlap["v0"].get( + self.active_tiprack.uri, self.hw_pipette.tip_overlap["v0"]["default"] ) tip_length = self.active_tiprack.tip_length return tip_length - tip_overlap diff --git a/robot-server/robot_server/robot/calibration/deck/user_flow.py b/robot-server/robot_server/robot/calibration/deck/user_flow.py index 55ed1351f84..a857e593820 100644 --- a/robot-server/robot_server/robot/calibration/deck/user_flow.py +++ b/robot-server/robot_server/robot/calibration/deck/user_flow.py @@ -365,7 +365,7 @@ def _get_tip_length(self) -> float: self._tip_rack._core.get_definition(), ).tipLength except cal_types.TipLengthCalNotFound: - tip_overlap = self._hw_pipette.tip_overlap.get(self._tip_rack.uri, 0) + tip_overlap = self._hw_pipette.tip_overlap["v0"].get(self._tip_rack.uri, 0) tip_length = self._tip_rack.tip_length return tip_length - tip_overlap diff --git a/robot-server/robot_server/robot/calibration/pipette_offset/user_flow.py b/robot-server/robot_server/robot/calibration/pipette_offset/user_flow.py index 695e8428634..c68255ce2f3 100644 --- a/robot-server/robot_server/robot/calibration/pipette_offset/user_flow.py +++ b/robot-server/robot_server/robot/calibration/pipette_offset/user_flow.py @@ -328,7 +328,7 @@ def _get_stored_pipette_offset_cal( def _get_tip_length(self) -> float: stored_tip_length_cal = self._get_stored_tip_length_cal() if stored_tip_length_cal is None or self._should_perform_tip_length: - tip_overlap = self._hw_pipette.tip_overlap.get(self._tip_rack.uri, 0) + tip_overlap = self._hw_pipette.tip_overlap["v0"].get(self._tip_rack.uri, 0) tip_length = self._tip_rack.tip_length return tip_length - tip_overlap else: diff --git a/robot-server/robot_server/robot/calibration/tip_length/user_flow.py b/robot-server/robot_server/robot/calibration/tip_length/user_flow.py index fec0fa42639..282c1feb6f0 100644 --- a/robot-server/robot_server/robot/calibration/tip_length/user_flow.py +++ b/robot-server/robot_server/robot/calibration/tip_length/user_flow.py @@ -200,7 +200,7 @@ async def save_offset(self): def _get_default_tip_length(self) -> float: tiprack: labware.Labware = self._deck[TIP_RACK_SLOT] # type: ignore full_length = tiprack.tip_length - overlap_dict: Dict[str, float] = self._hw_pipette.tip_overlap + overlap_dict: Dict[str, float] = self._hw_pipette.tip_overlap["v0"] overlap = overlap_dict.get(tiprack.uri, 0) return full_length - overlap diff --git a/shared-data/command/schemas/8.json b/shared-data/command/schemas/8.json index 5aea97fe94f..b25a4e0ac6f 100644 --- a/shared-data/command/schemas/8.json +++ b/shared-data/command/schemas/8.json @@ -489,6 +489,11 @@ "description": "Amount of liquid in uL. Must be at least 0 and no greater than a pipette-specific maximum volume.", "minimum": 0, "type": "number" + }, + "tipOverlapNotAfterVersion": { + "title": "Tipoverlapnotafterversion", + "description": "A version of tip overlap data to not exceed. The highest-versioned tip overlap data that does not exceed this version will be used. Versions are expressed as vN where N is an integer, counting up from v0. If None, the current highest version will be used.", + "type": "string" } }, "required": ["pipetteId", "volume"] @@ -1634,6 +1639,11 @@ "title": "Pipetteid", "description": "An optional ID to assign to this pipette. If None, an ID will be generated.", "type": "string" + }, + "tipOverlapNotAfterVersion": { + "title": "Tipoverlapnotafterversion", + "description": "A version of tip overlap data to not exceed. The highest-versioned tip overlap data that does not exceed this version will be used. Versions are expressed as vN where N is an integer, counting up from v0. If None, the current highest version will be used.", + "type": "string" } }, "required": ["pipetteName", "mount"] diff --git a/shared-data/js/__tests__/pipettes.test.ts b/shared-data/js/__tests__/pipettes.test.ts index 14b3b417a8f..4b43e3a9ba2 100644 --- a/shared-data/js/__tests__/pipettes.test.ts +++ b/shared-data/js/__tests__/pipettes.test.ts @@ -82,14 +82,16 @@ describe('pipette data accessors', () => { default: { $otSharedSchema: '#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json', - defaultTipOverlapDictionary: { - default: 10.5, - 'opentrons/opentrons_flex_96_tiprack_1000ul/1': 10.5, - 'opentrons/opentrons_flex_96_tiprack_200ul/1': 10.5, - 'opentrons/opentrons_flex_96_tiprack_50ul/1': 10.5, - '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, + versionedTipOverlapDictionary: { + v0: { + default: 10.5, + 'opentrons/opentrons_flex_96_tiprack_1000ul/1': 10.5, + 'opentrons/opentrons_flex_96_tiprack_200ul/1': 10.5, + 'opentrons/opentrons_flex_96_tiprack_50ul/1': 10.5, + '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, + }, }, defaultTipracks: [ 'opentrons/opentrons_flex_96_tiprack_1000ul/1', @@ -148,10 +150,12 @@ describe('pipette data accessors', () => { const mockLiquidDefault = { $otSharedSchema: '#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json', - defaultTipOverlapDictionary: { - default: 10.5, - [tiprackFilter50uL]: 10.5, - [tiprack50uL]: 10.5, + versionedTipOverlapDictionary: { + v0: { + default: 10.5, + [tiprackFilter50uL]: 10.5, + [tiprack50uL]: 10.5, + }, }, defaultTipracks: [tiprack50uL, tiprackFilter50uL], maxVolume: 50, @@ -196,10 +200,12 @@ describe('pipette data accessors', () => { } as PipetteV2LiquidSpecs const mockLiquidLowVolume = { $otSharedSchema: '#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json', - defaultTipOverlapDictionary: { - default: 10.5, - [tiprackFilter50uL]: 10.5, - [tiprack50uL]: 10.5, + versionedTipOverlapDictionary: { + v0: { + default: 10.5, + [tiprackFilter50uL]: 10.5, + [tiprack50uL]: 10.5, + }, }, defaultTipracks: [tiprack50uL, tiprackFilter50uL], maxVolume: 30, diff --git a/shared-data/js/labwareTools/__tests__/__snapshots__/createIrregularLabware.test.ts.snap b/shared-data/js/labwareTools/__tests__/__snapshots__/createIrregularLabware.test.ts.snap index 96ac3e3853b..fdfdd6cd42a 100644 --- a/shared-data/js/labwareTools/__tests__/__snapshots__/createIrregularLabware.test.ts.snap +++ b/shared-data/js/labwareTools/__tests__/__snapshots__/createIrregularLabware.test.ts.snap @@ -1,5 +1,3 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`test createIrregularLabware function > failing to validate against labware schema throws w/o "strict" 1`] = `[Error: Generated labware failed to validate, please check your inputs]`; - -exports[`test createIrregularLabware function failing to validate against labware schema throws w/o "strict" 1`] = `"Generated labware failed to validate, please check your inputs"`; diff --git a/shared-data/js/labwareTools/__tests__/__snapshots__/createLabware.test.ts.snap b/shared-data/js/labwareTools/__tests__/__snapshots__/createLabware.test.ts.snap index 122b6a3894e..85c5aa8c451 100644 --- a/shared-data/js/labwareTools/__tests__/__snapshots__/createLabware.test.ts.snap +++ b/shared-data/js/labwareTools/__tests__/__snapshots__/createLabware.test.ts.snap @@ -1,5 +1,3 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`createLabware > failing to validate against labware schema throws w/o "strict" 1`] = `[Error: Generated labware failed to validate, please check your inputs]`; - -exports[`createLabware failing to validate against labware schema throws w/o "strict" 1`] = `"Generated labware failed to validate, please check your inputs"`; diff --git a/shared-data/js/types.ts b/shared-data/js/types.ts index 4d51f992f22..1309159875a 100644 --- a/shared-data/js/types.ts +++ b/shared-data/js/types.ts @@ -502,7 +502,7 @@ export interface SupportedTips { export interface PipetteV2LiquidSpecs { $otSharedSchema: string supportedTips: SupportedTips - defaultTipOverlapDictionary: Record + versionedTipOverlapDictionary: Record> maxVolume: number minVolume: number defaultTipracks: string[] diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_0.json index c781ed5fb1b..18168db370b 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_0.json @@ -41,18 +41,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 - }, "maxVolume": 10, "minVolume": 1.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_3.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_3.json index c781ed5fb1b..18168db370b 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_3.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_3.json @@ -41,18 +41,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 - }, "maxVolume": 10, "minVolume": 1.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_4.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_4.json index c781ed5fb1b..18168db370b 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_4.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_4.json @@ -41,18 +41,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 - }, "maxVolume": 10, "minVolume": 1.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_5.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_5.json index c26f9dd3367..c85651098be 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_5.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_5.json @@ -30,18 +30,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 - }, "maxVolume": 10, "minVolume": 1.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_6.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_6.json index ca296630314..ab677f49573 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_6.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p10/default/1_6.json @@ -38,18 +38,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 - }, "maxVolume": 10, "minVolume": 1.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/1_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/1_0.json index c9a72f83aca..f24a3792d77 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/1_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/1_0.json @@ -340,17 +340,19 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_1000ul/1", "opentrons/opentrons_flex_96_tiprack_200ul/1", "opentrons/opentrons_flex_96_tiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_0.json index 12736030d8e..4a0c70e6d0a 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_0.json @@ -340,15 +340,6 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -358,5 +349,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "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 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_3.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_3.json index fd4f29a83bb..55c25038afa 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_3.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p1000/default/3_3.json @@ -343,15 +343,6 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -361,5 +352,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "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 + } + } } 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 dcc9d533490..4d104ad2d47 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 @@ -343,15 +343,6 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -361,5 +352,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "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 + } + } } 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 83026842153..11becd4e743 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 @@ -223,15 +223,6 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -241,5 +232,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.1, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.17, + "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 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p20/default/2_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p20/default/2_0.json index bc9f6ec8de9..c5bf6a66ded 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p20/default/2_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p20/default/2_0.json @@ -290,15 +290,6 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 8.25, - "opentrons/opentrons_96_tiprack_20ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, - "opentrons/opentrons_96_tiprack_10ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, - "opentrons/geb_96_tiprack_10ul/1": 8.3 - }, "maxVolume": 20, "minVolume": 1.0, "defaultTipracks": [ @@ -307,5 +298,16 @@ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p20/default/2_1.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p20/default/2_1.json index aa83a2e5bda..826c245b8a3 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p20/default/2_1.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p20/default/2_1.json @@ -172,15 +172,6 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 8.25, - "opentrons/opentrons_96_tiprack_10ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, - "opentrons/geb_96_tiprack_10ul/1": 8.3, - "opentrons/opentrons_96_tiprack_20ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 - }, "maxVolume": 20, "minVolume": 1.0, "defaultTipracks": [ @@ -189,5 +180,16 @@ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_0.json index 0b997a3d6ca..61a5db14e5e 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_0.json @@ -52,16 +52,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 300, "minVolume": 30.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_3.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_3.json index a1a35a727e2..a5dda0f58bb 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_3.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_3.json @@ -52,16 +52,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 - }, "maxVolume": 300, "minVolume": 30.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_4.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_4.json index 0b997a3d6ca..61a5db14e5e 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_4.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_4.json @@ -52,16 +52,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 300, "minVolume": 30.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_5.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_5.json index a1a35a727e2..a5dda0f58bb 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_5.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/1_5.json @@ -52,16 +52,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 - }, "maxVolume": 300, "minVolume": 30.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/2_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/2_0.json index 161e8ef45dd..9b7bae09f76 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/2_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/2_0.json @@ -176,15 +176,17 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 8.2, - "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, - "opentrons/opentrons_96_tiprack_300ul/1": 8.2 - }, "maxVolume": 300, "minVolume": 20.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/2_1.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/2_1.json index 4fee623f602..3b8f0b1fb18 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/2_1.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p300/default/2_1.json @@ -178,15 +178,17 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 8.2, - "opentrons/opentrons_96_tiprack_300ul/1": 8.2, - "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 - }, "maxVolume": 300, "minVolume": 20.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_0.json index 3714335cbe8..018253e2aa2 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_0.json @@ -113,16 +113,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 50, "minVolume": 5.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_3.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_3.json index 3714335cbe8..018253e2aa2 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_3.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_3.json @@ -113,16 +113,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 50, "minVolume": 5.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_4.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_4.json index 0d02b181a20..1c128049acb 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_4.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_4.json @@ -113,16 +113,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 50, "minVolume": 5.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_5.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_5.json index 11b13cae38f..d81e15c0feb 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_5.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/1_5.json @@ -95,16 +95,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 50, "minVolume": 5.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json index ac12e0bea1e..ae16ef8ccb6 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json @@ -88,15 +88,17 @@ "defaultPushOutVolume": 2 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 - }, "maxVolume": 50, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_3.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_3.json index 38a4b01df80..7a299357e1c 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_3.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_3.json @@ -89,15 +89,17 @@ "defaultPushOutVolume": 2 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 - }, "maxVolume": 50, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } } 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 32131ee1982..4d69cf14ff6 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 @@ -89,15 +89,17 @@ "defaultPushOutVolume": 2 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 - }, "maxVolume": 50, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } } 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 ca2a48db274..ee52441eb85 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 @@ -81,15 +81,17 @@ "defaultPushOutVolume": 2 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 - }, "maxVolume": 50, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_0.json index 870ff5f594d..08ca230aa12 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_0.json @@ -83,15 +83,17 @@ "defaultPushOutVolume": 7 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 - }, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_3.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_3.json index cc629f28316..c845aa1f3d0 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_3.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_3.json @@ -79,15 +79,17 @@ "defaultPushOutVolume": 7 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 - }, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } } 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 0e9284b04e6..349b9f7bbb3 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 @@ -79,15 +79,17 @@ "defaultPushOutVolume": 7 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 - }, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } } 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 0e9284b04e6..349b9f7bbb3 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 @@ -79,15 +79,17 @@ "defaultPushOutVolume": 7 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 - }, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/1_0.json b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/1_0.json index 0f3f56f6494..b3995eeebbb 100644 --- a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/1_0.json +++ b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/1_0.json @@ -139,10 +139,10 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, @@ -162,25 +162,16 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "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, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -190,5 +181,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "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, + "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 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_0.json b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_0.json index 0f3f56f6494..b3995eeebbb 100644 --- a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_0.json +++ b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_0.json @@ -139,10 +139,10 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, @@ -162,25 +162,16 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "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, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -190,5 +181,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "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, + "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 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_3.json b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_3.json index 899d08aeaee..36a7ee32a35 100644 --- a/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_3.json +++ b/shared-data/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_3.json @@ -142,10 +142,10 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, @@ -165,25 +165,16 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "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, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -193,5 +184,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "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, + "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 + } + } } 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 899d08aeaee..36a7ee32a35 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 @@ -142,10 +142,10 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, @@ -165,25 +165,16 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "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, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -193,5 +184,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "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, + "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 + } + } } 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 1b9c88edf92..078263ecbbf 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 @@ -142,10 +142,10 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, @@ -165,25 +165,16 @@ [436.984286, 0.000322, 15.303634], [632.861429, 0.000208, 15.353582], [828.952857, 0.00013, 15.402544], - [976.118571, 0.000095, 15.431673], - [1005.275714, -0.000067, 15.589843], - [1024.768571, -0.000021, 15.543681], - [1049.145714, -0.000013, 15.535884] + [976.118571, 9.5e-5, 15.431673], + [1005.275714, -6.7e-5, 15.589843], + [1024.768571, -2.1e-5, 15.543681], + [1049.145714, -1.3e-5, 15.535884] ] } }, "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "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, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -193,5 +184,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "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, + "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 + } + } } 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 cd27abd81f0..278ee388499 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 @@ -175,17 +175,19 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_1000ul/1", "opentrons/opentrons_flex_96_tiprack_200ul/1", "opentrons/opentrons_flex_96_tiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "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 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_0.json index bcba2e228bb..d307a7a8bd7 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_0.json @@ -44,16 +44,18 @@ }, "maxVolume": 10, "minVolume": 1.0, - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 - }, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_3.json b/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_3.json index 7c94504d9bb..d307a7a8bd7 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_3.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_3.json @@ -42,18 +42,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 - }, "maxVolume": 10, "minVolume": 1.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_4.json b/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_4.json index caeac6e5709..d95e809716d 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_4.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_4.json @@ -39,18 +39,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 - }, "maxVolume": 10, "minVolume": 1.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_5.json b/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_5.json index 32bde854b93..360e1c2b849 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_5.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p10/default/1_5.json @@ -37,18 +37,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 - }, "maxVolume": 10, "minVolume": 1.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_0.json index 5edc982ed29..35c185edab8 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_0.json @@ -31,18 +31,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.95, - "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, - "opentrons/geb_96_tiprack_1000ul/1": 11.2, - "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.0 - }, "maxVolume": 1000, "minVolume": 100.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_1000ul/1", "opentrons/opentrons_96_filtertiprack_1000ul/1", "opentrons/geb_96_tiprack_1000ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.95, + "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, + "opentrons/geb_96_tiprack_1000ul/1": 11.2, + "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_3.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_3.json index 5edc982ed29..35c185edab8 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_3.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_3.json @@ -31,18 +31,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.95, - "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, - "opentrons/geb_96_tiprack_1000ul/1": 11.2, - "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.0 - }, "maxVolume": 1000, "minVolume": 100.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_1000ul/1", "opentrons/opentrons_96_filtertiprack_1000ul/1", "opentrons/geb_96_tiprack_1000ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.95, + "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, + "opentrons/geb_96_tiprack_1000ul/1": 11.2, + "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_4.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_4.json index 5edc982ed29..35c185edab8 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_4.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_4.json @@ -31,18 +31,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.95, - "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, - "opentrons/geb_96_tiprack_1000ul/1": 11.2, - "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.0 - }, "maxVolume": 1000, "minVolume": 100.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_1000ul/1", "opentrons/opentrons_96_filtertiprack_1000ul/1", "opentrons/geb_96_tiprack_1000ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.95, + "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, + "opentrons/geb_96_tiprack_1000ul/1": 11.2, + "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_5.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_5.json index 5edc982ed29..35c185edab8 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_5.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/1_5.json @@ -31,18 +31,20 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.95, - "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, - "opentrons/geb_96_tiprack_1000ul/1": 11.2, - "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.0 - }, "maxVolume": 1000, "minVolume": 100.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_1000ul/1", "opentrons/opentrons_96_filtertiprack_1000ul/1", "opentrons/geb_96_tiprack_1000ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.95, + "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, + "opentrons/geb_96_tiprack_1000ul/1": 11.2, + "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0.0 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_0.json index 8417c5a36dd..b4ec3129371 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_0.json @@ -89,17 +89,19 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 9.7, - "opentrons/opentrons_96_tiprack_1000ul/1": 11.5, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 11.5, - "opentrons/geb_96_tiprack_1000ul/1": 9.5 - }, "maxVolume": 1000, "minVolume": 100.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_1000ul/1", "opentrons/opentrons_96_filtertiprack_1000ul/1", "opentrons/geb_96_tiprack_1000ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 9.7, + "opentrons/opentrons_96_tiprack_1000ul/1": 11.5, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 11.5, + "opentrons/geb_96_tiprack_1000ul/1": 9.5 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_1.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_1.json index 46563177001..4bcc0f7f7c1 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_1.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_1.json @@ -92,17 +92,19 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 9.7, - "opentrons/opentrons_96_tiprack_1000ul/1": 11.5, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 11.5, - "opentrons/geb_96_tiprack_1000ul/1": 9.5 - }, "maxVolume": 1000, "minVolume": 100.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_1000ul/1", "opentrons/opentrons_96_filtertiprack_1000ul/1", "opentrons/geb_96_tiprack_1000ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 9.7, + "opentrons/opentrons_96_tiprack_1000ul/1": 11.5, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 11.5, + "opentrons/geb_96_tiprack_1000ul/1": 9.5 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_2.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_2.json index bfb9c6e83e8..fdb589c933f 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_2.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/2_2.json @@ -92,17 +92,19 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 9.7, - "opentrons/opentrons_96_tiprack_1000ul/1": 11.5, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 11.5, - "opentrons/geb_96_tiprack_1000ul/1": 9.5 - }, "maxVolume": 1000, "minVolume": 100.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_1000ul/1", "opentrons/opentrons_96_filtertiprack_1000ul/1", "opentrons/geb_96_tiprack_1000ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 9.7, + "opentrons/opentrons_96_tiprack_1000ul/1": 11.5, + "opentrons/opentrons_96_filtertiprack_1000ul/1": 11.5, + "opentrons/geb_96_tiprack_1000ul/1": 9.5 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_0.json index 476cb96cc69..e61789bf4e1 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_0.json @@ -340,15 +340,6 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -358,5 +349,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "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 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_3.json b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_3.json index e4e765c999c..6a29f93afe1 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_3.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p1000/default/3_3.json @@ -343,15 +343,6 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -361,5 +352,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "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 + } + } } 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 f48e41f37f2..c68ec36eedb 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 @@ -269,15 +269,6 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -287,5 +278,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "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 + } + } } 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 9c939ba9c7c..d07a90ac697 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 @@ -191,15 +191,6 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -209,5 +200,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "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 + } + } } 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 72187981c26..c9de2a951b2 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 @@ -191,15 +191,6 @@ "defaultPushOutVolume": 20 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "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 - }, "maxVolume": 1000, "minVolume": 5, "defaultTipracks": [ @@ -209,5 +200,16 @@ "opentrons/opentrons_flex_96_filtertiprack_1000ul/1", "opentrons/opentrons_flex_96_filtertiprack_200ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "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 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_0.json index a2b76f0cfb2..b06e3b7682b 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_0.json @@ -410,15 +410,6 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 8.25, - "opentrons/opentrons_96_tiprack_10ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, - "opentrons/geb_96_tiprack_10ul/1": 8.3, - "opentrons/opentrons_96_tiprack_20ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 - }, "maxVolume": 20, "minVolume": 1.0, "defaultTipracks": [ @@ -427,5 +418,16 @@ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_1.json b/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_1.json index e10b9ba735d..d4a7f36aa49 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_1.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_1.json @@ -234,20 +234,22 @@ }, "maxVolume": 20, "minVolume": 1.0, - "defaultTipOverlapDictionary": { - "default": 8.25, - "opentrons/opentrons_96_tiprack_10ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, - "opentrons/geb_96_tiprack_10ul/1": 8.3, - "opentrons/opentrons_96_tiprack_20ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 - }, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_20ul/1", "opentrons/opentrons_96_filtertiprack_20ul/1", "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_2.json b/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_2.json index eba2ed05cb1..9bae68e3b36 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_2.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p20/default/2_2.json @@ -292,15 +292,6 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 8.25, - "opentrons/opentrons_96_tiprack_10ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, - "opentrons/geb_96_tiprack_10ul/1": 8.3, - "opentrons/opentrons_96_tiprack_20ul/1": 8.25, - "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 - }, "maxVolume": 20, "minVolume": 1.0, "defaultTipracks": [ @@ -309,5 +300,16 @@ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", "opentrons/geb_96_tiprack_10ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 8.25, + "opentrons/opentrons_96_tiprack_10ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_10ul/1": 8.25, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 8.4, + "opentrons/geb_96_tiprack_10ul/1": 8.3, + "opentrons/opentrons_96_tiprack_20ul/1": 8.25, + "opentrons/opentrons_96_filtertiprack_20ul/1": 8.25 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_0.json index 68ba4f899f2..19ac0424c19 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_0.json @@ -84,16 +84,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 300, "minVolume": 30.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_3.json b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_3.json index 68ba4f899f2..19ac0424c19 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_3.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_3.json @@ -84,16 +84,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 300, "minVolume": 30.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_4.json b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_4.json index 68ba4f899f2..19ac0424c19 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_4.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_4.json @@ -84,16 +84,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 300, "minVolume": 30.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_5.json b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_5.json index 3c5222ee994..2cd22952f6b 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_5.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/1_5.json @@ -60,16 +60,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47 - }, "maxVolume": 300, "minVolume": 30.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/2_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/2_0.json index 0cb69ad19ed..b73dd0dba7a 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/2_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/2_0.json @@ -174,15 +174,17 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 8.2, - "opentrons/opentrons_96_tiprack_300ul/1": 8.2, - "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 - }, "maxVolume": 300, "minVolume": 20.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/2_1.json b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/2_1.json index 0478ea9c0e5..5c5244153f6 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/2_1.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p300/default/2_1.json @@ -176,15 +176,17 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 8.2, - "opentrons/opentrons_96_tiprack_300ul/1": 8.2, - "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 - }, "maxVolume": 300, "minVolume": 20.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 8.2, + "opentrons/opentrons_96_tiprack_300ul/1": 8.2, + "opentrons/opentrons_96_filtertiprack_200ul/1": 8.2 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_0.json index b2b8e2a3227..d3158dbd670 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_0.json @@ -104,16 +104,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 - }, "maxVolume": 50, "minVolume": 5.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_3.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_3.json index 483e4593741..55091aa9045 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_3.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_3.json @@ -113,16 +113,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 - }, "maxVolume": 50, "minVolume": 5.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_4.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_4.json index 483e4593741..55091aa9045 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_4.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_4.json @@ -113,16 +113,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 - }, "maxVolume": 50, "minVolume": 5.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_5.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_5.json index 55e70afee0a..fbc6c41571b 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_5.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/1_5.json @@ -89,16 +89,18 @@ "defaultPushOutVolume": 0 } }, - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 - }, "maxVolume": 50, "minVolume": 5.0, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_0.json index f5492d8809a..dc41dc80d05 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_0.json @@ -88,15 +88,17 @@ "defaultPushOutVolume": 2 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 50, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_3.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_3.json index a5d87c485ba..ff042100dcb 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_3.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/default/3_3.json @@ -89,15 +89,17 @@ "defaultPushOutVolume": 2 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 50, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } 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 464eb213798..38bf1c28e05 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 @@ -91,15 +91,17 @@ "defaultPushOutVolume": 2 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 50, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } 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 2fca659b070..f16747766d4 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 @@ -71,15 +71,17 @@ "defaultPushOutVolume": 2 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 50, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } 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 2fca659b070..f16747766d4 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 @@ -71,15 +71,17 @@ "defaultPushOutVolume": 2 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 50, "minVolume": 5, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_0.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_0.json index 2a292477578..a164bf8dad0 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_0.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_0.json @@ -68,15 +68,17 @@ "defaultPushOutVolume": 7 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } diff --git a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_3.json b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_3.json index deae3998fe9..d5e57b4f4b0 100644 --- a/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_3.json +++ b/shared-data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_3.json @@ -69,15 +69,17 @@ "defaultPushOutVolume": 7 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } 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 397dc63b230..6ed26283b69 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 @@ -69,15 +69,17 @@ "defaultPushOutVolume": 7 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } 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 e1b92133bd6..4e8cbabb40a 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 @@ -67,15 +67,17 @@ "defaultPushOutVolume": 7 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } 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 06b676081ca..6e8f4c9c70b 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 @@ -67,15 +67,17 @@ "defaultPushOutVolume": 7 } }, - "defaultTipOverlapDictionary": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 - }, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ] + ], + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.5 + } + } } diff --git a/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json b/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json index a4ba8e659f1..9acd92453f5 100644 --- a/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json +++ b/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json @@ -42,7 +42,7 @@ "minVolume", "defaultTipracks", "supportedTips", - "defaultTipOverlapDictionary" + "versionedTipOverlapDictionary" ], "additionalProperties": false, "properties": { @@ -106,15 +106,23 @@ } } }, - "defaultTipOverlapDictionary": { + "versionedTipOverlapDictionary": { "type": "object", - "description": "Map of tip overlap values with defaults", - "required": ["default"], - "$comment": "Other keys in here should be labware URIs", - "properties": { - "default": { "type": "number" } + "description": "Map by version of tip overlap values with defaults", + "required": ["v0"], + "patternProperties": { + "^v\\d+$": { + "type": "object", + "description": "Map of tip overlap values with defaults", + "required": ["default"], + "$comment": "Other keys in here should be labware URIs", + "properties": { + "default": { "type": "number" } + }, + "additionalProperties": { "type": "number" } + } }, - "additionalProperties": { "type": "number" } + "additionalProperties": false }, "maxVolume": { "$ref": "#/definitions/positiveNumber" }, "minVolume": { "$ref": "#/definitions/positiveNumber" }, 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 a7b43663884..093cbc7ac77 100644 --- a/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py +++ b/shared-data/python/opentrons_shared_data/pipette/pipette_definition.py @@ -6,6 +6,10 @@ from . import types as pip_types, dev_types +# The highest and lowest existing overlap version values. +TIP_OVERLAP_VERSION_MINIMUM = 0 +TIP_OVERLAP_VERSION_MAXIMUM = 0 + PLUNGER_CURRENT_MINIMUM = 0.1 PLUNGER_CURRENT_MAXIMUM = 1.5 @@ -436,10 +440,10 @@ class PipetteLiquidPropertiesDefinition(BaseModel): supported_tips: Dict[pip_types.PipetteTipType, SupportedTipsDefinition] = Field( ..., alias="supportedTips" ) - tip_overlap_dictionary: Dict[str, float] = Field( + versioned_tip_overlap_dictionary: Dict[str, Dict[str, float]] = Field( ..., - description="The default tip overlap associated with this tip type.", - alias="defaultTipOverlapDictionary", + description="A versioned map of tip overlaps for tips associated with this tip type.", + alias="versionedTipOverlapDictionary", ) max_volume: int = Field( ..., diff --git a/shared-data/python/tests/pipette/test_pipette_definition.py b/shared-data/python/tests/pipette/test_pipette_definition.py index 2b1f31e4fe4..9fd134ec059 100644 --- a/shared-data/python/tests/pipette/test_pipette_definition.py +++ b/shared-data/python/tests/pipette/test_pipette_definition.py @@ -45,7 +45,7 @@ def get_liquid_definition_for( } ) }, - "defaultTipOverlapDictionary": {}, + "versionedTipOverlapDictionary": {"v0": {}}, "maxVolume": 30, "minVolume": 1, "defaultTipracks": [], @@ -78,7 +78,7 @@ def get_liquid_definition_for( } ) }, - "defaultTipOverlapDictionary": {}, + "versionedTipOverlapDictionary": {"v0": {}}, "maxVolume": 100, "minVolume": 5, "defaultTipracks": [], diff --git a/shared-data/python/tests/pipette/test_validate_schema.py b/shared-data/python/tests/pipette/test_validate_schema.py index a7f6c6d0e06..333618ef225 100644 --- a/shared-data/python/tests/pipette/test_validate_schema.py +++ b/shared-data/python/tests/pipette/test_validate_schema.py @@ -1,7 +1,12 @@ import os +from typing import Iterator from opentrons_shared_data import get_shared_data_root -from opentrons_shared_data.pipette.pipette_definition import PipetteConfigurations +from opentrons_shared_data.pipette.pipette_definition import ( + PipetteConfigurations, + TIP_OVERLAP_VERSION_MINIMUM, + TIP_OVERLAP_VERSION_MAXIMUM, +) from opentrons_shared_data.pipette.load_data import load_definition from opentrons_shared_data.pipette.pipette_load_name_conversions import ( convert_pipette_model, @@ -9,62 +14,83 @@ from opentrons_shared_data.pipette.dev_types import PipetteModel -def test_check_all_models_are_valid() -> None: - paths_to_validate = ( - get_shared_data_root() / "pipette" / "definitions" / "2" / "general" - ) +def iterate_models() -> Iterator[PipetteModel]: + """Get an iterator of all pipette models.""" _channel_model_str = { "single_channel": "single", "ninety_six_channel": "96", "eight_channel": "multi", } - assert os.listdir(paths_to_validate), "You have a path wrong" - for channel_dir in os.listdir(paths_to_validate): - for model_dir in os.listdir(paths_to_validate / channel_dir): - for version_file in os.listdir(paths_to_validate / channel_dir / model_dir): - version_list = version_file.split(".json")[0].split("_") - built_model: PipetteModel = PipetteModel( - f"{model_dir}_{_channel_model_str[channel_dir]}_v{version_list[0]}.{version_list[1]}" - ) + defn_root = get_shared_data_root() / "pipette" / "definitions" / "2" / "liquid" + assert os.listdir(defn_root), "A path is wrong" + for channel_dir in defn_root.iterdir(): + for model_dir in channel_dir.iterdir(): + for lc_dir in model_dir.iterdir(): + for version_file in lc_dir.iterdir(): + version_list = version_file.stem.split("_") + yield PipetteModel( + f"{model_dir.stem}_{_channel_model_str[channel_dir.stem]}_v{version_list[0]}.{version_list[1]}" + ) + - model_version = convert_pipette_model(built_model) - loaded_model = load_definition( - model_version.pipette_type, - model_version.pipette_channels, - model_version.pipette_version, - ) +def test_check_all_models_are_valid() -> None: + """Make sure each model can be loaded.""" + for model in iterate_models(): + model_version = convert_pipette_model(model) + loaded_model = load_definition( + model_version.pipette_type, + model_version.pipette_channels, + model_version.pipette_version, + ) - assert isinstance(loaded_model, PipetteConfigurations) + assert isinstance(loaded_model, PipetteConfigurations) def test_pick_up_configs_tip_count_keys() -> None: """Verify that speed, distance & current of pickUpTipConfigurations have same tip count keys.""" - paths_to_validate = ( - get_shared_data_root() / "pipette" / "definitions" / "2" / "general" - ) - _channel_model_str = { - "single_channel": "single", - "ninety_six_channel": "96", - "eight_channel": "multi", - } - assert os.listdir(paths_to_validate), "You have a path wrong" - for channel_dir in os.listdir(paths_to_validate): - for model_dir in os.listdir(paths_to_validate / channel_dir): - for version_file in os.listdir(paths_to_validate / channel_dir / model_dir): - version_list = version_file.split(".json")[0].split("_") - built_model: PipetteModel = PipetteModel( - f"{model_dir}_{_channel_model_str[channel_dir]}_v{version_list[0]}.{version_list[1]}" - ) - model_version = convert_pipette_model(built_model) - loaded_model = load_definition( - model_version.pipette_type, - model_version.pipette_channels, - model_version.pipette_version, - ) - pick_up_tip_configs = loaded_model.pick_up_tip_configurations.press_fit + for model in iterate_models(): + model_version = convert_pipette_model(model) + loaded_model = load_definition( + model_version.pipette_type, + model_version.pipette_channels, + model_version.pipette_version, + ) + pick_up_tip_configs = loaded_model.pick_up_tip_configurations.press_fit + assert ( + pick_up_tip_configs.distance_by_tip_count.keys() + == pick_up_tip_configs.speed_by_tip_count.keys() + == pick_up_tip_configs.current_by_tip_count.keys() + ) + + +def test_tip_overlap_version_extrema_cover_definitions() -> None: + """Check that tip overlap versions are up to date.""" + found_max = False + for model in iterate_models(): + model_version = convert_pipette_model(model) + loaded_model = load_definition( + model_version.pipette_type, + model_version.pipette_channels, + model_version.pipette_version, + ) + for lc_name, lc_value in loaded_model.liquid_properties.items(): + found_min = False + for version in lc_value.versioned_tip_overlap_dictionary.keys(): + version_number = int(version[1:]) + assert ( + version_number >= TIP_OVERLAP_VERSION_MINIMUM + ), f"{model} / {lc_name} has tip overlap version {version} (below min)" assert ( - pick_up_tip_configs.distance_by_tip_count.keys() - == pick_up_tip_configs.speed_by_tip_count.keys() - == pick_up_tip_configs.current_by_tip_count.keys() - ) + version_number <= TIP_OVERLAP_VERSION_MAXIMUM + ), f"{model} / {lc_name} has tip overlap version {version} (above max)" + if version_number == TIP_OVERLAP_VERSION_MINIMUM: + found_min = True + if version_number == TIP_OVERLAP_VERSION_MAXIMUM: + found_max = True + assert ( + found_min + ), f"{model} / {lc_name} has no entry for minimum tip overlap version {TIP_OVERLAP_VERSION_MINIMUM}" + assert ( + found_max + ), f"No tip overlap data for version {TIP_OVERLAP_VERSION_MAXIMUM} found" diff --git a/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap b/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap index 57b519dba68..6fb985f6e08 100644 --- a/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap +++ b/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap @@ -9128,15 +9128,6 @@ exports[`snapshot tests > makeContext 1`] = ` "liquids": { "default": { "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", - "defaultTipOverlapDictionary": { - "default": 10.5, - "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, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - }, "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_1000ul/1", "opentrons/opentrons_flex_96_tiprack_200ul/1", @@ -9657,6 +9648,17 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, + "versionedTipOverlapDictionary": { + "v0": { + "default": 10.5, + "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, + "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, + "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, + }, + }, }, }, "model": "p1000", @@ -11706,13 +11708,6 @@ exports[`snapshot tests > makeContext 1`] = ` "liquids": { "default": { "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", @@ -11815,6 +11810,15 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, }, }, "model": "p10", @@ -13170,13 +13174,6 @@ exports[`snapshot tests > makeContext 1`] = ` "liquids": { "default": { "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", - "defaultTipOverlapDictionary": { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_10ul/1", "opentrons/opentrons_96_filtertiprack_10ul/1", @@ -13284,6 +13281,15 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, + "versionedTipOverlapDictionary": { + "v0": { + "default": 3.29, + "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, + "opentrons/geb_96_tiprack_10ul/1": 6.2, + "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, + "opentrons/opentrons_96_tiprack_10ul/1": 3.29, + }, + }, }, }, "model": "p10", @@ -14525,12 +14531,6 @@ exports[`snapshot tests > makeContext 1`] = ` "liquids": { "default": { "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1", @@ -14637,6 +14637,14 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, }, }, "model": "p300", @@ -15986,12 +15994,6 @@ exports[`snapshot tests > makeContext 1`] = ` "liquids": { "default": { "$otSharedSchema": "#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json", - "defaultTipOverlapDictionary": { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, "defaultTipracks": [ "opentrons/opentrons_96_tiprack_300ul/1", "opentrons/opentrons_96_filtertiprack_200ul/1", @@ -16206,6 +16208,14 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, + "versionedTipOverlapDictionary": { + "v0": { + "default": 7.47, + "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, + "opentrons/opentrons_96_tiprack_300ul/1": 7.47, + "opentrons/tipone_96_tiprack_200ul/1": 6.1, + }, + }, }, }, "model": "p300", From 085c140a58a6e05a1e7cebad7bd8c817926e5796 Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Tue, 4 Jun 2024 16:10:25 -0400 Subject: [PATCH 3/7] chore(api): depend on packaging (#15300) We recently added an explicit runtime dependency on packaging but didn't add it to our deps. Add it now. Picked 22.0 as the version to depend on because it introduced type stubs. Closes RDEVOPS-98 --- api/Pipfile | 1 + api/Pipfile.lock | 361 ++++++------------ api/setup.py | 1 + .../hardware_control/modules/mod_abc.py | 9 +- 4 files changed, 135 insertions(+), 237 deletions(-) diff --git a/api/Pipfile b/api/Pipfile index 7be11b82934..c59151f98e6 100755 --- a/api/Pipfile +++ b/api/Pipfile @@ -11,6 +11,7 @@ opentrons-shared-data = { editable = true, path = "../shared-data/python" } opentrons = { editable = true, path = "." } opentrons-hardware = { editable = true, path = "./../hardware", extras=["FLEX"] } numpy = "==1.22.3" +packaging = "==21.3" [dev-packages] # atomicwrites and colorama are pytest dependencies on windows, diff --git a/api/Pipfile.lock b/api/Pipfile.lock index 94643ce22a7..3687d72d921 100644 --- a/api/Pipfile.lock +++ b/api/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "a531665bfd7452ea19565ee95137118966532a8ab5475b7d5ee086ada333e627" + "sha256": "e1976802bb86d5fd07ba0b89826c63033785fb7d3a45bebcf638cd3555bdc1ec" }, "pipfile-spec": 6, "requires": {}, @@ -48,11 +48,11 @@ }, "exceptiongroup": { "hashes": [ - "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14", - "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68" + "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad", + "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16" ], "markers": "python_version < '3.11'", - "version": "==1.2.0" + "version": "==1.2.1" }, "idna": { "hashes": [ @@ -162,7 +162,7 @@ }, "opentrons": { "editable": true, - "markers": "python_version >= '3.8'", + "markers": "python_version >= '3.10'", "path": "." }, "opentrons-hardware": { @@ -174,16 +174,17 @@ }, "opentrons-shared-data": { "editable": true, - "markers": "python_version >= '3.8'", + "markers": "python_version >= '3.10'", "path": "../shared-data/python" }, "packaging": { "hashes": [ - "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", - "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" + "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", + "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" ], - "markers": "python_version >= '3.7'", - "version": "==24.0" + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==21.3" }, "pydantic": { "hashes": [ @@ -228,6 +229,14 @@ "markers": "python_version >= '3.7'", "version": "==1.10.12" }, + "pyparsing": { + "hashes": [ + "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad", + "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742" + ], + "markers": "python_full_version >= '3.6.8'", + "version": "==3.1.2" + }, "pyrsistent": { "hashes": [ "sha256:0724c506cd8b63c69c7f883cc233aac948c1ea946ea95996ad8b1380c25e1d3f", @@ -278,15 +287,16 @@ "sha256:6ad50f4613289f3c4d276b6d2ac8901d776dcb929994cce93f55a69e858c595f", "sha256:7eea9b81b0ff908000a825db024313f622895bd578e8a17433e0474cd7d2da83" ], + "markers": "python_version >= '3.7'", "version": "==4.2.2" }, "setuptools": { "hashes": [ - "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987", - "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32" + "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4", + "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0" ], "markers": "python_version >= '3.8'", - "version": "==69.5.1" + "version": "==70.0.0" }, "sniffio": { "hashes": [ @@ -298,11 +308,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0", - "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a" + "sha256:6024b58b69089e5a89c347397254e35f1bf02a907728ec7fee9bf0fe837d203a", + "sha256:915f5e35ff76f56588223f15fdd5938f9a1cf9195c0de25130c627e4d597f6d1" ], "markers": "python_version >= '3.8'", - "version": "==4.11.0" + "version": "==4.12.1" }, "wrapt": { "hashes": [ @@ -408,19 +418,19 @@ }, "babel": { "hashes": [ - "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363", - "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287" + "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb", + "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413" ], - "markers": "python_version >= '3.7'", - "version": "==2.14.0" + "markers": "python_version >= '3.8'", + "version": "==2.15.0" }, "backports.tarfile": { "hashes": [ - "sha256:2688f159c21afd56a07b75f01306f9f52c79aebcc5f4a117fb8fbb4445352c75", - "sha256:bcd36290d9684beb524d3fe74f4a2db056824c47746583f090b8e55daf0776e4" + "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", + "sha256:d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991" ], "markers": "python_version < '3.12'", - "version": "==1.0.0" + "version": "==1.2.0" }, "black": { "hashes": [ @@ -454,69 +464,11 @@ }, "certifi": { "hashes": [ - "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", - "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" + "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516", + "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56" ], "markers": "python_version >= '3.6'", - "version": "==2024.2.2" - }, - "cffi": { - "hashes": [ - "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc", - "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a", - "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417", - "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab", - "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520", - "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36", - "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743", - "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8", - "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed", - "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684", - "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56", - "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324", - "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d", - "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235", - "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e", - "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088", - "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000", - "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7", - "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e", - "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673", - "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c", - "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe", - "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2", - "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098", - "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8", - "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a", - "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0", - "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b", - "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896", - "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e", - "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9", - "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2", - "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b", - "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6", - "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404", - "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f", - "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0", - "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4", - "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc", - "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936", - "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba", - "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872", - "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb", - "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614", - "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1", - "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d", - "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969", - "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b", - "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4", - "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627", - "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", - "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" - ], - "markers": "platform_python_implementation != 'PyPy'", - "version": "==1.16.0" + "version": "==2024.6.2" }, "charset-normalizer": { "hashes": [ @@ -742,44 +694,6 @@ "markers": "python_version >= '3.8'", "version": "==7.4.1" }, - "cryptography": { - "hashes": [ - "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee", - "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576", - "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d", - "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30", - "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413", - "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb", - "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da", - "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4", - "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd", - "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc", - "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8", - "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1", - "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc", - "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e", - "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8", - "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940", - "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400", - "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7", - "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16", - "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278", - "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74", - "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec", - "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1", - "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2", - "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c", - "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922", - "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a", - "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6", - "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1", - "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e", - "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac", - "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7" - ], - "markers": "python_version >= '3.7'", - "version": "==42.0.5" - }, "cycler": { "hashes": [ "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", @@ -807,11 +721,11 @@ }, "exceptiongroup": { "hashes": [ - "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14", - "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68" + "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad", + "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16" ], "markers": "python_version < '3.11'", - "version": "==1.2.0" + "version": "==1.2.1" }, "execnet": { "hashes": [ @@ -859,51 +773,51 @@ }, "fonttools": { "hashes": [ - "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636", - "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce", - "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f", - "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1", - "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc", - "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f", - "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e", - "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716", - "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15", - "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77", - "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034", - "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba", - "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7", - "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55", - "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a", - "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0", - "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b", - "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671", - "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a", - "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039", - "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74", - "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836", - "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2", - "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308", - "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2", - "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5", - "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1", - "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438", - "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74", - "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f", - "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097", - "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e", - "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037", - "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1", - "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051", - "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b", - "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed", - "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68", - "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14", - "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5", - "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e", - "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936" + "sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d", + "sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64", + "sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2", + "sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4", + "sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6", + "sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b", + "sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f", + "sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380", + "sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e", + "sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749", + "sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20", + "sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0", + "sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4", + "sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5", + "sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206", + "sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9", + "sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac", + "sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1", + "sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce", + "sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4", + "sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12", + "sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca", + "sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d", + "sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068", + "sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796", + "sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec", + "sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea", + "sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f", + "sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005", + "sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2", + "sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06", + "sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109", + "sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002", + "sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9", + "sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a", + "sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68", + "sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6", + "sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161", + "sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd", + "sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d", + "sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee", + "sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af" ], "markers": "python_version >= '3.8'", - "version": "==4.51.0" + "version": "==4.53.0" }, "gprof2dot": { "hashes": [ @@ -972,19 +886,11 @@ }, "jaraco.functools": { "hashes": [ - "sha256:c279cb24c93d694ef7270f970d499cab4d3813f4e08273f95398651a634f0925", - "sha256:daf276ddf234bea897ef14f43c4e1bf9eefeac7b7a82a4dd69228ac20acff68d" + "sha256:3b24ccb921d6b593bdceb56ce14799204f473976e2a9d4b15b04d0f2c2326664", + "sha256:d33fa765374c0611b52f8b3a795f8900869aa88c84769d4d1746cd68fb28c3e8" ], "markers": "python_version >= '3.8'", - "version": "==4.0.0" - }, - "jeepney": { - "hashes": [ - "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", - "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755" - ], - "markers": "sys_platform == 'linux'", - "version": "==0.8.0" + "version": "==4.0.1" }, "jinja2": { "hashes": [ @@ -1006,11 +912,11 @@ }, "keyring": { "hashes": [ - "sha256:26fc12e6a329d61d24aa47b22a7c5c3f35753df7d8f2860973cf94f4e1fb3427", - "sha256:7230ea690525133f6ad536a9b5def74a4bd52642abe594761028fc044d7c7893" + "sha256:2458681cdefc0dbc0b7eb6cf75d0b98e59f9ad9b2d4edd319d18f68bdca95e50", + "sha256:daaffd42dbda25ddafb1ad5fec4024e5bbcfe424597ca1ca452b299861e49f1b" ], "markers": "python_version >= '3.8'", - "version": "==25.1.0" + "version": "==25.2.1" }, "kiwisolver": { "hashes": [ @@ -1362,16 +1268,17 @@ }, "opentrons-shared-data": { "editable": true, - "markers": "python_version >= '3.8'", + "markers": "python_version >= '3.10'", "path": "../shared-data/python" }, "packaging": { "hashes": [ - "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", - "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" + "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", + "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" ], - "markers": "python_version >= '3.7'", - "version": "==24.0" + "index": "pypi", + "markers": "python_version >= '3.6'", + "version": "==21.3" }, "pathspec": { "hashes": [ @@ -1462,27 +1369,27 @@ }, "pkginfo": { "hashes": [ - "sha256:5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", - "sha256:889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097" + "sha256:6d4998d1cd42c297af72cc0eab5f5bab1d356fb8a55b828fa914173f8bc1ba05", + "sha256:dba885aa82e31e80d615119874384923f4e011c2a39b0c4b7104359e36cb7087" ], - "markers": "python_version >= '3.6'", - "version": "==1.10.0" + "markers": "python_version >= '3.8'", + "version": "==1.11.0" }, "platformdirs": { "hashes": [ - "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", - "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" + "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee", + "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3" ], "markers": "python_version >= '3.8'", - "version": "==4.2.0" + "version": "==4.2.2" }, "pluggy": { "hashes": [ - "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981", - "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be" + "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", + "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" ], "markers": "python_version >= '3.8'", - "version": "==1.4.0" + "version": "==1.5.0" }, "py": { "hashes": [ @@ -1500,14 +1407,6 @@ "markers": "python_version >= '3.8'", "version": "==2.11.1" }, - "pycparser": { - "hashes": [ - "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", - "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc" - ], - "markers": "python_version >= '3.8'", - "version": "==2.22" - }, "pydantic": { "hashes": [ "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303", @@ -1569,11 +1468,11 @@ }, "pygments": { "hashes": [ - "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", - "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" + "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", + "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a" ], - "markers": "python_version >= '3.7'", - "version": "==2.17.2" + "markers": "python_version >= '3.8'", + "version": "==2.18.0" }, "pyparsing": { "hashes": [ @@ -1632,12 +1531,12 @@ }, "pytest-asyncio": { "hashes": [ - "sha256:68516fdd1018ac57b846c9846b954f0393b26f094764a28c955eabb0536a4e8a", - "sha256:ffe523a89c1c222598c76856e76852b787504ddb72dd5d9b6617ffa8aa2cde5f" + "sha256:009b48127fbe44518a547bddd25611551b0e43ccdbf1e67d12479f569832c20b", + "sha256:5f5c72948f4c49e7db4f29f2521d4031f1c27f86e57b046126654083d4770268" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==0.23.6" + "version": "==0.23.7" }, "pytest-cov": { "hashes": [ @@ -1688,7 +1587,7 @@ "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==2.9.0.post0" }, "readme-renderer": { @@ -1701,11 +1600,11 @@ }, "requests": { "hashes": [ - "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", - "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" ], - "markers": "python_version >= '3.7'", - "version": "==2.31.0" + "markers": "python_version >= '3.8'", + "version": "==2.32.3" }, "requests-toolbelt": { "hashes": [ @@ -1731,20 +1630,12 @@ "markers": "python_full_version >= '3.7.0'", "version": "==13.7.1" }, - "secretstorage": { - "hashes": [ - "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", - "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99" - ], - "markers": "sys_platform == 'linux'", - "version": "==3.3.3" - }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==1.16.0" }, "snowballstemmer": { @@ -1878,12 +1769,12 @@ }, "types-mock": { "hashes": [ - "sha256:0769cb376dfc75b45215619f17a9fd6333d771cc29ce4a38937f060b1e45530f", - "sha256:7472797986d83016f96fde7f73577d129b0cd8a8d0b783487a7be330d57ba431" + "sha256:5281a645d72e827d70043e3cc144fe33b1c003db084f789dc203aa90e812a5a4", + "sha256:d586a01d39ad919d3ddcd73de6cde73ca7f3c69707219f722d1b8d7733641ad7" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==5.1.0.20240311" + "version": "==5.1.0.20240425" }, "types-setuptools": { "hashes": [ @@ -1895,11 +1786,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0", - "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a" + "sha256:6024b58b69089e5a89c347397254e35f1bf02a907728ec7fee9bf0fe837d203a", + "sha256:915f5e35ff76f56588223f15fdd5938f9a1cf9195c0de25130c627e4d597f6d1" ], "markers": "python_version >= '3.8'", - "version": "==4.11.0" + "version": "==4.12.1" }, "urllib3": { "hashes": [ @@ -1920,11 +1811,11 @@ }, "zipp": { "hashes": [ - "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b", - "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715" + "sha256:2828e64edb5386ea6a52e7ba7cdb17bb30a73a858f5eb6eb93d8d36f5ea26091", + "sha256:35427f6d5594f4acf82d25541438348c26736fa9b3afa2754bcd63cdb99d8e8f" ], "markers": "python_version >= '3.8'", - "version": "==3.18.1" + "version": "==3.19.1" } } } diff --git a/api/setup.py b/api/setup.py index 1811b6b4e2d..2e1fa5380f8 100755 --- a/api/setup.py +++ b/api/setup.py @@ -66,6 +66,7 @@ def get_version(): "typing-extensions>=4.0.0,<5", "click>=8.0.0,<9", 'importlib-metadata >= 1.0 ; python_version < "3.8"', + "packaging>=21.0", ] EXTRAS = { diff --git a/api/src/opentrons/hardware_control/modules/mod_abc.py b/api/src/opentrons/hardware_control/modules/mod_abc.py index 9d5527991f6..b41315e6815 100644 --- a/api/src/opentrons/hardware_control/modules/mod_abc.py +++ b/api/src/opentrons/hardware_control/modules/mod_abc.py @@ -2,7 +2,7 @@ import asyncio import logging import re -from typing import ClassVar, Mapping, Optional, TypeVar +from typing import ClassVar, Mapping, Optional, TypeVar, cast from packaging.version import InvalidVersion, parse, Version from opentrons.config import IS_ROBOT, ROBOT_FIRMWARE_DIR from opentrons.drivers.rpi_drivers.types import USBPort @@ -18,9 +18,14 @@ def parse_fw_version(version: str) -> Version: try: device_version = parse(version) + # This is a patch for older versions of packaging - they would try and parse old + # kidns of versions and return a LegacyVersion object. We can't check for that + # explicitly because they removed it in modern versions of packaging. + if not isinstance(device_version, Version): + raise InvalidVersion() except InvalidVersion: device_version = parse("v0.0.0") - return device_version + return cast(Version, device_version) class AbstractModule(abc.ABC): From 1754667f0fe9a4be684eb2c19bcd95666683b691 Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Wed, 5 Jun 2024 15:15:19 -0400 Subject: [PATCH 4/7] 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 From 1ea906e90649e326d86d2563e6f04f561cad0b5f Mon Sep 17 00:00:00 2001 From: Ed Cormany Date: Tue, 11 Jun 2024 17:12:51 -0400 Subject: [PATCH 5/7] chore(release): 7.3.1 release notes (#15380) # Overview Notes for tip overlap in 7.3.1. Also called out the known issue with robots not becoming immediately available after a run. # Risk assessment zero --- api/release-notes.md | 10 ++++++++++ app-shell/build/release-notes.md | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/api/release-notes.md b/api/release-notes.md index 737b4063c9c..4ba3074bf31 100644 --- a/api/release-notes.md +++ b/api/release-notes.md @@ -6,6 +6,16 @@ log][]. For a list of currently known issues, please see the [Opentrons issue tr --- +## Opentrons Robot Software Changes in 7.3.1 + +Welcome to the v7.3.1 release of the Opentrons robot software! + +### Improved Features + +- Updated values for how much a tip overlaps with the pipette nozzle when the pipette picks up tips, in order to make protocols more reliable. These new values only apply to JSON protocols and Python protocols specifying API version 2.19. + +--- + ## Opentrons Robot Software Changes in 7.3.0 Welcome to the v7.3.0 release of the Opentrons robot software! diff --git a/app-shell/build/release-notes.md b/app-shell/build/release-notes.md index 78aa19b0142..eadc8b068b2 100644 --- a/app-shell/build/release-notes.md +++ b/app-shell/build/release-notes.md @@ -6,6 +6,18 @@ log][]. For a list of currently known issues, please see the [Opentrons issue tr --- +## Opentrons App Changes in 7.3.1 + +Welcome to the v7.3.1 release of the Opentrons App! + +There are no changes to the Opentrons App in v7.3.1, but it is required for updating the robot software to improve some features. + +### Known Issue + +- Robots that have completed a run won't appear as available until you clear the run completion notification. This appears as a banner on the protocol run screen in the app, or as a splash screen on the Flex touchscreen. + +--- + ## Opentrons App Changes in 7.3.0 Welcome to the v7.3.0 release of the Opentrons App! This release adds support for Python protocols with runtime parameters, letting you change the behavior of a protocol each time you run it. From 5625799da0181b78156b453a4a5b0a37211ecd7c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 17:05:07 -0400 Subject: [PATCH 6/7] fix(app-testing): snapshot failure capture (#15520) This PR is an automated snapshot update request. Please review the changes and merge if they are acceptable or find you bug and fix it. Co-authored-by: sfoster1 --- ...0_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures].json | 3 ++- ...[OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume].json | 6 ++++-- ...][OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes].json | 6 ++++-- ...179bb][OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3].json | 6 ++++-- ..._P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction].json | 3 ++- ...P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment].json | 6 ++++-- ...000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4].json | 6 ++++-- ..._16_None_None_HS_HeaterShakerConflictWithTrashBin2].json | 2 +- ...t[2b7fcb5b23][Flex_S_v2_18_P1000_96_TipTrackingBug].json | 3 ++- ...96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement].json | 3 ++- ...19f1f][OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3].json | 6 ++++-- ...][OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes].json | 6 ++++-- ...6_P300S_None_verifyNoFloatingPointErrorInPipetting].json | 3 ++- ...ex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol].json | 3 ++- ...S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction].json | 3 ++- ..._16_None_None_HS_HeaterShakerConflictWithTrashBin1].json | 2 +- ..._16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume].json | 6 ++++-- ...e702c][OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3].json | 6 ++++-- ...9][Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2].json | 6 ++++-- ...1000_96_TC_PartialTipPickupThermocyclerLidConflict].json | 3 ++- ...0][Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn].json | 3 ++- ...Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin].json | 3 ++- ...1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures].json | 3 ++- ..._v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json | 3 ++- ...16_P1000_96_TC_pipetteCollisionWithThermocyclerLid].json | 3 ++- ...X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip].json | 3 ++- ...[Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight].json | 3 ++- ..._S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules].json | 3 ++- ...4f0c9][OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3].json | 6 ++++-- ...2][Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle].json | 5 +++-- ..._16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict].json | 2 +- ...v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction].json | 3 ++- ...15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x].json | 6 ++++-- ...fddcd7d][Flex_X_v2_16_P1000_96_DropTipsWithNoTrash].json | 3 ++- ...f73b][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke].json | 3 ++- ...000_96_TC_pipetteCollisionWithThermocyclerLidClips].json | 3 ++- ...v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1].json | 3 ++- ...][OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes].json | 6 ++++-- 38 files changed, 100 insertions(+), 52 deletions(-) diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0190369ce5][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0190369ce5][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures].json index b112640529e..8ebc6de2c19 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0190369ce5][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0190369ce5][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures].json @@ -8847,7 +8847,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0256665840][OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0256665840][OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume].json index 6f83a5d6911..550231278e3 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0256665840][OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0256665840][OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume].json @@ -2315,7 +2315,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -2325,7 +2326,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p20_single_gen2" + "pipetteName": "p20_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[041ad55e7b][OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[041ad55e7b][OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes].json index ad7ef1e580a..0cab55a47e3 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[041ad55e7b][OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[041ad55e7b][OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes].json @@ -2351,7 +2351,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -2361,7 +2362,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p20_single_gen2" + "pipetteName": "p20_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0c4ae179bb][OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0c4ae179bb][OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3].json index 9d93af638b5..dbaf1c41736 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0c4ae179bb][OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0c4ae179bb][OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3].json @@ -2351,7 +2351,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -2361,7 +2362,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p20_single_gen2" + "pipetteName": "p20_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[10d250f82a][Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[10d250f82a][Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction].json index 7d0523b90af..64bd55e8c97 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[10d250f82a][Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[10d250f82a][Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction].json @@ -13209,7 +13209,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[12a2a22254][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[12a2a22254][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment].json index f4ddc666273..f10838363e2 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[12a2a22254][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[12a2a22254][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment].json @@ -9417,7 +9417,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_multi_flex" + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -9427,7 +9428,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p50_multi_flex" + "pipetteName": "p50_multi_flex", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[1960aa7a4c][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[1960aa7a4c][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4].json index 9badefd198a..6ae00202e99 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[1960aa7a4c][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[1960aa7a4c][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4].json @@ -11684,7 +11684,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_multi_flex" + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -11694,7 +11695,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p50_multi_flex" + "pipetteName": "p50_multi_flex", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[19ffa9c839][OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[19ffa9c839][OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2].json index 67c126eb182..bb04c84b2a3 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[19ffa9c839][OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[19ffa9c839][OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2].json @@ -479,7 +479,7 @@ "errorInfo": { "args": "('trash bin in slot 12 prevents heaterShakerModuleV1 from using slot 9.',)", "class": "DeckConflictError", - "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line 147, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line 1, in \n\n File \"OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2.py\", line 11, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line 383, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/protocol_context.py\", line 826, in load_module\n module_core = self._core.load_module(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/protocol.py\", line 433, in load_module\n deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/deck_conflict.py\", line 203, in check\n wrapped_deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/motion_planning/deck_conflict.py\", line 210, in check\n raise DeckConflictError(\n" + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line 147, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line 1, in \n\n File \"OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2.py\", line 11, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line 383, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/protocol_context.py\", line 826, in load_module\n module_core = self._core.load_module(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/protocol.py\", line 432, in load_module\n deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/deck_conflict.py\", line 203, in check\n wrapped_deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/motion_planning/deck_conflict.py\", line 210, in check\n raise DeckConflictError(\n" }, "errorType": "PythonException", "isDefined": false, diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2b7fcb5b23][Flex_S_v2_18_P1000_96_TipTrackingBug].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2b7fcb5b23][Flex_S_v2_18_P1000_96_TipTrackingBug].json index 1bf2709512b..189757769bb 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2b7fcb5b23][Flex_S_v2_18_P1000_96_TipTrackingBug].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2b7fcb5b23][Flex_S_v2_18_P1000_96_TipTrackingBug].json @@ -2316,7 +2316,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2eaf98de6a][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2eaf98de6a][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement].json index ac3a688dc21..b33503630d4 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2eaf98de6a][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[2eaf98de6a][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement].json @@ -9365,7 +9365,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4a82419f1f][OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4a82419f1f][OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3].json index 633f10e7f49..4928e443759 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4a82419f1f][OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4a82419f1f][OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3].json @@ -2351,7 +2351,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -2361,7 +2362,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p20_single_gen2" + "pipetteName": "p20_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b17883f74][OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b17883f74][OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes].json index c12f413c65d..a9183d0ebff 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b17883f74][OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4b17883f74][OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes].json @@ -2351,7 +2351,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -2361,7 +2362,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p20_single_gen2" + "pipetteName": "p20_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[54f717cfd1][OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[54f717cfd1][OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting].json index a6b245696cc..b501a5cb5ae 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[54f717cfd1][OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[54f717cfd1][OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting].json @@ -1519,7 +1519,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_single_gen2" + "pipetteName": "p300_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5e958b7c98][Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5e958b7c98][Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol].json index af0765765b9..60b6ef99119 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5e958b7c98][Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[5e958b7c98][Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol].json @@ -1167,7 +1167,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "status": "failed" } diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e34343cfc][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e34343cfc][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction].json index ce09c27f618..e614b9523bb 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e34343cfc][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e34343cfc][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction].json @@ -13128,7 +13128,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e5128f107][OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e5128f107][OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1].json index 1286cf1703d..52e04c9a33b 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e5128f107][OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e5128f107][OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1].json @@ -479,7 +479,7 @@ "errorInfo": { "args": "('trash bin in slot 12 prevents heaterShakerModuleV1 from using slot 11.',)", "class": "DeckConflictError", - "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line 147, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line 1, in \n\n File \"OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1.py\", line 11, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line 383, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/protocol_context.py\", line 826, in load_module\n module_core = self._core.load_module(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/protocol.py\", line 433, in load_module\n deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/deck_conflict.py\", line 203, in check\n wrapped_deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/motion_planning/deck_conflict.py\", line 223, in check\n raise DeckConflictError(\n" + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line 147, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line 1, in \n\n File \"OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1.py\", line 11, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line 383, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/protocol_context.py\", line 826, in load_module\n module_core = self._core.load_module(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/protocol.py\", line 432, in load_module\n deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/deck_conflict.py\", line 203, in check\n wrapped_deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/motion_planning/deck_conflict.py\", line 223, in check\n raise DeckConflictError(\n" }, "errorType": "PythonException", "isDefined": false, diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6f84e60cb0][OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6f84e60cb0][OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume].json index 8c4000cba0d..614d40ded7a 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6f84e60cb0][OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6f84e60cb0][OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume].json @@ -2315,7 +2315,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -2325,7 +2326,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p20_single_gen2" + "pipetteName": "p20_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8860ee702c][OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8860ee702c][OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3].json index 113c414c7f0..7a5facf8aed 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8860ee702c][OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8860ee702c][OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3].json @@ -2351,7 +2351,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -2361,7 +2362,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p20_single_gen2" + "pipetteName": "p20_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[88a20da279][Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[88a20da279][Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2].json index 8d71efedc42..6dd9f8a87ae 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[88a20da279][Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[88a20da279][Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2].json @@ -17857,7 +17857,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p50_multi_flex" + "pipetteName": "p50_multi_flex", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -17867,7 +17868,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p1000_multi_flex" + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[89a8226c4e][Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[89a8226c4e][Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict].json index 5de0808774f..bb0c5a2f96f 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[89a8226c4e][Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[89a8226c4e][Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict].json @@ -1164,7 +1164,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8fcfd2ced0][Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8fcfd2ced0][Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn].json index 4a0d3446b37..396969bf7ad 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8fcfd2ced0][Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[8fcfd2ced0][Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn].json @@ -1164,7 +1164,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[9e56ee92f6][Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[9e56ee92f6][Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin].json index 7c092c597df..3c5adf8c662 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[9e56ee92f6][Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[9e56ee92f6][Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin].json @@ -1225,7 +1225,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a08c261369][Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a08c261369][Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures].json index 99425f44a58..9e6012c9462 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a08c261369][Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a08c261369][Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures].json @@ -7074,7 +7074,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ac886d7768][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ac886d7768][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json index 1c5a668499c..2f023c9a10d 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ac886d7768][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[ac886d7768][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3].json @@ -10969,7 +10969,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[adc0621263][Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[adc0621263][Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid].json index 1a9d05d4e35..0e7581dc507 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[adc0621263][Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[adc0621263][Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid].json @@ -2377,7 +2377,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b0ce7dde5d][Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b0ce7dde5d][Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip].json index aef520d2b0d..7a0b43d3d7a 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b0ce7dde5d][Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b0ce7dde5d][Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip].json @@ -1164,7 +1164,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[baf79d9b4a][Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[baf79d9b4a][Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight].json index 3924c7dea03..fd41b1d2efe 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[baf79d9b4a][Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[baf79d9b4a][Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight].json @@ -10686,7 +10686,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p1000_single_flex" + "pipetteName": "p1000_single_flex", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c745e5824a][Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c745e5824a][Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules].json index 754cb2ab367..1bda2054c5d 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c745e5824a][Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[c745e5824a][Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules].json @@ -9378,7 +9378,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d48bc4f0c9][OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d48bc4f0c9][OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3].json index 5760c7a671e..6c9c0208a1d 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d48bc4f0c9][OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d48bc4f0c9][OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3].json @@ -2351,7 +2351,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -2361,7 +2362,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p20_single_gen2" + "pipetteName": "p20_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d8cb88b3b2][Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d8cb88b3b2][Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle].json index e1e464c2f59..6430b932d73 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d8cb88b3b2][Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[d8cb88b3b2][Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle].json @@ -1164,7 +1164,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -3513,7 +3514,7 @@ "errorInfo": { "args": "('Nozzle layout configuration of style SINGLE is currently unsupported.',)", "class": "ValueError", - "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line 147, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line 1, in \n\n File \"Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle.py\", line 16, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line 383, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line 1988, in configure_nozzle_layout\n raise ValueError(\n" + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line 147, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line 1, in \n\n File \"Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle.py\", line 16, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line 383, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/instrument_context.py\", line 2006, in configure_nozzle_layout\n raise ValueError(\n" }, "errorType": "PythonException", "isDefined": false, diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[de4249ddfb][Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[de4249ddfb][Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict].json index 5db5cf0dd3d..b9f59d0a6b4 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[de4249ddfb][Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[de4249ddfb][Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict].json @@ -138,7 +138,7 @@ "errorInfo": { "args": "('thermocyclerModuleV2 in slot B1 prevents trash bin from using slot A1.',)", "class": "DeckConflictError", - "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line 147, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line 1, in \n\n File \"Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict.py\", line 13, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line 383, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/protocol_context.py\", line 530, in load_trash_bin\n trash_bin = self._core.load_trash_bin(slot_name, addressable_area_name)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/protocol.py\", line 541, in load_trash_bin\n self._add_disposal_location_to_engine(trash_bin)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/protocol.py\", line 150, in _add_disposal_location_to_engine\n deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/deck_conflict.py\", line 203, in check\n wrapped_deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/motion_planning/deck_conflict.py\", line 210, in check\n raise DeckConflictError(\n" + "traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/execution/execute_python.py\", line 147, in exec_run\n exec(\"run(__context)\", new_globs)\n\n File \"\", line 1, in \n\n File \"Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict.py\", line 13, in run\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/api_support/util.py\", line 383, in _check_version_wrapper\n return decorated_obj(*args, **kwargs)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/protocol_context.py\", line 530, in load_trash_bin\n trash_bin = self._core.load_trash_bin(slot_name, addressable_area_name)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/protocol.py\", line 546, in load_trash_bin\n self._add_disposal_location_to_engine(trash_bin)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/protocol.py\", line 149, in _add_disposal_location_to_engine\n deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_api/core/engine/deck_conflict.py\", line 203, in check\n wrapped_deck_conflict.check(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/motion_planning/deck_conflict.py\", line 210, in check\n raise DeckConflictError(\n" }, "errorType": "PythonException", "isDefined": false, diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[de842b7217][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[de842b7217][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction].json index a498ae85a38..64607e7dfc6 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[de842b7217][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[de842b7217][Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction].json @@ -13333,7 +13333,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e907467039][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e907467039][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x].json index a81496615b7..cd13180ed50 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e907467039][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e907467039][Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x].json @@ -8147,7 +8147,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p1000_multi_flex" + "pipetteName": "p1000_multi_flex", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -8157,7 +8158,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p50_multi_flex" + "pipetteName": "p50_multi_flex", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f0efddcd7d][Flex_X_v2_16_P1000_96_DropTipsWithNoTrash].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f0efddcd7d][Flex_X_v2_16_P1000_96_DropTipsWithNoTrash].json index 8ea159c4166..f26f6dfc20b 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f0efddcd7d][Flex_X_v2_16_P1000_96_DropTipsWithNoTrash].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f0efddcd7d][Flex_X_v2_16_P1000_96_DropTipsWithNoTrash].json @@ -1312,7 +1312,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f51172f73b][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f51172f73b][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke].json index 0a302979bc3..7814a25c912 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f51172f73b][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f51172f73b][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke].json @@ -8180,7 +8180,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f7085d7134][Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f7085d7134][Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips].json index 6489882dd9d..85e25d6cc25 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f7085d7134][Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f7085d7134][Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips].json @@ -1273,7 +1273,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f834b97da1][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f834b97da1][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1].json index 323a36e0c93..e117b9d0f7c 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f834b97da1][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f834b97da1][Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1].json @@ -11151,7 +11151,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p1000_96" + "pipetteName": "p1000_96", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[fc60ef9cbd][OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[fc60ef9cbd][OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes].json index a1502bbbb59..fbe6fcfb75d 100644 --- a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[fc60ef9cbd][OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes].json +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[fc60ef9cbd][OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes].json @@ -2351,7 +2351,8 @@ "notes": [], "params": { "mount": "left", - "pipetteName": "p300_multi_gen2" + "pipetteName": "p300_multi_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" @@ -2361,7 +2362,8 @@ "notes": [], "params": { "mount": "right", - "pipetteName": "p20_single_gen2" + "pipetteName": "p20_single_gen2", + "tipOverlapNotAfterVersion": "v0" }, "result": {}, "status": "succeeded" From 0f8b3cd002e1ef67a0186fb719a7421a133f6f0f Mon Sep 17 00:00:00 2001 From: Seth Foster Date: Tue, 25 Jun 2024 17:19:22 -0400 Subject: [PATCH 7/7] chore: js tests --- .../__snapshots__/pipettes.test.ts.snap | 5968 ----------------- shared-data/js/__tests__/pipettes.test.ts | 44 - shared-data/js/types.ts | 1 - .../liquid/eight_channel/p50/default/3_0.json | 9 +- .../2/pipetteLiquidPropertiesSchema.json | 21 +- .../fixtureGeneration.test.ts.snap | 45 - 6 files changed, 2 insertions(+), 6086 deletions(-) diff --git a/shared-data/js/__tests__/__snapshots__/pipettes.test.ts.snap b/shared-data/js/__tests__/__snapshots__/pipettes.test.ts.snap index d014e5b4385..d3c22f665f9 100644 --- a/shared-data/js/__tests__/__snapshots__/pipettes.test.ts.snap +++ b/shared-data/js/__tests__/__snapshots__/pipettes.test.ts.snap @@ -5967,5971 +5967,3 @@ exports[`pipette data accessors > getPipetteNameSpecs > name p1000_single snapsh }, } `; - -exports[`pipette data accessors getPipetteModelSpecs model p10_multi_v1 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": -1, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 10, - "minVolume": 1, - "model": "p10_multi_v1", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p10_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.4, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 33, - }, - "tipOverlap": Object { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 1.893415617, - -1.1069, - 3.042593193, - ], - Array [ - 2.497849452, - -0.1888, - 1.30410391, - ], - Array [ - 5.649462387, - -0.0081, - 0.8528667891, - ], - Array [ - 12.74444519, - -0.0018, - 0.8170558891, - ], - ], - "dispense": Array [ - Array [ - 12.74444519, - 0, - 0.8058688085, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 1.438649211, - 0.01931415115, - 0.691538317, - ], - Array [ - 1.836824579, - 0.03868955123, - 0.6636639129, - ], - Array [ - 2.960052684, - 0.00470371018, - 0.7260899411, - ], - Array [ - 4.487508789, - 0.005175245625, - 0.7246941713, - ], - Array [ - 10.59661421, - 0.001470408978, - 0.7413196584, - ], - ], - "dispense": Array [ - Array [ - 12.74444519, - 0, - 0.8058688085, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p10_multi_v1.3 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": -2.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -5.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 10, - "minVolume": 1, - "model": "p10_multi_v1.3", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p10_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.4, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 33, - }, - "tipOverlap": Object { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 1.893415617, - -1.1069, - 3.042593193, - ], - Array [ - 2.497849452, - -0.1888, - 1.30410391, - ], - Array [ - 5.649462387, - -0.0081, - 0.8528667891, - ], - Array [ - 12.74444519, - -0.0018, - 0.8170558891, - ], - ], - "dispense": Array [ - Array [ - 12.74444519, - 0, - 0.8058688085, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 1.438649211, - 0.01931415115, - 0.691538317, - ], - Array [ - 1.836824579, - 0.03868955123, - 0.6636639129, - ], - Array [ - 2.960052684, - 0.00470371018, - 0.7260899411, - ], - Array [ - 4.487508789, - 0.005175245625, - 0.7246941713, - ], - Array [ - 10.59661421, - 0.001470408978, - 0.7413196584, - ], - ], - "dispense": Array [ - Array [ - 12.74444519, - 0, - 0.8058688085, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p10_multi_v1.4 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": -1, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 10, - "minVolume": 1, - "model": "p10_multi_v1.4", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p10_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.4, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 33, - }, - "tipOverlap": Object { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 1.893415617, - -1.1069, - 3.042593193, - ], - Array [ - 2.497849452, - -0.1888, - 1.30410391, - ], - Array [ - 5.649462387, - -0.0081, - 0.8528667891, - ], - Array [ - 12.74444519, - -0.0018, - 0.8170558891, - ], - ], - "dispense": Array [ - Array [ - 12.74444519, - 0, - 0.8058688085, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 1.438649211, - 0.01931415115, - 0.691538317, - ], - Array [ - 1.836824579, - 0.03868955123, - 0.6636639129, - ], - Array [ - 2.960052684, - 0.00470371018, - 0.7260899411, - ], - Array [ - 4.487508789, - 0.005175245625, - 0.7246941713, - ], - Array [ - 10.59661421, - 0.001470408978, - 0.7413196584, - ], - ], - "dispense": Array [ - Array [ - 12.74444519, - 0, - 0.8058688085, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p10_multi_v1.5 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": -1, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 10, - "minVolume": 1, - "model": "p10_multi_v1.5", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p10_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.55, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 3, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - "doubleDropTip", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 33, - }, - "tipOverlap": Object { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 1.774444444, - -0.1917910448, - 1.2026, - ], - Array [ - 2.151481481, - -0.0706286837, - 1.0125, - ], - Array [ - 2.898518519, - -0.04343083788, - 0.954, - ], - Array [ - 6.373333333, - -0.00905990194, - 0.8544, - ], - Array [ - 11.00259259, - -0.002325900358, - 0.8115, - ], - ], - "dispense": Array [ - Array [ - 12.74444519, - 0, - 0.8058688085, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p10_single_v1 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": -1, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 10, - "minVolume": 1, - "model": "p10_single_v1", - "modelOffset": Array [ - 0, - 0, - -13, - ], - "name": "p10_single", - "nozzleOffset": Array [ - 0, - 0, - 12, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 33, - }, - "tipOverlap": Object { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 1.8263, - -0.0958, - 1.088, - ], - Array [ - 2.5222, - -0.104, - 1.1031, - ], - Array [ - 3.2354, - -0.0447, - 0.9536, - ], - Array [ - 3.9984, - -0.012, - 0.8477, - ], - Array [ - 12.5135, - -0.0021, - 0.8079, - ], - ], - "dispense": Array [ - Array [ - 12.5135, - 0, - 0.7945, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 1.438649211, - 0.01931415115, - 0.691538317, - ], - Array [ - 1.836824579, - 0.03868955123, - 0.6636639129, - ], - Array [ - 2.960052684, - 0.00470371018, - 0.7260899411, - ], - Array [ - 4.487508789, - 0.005175245625, - 0.7246941713, - ], - Array [ - 10.59661421, - 0.001470408978, - 0.7413196584, - ], - ], - "dispense": Array [ - Array [ - 12.5135, - 0, - 0.7945, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p10_single_v1.3 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": -2.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -6, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 10, - "minVolume": 1, - "model": "p10_single_v1.3", - "modelOffset": Array [ - 0, - 0, - -13, - ], - "name": "p10_single", - "nozzleOffset": Array [ - 0, - 0, - 12, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 33, - }, - "tipOverlap": Object { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 1.8263, - -0.0958, - 1.088, - ], - Array [ - 2.5222, - -0.104, - 1.1031, - ], - Array [ - 3.2354, - -0.0447, - 0.9536, - ], - Array [ - 3.9984, - -0.012, - 0.8477, - ], - Array [ - 12.5135, - -0.0021, - 0.8079, - ], - ], - "dispense": Array [ - Array [ - 12.5135, - 0, - 0.7945, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 1.438649211, - 0.01931415115, - 0.691538317, - ], - Array [ - 1.836824579, - 0.03868955123, - 0.6636639129, - ], - Array [ - 2.960052684, - 0.00470371018, - 0.7260899411, - ], - Array [ - 4.487508789, - 0.005175245625, - 0.7246941713, - ], - Array [ - 10.59661421, - 0.001470408978, - 0.7413196584, - ], - ], - "dispense": Array [ - Array [ - 12.5135, - 0, - 0.7945, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p10_single_v1.4 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": -0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2.5, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -5.2, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 10, - "minVolume": 1, - "model": "p10_single_v1.4", - "modelOffset": Array [ - 0, - 0, - -13, - ], - "name": "p10_single", - "nozzleOffset": Array [ - 0, - 0, - 12, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 33, - }, - "tipOverlap": Object { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 1.8263, - -0.0958, - 1.088, - ], - Array [ - 2.5222, - -0.104, - 1.1031, - ], - Array [ - 3.2354, - -0.0447, - 0.9536, - ], - Array [ - 3.9984, - -0.012, - 0.8477, - ], - Array [ - 12.5135, - -0.0021, - 0.8079, - ], - ], - "dispense": Array [ - Array [ - 12.5135, - 0, - 0.7945, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 1.438649211, - 0.01931415115, - 0.691538317, - ], - Array [ - 1.836824579, - 0.03868955123, - 0.6636639129, - ], - Array [ - 2.960052684, - 0.00470371018, - 0.7260899411, - ], - Array [ - 4.487508789, - 0.005175245625, - 0.7246941713, - ], - Array [ - 10.59661421, - 0.001470408978, - 0.7413196584, - ], - ], - "dispense": Array [ - Array [ - 12.5135, - 0, - 0.7945, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p10_single_v1.5 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": -0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2.5, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -5.2, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 10, - "minVolume": 1, - "model": "p10_single_v1.5", - "modelOffset": Array [ - 0, - 0, - -13, - ], - "name": "p10_single", - "nozzleOffset": Array [ - 0, - 0, - 12, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 33, - }, - "tipOverlap": Object { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 1.553425807, - -0.03427618068, - 0.83, - ], - Array [ - 1.934976526, - -0.007134812859, - 0.7878, - ], - Array [ - 2.689843897, - -0.007238069768, - 0.788, - ], - Array [ - 6.161165493, - 0.0004663523509, - 0.7673, - ], - Array [ - 10.7963169, - 0.0002200157553, - 0.7688, - ], - ], - "dispense": Array [ - Array [ - 12.5135, - 0, - 0.7945, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p50_multi_v1 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 2, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2.5, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 25, - "valuesByApiLevel": Object { - "2.0": 25, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 50, - "valuesByApiLevel": Object { - "2.0": 50, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P50 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -3.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 50, - "minVolume": 5, - "model": "p50_multi_v1", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p50_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.6, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 12.29687531, - -0.0049, - 3.134703694, - ], - Array [ - 50, - -0.0002, - 3.077116024, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 3.06368702, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 5.5768667, - 0.076142366, - 2.363797525, - ], - Array [ - 7.0999333, - 0.0338396036, - 2.599714392, - ], - Array [ - 11.5943825, - 0.0130432679, - 2.747366988, - ], - Array [ - 17.6461325, - 0.007010609879, - 2.817311933, - ], - Array [ - 50, - 0.002620115513, - 2.894787178, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 3.06368702, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p50_multi_v1.3 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 25, - "valuesByApiLevel": Object { - "2.0": 25, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 50, - "valuesByApiLevel": Object { - "2.0": 50, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P50 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 50, - "minVolume": 5, - "model": "p50_multi_v1.3", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p50_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.6, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 12.29687531, - -0.0049, - 3.134703694, - ], - Array [ - 50, - -0.0002, - 3.077116024, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 3.06368702, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 5.5768667, - 0.076142366, - 2.363797525, - ], - Array [ - 7.0999333, - 0.0338396036, - 2.599714392, - ], - Array [ - 11.5943825, - 0.0130432679, - 2.747366988, - ], - Array [ - 17.6461325, - 0.007010609879, - 2.817311933, - ], - Array [ - 50, - 0.002620115513, - 2.894787178, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 3.06368702, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p50_multi_v1.4 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 25, - "valuesByApiLevel": Object { - "2.0": 25, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 50, - "valuesByApiLevel": Object { - "2.0": 50, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P50 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 50, - "minVolume": 5, - "model": "p50_multi_v1.4", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p50_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.6, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 12.29687531, - -0.0049, - 3.134703694, - ], - Array [ - 50, - -0.0002, - 3.077116024, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 3.06368702, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 5.5768667, - 0.076142366, - 2.363797525, - ], - Array [ - 7.0999333, - 0.0338396036, - 2.599714392, - ], - Array [ - 11.5943825, - 0.0130432679, - 2.747366988, - ], - Array [ - 17.6461325, - 0.007010609879, - 2.817311933, - ], - Array [ - 50, - 0.002620115513, - 2.894787178, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 3.06368702, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p50_multi_v1.5 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 25, - "valuesByApiLevel": Object { - "2.0": 25, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 50, - "valuesByApiLevel": Object { - "2.0": 50, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P50 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 50, - "minVolume": 5, - "model": "p50_multi_v1.5", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p50_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.8, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 3, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - "doubleDropTip", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 6.190392157, - -0.01092438778, - 3.1628, - ], - Array [ - 7.639705882, - -0.02712575255, - 3.2631, - ], - Array [ - 10.69666667, - 0.0001007939816, - 3.0551, - ], - Array [ - 24.49343137, - 0.0003978066956, - 3.0519, - ], - Array [ - 50, - -0.00001501363238, - 3.062, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 3.06368702, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p50_single_v1 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 2, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2.01, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 25, - "valuesByApiLevel": Object { - "2.0": 25, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 50, - "valuesByApiLevel": Object { - "2.0": 50, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P50 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 50, - "minVolume": 5, - "model": "p50_single_v1", - "modelOffset": Array [ - 0, - 0, - 0, - ], - "name": "p50_single", - "nozzleOffset": Array [ - 0, - 0, - 25, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 11.79687499, - -0.0098, - 3.064988953, - ], - Array [ - 50, - -0.0004, - 2.954068131, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 2.931601299, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 5.538952382, - 0.04994568474, - 2.492829422, - ], - Array [ - 7.050333334, - 0.0335171238, - 2.583826438, - ], - Array [ - 11.5397619, - 0.01443549911, - 2.718358253, - ], - Array [ - 17.55071427, - 0.006684226987, - 2.807806088, - ], - Array [ - 50, - 0.001789563193, - 2.893710933, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 2.931601299, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p50_single_v1.3 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 25, - "valuesByApiLevel": Object { - "2.0": 25, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 50, - "valuesByApiLevel": Object { - "2.0": 50, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P50 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -6, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 50, - "minVolume": 5, - "model": "p50_single_v1.3", - "modelOffset": Array [ - 0, - 0, - 0, - ], - "name": "p50_single", - "nozzleOffset": Array [ - 0, - 0, - 25, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 11.79687499, - -0.0098, - 3.064988953, - ], - Array [ - 50, - -0.0004, - 2.954068131, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 2.931601299, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 5.538952382, - 0.04994568474, - 2.492829422, - ], - Array [ - 7.050333334, - 0.0335171238, - 2.583826438, - ], - Array [ - 11.5397619, - 0.01443549911, - 2.718358253, - ], - Array [ - 17.55071427, - 0.006684226987, - 2.807806088, - ], - Array [ - 50, - 0.001789563193, - 2.893710933, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 2.931601299, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p50_single_v1.4 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 25, - "valuesByApiLevel": Object { - "2.0": 25, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 50, - "valuesByApiLevel": Object { - "2.0": 50, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P50 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 50, - "minVolume": 5, - "model": "p50_single_v1.4", - "modelOffset": Array [ - 0, - 0, - 0, - ], - "name": "p50_single", - "nozzleOffset": Array [ - 0, - 0, - 25, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 11.79687499, - -0.0098, - 3.064988953, - ], - Array [ - 50, - -0.0004, - 2.954068131, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 2.931601299, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 5.538952382, - 0.04994568474, - 2.492829422, - ], - Array [ - 7.050333334, - 0.0335171238, - 2.583826438, - ], - Array [ - 11.5397619, - 0.01443549911, - 2.718358253, - ], - Array [ - 17.55071427, - 0.006684226987, - 2.807806088, - ], - Array [ - 50, - 0.001789563193, - 2.893710933, - ], - ], - "dispense": Array [ - Array [ - 50, - 0, - 2.931601299, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p300_multi_v1 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 3, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 3.5, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -2, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 300, - "minVolume": 30, - "model": "p300_multi_v1", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p300_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.6, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 57.25698968, - 0.017, - 18.132, - ], - Array [ - 309.2612689, - 0.001, - 19.03, - ], - ], - "dispense": Array [ - Array [ - 309.2612689, - 0, - 19.29389273, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p300_multi_v1.3 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 1.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 3.5, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -3.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 300, - "minVolume": 30, - "model": "p300_multi_v1.3", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p300_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.6, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 57.25698968, - 0.017, - 18.132, - ], - Array [ - 309.2612689, - 0.001, - 19.03, - ], - ], - "dispense": Array [ - Array [ - 309.2612689, - 0, - 19.29389273, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p300_multi_v1.4 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 1.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 3.5, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -3.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm", - "value": 5, - }, - "maxVolume": 300, - "minVolume": 30, - "model": "p300_multi_v1.4", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p300_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.6, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 57.25698968, - 0.017, - 18.132, - ], - Array [ - 309.2612689, - 0.001, - 19.03, - ], - ], - "dispense": Array [ - Array [ - 309.2612689, - 0, - 19.29389273, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p300_multi_v1.5 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 1.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 3.5, - }, - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 8-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -3.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm", - "value": 5, - }, - "maxVolume": 300, - "minVolume": 30, - "model": "p300_multi_v1.5", - "modelOffset": Array [ - 0, - 31.5, - -25.8, - ], - "name": "p300_multi", - "nozzleOffset": Array [ - 0, - 31.5, - 0.8, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.9, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 3, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "dropTipShake", - "doubleDropTip", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 57.25698968, - 0.017, - 18.132, - ], - Array [ - 309.2612689, - 0.001, - 19.03, - ], - ], - "dispense": Array [ - Array [ - 309.2612689, - 0, - 19.29389273, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p300_single_v1 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 1.5, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 300, - "minVolume": 30, - "model": "p300_single_v1", - "modelOffset": Array [ - 0, - 0, - 0, - ], - "name": "p300_single", - "nozzleOffset": Array [ - 0, - 0, - 25, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 36.19844973, - 0.043, - 16.548, - ], - Array [ - 54.98518519, - 0.012, - 17.658, - ], - Array [ - 73.90077516, - 0.008, - 17.902, - ], - Array [ - 111.8437953, - 0.004, - 18.153, - ], - Array [ - 302.3895337, - 0.001, - 18.23, - ], - ], - "dispense": Array [ - Array [ - 302.3895337, - 0, - 18.83156277, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 53.958, - 0.0252, - 16.6268, - ], - Array [ - 73.0217, - 0.0141, - 17.2234, - ], - Array [ - 82.6834, - 0.0123, - 17.3586, - ], - Array [ - 120.7877, - 0.0055, - 17.9214, - ], - Array [ - 197.3909, - 0.0028, - 18.2415, - ], - Array [ - 300, - 0.0014, - 18.5235, - ], - ], - "dispense": Array [ - Array [ - 302.3895337, - 0, - 18.83156277, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p300_single_v1.3 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": -1.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 1.5, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -5.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 300, - "minVolume": 30, - "model": "p300_single_v1.3", - "modelOffset": Array [ - 0, - 0, - 0, - ], - "name": "p300_single", - "nozzleOffset": Array [ - 0, - 0, - 25, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 36.19844973, - 0.043, - 16.548, - ], - Array [ - 54.98518519, - 0.012, - 17.658, - ], - Array [ - 73.90077516, - 0.008, - 17.902, - ], - Array [ - 111.8437953, - 0.004, - 18.153, - ], - Array [ - 302.3895337, - 0.001, - 18.23, - ], - ], - "dispense": Array [ - Array [ - 302.3895337, - 0, - 18.83156277, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 53.958, - 0.0252, - 16.6268, - ], - Array [ - 73.0217, - 0.0141, - 17.2234, - ], - Array [ - 82.6834, - 0.0123, - 17.3586, - ], - Array [ - 120.7877, - 0.0055, - 17.9214, - ], - Array [ - 197.3909, - 0.0028, - 18.2415, - ], - Array [ - 300, - 0.0014, - 18.5235, - ], - ], - "dispense": Array [ - Array [ - 302.3895337, - 0, - 18.83156277, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p300_single_v1.4 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 3, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 300, - "minVolume": 30, - "model": "p300_single_v1.4", - "modelOffset": Array [ - 0, - 0, - 0, - ], - "name": "p300_single", - "nozzleOffset": Array [ - 0, - 0, - 25, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 36.19844973, - 0.043, - 16.548, - ], - Array [ - 54.98518519, - 0.012, - 17.658, - ], - Array [ - 73.90077516, - 0.008, - 17.902, - ], - Array [ - 111.8437953, - 0.004, - 18.153, - ], - Array [ - 302.3895337, - 0.001, - 18.23, - ], - ], - "dispense": Array [ - Array [ - 302.3895337, - 0, - 18.83156277, - ], - ], - }, - Object { - "aspirate": Array [ - Array [ - 53.958, - 0.0252, - 16.6268, - ], - Array [ - 73.0217, - 0.0141, - 17.2234, - ], - Array [ - 82.6834, - 0.0123, - 17.3586, - ], - Array [ - 120.7877, - 0.0055, - 17.9214, - ], - Array [ - 197.3909, - 0.0028, - 18.2415, - ], - Array [ - 300, - 0.0014, - 18.5235, - ], - ], - "dispense": Array [ - Array [ - 302.3895337, - 0, - 18.83156277, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p300_single_v1.5 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 3, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4.5, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 300, - "minVolume": 30, - "model": "p300_single_v1.5", - "modelOffset": Array [ - 0, - 0, - 0, - ], - "name": "p300_single", - "nozzleOffset": Array [ - 0, - 0, - 25, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 10, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.3, - }, - "quirks": Array [ - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 51.7, - }, - "tipOverlap": Object { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 35.11266179, - 0.03721315938, - 16.2497, - ], - Array [ - 44.37338506, - 0.02084320206, - 16.8245, - ], - Array [ - 63.12001468, - 0.01519931266, - 17.0749, - ], - Array [ - 148.3020792, - 0.005910516464, - 17.6612, - ], - Array [ - 224.5387262, - 0.00227975152, - 18.1997, - ], - Array [ - 301.049323, - 0.001359578667, - 18.4063, - ], - ], - "dispense": Array [ - Array [ - 302.3895337, - 0, - 18.83156277, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p1000_single_v1 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 1, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 3, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 2000, - "min": 50, - "value": 500, - "valuesByApiLevel": Object { - "2.0": 500, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 2000, - "min": 50, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_1000ul/1", - "opentrons/opentrons_96_filtertiprack_1000ul/1", - "opentrons/geb_96_tiprack_1000ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P1000 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -2.2, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 1000, - "minVolume": 100, - "model": "p1000_single_v1", - "modelOffset": Array [ - 0, - 0, - 20, - ], - "name": "p1000_single", - "nozzleOffset": Array [ - 0, - 0, - 45, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 15, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "pickupTipShake", - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 76.7, - }, - "tipOverlap": Object { - "default": 7.95, - "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0, - "opentrons/geb_96_tiprack_1000ul/1": 11.2, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, - "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 148.9157, - 0.0213, - 56.3986, - ], - Array [ - 210.8237, - 0.0108, - 57.9568, - ], - Array [ - 241.2405, - 0.0025, - 59.717, - ], - Array [ - 365.2719, - 0.0046, - 59.2043, - ], - Array [ - 614.4871, - 0.0023, - 60.0431, - ], - Array [ - 1000, - 0.001, - 60.8209, - ], - ], - "dispense": Array [ - Array [ - 1000, - 0, - 61.3275, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p1000_single_v1.3 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2.5, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 2000, - "min": 50, - "value": 500, - "valuesByApiLevel": Object { - "2.0": 500, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 2000, - "min": 50, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_1000ul/1", - "opentrons/opentrons_96_filtertiprack_1000ul/1", - "opentrons/geb_96_tiprack_1000ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P1000 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.7, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 1000, - "minVolume": 100, - "model": "p1000_single_v1.3", - "modelOffset": Array [ - 0, - 0, - 20, - ], - "name": "p1000_single", - "nozzleOffset": Array [ - 0, - 0, - 45, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 15, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "pickupTipShake", - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 76.7, - }, - "tipOverlap": Object { - "default": 7.95, - "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0, - "opentrons/geb_96_tiprack_1000ul/1": 11.2, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, - "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 148.9157, - 0.0213, - 56.3986, - ], - Array [ - 210.8237, - 0.0108, - 57.9568, - ], - Array [ - 241.2405, - 0.0025, - 59.717, - ], - Array [ - 365.2719, - 0.0046, - 59.2043, - ], - Array [ - 614.4871, - 0.0023, - 60.0431, - ], - Array [ - 1000, - 0.001, - 60.8209, - ], - ], - "dispense": Array [ - Array [ - 1000, - 0, - 61.3275, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p1000_single_v1.4 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2.5, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 2000, - "min": 50, - "value": 500, - "valuesByApiLevel": Object { - "2.0": 500, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 2000, - "min": 50, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_1000ul/1", - "opentrons/opentrons_96_filtertiprack_1000ul/1", - "opentrons/geb_96_tiprack_1000ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P1000 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.7, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 1000, - "minVolume": 100, - "model": "p1000_single_v1.4", - "modelOffset": Array [ - 0, - 0, - 20, - ], - "name": "p1000_single", - "nozzleOffset": Array [ - 0, - 0, - 45, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.1, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 15, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "pickupTipShake", - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 76.7, - }, - "tipOverlap": Object { - "default": 7.95, - "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0, - "opentrons/geb_96_tiprack_1000ul/1": 11.2, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, - "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 148.9157, - 0.0213, - 56.3986, - ], - Array [ - 210.8237, - 0.0108, - 57.9568, - ], - Array [ - 241.2405, - 0.0025, - 59.717, - ], - Array [ - 365.2719, - 0.0046, - 59.2043, - ], - Array [ - 614.4871, - 0.0023, - 60.0431, - ], - Array [ - 1000, - 0.001, - 60.8209, - ], - ], - "dispense": Array [ - Array [ - 1000, - 0, - 61.3275, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteModelSpecs model p1000_single_v1.5 snapshot 1`] = ` -Object { - "blowout": Object { - "max": 10, - "min": -4, - "type": "float", - "units": "mm", - "value": 0.5, - }, - "bottom": Object { - "max": 19, - "min": -2, - "type": "float", - "units": "mm", - "value": 2.5, - }, - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 2000, - "min": 50, - "value": 500, - "valuesByApiLevel": Object { - "2.0": 500, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 2000, - "min": 50, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_1000ul/1", - "opentrons/opentrons_96_filtertiprack_1000ul/1", - "opentrons/geb_96_tiprack_1000ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P1000 Single-Channel GEN1", - "dropTip": Object { - "max": 2, - "min": -6, - "type": "float", - "units": "mm", - "value": -4, - }, - "dropTipCurrent": Object { - "max": 0.8, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.7, - }, - "dropTipSpeed": Object { - "max": 30, - "min": 0.001, - "type": "float", - "units": "mm/sec", - "value": 5, - }, - "maxVolume": 1000, - "minVolume": 100, - "model": "p1000_single_v1.5", - "modelOffset": Array [ - 0, - 0, - 20, - ], - "name": "p1000_single", - "nozzleOffset": Array [ - 0, - 0, - 45, - ], - "pickUpCurrent": Object { - "max": 2, - "min": 0.05, - "type": "float", - "units": "amps", - "value": 0.15, - }, - "pickUpDistance": Object { - "max": 30, - "min": 1, - "type": "float", - "units": "mm", - "value": 15, - }, - "pickUpIncrement": Object { - "max": 10, - "min": 0, - "type": "float", - "units": "mm", - "value": 1, - }, - "pickUpPresses": Object { - "max": 10, - "min": 0, - "type": "int", - "units": "presses", - "value": 3, - }, - "pickUpSpeed": Object { - "max": 100, - "min": 1, - "type": "float", - "units": "mm/s", - "value": 30, - }, - "plungerCurrent": Object { - "max": 0.5, - "min": 0.1, - "type": "float", - "units": "amps", - "value": 0.5, - }, - "quirks": Array [ - "pickupTipShake", - "dropTipShake", - ], - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, - "tipLength": Object { - "max": 100, - "min": 0, - "type": "float", - "units": "mm", - "value": 76.7, - }, - "tipOverlap": Object { - "default": 7.95, - "opentrons/eppendorf_96_tiprack_1000ul_eptips/1": 0, - "opentrons/geb_96_tiprack_1000ul/1": 11.2, - "opentrons/opentrons_96_filtertiprack_1000ul/1": 7.95, - "opentrons/opentrons_96_tiprack_1000ul/1": 7.95, - }, - "top": Object { - "max": 19.5, - "min": 5, - "type": "float", - "units": "mm", - "value": 19.5, - }, - "ulPerMm": Array [ - Object { - "aspirate": Array [ - Array [ - 148.9157, - 0.0213, - 56.3986, - ], - Array [ - 210.8237, - 0.0108, - 57.9568, - ], - Array [ - 241.2405, - 0.0025, - 59.717, - ], - Array [ - 365.2719, - 0.0046, - 59.2043, - ], - Array [ - 614.4871, - 0.0023, - 60.0431, - ], - Array [ - 1000, - 0.001, - 60.8209, - ], - ], - "dispense": Array [ - Array [ - 1000, - 0, - 61.3275, - ], - ], - }, - ], -} -`; - -exports[`pipette data accessors getPipetteNameSpecs name p10_multi snapshot 1`] = ` -Object { - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 8-Channel GEN1", - "maxVolume": 10, - "minVolume": 1, - "name": "p10_multi", - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, -} -`; - -exports[`pipette data accessors getPipetteNameSpecs name p10_single snapshot 1`] = ` -Object { - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 5, - "valuesByApiLevel": Object { - "2.0": 5, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 50, - "min": 0.001, - "value": 10, - "valuesByApiLevel": Object { - "2.0": 10, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_10ul/1", - "opentrons/opentrons_96_filtertiprack_10ul/1", - "opentrons/geb_96_tiprack_10ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P10 Single-Channel GEN1", - "maxVolume": 10, - "minVolume": 1, - "name": "p10_single", - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, -} -`; - -exports[`pipette data accessors getPipetteNameSpecs name p50_multi snapshot 1`] = ` -Object { - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 25, - "valuesByApiLevel": Object { - "2.0": 25, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 50, - "valuesByApiLevel": Object { - "2.0": 50, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P50 8-Channel GEN1", - "maxVolume": 50, - "minVolume": 5, - "name": "p50_multi", - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, -} -`; - -exports[`pipette data accessors getPipetteNameSpecs name p50_single snapshot 1`] = ` -Object { - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 25, - "valuesByApiLevel": Object { - "2.0": 25, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 100, - "min": 0.001, - "value": 50, - "valuesByApiLevel": Object { - "2.0": 50, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P50 Single-Channel GEN1", - "maxVolume": 50, - "minVolume": 5, - "name": "p50_single", - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, -} -`; - -exports[`pipette data accessors getPipetteNameSpecs name p300_multi snapshot 1`] = ` -Object { - "channels": 8, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 8-Channel GEN1", - "maxVolume": 300, - "minVolume": 30, - "name": "p300_multi", - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, -} -`; - -exports[`pipette data accessors getPipetteNameSpecs name p300_single snapshot 1`] = ` -Object { - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 150, - "valuesByApiLevel": Object { - "2.0": 150, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 600, - "min": 0.001, - "value": 300, - "valuesByApiLevel": Object { - "2.0": 300, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_300ul/1", - "opentrons/opentrons_96_filtertiprack_200ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P300 Single-Channel GEN1", - "maxVolume": 300, - "minVolume": 30, - "name": "p300_single", - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, -} -`; - -exports[`pipette data accessors getPipetteNameSpecs name p1000_single snapshot 1`] = ` -Object { - "channels": 1, - "defaultAspirateFlowRate": Object { - "max": 2000, - "min": 50, - "value": 500, - "valuesByApiLevel": Object { - "2.0": 500, - }, - }, - "defaultBlowOutFlowRate": Object { - "max": 1000, - "min": 5, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultDispenseFlowRate": Object { - "max": 2000, - "min": 50, - "value": 1000, - "valuesByApiLevel": Object { - "2.0": 1000, - }, - }, - "defaultTipracks": Array [ - "opentrons/opentrons_96_tiprack_1000ul/1", - "opentrons/opentrons_96_filtertiprack_1000ul/1", - "opentrons/geb_96_tiprack_1000ul/1", - ], - "displayCategory": "GEN1", - "displayName": "P1000 Single-Channel GEN1", - "maxVolume": 1000, - "minVolume": 100, - "name": "p1000_single", - "smoothieConfigs": Object { - "homePosition": 220, - "stepsPerMM": 768, - "travelDistance": 30, - }, -} -`; diff --git a/shared-data/js/__tests__/pipettes.test.ts b/shared-data/js/__tests__/pipettes.test.ts index 28e6b17968d..6dc9b36ec9c 100644 --- a/shared-data/js/__tests__/pipettes.test.ts +++ b/shared-data/js/__tests__/pipettes.test.ts @@ -82,26 +82,6 @@ describe('pipette data accessors', () => { default: { $otSharedSchema: '#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json', - versionedTipOverlapDictionary: { - v0: { - default: 10.5, - 'opentrons/opentrons_flex_96_tiprack_1000ul/1': 10.5, - 'opentrons/opentrons_flex_96_tiprack_200ul/1': 10.5, - 'opentrons/opentrons_flex_96_tiprack_50ul/1': 10.5, - '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, - }, - }, defaultTipracks: [ 'opentrons/opentrons_flex_96_tiprack_1000ul/1', 'opentrons/opentrons_flex_96_tiprack_200ul/1', @@ -181,18 +161,6 @@ describe('pipette data accessors', () => { const mockLiquidDefault = { $otSharedSchema: '#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json', - versionedTipOverlapDictionary: { - v0: { - default: 10.5, - [tiprackFilter50uL]: 10.5, - [tiprack50uL]: 10.5, - }, - v1: { - default: 10.5, - [tiprackFilter50uL]: 10.09, - [tiprack50uL]: 10.09, - }, - }, defaultTipracks: [tiprack50uL, tiprackFilter50uL], maxVolume: 50, minVolume: 5, @@ -236,18 +204,6 @@ describe('pipette data accessors', () => { } as PipetteV2LiquidSpecs const mockLiquidLowVolume = { $otSharedSchema: '#/pipette/schemas/2/pipetteLiquidPropertiesSchema.json', - versionedTipOverlapDictionary: { - v0: { - default: 10.5, - [tiprackFilter50uL]: 10.5, - [tiprack50uL]: 10.5, - }, - v1: { - default: 10.5, - [tiprackFilter50uL]: 10.09, - [tiprack50uL]: 10.09, - }, - }, defaultTipracks: [tiprack50uL, tiprackFilter50uL], maxVolume: 30, minVolume: 1, diff --git a/shared-data/js/types.ts b/shared-data/js/types.ts index 98e72ef1584..1583c5aa372 100644 --- a/shared-data/js/types.ts +++ b/shared-data/js/types.ts @@ -521,7 +521,6 @@ export interface SupportedTips { export interface PipetteV2LiquidSpecs { $otSharedSchema: string supportedTips: SupportedTips - versionedTipOverlapDictionary: Record> maxVolume: number minVolume: number defaultTipracks: string[] diff --git a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json index ae16ef8ccb6..5e80e7417ec 100644 --- a/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json +++ b/shared-data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json @@ -93,12 +93,5 @@ "defaultTipracks": [ "opentrons/opentrons_flex_96_tiprack_50ul/1", "opentrons/opentrons_flex_96_filtertiprack_50ul/1" - ], - "versionedTipOverlapDictionary": { - "v0": { - "default": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.05, - "opentrons/opentrons_flex_96_filtertiprack_50ul/1": 10.05 - } - } + ] } diff --git a/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json b/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json index 9acd92453f5..42842c4afb3 100644 --- a/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json +++ b/shared-data/pipette/schemas/2/pipetteLiquidPropertiesSchema.json @@ -41,8 +41,7 @@ "maxVolume", "minVolume", "defaultTipracks", - "supportedTips", - "versionedTipOverlapDictionary" + "supportedTips" ], "additionalProperties": false, "properties": { @@ -106,24 +105,6 @@ } } }, - "versionedTipOverlapDictionary": { - "type": "object", - "description": "Map by version of tip overlap values with defaults", - "required": ["v0"], - "patternProperties": { - "^v\\d+$": { - "type": "object", - "description": "Map of tip overlap values with defaults", - "required": ["default"], - "$comment": "Other keys in here should be labware URIs", - "properties": { - "default": { "type": "number" } - }, - "additionalProperties": { "type": "number" } - } - }, - "additionalProperties": false - }, "maxVolume": { "$ref": "#/definitions/positiveNumber" }, "minVolume": { "$ref": "#/definitions/positiveNumber" }, "defaultTipracks": { diff --git a/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap b/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap index d5a460676fb..93f545f568f 100644 --- a/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap +++ b/step-generation/src/__tests__/__snapshots__/fixtureGeneration.test.ts.snap @@ -9648,17 +9648,6 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, - "versionedTipOverlapDictionary": { - "v0": { - "default": 10.5, - "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, - "opentrons/opentrons_flex_96_tiprack_1000ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_200ul/1": 10.5, - "opentrons/opentrons_flex_96_tiprack_50ul/1": 10.5, - }, - }, }, }, "model": "p1000", @@ -12279,15 +12268,6 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, - "versionedTipOverlapDictionary": { - "v0": { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - }, }, }, "model": "p10", @@ -13925,15 +13905,6 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, - "versionedTipOverlapDictionary": { - "v0": { - "default": 3.29, - "opentrons/eppendorf_96_tiprack_10ul_eptips/1": 1, - "opentrons/geb_96_tiprack_10ul/1": 6.2, - "opentrons/opentrons_96_filtertiprack_10ul/1": 3.29, - "opentrons/opentrons_96_tiprack_10ul/1": 3.29, - }, - }, }, }, "model": "p10", @@ -15297,14 +15268,6 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, - "versionedTipOverlapDictionary": { - "v0": { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - }, }, }, "model": "p300", @@ -17034,14 +16997,6 @@ exports[`snapshot tests > makeContext 1`] = ` }, }, }, - "versionedTipOverlapDictionary": { - "v0": { - "default": 7.47, - "opentrons/opentrons_96_filtertiprack_200ul/1": 7.47, - "opentrons/opentrons_96_tiprack_300ul/1": 7.47, - "opentrons/tipone_96_tiprack_200ul/1": 6.1, - }, - }, }, }, "model": "p300",