@opentrons/shared-data 0.0.1-alpha.20 → 0.1.0-alpha.0

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 (154) hide show
  1. package/Makefile +1 -1
  2. package/lib/opentrons-shared-data.js +1 -1
  3. package/lib/opentrons-shared-data.js.map +1 -1
  4. package/package.json +1 -1
  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/python/.coveragerc +0 -4
  72. package/python/.flake8 +0 -32
  73. package/python/Config.in +0 -10
  74. package/python/Makefile +0 -134
  75. package/python/Pipfile +0 -28
  76. package/python/Pipfile.lock +0 -645
  77. package/python/buildroot.mk +0 -30
  78. package/python/mypy.ini +0 -41
  79. package/python/opentrons_shared_data/__init__.py +0 -17
  80. package/python/opentrons_shared_data/_version.py +0 -20
  81. package/python/opentrons_shared_data/command/__init__.py +0 -52
  82. package/python/opentrons_shared_data/deck/__init__.py +0 -96
  83. package/python/opentrons_shared_data/deck/dev_types.py +0 -180
  84. package/python/opentrons_shared_data/errors/__init__.py +0 -30
  85. package/python/opentrons_shared_data/errors/categories.py +0 -60
  86. package/python/opentrons_shared_data/errors/codes.py +0 -108
  87. package/python/opentrons_shared_data/errors/exceptions.py +0 -915
  88. package/python/opentrons_shared_data/gripper/__init__.py +0 -63
  89. package/python/opentrons_shared_data/gripper/constants.py +0 -6
  90. package/python/opentrons_shared_data/gripper/gripper_definition.py +0 -101
  91. package/python/opentrons_shared_data/labware/__init__.py +0 -22
  92. package/python/opentrons_shared_data/labware/constants.py +0 -7
  93. package/python/opentrons_shared_data/labware/dev_types.py +0 -140
  94. package/python/opentrons_shared_data/labware/labware_definition.py +0 -328
  95. package/python/opentrons_shared_data/load.py +0 -57
  96. package/python/opentrons_shared_data/module/__init__.py +0 -74
  97. package/python/opentrons_shared_data/module/dev_types.py +0 -141
  98. package/python/opentrons_shared_data/pipette/__init__.py +0 -107
  99. package/python/opentrons_shared_data/pipette/dev_types.py +0 -177
  100. package/python/opentrons_shared_data/pipette/file_operation_helpers.py +0 -37
  101. package/python/opentrons_shared_data/pipette/load_data.py +0 -261
  102. package/python/opentrons_shared_data/pipette/model_constants.py +0 -123
  103. package/python/opentrons_shared_data/pipette/mutable_configurations.py +0 -431
  104. package/python/opentrons_shared_data/pipette/pipette_definition.py +0 -503
  105. package/python/opentrons_shared_data/pipette/pipette_load_name_conversions.py +0 -240
  106. package/python/opentrons_shared_data/pipette/scripts/__init__.py +0 -0
  107. package/python/opentrons_shared_data/pipette/scripts/build_json_script.py +0 -469
  108. package/python/opentrons_shared_data/pipette/scripts/update_configuration_files.py +0 -450
  109. package/python/opentrons_shared_data/pipette/types.py +0 -193
  110. package/python/opentrons_shared_data/protocol/__init__.py +0 -13
  111. package/python/opentrons_shared_data/protocol/constants.py +0 -98
  112. package/python/opentrons_shared_data/protocol/dev_types.py +0 -436
  113. package/python/opentrons_shared_data/protocol/models/__init__.py +0 -48
  114. package/python/opentrons_shared_data/protocol/models/protocol_schema_v6.py +0 -145
  115. package/python/opentrons_shared_data/protocol/models/protocol_schema_v7.py +0 -95
  116. package/python/opentrons_shared_data/protocol/models/protocol_schema_v8.py +0 -110
  117. package/python/opentrons_shared_data/protocol/models/shared_models.py +0 -111
  118. package/python/opentrons_shared_data/py.typed +0 -0
  119. package/python/opentrons_shared_data/robot/__init__.py +0 -33
  120. package/python/opentrons_shared_data/robot/dev_types.py +0 -37
  121. package/python/pytest.ini +0 -2
  122. package/python/setup.cfg +0 -5
  123. package/python/setup.py +0 -179
  124. package/python/tests/__init__.py +0 -1
  125. package/python/tests/conftest.py +0 -0
  126. package/python/tests/deck/__init__.py +0 -0
  127. package/python/tests/deck/test_list_names.py +0 -12
  128. package/python/tests/deck/test_position.py +0 -113
  129. package/python/tests/deck/test_typechecks.py +0 -28
  130. package/python/tests/errors/__init__.py +0 -1
  131. package/python/tests/errors/test_error_completeness.py +0 -19
  132. package/python/tests/errors/test_exceptions.py +0 -74
  133. package/python/tests/gripper/__init__.py +0 -0
  134. package/python/tests/gripper/test_definition.py +0 -30
  135. package/python/tests/gripper/test_load.py +0 -16
  136. package/python/tests/labware/__init__.py +0 -13
  137. package/python/tests/labware/test_typechecks.py +0 -21
  138. package/python/tests/module/__init__.py +0 -20
  139. package/python/tests/module/test_load.py +0 -49
  140. package/python/tests/module/test_typechecks.py +0 -34
  141. package/python/tests/pipette/__init__.py +0 -0
  142. package/python/tests/pipette/test_load_data.py +0 -103
  143. package/python/tests/pipette/test_mutable_configurations.py +0 -266
  144. package/python/tests/pipette/test_pipette_definition.py +0 -183
  145. package/python/tests/pipette/test_pipette_load_name_conversions.py +0 -222
  146. package/python/tests/pipette/test_typechecks.py +0 -50
  147. package/python/tests/pipette/test_validate_schema.py +0 -37
  148. package/python/tests/protocol/__init__.py +0 -15
  149. package/python/tests/protocol/test_protocol_schema_v6.py +0 -107
  150. package/python/tests/protocol/test_protocol_schema_v7.py +0 -34
  151. package/python/tests/protocol/test_protocol_schema_v8.py +0 -20
  152. package/python/tests/protocol/test_typechecks.py +0 -36
  153. package/python/tests/robot/__init__.py +0 -0
  154. package/python/tests/robot/test_typechecks.py +0 -20
