Skip to content

Commit c431da3

Browse files
authored
fix(api): check for nozzle map configuration when executing complex commands (#15723)
Addresses RQA-2867 Allows source and destination to be passed any valid well while in a partial configuration.
1 parent b46305f commit c431da3

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

api/src/opentrons/protocols/advanced_control/transfers.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,16 @@
1616
from opentrons.protocol_api.labware import Labware, Well
1717
from opentrons import types
1818
from opentrons.protocols.api_support.types import APIVersion
19+
from opentrons.hardware_control.nozzle_manager import NozzleConfigurationType
1920

2021

2122
if TYPE_CHECKING:
2223
from opentrons.protocol_api import InstrumentContext
2324
from opentrons.protocols.execution.dev_types import Dictable
2425

26+
_PARTIAL_TIP_SUPPORT_ADDED = APIVersion(2, 18)
27+
"""The version after which partial tip support and nozzle maps were made available."""
28+
2529

2630
class MixStrategy(enum.Enum):
2731
BOTH = enum.auto()
@@ -409,7 +413,15 @@ def __init__(
409413
# then avoid iterating through its Wells.
410414
# ii. if using single channel pipettes, flatten a multi-dimensional
411415
# list of Wells into a 1 dimensional list of Wells
412-
if self._instr.channels > 1:
416+
pipette_configuration_type = NozzleConfigurationType.FULL
417+
if self._api_version >= _PARTIAL_TIP_SUPPORT_ADDED:
418+
pipette_configuration_type = (
419+
self._instr._core.get_nozzle_map().configuration
420+
)
421+
if (
422+
self._instr.channels > 1
423+
and pipette_configuration_type == NozzleConfigurationType.FULL
424+
):
413425
sources, dests = self._multichannel_transfer(sources, dests)
414426
else:
415427
if isinstance(sources, List) and isinstance(sources[0], List):

api/tests/opentrons/protocol_api_integration/test_pipette_movement_deck_conflicts.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def test_close_shave_deck_conflicts_for_96_ch_a12_column_configuration() -> None
124124
adapter="opentrons_flex_96_tiprack_adapter",
125125
)
126126
tiprack_8 = protocol_context.load_labware("opentrons_flex_96_tiprack_200ul", "B2")
127-
hs = protocol_context.load_module("heaterShakerModuleV1", "D1")
127+
hs = protocol_context.load_module("heaterShakerModuleV1", "C1")
128128
hs_adapter = hs.load_adapter("opentrons_96_deep_well_adapter")
129129
deepwell = hs_adapter.load_labware("nest_96_wellplate_2ml_deep")
130130
protocol_context.load_trash_bin("A3")

0 commit comments

Comments
 (0)