opentrons 8.4.0a2__py2.py3-none-any.whl → 8.4.0a3__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.
Potentially problematic release.
This version of opentrons might be problematic. Click here for more details.
- opentrons/protocol_api/core/engine/instrument.py +4 -4
- opentrons/protocol_api/core/instrument.py +3 -3
- opentrons/protocol_api/core/legacy/legacy_instrument_core.py +3 -3
- opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +3 -3
- opentrons/protocol_api/instrument_context.py +75 -17
- opentrons/protocol_engine/commands/flex_stacker/empty.py +6 -6
- opentrons/protocol_engine/commands/flex_stacker/fill.py +6 -6
- opentrons/protocol_engine/commands/flex_stacker/retrieve.py +6 -6
- opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +9 -9
- opentrons/protocol_engine/commands/flex_stacker/store.py +16 -13
- opentrons/protocol_engine/state/geometry.py +4 -4
- opentrons/protocol_engine/types/location.py +2 -1
- {opentrons-8.4.0a2.dist-info → opentrons-8.4.0a3.dist-info}/METADATA +4 -4
- {opentrons-8.4.0a2.dist-info → opentrons-8.4.0a3.dist-info}/RECORD +18 -18
- {opentrons-8.4.0a2.dist-info → opentrons-8.4.0a3.dist-info}/LICENSE +0 -0
- {opentrons-8.4.0a2.dist-info → opentrons-8.4.0a3.dist-info}/WHEEL +0 -0
- {opentrons-8.4.0a2.dist-info → opentrons-8.4.0a3.dist-info}/entry_points.txt +0 -0
- {opentrons-8.4.0a2.dist-info → opentrons-8.4.0a3.dist-info}/top_level.txt +0 -0
|
@@ -1141,7 +1141,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
|
|
|
1141
1141
|
result.nextTipInfo if isinstance(result.nextTipInfo, NextTipInfo) else None
|
|
1142
1142
|
)
|
|
1143
1143
|
|
|
1144
|
-
def
|
|
1144
|
+
def transfer_with_liquid_class( # noqa: C901
|
|
1145
1145
|
self,
|
|
1146
1146
|
liquid_class: LiquidClass,
|
|
1147
1147
|
volume: float,
|
|
@@ -1335,7 +1335,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
|
|
|
1335
1335
|
_drop_tip()
|
|
1336
1336
|
|
|
1337
1337
|
# TODO(spp, 2025-02-25): wire up return tip
|
|
1338
|
-
def
|
|
1338
|
+
def distribute_with_liquid_class( # noqa: C901
|
|
1339
1339
|
self,
|
|
1340
1340
|
liquid_class: LiquidClass,
|
|
1341
1341
|
volume: float,
|
|
@@ -1417,7 +1417,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
|
|
|
1417
1417
|
tip_working_volume=working_volume,
|
|
1418
1418
|
)
|
|
1419
1419
|
):
|
|
1420
|
-
self.
|
|
1420
|
+
self.transfer_with_liquid_class(
|
|
1421
1421
|
liquid_class=liquid_class,
|
|
1422
1422
|
volume=volume,
|
|
1423
1423
|
source=[source for _ in range(len(dest))],
|
|
@@ -1657,7 +1657,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
|
|
|
1657
1657
|
<= tip_working_volume
|
|
1658
1658
|
)
|
|
1659
1659
|
|
|
1660
|
-
def
|
|
1660
|
+
def consolidate_with_liquid_class( # noqa: C901
|
|
1661
1661
|
self,
|
|
1662
1662
|
liquid_class: LiquidClass,
|
|
1663
1663
|
volume: float,
|
|
@@ -359,7 +359,7 @@ class AbstractInstrument(ABC, Generic[WellCoreType, LabwareCoreType]):
|
|
|
359
359
|
...
|
|
360
360
|
|
|
361
361
|
@abstractmethod
|
|
362
|
-
def
|
|
362
|
+
def transfer_with_liquid_class(
|
|
363
363
|
self,
|
|
364
364
|
liquid_class: LiquidClass,
|
|
365
365
|
volume: float,
|
|
@@ -374,7 +374,7 @@ class AbstractInstrument(ABC, Generic[WellCoreType, LabwareCoreType]):
|
|
|
374
374
|
...
|
|
375
375
|
|
|
376
376
|
@abstractmethod
|
|
377
|
-
def
|
|
377
|
+
def distribute_with_liquid_class(
|
|
378
378
|
self,
|
|
379
379
|
liquid_class: LiquidClass,
|
|
380
380
|
volume: float,
|
|
@@ -392,7 +392,7 @@ class AbstractInstrument(ABC, Generic[WellCoreType, LabwareCoreType]):
|
|
|
392
392
|
...
|
|
393
393
|
|
|
394
394
|
@abstractmethod
|
|
395
|
-
def
|
|
395
|
+
def consolidate_with_liquid_class(
|
|
396
396
|
self,
|
|
397
397
|
liquid_class: LiquidClass,
|
|
398
398
|
volume: float,
|
|
@@ -624,7 +624,7 @@ class LegacyInstrumentCore(AbstractInstrument[LegacyWellCore, LegacyLabwareCore]
|
|
|
624
624
|
"""This will never be called because it was added in API 2.16."""
|
|
625
625
|
pass
|
|
626
626
|
|
|
627
|
-
def
|
|
627
|
+
def transfer_with_liquid_class(
|
|
628
628
|
self,
|
|
629
629
|
liquid_class: LiquidClass,
|
|
630
630
|
volume: float,
|
|
@@ -638,7 +638,7 @@ class LegacyInstrumentCore(AbstractInstrument[LegacyWellCore, LegacyLabwareCore]
|
|
|
638
638
|
"""This will never be called because it was added in API 2.23"""
|
|
639
639
|
assert False, "transfer_liquid is not supported in legacy context"
|
|
640
640
|
|
|
641
|
-
def
|
|
641
|
+
def distribute_with_liquid_class(
|
|
642
642
|
self,
|
|
643
643
|
liquid_class: LiquidClass,
|
|
644
644
|
volume: float,
|
|
@@ -652,7 +652,7 @@ class LegacyInstrumentCore(AbstractInstrument[LegacyWellCore, LegacyLabwareCore]
|
|
|
652
652
|
"""This will never be called because it was added in API 2.23"""
|
|
653
653
|
assert False, "distribute_liquid is not supported in legacy context"
|
|
654
654
|
|
|
655
|
-
def
|
|
655
|
+
def consolidate_with_liquid_class(
|
|
656
656
|
self,
|
|
657
657
|
liquid_class: LiquidClass,
|
|
658
658
|
volume: float,
|
|
@@ -513,7 +513,7 @@ class LegacyInstrumentCoreSimulator(
|
|
|
513
513
|
"""This will never be called because it was added in API 2.15."""
|
|
514
514
|
pass
|
|
515
515
|
|
|
516
|
-
def
|
|
516
|
+
def transfer_with_liquid_class(
|
|
517
517
|
self,
|
|
518
518
|
liquid_class: LiquidClass,
|
|
519
519
|
volume: float,
|
|
@@ -527,7 +527,7 @@ class LegacyInstrumentCoreSimulator(
|
|
|
527
527
|
"""This will never be called because it was added in API 2.23."""
|
|
528
528
|
assert False, "transfer_liquid is not supported in legacy context"
|
|
529
529
|
|
|
530
|
-
def
|
|
530
|
+
def distribute_with_liquid_class(
|
|
531
531
|
self,
|
|
532
532
|
liquid_class: LiquidClass,
|
|
533
533
|
volume: float,
|
|
@@ -541,7 +541,7 @@ class LegacyInstrumentCoreSimulator(
|
|
|
541
541
|
"""This will never be called because it was added in API 2.23."""
|
|
542
542
|
assert False, "distribute_liquid is not supported in legacy context"
|
|
543
543
|
|
|
544
|
-
def
|
|
544
|
+
def consolidate_with_liquid_class(
|
|
545
545
|
self,
|
|
546
546
|
liquid_class: LiquidClass,
|
|
547
547
|
volume: float,
|
|
@@ -1509,7 +1509,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1509
1509
|
getattr(self, cmd["method"])(*cmd["args"], **cmd["kwargs"])
|
|
1510
1510
|
|
|
1511
1511
|
@requires_version(2, 23)
|
|
1512
|
-
def
|
|
1512
|
+
def transfer_with_liquid_class(
|
|
1513
1513
|
self,
|
|
1514
1514
|
liquid_class: LiquidClass,
|
|
1515
1515
|
volume: float,
|
|
@@ -1526,11 +1526,32 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1526
1526
|
return_tip: bool = False,
|
|
1527
1527
|
visit_every_well: bool = False,
|
|
1528
1528
|
) -> InstrumentContext:
|
|
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
|
|
1533
|
+
source contains.
|
|
1534
|
+
:type liquid_class: :py:class:`.LiquidClass`
|
|
1532
1535
|
|
|
1533
|
-
:
|
|
1536
|
+
:param volume: The amount, in µL, to aspirate from each source and dispense to
|
|
1537
|
+
each destination.
|
|
1538
|
+
:param source: A single well or a list of wells to aspirate liquid from.
|
|
1539
|
+
:param dest: A single well or a list of wells to dispense liquid into.
|
|
1540
|
+
:param new_tip: When to pick up and drop tips during the command.
|
|
1541
|
+
Defaults to ``"once"``.
|
|
1542
|
+
|
|
1543
|
+
- ``"once"``: Use one tip for the entire command.
|
|
1544
|
+
- ``"always"``: Use a new tip for each set of aspirate and dispense steps.
|
|
1545
|
+
- ``"per source"``: Use one tip for each source well, even if
|
|
1546
|
+
:ref:`tip refilling <complex-tip-refilling>` is required.
|
|
1547
|
+
- ``"never"``: Do not pick up or drop tips at all.
|
|
1548
|
+
|
|
1549
|
+
See :ref:`param-tip-handling` for details.
|
|
1550
|
+
|
|
1551
|
+
:param trash_location: A trash container, well, or other location to dispose of
|
|
1552
|
+
tips. Depending on the liquid class, the pipette may also blow out liquid here.
|
|
1553
|
+
:param return_tip: Whether to drop used tips in their original locations
|
|
1554
|
+
in the tip rack, instead of the trash.
|
|
1534
1555
|
"""
|
|
1535
1556
|
transfer_args = verify_and_normalize_transfer_args(
|
|
1536
1557
|
source=source,
|
|
@@ -1552,7 +1573,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1552
1573
|
" to transfer liquid onto one destinations from many sources, use 'consolidate_liquid'."
|
|
1553
1574
|
)
|
|
1554
1575
|
|
|
1555
|
-
self._core.
|
|
1576
|
+
self._core.transfer_with_liquid_class(
|
|
1556
1577
|
liquid_class=liquid_class,
|
|
1557
1578
|
volume=volume,
|
|
1558
1579
|
source=[
|
|
@@ -1574,7 +1595,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1574
1595
|
return self
|
|
1575
1596
|
|
|
1576
1597
|
@requires_version(2, 23)
|
|
1577
|
-
def
|
|
1598
|
+
def distribute_with_liquid_class(
|
|
1578
1599
|
self,
|
|
1579
1600
|
liquid_class: LiquidClass,
|
|
1580
1601
|
volume: float,
|
|
@@ -1590,12 +1611,30 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1590
1611
|
visit_every_well: bool = False,
|
|
1591
1612
|
) -> InstrumentContext:
|
|
1592
1613
|
"""
|
|
1593
|
-
Distribute liquid from
|
|
1594
|
-
using the specified liquid class properties.
|
|
1614
|
+
Distribute a particular type of liquid from one well to a group of wells.
|
|
1595
1615
|
|
|
1596
|
-
|
|
1616
|
+
: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
|
|
1618
|
+
source contains.
|
|
1619
|
+
:type liquid_class: :py:class:`.LiquidClass`
|
|
1597
1620
|
|
|
1598
|
-
:
|
|
1621
|
+
:param volume: The amount, in µL, to aspirate from the source and dispense to
|
|
1622
|
+
each destination.
|
|
1623
|
+
:param source: A single well to aspirate liquid from.
|
|
1624
|
+
:param dest: A list of wells to dispense liquid into.
|
|
1625
|
+
:param new_tip: When to pick up and drop tips during the command.
|
|
1626
|
+
Defaults to ``"once"``.
|
|
1627
|
+
|
|
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.
|
|
1630
|
+
- ``"never"``: Do not pick up or drop tips at all.
|
|
1631
|
+
|
|
1632
|
+
See :ref:`param-tip-handling` for details.
|
|
1633
|
+
|
|
1634
|
+
:param trash_location: A trash container, well, or other location to dispose of
|
|
1635
|
+
tips. Depending on the liquid class, the pipette may also blow out liquid here.
|
|
1636
|
+
:param return_tip: Whether to drop used tips in their original locations
|
|
1637
|
+
in the tip rack, instead of the trash.
|
|
1599
1638
|
"""
|
|
1600
1639
|
transfer_args = verify_and_normalize_transfer_args(
|
|
1601
1640
|
source=source,
|
|
@@ -1621,7 +1660,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1621
1660
|
)
|
|
1622
1661
|
|
|
1623
1662
|
verified_source = transfer_args.sources_list[0]
|
|
1624
|
-
self._core.
|
|
1663
|
+
self._core.distribute_with_liquid_class(
|
|
1625
1664
|
liquid_class=liquid_class,
|
|
1626
1665
|
volume=volume,
|
|
1627
1666
|
source=(
|
|
@@ -1643,7 +1682,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1643
1682
|
return self
|
|
1644
1683
|
|
|
1645
1684
|
@requires_version(2, 23)
|
|
1646
|
-
def
|
|
1685
|
+
def consolidate_with_liquid_class(
|
|
1647
1686
|
self,
|
|
1648
1687
|
liquid_class: LiquidClass,
|
|
1649
1688
|
volume: float,
|
|
@@ -1659,12 +1698,31 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1659
1698
|
visit_every_well: bool = False,
|
|
1660
1699
|
) -> InstrumentContext:
|
|
1661
1700
|
"""
|
|
1662
|
-
Consolidate liquid from
|
|
1663
|
-
using the specified liquid class properties.
|
|
1701
|
+
Consolidate a particular type of liquid from a group of wells to one well.
|
|
1664
1702
|
|
|
1665
|
-
|
|
1703
|
+
: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
|
|
1705
|
+
source contains.
|
|
1706
|
+
:type liquid_class: :py:class:`.LiquidClass`
|
|
1666
1707
|
|
|
1667
|
-
:
|
|
1708
|
+
:param volume: The amount, in µL, to aspirate from the source and dispense to
|
|
1709
|
+
each destination.
|
|
1710
|
+
:param source: A list of wells to aspirate liquid from.
|
|
1711
|
+
:param dest: A single well to dispense liquid into.
|
|
1712
|
+
:param new_tip: When to pick up and drop tips during the command.
|
|
1713
|
+
Defaults to ``"once"``.
|
|
1714
|
+
|
|
1715
|
+
- ``"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
|
+
- ``"never"``: Do not pick up or drop tips at all.
|
|
1719
|
+
|
|
1720
|
+
See :ref:`param-tip-handling` for details.
|
|
1721
|
+
|
|
1722
|
+
:param trash_location: A trash container, well, or other location to dispose of
|
|
1723
|
+
tips. Depending on the liquid class, the pipette may also blow out liquid here.
|
|
1724
|
+
:param return_tip: Whether to drop used tips in their original locations
|
|
1725
|
+
in the tip rack, instead of the trash.
|
|
1668
1726
|
"""
|
|
1669
1727
|
transfer_args = verify_and_normalize_transfer_args(
|
|
1670
1728
|
source=source,
|
|
@@ -1690,7 +1748,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1690
1748
|
)
|
|
1691
1749
|
|
|
1692
1750
|
verified_dest = transfer_args.destinations_list[0]
|
|
1693
|
-
self._core.
|
|
1751
|
+
self._core.consolidate_with_liquid_class(
|
|
1694
1752
|
liquid_class=liquid_class,
|
|
1695
1753
|
volume=volume,
|
|
1696
1754
|
source=[
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
|
-
from typing import Optional, Literal, TYPE_CHECKING
|
|
6
|
+
from typing import Optional, Literal, TYPE_CHECKING, Annotated
|
|
7
7
|
from typing_extensions import Type
|
|
8
8
|
|
|
9
9
|
from pydantic import BaseModel, Field
|
|
10
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
10
11
|
|
|
11
12
|
from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
12
13
|
from ...errors import (
|
|
@@ -39,12 +40,12 @@ class EmptyParams(BaseModel):
|
|
|
39
40
|
),
|
|
40
41
|
)
|
|
41
42
|
|
|
42
|
-
message: str | None = Field(
|
|
43
|
+
message: str | SkipJsonSchema[None] = Field(
|
|
43
44
|
None,
|
|
44
45
|
description="The message to display on connected clients during a manualWithPause strategy empty.",
|
|
45
46
|
)
|
|
46
47
|
|
|
47
|
-
count: int
|
|
48
|
+
count: Optional[Annotated[int, Field(ge=0)]] = Field(
|
|
48
49
|
None,
|
|
49
50
|
description=(
|
|
50
51
|
"The new count of labware in the pool. If None, default to an empty pool. If this number is "
|
|
@@ -52,7 +53,6 @@ class EmptyParams(BaseModel):
|
|
|
52
53
|
"Do not use the value in the parameters as an outside observer; instead, use the count value "
|
|
53
54
|
"from the results."
|
|
54
55
|
),
|
|
55
|
-
ge=0,
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
|
|
@@ -66,11 +66,11 @@ class EmptyResult(BaseModel):
|
|
|
66
66
|
...,
|
|
67
67
|
description="The labware definition URI of the primary labware.",
|
|
68
68
|
)
|
|
69
|
-
adapterLabwareURI: str | None = Field(
|
|
69
|
+
adapterLabwareURI: str | SkipJsonSchema[None] = Field(
|
|
70
70
|
None,
|
|
71
71
|
description="The labware definition URI of the adapter labware.",
|
|
72
72
|
)
|
|
73
|
-
lidLabwareURI: str | None = Field(
|
|
73
|
+
lidLabwareURI: str | SkipJsonSchema[None] = Field(
|
|
74
74
|
None,
|
|
75
75
|
description="The labware definition URI of the lid labware.",
|
|
76
76
|
)
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"""Command models to engage a user to empty a Flex Stacker."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
|
-
from typing import Optional, Literal, TYPE_CHECKING
|
|
4
|
+
from typing import Optional, Literal, TYPE_CHECKING, Annotated
|
|
5
5
|
from typing_extensions import Type
|
|
6
6
|
|
|
7
7
|
from pydantic import BaseModel, Field
|
|
8
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
8
9
|
|
|
9
10
|
from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
10
11
|
from ...errors import (
|
|
@@ -37,12 +38,12 @@ class FillParams(BaseModel):
|
|
|
37
38
|
),
|
|
38
39
|
)
|
|
39
40
|
|
|
40
|
-
message: str | None = Field(
|
|
41
|
+
message: str | SkipJsonSchema[None] = Field(
|
|
41
42
|
None,
|
|
42
43
|
description="The message to display on connected clients during a manualWithPause strategy fill.",
|
|
43
44
|
)
|
|
44
45
|
|
|
45
|
-
count: int
|
|
46
|
+
count: Optional[Annotated[int, Field(ge=1)]] = Field(
|
|
46
47
|
None,
|
|
47
48
|
description=(
|
|
48
49
|
"How full the labware pool should now be. If None, default to the maximum amount "
|
|
@@ -52,7 +53,6 @@ class FillParams(BaseModel):
|
|
|
52
53
|
"holds, it will be clamped to that minimum. Do not use the value in the parameters as "
|
|
53
54
|
"an outside observer; instead, use the count value from the results."
|
|
54
55
|
),
|
|
55
|
-
ge=1,
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
|
|
@@ -66,11 +66,11 @@ class FillResult(BaseModel):
|
|
|
66
66
|
...,
|
|
67
67
|
description="The labware definition URI of the primary labware.",
|
|
68
68
|
)
|
|
69
|
-
adapterLabwareURI: str | None = Field(
|
|
69
|
+
adapterLabwareURI: str | SkipJsonSchema[None] = Field(
|
|
70
70
|
None,
|
|
71
71
|
description="The labware definition URI of the adapter labware.",
|
|
72
72
|
)
|
|
73
|
-
lidLabwareURI: str | None = Field(
|
|
73
|
+
lidLabwareURI: str | SkipJsonSchema[None] = Field(
|
|
74
74
|
None,
|
|
75
75
|
description="The labware definition URI of the lid labware.",
|
|
76
76
|
)
|
|
@@ -86,33 +86,33 @@ class RetrieveResult(BaseModel):
|
|
|
86
86
|
...,
|
|
87
87
|
description="The labware ID of the primary retrieved labware.",
|
|
88
88
|
)
|
|
89
|
-
adapterId: str | None = Field(
|
|
89
|
+
adapterId: str | SkipJsonSchema[None] = Field(
|
|
90
90
|
None,
|
|
91
91
|
description="The optional Adapter Labware ID of the adapter under a primary labware.",
|
|
92
92
|
)
|
|
93
|
-
lidId: str | None = Field(
|
|
93
|
+
lidId: str | SkipJsonSchema[None] = Field(
|
|
94
94
|
None,
|
|
95
95
|
description="The optional Lid Labware ID of the lid on a primary labware.",
|
|
96
96
|
)
|
|
97
97
|
primaryLocationSequence: LabwareLocationSequence = Field(
|
|
98
98
|
..., description="The origin location of the primary labware."
|
|
99
99
|
)
|
|
100
|
-
lidLocationSequence: LabwareLocationSequence | None = Field(
|
|
100
|
+
lidLocationSequence: LabwareLocationSequence | SkipJsonSchema[None] = Field(
|
|
101
101
|
None,
|
|
102
102
|
description="The origin location of the adapter labware under a primary labware.",
|
|
103
103
|
)
|
|
104
|
-
adapterLocationSequence: LabwareLocationSequence | None = Field(
|
|
104
|
+
adapterLocationSequence: LabwareLocationSequence | SkipJsonSchema[None] = Field(
|
|
105
105
|
None, description="The origin location of the lid labware on a primary labware."
|
|
106
106
|
)
|
|
107
107
|
primaryLabwareURI: str = Field(
|
|
108
108
|
...,
|
|
109
109
|
description="The labware definition URI of the primary labware.",
|
|
110
110
|
)
|
|
111
|
-
adapterLabwareURI: str | None = Field(
|
|
111
|
+
adapterLabwareURI: str | SkipJsonSchema[None] = Field(
|
|
112
112
|
None,
|
|
113
113
|
description="The labware definition URI of the adapter labware.",
|
|
114
114
|
)
|
|
115
|
-
lidLabwareURI: str | None = Field(
|
|
115
|
+
lidLabwareURI: str | SkipJsonSchema[None] = Field(
|
|
116
116
|
None,
|
|
117
117
|
description="The labware definition URI of the lid labware.",
|
|
118
118
|
)
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"""Command models to configure the stored labware pool of a Flex Stacker.."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
|
-
from typing import Optional, Literal, TYPE_CHECKING
|
|
4
|
+
from typing import Optional, Literal, TYPE_CHECKING, Annotated
|
|
5
5
|
from typing_extensions import Type
|
|
6
6
|
|
|
7
7
|
from pydantic import BaseModel, Field
|
|
8
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
8
9
|
|
|
9
10
|
from opentrons_shared_data.labware.labware_definition import LabwareDefinition
|
|
10
11
|
|
|
@@ -45,21 +46,20 @@ class SetStoredLabwareParams(BaseModel):
|
|
|
45
46
|
...,
|
|
46
47
|
description="The details of the primary labware (i.e. not the lid or adapter, if any) stored in the stacker.",
|
|
47
48
|
)
|
|
48
|
-
lidLabware: StackerStoredLabwareDetails | None = Field(
|
|
49
|
+
lidLabware: StackerStoredLabwareDetails | SkipJsonSchema[None] = Field(
|
|
49
50
|
default=None,
|
|
50
51
|
description="The details of the lid on the primary labware, if any.",
|
|
51
52
|
)
|
|
52
|
-
adapterLabware: StackerStoredLabwareDetails | None = Field(
|
|
53
|
+
adapterLabware: StackerStoredLabwareDetails | SkipJsonSchema[None] = Field(
|
|
53
54
|
default=None,
|
|
54
55
|
description="The details of the adapter under the primary labware, if any.",
|
|
55
56
|
)
|
|
56
|
-
initialCount: int
|
|
57
|
+
initialCount: Optional[Annotated[int, Field(ge=0)]] = Field(
|
|
57
58
|
None,
|
|
58
59
|
description=(
|
|
59
60
|
"The number of labware that should be initially stored in the stacker. This number will be silently clamped to "
|
|
60
61
|
"the maximum number of labware that will fit; do not rely on the parameter to know how many labware are in the stacker."
|
|
61
62
|
),
|
|
62
|
-
ge=0,
|
|
63
63
|
)
|
|
64
64
|
|
|
65
65
|
|
|
@@ -69,11 +69,11 @@ class SetStoredLabwareResult(BaseModel):
|
|
|
69
69
|
primaryLabwareDefinition: LabwareDefinition = Field(
|
|
70
70
|
..., description="The definition of the primary labware."
|
|
71
71
|
)
|
|
72
|
-
lidLabwareDefinition: LabwareDefinition | None = Field(
|
|
73
|
-
|
|
72
|
+
lidLabwareDefinition: LabwareDefinition | SkipJsonSchema[None] = Field(
|
|
73
|
+
None, description="The definition of the lid on the primary labware, if any."
|
|
74
74
|
)
|
|
75
|
-
adapterLabwareDefinition: LabwareDefinition | None = Field(
|
|
76
|
-
|
|
75
|
+
adapterLabwareDefinition: LabwareDefinition | SkipJsonSchema[None] = Field(
|
|
76
|
+
None,
|
|
77
77
|
description="The definition of the adapter under the primary labware, if any.",
|
|
78
78
|
)
|
|
79
79
|
count: int = Field(
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
from typing import Optional, Literal, TYPE_CHECKING, Type, Union
|
|
5
5
|
|
|
6
6
|
from pydantic import BaseModel, Field
|
|
7
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
7
8
|
|
|
8
9
|
from ..command import (
|
|
9
10
|
AbstractCommandImpl,
|
|
@@ -51,39 +52,41 @@ class StoreParams(BaseModel):
|
|
|
51
52
|
class StoreResult(BaseModel):
|
|
52
53
|
"""Result data from a labware storage command."""
|
|
53
54
|
|
|
54
|
-
eventualDestinationLocationSequence: LabwareLocationSequence |
|
|
55
|
+
eventualDestinationLocationSequence: LabwareLocationSequence | SkipJsonSchema[
|
|
56
|
+
None
|
|
57
|
+
] = Field(
|
|
55
58
|
None,
|
|
56
59
|
description=(
|
|
57
60
|
"The full location in which all labware moved by this command will eventually reside."
|
|
58
61
|
),
|
|
59
62
|
)
|
|
60
|
-
primaryOriginLocationSequence: LabwareLocationSequence |
|
|
61
|
-
None
|
|
62
|
-
)
|
|
63
|
-
primaryLabwareId: str | None = Field(
|
|
63
|
+
primaryOriginLocationSequence: LabwareLocationSequence | SkipJsonSchema[
|
|
64
|
+
None
|
|
65
|
+
] = Field(None, description=("The origin location of the primary labware."))
|
|
66
|
+
primaryLabwareId: str | SkipJsonSchema[None] = Field(
|
|
64
67
|
None, description="The primary labware in the stack that was stored."
|
|
65
68
|
)
|
|
66
|
-
adapterOriginLocationSequence: LabwareLocationSequence |
|
|
67
|
-
None
|
|
68
|
-
)
|
|
69
|
-
adapterLabwareId: str | None = Field(
|
|
69
|
+
adapterOriginLocationSequence: LabwareLocationSequence | SkipJsonSchema[
|
|
70
|
+
None
|
|
71
|
+
] = Field(None, description=("The origin location of the adapter labware, if any."))
|
|
72
|
+
adapterLabwareId: str | SkipJsonSchema[None] = Field(
|
|
70
73
|
None, description="The adapter in the stack that was stored, if any."
|
|
71
74
|
)
|
|
72
|
-
lidOriginLocationSequence: LabwareLocationSequence | None = Field(
|
|
75
|
+
lidOriginLocationSequence: LabwareLocationSequence | SkipJsonSchema[None] = Field(
|
|
73
76
|
None, description=("The origin location of the lid labware, if any.")
|
|
74
77
|
)
|
|
75
|
-
lidLabwareId: str | None = Field(
|
|
78
|
+
lidLabwareId: str | SkipJsonSchema[None] = Field(
|
|
76
79
|
None, description="The lid in the stack that was stored, if any."
|
|
77
80
|
)
|
|
78
81
|
primaryLabwareURI: str = Field(
|
|
79
82
|
...,
|
|
80
83
|
description="The labware definition URI of the primary labware.",
|
|
81
84
|
)
|
|
82
|
-
adapterLabwareURI: str | None = Field(
|
|
85
|
+
adapterLabwareURI: str | SkipJsonSchema[None] = Field(
|
|
83
86
|
None,
|
|
84
87
|
description="The labware definition URI of the adapter labware.",
|
|
85
88
|
)
|
|
86
|
-
lidLabwareURI: str | None = Field(
|
|
89
|
+
lidLabwareURI: str | SkipJsonSchema[None] = Field(
|
|
87
90
|
None,
|
|
88
91
|
description="The labware definition URI of the lid labware.",
|
|
89
92
|
)
|
|
@@ -484,20 +484,20 @@ class GeometryView:
|
|
|
484
484
|
if z_offset < lld_min_height:
|
|
485
485
|
if isinstance(well_location, PickUpTipWellLocation):
|
|
486
486
|
raise OperationLocationNotInWellError(
|
|
487
|
-
f"Specifying {well_location.origin} with
|
|
487
|
+
f"Specifying {well_location.origin} with a height offset of {well_location.offset.z} results in a height of {z_offset} mm; the minimum allowed height for liquid tracking is {lld_min_height} mm"
|
|
488
488
|
)
|
|
489
489
|
else:
|
|
490
490
|
raise OperationLocationNotInWellError(
|
|
491
|
-
f"Specifying {well_location.origin} with
|
|
491
|
+
f"Specifying {well_location.origin} with a height offset of {well_location.offset.z} results in a height of {z_offset} mm; the minimum allowed height for liquid tracking is {lld_min_height} mm"
|
|
492
492
|
)
|
|
493
493
|
elif z_offset < 0:
|
|
494
494
|
if isinstance(well_location, PickUpTipWellLocation):
|
|
495
495
|
raise OperationLocationNotInWellError(
|
|
496
|
-
f"Specifying {well_location.origin} with an offset of {well_location.offset} results in
|
|
496
|
+
f"Specifying {well_location.origin} with an offset of {well_location.offset.z} results in a location below the bottom of the well"
|
|
497
497
|
)
|
|
498
498
|
else:
|
|
499
499
|
raise OperationLocationNotInWellError(
|
|
500
|
-
f"Specifying {well_location.origin} with an offset of {well_location.offset} and a volume offset of {well_location.volumeOffset} results in
|
|
500
|
+
f"Specifying {well_location.origin} with an offset of {well_location.offset.z} and a volume offset of {well_location.volumeOffset} results in a location below the bottom of the well"
|
|
501
501
|
)
|
|
502
502
|
|
|
503
503
|
def get_well_position(
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
from typing import Literal, Union, TypeGuard
|
|
5
5
|
|
|
6
6
|
from pydantic import BaseModel, Field
|
|
7
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
7
8
|
|
|
8
9
|
from opentrons.types import DeckSlotName, StagingSlotName
|
|
9
10
|
|
|
@@ -107,7 +108,7 @@ class OnLabwareLocationSequenceComponent(BaseModel):
|
|
|
107
108
|
|
|
108
109
|
kind: Literal["onLabware"] = "onLabware"
|
|
109
110
|
labwareId: str
|
|
110
|
-
lidId: str | None
|
|
111
|
+
lidId: str | SkipJsonSchema[None] = Field(None)
|
|
111
112
|
|
|
112
113
|
|
|
113
114
|
class OnModuleLocationSequenceComponent(BaseModel):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: opentrons
|
|
3
|
-
Version: 8.4.
|
|
3
|
+
Version: 8.4.0a3
|
|
4
4
|
Summary: The Opentrons API is a simple framework designed to make writing automated biology lab protocols easy.
|
|
5
5
|
Author: Opentrons
|
|
6
6
|
Author-email: engineering@opentrons.com
|
|
@@ -21,7 +21,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
21
21
|
Classifier: Topic :: Scientific/Engineering
|
|
22
22
|
Requires-Python: >=3.10
|
|
23
23
|
License-File: ../LICENSE
|
|
24
|
-
Requires-Dist: opentrons-shared-data (==8.4.
|
|
24
|
+
Requires-Dist: opentrons-shared-data (==8.4.0a3)
|
|
25
25
|
Requires-Dist: aionotify (==0.3.1)
|
|
26
26
|
Requires-Dist: anyio (<4.0.0,>=3.6.1)
|
|
27
27
|
Requires-Dist: jsonschema (<4.18.0,>=3.0.1)
|
|
@@ -35,9 +35,9 @@ Requires-Dist: pyusb (==1.2.1)
|
|
|
35
35
|
Requires-Dist: packaging (>=21.0)
|
|
36
36
|
Requires-Dist: importlib-metadata (>=1.0) ; python_version < "3.8"
|
|
37
37
|
Provides-Extra: flex-hardware
|
|
38
|
-
Requires-Dist: opentrons-hardware[flex] (==8.4.
|
|
38
|
+
Requires-Dist: opentrons-hardware[flex] (==8.4.0a3) ; extra == 'flex-hardware'
|
|
39
39
|
Provides-Extra: ot2-hardware
|
|
40
|
-
Requires-Dist: opentrons-hardware (==8.4.
|
|
40
|
+
Requires-Dist: opentrons-hardware (==8.4.0a3) ; extra == 'ot2-hardware'
|
|
41
41
|
|
|
42
42
|
.. _Full API Documentation: http://docs.opentrons.com
|
|
43
43
|
|
|
@@ -228,7 +228,7 @@ opentrons/protocol_api/config.py,sha256=r9lyvXjagTX_g3q5FGURPpcz2IA9sSF7Oa_1mKx-
|
|
|
228
228
|
opentrons/protocol_api/create_protocol_context.py,sha256=wwsZje0L__oDnu1Yrihau320_f-ASloR9eL1QCtkOh8,7612
|
|
229
229
|
opentrons/protocol_api/deck.py,sha256=94vFceg1SC1bAGd7TvC1ZpYwnJR-VlzurEZ6jkacYeg,8910
|
|
230
230
|
opentrons/protocol_api/disposal_locations.py,sha256=NRiSGmDR0LnbyEkWSOM-o64uR2fUoB1NWJG7Y7SsJSs,7920
|
|
231
|
-
opentrons/protocol_api/instrument_context.py,sha256=
|
|
231
|
+
opentrons/protocol_api/instrument_context.py,sha256=ae_gLaPote11svliO-Y9QwPlbbvUwqW21l_5Mw0QVyY,115477
|
|
232
232
|
opentrons/protocol_api/labware.py,sha256=q980jPZuBwvgwzIdBRyGn7bsJKiEPoAxO7y3iGPoczk,61406
|
|
233
233
|
opentrons/protocol_api/module_contexts.py,sha256=3tVXj6Q7n-WuTJPU_dvIQLzzGv1P-jsMuDtMVpuhAf8,48291
|
|
234
234
|
opentrons/protocol_api/module_validation_and_errors.py,sha256=XL_m72P8rcvGO2fynY7UzXLcpGuI6X4s0V6Xf735Iyc,1464
|
|
@@ -238,7 +238,7 @@ opentrons/protocol_api/validation.py,sha256=uiVTHyJF3wSh5LLfaIDBTELoMNCAT17E767u
|
|
|
238
238
|
opentrons/protocol_api/core/__init__.py,sha256=-g74o8OtBB0LmmOvwkRvPgrHt7fF7T8FRHDj-x_-Onk,736
|
|
239
239
|
opentrons/protocol_api/core/common.py,sha256=q9ZbfpRdBvB3iDAOCyONtupvkYP5n1hjE-bwqGcwP_U,1172
|
|
240
240
|
opentrons/protocol_api/core/core_map.py,sha256=gq3CIYPxuPvozf8yj8FprqBfs3e4ZJGQ6s0ViPbwV08,1757
|
|
241
|
-
opentrons/protocol_api/core/instrument.py,sha256=
|
|
241
|
+
opentrons/protocol_api/core/instrument.py,sha256=0ubPoOsnA8ZBPVbxb2jfWj7XoFVtiOPgbThj0ODObcE,13455
|
|
242
242
|
opentrons/protocol_api/core/labware.py,sha256=-ZOjkalikXCV3ptehKCNaWGAdKxIdwne8LRFQW9NAm4,4290
|
|
243
243
|
opentrons/protocol_api/core/module.py,sha256=z2STDyqqxZX3y6UyJVDnajeFXMEn1ie2NRBYHhry_XE,13838
|
|
244
244
|
opentrons/protocol_api/core/protocol.py,sha256=v7v28jfeHSfOf-tqFDW2chGtrEatPiZ1y6YNwHfmtAs,9058
|
|
@@ -248,7 +248,7 @@ opentrons/protocol_api/core/well_grid.py,sha256=BU28DKaBgEU_JdZ6pEzrwNxmuh6TkO4z
|
|
|
248
248
|
opentrons/protocol_api/core/engine/__init__.py,sha256=B_5T7zgkWDb1mXPg4NbT-wBkQaK-WVokMMnJRNu7xiM,582
|
|
249
249
|
opentrons/protocol_api/core/engine/deck_conflict.py,sha256=q3JViIAHDthIqq6ce7h2gxw3CHRfYsm5kkwzuXB-Gnc,12334
|
|
250
250
|
opentrons/protocol_api/core/engine/exceptions.py,sha256=aZgNrmYEeuPZm21nX_KZYtvyjv5h_zPjxxgPkEV7_bw,725
|
|
251
|
-
opentrons/protocol_api/core/engine/instrument.py,sha256=
|
|
251
|
+
opentrons/protocol_api/core/engine/instrument.py,sha256=aXX_p08aGjqPT0RlqcS8K1BHHDxFuXrXejY-15uRci4,92666
|
|
252
252
|
opentrons/protocol_api/core/engine/labware.py,sha256=1xvzguNnK7aecFLiJK0gtRrZ5kpwtzLS73HnKvdJ5lc,8413
|
|
253
253
|
opentrons/protocol_api/core/engine/load_labware_params.py,sha256=I4Cb8rqpBhmykQuZE8QRG802APrdCy_TYS88rm_9oGA,7159
|
|
254
254
|
opentrons/protocol_api/core/engine/module_core.py,sha256=MLPgYSRJHUZPZ9rTLvsg3GlpL5b6-Pjk5UBgXCGrL6U,30994
|
|
@@ -263,7 +263,7 @@ opentrons/protocol_api/core/engine/well.py,sha256=PEtDwdC8NkHjqasJaDaVDtzc_WFw-q
|
|
|
263
263
|
opentrons/protocol_api/core/legacy/__init__.py,sha256=_9jCJNKG3SlS_vljVu8HHkZmtLf4F-f-JHALLF5d5go,401
|
|
264
264
|
opentrons/protocol_api/core/legacy/deck.py,sha256=qHqcGo-Kdkl9L1aOE0pwrm9tsAnwkXbt4rIOr_VEP-s,13955
|
|
265
265
|
opentrons/protocol_api/core/legacy/labware_offset_provider.py,sha256=2DLIby9xmUrwLb2ht8hZbvNTxqPhNzWijd7yCb2cqP8,3783
|
|
266
|
-
opentrons/protocol_api/core/legacy/legacy_instrument_core.py,sha256=
|
|
266
|
+
opentrons/protocol_api/core/legacy/legacy_instrument_core.py,sha256=lap6L9kym_uanRjDiZx0X7r8dLvF5pJvtgOy6debXys,27134
|
|
267
267
|
opentrons/protocol_api/core/legacy/legacy_labware_core.py,sha256=WQOgtMlq--zv0Ch7mmraYr9rQBT4ie2zHqwgamBq9J8,8606
|
|
268
268
|
opentrons/protocol_api/core/legacy/legacy_module_core.py,sha256=tUhj88NKBMjCmCg6wjh1e2HX4d5hxjh8ZeJiYXaTaGY,23111
|
|
269
269
|
opentrons/protocol_api/core/legacy/legacy_protocol_core.py,sha256=ZIFC7W6YA61oWWkq5xYGTcI_2S2pmALz16uB1R8HVyQ,23670
|
|
@@ -272,7 +272,7 @@ opentrons/protocol_api/core/legacy/load_info.py,sha256=r-WaH5ZJb3TRCp_zvbMMh0P4B
|
|
|
272
272
|
opentrons/protocol_api/core/legacy/module_geometry.py,sha256=lvWFHZ81-JFw-1VZUW1R3yUIb59xpXT6H3jwlRintRo,21082
|
|
273
273
|
opentrons/protocol_api/core/legacy/well_geometry.py,sha256=n5bEsvYZXXTAqYSAqlXd5t40bUPPrJ2Oj2frBZafQHA,4719
|
|
274
274
|
opentrons/protocol_api/core/legacy_simulator/__init__.py,sha256=m9bLHGDJ6LSYC2WPm8tpOuu0zWSOPIrlybQgjRQBw9k,647
|
|
275
|
-
opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py,sha256=
|
|
275
|
+
opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py,sha256=5inA5v2fVymV6BQBjja_HfYVVNH8ta7tZEt2jwBX5TU,22641
|
|
276
276
|
opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py,sha256=28HrrHzeUfnGKXpZqQ-VM8WbPiadqVhKj2S9y33q6Lo,2910
|
|
277
277
|
opentrons/protocol_engine/__init__.py,sha256=UPSk7MbidkiSH_h4V3yxMvyTePKpRr5DM9-wfkJrlSo,4094
|
|
278
278
|
opentrons/protocol_engine/create_protocol_engine.py,sha256=tfDIsC7_JKlRiCXPB_8tuxRsssU6o0ViRmWbGPtX9QA,7582
|
|
@@ -357,13 +357,13 @@ opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py,s
|
|
|
357
357
|
opentrons/protocol_engine/commands/flex_stacker/__init__.py,sha256=eyzQ4_2HRTxVCoGBWELU5TR_wgCcumuQB_9_yb7qOLE,2266
|
|
358
358
|
opentrons/protocol_engine/commands/flex_stacker/close_latch.py,sha256=ywbnRYQdK78RlbRN0GWZE6kl9IUECZSbrZEs0D2FUrE,2312
|
|
359
359
|
opentrons/protocol_engine/commands/flex_stacker/common.py,sha256=85x0AhqZ6-lOznhoP85GwOQEdab5x751EbQ7SM1y89A,556
|
|
360
|
-
opentrons/protocol_engine/commands/flex_stacker/empty.py,sha256=
|
|
361
|
-
opentrons/protocol_engine/commands/flex_stacker/fill.py,sha256=
|
|
360
|
+
opentrons/protocol_engine/commands/flex_stacker/empty.py,sha256=J14aB6-yMdKBu8GkCGkPQaMDJpX2tPhVNMFHHaGZp7o,5903
|
|
361
|
+
opentrons/protocol_engine/commands/flex_stacker/fill.py,sha256=R9vwsDjbxzLeCtdJWzGq_OYuNzXJIeSHSKuH5R4hwW0,6135
|
|
362
362
|
opentrons/protocol_engine/commands/flex_stacker/open_latch.py,sha256=_LJNynwWfR6zyl3PZj3OMcEpmS5ynw-9X-9vU6eAOQ8,2272
|
|
363
363
|
opentrons/protocol_engine/commands/flex_stacker/prepare_shuttle.py,sha256=AxWVa7RYaqWV0U-C5eZvGwFoz_G5yyD6ee4q90whkRY,3646
|
|
364
|
-
opentrons/protocol_engine/commands/flex_stacker/retrieve.py,sha256=
|
|
365
|
-
opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py,sha256=
|
|
366
|
-
opentrons/protocol_engine/commands/flex_stacker/store.py,sha256=
|
|
364
|
+
opentrons/protocol_engine/commands/flex_stacker/retrieve.py,sha256=45A3zaL88VdzPT1RfM89UycCg9kAoySJUJg216Is_uQ,15493
|
|
365
|
+
opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py,sha256=60rO_-49XPHyP7ELZcxfMe986zxRLXFCMxmZQ6Aon7A,7308
|
|
366
|
+
opentrons/protocol_engine/commands/flex_stacker/store.py,sha256=1D7RwjxltkScpSkZ-iRSLruovbWeEdlKcy_bu6VMZ-0,11089
|
|
367
367
|
opentrons/protocol_engine/commands/heater_shaker/__init__.py,sha256=ImAPrYSUvP8tI7obvoHmrJbjwLldgGNTnFYRgfXj8hI,2757
|
|
368
368
|
opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py,sha256=Q7sqFtzUD8wclRLL2PLWjnClIeLtJsiMCobStvzoJKc,2847
|
|
369
369
|
opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py,sha256=UYeGrTmnGtfw22p0agefI2ZnpukKlIgFcmJv9v58Xnc,2755
|
|
@@ -450,7 +450,7 @@ opentrons/protocol_engine/state/config.py,sha256=7jSGxC6Vqj1eA8fqZ2I3zjlxVXg8pxv
|
|
|
450
450
|
opentrons/protocol_engine/state/files.py,sha256=w8xxxg8HY0RqKKEGSfHWfrjV54Gb02O3dwtisJ-9j8E,1753
|
|
451
451
|
opentrons/protocol_engine/state/fluid_stack.py,sha256=uwkf0qYk1UX5iU52xmk-e3yLPK8OG-TtMCcBqrkVFpM,5932
|
|
452
452
|
opentrons/protocol_engine/state/frustum_helpers.py,sha256=ux9wCwQQXrZ9nr-KldtGTilpyW6zXdG5RfHUIUcqlTw,16822
|
|
453
|
-
opentrons/protocol_engine/state/geometry.py,sha256=
|
|
453
|
+
opentrons/protocol_engine/state/geometry.py,sha256=ptLGfIuFq9uGwxX3C9b8a8mYlS4RzAGhFXKgTpz6aJ4,94800
|
|
454
454
|
opentrons/protocol_engine/state/labware.py,sha256=rehy7R1HIhxx3DTtTHIKxqHoBQJ_1tDhhiculMJeIy8,57556
|
|
455
455
|
opentrons/protocol_engine/state/liquid_classes.py,sha256=u_z75UYdiFAKG0yB3mr1il4T3qaS0Sotq8sL7KLODP8,2990
|
|
456
456
|
opentrons/protocol_engine/state/liquids.py,sha256=NoesktcQdJUjIVmet1uqqJPf-rzbo4SGemXwQC295W0,2338
|
|
@@ -486,7 +486,7 @@ opentrons/protocol_engine/types/liquid.py,sha256=6Ec0fC0SEN3jKHYeFSwbQxdEAj5hxDP
|
|
|
486
486
|
opentrons/protocol_engine/types/liquid_class.py,sha256=SF5WS3s38S87efUqawRGSIYqjhwa4pNx7fB1xdiGHl0,2384
|
|
487
487
|
opentrons/protocol_engine/types/liquid_handling.py,sha256=Xx1GihrNRJJdJJA5zIwWvIYNydbSXAHjSUAliF18Iu0,319
|
|
488
488
|
opentrons/protocol_engine/types/liquid_level_detection.py,sha256=NmEasE7HR3GqtCj8tNBSuMufBLVMPYNbTXSvXVJu_JM,4783
|
|
489
|
-
opentrons/protocol_engine/types/location.py,sha256=
|
|
489
|
+
opentrons/protocol_engine/types/location.py,sha256=qIYBs86RO1ws2aXStmdx0CqEVNF9enlj-ACknf75nSs,5707
|
|
490
490
|
opentrons/protocol_engine/types/module.py,sha256=su7Qw5Z0o-qAGfz0XC6nOqJpgpe84Kx96E9oHUt7Q9I,8921
|
|
491
491
|
opentrons/protocol_engine/types/partial_tip_configuration.py,sha256=4RMtHOAX-dgpXWA737tthj_izTBnhKphBcA24LAKmhI,2760
|
|
492
492
|
opentrons/protocol_engine/types/run_time_parameters.py,sha256=5gH4GmGK7e3OkSClftZT6VA4wXELIvEMgpmQ__waceU,4468
|
|
@@ -582,9 +582,9 @@ opentrons/util/helpers.py,sha256=3hr801bWGbxEcOFAS7f-iOhmnUhoK5qahbB8SIvaCfY,165
|
|
|
582
582
|
opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
|
|
583
583
|
opentrons/util/logging_config.py,sha256=UHoY7dyD6WMYNP5GKowbMxUSG_hlXeI5TaIwksR5u-U,6887
|
|
584
584
|
opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
|
|
585
|
-
opentrons-8.4.
|
|
586
|
-
opentrons-8.4.
|
|
587
|
-
opentrons-8.4.
|
|
588
|
-
opentrons-8.4.
|
|
589
|
-
opentrons-8.4.
|
|
590
|
-
opentrons-8.4.
|
|
585
|
+
opentrons-8.4.0a3.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
586
|
+
opentrons-8.4.0a3.dist-info/METADATA,sha256=CZoqSSIORoNQWj0ebai61XeELxufiPTpZOHmgyVDA30,5084
|
|
587
|
+
opentrons-8.4.0a3.dist-info/WHEEL,sha256=qUzzGenXXuJTzyjFah76kDVqDvnk-YDzY00svnrl84w,109
|
|
588
|
+
opentrons-8.4.0a3.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
|
|
589
|
+
opentrons-8.4.0a3.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
|
|
590
|
+
opentrons-8.4.0a3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|