@opentrons/shared-data 0.0.1-alpha.19 → 0.0.1-alpha.21

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 (156) hide show
  1. package/lib/{bundle.673284981fd97184260c.js → opentrons-shared-data.js} +2 -2
  2. package/lib/opentrons-shared-data.js.map +1 -0
  3. package/package.json +1 -1
  4. package/webpack.config.js +1 -0
  5. package/js/__tests__/__snapshots__/pipettes.test.ts.snap +0 -5969
  6. package/js/__tests__/deckSchemas.test.ts +0 -87
  7. package/js/__tests__/errors.test.js +0 -21
  8. package/js/__tests__/getAreSlotsAdjacent.test.ts +0 -128
  9. package/js/__tests__/getWellNamePerMultiTip.test.ts +0 -162
  10. package/js/__tests__/labwareDefQuirks.test.ts +0 -37
  11. package/js/__tests__/labwareDefSchemaV1.test.ts +0 -82
  12. package/js/__tests__/labwareDefSchemaV2.test.ts +0 -298
  13. package/js/__tests__/moduleAccessors.test.ts +0 -50
  14. package/js/__tests__/moduleSpecsSchema.test.ts +0 -77
  15. package/js/__tests__/pipetteSchemaV2.test.ts +0 -107
  16. package/js/__tests__/pipetteSpecSchemas.test.ts +0 -48
  17. package/js/__tests__/pipettes.test.ts +0 -58
  18. package/js/__tests__/protocolSchemaV4.test.ts +0 -137
  19. package/js/__tests__/protocolSchemaV5.test.ts +0 -137
  20. package/js/__tests__/protocolSchemaV6.test.ts +0 -132
  21. package/js/__tests__/protocolSchemaV7.test.ts +0 -64
  22. package/js/__tests__/protocolValidation.test.ts +0 -83
  23. package/js/__tests__/sortWells.test.ts +0 -40
  24. package/js/__tests__/splitWellsOnColumn.test.ts +0 -21
  25. package/js/__tests__/validateErrors.test.js +0 -34
  26. package/js/constants.ts +0 -338
  27. package/js/cypressUtils.ts +0 -35
  28. package/js/errors.ts +0 -33
  29. package/js/fixtures.ts +0 -161
  30. package/js/getLabware.ts +0 -154
  31. package/js/gripper.ts +0 -29
  32. package/js/helpers/__tests__/getAdapterName.test.ts +0 -31
  33. package/js/helpers/__tests__/getDeckDefFromLoadedLabware.test.ts +0 -12
  34. package/js/helpers/__tests__/getVectorDifference.test.ts +0 -25
  35. package/js/helpers/__tests__/getVectorSum.test.ts +0 -21
  36. package/js/helpers/__tests__/labwareInference.test.ts +0 -84
  37. package/js/helpers/__tests__/orderWells.test.ts +0 -87
  38. package/js/helpers/__tests__/parseProtocolData.test.ts +0 -165
  39. package/js/helpers/__tests__/volume.test.ts +0 -108
  40. package/js/helpers/__tests__/wellSets.test.ts +0 -352
  41. package/js/helpers/get96Channel384WellPlateWells.ts +0 -44
  42. package/js/helpers/getAddressableAreasInProtocol.ts +0 -59
  43. package/js/helpers/getLoadedLabwareDefinitionsByUri.ts +0 -30
  44. package/js/helpers/getModuleVizDims.ts +0 -118
  45. package/js/helpers/getOccludedSlotCountForModule.ts +0 -13
  46. package/js/helpers/getVectorDifference.ts +0 -12
  47. package/js/helpers/getVectorSum.ts +0 -12
  48. package/js/helpers/getWellNamePerMultiTip.ts +0 -86
  49. package/js/helpers/getWellTotalVolume.ts +0 -16
  50. package/js/helpers/index.ts +0 -347
  51. package/js/helpers/labwareInference.ts +0 -92
  52. package/js/helpers/orderWells.ts +0 -69
  53. package/js/helpers/parseProtocolData.ts +0 -141
  54. package/js/helpers/volume.ts +0 -35
  55. package/js/helpers/wellIsRect.ts +0 -6
  56. package/js/helpers/wellSets.ts +0 -155
  57. package/js/index.ts +0 -14
  58. package/js/labwareTools/__tests__/__snapshots__/createIrregularLabware.test.ts.snap +0 -3
  59. package/js/labwareTools/__tests__/__snapshots__/createLabware.test.ts.snap +0 -3
  60. package/js/labwareTools/__tests__/createDefaultDisplayName.test.ts +0 -111
  61. package/js/labwareTools/__tests__/createIrregularLabware.test.ts +0 -226
  62. package/js/labwareTools/__tests__/createLabware.test.ts +0 -147
  63. package/js/labwareTools/index.ts +0 -452
  64. package/js/modules.ts +0 -97
  65. package/js/pipettes.ts +0 -89
  66. package/js/protocols.ts +0 -290
  67. package/js/schema.ts +0 -80
  68. package/js/scripts/generateDeckLayersFromSVG.js +0 -46
  69. package/js/titleCase.ts +0 -30
  70. package/js/types.ts +0 -600
  71. package/lib/bundle.673284981fd97184260c.js.map +0 -1
  72. package/python/.coveragerc +0 -4
  73. package/python/.flake8 +0 -32
  74. package/python/Config.in +0 -10
  75. package/python/Makefile +0 -134
  76. package/python/Pipfile +0 -28
  77. package/python/Pipfile.lock +0 -645
  78. package/python/buildroot.mk +0 -30
  79. package/python/mypy.ini +0 -41
  80. package/python/opentrons_shared_data/__init__.py +0 -17
  81. package/python/opentrons_shared_data/_version.py +0 -20
  82. package/python/opentrons_shared_data/command/__init__.py +0 -52
  83. package/python/opentrons_shared_data/deck/__init__.py +0 -96
  84. package/python/opentrons_shared_data/deck/dev_types.py +0 -180
  85. package/python/opentrons_shared_data/errors/__init__.py +0 -30
  86. package/python/opentrons_shared_data/errors/categories.py +0 -60
  87. package/python/opentrons_shared_data/errors/codes.py +0 -108
  88. package/python/opentrons_shared_data/errors/exceptions.py +0 -915
  89. package/python/opentrons_shared_data/gripper/__init__.py +0 -63
  90. package/python/opentrons_shared_data/gripper/constants.py +0 -6
  91. package/python/opentrons_shared_data/gripper/gripper_definition.py +0 -101
  92. package/python/opentrons_shared_data/labware/__init__.py +0 -22
  93. package/python/opentrons_shared_data/labware/constants.py +0 -7
  94. package/python/opentrons_shared_data/labware/dev_types.py +0 -140
  95. package/python/opentrons_shared_data/labware/labware_definition.py +0 -328
  96. package/python/opentrons_shared_data/load.py +0 -57
  97. package/python/opentrons_shared_data/module/__init__.py +0 -74
  98. package/python/opentrons_shared_data/module/dev_types.py +0 -141
  99. package/python/opentrons_shared_data/pipette/__init__.py +0 -107
  100. package/python/opentrons_shared_data/pipette/dev_types.py +0 -177
  101. package/python/opentrons_shared_data/pipette/file_operation_helpers.py +0 -37
  102. package/python/opentrons_shared_data/pipette/load_data.py +0 -261
  103. package/python/opentrons_shared_data/pipette/model_constants.py +0 -123
  104. package/python/opentrons_shared_data/pipette/mutable_configurations.py +0 -431
  105. package/python/opentrons_shared_data/pipette/pipette_definition.py +0 -503
  106. package/python/opentrons_shared_data/pipette/pipette_load_name_conversions.py +0 -240
  107. package/python/opentrons_shared_data/pipette/scripts/__init__.py +0 -0
  108. package/python/opentrons_shared_data/pipette/scripts/build_json_script.py +0 -469
  109. package/python/opentrons_shared_data/pipette/scripts/update_configuration_files.py +0 -450
  110. package/python/opentrons_shared_data/pipette/types.py +0 -193
  111. package/python/opentrons_shared_data/protocol/__init__.py +0 -13
  112. package/python/opentrons_shared_data/protocol/constants.py +0 -98
  113. package/python/opentrons_shared_data/protocol/dev_types.py +0 -436
  114. package/python/opentrons_shared_data/protocol/models/__init__.py +0 -48
  115. package/python/opentrons_shared_data/protocol/models/protocol_schema_v6.py +0 -145
  116. package/python/opentrons_shared_data/protocol/models/protocol_schema_v7.py +0 -95
  117. package/python/opentrons_shared_data/protocol/models/protocol_schema_v8.py +0 -110
  118. package/python/opentrons_shared_data/protocol/models/shared_models.py +0 -111
  119. package/python/opentrons_shared_data/py.typed +0 -0
  120. package/python/opentrons_shared_data/robot/__init__.py +0 -33
  121. package/python/opentrons_shared_data/robot/dev_types.py +0 -37
  122. package/python/pytest.ini +0 -2
  123. package/python/setup.cfg +0 -5
  124. package/python/setup.py +0 -179
  125. package/python/tests/__init__.py +0 -1
  126. package/python/tests/conftest.py +0 -0
  127. package/python/tests/deck/__init__.py +0 -0
  128. package/python/tests/deck/test_list_names.py +0 -12
  129. package/python/tests/deck/test_position.py +0 -113
  130. package/python/tests/deck/test_typechecks.py +0 -28
  131. package/python/tests/errors/__init__.py +0 -1
  132. package/python/tests/errors/test_error_completeness.py +0 -19
  133. package/python/tests/errors/test_exceptions.py +0 -74
  134. package/python/tests/gripper/__init__.py +0 -0
  135. package/python/tests/gripper/test_definition.py +0 -30
  136. package/python/tests/gripper/test_load.py +0 -16
  137. package/python/tests/labware/__init__.py +0 -13
  138. package/python/tests/labware/test_typechecks.py +0 -21
  139. package/python/tests/module/__init__.py +0 -20
  140. package/python/tests/module/test_load.py +0 -49
  141. package/python/tests/module/test_typechecks.py +0 -34
  142. package/python/tests/pipette/__init__.py +0 -0
  143. package/python/tests/pipette/test_load_data.py +0 -103
  144. package/python/tests/pipette/test_mutable_configurations.py +0 -266
  145. package/python/tests/pipette/test_pipette_definition.py +0 -183
  146. package/python/tests/pipette/test_pipette_load_name_conversions.py +0 -222
  147. package/python/tests/pipette/test_typechecks.py +0 -50
  148. package/python/tests/pipette/test_validate_schema.py +0 -37
  149. package/python/tests/protocol/__init__.py +0 -15
  150. package/python/tests/protocol/test_protocol_schema_v6.py +0 -107
  151. package/python/tests/protocol/test_protocol_schema_v7.py +0 -34
  152. package/python/tests/protocol/test_protocol_schema_v8.py +0 -20
  153. package/python/tests/protocol/test_typechecks.py +0 -36
  154. package/python/tests/robot/__init__.py +0 -0
  155. package/python/tests/robot/test_typechecks.py +0 -20
  156. /package/lib/{bundle.673284981fd97184260c.js.LICENSE.txt → opentrons-shared-data.js.LICENSE.txt} +0 -0
