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.
- opentrons/legacy_commands/commands.py +83 -2
- opentrons/legacy_commands/helpers.py +59 -1
- opentrons/legacy_commands/types.py +30 -0
- opentrons/protocol_api/core/engine/instrument.py +182 -115
- opentrons/protocol_api/core/engine/pipette_movement_conflict.py +6 -14
- opentrons/protocol_api/core/engine/transfer_components_executor.py +30 -25
- opentrons/protocol_api/core/instrument.py +8 -4
- opentrons/protocol_api/core/legacy/legacy_instrument_core.py +9 -30
- opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +8 -4
- opentrons/protocol_api/core/well.py +1 -1
- opentrons/protocol_api/instrument_context.py +144 -73
- opentrons/protocol_api/labware.py +26 -44
- opentrons/protocol_api/protocol_context.py +18 -16
- opentrons/protocol_engine/commands/__init__.py +38 -38
- opentrons/protocol_engine/commands/aspirate_while_tracking.py +38 -65
- opentrons/protocol_engine/commands/command_unions.py +33 -33
- opentrons/protocol_engine/commands/dispense_while_tracking.py +36 -72
- opentrons/protocol_engine/commands/labware_handling_common.py +6 -1
- opentrons/protocol_engine/commands/liquid_probe.py +1 -2
- opentrons/protocol_engine/commands/move_to_well.py +5 -11
- opentrons/protocol_engine/commands/{evotip_dispense.py → pressure_dispense.py} +27 -27
- opentrons/protocol_engine/commands/{evotip_seal_pipette.py → seal_pipette_to_tip.py} +32 -27
- opentrons/protocol_engine/commands/{evotip_unseal_pipette.py → unseal_pipette_from_tip.py} +22 -22
- opentrons/protocol_engine/execution/pipetting.py +1 -0
- opentrons/protocol_engine/labware_offset_standardization.py +22 -1
- opentrons/protocol_engine/resources/deck_configuration_provider.py +8 -4
- opentrons/protocol_engine/state/frustum_helpers.py +12 -4
- opentrons/protocol_engine/state/geometry.py +121 -72
- opentrons/protocol_engine/state/update_types.py +1 -1
- opentrons/protocol_engine/state/wells.py +1 -1
- opentrons/protocol_engine/types/__init__.py +6 -0
- opentrons/protocol_engine/types/well_position.py +18 -1
- opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +1 -1
- opentrons/protocols/labware.py +23 -18
- opentrons/util/logging_config.py +94 -25
- opentrons/util/logging_queue_handler.py +61 -0
- {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/METADATA +4 -4
- {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/RECORD +42 -41
- {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/LICENSE +0 -0
- {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/WHEEL +0 -0
- {opentrons-8.4.0a3.dist-info → opentrons-8.4.0a5.dist-info}/entry_points.txt +0 -0
- {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
|
|
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
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
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"
|
|
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
|
|
1658
|
-
|
|
1659
|
-
|
|
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
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
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
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
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
|
|
1746
|
-
|
|
1747
|
-
|
|
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
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
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
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
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
|
|
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"]
|
|
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
|
-
|
|
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
|
-
..
|
|
330
|
-
|
|
331
|
-
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
1273
|
-
liquid handling operations begin.
|
|
1274
|
-
|
|
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
|
|
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
|
|
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
|
|
1324
|
-
liquid handling
|
|
1325
|
-
|
|
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,
|
|
1371
|
-
|
|
1372
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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
|
-
|
|
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 .
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
)
|
|
407
|
-
from .
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
)
|
|
414
|
-
from .
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
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
|
-
#
|
|
726
|
-
"
|
|
727
|
-
"
|
|
728
|
-
"
|
|
729
|
-
"
|
|
730
|
-
"
|
|
731
|
-
#
|
|
732
|
-
"
|
|
733
|
-
"
|
|
734
|
-
"
|
|
735
|
-
"
|
|
736
|
-
"
|
|
737
|
-
#
|
|
738
|
-
"
|
|
739
|
-
"
|
|
740
|
-
"
|
|
741
|
-
"
|
|
742
|
-
"
|
|
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
|
]
|