@opentrons/shared-data 0.1.7-alpha.1 → 0.2.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 (258) hide show
  1. package/.coveragerc +4 -0
  2. package/.flake8 +31 -0
  3. package/Config.in +11 -0
  4. package/LICENSE +202 -0
  5. package/Makefile +13 -14
  6. package/Makefile-python.mk +134 -0
  7. package/buildroot.mk +35 -0
  8. package/command/index.ts +3 -1
  9. package/command/schemas/13.json +147 -315
  10. package/command/schemas/14.json +7254 -0
  11. package/command/types/index.ts +15 -4
  12. package/command/types/module.ts +24 -4
  13. package/command/types/setup.ts +5 -5
  14. package/command/types/support.ts +1 -0
  15. package/deck/definitions/5/ot2_short_trash.json +37 -0
  16. package/deck/definitions/5/ot2_standard.json +37 -0
  17. package/deck/definitions/5/ot3_standard.json +152 -51
  18. package/deck/schemas/5.json +46 -1
  19. package/labware/definitions/2/appliedbiosystemsmicroamp_384_wellplate_40ul/3.json +4737 -0
  20. package/labware/definitions/2/axygen_96_wellplate_500ul/1.json +1036 -0
  21. package/labware/definitions/2/axygen_96_wellplate_500ul/2.json +1159 -0
  22. package/labware/definitions/2/biorad_384_wellplate_50ul/4.json +4748 -0
  23. package/labware/definitions/2/biorad_96_wellplate_200ul_pcr/4.json +1187 -0
  24. package/labware/definitions/2/corning_12_wellplate_6.9ml_flat/4.json +210 -0
  25. package/labware/definitions/2/corning_24_wellplate_3.4ml_flat/4.json +342 -0
  26. package/labware/definitions/2/corning_48_wellplate_1.6ml_flat/5.json +610 -0
  27. package/labware/definitions/2/corning_6_wellplate_16.8ml_flat/4.json +134 -0
  28. package/labware/definitions/2/corning_96_wellplate_360ul_flat/4.json +1177 -0
  29. package/labware/definitions/2/corning_96_wellplate_360ul_lid/1.json +111 -0
  30. package/labware/definitions/2/ev_resin_tips_flex_96_labware/1.json +1 -1
  31. package/labware/definitions/2/ibidi_96_square_well_plate_300ul/1.json +1105 -0
  32. package/labware/definitions/2/ibidi_96_square_well_plate_300ul/2.json +1216 -0
  33. package/labware/definitions/2/ibidi_96_square_well_plate_300ul_lid/1.json +110 -0
  34. package/labware/definitions/2/nest_12_reservoir_22ml/1.json +232 -0
  35. package/labware/definitions/2/nest_24_wellplate_10.4ml/1.json +386 -0
  36. package/labware/definitions/2/nest_8_reservoir_22ml/1.json +162 -0
  37. package/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/4.json +1166 -0
  38. package/labware/definitions/2/nest_96_wellplate_200ul_flat/4.json +1145 -0
  39. package/labware/definitions/2/nest_96_wellplate_2ml_deep/4.json +1261 -0
  40. package/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/4.json +1174 -0
  41. package/labware/definitions/2/opentrons_flex_96_filtertiprack_1000ul/1.json +5 -0
  42. package/labware/definitions/2/opentrons_flex_96_filtertiprack_200ul/1.json +5 -0
  43. package/labware/definitions/2/opentrons_flex_96_filtertiprack_20ul/1.json +5 -0
  44. package/labware/definitions/2/opentrons_flex_96_filtertiprack_50ul/1.json +5 -0
  45. package/labware/definitions/2/opentrons_flex_96_tiprack_1000ul/1.json +5 -0
  46. package/labware/definitions/2/opentrons_flex_96_tiprack_200ul/1.json +5 -0
  47. package/labware/definitions/2/opentrons_flex_96_tiprack_20ul/1.json +5 -0
  48. package/labware/definitions/2/opentrons_flex_96_tiprack_50ul/1.json +5 -0
  49. package/labware/definitions/2/opentrons_flex_tiprack_lid/1.json +8 -8
  50. package/labware/definitions/2/opentrons_tough_pcr_auto_sealing_lid/1.json +8 -0
  51. package/labware/definitions/2/opentrons_tough_universal_lid/1.json +16 -1
  52. package/labware/definitions/2/smc_384_read_plate/1.json +4701 -0
  53. package/labware/definitions/2/smc_384_read_plate/2.json +5100 -0
  54. package/labware/definitions/2/thermoscientificnunc_96_wellplate_1300ul/3.json +1141 -0
  55. package/labware/definitions/2/thermoscientificnunc_96_wellplate_2000ul/3.json +1141 -0
  56. package/labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/3.json +1243 -0
  57. package/labware/definitions/3/schema3test_96_well_aluminum_block/999.json +5 -2
  58. package/labware/definitions/3/schema3test_96_wellplate_200ul_pcr_full_skirt/999.json +15 -2
  59. package/labware/definitions/3/schema3test_aluminum_flat_bottom_plate/999.json +70 -0
  60. package/labware/definitions/3/schema3test_flex_96_tiprack_200ul/999.json +5 -9
  61. package/labware/definitions/3/schema3test_flex_96_tiprack_adapter/999.json +70 -0
  62. package/labware/definitions/3/schema3test_flex_tiprack_lid/999.json +146 -0
  63. package/labware/definitions/3/schema3test_tough_pcr_auto_sealing_lid/999.json +162 -0
  64. package/labware/definitions/3/schema3test_universal_flat_adapter/999.json +157 -0
  65. package/labware/fixtures/2/fixture_user_volumes_prototype.json +1137 -0
  66. package/labware/fixtures/3/fixture_2_plate.json +5 -2
  67. package/labware/fixtures/3/fixture_corning_24_plate.json +6 -3
  68. package/labware/fixtures/3/index.ts +4 -0
  69. package/labware/schemas/2.json +36 -1
  70. package/labware/schemas/3.json +57 -5
  71. package/lib/command/index.d.ts +39 -1
  72. package/lib/command/schemas/13.json +147 -315
  73. package/lib/command/schemas/14.json +7254 -0
  74. package/lib/command/types/index.d.ts +11 -3
  75. package/lib/command/types/module.d.ts +19 -6
  76. package/lib/command/types/setup.d.ts +5 -5
  77. package/lib/deck/definitions/5/ot2_short_trash.json +37 -0
  78. package/lib/deck/definitions/5/ot2_standard.json +37 -0
  79. package/lib/deck/definitions/5/ot3_standard.json +152 -51
  80. package/lib/deck/schemas/5.json +46 -1
  81. package/lib/index.mjs +240842 -193770
  82. package/lib/js/constants.d.ts +30 -9
  83. package/lib/js/fixtures.d.ts +77 -2
  84. package/lib/js/getLabware.d.ts +3 -3
  85. package/lib/js/helpers/__tests__/getMaxPushOutVolume.test.d.ts +1 -0
  86. package/lib/js/helpers/__tests__/getStackedItemsOnStartingDeck.test.d.ts +1 -0
  87. package/lib/js/helpers/__tests__/labwareSchemaShims.test.d.ts +1 -0
  88. package/lib/js/helpers/__tests__/pairsFromArray.test.d.ts +1 -0
  89. package/lib/js/helpers/__tests__/vectorMath.test.d.ts +1 -0
  90. package/lib/js/helpers/getFixedTrashLabwareDefinition.d.ts +2 -2
  91. package/lib/js/helpers/getLabwareDefURI.d.ts +3 -0
  92. package/lib/js/helpers/getLabwareDefinitionsByURIForProtocol.d.ts +6 -0
  93. package/lib/js/helpers/getLabwareInfoByLiquidId.d.ts +10 -0
  94. package/lib/js/helpers/getLiquidsByIdForLabware.d.ts +2 -0
  95. package/lib/js/helpers/getLoadedLabwareDefinitionsByUri.d.ts +2 -2
  96. package/lib/js/helpers/getMaxPushOutVolume.d.ts +2 -0
  97. package/lib/js/helpers/getStackedItemsOnStartingDeck.d.ts +50 -0
  98. package/lib/js/helpers/getStandardDeckViewLayerBlockList.d.ts +2 -0
  99. package/lib/js/helpers/getTipTypeFromTipRackDefinition.d.ts +2 -2
  100. package/lib/js/helpers/getWellFillFromLabwareId.d.ts +4 -0
  101. package/lib/js/helpers/getWellNamePerMultiTip.d.ts +3 -3
  102. package/lib/js/helpers/getWellTotalVolume.d.ts +2 -2
  103. package/lib/js/helpers/index.d.ts +22 -14
  104. package/lib/js/helpers/labwareInference.d.ts +3 -3
  105. package/lib/js/helpers/liquidClasses.d.ts +4 -2
  106. package/lib/js/helpers/matrixMath.d.ts +3 -0
  107. package/lib/js/helpers/pairsFromArray.d.ts +8 -0
  108. package/lib/js/helpers/parseProtocolCommands.d.ts +4 -4
  109. package/lib/js/helpers/positionMath.d.ts +127 -0
  110. package/lib/js/helpers/validateCustomLabwareHelper.d.ts +2 -2
  111. package/lib/js/helpers/vectorMath.d.ts +14 -0
  112. package/lib/js/helpers/wellSets.d.ts +4 -4
  113. package/lib/js/labware.d.ts +4 -3
  114. package/lib/js/liquidClasses.d.ts +4 -0
  115. package/lib/js/modules.d.ts +1 -1
  116. package/lib/js/types.d.ts +62 -13
  117. package/lib/labware/definitions/2/appliedbiosystemsmicroamp_384_wellplate_40ul/3.json +4737 -0
  118. package/lib/labware/definitions/2/axygen_96_wellplate_500ul/1.json +1036 -0
  119. package/lib/labware/definitions/2/axygen_96_wellplate_500ul/2.json +1159 -0
  120. package/lib/labware/definitions/2/biorad_384_wellplate_50ul/4.json +4748 -0
  121. package/lib/labware/definitions/2/biorad_96_wellplate_200ul_pcr/4.json +1187 -0
  122. package/lib/labware/definitions/2/corning_12_wellplate_6.9ml_flat/4.json +210 -0
  123. package/lib/labware/definitions/2/corning_24_wellplate_3.4ml_flat/4.json +342 -0
  124. package/lib/labware/definitions/2/corning_48_wellplate_1.6ml_flat/5.json +610 -0
  125. package/lib/labware/definitions/2/corning_6_wellplate_16.8ml_flat/4.json +134 -0
  126. package/lib/labware/definitions/2/corning_96_wellplate_360ul_flat/4.json +1177 -0
  127. package/lib/labware/definitions/2/corning_96_wellplate_360ul_lid/1.json +111 -0
  128. package/lib/labware/definitions/2/ev_resin_tips_flex_96_labware/1.json +1 -1
  129. package/lib/labware/definitions/2/ibidi_96_square_well_plate_300ul/1.json +1105 -0
  130. package/lib/labware/definitions/2/ibidi_96_square_well_plate_300ul/2.json +1216 -0
  131. package/lib/labware/definitions/2/ibidi_96_square_well_plate_300ul_lid/1.json +110 -0
  132. package/lib/labware/definitions/2/nest_12_reservoir_22ml/1.json +232 -0
  133. package/lib/labware/definitions/2/nest_24_wellplate_10.4ml/1.json +386 -0
  134. package/lib/labware/definitions/2/nest_8_reservoir_22ml/1.json +162 -0
  135. package/lib/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/4.json +1166 -0
  136. package/lib/labware/definitions/2/nest_96_wellplate_200ul_flat/4.json +1145 -0
  137. package/lib/labware/definitions/2/nest_96_wellplate_2ml_deep/4.json +1261 -0
  138. package/lib/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/4.json +1174 -0
  139. package/lib/labware/definitions/2/opentrons_flex_96_filtertiprack_1000ul/1.json +5 -0
  140. package/lib/labware/definitions/2/opentrons_flex_96_filtertiprack_200ul/1.json +5 -0
  141. package/lib/labware/definitions/2/opentrons_flex_96_filtertiprack_20ul/1.json +5 -0
  142. package/lib/labware/definitions/2/opentrons_flex_96_filtertiprack_50ul/1.json +5 -0
  143. package/lib/labware/definitions/2/opentrons_flex_96_tiprack_1000ul/1.json +5 -0
  144. package/lib/labware/definitions/2/opentrons_flex_96_tiprack_200ul/1.json +5 -0
  145. package/lib/labware/definitions/2/opentrons_flex_96_tiprack_20ul/1.json +5 -0
  146. package/lib/labware/definitions/2/opentrons_flex_96_tiprack_50ul/1.json +5 -0
  147. package/lib/labware/definitions/2/opentrons_flex_tiprack_lid/1.json +8 -8
  148. package/lib/labware/definitions/2/opentrons_tough_pcr_auto_sealing_lid/1.json +8 -0
  149. package/lib/labware/definitions/2/opentrons_tough_universal_lid/1.json +16 -1
  150. package/lib/labware/definitions/2/smc_384_read_plate/1.json +4701 -0
  151. package/lib/labware/definitions/2/smc_384_read_plate/2.json +5100 -0
  152. package/lib/labware/definitions/2/thermoscientificnunc_96_wellplate_1300ul/3.json +1141 -0
  153. package/lib/labware/definitions/2/thermoscientificnunc_96_wellplate_2000ul/3.json +1141 -0
  154. package/lib/labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/3.json +1243 -0
  155. package/lib/labware/definitions/3/schema3test_96_well_aluminum_block/999.json +5 -2
  156. package/lib/labware/definitions/3/schema3test_96_wellplate_200ul_pcr_full_skirt/999.json +15 -2
  157. package/lib/labware/definitions/3/schema3test_aluminum_flat_bottom_plate/999.json +70 -0
  158. package/lib/labware/definitions/3/schema3test_flex_96_tiprack_200ul/999.json +5 -9
  159. package/lib/labware/definitions/3/schema3test_flex_96_tiprack_adapter/999.json +70 -0
  160. package/lib/labware/definitions/3/schema3test_flex_tiprack_lid/999.json +146 -0
  161. package/lib/labware/definitions/3/schema3test_tough_pcr_auto_sealing_lid/999.json +162 -0
  162. package/lib/labware/definitions/3/schema3test_universal_flat_adapter/999.json +157 -0
  163. package/lib/labware/fixtures/2/fixture_user_volumes_prototype.json +1137 -0
  164. package/lib/labware/fixtures/3/fixture_2_plate.json +5 -2
  165. package/lib/labware/fixtures/3/fixture_corning_24_plate.json +6 -3
  166. package/lib/labware/fixtures/3/index.d.ts +3 -0
  167. package/lib/labware/schemas/2.json +36 -1
  168. package/lib/labware/schemas/3.json +57 -5
  169. package/lib/liquid-class/definitions/1/{ethanol_80.json → ethanol_80/1.json} +545 -390
  170. package/lib/liquid-class/definitions/1/{glycerol_50.json → glycerol_50/1.json} +370 -215
  171. package/lib/liquid-class/definitions/1/{water.json → water/1.json} +151 -62
  172. package/lib/liquid-class/fixtures/1/fixture_glycerol50.json +1 -0
  173. package/lib/liquid-class/schemas/1.json +6 -0
  174. package/lib/module/definitions/3/absorbanceReaderV1.json +20 -151
  175. package/lib/module/definitions/3/flexStackerModuleV1.json +29 -389
  176. package/lib/module/definitions/3/heaterShakerModuleV1.json +16 -357
  177. package/lib/module/definitions/3/magneticBlockV1.json +18 -149
  178. package/lib/module/definitions/3/magneticModuleV1.json +16 -399
  179. package/lib/module/definitions/3/magneticModuleV2.json +16 -399
  180. package/lib/module/definitions/3/temperatureModuleV1.json +16 -153
  181. package/lib/module/definitions/3/temperatureModuleV2.json +16 -153
  182. package/lib/module/definitions/3/thermocyclerModuleV1.json +16 -1340
  183. package/lib/module/definitions/3/thermocyclerModuleV2.json +18 -3617
  184. package/lib/module/schemas/3.json +109 -12
  185. package/lib/pipette/definitions/1/pipetteModelSpecs.json +336 -0
  186. package/lib/pipette/definitions/2/general/ninety_six_channel/p200/3_2.json +660 -0
  187. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p200/3_2.json +309 -0
  188. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_1.json +28 -18
  189. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_2.json +192 -0
  190. package/lib/protocol/types/schemaV8/index.d.ts +17 -1
  191. package/liquid-class/definitions/1/{ethanol_80.json → ethanol_80/1.json} +545 -390
  192. package/liquid-class/definitions/1/{glycerol_50.json → glycerol_50/1.json} +370 -215
  193. package/liquid-class/definitions/1/{water.json → water/1.json} +151 -62
  194. package/liquid-class/fixtures/1/fixture_glycerol50.json +1 -0
  195. package/liquid-class/schemas/1.json +6 -0
  196. package/module/definitions/3/absorbanceReaderV1.json +20 -151
  197. package/module/definitions/3/flexStackerModuleV1.json +29 -389
  198. package/module/definitions/3/heaterShakerModuleV1.json +16 -357
  199. package/module/definitions/3/magneticBlockV1.json +18 -149
  200. package/module/definitions/3/magneticModuleV1.json +16 -399
  201. package/module/definitions/3/magneticModuleV2.json +16 -399
  202. package/module/definitions/3/temperatureModuleV1.json +16 -153
  203. package/module/definitions/3/temperatureModuleV2.json +16 -153
  204. package/module/definitions/3/thermocyclerModuleV1.json +16 -1340
  205. package/module/definitions/3/thermocyclerModuleV2.json +18 -3617
  206. package/module/schemas/3.json +109 -12
  207. package/mypy.ini +22 -0
  208. package/package.json +1 -1
  209. package/pipette/definitions/1/pipetteModelSpecs.json +336 -0
  210. package/pipette/definitions/2/general/ninety_six_channel/p200/3_2.json +660 -0
  211. package/pipette/definitions/2/geometry/ninety_six_channel/p200/3_2.json +309 -0
  212. package/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_1.json +28 -18
  213. package/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_2.json +192 -0
  214. package/protocol/types/schemaV8/index.ts +29 -1
  215. package/pyproject.toml +119 -0
  216. package/pytest.ini +8 -0
  217. package/python_tests/__init__.py +1 -0
  218. package/python_tests/command/test_known_schema_ids.py +9 -0
  219. package/python_tests/conftest.py +108 -0
  220. package/python_tests/deck/__init__.py +0 -0
  221. package/python_tests/deck/test_list_names.py +12 -0
  222. package/python_tests/deck/test_position.py +101 -0
  223. package/python_tests/deck/test_typechecks.py +23 -0
  224. package/python_tests/errors/__init__.py +1 -0
  225. package/python_tests/errors/test_error_completeness.py +19 -0
  226. package/python_tests/errors/test_exceptions.py +74 -0
  227. package/python_tests/gripper/__init__.py +0 -0
  228. package/python_tests/gripper/test_definition.py +30 -0
  229. package/python_tests/gripper/test_load.py +19 -0
  230. package/python_tests/labware/__init__.py +13 -0
  231. package/python_tests/labware/test_typechecks.py +80 -0
  232. package/python_tests/liquid_classes/__init__.py +0 -0
  233. package/python_tests/liquid_classes/test_liquid_class_values.py +59 -0
  234. package/python_tests/liquid_classes/test_load.py +45 -0
  235. package/python_tests/liquid_classes/test_validations.py +192 -0
  236. package/python_tests/module/__init__.py +20 -0
  237. package/python_tests/module/test_load.py +49 -0
  238. package/python_tests/module/test_typechecks.py +26 -0
  239. package/python_tests/pipette/__init__.py +0 -0
  240. package/python_tests/pipette/test_load_data.py +109 -0
  241. package/python_tests/pipette/test_max_flow_rates_per_volume.py +112 -0
  242. package/python_tests/pipette/test_mutable_configurations.py +467 -0
  243. package/python_tests/pipette/test_pipette_definition.py +183 -0
  244. package/python_tests/pipette/test_pipette_load_name_conversions.py +244 -0
  245. package/python_tests/pipette/test_typechecks.py +47 -0
  246. package/python_tests/pipette/test_validate_schema.py +198 -0
  247. package/python_tests/protocol/__init__.py +7 -0
  248. package/python_tests/protocol/test_protocol_schema_v6.py +108 -0
  249. package/python_tests/protocol/test_protocol_schema_v7.py +35 -0
  250. package/python_tests/protocol/test_protocol_schema_v8.py +17 -0
  251. package/python_tests/protocol/test_typechecks.py +30 -0
  252. package/python_tests/robot/__init__.py +0 -0
  253. package/python_tests/robot/test_typechecks.py +13 -0
  254. package/lib/js/cypressUtils.d.ts +0 -1
  255. package/lib/js/helpers/getVectorDifference.d.ts +0 -2
  256. package/lib/js/helpers/getVectorSum.d.ts +0 -2
  257. /package/lib/js/{helpers/__tests__/getVectorDifference.test.d.ts → __tests__/fixtures.test.d.ts} +0 -0
  258. /package/lib/js/helpers/__tests__/{getVectorSum.test.d.ts → getLabwareInfoByLiquidId.test.d.ts} +0 -0
