opentrons 8.6.0a4__py3-none-any.whl → 8.6.0a5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- opentrons/_version.py +2 -2
- opentrons/protocol_engine/execution/movement.py +2 -1
- opentrons/protocol_engine/resources/fixture_validation.py +10 -0
- opentrons/protocol_engine/state/geometry.py +45 -0
- opentrons/protocol_engine/state/labware.py +0 -27
- {opentrons-8.6.0a4.dist-info → opentrons-8.6.0a5.dist-info}/METADATA +4 -4
- {opentrons-8.6.0a4.dist-info → opentrons-8.6.0a5.dist-info}/RECORD +10 -10
- {opentrons-8.6.0a4.dist-info → opentrons-8.6.0a5.dist-info}/WHEEL +0 -0
- {opentrons-8.6.0a4.dist-info → opentrons-8.6.0a5.dist-info}/entry_points.txt +0 -0
- {opentrons-8.6.0a4.dist-info → opentrons-8.6.0a5.dist-info}/licenses/LICENSE +0 -0
opentrons/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '8.6.
|
|
32
|
-
__version_tuple__ = version_tuple = (8, 6, 0, '
|
|
31
|
+
__version__ = version = '8.6.0a5'
|
|
32
|
+
__version_tuple__ = version_tuple = (8, 6, 0, 'a5')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"""Movement command handling."""
|
|
2
|
+
|
|
2
3
|
from __future__ import annotations
|
|
3
4
|
|
|
4
5
|
import logging
|
|
@@ -84,7 +85,7 @@ class MovementHandler:
|
|
|
84
85
|
operation_volume: Optional[float] = None,
|
|
85
86
|
) -> Point:
|
|
86
87
|
"""Move to a specific well."""
|
|
87
|
-
self._state_store.
|
|
88
|
+
self._state_store.geometry.raise_if_labware_inaccessible_by_pipette(
|
|
88
89
|
labware_id=labware_id
|
|
89
90
|
)
|
|
90
91
|
|
|
@@ -56,3 +56,13 @@ def is_deck_slot(addressable_area_name: str) -> bool:
|
|
|
56
56
|
def is_abs_reader(addressable_area_name: str) -> bool:
|
|
57
57
|
"""Check if an addressable area is an absorbance plate reader area."""
|
|
58
58
|
return "absorbanceReaderV1" in addressable_area_name
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def is_stacker_shuttle(addressable_area_name: str) -> bool:
|
|
62
|
+
"""Check if an addressable area is a flex stacker shuttle area."""
|
|
63
|
+
return addressable_area_name in [
|
|
64
|
+
"flexStackerModuleV1A4",
|
|
65
|
+
"flexStackerModuleV1B4",
|
|
66
|
+
"flexStackerModuleV1C4",
|
|
67
|
+
"flexStackerModuleV1D4",
|
|
68
|
+
]
|
|
@@ -2361,3 +2361,48 @@ class GeometryView:
|
|
|
2361
2361
|
return pending_labware[labware_id]
|
|
2362
2362
|
except KeyError as ke:
|
|
2363
2363
|
raise lnle from ke
|
|
2364
|
+
|
|
2365
|
+
def raise_if_labware_inaccessible_by_pipette( # noqa: C901
|
|
2366
|
+
self, labware_id: str
|
|
2367
|
+
) -> None:
|
|
2368
|
+
"""Raise an error if the specified location cannot be reached via a pipette."""
|
|
2369
|
+
labware = self._labware.get(labware_id)
|
|
2370
|
+
labware_location = labware.location
|
|
2371
|
+
if isinstance(labware_location, OnLabwareLocation):
|
|
2372
|
+
return self.raise_if_labware_inaccessible_by_pipette(
|
|
2373
|
+
labware_location.labwareId
|
|
2374
|
+
)
|
|
2375
|
+
elif labware.lid_id is not None:
|
|
2376
|
+
raise errors.LocationNotAccessibleByPipetteError(
|
|
2377
|
+
f"Cannot move pipette to {labware.loadName} "
|
|
2378
|
+
"because labware is currently covered by a lid."
|
|
2379
|
+
)
|
|
2380
|
+
elif isinstance(labware_location, AddressableAreaLocation):
|
|
2381
|
+
if fixture_validation.is_staging_slot(labware_location.addressableAreaName):
|
|
2382
|
+
raise errors.LocationNotAccessibleByPipetteError(
|
|
2383
|
+
f"Cannot move pipette to {labware.loadName},"
|
|
2384
|
+
f" labware is on staging slot {labware_location.addressableAreaName}"
|
|
2385
|
+
)
|
|
2386
|
+
elif fixture_validation.is_stacker_shuttle(
|
|
2387
|
+
labware_location.addressableAreaName
|
|
2388
|
+
):
|
|
2389
|
+
raise errors.LocationNotAccessibleByPipetteError(
|
|
2390
|
+
f"Cannot move pipette to {labware.loadName} because it is on a stacker shuttle"
|
|
2391
|
+
)
|
|
2392
|
+
elif (
|
|
2393
|
+
labware_location == OFF_DECK_LOCATION or labware_location == SYSTEM_LOCATION
|
|
2394
|
+
):
|
|
2395
|
+
raise errors.LocationNotAccessibleByPipetteError(
|
|
2396
|
+
f"Cannot move pipette to {labware.loadName}, labware is off-deck."
|
|
2397
|
+
)
|
|
2398
|
+
elif isinstance(labware_location, ModuleLocation):
|
|
2399
|
+
module = self._modules.get(labware_location.moduleId)
|
|
2400
|
+
if ModuleModel.is_flex_stacker(module.model):
|
|
2401
|
+
raise errors.LocationNotAccessibleByPipetteError(
|
|
2402
|
+
f"Cannot move pipette to {labware.loadName}, labware is on a stacker shuttle"
|
|
2403
|
+
)
|
|
2404
|
+
|
|
2405
|
+
elif isinstance(labware_location, InStackerHopperLocation):
|
|
2406
|
+
raise errors.LocationNotAccessibleByPipetteError(
|
|
2407
|
+
f"Cannot move pipette to {labware.loadName}, labware is in a stacker hopper"
|
|
2408
|
+
)
|
|
@@ -58,7 +58,6 @@ from ..types import (
|
|
|
58
58
|
LabwareMovementOffsetData,
|
|
59
59
|
OnDeckLabwareLocation,
|
|
60
60
|
OFF_DECK_LOCATION,
|
|
61
|
-
SYSTEM_LOCATION,
|
|
62
61
|
)
|
|
63
62
|
from ..actions import (
|
|
64
63
|
Action,
|
|
@@ -1036,32 +1035,6 @@ class LabwareView:
|
|
|
1036
1035
|
"""Check if labware is a lid."""
|
|
1037
1036
|
return LabwareRole.lid in self.get_definition(labware_id).allowedRoles
|
|
1038
1037
|
|
|
1039
|
-
def raise_if_labware_inaccessible_by_pipette(self, labware_id: str) -> None:
|
|
1040
|
-
"""Raise an error if the specified location cannot be reached via a pipette."""
|
|
1041
|
-
labware = self.get(labware_id)
|
|
1042
|
-
labware_location = labware.location
|
|
1043
|
-
if isinstance(labware_location, OnLabwareLocation):
|
|
1044
|
-
return self.raise_if_labware_inaccessible_by_pipette(
|
|
1045
|
-
labware_location.labwareId
|
|
1046
|
-
)
|
|
1047
|
-
elif labware.lid_id is not None:
|
|
1048
|
-
raise errors.LocationNotAccessibleByPipetteError(
|
|
1049
|
-
f"Cannot move pipette to {labware.loadName} "
|
|
1050
|
-
"because labware is currently covered by a lid."
|
|
1051
|
-
)
|
|
1052
|
-
elif isinstance(labware_location, AddressableAreaLocation):
|
|
1053
|
-
if fixture_validation.is_staging_slot(labware_location.addressableAreaName):
|
|
1054
|
-
raise errors.LocationNotAccessibleByPipetteError(
|
|
1055
|
-
f"Cannot move pipette to {labware.loadName},"
|
|
1056
|
-
f" labware is on staging slot {labware_location.addressableAreaName}"
|
|
1057
|
-
)
|
|
1058
|
-
elif (
|
|
1059
|
-
labware_location == OFF_DECK_LOCATION or labware_location == SYSTEM_LOCATION
|
|
1060
|
-
):
|
|
1061
|
-
raise errors.LocationNotAccessibleByPipetteError(
|
|
1062
|
-
f"Cannot move pipette to {labware.loadName}, labware is off-deck."
|
|
1063
|
-
)
|
|
1064
|
-
|
|
1065
1038
|
def raise_if_labware_in_location(
|
|
1066
1039
|
self,
|
|
1067
1040
|
location: OnDeckLabwareLocation,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opentrons
|
|
3
|
-
Version: 8.6.
|
|
3
|
+
Version: 8.6.0a5
|
|
4
4
|
Summary: The Opentrons API is a simple framework designed to make writing automated biology lab protocols easy.
|
|
5
5
|
Project-URL: opentrons.com, https://www.opentrons.com
|
|
6
6
|
Project-URL: Source Code On Github, https://github.com/Opentrons/opentrons/tree/edge/api
|
|
@@ -24,7 +24,7 @@ Requires-Dist: click<9,>=8.0.0
|
|
|
24
24
|
Requires-Dist: importlib-metadata>=1.0; python_version < '3.8'
|
|
25
25
|
Requires-Dist: jsonschema<4.18.0,>=3.0.1
|
|
26
26
|
Requires-Dist: numpy<2,>=1.20.0
|
|
27
|
-
Requires-Dist: opentrons-shared-data==8.6.
|
|
27
|
+
Requires-Dist: opentrons-shared-data==8.6.0a5
|
|
28
28
|
Requires-Dist: packaging>=21.0
|
|
29
29
|
Requires-Dist: pydantic-settings<3,>=2
|
|
30
30
|
Requires-Dist: pydantic<3,>=2.0.0
|
|
@@ -32,6 +32,6 @@ Requires-Dist: pyserial>=3.5
|
|
|
32
32
|
Requires-Dist: pyusb==1.2.1
|
|
33
33
|
Requires-Dist: typing-extensions<5,>=4.0.0
|
|
34
34
|
Provides-Extra: flex-hardware
|
|
35
|
-
Requires-Dist: opentrons-hardware[flex]==8.6.
|
|
35
|
+
Requires-Dist: opentrons-hardware[flex]==8.6.0a5; extra == 'flex-hardware'
|
|
36
36
|
Provides-Extra: ot2-hardware
|
|
37
|
-
Requires-Dist: opentrons-hardware==8.6.
|
|
37
|
+
Requires-Dist: opentrons-hardware==8.6.0a5; extra == 'ot2-hardware'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
opentrons/__init__.py,sha256=TQ_Ca_zzAM3iLzAysWKkFkQHG8-imihxDPQbLCYrf-E,4533
|
|
2
|
-
opentrons/_version.py,sha256=
|
|
2
|
+
opentrons/_version.py,sha256=DwgORFlCYMpHF3Y70AkjCmEVbBrAoGaMakKYbXsdrE8,712
|
|
3
3
|
opentrons/execute.py,sha256=Y88qICDiHWQjU0L4Ou7DI5OXXu7zZcdkUvNUYmZqIfc,29282
|
|
4
4
|
opentrons/legacy_broker.py,sha256=XnuEBBlrHCThc31RFW2UR0tGqctqWZ-CZ9vSC4L9whU,1553
|
|
5
5
|
opentrons/ordered_set.py,sha256=g-SB3qA14yxHu9zjGyc2wC7d2TUCBE6fKZlHAtbPzI8,4082
|
|
@@ -427,7 +427,7 @@ opentrons/protocol_engine/execution/gantry_mover.py,sha256=LFTPmzuGRuP6IspgXxIEy
|
|
|
427
427
|
opentrons/protocol_engine/execution/hardware_stopper.py,sha256=ZlhVYEdFfuKqp5slZBkustXcRPy5fJsw2rmfYzHuJkQ,6127
|
|
428
428
|
opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py,sha256=BSFLzSSeELAYZCrCUfJZx5DdlrwU06Ur92TYd0T-hzM,9084
|
|
429
429
|
opentrons/protocol_engine/execution/labware_movement.py,sha256=Bl-Nx3y5-zMlsxL3fcXV04OyiU1JFyqPJTS1Fir_XkA,12962
|
|
430
|
-
opentrons/protocol_engine/execution/movement.py,sha256=
|
|
430
|
+
opentrons/protocol_engine/execution/movement.py,sha256=ZU4K4OHnzZYCZbk3RwfSOC6C3T2jtBlvYMppJhJSF08,12749
|
|
431
431
|
opentrons/protocol_engine/execution/pipetting.py,sha256=cnJYbLiJ2QD1xziD8dkRm0mZG3xOk00klW8Ff8rgSG4,22199
|
|
432
432
|
opentrons/protocol_engine/execution/queue_worker.py,sha256=LM753TrQzJoKUSIrtcaHDOWLe58zcpx-fUOLVpyDlHM,3302
|
|
433
433
|
opentrons/protocol_engine/execution/rail_lights.py,sha256=eiJT6oI_kFk7rFuFkZzISZiLNnpf7Kkh86Kyk9wQ_Jo,590
|
|
@@ -442,7 +442,7 @@ opentrons/protocol_engine/resources/__init__.py,sha256=yvGFYpmLoxHYQff_IwiaEH9vi
|
|
|
442
442
|
opentrons/protocol_engine/resources/deck_configuration_provider.py,sha256=K3_FKHNpeM1_kTjHGBbrMPaCZsbEEOUaY8licOd6Xh8,9411
|
|
443
443
|
opentrons/protocol_engine/resources/deck_data_provider.py,sha256=63c-Hmwy5IbVSoAL3hYoZxizxwzCqbB2KgJptpLX3Bc,3001
|
|
444
444
|
opentrons/protocol_engine/resources/file_provider.py,sha256=6btMCDN7NsyFlV7Icy5vDO7xsgbmtkeAM_KCuQ-GvRo,5903
|
|
445
|
-
opentrons/protocol_engine/resources/fixture_validation.py,sha256=
|
|
445
|
+
opentrons/protocol_engine/resources/fixture_validation.py,sha256=WyGjMjc-DGiNTojesXdwFfCyF3KYl7R2jmEk7teLyxQ,2166
|
|
446
446
|
opentrons/protocol_engine/resources/labware_data_provider.py,sha256=i0otj_dACWHK23mBGjXGwTJtE4sooov2_YQOMIulzJo,3836
|
|
447
447
|
opentrons/protocol_engine/resources/labware_validation.py,sha256=6UkWktVvGNpOrRov4vEZ2A8qbjJMuKlisSQvr4Z749A,2747
|
|
448
448
|
opentrons/protocol_engine/resources/model_utils.py,sha256=C3OHUi-OtuFUm3dS5rApSU3EJ0clnaCZEyBku5sTjzA,941
|
|
@@ -461,9 +461,9 @@ opentrons/protocol_engine/state/commands.py,sha256=y5WE2pKmnMalgHFHEiBnBurO2TZ9w
|
|
|
461
461
|
opentrons/protocol_engine/state/config.py,sha256=7jSGxC6Vqj1eA8fqZ2I3zjlxVXg8pxvcBYMztRIx9Mg,1515
|
|
462
462
|
opentrons/protocol_engine/state/files.py,sha256=w8xxxg8HY0RqKKEGSfHWfrjV54Gb02O3dwtisJ-9j8E,1753
|
|
463
463
|
opentrons/protocol_engine/state/fluid_stack.py,sha256=uwkf0qYk1UX5iU52xmk-e3yLPK8OG-TtMCcBqrkVFpM,5932
|
|
464
|
-
opentrons/protocol_engine/state/geometry.py,sha256=
|
|
464
|
+
opentrons/protocol_engine/state/geometry.py,sha256=o8tefXS_Jekdt82dW4HHVJSnsxCsTFJuG6ogtri2wTY,104065
|
|
465
465
|
opentrons/protocol_engine/state/inner_well_math_utils.py,sha256=UhemsPpcuKwVc-iGXI2-v--miOGNunAnAVznJTVADlQ,20598
|
|
466
|
-
opentrons/protocol_engine/state/labware.py,sha256=
|
|
466
|
+
opentrons/protocol_engine/state/labware.py,sha256=bmNOa6vDFXa-Iow4x_1zNa3tIcNkUvu1OCg3ED2E4i4,59936
|
|
467
467
|
opentrons/protocol_engine/state/liquid_classes.py,sha256=u_z75UYdiFAKG0yB3mr1il4T3qaS0Sotq8sL7KLODP8,2990
|
|
468
468
|
opentrons/protocol_engine/state/liquids.py,sha256=NoesktcQdJUjIVmet1uqqJPf-rzbo4SGemXwQC295W0,2338
|
|
469
469
|
opentrons/protocol_engine/state/modules.py,sha256=2P_3Ks_9hWvtVgttnUqS5wcmWLmMzn2Tjp8CosnFXYM,60737
|
|
@@ -594,8 +594,8 @@ opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
|
|
|
594
594
|
opentrons/util/logging_config.py,sha256=7et4YYuQdWdq_e50U-8vFS_QyNBRgdnqPGAQJm8qrIo,9954
|
|
595
595
|
opentrons/util/logging_queue_handler.py,sha256=ZsSJwy-oV8DXwpYiZisQ1PbYwmK2cOslD46AcyJ1E4I,2484
|
|
596
596
|
opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
|
|
597
|
-
opentrons-8.6.
|
|
598
|
-
opentrons-8.6.
|
|
599
|
-
opentrons-8.6.
|
|
600
|
-
opentrons-8.6.
|
|
601
|
-
opentrons-8.6.
|
|
597
|
+
opentrons-8.6.0a5.dist-info/METADATA,sha256=2vlfyq7YCEWGMNFuGW00_MMEhCX9KPsoQ0CdJub1poM,1607
|
|
598
|
+
opentrons-8.6.0a5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
599
|
+
opentrons-8.6.0a5.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
|
|
600
|
+
opentrons-8.6.0a5.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
601
|
+
opentrons-8.6.0a5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|