opentrons-shared-data 8.8.0a12__py3-none-any.whl → 9.0.0a2__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 (96) hide show
  1. opentrons_shared_data/__init__.py +1 -2
  2. opentrons_shared_data/_version.py +2 -2
  3. opentrons_shared_data/command/__init__.py +6 -6
  4. opentrons_shared_data/data/command/schemas/16.json +7690 -0
  5. opentrons_shared_data/data/commandAnnotation/schemas/2.json +105 -0
  6. opentrons_shared_data/data/deck/definitions/5/ot3_standard.json +24 -0
  7. opentrons_shared_data/data/labware/definitions/2/black_96_well_microtiter_plate_lid/2.json +110 -0
  8. opentrons_shared_data/data/labware/definitions/2/corning_96_wellplate_360ul_lid/2.json +117 -0
  9. opentrons_shared_data/data/labware/definitions/2/corning_falcon_384_wellplate_130ul_flat_lid/2.json +118 -0
  10. opentrons_shared_data/data/labware/definitions/2/thermofisher_nunc_maxisorp_lockwell_elisa/1.json +1168 -0
  11. opentrons_shared_data/data/liquid-class/definitions/1/water/3.json +7880 -0
  12. opentrons_shared_data/data/liquid-class/schemas/1.json +3 -0
  13. opentrons_shared_data/data/module/definitions/3/vacuumModuleMilliporeV1.json +70 -0
  14. opentrons_shared_data/data/module/schemas/3.json +3 -2
  15. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/3_0.json +27 -9
  16. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/3_3.json +27 -9
  17. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/3_4.json +53 -15
  18. opentrons_shared_data/data/pipette/definitions/2/general/eight_channel/p50/3_5.json +53 -15
  19. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p200/3_0.json +154 -13
  20. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p200/3_1.json +187 -18
  21. opentrons_shared_data/data/pipette/definitions/2/general/ninety_six_channel/p200/3_2.json +187 -18
  22. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_0.json +2 -0
  23. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_3.json +2 -0
  24. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_4.json +4 -0
  25. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_5.json +4 -0
  26. opentrons_shared_data/data/pipette/definitions/2/general/single_channel/p50/3_6.json +4 -0
  27. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/2_2.json +2 -2
  28. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p1000/3_5.json +4 -0
  29. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p20/2_2.json +2 -2
  30. opentrons_shared_data/data/pipette/definitions/2/geometry/single_channel/p300/2_1.json +2 -2
  31. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json +67 -0
  32. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/3_3.json +68 -1
  33. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/3_4.json +67 -0
  34. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/default/3_5.json +2 -0
  35. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_0.json +67 -2
  36. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_3.json +67 -2
  37. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_4.json +67 -2
  38. opentrons_shared_data/data/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_5.json +4 -2
  39. opentrons_shared_data/data/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_0.json +2 -1
  40. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_0.json +68 -1
  41. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_3.json +68 -1
  42. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_4.json +68 -1
  43. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_5.json +3 -1
  44. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/default/3_6.json +3 -1
  45. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_0.json +67 -2
  46. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_3.json +67 -2
  47. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_4.json +67 -2
  48. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_5.json +4 -2
  49. opentrons_shared_data/data/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_6.json +4 -2
  50. opentrons_shared_data/data_files/__init__.py +5 -6
  51. opentrons_shared_data/data_files/types.py +4 -2
  52. opentrons_shared_data/deck/__init__.py +11 -13
  53. opentrons_shared_data/deck/types.py +2 -2
  54. opentrons_shared_data/errors/__init__.py +2 -2
  55. opentrons_shared_data/errors/categories.py +2 -3
  56. opentrons_shared_data/errors/codes.py +3 -3
  57. opentrons_shared_data/errors/exceptions.py +13 -13
  58. opentrons_shared_data/gripper/__init__.py +7 -5
  59. opentrons_shared_data/gripper/gripper_definition.py +6 -4
  60. opentrons_shared_data/labware/__init__.py +5 -8
  61. opentrons_shared_data/labware/constants.py +1 -1
  62. opentrons_shared_data/labware/labware_definition.py +15 -14
  63. opentrons_shared_data/labware/types.py +5 -2
  64. opentrons_shared_data/liquid_classes/__init__.py +3 -2
  65. opentrons_shared_data/liquid_classes/liquid_class_definition.py +47 -22
  66. opentrons_shared_data/liquid_classes/types.py +5 -1
  67. opentrons_shared_data/load.py +2 -2
  68. opentrons_shared_data/module/__init__.py +12 -14
  69. opentrons_shared_data/module/types.py +7 -1
  70. opentrons_shared_data/pipette/__init__.py +9 -8
  71. opentrons_shared_data/pipette/dev_types.py +3 -3
  72. opentrons_shared_data/pipette/file_operation_helpers.py +2 -2
  73. opentrons_shared_data/pipette/load_data.py +8 -10
  74. opentrons_shared_data/pipette/model_constants.py +4 -4
  75. opentrons_shared_data/pipette/mutable_configurations.py +20 -20
  76. opentrons_shared_data/pipette/pipette_definition.py +7 -5
  77. opentrons_shared_data/pipette/pipette_load_name_conversions.py +11 -10
  78. opentrons_shared_data/pipette/scripts/build_json_script.py +11 -13
  79. opentrons_shared_data/pipette/scripts/update_configuration_files.py +17 -18
  80. opentrons_shared_data/pipette/types.py +1 -2
  81. opentrons_shared_data/pipette/ul_per_mm.py +1 -1
  82. opentrons_shared_data/protocol/__init__.py +2 -1
  83. opentrons_shared_data/protocol/constants.py +25 -82
  84. opentrons_shared_data/protocol/models/__init__.py +11 -10
  85. opentrons_shared_data/protocol/models/protocol_schema_v6.py +10 -9
  86. opentrons_shared_data/protocol/models/protocol_schema_v7.py +9 -9
  87. opentrons_shared_data/protocol/models/protocol_schema_v8.py +10 -8
  88. opentrons_shared_data/protocol/models/shared_models.py +2 -1
  89. opentrons_shared_data/protocol/types.py +4 -3
  90. opentrons_shared_data/robot/__init__.py +3 -3
  91. opentrons_shared_data/robot/types.py +4 -2
  92. opentrons_shared_data/util/__init__.py +21 -0
  93. {opentrons_shared_data-8.8.0a12.dist-info → opentrons_shared_data-9.0.0a2.dist-info}/METADATA +2 -1
  94. {opentrons_shared_data-8.8.0a12.dist-info → opentrons_shared_data-9.0.0a2.dist-info}/RECORD +96 -87
  95. {opentrons_shared_data-8.8.0a12.dist-info → opentrons_shared_data-9.0.0a2.dist-info}/WHEEL +0 -0
  96. {opentrons_shared_data-8.8.0a12.dist-info → opentrons_shared_data-9.0.0a2.dist-info}/licenses/LICENSE +0 -0
