opentrons 8.0.0a3__py2.py3-none-any.whl → 8.0.0a4__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.
@@ -416,23 +416,48 @@ def _is_within_pipette_extents(
416
416
  pipette_bounding_box_at_loc: Tuple[Point, Point, Point, Point],
417
417
  ) -> bool:
418
418
  """Whether a given point is within the extents of a configured pipette on the specified robot."""
419
- mount = engine_state.pipettes.get_mount(pipette_id)
420
- robot_extent_per_mount = engine_state.geometry.absolute_deck_extents
421
- pip_back_left_bound, pip_front_right_bound, _, _ = pipette_bounding_box_at_loc
422
- pipette_bounds_offsets = engine_state.pipettes.get_pipette_bounding_box(pipette_id)
423
- from_back_right = (
424
- robot_extent_per_mount.back_right[mount]
425
- + pipette_bounds_offsets.back_right_corner
426
- )
427
- from_front_left = (
428
- robot_extent_per_mount.front_left[mount]
429
- + pipette_bounds_offsets.front_left_corner
430
- )
419
+ channels = engine_state.pipettes.get_channels(pipette_id)
420
+ robot_extents = engine_state.geometry.absolute_deck_extents
421
+ (
422
+ pip_back_left_bound,
423
+ pip_front_right_bound,
424
+ pip_back_right_bound,
425
+ pip_front_left_bound,
426
+ ) = pipette_bounding_box_at_loc
427
+
428
+ # Given the padding values accounted for against the deck extents,
429
+ # a pipette is within extents when all of the following are true:
430
+
431
+ # Each corner slot full pickup case:
432
+ # A1: Front right nozzle is within the rear and left-side padding limits
433
+ # D1: Back right nozzle is within the front and left-side padding limits
434
+ # A3 Front left nozzle is within the rear and right-side padding limits
435
+ # D3: Back left nozzle is within the front and right-side padding limits
436
+ # Thermocycler Column A2: Front right nozzle is within padding limits
437
+
438
+ if channels == 96:
439
+ return (
440
+ pip_front_right_bound.y
441
+ <= robot_extents.deck_extents.y + robot_extents.padding_rear
442
+ and pip_front_right_bound.x >= robot_extents.padding_left_side
443
+ and pip_back_right_bound.y >= robot_extents.padding_front
444
+ and pip_back_right_bound.x >= robot_extents.padding_left_side
445
+ and pip_front_left_bound.y
446
+ <= robot_extents.deck_extents.y + robot_extents.padding_rear
447
+ and pip_front_left_bound.x
448
+ <= robot_extents.deck_extents.x + robot_extents.padding_right_side
449
+ and pip_back_left_bound.y >= robot_extents.padding_front
450
+ and pip_back_left_bound.x
451
+ <= robot_extents.deck_extents.x + robot_extents.padding_right_side
452
+ )
453
+ # For 8ch pipettes we only check the rear and front extents
431
454
  return (
432
- from_back_right.x >= pip_back_left_bound.x >= from_front_left.x
433
- and from_back_right.y >= pip_back_left_bound.y >= from_front_left.y
434
- and from_back_right.x >= pip_front_right_bound.x >= from_front_left.x
435
- and from_back_right.y >= pip_front_right_bound.y >= from_front_left.y
455
+ pip_front_right_bound.y
456
+ <= robot_extents.deck_extents.y + robot_extents.padding_rear
457
+ and pip_back_right_bound.y >= robot_extents.padding_front
458
+ and pip_front_left_bound.y
459
+ <= robot_extents.deck_extents.y + robot_extents.padding_rear
460
+ and pip_back_left_bound.y >= robot_extents.padding_front
436
461
  )
437
462
 
438
463
 
@@ -268,7 +268,6 @@ class InstrumentContext(publisher.CommandPublisher):
268
268
  and self._96_tip_config_valid()
269
269
  ):
270
270
  self.require_liquid_presence(well=well)
271
- self.prepare_to_aspirate()
272
271
 
