opentrons 8.0.0a5__py2.py3-none-any.whl → 8.0.0a7__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/ot3api.py +10 -1
- opentrons/protocol_api/core/engine/deck_conflict.py +21 -1
- opentrons/protocol_api/instrument_context.py +1 -0
- opentrons/protocol_engine/execution/tip_handler.py +9 -0
- opentrons/protocol_engine/resources/pipette_data_provider.py +6 -3
- opentrons/protocol_engine/state/pipettes.py +45 -20
- {opentrons-8.0.0a5.dist-info → opentrons-8.0.0a7.dist-info}/METADATA +4 -4
- {opentrons-8.0.0a5.dist-info → opentrons-8.0.0a7.dist-info}/RECORD +12 -12
- {opentrons-8.0.0a5.dist-info → opentrons-8.0.0a7.dist-info}/LICENSE +0 -0
- {opentrons-8.0.0a5.dist-info → opentrons-8.0.0a7.dist-info}/WHEEL +0 -0
- {opentrons-8.0.0a5.dist-info → opentrons-8.0.0a7.dist-info}/entry_points.txt +0 -0
- {opentrons-8.0.0a5.dist-info → opentrons-8.0.0a7.dist-info}/top_level.txt +0 -0
|
@@ -2683,6 +2683,15 @@ class OT3API(
|
|
|
2683
2683
|
self._pipette_handler.ready_for_tip_action(
|
|
2684
2684
|
instrument, HardwareAction.LIQUID_PROBE, checked_mount
|
|
2685
2685
|
)
|
|
2686
|
+
# default to using all available sensors
|
|
2687
|
+
if probe:
|
|
2688
|
+
checked_probe = probe
|
|
2689
|
+
else:
|
|
2690
|
+
checked_probe = (
|
|
2691
|
+
InstrumentProbeType.BOTH
|
|
2692
|
+
if instrument.channels > 1
|
|
2693
|
+
else InstrumentProbeType.PRIMARY
|
|
2694
|
+
)
|
|
2686
2695
|
|
|
2687
2696
|
if not probe_settings:
|
|
2688
2697
|
probe_settings = deepcopy(self.config.liquid_sense)
|
|
@@ -2756,7 +2765,7 @@ class OT3API(
|
|
|
2756
2765
|
height = await self._liquid_probe_pass(
|
|
2757
2766
|
checked_mount,
|
|
2758
2767
|
probe_settings,
|
|
2759
|
-
|
|
2768
|
+
checked_probe,
|
|
2760
2769
|
p_pass_travel + p_impulse_mm,
|
|
2761
2770
|
)
|
|
2762
2771
|
# if we made it here without an error we found the liquid
|
|
@@ -16,6 +16,7 @@ from typing import (
|
|
|
16
16
|
from opentrons_shared_data.errors.exceptions import MotionPlanningFailureError
|
|
17
17
|
from opentrons_shared_data.module import FLEX_TC_LID_COLLISION_ZONE
|
|
18
18
|
|
|
19
|
+
from opentrons.hardware_control import CriticalPoint
|
|
19
20
|
from opentrons.hardware_control.modules.types import ModuleType
|
|
20
21
|
from opentrons.motion_planning import deck_conflict as wrapped_deck_conflict
|
|
21
22
|
from opentrons.motion_planning import adjacent_slots_getters
|
|
@@ -228,9 +229,13 @@ def check_safe_for_pipette_movement(
|
|
|
228
229
|
)
|
|
229
230
|
primary_nozzle = engine_state.pipettes.get_primary_nozzle(pipette_id)
|
|
230
231
|
|
|
232
|
+
destination_cp = _get_critical_point_to_use(engine_state, labware_id)
|
|
233
|
+
|
|
231
234
|
pipette_bounds_at_well_location = (
|
|
232
235
|
engine_state.pipettes.get_pipette_bounds_at_specified_move_to_position(
|
|
233
|
-
pipette_id=pipette_id,
|
|
236
|
+
pipette_id=pipette_id,
|
|
237
|
+
destination_position=well_location_point,
|
|
238
|
+
critical_point=destination_cp,
|
|
234
239
|
)
|
|
235
240
|
)
|
|
236
241
|
if not _is_within_pipette_extents(
|
|
@@ -284,6 +289,21 @@ def check_safe_for_pipette_movement(
|
|
|
284
289
|
)
|
|
285
290
|
|
|
286
291
|
|
|
292
|
+
def _get_critical_point_to_use(
|
|
293
|
+
engine_state: StateView, labware_id: str
|
|
294
|
+
) -> Optional[CriticalPoint]:
|
|
295
|
+
"""Return the critical point to use when accessing the given labware."""
|
|
296
|
+
# TODO (spp, 2024-09-17): looks like Y_CENTER of column is the same as its XY_CENTER.
|
|
297
|
+
# I'm using this if-else ladder to be consistent with what we do in
|
|
298
|
+
# `MotionPlanning.get_movement_waypoints_to_well()`.
|
|
299
|
+
# We should probably use only XY_CENTER in both places.
|
|
300
|
+
if engine_state.labware.get_should_center_column_on_target_well(labware_id):
|
|
301
|
+
return CriticalPoint.Y_CENTER
|
|
302
|
+
elif engine_state.labware.get_should_center_pipette_on_target_well(labware_id):
|
|
303
|
+
return CriticalPoint.XY_CENTER
|
|
304
|
+
return None
|
|
305
|
+
|
|
306
|
+
|
|
287
307
|
def _slot_has_potential_colliding_object(
|
|
288
308
|
engine_state: StateView,
|
|
289
309
|
pipette_bounds: Tuple[Point, Point, Point, Point],
|
|
@@ -20,6 +20,8 @@ from ..errors import (
|
|
|
20
20
|
ProtocolEngineError,
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
+
from opentrons.hardware_control.nozzle_manager import NozzleConfigurationType
|
|
24
|
+
|
|
23
25
|
|
|
24
26
|
PRIMARY_NOZZLE_TO_ENDING_NOZZLE_MAP = {
|
|
25
27
|
"A1": {"COLUMN": "H1", "ROW": "A12"},
|
|
@@ -300,6 +302,13 @@ class HardwareTipHandler(TipHandler):
|
|
|
300
302
|
This function will raise an exception if the specified tip presence status
|
|
301
303
|
isn't matched.
|
|
302
304
|
"""
|
|
305
|
+
if (
|
|
306
|
+
self._state_view.pipettes.get_nozzle_layout_type(pipette_id)
|
|
307
|
+
== NozzleConfigurationType.SINGLE
|
|
308
|
+
and self._state_view.pipettes.get_channels(pipette_id) == 96
|
|
309
|
+
):
|
|
310
|
+
# Tip presence sensing is not supported for single tip pick up on the 96ch Flex Pipette
|
|
311
|
+
return
|
|
303
312
|
try:
|
|
304
313
|
ot3api = ensure_ot3_hardware(hardware_api=self._hardware_api)
|
|
305
314
|
hw_mount = self._state_view.pipettes.get_mount(pipette_id).to_hw_mount()
|
|
@@ -193,9 +193,12 @@ class VirtualPipetteDataProvider:
|
|
|
193
193
|
pipette_model.pipette_channels,
|
|
194
194
|
pipette_model.pipette_version,
|
|
195
195
|
)
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
196
|
+
if pipette_id not in self._nozzle_manager_layout_by_id:
|
|
197
|
+
nozzle_manager = NozzleConfigurationManager.build_from_config(
|
|
198
|
+
config, valid_nozzle_maps
|
|
199
|
+
)
|
|
200
|
+
else:
|
|
201
|
+
nozzle_manager = self._nozzle_manager_layout_by_id[pipette_id]
|
|
199
202
|
|
|
200
203
|
tip_overlap_dict_for_tip_type = None
|
|
201
204
|
for configuration in (
|
|
@@ -7,6 +7,7 @@ from typing_extensions import assert_type
|
|
|
7
7
|
from opentrons_shared_data.pipette import pipette_definition
|
|
8
8
|
from opentrons.config.defaults_ot2 import Z_RETRACT_DISTANCE
|
|
9
9
|
from opentrons.hardware_control.dev_types import PipetteDict
|
|
10
|
+
from opentrons.hardware_control import CriticalPoint
|
|
10
11
|
from opentrons.hardware_control.nozzle_manager import (
|
|
11
12
|
NozzleConfigurationType,
|
|
12
13
|
NozzleMap,
|
|
@@ -795,17 +796,27 @@ class PipetteView(HasState[PipetteState]):
|
|
|
795
796
|
nozzle_map = self._state.nozzle_configuration_by_id.get(pipette_id)
|
|
796
797
|
return nozzle_map.starting_nozzle if nozzle_map else None
|
|
797
798
|
|
|
798
|
-
def
|
|
799
|
-
|
|
799
|
+
def _get_critical_point_offset_without_tip(
|
|
800
|
+
self, pipette_id: str, critical_point: Optional[CriticalPoint]
|
|
801
|
+
) -> Point:
|
|
802
|
+
"""Get the offset of the specified critical point from pipette's mount position."""
|
|
800
803
|
nozzle_map = self._state.nozzle_configuration_by_id.get(pipette_id)
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
804
|
+
# Nozzle map is unavailable only when there's no pipette loaded
|
|
805
|
+
# so this is merely for satisfying the type checker
|
|
806
|
+
assert (
|
|
807
|
+
nozzle_map is not None
|
|
808
|
+
), "Error getting critical point offset. Nozzle map not found."
|
|
809
|
+
match critical_point:
|
|
810
|
+
case CriticalPoint.INSTRUMENT_XY_CENTER:
|
|
811
|
+
return nozzle_map.instrument_xy_center_offset
|
|
812
|
+
case CriticalPoint.XY_CENTER:
|
|
813
|
+
return nozzle_map.xy_center_offset
|
|
814
|
+
case CriticalPoint.Y_CENTER:
|
|
815
|
+
return nozzle_map.y_center_offset
|
|
816
|
+
case CriticalPoint.FRONT_NOZZLE:
|
|
817
|
+
return nozzle_map.front_nozzle_offset
|
|
818
|
+
case _:
|
|
819
|
+
return nozzle_map.starting_nozzle_offset
|
|
809
820
|
|
|
810
821
|
def get_pipette_bounding_nozzle_offsets(
|
|
811
822
|
self, pipette_id: str
|
|
@@ -817,32 +828,46 @@ class PipetteView(HasState[PipetteState]):
|
|
|
817
828
|
"""Get the bounding box of the pipette."""
|
|
818
829
|
return self.get_config(pipette_id).pipette_bounding_box_offsets
|
|
819
830
|
|
|
831
|
+
# TODO (spp, 2024-09-17): in order to find the position of pipette at destination,
|
|
832
|
+
# this method repeats the same steps that waypoints builder does while finding
|
|
833
|
+
# waypoints to move to. We should consolidate these steps into a shared entity
|
|
834
|
+
# so that the deck conflict checker and movement plan builder always remain in sync.
|
|
820
835
|
def get_pipette_bounds_at_specified_move_to_position(
|
|
821
836
|
self,
|
|
822
837
|
pipette_id: str,
|
|
823
838
|
destination_position: Point,
|
|
839
|
+
critical_point: Optional[CriticalPoint],
|
|
824
840
|
) -> Tuple[Point, Point, Point, Point]:
|
|
825
|
-
"""Get the pipette's bounding
|
|
826
|
-
|
|
841
|
+
"""Get the pipette's bounding box position when critical point is at the destination position.
|
|
842
|
+
|
|
843
|
+
Returns a tuple of the pipette's bounding box position in deck coordinates as-
|
|
844
|
+
(back_left_bound, front_right_bound, back_right_bound, front_left_bound)
|
|
845
|
+
Bounding box of the pipette includes the pipette's outer casing as well as nozzles.
|
|
846
|
+
"""
|
|
827
847
|
tip = self.get_attached_tip(pipette_id)
|
|
828
|
-
|
|
829
|
-
#
|
|
830
|
-
|
|
848
|
+
|
|
849
|
+
# *Offset* of pipette's critical point w.r.t pipette mount
|
|
850
|
+
critical_point_offset = self._get_critical_point_offset_without_tip(
|
|
851
|
+
pipette_id, critical_point
|
|
852
|
+
)
|
|
853
|
+
|
|
854
|
+
# Position of the above critical point at destination, in deck coordinates
|
|
855
|
+
critical_point_position = destination_position + Point(
|
|
831
856
|
x=0, y=0, z=tip.length if tip else 0
|
|
832
857
|
)
|
|
833
858
|
|
|
834
|
-
# Get the pipette bounding box
|
|
859
|
+
# Get the pipette bounding box coordinates
|
|
835
860
|
pipette_bounds_offsets = self.get_config(
|
|
836
861
|
pipette_id
|
|
837
862
|
).pipette_bounding_box_offsets
|
|
838
863
|
pip_back_left_bound = (
|
|
839
|
-
|
|
840
|
-
-
|
|
864
|
+
critical_point_position
|
|
865
|
+
- critical_point_offset
|
|
841
866
|
+ pipette_bounds_offsets.back_left_corner
|
|
842
867
|
)
|
|
843
868
|
pip_front_right_bound = (
|
|
844
|
-
|
|
845
|
-
-
|
|
869
|
+
critical_point_position
|
|
870
|
+
- critical_point_offset
|
|
846
871
|
+ pipette_bounds_offsets.front_right_corner
|
|
847
872
|
)
|
|
848
873
|
pip_back_right_bound = Point(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: opentrons
|
|
3
|
-
Version: 8.0.
|
|
3
|
+
Version: 8.0.0a7
|
|
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.0a7
|
|
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.0a7 ; extra == 'flex-hardware'
|
|
37
37
|
Provides-Extra: ot2-hardware
|
|
38
|
-
Requires-Dist: opentrons-hardware ==8.0.
|
|
38
|
+
Requires-Dist: opentrons-hardware ==8.0.0a7 ; extra == 'ot2-hardware'
|
|
39
39
|
|
|
40
40
|
.. _Full API Documentation: http://docs.opentrons.com
|
|
41
41
|
|
|
@@ -100,7 +100,7 @@ opentrons/hardware_control/module_control.py,sha256=JTS0ys8nyQfCoE099trGAIVTJQEU
|
|
|
100
100
|
opentrons/hardware_control/motion_utilities.py,sha256=LuOZBcnNJmTPra6-mYX5wN3jh8PA2l81dy5amCyYpcQ,7164
|
|
101
101
|
opentrons/hardware_control/nozzle_manager.py,sha256=XNEyNdh00QdZ7VECb--JUO_BI-96EwoAPuQ7bdGXSGs,16788
|
|
102
102
|
opentrons/hardware_control/ot3_calibration.py,sha256=OHkQi7cwgncCZjTfYmaKLR-sb3uHe6CrC5_1HVY0UJo,44753
|
|
103
|
-
opentrons/hardware_control/ot3api.py,sha256=
|
|
103
|
+
opentrons/hardware_control/ot3api.py,sha256=Jcxx47nr6C9-WD3OU7zOoZ0i2xxuZZIV8XXPyeM3VEM,116677
|
|
104
104
|
opentrons/hardware_control/pause_manager.py,sha256=wmNmraimE2yZQVqCxX_rtQHUWRzpzyQEaym9fLMgyww,888
|
|
105
105
|
opentrons/hardware_control/poller.py,sha256=iMwlIyXgL1UVaAZYAoDKTdzrQPoxDhhaGzT411aBiFw,3590
|
|
106
106
|
opentrons/hardware_control/robot_calibration.py,sha256=HiCQNmdp59SbkzXpDGtPsN8rSfUj-ZU4v63vcSw4AbI,7149
|
|
@@ -219,7 +219,7 @@ 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=HOxDcWLDN8CqQZ38OCrolO8D54m21LLMZ_vdd9oDZfI,95863
|
|
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
|
|
@@ -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=BDSSbAbJu6HZanPehNh8m4chdT573Q9AL98pC2LULfw,25473
|
|
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
|
|
@@ -378,7 +378,7 @@ opentrons/protocol_engine/execution/run_control.py,sha256=vWLSRdkds2CrtsJ0IU9hX-
|
|
|
378
378
|
opentrons/protocol_engine/execution/status_bar.py,sha256=tR7CHS_y1ARQxcSKDO4YFU2cqVQhePzalmzsyH8b23A,970
|
|
379
379
|
opentrons/protocol_engine/execution/thermocycler_movement_flagger.py,sha256=if_jbmszy2MFMJCEMwt_fP_h0T1OBnHrQyI4jtUygvY,6784
|
|
380
380
|
opentrons/protocol_engine/execution/thermocycler_plate_lifter.py,sha256=SPzuiyNNB05YPb_czPr8KmnvBwmXTszvngW1CX3HVd4,3309
|
|
381
|
-
opentrons/protocol_engine/execution/tip_handler.py,sha256=
|
|
381
|
+
opentrons/protocol_engine/execution/tip_handler.py,sha256=AWVJXR9R91KvQWeRhVGXyoPzCDhLmGtyyRwqBAqjv8E,15405
|
|
382
382
|
opentrons/protocol_engine/notes/__init__.py,sha256=JRh7fKZ4XLUSQOZeI853MYkAZpKvp34RY8yDAHzcEbk,197
|
|
383
383
|
opentrons/protocol_engine/notes/notes.py,sha256=RlLpfElzIa_p51ECCug7Fueq2VHRUeBTtnk-2zQerp0,1419
|
|
384
384
|
opentrons/protocol_engine/resources/__init__.py,sha256=-tuKcd2Fn3YKWDX-tDqgZYv5MOSekGqHaHSoE1XDY3M,745
|
|
@@ -390,7 +390,7 @@ opentrons/protocol_engine/resources/labware_validation.py,sha256=wrth5Qc-RSMQlVm
|
|
|
390
390
|
opentrons/protocol_engine/resources/model_utils.py,sha256=C3OHUi-OtuFUm3dS5rApSU3EJ0clnaCZEyBku5sTjzA,941
|
|
391
391
|
opentrons/protocol_engine/resources/module_data_provider.py,sha256=fU4l1Wkeb1odW6XekvC0_SS0KjzAOcHPJQ4dLMp74NU,1553
|
|
392
392
|
opentrons/protocol_engine/resources/ot3_validation.py,sha256=0x81JoZBXcj2xUVcOF7v5ETc8y5T_sbs-jTPxuSnooE,744
|
|
393
|
-
opentrons/protocol_engine/resources/pipette_data_provider.py,sha256=
|
|
393
|
+
opentrons/protocol_engine/resources/pipette_data_provider.py,sha256=EVPvsMDyTduyQvkULF_c58qirH251bPusbNvZr8YCjA,14788
|
|
394
394
|
opentrons/protocol_engine/state/__init__.py,sha256=l-VhTfs16xika3ZWPqfxovB1Z1GHuPRm-IHWrEOuzAw,1826
|
|
395
395
|
opentrons/protocol_engine/state/abstract_store.py,sha256=b5cqKZhI6ERZj6gyL0kDutD6ogdQngR3T-JmPATvhi8,631
|
|
396
396
|
opentrons/protocol_engine/state/addressable_areas.py,sha256=Al86_Qv-ikveekNPV4XS50yzFzXMGklUgEotvbg3O8s,28217
|
|
@@ -403,7 +403,7 @@ opentrons/protocol_engine/state/liquids.py,sha256=W7cf-mmVaZ3aNyiormFEy79aSvU__Q
|
|
|
403
403
|
opentrons/protocol_engine/state/modules.py,sha256=bylqsYZyVjrnx6BUhDjJb-TofnqPNk0EUYV8j12UINE,50673
|
|
404
404
|
opentrons/protocol_engine/state/motion.py,sha256=nh0UGOVvmpYynOchGJkVLTyIyiJ9CszRTUvp4Czr_GI,13955
|
|
405
405
|
opentrons/protocol_engine/state/move_types.py,sha256=zSQj_qYHBi7_-wrpaZBKmX_O-wNZCpLZkCzagOwI-zY,2132
|
|
406
|
-
opentrons/protocol_engine/state/pipettes.py,sha256=
|
|
406
|
+
opentrons/protocol_engine/state/pipettes.py,sha256=PK57-a2A5wkRwRW0OaEAPVeioN38aCOo9iZrByxT-I4,37350
|
|
407
407
|
opentrons/protocol_engine/state/state.py,sha256=jx044yBfXFV1YO5aqXhJmy7iFx-tXEQ5rIl3lMcrY04,13562
|
|
408
408
|
opentrons/protocol_engine/state/state_summary.py,sha256=8VCxEOBeUflx8IBYUYtgNdwcwgdVZv3R8rSfzsbai7U,923
|
|
409
409
|
opentrons/protocol_engine/state/tips.py,sha256=gU2GsmaWPDyIIjWHj3KXv6NqxphfOd4eeNxF40hm5ok,22621
|
|
@@ -500,9 +500,9 @@ opentrons/util/helpers.py,sha256=3hr801bWGbxEcOFAS7f-iOhmnUhoK5qahbB8SIvaCfY,165
|
|
|
500
500
|
opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
|
|
501
501
|
opentrons/util/logging_config.py,sha256=g3TdzDKa1pL_N3eKhRYCdqPaZYe_hpLV-e8llObTcT4,5657
|
|
502
502
|
opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
|
|
503
|
-
opentrons-8.0.
|
|
504
|
-
opentrons-8.0.
|
|
505
|
-
opentrons-8.0.
|
|
506
|
-
opentrons-8.0.
|
|
507
|
-
opentrons-8.0.
|
|
508
|
-
opentrons-8.0.
|
|
503
|
+
opentrons-8.0.0a7.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
504
|
+
opentrons-8.0.0a7.dist-info/METADATA,sha256=t9_kvk6apuDByc7BPI8F4cM_TSe62ivSF71v5mpv0yQ,4990
|
|
505
|
+
opentrons-8.0.0a7.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
|
|
506
|
+
opentrons-8.0.0a7.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
|
|
507
|
+
opentrons-8.0.0a7.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
|
|
508
|
+
opentrons-8.0.0a7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|