opentrons 8.0.0a4__py2.py3-none-any.whl → 8.0.0a6__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.

Potentially problematic release.


This version of opentrons might be problematic. Click here for more details.

@@ -204,6 +204,10 @@ class MotionController(Protocol[MountArgType]):
204
204
  """Disengage some axes."""
205
205
  ...
206
206
 
207
+ async def engage_axes(self, which: List[Axis]) -> None:
208
+ """Engage some axes."""
209
+ ...
210
+
207
211
  async def retract(self, mount: MountArgType, margin: float = 10) -> None:
208
212
  """Pull the specified mount up to its home position.
209
213
 
@@ -108,10 +108,15 @@ class MoveToMaintenancePositionImplementation(
108
108
  await ot3_api.move_axes(
109
109
  {
110
110
  Axis.Z_L: max_motion_range + _LEFT_MOUNT_Z_MARGIN,
111
+ }
112
+ )
113
+ await ot3_api.disengage_axes([Axis.Z_L])
114
+ await ot3_api.move_axes(
115
+ {
111
116
  Axis.Z_R: max_motion_range + _RIGHT_MOUNT_Z_MARGIN,
112
117
  }
113
118
  )
114
- await ot3_api.disengage_axes([Axis.Z_L, Axis.Z_R])
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
@@ -193,9 +193,12 @@ class VirtualPipetteDataProvider:
193
193
  pipette_model.pipette_channels,
194
194
  pipette_model.pipette_version,
195
195
  )
196
- nozzle_manager = NozzleConfigurationManager.build_from_config(
197
- config, valid_nozzle_maps
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 (
@@ -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.0a4
3
+ Version: 8.0.0a6
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.0a4
24
+ Requires-Dist: opentrons-shared-data ==8.0.0a6
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.0a4 ; extra == 'flex-hardware'
36
+ Requires-Dist: opentrons-hardware[flex] ==8.0.0a6 ; extra == 'flex-hardware'
37
37
  Provides-Extra: ot2-hardware
38
- Requires-Dist: opentrons-hardware ==8.0.0a4 ; extra == 'ot2-hardware'
38
+ Requires-Dist: opentrons-hardware ==8.0.0a6 ; 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=CyBMn7iUbvJG2e8I1F4pBhcG9SmnE2p6aJoURYeu4oM,9415
190
+ opentrons/hardware_control/protocols/motion_controller.py,sha256=2sv-fc0uvmuFj-wA1h4VrEjLLTMTvswLCkisjEXwxXQ,9520
191
191
  opentrons/hardware_control/protocols/position_estimator.py,sha256=bEYQiNZYsh5k9r_J2XCDQg6FixrQmxr-7KTD9gfVmYc,1797
192
192
  opentrons/hardware_control/protocols/simulatable.py,sha256=ED3VHoO8q1h9FhBDv31g5N7YdTKB5hj7lp7BZcCaL7o,247
193
193
  opentrons/hardware_control/protocols/stoppable.py,sha256=ukI1WrJzXwsJm5ty2trhMqGJr0sT13ttlv914YMAUt8,226
@@ -282,7 +282,7 @@ opentrons/protocol_engine/commands/aspirate_in_place.py,sha256=DpDDkyJ7m2vyeFRXd
282
282
  opentrons/protocol_engine/commands/blow_out.py,sha256=pQnQ_MjpWWBBHWjwTWR3BrduA90QwbYBqhbbw6wuJak,2629
283
283
  opentrons/protocol_engine/commands/blow_out_in_place.py,sha256=QFtJoUII8E_INbAnh2I2_xoJNWWdv-YrO_mdYsEdwOY,2402
284
284
  opentrons/protocol_engine/commands/command.py,sha256=QQqZN8VHKJXMPV9XycyeGeIvPnWY43HXZe606IyynVA,9290
285
- opentrons/protocol_engine/commands/command_unions.py,sha256=XLs68vF_rqDx9IffkWm-2Y8--tyf6oPRIMZohdVxr6I,19833
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=Zr4o-KBgftaOyEFoKZ9HH247B_s0HLBUGRYaLF5nGXs,5151
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=SIT8c86bw4qniMmD8Lc_TElM-n93d8eUg0pnf35Nhzo,1387
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
@@ -389,7 +390,7 @@ opentrons/protocol_engine/resources/labware_validation.py,sha256=wrth5Qc-RSMQlVm
389
390
  opentrons/protocol_engine/resources/model_utils.py,sha256=C3OHUi-OtuFUm3dS5rApSU3EJ0clnaCZEyBku5sTjzA,941
390
391
  opentrons/protocol_engine/resources/module_data_provider.py,sha256=fU4l1Wkeb1odW6XekvC0_SS0KjzAOcHPJQ4dLMp74NU,1553
391
392
  opentrons/protocol_engine/resources/ot3_validation.py,sha256=0x81JoZBXcj2xUVcOF7v5ETc8y5T_sbs-jTPxuSnooE,744
392
- opentrons/protocol_engine/resources/pipette_data_provider.py,sha256=NYcQGJYQ-aeEME5nilUlkHF6oWfrNZt0op52bUH0czo,14623
393
+ opentrons/protocol_engine/resources/pipette_data_provider.py,sha256=EVPvsMDyTduyQvkULF_c58qirH251bPusbNvZr8YCjA,14788
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
396
  opentrons/protocol_engine/state/addressable_areas.py,sha256=Al86_Qv-ikveekNPV4XS50yzFzXMGklUgEotvbg3O8s,28217
@@ -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=XxQCcNgrtpvZR451nbnlCaQnlgZj_uNkwGIxnK9rk9Q,3684
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.0a4.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
503
- opentrons-8.0.0a4.dist-info/METADATA,sha256=gYJjRVCWBigp6_HZem-YgMle4g8vSdMAwswF53rXvUk,4990
504
- opentrons-8.0.0a4.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
505
- opentrons-8.0.0a4.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
506
- opentrons-8.0.0a4.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
507
- opentrons-8.0.0a4.dist-info/RECORD,,
503
+ opentrons-8.0.0a6.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
504
+ opentrons-8.0.0a6.dist-info/METADATA,sha256=-cu7L0DNBF_DMS51L1H9MzYlBi5g_ugWcmsASzdWXn0,4990
505
+ opentrons-8.0.0a6.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
506
+ opentrons-8.0.0a6.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
507
+ opentrons-8.0.0a6.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
508
+ opentrons-8.0.0a6.dist-info/RECORD,,