273
272
  with publisher.publish_context(
274
273
  broker=self.broker,
@@ -915,6 +915,7 @@ class ProtocolContext(CommandPublisher):
915
915
  from the Opentrons App or touchscreen.
916
916
  :param bool liquid_presence_detection: If ``True``, enable automatic
917
917
  :ref:`liquid presence detection <lpd>` for Flex 1-, 8-, or 96-channel pipettes.
918
+
918
919
  .. versionadded:: 2.20
919
920
  """
920
921
  instrument_name = validation.ensure_lowercase_name(instrument_name)
@@ -352,6 +352,20 @@ class AddressableAreaView(HasState[AddressableAreaState]):
352
352
  "right": Point(x=right_offset[0], y=right_offset[1], z=right_offset[2]),
353
353
  }
354
354
 
355
+ @cached_property
356
+ def padding_offsets(self) -> Dict[str, float]:
357
+ """The padding offsets to be applied to the deck extents of the robot."""
358
+ rear_offset = self.state.robot_definition["paddingOffsets"]["rear"]
359
+ front_offset = self.state.robot_definition["paddingOffsets"]["front"]
360
+ left_side_offset = self.state.robot_definition["paddingOffsets"]["leftSide"]
361
+ right_side_offset = self.state.robot_definition["paddingOffsets"]["rightSide"]
362
+ return {
363
+ "rear": rear_offset,
364
+ "front": front_offset,
365
+ "left_side": left_side_offset,
366
+ "right_side": right_side_offset,
367
+ }
368
+
355
369
  def get_addressable_area(self, addressable_area_name: str) -> AddressableArea:
356
370
  """Get addressable area."""
357
371
  if not self._state.use_simulated_deck_config:
@@ -77,6 +77,11 @@ class _GripperMoveType(enum.Enum):
77
77
  class _AbsoluteRobotExtents:
78
78
  front_left: Dict[MountType, Point]
79
79
  back_right: Dict[MountType, Point]
80
+ deck_extents: Point
81
+ padding_rear: float
82
+ padding_front: float
83
+ padding_left_side: float
84
+ padding_right_side: float
80
85
 
81
86
 
82
87
  _LabwareLocation = TypeVar("_LabwareLocation", bound=LabwareLocation)
@@ -118,7 +123,13 @@ class GeometryView:
118
123
  MountType.RIGHT: self._addressable_areas.deck_extents + right_offset,
119
124
  }
120
125
  return _AbsoluteRobotExtents(
121
- front_left=front_left_abs, back_right=back_right_abs
126
+ front_left=front_left_abs,
127
+ back_right=back_right_abs,
128
+ deck_extents=self._addressable_areas.deck_extents,
129
+ padding_rear=self._addressable_areas.padding_offsets["rear"],
130
+ padding_front=self._addressable_areas.padding_offsets["front"],
131
+ padding_left_side=self._addressable_areas.padding_offsets["left_side"],
132
+ padding_right_side=self._addressable_areas.padding_offsets["right_side"],
122
133
  )
123
134
 
124
135
  def get_labware_highest_z(self, labware_id: str) -> float:
@@ -845,8 +845,6 @@ class PipetteView(HasState[PipetteState]):
845
845
  - primary_nozzle_offset
846
846
  + pipette_bounds_offsets.front_right_corner
847
847
  )
848
- # TODO (spp, 2024-02-27): remove back right & front left;
849
- # return only back left and front right points.
850
848
  pip_back_right_bound = Point(
851
849
  pip_front_right_bound.x, pip_back_left_bound.y, pip_front_right_bound.z
852
850
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: opentrons
3
- Version: 8.0.0a3
3
+ Version: 8.0.0a4
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.0.0a3
24
+ Requires-Dist: opentrons-shared-data ==8.0.0a4
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
@@ -33,9 +33,9 @@ Requires-Dist: click <9,>=8.0.0
33
33
  Requires-Dist: packaging >=21.0
34
34
  Requires-Dist: importlib-metadata >=1.0 ; python_version < "3.8"
35
35
  Provides-Extra: flex-hardware
36
- Requires-Dist: opentrons-hardware[flex] ==8.0.0a3 ; extra == 'flex-hardware'
36
+ Requires-Dist: opentrons-hardware[flex] ==8.0.0a4 ; extra == 'flex-hardware'
37
37
  Provides-Extra: ot2-hardware
38
- Requires-Dist: opentrons-hardware ==8.0.0a3 ; extra == 'ot2-hardware'
38
+ Requires-Dist: opentrons-hardware ==8.0.0a4 ; extra == 'ot2-hardware'
39
39
 
40
40
  .. _Full API Documentation: http://docs.opentrons.com
41
41
 
@@ -219,11 +219,11 @@ opentrons/protocol_api/config.py,sha256=r9lyvXjagTX_g3q5FGURPpcz2IA9sSF7Oa_1mKx-
219
219
  opentrons/protocol_api/create_protocol_context.py,sha256=wwsZje0L__oDnu1Yrihau320_f-ASloR9eL1QCtkOh8,7612
220
220
  opentrons/protocol_api/deck.py,sha256=94vFceg1SC1bAGd7TvC1ZpYwnJR-VlzurEZ6jkacYeg,8910
221
221
  opentrons/protocol_api/disposal_locations.py,sha256=NRiSGmDR0LnbyEkWSOM-o64uR2fUoB1NWJG7Y7SsJSs,7920
222
- opentrons/protocol_api/instrument_context.py,sha256=Viq1EpJ67IiOXXNKigx4iTW1xtDfx3yQ5PHdy3StzcQ,95849
222
+ opentrons/protocol_api/instrument_context.py,sha256=TqzML0qqGKBKaU4FUEJKZJ23c5kLzZXQR1sfamZaNJw,95810
223
223
  opentrons/protocol_api/labware.py,sha256=cxJp5wWMv-OKLmryEXwPgFL6T6pu8T7SXYlGWaVmB-g,47723
224
224
  opentrons/protocol_api/module_contexts.py,sha256=4uXWnO-w4Znbz27Y8m0uMJ_CR0U3Qy1r1ODntFbYMd0,37325
225
225
  opentrons/protocol_api/module_validation_and_errors.py,sha256=XL_m72P8rcvGO2fynY7UzXLcpGuI6X4s0V6Xf735Iyc,1464
226
- opentrons/protocol_api/protocol_context.py,sha256=SxqZ_vRTPxmceJdYXpI_e2VfWJm_atoCjM1I1UPBMB0,53602
226
+ opentrons/protocol_api/protocol_context.py,sha256=qaCMeIJIGSrGv_iORtkC8ANj5_36el1enBeB5BmJ9FM,53603
227
227
  opentrons/protocol_api/robot_context.py,sha256=vph_ZqfdmREOwLwpjSkXiSZSpI1HO0HuilhqjhgT7Rw,2660
228
228
  opentrons/protocol_api/validation.py,sha256=p9kwYn340lIGHJ88q7L3RsfEgr25Nv1uTMuw4yly7T0,18373
229
229
  opentrons/protocol_api/core/__init__.py,sha256=-g74o8OtBB0LmmOvwkRvPgrHt7fF7T8FRHDj-x_-Onk,736
@@ -236,7 +236,7 @@ opentrons/protocol_api/core/protocol.py,sha256=C70tQe6ZTjYX56rvlSl8MW2CJl0Mb-yZt
236
236
  opentrons/protocol_api/core/well.py,sha256=quBAF0UjcsRcqZy_Cb13NIkfnx4y1VbEHZgGcDIl-wI,2393
237
237
  opentrons/protocol_api/core/well_grid.py,sha256=BU28DKaBgEU_JdZ6pEzrwNxmuh6TkO4zlg7Pq1Rf5Xk,1516
238
238
  opentrons/protocol_api/core/engine/__init__.py,sha256=B_5T7zgkWDb1mXPg4NbT-wBkQaK-WVokMMnJRNu7xiM,582
239
- opentrons/protocol_api/core/engine/deck_conflict.py,sha256=yKN7LbDuZ1ObUOHIQyV8L2lvNuEJKxjV0hx-vVnARb8,23376
239
+ opentrons/protocol_api/core/engine/deck_conflict.py,sha256=EBC15ROS9cEUSnKHzeaL9xOhN_WS3tSNic8S-kkFz-Q,24560
240
240
  opentrons/protocol_api/core/engine/exceptions.py,sha256=aZgNrmYEeuPZm21nX_KZYtvyjv5h_zPjxxgPkEV7_bw,725
241
241
  opentrons/protocol_api/core/engine/instrument.py,sha256=r_2ZF3i_5FZqMdFipu0hXpgx9Pl5mM5_AfX7La8H_TU,35686
242
242
  opentrons/protocol_api/core/engine/labware.py,sha256=xb1osbmcHL80S9RLeqA9qKiA_CdyMNMW0In7Pukegf4,7008
@@ -392,17 +392,17 @@ opentrons/protocol_engine/resources/ot3_validation.py,sha256=0x81JoZBXcj2xUVcOF7
392
392
  opentrons/protocol_engine/resources/pipette_data_provider.py,sha256=NYcQGJYQ-aeEME5nilUlkHF6oWfrNZt0op52bUH0czo,14623
393
393
  opentrons/protocol_engine/state/__init__.py,sha256=l-VhTfs16xika3ZWPqfxovB1Z1GHuPRm-IHWrEOuzAw,1826
394
394
  opentrons/protocol_engine/state/abstract_store.py,sha256=b5cqKZhI6ERZj6gyL0kDutD6ogdQngR3T-JmPATvhi8,631
395
- opentrons/protocol_engine/state/addressable_areas.py,sha256=X1DKa2Cb2Xu1asYgXB0By67iSeToF1ZezmO7EcR3nSM,27553
395
+ opentrons/protocol_engine/state/addressable_areas.py,sha256=Al86_Qv-ikveekNPV4XS50yzFzXMGklUgEotvbg3O8s,28217
396
396
  opentrons/protocol_engine/state/command_history.py,sha256=aNB1Oye3LxAVOvGppCEohv4KT84buJckgngDcDXDvj8,10252
397
397
  opentrons/protocol_engine/state/commands.py,sha256=wNqBp-tb7rgzqp94mYy6vVjxshv50AearJ1y9QWvKi4,41287
398
398
  opentrons/protocol_engine/state/config.py,sha256=7jSGxC6Vqj1eA8fqZ2I3zjlxVXg8pxvcBYMztRIx9Mg,1515
399
- opentrons/protocol_engine/state/geometry.py,sha256=g1YuN5Gsno-AOseitK_rjAjGn_jVZPknq8a9o6r6Uf8,50601
399
+ opentrons/protocol_engine/state/geometry.py,sha256=YT3ILruOwRvAUtDt_C8EV8k_puXAm5oxmhe1wBnWi1I,51129
400
400
  opentrons/protocol_engine/state/labware.py,sha256=sKbX7uN26m3C_84WnSxM-BJ38n1PlPDlxWf6mkYsY_4,37285
401
401
  opentrons/protocol_engine/state/liquids.py,sha256=W7cf-mmVaZ3aNyiormFEy79aSvU__QwDfPVgjFb3lF4,1885
402
402
  opentrons/protocol_engine/state/modules.py,sha256=bylqsYZyVjrnx6BUhDjJb-TofnqPNk0EUYV8j12UINE,50673
403
403
  opentrons/protocol_engine/state/motion.py,sha256=nh0UGOVvmpYynOchGJkVLTyIyiJ9CszRTUvp4Czr_GI,13955
404
404
  opentrons/protocol_engine/state/move_types.py,sha256=zSQj_qYHBi7_-wrpaZBKmX_O-wNZCpLZkCzagOwI-zY,2132
405
- opentrons/protocol_engine/state/pipettes.py,sha256=MDbzNEr2sI80QvTdCwNfB3GqOdiLFFXRG14zLYA5lqs,36176
405
+ opentrons/protocol_engine/state/pipettes.py,sha256=wS7q9Sau86zK5vCcHiSGRdMhWNm26GPKUDNJnSEjEHw,36053
406
406
  opentrons/protocol_engine/state/state.py,sha256=jx044yBfXFV1YO5aqXhJmy7iFx-tXEQ5rIl3lMcrY04,13562
407
407
  opentrons/protocol_engine/state/state_summary.py,sha256=8VCxEOBeUflx8IBYUYtgNdwcwgdVZv3R8rSfzsbai7U,923
408
408
  opentrons/protocol_engine/state/tips.py,sha256=gU2GsmaWPDyIIjWHj3KXv6NqxphfOd4eeNxF40hm5ok,22621
@@ -499,9 +499,9 @@ opentrons/util/helpers.py,sha256=3hr801bWGbxEcOFAS7f-iOhmnUhoK5qahbB8SIvaCfY,165
499
499
  opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
500
500
  opentrons/util/logging_config.py,sha256=g3TdzDKa1pL_N3eKhRYCdqPaZYe_hpLV-e8llObTcT4,5657
501
501
  opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
502
- opentrons-8.0.0a3.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
503
- opentrons-8.0.0a3.dist-info/METADATA,sha256=VCwClY3mFwancF9yu2AwyRWSS9pET6Wk42H8mMVPPZA,4990
504
- opentrons-8.0.0a3.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
505
- opentrons-8.0.0a3.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
506
- opentrons-8.0.0a3.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
507
- opentrons-8.0.0a3.dist-info/RECORD,,
502
+ opentrons-8.0.0a4.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
503
+ opentrons-8.0.0a4.dist-info/METADATA,sha256=gYJjRVCWBigp6_HZem-YgMle4g8vSdMAwswF53rXvUk,4990
504
+ opentrons-8.0.0a4.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
505
+ opentrons-8.0.0a4.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
506
+ opentrons-8.0.0a4.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
507
+ opentrons-8.0.0a4.dist-info/RECORD,,