Skip to content

Commit

Permalink
fix(api): check for nozzle map configuration when executing complex c…
Browse files Browse the repository at this point in the history
…ommands (#15723)

Addresses RQA-2867
Allows source and destination to be passed any valid well while in a partial configuration.
  • Loading branch information
CaseyBatten authored Jul 19, 2024
1 parent b46305f commit c431da3
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 2 deletions.
14 changes: 13 additions & 1 deletion api/src/opentrons/protocols/advanced_control/transfers.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,16 @@
from opentrons.protocol_api.labware import Labware, Well
from opentrons import types
from opentrons.protocols.api_support.types import APIVersion
from opentrons.hardware_control.nozzle_manager import NozzleConfigurationType


if TYPE_CHECKING:
from opentrons.protocol_api import InstrumentContext
from opentrons.protocols.execution.dev_types import Dictable

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


class MixStrategy(enum.Enum):
BOTH = enum.auto()
Expand Down Expand Up @@ -409,7 +413,15 @@ def __init__(
# then avoid iterating through its Wells.
# ii. if using single channel pipettes, flatten a multi-dimensional
# list of Wells into a 1 dimensional list of Wells
if self._instr.channels > 1:
pipette_configuration_type = NozzleConfigurationType.FULL
if self._api_version >= _PARTIAL_TIP_SUPPORT_ADDED:
pipette_configuration_type = (
self._instr._core.get_nozzle_map().configuration
)
if (
self._instr.channels > 1
and pipette_configuration_type == NozzleConfigurationType.FULL
):
sources, dests = self._multichannel_transfer(sources, dests)
else:
if isinstance(sources, List) and isinstance(sources[0], List):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ def test_close_shave_deck_conflicts_for_96_ch_a12_column_configuration() -> None
adapter="opentrons_flex_96_tiprack_adapter",
)
tiprack_8 = protocol_context.load_labware("opentrons_flex_96_tiprack_200ul", "B2")
hs = protocol_context.load_module("heaterShakerModuleV1", "D1")
hs = protocol_context.load_module("heaterShakerModuleV1", "C1")
hs_adapter = hs.load_adapter("opentrons_96_deep_well_adapter")
deepwell = hs_adapter.load_labware("nest_96_wellplate_2ml_deep")
protocol_context.load_trash_bin("A3")
Expand Down

0 comments on commit c431da3

Please sign in to comment.