@@ -1,261 +0,0 @@
1
- import json
2
- import os
3
-
4
- from typing import Dict, Any, Union, Optional, List
5
- from typing_extensions import Literal
6
- from functools import lru_cache
7
-
8
- from .. import load_shared_data, get_shared_data_root
9
-
10
- from .pipette_definition import (
11
- PipetteConfigurations,
12
- PipetteLiquidPropertiesDefinition,
13
- )
14
- from .model_constants import MOUNT_CONFIG_LOOKUP_TABLE, _MAP_KEY_TO_V2
15
- from .types import (
16
- PipetteChannelType,
17
- PipetteModelType,
18
- PipetteGenerationType,
19
- PipetteVersionType,
20
- PipetteModelMajorVersion,
21
- PipetteModelMinorVersion,
22
- LiquidClasses,
23
- )
24
-
25
-
26
- LoadedConfiguration = Dict[str, Union[str, Dict[str, Any]]]
27
-
28
-
29
- def _get_configuration_dictionary(
30
- config_type: Literal["general", "geometry", "liquid"],
31
- channels: PipetteChannelType,
32
- model: PipetteModelType,
33
- version: PipetteVersionType,
34
- liquid_class: Optional[LiquidClasses] = None,
35
- ) -> LoadedConfiguration:
36
- if liquid_class:
37
- config_path = (
38
- get_shared_data_root()
39
- / "pipette"
40
- / "definitions"
41
- / "2"
42
- / config_type
43
- / channels.name.lower()
44
- / model.value
45
- / liquid_class.name
46
- / f"{version.major}_{version.minor}.json"
47
- )
48
- else:
49
- config_path = (
50
- get_shared_data_root()
51
- / "pipette"
52
- / "definitions"
53
- / "2"
54
- / config_type
55
- / channels.name.lower()
56
- / model.value
57
- / f"{version.major}_{version.minor}.json"
58
- )
59
- return json.loads(load_shared_data(config_path))
60
-
61
-
62
- @lru_cache(maxsize=None)
63
- def _geometry(
64
- channels: PipetteChannelType,
65
- model: PipetteModelType,
66
- version: PipetteVersionType,
67
- ) -> LoadedConfiguration:
68
- return _get_configuration_dictionary("geometry", channels, model, version)
69
-
70
-
71
- @lru_cache(maxsize=None)
72
- def _liquid(
73
- channels: PipetteChannelType,
74
- model: PipetteModelType,
75
- version: PipetteVersionType,
76
- ) -> Dict[str, LoadedConfiguration]:
77
- liquid_dict = {}
78
- for liquid_class in LiquidClasses:
79
- try:
80
- liquid_dict[liquid_class.name] = _get_configuration_dictionary(
81
- "liquid", channels, model, version, liquid_class
82
- )
83
- except FileNotFoundError:
84
- continue
85
-
86
- return liquid_dict
87
-
88
-
89
- @lru_cache(maxsize=None)
90
- def _physical(
91
- channels: PipetteChannelType,
92
- model: PipetteModelType,
93
- version: PipetteVersionType,
94
- ) -> LoadedConfiguration:
95
- return _get_configuration_dictionary("general", channels, model, version)
96
-
97
-
98
- @lru_cache(maxsize=None)
99
- def load_serial_lookup_table() -> Dict[str, str]:
100
- """Load a serial abbreviation lookup table mapped to model name."""
101
- config_path = get_shared_data_root() / "pipette" / "definitions" / "2" / "general"
102
- _lookup_table = {}
103
- _channel_shorthand = {
104
- "eight_channel": "M",
105
- "single_channel": "S",
106
- "ninety_six_channel": "H",
107
- }
108
- _channel_model_str = {
109
- "single_channel": "single",
110
- "ninety_six_channel": "96",
111
- "eight_channel": "multi",
112
- }
113
- _model_shorthand = {"p1000": "p1k", "p300": "p3h"}
114
- for channel_dir in os.listdir(config_path):
115
- for model_dir in os.listdir(config_path / channel_dir):
116
- for version_file in os.listdir(config_path / channel_dir / model_dir):
117
- version_list = version_file.split(".json")[0].split("_")
118
- built_model = f"{model_dir}_{_channel_model_str[channel_dir]}_v{version_list[0]}.{version_list[1]}"
119
-
120
- model_shorthand = _model_shorthand.get(model_dir, model_dir)
121
-
122
- if (
123
- model_dir == "p300"
124
- and int(version_list[0]) == 1
125
- and int(version_list[1]) == 0
126
- ):
127
- # Well apparently, we decided to switch the shorthand of the p300 depending
128
- # on whether it's a "V1" model or not...so...here is the lovely workaround.
129
- model_shorthand = model_dir
130
- serial_shorthand = f"{model_shorthand.upper()}{_channel_shorthand[channel_dir]}V{version_list[0]}{version_list[1]}"
131
- _lookup_table[serial_shorthand] = built_model
132
- return _lookup_table
133
-
134
-
135
- def load_liquid_model(
136
- model: PipetteModelType,
137
- channels: PipetteChannelType,
138
- version: PipetteVersionType,
139
- ) -> Dict[str, PipetteLiquidPropertiesDefinition]:
140
- liquid_dict = _liquid(channels, model, version)
141
- return {
142
- k: PipetteLiquidPropertiesDefinition.parse_obj(v)
143
- for k, v in liquid_dict.items()
144
- }
145
-
146
-
147
- def _change_to_camel_case(c: str) -> str:
148
- # Tiny helper function to convert to camelCase.
149
- config_name = c.split("_")
150
- if len(config_name) == 1:
151
- return config_name[0]
152
- return f"{config_name[0]}" + "".join(s.capitalize() for s in config_name[1::])
153
-
154
-
155
- def _edit_non_quirk_with_lc_override(
156
- mutable_config_key: str,
157
- new_mutable_value: Any,
158
- base_dict: Dict[str, Any],
159
- liquid_class: Optional[LiquidClasses],
160
- ) -> None:
161
- def _do_edit_non_quirk(
162
- new_value: Any, existing: Dict[Any, Any], keypath: List[Any]
163
- ) -> None:
164
- thiskey: Any = keypath[0]
165
- if thiskey in [lc.name for lc in LiquidClasses]:
166
- if liquid_class:
167
- thiskey = liquid_class
168
- else:
169
- thiskey = LiquidClasses[thiskey]
170
- if len(keypath) > 1:
171
- restkeys = keypath[1:]
172
- if thiskey == "##EACHTIP##":
173
- for key in existing.keys():
174
- _do_edit_non_quirk(new_value, existing[key], restkeys)
175
- else:
176
- _do_edit_non_quirk(new_value, existing[thiskey], restkeys)
177
- else:
178
- # This was the last key
179
- if thiskey == "##EACHTIP##":
180
- for key in existing.keys():
181
- existing[key] = new_value
182
- else:
183
- existing[thiskey] = new_value
184
-
185
- new_names = _MAP_KEY_TO_V2[mutable_config_key]
186
- _do_edit_non_quirk(new_mutable_value, base_dict, new_names)
187
-
188
-
189
- def update_pipette_configuration(
190
- base_configurations: PipetteConfigurations,
191
- v1_configuration_changes: Dict[str, Any],
192
- liquid_class: Optional[LiquidClasses] = None,
193
- ) -> PipetteConfigurations:
194
- """Helper function to update 'V1' format configurations (left over from PipetteDict).
195
-
196
- #TODO (lc 7-14-2023) Remove once the pipette config dict is eliminated.
197
- Given an input of v1 mutable configs, look up the equivalent keyed
198
- value of that configuration."""
199
- quirks_list = []
200
- dict_of_base_model = base_configurations.dict(by_alias=True)
201
-
202
- for c, v in v1_configuration_changes.items():
203
- lookup_key = _change_to_camel_case(c)
204
- if c == "quirks" and isinstance(v, dict):
205
- quirks_list.extend([b.name for b in v.values() if b.value])
206
- else:
207
- _edit_non_quirk_with_lc_override(
208
- lookup_key, v, dict_of_base_model, liquid_class
209
- )
210
-
211
- dict_of_base_model["quirks"] = list(
212
- set(dict_of_base_model["quirks"]) - set(quirks_list)
213
- )
214
-
215
- # re-serialization is not great for this nested enum so we need
216
- # to perform this workaround.
217
- if not liquid_class:
218
- liquid_class = LiquidClasses.default
219
- dict_of_base_model["liquid_properties"][liquid_class]["supportedTips"] = {
220
- k.name: v
221
- for k, v in dict_of_base_model["liquid_properties"][liquid_class][
222
- "supportedTips"
223
- ].items()
224
- }
225
- dict_of_base_model["liquid_properties"] = {
226
- k.name: v for k, v in dict_of_base_model["liquid_properties"].items()
227
- }
228
- dict_of_base_model["plungerPositionsConfigurations"] = {
229
- k.name: v
230
- for k, v in dict_of_base_model["plungerPositionsConfigurations"].items()
231
- }
232
- return PipetteConfigurations.parse_obj(dict_of_base_model)
233
-
234
-
235
- def load_definition(
236
- model: PipetteModelType,
237
- channels: PipetteChannelType,
238
- version: PipetteVersionType,
239
- ) -> PipetteConfigurations:
240
- if (
241
- version.major not in PipetteModelMajorVersion
242
- or version.minor not in PipetteModelMinorVersion
243
- ):
244
- raise KeyError("Pipette version not found.")
245
-
246
- geometry_dict = _geometry(channels, model, version)
247
- physical_dict = _physical(channels, model, version)
248
- liquid_dict = _liquid(channels, model, version)
249
-
250
- generation = PipetteGenerationType(physical_dict["displayCategory"])
251
- mount_configs = MOUNT_CONFIG_LOOKUP_TABLE[generation][channels]
252
-
253
- return PipetteConfigurations.parse_obj(
254
- {
255
- **geometry_dict,
256
- **physical_dict,
257
- "liquid_properties": liquid_dict,
258
- "version": version,
259
- "mount_configurations": mount_configs,
260
- }
261
- )
@@ -1,123 +0,0 @@
1
- from typing import Dict, Union, List
2
-
3
- from .types import (
4
- Quirks,
5
- RobotMountConfigs,
6
- AvailableUnits,
7
- PipetteGenerationType,
8
- PipetteChannelType,
9
- )
10
-
11
- MOUNT_CONFIG_LOOKUP_TABLE = {
12
- PipetteGenerationType.GEN1: {
13
- PipetteChannelType.SINGLE_CHANNEL: RobotMountConfigs(768, 220, 30),
14
- PipetteChannelType.EIGHT_CHANNEL: RobotMountConfigs(768, 220, 30),
15
- },
16
- PipetteGenerationType.GEN2: {
17
- PipetteChannelType.SINGLE_CHANNEL: RobotMountConfigs(3200, 172.15, 60),
18
- PipetteChannelType.EIGHT_CHANNEL: RobotMountConfigs(3200, 155.75, 60),
19
- },
20
- PipetteGenerationType.FLEX: {
21
- PipetteChannelType.SINGLE_CHANNEL: RobotMountConfigs(2133.33, 230.15, 80),
22
- PipetteChannelType.EIGHT_CHANNEL: RobotMountConfigs(2133.33, 230.15, 80),
23
- PipetteChannelType.NINETY_SIX_CHANNEL: RobotMountConfigs(2133.33, 230.15, 80),
24
- },
25
- }
26
-
27
-
28
- VALID_QUIRKS = [q.value for q in Quirks]
29
- MUTABLE_CONFIGS_V1 = [
30
- "top",
31
- "bottom",
32
- "blowout",
33
- "dropTip",
34
- "pickUpCurrent",
35
- "pickUpDistance",
36
- "pickUpIncrement",
37
- "pickUpPresses",
38
- "pickUpSpeed",
39
- "plungerCurrent",
40
- "dropTipCurrent",
41
- "dropTipSpeed",
42
- "tipLength",
43
- "quirks",
44
- ]
45
-
46
- # Version 2 Configuration Keys.
47
- MUTABLE_CONFIGS_V2 = [
48
- "plungerPositionsConfigurations",
49
- "pickUpTipConfigurations",
50
- "dropTipConfigurations",
51
- "plungerMotorConfigurations",
52
- "tipLength",
53
- ]
54
-
55
- RESTRICTED_MUTABLE_CONFIG_KEYS = [*VALID_QUIRKS, "model"]
56
-
57
-
58
- _MAP_KEY_TO_V2: Dict[str, List[str]] = {
59
- "top": ["plungerPositionsConfigurations", "default", "top"],
60
- "bottom": ["plungerPositionsConfigurations", "default", "bottom"],
61
- "blowout": ["plungerPositionsConfigurations", "default", "blowout"],
62
- "dropTip": ["plungerPositionsConfigurations", "default", "drop"],
63
- "pickUpCurrent": ["pickUpTipConfigurations", "pressFit", "currentByTipCount"],
64
- "pickUpDistance": ["pickUpTipConfigurations", "pressFit", "distance"],
65
- "pickUpIncrement": ["pickUpTipConfigurations", "pressFit", "increment"],
66
- "pickUpPresses": ["pickUpTipConfigurations", "pressFit", "presses"],
67
- "pickUpSpeed": ["pickUpTipConfigurations", "pressFit", "speed"],
68
- "plungerCurrent": ["plungerMotorConfigurations", "run"],
69
- "dropTipCurrent": ["dropTipConfigurations", "plungerEject", "current"],
70
- "dropTipSpeed": ["dropTipConfigurations", "plungerEject", "speed"],
71
- "maxVolume": ["liquid_properties", "default", "maxVolume"],
72
- "minVolume": ["liquid_properties", "default", "minVolume"],
73
- "tipLength": [
74
- "liquid_properties",
75
- "default",
76
- "supportedTips",
77
- "##EACHTIP##",
78
- "defaultTipLength",
79
- ],
80
- }
81
-
82
-
83
- _MIN_MAX_LOOKUP: Dict[str, Dict[str, Union[int, float]]] = {
84
- "current": {"min": 0.1, "max": 2.0},
85
- "run": {"min": 0.1, "max": 2.0},
86
- "speed": {"min": 0.01, "max": 30},
87
- "top": {"min": -20, "max": 30},
88
- "bottom": {"min": -20, "max": 30},
89
- "blowout": {"min": -20, "max": 30},
90
- "drop": {"min": -20, "max": 30},
91
- "presses": {"min": 0, "max": 15},
92
- "increment": {"min": 0, "max": 10},
93
- "distance": {"min": 0, "max": 10},
94
- "defaultTipLength": {"min": 0, "max": 100},
95
- }
96
-
97
- _TYPE_LOOKUP: Dict[str, str] = {
98
- "current": "float",
99
- "run": "float",
100
- "speed": "float",
101
- "top": "float",
102
- "bottom": "float",
103
- "blowout": "float",
104
- "drop": "float",
105
- "presses": "int",
106
- "increment": "int",
107
- "defaultTipLength": "float",
108
- "distance": "float",
109
- }
110
-
111
- _UNITS_LOOKUP = {
112
- "current": AvailableUnits.amps,
113
- "run": AvailableUnits.amps,
114
- "speed": AvailableUnits.speed,
115
- "top": AvailableUnits.mm,
116
- "bottom": AvailableUnits.mm,
117
- "blowout": AvailableUnits.mm,
118
- "drop": AvailableUnits.mm,
119
- "presses": AvailableUnits.presses,
120
- "increment": AvailableUnits.mm,
121
- "defaultTipLength": AvailableUnits.mm,
122
- "distance": AvailableUnits.mm,
123
- }