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 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.0a9'
32
- __version_tuple__ = version_tuple = (8, 6, 0, 'a9')
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 :py:meth:`load_labware` instead.
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 place it on the shuttle.
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 the labware currently on the Flex Stacker shuttle into the Flex Stacker."""
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 placed on top of each other. To know how many of a given
1191
- labware the Flex Stacker can store, the Flex Stacker must know what labware it is.
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
- You can use this function to take a list of labware and return the elements that the
1194
- stacker can currently store from it. The returned list is then guaranteed to be suitable
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 stacker
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, make sure the same value is used when
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
- You can use this function to take a list of labware and return the elements that the
1224
- stacker can currently store from it. The returned list is then guaranteed to be suitable
1225
- for passing to :py:meth:`.fill`.
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
- The number of elements in the returned list will change as labware is added to or removed from
1228
- the Flex Stacker. To get a list limited to the overall maximum number of labware the Flex Stacker
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 with its current stored labware configuration.
1250
+ """Get the maximum number of labware that the Flex Stacker can store.
1240
1251
 
1241
- You can use this function to get the total number of labware that the Flex Stacker can store. This
1242
- number is the overall maximum and will not change as labware is added or removed. To get the space
1243
- currently available in the Flex Stacker, use :py:meth:`.get_current_storable_labware`.
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
- The number will change as labware is added or removed. To get the overall maximum number of labware the
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 a Flex Stacker by providing an initial list of stored labware objects.
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. There are several
1267
- restrictions on the values of the ``labware`` argument:
1268
- - ``labware`` must have at least one element
1269
- - Elements of ``labware`` will be stored along with their lid, if any, and an adapter they
1270
- rest on, if any. These must be compatible with the Flex Stacker.
1271
- - All elements of ``labware`` must be loaded :py:obj:`OFF_DECK`.
1272
- - All elements of ``labware`` must be the same kind of labware. If any of them have lids, they
1273
- must all have lids, and the lids must be the same. If any of them are on adapters, they all
1274
- must be on adapters, and the adapters must be the same.
1275
- - The number of labware objects must fit in the stacker physically. To make sure the labware
1276
- will fit, use the return value of :py:method:`.get_max_storable_labware_from_list`.
1277
-
1278
- :param labware: A list of labware to load into the stacker.
1279
- :param stacking_offset_z: Stacking offset in mm between labware units to override the
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 bottomside of a
1285
- labware unit and the topside of the unit below. This offset is used to determine how many
1286
- units can fit in the stacker and calculates the Z position of the shuttle when retrieving
1287
- or storing labware. The stacking offset is calculated automatically from the 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 way of calculating
1307
+ There are four possible stacking configurations, each with a different method of calculating
1291
1308
  the stacking offset:
1292
- - Bare labware: labware (bottomside) overlaps with labware (topside)
1293
- - Labware on adapter: the adapter (bottomside) of the upper unit overlaps with labware (topside)
1294
- of the unit below.
1295
- - Labware with lid: the labware (bottomside) of the upper unit overlaps the lid (topside)
1296
- of the unit below.
1297
- - Labware with lid and adapter: the adapter (bottomside) of the upper unit overlaps the
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 what kind of labware the Flex Stacker will store.
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 ``load_labware()`` choose a version
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:`.load_lid_stack`. The
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 start the protocol
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 between labware units to override the
1347
- calculated value from labware definitions.
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 bottomside of a
1352
- labware unit and the topside of the unit below. This offset is used to determine how many
1353
- units can fit in the stacker and calculates the Z position of the shuttle when retrieving
1354
- or storing labware. The stacking offset is calculated automatically from the 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 way of calculating
1374
+ There are four possible stacking configurations, each with a different method of calculating
1358
1375
  the stacking offset:
1359
- - Bare labware: labware (bottomside) overlaps with labware (topside)
1360
- - Labware on adapter: the adapter (bottomside) of the upper unit overlaps with labware (topside)
1361
- of the unit below.
1362
- - Labware with lid: the labware (bottomside) of the upper unit overlaps the lid (topside)
1363
- of the unit below.
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 more labware to the Flex Stacker.
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 ``labware`` argument must follow certain rules:
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
- :param message: A message to display in the Opentrons App.
1403
- :param labware: The list of labware to add, following the rules above.
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 from the Flex Stacker.
1427
+ """Pause the protocol to remove all labware stored in the Flex Stacker.
1410
1428
 
1411
- :param message: A message to display in the Opentrons App to note what should be removed from
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 stacker.
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 is on the bottom and will be the item retrieved by a call to
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.0a9
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.0a9
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.0a9; extra == 'flex-hardware'
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.0a9; extra == 'ot2-hardware'
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=mcOZzafaKAqrw2Ny0k7_2YqUf1Hbmefuy0RnsrBhvmA,712
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=EO2YtrfzCCaGPYjGXWfk6jjSHiEqk1E6D8Ef2qDi1qI,7769
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=dtmHB2VOtsQHFzhdoZgjJZZc8pNGcCnleA5zsi5GTo0,28904
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=zhm2FfciAs2K73cVZ_8OwKcFKAU7VAiTOnCRnQaki_E,57712
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=SSCNe6eUZPZ4wXF6Pe6-plJou8YJkYvG4QdbppOvgS8,36890
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.0a9.dist-info/METADATA,sha256=HvG4RCoHOhItRW5W9BXLVWdA2s_99JqAaMem8veXaHo,1607
598
- opentrons-8.6.0a9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
599
- opentrons-8.6.0a9.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
600
- opentrons-8.6.0a9.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
601
- opentrons-8.6.0a9.dist-info/RECORD,,
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,,