@@ -0,0 +1,127 @@
1
+ /** Compute positions of labware stacked upon other labware, modules, deck slots, etc. */
2
+ import type { AddressableArea, DeckDefinition, LabwareDefinition, LabwareDefinition2, ModuleDefinition, Vector3D } from '../types';
3
+ /** Return dimensions of the total labware bounding box in the style of labware schema 2. */
4
+ export declare function getSchema2Dimensions(definition: LabwareDefinition): LabwareDefinition2['dimensions'];
5
+ /**
6
+ * Return a bounding box, in coordinates relative to the labware's origin,
7
+ * that encloses the labware when viewed from the top down.
8
+ */
9
+ export declare function getLabwareViewBox(definition: LabwareDefinition): {
10
+ /** The minimum x-coord, i.e. the left of the labware. */
11
+ minX: number;
12
+ /** The minimum y-coord, i.e. the front of the labware. */
13
+ minY: number;
14
+ /** The maximum x-coord, i.e. the right of the labware. */
15
+ maxX: number;
16
+ /** The maximum y-coord, i.e. the back of the labware. */
17
+ maxY: number;
18
+ /** The distance between left and right. */
19
+ xDimension: number;
20
+ /** The distance between front and back. */
21
+ yDimension: number;
22
+ };
23
+ /** Logically specifies where a labware is located. */
24
+ export interface ComputeLabwareOriginInput {
25
+ /** The underlying deck. */
26
+ deckDefinition: DeckDefinition;
27
+ /**
28
+ * The underlying slot. If this is a Flex and the labware is on a module, this should
29
+ * be the slot that the module replaces.
30
+ */
31
+ slotId: string;
32
+ /**
33
+ * The definition of the module underneath the labware, if there is one.
34
+ * This should be specified even if it's only transitively underneath the labware,
35
+ * like slot -> module -> adapter -> labware in question.
36
+ */
37
+ moduleDefinition: ModuleDefinition | null;
38
+ /** The labware and all the labware underneath it. */
39
+ labwareDefinitionsBottomToTop: LabwareDefinition[];
40
+ }
41
+ /**
42
+ * Computes the absolute deck coordinates of a labware.
43
+ * Returns null if there was some internal error.
44
+ */
45
+ export declare function computeLabwareOrigin(input: ComputeLabwareOriginInput): Vector3D | null;
46
+ /**
47
+ * Return the offset from a deck slot's origin (the slot's front-left, -x, -y)
48
+ * to a labware's origin (varies depending on the labware),
49
+ * supposing the labware is placed in that slot.
50
+ */
51
+ export declare function getDeckSlotOriginToLabwareOrigin(slotDefinition: AddressableArea, labwareDefinition: LabwareDefinition): Vector3D;
52
+ /**
53
+ * Given a stackup like:
54
+ *
55
+ * deck slot --> module --> labware
56
+ *
57
+ * This computes the offset from the deck slot's origin (its front-left / -x,-y corner)
58
+ * to the labware's origin (varies depending on the labware).
59
+ *
60
+ * This is currently how it works even for Flex modules, even though they are not really
61
+ * "in a slot." The slot in this case is the slot that the module replaces.
62
+ *
63
+ * The API is like this for transitional reasons. Ideally, we would have one function
64
+ * to go slot->module and a second function to go module->labware.
65
+ */
66
+ export declare function getModuleParentOriginToLabwareOrigin(deckId: string, slotId: string | null, moduleDefinition: ModuleDefinition, labwareDefinition: LabwareDefinition): Vector3D;
67
+ /**
68
+ * Given a labware -> labware stackup, compute the offset from the parent (bottom)
69
+ * labware's origin to the child (top) labware's origin.
70
+ */
71
+ export declare function getLabwareOriginToLabwareOrigin(parentDefinition: LabwareDefinition, childDefinition: LabwareDefinition): Vector3D;
72
+ /**
73
+ * Given a module, computes the offset from the origin (front-left, -x,-y corner) of the
74
+ * deck slot that the module is in, to the origin (again, front-left, -x,-y corner) of
75
+ * the slot atop that module.
76
+ *
77
+ * On a Flex, modules are not really "in deck slots". There, "the deck slot that the
78
+ * module is in" means "the deck slot that the module replaces."
79
+ *
80
+ * @deprecated We are trying to move away from the idea that modules always have slots
81
+ * atop them and that things should be positioned relative to those slots' -x,-y
82
+ * corners. That idea is especially untrue for things like the Thermocycler and
83
+ * Heater-Shaker. You probably want `getModuleParentOriginToLabwareOrigin()` instead,
84
+ * which is higher-level and can model different ways that a labware can mate with a
85
+ * module. This is exported to support things like UI controls that want to cover
86
+ * a module's "labware area" and whose implementations assume the traditional
87
+ * slot -x,-y corner idea.
88
+ */
89
+ export declare function getModuleParentOriginToChildSlotOrigin(deckId: string, slotId: string | null, moduleDefinition: ModuleDefinition): Vector3D;
90
+ /**
91
+ * Return the offset from a labware's back-left-bottom (-x, +y, -z) corner to its origin.
92
+ *
93
+ * This is a lower-level helper for the rare cases where we want to position a labware
94
+ * specifically by its back-left corner. Typically, you'll want something higher-level,
95
+ * like `getLabwareViewBox()` or `getDeckSlotOriginToLabwareOrigin()`, instead.
96
+ */
97
+ export declare function getLabwareBackLeftBottomToOrigin(definition: LabwareDefinition): Vector3D;
98
+ /**
99
+ * Return a definition's cornerOffsetFromSlot in the style of labware schema 2.
100
+ *
101
+ * @deprecated This is probably an inherently wrong interface to attempt, for a couple
102
+ * reasons.
103
+ *
104
+ * FIRST, depending on what the call site does with this, it might expect the return
105
+ * value to be either:
106
+ *
107
+ * - The vector from the (-x, -y) corner of the parent slot to the (-x, -y) corner of
108
+ * the labware
109
+ * - The vector from the (-x, -y) corner of the parent slot to the origin of the
110
+ * labware
111
+ *
112
+ * In labware schema 2, these were the same thing, but not in schema 3.
113
+ *
114
+ * SECOND, in labware schema 2, how a child labware sits on its parent is almost
115
+ * entirely a function of the child's definition. In labware schema 3, it is
116
+ * much more dependent on information only available in the parent. For example, to
117
+ * line up a child's well A1 with a parent's well A1, we need to know where the
118
+ * parent's well A1 is. (Schema 2 just did not attempt to support that).
119
+ *
120
+ * For schema-2 definitions, this will return cornerOffsetFromSlot as-is.
121
+ *
122
+ * For schema-3 definitions, this currently returns the placeholder (12, 34, 56), which
123
+ * is certainly wrong and will cause all manner of visual mayhem, but at least it's
124
+ * wrong in an obvious way and it unblocks importing schema-3 definitions. Solving this
125
+ * properly is call-site-dependent, as described above.
126
+ */
127
+ export declare function getSchema2CornerOffsetFromSlot(definition: LabwareDefinition): LabwareDefinition2['cornerOffsetFromSlot'];
@@ -1,4 +1,4 @@
1
- import type { LabwareDefinition2 } from '..';
1
+ import type { LabwareDefinition } from '..';
2
2
  /**
3
3
  * This function is used to help validate that the wells and ordering matches in
4
4
  * a custom labware definition in terms of the wellName and the wells length
@@ -6,4 +6,4 @@ import type { LabwareDefinition2 } from '..';
6
6
  * @param definition - a labware definition
7
7
  * @returns A boolean for if they exist
8
8
  */