@@ -1,31 +1,30 @@
1
1
  import argparse
2
2
  import csv
3
3
  import json
4
+ import math
4
5
  from ast import literal_eval
5
- from typing import Optional, Dict, Union, Any, List
6
6
  from pathlib import Path
7
+ from typing import Any, Dict, List, Optional, Union
8
+
7
9
  from pydantic import BaseModel
8
- import math
9
10
 
10
11
  from ... import get_shared_data_root
11
12
  from ..pipette_definition import (
13
+ AvailableSensorDefinition,
14
+ DropTipConfigurations,
15
+ MotorConfigurations,
16
+ PartialTipDefinition,
17
+ PickUpTipConfigurations,
12
18
  PipetteGeometryDefinition,
13
19
  PipetteLiquidPropertiesDefinition,
14
20
  PipettePhysicalPropertiesDefinition,
21
+ PlungerEjectDropTipConfiguration,
15
22
  PlungerPositions,
16
- SupportedTipsDefinition,
17
- MotorConfigurations,
18
- PartialTipDefinition,
19
- AvailableSensorDefinition,
20
- PickUpTipConfigurations,
21
23
  PressFitPickUpTipConfiguration,
22
- DropTipConfigurations,
23
- PlungerEjectDropTipConfiguration,
24
+ SupportedTipsDefinition,
24
25
  )
25
-
26
26
  from ..types import PipetteModelSpec
27
27
 
28
-
29
28
  PIPETTE_DEFINITION_ROOT = Path("pipette") / "definitions" / "2"
30
29
  GEOMETRY_ROOT = get_shared_data_root() / PIPETTE_DEFINITION_ROOT / "geometry"
