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 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.0a4'
32
- __version_tuple__ = version_tuple = (8, 6, 0, 'a4')
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.labware.raise_if_labware_inaccessible_by_pipette(
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.0a4
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.0a4
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.0a4; extra == 'flex-hardware'
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.0a4; extra == 'ot2-hardware'
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=WJSrToQiwhga_4kOeGmwCYeExl-tmBNZqn8lrV0OMzE,712
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=jgpMoYLV3WhLQ7wNL09LDpua7pgWb5Njf-kg5RTAbyw,12747
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=WBGWFTmBwLPjOBFeqJYxnaSRHvo4pwxvdhT4XUW_FMY,1857
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=l57kZ2z1f52qWIAQGW2551VljU-XTtBA4dvhLCd3gLY,101766
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=CRY84JCj9Y31aA-QWgqboql_PRD7QFZh1ja6Iboo0Wg,61308
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.0a4.dist-info/METADATA,sha256=8VGYsCITV13MYUqpwiIb2WeVOmHoXqaE1utCua6IGuQ,1607
598
- opentrons-8.6.0a4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
599
- opentrons-8.6.0a4.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
600
- opentrons-8.6.0a4.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
601
- opentrons-8.6.0a4.dist-info/RECORD,,
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,,