Skip to content

Commit 9d177c7

Browse files
committed
Merge branch 'edge' into pd-build-and-test-speedup
2 parents e51bc9f + 2451026 commit 9d177c7

File tree

109 files changed

+2911
-899
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+2911
-899
lines changed

api-client/src/maintenance_runs/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type {
66
} from '@opentrons/shared-data'
77
import type {
88
RunCommandSummary,
9-
LabwareOffsetCreateData,
9+
LegacyLabwareOffsetCreateData,
1010
RunStatus,
1111
RunAction,
1212
} from '../runs'
@@ -42,7 +42,7 @@ export interface MaintenanceRunError {
4242
}
4343

4444
export interface CreateMaintenanceRunData {
45-
labwareOffsets?: LabwareOffsetCreateData[]
45+
labwareOffsets?: LegacyLabwareOffsetCreateData[]
4646
}
4747

4848
export interface LabwareDefinitionSummary {

api-client/src/modules/api-types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ interface PhysicalPort {
1010
port: number
1111
hub: boolean
1212
portGroup: PortGroup
13+
hubPort?: number
1314
}
1415

1516
type ModuleOffsetSource =

api-client/src/runs/createLabwareOffset.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import { POST, request } from '../request'
22

33
import type { ResponsePromise } from '../request'
44
import type { HostConfig } from '../types'
5-
import type { LabwareOffsetCreateData, Run } from './types'
5+
import type { LegacyLabwareOffsetCreateData, Run } from './types'
66

77
export function createLabwareOffset(
88
config: HostConfig,
99
runId: string,
10-
data: LabwareOffsetCreateData
10+
data: LegacyLabwareOffsetCreateData
1111
): ResponsePromise<Run> {
12-
return request<Run, { data: LabwareOffsetCreateData }>(
12+
return request<Run, { data: LegacyLabwareOffsetCreateData }>(
1313
POST,
1414
`/runs/${runId}/labware_offsets`,
1515
{ data },

api-client/src/runs/createRun.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import type { ResponsePromise } from '../request'
44
import type { HostConfig } from '../types'
55
import type {
66
Run,
7-
LabwareOffsetCreateData,
7+
LegacyLabwareOffsetCreateData,
88
RunTimeParameterValuesCreateData,
99
RunTimeParameterFilesCreateData,
1010
} from './types'
1111

1212
export interface CreateRunData {
1313
protocolId?: string
14-
labwareOffsets?: LabwareOffsetCreateData[]
14+
labwareOffsets?: LegacyLabwareOffsetCreateData[]
1515
runTimeParameterValues?: RunTimeParameterValuesCreateData
1616
runTimeParameterFiles?: RunTimeParameterFilesCreateData
1717
}

api-client/src/runs/types.ts

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ export interface LabwareOffset {
8585
id: string
8686
createdAt: string
8787
definitionUri: string
88-
location: LabwareOffsetLocation
88+
location: LegacyLabwareOffsetLocation
89+
locationSequence?: LabwareOffsetLocationSequence
8990
vector: VectorOffset
9091
}
9192

@@ -156,14 +157,35 @@ export interface CreateRunActionData {
156157
actionType: RunActionType
157158
}
158159

159-
export interface LabwareOffsetLocation {
160+
export interface OnAddressableAreaLabwareOffsetLocationSequenceComponent {
161+
kind: 'onAddressableArea'
162+
labware: string
163+
}
164+
165+
export interface OnModuleOffsetLocationSequenceComponent {
166+
kind: 'onModule'
167+
moduleModel: ModuleModel
168+
}
169+
170+
export interface OnLabwareOffsetLocationSequenceComponent {
171+
kind: 'onLabware'
172+
labwareUri: string
173+
}
174+
175+
export type LabwareOffsetLocationSequenceComponent =
176+
| OnAddressableAreaLabwareOffsetLocationSequenceComponent
177+
| OnModuleOffsetLocationSequenceComponent
178+
| OnLabwareOffsetLocationSequenceComponent
179+
export type LabwareOffsetLocationSequence = LabwareOffsetLocationSequenceComponent[]
180+
181+
export interface LegacyLabwareOffsetLocation {
160182
slotName: string
161183
moduleModel?: ModuleModel
162184
definitionUri?: string
163185
}
164-
export interface LabwareOffsetCreateData {
186+
export interface LegacyLabwareOffsetCreateData {
165187
definitionUri: string
166-
location: LabwareOffsetLocation
188+
location: LegacyLabwareOffsetLocation
167189
vector: VectorOffset
168190
}
169191

api/docs/v2/pipettes/characteristics.rst

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -184,29 +184,32 @@ These flow rates will remain in effect until you change the ``flow_rate`` attrib
184184
Flex Pipette Flow Rates
185185
-----------------------
186186

187-
Flex pipette flow rates depend on pipette volume and tip capacity. Each pipette–tip combination has a default flow rate for aspirating, dispensing, and blowing out liquid. When using a 50 µL pipette, you should only use 50 µL tips.
188-
189-
.. list-table::
190-
:header-rows: 1
191-
192-
* - Pipette Model
193-
- Tip Capacity (µL)
194-
- Flow Rate (µL/s)
195-
* - 50 µL (1- and 8-channel)
196-
- 50
197-
- 57
198-
* - 1000 µL (1-, 8-, and 96-channel)
199-
- 50
200-
- 478
201-
* - 1000 µL (1-, 8-, and 96-channel)
202-
- 200
203-
- 716
204-
* - 1000 µL (1-, 8-, and 96-channel)
205-
- 1000
206-
- 716
207-
208-
209-
Additionally, all Flex pipettes have a well bottom clearance of 1 mm for aspirate and dispense actions.
187+
The following table provides data on the default aspirate, dispense, and blowout flow rates (in µL/s) for Flex pipettes. Default flow rates for each pipette-tip combination are the same across all three actions.
188+
189+
.. Excludes low-vol 96 channel. Not yet released.
190+
191+
+-----------------------------+-------------------+------------------------+
192+
| Pipette Model | Tip Capacity (µL) | Default Flow Rate (µL) |
193+
+=============================+===================+========================+
194+
| 1- and 8-channel (50 µL) | 50 | 35 |
195+
+-----------------------------+-------------------+------------------------+
196+
| 1- and 8-channel (1000 µL) | 50 | 478 |
197+
+ +-------------------+------------------------+
198+
| | 200 | 716 |
199+
+ +-------------------+------------------------+
200+
| | 1000 | 716 |
201+
+-----------------------------+-------------------+------------------------+
202+
| 96-channel (5-1000 µL) | 50 | 6 |
203+
+ +-------------------+------------------------+
204+
| | 200 | 80 |
205+
+ +-------------------+------------------------+
206+
| | 1000 | 160 |
207+
+-----------------------------+-------------------+------------------------+
208+
209+
Additionally:
210+
211+
- When using a 50 µL pipette, you should only use 50 µL tips.
212+
- All Flex pipettes have a well bottom clearance of 1 mm for aspirate and dispense actions.
210213

211214
.. _ot2-flow-rates:
212215

api/release-notes-internal.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@ For more details about this release, please see the full [technical change log][
22

33
[technical change log]: https://github.com/Opentrons/opentrons/releases
44

5+
## Internal Release 2.4.0-alpha.1
6+
7+
This internal release, pulled from the `edge` branch, contains features being developed for 8.4.0. It's for internal testing only.
8+
9+
### New Stuff In This Release (list in progress):
10+
11+
- Python API version bumped to 2.23
12+
- Added liquid classes and new transfer functions
13+
514
## Internal Release 2.3.0-alpha.2
615

716
This internal release, pulled from the `edge` branch, contains features being developed for 8.3.0. It's for internal testing only.

api/src/opentrons/config/advanced_settings.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -222,17 +222,6 @@ class Setting(NamedTuple):
222222
robot_type=[RobotTypeEnum.OT2, RobotTypeEnum.FLEX],
223223
internal_only=True,
224224
),
225-
SettingDefinition(
226-
_id="allowLiquidClasses",
227-
title="Allow the use of liquid classes",
228-
description=(
229-
"Do not enable."
230-
" This is an Opentrons internal setting to allow using in-development"
231-
" liquid classes."
232-
),
233-
robot_type=[RobotTypeEnum.OT2, RobotTypeEnum.FLEX],
234-
internal_only=True,
235-
),
236225
]
237226

238227

@@ -736,6 +725,14 @@ def _migrate35to36(previous: SettingsMap) -> SettingsMap:
736725
return newmap
737726

738727

728+
def _migrate36to37(previous: SettingsMap) -> SettingsMap:
729+
"""Migrate to version 37 of the feature flags file.
730+
731+
- Removes the allowLiquidClasses flag.
732+
"""
733+
return {k: v for k, v in previous.items() if "allowLiquidClasses" != k}
734+
735+
739736
_MIGRATIONS = [
740737
_migrate0to1,
741738
_migrate1to2,
@@ -773,6 +770,7 @@ def _migrate35to36(previous: SettingsMap) -> SettingsMap:
773770
_migrate33to34,
774771
_migrate34to35,
775772
_migrate35to36,
773+
_migrate36to37,
776774
]
777775
"""
778776
List of all migrations to apply, indexed by (version - 1). See _migrate below

api/src/opentrons/config/feature_flags.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,3 @@ def enable_performance_metrics(robot_type: RobotTypeEnum) -> bool:
7878

7979
def oem_mode_enabled() -> bool:
8080
return advs.get_setting_with_env_overload("enableOEMMode", RobotTypeEnum.FLEX)
81-
82-
83-
def allow_liquid_classes(robot_type: RobotTypeEnum) -> bool:
84-
return advs.get_setting_with_env_overload("allowLiquidClasses", robot_type)

api/src/opentrons/protocol_api/core/engine/labware.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def set_calibration(self, delta: Point) -> None:
122122

123123
request = LabwareOffsetCreate.model_construct(
124124
definitionUri=self.get_uri(),
125-
location=offset_location,
125+
locationSequence=offset_location,
126126
vector=LabwareOffsetVector(x=delta.x, y=delta.y, z=delta.z),
127127
)
128128
self._engine_client.add_labware_offset(request)

api/src/opentrons/protocol_api/core/legacy/labware_offset_provider.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
from typing import Optional
44

55
from opentrons.hardware_control.modules import ModuleModel as HardwareModuleModel
6-
from opentrons.protocol_engine import ProtocolEngine, LabwareOffsetLocation, ModuleModel
6+
from opentrons.protocol_engine import (
7+
ProtocolEngine,
8+
LegacyLabwareOffsetLocation,
9+
ModuleModel,
10+
)
711
from opentrons.types import DeckSlotName, Point
812

913
from ..labware import LabwareLoadParams
@@ -81,9 +85,9 @@ def find(
8185
8286
See the parent class for param details.
8387
"""
84-
offset = self._labware_view.find_applicable_labware_offset(
88+
offset = self._labware_view.find_applicable_labware_offset_by_legacy_location(
8589
definition_uri=load_params.as_uri(),
86-
location=LabwareOffsetLocation(
90+
location=LegacyLabwareOffsetLocation(
8791
slotName=deck_slot,
8892
moduleModel=(
8993
None

api/src/opentrons/protocol_api/instrument_context.py

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
UnexpectedTipRemovalError,
99
UnsupportedHardwareCommand,
1010
)
11-
from opentrons_shared_data.robot.types import RobotTypeEnum
1211

1312
from opentrons.legacy_broker import LegacyBroker
1413
from opentrons.hardware_control.dev_types import PipetteDict
@@ -38,7 +37,6 @@
3837
from ._nozzle_layout import NozzleLayout
3938
from ._liquid import LiquidClass
4039
from . import labware, validation
41-
from ..config import feature_flags
4240
from ..protocols.advanced_control.transfers.common import (
4341
TransferTipPolicyV2,
4442
TransferTipPolicyV2Type,
@@ -1509,6 +1507,7 @@ def _execute_transfer(self, plan: v1_transfer.TransferPlan) -> None:
15091507
for cmd in plan:
15101508
getattr(self, cmd["method"])(*cmd["args"], **cmd["kwargs"])
15111509

1510+
@requires_version(2, 23)
15121511
def transfer_liquid(
15131512
self,
15141513
liquid_class: LiquidClass,
@@ -1528,13 +1527,6 @@ def transfer_liquid(
15281527
15291528
TODO: Add args description.
15301529
"""
1531-
if not feature_flags.allow_liquid_classes(
1532-
robot_type=RobotTypeEnum.robot_literal_to_enum(
1533-
self._protocol_core.robot_type
1534-
)
1535-
):
1536-
raise NotImplementedError("This method is not implemented.")
1537-
15381530
flat_sources_list = validation.ensure_valid_flat_wells_list_for_transfer_v2(
15391531
source
15401532
)
@@ -1604,6 +1596,7 @@ def transfer_liquid(
16041596
)
16051597
return self
16061598

1599+
@requires_version(2, 23)
16071600
def distribute_liquid(
16081601
self,
16091602
liquid_class: LiquidClass,
@@ -1623,13 +1616,6 @@ def distribute_liquid(
16231616
16241617
TODO: Add args description.
16251618
"""
1626-
if not feature_flags.allow_liquid_classes(
1627-
robot_type=RobotTypeEnum.robot_literal_to_enum(
1628-
self._protocol_core.robot_type
1629-
)
1630-
):
1631-
raise NotImplementedError("This method is not implemented.")
1632-
16331619
if not isinstance(source, labware.Well):
16341620
raise ValueError(f"Source should be a single Well but received {source}.")
16351621
flat_dests_list = validation.ensure_valid_flat_wells_list_for_transfer_v2(dest)
@@ -1689,6 +1675,7 @@ def distribute_liquid(
16891675
)
16901676
return self
16911677

1678+
@requires_version(2, 23)
16921679
def consolidate_liquid(
16931680
self,
16941681
liquid_class: LiquidClass,
@@ -1708,12 +1695,6 @@ def consolidate_liquid(
17081695
17091696
TODO: Add args description.
17101697
"""
1711-
if not feature_flags.allow_liquid_classes(
1712-
robot_type=RobotTypeEnum.robot_literal_to_enum(
1713-
self._protocol_core.robot_type
1714-
)
1715-
):
1716-
raise NotImplementedError("This method is not implemented.")
17171698
if not isinstance(dest, labware.Well):
17181699
raise ValueError(
17191700
f"Destination should be a single Well but received {dest}."

api/src/opentrons/protocol_api/protocol_context.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@
1414

1515
from opentrons_shared_data.labware.types import LabwareDefinition
1616
from opentrons_shared_data.pipette.types import PipetteNameType
17-
from opentrons_shared_data.robot.types import RobotTypeEnum
1817

1918
from opentrons.types import Mount, Location, DeckLocation, DeckSlotName, StagingSlotName
20-
from opentrons.config import feature_flags
2119
from opentrons.legacy_broker import LegacyBroker
2220
from opentrons.hardware_control.modules.types import (
2321
MagneticBlockModel,
@@ -1354,17 +1352,13 @@ def define_liquid(
13541352
display_color=display_color,
13551353
)
13561354

1355+
@requires_version(2, 23)
13571356
def define_liquid_class(
13581357
self,
13591358
name: str,
13601359
) -> LiquidClass:
13611360
"""Define a liquid class for use in the protocol."""
1362-
if feature_flags.allow_liquid_classes(
1363-
robot_type=RobotTypeEnum.robot_literal_to_enum(self._core.robot_type)
1364-
):
1365-
return self._core.define_liquid_class(name=name)
1366-
else:
1367-
raise NotImplementedError("This method is not implemented.")
1361+
return self._core.define_liquid_class(name=name)
13681362

13691363
@property
13701364
@requires_version(2, 5)

api/src/opentrons/protocol_engine/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@
2626

2727
from .types import (
2828
LabwareOffset,
29+
LegacyLabwareOffsetCreate,
2930
LabwareOffsetCreate,
3031
LabwareOffsetVector,
31-
LabwareOffsetLocation,
32+
LegacyLabwareOffsetLocation,
3233
LabwareMovementStrategy,
3334
AddressableOffsetVector,
3435
DeckPoint,
@@ -96,7 +97,8 @@
9697
"LabwareOffset",
9798
"LabwareOffsetCreate",
9899
"LabwareOffsetVector",
99-
"LabwareOffsetLocation",
100+
"LegacyLabwareOffsetCreate",
101+
"LegacyLabwareOffsetLocation",
100102
"LabwareMovementStrategy",
101103
"AddressableOffsetVector",
102104
"DeckSlotLocation",

0 commit comments

Comments
 (0)