31
30
  GENERAL_ROOT = get_shared_data_root() / PIPETTE_DEFINITION_ROOT / "general"
@@ -136,7 +135,7 @@ def _build_partial_tip_configurations(channels: int) -> PartialTipDefinition:
136
135
 
137
136
 
138
137
  def build_geometry_model_v2(
139
- input_dictionary: Dict[str, Any]
138
+ input_dictionary: Dict[str, Any],
140
139
  ) -> PipetteGeometryDefinition:
141
140
  return PipetteGeometryDefinition.model_validate(input_dictionary)
142
141
 
@@ -288,7 +287,6 @@ def migrate_new_blow_out_configs_v2() -> None:
288
287
  def fill_blowout_configs(
289
288
  pipette_gen: int, shaft_diameters: Dict[str, float], volumes: List[str]
290
289
  ) -> None:
291
-
292
290
  general_config_files = Path(GENERAL_ROOT).glob("*")
293
291
  for pipette_type in general_config_files: # single, eight, 96-channel
294
292
  for volume in volumes: # pipette max volume- p10, p20, p50, etc.
@@ -1,38 +1,36 @@
1
1
  """A script for updating pre-existing V2 Pipette configurations."""
2
2
 
3
- import os
4
- import json
5
3
  import argparse
6
-
4
+ import json
5
+ import os
6
+ from enum import Enum
7
7
  from pathlib import Path
8
- from typing import List, Dict, Tuple, Any, Iterator, Type
8
+ from typing import Any, Dict, Iterator, List, Tuple, Type
9
9
 
10
10
  from pydantic import BaseModel
11
11
  from pydantic.main import ModelMetaclass
12
- from enum import Enum
13
-
14
- from opentrons_shared_data import get_shared_data_root
15
12
 
13
+ from ..load_data import _geometry, _liquid, _physical
16
14
  from ..pipette_definition import (
17
15
  PipetteConfigurations,
18
16
  PipetteGeometryDefinition,
19
- PipettePhysicalPropertiesDefinition,
20
17
  PipetteLiquidPropertiesDefinition,
21
18
  PipetteModelVersionType,
19
+ PipettePhysicalPropertiesDefinition,
22
20
  SupportedTipsDefinition,
23
21
  )
22
+ from ..pipette_load_name_conversions import convert_pipette_model
24
23
  from ..types import (
25
- PipetteModelType,
24
+ LiquidClasses,
26
25
  PipetteChannelType,
27
- PipetteVersionType,
28
- PipetteTipType,
26
+ PipetteModel,
29
27
  PipetteModelMajorVersion,
30
28
  PipetteModelMinorVersion,
31
- LiquidClasses,
29
+ PipetteModelType,
30
+ PipetteTipType,
31
+ PipetteVersionType,
32
32
  )
33
- from ..load_data import _geometry, _physical, _liquid
34
- from ..pipette_load_name_conversions import convert_pipette_model
35
- from ..types import PipetteModel
33
+ from opentrons_shared_data import get_shared_data_root
36
34
 
37
35
  """
38
36
  Instructions:
@@ -166,7 +164,7 @@ def build_nozzle_map(
166
164
  return {"A1": nozzle_offset}
167
165
  elif channels == PipetteChannelType.EIGHT_CHANNEL:
168
166
  return {
169
- f"{chr(ord('A') + 1*row)}1": [
167
+ f"{chr(ord('A') + 1 * row)}1": [
170
168
  nozzle_offset[0],
171
169
  nozzle_offset[1] + Y_OFFSET * row,
172
170
  nozzle_offset[2],
@@ -175,7 +173,7 @@ def build_nozzle_map(
175
173
  }
176
174
  elif channels == PipetteChannelType.NINETY_SIX_CHANNEL:
177
175
  return {
178
- f"{chr(ord('A') + 1*row)}{1 + 1*col}": [
176
+ f"{chr(ord('A') + 1 * row)}{1 + 1 * col}": [
179
177
  nozzle_offset[0] + X_OFFSET * col,
180
178
  nozzle_offset[1] + Y_OFFSET * row,
181
179
  nozzle_offset[2],
@@ -210,7 +208,8 @@ def load_and_update_file_from_config(
210
208
  value_to_update if value_to_update else geometry["nozzleOffset"]
211
209
  )
212
210
  geometry["nozzleMap"] = build_nozzle_map(
213
- nozzle_to_use, model_to_update.pipette_channels
211
+ nozzle_to_use, # type: ignore[arg-type]
212
+ model_to_update.pipette_channels,
214
213
  )
215
214
  elif config_to_update[0] == "nozzle_offset":
216
215
  geometry["nozzleMap"] = build_nozzle_map(
@@ -1,10 +1,9 @@
1
1
  import enum
2
2
  from dataclasses import dataclass
3
+ from typing import Dict, List, Mapping, NewType, Tuple, Union, cast
3
4
 
4
5
  from pydantic import BaseModel
5
6
  from typing_extensions import Literal, TypedDict
6
- from typing import Dict, List, Mapping, NewType, Union, Tuple, cast
7
-
8
7
 
9
8
  # TODO(mc, 2022-06-16): remove type alias when able
10
9
  # and when certain removal will not break any pickling
@@ -1,4 +1,4 @@
1
- from typing import List, Tuple, Optional
1
+ from typing import List, Optional, Tuple
2
2
 
3
3
  from opentrons_shared_data.pipette.pipette_definition import (
4
4
  PipetteFunctionKeyType,
@@ -1,8 +1,9 @@
1
1
  """
