opentrons 8.4.0a3__py2.py3-none-any.whl → 8.4.0a5__py2.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.
Files changed (42) hide show
  1. opentrons/legacy_commands/commands.py +83 -2
  2. opentrons/legacy_commands/helpers.py +59 -1
  3. opentrons/legacy_commands/types.py +30 -0
  4. opentrons/protocol_api/core/engine/instrument.py +182 -115
  5. opentrons/protocol_api/core/engine/pipette_movement_conflict.py +6 -14
  6. opentrons/protocol_api/core/engine/transfer_components_executor.py +30 -25
  7. opentrons/protocol_api/core/instrument.py +8 -4
  8. opentrons/protocol_api/core/legacy/legacy_instrument_core.py +9 -30
  9. opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +8 -4
  10. opentrons/protocol_api/core/well.py +1 -1
  11. opentrons/protocol_api/instrument_context.py +144 -73
  12. opentrons/protocol_api/labware.py +26 -44
  13. opentrons/protocol_api/protocol_context.py +18 -16
  14. opentrons/protocol_engine/commands/__init__.py +38 -38
  15. opentrons/protocol_engine/commands/aspirate_while_tracking.py +38 -65
  16. opentrons/protocol_engine/commands/command_unions.py +33 -33
  17. opentrons/protocol_engine/commands/dispense_while_tracking.py +36 -72
  18. opentrons/protocol_engine/commands/labware_handling_common.py +6 -1
  19. opentrons/protocol_engine/commands/liquid_probe.py +1 -2
  20. opentrons/protocol_engine/commands/move_to_well.py +5 -11
  21. opentrons/protocol_engine/commands/{evotip_dispense.py → pressure_dispense.py} +27 -27
  22. opentrons/protocol_engine/commands/{evotip_seal_pipette.py → seal_pipette_to_tip.py} +32 -27
  23. opentrons/protocol_engine/commands/{evotip_unseal_pipette.py → unseal_pipette_from_tip.py} +22 -22
  24. opentrons/protocol_engine/execution/pipetting.py +1 -0
  25. opentrons/protocol_engine/labware_offset_standardization.py +22 -1
  26. opentrons/protocol_engine/resources/deck_configuration_provider.py +8 -4
  27. opentrons/protocol_engine/state/frustum_helpers.py +12 -4
  28. opentrons/protocol_engine/state/geometry.py +121 -72
  29. opentrons/protocol_engine/state/update_types.py +1 -1
  30. opentrons/protocol_engine/state/wells.py +1 -1
  31. opentrons/protocol_engine/types/__init__.py +6 -0
  32. opentrons/protocol_engine/types/well_position.py +18 -1
  33. opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +1 -1
  34. opentrons/protocols/labware.py +23 -18
  35. opentrons/util/logging_config.py +94 -25
  36. opentrons/util/logging_queue_handler.py +61 -0
  37. {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/METADATA +4 -4
  38. {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/RECORD +42 -41
  39. {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/LICENSE +0 -0
  40. {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/WHEEL +0 -0
  41. {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/entry_points.txt +0 -0
  42. {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/top_level.txt +0 -0
@@ -42,7 +42,7 @@ from ..protocols.advanced_control.transfers.common import (
42
42
  TransferTipPolicyV2,
43
43
  TransferTipPolicyV2Type,
44
44
  )
45
- from ..protocol_engine.types.liquid_level_detection import LiquidTrackingType
45
+ from ..protocol_engine.types import LiquidTrackingType
46
46
 
47
47
  _DEFAULT_ASPIRATE_CLEARANCE = 1.0
48
48
  _DEFAULT_DISPENSE_CLEARANCE = 1.0
@@ -1529,7 +1529,7 @@ class InstrumentContext(publisher.CommandPublisher):
1529
1529
  """Move a particular type of liquid from one well or group of wells to another.
1530
1530
 
1531
1531
  :param liquid_class: The type of liquid to move. You must specify the liquid class,
1532
- even if you have used :py:meth:`.load_liquid` to indicate what liquid the
1532
+ even if you have used :py:meth:`.Labware.load_liquid` to indicate what liquid the
1533
1533
  source contains.
1534
1534
  :type liquid_class: :py:class:`.LiquidClass`
1535
1535
 
@@ -1552,7 +1552,16 @@ class InstrumentContext(publisher.CommandPublisher):
1552
1552
  tips. Depending on the liquid class, the pipette may also blow out liquid here.
1553
1553
  :param return_tip: Whether to drop used tips in their original locations
1554
1554
  in the tip rack, instead of the trash.
1555
+
1556
+ :meta private:
1555
1557
  """
1558
+ if volume == 0.0:
1559
+ _log.info(
1560
+ f"Transfer of {liquid_class.name} specified with a volume of 0uL."
1561
+ f" Skipping."
1562
+ )
1563
+ return self
1564
+
1556
1565
  transfer_args = verify_and_normalize_transfer_args(
1557
1566
  source=source,
1558
1567
  dest=dest,
@@ -1573,25 +1582,38 @@ class InstrumentContext(publisher.CommandPublisher):
1573
1582
  " to transfer liquid onto one destinations from many sources, use 'consolidate_liquid'."
1574
1583
  )
1575
1584
 
1576
- self._core.transfer_with_liquid_class(
1577
- liquid_class=liquid_class,
1578
- volume=volume,
1579
- source=[
1580
- (types.Location(types.Point(), labware=well), well._core)
1581
- for well in transfer_args.sources_list
1582
- ],
1583
- dest=[
1584
- (types.Location(types.Point(), labware=well), well._core)
1585
- for well in transfer_args.destinations_list
1586
- ],
1587
- new_tip=transfer_args.tip_policy,
1588
- tip_racks=[
1589
- (types.Location(types.Point(), labware=rack), rack._core)
1590
- for rack in transfer_args.tip_racks
1591
- ],
1592
- trash_location=transfer_args.trash_location,
1593
- return_tip=return_tip,
1594
- )
1585
+ with publisher.publish_context(
1586
+ broker=self.broker,
1587
+ command=cmds.transfer_with_liquid_class(
1588
+ instrument=self,
1589
+ liquid_class=liquid_class,
1590
+ volume=volume,
1591
+ source=source,
1592
+ destination=dest,
1593
+ ),
1594
+ ):
1595
+ self._core.transfer_with_liquid_class(
1596
+ liquid_class=liquid_class,
1597
+ volume=volume,
1598
+ source=[
1599
+ (types.Location(types.Point(), labware=well), well._core)
1600
+ for well in transfer_args.sources_list
1601
+ ],
1602
+ dest=[
1603
+ (types.Location(types.Point(), labware=well), well._core)
1604
+ for well in transfer_args.destinations_list
1605
+ ],
1606
+ new_tip=transfer_args.tip_policy,
1607
+ tip_racks=[
1608
+ (types.Location(types.Point(), labware=rack), rack._core)
1609
+ for rack in transfer_args.tip_racks
1610
+ ],
1611
+ starting_tip=self.starting_tip._core
1612
+ if self.starting_tip is not None
1613
+ else None,
1614
+ trash_location=transfer_args.trash_location,
1615
+ return_tip=return_tip,
1616
+ )
1595
1617
  return self
1596
1618
 
1597
1619
  @requires_version(2, 23)
@@ -1614,7 +1636,7 @@ class InstrumentContext(publisher.CommandPublisher):
1614
1636
  Distribute a particular type of liquid from one well to a group of wells.
1615
1637
 
1616
1638
  :param liquid_class: The type of liquid to move. You must specify the liquid class,
1617
- even if you have used :py:meth:`.load_liquid` to indicate what liquid the
1639
+ even if you have used :py:meth:`.Labware.load_liquid` to indicate what liquid the
1618
1640
  source contains.
1619
1641
  :type liquid_class: :py:class:`.LiquidClass`
1620
1642
 
@@ -1625,8 +1647,7 @@ class InstrumentContext(publisher.CommandPublisher):
1625
1647
  :param new_tip: When to pick up and drop tips during the command.
1626
1648
  Defaults to ``"once"``.
1627
1649
 
1628
- - ``"once"`` or ``"per source"``: Use one tip for the entire command.
1629
- - ``"always"``: Use a new tip for each set of aspirate and dispense steps.
1650
+ - ``"once"``: Use one tip for the entire command.
1630
1651
  - ``"never"``: Do not pick up or drop tips at all.
1631
1652
 
1632
1653
  See :ref:`param-tip-handling` for details.
@@ -1635,7 +1656,16 @@ class InstrumentContext(publisher.CommandPublisher):
1635
1656
  tips. Depending on the liquid class, the pipette may also blow out liquid here.
1636
1657
  :param return_tip: Whether to drop used tips in their original locations
1637
1658
  in the tip rack, instead of the trash.
1659
+
1660
+ :meta private:
1638
1661
  """
1662
+ if volume == 0.0:
1663
+ _log.info(
1664
+ f"Distribution of {liquid_class.name} specified with a volume of 0uL."
1665
+ f" Skipping."
1666
+ )
1667
+ return self
1668
+
1639
1669
  transfer_args = verify_and_normalize_transfer_args(
1640
1670
  source=source,
1641
1671
  dest=dest,
@@ -1654,31 +1684,49 @@ class InstrumentContext(publisher.CommandPublisher):
1654
1684
  f"Source should be a single well (or resolve to a single transfer for multi-channel) "
1655
1685
  f"but received {transfer_args.sources_list}."
1656
1686
  )
1657
- if transfer_args.tip_policy == TransferTipPolicyV2.PER_SOURCE:
1658
- raise RuntimeError(
1659
- 'Tip transfer policy "per source" incompatible with distribute.'
1687
+ if transfer_args.tip_policy not in [
1688
+ TransferTipPolicyV2.ONCE,
1689
+ TransferTipPolicyV2.NEVER,
1690
+ ]:
1691
+ raise ValueError(
1692
+ f"Incompatible `new_tip` value of {new_tip}."
1693
+ f" `distribute_with_liquid_class()` only supports `new_tip` values of"
1694
+ f" 'once' and 'never'."
1660
1695
  )
1661
1696
 
1662
1697
  verified_source = transfer_args.sources_list[0]
1663
- self._core.distribute_with_liquid_class(
1664
- liquid_class=liquid_class,
1665
- volume=volume,
1666
- source=(
1667
- types.Location(types.Point(), labware=verified_source),
1668
- verified_source._core,
1698
+ with publisher.publish_context(
1699
+ broker=self.broker,
1700
+ command=cmds.distribute_with_liquid_class(
1701
+ instrument=self,
1702
+ liquid_class=liquid_class,
1703
+ volume=volume,
1704
+ source=source,
1705
+ destination=dest,
1669
1706
  ),
1670
- dest=[
1671
- (types.Location(types.Point(), labware=well), well._core)
1672
- for well in transfer_args.destinations_list
1673
- ],
1674
- new_tip=transfer_args.tip_policy,
1675
- tip_racks=[
1676
- (types.Location(types.Point(), labware=rack), rack._core)
1677
- for rack in transfer_args.tip_racks
1678
- ],
1679
- trash_location=transfer_args.trash_location,
1680
- return_tip=return_tip,
1681
- )
1707
+ ):
1708
+ self._core.distribute_with_liquid_class(
1709
+ liquid_class=liquid_class,
1710
+ volume=volume,
1711
+ source=(
1712
+ types.Location(types.Point(), labware=verified_source),
1713
+ verified_source._core,
1714
+ ),
1715
+ dest=[
1716
+ (types.Location(types.Point(), labware=well), well._core)
1717
+ for well in transfer_args.destinations_list
1718
+ ],
1719
+ new_tip=transfer_args.tip_policy, # type: ignore[arg-type]
1720
+ tip_racks=[
1721
+ (types.Location(types.Point(), labware=rack), rack._core)
1722
+ for rack in transfer_args.tip_racks
1723
+ ],
1724
+ starting_tip=self.starting_tip._core
1725
+ if self.starting_tip is not None
1726
+ else None,
1727
+ trash_location=transfer_args.trash_location,
1728
+ return_tip=return_tip,
1729
+ )
1682
1730
  return self
1683
1731
 
1684
1732
  @requires_version(2, 23)
@@ -1701,7 +1749,7 @@ class InstrumentContext(publisher.CommandPublisher):
1701
1749
  Consolidate a particular type of liquid from a group of wells to one well.
1702
1750
 
1703
1751
  :param liquid_class: The type of liquid to move. You must specify the liquid class,
1704
- even if you have used :py:meth:`.load_liquid` to indicate what liquid the
1752
+ even if you have used :py:meth:`.Labware.load_liquid` to indicate what liquid the
1705
1753
  source contains.
1706
1754
  :type liquid_class: :py:class:`.LiquidClass`
1707
1755
 
@@ -1713,8 +1761,6 @@ class InstrumentContext(publisher.CommandPublisher):
1713
1761
  Defaults to ``"once"``.
1714
1762
 
1715
1763
  - ``"once"``: Use one tip for the entire command.
1716
- - ``"always"``: Use a new tip for each set of aspirate and dispense steps.
1717
- - ``"per source"``: Not available when consolidating.
1718
1764
  - ``"never"``: Do not pick up or drop tips at all.
1719
1765
 
1720
1766
  See :ref:`param-tip-handling` for details.
@@ -1723,7 +1769,16 @@ class InstrumentContext(publisher.CommandPublisher):
1723
1769
  tips. Depending on the liquid class, the pipette may also blow out liquid here.
1724
1770
  :param return_tip: Whether to drop used tips in their original locations
1725
1771
  in the tip rack, instead of the trash.
1772
+
1773
+ :meta private:
1726
1774
  """
1775
+ if volume == 0.0:
1776
+ _log.info(
1777
+ f"Consolidation of {liquid_class.name} specified with a volume of 0uL."
1778
+ f" Skipping."
1779
+ )
1780
+ return self
1781
+
1727
1782
  transfer_args = verify_and_normalize_transfer_args(
1728
1783
  source=source,
1729
1784
  dest=dest,
@@ -1742,31 +1797,49 @@ class InstrumentContext(publisher.CommandPublisher):
1742
1797
  f"Destination should be a single well (or resolve to a single transfer for multi-channel) "
1743
1798
  f"but received {transfer_args.destinations_list}."
1744
1799
  )
1745
- if transfer_args.tip_policy == TransferTipPolicyV2.PER_SOURCE:
1746
- raise RuntimeError(
1747
- 'Tip transfer policy "per source" incompatible with consolidate.'
1800
+ if transfer_args.tip_policy not in [
1801
+ TransferTipPolicyV2.ONCE,
1802
+ TransferTipPolicyV2.NEVER,
1803
+ ]:
1804
+ raise ValueError(
1805
+ f"Incompatible `new_tip` value of {new_tip}."
1806
+ f" `consolidate_with_liquid_class()` only supports `new_tip` values of"
1807
+ f" 'once' and 'never'."
1748
1808
  )
1749
1809
 
1750
1810
  verified_dest = transfer_args.destinations_list[0]
1751
- self._core.consolidate_with_liquid_class(
1752
- liquid_class=liquid_class,
1753
- volume=volume,
1754
- source=[
1755
- (types.Location(types.Point(), labware=well), well._core)
1756
- for well in transfer_args.sources_list
1757
- ],
1758
- dest=(
1759
- types.Location(types.Point(), labware=verified_dest),
1760
- verified_dest._core,
1811
+ with publisher.publish_context(
1812
+ broker=self.broker,
1813
+ command=cmds.consolidate_with_liquid_class(
1814
+ instrument=self,
1815
+ liquid_class=liquid_class,
1816
+ volume=volume,
1817
+ source=source,
1818
+ destination=dest,
1761
1819
  ),
1762
- new_tip=transfer_args.tip_policy,
1763
- tip_racks=[
1764
- (types.Location(types.Point(), labware=rack), rack._core)
1765
- for rack in transfer_args.tip_racks
1766
- ],
1767
- trash_location=transfer_args.trash_location,
1768
- return_tip=return_tip,
1769
- )
1820
+ ):
1821
+ self._core.consolidate_with_liquid_class(
1822
+ liquid_class=liquid_class,
1823
+ volume=volume,
1824
+ source=[
1825
+ (types.Location(types.Point(), labware=well), well._core)
1826
+ for well in transfer_args.sources_list
1827
+ ],
1828
+ dest=(
1829
+ types.Location(types.Point(), labware=verified_dest),
1830
+ verified_dest._core,
1831
+ ),
1832
+ new_tip=transfer_args.tip_policy, # type: ignore[arg-type]
1833
+ tip_racks=[
1834
+ (types.Location(types.Point(), labware=rack), rack._core)
1835
+ for rack in transfer_args.tip_racks
1836
+ ],
1837
+ starting_tip=self.starting_tip._core
1838
+ if self.starting_tip is not None
1839
+ else None,
1840
+ trash_location=transfer_args.trash_location,
1841
+ return_tip=return_tip,
1842
+ )
1770
1843
  return self
1771
1844
 
1772
1845
  @requires_version(2, 0)
@@ -1847,6 +1920,7 @@ class InstrumentContext(publisher.CommandPublisher):
1847
1920
  force_direct=force_direct,
1848
1921
  minimum_z_height=minimum_z_height,
1849
1922
  speed=speed,
1923
+ check_for_movement_conflicts=False,
1850
1924
  )
1851
1925
  else:
1852
1926
  if publish:
@@ -1865,6 +1939,7 @@ class InstrumentContext(publisher.CommandPublisher):
1865
1939
  force_direct=force_direct,
1866
1940
  minimum_z_height=minimum_z_height,
1867
1941
  speed=speed,
1942
+ check_for_movement_conflicts=False,
1868
1943
  )
1869
1944
 
1870
1945
  return self
@@ -2580,10 +2655,6 @@ class InstrumentContext(publisher.CommandPublisher):
2580
2655
  """Check the height of the liquid within a well.
2581
2656
 
2582
2657
  :returns: The height, in mm, of the liquid from the deck.
2583
-
2584
- :meta private:
2585
-
2586
- This is intended for Opentrons internal use only and is not a guaranteed API.
2587
2658
  """
2588
2659
  self._raise_if_pressure_not_supported_by_pipette()
2589
2660
  loc = well.top()
@@ -46,7 +46,7 @@ from opentrons.protocols.api_support.util import (
46
46
  APIVersionError,
47
47
  UnsupportedAPIError,
48
48
  )
49
- from opentrons.protocol_engine.types.liquid_level_detection import LiquidTrackingType
49
+ from opentrons.protocol_engine.types import LiquidTrackingType
50
50
 
51
51
  # TODO(mc, 2022-09-02): re-exports provided for backwards compatibility
52
52
  # remove when their usage is no longer needed
@@ -263,15 +263,15 @@ class Well:
263
263
 
264
264
  @requires_version(2, 21)
265
265
  def meniscus(
266
- self, target: Literal["start", "end", "dynamic"], z: float = 0.0
266
+ self, z: float = 0.0, target: Literal["start", "end", "dynamic"] = "end"
267
267
  ) -> Location:
268
268
  """
269
269
  :param z: An offset on the z-axis, in mm. Positive offsets are higher and
270
270
  negative offsets are lower.
271
- :param target: The relative position inside the well to target when performing a liquid handling operation.
272
- :return: A :py:class:`~opentrons.types.Location` that indicates location is meniscus and that holds the ``z`` offset in its point.z field.
271
+ :param target: The relative position of the liquid meniscus inside the well to target when performing a liquid handling operation.
272
+
273
+ :return: A :py:class:`~opentrons.types.Location` corresponding to the liquid meniscus, plus a target position and ``z`` offset as specified.
273
274
 
274
- :meta private:
275
275
  """
276
276
  return Location(
277
277
  point=Point(x=0, y=0, z=z),
@@ -326,9 +326,9 @@ class Well:
326
326
  :param Liquid liquid: The liquid to load into the well.
327
327
  :param float volume: The volume of liquid to load, in µL.
328
328
 
329
- .. TODO: flag as deprecated in 2.22 docs
330
- In API version 2.22 and later, use :py:meth:`~Labware.load_liquid`, :py:meth:`~Labware.load_liquid_by_well`,
331
- or :py:meth:`~Labware.load_empty` to load liquid into a well.
329
+ .. deprecated:: 2.22
330
+ Use :py:meth:`.Labware.load_liquid`, :py:meth:`.Labware.load_liquid_by_well`, or :py:meth:`.Labware.load_empty` instead.
331
+
332
332
  """
333
333
  self._core.load_liquid(
334
334
  liquid=liquid,
@@ -684,7 +684,7 @@ class Labware:
684
684
  version: Optional[int] = None,
685
685
  ) -> Labware:
686
686
  """
687
- Load a stack of Lids onto a valid Deck Location or Adapter.
687
+ Load a stack of Opentrons Tough Auto-Sealing Lids onto a valid deck location or adapter.
688
688
 
689
689
  :param str load_name: A string to use for looking up a lid definition.
690
690
  You can find the ``load_name`` for any standard lid on the Opentrons
@@ -705,9 +705,7 @@ class Labware:
705
705
  leave this unspecified to let ``load_lid_stack()`` choose a version
706
706
  automatically.
707
707
 
708
- :return: The initialized and loaded labware object representing the Lid Stack.
709
-
710
- :meta private:
708
+ :return: The initialized and loaded labware object representing the lid stack.
711
709
  """
712
710
  if self._api_version < validation.LID_STACK_VERSION_GATE:
713
711
  raise APIVersionError(
@@ -773,11 +771,14 @@ class Labware:
773
771
  you must either use ``set_offset()`` on all of them or none of them.
774
772
  * - 2.14–2.17
775
773
  - ``set_offset()`` is not available, and the API raises an error.
776
- * - 2.18 and newer
774
+ * - 2.18--2.22
777
775
  -
778
776
  - Offsets apply to any labware of the same type, in the same on-deck location.
779
777
  - Offsets can't be set on labware that is currently off-deck.
780
778
  - Offsets do not follow a labware instance when using :py:meth:`.move_labware`.
779
+ * - 2.23 and newer
780
+ -
781
+ On Flex, offsets can apply to all labware of the same type, regardless of their on-deck location.
781
782
 
782
783
  .. note::
783
784
 
@@ -1269,22 +1270,15 @@ class Labware:
1269
1270
  ) -> None:
1270
1271
  """Mark several wells as containing the same amount of liquid.
1271
1272
 
1272
- This method should be called at the beginning of a protocol, soon after loading the labware and before
1273
- liquid handling operations begin. It is a base of information for liquid tracking functionality. If a well in a labware
1274
- has not been named in a call to :py:meth:`~Labware.load_empty`, :py:meth:`~Labware.load_liquid`, or
1275
- :py:meth:`~Labware.load_liquid_by_well`, the volume it contains is unknown and the well's liquid will not be tracked.
1276
-
1277
- For example, to load 10µL of a liquid named ``water`` (defined with :py:meth:`~ProtocolContext.define_liquid`)
1278
- into all the wells of a labware, you could call ``labware.load_liquid(labware.wells(), 10, water)``.
1279
-
1280
- If you want to load different volumes of liquid into different wells, use :py:meth:`~Labware.load_liquid_by_well`.
1281
-
1282
- If you want to mark the well as containing no liquid, use :py:meth:`~Labware.load_empty`.
1273
+ This method should be called at the beginning of a protocol, soon after loading labware and before
1274
+ liquid handling operations begin. Loading liquids is required for liquid tracking functionality. If a well
1275
+ hasn't been assigned a starting volume with :py:meth:`~Labware.load_empty`, :py:meth:`~Labware.load_liquid`, or
1276
+ :py:meth:`~Labware.load_liquid_by_well`, the volume it contains is unknown and the well's liquid will not be tracked throughout the protocol.
1283
1277
 
1284
1278
  :param wells: The wells to load the liquid into.
1285
- :type wells: List of well names or list of Well objects, for instance from :py:meth:`~Labware.wells`.
1279
+ :type wells: List of string well names or list of :py:class:`.Well` objects (e.g., from :py:meth:`~Labware.wells`).
1286
1280
 
1287
- :param volume: The volume of liquid to load into each well, in 10µL.
1281
+ :param volume: The volume of liquid to load into each well.
1288
1282
  :type volume: float
1289
1283
 
1290
1284
  :param liquid: The liquid to load into each well, previously defined by :py:meth:`~ProtocolContext.define_liquid`
@@ -1320,18 +1314,9 @@ class Labware:
1320
1314
  ) -> None:
1321
1315
  """Mark several wells as containing unique volumes of liquid.
1322
1316
 
1323
- This method should be called at the beginning of a protocol, soon after loading the labware and before
1324
- liquid handling operations begin. It is a base of information for liquid tracking functionality. If a well in a labware
1325
- has not been named in a call to :py:meth:`~Labware.load_empty`, :py:meth:`~Labware.load_liquid`, or
1326
- :py:meth:`~Labware.load_liquid_by_well`, the volume it contains is unknown and the well's liquid will not be tracked.
1327
-
1328
- For example, to load a decreasing amount of of a liquid named ``water`` (defined with :py:meth:`~ProtocolContext.define_liquid`)
1329
- into each successive well of a row, you could call
1330
- ``labware.load_liquid_by_well({'A1': 1000, 'A2': 950, 'A3': 900, ..., 'A12': 600}, water)``
1331
-
1332
- If you want to load the same volume of a liquid into multiple wells, it is often easier to use :py:meth:`~Labware.load_liquid`.
1333
-
1334
- If you want to mark the well as containing no liquid, use :py:meth:`~Labware.load_empty`.
1317
+ This method should be called at the beginning of a protocol, soon after loading labware and before
1318
+ liquid handling begins. Loading liquids is required for liquid tracking functionality. If a well hasn't been assigned a starting volume with :py:meth:`~Labware.load_empty`, :py:meth:`~Labware.load_liquid`, or
1319
+ :py:meth:`~Labware.load_liquid_by_well`, the volume it contains is unknown and the well's liquid will not be tracked throughout the protocol.
1335
1320
 
1336
1321
  :param volumes: A dictionary of well names (or :py:class:`Well` objects, for instance from ``labware['A1']``)
1337
1322
  :type wells: Dict[Union[str, Well], float]
@@ -1367,12 +1352,9 @@ class Labware:
1367
1352
  def load_empty(self, wells: Sequence[Union[Well, str]]) -> None:
1368
1353
  """Mark several wells as empty.
1369
1354
 
1370
- This method should be called at the beginning of a protocol, soon after loading the labware and before liquid handling
1371
- operations begin. It is a base of information for liquid tracking functionality. If a well in a labware has not been named
1372
- in a call to :py:meth:`Labware.load_empty`, :py:meth:`Labware.load_liquid`, or :py:meth:`Labware.load_liquid_by_well`, the
1373
- volume it contains is unknown and the well's liquid will not be tracked.
1374
-
1375
- For instance, to mark all wells in the labware as empty, you can call ``labware.load_empty(labware.wells())``.
1355
+ This method should be called at the beginning of a protocol, after loading the labware and before liquid handling
1356
+ begins. Loading liquids is required for liquid tracking functionality. If a well in a labware hasn't been assigned a starting volume with :py:meth:`Labware.load_empty`, :py:meth:`Labware.load_liquid`, or :py:meth:`Labware.load_liquid_by_well`, the
1357
+ volume it contains is unknown and the well's liquid will not be tracked throughout the protocol.
1376
1358
 
1377
1359
  :param wells: The list of wells to mark empty. To mark all wells as empty, pass ``labware.wells()``. You can also specify
1378
1360
  wells by their names (for instance, ``labware.load_empty(['A1', 'A2'])``).
@@ -451,14 +451,14 @@ class ProtocolContext(CommandPublisher):
451
451
  choose the adapter's version automatically.
452
452
 
453
453
  .. versionadded:: 2.15
454
+ :param lid: A lid to load on the top of the main labware. Accepts the same
455
+ values as the ``load_name`` parameter of :py:meth:`.load_lid_stack`. The
456
+ lid will use the same namespace as the labware, and the API will
457
+ choose the adapter's version automatically.
458
+
459
+ .. versionadded:: 2.23
454
460
  """
455
- # TODO: re-include in docstring when 2.23 is ready
456
- # :param lid: A lid to load the on top of the main labware. Accepts the same
457
- # values as the ``load_name`` parameter of :py:meth:`.load_lid_stack`. The
458
- # lid will use the same namespace as the labware, and the API will
459
- # choose the lid's version automatically.
460
- #
461
- # .. versionadded:: 2.23
461
+
462
462
  if isinstance(location, OffDeckType) and self._api_version < APIVersion(2, 15):
463
463
  raise APIVersionError(
464
464
  api_element="Loading a labware off-deck",
@@ -1391,13 +1391,13 @@ class ProtocolContext(CommandPublisher):
1391
1391
  version: Optional[int] = None,
1392
1392
  ) -> Labware:
1393
1393
  """
1394
- Load a stack of Lids onto a valid Deck Location or Adapter.
1394
+ Load a stack of Opentrons Tough Auto-Sealing Lids onto a valid deck location or adapter.
1395
1395
 
1396
1396
  :param str load_name: A string to use for looking up a lid definition.
1397
- You can find the ``load_name`` for any standard lid on the Opentrons
1397
+ You can find the ``load_name`` for any compatible lid on the Opentrons
1398
1398
  `Labware Library <https://labware.opentrons.com>`_.
1399
1399
  :param location: Either a :ref:`deck slot <deck-slots>`,
1400
- like ``1``, ``"1"``, or ``"D1"``, or the a valid Opentrons Adapter.
1400
+ like ``1``, ``"1"``, or ``"D1"``, or a valid Opentrons Adapter.
1401
1401
  :param int quantity: The quantity of lids to be loaded in the stack.
1402
1402
  :param adapter: An adapter to load the lid stack on top of. Accepts the same
1403
1403
  values as the ``load_name`` parameter of :py:meth:`.load_adapter`. The
@@ -1418,9 +1418,10 @@ class ProtocolContext(CommandPublisher):
1418
1418
  leave this unspecified to let ``load_lid_stack()`` choose a version
1419
1419
  automatically.
1420
1420
 
1421
- :return: The initialized and loaded labware object representing the Lid Stack.
1421
+ :return: The initialized and loaded labware object representing the lid stack.
1422
+
1423
+ .. versionadded:: 2.23
1422
1424
 
1423
- :meta private:
1424
1425
  """
1425
1426
  if self._api_version < validation.LID_STACK_VERSION_GATE:
1426
1427
  raise APIVersionError(
@@ -1479,9 +1480,9 @@ class ProtocolContext(CommandPublisher):
1479
1480
  pick_up_offset: Optional[Mapping[str, float]] = None,
1480
1481
  drop_offset: Optional[Mapping[str, float]] = None,
1481
1482
  ) -> Labware | None:
1482
- """Move a lid from a valid source to a new location. Can return a Lid Stack if one is created.
1483
+ """Move a compatible lid from a valid source to a new location. Can return a lid stack if one is created.
1483
1484
 
1484
- :param source_location: Where to take the lid from. This is either:
1485
+ :param source_location: The lid's starting location. This is either:
1485
1486
 
1486
1487
  * A deck slot like ``1``, ``"1"``, or ``"D1"``. See :ref:`deck-slots`.
1487
1488
  * A labware or adapter that's already been loaded on the deck
@@ -1498,7 +1499,7 @@ class ProtocolContext(CommandPublisher):
1498
1499
  with :py:meth:`load_labware` or :py:meth:`load_adapter`.
1499
1500
  * The special constant :py:obj:`OFF_DECK`.
1500
1501
 
1501
- :param use_gripper: Whether to use the Flex Gripper for this movement.
1502
+ :param use_gripper: Whether to use the Flex Gripper to move the lid.
1502
1503
 
1503
1504
  * If ``True``, use the gripper to perform an automatic
1504
1505
  movement. This will raise an error in an OT-2 protocol.
@@ -1515,7 +1516,8 @@ class ProtocolContext(CommandPublisher):
1515
1516
  labware's current and new locations are accessible, i.e., open the Thermocycler lid
1516
1517
  or open the Heater-Shaker's labware latch.
1517
1518
 
1518
- :meta private:
1519
+ .. versionadded:: 2.23
1520
+
1519
1521
  """
1520
1522
  source: Union[LabwareCore, DeckSlotName, StagingSlotName]
1521
1523
  if isinstance(source_location, Labware):
@@ -397,26 +397,26 @@ from .liquid_probe import (
397
397
  TryLiquidProbeCommandType,
398
398
  )
399
399
 
400
- from .evotip_seal_pipette import (
401
- EvotipSealPipette,
402
- EvotipSealPipetteParams,
403
- EvotipSealPipetteCreate,
404
- EvotipSealPipetteResult,
405
- EvotipSealPipetteCommandType,
406
- )
407
- from .evotip_unseal_pipette import (
408
- EvotipUnsealPipette,
409
- EvotipUnsealPipetteParams,
410
- EvotipUnsealPipetteCreate,
411
- EvotipUnsealPipetteResult,
412
- EvotipUnsealPipetteCommandType,
413
- )
414
- from .evotip_dispense import (
415
- EvotipDispense,
416
- EvotipDispenseParams,
417
- EvotipDispenseCreate,
418
- EvotipDispenseResult,
419
- EvotipDispenseCommandType,
400
+ from .seal_pipette_to_tip import (
401
+ SealPipetteToTip,
402
+ SealPipetteToTipParams,
403
+ SealPipetteToTipCreate,
404
+ SealPipetteToTipResult,
405
+ SealPipetteToTipCommandType,
406
+ )
407
+ from .unseal_pipette_from_tip import (
408
+ UnsealPipetteFromTip,
409
+ UnsealPipetteFromTipParams,
410
+ UnsealPipetteFromTipCreate,
411
+ UnsealPipetteFromTipResult,
412
+ UnsealPipetteFromTipCommandType,
413
+ )
414
+ from .pressure_dispense import (
415
+ PressureDispense,
416
+ PressureDispenseParams,
417
+ PressureDispenseCreate,
418
+ PressureDispenseResult,
419
+ PressureDispenseCommandType,
420
420
  )
421
421
 
422
422
  __all__ = [
@@ -722,22 +722,22 @@ __all__ = [
722
722
  "TryLiquidProbeCreate",
723
723
  "TryLiquidProbeResult",
724
724
  "TryLiquidProbeCommandType",
725
- # evotip seal command bundle
726
- "EvotipSealPipette",
727
- "EvotipSealPipetteParams",
728
- "EvotipSealPipetteCreate",
729
- "EvotipSealPipetteResult",
730
- "EvotipSealPipetteCommandType",
731
- # evotip unseal command bundle
732
- "EvotipUnsealPipette",
733
- "EvotipUnsealPipetteParams",
734
- "EvotipUnsealPipetteCreate",
735
- "EvotipUnsealPipetteResult",
736
- "EvotipUnsealPipetteCommandType",
737
- # evotip dispense command bundle
738
- "EvotipDispense",
739
- "EvotipDispenseParams",
740
- "EvotipDispenseCreate",
741
- "EvotipDispenseResult",
742
- "EvotipDispenseCommandType",
725
+ # seal command bundle
726
+ "SealPipetteToTip",
727
+ "SealPipetteToTipParams",
728
+ "SealPipetteToTipCreate",
729
+ "SealPipetteToTipResult",
730
+ "SealPipetteToTipCommandType",
731
+ # unseal command bundle
732
+ "UnsealPipetteFromTip",
733
+ "UnsealPipetteFromTipParams",
734
+ "UnsealPipetteFromTipCreate",
735
+ "UnsealPipetteFromTipResult",
736
+ "UnsealPipetteFromTipCommandType",
737
+ # pressure dispense command bundle
738
+ "PressureDispense",
739
+ "PressureDispenseParams",
740
+ "PressureDispenseCreate",
741
+ "PressureDispenseResult",
742
+ "PressureDispenseCommandType",
743
743
  ]