9
- export declare const validateCustomLabwareHelper: (definition?: LabwareDefinition2 | null) => boolean;
9
+ export declare const validateCustomLabwareHelper: (definition?: LabwareDefinition | null) => boolean;
@@ -0,0 +1,14 @@
1
+ import type { CoordinateTuple, Vector3D } from '../types';
2
+ export declare const IDENTITY_VECTOR: Vector3D;
3
+ /**
4
+ * Add an arbitrary number of vectors.
5
+ * e.g. `getVectorSum(a, b, c)` is a + b + c.
6
+ */
7
+ export declare function getVectorSum(first: Vector3D, ...rest: Vector3D[]): Vector3D;
8
+ /**
9
+ * Subtract an arbitrary number of vectors.
10
+ * e.g. `getVectorDifference(a, b, c)` is a - b - c.
11
+ */
12
+ export declare function getVectorDifference(first: Vector3D, ...rest: Vector3D[]): Vector3D;
13
+ export declare function getVectorInverse(vector: Vector3D): Vector3D;
14
+ export declare function coordinateTupleToVector3D(coordinateTuple: CoordinateTuple): Vector3D;
@@ -1,17 +1,17 @@
1
- import type { LabwareDefinition2, NozzleLayoutConfig, PipetteV2Specs } from '../types';
1
+ import type { LabwareDefinition, NozzleLayoutConfig, PipetteV2Specs } from '../types';
2
2
  type WellSetByPrimaryWell = string[][];