2
2
  opentrons_shared_data.protocol: types and bindings for json protocols
3
3
  """
4
+
4
5
  import json
5
- from typing import Any, NewType, Dict
6
+ from typing import Any, Dict, NewType
6
7
 
7
8
  from .. import load_shared_data
8
9
 
@@ -1,98 +1,41 @@
1
- from typing import TYPE_CHECKING
2
1
  from enum import Enum
3
2
 
4
3
 
5
- if TYPE_CHECKING:
6
- from .types import (
7
- DelayCommandId,
8
- BlowoutCommandId,
9
- PickUpTipCommandId,
10
- DropTipCommandId,
11
- AspirateCommandId,
12
- DispenseCommandId,
13
- TouchTipCommandId,
14
- MoveToSlotCommandId,
15
- AirGapCommandId,
16
- MagneticModuleEngageCommandId,
17
- MagneticModuleDisengageCommandId,
18
- TemperatureModuleSetTargetCommandId,
19
- TemperatureModuleAwaitCommandId,
20
- TemperatureModuleDeactivateCommandId,
21
- ThermocyclerSetTargetBlockCommandId,
22
- ThermocyclerSetTargetLidCommandId,
23
- ThermocyclerAwaitBlockTemperatureCommandId,
24
- ThermocyclerAwaitLidTemperatureCommandId,
25
- ThermocyclerOpenLidCommandId,
26
- ThermocyclerCloseLidCommandId,
27
- ThermocyclerDeactivateLidCommandId,
28
- ThermocyclerDeactivateBlockCommandId,
29
- ThermocyclerRunProfileCommandId,
30
- ThermocyclerAwaitProfileCommandId,
31
- MoveToWellCommandId,
32
- )
33
-
34
-
35
4
  class JsonPipetteCommand(Enum):
36
- airGap: "AirGapCommandId" = "airGap"
37
- blowout: "BlowoutCommandId" = "blowout"
38
- pickUpTip: "PickUpTipCommandId" = "pickUpTip"
39
- dropTip: "DropTipCommandId" = "dropTip"
40
- aspirate: "AspirateCommandId" = "aspirate"
41
- dispense: "DispenseCommandId" = "dispense"
42
- touchTip: "TouchTipCommandId" = "touchTip"
43
- moveToSlot: "MoveToSlotCommandId" = "moveToSlot"
44
- moveToWell: "MoveToWellCommandId" = "moveToWell"
5
+ airGap = "airGap"
6
+ blowout = "blowout"
7
+ pickUpTip = "pickUpTip"
8
+ dropTip = "dropTip"
9
+ aspirate = "aspirate"
10
+ dispense = "dispense"
11
+ touchTip = "touchTip"
12
+ moveToSlot = "moveToSlot"
13
+ moveToWell = "moveToWell"
45
14
 
46
15
 
47
16
  class JsonRobotCommand(Enum):
48
- delay: "DelayCommandId" = "delay"
17
+ delay = "delay"
49
18
 
50
19
 
51
20
  class JsonMagneticModuleCommand(Enum):
52
- magneticModuleEngageMagnet: "MagneticModuleEngageCommandId" = (
53
- "magneticModule/engageMagnet"
54
- )
55
- magneticModuleDisengageMagnet: "MagneticModuleDisengageCommandId" = (
56
- "magneticModule/disengageMagnet"
57
- )
21
+ magneticModuleEngageMagnet = "magneticModule/engageMagnet"
22
+ magneticModuleDisengageMagnet = "magneticModule/disengageMagnet"
58
23
 
59
24
 
60
25
  class JsonTemperatureModuleCommand(Enum):
61
- temperatureModuleSetTargetTemperature: "TemperatureModuleSetTargetCommandId" = (
62
- "temperatureModule/setTargetTemperature"
63
- )
64
- temperatureModuleDeactivate: "TemperatureModuleDeactivateCommandId" = (
65
- "temperatureModule/deactivate"
66
- )
67
- temperatureModuleAwaitTemperature: "TemperatureModuleAwaitCommandId" = (
68
- "temperatureModule/awaitTemperature"
69
- )
26
+ temperatureModuleSetTargetTemperature = "temperatureModule/setTargetTemperature"
27
+ temperatureModuleDeactivate = "temperatureModule/deactivate"
28
+ temperatureModuleAwaitTemperature = "temperatureModule/awaitTemperature"
70
29
 
71
30
 
72
31
  class JsonThermocyclerCommand(Enum):
73
- thermocyclerSetTargetBlockTemperature: "ThermocyclerSetTargetBlockCommandId" = (
74
- "thermocycler/setTargetBlockTemperature"
75
- )
76
- thermocyclerSetTargetLidTemperature: "ThermocyclerSetTargetLidCommandId" = (
77
- "thermocycler/setTargetLidTemperature"
78
- )
79
- thermocyclerAwaitBlockTemperature: "ThermocyclerAwaitBlockTemperatureCommandId" = (
80
- "thermocycler/awaitBlockTemperature"
81
- )
82
- thermocyclerAwaitLidTemperature: "ThermocyclerAwaitLidTemperatureCommandId" = (
83
- "thermocycler/awaitLidTemperature"
84
- )
85
- thermocyclerOpenLid: "ThermocyclerOpenLidCommandId" = "thermocycler/openLid"
86
- thermocyclerCloseLid: "ThermocyclerCloseLidCommandId" = "thermocycler/closeLid"
87
- thermocyclerDeactivateBlock: "ThermocyclerDeactivateBlockCommandId" = (
88
- "thermocycler/deactivateBlock"
89
- )
90
- thermocyclerDeactivateLid: "ThermocyclerDeactivateLidCommandId" = (
91
- "thermocycler/deactivateLid"
92
- )
93
- thermocyclerRunProfile: "ThermocyclerRunProfileCommandId" = (
94
- "thermocycler/runProfile"
95
- )
96
- thermocyclerAwaitProfileComplete: "ThermocyclerAwaitProfileCommandId" = (
97
- "thermocycler/awaitProfileComplete"
98
- )
32
+ thermocyclerSetTargetBlockTemperature = "thermocycler/setTargetBlockTemperature"
33
+ thermocyclerSetTargetLidTemperature = "thermocycler/setTargetLidTemperature"
34
+ thermocyclerAwaitBlockTemperature = "thermocycler/awaitBlockTemperature"
35
+ thermocyclerAwaitLidTemperature = "thermocycler/awaitLidTemperature"
36
+ thermocyclerOpenLid = "thermocycler/openLid"
37
+ thermocyclerCloseLid = "thermocycler/closeLid"
38
+ thermocyclerDeactivateBlock = "thermocycler/deactivateBlock"
39
+ thermocyclerDeactivateLid = "thermocycler/deactivateLid"
40
+ thermocyclerRunProfile = "thermocycler/runProfile"
41
+ thermocyclerAwaitProfileComplete = "thermocycler/awaitProfileComplete"
@@ -1,25 +1,26 @@
1
1
  """Protocol file reading interfaces."""
2
+
2
3
  from . import protocol_schema_v6, protocol_schema_v7, protocol_schema_v8
3
4
  from .protocol_schema_v6 import ProtocolSchemaV6
4
5
  from .protocol_schema_v7 import ProtocolSchemaV7
5
- from .protocol_schema_v8 import ProtocolSchemaV8, CommandSchemaId
6
+ from .protocol_schema_v8 import CommandSchemaId, ProtocolSchemaV8
6
7
  from .shared_models import (
7
- Liquid,
8
- Labware,
9
8
  CommandAnnotation,
10
- Location,
11
- ProfileStep,
12
- WellLocation,
13
- OffsetVector,
9
+ DesignerApplication,
14
10
  Dimensions,
15
11
  GroupMetadata,
16
- Shape,
17
- WellDefinition,
12
+ Labware,
13
+ Liquid,
14
+ Location,
18
15
  Metadata,
19
16
  Module,
17
+ OffsetVector,
20
18
  Pipette,
19
+ ProfileStep,
21
20
  Robot,
22
- DesignerApplication,
21
+ Shape,
22
+ WellDefinition,
23
+ WellLocation,
23
24
  )
24
25
 
25
26
  __all__ = [
@@ -1,27 +1,28 @@
1
+ from typing import Any, Dict, List, Optional, Union
2
+
1
3
  from pydantic import (
2
- ConfigDict,
3
4
  BaseModel,
5
+ ConfigDict,
4
6
  Field,
5
7
  model_validator,
6
8
  )
7
- from typing import Any, List, Optional, Dict, Union
8
9
  from typing_extensions import Literal
9
- from opentrons_shared_data.labware.labware_definition import LabwareDefinition2
10
10
 
11
11
  from .shared_models import (
12
- Liquid,
13
- Labware,
14
12
  CommandAnnotation,
13
+ DesignerApplication,
14
+ Labware,
15
+ Liquid,
15
16
  Location,
16
- ProfileStep,
17
- WellLocation,
18
- OffsetVector,
19
17
  Metadata,
20
18
  Module,
19
+ OffsetVector,
21
20
  Pipette,
21
+ ProfileStep,
22
22
  Robot,
23
- DesignerApplication,
23
+ WellLocation,
24
24
  )
25
+ from opentrons_shared_data.labware.labware_definition import LabwareDefinition2
25
26
 
26
27
 
27
28
  # TODO (tamar 3/15/22): split apart all the command payloads when we tackle #9583
@@ -1,20 +1,20 @@
1
- from pydantic import ConfigDict, BaseModel, Field
2
- from typing import Any, List, Optional, Dict, Union
3
- from typing_extensions import Literal
1
+ from typing import Any, Dict, List, Optional, Union
4
2
 
5
- from opentrons_shared_data.labware.labware_definition import LabwareDefinition2
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+ from typing_extensions import Literal
6
5
 
7
6
  from .shared_models import (
8
- Liquid,
9
7
  CommandAnnotation,
8
+ DesignerApplication,
9
+ Liquid,
10
10
  Location,
11
- ProfileStep,
12
- WellLocation,
13
- OffsetVector,
14
11
  Metadata,
12
+ OffsetVector,
13
+ ProfileStep,
15
14
  Robot,
16
- DesignerApplication,
15
+ WellLocation,
17
16
  )
17
+ from opentrons_shared_data.labware.labware_definition import LabwareDefinition2
18
18
 
19
19
 
20
20
  # TODO (tamar 3/15/22): split apart all the command payloads when we tackle #9583
@@ -1,18 +1,17 @@
1
1
  from enum import Enum
2
- from typing import Any, List, Optional, Dict
3
- from typing_extensions import Literal
4
-
5
- from pydantic import BaseModel, Field, ConfigDict
2
+ from typing import Any, Dict, List, Optional, Union
6
3
 
7
- from opentrons_shared_data.labware.labware_definition import LabwareDefinition
8
- from opentrons_shared_data.command import known_schema_ids
4
+ from pydantic import BaseModel, ConfigDict, Field
5
+ from typing_extensions import Literal
9
6
 
10
7
  from .shared_models import (
8
+ DesignerApplication,
11
9
  Liquid,
12
10
  Metadata,
13
- DesignerApplication,
14
11
  Robot,
15
12
  )
13
+ from opentrons_shared_data.command import known_schema_ids
14
+ from opentrons_shared_data.labware.labware_definition import LabwareDefinition
16
15
 
17
16
 
18
17
  class Command(BaseModel):
@@ -50,7 +49,10 @@ class ProtocolSchemaV8(BaseModel):
50
49
  labwareDefinitions: Dict[str, LabwareDefinition]
51
50
  commandSchemaId: CommandSchemaId
52
51
  commands: List[Command]
53
- commandAnnotationSchemaId: Literal["opentronsCommandAnnotationSchemaV1"]
52
+ commandAnnotationSchemaId: Union[
53
+ Literal["opentronsCommandAnnotationSchemaV1"],
54
+ Literal["opentronsCommandAnnotationSchemaV2"],
55
+ ]
54
56
  commandAnnotations: List[CommandAnnotation]
55
57
  designerApplication: Optional[DesignerApplication] = None
56
58
  model_config = ConfigDict(populate_by_name=True)
@@ -1,5 +1,6 @@
1
- from typing import Optional, List, Dict, Any, Literal
2
1
  from enum import Enum
2
+ from typing import Any, Dict, List, Literal, Optional
3
+
3
4
  from pydantic import BaseModel
4
5
 
5
6
 
@@ -2,13 +2,14 @@
2
2
  opentrons_shared_data.protocol.types: types for json protocols
3
3
  """
