@opentrons/shared-data 0.1.7-alpha.1 → 0.2.1-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 (769) 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 +51 -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/3/fixture_2_plate.json +5 -2
  66. package/labware/fixtures/3/fixture_corning_24_plate.json +6 -3
  67. package/labware/fixtures/3/index.ts +4 -0
  68. package/labware/schemas/3.json +57 -5
  69. package/lib/command/index.d.ts +39 -1
  70. package/lib/command/types/index.d.ts +11 -3
  71. package/lib/command/types/module.d.ts +19 -6
  72. package/lib/command/types/setup.d.ts +5 -5
  73. package/lib/index.mjs +240800 -193784
  74. package/lib/js/constants.d.ts +28 -9
  75. package/lib/js/fixtures.d.ts +77 -2
  76. package/lib/js/getLabware.d.ts +3 -3
  77. package/lib/js/helpers/__tests__/getMaxPushOutVolume.test.d.ts +1 -0
  78. package/lib/js/helpers/__tests__/getStackedItemsOnStartingDeck.test.d.ts +1 -0
  79. package/lib/js/helpers/__tests__/labwareSchemaShims.test.d.ts +1 -0
  80. package/lib/js/helpers/__tests__/pairsFromArray.test.d.ts +1 -0
  81. package/lib/js/helpers/__tests__/vectorMath.test.d.ts +1 -0
  82. package/lib/js/helpers/getFixedTrashLabwareDefinition.d.ts +2 -2
  83. package/lib/js/helpers/getLabwareDefURI.d.ts +3 -0
  84. package/lib/js/helpers/getLabwareDefinitionsByURIForProtocol.d.ts +6 -0
  85. package/lib/js/helpers/getLabwareInfoByLiquidId.d.ts +10 -0
  86. package/lib/js/helpers/getLiquidsByIdForLabware.d.ts +2 -0
  87. package/lib/js/helpers/getLoadedLabwareDefinitionsByUri.d.ts +2 -2
  88. package/lib/js/helpers/getMaxPushOutVolume.d.ts +2 -0
  89. package/lib/js/helpers/getStackedItemsOnStartingDeck.d.ts +50 -0
  90. package/lib/js/helpers/getStandardDeckViewLayerBlockList.d.ts +2 -0
  91. package/lib/js/helpers/getTipTypeFromTipRackDefinition.d.ts +2 -2
  92. package/lib/js/helpers/getWellFillFromLabwareId.d.ts +4 -0
  93. package/lib/js/helpers/getWellNamePerMultiTip.d.ts +3 -3
  94. package/lib/js/helpers/getWellTotalVolume.d.ts +2 -2
  95. package/lib/js/helpers/index.d.ts +22 -14
  96. package/lib/js/helpers/labwareInference.d.ts +3 -3
  97. package/lib/js/helpers/liquidClasses.d.ts +4 -2
  98. package/lib/js/helpers/matrixMath.d.ts +3 -0
  99. package/lib/js/helpers/pairsFromArray.d.ts +8 -0
  100. package/lib/js/helpers/parseProtocolCommands.d.ts +4 -4
  101. package/lib/js/helpers/positionMath.d.ts +121 -0
  102. package/lib/js/helpers/validateCustomLabwareHelper.d.ts +2 -2
  103. package/lib/js/helpers/vectorMath.d.ts +14 -0
  104. package/lib/js/helpers/wellSets.d.ts +4 -4
  105. package/lib/js/labware.d.ts +4 -3
  106. package/lib/js/liquidClasses.d.ts +4 -0
  107. package/lib/js/modules.d.ts +1 -1
  108. package/lib/js/types.d.ts +54 -12
  109. package/lib/labware/fixtures/3/index.d.ts +3 -0
  110. package/lib/protocol/types/schemaV8/index.d.ts +17 -1
  111. package/liquid-class/definitions/1/{ethanol_80.json → ethanol_80/1.json} +545 -390
  112. package/liquid-class/definitions/1/{glycerol_50.json → glycerol_50/1.json} +370 -215
  113. package/liquid-class/definitions/1/{water.json → water/1.json} +151 -62
  114. package/liquid-class/fixtures/1/fixture_glycerol50.json +1 -0
  115. package/liquid-class/schemas/1.json +6 -0
  116. package/module/definitions/3/absorbanceReaderV1.json +20 -151
  117. package/module/definitions/3/flexStackerModuleV1.json +29 -389
  118. package/module/definitions/3/heaterShakerModuleV1.json +16 -357
  119. package/module/definitions/3/magneticBlockV1.json +18 -149
  120. package/module/definitions/3/magneticModuleV1.json +16 -399
  121. package/module/definitions/3/magneticModuleV2.json +16 -399
  122. package/module/definitions/3/temperatureModuleV1.json +16 -153
  123. package/module/definitions/3/temperatureModuleV2.json +16 -153
  124. package/module/definitions/3/thermocyclerModuleV1.json +16 -1340
  125. package/module/definitions/3/thermocyclerModuleV2.json +18 -3617
  126. package/module/schemas/3.json +109 -12
  127. package/mypy.ini +22 -0
  128. package/package.json +1 -1
  129. package/pipette/definitions/1/pipetteModelSpecs.json +336 -0
  130. package/pipette/definitions/2/general/ninety_six_channel/p200/3_2.json +660 -0
  131. package/pipette/definitions/2/geometry/ninety_six_channel/p200/3_2.json +309 -0
  132. package/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_1.json +28 -18
  133. package/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_2.json +192 -0
  134. package/protocol/types/schemaV8/index.ts +29 -1
  135. package/pyproject.toml +119 -0
  136. package/pytest.ini +8 -0
  137. package/python_tests/__init__.py +1 -0
  138. package/python_tests/command/test_known_schema_ids.py +9 -0
  139. package/python_tests/conftest.py +108 -0
  140. package/python_tests/deck/__init__.py +0 -0
  141. package/python_tests/deck/test_list_names.py +12 -0
  142. package/python_tests/deck/test_position.py +101 -0
  143. package/python_tests/deck/test_typechecks.py +23 -0
  144. package/python_tests/errors/__init__.py +1 -0
  145. package/python_tests/errors/test_error_completeness.py +19 -0
  146. package/python_tests/errors/test_exceptions.py +74 -0
  147. package/python_tests/gripper/__init__.py +0 -0
  148. package/python_tests/gripper/test_definition.py +30 -0
  149. package/python_tests/gripper/test_load.py +19 -0
  150. package/python_tests/labware/__init__.py +13 -0
  151. package/python_tests/labware/test_typechecks.py +80 -0
  152. package/python_tests/liquid_classes/__init__.py +0 -0
  153. package/python_tests/liquid_classes/test_liquid_class_values.py +59 -0
  154. package/python_tests/liquid_classes/test_load.py +45 -0
  155. package/python_tests/liquid_classes/test_validations.py +192 -0
  156. package/python_tests/module/__init__.py +20 -0
  157. package/python_tests/module/test_load.py +49 -0
  158. package/python_tests/module/test_typechecks.py +26 -0
  159. package/python_tests/pipette/__init__.py +0 -0
  160. package/python_tests/pipette/test_load_data.py +109 -0
  161. package/python_tests/pipette/test_max_flow_rates_per_volume.py +112 -0
  162. package/python_tests/pipette/test_mutable_configurations.py +467 -0
  163. package/python_tests/pipette/test_pipette_definition.py +183 -0
  164. package/python_tests/pipette/test_pipette_load_name_conversions.py +244 -0
  165. package/python_tests/pipette/test_typechecks.py +47 -0
  166. package/python_tests/pipette/test_validate_schema.py +198 -0
  167. package/python_tests/protocol/__init__.py +7 -0
  168. package/python_tests/protocol/test_protocol_schema_v6.py +108 -0
  169. package/python_tests/protocol/test_protocol_schema_v7.py +35 -0
  170. package/python_tests/protocol/test_protocol_schema_v8.py +17 -0
  171. package/python_tests/protocol/test_typechecks.py +30 -0
  172. package/python_tests/robot/__init__.py +0 -0
  173. package/python_tests/robot/test_typechecks.py +13 -0
  174. package/lib/command/schemas/10.json +0 -4880
  175. package/lib/command/schemas/11.json +0 -6267
  176. package/lib/command/schemas/12.json +0 -7117
  177. package/lib/command/schemas/13.json +0 -7207
  178. package/lib/command/schemas/7.json +0 -3302
  179. package/lib/command/schemas/8.json +0 -4321
  180. package/lib/command/schemas/9.json +0 -4430
  181. package/lib/commandAnnotation/schemas/1.json +0 -74
  182. package/lib/deck/definitions/3/ot2_short_trash.json +0 -477
  183. package/lib/deck/definitions/3/ot2_standard.json +0 -477
  184. package/lib/deck/definitions/3/ot3_standard.json +0 -989
  185. package/lib/deck/definitions/4/ot2_short_trash.json +0 -405
  186. package/lib/deck/definitions/4/ot2_standard.json +0 -410
  187. package/lib/deck/definitions/4/ot3_standard.json +0 -608
  188. package/lib/deck/definitions/5/ot2_short_trash.json +0 -409
  189. package/lib/deck/definitions/5/ot2_standard.json +0 -409
  190. package/lib/deck/definitions/5/ot3_standard.json +0 -1249
  191. package/lib/deck/fixtures/3/deckExample.json +0 -481
  192. package/lib/deck/schemas/1.json +0 -229
  193. package/lib/deck/schemas/2.json +0 -239
  194. package/lib/deck/schemas/3.json +0 -296
  195. package/lib/deck/schemas/4.json +0 -319
  196. package/lib/deck/schemas/5.json +0 -345
  197. package/lib/errors/definitions/1/errors.json +0 -274
  198. package/lib/errors/schemas/1.json +0 -49
  199. package/lib/gripper/definitions/1/gripperV1.1.json +0 -29
  200. package/lib/gripper/definitions/1/gripperV1.2.json +0 -29
  201. package/lib/gripper/definitions/1/gripperV1.3.json +0 -29
  202. package/lib/gripper/definitions/1/gripperV1.json +0 -28
  203. package/lib/gripper/schemas/1.json +0 -186
  204. package/lib/js/cypressUtils.d.ts +0 -1
  205. package/lib/js/helpers/getVectorDifference.d.ts +0 -2
  206. package/lib/js/helpers/getVectorSum.d.ts +0 -2
  207. package/lib/labware/definitions/1/12-well-plate.json +0 -147
  208. package/lib/labware/definitions/1/24-vial-rack.json +0 -281
  209. package/lib/labware/definitions/1/24-well-plate.json +0 -281
  210. package/lib/labware/definitions/1/384-plate.json +0 -4667
  211. package/lib/labware/definitions/1/48-vial-plate.json +0 -547
  212. package/lib/labware/definitions/1/48-well-plate.json +0 -547
  213. package/lib/labware/definitions/1/5ml-3x4.json +0 -147
  214. package/lib/labware/definitions/1/6-well-plate.json +0 -80
  215. package/lib/labware/definitions/1/96-PCR-flat.json +0 -1079
  216. package/lib/labware/definitions/1/96-PCR-tall.json +0 -1079
  217. package/lib/labware/definitions/1/96-deep-well.json +0 -1079
  218. package/lib/labware/definitions/1/96-flat.json +0 -1079
  219. package/lib/labware/definitions/1/96-well-plate-20mm.json +0 -1079
  220. package/lib/labware/definitions/1/MALDI-plate.json +0 -4282
  221. package/lib/labware/definitions/1/PCR-strip-tall.json +0 -1079
  222. package/lib/labware/definitions/1/T25-flask.json +0 -20
  223. package/lib/labware/definitions/1/T75-flask.json +0 -20
  224. package/lib/labware/definitions/1/alum-block-pcr-strips.json +0 -188
  225. package/lib/labware/definitions/1/biorad-hardshell-96-PCR.json +0 -1079
  226. package/lib/labware/definitions/1/e-gelgol.json +0 -1078
  227. package/lib/labware/definitions/1/fixed-trash.json +0 -19
  228. package/lib/labware/definitions/1/hampton-1ml-deep-block.json +0 -1078
  229. package/lib/labware/definitions/1/opentrons-aluminum-block-2ml-eppendorf.json +0 -281
  230. package/lib/labware/definitions/1/opentrons-aluminum-block-2ml-screwcap.json +0 -281
  231. package/lib/labware/definitions/1/opentrons-aluminum-block-96-PCR-plate.json +0 -1079
  232. package/lib/labware/definitions/1/opentrons-aluminum-block-PCR-strips-200ul.json +0 -1079
  233. package/lib/labware/definitions/1/opentrons-tiprack-10ul.json +0 -986
  234. package/lib/labware/definitions/1/opentrons-tiprack-300ul.json +0 -986
  235. package/lib/labware/definitions/1/opentrons-tuberack-1.5ml-eppendorf.json +0 -281
  236. package/lib/labware/definitions/1/opentrons-tuberack-15_50ml.json +0 -125
  237. package/lib/labware/definitions/1/opentrons-tuberack-15ml.json +0 -181
  238. package/lib/labware/definitions/1/opentrons-tuberack-2ml-eppendorf.json +0 -281
  239. package/lib/labware/definitions/1/opentrons-tuberack-2ml-screwcap.json +0 -281
  240. package/lib/labware/definitions/1/opentrons-tuberack-50ml.json +0 -80
  241. package/lib/labware/definitions/1/point.json +0 -18
  242. package/lib/labware/definitions/1/rigaku-compact-crystallization-plate.json +0 -2146
  243. package/lib/labware/definitions/1/small_vial_rack_16x45.json +0 -280
  244. package/lib/labware/definitions/1/tall-fixed-trash.json +0 -19
  245. package/lib/labware/definitions/1/tiprack-1000ul-H.json +0 -503
  246. package/lib/labware/definitions/1/tiprack-1000ul-chem.json +0 -1034
  247. package/lib/labware/definitions/1/tiprack-1000ul.json +0 -986
  248. package/lib/labware/definitions/1/tiprack-10ul-H.json +0 -503
  249. package/lib/labware/definitions/1/tiprack-10ul.json +0 -986
  250. package/lib/labware/definitions/1/tiprack-200ul.json +0 -986
  251. package/lib/labware/definitions/1/trash-box.json +0 -20
  252. package/lib/labware/definitions/1/trough-12row-short.json +0 -143
  253. package/lib/labware/definitions/1/trough-12row.json +0 -143
  254. package/lib/labware/definitions/1/trough-1row-25ml.json +0 -21
  255. package/lib/labware/definitions/1/tube-rack-.75ml.json +0 -281
  256. package/lib/labware/definitions/1/tube-rack-15_50ml.json +0 -125
  257. package/lib/labware/definitions/1/tube-rack-2ml-9x9.json +0 -911
  258. package/lib/labware/definitions/1/tube-rack-2ml.json +0 -281
  259. package/lib/labware/definitions/1/tube-rack-5ml-96.json +0 -1079
  260. package/lib/labware/definitions/1/tube-rack-80well.json +0 -907
  261. package/lib/labware/definitions/1/wheaton_vial_rack.json +0 -565
  262. package/lib/labware/definitions/2/agilent_1_reservoir_290ml/1.json +0 -54
  263. package/lib/labware/definitions/2/agilent_1_reservoir_290ml/2.json +0 -80
  264. package/lib/labware/definitions/2/agilent_1_reservoir_290ml/3.json +0 -80
  265. package/lib/labware/definitions/2/appliedbiosystemsmicroamp_384_wellplate_40ul/1.json +0 -4320
  266. package/lib/labware/definitions/2/appliedbiosystemsmicroamp_384_wellplate_40ul/2.json +0 -4730
  267. package/lib/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/1.json +0 -1019
  268. package/lib/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/2.json +0 -1045
  269. package/lib/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/3.json +0 -1167
  270. package/lib/labware/definitions/2/axygen_1_reservoir_90ml/1.json +0 -56
  271. package/lib/labware/definitions/2/axygen_1_reservoir_90ml/2.json +0 -72
  272. package/lib/labware/definitions/2/biorad_384_wellplate_50ul/1.json +0 -4329
  273. package/lib/labware/definitions/2/biorad_384_wellplate_50ul/2.json +0 -4331
  274. package/lib/labware/definitions/2/biorad_384_wellplate_50ul/3.json +0 -4741
  275. package/lib/labware/definitions/2/biorad_96_wellplate_200ul_pcr/1.json +0 -1020
  276. package/lib/labware/definitions/2/biorad_96_wellplate_200ul_pcr/2.json +0 -1046
  277. package/lib/labware/definitions/2/biorad_96_wellplate_200ul_pcr/3.json +0 -1182
  278. package/lib/labware/definitions/2/corning_12_wellplate_6.9ml_flat/1.json +0 -171
  279. package/lib/labware/definitions/2/corning_12_wellplate_6.9ml_flat/2.json +0 -180
  280. package/lib/labware/definitions/2/corning_12_wellplate_6.9ml_flat/3.json +0 -205
  281. package/lib/labware/definitions/2/corning_24_wellplate_3.4ml_flat/1.json +0 -293
  282. package/lib/labware/definitions/2/corning_24_wellplate_3.4ml_flat/2.json +0 -300
  283. package/lib/labware/definitions/2/corning_24_wellplate_3.4ml_flat/3.json +0 -337
  284. package/lib/labware/definitions/2/corning_384_wellplate_112ul_flat/1.json +0 -4703
  285. package/lib/labware/definitions/2/corning_384_wellplate_112ul_flat/2.json +0 -4717
  286. package/lib/labware/definitions/2/corning_384_wellplate_112ul_flat/3.json +0 -5116
  287. package/lib/labware/definitions/2/corning_384_wellplate_112ul_flat/4.json +0 -5116
  288. package/lib/labware/definitions/2/corning_48_wellplate_1.6ml_flat/1.json +0 -535
  289. package/lib/labware/definitions/2/corning_48_wellplate_1.6ml_flat/2.json +0 -544
  290. package/lib/labware/definitions/2/corning_48_wellplate_1.6ml_flat/3.json +0 -605
  291. package/lib/labware/definitions/2/corning_48_wellplate_1.6ml_flat/4.json +0 -605
  292. package/lib/labware/definitions/2/corning_6_wellplate_16.8ml_flat/1.json +0 -103
  293. package/lib/labware/definitions/2/corning_6_wellplate_16.8ml_flat/2.json +0 -110
  294. package/lib/labware/definitions/2/corning_6_wellplate_16.8ml_flat/3.json +0 -129
  295. package/lib/labware/definitions/2/corning_96_wellplate_360ul_flat/1.json +0 -1049
  296. package/lib/labware/definitions/2/corning_96_wellplate_360ul_flat/2.json +0 -1063
  297. package/lib/labware/definitions/2/corning_96_wellplate_360ul_flat/3.json +0 -1172
  298. package/lib/labware/definitions/2/eppendorf_96_tiprack_1000ul_eptips/1.json +0 -1019
  299. package/lib/labware/definitions/2/eppendorf_96_tiprack_10ul_eptips/1.json +0 -1019
  300. package/lib/labware/definitions/2/ev_resin_tips_flex_96_labware/1.json +0 -1067
  301. package/lib/labware/definitions/2/ev_resin_tips_flex_96_tiprack_adapter/1.json +0 -44
  302. package/lib/labware/definitions/2/ev_resin_tips_flex_short_adapter/1.json +0 -44
  303. package/lib/labware/definitions/2/ev_resin_tips_flex_tall_adapter/1.json +0 -44
  304. package/lib/labware/definitions/2/geb_96_tiprack_1000ul/1.json +0 -1017
  305. package/lib/labware/definitions/2/geb_96_tiprack_10ul/1.json +0 -1017
  306. package/lib/labware/definitions/2/nest_12_reservoir_15ml/1.json +0 -190
  307. package/lib/labware/definitions/2/nest_12_reservoir_15ml/2.json +0 -226
  308. package/lib/labware/definitions/2/nest_1_reservoir_195ml/1.json +0 -54
  309. package/lib/labware/definitions/2/nest_1_reservoir_195ml/2.json +0 -56
  310. package/lib/labware/definitions/2/nest_1_reservoir_195ml/3.json +0 -83
  311. package/lib/labware/definitions/2/nest_1_reservoir_290ml/1.json +0 -54
  312. package/lib/labware/definitions/2/nest_1_reservoir_290ml/2.json +0 -80
  313. package/lib/labware/definitions/2/nest_1_reservoir_290ml/3.json +0 -80
  314. package/lib/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/1.json +0 -1018
  315. package/lib/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/2.json +0 -1039
  316. package/lib/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/3.json +0 -1161
  317. package/lib/labware/definitions/2/nest_96_wellplate_200ul_flat/1.json +0 -1017
  318. package/lib/labware/definitions/2/nest_96_wellplate_200ul_flat/2.json +0 -1031
  319. package/lib/labware/definitions/2/nest_96_wellplate_200ul_flat/3.json +0 -1140
  320. package/lib/labware/definitions/2/nest_96_wellplate_2ml_deep/1.json +0 -1121
  321. package/lib/labware/definitions/2/nest_96_wellplate_2ml_deep/2.json +0 -1147
  322. package/lib/labware/definitions/2/nest_96_wellplate_2ml_deep/3.json +0 -1256
  323. package/lib/labware/definitions/2/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1.json +0 -164
  324. package/lib/labware/definitions/2/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/2.json +0 -232
  325. package/lib/labware/definitions/2/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/1.json +0 -162
  326. package/lib/labware/definitions/2/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/1.json +0 -160
  327. package/lib/labware/definitions/2/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/2.json +0 -235
  328. package/lib/labware/definitions/2/opentrons_15_tuberack_falcon_15ml_conical/1.json +0 -211
  329. package/lib/labware/definitions/2/opentrons_15_tuberack_falcon_15ml_conical/2.json +0 -259
  330. package/lib/labware/definitions/2/opentrons_15_tuberack_nest_15ml_conical/1.json +0 -209
  331. package/lib/labware/definitions/2/opentrons_15_tuberack_nest_15ml_conical/2.json +0 -257
  332. package/lib/labware/definitions/2/opentrons_1_trash_1100ml_fixed/1.json +0 -50
  333. package/lib/labware/definitions/2/opentrons_1_trash_3200ml_fixed/1.json +0 -50
  334. package/lib/labware/definitions/2/opentrons_1_trash_850ml_fixed/1.json +0 -50
  335. package/lib/labware/definitions/2/opentrons_24_aluminumblock_generic_2ml_screwcap/1.json +0 -300
  336. package/lib/labware/definitions/2/opentrons_24_aluminumblock_generic_2ml_screwcap/2.json +0 -301
  337. package/lib/labware/definitions/2/opentrons_24_aluminumblock_generic_2ml_screwcap/3.json +0 -352
  338. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_0.5ml_screwcap/1.json +0 -299
  339. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_0.5ml_screwcap/2.json +0 -370
  340. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_0.5ml_screwcap/3.json +0 -370
  341. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_screwcap/1.json +0 -299
  342. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_screwcap/2.json +0 -356
  343. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_snapcap/1.json +0 -301
  344. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_snapcap/2.json +0 -358
  345. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_screwcap/1.json +0 -299
  346. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_screwcap/2.json +0 -350
  347. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_snapcap/1.json +0 -301
  348. package/lib/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_snapcap/2.json +0 -386
  349. package/lib/labware/definitions/2/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/1.json +0 -312
  350. package/lib/labware/definitions/2/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/2.json +0 -418
  351. package/lib/labware/definitions/2/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/1.json +0 -311
  352. package/lib/labware/definitions/2/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/2.json +0 -473
  353. package/lib/labware/definitions/2/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic/1.json +0 -309
  354. package/lib/labware/definitions/2/opentrons_24_tuberack_generic_0.75ml_snapcap_acrylic/1.json +0 -298
  355. package/lib/labware/definitions/2/opentrons_24_tuberack_generic_2ml_screwcap/1.json +0 -300
  356. package/lib/labware/definitions/2/opentrons_24_tuberack_generic_2ml_screwcap/2.json +0 -351
  357. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_0.5ml_screwcap/1.json +0 -300
  358. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_0.5ml_screwcap/2.json +0 -371
  359. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_0.5ml_screwcap/3.json +0 -371
  360. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_screwcap/1.json +0 -300
  361. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_screwcap/2.json +0 -357
  362. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_snapcap/1.json +0 -302
  363. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_snapcap/2.json +0 -359
  364. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_2ml_screwcap/1.json +0 -300
  365. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_2ml_screwcap/2.json +0 -351
  366. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_2ml_snapcap/1.json +0 -302
  367. package/lib/labware/definitions/2/opentrons_24_tuberack_nest_2ml_snapcap/2.json +0 -387
  368. package/lib/labware/definitions/2/opentrons_40_aluminumblock_eppendorf_24x2ml_safelock_snapcap_generic_16x0.2ml_pcr_strip/1.json +0 -481
  369. package/lib/labware/definitions/2/opentrons_6_tuberack_falcon_50ml_conical/1.json +0 -112
  370. package/lib/labware/definitions/2/opentrons_6_tuberack_falcon_50ml_conical/2.json +0 -145
  371. package/lib/labware/definitions/2/opentrons_6_tuberack_nest_50ml_conical/1.json +0 -110
  372. package/lib/labware/definitions/2/opentrons_6_tuberack_nest_50ml_conical/2.json +0 -150
  373. package/lib/labware/definitions/2/opentrons_96_aluminumblock_biorad_wellplate_200ul/1.json +0 -1029
  374. package/lib/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/1.json +0 -1026
  375. package/lib/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/2.json +0 -1027
  376. package/lib/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/3.json +0 -1027
  377. package/lib/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/4.json +0 -1149
  378. package/lib/labware/definitions/2/opentrons_96_aluminumblock_nest_wellplate_100ul/1.json +0 -1027
  379. package/lib/labware/definitions/2/opentrons_96_deep_well_adapter/1.json +0 -41
  380. package/lib/labware/definitions/2/opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep/1.json +0 -1121
  381. package/lib/labware/definitions/2/opentrons_96_deep_well_temp_mod_adapter/1.json +0 -41
  382. package/lib/labware/definitions/2/opentrons_96_filtertiprack_1000ul/1.json +0 -1017
  383. package/lib/labware/definitions/2/opentrons_96_filtertiprack_10ul/1.json +0 -1017
  384. package/lib/labware/definitions/2/opentrons_96_filtertiprack_200ul/1.json +0 -1017
  385. package/lib/labware/definitions/2/opentrons_96_filtertiprack_20ul/1.json +0 -1017
  386. package/lib/labware/definitions/2/opentrons_96_flat_bottom_adapter/1.json +0 -41
  387. package/lib/labware/definitions/2/opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat/1.json +0 -1027
  388. package/lib/labware/definitions/2/opentrons_96_pcr_adapter/1.json +0 -1032
  389. package/lib/labware/definitions/2/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/1.json +0 -1027
  390. package/lib/labware/definitions/2/opentrons_96_pcr_adapter_nest_wellplate_100ul_pcr_full_skirt/1.json +0 -1025
  391. package/lib/labware/definitions/2/opentrons_96_tiprack_1000ul/1.json +0 -1019
  392. package/lib/labware/definitions/2/opentrons_96_tiprack_10ul/1.json +0 -1019
  393. package/lib/labware/definitions/2/opentrons_96_tiprack_20ul/1.json +0 -1019
  394. package/lib/labware/definitions/2/opentrons_96_tiprack_300ul/1.json +0 -1019
  395. package/lib/labware/definitions/2/opentrons_96_well_aluminum_block/1.json +0 -1032
  396. package/lib/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/1.json +0 -1019
  397. package/lib/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/2.json +0 -1045
  398. package/lib/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/3.json +0 -1174
  399. package/lib/labware/definitions/2/opentrons_aluminum_flat_bottom_plate/1.json +0 -41
  400. package/lib/labware/definitions/2/opentrons_calibration_adapter_heatershaker_module/1.json +0 -62
  401. package/lib/labware/definitions/2/opentrons_calibration_adapter_temperature_module/1.json +0 -62
  402. package/lib/labware/definitions/2/opentrons_calibration_adapter_thermocycler_module/1.json +0 -69
  403. package/lib/labware/definitions/2/opentrons_calibrationblock_short_side_left/1.json +0 -71
  404. package/lib/labware/definitions/2/opentrons_calibrationblock_short_side_right/1.json +0 -71
  405. package/lib/labware/definitions/2/opentrons_flex_96_filtertiprack_1000ul/1.json +0 -1026
  406. package/lib/labware/definitions/2/opentrons_flex_96_filtertiprack_200ul/1.json +0 -1026
  407. package/lib/labware/definitions/2/opentrons_flex_96_filtertiprack_20ul/1.json +0 -1026
  408. package/lib/labware/definitions/2/opentrons_flex_96_filtertiprack_50ul/1.json +0 -1026
  409. package/lib/labware/definitions/2/opentrons_flex_96_tiprack_1000ul/1.json +0 -1026
  410. package/lib/labware/definitions/2/opentrons_flex_96_tiprack_200ul/1.json +0 -1026
  411. package/lib/labware/definitions/2/opentrons_flex_96_tiprack_20ul/1.json +0 -1026
  412. package/lib/labware/definitions/2/opentrons_flex_96_tiprack_50ul/1.json +0 -1026
  413. package/lib/labware/definitions/2/opentrons_flex_96_tiprack_adapter/1.json +0 -41
  414. package/lib/labware/definitions/2/opentrons_flex_deck_riser/1.json +0 -41
  415. package/lib/labware/definitions/2/opentrons_flex_lid_absorbance_plate_reader_module/1.json +0 -57
  416. package/lib/labware/definitions/2/opentrons_flex_tiprack_lid/1.json +0 -122
  417. package/lib/labware/definitions/2/opentrons_tough_12_reservoir_22ml/1.json +0 -228
  418. package/lib/labware/definitions/2/opentrons_tough_1_reservoir_300ml/1.json +0 -83
  419. package/lib/labware/definitions/2/opentrons_tough_4_reservoir_72ml/1.json +0 -114
  420. package/lib/labware/definitions/2/opentrons_tough_pcr_auto_sealing_lid/1.json +0 -126
  421. package/lib/labware/definitions/2/opentrons_tough_pcr_auto_sealing_lid/2.json +0 -134
  422. package/lib/labware/definitions/2/opentrons_tough_universal_lid/1.json +0 -81
  423. package/lib/labware/definitions/2/opentrons_universal_flat_adapter/1.json +0 -151
  424. package/lib/labware/definitions/2/opentrons_universal_flat_adapter_corning_384_wellplate_112ul_flat/1.json +0 -4710
  425. package/lib/labware/definitions/2/protocol_engine_lid_stack_object/1.json +0 -48
  426. package/lib/labware/definitions/2/thermoscientificnunc_96_wellplate_1300ul/1.json +0 -1019
  427. package/lib/labware/definitions/2/thermoscientificnunc_96_wellplate_1300ul/2.json +0 -1134
  428. package/lib/labware/definitions/2/thermoscientificnunc_96_wellplate_2000ul/1.json +0 -1019
  429. package/lib/labware/definitions/2/thermoscientificnunc_96_wellplate_2000ul/2.json +0 -1134
  430. package/lib/labware/definitions/2/tipone_96_tiprack_200ul/1.json +0 -1017
  431. package/lib/labware/definitions/2/usascientific_12_reservoir_22ml/1.json +0 -192
  432. package/lib/labware/definitions/2/usascientific_12_reservoir_22ml/2.json +0 -237
  433. package/lib/labware/definitions/2/usascientific_12_reservoir_22ml/3.json +0 -237
  434. package/lib/labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/1.json +0 -1116
  435. package/lib/labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/2.json +0 -1236
  436. package/lib/labware/definitions/3/schema3test_96_well_aluminum_block/999.json +0 -1047
  437. package/lib/labware/definitions/3/schema3test_96_wellplate_200ul_pcr_full_skirt/999.json +0 -1189
  438. package/lib/labware/definitions/3/schema3test_flex_96_tiprack_200ul/999.json +0 -1041
  439. package/lib/labware/fixtures/1/fixture_tiprack.json +0 -986
  440. package/lib/labware/fixtures/2/fixture_12_trough.json +0 -188
  441. package/lib/labware/fixtures/2/fixture_12_trough_v2.json +0 -188
  442. package/lib/labware/fixtures/2/fixture_24_tuberack.json +0 -295
  443. package/lib/labware/fixtures/2/fixture_384_plate.json +0 -4316
  444. package/lib/labware/fixtures/2/fixture_96_plate.json +0 -1015
  445. package/lib/labware/fixtures/2/fixture_calibration_block.json +0 -71
  446. package/lib/labware/fixtures/2/fixture_corning_96_wellplate_360_flat.json +0 -1058
  447. package/lib/labware/fixtures/2/fixture_flex_96_tiprack_1000ul.json +0 -1026
  448. package/lib/labware/fixtures/2/fixture_flex_96_tiprack_adapter.json +0 -41
  449. package/lib/labware/fixtures/2/fixture_irregular_example_1.json +0 -600
  450. package/lib/labware/fixtures/2/fixture_overlappy_wellplate.json +0 -1113
  451. package/lib/labware/fixtures/2/fixture_regular_example_1.json +0 -57
  452. package/lib/labware/fixtures/2/fixture_regular_example_2.json +0 -95
  453. package/lib/labware/fixtures/2/fixture_tiprack_1000_ul.json +0 -1015
  454. package/lib/labware/fixtures/2/fixture_tiprack_10_ul.json +0 -1015
  455. package/lib/labware/fixtures/2/fixture_tiprack_300_ul.json +0 -1014
  456. package/lib/labware/fixtures/2/fixture_trash.json +0 -50
  457. package/lib/labware/fixtures/2/fixture_universal_flat_bottom_adapter.json +0 -151
  458. package/lib/labware/fixtures/3/fixture_2_plate.json +0 -110
  459. package/lib/labware/fixtures/3/fixture_corning_24_plate.json +0 -352
  460. package/lib/labware/repository/fixtures/1/exampleLabwareRepository.json +0 -43
  461. package/lib/labware/repository/schemas/1.json +0 -81
  462. package/lib/labware/schemas/2.json +0 -720
  463. package/lib/labware/schemas/3.json +0 -763
  464. package/lib/liquid/schemas/1.json +0 -21
  465. package/lib/liquid-class/definitions/1/ethanol_80.json +0 -5656
  466. package/lib/liquid-class/definitions/1/glycerol_50.json +0 -5376
  467. package/lib/liquid-class/definitions/1/water.json +0 -5270
  468. package/lib/liquid-class/fixtures/1/fixture_glycerol50.json +0 -255
  469. package/lib/liquid-class/schemas/1.json +0 -499
  470. package/lib/module/definitions/1.json +0 -57
  471. package/lib/module/definitions/2/magneticModuleV1.json +0 -22
  472. package/lib/module/definitions/2/magneticModuleV2.json +0 -69
  473. package/lib/module/definitions/2/temperatureModuleV1.json +0 -22
  474. package/lib/module/definitions/2/temperatureModuleV2.json +0 -69
  475. package/lib/module/definitions/2/thermocyclerModuleV1.json +0 -23
  476. package/lib/module/definitions/3/absorbanceReaderV1.json +0 -185
  477. package/lib/module/definitions/3/flexStackerModuleV1.json +0 -532
  478. package/lib/module/definitions/3/heaterShakerModuleV1.json +0 -530
  479. package/lib/module/definitions/3/magneticBlockV1.json +0 -201
  480. package/lib/module/definitions/3/magneticModuleV1.json +0 -437
  481. package/lib/module/definitions/3/magneticModuleV2.json +0 -490
  482. package/lib/module/definitions/3/temperatureModuleV1.json +0 -192
  483. package/lib/module/definitions/3/temperatureModuleV2.json +0 -325
  484. package/lib/module/definitions/3/thermocyclerModuleV1.json +0 -1382
  485. package/lib/module/definitions/3/thermocyclerModuleV2.json +0 -3688
  486. package/lib/module/fixtures/3/compatibleGenerationV1.json +0 -69
  487. package/lib/module/fixtures/3/compatibleGenerationV2.json +0 -69
  488. package/lib/module/fixtures/3/incompatibleGenerationV1.json +0 -22
  489. package/lib/module/fixtures/3/incompatibleGenerationV2.json +0 -69
  490. package/lib/module/schemas/1.json +0 -54
  491. package/lib/module/schemas/2.json +0 -112
  492. package/lib/module/schemas/3.json +0 -222
  493. package/lib/pipette/definitions/1/pipetteModelSpecs.json +0 -11181
  494. package/lib/pipette/definitions/1/pipetteNameSpecs.json +0 -784
  495. package/lib/pipette/definitions/2/general/eight_channel/p10/1_0.json +0 -206
  496. package/lib/pipette/definitions/2/general/eight_channel/p10/1_3.json +0 -206
  497. package/lib/pipette/definitions/2/general/eight_channel/p10/1_4.json +0 -206
  498. package/lib/pipette/definitions/2/general/eight_channel/p10/1_5.json +0 -206
  499. package/lib/pipette/definitions/2/general/eight_channel/p10/1_6.json +0 -206
  500. package/lib/pipette/definitions/2/general/eight_channel/p1000/1_0.json +0 -206
  501. package/lib/pipette/definitions/2/general/eight_channel/p1000/3_0.json +0 -233
  502. package/lib/pipette/definitions/2/general/eight_channel/p1000/3_3.json +0 -233
  503. package/lib/pipette/definitions/2/general/eight_channel/p1000/3_4.json +0 -323
  504. package/lib/pipette/definitions/2/general/eight_channel/p1000/3_5.json +0 -323
  505. package/lib/pipette/definitions/2/general/eight_channel/p20/2_0.json +0 -224
  506. package/lib/pipette/definitions/2/general/eight_channel/p20/2_1.json +0 -224
  507. package/lib/pipette/definitions/2/general/eight_channel/p300/1_0.json +0 -197
  508. package/lib/pipette/definitions/2/general/eight_channel/p300/1_3.json +0 -197
  509. package/lib/pipette/definitions/2/general/eight_channel/p300/1_4.json +0 -197
  510. package/lib/pipette/definitions/2/general/eight_channel/p300/1_5.json +0 -197
  511. package/lib/pipette/definitions/2/general/eight_channel/p300/2_0.json +0 -188
  512. package/lib/pipette/definitions/2/general/eight_channel/p300/2_1.json +0 -188
  513. package/lib/pipette/definitions/2/general/eight_channel/p50/1_0.json +0 -197
  514. package/lib/pipette/definitions/2/general/eight_channel/p50/1_3.json +0 -197
  515. package/lib/pipette/definitions/2/general/eight_channel/p50/1_4.json +0 -197
  516. package/lib/pipette/definitions/2/general/eight_channel/p50/1_5.json +0 -197
  517. package/lib/pipette/definitions/2/general/eight_channel/p50/3_0.json +0 -203
  518. package/lib/pipette/definitions/2/general/eight_channel/p50/3_3.json +0 -203
  519. package/lib/pipette/definitions/2/general/eight_channel/p50/3_4.json +0 -253
  520. package/lib/pipette/definitions/2/general/eight_channel/p50/3_5.json +0 -253
  521. package/lib/pipette/definitions/2/general/eight_channel_em/p1000/1_0.json +0 -320
  522. package/lib/pipette/definitions/2/general/eight_channel_em/p1000/3_0.json +0 -320
  523. package/lib/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json +0 -556
  524. package/lib/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json +0 -561
  525. package/lib/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json +0 -556
  526. package/lib/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json +0 -724
  527. package/lib/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json +0 -858
  528. package/lib/pipette/definitions/2/general/ninety_six_channel/p1000/3_6.json +0 -818
  529. package/lib/pipette/definitions/2/general/ninety_six_channel/p200/1_0.json +0 -660
  530. package/lib/pipette/definitions/2/general/ninety_six_channel/p200/3_0.json +0 -660
  531. package/lib/pipette/definitions/2/general/ninety_six_channel/p200/3_1.json +0 -660
  532. package/lib/pipette/definitions/2/general/single_channel/p10/1_0.json +0 -70
  533. package/lib/pipette/definitions/2/general/single_channel/p10/1_3.json +0 -70
  534. package/lib/pipette/definitions/2/general/single_channel/p10/1_4.json +0 -70
  535. package/lib/pipette/definitions/2/general/single_channel/p10/1_5.json +0 -70
  536. package/lib/pipette/definitions/2/general/single_channel/p1000/1_0.json +0 -70
  537. package/lib/pipette/definitions/2/general/single_channel/p1000/1_3.json +0 -70
  538. package/lib/pipette/definitions/2/general/single_channel/p1000/1_4.json +0 -70
  539. package/lib/pipette/definitions/2/general/single_channel/p1000/1_5.json +0 -70
  540. package/lib/pipette/definitions/2/general/single_channel/p1000/2_0.json +0 -69
  541. package/lib/pipette/definitions/2/general/single_channel/p1000/2_1.json +0 -69
  542. package/lib/pipette/definitions/2/general/single_channel/p1000/2_2.json +0 -69
  543. package/lib/pipette/definitions/2/general/single_channel/p1000/3_0.json +0 -81
  544. package/lib/pipette/definitions/2/general/single_channel/p1000/3_3.json +0 -81
  545. package/lib/pipette/definitions/2/general/single_channel/p1000/3_4.json +0 -90
  546. package/lib/pipette/definitions/2/general/single_channel/p1000/3_5.json +0 -90
  547. package/lib/pipette/definitions/2/general/single_channel/p1000/3_6.json +0 -90
  548. package/lib/pipette/definitions/2/general/single_channel/p1000/3_7.json +0 -81
  549. package/lib/pipette/definitions/2/general/single_channel/p20/2_0.json +0 -72
  550. package/lib/pipette/definitions/2/general/single_channel/p20/2_1.json +0 -72
  551. package/lib/pipette/definitions/2/general/single_channel/p20/2_2.json +0 -72
  552. package/lib/pipette/definitions/2/general/single_channel/p300/1_0.json +0 -69
  553. package/lib/pipette/definitions/2/general/single_channel/p300/1_3.json +0 -69
  554. package/lib/pipette/definitions/2/general/single_channel/p300/1_4.json +0 -69
  555. package/lib/pipette/definitions/2/general/single_channel/p300/1_5.json +0 -69
  556. package/lib/pipette/definitions/2/general/single_channel/p300/2_0.json +0 -68
  557. package/lib/pipette/definitions/2/general/single_channel/p300/2_1.json +0 -68
  558. package/lib/pipette/definitions/2/general/single_channel/p50/1_0.json +0 -69
  559. package/lib/pipette/definitions/2/general/single_channel/p50/1_3.json +0 -69
  560. package/lib/pipette/definitions/2/general/single_channel/p50/1_4.json +0 -69
  561. package/lib/pipette/definitions/2/general/single_channel/p50/1_5.json +0 -69
  562. package/lib/pipette/definitions/2/general/single_channel/p50/3_0.json +0 -83
  563. package/lib/pipette/definitions/2/general/single_channel/p50/3_3.json +0 -83
  564. package/lib/pipette/definitions/2/general/single_channel/p50/3_4.json +0 -88
  565. package/lib/pipette/definitions/2/general/single_channel/p50/3_5.json +0 -88
  566. package/lib/pipette/definitions/2/general/single_channel/p50/3_6.json +0 -88
  567. package/lib/pipette/definitions/2/geometry/eight_channel/p10/1_0.json +0 -42
  568. package/lib/pipette/definitions/2/geometry/eight_channel/p10/1_3.json +0 -42
  569. package/lib/pipette/definitions/2/geometry/eight_channel/p10/1_4.json +0 -42
  570. package/lib/pipette/definitions/2/geometry/eight_channel/p10/1_5.json +0 -42
  571. package/lib/pipette/definitions/2/geometry/eight_channel/p10/1_6.json +0 -42
  572. package/lib/pipette/definitions/2/geometry/eight_channel/p1000/1_0.json +0 -42
  573. package/lib/pipette/definitions/2/geometry/eight_channel/p1000/3_0.json +0 -55
  574. package/lib/pipette/definitions/2/geometry/eight_channel/p1000/3_3.json +0 -55
  575. package/lib/pipette/definitions/2/geometry/eight_channel/p1000/3_4.json +0 -55
  576. package/lib/pipette/definitions/2/geometry/eight_channel/p1000/3_5.json +0 -55
  577. package/lib/pipette/definitions/2/geometry/eight_channel/p20/2_0.json +0 -42
  578. package/lib/pipette/definitions/2/geometry/eight_channel/p20/2_1.json +0 -42
  579. package/lib/pipette/definitions/2/geometry/eight_channel/p300/1_0.json +0 -42
  580. package/lib/pipette/definitions/2/geometry/eight_channel/p300/1_3.json +0 -42
  581. package/lib/pipette/definitions/2/geometry/eight_channel/p300/1_4.json +0 -42
  582. package/lib/pipette/definitions/2/geometry/eight_channel/p300/1_5.json +0 -42
  583. package/lib/pipette/definitions/2/geometry/eight_channel/p300/2_0.json +0 -42
  584. package/lib/pipette/definitions/2/geometry/eight_channel/p300/2_1.json +0 -42
  585. package/lib/pipette/definitions/2/geometry/eight_channel/p50/1_0.json +0 -42
  586. package/lib/pipette/definitions/2/geometry/eight_channel/p50/1_3.json +0 -42
  587. package/lib/pipette/definitions/2/geometry/eight_channel/p50/1_4.json +0 -42
  588. package/lib/pipette/definitions/2/geometry/eight_channel/p50/1_5.json +0 -42
  589. package/lib/pipette/definitions/2/geometry/eight_channel/p50/3_0.json +0 -47
  590. package/lib/pipette/definitions/2/geometry/eight_channel/p50/3_3.json +0 -47
  591. package/lib/pipette/definitions/2/geometry/eight_channel/p50/3_4.json +0 -47
  592. package/lib/pipette/definitions/2/geometry/eight_channel/p50/3_5.json +0 -51
  593. package/lib/pipette/definitions/2/geometry/eight_channel_em/p1000/1_0.json +0 -55
  594. package/lib/pipette/definitions/2/geometry/eight_channel_em/p1000/3_0.json +0 -55
  595. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p1000/1_0.json +0 -296
  596. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_0.json +0 -309
  597. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_3.json +0 -309
  598. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_4.json +0 -309
  599. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_5.json +0 -309
  600. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_6.json +0 -309
  601. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p200/1_0.json +0 -305
  602. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p200/3_0.json +0 -309
  603. package/lib/pipette/definitions/2/geometry/ninety_six_channel/p200/3_1.json +0 -309
  604. package/lib/pipette/definitions/2/geometry/single_channel/p10/1_0.json +0 -15
  605. package/lib/pipette/definitions/2/geometry/single_channel/p10/1_3.json +0 -15
  606. package/lib/pipette/definitions/2/geometry/single_channel/p10/1_4.json +0 -15
  607. package/lib/pipette/definitions/2/geometry/single_channel/p10/1_5.json +0 -15
  608. package/lib/pipette/definitions/2/geometry/single_channel/p1000/1_0.json +0 -15
  609. package/lib/pipette/definitions/2/geometry/single_channel/p1000/1_3.json +0 -15
  610. package/lib/pipette/definitions/2/geometry/single_channel/p1000/1_4.json +0 -15
  611. package/lib/pipette/definitions/2/geometry/single_channel/p1000/1_5.json +0 -15
  612. package/lib/pipette/definitions/2/geometry/single_channel/p1000/2_0.json +0 -15
  613. package/lib/pipette/definitions/2/geometry/single_channel/p1000/2_1.json +0 -15
  614. package/lib/pipette/definitions/2/geometry/single_channel/p1000/2_2.json +0 -15
  615. package/lib/pipette/definitions/2/geometry/single_channel/p1000/3_0.json +0 -28
  616. package/lib/pipette/definitions/2/geometry/single_channel/p1000/3_3.json +0 -28
  617. package/lib/pipette/definitions/2/geometry/single_channel/p1000/3_4.json +0 -28
  618. package/lib/pipette/definitions/2/geometry/single_channel/p1000/3_5.json +0 -28
  619. package/lib/pipette/definitions/2/geometry/single_channel/p1000/3_6.json +0 -28
  620. package/lib/pipette/definitions/2/geometry/single_channel/p1000/3_7.json +0 -28
  621. package/lib/pipette/definitions/2/geometry/single_channel/p20/2_0.json +0 -15
  622. package/lib/pipette/definitions/2/geometry/single_channel/p20/2_1.json +0 -15
  623. package/lib/pipette/definitions/2/geometry/single_channel/p20/2_2.json +0 -15
  624. package/lib/pipette/definitions/2/geometry/single_channel/p300/1_0.json +0 -15
  625. package/lib/pipette/definitions/2/geometry/single_channel/p300/1_3.json +0 -15
  626. package/lib/pipette/definitions/2/geometry/single_channel/p300/1_4.json +0 -15
  627. package/lib/pipette/definitions/2/geometry/single_channel/p300/1_5.json +0 -15
  628. package/lib/pipette/definitions/2/geometry/single_channel/p300/2_0.json +0 -15
  629. package/lib/pipette/definitions/2/geometry/single_channel/p300/2_1.json +0 -15
  630. package/lib/pipette/definitions/2/geometry/single_channel/p50/1_0.json +0 -15
  631. package/lib/pipette/definitions/2/geometry/single_channel/p50/1_3.json +0 -15
  632. package/lib/pipette/definitions/2/geometry/single_channel/p50/1_4.json +0 -15
  633. package/lib/pipette/definitions/2/geometry/single_channel/p50/1_5.json +0 -15
  634. package/lib/pipette/definitions/2/geometry/single_channel/p50/3_0.json +0 -20
  635. package/lib/pipette/definitions/2/geometry/single_channel/p50/3_3.json +0 -20
  636. package/lib/pipette/definitions/2/geometry/single_channel/p50/3_4.json +0 -20
  637. package/lib/pipette/definitions/2/geometry/single_channel/p50/3_5.json +0 -20
  638. package/lib/pipette/definitions/2/geometry/single_channel/p50/3_6.json +0 -24
  639. package/lib/pipette/definitions/2/liquid/eight_channel/p10/default/1_0.json +0 -51
  640. package/lib/pipette/definitions/2/liquid/eight_channel/p10/default/1_3.json +0 -51
  641. package/lib/pipette/definitions/2/liquid/eight_channel/p10/default/1_4.json +0 -51
  642. package/lib/pipette/definitions/2/liquid/eight_channel/p10/default/1_5.json +0 -40
  643. package/lib/pipette/definitions/2/liquid/eight_channel/p10/default/1_6.json +0 -48
  644. package/lib/pipette/definitions/2/liquid/eight_channel/p1000/default/1_0.json +0 -350
  645. package/lib/pipette/definitions/2/liquid/eight_channel/p1000/default/3_0.json +0 -353
  646. package/lib/pipette/definitions/2/liquid/eight_channel/p1000/default/3_3.json +0 -356
  647. package/lib/pipette/definitions/2/liquid/eight_channel/p1000/default/3_4.json +0 -356
  648. package/lib/pipette/definitions/2/liquid/eight_channel/p1000/default/3_5.json +0 -287
  649. package/lib/pipette/definitions/2/liquid/eight_channel/p20/default/2_0.json +0 -302
  650. package/lib/pipette/definitions/2/liquid/eight_channel/p20/default/2_1.json +0 -184
  651. package/lib/pipette/definitions/2/liquid/eight_channel/p300/default/1_0.json +0 -61
  652. package/lib/pipette/definitions/2/liquid/eight_channel/p300/default/1_3.json +0 -61
  653. package/lib/pipette/definitions/2/liquid/eight_channel/p300/default/1_4.json +0 -61
  654. package/lib/pipette/definitions/2/liquid/eight_channel/p300/default/1_5.json +0 -61
  655. package/lib/pipette/definitions/2/liquid/eight_channel/p300/default/2_0.json +0 -185
  656. package/lib/pipette/definitions/2/liquid/eight_channel/p300/default/2_1.json +0 -187
  657. package/lib/pipette/definitions/2/liquid/eight_channel/p50/default/1_0.json +0 -122
  658. package/lib/pipette/definitions/2/liquid/eight_channel/p50/default/1_3.json +0 -122
  659. package/lib/pipette/definitions/2/liquid/eight_channel/p50/default/1_4.json +0 -122
  660. package/lib/pipette/definitions/2/liquid/eight_channel/p50/default/1_5.json +0 -104
  661. package/lib/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json +0 -97
  662. package/lib/pipette/definitions/2/liquid/eight_channel/p50/default/3_3.json +0 -98
  663. package/lib/pipette/definitions/2/liquid/eight_channel/p50/default/3_4.json +0 -98
  664. package/lib/pipette/definitions/2/liquid/eight_channel/p50/default/3_5.json +0 -155
  665. package/lib/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_0.json +0 -92
  666. package/lib/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_3.json +0 -88
  667. package/lib/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_4.json +0 -88
  668. package/lib/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_5.json +0 -151
  669. package/lib/pipette/definitions/2/liquid/eight_channel_em/p1000/default/1_0.json +0 -236
  670. package/lib/pipette/definitions/2/liquid/eight_channel_em/p1000/default/3_0.json +0 -236
  671. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/1_0.json +0 -236
  672. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_0.json +0 -185
  673. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_3.json +0 -188
  674. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_4.json +0 -188
  675. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_5.json +0 -239
  676. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_6.json +0 -239
  677. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p200/default/1_0.json +0 -288
  678. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_0.json +0 -180
  679. package/lib/pipette/definitions/2/liquid/ninety_six_channel/p200/default/3_1.json +0 -182
  680. package/lib/pipette/definitions/2/liquid/single_channel/p10/default/1_0.json +0 -52
  681. package/lib/pipette/definitions/2/liquid/single_channel/p10/default/1_3.json +0 -52
  682. package/lib/pipette/definitions/2/liquid/single_channel/p10/default/1_4.json +0 -49
  683. package/lib/pipette/definitions/2/liquid/single_channel/p10/default/1_5.json +0 -47
  684. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/1_0.json +0 -41
  685. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/1_3.json +0 -41
  686. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/1_4.json +0 -41
  687. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/1_5.json +0 -41
  688. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/2_0.json +0 -99
  689. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/2_1.json +0 -102
  690. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/2_2.json +0 -102
  691. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/3_0.json +0 -353
  692. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/3_3.json +0 -356
  693. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/3_4.json +0 -282
  694. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/3_5.json +0 -255
  695. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/3_6.json +0 -255
  696. package/lib/pipette/definitions/2/liquid/single_channel/p1000/default/3_7.json +0 -255
  697. package/lib/pipette/definitions/2/liquid/single_channel/p20/default/2_0.json +0 -422
  698. package/lib/pipette/definitions/2/liquid/single_channel/p20/default/2_1.json +0 -244
  699. package/lib/pipette/definitions/2/liquid/single_channel/p20/default/2_2.json +0 -304
  700. package/lib/pipette/definitions/2/liquid/single_channel/p300/default/1_0.json +0 -93
  701. package/lib/pipette/definitions/2/liquid/single_channel/p300/default/1_3.json +0 -93
  702. package/lib/pipette/definitions/2/liquid/single_channel/p300/default/1_4.json +0 -93
  703. package/lib/pipette/definitions/2/liquid/single_channel/p300/default/1_5.json +0 -69
  704. package/lib/pipette/definitions/2/liquid/single_channel/p300/default/2_0.json +0 -183
  705. package/lib/pipette/definitions/2/liquid/single_channel/p300/default/2_1.json +0 -185
  706. package/lib/pipette/definitions/2/liquid/single_channel/p50/default/1_0.json +0 -113
  707. package/lib/pipette/definitions/2/liquid/single_channel/p50/default/1_3.json +0 -122
  708. package/lib/pipette/definitions/2/liquid/single_channel/p50/default/1_4.json +0 -122
  709. package/lib/pipette/definitions/2/liquid/single_channel/p50/default/1_5.json +0 -98
  710. package/lib/pipette/definitions/2/liquid/single_channel/p50/default/3_0.json +0 -97
  711. package/lib/pipette/definitions/2/liquid/single_channel/p50/default/3_3.json +0 -98
  712. package/lib/pipette/definitions/2/liquid/single_channel/p50/default/3_4.json +0 -100
  713. package/lib/pipette/definitions/2/liquid/single_channel/p50/default/3_5.json +0 -145
  714. package/lib/pipette/definitions/2/liquid/single_channel/p50/default/3_6.json +0 -145
  715. package/lib/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_0.json +0 -77
  716. package/lib/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_3.json +0 -78
  717. package/lib/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_4.json +0 -78
  718. package/lib/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_5.json +0 -141
  719. package/lib/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_6.json +0 -141
  720. package/lib/pipette/fixtures/name/pipetteNameSpecFixtures.json +0 -170
  721. package/lib/pipette/schemas/1/pipetteModelSpecsSchema.json +0 -153
  722. package/lib/pipette/schemas/1/pipetteNameSpecsSchema.json +0 -89
  723. package/lib/pipette/schemas/2/pipetteGeometrySchema.json +0 -124
  724. package/lib/pipette/schemas/2/pipetteLiquidPropertiesSchema.json +0 -117
  725. package/lib/pipette/schemas/2/pipettePropertiesSchema.json +0 -323
  726. package/lib/protocol/fixtures/1/simple.json +0 -73
  727. package/lib/protocol/fixtures/3/simple.json +0 -1307
  728. package/lib/protocol/fixtures/3/testAllAtomicSingleV3.json +0 -2281
  729. package/lib/protocol/fixtures/3/testTrickyLabwareV3.json +0 -2576
  730. package/lib/protocol/fixtures/3/unusedPipette.json +0 -1311
  731. package/lib/protocol/fixtures/4/pipetteMultiChannelProtocolV4.json +0 -2561
  732. package/lib/protocol/fixtures/4/simpleV4.json +0 -1309
  733. package/lib/protocol/fixtures/4/testMagneticModuleV4.json +0 -2156
  734. package/lib/protocol/fixtures/4/testModulesProtocol.json +0 -2561
  735. package/lib/protocol/fixtures/4/testTemperatureModuleV4.json +0 -1480
  736. package/lib/protocol/fixtures/4/testThermocyclerModuleV4.json +0 -2182
  737. package/lib/protocol/fixtures/4/transferSettings.json +0 -5482
  738. package/lib/protocol/fixtures/5/multipleTipracks.json +0 -2476
  739. package/lib/protocol/fixtures/5/multipleTipracksWithTC.json +0 -3544
  740. package/lib/protocol/fixtures/5/simpleV5.json +0 -1328
  741. package/lib/protocol/fixtures/6/heaterShakerCommands.json +0 -1421
  742. package/lib/protocol/fixtures/6/heaterShakerCommandsWithResultsKey.json +0 -4725
  743. package/lib/protocol/fixtures/6/multipleTempModules.json +0 -11060
  744. package/lib/protocol/fixtures/6/multipleTipracks.json +0 -4942
  745. package/lib/protocol/fixtures/6/multipleTipracksWithTC.json +0 -7057
  746. package/lib/protocol/fixtures/6/oneTiprack.json +0 -1388
  747. package/lib/protocol/fixtures/6/simpleV6.json +0 -1493
  748. package/lib/protocol/fixtures/6/tempAndMagModuleCommands.json +0 -1412
  749. package/lib/protocol/fixtures/6/transferSettings.json +0 -11060
  750. package/lib/protocol/fixtures/7/moveLabware.json +0 -1303
  751. package/lib/protocol/fixtures/7/simpleV7.json +0 -1495
  752. package/lib/protocol/fixtures/8/moveLabware8.json +0 -1309
  753. package/lib/protocol/fixtures/8/moveLabwareFlex8.json +0 -1309
  754. package/lib/protocol/fixtures/8/simpleFlexV10CommandsV8.json +0 -1475
  755. package/lib/protocol/fixtures/8/simpleFlexV8.json +0 -1475
  756. package/lib/protocol/fixtures/8/simpleFlexV9CommandsV8.json +0 -1475
  757. package/lib/protocol/fixtures/8/simpleV10CommandsV8.json +0 -1473
  758. package/lib/protocol/fixtures/8/simpleV8.json +0 -1473
  759. package/lib/protocol/fixtures/8/simpleV9CommandsV8.json +0 -1473
  760. package/lib/protocol/schemas/1.json +0 -365
  761. package/lib/protocol/schemas/2.json +0 -390
  762. package/lib/protocol/schemas/3.json +0 -336
  763. package/lib/protocol/schemas/4.json +0 -620
  764. package/lib/protocol/schemas/5.json +0 -658
  765. package/lib/protocol/schemas/6.json +0 -1166
  766. package/lib/protocol/schemas/7.json +0 -270
  767. package/lib/protocol/schemas/8.json +0 -141
  768. /package/lib/js/{helpers/__tests__/getVectorDifference.test.d.ts → __tests__/fixtures.test.d.ts} +0 -0
  769. /package/lib/js/helpers/__tests__/{getVectorSum.test.d.ts → getLabwareInfoByLiquidId.test.d.ts} +0 -0