3
3
  export interface NozzleLayoutDetails {
4
4
  nozzleConfig: NozzleLayoutConfig;
5
5
  activeNozzleCount: number;
6
6
  }
7
7
  export interface WellSetForMultiChannelParams {
8
- labwareDef: LabwareDefinition2;
8
+ labwareDef: LabwareDefinition;
9
9
  wellName: string;
10
10
  channels: 8 | 96;
11
11
  pipetteNozzleDetails?: NozzleLayoutDetails;
12
12
  }
13
13
  export interface WellSetHelpers {
14
- getAllWellSetsForLabware: (labwareDef: LabwareDefinition2) => WellSetByPrimaryWell;
14
+ getAllWellSetsForLabware: (labwareDef: LabwareDefinition) => WellSetByPrimaryWell;
15
15
  /** Given a well for a labware, returns the well set it belongs to (or null)
16
16
  * for 8-channel and 96-channel access.
17
17
  * Ex: C2 for 96-flat => ['A2', 'B2', 'C2', ... 'H2']
@@ -21,7 +21,7 @@ export interface WellSetHelpers {
21
21
  * nozzle configuration.
22
22
  **/
23
23
  getWellSetForMultichannel: (params: WellSetForMultiChannelParams) => string[] | null | undefined;
24
- canPipetteUseLabware: (pipetteSpec: PipetteV2Specs, labwareDef?: LabwareDefinition2, trashName?: string) => boolean;
24
+ canPipetteUseLabware: (pipetteSpec: PipetteV2Specs, labwareDef?: LabwareDefinition, trashName?: string) => boolean;
25
25
  }
