opentrons 8.0.0a3__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_api/core/engine/deck_conflict.py +41 -16
- opentrons/protocol_api/instrument_context.py +0 -1
- opentrons/protocol_api/protocol_context.py +1 -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/protocol_engine/state/addressable_areas.py +14 -0
- opentrons/protocol_engine/state/geometry.py +12 -1
- opentrons/protocol_engine/state/pipettes.py +0 -2
- opentrons/protocols/parameters/csv_parameter_interface.py +7 -0
- {opentrons-8.0.0a3.dist-info → opentrons-8.0.0a5.dist-info}/METADATA +4 -4
- {opentrons-8.0.0a3.dist-info → opentrons-8.0.0a5.dist-info}/RECORD +18 -17
- {opentrons-8.0.0a3.dist-info → opentrons-8.0.0a5.dist-info}/LICENSE +0 -0
- {opentrons-8.0.0a3.dist-info → opentrons-8.0.0a5.dist-info}/WHEEL +0 -0
- {opentrons-8.0.0a3.dist-info → opentrons-8.0.0a5.dist-info}/entry_points.txt +0 -0
- {opentrons-8.0.0a3.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
|
|
|
@@ -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
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
)
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
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
|
-
|
|
433
|
-
|
|
434
|
-
and
|
|
435
|
-
and
|
|
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
|
|
|
@@ -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)
|
|
@@ -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
|
|
@@ -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,
|
|
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
|
)
|
|
@@ -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
|
|
@@ -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=
|
|
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=
|
|
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=
|
|
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
|
|
@@ -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
|
|
@@ -392,17 +393,17 @@ opentrons/protocol_engine/resources/ot3_validation.py,sha256=0x81JoZBXcj2xUVcOF7
|
|
|
392
393
|
opentrons/protocol_engine/resources/pipette_data_provider.py,sha256=NYcQGJYQ-aeEME5nilUlkHF6oWfrNZt0op52bUH0czo,14623
|
|
393
394
|
opentrons/protocol_engine/state/__init__.py,sha256=l-VhTfs16xika3ZWPqfxovB1Z1GHuPRm-IHWrEOuzAw,1826
|
|
394
395
|
opentrons/protocol_engine/state/abstract_store.py,sha256=b5cqKZhI6ERZj6gyL0kDutD6ogdQngR3T-JmPATvhi8,631
|
|
395
|
-
opentrons/protocol_engine/state/addressable_areas.py,sha256=
|
|
396
|
+
opentrons/protocol_engine/state/addressable_areas.py,sha256=Al86_Qv-ikveekNPV4XS50yzFzXMGklUgEotvbg3O8s,28217
|
|
396
397
|
opentrons/protocol_engine/state/command_history.py,sha256=aNB1Oye3LxAVOvGppCEohv4KT84buJckgngDcDXDvj8,10252
|
|
397
398
|
opentrons/protocol_engine/state/commands.py,sha256=wNqBp-tb7rgzqp94mYy6vVjxshv50AearJ1y9QWvKi4,41287
|
|
398
399
|
opentrons/protocol_engine/state/config.py,sha256=7jSGxC6Vqj1eA8fqZ2I3zjlxVXg8pxvcBYMztRIx9Mg,1515
|
|
399
|
-
opentrons/protocol_engine/state/geometry.py,sha256=
|
|
400
|
+
opentrons/protocol_engine/state/geometry.py,sha256=YT3ILruOwRvAUtDt_C8EV8k_puXAm5oxmhe1wBnWi1I,51129
|
|
400
401
|
opentrons/protocol_engine/state/labware.py,sha256=sKbX7uN26m3C_84WnSxM-BJ38n1PlPDlxWf6mkYsY_4,37285
|
|
401
402
|
opentrons/protocol_engine/state/liquids.py,sha256=W7cf-mmVaZ3aNyiormFEy79aSvU__QwDfPVgjFb3lF4,1885
|
|
402
403
|
opentrons/protocol_engine/state/modules.py,sha256=bylqsYZyVjrnx6BUhDjJb-TofnqPNk0EUYV8j12UINE,50673
|
|
403
404
|
opentrons/protocol_engine/state/motion.py,sha256=nh0UGOVvmpYynOchGJkVLTyIyiJ9CszRTUvp4Czr_GI,13955
|
|
404
405
|
opentrons/protocol_engine/state/move_types.py,sha256=zSQj_qYHBi7_-wrpaZBKmX_O-wNZCpLZkCzagOwI-zY,2132
|
|
405
|
-
opentrons/protocol_engine/state/pipettes.py,sha256=
|
|
406
|
+
opentrons/protocol_engine/state/pipettes.py,sha256=wS7q9Sau86zK5vCcHiSGRdMhWNm26GPKUDNJnSEjEHw,36053
|
|
406
407
|
opentrons/protocol_engine/state/state.py,sha256=jx044yBfXFV1YO5aqXhJmy7iFx-tXEQ5rIl3lMcrY04,13562
|
|
407
408
|
opentrons/protocol_engine/state/state_summary.py,sha256=8VCxEOBeUflx8IBYUYtgNdwcwgdVZv3R8rSfzsbai7U,923
|
|
408
409
|
opentrons/protocol_engine/state/tips.py,sha256=gU2GsmaWPDyIIjWHj3KXv6NqxphfOd4eeNxF40hm5ok,22621
|
|
@@ -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
|