@@ -0,0 +1,467 @@
1
+ import json
2
+ import logging
3
+ import os
4
+ from pathlib import Path
5
+ from typing import Dict, Any, cast, Union, Generator
6
+
7
+ import pytest
8
+
9
+ from opentrons_shared_data.pipette import (
10
+ mutable_configurations,
11
+ types,
12
+ pipette_definition,
13
+ pipette_load_name_conversions as pip_conversions,
14
+ load_data,
15
+ )
16
+
17
+
18
+ TEST_SERIAL_NUMBER = "P50MV1520200304"
19
+ TestOverrideType = Dict[str, Union[float, int, bool]]
20
+
21
+
22
+ @pytest.fixture
23
+ def TMPFILE_DATA() -> Dict[str, Any]:
24
+ return {
25
+ "dropTipShake": True,
26
+ "doubleDropTip": True,
27
+ "model": "p50_multi_v1.5",
28
+ "quirks": {"pickUpPresses": True, "dropTipShake": True, "doubleDropTip": True},
29
+ "pickUpSpeed": {
30
+ "value": 5.0,
31
+ "min": 1,
32
+ "max": 100,
33
+ "units": "mm/s",
34
+ "type": "float",
35
+ "default": 30,
36
+ },
37
+ }
38
+
39
+
40
+ @pytest.fixture
41
+ def override_configuration_path(tmp_path: Path) -> Generator[Path, None, None]:
42
+ os.environ["OT_API_CONFIG_DIR"] = str(tmp_path)
43
+
44
+ tmp_path.mkdir(parents=True, exist_ok=True)
45
+ with_pip_path = tmp_path / Path("pipettes")
46
+ with_pip_path.mkdir(parents=True, exist_ok=True)
47
+ yield with_pip_path
48
+
49
+ del os.environ["OT_API_CONFIG_DIR"]
50
+
51
+
52
+ @pytest.fixture
53
+ def overrides_fixture(
54
+ override_configuration_path: Path, TMPFILE_DATA: Dict[str, Any]
55
+ ) -> types.MutableConfig:
56
+ with open(override_configuration_path / f"{TEST_SERIAL_NUMBER}.json", "w") as f:
57
+ json.dump(TMPFILE_DATA, f)
58
+ return types.MutableConfig.build(**TMPFILE_DATA["pickUpSpeed"], name="pickUpSpeed")
59
+
60
+
61
+ def test_load_old_overrides_regression(
62
+ TMPFILE_DATA: Dict[str, Any], override_configuration_path: Path
63
+ ) -> None:
64
+ TMPFILE_DATA["pickUpCurrent"] = {
65
+ "value": 0.15,
66
+ "min": 0.08,
67
+ "max": 0.2,
68
+ "units": "amps",
69
+ "type": "float",
70
+ "default": 0.1,
71
+ }
72
+ with open(override_configuration_path / "P20SV222021040709.json", "w") as f:
73
+ json.dump(TMPFILE_DATA, f)
74
+ configs = mutable_configurations.load_with_mutable_configurations(
75
+ pipette_definition.PipetteModelVersionType(
76
+ pipette_type=types.PipetteModelType.p20,
77
+ pipette_channels=types.PipetteChannelType.SINGLE_CHANNEL,
78
+ pipette_version=types.PipetteVersionType(2, 2),
79
+ oem_type=types.PipetteOEMType.OT,
80
+ ),
81
+ override_configuration_path,
82
+ "P20SV222021040709",
83
+ )
84
+ assert (
85
+ configs.pick_up_tip_configurations.press_fit.configuration_by_nozzle_map[
86
+ list(
87
+ configs.pick_up_tip_configurations.press_fit.configuration_by_nozzle_map.keys()
88
+ )[0]
89
+ ]["default"].current
90
+ == 0.15
91
+ )
92
+
93
+
94
+ def test_list_mutable_configs_unknown_pipette_id(
95
+ override_configuration_path: Path,
96
+ ) -> None:
97
+ """Test unknown pipette id mutable configs.
98
+
99
+ Test that a user receives a list of all possible mutable configurations
100
+ with the default value equal to the regular value.
101
+ """
102
+
103
+ found_configurations = mutable_configurations.list_mutable_configs(
104
+ TEST_SERIAL_NUMBER, override_configuration_path
105
+ )
106
+ for c in found_configurations:
107
+ if isinstance(c, str):
108
+ # model string, ignore
109
+ continue
110
+ if isinstance(c, types.QuirkConfig):
111
+ assert isinstance(c.value, bool)
112
+ else:
113
+ assert c.default == c.value
114
+
115
+
116
+ def test_list_mutable_configs_known_pipette_id(
117
+ overrides_fixture: types.MutableConfig, override_configuration_path: Path
118
+ ) -> None:
119
+ """Test known pipette id mutable configs.
120
+
121
+ Test that a user receives a list of all possible mutable configurations
122
+ with the expected overrides also listed.
123
+ """
124
+ found_configurations = mutable_configurations.list_mutable_configs(
125
+ TEST_SERIAL_NUMBER, override_configuration_path
126
+ )
127
+
128
+ for c in found_configurations:
129
+ if isinstance(c, str):
130
+ # model string, ignore
131
+ continue
132
+ if overrides_fixture.name == c.name:
133
+ assert c.value == overrides_fixture.value
134
+ elif isinstance(c, types.QuirkConfig):
135
+ assert isinstance(c.value, bool)
136
+ else:
137
+ assert c.default == c.value
138
+
139
+
140
+ @pytest.mark.parametrize(
141
+ argnames=["overrides_dict", "saved_dict"],
142
+ argvalues=[
143
+ [
144
+ {"pickUpCurrent": 0.5, "dropTipSpeed": 5, "dropTipShake": False},
145
+ {
146
+ "quirks": {"dropTipShake": False},
147
+ "pickUpCurrent": {
148
+ "value": 0.5,
149
+ "default": 0.8,
150
+ "units": "amps",
151
+ "type": "float",
152
+ "min": 0.1,
153
+ "max": 2.0,
154
+ },
155
+ "model": "p50_multi_v1.5",
156
+ "dropTipSpeed": {
157
+ "value": 5,
158
+ "default": 5.0,
159
+ "units": "mm/s",
160
+ "type": "float",
161
+ "min": 0.01,
162
+ "max": 30,
163
+ },
164
+ },
165
+ ]
166
+ ],
167
+ )
168
+ def test_save_new_overrides_new_file(
169
+ override_configuration_path: Path,
170
+ overrides_dict: TestOverrideType,
171
+ saved_dict: Dict[str, Any],
172
+ ) -> None:
173
+ mutable_configurations.save_overrides(
174
+ TEST_SERIAL_NUMBER, overrides_dict, override_configuration_path
175
+ )
176
+ with open(override_configuration_path / f"{TEST_SERIAL_NUMBER}.json") as f:
177
+ new_file = json.load(f)
178
+ assert saved_dict == new_file
179
+
180
+
181
+ @pytest.mark.parametrize(
182
+ argnames=["overrides_dict"],
183
+ argvalues=[
184
+ [{"pickUpCurrent": 1, "pickUpSpeed": 10, "dropTipShake": False}],
185
+ [{"pickUpCurrent": 2}],
186
+ ],
187
+ )
188
+ def test_save_new_overrides_update_file(
189
+ override_configuration_path: Path,
190
+ overrides_fixture: types.MutableConfig,
191
+ overrides_dict: TestOverrideType,
192
+ TMPFILE_DATA: Dict[str, Any],
193
+ ) -> None:
194
+ mutable_configurations.save_overrides(
195
+ TEST_SERIAL_NUMBER, overrides_dict, override_configuration_path
196
+ )
197
+ with open(override_configuration_path / f"{TEST_SERIAL_NUMBER}.json") as f:
198
+ new_file = json.load(f)
199
+
200
+ for k, v in overrides_dict.items():
201
+ if isinstance(v, bool):
202
+ TMPFILE_DATA["quirks"][k] = v
203
+ elif TMPFILE_DATA.get(k):
204
+ TMPFILE_DATA[k]["value"] = v
205
+
206
+ TMPFILE_DATA["pickUpCurrent"] = {
207
+ "default": 0.8,
208
+ "max": 2.0,
209
+ "min": 0.1,
210
+ "type": "float",
211
+ "units": "amps",
212
+ "value": overrides_dict["pickUpCurrent"],
213
+ }
214
+
215
+ del TMPFILE_DATA["quirks"]["pickUpPresses"]
216
+ assert TMPFILE_DATA == new_file
217
+
218
+
219
+ @pytest.mark.parametrize(
220
+ argnames=["overrides_dict"],
221
+ argvalues=[
222
+ [{"pickUpCurrent": 1231.213, "dropTipSpeed": 121, "dropTipShake": False}],
223
+ [{"quirk123": True}],
224
+ ],
225
+ )
226
+ def test_save_invalid_overrides(
227
+ overrides_fixture: types.MutableConfig,
228
+ override_configuration_path: Path,
229
+ overrides_dict: TestOverrideType,
230
+ TMPFILE_DATA: Dict[str, Any],
231
+ ) -> None:
232
+ with pytest.raises(ValueError):
233
+ mutable_configurations.save_overrides(
234
+ TEST_SERIAL_NUMBER, overrides_dict, override_configuration_path
235
+ )
236
+ with open(override_configuration_path / f"{TEST_SERIAL_NUMBER}.json") as f:
237
+ new_file = json.load(f)
238
+ assert TMPFILE_DATA == new_file
239
+
240
+
241
+ @pytest.mark.parametrize(
242
+ argnames=["pipette_model", "serial_number"],
243
+ argvalues=[
244
+ [
245
+ pip_conversions.convert_pipette_model(
246
+ cast(types.PipetteModel, "p1000_96_v3.3")
247
+ ),
248
+ "P1KHV3320230629",
249
+ ],
250
+ [
251
+ pip_conversions.convert_pipette_model(
252
+ cast(types.PipetteModel, "p50_multi_v1.5")
253
+ ),
254
+ TEST_SERIAL_NUMBER,
255
+ ],
256
+ ],
257
+ )
258
+ def test_load_with_overrides(
259
+ overrides_fixture: types.MutableConfig,
260
+ pipette_model: pipette_definition.PipetteModelVersionType,
261
+ serial_number: str,
262
+ override_configuration_path: Path,
263
+ ) -> None:
264
+ """Test that you can load configurations both with pre-existing overrides and non-pre-existing overrides."""
265
+ updated_configurations = mutable_configurations.load_with_mutable_configurations(
266
+ pipette_model, override_configuration_path, serial_number
267
+ )
268
+
269
+ loaded_base_configurations = load_data.load_definition(
270
+ pipette_model.pipette_type,
271
+ pipette_model.pipette_channels,
272
+ pipette_model.pipette_version,
273
+ pipette_model.oem_type,
274
+ )
275
+
276
+ if serial_number == TEST_SERIAL_NUMBER:
277
+ dict_loaded_configs = loaded_base_configurations.model_dump(by_alias=True)
278
+ for map_key in dict_loaded_configs["pickUpTipConfigurations"]["pressFit"][
279
+ "configurationsByNozzleMap"
280
+ ]:
281
+ for tip_key in dict_loaded_configs["pickUpTipConfigurations"]["pressFit"][
282
+ "configurationsByNozzleMap"
283
+ ][map_key]:
284
+ dict_loaded_configs["pickUpTipConfigurations"]["pressFit"][
285
+ "configurationsByNozzleMap"
286
+ ][map_key][tip_key]["speed"] = 5.0
287
+
288
+ updated_configurations_dict = updated_configurations.model_dump(by_alias=True)
289
+ assert set(dict_loaded_configs.pop("quirks")) == set(
290
+ updated_configurations_dict.pop("quirks")
291
+ )
292
+ assert updated_configurations_dict == dict_loaded_configs
293
+ else:
294
+ assert updated_configurations == loaded_base_configurations
295
+
296
+
297
+ def test_build_mutable_config_using_old_units() -> None:
298
+ """Test that MutableConfigs can build with old units."""
299
+ old_units_config = {
300
+ "value": 5,
301
+ "default": 5.0,
302
+ "units": "mm/s",
303
+ "type": "float",
304
+ "min": 0.01,
305
+ "max": 30,
306
+ }
307
+ assert (
308
+ types.MutableConfig.build(**old_units_config, name="dropTipSpeed") is not None # type: ignore
309
+ )
310
+
311
+
312
+ @pytest.mark.parametrize(
313
+ ("filename", "type", "channels", "version", "file_contents"),
314
+ # From https://opentrons.atlassian.net/browse/RQA-3676.
315
+ # These could probably be pared down.
316
+ [
317
+ (
318
+ "P20MV202020121412.json",
319
+ types.PipetteModelType.p20,
320
+ types.PipetteChannelType.EIGHT_CHANNEL,
321
+ types.PipetteVersionType(2, 0),
322
+ '{"model": "p20_multi_v2.0"}',
323
+ ),
324
+ (
325
+ "P3HSV1318071638.json",
326
+ types.PipetteModelType.p300,
327
+ types.PipetteChannelType.SINGLE_CHANNEL,
328
+ types.PipetteVersionType(1, 3),
329
+ '{"dropTipShake": true, "model": "p300_single_v1.3", "quirks": {"dropTipShake": true}, "top": {"value": 30.0, "default": 19.5, "units": "mm", "type": "float", "min": -20, "max": 30}, "pickUpPresses": {"value": 3.0, "default": 3, "units": "presses", "type": "int", "min": 0, "max": 15}}',
330
+ ),
331
+ (
332
+ "P3HMV212021040004.json",
333
+ types.PipetteModelType.p300,
334
+ types.PipetteChannelType.EIGHT_CHANNEL,
335
+ types.PipetteVersionType(2, 1),
336
+ '{"needsUnstick": true, "model": "p300_multi_v2.1"}',
337
+ ),
338
+ (
339
+ "P20SV202020032604.json",
340
+ types.PipetteModelType.p20,
341
+ types.PipetteChannelType.SINGLE_CHANNEL,
342
+ types.PipetteVersionType(2, 0),
343
+ '{"model": "p20_single_v2.0"}',
344
+ ),
345
+ (
346
+ "P1KSV202019072441.json",
347
+ types.PipetteModelType.p1000,
348
+ types.PipetteChannelType.SINGLE_CHANNEL,
349
+ types.PipetteVersionType(2, 0),
350
+ '{"pickupTipShake": true, "model": "p1000_single_v2.0", "quirks": {"pickupTipShake": true}}',
351
+ ),
352
+ (
353
+ "P3HMV202021011105.json",
354
+ types.PipetteModelType.p300,
355
+ types.PipetteChannelType.EIGHT_CHANNEL,
356
+ types.PipetteVersionType(2, 0),
357
+ '{"needsUnstick": true, "model": "p300_multi_v2.0"}',
358
+ ),
359
+ (
360
+ "P20SV202019072527.json",
361
+ types.PipetteModelType.p20,
362
+ types.PipetteChannelType.SINGLE_CHANNEL,
363
+ types.PipetteVersionType(2, 0),
364
+ '{"model": "p20_single_v2.0"}',
365
+ ),
366
+ (
367
+ "P3HSV202021042602.json",
368
+ types.PipetteModelType.p300,
369
+ types.PipetteChannelType.SINGLE_CHANNEL,
370
+ types.PipetteVersionType(2, 0),
371
+ '{"model": "p300_single_v2.0"}',
372
+ ),
373
+ (
374
+ "P20SV222021030914.json",
375
+ types.PipetteModelType.p20,
376
+ types.PipetteChannelType.SINGLE_CHANNEL,
377
+ types.PipetteVersionType(2, 2),
378
+ '{"model": "p20_single_v2.2", "quirks": {}, "pickUpPresses": {"value": 3.0, "default": 1, "units": "presses", "type": "int", "min": 0, "max": 15}}',
379
+ ),
380
+ (
381
+ "P3HMV202020040801.json",
382
+ types.PipetteModelType.p300,
383
+ types.PipetteChannelType.EIGHT_CHANNEL,
384
+ types.PipetteVersionType(2, 0),
385
+ '{"needsUnstick": true, "model": "p300_multi_v2.0", "quirks": {"needsUnstick": true}, "top": {"value": 20.0, "default": 19.5, "units": "mm", "type": "float", "min": -20, "max": 30}, "bottom": {"value": -14.0, "default": -14.5, "units": "mm", "type": "float", "min": -20, "max": 30}, "blowout": {"value": -18.5, "default": -19.0, "units": "mm", "type": "float", "min": -20, "max": 30}, "dropTip": {"value": -20.0, "default": -33.4, "units": "mm", "type": "float", "min": -20, "max": 30}, "pickUpCurrent": {"value": 0.9, "default": 0.8, "units": "amps", "type": "float", "min": 0.1, "max": 2.0}, "pickUpDistance": {"value": 10.0, "default": 11.0, "units": "mm", "type": "float", "min": 0, "max": 10}, "pickUpIncrement": {"value": 0.1, "default": 0.0, "units": "mm", "type": "int", "min": 0, "max": 10}, "pickUpPresses": {"value": 4.0, "default": 1, "units": "presses", "type": "int", "min": 0, "max": 15}, "pickUpSpeed": {"value": 11.0, "default": 10.0, "units": "mm/s", "type": "float", "min": 0.01, "max": 30}, "plungerCurrent": {"value": 1.1, "default": 1.0, "units": "amps", "type": "float", "min": 0.1, "max": 2.0}, "dropTipCurrent": {"value": 1.22, "default": 1.25, "units": "amps", "type": "float", "min": 0.1, "max": 2.0}, "dropTipSpeed": {"value": 8.0, "default": 7.5, "units": "mm/s", "type": "float", "min": 0.01, "max": 30}, "tipLength": {"value": 52.0, "default": 51.0, "units": "mm", "type": "float", "min": 0, "max": 100}}',
386
+ ),
387
+ (
388
+ "P3HMV212021040002.json",
389
+ types.PipetteModelType.p300,
390
+ types.PipetteChannelType.EIGHT_CHANNEL,
391
+ types.PipetteVersionType(2, 1),
392
+ '{"needsUnstick": true, "model": "p300_multi_v2.1"}',
393
+ ),
394
+ (
395
+ "P3HMV1318072625.json",
396
+ types.PipetteModelType.p300,
397
+ types.PipetteChannelType.EIGHT_CHANNEL,
398
+ types.PipetteVersionType(1, 3),
399
+ '{"dropTipShake": true, "model": "p300_multi_v1.3", "quirks": {"dropTipShake": true}, "pickUpPresses": {"value": 4.0, "default": 3, "units": "presses", "type": "int", "min": 0, "max": 15}}',
400
+ ),
401
+ (
402
+ "P50MV1519091757.json",
403
+ types.PipetteModelType.p50,
404
+ types.PipetteChannelType.EIGHT_CHANNEL,
405
+ types.PipetteVersionType(1, 5),
406
+ '{"dropTipShake": true, "doubleDropTip": true, "model": "p50_multi_v1.5", "quirks": {"doubleDropTip": true, "dropTipShake": true}}',
407
+ ),
408
+ (
409
+ "P3HSV202019072224.json",
410
+ types.PipetteModelType.p300,
411
+ types.PipetteChannelType.SINGLE_CHANNEL,
412
+ types.PipetteVersionType(2, 0),
413
+ '{"model": "p300_single_v2.0", "quirks": {}}',
414
+ ),
415
+ (
416
+ "P20MV202019112708.json",
417
+ types.PipetteModelType.p20,
418
+ types.PipetteChannelType.EIGHT_CHANNEL,
419
+ types.PipetteVersionType(2, 0),
420
+ '{"model": "p20_multi_v2.0", "quirks": {}}',
421
+ ),
422
+ (
423
+ "P3HSV202021031503.json",
424
+ types.PipetteModelType.p300,
425
+ types.PipetteChannelType.SINGLE_CHANNEL,
426
+ types.PipetteVersionType(2, 1),
427
+ '{"model": "p300_single_v2.1"}',
428
+ ),
429
+ (
430
+ "P1KSV202020060206.json",
431
+ types.PipetteModelType.p1000,
432
+ types.PipetteChannelType.SINGLE_CHANNEL,
433
+ types.PipetteVersionType(2, 0),
434
+ '{"pickupTipShake": true, "model": "p1000_single_v2.0"}',
435
+ ),
436
+ (
437
+ "P3HMV202021010906.json",
438
+ types.PipetteModelType.p300,
439
+ types.PipetteChannelType.EIGHT_CHANNEL,
440
+ types.PipetteVersionType(2, 0),
441
+ '{"needsUnstick": true, "model": "p300_multi_v2.0"}',
442
+ ),
443
+ ],
444
+ )
445
+ def test_loading_does_not_log_warnings(
446
+ filename: str,
447
+ type: types.PipetteModelType,
448
+ channels: types.PipetteChannelType,
449
+ version: types.PipetteVersionType,
450
+ file_contents: str,
451
+ caplog: pytest.LogCaptureFixture,
452
+ override_configuration_path: Path,
453
+ ) -> None:
454
+ """Make sure load_with_mutable_configurations() doesn't log any exceptions.
455
+
456
+ load_with_mutable_configurations() suppresses and logs internal exceptions to
457
+ protect its caller, but those are still bugs, and we still want tests to catch them.
458
+ """
459
+ model = pipette_definition.PipetteModelVersionType(
460
+ type, channels, version, types.PipetteOEMType.OT
461
+ )
462
+ (override_configuration_path / filename).write_text(file_contents)
463
+ with caplog.at_level(logging.WARNING):
464
+ mutable_configurations.load_with_mutable_configurations(
465
+ model, override_configuration_path, Path(filename).stem
466
+ )
467
+ assert len(caplog.records) == 0
@@ -0,0 +1,183 @@
1
+ import pytest
2
+ from typing import cast, List
3
+ from opentrons_shared_data.pipette.types import (
4
+ PipetteChannelType,
5
+ PipetteModelType,
6
+ PipetteVersionType,
7
+ PipetteModelMajorVersionType,
8
+ PipetteModelMinorVersionType,
9
+ LiquidClasses,
10
+ )
11
+ from opentrons_shared_data.pipette.pipette_definition import (
12
+ liquid_class_for_volume_between_default_and_defaultlowvolume,
13
+ PipetteLiquidPropertiesDefinition,
14
+ SupportedTipsDefinition,
15
+ )
16
+
17
+
18
+ def get_liquid_definition_for(
19
+ liquid_class: LiquidClasses,
20
+ ) -> PipetteLiquidPropertiesDefinition:
21
+ if liquid_class == LiquidClasses.lowVolumeDefault:
22
+ return PipetteLiquidPropertiesDefinition.model_validate(
23
+ {
24
+ "supportedTips": {
25
+ "t50": SupportedTipsDefinition.model_validate(
26
+ {
27
+ "defaultAspirateFlowRate": {
28
+ "default": 5,
29
+ "valuesByApiLevel": {"2.0": 5},
30
+ },
31
+ "defaultDispenseFlowRate": {
32
+ "default": 5,
33
+ "valuesByApiLevel": {"2.0": 5},
34
+ },
35
+ "defaultBlowOutFlowRate": {
36
+ "default": 10,
37
+ "valuesByApiLevel": {"2.0": 10},
38
+ },
39
+ "defaultFlowAcceleration": 100,
40
+ "defaultTipLength": 100,
41
+ "defaultReturnTipHeight": 0.5,
42
+ "defaultPushOutVolume": 5,
43
+ "aspirate": {"default": {"1": [[1, 2, 3]]}},
44
+ "dispense": {"default": {"1": [[1, 2, 3]]}},
45
+ }
46
+ )
47
+ },
48
+ "versionedTipOverlapDictionary": {"v0": {}},
49
+ "maxVolume": 30,
50
+ "minVolume": 1,
51
+ "defaultTipracks": [],
52
+ }
53
+ )
54
+ else:
55
+ return PipetteLiquidPropertiesDefinition.model_validate(
56
+ {
57
+ "supportedTips": {
58
+ "t50": SupportedTipsDefinition.model_validate(
59
+ {
60
+ "defaultAspirateFlowRate": {
61
+ "default": 5,
62
+ "valuesByApiLevel": {"2.0": 5},
63
+ },
64
+ "defaultDispenseFlowRate": {
65
+ "default": 5,
66
+ "valuesByApiLevel": {"2.0": 5},
67
+ },
68
+ "defaultBlowOutFlowRate": {
69
+ "default": 10,
70
+ "valuesByApiLevel": {"2.0": 10},
71
+ },
72
+ "defaultFlowAcceleration": 100,
73
+ "defaultTipLength": 100,
74
+ "defaultReturnTipHeight": 0.5,
75
+ "defaultPushOutVolume": 5,
76
+ "aspirate": {"default": {"1": [[1, 2, 3]]}},
77
+ "dispense": {"default": {"1": [[1, 2, 3]]}},
78
+ }
79
+ )
80
+ },
81
+ "versionedTipOverlapDictionary": {"v0": {}},
82
+ "maxVolume": 100,
83
+ "minVolume": 5,
84
+ "defaultTipracks": [],
85
+ }
86
+ )
87
+
88
+
89
+ @pytest.mark.parametrize(
90
+ argnames=["model", "expected_enum"],
91
+ argvalues=[["p50", PipetteModelType.p50], ["p1000", PipetteModelType.p1000]],
92
+ )
93
+ def test_model_enum(model: str, expected_enum: PipetteModelType) -> None:
94
+ assert expected_enum == PipetteModelType(model)
95
+
96
+
97
+ @pytest.mark.parametrize(argnames="channels", argvalues=[1, 8, 96])
98
+ def test_channel_enum(channels: int) -> None:
99
+ channel_type = PipetteChannelType(channels)
100
+ assert channels == channel_type
101
+
102
+
103
+ def test_incorrect_values() -> None:
104
+ with pytest.raises(ValueError):
105
+ PipetteModelType("p100")
106
+
107
+ with pytest.raises(ValueError):
108
+ PipetteChannelType(99)
109
+
110
+
111
+ @pytest.mark.parametrize(
112
+ argnames=["major", "minor"],
113
+ argvalues=[[1, 0], [1, 3], [3, 9]],
114
+ )
115
+ def test_version_enum(major: int, minor: int) -> None:
116
+ version_type = PipetteVersionType(
117
+ cast(PipetteModelMajorVersionType, major),
118
+ cast(PipetteModelMinorVersionType, minor),
119
+ )
120
+ assert version_type.as_tuple == (major, minor)
121
+
122
+
123
+ @pytest.mark.parametrize(
124
+ argnames=[
125
+ "all_liquid_classes",
126
+ "volume",
127
+ "current_liquid_class",
128
+ "expected_liquid_class",
129
+ ],
130
+ argvalues=[
131
+ [
132
+ [LiquidClasses.default],
133
+ 1,
134
+ LiquidClasses.lowVolumeDefault,
135
+ LiquidClasses.default,
136
+ ],
137
+ [
138
+ [LiquidClasses.lowVolumeDefault, LiquidClasses.default],
139
+ 1,
140
+ LiquidClasses.lowVolumeDefault,
141
+ LiquidClasses.lowVolumeDefault,
142
+ ],
143
+ [
144
+ [LiquidClasses.lowVolumeDefault, LiquidClasses.default],
145
+ 1,
146
+ LiquidClasses.default,
147
+ LiquidClasses.lowVolumeDefault,
148
+ ],
149
+ [
150
+ [LiquidClasses.lowVolumeDefault, LiquidClasses.default],
151
+ 5,
152
+ LiquidClasses.default,
153
+ LiquidClasses.default,
154
+ ],
155
+ [
156
+ [LiquidClasses.lowVolumeDefault, LiquidClasses.default],
157
+ 5,
158
+ LiquidClasses.lowVolumeDefault,
159
+ LiquidClasses.default,
160
+ ],
161
+ [
162
+ [LiquidClasses.lowVolumeDefault, LiquidClasses.default],
163
+ 100,
164
+ LiquidClasses.lowVolumeDefault,
165
+ LiquidClasses.default,
166
+ ],
167
+ ],
168
+ )
169
+ def test_liquid_class_for_volume_between_default_and_defaultlowvolume(
170
+ all_liquid_classes: List[LiquidClasses],
171
+ volume: float,
172
+ current_liquid_class: LiquidClasses,
173
+ expected_liquid_class: LiquidClasses,
174
+ ) -> None:
175
+ available_liquid_classes = {
176
+ lc: get_liquid_definition_for(lc) for lc in all_liquid_classes
177
+ }
178
+ assert (
179
+ liquid_class_for_volume_between_default_and_defaultlowvolume(
180
+ volume, current_liquid_class, available_liquid_classes
181
+ )
182
+ == expected_liquid_class
183
+ )