26
26
  export declare const makeWellSetHelpers: () => WellSetHelpers;
27
27
  export {};
@@ -9,11 +9,12 @@ import fixtureTiprack10ul from '../labware/fixtures/2/fixture_tiprack_10_ul.json
9
9
  import fixtureTiprack300ul from '../labware/fixtures/2/fixture_tiprack_300_ul.json';
10
10
  import fixtureTrash from '../labware/fixtures/2/fixture_trash.json';
11
11
  import labwareSchemaV2 from '../labware/schemas/2.json';
12
- import type { LabwareDefByDefURI, LabwareDefinition2, LegacyLabwareDefByName } from './types';
12
+ import labwareSchemaV3 from '../labware/schemas/3.json';
13
+ import type { LabwareDef2ByDefURI, LabwareDefinition2, LegacyLabwareDefByName } from './types';
13
14
  export declare const getAllLabwareDefs: () => Record<string, LabwareDefinition2>;
14
- export declare function getAllDefinitions(blockList?: string[]): LabwareDefByDefURI;
15
+ export declare function getAllDefinitions(blockList?: string[]): LabwareDef2ByDefURI;
15
16
  export declare function getAllLegacyDefinitions(): LegacyLabwareDefByName;
16
- export { labwareSchemaV2, fixture96Plate, fixture12Trough, fixture24Tuberack, fixtureTiprack10ul, fixtureTiprack300ul, fixtureTiprack1000ul, fixtureTiprackAdapter, fixtureTrash, fixture384Plate, fixtureCalibrationBlock, };
17
+ export { labwareSchemaV2, labwareSchemaV3, fixture96Plate, fixture12Trough, fixture24Tuberack, fixtureTiprack10ul, fixtureTiprack300ul, fixtureTiprack1000ul, fixtureTiprackAdapter, fixtureTrash, fixture384Plate, fixtureCalibrationBlock, };
17
18
  export declare const opentrons96PcrAdapterV1: LabwareDefinition2;
