opentrons 8.4.0a0__py2.py3-none-any.whl → 8.4.0a2__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.
@@ -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, Exception]
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 Exception as e:
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
- _PREP_DISTANCE_DEFAULT = 8.25
44
- _PRESS_DISTANCE_DEFAULT = 3.5
45
- _EJECTOR_PUSH_MM_DEFAULT = 7.0
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 != 96:
255
- await self.relative_pickup_tip(
256
- tip_pick_up_params=tip_pick_up_params,
257
- mount=mount,
258
- )
259
- elif channels == 96:
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
- tip_geometry = await self._tip_handler.pick_up_tip(
266
- pipette_id=pipette_id,
267
- labware_id=labware_id,
268
- well_name=well_name,
269
- do_not_ignore_tip_presence=True,
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 OverpressureError, PipetteIdMixin, prepare_for_aspirate
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, home_after=params.homeAfter
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()
@@ -135,7 +135,7 @@ def _offset_location_sequence_to_legacy_offset_location(
135
135
  )
136
136
  (
137
137
  cutout_id,
138
- cutout_fixtures,
138
+ _cutout_fixtures,
139
139
  ) = deck_configuration_provider.get_potential_cutout_fixtures(
140
140
  last_element.addressableAreaName, deck_definition
141
141
  )
@@ -402,7 +402,7 @@ def _find_height_in_partial_frustum(
402
402
  section_top_height, section_volume = capacity
403
403
  if (
404
404
  bottom_section_volume
405
- < target_volume
405
+ <= target_volume
406
406
  <= (bottom_section_volume + section_volume)
407
407
  ):
408
408
  relative_target_volume = target_volume - bottom_section_volume
@@ -34,6 +34,7 @@ class LabwareOffset(BaseModel):
34
34
  definitionUri: str = Field(..., description="The URI for the labware's definition.")
35
35
  location: LegacyLabwareOffsetLocation = Field(
36
36
  ...,
37
+ deprecated=True,
37
38
  description="Where the labware is located on the robot. Deprecated and present only for backwards compatibility; cannot represent certain locations. Use locationSequence instead.",
38
39
  )
39
40
  locationSequence: Optional[LabwareOffsetLocationSequence] = Field(
@@ -18,7 +18,10 @@ class OnLabwareOffsetLocationSequenceComponent(BaseModel):
18
18
  kind: Literal["onLabware"] = "onLabware"
19
19
  labwareUri: str = Field(
20
20
  ...,
21
- description="The definition URI of a labware that a labware can be loaded onto.",
21
+ description=(
22
+ "The definition URI of another labware, probably an adapter,"
23
+ " that the labware will be loaded onto."
24
+ ),
22
25
  )
23
26
 
24
27
 
@@ -99,8 +102,8 @@ class LegacyLabwareOffsetLocation(BaseModel):
99
102
  definitionUri: Optional[str] = Field(
100
103
  None,
101
104
  description=(
102
- "The definition URI of a labware that a labware can be loaded onto,"
103
- " if applicable."
105
+ "The definition URI of another labware, probably an adapter, that the"
106
+ " labware will be loaded onto, if applicable."
104
107
  "\n\n"
105
108
  "This can be combined with moduleModel if the labware is loaded on top of"
106
109
  " an adapter that is loaded on a module."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: opentrons
3
- Version: 8.4.0a0
3
+ Version: 8.4.0a2
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.0a0)
24
+ Requires-Dist: opentrons-shared-data (==8.4.0a2)
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.0a0) ; extra == 'flex-hardware'
38
+ Requires-Dist: opentrons-hardware[flex] (==8.4.0a2) ; extra == 'flex-hardware'
39
39
  Provides-Extra: ot2-hardware
40
- Requires-Dist: opentrons-hardware (==8.4.0a0) ; extra == 'ot2-hardware'
40
+ Requires-Dist: opentrons-hardware (==8.4.0a2) ; 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=3rey8TPuA1eOcO11zjlhRVGHZK7dEOADu8kHzyDgJYI,16707
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=O0DWbYvkn6EIQu2A7xue2CbhcWZsGBbyVYt2JjMyS5g,111728
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
@@ -278,7 +278,7 @@ opentrons/protocol_engine/__init__.py,sha256=UPSk7MbidkiSH_h4V3yxMvyTePKpRr5DM9-
278
278
  opentrons/protocol_engine/create_protocol_engine.py,sha256=tfDIsC7_JKlRiCXPB_8tuxRsssU6o0ViRmWbGPtX9QA,7582
279
279
  opentrons/protocol_engine/engine_support.py,sha256=5wqk5CHudpOUCSNsalWRmBSeHaCT6bEmcYAn9P60L0w,923
280
280
  opentrons/protocol_engine/error_recovery_policy.py,sha256=ejsIywnz9DMv_XK-mo58PynW34sSDgnziPAw2g5m9G8,2873
281
- opentrons/protocol_engine/labware_offset_standardization.py,sha256=s_AqRwpM6KD_nll62-x4fFsxMf1885uA4TVz1NFfyuM,6835
281
+ opentrons/protocol_engine/labware_offset_standardization.py,sha256=nXkqW6lVhWIc0CvA10SZVQNVRF6qPh1qpp1F_KbwMXo,6836
282
282
  opentrons/protocol_engine/plugins.py,sha256=pSEzpItf4RVO2NwoGSbDpmNtO0B0-G2W0g2sIzdyjkI,3449
283
283
  opentrons/protocol_engine/protocol_engine.py,sha256=lM7yfRuigE6Je4NwhR9-oKS4jzXPw8NSDXNugtKEdbk,28343
284
284
  opentrons/protocol_engine/slot_standardization.py,sha256=1YjzQSLHrVPeoTDDN9evu9kbJKCpQzLHT2-C3uINwoU,4004
@@ -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=5r2ma1-0MJ4YYLDG7TAfhfhw5sZPMcfPwsrPPAJxZAs,11023
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=v7fZeDPSPJOkF0bIDu_zQ8W5FlToKHpqCqtb774jBb8,3503
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=F-JEMbZYpSPPIT41SIXDUj_9eiVNtp91_yRZDdT7az0,3898
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
@@ -449,7 +449,7 @@ opentrons/protocol_engine/state/commands.py,sha256=aoON_C5DbiIEPxOGATvwCsSG9eHsF
449
449
  opentrons/protocol_engine/state/config.py,sha256=7jSGxC6Vqj1eA8fqZ2I3zjlxVXg8pxvcBYMztRIx9Mg,1515
450
450
  opentrons/protocol_engine/state/files.py,sha256=w8xxxg8HY0RqKKEGSfHWfrjV54Gb02O3dwtisJ-9j8E,1753
451
451
  opentrons/protocol_engine/state/fluid_stack.py,sha256=uwkf0qYk1UX5iU52xmk-e3yLPK8OG-TtMCcBqrkVFpM,5932
452
- opentrons/protocol_engine/state/frustum_helpers.py,sha256=Aa0fxv-TECagvIWh5oDNzXjGGpvIBWURH6izxxZzwiE,16821
452
+ opentrons/protocol_engine/state/frustum_helpers.py,sha256=ux9wCwQQXrZ9nr-KldtGTilpyW6zXdG5RfHUIUcqlTw,16822
453
453
  opentrons/protocol_engine/state/geometry.py,sha256=EQI9dBCqjuR0Pbfp3aoi10UIO_iNoRYg6FZ0G1e4dfo,94790
454
454
  opentrons/protocol_engine/state/labware.py,sha256=rehy7R1HIhxx3DTtTHIKxqHoBQJ_1tDhhiculMJeIy8,57556
455
455
  opentrons/protocol_engine/state/liquid_classes.py,sha256=u_z75UYdiFAKG0yB3mr1il4T3qaS0Sotq8sL7KLODP8,2990
@@ -478,9 +478,9 @@ opentrons/protocol_engine/types/execution.py,sha256=6g_NvlF4niXjFQwDjkmTgKx-N6I8
478
478
  opentrons/protocol_engine/types/hardware_passthrough.py,sha256=tpTE3XHbRjXWQqY0rgosIfcOAGHqMkOpIU3IpIXgdAA,534
479
479
  opentrons/protocol_engine/types/instrument.py,sha256=sqiY6OKYgI0ViQ2UsuYMkL9MI6OpvdgLzC1mvclrp2M,984
480
480
  opentrons/protocol_engine/types/instrument_sensors.py,sha256=CGcChvuxpRXVJHLZP_wd1ej3XDD9x1S9biugMAnk0tM,1449
481
- opentrons/protocol_engine/types/labware.py,sha256=HsROvCfD7ay3YF_YapZvOMQBHGlrH1UE0QQgim0xDbs,3897
481
+ opentrons/protocol_engine/types/labware.py,sha256=_M1-UlCLGlDDEFuXD5zKH2brnEm6lvvi9hv5sP81HOY,3922
482
482
  opentrons/protocol_engine/types/labware_movement.py,sha256=BEZIDc-6YhU9LRACi0ozroIxuOIq-tngvrFE22uufjs,577
483
- opentrons/protocol_engine/types/labware_offset_location.py,sha256=LRZ8VY6jbnnZNDD_nh_mW7C6cZJOLKSC2gfKQZ99lBg,4136
483
+ opentrons/protocol_engine/types/labware_offset_location.py,sha256=gXOmIHLD1Hk6OhfhmV9Uf2HN0rIKD6syWSPfYehB9QQ,4237
484
484
  opentrons/protocol_engine/types/labware_offset_vector.py,sha256=5Hhyv60I8KpZdUDnN--3ULURcLtJhTrVVLqiIOPtRps,1008
485
485
  opentrons/protocol_engine/types/liquid.py,sha256=6Ec0fC0SEN3jKHYeFSwbQxdEAj5hxDPHlDcL1wXlx6k,810
486
486
  opentrons/protocol_engine/types/liquid_class.py,sha256=SF5WS3s38S87efUqawRGSIYqjhwa4pNx7fB1xdiGHl0,2384
@@ -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.0a0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
586
- opentrons-8.4.0a0.dist-info/METADATA,sha256=QdfN1bVLFyxPJTRVEmzU6uQwWYGil9Fi8zqlsuAwkXc,5084
587
- opentrons-8.4.0a0.dist-info/WHEEL,sha256=qUzzGenXXuJTzyjFah76kDVqDvnk-YDzY00svnrl84w,109
588
- opentrons-8.4.0a0.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
589
- opentrons-8.4.0a0.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
590
- opentrons-8.4.0a0.dist-info/RECORD,,
585
+ opentrons-8.4.0a2.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
586
+ opentrons-8.4.0a2.dist-info/METADATA,sha256=TuBx_GurDW920K5Rdm5rU-KrVQQYvp28TlwZIOkTEH4,5084
587
+ opentrons-8.4.0a2.dist-info/WHEEL,sha256=qUzzGenXXuJTzyjFah76kDVqDvnk-YDzY00svnrl84w,109
588
+ opentrons-8.4.0a2.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
589
+ opentrons-8.4.0a2.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
590
+ opentrons-8.4.0a2.dist-info/RECORD,,