4
4
 
5
- from typing import Any, Dict, List, Optional, Union
6
5
  from enum import Enum
6
+ from typing import Any, Dict, List, Optional, Union
7
+
8
+ from typing_extensions import Literal, TypedDict
7
9
 
8
- from typing_extensions import TypedDict, Literal
9
- from ..pipette.types import PipetteName
10
10
  from ..labware.types import LabwareDefinition2
11
11
  from ..module.types import ModuleModel
12
+ from ..pipette.types import PipetteName
12
13
 
13
14
  SlotSpan = Literal["span7_8_10_11"]
14
15
 
@@ -1,12 +1,12 @@
1
1
  """opentrons_shared_data.robot: Submodule for handling robot definition data."""
2
+
3
+ import json
2
4
  from pathlib import Path
3
5
  from typing import cast
4
- from typing_extensions import Final
5
6
 
6
- import json
7
+ from typing_extensions import Final
7
8
 
8
9
  from .. import get_shared_data_root
9
-
10
10
  from .types import RobotDefinition, RobotType
11
11
 
12
12
  DEFAULT_ROBOT_DEFINITION_VERSION: Final = 1
@@ -1,7 +1,9 @@
1
1
  """opentrons_shared_data.robot.types: types for robot def."""
2
+
2
3
  import enum