18
19
  export declare const opentrons1Trash3200MlFixedV1: LabwareDefinition2;
19
20
  export declare const opentrons96Tiprack10UlV1Uncasted: LabwareDefinition2;
@@ -1,2 +1,6 @@
1
1
  import type { LiquidClass } from '.';
2
+ export declare const WATER_LIQUID_CLASS_NAME = "waterV1";
3
+ export declare const NONE_LIQUID_CLASS_NAME = "none";
4
+ export declare const GLYCEROL_LIQUID_CLASS_NAME = "glycerol50V1";
5
+ export declare const ETHANOL_LIQUID_CLASS_NAME = "ethanol80V1";
2
6
  export declare const getAllLiquidClassDefs: () => Record<string, LiquidClass>;
@@ -1,5 +1,5 @@
1
1
  import type { ModuleDefinition, ModuleModel, ModuleModelWithLegacy, ModuleType } from './types';
2
- export declare const getModuleDef2: (moduleModel: ModuleModel) => ModuleDefinition;
2
+ export declare const getModuleDef: (moduleModel: ModuleModel) => ModuleDefinition;
3
3
  export declare function normalizeModuleModel(legacyModule: ModuleModelWithLegacy): ModuleModel;
4
4
  export declare function getModuleType(moduleModel: ModuleModel): ModuleType;
5
5
  export declare function getModuleDisplayName(moduleModel: ModuleModel): string;
package/lib/js/types.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { LoadedLabwareLocation, RunTimeCommand } from '../command/types';
2
2
  import type { CommandAnnotation } from '../commandAnnotation/types';
