opentrons 8.7.0a6__py3-none-any.whl → 8.7.0a8__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/_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.7.0a6'
32
- __version_tuple__ = version_tuple = (8, 7, 0, 'a6')
31
+ __version__ = version = '8.7.0a8'
32
+ __version_tuple__ = version_tuple = (8, 7, 0, 'a8')
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -462,7 +462,10 @@ class AsyncResponseSerialConnection(SerialConnection):
462
462
  self._async_error_ack = async_error_ack.lower()
463
463
 
464
464
  async def send_command(
465
- self, command: CommandBuilder, retries: int = 0, timeout: Optional[float] = None
465
+ self,
466
+ command: CommandBuilder,
467
+ retries: int | None = None,
468
+ timeout: float | None = None,
466
469
  ) -> str:
467
470
  """
468
471
  Send a command and return the response.
@@ -478,12 +481,12 @@ class AsyncResponseSerialConnection(SerialConnection):
478
481
  """
479
482
  return await self.send_data(
480
483
  data=command.build(),
481
- retries=retries or self._number_of_retries,
484
+ retries=retries if retries is not None else self._number_of_retries,
482
485
  timeout=timeout,
483
486
  )
484
487
 
485
488
  async def send_data(
486
- self, data: str, retries: int = 0, timeout: Optional[float] = None
489
+ self, data: str, retries: int | None = None, timeout: float | None = None
487
490
  ) -> str:
488
491
  """
489
492
  Send data and return the response.
@@ -501,7 +504,8 @@ class AsyncResponseSerialConnection(SerialConnection):
501
504
  "timeout", timeout
502
505
  ):
503
506
  return await self._send_data(
504
- data=data, retries=retries or self._number_of_retries
507
+ data=data,
508
+ retries=retries if retries is not None else self._number_of_retries,
505
509
  )
506
510
 
507
511
  async def _send_data(self, data: str, retries: int = 0) -> str:
@@ -517,7 +521,6 @@ class AsyncResponseSerialConnection(SerialConnection):
517
521
  Raises: SerialException
518
522
  """
519
523
  data_encode = data.encode()
520
- retries = retries or self._number_of_retries
521
524
 
522
525
  for retry in range(retries + 1):
523
526
  log.debug(f"{self._name}: Write -> {data_encode!r}")
@@ -461,7 +461,12 @@ class FlexStackerDriver(AbstractFlexStackerDriver):
461
461
  command = GCODE.GET_TOF_MEASUREMENT.build_command().add_element(sensor.name)
462
462
  if resend:
463
463
  command.add_element("R")
464
- resp = await self._connection.send_command(command)
464
+
465
+ # Note: We DONT want to auto resend the request if it fails, because the
466
+ # firmware will send the next frame id instead of the current one missed.
467
+ # So lets set `retries=0` so we only send the frame once and we can
468
+ # use the retry mechanism of the `get_tof_histogram` method instead.
469
+ resp = await self._connection.send_command(command, retries=0)
465
470
  return self.parse_get_tof_measurement(resp)
466
471
 
467
472
  async def get_tof_histogram(self, sensor: TOFSensor) -> TOFMeasurementResult:
@@ -451,6 +451,7 @@ class FlexBackend(Protocol):
451
451
  max_allowed_grip_error: float,
452
452
  hard_limit_lower: float,
453
453
  hard_limit_upper: float,
454
+ disable_geometry_grip_check: bool = False,
454
455
  ) -> None:
455
456
  ...
456
457
 
@@ -1763,6 +1763,7 @@ class OT3Controller(FlexBackend):
1763
1763
  max_allowed_grip_error: float,
1764
1764
  hard_limit_lower: float,
1765
1765
  hard_limit_upper: float,
1766
+ disable_geometry_grip_check: bool = False,
1766
1767
  ) -> None:
1767
1768
  """
1768
1769
  Check if the gripper is at the expected location.
@@ -1805,6 +1806,7 @@ class OT3Controller(FlexBackend):
1805
1806
  if (
1806
1807
  current_gripper_position - expected_gripper_position_min
1807
1808
  < -max_allowed_grip_error
1809
+ and not disable_geometry_grip_check
1808
1810
  ):
1809
1811
  raise FailedGripperPickupError(
1810
1812
  message="Failed to grip: jaws closed too far",
@@ -1818,6 +1820,7 @@ class OT3Controller(FlexBackend):
1818
1820
  if (
1819
1821
  current_gripper_position - expected_gripper_position_max
1820
1822
  > max_allowed_grip_error
1823
+ and not disable_geometry_grip_check
1821
1824
  ):
1822
1825
  raise FailedGripperPickupError(
1823
1826
  message="Failed to grip: jaws could not close far enough",
@@ -848,6 +848,7 @@ class OT3Simulator(FlexBackend):
848
848
  max_allowed_grip_error: float,
849
849
  hard_limit_lower: float,
850
850
  hard_limit_upper: float,
851
+ disable_geometry_grip_check: bool = False,
851
852
  ) -> None:
852
853
  # This is a (pretty bad) simulation of the gripper actually gripping something,
853
854
  # but it should work.
@@ -1462,6 +1462,7 @@ class OT3API(
1462
1462
  expected_grip_width: float,
1463
1463
  grip_width_uncertainty_wider: float,
1464
1464
  grip_width_uncertainty_narrower: float,
1465
+ disable_geometry_grip_check: bool = False,
1465
1466
  ) -> None:
1466
1467
  """Ensure that a gripper pickup succeeded.
1467
1468
 
@@ -1482,6 +1483,7 @@ class OT3API(
1482
1483
  gripper.max_allowed_grip_error,
1483
1484
  gripper.min_jaw_width,
1484
1485
  gripper.max_jaw_width,
1486
+ disable_geometry_grip_check,
1485
1487
  )
1486
1488
 
1487
1489
  def gripper_jaw_can_home(self) -> bool:
@@ -41,6 +41,7 @@ class GripperController(Protocol):
41
41
  expected_grip_width: float,
42
42
  grip_width_uncertainty_wider: float,
43
43
  grip_width_uncertainty_narrower: float,
44
+ disable_geometry_grip_check: bool = False,
44
45
  ) -> None:
45
46
  """Ensure that a gripper pickup succeeded."""
46
47
 
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from typing import Optional, TYPE_CHECKING, overload
6
6
 
7
- from opentrons_shared_data.labware.labware_definition import LabwareDefinition
7
+ from opentrons_shared_data.labware.labware_definition import LabwareDefinition, Quirks
8
8
 
9
9
  from opentrons.types import Point
10
10
 
@@ -238,6 +238,13 @@ class LabwareMovementHandler:
238
238
  labware_definition=labware_definition
239
239
  )
240
240
 
241
+ disable_geometry_grip_check = False
242
+ if labware_definition.parameters.quirks is not None:
243
+ disable_geometry_grip_check = (
244
+ Quirks.disableGeometryBasedGripCheck # type: ignore[comparison-overlap]
245
+ in labware_definition.parameters.quirks
246
+ )
247
+
241
248
  # todo(mm, 2024-09-26): This currently raises a lower-level 2015 FailedGripperPickupError.
242
249
  # Convert this to a higher-level 3001 LabwareDroppedError or 3002 LabwareNotPickedUpError,
243
250
  # depending on what waypoint we're at, to propagate a more specific error code to users.
@@ -245,6 +252,7 @@ class LabwareMovementHandler:
245
252
  expected_grip_width=grip_specs.targetY,
246
253
  grip_width_uncertainty_wider=grip_specs.uncertaintyWider,
247
254
  grip_width_uncertainty_narrower=grip_specs.uncertaintyNarrower,
255
+ disable_geometry_grip_check=disable_geometry_grip_check,
248
256
  )