@@ -1,30 +0,0 @@
1
- ################################################################################
2
- #
3
- # python-opentrons-shared-data
4
- #
5
- ################################################################################
6
-
7
- define OTSHAREDDATA_CALL_PBU
8
- $(shell python $(BR2_EXTERNAL_OPENTRONS_MONOREPO_PATH)/scripts/python_build_utils.py shared-data $(or $(OPENTRONS_PROJECT),robot-stack) $(1))
9
- endef
10
-
11
- PYTHON_OPENTRONS_SHARED_DATA_VERSION = $(call OTSHAREDDATA_CALL_PBU,get_version)
12
- PYTHON_OPENTRONS_SHARED_DATA_LICENSE = Apache-2
13
- PYTHON_OPENTRONS_SHARED_DATA_LICENSE_FILES = $(BR2_EXTERNAL_OPENTRONS_MONOREPO_PATH)/LICENSE
14
- PYTHON_OPENTRONS_SHARED_DATA_SETUP_TYPE = setuptools
15
- PYTHON_OPENTRONS_SHARED_DATA_SITE_METHOD = local
16
- PYTHON_OPENTRONS_SHARED_DATA_SITE = $(BR2_EXTERNAL_OPENTRONS_MONOREPO_PATH)
17
- PYTHON_OPENTRONS_SHARED_DATA_SUBDIR = shared-data/python
18
-
19
- define PYTHON_OPENTRONS_SHARED_DATA_INSTALL_VERSION
20
- echo '$(call OTSHAREDDATA_CALL_PBU,dump_br_version)' > $(BINARIES_DIR)/opentrons-shared-data-version.json
21
- endef
22
-
23
- ot_sd_name := python-opentrons-shared-data
24
-
25
- export OPENTRONS_GIT_DIR=$(BR2_EXTERNAL_OPENTRONS_MONOREPO_PATH)
26
-
27
- # Calling inner-python-package directly instead of using python-package macro
28
- # because our directory layout doesn’t conform to buildroot’s expectation of
29
- # having the directory name be the package name
30
- $(eval $(call inner-python-package,$(ot_sd_name),$(call UPPERCASE,$(ot_sd_name)),$(call UPPERCASE,$(ot_sd_name)),target))
package/python/mypy.ini DELETED
@@ -1,41 +0,0 @@
1
- [mypy]
2
- plugins = pydantic.mypy
3
- show_error_codes = True
4
- warn_unused_configs = True
5
- strict = True
6
-
7
- [pydantic-mypy]
8
- init_forbid_extra = True
9
- init_typed = True
10
- warn_required_dynamic_aliases = True
11
- warn_untyped_fields = True
12
-
13
- # TODO(mc, 2022-01-20): fix and remove all of the overrides below
14
-
15
- [mypy-opentrons_shared_data.labware.*]
16
- warn_return_any = False
17
-
18
- [mypy-opentrons_shared_data.pipette.*]
19
- no_implicit_optional = False
20
- warn_return_any = False
21
-
22
- [mypy-opentrons_shared_data.protocol.*]
23
- warn_return_any = False
24
-
25
- [mypy-tests.deck.*]
26
- disallow_untyped_defs = False
27
-
28
- [mypy-tests.labware.*]
29
- disallow_untyped_defs = False
30
- disallow_untyped_calls = False
31
-
32
- [mypy-tests.module.*]
33
- disallow_untyped_defs = False
34
- disallow_untyped_calls = False
35
-
36
- [mypy-tests.pipette.*]
37
- disallow_untyped_defs = False
38
- disallow_untyped_calls = False
39
-
40
- [mypy-tests.protocol.*]
41
- disallow_untyped_defs = False
@@ -1,17 +0,0 @@
1
- """A Python package wrapping json config definitions for the Opentrons stack.
2
-
3
- This package should never be installed on its own, only as a dependency of
4
- the main opentrons package
5
- """
6
-
7
- import os
8
-
9
- from .load import get_shared_data_root, load_shared_data
10
-
11
- from ._version import version
12
-
13
- HERE = os.path.abspath(os.path.dirname(__file__))
14
-
15
- __version__ = version
16
-
17
- __all__ = ["__version__", "get_shared_data_root", "load_shared_data"]
@@ -1,20 +0,0 @@
1
- import sys
2
- import logging
3
-
4
- _pyversion = sys.version_info[0:2]
5
-
6
- if _pyversion >= (3, 8):
7
- from importlib import metadata
8
- else:
9
- import importlib_metadata as metadata # type: ignore[no-redef]
10
-
11
- try:
12
- version: str = metadata.version("opentrons_shared_data") # type: ignore[attr-defined]
13
- except Exception as e:
14
- logging.warning(
15
- "Could not determine version for opentrons, may be dev install, using 0.0.0-dev"
16
- )
17
- logging.debug(e)
18
- version = "0.0.0-dev"
19
-
20
- __all__ = ["version"]
@@ -1,52 +0,0 @@
1
- """opentrons_shared_data.command: functions command schemas."""
2
- from pathlib import Path
3
- import json
4
- import os
5
- import re
6
-
7
- from opentrons_shared_data.errors.exceptions import InvalidProtocolData, PythonException
8
-
9
- from ..load import load_shared_data, get_shared_data_root
10
-
11
- SCHEMA_REF_VERSION_RE = re.compile(r"opentronsCommandSchemaV(\d+)")
12
-
13
-
14
- def get_newest_schema_version() -> str:
15
- """Get the version string of the most modern command schema currently in shared-data."""
16
- command_schemas_dir = get_shared_data_root() / "command" / "schemas"
17
- command_schemas = os.listdir(command_schemas_dir)
18
- all_schema_versions = []
19
- for schema_file_name in command_schemas:
20
- schema_version_match = re.match(r"(\d+).json", schema_file_name)
21
- if schema_version_match is not None:
22
- all_schema_versions.append(schema_version_match.group(1))
23
-
24
- return str(max(all_schema_versions))
25
-
26
-
27
- def load_schema_string(version: str) -> str:
28
- """Get the string containing the command JSON schema for the given version string."""
29
- path = Path("command") / "schemas" / f"{version}.json"
30
- try:
31
- return json.dumps(json.loads(load_shared_data(path)), indent=2)
32
- except OSError as ose:
33
- raise InvalidProtocolData(
34
- message=f"Command schema version {version} is not available",
35
- detail={
36
- "type": "bad-schema-version",
37
- "schema-kind": "command",
38
- "version": version,
39
- },
40
- wrapping=[PythonException(ose)],
41
- )
42
-
43
-
44
- def schema_version_from_ref(ref: str) -> str:
45
- """Parse the command schema version from a command schema ref."""
46
- version = SCHEMA_REF_VERSION_RE.match(ref)
47
- if not version:
48
- raise InvalidProtocolData(
49
- message=f"Could not parse version from command schema ${ref}",
50
- detail={"ref": ref, "type": "bad-schema-ref", "schema-kind": "command"},
51
- )
52
- return version.group(1)
@@ -1,96 +0,0 @@
1
- """
2
- opentrons_shared_data.deck: types and bindings for deck definitions
3
- """
4
- from typing import Dict, List, NamedTuple, cast, overload, TYPE_CHECKING
5
- from typing_extensions import Final
6
- import json
7
-
8
- from .. import get_shared_data_root, load_shared_data
9
-
10
- if TYPE_CHECKING:
11
- from .dev_types import (
12
- DeckSchema,
13
- DeckDefinition,
14
- DeckDefinitionV3,
15
- DeckSchemaVersion3,
16
- DeckDefinitionV4,
17
- DeckSchemaVersion4,
18
- )
19
-
20
- DEFAULT_DECK_DEFINITION_VERSION: Final = 4
21
-
22
-
23
- class Offset(NamedTuple):
24
- x: float = 0.0
25
- y: float = 0.0
26
- z: float = 0.0
27
-
28
-
29
- Z_PREP_OFFSET = Offset(x=13, y=13)
30
- CALIBRATION_PROBE_RADIUS: Final[float] = 2
31
- CALIBRATION_SQUARE_DEPTH: Final[float] = -0.25
32
- CALIBRATION_SQUARE_SIZE: Final[float] = 20
33
- CALIBRATION_SQUARE_EDGES: Dict[str, Offset] = {
34
- "left": Offset(x=-CALIBRATION_SQUARE_SIZE * 0.5),
35
- "right": Offset(x=CALIBRATION_SQUARE_SIZE * 0.5),
36
- "top": Offset(y=CALIBRATION_SQUARE_SIZE * 0.5),
37
- "bottom": Offset(y=-CALIBRATION_SQUARE_SIZE * 0.5),
38
- }
39
-
40
-
41
- @overload
42
- def load(name: str, version: "DeckSchemaVersion4") -> "DeckDefinitionV4":
43
- ...
44
-
45
-
46
- @overload
47
- def load(name: str, version: "DeckSchemaVersion3") -> "DeckDefinitionV3":
48
- ...
49
-
50
-
51
- def load(name: str, version: int = DEFAULT_DECK_DEFINITION_VERSION) -> "DeckDefinition":
52
- return json.loads( # type: ignore[no-any-return]
53
- load_shared_data(f"deck/definitions/{version}/{name}.json")
54
- )
55
-
56
-
57
- def load_schema(version: int) -> "DeckSchema":
58
- return cast(
59
- "DeckSchema", json.loads(load_shared_data(f"deck/schemas/{version}.json"))
60
- )
61
-
62
-
63
- def list_names(version: int) -> List[str]:
64
- """Return all loadable deck definition names, for the given schema version."""
65
- definitions_directory = (
66
- get_shared_data_root() / "deck" / "definitions" / f"{version}"
67
- )
68
- return [file.stem for file in definitions_directory.iterdir()]
69
-
70
-
71
- def get_calibration_square_position_in_slot(slot: int) -> Offset:
72
- """Get the position of an OT-3 deck slot's calibration square.
73
-
74
- Params:
75
- slot: The slot whose calibration square to retrieve, specified as an OT-2-style slot number.
76
- For example, specify 5 to get slot C2.
77
- """
78
- deck = load("ot3_standard", version=3)
79
- slots = deck["locations"]["orderedSlots"]
80
-
81
- # Assume that the OT-3 deck definition has the same number of slots, and in the same order,
82
- # as the OT-2.
83
- # TODO(mm, 2023-05-22): This assumption will break down when the OT-3 has staging area slots.
84
- # https://opentrons.atlassian.net/browse/RLAB-345
85
- s = slots[slot - 1]
86
-
87
- bottom_left = s["position"]
88
- slot_size_x = s["boundingBox"]["xDimension"]
89
- slot_size_y = s["boundingBox"]["yDimension"]
90
- relative_center = [float(slot_size_x) * 0.5, float(slot_size_y) * 0.5, 0]
91
- square_z = [0, 0, CALIBRATION_SQUARE_DEPTH]
92
- # add up the elements of each list and return an Offset of the result
93
- nominal_position = [
94
- float(sum(x)) for x in zip(bottom_left, relative_center, square_z)
95
- ]
96
- return Offset(*nominal_position)
@@ -1,180 +0,0 @@
1
- """
2
- opentrons_shared_data.deck.dev_types: types for deck defs
3
-
4
- This should only be imported if typing.TYPE_CHECKING is True
5
- """
6
-
7
- from typing import Any, Dict, List, NewType, Union
8
- from typing_extensions import Literal, TypedDict
9
-
10
- from ..module.dev_types import ModuleType
11
-
12
-
13
- DeckSchemaVersion4 = Literal[4]
14
- DeckSchemaVersion3 = Literal[3]
15
- DeckSchemaVersion2 = Literal[2]
16
- DeckSchemaVersion1 = Literal[1]
17
-
18
- DeckSchema = NewType("DeckSchema", Dict[str, Any])
19
-
20
- DeckSchemaId = Literal["opentronsDeckSchemaV3", "opentronsDeckSchemaV4"]
21
- RobotModel = Union[Literal["OT-2 Standard"], Literal["OT-3 Standard"]]
22
-
23
-
24
- class Metadata(TypedDict, total=False):
25
- displayName: str
26
- tags: List[str]
27
-
28
-
29
- class Robot(TypedDict):
30
- model: RobotModel
31
-
32
-
33
- class BoundingBox(TypedDict):
34
- xDimension: float
35
- yDimension: float
36
- zDimension: float
37
-
38
-
39
- class SlotDefV3(TypedDict, total=False):
40
- id: str
41
- position: List[float]
42
- boundingBox: BoundingBox
43
- displayName: str
44
- compatibleModuleTypes: List[ModuleType]
45
- matingSurfaceUnitVector: List[Union[Literal[1], Literal[-1]]]
46
-
47
-
48
- class CalibrationPoint(TypedDict):
49
- id: str
50
- position: List[float]
51
- displayName: str
52
-
53
-
54
- class INode(TypedDict):
55
- name: str
56
- type: str
57
- value: str
58
- attributes: Dict[str, str]
59
- # this should be a recursive call to INode but we need to upgrade mypy
60
- children: List[Dict[str, Any]]
61
-
62
-
63
- class FixedLabwareBySlot(TypedDict):
64
- id: str
65
- displayName: str
66
- labware: str
67
- slot: str
68
-
69
-
70
- class FixedLabwareByPosition(TypedDict):
71
- id: str
72
- displayName: str
73
- labware: str
74
- position: List[float]
75
-
76
-
77
- class FixedVolumeBySlot(TypedDict):
78
- id: str
79
- displayName: str
80
- boundingBox: BoundingBox
81
- slot: str
82
-
83
-
84
- class FixedVolumeByPosition(TypedDict):
85
- id: str
86
- displayName: str
87
- boundingBox: BoundingBox
88
- position: List[float]
89
-
90
-
91
- class _RequiredAddressableArea(TypedDict):
92
- id: str
93
- areaType: str
94
- offsetFromCutoutFixture: List[float]
95
- boundingBox: BoundingBox
96
- displayName: str
97
-
98
-
99
- class AddressableArea(_RequiredAddressableArea, total=False):
100
- compatibleModuleTypes: List[ModuleType]
101
- matingSurfaceUnitVector: List[Union[Literal[1], Literal[-1]]]
102
- ableToDropTips: bool
103
- ableToDropLabware: bool
104
- dropTipsOffset: List[float]
105
- dropLabwareOffset: List[float]
106
-
107
-
108
- class Cutout(TypedDict):
109
- id: str
110
- position: List[float]
111
- displayName: str
112
-
113
-
114
- class CutoutFixture(TypedDict):
115
- id: str
116
- mayMountTo: List[str]
117
- displayName: str
118
- providesAddressableAreas: Dict[str, List[str]]
119
-
120
-
121
- Fixture = Union[
122
- FixedLabwareBySlot, FixedLabwareByPosition, FixedVolumeBySlot, FixedVolumeByPosition
123
- ]
124
-
125
-
126
- class LocationsV3(TypedDict):
127
- orderedSlots: List[SlotDefV3]
128
- calibrationPoints: List[CalibrationPoint]
129
- fixtures: List[Fixture]
130
-
131
-
132
- class LocationsV4(TypedDict):
133
- addressableAreas: List[AddressableArea]
134
- calibrationPoints: List[CalibrationPoint]
135
- cutouts: List[Cutout]
136
- legacyFixtures: List[Fixture]
137
-
138
-
139
- class NamedOffset(TypedDict):
140
- x: float
141
- y: float
142
- z: float
143
-
144
-
145
- class GripperOffsets(TypedDict):
146
- pickUpOffset: NamedOffset
147
- dropOffset: NamedOffset
148
-
149
-
150
- class _RequiredDeckDefinitionV3(TypedDict):
151
- otId: str
152
- schemaVersion: Literal[3]
153
- cornerOffsetFromOrigin: List[float]
154
- dimensions: List[float]
155
- metadata: Metadata
156
- robot: Robot
157
- locations: LocationsV3
158
- layers: List[INode]
159
-
160
-
161
- class DeckDefinitionV3(_RequiredDeckDefinitionV3, total=False):
162
- gripperOffsets: Dict[str, GripperOffsets]
163
-
164
-
165
- class _RequiredDeckDefinitionV4(TypedDict):
166
- otId: str
167
- schemaVersion: Literal[4]
168
- cornerOffsetFromOrigin: List[float]
169
- dimensions: List[float]
170
- metadata: Metadata
171
- robot: Robot
172
- locations: LocationsV4
173
- cutoutFixtures: List[CutoutFixture]
174
-
175
-
176
- class DeckDefinitionV4(_RequiredDeckDefinitionV4, total=False):
177
- gripperOffsets: Dict[str, GripperOffsets]
178
-
179
-
180
- DeckDefinition = Union[DeckDefinitionV3, DeckDefinitionV4]
@@ -1,30 +0,0 @@
1
- """A python package implementing the errors in errors.json.
2
-
3
- A note on this package: it is not codegenned but written by hand, and has to be upkept
4
- by hand. It comes with tests to make sure this happens.
5
-
6
- This seems a little ridiculous and kind of is, but what it lets us do is really simplify
7
- our static analysis and dev setup.
8
- """
9
-
10
- from .categories import ErrorCategories, ErrorCategory
11
- from .codes import ErrorCodes, ErrorCode
12
- from .exceptions import (
13
- EnumeratedError,
14
- PythonException,
15
- GeneralError,
16
- RoboticsControlError,
17
- RoboticsInteractionError,
18
- )
19
-
20
- __all__ = [
21
- "ErrorCategory",
22
- "ErrorCategories",
23
- "ErrorCode",
24
- "ErrorCodes",
25
- "EnumeratedError",
26
- "PythonException",
27
- "GeneralError",
28
- "RoboticsControlError",
29
- "RoboticsInteractionError",
30
- ]
@@ -1,60 +0,0 @@
1
- """Error categories."""
2
-
3
- from enum import Enum
4
- from dataclasses import dataclass
5
- import json
6
- from functools import lru_cache
7
- from typing import Dict
8
-
9
- from ..load import load_shared_data
10
-
11
-
12
- CATEGORIES: Dict[str, Dict[str, str]] = json.loads(
13
- load_shared_data("errors/definitions/1/errors.json")
14
- )["categories"]
15
-
16
-
17
- @dataclass(frozen=True)
18
- class ErrorCategory:
19
- """Individual error category data."""
20
-
21
- name: str
22
- detail: str
23
- code_prefix: str
24
-
25
-
26
- def _category_from_dict_entry(entry_name: str) -> ErrorCategory:
27
- return ErrorCategory(
28
- name=entry_name,
29
- detail=CATEGORIES[entry_name]["detail"],
30
- code_prefix=CATEGORIES[entry_name]["codePrefix"],
31
- )
32
-
33
-
34
- class ErrorCategories(Enum):
35
- """All enuemrated error categories."""
36
-
37
- HARDWARE_COMMUNICATION_ERROR = _category_from_dict_entry(
38
- "hardwareCommunicationError"
39
- )
40
- ROBOTICS_CONTROL_ERROR = _category_from_dict_entry("roboticsControlError")
41
- ROBOTICS_INTERACTION_ERROR = _category_from_dict_entry("roboticsInteractionError")
42
- GENERAL_ERROR = _category_from_dict_entry("generalError")
43
-
44
- @classmethod
45
- @lru_cache(4)
46
- def by_category_name(cls, category_name: str) -> "ErrorCategories":
47
- """Get a subsystem by its category name."""
48
- for entry in cls:
49
- if entry.value.name == category_name:
50
- return entry
51
- raise KeyError(category_name)
52
-
53
- @classmethod
54
- @lru_cache(4)
55
- def by_code_prefix(cls, prefix: str) -> "ErrorCategories":
56
- """Get an error category by its code prefix."""
57
- for entry in cls:
58
- if entry.value.code_prefix == prefix:
59
- return entry
60
- raise KeyError(prefix)
@@ -1,108 +0,0 @@
1
- """Error codes."""
2
-
3
- from enum import Enum
4
- from dataclasses import dataclass
5
- import json
6
- from typing import Tuple, Dict
7
- from functools import lru_cache
8
-
9
- from ..load import load_shared_data
10
- from .categories import ErrorCategories
11
-
12
- CODES: Dict[str, Dict[str, str]] = json.loads(
13
- load_shared_data("errors/definitions/1/errors.json")
14
- )["codes"]
15
-
16
-
17
- @dataclass(frozen=True)
18
- class ErrorCode:
19
- """Individual error code data."""
20
-
21
- code: str
22
- detail: str
23
- category: ErrorCategories
24
-
25
-
26
- def _code_from_dict_entry(entry_code: str) -> ErrorCode:
27
- return ErrorCode(
28
- code=entry_code,
29
- detail=CODES[entry_code]["detail"],
30
- category=ErrorCategories.by_category_name(CODES[entry_code]["category"]),
31
- )
32
-
33
-
34
- class ErrorCodes(Enum):
35
- """All enumerated error codes."""
36
-
37
- COMMUNICATION_ERROR = _code_from_dict_entry("1000")
38
- CANBUS_COMMUNICATION_ERROR = _code_from_dict_entry("1001")
39
- INTERNAL_USB_COMMUNICATION_ERROR = _code_from_dict_entry("1002")
40
- MODULE_COMMUNICATION_ERROR = _code_from_dict_entry("1003")
41
- COMMAND_TIMED_OUT = _code_from_dict_entry("1004")
42
- FIRMWARE_UPDATE_FAILED = _code_from_dict_entry("1005")
43
- INTERNAL_MESSAGE_FORMAT_ERROR = _code_from_dict_entry("1006")
44
- CANBUS_CONFIGURATION_ERROR = _code_from_dict_entry("1007")
45
- CANBUS_BUS_ERROR = _code_from_dict_entry("1008")
46
- ROBOTICS_CONTROL_ERROR = _code_from_dict_entry("2000")
47
- MOTION_FAILED = _code_from_dict_entry("2001")
48
- HOMING_FAILED = _code_from_dict_entry("2002")
49
- STALL_OR_COLLISION_DETECTED = _code_from_dict_entry("2003")
50
- MOTION_PLANNING_FAILURE = _code_from_dict_entry("2004")
51
- POSITION_ESTIMATION_INVALID = _code_from_dict_entry("2005")
52
- MOVE_CONDITION_NOT_MET = _code_from_dict_entry("2006")
53
- CALIBRATION_STRUCTURE_NOT_FOUND = _code_from_dict_entry("2007")
54
- EDGE_NOT_FOUND = _code_from_dict_entry("2008")
55
- EARLY_CAPACITIVE_SENSE_TRIGGER = _code_from_dict_entry("2009")
56
- INACCURATE_NON_CONTACT_SWEEP = _code_from_dict_entry("2010")
57
- MISALIGNED_GANTRY = _code_from_dict_entry("2011")
58
- UNMATCHED_TIP_PRESENCE_STATES = _code_from_dict_entry("2012")
59
- POSITION_UNKNOWN = _code_from_dict_entry("2013")
60
- EXECUTION_CANCELLED = _code_from_dict_entry("2014")
61
- ROBOTICS_INTERACTION_ERROR = _code_from_dict_entry("3000")
62
- LABWARE_DROPPED = _code_from_dict_entry("3001")
63
- LABWARE_NOT_PICKED_UP = _code_from_dict_entry("3002")
64
- TIP_PICKUP_FAILED = _code_from_dict_entry("3003")
65
- TIP_DROP_FAILED = _code_from_dict_entry("3004")
66
- UNEXPECTED_TIP_REMOVAL = _code_from_dict_entry("3005")
67
- PIPETTE_OVERPRESSURE = _code_from_dict_entry("3006")
68
- E_STOP_ACTIVATED = _code_from_dict_entry("3008")
69
- E_STOP_NOT_PRESENT = _code_from_dict_entry("3009")
70
- PIPETTE_NOT_PRESENT = _code_from_dict_entry("3010")
71
- GRIPPER_NOT_PRESENT = _code_from_dict_entry("3011")
72
- UNEXPECTED_TIP_ATTACH = _code_from_dict_entry("3012")
73
- FIRMWARE_UPDATE_REQUIRED = _code_from_dict_entry("3013")
74
- INVALID_ACTUATOR = _code_from_dict_entry("3014")
75
- MODULE_NOT_PRESENT = _code_from_dict_entry("3015")
76
- INVALID_INSTRUMENT_DATA = _code_from_dict_entry("3016")
77
- INVALID_LIQUID_CLASS_NAME = _code_from_dict_entry("3017")
78
- TIP_DETECTOR_NOT_FOUND = _code_from_dict_entry("3018")
79
- GENERAL_ERROR = _code_from_dict_entry("4000")
80
- ROBOT_IN_USE = _code_from_dict_entry("4001")
81
- API_REMOVED = _code_from_dict_entry("4002")
82
- NOT_SUPPORTED_ON_ROBOT_TYPE = _code_from_dict_entry("4003")
83
- COMMAND_PRECONDITION_VIOLATED = _code_from_dict_entry("4004")
84
- COMMAND_PARAMETER_LIMIT_VIOLATED = _code_from_dict_entry("4005")
85
- INVALID_PROTOCOL_DATA = _code_from_dict_entry("4006")
86
- API_MISCONFIGURATION = _code_from_dict_entry("4007")
87
-
88
- @classmethod
89
- @lru_cache(25)
90
- def by_error_code(cls, error_code: str) -> "ErrorCodes":
91
- """Get an error by its code.
92
-
93
- Note: this is a linear search because it makes life easier and also this is rare in python.
94
- """
95
- for error in cls:
96
- if error.value.code == error_code:
97
- return error
98
- raise KeyError(error_code)
99
-
100
- @classmethod
101
- @lru_cache(len(ErrorCategories))
102
- def of_category(cls, category: ErrorCategories) -> Tuple["ErrorCodes", ...]:
103
- """Get all error codes by their category."""
104
- return tuple(
105
- error
106
- for error in cls
107
- if error.value.code.startswith(category.value.code_prefix)
108
- )