3
3
  import type { AddressableAreaName, CutoutFixtureId, CutoutId } from '../deck';
4
- import type { ABSORBANCE_READER_TYPE, ABSORBANCE_READER_V1, EXTENSION, FLEX, FLEX_STACKER_MODULE_TYPE, FLEX_STACKER_MODULE_V1, GEN1, GEN2, GRIPPER_V1, GRIPPER_V1_1, GRIPPER_V1_2, GRIPPER_V1_3, HEATERSHAKER_MODULE_TYPE, HEATERSHAKER_MODULE_V1, LEFT, MAGDECK, MAGNETIC_BLOCK_TYPE, MAGNETIC_BLOCK_V1, MAGNETIC_MODULE_TYPE, MAGNETIC_MODULE_V1, MAGNETIC_MODULE_V2, POSITION_REFERENCE_BOTTOM, POSITION_REFERENCE_CENTER, POSITION_REFERENCE_LIQUID_MENISCUS, POSITION_REFERENCE_TOP, RIGHT, TEMPDECK, TEMPERATURE_MODULE_TYPE, TEMPERATURE_MODULE_V1, TEMPERATURE_MODULE_V2, THERMOCYCLER, THERMOCYCLER_MODULE_TYPE, THERMOCYCLER_MODULE_V1, THERMOCYCLER_MODULE_V2 } from './constants';
4
+ import type { ABSORBANCE_READER_TYPE, ABSORBANCE_READER_V1, AddressableAreaNamesWithFakes, AddressableAreaWithFakes, AreaTypeWithFakes, CutoutFixtureIdsWithFakes, EXTENSION, FLEX, FLEX_STACKER_MODULE_TYPE, FLEX_STACKER_MODULE_V1, GEN1, GEN2, GRIPPER_V1, GRIPPER_V1_1, GRIPPER_V1_2, GRIPPER_V1_3, HEATERSHAKER_MODULE_TYPE, HEATERSHAKER_MODULE_V1, LEFT, MAGDECK, MAGNETIC_BLOCK_TYPE, MAGNETIC_BLOCK_V1, MAGNETIC_MODULE_TYPE, MAGNETIC_MODULE_V1, MAGNETIC_MODULE_V2, POSITION_REFERENCE_BOTTOM, POSITION_REFERENCE_CENTER, POSITION_REFERENCE_LIQUID_MENISCUS, POSITION_REFERENCE_TOP, RIGHT, TEMPDECK, TEMPERATURE_MODULE_TYPE, TEMPERATURE_MODULE_V1, TEMPERATURE_MODULE_V2, THERMOCYCLER, THERMOCYCLER_MODULE_TYPE, THERMOCYCLER_MODULE_V1, THERMOCYCLER_MODULE_V2 } from './constants';
5
5
  import type { PipetteName } from './pipettes';
6
6
  export type RobotType = 'OT-2 Standard' | 'OT-3 Standard';
