opentrons 8.0.0a4__py2.py3-none-any.whl → 8.0.0a5__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/protocols/motion_controller.py +4 -0
- opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +6 -1
- opentrons/protocol_engine/commands/command_unions.py +5 -0
- opentrons/protocol_engine/commands/unsafe/__init__.py +14 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +83 -0
- opentrons/protocols/parameters/csv_parameter_interface.py +7 -0
- {opentrons-8.0.0a4.dist-info → opentrons-8.0.0a5.dist-info}/METADATA +4 -4
- {opentrons-8.0.0a4.dist-info → opentrons-8.0.0a5.dist-info}/RECORD +12 -11
- {opentrons-8.0.0a4.dist-info → opentrons-8.0.0a5.dist-info}/LICENSE +0 -0
- {opentrons-8.0.0a4.dist-info → opentrons-8.0.0a5.dist-info}/WHEEL +0 -0
- {opentrons-8.0.0a4.dist-info → opentrons-8.0.0a5.dist-info}/entry_points.txt +0 -0
- {opentrons-8.0.0a4.dist-info → opentrons-8.0.0a5.dist-info}/top_level.txt +0 -0
|
@@ -204,6 +204,10 @@ class MotionController(Protocol[MountArgType]):
|
|
|
204
204
|
"""Disengage some axes."""
|
|
205
205
|
...
|
|
206
206
|
|
|
207
|
+
async def engage_axes(self, which: List[Axis]) -> None:
|
|
208
|
+
"""Engage some axes."""
|
|
209
|
+
...
|
|
210
|
+
|
|
207
211
|
async def retract(self, mount: MountArgType, margin: float = 10) -> None:
|
|
208
212
|
"""Pull the specified mount up to its home position.
|
|
209
213
|
|
|
@@ -108,10 +108,15 @@ class MoveToMaintenancePositionImplementation(
|
|
|
108
108
|
await ot3_api.move_axes(
|
|
109
109
|
{
|
|
110
110
|
Axis.Z_L: max_motion_range + _LEFT_MOUNT_Z_MARGIN,
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
await ot3_api.disengage_axes([Axis.Z_L])
|
|
114
|
+
await ot3_api.move_axes(
|
|
115
|
+
{
|
|
111
116
|
Axis.Z_R: max_motion_range + _RIGHT_MOUNT_Z_MARGIN,
|
|
112
117
|
}
|
|
113
118
|
)
|
|
114
|
-
await ot3_api.disengage_axes([Axis.
|
|
119
|
+
await ot3_api.disengage_axes([Axis.Z_R])
|
|
115
120
|
|
|
116
121
|
return SuccessData(public=MoveToMaintenancePositionResult(), private=None)
|
|
117
122
|
|
|
@@ -391,6 +391,7 @@ Command = Annotated[
|
|
|
391
391
|
unsafe.UnsafeBlowOutInPlace,
|
|
392
392
|
unsafe.UnsafeDropTipInPlace,
|
|
393
393
|
unsafe.UpdatePositionEstimators,
|
|
394
|
+
unsafe.UnsafeEngageAxes,
|
|
394
395
|
],
|
|
395
396
|
Field(discriminator="commandType"),
|
|
396
397
|
]
|
|
@@ -463,6 +464,7 @@ CommandParams = Union[
|
|
|
463
464
|
unsafe.UnsafeBlowOutInPlaceParams,
|
|
464
465
|
unsafe.UnsafeDropTipInPlaceParams,
|
|
465
466
|
unsafe.UpdatePositionEstimatorsParams,
|
|
467
|
+
unsafe.UnsafeEngageAxesParams,
|
|
466
468
|
]
|
|
467
469
|
|
|
468
470
|
CommandType = Union[
|
|
@@ -533,6 +535,7 @@ CommandType = Union[
|
|
|
533
535
|
unsafe.UnsafeBlowOutInPlaceCommandType,
|
|
534
536
|
unsafe.UnsafeDropTipInPlaceCommandType,
|
|
535
537
|
unsafe.UpdatePositionEstimatorsCommandType,
|
|
538
|
+
unsafe.UnsafeEngageAxesCommandType,
|
|
536
539
|
]
|
|
537
540
|
|
|
538
541
|
CommandCreate = Annotated[
|
|
@@ -604,6 +607,7 @@ CommandCreate = Annotated[
|
|
|
604
607
|
unsafe.UnsafeBlowOutInPlaceCreate,
|
|
605
608
|
unsafe.UnsafeDropTipInPlaceCreate,
|
|
606
609
|
unsafe.UpdatePositionEstimatorsCreate,
|
|
610
|
+
unsafe.UnsafeEngageAxesCreate,
|
|
607
611
|
],
|
|
608
612
|
Field(discriminator="commandType"),
|
|
609
613
|
]
|
|
@@ -676,6 +680,7 @@ CommandResult = Union[
|
|
|
676
680
|
unsafe.UnsafeBlowOutInPlaceResult,
|
|
677
681
|
unsafe.UnsafeDropTipInPlaceResult,
|
|
678
682
|
unsafe.UpdatePositionEstimatorsResult,
|
|
683
|
+
unsafe.UnsafeEngageAxesResult,
|
|
679
684
|
]
|
|
680
685
|
|
|
681
686
|
# todo(mm, 2024-06-12): Ideally, command return types would have specific
|
|
@@ -23,6 +23,14 @@ from .update_position_estimators import (
|
|
|
23
23
|
UpdatePositionEstimatorsCreate,
|
|
24
24
|
)
|
|
25
25
|
|
|
26
|
+
from .unsafe_engage_axes import (
|
|
27
|
+
UnsafeEngageAxesCommandType,
|
|
28
|
+
UnsafeEngageAxesParams,
|
|
29
|
+
UnsafeEngageAxesResult,
|
|
30
|
+
UnsafeEngageAxes,
|
|
31
|
+
UnsafeEngageAxesCreate,
|
|
32
|
+
)
|
|
33
|
+
|
|
26
34
|
__all__ = [
|
|
27
35
|
# Unsafe blow-out-in-place command models
|
|
28
36
|
"UnsafeBlowOutInPlaceCommandType",
|
|
@@ -42,4 +50,10 @@ __all__ = [
|
|
|
42
50
|
"UpdatePositionEstimatorsResult",
|
|
43
51
|
"UpdatePositionEstimators",
|
|
44
52
|
"UpdatePositionEstimatorsCreate",
|
|
53
|
+
# Unsafe engage axes
|
|
54
|
+
"UnsafeEngageAxesCommandType",
|
|
55
|
+
"UnsafeEngageAxesParams",
|
|
56
|
+
"UnsafeEngageAxesResult",
|
|
57
|
+
"UnsafeEngageAxes",
|
|
58
|
+
"UnsafeEngageAxesCreate",
|
|
45
59
|
]
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""Update position estimators payload, result, and implementaiton."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from pydantic import BaseModel, Field
|
|
5
|
+
from typing import TYPE_CHECKING, Optional, List, Type
|
|
6
|
+
from typing_extensions import Literal
|
|
7
|
+
|
|
8
|
+
from ...types import MotorAxis
|
|
9
|
+
from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
10
|
+
from ...errors.error_occurrence import ErrorOccurrence
|
|
11
|
+
from ...resources import ensure_ot3_hardware
|
|
12
|
+
|
|
13
|
+
from opentrons.hardware_control import HardwareControlAPI
|
|
14
|
+
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from ...execution import GantryMover
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
UnsafeEngageAxesCommandType = Literal["unsafe/engageAxes"]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class UnsafeEngageAxesParams(BaseModel):
|
|
23
|
+
"""Payload required for an UnsafeEngageAxes command."""
|
|
24
|
+
|
|
25
|
+
axes: List[MotorAxis] = Field(..., description="The axes for which to enable.")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class UnsafeEngageAxesResult(BaseModel):
|
|
29
|
+
"""Result data from the execution of an UnsafeEngageAxes command."""
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class UnsafeEngageAxesImplementation(
|
|
33
|
+
AbstractCommandImpl[
|
|
34
|
+
UnsafeEngageAxesParams,
|
|
35
|
+
SuccessData[UnsafeEngageAxesResult, None],
|
|
36
|
+
]
|
|
37
|
+
):
|
|
38
|
+
"""Enable axes command implementation."""
|
|
39
|
+
|
|
40
|
+
def __init__(
|
|
41
|
+
self,
|
|
42
|
+
hardware_api: HardwareControlAPI,
|
|
43
|
+
gantry_mover: GantryMover,
|
|
44
|
+
**kwargs: object,
|
|
45
|
+
) -> None:
|
|
46
|
+
self._hardware_api = hardware_api
|
|
47
|
+
self._gantry_mover = gantry_mover
|
|
48
|
+
|
|
49
|
+
async def execute(
|
|
50
|
+
self, params: UnsafeEngageAxesParams
|
|
51
|
+
) -> SuccessData[UnsafeEngageAxesResult, None]:
|
|
52
|
+
"""Enable exes."""
|
|
53
|
+
ot3_hardware_api = ensure_ot3_hardware(self._hardware_api)
|
|
54
|
+
await ot3_hardware_api.engage_axes(
|
|
55
|
+
[
|
|
56
|
+
self._gantry_mover.motor_axis_to_hardware_axis(axis)
|
|
57
|
+
for axis in params.axes
|
|
58
|
+
]
|
|
59
|
+
)
|
|
60
|
+
return SuccessData(public=UnsafeEngageAxesResult(), private=None)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class UnsafeEngageAxes(
|
|
64
|
+
BaseCommand[UnsafeEngageAxesParams, UnsafeEngageAxesResult, ErrorOccurrence]
|
|
65
|
+
):
|
|
66
|
+
"""UnsafeEngageAxes command model."""
|
|
67
|
+
|
|
68
|
+
commandType: UnsafeEngageAxesCommandType = "unsafe/engageAxes"
|
|
69
|
+
params: UnsafeEngageAxesParams
|
|
70
|
+
result: Optional[UnsafeEngageAxesResult]
|
|
71
|
+
|
|
72
|
+
_ImplementationCls: Type[
|
|
73
|
+
UnsafeEngageAxesImplementation
|
|
74
|
+
] = UnsafeEngageAxesImplementation
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class UnsafeEngageAxesCreate(BaseCommandCreate[UnsafeEngageAxesParams]):
|
|
78
|
+
"""UnsafeEngageAxes command request model."""
|
|
79
|
+
|
|
80
|
+
commandType: UnsafeEngageAxesCommandType = "unsafe/engageAxes"
|
|
81
|
+
params: UnsafeEngageAxesParams
|
|
82
|
+
|
|
83
|
+
_CommandCls: Type[UnsafeEngageAxes] = UnsafeEngageAxes
|
|
@@ -84,4 +84,11 @@ class CSVParameter:
|
|
|
84
84
|
rows.append(row)
|
|
85
85
|
except (UnicodeDecodeError, csv.Error):
|
|
86
86
|
raise ParameterValueError("Cannot parse provided CSV contents.")
|
|
87
|
+
return self._remove_trailing_empty_rows(rows)
|
|
88
|
+
|
|
89
|
+
@staticmethod
|
|
90
|
+
def _remove_trailing_empty_rows(rows: List[List[str]]) -> List[List[str]]:
|
|
91
|
+
"""Removes any trailing empty rows."""
|
|
92
|
+
while rows and rows[-1] == []:
|
|
93
|
+
rows.pop()
|
|
87
94
|
return rows
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: opentrons
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.0a5
|
|
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.
|
|
24
|
+
Requires-Dist: opentrons-shared-data ==8.0.0a5
|
|
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.
|
|
36
|
+
Requires-Dist: opentrons-hardware[flex] ==8.0.0a5 ; extra == 'flex-hardware'
|
|
37
37
|
Provides-Extra: ot2-hardware
|
|
38
|
-
Requires-Dist: opentrons-hardware ==8.0.
|
|
38
|
+
Requires-Dist: opentrons-hardware ==8.0.0a5 ; extra == 'ot2-hardware'
|
|
39
39
|
|
|
40
40
|
.. _Full API Documentation: http://docs.opentrons.com
|
|
41
41
|
|
|
@@ -187,7 +187,7 @@ opentrons/hardware_control/protocols/identifiable.py,sha256=YmhScb4Tr4mxVObL1i7p
|
|
|
187
187
|
opentrons/hardware_control/protocols/instrument_configurer.py,sha256=ap60TN0lhR5Sr3vcqMamU6NfJClDTUr3K4APeSg0snw,7271
|
|
188
188
|
opentrons/hardware_control/protocols/liquid_handler.py,sha256=qKyFnHnoDQDXGehPrbt8r-4J5CMxMG3LcGvtYRGYmNk,7614
|
|
189
189
|
opentrons/hardware_control/protocols/module_provider.py,sha256=QDKCWqrW-6IeI91IICBTJClK0C__mgq3A0-M3Wa9ee8,487
|
|
190
|
-
opentrons/hardware_control/protocols/motion_controller.py,sha256=
|
|
190
|
+
opentrons/hardware_control/protocols/motion_controller.py,sha256=2sv-fc0uvmuFj-wA1h4VrEjLLTMTvswLCkisjEXwxXQ,9520
|
|
191
191
|
opentrons/hardware_control/protocols/position_estimator.py,sha256=bEYQiNZYsh5k9r_J2XCDQg6FixrQmxr-7KTD9gfVmYc,1797
|
|
192
192
|
opentrons/hardware_control/protocols/simulatable.py,sha256=ED3VHoO8q1h9FhBDv31g5N7YdTKB5hj7lp7BZcCaL7o,247
|
|
193
193
|
opentrons/hardware_control/protocols/stoppable.py,sha256=ukI1WrJzXwsJm5ty2trhMqGJr0sT13ttlv914YMAUt8,226
|
|
@@ -282,7 +282,7 @@ opentrons/protocol_engine/commands/aspirate_in_place.py,sha256=DpDDkyJ7m2vyeFRXd
|
|
|
282
282
|
opentrons/protocol_engine/commands/blow_out.py,sha256=pQnQ_MjpWWBBHWjwTWR3BrduA90QwbYBqhbbw6wuJak,2629
|
|
283
283
|
opentrons/protocol_engine/commands/blow_out_in_place.py,sha256=QFtJoUII8E_INbAnh2I2_xoJNWWdv-YrO_mdYsEdwOY,2402
|
|
284
284
|
opentrons/protocol_engine/commands/command.py,sha256=QQqZN8VHKJXMPV9XycyeGeIvPnWY43HXZe606IyynVA,9290
|
|
285
|
-
opentrons/protocol_engine/commands/command_unions.py,sha256=
|
|
285
|
+
opentrons/protocol_engine/commands/command_unions.py,sha256=BAmTHBqrx2Pl84GomRprwlD7C7aRyiTTd4648KcbxAs,20015
|
|
286
286
|
opentrons/protocol_engine/commands/comment.py,sha256=V9ryXPE8JzR4NYTZPsFfgYBLh4mfMNSorkfynPYL5bs,1634
|
|
287
287
|
opentrons/protocol_engine/commands/configure_for_volume.py,sha256=YavcUpy0QSNR0uRiDIDYGRzysesUglz54Ki8Kev3iQg,3464
|
|
288
288
|
opentrons/protocol_engine/commands/configure_nozzle_layout.py,sha256=a-Nq9n01SBXCH2yRkChd-XhcHqgWvDXEhLjgP4vfTzM,3979
|
|
@@ -326,7 +326,7 @@ opentrons/protocol_engine/commands/calibration/__init__.py,sha256=JjNnULLBM3j8Vt
|
|
|
326
326
|
opentrons/protocol_engine/commands/calibration/calibrate_gripper.py,sha256=vgiQ7vkm16btXJfKdSn21oydo4Ut0ai2fDiobFPJuZE,5622
|
|
327
327
|
opentrons/protocol_engine/commands/calibration/calibrate_module.py,sha256=rfzW6IUhQft1zuJhSX2qdhUHzWHV13OuiyKOZNmATmg,4204
|
|
328
328
|
opentrons/protocol_engine/commands/calibration/calibrate_pipette.py,sha256=xtYulhb3BfKhL1GU3wqWhm2bi7hUBAIbCbBM9xOe-oQ,3311
|
|
329
|
-
opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py,sha256=
|
|
329
|
+
opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py,sha256=QYMe7vEzQ8fNDuUpuUzhN4sk1mpPVG9Hz1_znvldfek,5301
|
|
330
330
|
opentrons/protocol_engine/commands/heater_shaker/__init__.py,sha256=ImAPrYSUvP8tI7obvoHmrJbjwLldgGNTnFYRgfXj8hI,2757
|
|
331
331
|
opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py,sha256=tCQy35R8O-UgY3Z-JsTfQ1_CB8cpkLV9wcCid1Viros,2851
|
|
332
332
|
opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py,sha256=rLduURAqRQzTFrJA4NRQRuGFeKkv0Pf-aZ4p1yFmLW4,2759
|
|
@@ -353,9 +353,10 @@ opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py,
|
|
|
353
353
|
opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py,sha256=25FJ41F4PJI9jvf5eW-w0Xvfd_CxNSndKuKi2k7aVkM,3409
|
|
354
354
|
opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py,sha256=xzHO58ay9sT2O5-TXQEub4j9gr03UMY_p8PmdLHCX_U,3091
|
|
355
355
|
opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py,sha256=oi-OYs0wuOyeFeI6aGTmdo50hNXIfYqnovTqr4_Wmno,2961
|
|
356
|
-
opentrons/protocol_engine/commands/unsafe/__init__.py,sha256=
|
|
356
|
+
opentrons/protocol_engine/commands/unsafe/__init__.py,sha256=PDYTbdjpFjWFjHmmaua0Q0A81ozdcjQmDqMHsG37Rkk,1737
|
|
357
357
|
opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py,sha256=khVS17_svWxlzzK12L1pdwAIUjF-hinh6qJLmNjPdwo,3062
|
|
358
358
|
opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py,sha256=kO2Eq5rY_PwGhtAhaKHis6dcS5MxQ0_K5jPqK7SDRbA,3383
|
|
359
|
+
opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py,sha256=ekU036vznKljyH0Jx41xTp7r9S-iAACruuzj8tzvrXo,2555
|
|
359
360
|
opentrons/protocol_engine/commands/unsafe/update_position_estimators.py,sha256=HfbTP4_T4WieVKxalf_C10PTJv2nr8md28NvITfo_F0,2941
|
|
360
361
|
opentrons/protocol_engine/errors/__init__.py,sha256=LVf5EerQWvztgJSiCsUWsA0enK1Yn8yCy2QAiPPWBG0,4560
|
|
361
362
|
opentrons/protocol_engine/errors/error_occurrence.py,sha256=PM_bxIxLYKtsRl_cGMiCtXVVMEb88hkLFEWcafwqLf8,7542
|
|
@@ -472,7 +473,7 @@ opentrons/protocols/models/__init__.py,sha256=KePRAkkKzFoc0lAz8y89cWnxru8ofe3mow
|
|
|
472
473
|
opentrons/protocols/models/json_protocol.py,sha256=lteWlIBXgRM86k-wO1dKsx02G2_4kustSDeSoyc5N5U,20128
|
|
473
474
|
opentrons/protocols/parameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
474
475
|
opentrons/protocols/parameters/csv_parameter_definition.py,sha256=xZhGtdfH2vXSWFK-aGET07_L0LODvHWkfNxf7pQoOmo,2762
|
|
475
|
-
opentrons/protocols/parameters/csv_parameter_interface.py,sha256=
|
|
476
|
+
opentrons/protocols/parameters/csv_parameter_interface.py,sha256=S7fdY39TxXqXO-jnaTZFLFI62n0HGc_XjYScWGB44VY,3945
|
|
476
477
|
opentrons/protocols/parameters/exceptions.py,sha256=vQUeyy8Yk_fzP4bvT0r_zu3s7Aty3LM7PzTV6k2iXu0,1092
|
|
477
478
|
opentrons/protocols/parameters/parameter_definition.py,sha256=OMtUCPKyFx5ZH3Jfcw05aF8pptWQ7XYzYttGMuSPu9k,9529
|
|
478
479
|
opentrons/protocols/parameters/types.py,sha256=h7vaNmKbDHc1q_FzbZoIgoSVo0mvS64FeiLZDnv7xnQ,489
|
|
@@ -499,9 +500,9 @@ opentrons/util/helpers.py,sha256=3hr801bWGbxEcOFAS7f-iOhmnUhoK5qahbB8SIvaCfY,165
|
|
|
499
500
|
opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
|
|
500
501
|
opentrons/util/logging_config.py,sha256=g3TdzDKa1pL_N3eKhRYCdqPaZYe_hpLV-e8llObTcT4,5657
|
|
501
502
|
opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
|
|
502
|
-
opentrons-8.0.
|
|
503
|
-
opentrons-8.0.
|
|
504
|
-
opentrons-8.0.
|
|
505
|
-
opentrons-8.0.
|
|
506
|
-
opentrons-8.0.
|
|
507
|
-
opentrons-8.0.
|
|
503
|
+
opentrons-8.0.0a5.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
504
|
+
opentrons-8.0.0a5.dist-info/METADATA,sha256=8bfifhIOeDmfyGhYLVdDykKvLIB4R6h6t-3WaKHeNRk,4990
|
|
505
|
+
opentrons-8.0.0a5.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
|
|
506
|
+
opentrons-8.0.0a5.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
|
|
507
|
+
opentrons-8.0.0a5.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
|
|
508
|
+
opentrons-8.0.0a5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|