opentrons 8.4.0a0__py2.py3-none-any.whl → 8.4.0a1__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.
- opentrons/hardware_control/backends/subsystem_manager.py +4 -5
- opentrons/protocol_api/instrument_context.py +1 -0
- opentrons/protocol_engine/commands/evotip_seal_pipette.py +22 -20
- opentrons/protocol_engine/commands/prepare_to_aspirate.py +14 -1
- opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +6 -1
- {opentrons-8.4.0a0.dist-info → opentrons-8.4.0a1.dist-info}/METADATA +4 -4
- {opentrons-8.4.0a0.dist-info → opentrons-8.4.0a1.dist-info}/RECORD +11 -11
- {opentrons-8.4.0a0.dist-info → opentrons-8.4.0a1.dist-info}/LICENSE +0 -0
- {opentrons-8.4.0a0.dist-info → opentrons-8.4.0a1.dist-info}/WHEEL +0 -0
- {opentrons-8.4.0a0.dist-info → opentrons-8.4.0a1.dist-info}/entry_points.txt +0 -0
- {opentrons-8.4.0a0.dist-info → opentrons-8.4.0a1.dist-info}/top_level.txt +0 -0
|
@@ -58,7 +58,7 @@ class SubsystemManager:
|
|
|
58
58
|
_expected_core_targets: Set[FirmwareTarget]
|
|
59
59
|
_present_tools: tools.types.ToolSummary
|
|
60
60
|
_tool_task_condition: asyncio.Condition
|
|
61
|
-
_tool_task_state: Union[bool,
|
|
61
|
+
_tool_task_state: Union[bool, BaseException]
|
|
62
62
|
_updates_required: Dict[FirmwareTarget, FirmwareUpdateRequirements]
|
|
63
63
|
_updates_ongoing: Dict[SubSystem, UpdateStatus]
|
|
64
64
|
_update_bag: FirmwareUpdate
|
|
@@ -370,7 +370,8 @@ class SubsystemManager:
|
|
|
370
370
|
async def _tool_detection_task_main(self) -> None:
|
|
371
371
|
try:
|
|
372
372
|
await self._tool_detection_task_protected()
|
|
373
|
-
except
|
|
373
|
+
except BaseException as e:
|
|
374
|
+
log.exception("Tool reader task failed")
|
|
374
375
|
async with self._tool_task_condition:
|
|
375
376
|
self._tool_task_state = e
|
|
376
377
|
self._tool_task_condition.notify_all()
|
|
@@ -414,9 +415,7 @@ class SubsystemManager:
|
|
|
414
415
|
)
|
|
415
416
|
self._present_tools = await self._tool_detector.resolve(to_resolve, 10.0)
|
|
416
417
|
log.info(f"Present tools are now {self._present_tools}")
|
|
417
|
-
await network.log_motor_usage_data(
|
|
418
|
-
self._can_messenger, list(set(base_can_nodes + [t for t in tool_nodes]))
|
|
419
|
-
)
|
|
418
|
+
await network.log_motor_usage_data(self._can_messenger)
|
|
420
419
|
async with self._tool_task_condition:
|
|
421
420
|
self._tool_task_state = True
|
|
422
421
|
self._tool_task_condition.notify_all()
|
|
@@ -778,6 +778,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
778
778
|
target = loc.labware.as_well().top(height)
|
|
779
779
|
self.move_to(target, publish=False)
|
|
780
780
|
if self.api_version >= _AIR_GAP_TRACKING_ADDED_IN:
|
|
781
|
+
self._core.prepare_to_aspirate()
|
|
781
782
|
c_vol = self._core.get_available_volume() if volume is None else volume
|
|
782
783
|
flow_rate = self._core.get_aspirate_flow_rate()
|
|
783
784
|
self._core.air_gap_in_place(c_vol, flow_rate)
|
|
@@ -40,9 +40,12 @@ if TYPE_CHECKING:
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
EvotipSealPipetteCommandType = Literal["evotipSealPipette"]
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
_CAM_PREP_DISTANCE_DEFAULT = 8.25
|
|
44
|
+
_CAM_PRESS_DISTANCE_DEFAULT = 3.5
|
|
45
|
+
_CAM_EJECTOR_PUSH_MM_DEFAULT = 7.0
|
|
46
|
+
_PRESS_FIT_PREP_DISTANCE_DEFAULT = 0
|
|
47
|
+
_PRESS_FIT_PRESS_DISTANCE_DEFAULT = -11.0
|
|
48
|
+
_PRESS_FIT_EJECTOR_PUSH_MM_DEFAULT = 0
|
|
46
49
|
_SAFE_TOP_VOLUME = 1000
|
|
47
50
|
|
|
48
51
|
|
|
@@ -244,29 +247,28 @@ class EvotipSealPipetteImplementation(
|
|
|
244
247
|
channels = self._state_view.tips.get_pipette_active_channels(pipette_id)
|
|
245
248
|
mount = self._state_view.pipettes.get_mount(pipette_id)
|
|
246
249
|
tip_pick_up_params = params.tipPickUpParams
|
|
247
|
-
if tip_pick_up_params is None:
|
|
248
|
-
tip_pick_up_params = TipPickUpParams(
|
|
249
|
-
prepDistance=_PREP_DISTANCE_DEFAULT,
|
|
250
|
-
pressDistance=_PRESS_DISTANCE_DEFAULT,
|
|
251
|
-
ejectorPushMm=_EJECTOR_PUSH_MM_DEFAULT,
|
|
252
|
-
)
|
|
253
250
|
|
|
254
|
-
if channels
|
|
255
|
-
|
|
256
|
-
tip_pick_up_params=
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
251
|
+
if channels == 96:
|
|
252
|
+
if tip_pick_up_params is None:
|
|
253
|
+
tip_pick_up_params = TipPickUpParams(
|
|
254
|
+
prepDistance=_CAM_PREP_DISTANCE_DEFAULT,
|
|
255
|
+
pressDistance=_CAM_PRESS_DISTANCE_DEFAULT,
|
|
256
|
+
ejectorPushMm=_CAM_EJECTOR_PUSH_MM_DEFAULT,
|
|
257
|
+
)
|
|
260
258
|
await self.cam_action_relative_pickup_tip(
|
|
261
259
|
tip_pick_up_params=tip_pick_up_params,
|
|
262
260
|
mount=mount,
|
|
263
261
|
)
|
|
264
262
|
else:
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
263
|
+
if tip_pick_up_params is None:
|
|
264
|
+
tip_pick_up_params = TipPickUpParams(
|
|
265
|
+
prepDistance=_PRESS_FIT_PREP_DISTANCE_DEFAULT,
|
|
266
|
+
pressDistance=_PRESS_FIT_PRESS_DISTANCE_DEFAULT,
|
|
267
|
+
ejectorPushMm=_PRESS_FIT_EJECTOR_PUSH_MM_DEFAULT,
|
|
268
|
+
)
|
|
269
|
+
await self.relative_pickup_tip(
|
|
270
|
+
tip_pick_up_params=tip_pick_up_params,
|
|
271
|
+
mount=mount,
|
|
270
272
|
)
|
|
271
273
|
|
|
272
274
|
# cache_tip
|
|
@@ -5,7 +5,11 @@ from pydantic import BaseModel
|
|
|
5
5
|
from typing import TYPE_CHECKING, Optional, Type, Union
|
|
6
6
|
from typing_extensions import Literal
|
|
7
7
|
|
|
8
|
-
from .pipetting_common import
|
|
8
|
+
from .pipetting_common import (
|
|
9
|
+
OverpressureError,
|
|
10
|
+
PipetteIdMixin,
|
|
11
|
+
prepare_for_aspirate,
|
|
12
|
+
)
|
|
9
13
|
from .command import (
|
|
10
14
|
AbstractCommandImpl,
|
|
11
15
|
BaseCommand,
|
|
@@ -66,6 +70,14 @@ class PrepareToAspirateImplementation(
|
|
|
66
70
|
|
|
67
71
|
async def execute(self, params: PrepareToAspirateParams) -> _ExecuteReturn:
|
|
68
72
|
"""Prepare the pipette to aspirate."""
|
|
73
|
+
ready_to_aspirate = self._pipetting_handler.get_is_ready_to_aspirate(
|
|
74
|
+
pipette_id=params.pipetteId
|
|
75
|
+
)
|
|
76
|
+
if ready_to_aspirate:
|
|
77
|
+
return SuccessData(
|
|
78
|
+
public=PrepareToAspirateResult(),
|
|
79
|
+
)
|
|
80
|
+
|
|
69
81
|
current_position = await self._gantry_mover.get_position(params.pipetteId)
|
|
70
82
|
prepare_result = await prepare_for_aspirate(
|
|
71
83
|
pipette_id=params.pipetteId,
|
|
@@ -79,6 +91,7 @@ class PrepareToAspirateImplementation(
|
|
|
79
91
|
)
|
|
80
92
|
},
|
|
81
93
|
)
|
|
94
|
+
|
|
82
95
|
if isinstance(prepare_result, DefinedErrorData):
|
|
83
96
|
return prepare_result
|
|
84
97
|
else:
|
|
@@ -78,7 +78,12 @@ class UnsafeDropTipInPlaceImplementation(
|
|
|
78
78
|
[Axis.of_main_tool_actuator(pipette_location.mount.to_hw_mount())]
|
|
79
79
|
)
|
|
80
80
|
await self._tip_handler.drop_tip(
|
|
81
|
-
pipette_id=params.pipetteId,
|
|
81
|
+
pipette_id=params.pipetteId,
|
|
82
|
+
home_after=params.homeAfter,
|
|
83
|
+
ignore_plunger=(
|
|
84
|
+
self._state_view.tips.get_pipette_active_channels(params.pipetteId)
|
|
85
|
+
== 96
|
|
86
|
+
),
|
|
82
87
|
)
|
|
83
88
|
|
|
84
89
|
state_update = StateUpdate()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: opentrons
|
|
3
|
-
Version: 8.4.
|
|
3
|
+
Version: 8.4.0a1
|
|
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.0a1)
|
|
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.0a1) ; extra == 'flex-hardware'
|
|
39
39
|
Provides-Extra: ot2-hardware
|
|
40
|
-
Requires-Dist: opentrons-hardware (==8.4.
|
|
40
|
+
Requires-Dist: opentrons-hardware (==8.4.0a1) ; extra == 'ot2-hardware'
|
|
41
41
|
|
|
42
42
|
.. _Full API Documentation: http://docs.opentrons.com
|
|
43
43
|
|
|
@@ -124,7 +124,7 @@ opentrons/hardware_control/backends/ot3simulator.py,sha256=rmEKUtwwQV6Der-gqOWcf
|
|
|
124
124
|
opentrons/hardware_control/backends/ot3utils.py,sha256=VYpyvaE3M9CzhgLL4ObgcXP3gmSGyaOyiRVqcbudCn0,23087
|
|
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=ftNn2ouBhPZiFbUm79I4z6ndup7XDmcNowhb-KREspE,8529
|
|
127
|
-
opentrons/hardware_control/backends/subsystem_manager.py,sha256=
|
|
127
|
+
opentrons/hardware_control/backends/subsystem_manager.py,sha256=_bcVUdb5R8UB_x_n1BPyz5OsfkyyaMLYxotvo3fIoh0,16685
|
|
128
128
|
opentrons/hardware_control/backends/tip_presence_manager.py,sha256=wzK8bvcr4lcCOwIwAz8ParXtXfrbt5hod7-stTP0ts0,5973
|
|
129
129
|
opentrons/hardware_control/backends/types.py,sha256=Fo7qTDyYfKW-NhcymqLQfkPBWOm6GO89q3JUqNnLIUo,329
|
|
130
130
|
opentrons/hardware_control/emulation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -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=ZR8GZF35-hUEGYTUkWm55v4KvI775t1Nfrl1g4pgu00,111773
|
|
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
|
|
@@ -309,7 +309,7 @@ opentrons/protocol_engine/commands/dispense_while_tracking.py,sha256=VCLWwlAbaTr
|
|
|
309
309
|
opentrons/protocol_engine/commands/drop_tip.py,sha256=ZZ63IoiT4dgWcemAHhNQfV4DUhkl-ToJyTRTxIiyAkc,7895
|
|
310
310
|
opentrons/protocol_engine/commands/drop_tip_in_place.py,sha256=gwSNEKBwds7kOTucXKSK74ozrDe7Cqhta7NR6IqKV3g,7062
|
|
311
311
|
opentrons/protocol_engine/commands/evotip_dispense.py,sha256=5OPrBmLMne1HiUzfkHJN5joZxiJAbkeZxbEsGPTtfVI,4636
|
|
312
|
-
opentrons/protocol_engine/commands/evotip_seal_pipette.py,sha256=
|
|
312
|
+
opentrons/protocol_engine/commands/evotip_seal_pipette.py,sha256=Xo5sYVd1zuvrKLyGbmZuhQNvpNBSDNlUNgjYCxs9R_8,11239
|
|
313
313
|
opentrons/protocol_engine/commands/evotip_unseal_pipette.py,sha256=RXCo2opcKrFiR97hISNXfPGrHGj0eiPHwAZJMi0jY9w,4888
|
|
314
314
|
opentrons/protocol_engine/commands/generate_command_schema.py,sha256=21Al_XQyRMNTb2ssVaxcNSPlgreOsCtKVXf8kZgpvR4,2296
|
|
315
315
|
opentrons/protocol_engine/commands/get_next_tip.py,sha256=JS5hN_UScAiUIo_j7KT2cR1GDj3hDvaNPTSovWbgTHo,4828
|
|
@@ -334,7 +334,7 @@ opentrons/protocol_engine/commands/move_to_well.py,sha256=fM8m5IcLjYZXy5fNjH_As4
|
|
|
334
334
|
opentrons/protocol_engine/commands/movement_common.py,sha256=bnJuwcp6nkyoxkTXqfSXnnKgZ7TKflkMGZSHXuPWsRk,11950
|
|
335
335
|
opentrons/protocol_engine/commands/pick_up_tip.py,sha256=pa2PXDvPyh5ZIYQeu_9XUnybE9CQ6VXooDO07gXCS5U,7726
|
|
336
336
|
opentrons/protocol_engine/commands/pipetting_common.py,sha256=Rok3Fy3jwJj_irXVRnUSjzpRpKVzVbYCv7odRQAYWEY,15222
|
|
337
|
-
opentrons/protocol_engine/commands/prepare_to_aspirate.py,sha256=
|
|
337
|
+
opentrons/protocol_engine/commands/prepare_to_aspirate.py,sha256=0Xh0E0OEE2730zR-hhmp4y__MMKyJLZ0S8I68BTH83g,3776
|
|
338
338
|
opentrons/protocol_engine/commands/reload_labware.py,sha256=eB1X7M9rHso1qc0beBTVHm5SHbjS6IODsIDj9RhR3mI,2910
|
|
339
339
|
opentrons/protocol_engine/commands/retract_axis.py,sha256=3h0eb6O3fjrCBY89q9tnjDFUGQXN9qafURxvXGcmCm4,2889
|
|
340
340
|
opentrons/protocol_engine/commands/save_position.py,sha256=koxPh6t8s7Cl1vjPt9e6raZz5_rQtXsg_IGdWqAPzPI,3395
|
|
@@ -399,7 +399,7 @@ opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py,sh
|
|
|
399
399
|
opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py,sha256=KZHt1dUWPrWUk_d0hl0TiAQhfaVdc_YZcxyMcZ0FLq8,2971
|
|
400
400
|
opentrons/protocol_engine/commands/unsafe/__init__.py,sha256=lx3TFW_78XK0bdtLFuGXrvUGaeYrSFj5pHucEL-IYHI,2499
|
|
401
401
|
opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py,sha256=uK9240g-lx0JE1N1f6Nfj_crhf9olHmzcxbUk6sMZoU,3374
|
|
402
|
-
opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py,sha256=
|
|
402
|
+
opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py,sha256=BHBK14fC4P9B3IWILj-qWfK8QFdfntnJAwP1eRkThnM,4061
|
|
403
403
|
opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py,sha256=Ze5hLslsXdd7l3lF0GKOPoWCdTmqTTGIjiTQyNhL-W4,2502
|
|
404
404
|
opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py,sha256=mcIPhcQvVCUL_wfb2-JPrCvIFTXMVD93VeJb4H1LmhM,7873
|
|
405
405
|
opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py,sha256=9Sjx92JZhi-tRY1P77M--jJp4JzIGESXUakIpstESwQ,2461
|
|
@@ -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.0a1.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
586
|
+
opentrons-8.4.0a1.dist-info/METADATA,sha256=8YWOEy1zF1c1FIsrnmCpPbvRXCcCjdbfXdWDGgtFsfM,5084
|
|
587
|
+
opentrons-8.4.0a1.dist-info/WHEEL,sha256=qUzzGenXXuJTzyjFah76kDVqDvnk-YDzY00svnrl84w,109
|
|
588
|
+
opentrons-8.4.0a1.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
|
|
589
|
+
opentrons-8.4.0a1.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
|
|
590
|
+
opentrons-8.4.0a1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|