7
7
  export interface RobotDefinition {
@@ -137,9 +137,16 @@ export interface RoundedCuboidSegment {
137
137
  bottomHeight: number;
138
138
  }
139
139
  export type WellSegment = CuboidalFrustum | ConicalFrustum | SquaredConeSegment | SphericalSegment | RoundedCuboidSegment;
140
+ export interface HeightVolumePair {
141
+ height: number;
142
+ volume: number;
143
+ }
140
144
  export interface InnerWellGeometry {
141
145
  sections: WellSegment[];
142
146
  }
147
+ export interface UserDefinedVolumes {
148
+ heightToVolumeMap: HeightVolumePair[];
149
+ }
143
150
  export type LabwareWellMap = Record<string, LabwareWell>;
144
151
  export interface LabwareWellGroupMetadata {
145
152
  displayName?: string;
@@ -161,7 +168,20 @@ export interface AxisAlignedBoundingBox3D {
161
168
  }
162
169
  export interface Extents {
163
170
  total: AxisAlignedBoundingBox3D;
164
- footprint: AxisAlignedBoundingBox2D;
171
+ }
172
+ export interface SlotFootprintAsChildFeature {
173
+ z: number;
174
+ backLeft: Vector2D;
175
+ frontRight: Vector2D;
176
+ }
177
+ export interface SlotFootprintAsParentFeature {
178
+ z: number;
179
+ backLeft: Vector2D;
180
+ frontRight: Vector2D;
181
+ }
182
+ export interface LocatingFeatures {
183
+ slotFootprintAsChild?: SlotFootprintAsChildFeature;
184
+ slotFootprintAsParent?: SlotFootprintAsParentFeature;
165
185
  }
166
186
  export type LabwareRoles = 'labware' | 'adapter' | 'fixture' | 'maintenance' | 'lid' | 'system';
167
187
  export interface LabwareDefinition2 {
@@ -181,7 +201,7 @@ export interface LabwareDefinition2 {
181
201
  stackingOffsetWithModule?: Record<string, LabwareOffset>;
182
202
  stackLimit?: number;
183
203
  compatibleParentLabware?: string[];
184
- innerLabwareGeometry?: Record<string, InnerWellGeometry> | null;
204
+ innerLabwareGeometry?: Record<string, InnerWellGeometry | UserDefinedVolumes> | null;
185
205
  }
186
206
  export interface LabwareDefinition3 {
187
207
  version: number;
@@ -190,6 +210,7 @@ export interface LabwareDefinition3 {
190
210
  namespace: string;
191
211
  metadata: LabwareMetadata;
192
212
  extents: Extents;
213
+ features: LocatingFeatures;
193
214
  parameters: LabwareParameters;
194
215
  brand: LabwareBrand;
195
216
  ordering: string[][];
@@ -202,7 +223,8 @@ export interface LabwareDefinition3 {
202
223
  compatibleParentLabware?: string[];
203
224
  innerLabwareGeometry?: Record<string, InnerWellGeometry> | null;
204
225
  }
205
- export interface LabwareDefByDefURI {
226
+ export type LabwareDefinition = LabwareDefinition2 | LabwareDefinition3;
227
+ export interface LabwareDef2ByDefURI {
206
228
  [defUri: string]: LabwareDefinition2;
207
229
  }
208
230
  export interface LegacyLabwareDefByName {
@@ -244,10 +266,11 @@ export interface DeckCalibrationPoint {
244
266
  position: CoordinateTuple;
245
267
  displayName: string;
246
268
  }
269
+ export type CutoutIdToCutoutFixtureId = {
270
+ [cutoutId in CutoutId]?: CutoutFixtureId;
271
+ };
247
272
  export type CutoutFixtureGroup = {
248
- [cutoutId in CutoutId]?: Array<{
249
- [cutoutId in CutoutId]?: CutoutFixtureId;
250
- }>;
273
+ [cutoutId in CutoutId]?: CutoutIdToCutoutFixtureId[];
251
274
  };
252
275
  export interface CutoutFixture {
253
276
  id: CutoutFixtureId;
@@ -258,7 +281,12 @@ export interface CutoutFixture {
258
281
  fixtureGroup: CutoutFixtureGroup;
259
282
  height: number;
260
283
  }
261
- type AreaType = 'slot' | 'movableTrash' | 'wasteChute' | 'fixedTrash' | 'stagingSlot' | 'lidDock';
284
+ export interface FakeCutoutFixture extends Omit<CutoutFixture, 'id' | 'providesAddressableAreas'> {
285
+ id: CutoutFixtureIdsWithFakes;
286
+ providesAddressableAreas: Record<CutoutId, AddressableAreaNamesWithFakes[] | AddressableAreaName[]>;
287
+ }
288
+ export type CutoutFixtureWithFakes = FakeCutoutFixture | CutoutFixture;
289
+ export type AreaType = 'slot' | 'movableTrash' | 'wasteChute' | 'fixedTrash' | 'stagingSlot' | 'lidDock' | 'thermocycler' | 'heaterShaker' | 'temperatureModule' | 'magneticBlock' | 'absorbanceReader' | 'flexStacker';
262
290
  export interface AddressableArea {
263
291
  id: AddressableAreaName;
264
292
  areaType: AreaType;
@@ -270,6 +298,10 @@ export interface AddressableArea {
270
298
  ableToDropTips?: boolean;
271
299
  matingSurfaceUnitVector?: UnitVectorTuple;
272
300
  }
301
+ export interface FakeAddressableArea extends Omit<AddressableArea, 'id' | 'areaType'> {
302
+ id: AddressableAreaNamesWithFakes;
303
+ areaType: AreaTypeWithFakes;
304
+ }
273
305
  export interface DeckMetadata {
274
306
  displayName: string;
275
307
  tags: string[];
@@ -291,6 +323,9 @@ export interface DeckLocations {
291
323
  cutouts: DeckCutout[];
292
324
  legacyFixtures: LegacyFixture[];
293
325
  }
326
+ export interface DeckLocationsWithFakes extends Omit<DeckLocations, 'addressableAreas' | 'calibrationPoints' | 'legacyFixtures'> {
327
+ addressableAreas: AddressableAreaWithFakes[];
328
+ }
294
329
  export interface DeckDefinition {
295
330
  otId: string;
296
331
  cornerOffsetFromOrigin: CoordinateTuple;
@@ -300,6 +335,10 @@ export interface DeckDefinition {
300
335
  metadata: DeckMetadata;
301
336
  cutoutFixtures: CutoutFixture[];
302
337
  }
338
+ export interface DeckDefinitionWithFakes extends Omit<DeckDefinition, 'locations' | 'cutoutFixtures' | 'otId' | 'cornerOffsetFromOrigin' | 'dimensions' | 'metadata' | 'robot'> {
339
+ locations: DeckLocationsWithFakes;
340
+ cutoutFixtures: CutoutFixtureWithFakes[];
341
+ }
303
342
  export interface ModuleDimensions {
304
343
  bareOverallHeight: number;
305
344
  overLabwareHeight: number;
@@ -331,12 +370,17 @@ export interface ModuleDefinition {
331
370
  quirks: string[];
332
371
  slotTransforms: SlotTransforms;
333
372
  compatibleWith: ModuleModel[];
334
- twoDimensionalRendering: any;
335
373
  }
336
- export type AffineTransformMatrix = number[][];
374
+ type AffineTransformRow = [number, number, number, number];
375
+ export type AffineTransformMatrix = [
376
+ AffineTransformRow,
377
+ AffineTransformRow,
378
+ AffineTransformRow,
379
+ AffineTransformRow
380
+ ];
337
381
  export interface SlotTransforms {
338
- [deckOtId: string]: {
339
- [slotId: string]: {
382
+ [deckOtId: string]: undefined | {
383
+ [slotId: string]: undefined | {
340
384
  [transformKey in keyof ModuleDefinition]?: AffineTransformMatrix;
341
385
  };
342
386
  };
@@ -636,7 +680,7 @@ export interface ByTipTypeSetting {
636
680
  singleDispense: SingleDispenseProperties;
637
681
  multiDispense?: MultiDispenseProperties;
638
682
  }
639
- interface ByPipetteSetting {
683
+ export interface ByPipetteSetting {
640
684
  pipetteModel: string;
641
685
  byTipType: ByTipTypeSetting[];
642
686
  }
@@ -796,5 +840,10 @@ export interface CutoutConfig {
796
840
  opentronsModuleSerialNumber?: string;
797
841
  }
798
842
  export type DeckConfiguration = CutoutConfig[];
843
+ type CutoutConfigWithoutCutoutFixtureId = Omit<CutoutConfig, 'cutoutFixtureId'>;
844
+ export interface CutoutConfigMap extends CutoutConfigWithoutCutoutFixtureId {
845
+ addressableAreaId: AddressableAreaNamesWithFakes;
846
+ cutoutFixtureId: CutoutFixtureIdsWithFakes;
847
+ }
799
848
  export type NozzleLayoutConfig = 'single' | 'column' | 'row' | 'full' | 'subrect';
800
849
  export {};