opentrons 8.2.0a0__py2.py3-none-any.whl → 8.2.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.
Files changed (41) hide show
  1. opentrons/drivers/absorbance_reader/async_byonoy.py +3 -3
  2. opentrons/legacy_commands/helpers.py +8 -2
  3. opentrons/protocol_api/core/engine/labware.py +10 -2
  4. opentrons/protocol_api/core/engine/module_core.py +38 -1
  5. opentrons/protocol_api/core/engine/pipette_movement_conflict.py +12 -5
  6. opentrons/protocol_api/core/engine/protocol.py +5 -30
  7. opentrons/protocol_api/core/labware.py +4 -0
  8. opentrons/protocol_api/core/legacy/legacy_labware_core.py +5 -0
  9. opentrons/protocol_api/core/legacy/legacy_protocol_core.py +1 -0
  10. opentrons/protocol_api/core/protocol.py +1 -0
  11. opentrons/protocol_api/module_contexts.py +13 -0
  12. opentrons/protocol_api/protocol_context.py +12 -2
  13. opentrons/protocol_engine/actions/__init__.py +0 -2
  14. opentrons/protocol_engine/actions/actions.py +0 -12
  15. opentrons/protocol_engine/clients/sync_client.py +0 -6
  16. opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +18 -31
  17. opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +17 -29
  18. opentrons/protocol_engine/commands/load_labware.py +9 -0
  19. opentrons/protocol_engine/commands/load_module.py +0 -39
  20. opentrons/protocol_engine/commands/move_labware.py +49 -4
  21. opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +41 -32
  22. opentrons/protocol_engine/create_protocol_engine.py +18 -1
  23. opentrons/protocol_engine/execution/labware_movement.py +69 -21
  24. opentrons/protocol_engine/execution/movement.py +9 -4
  25. opentrons/protocol_engine/protocol_engine.py +0 -7
  26. opentrons/protocol_engine/resources/deck_data_provider.py +0 -39
  27. opentrons/protocol_engine/resources/file_provider.py +11 -7
  28. opentrons/protocol_engine/resources/fixture_validation.py +6 -1
  29. opentrons/protocol_engine/state/geometry.py +91 -49
  30. opentrons/protocol_engine/state/labware.py +102 -25
  31. opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +3 -1
  32. opentrons/protocol_engine/state/modules.py +49 -79
  33. opentrons/protocol_engine/state/motion.py +17 -5
  34. opentrons/protocol_engine/state/update_types.py +16 -0
  35. opentrons/util/logging_config.py +1 -1
  36. {opentrons-8.2.0a0.dist-info → opentrons-8.2.0a1.dist-info}/METADATA +4 -4
  37. {opentrons-8.2.0a0.dist-info → opentrons-8.2.0a1.dist-info}/RECORD +41 -41
  38. {opentrons-8.2.0a0.dist-info → opentrons-8.2.0a1.dist-info}/LICENSE +0 -0
  39. {opentrons-8.2.0a0.dist-info → opentrons-8.2.0a1.dist-info}/WHEEL +0 -0
  40. {opentrons-8.2.0a0.dist-info → opentrons-8.2.0a1.dist-info}/entry_points.txt +0 -0
  41. {opentrons-8.2.0a0.dist-info → opentrons-8.2.0a1.dist-info}/top_level.txt +0 -0
@@ -26,13 +26,15 @@ from opentrons.motion_planning.adjacent_slots_getters import (
26
26
  get_west_slot,
27
27
  get_adjacent_staging_slot,
28
28
  )
29
+ from opentrons.protocol_engine.actions.get_state_update import get_state_updates
29
30
  from opentrons.protocol_engine.commands.calibration.calibrate_module import (
30
31
  CalibrateModuleResult,
31
32
  )
33
+ from opentrons.protocol_engine.state import update_types
32
34
  from opentrons.protocol_engine.state.module_substates.absorbance_reader_substate import (
33
35
  AbsorbanceReaderMeasureMode,
34
36
  )
35
- from opentrons.types import DeckSlotName, MountType
37
+ from opentrons.types import DeckSlotName, MountType, StagingSlotName
36
38
  from ..errors import ModuleNotConnectedError
37
39
 