249
257
  await ot3api.move_to(
250
258
  mount=gripper_mount, abs_position=waypoint_data.position
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opentrons
3
- Version: 8.7.0a6
3
+ Version: 8.7.0a8
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.7.0a6
27
+ Requires-Dist: opentrons-shared-data==8.7.0a8
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.7.0a6; extra == 'flex-hardware'
35
+ Requires-Dist: opentrons-hardware[flex]==8.7.0a8; extra == 'flex-hardware'
36
36
  Provides-Extra: ot2-hardware
37
- Requires-Dist: opentrons-hardware==8.7.0a6; extra == 'ot2-hardware'
37
+ Requires-Dist: opentrons-hardware==8.7.0a8; extra == 'ot2-hardware'
@@ -1,5 +1,5 @@
1
1
  opentrons/__init__.py,sha256=TQ_Ca_zzAM3iLzAysWKkFkQHG8-imihxDPQbLCYrf-E,4533
2
- opentrons/_version.py,sha256=QWyf8tucSHUWM-f05vXVSeV8CkIBFLOTGDvxyi98YYM,712
2
+ opentrons/_version.py,sha256=6QOBIA4KOTSc8ttyS_QKmJl9f44y2feEQu9QWvzXG7Q,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
@@ -53,10 +53,10 @@ opentrons/drivers/asyncio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
53
53
  opentrons/drivers/asyncio/communication/__init__.py,sha256=b-rd_I0ecbexGm6b9T91JLfFUrCyui9V1N1j-fzy0SQ,523
54
54
  opentrons/drivers/asyncio/communication/async_serial.py,sha256=Tzv_uXvMYhJF2LXsJWDRA3hdg5_qCo3863zvn7Y66WY,5439
55
55
  opentrons/drivers/asyncio/communication/errors.py,sha256=-4pNGVKE83VUPNt1UTBLDzKtty3LxAhUNp-9yLENqyw,2678
56
- opentrons/drivers/asyncio/communication/serial_connection.py,sha256=cWcISWe0FfoZj63oYVQD-KkwBojzMTVrzJ64-Gd1u90,18876
56
+ opentrons/drivers/asyncio/communication/serial_connection.py,sha256=qvHkzpRvCGg4Bp-RR7KuwSXiNqff0R-OApFGIBAatcQ,18929
57
57
  opentrons/drivers/flex_stacker/__init__.py,sha256=LiM0onRlgC-JfFBd0QseQU0-3WuuIxa7GNFj7Douiq8,351
58
58
  opentrons/drivers/flex_stacker/abstract.py,sha256=50xrkTC5qI_BsvlBGpdBLwF3GVi7HhKVSgloKwcrzNA,6744
59
- opentrons/drivers/flex_stacker/driver.py,sha256=TEy2yz5fU-vSmuLjHoZqi8fYmvdrmhoWYCMhx7ldZsg,31342
59
+ opentrons/drivers/flex_stacker/driver.py,sha256=m43LDktLtRXSco_SgM-6yfx0GwoxkrV8Gz5aDtLgfN4,31670
60
60
  opentrons/drivers/flex_stacker/errors.py,sha256=8vocQHCTw8cSnlWGFml4gBtrwMOtVdml-c7MB4KnLns,2175
61
61
  opentrons/drivers/flex_stacker/simulator.py,sha256=suOrNpD2jsiQX10yAesln_Fl3PI3IhXcpbZXXD5c2gw,10925
62
62
  opentrons/drivers/flex_stacker/types.py,sha256=IHubhe1Xi0mUbiY6tzlyUv9KHNOGhjS4l6x7q0woAw4,7986
@@ -105,7 +105,7 @@ opentrons/hardware_control/module_control.py,sha256=0mmVH9fiZWNyc33ilCpJHajX1Dfh
105
105
  opentrons/hardware_control/motion_utilities.py,sha256=7VG60YQ9MSMAZ0hO-q-kRAdkcebzrx7uIPtc6FMCViE,10311
106
106
  opentrons/hardware_control/nozzle_manager.py,sha256=dqD8XlYsOu0PFFyxvmsMypBB52Gi6x-VIwhykV7JhuU,16868
107
107
  opentrons/hardware_control/ot3_calibration.py,sha256=vHB17U-FBzytvM8QeEu5kRYPo8lFwAo31ZEpiU4yf_0,45000
108
- opentrons/hardware_control/ot3api.py,sha256=1vPsaNPmtjsJI1EJF8JPKOd2Bj2GDJLvmKU8eMKGhi8,127869
108
+ opentrons/hardware_control/ot3api.py,sha256=jRCsbVjeeueYXknF8JwqkiavGzjHlVzciI6efb-u66o,127961
109
109
  opentrons/hardware_control/pause_manager.py,sha256=wmNmraimE2yZQVqCxX_rtQHUWRzpzyQEaym9fLMgyww,888
110
110
  opentrons/hardware_control/poller.py,sha256=rx6Q-UxbUIj3ek69IlYenFh7BFuasszRO-GzzhRPuHQ,3885
111
111
  opentrons/hardware_control/robot_calibration.py,sha256=ilszGjZPspKiEk8MQPaHm2B-ljeisAYflKl8UyQ_D0U,7155
@@ -118,9 +118,9 @@ opentrons/hardware_control/backends/__init__.py,sha256=u5Dg3AFZuvDV7hFqJ8I4F9D1d
118
118
  opentrons/hardware_control/backends/controller.py,sha256=MOVMq9s1rY_jHhajHB1hQ1MgXXyY54-gMrrvAuMsOFg,14622
119
119
  opentrons/hardware_control/backends/errors.py,sha256=ZiVP16exHMTWWOajxffnXEqI6NNfeTw-4RkhXE0EBJA,249
120
120
  opentrons/hardware_control/backends/estop_state.py,sha256=_GYjI6OaD3CZNduWV2_RVeOtQ4K_Fg-SP8yU01ENhCY,6554
121
- opentrons/hardware_control/backends/flex_protocol.py,sha256=3S-OHbAnOSTF5PxzhMxD0TdEfxurLwecBrDkedl2O3s,13185
122
- opentrons/hardware_control/backends/ot3controller.py,sha256=w0LMGu0WWkGd4cEWaqlhMk1NQFHg1-Di83s5_KrKP3U,71374
123
- opentrons/hardware_control/backends/ot3simulator.py,sha256=CtYnb7NpqIc1TNK91hI0UaK4OyaIecFDczsb-T7DX_w,30387
121
+ opentrons/hardware_control/backends/flex_protocol.py,sha256=PJnTJ9jyZtR8RUGEynJfZ9ihphCXgbtEVWiZMcfnrjA,13236
122
+ opentrons/hardware_control/backends/ot3controller.py,sha256=CrYYwtuSswryONx9pOTNeI6U8ThSehiN4fiB5k2JcUI,71521
123
+ opentrons/hardware_control/backends/ot3simulator.py,sha256=zyJJpSZIlyNAcGPUUTiIjit1aHCAX54aSPumbZ3djTI,30438
124
124
  opentrons/hardware_control/backends/ot3utils.py,sha256=HYlIZRGmLqudS1mIt0Io2LxQ1BrLrxVFQCjqudbTUWU,22374
125
125
  opentrons/hardware_control/backends/simulator.py,sha256=q_9PQlBdOyCa9sj2gLqYWZ-fG9v4mddDAiScL-yHCXY,17549
126
126
  opentrons/hardware_control/backends/status_bar_state.py,sha256=E8z9dCJDI3Nb4qfUA5y2_PrE2jSYzZJQVkk75UqY5ZE,9287
@@ -188,7 +188,7 @@ opentrons/hardware_control/protocols/event_sourcer.py,sha256=8-BiKGo-KVEcFOOZmj1
188
188
  opentrons/hardware_control/protocols/execution_controllable.py,sha256=c1MmdETvXtwGEn6Fj_-N_mH2X4FkXnNPkrMKjClSBqY,1099
189
189
  opentrons/hardware_control/protocols/flex_calibratable.py,sha256=rHTumhgYB43WPsZEsHjKkZNBFtvOU3CAkCd2xONLAI8,3314
190
190
  opentrons/hardware_control/protocols/flex_instrument_configurer.py,sha256=qSnDZZxVCnCQE5CXck9c9k0AfE80W74kiKwteORGHb8,1461
191
- opentrons/hardware_control/protocols/gripper_controller.py,sha256=YvZPxkUmw_mjGxs3M6V8zh0DEb9PDEwt55PA9W3oJwo,1634
191
+ opentrons/hardware_control/protocols/gripper_controller.py,sha256=EEfL-KUzegZBm_vETeCAv_RFXisnV6xPc4N9Wil9348,1685
192
192
  opentrons/hardware_control/protocols/hardware_manager.py,sha256=S9BSJ0XsnU5A9nFLMDZfmiizx3T41WhU_91VYj4bUVE,1629
193
193
  opentrons/hardware_control/protocols/identifiable.py,sha256=YmhScb4Tr4mxVObL1i7pI-EouTMAmV-2oqKbovhdnrE,575
194
194
  opentrons/hardware_control/protocols/instrument_configurer.py,sha256=5zUCAchtoJ6QPFqcGRb7FOsnt2nxjxlRJdt18IidKqQ,7729
@@ -427,7 +427,7 @@ opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.p
427
427
  opentrons/protocol_engine/execution/gantry_mover.py,sha256=LFTPmzuGRuP6IspgXxIEyJIXV0tHkc4UWDDjWFCClYo,26477
428
428
  opentrons/protocol_engine/execution/hardware_stopper.py,sha256=ZlhVYEdFfuKqp5slZBkustXcRPy5fJsw2rmfYzHuJkQ,6127
429
429
  opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py,sha256=BSFLzSSeELAYZCrCUfJZx5DdlrwU06Ur92TYd0T-hzM,9084
430
- opentrons/protocol_engine/execution/labware_movement.py,sha256=0QnTf98CpYItP1icvNpwUeIa2LUWk4w7yBCUVJw-64g,12656
430
+ opentrons/protocol_engine/execution/labware_movement.py,sha256=ls9k5EDokiiqgoNcSrVrWDdsuNzEmKuLhJ0SYC0nWlc,13154
431
431
  opentrons/protocol_engine/execution/movement.py,sha256=ZU4K4OHnzZYCZbk3RwfSOC6C3T2jtBlvYMppJhJSF08,12749
432
432
  opentrons/protocol_engine/execution/pipetting.py,sha256=cnJYbLiJ2QD1xziD8dkRm0mZG3xOk00klW8Ff8rgSG4,22199
433
433
  opentrons/protocol_engine/execution/queue_worker.py,sha256=LM753TrQzJoKUSIrtcaHDOWLe58zcpx-fUOLVpyDlHM,3302
@@ -595,8 +595,8 @@ opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
595
595
  opentrons/util/logging_config.py,sha256=7et4YYuQdWdq_e50U-8vFS_QyNBRgdnqPGAQJm8qrIo,9954
596
596
  opentrons/util/logging_queue_handler.py,sha256=ZsSJwy-oV8DXwpYiZisQ1PbYwmK2cOslD46AcyJ1E4I,2484
597
597
  opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
598
- opentrons-8.7.0a6.dist-info/METADATA,sha256=RU-1uPU6tiSwIoBZzbwMcTfEa8XHYGoDrwFYgFq5RbU,1607
599
- opentrons-8.7.0a6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
600
- opentrons-8.7.0a6.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
601
- opentrons-8.7.0a6.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
602
- opentrons-8.7.0a6.dist-info/RECORD,,
598
+ opentrons-8.7.0a8.dist-info/METADATA,sha256=h4Ga21sNoSoWHfEygxLFQHwKT1yEzhidYsgNaEx8OaI,1607
599
+ opentrons-8.7.0a8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
600
+ opentrons-8.7.0a8.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
601
+ opentrons-8.7.0a8.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
602
+ opentrons-8.7.0a8.dist-info/RECORD,,