opentrons 8.6.0a9__py3-none-any.whl → 8.6.0a11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- opentrons/_version.py +2 -2
- opentrons/legacy_commands/module_commands.py +62 -1
- opentrons/legacy_commands/types.py +71 -0
- opentrons/protocol_api/module_contexts.py +104 -82
- opentrons/protocol_runner/legacy_command_mapper.py +4 -0
- {opentrons-8.6.0a9.dist-info → opentrons-8.6.0a11.dist-info}/METADATA +4 -4
- {opentrons-8.6.0a9.dist-info → opentrons-8.6.0a11.dist-info}/RECORD +10 -10
- {opentrons-8.6.0a9.dist-info → opentrons-8.6.0a11.dist-info}/WHEEL +0 -0
- {opentrons-8.6.0a9.dist-info → opentrons-8.6.0a11.dist-info}/entry_points.txt +0 -0
- {opentrons-8.6.0a9.dist-info → opentrons-8.6.0a11.dist-info}/licenses/LICENSE +0 -0
opentrons/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '8.6.
|
|
32
|
-
__version_tuple__ = version_tuple = (8, 6, 0, '
|
|
31
|
+
__version__ = version = '8.6.0a11'
|
|
32
|
+
__version_tuple__ = version_tuple = (8, 6, 0, 'a11')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import List
|
|
1
|
+
from typing import Any, List
|
|
2
2
|
from math import trunc
|
|
3
3
|
|
|
4
4
|
from opentrons.drivers import utils
|
|
@@ -213,3 +213,64 @@ def heater_shaker_deactivate_heater() -> command_types.HeaterShakerDeactivateHea
|
|
|
213
213
|
"name": command_types.HEATER_SHAKER_DEACTIVATE_HEATER,
|
|
214
214
|
"payload": {"text": text},
|
|
215
215
|
}
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
# FLex Stacker
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def flex_stacker_set_stored_labware(
|
|
222
|
+
self: Any,
|
|
223
|
+
load_name: str,
|
|
224
|
+
namespace: str | None = None,
|
|
225
|
+
version: int | None = None,
|
|
226
|
+
adapter: str | None = None,
|
|
227
|
+
lid: str | None = None,
|
|
228
|
+
count: int | None = None,
|
|
229
|
+
stacking_offset_z: float | None = None,
|
|
230
|
+
) -> command_types.FlexStackerSetStoredLabwareCommand:
|
|
231
|
+
uri = f"{namespace}/{load_name}/{version}"
|
|
232
|
+
text = f"Configuring {self} with {count} labware {uri}, adapter: {adapter}, lid: {lid}, stacking_offset_z: {stacking_offset_z}"
|
|
233
|
+
return {
|
|
234
|
+
"name": command_types.FLEX_STACKER_SET_STORED_LABWARE,
|
|
235
|
+
"payload": {"text": text},
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
def flex_stacker_retrieve(
|
|
240
|
+
self: Any,
|
|
241
|
+
) -> command_types.FlexStackerRetrieveCommand:
|
|
242
|
+
text = f"Retrieving labware from {self}"
|
|
243
|
+
return {
|
|
244
|
+
"name": command_types.FLEX_STACKER_RETRIEVE,
|
|
245
|
+
"payload": {"text": text},
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def flex_stacker_store(
|
|
250
|
+
self: Any,
|
|
251
|
+
) -> command_types.FlexStackerStoreCommand:
|
|
252
|
+
text = f"Storing labware to {self}"
|
|
253
|
+
return {
|
|
254
|
+
"name": command_types.FLEX_STACKER_STORE,
|
|
255
|
+
"payload": {"text": text},
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def flex_stacker_empty(
|
|
260
|
+
self: Any,
|
|
261
|
+
) -> command_types.FlexStackerEmptyCommand:
|
|
262
|
+
text = f"Emptying {self}"
|
|
263
|
+
return {
|
|
264
|
+
"name": command_types.FLEX_STACKER_EMPTY,
|
|
265
|
+
"payload": {"text": text},
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def flex_stacker_fill(
|
|
270
|
+
self: Any, count: int | None = None
|
|
271
|
+
) -> command_types.FlexStackerFillCommand:
|
|
272
|
+
text = f"Filling {self} with {count} labware"
|
|
273
|
+
return {
|
|
274
|
+
"name": command_types.FLEX_STACKER_FILL,
|
|
275
|
+
"payload": {"text": text},
|
|
276
|
+
}
|
|
@@ -89,6 +89,12 @@ THERMOCYCLER_SET_LID_TEMP: Final = "command.THERMOCYCLER_SET_LID_TEMP"
|
|
|
89
89
|
THERMOCYCLER_DEACTIVATE_LID: Final = "command.THERMOCYCLER_DEACTIVATE_LID"
|
|
90
90
|
THERMOCYCLER_DEACTIVATE_BLOCK: Final = "command.THERMOCYCLER_DEACTIVATE_BLOCK"
|
|
91
91
|
|
|
92
|
+
FLEX_STACKER_SET_STORED_LABWARE: Final = "command.FLEX_STACKER_SET_STORED_LABWARE"
|
|
93
|
+
FLEX_STACKER_RETRIEVE: Final = "command.FLEX_STACKER_RETRIEVE"
|
|
94
|
+
FLEX_STACKER_STORE: Final = "command.FLEX_STACKER_STORE"
|
|
95
|
+
FLEX_STACKER_EMPTY: Final = "command.FLEX_STACKER_EMPTY"
|
|
96
|
+
FLEX_STACKER_FILL: Final = "command.FLEX_STACKER_FILL"
|
|
97
|
+
|
|
92
98
|
# Robot #
|
|
93
99
|
ROBOT_MOVE_TO: Final = "command.ROBOT_MOVE_TO"
|
|
94
100
|
ROBOT_MOVE_AXES_TO: Final = "command.ROBOT_MOVE_AXES_TO"
|
|
@@ -154,6 +160,9 @@ class ResumeCommand(TypedDict):
|
|
|
154
160
|
payload: ResumeCommandPayload
|
|
155
161
|
|
|
156
162
|
|
|
163
|
+
# Module commands
|
|
164
|
+
|
|
165
|
+
|
|
157
166
|
class HeaterShakerSetTargetTemperaturePayload(TextOnlyPayload):
|
|
158
167
|
pass
|
|
159
168
|
|
|
@@ -371,6 +380,34 @@ class ThermocyclerCloseCommand(TypedDict):
|
|
|
371
380
|
payload: ThermocyclerCloseCommandPayload
|
|
372
381
|
|
|
373
382
|
|
|
383
|
+
class FlexStackerSetStoredLabwareCommand(TypedDict):
|
|
384
|
+
name: Literal["command.FLEX_STACKER_SET_STORED_LABWARE"]
|
|
385
|
+
payload: TextOnlyPayload
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
class FlexStackerRetrieveCommand(TypedDict):
|
|
389
|
+
name: Literal["command.FLEX_STACKER_RETRIEVE"]
|
|
390
|
+
payload: TextOnlyPayload
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
class FlexStackerStoreCommand(TypedDict):
|
|
394
|
+
name: Literal["command.FLEX_STACKER_STORE"]
|
|
395
|
+
payload: TextOnlyPayload
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
class FlexStackerEmptyCommand(TypedDict):
|
|
399
|
+
name: Literal["command.FLEX_STACKER_EMPTY"]
|
|
400
|
+
payload: TextOnlyPayload
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
class FlexStackerFillCommand(TypedDict):
|
|
404
|
+
name: Literal["command.FLEX_STACKER_FILL"]
|
|
405
|
+
payload: TextOnlyPayload
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
# Module command end
|
|
409
|
+
|
|
410
|
+
|
|
374
411
|
class HomeCommandPayload(TextOnlyPayload):
|
|
375
412
|
axis: str
|
|
376
413
|
|
|
@@ -739,6 +776,12 @@ Command = Union[
|
|
|
739
776
|
RobotMoveAxisRelativeCommand,
|
|
740
777
|
RobotOpenGripperJawCommand,
|
|
741
778
|
RobotCloseGripperJawCommand,
|
|
779
|
+
# Flex Stacker commands
|
|
780
|
+
FlexStackerSetStoredLabwareCommand,
|
|
781
|
+
FlexStackerRetrieveCommand,
|
|
782
|
+
FlexStackerStoreCommand,
|
|
783
|
+
FlexStackerEmptyCommand,
|
|
784
|
+
FlexStackerFillCommand,
|
|
742
785
|
]
|
|
743
786
|
|
|
744
787
|
|
|
@@ -1019,6 +1062,28 @@ class MagdeckEngageMessage(CommandMessageFields, MagdeckEngageCommand):
|
|
|
1019
1062
|
pass
|
|
1020
1063
|
|
|
1021
1064
|
|
|
1065
|
+
class FlexStackerSetStoredLabwareMessage(
|
|
1066
|
+
CommandMessageFields, FlexStackerSetStoredLabwareCommand
|
|
1067
|
+
):
|
|
1068
|
+
pass
|
|
1069
|
+
|
|
1070
|
+
|
|
1071
|
+
class FlexStackerRetrieveMessage(CommandMessageFields, FlexStackerRetrieveCommand):
|
|
1072
|
+
pass
|
|
1073
|
+
|
|
1074
|
+
|
|
1075
|
+
class FlexStackerStoreMessage(CommandMessageFields, FlexStackerStoreCommand):
|
|
1076
|
+
pass
|
|
1077
|
+
|
|
1078
|
+
|
|
1079
|
+
class FlexStackerEmptyMessage(CommandMessageFields, FlexStackerEmptyCommand):
|
|
1080
|
+
pass
|
|
1081
|
+
|
|
1082
|
+
|
|
1083
|
+
class FlexStackerFillMessage(CommandMessageFields, FlexStackerFillCommand):
|
|
1084
|
+
pass
|
|
1085
|
+
|
|
1086
|
+
|
|
1022
1087
|
class ResumeMessage(CommandMessageFields, ResumeCommand):
|
|
1023
1088
|
pass
|
|
1024
1089
|
|
|
@@ -1112,4 +1177,10 @@ CommandMessage = Union[
|
|
|
1112
1177
|
RobotMoveAxisRelativeMessage,
|
|
1113
1178
|
RobotOpenGripperJawMessage,
|
|
1114
1179
|
RobotCloseGripperJawMessage,
|
|
1180
|
+
# Flex Stacker Messages
|
|
1181
|
+
FlexStackerSetStoredLabwareMessage,
|
|
1182
|
+
FlexStackerRetrieveMessage,
|
|
1183
|
+
FlexStackerStoreMessage,
|
|
1184
|
+
FlexStackerEmptyMessage,
|
|
1185
|
+
FlexStackerFillMessage,
|
|
1115
1186
|
]
|
|
@@ -248,7 +248,7 @@ class ModuleContext(CommandPublisher):
|
|
|
248
248
|
) -> Labware:
|
|
249
249
|
"""
|
|
250
250
|
.. deprecated:: 2.0
|
|
251
|
-
Use
|
|
251
|
+
Use ``load_labware`` instead.
|
|
252
252
|
"""
|
|
253
253
|
_log.warning("load_labware_by_name is deprecated. Use load_labware instead.")
|
|
254
254
|
return self.load_labware(
|
|
@@ -1140,8 +1140,11 @@ class FlexStackerContext(ModuleContext):
|
|
|
1140
1140
|
return self._core.get_serial_number()
|
|
1141
1141
|
|
|
1142
1142
|
@requires_version(2, 25)
|
|
1143
|
+
@publish(command=cmds.flex_stacker_retrieve)
|
|
1143
1144
|
def retrieve(self) -> Labware:
|
|
1144
|
-
"""Retrieve a labware from the Flex Stacker and
|
|
1145
|
+
"""Retrieve a labware from the Flex Stacker and move it onto the shuttle.
|
|
1146
|
+
|
|
1147
|
+
The Stacker will retrieve the bottom-most labware in the stack.
|
|
1145
1148
|
|
|
1146
1149
|
:returns: The retrieved :py:class:`Labware` object. This will always be the main labware,
|
|
1147
1150
|
even if the Flex Stacker contains labware on an adapter. To get the adapter object,
|
|
@@ -1158,8 +1161,12 @@ class FlexStackerContext(ModuleContext):
|
|
|
1158
1161
|
)
|
|
1159
1162
|
|
|
1160
1163
|
@requires_version(2, 25)
|
|
1164
|
+
@publish(command=cmds.flex_stacker_store)
|
|
1161
1165
|
def store(self) -> None:
|
|
1162
|
-
"""Move
|
|
1166
|
+
"""Move a labware currently on the Flex Stacker shuttle into the Flex Stacker.
|
|
1167
|
+
|
|
1168
|
+
The labware must be the same type the Stacker is configured to store using :py:meth:`.set_stored_labware()`. If labware is currently stacked inside the module, this method moves the new labware to the bottom-most position of the stack.
|
|
1169
|
+
"""
|
|
1163
1170
|
self._core.store()
|
|
1164
1171
|
|
|
1165
1172
|
def _labware_to_cores(self, labware: Sequence[Labware]) -> list[LabwareCore]:
|
|
@@ -1184,24 +1191,25 @@ class FlexStackerContext(ModuleContext):
|
|
|
1184
1191
|
stacking_offset_z: float | None = None,
|
|
1185
1192
|
) -> list[Labware]:
|
|
1186
1193
|
"""Limit a list of labware instances to the number that can be stored in a Flex Stacker.
|
|
1194
|
+
Items will be taken from the head of the list.
|
|
1187
1195
|
|
|
1188
1196
|
A Flex Stacker has a limited amount of internal space and computes the number of labware
|
|
1189
|
-
(or labware with lids or adapters) that it can store based on the heights of the labware
|
|
1190
|
-
and the amount they overlap when
|
|
1191
|
-
labware the
|
|
1197
|
+
(or labware with lids or adapters) that it can store based on the ``z`` heights of the labware
|
|
1198
|
+
and the amount they overlap when stacked. To calculate how many of a given
|
|
1199
|
+
labware the Stacker can store, the labware type must be specified.
|
|
1192
1200
|
|
|
1193
|
-
|
|
1194
|
-
|
|
1201
|
+
Provide a list of labware to this function to return the maximum number of labware of the given type that the
|
|
1202
|
+
Stacker can store. The returned list is guaranteed to be suitable
|
|
1195
1203
|
for passing to :py:meth:`.set_stored_labware_items`.
|
|
1196
1204
|
|
|
1197
|
-
This function limits the list of labware based on the overall maximum number the
|
|
1205
|
+
This function limits the list of labware based on the overall maximum number the Stacker
|
|
1198
1206
|
can hold and will not change as labware is added or removed. To limit a list of labware to
|
|
1199
1207
|
the amount that will currently fit in the Flex Stacker, use
|
|
1200
1208
|
:py:meth:`.get_current_storable_labware_from_list`.
|
|
1201
1209
|
|
|
1202
1210
|
.. note::
|
|
1203
1211
|
|
|
1204
|
-
If a stacking offset is provided,
|
|
1212
|
+
If a ``z`` stacking offset is provided, be sure to specify the same value when
|
|
1205
1213
|
configuring the Flex Stacker with :py:meth:`.set_stored_labware_items`.
|
|
1206
1214
|
|
|
1207
1215
|
See :py:meth:`.set_stored_labware_items` for more details on stacking offset.
|
|
@@ -1219,14 +1227,17 @@ class FlexStackerContext(ModuleContext):
|
|
|
1219
1227
|
) -> list[Labware]:
|
|
1220
1228
|
"""Limit a list of labware instances to the number that the Flex Stacker currently has space for,
|
|
1221
1229
|
based on the labware that is already stored in the Flex Stacker.
|
|
1230
|
+
Items will be taken from the head of the list.
|
|
1222
1231
|
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1232
|
+
A Flex Stacker has a limited amount of internal space and computes the number of labware that it can store based on the ``z`` height of the labware and the amount they overlap when stacked.
|
|
1233
|
+
|
|
1234
|
+
.. note::
|
|
1235
|
+
The number of elements in the returned list will change as labware is added or removed from
|
|
1236
|
+
the Flex Stacker. To get a list limited to the overall maximum number of labware the Flex Stacker
|
|
1237
|
+
can store, use :py:meth:`.get_max_storable_labware_from_list`.
|
|
1226
1238
|
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
can store, use :py:meth:`.get_max_storable_labware_from_list`.
|
|
1239
|
+
:param labware: A list of labware to limit. The returned list takes from the front of the provided list, and it is guaranteed to be suitable
|
|
1240
|
+
for passing to :py:meth:`.fill_items`.
|
|
1230
1241
|
"""
|
|
1231
1242
|
return self._cores_to_labware(
|
|
1232
1243
|
self._core.get_current_storable_labware_from_list(
|
|
@@ -1236,11 +1247,13 @@ class FlexStackerContext(ModuleContext):
|
|
|
1236
1247
|
|
|
1237
1248
|
@requires_version(2, 25)
|
|
1238
1249
|
def get_max_storable_labware(self) -> int:
|
|
1239
|
-
"""Get the number of labware that the Flex Stacker can store
|
|
1250
|
+
"""Get the maximum number of labware that the Flex Stacker can store.
|
|
1240
1251
|
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1252
|
+
Use this function to return the total number of labware that the Flex Stacker can store. A Stacker has a limited amount of internal space and calculates the total number of labware that can be stored based on the ``z`` height of the labware and the amount they overlap when stacked.
|
|
1253
|
+
|
|
1254
|
+
The total number is calculated based on the labware definition for the type of labware the Stacker is currently configured to store using :py:meth:`.set_stored_labware()`. This
|
|
1255
|
+
number is the overall maximum and will not change as labware is added or removed. To get the number of labware that can
|
|
1256
|
+
be stored in the Flex Stacker based on its current conditions, use :py:meth:`.get_current_storable_labware`.
|
|
1244
1257
|
"""
|
|
1245
1258
|
return self._core.get_max_storable_labware()
|
|
1246
1259
|
|
|
@@ -1248,7 +1261,9 @@ class FlexStackerContext(ModuleContext):
|
|
|
1248
1261
|
def get_current_storable_labware(self) -> int:
|
|
1249
1262
|
"""Get the number of labware that the Flex Stacker currently has space for.
|
|
1250
1263
|
|
|
1251
|
-
|
|
1264
|
+
Use this function to return the total number of labware that the Flex Stacker can store. A Stacker has a limited amount of internal space and calculates the number of labware that can be stored based on the ``z`` height of the labware and the amount they overlap when stacked.
|
|
1265
|
+
|
|
1266
|
+
The number is calculated based on the labware definition for the type of labware the Stacker is currently configured to store using :py:meth:`.set_stored_labware()`. This function returns a number based on the current storage conditions of the Stacker, and will change as labware is added or removed. To get the overall maximum number of labware the
|
|
1252
1267
|
Flex Stacker can store, use :py:meth:`.get_max_storable_labware`.
|
|
1253
1268
|
"""
|
|
1254
1269
|
return self._core.get_current_storable_labware()
|
|
@@ -1259,43 +1274,44 @@ class FlexStackerContext(ModuleContext):
|
|
|
1259
1274
|
labware: list[Labware],
|
|
1260
1275
|
stacking_offset_z: float | None,
|
|
1261
1276
|
) -> None:
|
|
1262
|
-
"""Configure
|
|
1277
|
+
"""Configure the labware the Flex Stacker will store during a protocol by providing an initial list of stored labware objects. The start of the list represents the bottom of the Stacker,
|
|
1278
|
+
and the end of the list represents the top of the Stacker.
|
|
1263
1279
|
|
|
1264
1280
|
The kind of labware stored by the Flex Stacker will be calculated from the list of labware
|
|
1265
1281
|
specified here. You can use this to store labware objects that you have already created
|
|
1266
|
-
so that, for instance, you can set their liquid state or nicknames.
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1282
|
+
so that, for instance, you can set their liquid state or nicknames.
|
|
1283
|
+
|
|
1284
|
+
|
|
1285
|
+
:param labware: A list of labware to load into the Stacker.
|
|
1286
|
+
|
|
1287
|
+
- The list must have at least one element.
|
|
1288
|
+
- All labware must be loaded :py:obj:`OFF_DECK`.
|
|
1289
|
+
- All labware must be of the same kind. If any of them have lids, they
|
|
1290
|
+
must all have lids, and the lids must be the same.
|
|
1291
|
+
If any of them are on adapters, they all
|
|
1292
|
+
must be on adapters, and the adapters must be the same.
|
|
1293
|
+
All lids and adapters must be compatible with the Stacker.
|
|
1294
|
+
- The number of labware objects must fit in the Stacker physically. To make sure the labware
|
|
1295
|
+
will fit, use the return value of :py:meth:`.get_max_storable_labware_from_list`.
|
|
1296
|
+
|
|
1297
|
+
:param stacking_offset_z: Stacking ``z`` offset in mm of stored labware. If specified, this overrides the
|
|
1280
1298
|
calculated value from labware definitions.
|
|
1281
1299
|
|
|
1282
1300
|
.. note::
|
|
1283
1301
|
|
|
1284
|
-
The stacking offset is the amount of vertical overlap (in mm) between the
|
|
1285
|
-
labware unit and the
|
|
1286
|
-
units can fit in the stacker and calculates the
|
|
1287
|
-
or storing labware.
|
|
1288
|
-
definitions, but you can override it by providing a value here.
|
|
1302
|
+
The stacking offset is the amount of vertical overlap (in mm) between the bottom side of a
|
|
1303
|
+
labware unit and the top side of the unit below. This offset is used to determine how many
|
|
1304
|
+
units can fit in the stacker and calculates the ``z`` position of the shuttle when retrieving
|
|
1305
|
+
or storing labware.
|
|
1289
1306
|
|
|
1290
|
-
There are four possible stacking configurations, each with a different
|
|
1307
|
+
There are four possible stacking configurations, each with a different method of calculating
|
|
1291
1308
|
the stacking offset:
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
of the unit below.
|
|
1295
|
-
|
|
1296
|
-
of the unit
|
|
1297
|
-
|
|
1298
|
-
lid (topside) of the unit below.
|
|
1309
|
+
|
|
1310
|
+
- Bare labware: labware (bottom side) overlaps with the top side of the labware below.
|
|
1311
|
+
- Labware on adapter: the adapter (bottom side) of the upper labware unit overlaps with the top side of the labware below.
|
|
1312
|
+
- Labware with lid: the labware (bottom side) of the upper unit overlaps with the lid (top side) of the unit below.
|
|
1313
|
+
- Labware with lid and adapter: the adapter (bottom side) of the upper unit overlaps with the
|
|
1314
|
+
lid (top side) of the unit below.
|
|
1299
1315
|
|
|
1300
1316
|
"""
|
|
1301
1317
|
self._core.set_stored_labware_items(
|
|
@@ -1304,6 +1320,7 @@ class FlexStackerContext(ModuleContext):
|
|
|
1304
1320
|
)
|
|
1305
1321
|
|
|
1306
1322
|
@requires_version(2, 25)
|
|
1323
|
+
@publish(command=cmds.flex_stacker_set_stored_labware)
|
|
1307
1324
|
def set_stored_labware(
|
|
1308
1325
|
self,
|
|
1309
1326
|
load_name: str,
|
|
@@ -1314,7 +1331,9 @@ class FlexStackerContext(ModuleContext):
|
|
|
1314
1331
|
count: int | None = None,
|
|
1315
1332
|
stacking_offset_z: float | None = None,
|
|
1316
1333
|
) -> None:
|
|
1317
|
-
"""Configure
|
|
1334
|
+
"""Configure the type and starting quantity of labware the Flex Stacker will store during a protocol. This is the only type of labware you'll be able to store in the Stacker until it's reconfigured.
|
|
1335
|
+
|
|
1336
|
+
You must use this method to load a labware stack stored inside the Stacker before you're able to ``retrieve()`` or ``store()`` additional labware.
|
|
1318
1337
|
|
|
1319
1338
|
:param str load_name: A string to use for looking up a labware definition.
|
|
1320
1339
|
You can find the ``load_name`` for any Opentrons-verified labware on the
|
|
@@ -1330,39 +1349,35 @@ class FlexStackerContext(ModuleContext):
|
|
|
1330
1349
|
definition whose ``load_name`` is the same as an Opentrons-verified
|
|
1331
1350
|
definition, and you want to explicitly choose one or the other.
|
|
1332
1351
|
:param version: The version of the labware definition. You should normally
|
|
1333
|
-
leave this unspecified to let
|
|
1352
|
+
leave this unspecified to let the method choose a version
|
|
1334
1353
|
automatically.
|
|
1335
1354
|
:param adapter: An adapter to load the labware on top of. Accepts the same
|
|
1336
1355
|
values as the ``load_name`` parameter of :py:meth:`.load_adapter`. The
|
|
1337
1356
|
adapter will use the same namespace as the labware, and the API will
|
|
1338
1357
|
choose the adapter's version automatically.
|
|
1339
1358
|
:param lid: A lid to load the on top of the main labware. Accepts the same
|
|
1340
|
-
values as the ``load_name`` parameter of :py:meth
|
|
1359
|
+
values as the ``load_name`` parameter of :py:meth:`~.ProtocolContext.load_lid_stack`. The
|
|
1341
1360
|
lid will use the same namespace as the labware, and the API will
|
|
1342
1361
|
choose the lid's version automatically.
|
|
1343
|
-
:param count: The number of labware that the Flex Stacker should
|
|
1344
|
-
storing. If not specified, this will be the maximum amount of this kind of
|
|
1362
|
+
:param count: The number of labware that the Flex Stacker should store. If not specified, this will be the maximum amount of this kind of
|
|
1345
1363
|
labware that the Flex Stacker is capable of storing.
|
|
1346
|
-
:param stacking_offset_z: Stacking offset in mm
|
|
1347
|
-
calculated value
|
|
1364
|
+
:param stacking_offset_z: Stacking ``z`` offset in mm of stored labware. If specified, this overrides the
|
|
1365
|
+
calculated value in the labware definition.
|
|
1348
1366
|
|
|
1349
1367
|
.. note::
|
|
1350
1368
|
|
|
1351
|
-
The stacking offset is the amount of vertical overlap (in mm) between the
|
|
1352
|
-
labware unit and the
|
|
1353
|
-
units can fit in the
|
|
1354
|
-
or storing labware.
|
|
1355
|
-
definitions, but you can override it by providing a value here.
|
|
1369
|
+
The stacking offset is the amount of vertical overlap (in mm) between the bottom side of a
|
|
1370
|
+
labware unit and the top side of the unit below. This offset is used to determine how many
|
|
1371
|
+
units can fit in the Stacker and calculates the ``z`` position of the shuttle when retrieving
|
|
1372
|
+
or storing labware.
|
|
1356
1373
|
|
|
1357
|
-
There are four possible stacking configurations, each with a different
|
|
1374
|
+
There are four possible stacking configurations, each with a different method of calculating
|
|
1358
1375
|
the stacking offset:
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
- Labware with lid and adapter: the adapter (bottomside) of the upper unit overlaps the
|
|
1365
|
-
lid (topside) of the unit below.
|
|
1376
|
+
|
|
1377
|
+
- Bare labware: labware (bottom side) overlaps with the top side of the labware below.
|
|
1378
|
+
- Labware on adapter: the adapter (bottom side) of the upper labware unit overlaps with the top side of the labware below.
|
|
1379
|
+
- Labware with lid: the labware (bottom side) of the upper labware unit overlaps with the lid (top side) of the unit below.
|
|
1380
|
+
- Labware with lid and adapter: the adapter (bottom side) of the upper labware unit overlaps with the lid (top side) of the unit below.
|
|
1366
1381
|
|
|
1367
1382
|
"""
|
|
1368
1383
|
self._core.set_stored_labware(
|
|
@@ -1380,12 +1395,15 @@ class FlexStackerContext(ModuleContext):
|
|
|
1380
1395
|
)
|
|
1381
1396
|
|
|
1382
1397
|
@requires_version(2, 25)
|
|
1398
|
+
@publish(command=cmds.flex_stacker_fill)
|
|
1383
1399
|
def fill(self, count: int | None = None, message: str | None = None) -> None:
|
|
1384
|
-
"""Pause the protocol to add
|
|
1400
|
+
"""Pause the protocol to add labware to the Flex Stacker.
|
|
1401
|
+
|
|
1402
|
+
The labware must be the same type the Stacker is configured to store using :py:meth:`.set_stored_labware()`. If no labware type has been set, the API will raise an error.
|
|
1385
1403
|
|
|
1386
|
-
:param message: A message to display in the Opentrons App to note what kind of labware to add.
|
|
1387
1404
|
:param count: The amount of labware the Flex Stacker should hold after this command is executed.
|
|
1388
1405
|
If not specified, the Flex Stacker should be full after this command is executed.
|
|
1406
|
+
:param message: A message to display noting what kind of labware to fill the Stacker with.
|
|
1389
1407
|
"""
|
|
1390
1408
|
self._core.fill(count, message)
|
|
1391
1409
|
|
|
@@ -1393,22 +1411,24 @@ class FlexStackerContext(ModuleContext):
|
|
|
1393
1411
|
def fill_items(self, labware: list[Labware], message: str | None = None) -> None:
|
|
1394
1412
|
"""Pause the protocol to add a specific list of labware to the Flex Stacker.
|
|
1395
1413
|
|
|
1396
|
-
The
|
|
1397
|
-
- It should have at least one item
|
|
1398
|
-
- Its elements should be the same kind of labware previously passed to
|
|
1399
|
-
:py:meth:`.set_stored_labware_items` or loaded by :py:meth:`.set_stored_labware`
|
|
1400
|
-
- Its elements should all be loaded :py:obj:`OFF_DECK`
|
|
1414
|
+
:param labware: The list of labware to add. The list must:
|
|
1401
1415
|
|
|
1402
|
-
|
|
1403
|
-
|
|
1416
|
+
- Contain at least one labware.
|
|
1417
|
+
- Have labware of the same kind previously passed to
|
|
1418
|
+
:py:meth:`.set_stored_labware_items` or loaded by :py:meth:`.set_stored_labware`.
|
|
1419
|
+
- All labware should be loaded :py:obj:`OFF_DECK`.
|
|
1420
|
+
:param message: A message to display noting the labware to fill the Stacker with.
|
|
1404
1421
|
"""
|
|
1405
1422
|
self._core.fill_items(self._labware_to_cores(labware), message)
|
|
1406
1423
|
|
|
1407
1424
|
@requires_version(2, 25)
|
|
1425
|
+
@publish(command=cmds.flex_stacker_empty)
|
|
1408
1426
|
def empty(self, message: str | None = None) -> None:
|
|
1409
|
-
"""Pause the protocol to remove labware
|
|
1427
|
+
"""Pause the protocol to remove all labware stored in the Flex Stacker.
|
|
1410
1428
|
|
|
1411
|
-
|
|
1429
|
+
This method sets the location of all labware currently in the stacker to :py:obj:`OFF_DECK`.
|
|
1430
|
+
|
|
1431
|
+
:param message: A message to display to note what should be removed from
|
|
1412
1432
|
the Flex Stacker.
|
|
1413
1433
|
"""
|
|
1414
1434
|
self._core.empty(
|
|
@@ -1417,9 +1437,11 @@ class FlexStackerContext(ModuleContext):
|
|
|
1417
1437
|
|
|
1418
1438
|
@requires_version(2, 25)
|
|
1419
1439
|
def get_stored_labware(self) -> list[Labware]:
|
|
1420
|
-
"""Get the list of labware currently stored inside the
|
|
1440
|
+
"""Get the list of labware currently stored inside the Stacker.
|
|
1441
|
+
|
|
1442
|
+
This function returns a list of all labware stored in the Stacker based on the labware intially stored using :py:meth:`.set_stored_labware` and any labware added or removed during the protocol.
|
|
1421
1443
|
|
|
1422
|
-
The first element of the list
|
|
1444
|
+
The first element of the list occupies the bottom-most position in the labware stack and would be the labware retrieved by a call to
|
|
1423
1445
|
:py:meth:`.retrieve`.
|
|
1424
1446
|
"""
|
|
1425
1447
|
return self._cores_to_labware(self._core.get_stored_labware())
|
|
@@ -10,6 +10,8 @@ from opentrons.hardware_control.modules.types import (
|
|
|
10
10
|
MagneticModuleModel,
|
|
11
11
|
ThermocyclerModuleModel,
|
|
12
12
|
HeaterShakerModuleModel,
|
|
13
|
+
AbsorbanceReaderModel,
|
|
14
|
+
FlexStackerModuleModel,
|
|
13
15
|
)
|
|
14
16
|
from opentrons_shared_data.pipette.types import PipetteNameType
|
|
15
17
|
from opentrons.types import MountType, DeckSlotName, Location
|
|
@@ -78,6 +80,8 @@ _HARDWARE_TO_PE_MODULE: Dict[HardwareModuleModel, pe_types.ModuleModel] = {
|
|
|
78
80
|
ThermocyclerModuleModel.THERMOCYCLER_V1: pe_types.ModuleModel.THERMOCYCLER_MODULE_V1,
|
|
79
81
|
ThermocyclerModuleModel.THERMOCYCLER_V2: pe_types.ModuleModel.THERMOCYCLER_MODULE_V2,
|
|
80
82
|
HeaterShakerModuleModel.HEATER_SHAKER_V1: pe_types.ModuleModel.HEATER_SHAKER_MODULE_V1,
|
|
83
|
+
AbsorbanceReaderModel.ABSORBANCE_READER_V1: pe_types.ModuleModel.ABSORBANCE_READER_V1,
|
|
84
|
+
FlexStackerModuleModel.FLEX_STACKER_V1: pe_types.ModuleModel.FLEX_STACKER_MODULE_V1,
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
_HIGHER_ORDER_COMMAND_TYPES = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opentrons
|
|
3
|
-
Version: 8.6.
|
|
3
|
+
Version: 8.6.0a11
|
|
4
4
|
Summary: The Opentrons API is a simple framework designed to make writing automated biology lab protocols easy.
|
|
5
5
|
Project-URL: opentrons.com, https://www.opentrons.com
|
|
6
6
|
Project-URL: Source Code On Github, https://github.com/Opentrons/opentrons/tree/edge/api
|
|
@@ -24,7 +24,7 @@ Requires-Dist: click<9,>=8.0.0
|
|
|
24
24
|
Requires-Dist: importlib-metadata>=1.0; python_version < '3.8'
|
|
25
25
|
Requires-Dist: jsonschema<4.18.0,>=3.0.1
|
|
26
26
|
Requires-Dist: numpy<2,>=1.20.0
|
|
27
|
-
Requires-Dist: opentrons-shared-data==8.6.
|
|
27
|
+
Requires-Dist: opentrons-shared-data==8.6.0a11
|
|
28
28
|
Requires-Dist: packaging>=21.0
|
|
29
29
|
Requires-Dist: pydantic-settings<3,>=2
|
|
30
30
|
Requires-Dist: pydantic<3,>=2.0.0
|
|
@@ -32,6 +32,6 @@ Requires-Dist: pyserial>=3.5
|
|
|
32
32
|
Requires-Dist: pyusb==1.2.1
|
|
33
33
|
Requires-Dist: typing-extensions<5,>=4.0.0
|
|
34
34
|
Provides-Extra: flex-hardware
|
|
35
|
-
Requires-Dist: opentrons-hardware[flex]==8.6.
|
|
35
|
+
Requires-Dist: opentrons-hardware[flex]==8.6.0a11; extra == 'flex-hardware'
|
|
36
36
|
Provides-Extra: ot2-hardware
|
|
37
|
-
Requires-Dist: opentrons-hardware==8.6.
|
|
37
|
+
Requires-Dist: opentrons-hardware==8.6.0a11; extra == 'ot2-hardware'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
opentrons/__init__.py,sha256=TQ_Ca_zzAM3iLzAysWKkFkQHG8-imihxDPQbLCYrf-E,4533
|
|
2
|
-
opentrons/_version.py,sha256=
|
|
2
|
+
opentrons/_version.py,sha256=XzkMHritnW-N0LeUA3PW5LD3vls19RpD5UeJgpXrBuI,714
|
|
3
3
|
opentrons/execute.py,sha256=Y88qICDiHWQjU0L4Ou7DI5OXXu7zZcdkUvNUYmZqIfc,29282
|
|
4
4
|
opentrons/legacy_broker.py,sha256=XnuEBBlrHCThc31RFW2UR0tGqctqWZ-CZ9vSC4L9whU,1553
|
|
5
5
|
opentrons/ordered_set.py,sha256=g-SB3qA14yxHu9zjGyc2wC7d2TUCBE6fKZlHAtbPzI8,4082
|
|
@@ -210,11 +210,11 @@ opentrons/hardware_control/scripts/update_module_fw.py,sha256=FqX4y5_Ghs-uY1_Kjb
|
|
|
210
210
|
opentrons/legacy_commands/__init__.py,sha256=erkaz7hc2iHsTtjpFDWrR1V5n47it3U1qxD2zL9CkuE,63
|
|
211
211
|
opentrons/legacy_commands/commands.py,sha256=lgImZ0Y3gZrMKDVioaOXWqa6mMJCNKDa8p-lQhTghWk,14530
|
|
212
212
|
opentrons/legacy_commands/helpers.py,sha256=Bc7mjK6V7b4h472NCx_qSwD0ojd_DM7mPg18tjo1DIQ,5228
|
|
213
|
-
opentrons/legacy_commands/module_commands.py,sha256=
|
|
213
|
+
opentrons/legacy_commands/module_commands.py,sha256=bAqZmsAqXkjf3qzexo9fOs4QxZ-RvcZmdy0_QEcHd7U,9368
|
|
214
214
|
opentrons/legacy_commands/protocol_commands.py,sha256=nPYBrm7j9co83IGWjzae2GOVkEZdu58pXQv3eOdpLzg,1383
|
|
215
215
|
opentrons/legacy_commands/publisher.py,sha256=JRrpF-kG7qt5dwDFbCqeMjokCSwn8BdllMMYnJeDLn8,5440
|
|
216
216
|
opentrons/legacy_commands/robot_commands.py,sha256=c51gVAh-98PxhxmEL_3P80rejkaY58gAQ7S6wNwctao,1642
|
|
217
|
-
opentrons/legacy_commands/types.py,sha256=
|
|
217
|
+
opentrons/legacy_commands/types.py,sha256=cbW_flEmurZIcAh-EOcJp3bgrUCvx3ASTrw1oRqMv10,30745
|
|
218
218
|
opentrons/motion_planning/__init__.py,sha256=Gma3SLAvKbL7QuhVGtL9zFx5vlk_7YBF0TjYZQSiv9s,755
|
|
219
219
|
opentrons/motion_planning/adjacent_slots_getters.py,sha256=z7HkfC8ymAdGHdFq-sC_1_cERX_v29b9x4HKtJ6gp9I,5390
|
|
220
220
|
opentrons/motion_planning/deck_conflict.py,sha256=gIAQYJbSKEn5XM_AoBVCOdp-acQsc0nF5FHaeuF53vg,16757
|
|
@@ -235,7 +235,7 @@ opentrons/protocol_api/deck.py,sha256=94vFceg1SC1bAGd7TvC1ZpYwnJR-VlzurEZ6jkacYe
|
|
|
235
235
|
opentrons/protocol_api/disposal_locations.py,sha256=NRiSGmDR0LnbyEkWSOM-o64uR2fUoB1NWJG7Y7SsJSs,7920
|
|
236
236
|
opentrons/protocol_api/instrument_context.py,sha256=dOg04iqYnNMJ7XnlHBX3tTGiEahc-7feIuErcevRdwY,141216
|
|
237
237
|
opentrons/protocol_api/labware.py,sha256=ZP4QuGadoDp6xtyToupXVSJFnsx4NfWcskRQAH3iU4Y,61443
|
|
238
|
-
opentrons/protocol_api/module_contexts.py,sha256=
|
|
238
|
+
opentrons/protocol_api/module_contexts.py,sha256=HYQ20RV2c-NNwgObQZNxyvVKmy2Ufkf--ILoRmhkcvA,59988
|
|
239
239
|
opentrons/protocol_api/module_validation_and_errors.py,sha256=ljst-M_KK78GnyG3pyZ_6yoYkMY3HORS1QyQyWrme-U,2250
|
|
240
240
|
opentrons/protocol_api/protocol_context.py,sha256=Hzgw3FbCRyd4kWmw4RZwZHJhoGZkmn7ug-Q7JZGCcqs,70298
|
|
241
241
|
opentrons/protocol_api/robot_context.py,sha256=D6ZdpFX30VTtVUDHitsVjabJQXD5TxOV9_Z6sik1LvE,11891
|
|
@@ -520,7 +520,7 @@ opentrons/protocol_runner/__init__.py,sha256=Sr0gBDzNv3nuHPapeNy_IWadhohtwmlhfnB
|
|
|
520
520
|
opentrons/protocol_runner/create_simulating_orchestrator.py,sha256=S1Fu9TMa3NrujcPYTfULHpfqLTkrZPYz7CbcXtcDes0,4249
|
|
521
521
|
opentrons/protocol_runner/json_file_reader.py,sha256=dE9ujq3sWyKF1yFg0AN8h-roGVfvqf1tEcIq5wxHbxE,2341
|
|
522
522
|
opentrons/protocol_runner/json_translator.py,sha256=lrDzHOOkQ19ac4KEdUbfEOnfx-F_QCO-6oGqQZegy4g,12134
|
|
523
|
-
opentrons/protocol_runner/legacy_command_mapper.py,sha256=
|
|
523
|
+
opentrons/protocol_runner/legacy_command_mapper.py,sha256=yUCfnp4sNawFikrujyPo27Ba_aOy-kr-9F3dOK6Zu9Q,37125
|
|
524
524
|
opentrons/protocol_runner/legacy_context_plugin.py,sha256=G_qpeyaLvsCjb72_n96Luy8CPSfgPZpt0QKVzKc6LKY,4730
|
|
525
525
|
opentrons/protocol_runner/protocol_runner.py,sha256=YUHZvttojkYghq82IWYWvTfN2kUZ1oZdm8Fm4K-zftI,21658
|
|
526
526
|
opentrons/protocol_runner/python_protocol_wrappers.py,sha256=KEuM4M7rYD4zLjTqK89T47CiBIZJ42kG0JXWarLUq4E,6511
|
|
@@ -594,8 +594,8 @@ opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
|
|
|
594
594
|
opentrons/util/logging_config.py,sha256=7et4YYuQdWdq_e50U-8vFS_QyNBRgdnqPGAQJm8qrIo,9954
|
|
595
595
|
opentrons/util/logging_queue_handler.py,sha256=ZsSJwy-oV8DXwpYiZisQ1PbYwmK2cOslD46AcyJ1E4I,2484
|
|
596
596
|
opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
|
|
597
|
-
opentrons-8.6.
|
|
598
|
-
opentrons-8.6.
|
|
599
|
-
opentrons-8.6.
|
|
600
|
-
opentrons-8.6.
|
|
601
|
-
opentrons-8.6.
|
|
597
|
+
opentrons-8.6.0a11.dist-info/METADATA,sha256=uZEZHKsnnX6BkeHSzCP31LsjH-ipHwePKN-Ip8JI4hM,1611
|
|
598
|
+
opentrons-8.6.0a11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
599
|
+
opentrons-8.6.0a11.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
|
|
600
|
+
opentrons-8.6.0a11.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
601
|
+
opentrons-8.6.0a11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|