3
- from typing import NewType, List, Dict, Any
4
- from typing_extensions import Literal, TypedDict, NotRequired
4
+ from typing import Any, Dict, List, NewType
5
+
6
+ from typing_extensions import Literal, NotRequired, TypedDict
5
7
 
6
8
  RobotSchemaVersion1 = Literal[1]
7
9
 
@@ -0,0 +1,21 @@
1
+ """Cross-package utilities."""
2
+
3
+ # Python 3.11 changed the string serialization of string based enums
4
+ # to always include the enumerator name; it previously did not. This
5
+ # is more consistent but also breaks our usage of string based enums.
6
+ # The replacement class StrEnum has the old behavior, but it's not
7
+ # available below 3.11. Here's a polyfill that makes it all better.
8
+ try:
9
+ from enum import StrEnum
10
+ except ImportError:
11
+ from enum import Enum
12
+
13
+ class StrEnum(str, Enum): # type: ignore[no-redef]
14
+ """Replacement for 3.11 style StrEnum in <3.11."""
15
+
16
+ def __format__(self, spec: str) -> str:
17
+ """Build an fstring without the enumerator class name."""
18
+ return str.__format__(str(self.name), spec)
19
+
20
+
21
+ __all__ = ["StrEnum"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opentrons_shared_data
3
- Version: 8.8.0a12
3
+ Version: 9.0.0a2
4
4
  Summary: A bundle of data and python binding that supports the Opentrons API.Does not need to be installed manually; only a dependency of the opentrons package
5
5
  Project-URL: Source Code, https://github.com/Opentrons/opentrons
6
6
  Author-email: Opentrons <engineering@opentrons.com>
@@ -17,5 +17,6 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Topic :: Scientific/Engineering
18
18
  Requires-Python: >=3.10
19
19
  Requires-Dist: jsonschema<5,>=4.0.0
20
+ Requires-Dist: numpy~=1.26.4
20
21
  Requires-Dist: pydantic<3.0.0,>=2.0.0
21
22
  Requires-Dist: typing-extensions<5,>=4.0.0