38
40
  from ..types import (
@@ -67,7 +69,6 @@ from ..actions import (
67
69
  Action,
68
70
  SucceedCommandAction,
69
71
  AddModuleAction,
70
- AddAbsorbanceReaderLidAction,
71
72
  )
72
73
  from ._abstract_store import HasState, HandlesActions
73
74
  from .module_substates import (
@@ -234,13 +235,14 @@ class ModuleStore(HasState[ModuleState], HandlesActions):
234
235
  requested_model=None,
235
236
  module_live_data=action.module_live_data,
236
237
  )
237
- elif isinstance(action, AddAbsorbanceReaderLidAction):
238
- self._update_absorbance_reader_lid_id(
239
- module_id=action.module_id,
240
- lid_id=action.lid_id,
241
- )
238
+
239
+ for state_update in get_state_updates(action):
240
+ self._handle_state_update(state_update)
242
241
 
243
242
  def _handle_command(self, command: Command) -> None:
243
+ # todo(mm, 2024-11-04): Delete this function. Port these isinstance()
244
+ # checks to the update_types.StateUpdate mechanism.
245
+
244
246
  if isinstance(command.result, LoadModuleResult):
245
247
  slot_name = command.params.location.slotName
246
248
  self._add_module_substate(
@@ -297,38 +299,40 @@ class ModuleStore(HasState[ModuleState], HandlesActions):
297
299
  if isinstance(
298
300
  command.result,
299
301
  (
300
- absorbance_reader.CloseLidResult,
301
- absorbance_reader.OpenLidResult,
302
302
  absorbance_reader.InitializeResult,
303
303
  absorbance_reader.ReadAbsorbanceResult,
304
304
  ),
305
305
  ):
306
306
  self._handle_absorbance_reader_commands(command)
307
307
 
308
- def _update_absorbance_reader_lid_id(
309
- self,
310
- module_id: str,
311
- lid_id: str,
312
- ) -> None:
313
- abs_substate = self._state.substate_by_module_id.get(module_id)
314
- assert isinstance(
315
- abs_substate, AbsorbanceReaderSubState
316
- ), f"{module_id} is not an absorbance plate reader."
308
+ def _handle_state_update(self, state_update: update_types.StateUpdate) -> None:
309
+ if state_update.absorbance_reader_lid != update_types.NO_CHANGE:
310
+ module_id = state_update.absorbance_reader_lid.module_id
311
+ is_lid_on = state_update.absorbance_reader_lid.is_lid_on
312
+
313
+ # Get current values:
314
+ absorbance_reader_substate = self._state.substate_by_module_id[module_id]
315
+ assert isinstance(
316
+ absorbance_reader_substate, AbsorbanceReaderSubState
317
+ ), f"{module_id} is not an absorbance plate reader."
318
+ configured = absorbance_reader_substate.configured
319
+ measure_mode = absorbance_reader_substate.measure_mode
320
+ configured_wavelengths = absorbance_reader_substate.configured_wavelengths
321
+ reference_wavelength = absorbance_reader_substate.reference_wavelength
322
+ data = absorbance_reader_substate.data
317
323
 
318
- prev_state: AbsorbanceReaderSubState = abs_substate
319
- self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState(
320
- module_id=AbsorbanceReaderId(module_id),
321
- configured=prev_state.configured,
322
- measured=prev_state.measured,
323
- is_lid_on=prev_state.is_lid_on,
324
- data=prev_state.data,
325
- measure_mode=prev_state.measure_mode,
326
- configured_wavelengths=prev_state.configured_wavelengths,
327
- reference_wavelength=prev_state.reference_wavelength,
328
- lid_id=lid_id,
329
- )
324
+ self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState(
325
+ module_id=AbsorbanceReaderId(module_id),
326
+ configured=configured,
327
+ measured=True,
328
+ is_lid_on=is_lid_on,
329
+ measure_mode=measure_mode,
330
+ configured_wavelengths=configured_wavelengths,
331
+ reference_wavelength=reference_wavelength,
332
+ data=data,
333
+ )
330
334
 
331
- def _add_module_substate( # noqa: C901
335
+ def _add_module_substate(
332
336
  self,
333
337
  module_id: str,
334
338
  serial_number: Optional[str],
@@ -387,16 +391,6 @@ class ModuleStore(HasState[ModuleState], HandlesActions):
387
391
  module_id=MagneticBlockId(module_id)
388
392
  )
389
393
  elif ModuleModel.is_absorbance_reader(actual_model):
390
- lid_labware_id = None
391
- slot = self._state.slot_by_module_id[module_id]
392
- if slot is not None:
393
- reader_addressable_area = f"absorbanceReaderV1{slot.value}"
394
- for labware in self._state.deck_fixed_labware:
395
- if labware.location == AddressableAreaLocation(
396
- addressableAreaName=reader_addressable_area
397
- ):
398
- lid_labware_id = labware.labware_id
399
- break
400
394
  self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState(
401
395
  module_id=AbsorbanceReaderId(module_id),
402
396
  configured=False,
@@ -406,7 +400,6 @@ class ModuleStore(HasState[ModuleState], HandlesActions):
406
400
  measure_mode=None,
407
401
  configured_wavelengths=None,
408
402
  reference_wavelength=None,
409
- lid_id=lid_labware_id,
410
403
  )
411
404
 
412
405
  def _update_additional_slots_occupied_by_thermocycler(
@@ -600,8 +593,6 @@ class ModuleStore(HasState[ModuleState], HandlesActions):
600
593
  command: Union[
601
594
  absorbance_reader.Initialize,
602
595
  absorbance_reader.ReadAbsorbance,
603
- absorbance_reader.CloseLid,
604
- absorbance_reader.OpenLid,
605
596
  ],
606
597
  ) -> None:
607
598
  module_id = command.params.moduleId
@@ -616,8 +607,6 @@ class ModuleStore(HasState[ModuleState], HandlesActions):
616
607
  configured_wavelengths = absorbance_reader_substate.configured_wavelengths
617
608
  reference_wavelength = absorbance_reader_substate.reference_wavelength
618
609
  is_lid_on = absorbance_reader_substate.is_lid_on
619
- lid_id = absorbance_reader_substate.lid_id
620
- data = absorbance_reader_substate.data
621
610
 
622
611
  if isinstance(command.result, absorbance_reader.InitializeResult):
623
612
  self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState(
@@ -625,7 +614,6 @@ class ModuleStore(HasState[ModuleState], HandlesActions):
625
614
  configured=True,
626
615
  measured=False,
627
616
  is_lid_on=is_lid_on,
628
- lid_id=lid_id,
629
617
  measure_mode=AbsorbanceReaderMeasureMode(command.params.measureMode),
630
618
  configured_wavelengths=command.params.sampleWavelengths,
631
619
  reference_wavelength=command.params.referenceWavelength,
@@ -637,39 +625,12 @@ class ModuleStore(HasState[ModuleState], HandlesActions):
637
625
  configured=configured,
638
626
  measured=True,
639
627
  is_lid_on=is_lid_on,
640
- lid_id=lid_id,
641
628
  measure_mode=measure_mode,
642
629
  configured_wavelengths=configured_wavelengths,
643
630
  reference_wavelength=reference_wavelength,
644
631
  data=command.result.data,
645
632
  )
646
633
 
647
- elif isinstance(command.result, absorbance_reader.OpenLidResult):
648
- self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState(
649
- module_id=AbsorbanceReaderId(module_id),
650
- configured=configured,
651
- measured=True,
652
- is_lid_on=False,
653
- lid_id=lid_id,
654
- measure_mode=measure_mode,
655
- configured_wavelengths=configured_wavelengths,
656
- reference_wavelength=reference_wavelength,
657
- data=data,
658
- )
659
-
660
- elif isinstance(command.result, absorbance_reader.CloseLidResult):
661
- self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState(
662
- module_id=AbsorbanceReaderId(module_id),
663
- configured=configured,
664
- measured=True,
665
- is_lid_on=True,
666
- lid_id=lid_id,
667
- measure_mode=measure_mode,
668
- configured_wavelengths=configured_wavelengths,
669
- reference_wavelength=reference_wavelength,
670
- data=data,
671
- )
672
-
673
634
 
674
635
  class ModuleView(HasState[ModuleState]):
675
636
  """Read-only view of computed module state."""
@@ -883,12 +844,21 @@ class ModuleView(HasState[ModuleState]):
883
844
  """Get the specified module's dimensions."""
884
845
  return self.get_definition(module_id).dimensions
885
846
 
886
- def get_nominal_module_offset(
847
+ def get_nominal_offset_to_child(
887
848
  self,
888
849
  module_id: str,
850
+ # todo(mm, 2024-11-07): A method of one view taking a sibling view as an argument
851
+ # is unusual, and may be bug-prone if the order in which the views are updated
852
+ # matters. If we need to compute something that depends on module info and
853
+ # addressable area info, can we do that computation in GeometryView instead of
854
+ # here?
889
855
  addressable_areas: AddressableAreaView,
890
856
  ) -> LabwareOffsetVector:
891
- """Get the module's nominal offset vector computed with slot transform."""
857
+ """Get the nominal offset from a module's location to its child labware's location.
858
+
859
+ Includes the slot-specific transform. Does not include the child's
860
+ Labware Position Check offset.
861
+ """
892
862
  if (
893
863
  self.state.deck_type == DeckType.OT2_STANDARD
894
864
  or self.state.deck_type == DeckType.OT2_SHORT_TRASH
@@ -996,7 +966,7 @@ class ModuleView(HasState[ModuleState]):
996
966
  default_lw_offset_point = self.get_definition(module_id).labwareOffset.z
997
967
  z_difference = module_height - default_lw_offset_point
998
968
 
999
- nominal_transformed_lw_offset_z = self.get_nominal_module_offset(
969
+ nominal_transformed_lw_offset_z = self.get_nominal_offset_to_child(
1000
970
  module_id=module_id, addressable_areas=addressable_areas
1001
971
  ).z
1002
972
  calibration_offset = self.get_module_calibration_offset(module_id)
@@ -1124,8 +1094,8 @@ class ModuleView(HasState[ModuleState]):
1124
1094
 
1125
1095
  def should_dodge_thermocycler(
1126
1096
  self,
1127
- from_slot: DeckSlotName,
1128
- to_slot: DeckSlotName,
1097
+ from_slot: Union[DeckSlotName, StagingSlotName],
1098
+ to_slot: Union[DeckSlotName, StagingSlotName],
1129
1099
  ) -> bool:
1130
1100
  """Decide if the requested path would cross the thermocycler, if installed.
1131
1101
 
@@ -2,7 +2,7 @@
2
2
  from dataclasses import dataclass
3
3
  from typing import List, Optional, Union
4
4
 
5
- from opentrons.types import MountType, Point
5
+ from opentrons.types import MountType, Point, StagingSlotName
6
6
  from opentrons.hardware_control.types import CriticalPoint
7
7
  from opentrons.motion_planning.adjacent_slots_getters import (
8
8
  get_east_west_slots,
@@ -277,9 +277,13 @@ class MotionView:
277
277
  current_location = self._pipettes.get_current_location()
278
278
  if current_location is not None:
279
279
  if isinstance(current_location, CurrentWell):
280
- pipette_deck_slot = self._geometry.get_ancestor_slot_name(
280
+ ancestor = self._geometry.get_ancestor_slot_name(
281
281
  current_location.labware_id
282
- ).as_int()
282
+ )
283
+ if isinstance(ancestor, StagingSlotName):
284
+ # Staging Area Slots cannot intersect with the h/s
285
+ return False
286
+ pipette_deck_slot = ancestor.as_int()
283
287
  else:
284
288
  pipette_deck_slot = (
285
289
  self._addressable_areas.get_addressable_area_base_slot(
@@ -299,9 +303,13 @@ class MotionView:
299
303
  current_location = self._pipettes.get_current_location()
300
304
  if current_location is not None:
301
305
  if isinstance(current_location, CurrentWell):
302
- pipette_deck_slot = self._geometry.get_ancestor_slot_name(
306
+ ancestor = self._geometry.get_ancestor_slot_name(
303
307
  current_location.labware_id
304
- ).as_int()
308
+ )
309
+ if isinstance(ancestor, StagingSlotName):
310
+ # Staging Area Slots cannot intersect with the h/s
311
+ return False
312
+ pipette_deck_slot = ancestor.as_int()
305
313
  else:
306
314
  pipette_deck_slot = (
307
315
  self._addressable_areas.get_addressable_area_base_slot(
@@ -324,6 +332,10 @@ class MotionView:
324
332
  """Get a list of touch points for a touch tip operation."""
325
333
  mount = self._pipettes.get_mount(pipette_id)
326
334
  labware_slot = self._geometry.get_ancestor_slot_name(labware_id)
335
+ if isinstance(labware_slot, StagingSlotName):
336
+ raise errors.LocationIsStagingSlotError(
337
+ "Cannot perform Touch Tip on labware in Staging Area Slot."
338
+ )
327
339
  next_to_module = self._modules.is_edge_move_unsafe(mount, labware_slot)
328
340
  edge_path_type = self._labware.get_edge_path_type(
329
341
  labware_id, well_name, mount, labware_slot, next_to_module
@@ -205,6 +205,14 @@ class LiquidOperatedUpdate:
205
205
  volume_added: float | ClearType
206
206
 
207
207
 
208
+ @dataclasses.dataclass
209
+ class AbsorbanceReaderLidUpdate:
210
+ """An update to an absorbance reader's lid location."""
211
+
212
+ module_id: str
213
+ is_lid_on: bool
214
+
215
+
208
216
  @dataclasses.dataclass
209
217
  class StateUpdate:
210
218
  """Represents an update to perform on engine state."""
@@ -231,6 +239,8 @@ class StateUpdate:
231
239
 
232
240
  liquid_operated: LiquidOperatedUpdate | NoChangeType = NO_CHANGE
233
241
 
242
+ absorbance_reader_lid: AbsorbanceReaderLidUpdate | NoChangeType = NO_CHANGE
243
+
234
244
  # These convenience functions let the caller avoid the boilerplate of constructing a
235
245
  # complicated dataclass tree.
236
246
 
@@ -406,3 +416,9 @@ class StateUpdate:
406
416
  well_name=well_name,
407
417
  volume_added=volume_added,
408
418
  )
419
+
420
+ def set_absorbance_reader_lid(self, module_id: str, is_lid_on: bool) -> None:
421
+ """Update an absorbance reader's lid location. See `AbsorbanceReaderLidUpdate`."""
422
+ self.absorbance_reader_lid = AbsorbanceReaderLidUpdate(
423
+ module_id=module_id, is_lid_on=is_lid_on
424
+ )
@@ -5,7 +5,7 @@ from typing import Any, Dict
5
5
 
6
6
  from opentrons.config import CONFIG, ARCHITECTURE, SystemArchitecture
7
7
 
8
- if ARCHITECTURE is SystemArchitecture.BUILDROOT:
8
+ if ARCHITECTURE is SystemArchitecture.YOCTO:
9
9
  from opentrons_hardware.sensors import SENSOR_LOG_NAME
10
10
  else:
11
11
  # we don't use the sensor log on ot2 or host
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: opentrons
3
- Version: 8.2.0a0
3
+ Version: 8.2.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.2.0a0
24
+ Requires-Dist: opentrons-shared-data ==8.2.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
@@ -34,9 +34,9 @@ Requires-Dist: pyusb ==1.2.1
34
34
  Requires-Dist: packaging >=21.0
35
35
  Requires-Dist: importlib-metadata >=1.0 ; python_version < "3.8"
36
36
  Provides-Extra: flex-hardware
37
- Requires-Dist: opentrons-hardware[flex] ==8.2.0a0 ; extra == 'flex-hardware'
37
+ Requires-Dist: opentrons-hardware[flex] ==8.2.0a1 ; extra == 'flex-hardware'
38
38
  Provides-Extra: ot2-hardware
39
- Requires-Dist: opentrons-hardware ==8.2.0a0 ; extra == 'ot2-hardware'
39
+ Requires-Dist: opentrons-hardware ==8.2.0a1 ; extra == 'ot2-hardware'
40
40
 
41
41
  .. _Full API Documentation: http://docs.opentrons.com
42
42
 
@@ -47,7 +47,7 @@ opentrons/drivers/types.py,sha256=muQKlqOMYcL6iglT9a3iEJ5EnqcBDCkgHz2KyePsm6I,22
47
47
  opentrons/drivers/utils.py,sha256=QmSTP07PPXq3_Qth1Idagn7lixWFjpkOzR8LFSpcw-g,7362
48
48
  opentrons/drivers/absorbance_reader/__init__.py,sha256=d9_-VJ_MKOyRy9C5Ioeg4CWsC1WIVgQlxGqBvgpoBRc,322
49
49
  opentrons/drivers/absorbance_reader/abstract.py,sha256=Egc7RKKXscEXFC0bPVx_r1vKe2-Df9PJyDpH0OFOIiw,2005
50
- opentrons/drivers/absorbance_reader/async_byonoy.py,sha256=HXJd0w47GJ6zrRyCTjI5xUaCmnRIPUOa1a7PViI1A6A,13486
50
+ opentrons/drivers/absorbance_reader/async_byonoy.py,sha256=pp4lvODBd3ydKwac28RANQgWs_X5Ml2NdFw0ZHgpXPA,13502
51
51
  opentrons/drivers/absorbance_reader/driver.py,sha256=V8hLjNRVzlRPtVW04XEWrXytn06ZRBxG9LqL4ETj21g,2791
52
52
  opentrons/drivers/absorbance_reader/hid_protocol.py,sha256=OM6Ogkl1Lw3d501rfHcRI3lPZITAVKdxCR6JkHdKMCQ,3836
53
53
  opentrons/drivers/absorbance_reader/simulator.py,sha256=MiFQgnVNq2R35T3u59idcKlrj6SEFllt8tdupfH5jKQ,2419
@@ -199,7 +199,7 @@ opentrons/hardware_control/scripts/repl.py,sha256=RojtHjYV6sa6O4SeNEgs5SvnAK0imQ
199
199
  opentrons/hardware_control/scripts/tc_control.py,sha256=V6hOzoRXL3xqIUEz8Raldd45aO2JgN5m5Hr08c1G8Ko,2741
200
200
  opentrons/legacy_commands/__init__.py,sha256=erkaz7hc2iHsTtjpFDWrR1V5n47it3U1qxD2zL9CkuE,63
201
201
  opentrons/legacy_commands/commands.py,sha256=evB4X1dx9jnPwY-QKeA0Z5aX0gV0EG8m-a6qTVxTErU,8966
202
- opentrons/legacy_commands/helpers.py,sha256=VCBnzKE1-JBTLAgZwwJOETlSYIXViIt6NX7LzEA9zaU,2533
202
+ opentrons/legacy_commands/helpers.py,sha256=dRtOWQdeRnDn23yBHdPQfahug5OFwuUzdkT7qRj1gRM,2675
203
203
  opentrons/legacy_commands/module_commands.py,sha256=EO2YtrfzCCaGPYjGXWfk6jjSHiEqk1E6D8Ef2qDi1qI,7769
204
204
  opentrons/legacy_commands/protocol_commands.py,sha256=nPYBrm7j9co83IGWjzae2GOVkEZdu58pXQv3eOdpLzg,1383
205
205
  opentrons/legacy_commands/publisher.py,sha256=n7hT9n4zahM3N2LNIAEs7hqs5RbHHie_tev2M8pke4Y,5441
@@ -222,40 +222,40 @@ opentrons/protocol_api/deck.py,sha256=94vFceg1SC1bAGd7TvC1ZpYwnJR-VlzurEZ6jkacYe
222
222
  opentrons/protocol_api/disposal_locations.py,sha256=NRiSGmDR0LnbyEkWSOM-o64uR2fUoB1NWJG7Y7SsJSs,7920
223
223
  opentrons/protocol_api/instrument_context.py,sha256=EnOs4BAmpIabaWMFKCqhwIJcrWpP-iEv32kmdV2t9Uo,97275
224
224
  opentrons/protocol_api/labware.py,sha256=qwjAO1Au9Ujx5jyGNQ0-HLDBOXUygnXNSuv5696tGCw,48177
225
- opentrons/protocol_api/module_contexts.py,sha256=pD1qBrt7s1isr1a1hLtW3fHV84yvLsF6-NQMla9PgnM,39805
225
+ opentrons/protocol_api/module_contexts.py,sha256=TZiswcxFRSFP_t_OoE03BSnOkZo9XQjoayHiUlVeqwA,40455
226
226
  opentrons/protocol_api/module_validation_and_errors.py,sha256=XL_m72P8rcvGO2fynY7UzXLcpGuI6X4s0V6Xf735Iyc,1464
227
- opentrons/protocol_api/protocol_context.py,sha256=ldIGRuDl3P8jQVuq0465ihBqKT1eMDSpT-_E3bR-8pM,54916
227
+ opentrons/protocol_api/protocol_context.py,sha256=3nVIYxTpFp2Ho6kdW65hG8LhDaTRvlFuGbuy9LsQg5s,55459
228
228
  opentrons/protocol_api/robot_context.py,sha256=vph_ZqfdmREOwLwpjSkXiSZSpI1HO0HuilhqjhgT7Rw,2660
229
229
  opentrons/protocol_api/validation.py,sha256=bWRJOEw0cAqq9lRAXbhHHXGrl0hjjTiW3KW9SJa8f_A,18397
230
230
  opentrons/protocol_api/core/__init__.py,sha256=-g74o8OtBB0LmmOvwkRvPgrHt7fF7T8FRHDj-x_-Onk,736
231
231
  opentrons/protocol_api/core/common.py,sha256=sXWlP8F4ZAEGcDh1WuavrVxkoi-FultBbpY6JW0_9ZY,1029
232
232
  opentrons/protocol_api/core/core_map.py,sha256=gq3CIYPxuPvozf8yj8FprqBfs3e4ZJGQ6s0ViPbwV08,1757
233
233
  opentrons/protocol_api/core/instrument.py,sha256=C-noyr_D6164NwcHEU5RYLnwgAwj1u3ocF3gTGaeS0Q,9474
234
- opentrons/protocol_api/core/labware.py,sha256=F82KSnsgnwOUeg8x_nCF8QHfmBRxjWy_nHKHlCXf3HY,3851
234
+ opentrons/protocol_api/core/labware.py,sha256=SuHs0dP28F5pMWzeU1Ih0zzuD8h9Doyvmu2xIl14g7g,3946
235
235
  opentrons/protocol_api/core/module.py,sha256=p02IstVzfSqTpwbfiCYkPv_xpeb78Hi__PQKJPePxNs,12548
236
- opentrons/protocol_api/core/protocol.py,sha256=UP9la9VsOFGW3jpDbH2jmQAhX27fbH5fqgh78P-pVR8,7289
236
+ opentrons/protocol_api/core/protocol.py,sha256=YUVZfbZvbRLOCLNZN5UKvmw8pwobiuL114GdMpmoLu4,7311
237
237
  opentrons/protocol_api/core/well.py,sha256=quBAF0UjcsRcqZy_Cb13NIkfnx4y1VbEHZgGcDIl-wI,2393
238
238
  opentrons/protocol_api/core/well_grid.py,sha256=BU28DKaBgEU_JdZ6pEzrwNxmuh6TkO4zlg7Pq1Rf5Xk,1516
239
239
  opentrons/protocol_api/core/engine/__init__.py,sha256=B_5T7zgkWDb1mXPg4NbT-wBkQaK-WVokMMnJRNu7xiM,582
240
240
  opentrons/protocol_api/core/engine/deck_conflict.py,sha256=0viwOidafVd0XhS8C7V72i68-ZYzHfDUNeqGozTA1G8,12012
241
241
  opentrons/protocol_api/core/engine/exceptions.py,sha256=aZgNrmYEeuPZm21nX_KZYtvyjv5h_zPjxxgPkEV7_bw,725
242
242
  opentrons/protocol_api/core/engine/instrument.py,sha256=BMqizINMrhZFjJmA0IXsD65xXvpA10V96y-S_JYb-NY,36075
243
- opentrons/protocol_api/core/engine/labware.py,sha256=MaTxuKf7No7PfYpLGJ-lHsqSUC3fHYd6Gm_mkeeHy0I,7128
243
+ opentrons/protocol_api/core/engine/labware.py,sha256=ra6leDHW9sEmvjPJIIx8iMVVIeFuAyJlLv3H92Ww7TM,7568
244
244
  opentrons/protocol_api/core/engine/load_labware_params.py,sha256=cwbmGyYp5ZOyANtEm6KKwT_n8fnYc5RysBst9nRh7Ls,4607
245
- opentrons/protocol_api/core/engine/module_core.py,sha256=IthugHzEo-3slvxaq75rgMsLsN6IvBhqUxl5CvqnSco,25542
245
+ opentrons/protocol_api/core/engine/module_core.py,sha256=TWqMqRgekBISMOEtlveDByJQI6JfSu-rvYOnqQbTgGY,26923
246
246
  opentrons/protocol_api/core/engine/overlap_versions.py,sha256=PyGvQtQUg1wzNtkuGZtxwXm019PoIjq7em2JiWaxbXc,675
247
- opentrons/protocol_api/core/engine/pipette_movement_conflict.py,sha256=WzUNBufR4irM5dNId1_CtCFtm3uqwkpIw2UrF71I4ZQ,15031
247
+ opentrons/protocol_api/core/engine/pipette_movement_conflict.py,sha256=IxTcekperTA_Jv-fF6OonUif-jX5KESrdjf15oVD0GE,15360
248
248
  opentrons/protocol_api/core/engine/point_calculations.py,sha256=C2eF0fvJQGMqQv3DzNhc1-m8HTAXTyTsHPJEPrEUEmo,2502
249
- opentrons/protocol_api/core/engine/protocol.py,sha256=GCe3pot9HYhMUlvOwfGzGMjP62xYOtueIFI00z33FAQ,33209
249
+ opentrons/protocol_api/core/engine/protocol.py,sha256=gdt262cVHi8cwXl5H2WZBmayqzl0idbF4-OecSvKSYo,31914
250
250
  opentrons/protocol_api/core/engine/stringify.py,sha256=Hu2nHILjQn_OSxqBOZgiah9jSsyznxhy-Md5EvWclUg,2421
251
251
  opentrons/protocol_api/core/engine/well.py,sha256=9rbu0YbCnIz9j7OU1T2LEIWcdCclCIQsHMdHYLjy2F8,5381
252
252
  opentrons/protocol_api/core/legacy/__init__.py,sha256=_9jCJNKG3SlS_vljVu8HHkZmtLf4F-f-JHALLF5d5go,401
253
253
  opentrons/protocol_api/core/legacy/deck.py,sha256=qHqcGo-Kdkl9L1aOE0pwrm9tsAnwkXbt4rIOr_VEP-s,13955
254
254
  opentrons/protocol_api/core/legacy/labware_offset_provider.py,sha256=uNNeHecIz_A9u19QalpVKF7pxloHqLg27EFcD9dbYtc,3735
255
255
  opentrons/protocol_api/core/legacy/legacy_instrument_core.py,sha256=irXO6YbGgp7LWQwia6rLqlwRWIu1SmxCj1YS3gKEzWc,21993
256
- opentrons/protocol_api/core/legacy/legacy_labware_core.py,sha256=w3JCIfFzXx0n_lJ12hFmtwuXPb8vsyxKZhLReEQVyBs,7754
256
+ opentrons/protocol_api/core/legacy/legacy_labware_core.py,sha256=0LeoH2vIFTuPzXFdSSeddIWcnjdMRTPpOAEsuvLDtBU,7901
257
257
  opentrons/protocol_api/core/legacy/legacy_module_core.py,sha256=tUhj88NKBMjCmCg6wjh1e2HX4d5hxjh8ZeJiYXaTaGY,23111
258
- opentrons/protocol_api/core/legacy/legacy_protocol_core.py,sha256=-Tm5WltrExFtJIfOm-xSGGio91Q0k6jZpRs-2DVrvOQ,21468
258
+ opentrons/protocol_api/core/legacy/legacy_protocol_core.py,sha256=zoD5kqOZ4TUdZeFx2OdRLhMq9M9i7yATdqhynR6KNcM,21490
259
259
  opentrons/protocol_api/core/legacy/legacy_well_core.py,sha256=E9RiflLhbBiakshjzDFQWSiH-WGiFaaHSMrU1Esk5ng,4377
260
260
  opentrons/protocol_api/core/legacy/load_info.py,sha256=j-fzoUKwvXNS_5CQsE43XI5YOPfTu1WE6h1u9GzGCE4,1925
261
261
  opentrons/protocol_api/core/legacy/module_geometry.py,sha256=wbWeHomppdCDmp_nKrnNWbnRAapOamkhFMnaoY7ShTw,20886
@@ -264,20 +264,20 @@ opentrons/protocol_api/core/legacy_simulator/__init__.py,sha256=m9bLHGDJ6LSYC2WP
264
264
  opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py,sha256=mcHgeVT1lXscc4wvCFAcOrfB7lq4JaAVOWo8aAc4_xQ,18655
265
265
  opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py,sha256=28HrrHzeUfnGKXpZqQ-VM8WbPiadqVhKj2S9y33q6Lo,2910
266
266
  opentrons/protocol_engine/__init__.py,sha256=35cWIWtg_0OO-9v6sgWNuiJ5siDM9y77K3KsuCY69K4,3253
267
- opentrons/protocol_engine/create_protocol_engine.py,sha256=HBSQJLuy_2nhBPwzq98q7fXGdUoy0o1b_rigiFXeIds,6829
267
+ opentrons/protocol_engine/create_protocol_engine.py,sha256=tfDIsC7_JKlRiCXPB_8tuxRsssU6o0ViRmWbGPtX9QA,7582
268
268
  opentrons/protocol_engine/engine_support.py,sha256=5wqk5CHudpOUCSNsalWRmBSeHaCT6bEmcYAn9P60L0w,923
269
269
  opentrons/protocol_engine/error_recovery_policy.py,sha256=ejsIywnz9DMv_XK-mo58PynW34sSDgnziPAw2g5m9G8,2873
270
270
  opentrons/protocol_engine/plugins.py,sha256=pSEzpItf4RVO2NwoGSbDpmNtO0B0-G2W0g2sIzdyjkI,3449
271
- opentrons/protocol_engine/protocol_engine.py,sha256=FuFd0kMwRn-5BAs67fItG9h81mz2mvmGX2EV0Gqzqhk,28369
271
+ opentrons/protocol_engine/protocol_engine.py,sha256=zhWy2TBC1oDlg-blJF8QxXraLySZAO1WRj11E2QnAyQ,28063
272
272
  opentrons/protocol_engine/slot_standardization.py,sha256=Nhw7UwC2-6p8g1v4cJsy2N390_3tnBMMjwlx7-E36gA,4353
273
273
  opentrons/protocol_engine/types.py,sha256=F9CmNQXDI3KVCduK05HRQjNc-CPmIfkAAekjMSErXoc,36724
274
- opentrons/protocol_engine/actions/__init__.py,sha256=tWKoFIcTrN6cZnk5TtKs8WrkxIX4C1WThZOHtPst6nY,1631
274
+ opentrons/protocol_engine/actions/__init__.py,sha256=Zm5AwWOkc9QZJo8WBww8P73KYIwRFjid0Vi1NLPXSik,1561
275
275
  opentrons/protocol_engine/actions/action_dispatcher.py,sha256=CiJG8djKxyjZZX_T7lhPZnEuLXV1yE41ZnvzsmCHoLU,944
276
276
  opentrons/protocol_engine/actions/action_handler.py,sha256=N907GFwLJc0OMiQFGa7Bz8RAgWtfeipN286QSwEZ1iA,341
277
- opentrons/protocol_engine/actions/actions.py,sha256=sCfWPKz_8ykG2kvnTRjEm_i9xyrWfgXFLjG2z780oEA,8412
277
+ opentrons/protocol_engine/actions/actions.py,sha256=CEgvLYOxGkwvFGKAp25Pz4XwmP-L1XtydqxOwdTwcfg,8101
278
278
  opentrons/protocol_engine/actions/get_state_update.py,sha256=tsnfhZDFHWER6y6UV57LlaYrnxYJnASBsfQ55fdGh5g,1128
279
279
  opentrons/protocol_engine/clients/__init__.py,sha256=ILmfVL5SOkWzRpL2XXh0Q0MizOj7E2i-WObVuIsWAQE,161
280
- opentrons/protocol_engine/clients/sync_client.py,sha256=xbK9xWudocMOS09LwlESVTiSo7qlsEva0QOWPfTnvQk,5387
280
+ opentrons/protocol_engine/clients/sync_client.py,sha256=f65mhTO3zwTph1LtCl7Td6z3-chgtPwoeMdP6Lvo5Eg,5121
281
281
  opentrons/protocol_engine/clients/transports.py,sha256=QejmtG5TjgOLUXpNhOzor_q-7MFI1qNfsguwkzY6Rxc,7177
282
282
  opentrons/protocol_engine/commands/__init__.py,sha256=FKOX8Uq3g2_syxMQN0A70qEtpJrsJDlJfPhAxS4ZAII,14006
283
283
  opentrons/protocol_engine/commands/aspirate.py,sha256=zOh7wqqFlAdkQCUC1-pp0-Zi-6QEpg3ntXDTpzlgc4Y,6137
@@ -299,11 +299,11 @@ opentrons/protocol_engine/commands/get_tip_presence.py,sha256=igvMiKJWzdetWBXlIa
299
299
  opentrons/protocol_engine/commands/hash_command_params.py,sha256=obWy4TbVH97SyhNqrSD6iP1wgZ20JoaH1rilZCjXxIs,1530
300
300
  opentrons/protocol_engine/commands/home.py,sha256=pmiul9vLcpVijHAOBwzkdHulW5tBCEiEcNey3bCXdAE,3075
301
301
  opentrons/protocol_engine/commands/liquid_probe.py,sha256=nmrO2Mu65O1MwDnaeK-PcAMi1AKw4AtNFL6urydVN4o,12068
302
- opentrons/protocol_engine/commands/load_labware.py,sha256=1vz07m0OYKmg6f2SLkqjqdBPm5r0eYQnOUb_umvqn9o,7118
302
+ opentrons/protocol_engine/commands/load_labware.py,sha256=UQSGj0dbfnkGjYxwPrQkVm2CNyrJYemu8L7g2xDhlt0,7584
303
303
  opentrons/protocol_engine/commands/load_liquid.py,sha256=MIwzfqhzKR71DEALKvgcnykp1CbJ3kkssClLrT7jPrY,2781
304
- opentrons/protocol_engine/commands/load_module.py,sha256=fvKSYDbncPCH0Z88bMtdQf90fbc5mXGjk-fgmB-asoI,9224
304
+ opentrons/protocol_engine/commands/load_module.py,sha256=Vgu_O64tfDNgqAhVlVcjVrejt1TeKr_8ziar7L17-yw,7499
305
305
  opentrons/protocol_engine/commands/load_pipette.py,sha256=bdPAzFI2zru-Rr5enKumVkd9MiJQkDcfqAWaSzIa_i0,5495
306
- opentrons/protocol_engine/commands/move_labware.py,sha256=AmMRPy-mkSefRtKvY1-snrU6XFO3VwujnYjkRhvMT6Y,13306
306
+ opentrons/protocol_engine/commands/move_labware.py,sha256=jLdXc6PhHs1gxSoP1AlmnPZYPcNF9-nSJcKFGQMRszk,15521
307
307
  opentrons/protocol_engine/commands/move_relative.py,sha256=S5740FZ953HtCjURqDuZRfYRYRN4cMeo0kwRv1OFPz4,3051
308
308
  opentrons/protocol_engine/commands/move_to_addressable_area.py,sha256=cJRXXRLkawPx9H391yDpkC9DTCQk-IUsfRjGEMKftzg,6342
309
309
  opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py,sha256=5BAisk0npPcesI6bMQxKH2Xxz641uyR6RbtU9RiD5NM,7134
@@ -322,9 +322,9 @@ opentrons/protocol_engine/commands/verify_tip_presence.py,sha256=LyB6yvCi4IJIzQA
322
322
  opentrons/protocol_engine/commands/wait_for_duration.py,sha256=DIATqpdBStGQWnLAbbqz6_e3WDc7lFo7U2ShKfMAuwo,2202
323
323
  opentrons/protocol_engine/commands/wait_for_resume.py,sha256=yFNpYDJO5mgAhIpMb1i7Epo7ZhO15Ot9RsSUdW8AjUg,2178
324
324
  opentrons/protocol_engine/commands/absorbance_reader/__init__.py,sha256=umS98LlkBEAToRCvxLpr4k43tRPPTfkYu-81-bLy5DU,1251
325
- opentrons/protocol_engine/commands/absorbance_reader/close_lid.py,sha256=2ZjJN5_f7brDnFG6GOQ4QDw_0S4kTrPVYHdYn0C-VEI,6164
325
+ opentrons/protocol_engine/commands/absorbance_reader/close_lid.py,sha256=i6kggql8hJgTxpUbc5dmdMdHDsYWiczfMvZNA72FmvI,5540
326
326
  opentrons/protocol_engine/commands/absorbance_reader/initialize.py,sha256=HKsgwCfv6LR4SJ06721eq9_NhKcxtVR5lYIdaZPL-_4,4760
327
- opentrons/protocol_engine/commands/absorbance_reader/open_lid.py,sha256=4datBViLQ8aoVgxht_WvgtGmvHerz_BXAqrIIqNnVzA,6079
327
+ opentrons/protocol_engine/commands/absorbance_reader/open_lid.py,sha256=Ef5coWs4GGOzmZbrAFZXTKq8hZCC7rJc2DVCOU2PFJg,5531
328
328
  opentrons/protocol_engine/commands/absorbance_reader/read.py,sha256=xu5KijW_sSEtjdhNIEctYkQBZC8Baj650W6s8nXfTKw,8187
329
329
  opentrons/protocol_engine/commands/calibration/__init__.py,sha256=JjNnULLBM3j8VtpfHOvH51em9jVLR_ezyrUJUWqxuYI,1611
330
330
  opentrons/protocol_engine/commands/calibration/calibrate_gripper.py,sha256=1HgEsH-0ycGD-OlxdmCTIuBeSCzVTc1vepSjVirai-g,5570
@@ -362,7 +362,7 @@ opentrons/protocol_engine/commands/unsafe/__init__.py,sha256=lx3TFW_78XK0bdtLFuG
362
362
  opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py,sha256=K1idiUT1RW_mWa_SIe3JOUaeuSsUbv12toWgAB1KSvM,3065
363
363
  opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py,sha256=v5h1sLxx_NMAhVCLbmECd7sD0PsecB4Dj-oaBEe0YBs,3635
364
364
  opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py,sha256=hCRqFeBInC9Mxz9LqUgIrjTTAjuMEq5MJxCqqXwi3N4,2552
365
- opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py,sha256=PvDo7eLePp0Fz0Vc3p78DfVrrSulnF8s2vWZ_6WfTvo,7293
365
+ opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py,sha256=HnYnFViUtPx2p3UXntdMa5LyBLE2AYLjskvnIIWYZ24,7576
366
366
  opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py,sha256=MSYftVeLHqnIyX0n9IJLq6XOb7P835EQg7KR3n3PU6c,2397
367
367
  opentrons/protocol_engine/commands/unsafe/update_position_estimators.py,sha256=pXew4UsDB4Kh7z9r2l7-S3D8bICNmdDr8lNkNEnByYE,2938
368
368
  opentrons/protocol_engine/errors/__init__.py,sha256=rwpfKoEIZUN7c5kf0T9b0MHCJdDxZiUTCvQs64jPtVI,5174
@@ -377,8 +377,8 @@ opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.p
377
377
  opentrons/protocol_engine/execution/gantry_mover.py,sha256=-Fd3I2onhkLkToA_Wdr_AOnVxr9k9bx8-RG9mjf2UY8,12234
378
378
  opentrons/protocol_engine/execution/hardware_stopper.py,sha256=OXZK7AjkZSPu5A7TbqW-dscR4ErOOrr8ao3stcjsClM,5935
379
379
  opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py,sha256=BSFLzSSeELAYZCrCUfJZx5DdlrwU06Ur92TYd0T-hzM,9084
380
- opentrons/protocol_engine/execution/labware_movement.py,sha256=0GcujnJS6-JbmV0VsRyNGUCZkNmLNakLQ6shAyuBP1s,10198
381
- opentrons/protocol_engine/execution/movement.py,sha256=sllGGmiDCSoyDcWZSU6MqYelCl0FwGHqqoKTanXR5qw,11215
380
+ opentrons/protocol_engine/execution/labware_movement.py,sha256=-qnohEyIt9AxsFjhbg_IZiO_1ZwlDqmuWhWirkeo9wc,12269
381
+ opentrons/protocol_engine/execution/movement.py,sha256=jXGbJDj9P2JoagAZTF2-Cynm2s1RjViqTHrbs0_WjQ8,11492
382
382
  opentrons/protocol_engine/execution/pipetting.py,sha256=dMBgc-fDH9kN2fm19InTxS5jlUICHpEpjWgmFBhYGWQ,14453
383
383
  opentrons/protocol_engine/execution/queue_worker.py,sha256=riVVywKIOQ3Lx-woFuuSqqBtfeKFt23nCUnsk7gSVoI,2860
384
384
  opentrons/protocol_engine/execution/rail_lights.py,sha256=eiJT6oI_kFk7rFuFkZzISZiLNnpf7Kkh86Kyk9wQ_Jo,590
@@ -391,9 +391,9 @@ opentrons/protocol_engine/notes/__init__.py,sha256=G0bIQswsov7MrJU0ArrOaWcOTxJU9
391
391
  opentrons/protocol_engine/notes/notes.py,sha256=sVgFeFl_ljK7SbEozfLCi1sJtvU9XtZ8zuEMttG7WGc,1987
392
392
  opentrons/protocol_engine/resources/__init__.py,sha256=yvGFYpmLoxHYQff_IwiaEH9viZUfal5D5K91UjYLwwY,805
393
393
  opentrons/protocol_engine/resources/deck_configuration_provider.py,sha256=D5tPG9hVL4lJM1XBZL3SvSxNMgm7-6OFU15eXfo3vdo,5370
394
- opentrons/protocol_engine/resources/deck_data_provider.py,sha256=IhsknRvRDk1CfoNFMoPUC38pgMMrpYLEpRBZS6AHEX8,4741
395
- opentrons/protocol_engine/resources/file_provider.py,sha256=sBFLJEZmxrMjPOIw_DGxVn2huiw4pB2fbLjuKYnq7Bc,5821
396
- opentrons/protocol_engine/resources/fixture_validation.py,sha256=Vk7q-gWedyF5P11p1YS0tyMGt_Ap4uXUcm-gYVAYpzY,1791
394
+ opentrons/protocol_engine/resources/deck_data_provider.py,sha256=iw4oKv6-dSxF4hZiqT9K0oNuFo0HjLwG847cWYbpkdY,2979
395
+ opentrons/protocol_engine/resources/file_provider.py,sha256=6btMCDN7NsyFlV7Icy5vDO7xsgbmtkeAM_KCuQ-GvRo,5903
396
+ opentrons/protocol_engine/resources/fixture_validation.py,sha256=WBGWFTmBwLPjOBFeqJYxnaSRHvo4pwxvdhT4XUW_FMY,1857
397
397
  opentrons/protocol_engine/resources/labware_data_provider.py,sha256=QhEFpRfWgKFHzLwwKL1HDdq4SFsLX6U6ml9MxoDOjt8,2721
398
398
  opentrons/protocol_engine/resources/labware_validation.py,sha256=3Rc--uqHJ6dSoT8hXY-LKHrgvGe3_rcbZQA7hITvgDg,1926
399
399
  opentrons/protocol_engine/resources/model_utils.py,sha256=C3OHUi-OtuFUm3dS5rApSU3EJ0clnaCZEyBku5sTjzA,941
@@ -409,19 +409,19 @@ opentrons/protocol_engine/state/commands.py,sha256=RVjmeUZOnkAXxejNi-grilLY-tTRI
409
409
  opentrons/protocol_engine/state/config.py,sha256=7jSGxC6Vqj1eA8fqZ2I3zjlxVXg8pxvcBYMztRIx9Mg,1515
410
410
  opentrons/protocol_engine/state/files.py,sha256=czpKzSmtclHDGI8bEz1x-7tXEk_HSzvlAcBJSyCPFDc,1748
411
411
  opentrons/protocol_engine/state/frustum_helpers.py,sha256=OMa7_3INieaNhkFb6wVC6lvq8NemepvWGCw0ai_Wbvg,16515
412
- opentrons/protocol_engine/state/geometry.py,sha256=Ex-8APVY7_KOY8nU7fxWnF0nnrnqhzsiIVJACXZhW6U,66029
413
- opentrons/protocol_engine/state/labware.py,sha256=DIBgP0s9G7ZF8H011trkLA-kyzpxpSzuByI1qSGrI1U,41753
412
+ opentrons/protocol_engine/state/geometry.py,sha256=-yEsGHPfjUVNgVWJKeBiJyzl65wAzSvjS7W-kOxukCQ,67902
413
+ opentrons/protocol_engine/state/labware.py,sha256=Ns_GoUKxL55P6J2YEch5GZCVvTbQZS0h4CbZwCr7Frc,44758
414
414
  opentrons/protocol_engine/state/liquids.py,sha256=TwchzB7xNt7CAd3wX3BA_5DXrQhGwj_uFQsv0FWOXXk,1886
415
- opentrons/protocol_engine/state/modules.py,sha256=IubnLeL_wpT4H5KBU_fWTEic1UzApL3bHNtVk1JQjBk,54770
416
- opentrons/protocol_engine/state/motion.py,sha256=X_PhghynLMWEm-wo7ocu8AKVYerwZRfo2E8u9E-hqbE,14327
415
+ opentrons/protocol_engine/state/modules.py,sha256=8d5YOPhGs8jnw5mDQiGSrhtvozZkCtcRQd49YesVmds,53936
416
+ opentrons/protocol_engine/state/motion.py,sha256=1KEm1HXdkuFKNe2lElZnNfJedml4afMFnmcDvG-3fLA,14937
417
417
  opentrons/protocol_engine/state/pipettes.py,sha256=jXhPGLHT1Ypc_tt8UkWZz51sCZ9ld4umr7AyuhlvxoU,30861
418
418
  opentrons/protocol_engine/state/state.py,sha256=HbkGfTLYNPlb9yu2sCi4UOJQrgXedi3w8xbYc0QCn-w,14550
419
419
  opentrons/protocol_engine/state/state_summary.py,sha256=vTA4MLVtObroLSVEQFKspwE9hkKLfNHKacUA5QVIF5c,1058
420
420
  opentrons/protocol_engine/state/tips.py,sha256=_1LZncAdhCavaKs2NBFKQAmTyExIorQw7vHOqomeb8g,20993
421
- opentrons/protocol_engine/state/update_types.py,sha256=3J5hAUAkr0jdBtJfMtBVABMivNk0SnJp5bXab3g0ML0,11758
421
+ opentrons/protocol_engine/state/update_types.py,sha256=w5H1BNM94CnJvX0ScIshvyE2uxUG82V12_37rv0XcQI,12298
422
422
  opentrons/protocol_engine/state/wells.py,sha256=koKxb8KVR60Z3vBd5xtPnnR4QUI6A4be-cwCWYt_-hc,9049
423
423
  opentrons/protocol_engine/state/module_substates/__init__.py,sha256=l4W-6uV3L8F3B1GsuSoDcmlq6XzsA18w7pKXbO2W3tg,1234
424
- opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py,sha256=CabWI1JDz9XjnyafNRXdsUE8C6uYNFlUmGKRxNLYoNU,1204
424
+ opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py,sha256=jiD8WqFEafGnka5n46vJ_qhS8Ofh--hTxuBWXk8eefE,1431
425
425
  opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py,sha256=bfcG5sMWeiId-x6SFH2C8cVRmogsMYgdoFkdXjUCHuQ,3364
426
426
  opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py,sha256=kjzQK0wz4l1rt-OZ4c9J_rZejmEP4zwFX-QHEl_LNqE,362
427
427
  opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py,sha256=IJ5zpufz5WSRbJqHOAi-WroDxpsRZz-GvwznIL4v7VQ,2468
@@ -510,11 +510,11 @@ opentrons/util/entrypoint_util.py,sha256=5z9HjwvTfaWzvM4PcDVnvJfzB_UkNHfhQ0Ly3AQ
510
510
  opentrons/util/get_union_elements.py,sha256=H1KqLnG1zYvI2kanhc3MXRZT-S07E5a2vF1jEkhXpCs,1073
511
511
  opentrons/util/helpers.py,sha256=3hr801bWGbxEcOFAS7f-iOhmnUhoK5qahbB8SIvaCfY,165
512
512
  opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
513
- opentrons/util/logging_config.py,sha256=f4yISwyfL7RnKi8Unc9xvlAI-yVnRnMLg0MkAF_l8wc,6891
513
+ opentrons/util/logging_config.py,sha256=t3xRxQ5zfXQsU8S4gl6yvrtqx6dxOGyBwIM43CGRyjE,6887
514
514
  opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
515
- opentrons-8.2.0a0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
516
- opentrons-8.2.0a0.dist-info/METADATA,sha256=_4A7Mv-QQai0jn-PmJqUouXXG54N1tJA0j1QU5Wr9SM,5019
517
- opentrons-8.2.0a0.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
518
- opentrons-8.2.0a0.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
519
- opentrons-8.2.0a0.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
520
- opentrons-8.2.0a0.dist-info/RECORD,,
515
+ opentrons-8.2.0a1.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
516
+ opentrons-8.2.0a1.dist-info/METADATA,sha256=1X3bpJiJdC2f93wQJUlj-jC0LTujfDRA2Rdrk4895lw,5019
517
+ opentrons-8.2.0a1.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
518
+ opentrons-8.2.0a1.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
519
+ opentrons-8.2.0a1.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
520
+ opentrons-8.2.0a1.dist-info/RECORD,,