@opentrons/shared-data 0.0.0-alpha.14
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.
- package/Makefile +100 -0
- package/command/schemas/7.json +3301 -0
- package/command/schemas/8.json +3632 -0
- package/command/types/annotation.ts +37 -0
- package/command/types/calibration.ts +84 -0
- package/command/types/gantry.ts +176 -0
- package/command/types/incidental.ts +21 -0
- package/command/types/index.ts +77 -0
- package/command/types/module.ts +307 -0
- package/command/types/pipetting.ts +228 -0
- package/command/types/setup.ts +199 -0
- package/command/types/timing.ts +58 -0
- package/commandAnnotation/schemas/1.json +74 -0
- package/commandAnnotation/types/index.ts +19 -0
- package/deck/definitions/3/ot2_short_trash.json +477 -0
- package/deck/definitions/3/ot2_standard.json +477 -0
- package/deck/definitions/3/ot3_standard.json +989 -0
- package/deck/definitions/4/ot2_short_trash.json +403 -0
- package/deck/definitions/4/ot2_standard.json +403 -0
- package/deck/definitions/4/ot3_standard.json +597 -0
- package/deck/fixtures/3/deckExample.json +481 -0
- package/deck/index.ts +1 -0
- package/deck/schemas/1.json +240 -0
- package/deck/schemas/2.json +250 -0
- package/deck/schemas/3.json +297 -0
- package/deck/schemas/4.json +321 -0
- package/deck/types/schemaV4.ts +84 -0
- package/errors/definitions/1/errors.json +222 -0
- package/errors/schemas/1.json +50 -0
- package/gripper/definitions/1/gripperV1.1.json +28 -0
- package/gripper/definitions/1/gripperV1.2.json +28 -0
- package/gripper/definitions/1/gripperV1.json +27 -0
- package/gripper/schemas/1.json +181 -0
- package/js/__tests__/__snapshots__/pipettes.test.ts.snap +5969 -0
- package/js/__tests__/deckSchemas.test.ts +87 -0
- package/js/__tests__/errors.test.js +21 -0
- package/js/__tests__/getAreSlotsAdjacent.test.ts +128 -0
- package/js/__tests__/getWellNamePerMultiTip.test.ts +162 -0
- package/js/__tests__/labwareDefQuirks.test.ts +37 -0
- package/js/__tests__/labwareDefSchemaV1.test.ts +82 -0
- package/js/__tests__/labwareDefSchemaV2.test.ts +298 -0
- package/js/__tests__/moduleAccessors.test.ts +50 -0
- package/js/__tests__/moduleSpecsSchema.test.ts +77 -0
- package/js/__tests__/pipetteSchemaV2.test.ts +107 -0
- package/js/__tests__/pipetteSpecSchemas.test.ts +48 -0
- package/js/__tests__/pipettes.test.ts +58 -0
- package/js/__tests__/protocolSchemaV4.test.ts +137 -0
- package/js/__tests__/protocolSchemaV5.test.ts +137 -0
- package/js/__tests__/protocolSchemaV6.test.ts +132 -0
- package/js/__tests__/protocolSchemaV7.test.ts +64 -0
- package/js/__tests__/protocolValidation.test.ts +83 -0
- package/js/__tests__/sortWells.test.ts +40 -0
- package/js/__tests__/splitWellsOnColumn.test.ts +21 -0
- package/js/__tests__/validateErrors.test.js +34 -0
- package/js/constants.ts +336 -0
- package/js/cypressUtils.ts +35 -0
- package/js/errors.ts +33 -0
- package/js/fixtures.ts +161 -0
- package/js/getLabware.ts +162 -0
- package/js/gripper.ts +29 -0
- package/js/helpers/__tests__/getAdapterName.test.ts +31 -0
- package/js/helpers/__tests__/getDeckDefFromLoadedLabware.test.ts +12 -0
- package/js/helpers/__tests__/getVectorDifference.test.ts +25 -0
- package/js/helpers/__tests__/getVectorSum.test.ts +21 -0
- package/js/helpers/__tests__/labwareInference.test.ts +84 -0
- package/js/helpers/__tests__/orderWells.test.ts +87 -0
- package/js/helpers/__tests__/parseProtocolData.test.ts +165 -0
- package/js/helpers/__tests__/volume.test.ts +108 -0
- package/js/helpers/__tests__/wellSets.test.ts +352 -0
- package/js/helpers/get96Channel384WellPlateWells.ts +44 -0
- package/js/helpers/getLoadedLabwareDefinitionsByUri.ts +30 -0
- package/js/helpers/getModuleVizDims.ts +118 -0
- package/js/helpers/getOccludedSlotCountForModule.ts +13 -0
- package/js/helpers/getVectorDifference.ts +12 -0
- package/js/helpers/getVectorSum.ts +12 -0
- package/js/helpers/getWellNamePerMultiTip.ts +86 -0
- package/js/helpers/getWellTotalVolume.ts +16 -0
- package/js/helpers/index.ts +346 -0
- package/js/helpers/labwareInference.ts +92 -0
- package/js/helpers/orderWells.ts +69 -0
- package/js/helpers/parseProtocolData.ts +141 -0
- package/js/helpers/volume.ts +35 -0
- package/js/helpers/wellIsRect.ts +6 -0
- package/js/helpers/wellSets.ts +150 -0
- package/js/index.ts +14 -0
- package/js/labwareTools/__tests__/__snapshots__/createIrregularLabware.test.ts.snap +3 -0
- package/js/labwareTools/__tests__/__snapshots__/createLabware.test.ts.snap +3 -0
- package/js/labwareTools/__tests__/createDefaultDisplayName.test.ts +111 -0
- package/js/labwareTools/__tests__/createIrregularLabware.test.ts +226 -0
- package/js/labwareTools/__tests__/createLabware.test.ts +147 -0
- package/js/labwareTools/index.ts +452 -0
- package/js/modules.ts +97 -0
- package/js/pipettes.ts +89 -0
- package/js/protocols.ts +290 -0
- package/js/schema.ts +80 -0
- package/js/scripts/build.js +32 -0
- package/js/scripts/generateDeckLayersFromSVG.js +46 -0
- package/js/titleCase.ts +30 -0
- package/js/types.ts +600 -0
- package/labware/definitions/1/12-well-plate.json +147 -0
- package/labware/definitions/1/24-vial-rack.json +281 -0
- package/labware/definitions/1/24-well-plate.json +281 -0
- package/labware/definitions/1/384-plate.json +4667 -0
- package/labware/definitions/1/48-vial-plate.json +547 -0
- package/labware/definitions/1/48-well-plate.json +547 -0
- package/labware/definitions/1/5ml-3x4.json +147 -0
- package/labware/definitions/1/6-well-plate.json +80 -0
- package/labware/definitions/1/96-PCR-flat.json +1079 -0
- package/labware/definitions/1/96-PCR-tall.json +1079 -0
- package/labware/definitions/1/96-deep-well.json +1079 -0
- package/labware/definitions/1/96-flat.json +1079 -0
- package/labware/definitions/1/96-well-plate-20mm.json +1079 -0
- package/labware/definitions/1/MALDI-plate.json +4282 -0
- package/labware/definitions/1/PCR-strip-tall.json +1079 -0
- package/labware/definitions/1/T25-flask.json +20 -0
- package/labware/definitions/1/T75-flask.json +20 -0
- package/labware/definitions/1/alum-block-pcr-strips.json +188 -0
- package/labware/definitions/1/biorad-hardshell-96-PCR.json +1079 -0
- package/labware/definitions/1/e-gelgol.json +1078 -0
- package/labware/definitions/1/fixed-trash.json +19 -0
- package/labware/definitions/1/hampton-1ml-deep-block.json +1078 -0
- package/labware/definitions/1/opentrons-aluminum-block-2ml-eppendorf.json +281 -0
- package/labware/definitions/1/opentrons-aluminum-block-2ml-screwcap.json +281 -0
- package/labware/definitions/1/opentrons-aluminum-block-96-PCR-plate.json +1079 -0
- package/labware/definitions/1/opentrons-aluminum-block-PCR-strips-200ul.json +1079 -0
- package/labware/definitions/1/opentrons-tiprack-10ul.json +986 -0
- package/labware/definitions/1/opentrons-tiprack-300ul.json +986 -0
- package/labware/definitions/1/opentrons-tuberack-1.5ml-eppendorf.json +281 -0
- package/labware/definitions/1/opentrons-tuberack-15_50ml.json +125 -0
- package/labware/definitions/1/opentrons-tuberack-15ml.json +181 -0
- package/labware/definitions/1/opentrons-tuberack-2ml-eppendorf.json +281 -0
- package/labware/definitions/1/opentrons-tuberack-2ml-screwcap.json +281 -0
- package/labware/definitions/1/opentrons-tuberack-50ml.json +80 -0
- package/labware/definitions/1/point.json +18 -0
- package/labware/definitions/1/rigaku-compact-crystallization-plate.json +2146 -0
- package/labware/definitions/1/small_vial_rack_16x45.json +280 -0
- package/labware/definitions/1/tall-fixed-trash.json +19 -0
- package/labware/definitions/1/tiprack-1000ul-H.json +503 -0
- package/labware/definitions/1/tiprack-1000ul-chem.json +1034 -0
- package/labware/definitions/1/tiprack-1000ul.json +986 -0
- package/labware/definitions/1/tiprack-10ul-H.json +503 -0
- package/labware/definitions/1/tiprack-10ul.json +986 -0
- package/labware/definitions/1/tiprack-200ul.json +986 -0
- package/labware/definitions/1/trash-box.json +20 -0
- package/labware/definitions/1/trough-12row-short.json +143 -0
- package/labware/definitions/1/trough-12row.json +143 -0
- package/labware/definitions/1/trough-1row-25ml.json +21 -0
- package/labware/definitions/1/tube-rack-.75ml.json +281 -0
- package/labware/definitions/1/tube-rack-15_50ml.json +125 -0
- package/labware/definitions/1/tube-rack-2ml-9x9.json +911 -0
- package/labware/definitions/1/tube-rack-2ml.json +281 -0
- package/labware/definitions/1/tube-rack-5ml-96.json +1079 -0
- package/labware/definitions/1/tube-rack-80well.json +907 -0
- package/labware/definitions/1/wheaton_vial_rack.json +565 -0
- package/labware/definitions/2/agilent_1_reservoir_290ml/1.json +54 -0
- package/labware/definitions/2/appliedbiosystemsmicroamp_384_wellplate_40ul/1.json +4320 -0
- package/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/1.json +1019 -0
- package/labware/definitions/2/armadillo_96_wellplate_200ul_pcr_full_skirt/2.json +1045 -0
- package/labware/definitions/2/axygen_1_reservoir_90ml/1.json +56 -0
- package/labware/definitions/2/biorad_384_wellplate_50ul/1.json +4329 -0
- package/labware/definitions/2/biorad_384_wellplate_50ul/2.json +4331 -0
- package/labware/definitions/2/biorad_96_wellplate_200ul_pcr/1.json +1020 -0
- package/labware/definitions/2/biorad_96_wellplate_200ul_pcr/2.json +1036 -0
- package/labware/definitions/2/corning_12_wellplate_6.9ml_flat/1.json +171 -0
- package/labware/definitions/2/corning_12_wellplate_6.9ml_flat/2.json +180 -0
- package/labware/definitions/2/corning_24_wellplate_3.4ml_flat/1.json +293 -0
- package/labware/definitions/2/corning_24_wellplate_3.4ml_flat/2.json +300 -0
- package/labware/definitions/2/corning_384_wellplate_112ul_flat/1.json +4703 -0
- package/labware/definitions/2/corning_384_wellplate_112ul_flat/2.json +4717 -0
- package/labware/definitions/2/corning_48_wellplate_1.6ml_flat/1.json +535 -0
- package/labware/definitions/2/corning_48_wellplate_1.6ml_flat/2.json +544 -0
- package/labware/definitions/2/corning_6_wellplate_16.8ml_flat/1.json +103 -0
- package/labware/definitions/2/corning_6_wellplate_16.8ml_flat/2.json +110 -0
- package/labware/definitions/2/corning_96_wellplate_360ul_flat/1.json +1049 -0
- package/labware/definitions/2/corning_96_wellplate_360ul_flat/2.json +1063 -0
- package/labware/definitions/2/eppendorf_96_tiprack_1000ul_eptips/1.json +1019 -0
- package/labware/definitions/2/eppendorf_96_tiprack_10ul_eptips/1.json +1019 -0
- package/labware/definitions/2/geb_96_tiprack_1000ul/1.json +1017 -0
- package/labware/definitions/2/geb_96_tiprack_10ul/1.json +1017 -0
- package/labware/definitions/2/nest_12_reservoir_15ml/1.json +190 -0
- package/labware/definitions/2/nest_1_reservoir_195ml/1.json +54 -0
- package/labware/definitions/2/nest_1_reservoir_195ml/2.json +56 -0
- package/labware/definitions/2/nest_1_reservoir_290ml/1.json +54 -0
- package/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/1.json +1018 -0
- package/labware/definitions/2/nest_96_wellplate_100ul_pcr_full_skirt/2.json +1039 -0
- package/labware/definitions/2/nest_96_wellplate_200ul_flat/1.json +1017 -0
- package/labware/definitions/2/nest_96_wellplate_200ul_flat/2.json +1031 -0
- package/labware/definitions/2/nest_96_wellplate_2ml_deep/1.json +1121 -0
- package/labware/definitions/2/nest_96_wellplate_2ml_deep/2.json +1137 -0
- package/labware/definitions/2/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical/1.json +164 -0
- package/labware/definitions/2/opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic/1.json +162 -0
- package/labware/definitions/2/opentrons_10_tuberack_nest_4x50ml_6x15ml_conical/1.json +160 -0
- package/labware/definitions/2/opentrons_15_tuberack_falcon_15ml_conical/1.json +211 -0
- package/labware/definitions/2/opentrons_15_tuberack_nest_15ml_conical/1.json +209 -0
- package/labware/definitions/2/opentrons_1_trash_1100ml_fixed/1.json +50 -0
- package/labware/definitions/2/opentrons_1_trash_3200ml_fixed/1.json +50 -0
- package/labware/definitions/2/opentrons_1_trash_850ml_fixed/1.json +50 -0
- package/labware/definitions/2/opentrons_24_aluminumblock_generic_2ml_screwcap/1.json +300 -0
- package/labware/definitions/2/opentrons_24_aluminumblock_generic_2ml_screwcap/2.json +301 -0
- package/labware/definitions/2/opentrons_24_aluminumblock_nest_0.5ml_screwcap/1.json +299 -0
- package/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_screwcap/1.json +299 -0
- package/labware/definitions/2/opentrons_24_aluminumblock_nest_1.5ml_snapcap/1.json +301 -0
- package/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_screwcap/1.json +299 -0
- package/labware/definitions/2/opentrons_24_aluminumblock_nest_2ml_snapcap/1.json +301 -0
- package/labware/definitions/2/opentrons_24_tuberack_eppendorf_1.5ml_safelock_snapcap/1.json +312 -0
- package/labware/definitions/2/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap/1.json +311 -0
- package/labware/definitions/2/opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic/1.json +309 -0
- package/labware/definitions/2/opentrons_24_tuberack_generic_0.75ml_snapcap_acrylic/1.json +298 -0
- package/labware/definitions/2/opentrons_24_tuberack_generic_2ml_screwcap/1.json +300 -0
- package/labware/definitions/2/opentrons_24_tuberack_nest_0.5ml_screwcap/1.json +300 -0
- package/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_screwcap/1.json +300 -0
- package/labware/definitions/2/opentrons_24_tuberack_nest_1.5ml_snapcap/1.json +302 -0
- package/labware/definitions/2/opentrons_24_tuberack_nest_2ml_screwcap/1.json +300 -0
- package/labware/definitions/2/opentrons_24_tuberack_nest_2ml_snapcap/1.json +302 -0
- package/labware/definitions/2/opentrons_40_aluminumblock_eppendorf_24x2ml_safelock_snapcap_generic_16x0.2ml_pcr_strip/1.json +481 -0
- package/labware/definitions/2/opentrons_6_tuberack_falcon_50ml_conical/1.json +112 -0
- package/labware/definitions/2/opentrons_6_tuberack_nest_50ml_conical/1.json +110 -0
- package/labware/definitions/2/opentrons_96_aluminumblock_biorad_wellplate_200ul/1.json +1029 -0
- package/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/1.json +1026 -0
- package/labware/definitions/2/opentrons_96_aluminumblock_generic_pcr_strip_200ul/2.json +1027 -0
- package/labware/definitions/2/opentrons_96_aluminumblock_nest_wellplate_100ul/1.json +1027 -0
- package/labware/definitions/2/opentrons_96_deep_well_adapter/1.json +41 -0
- package/labware/definitions/2/opentrons_96_deep_well_adapter_nest_wellplate_2ml_deep/1.json +1121 -0
- package/labware/definitions/2/opentrons_96_filtertiprack_1000ul/1.json +1017 -0
- package/labware/definitions/2/opentrons_96_filtertiprack_10ul/1.json +1017 -0
- package/labware/definitions/2/opentrons_96_filtertiprack_200ul/1.json +1017 -0
- package/labware/definitions/2/opentrons_96_filtertiprack_20ul/1.json +1017 -0
- package/labware/definitions/2/opentrons_96_flat_bottom_adapter/1.json +41 -0
- package/labware/definitions/2/opentrons_96_flat_bottom_adapter_nest_wellplate_200ul_flat/1.json +1027 -0
- package/labware/definitions/2/opentrons_96_pcr_adapter/1.json +1032 -0
- package/labware/definitions/2/opentrons_96_pcr_adapter_armadillo_wellplate_200ul/1.json +1027 -0
- package/labware/definitions/2/opentrons_96_pcr_adapter_nest_wellplate_100ul_pcr_full_skirt/1.json +1025 -0
- package/labware/definitions/2/opentrons_96_tiprack_1000ul/1.json +1019 -0
- package/labware/definitions/2/opentrons_96_tiprack_10ul/1.json +1019 -0
- package/labware/definitions/2/opentrons_96_tiprack_20ul/1.json +1019 -0
- package/labware/definitions/2/opentrons_96_tiprack_300ul/1.json +1019 -0
- package/labware/definitions/2/opentrons_96_well_aluminum_block/1.json +1032 -0
- package/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/1.json +1019 -0
- package/labware/definitions/2/opentrons_96_wellplate_200ul_pcr_full_skirt/2.json +1045 -0
- package/labware/definitions/2/opentrons_aluminum_flat_bottom_plate/1.json +41 -0
- package/labware/definitions/2/opentrons_calibration_adapter_heatershaker_module/1.json +62 -0
- package/labware/definitions/2/opentrons_calibration_adapter_temperature_module/1.json +62 -0
- package/labware/definitions/2/opentrons_calibration_adapter_thermocycler_module/1.json +69 -0
- package/labware/definitions/2/opentrons_calibrationblock_short_side_left/1.json +71 -0
- package/labware/definitions/2/opentrons_calibrationblock_short_side_right/1.json +71 -0
- package/labware/definitions/2/opentrons_flex_96_filtertiprack_1000ul/1.json +1026 -0
- package/labware/definitions/2/opentrons_flex_96_filtertiprack_200ul/1.json +1026 -0
- package/labware/definitions/2/opentrons_flex_96_filtertiprack_50ul/1.json +1026 -0
- package/labware/definitions/2/opentrons_flex_96_tiprack_1000ul/1.json +1026 -0
- package/labware/definitions/2/opentrons_flex_96_tiprack_200ul/1.json +1026 -0
- package/labware/definitions/2/opentrons_flex_96_tiprack_50ul/1.json +1026 -0
- package/labware/definitions/2/opentrons_flex_96_tiprack_adapter/1.json +41 -0
- package/labware/definitions/2/opentrons_universal_flat_adapter/1.json +151 -0
- package/labware/definitions/2/opentrons_universal_flat_adapter_corning_384_wellplate_112ul_flat/1.json +4710 -0
- package/labware/definitions/2/thermoscientificnunc_96_wellplate_1300ul/1.json +1019 -0
- package/labware/definitions/2/thermoscientificnunc_96_wellplate_2000ul/1.json +1019 -0
- package/labware/definitions/2/tipone_96_tiprack_200ul/1.json +1017 -0
- package/labware/definitions/2/usascientific_12_reservoir_22ml/1.json +192 -0
- package/labware/definitions/2/usascientific_96_wellplate_2.4ml_deep/1.json +1116 -0
- package/labware/fixtures/2/fixture_12_trough.json +188 -0
- package/labware/fixtures/2/fixture_12_trough_v2.json +188 -0
- package/labware/fixtures/2/fixture_24_tuberack.json +295 -0
- package/labware/fixtures/2/fixture_384_plate.json +4316 -0
- package/labware/fixtures/2/fixture_96_plate.json +1015 -0
- package/labware/fixtures/2/fixture_flex_96_tiprack_1000ul.json +1026 -0
- package/labware/fixtures/2/fixture_flex_96_tiprack_adapter.json +41 -0
- package/labware/fixtures/2/fixture_irregular_example_1.json +600 -0
- package/labware/fixtures/2/fixture_overlappy_wellplate.json +1113 -0
- package/labware/fixtures/2/fixture_regular_example_1.json +57 -0
- package/labware/fixtures/2/fixture_regular_example_2.json +95 -0
- package/labware/fixtures/2/fixture_tiprack_1000_ul.json +1015 -0
- package/labware/fixtures/2/fixture_tiprack_10_ul.json +1015 -0
- package/labware/fixtures/2/fixture_tiprack_300_ul.json +1014 -0
- package/labware/fixtures/2/fixture_trash.json +50 -0
- package/labware/schemas/2.json +372 -0
- package/liquid/schemas/1.json +21 -0
- package/liquid/types/index.ts +5 -0
- package/module/definitions/1.json +57 -0
- package/module/definitions/2/magneticModuleV1.json +22 -0
- package/module/definitions/2/magneticModuleV2.json +69 -0
- package/module/definitions/2/temperatureModuleV1.json +22 -0
- package/module/definitions/2/temperatureModuleV2.json +69 -0
- package/module/definitions/2/thermocyclerModuleV1.json +23 -0
- package/module/definitions/3/heaterShakerModuleV1.json +521 -0
- package/module/definitions/3/magneticBlockV1.json +199 -0
- package/module/definitions/3/magneticModuleV1.json +435 -0
- package/module/definitions/3/magneticModuleV2.json +488 -0
- package/module/definitions/3/temperatureModuleV1.json +190 -0
- package/module/definitions/3/temperatureModuleV2.json +315 -0
- package/module/definitions/3/thermocyclerModuleV1.json +1380 -0
- package/module/definitions/3/thermocyclerModuleV2.json +3686 -0
- package/module/fixtures/3/compatibleGenerationV1.json +69 -0
- package/module/fixtures/3/compatibleGenerationV2.json +69 -0
- package/module/fixtures/3/incompatibleGenerationV1.json +22 -0
- package/module/fixtures/3/incompatibleGenerationV2.json +69 -0
- package/module/schemas/1.json +55 -0
- package/module/schemas/2.json +112 -0
- package/module/schemas/3.json +206 -0
- package/package.json +20 -0
- package/pipette/README.md +50 -0
- package/pipette/definitions/1/pipetteModelSpecs.json +10214 -0
- package/pipette/definitions/1/pipetteNameSpecs.json +679 -0
- package/pipette/definitions/2/general/eight_channel/p10/1_0.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p10/1_3.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p10/1_4.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p10/1_5.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p10/1_6.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p1000/1_0.json +68 -0
- package/pipette/definitions/2/general/eight_channel/p1000/3_0.json +68 -0
- package/pipette/definitions/2/general/eight_channel/p1000/3_3.json +68 -0
- package/pipette/definitions/2/general/eight_channel/p1000/3_4.json +68 -0
- package/pipette/definitions/2/general/eight_channel/p1000/3_5.json +68 -0
- package/pipette/definitions/2/general/eight_channel/p20/2_0.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p20/2_1.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p300/1_0.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p300/1_3.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p300/1_4.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p300/1_5.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p300/2_0.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p300/2_1.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p50/1_0.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p50/1_3.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p50/1_4.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p50/1_5.json +59 -0
- package/pipette/definitions/2/general/eight_channel/p50/3_0.json +74 -0
- package/pipette/definitions/2/general/eight_channel/p50/3_3.json +74 -0
- package/pipette/definitions/2/general/eight_channel/p50/3_4.json +74 -0
- package/pipette/definitions/2/general/eight_channel/p50/3_5.json +74 -0
- package/pipette/definitions/2/general/ninety_six_channel/p1000/1_0.json +87 -0
- package/pipette/definitions/2/general/ninety_six_channel/p1000/3_0.json +92 -0
- package/pipette/definitions/2/general/ninety_six_channel/p1000/3_3.json +87 -0
- package/pipette/definitions/2/general/ninety_six_channel/p1000/3_4.json +88 -0
- package/pipette/definitions/2/general/ninety_six_channel/p1000/3_5.json +87 -0
- package/pipette/definitions/2/general/single_channel/p10/1_0.json +52 -0
- package/pipette/definitions/2/general/single_channel/p10/1_3.json +52 -0
- package/pipette/definitions/2/general/single_channel/p10/1_4.json +52 -0
- package/pipette/definitions/2/general/single_channel/p10/1_5.json +52 -0
- package/pipette/definitions/2/general/single_channel/p1000/1_0.json +52 -0
- package/pipette/definitions/2/general/single_channel/p1000/1_3.json +52 -0
- package/pipette/definitions/2/general/single_channel/p1000/1_4.json +52 -0
- package/pipette/definitions/2/general/single_channel/p1000/1_5.json +52 -0
- package/pipette/definitions/2/general/single_channel/p1000/2_0.json +52 -0
- package/pipette/definitions/2/general/single_channel/p1000/2_1.json +52 -0
- package/pipette/definitions/2/general/single_channel/p1000/2_2.json +52 -0
- package/pipette/definitions/2/general/single_channel/p1000/3_0.json +61 -0
- package/pipette/definitions/2/general/single_channel/p1000/3_3.json +61 -0
- package/pipette/definitions/2/general/single_channel/p1000/3_4.json +61 -0
- package/pipette/definitions/2/general/single_channel/p1000/3_5.json +61 -0
- package/pipette/definitions/2/general/single_channel/p20/2_0.json +52 -0
- package/pipette/definitions/2/general/single_channel/p20/2_1.json +52 -0
- package/pipette/definitions/2/general/single_channel/p20/2_2.json +52 -0
- package/pipette/definitions/2/general/single_channel/p300/1_0.json +52 -0
- package/pipette/definitions/2/general/single_channel/p300/1_3.json +52 -0
- package/pipette/definitions/2/general/single_channel/p300/1_4.json +52 -0
- package/pipette/definitions/2/general/single_channel/p300/1_5.json +52 -0
- package/pipette/definitions/2/general/single_channel/p300/2_0.json +52 -0
- package/pipette/definitions/2/general/single_channel/p300/2_1.json +52 -0
- package/pipette/definitions/2/general/single_channel/p50/1_0.json +52 -0
- package/pipette/definitions/2/general/single_channel/p50/1_3.json +52 -0
- package/pipette/definitions/2/general/single_channel/p50/1_4.json +52 -0
- package/pipette/definitions/2/general/single_channel/p50/1_5.json +52 -0
- package/pipette/definitions/2/general/single_channel/p50/3_0.json +67 -0
- package/pipette/definitions/2/general/single_channel/p50/3_3.json +67 -0
- package/pipette/definitions/2/general/single_channel/p50/3_4.json +67 -0
- package/pipette/definitions/2/general/single_channel/p50/3_5.json +67 -0
- package/pipette/definitions/2/geometry/eight_channel/p10/1_0.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p10/1_3.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p10/1_4.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p10/1_5.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p10/1_6.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p10/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/eight_channel/p1000/1_0.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p1000/3_0.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p1000/3_3.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p1000/3_4.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p1000/3_5.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p1000/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/eight_channel/p20/2_0.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p20/2_1.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p20/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/eight_channel/p300/1_0.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p300/1_3.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p300/1_4.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p300/1_5.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p300/2_0.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p300/2_1.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p300/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/eight_channel/p50/1_0.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p50/1_3.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p50/1_4.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p50/1_5.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p50/3_0.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p50/3_3.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p50/3_4.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p50/3_5.json +37 -0
- package/pipette/definitions/2/geometry/eight_channel/p50/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/ninety_six_channel/p1000/1_0.json +291 -0
- package/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_0.json +291 -0
- package/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_3.json +291 -0
- package/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_4.json +291 -0
- package/pipette/definitions/2/geometry/ninety_six_channel/p1000/3_5.json +291 -0
- package/pipette/definitions/2/geometry/ninety_six_channel/p1000/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/single_channel/p10/1_0.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p10/1_3.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p10/1_4.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p10/1_5.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p10/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/1_0.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/1_3.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/1_4.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/1_5.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/2_0.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/2_1.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/2_2.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/3_0.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/3_3.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/3_4.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/3_5.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p1000/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/single_channel/p20/2_0.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p20/2_1.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p20/2_2.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p20/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/single_channel/p300/1_0.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p300/1_3.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p300/1_4.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p300/1_5.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p300/2_0.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p300/2_1.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p300/placeholder.gltf +0 -0
- package/pipette/definitions/2/geometry/single_channel/p50/1_0.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p50/1_3.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p50/1_4.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p50/1_5.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p50/3_0.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p50/3_3.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p50/3_4.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p50/3_5.json +10 -0
- package/pipette/definitions/2/geometry/single_channel/p50/placeholder.gltf +0 -0
- package/pipette/definitions/2/liquid/eight_channel/p10/default/1_0.json +58 -0
- package/pipette/definitions/2/liquid/eight_channel/p10/default/1_3.json +58 -0
- package/pipette/definitions/2/liquid/eight_channel/p10/default/1_4.json +58 -0
- package/pipette/definitions/2/liquid/eight_channel/p10/default/1_5.json +47 -0
- package/pipette/definitions/2/liquid/eight_channel/p10/default/1_6.json +55 -0
- package/pipette/definitions/2/liquid/eight_channel/p1000/default/1_0.json +356 -0
- package/pipette/definitions/2/liquid/eight_channel/p1000/default/3_0.json +359 -0
- package/pipette/definitions/2/liquid/eight_channel/p1000/default/3_3.json +359 -0
- package/pipette/definitions/2/liquid/eight_channel/p1000/default/3_4.json +359 -0
- package/pipette/definitions/2/liquid/eight_channel/p1000/default/3_5.json +239 -0
- package/pipette/definitions/2/liquid/eight_channel/p20/default/2_0.json +311 -0
- package/pipette/definitions/2/liquid/eight_channel/p20/default/2_1.json +191 -0
- package/pipette/definitions/2/liquid/eight_channel/p300/default/1_0.json +67 -0
- package/pipette/definitions/2/liquid/eight_channel/p300/default/1_3.json +67 -0
- package/pipette/definitions/2/liquid/eight_channel/p300/default/1_4.json +67 -0
- package/pipette/definitions/2/liquid/eight_channel/p300/default/1_5.json +67 -0
- package/pipette/definitions/2/liquid/eight_channel/p300/default/2_0.json +190 -0
- package/pipette/definitions/2/liquid/eight_channel/p300/default/2_1.json +190 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/default/1_0.json +128 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/default/1_3.json +128 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/default/1_4.json +128 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/default/1_5.json +110 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/default/3_0.json +99 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/default/3_3.json +99 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/default/3_4.json +99 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/default/3_5.json +91 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_0.json +94 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_3.json +89 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_4.json +89 -0
- package/pipette/definitions/2/liquid/eight_channel/p50/lowVolumeDefault/3_5.json +89 -0
- package/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/1_0.json +188 -0
- package/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_0.json +188 -0
- package/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_3.json +188 -0
- package/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_4.json +188 -0
- package/pipette/definitions/2/liquid/ninety_six_channel/p1000/default/3_5.json +188 -0
- package/pipette/definitions/2/liquid/single_channel/p10/default/1_0.json +59 -0
- package/pipette/definitions/2/liquid/single_channel/p10/default/1_3.json +59 -0
- package/pipette/definitions/2/liquid/single_channel/p10/default/1_4.json +56 -0
- package/pipette/definitions/2/liquid/single_channel/p10/default/1_5.json +54 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/1_0.json +48 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/1_3.json +48 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/1_4.json +48 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/1_5.json +48 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/2_0.json +105 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/2_1.json +107 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/2_2.json +107 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/3_0.json +356 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/3_3.json +356 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/3_4.json +282 -0
- package/pipette/definitions/2/liquid/single_channel/p1000/default/3_5.json +204 -0
- package/pipette/definitions/2/liquid/single_channel/p20/default/2_0.json +431 -0
- package/pipette/definitions/2/liquid/single_channel/p20/default/2_1.json +251 -0
- package/pipette/definitions/2/liquid/single_channel/p20/default/2_2.json +311 -0
- package/pipette/definitions/2/liquid/single_channel/p300/default/1_0.json +99 -0
- package/pipette/definitions/2/liquid/single_channel/p300/default/1_3.json +99 -0
- package/pipette/definitions/2/liquid/single_channel/p300/default/1_4.json +99 -0
- package/pipette/definitions/2/liquid/single_channel/p300/default/1_5.json +75 -0
- package/pipette/definitions/2/liquid/single_channel/p300/default/2_0.json +188 -0
- package/pipette/definitions/2/liquid/single_channel/p300/default/2_1.json +188 -0
- package/pipette/definitions/2/liquid/single_channel/p50/default/1_0.json +119 -0
- package/pipette/definitions/2/liquid/single_channel/p50/default/1_3.json +128 -0
- package/pipette/definitions/2/liquid/single_channel/p50/default/1_4.json +128 -0
- package/pipette/definitions/2/liquid/single_channel/p50/default/1_5.json +104 -0
- package/pipette/definitions/2/liquid/single_channel/p50/default/3_0.json +98 -0
- package/pipette/definitions/2/liquid/single_channel/p50/default/3_3.json +98 -0
- package/pipette/definitions/2/liquid/single_channel/p50/default/3_4.json +100 -0
- package/pipette/definitions/2/liquid/single_channel/p50/default/3_5.json +80 -0
- package/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_0.json +78 -0
- package/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_3.json +78 -0
- package/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_4.json +78 -0
- package/pipette/definitions/2/liquid/single_channel/p50/lowVolumeDefault/3_5.json +76 -0
- package/pipette/fixtures/name/index.ts +19 -0
- package/pipette/fixtures/name/pipetteNameSpecFixtures.json +130 -0
- package/pipette/schemas/1/pipetteModelSpecsSchema.json +155 -0
- package/pipette/schemas/1/pipetteNameSpecsSchema.json +91 -0
- package/pipette/schemas/2/pipetteGeometrySchema.json +81 -0
- package/pipette/schemas/2/pipetteLiquidPropertiesSchema.json +120 -0
- package/pipette/schemas/2/pipettePropertiesSchema.json +287 -0
- package/protocol/README.md +12 -0
- package/protocol/fixtures/1/simple.json +73 -0
- package/protocol/fixtures/3/simple.json +1307 -0
- package/protocol/fixtures/3/testAllAtomicSingleV3.json +2281 -0
- package/protocol/fixtures/3/testTrickyLabwareV3.json +2577 -0
- package/protocol/fixtures/3/unusedPipette.json +1311 -0
- package/protocol/fixtures/4/pipetteMultiChannelProtocolV4.json +2561 -0
- package/protocol/fixtures/4/simpleV4.json +1309 -0
- package/protocol/fixtures/4/testMagneticModuleV4.json +2156 -0
- package/protocol/fixtures/4/testModulesProtocol.json +2561 -0
- package/protocol/fixtures/4/testTemperatureModuleV4.json +1480 -0
- package/protocol/fixtures/4/testThermocyclerModuleV4.json +2182 -0
- package/protocol/fixtures/4/transferSettings.json +5482 -0
- package/protocol/fixtures/5/multipleTipracks.json +2476 -0
- package/protocol/fixtures/5/multipleTipracksWithTC.json +3544 -0
- package/protocol/fixtures/5/simpleV5.json +1328 -0
- package/protocol/fixtures/6/heaterShakerCommands.json +1422 -0
- package/protocol/fixtures/6/heaterShakerCommandsWithResultsKey.json +4725 -0
- package/protocol/fixtures/6/multipleTempModules.json +11060 -0
- package/protocol/fixtures/6/multipleTipracks.json +5020 -0
- package/protocol/fixtures/6/multipleTipracksWithTC.json +7057 -0
- package/protocol/fixtures/6/oneTiprack.json +1388 -0
- package/protocol/fixtures/6/simpleV6.json +1494 -0
- package/protocol/fixtures/6/tempAndMagModuleCommands.json +1413 -0
- package/protocol/fixtures/6/transferSettings.json +11060 -0
- package/protocol/fixtures/7/moveLabware.json +1303 -0
- package/protocol/fixtures/7/simpleV7.json +1496 -0
- package/protocol/fixtures/8/moveLabware8.json +1309 -0
- package/protocol/fixtures/8/moveLabwareFlex8.json +1309 -0
- package/protocol/fixtures/8/simpleFlexV8.json +1475 -0
- package/protocol/fixtures/8/simpleV8.json +1473 -0
- package/protocol/index.ts +32 -0
- package/protocol/schemas/1.json +389 -0
- package/protocol/schemas/2.json +416 -0
- package/protocol/schemas/3.json +360 -0
- package/protocol/schemas/4.json +662 -0
- package/protocol/schemas/5.json +701 -0
- package/protocol/schemas/6.json +1225 -0
- package/protocol/schemas/7.json +290 -0
- package/protocol/schemas/8.json +157 -0
- package/protocol/types/schemaV1.ts +108 -0
- package/protocol/types/schemaV3.ts +131 -0
- package/protocol/types/schemaV4.ts +146 -0
- package/protocol/types/schemaV5.ts +34 -0
- package/protocol/types/schemaV5Addendum.ts +27 -0
- package/protocol/types/schemaV6/command/gantry.ts +146 -0
- package/protocol/types/schemaV6/command/index.ts +65 -0
- package/protocol/types/schemaV6/command/module.ts +302 -0
- package/protocol/types/schemaV6/command/pipetting.ts +114 -0
- package/protocol/types/schemaV6/command/setup.ts +127 -0
- package/protocol/types/schemaV6/command/timing.ts +58 -0
- package/protocol/types/schemaV6/index.ts +122 -0
- package/protocol/types/schemaV7/command/annotation.ts +37 -0
- package/protocol/types/schemaV7/command/calibration.ts +84 -0
- package/protocol/types/schemaV7/command/gantry.ts +154 -0
- package/protocol/types/schemaV7/command/incidental.ts +21 -0
- package/protocol/types/schemaV7/command/index.ts +76 -0
- package/protocol/types/schemaV7/command/module.ts +307 -0
- package/protocol/types/schemaV7/command/pipetting.ts +173 -0
- package/protocol/types/schemaV7/command/setup.ts +158 -0
- package/protocol/types/schemaV7/command/timing.ts +58 -0
- package/protocol/types/schemaV7/index.ts +98 -0
- package/protocol/types/schemaV8/index.ts +160 -0
- package/python/.coveragerc +4 -0
- package/python/.flake8 +32 -0
- package/python/Config.in +10 -0
- package/python/Makefile +134 -0
- package/python/Pipfile +28 -0
- package/python/Pipfile.lock +645 -0
- package/python/buildroot.mk +30 -0
- package/python/mypy.ini +41 -0
- package/python/opentrons_shared_data/__init__.py +17 -0
- package/python/opentrons_shared_data/_version.py +20 -0
- package/python/opentrons_shared_data/command/__init__.py +52 -0
- package/python/opentrons_shared_data/deck/__init__.py +96 -0
- package/python/opentrons_shared_data/deck/dev_types.py +180 -0
- package/python/opentrons_shared_data/errors/__init__.py +30 -0
- package/python/opentrons_shared_data/errors/categories.py +60 -0
- package/python/opentrons_shared_data/errors/codes.py +108 -0
- package/python/opentrons_shared_data/errors/exceptions.py +915 -0
- package/python/opentrons_shared_data/gripper/__init__.py +63 -0
- package/python/opentrons_shared_data/gripper/constants.py +5 -0
- package/python/opentrons_shared_data/gripper/gripper_definition.py +101 -0
- package/python/opentrons_shared_data/labware/__init__.py +22 -0
- package/python/opentrons_shared_data/labware/constants.py +7 -0
- package/python/opentrons_shared_data/labware/dev_types.py +140 -0
- package/python/opentrons_shared_data/labware/labware_definition.py +328 -0
- package/python/opentrons_shared_data/load.py +57 -0
- package/python/opentrons_shared_data/module/__init__.py +74 -0
- package/python/opentrons_shared_data/module/dev_types.py +141 -0
- package/python/opentrons_shared_data/pipette/__init__.py +107 -0
- package/python/opentrons_shared_data/pipette/dev_types.py +177 -0
- package/python/opentrons_shared_data/pipette/file_operation_helpers.py +37 -0
- package/python/opentrons_shared_data/pipette/load_data.py +261 -0
- package/python/opentrons_shared_data/pipette/model_constants.py +123 -0
- package/python/opentrons_shared_data/pipette/mutable_configurations.py +431 -0
- package/python/opentrons_shared_data/pipette/pipette_definition.py +503 -0
- package/python/opentrons_shared_data/pipette/pipette_load_name_conversions.py +236 -0
- package/python/opentrons_shared_data/pipette/scripts/__init__.py +0 -0
- package/python/opentrons_shared_data/pipette/scripts/build_json_script.py +469 -0
- package/python/opentrons_shared_data/pipette/scripts/update_configuration_files.py +450 -0
- package/python/opentrons_shared_data/pipette/types.py +193 -0
- package/python/opentrons_shared_data/protocol/__init__.py +13 -0
- package/python/opentrons_shared_data/protocol/constants.py +98 -0
- package/python/opentrons_shared_data/protocol/dev_types.py +436 -0
- package/python/opentrons_shared_data/protocol/models/__init__.py +48 -0
- package/python/opentrons_shared_data/protocol/models/protocol_schema_v6.py +145 -0
- package/python/opentrons_shared_data/protocol/models/protocol_schema_v7.py +95 -0
- package/python/opentrons_shared_data/protocol/models/protocol_schema_v8.py +108 -0
- package/python/opentrons_shared_data/protocol/models/shared_models.py +105 -0
- package/python/opentrons_shared_data/py.typed +0 -0
- package/python/opentrons_shared_data/robot/__init__.py +25 -0
- package/python/opentrons_shared_data/robot/dev_types.py +37 -0
- package/python/pytest.ini +2 -0
- package/python/setup.cfg +5 -0
- package/python/setup.py +179 -0
- package/python/tests/__init__.py +1 -0
- package/python/tests/conftest.py +0 -0
- package/python/tests/deck/__init__.py +0 -0
- package/python/tests/deck/test_list_names.py +12 -0
- package/python/tests/deck/test_position.py +113 -0
- package/python/tests/deck/test_typechecks.py +28 -0
- package/python/tests/errors/__init__.py +1 -0
- package/python/tests/errors/test_error_completeness.py +19 -0
- package/python/tests/errors/test_exceptions.py +74 -0
- package/python/tests/gripper/__init__.py +0 -0
- package/python/tests/gripper/test_definition.py +30 -0
- package/python/tests/gripper/test_load.py +16 -0
- package/python/tests/labware/__init__.py +13 -0
- package/python/tests/labware/test_typechecks.py +21 -0
- package/python/tests/module/__init__.py +20 -0
- package/python/tests/module/test_load.py +49 -0
- package/python/tests/module/test_typechecks.py +34 -0
- package/python/tests/pipette/__init__.py +0 -0
- package/python/tests/pipette/test_load_data.py +103 -0
- package/python/tests/pipette/test_mutable_configurations.py +266 -0
- package/python/tests/pipette/test_pipette_definition.py +183 -0
- package/python/tests/pipette/test_pipette_load_name_conversions.py +222 -0
- package/python/tests/pipette/test_typechecks.py +50 -0
- package/python/tests/pipette/test_validate_schema.py +37 -0
- package/python/tests/protocol/__init__.py +15 -0
- package/python/tests/protocol/test_protocol_schema_v6.py +107 -0
- package/python/tests/protocol/test_protocol_schema_v7.py +34 -0
- package/python/tests/protocol/test_protocol_schema_v8.py +20 -0
- package/python/tests/protocol/test_typechecks.py +36 -0
- package/python/tests/robot/__init__.py +0 -0
- package/python/tests/robot/test_typechecks.py +20 -0
- package/robot/definitions/1/ot2.json +5 -0
- package/robot/definitions/1/ot3.json +5 -0
- package/robot/schemas/1.json +30 -0
- package/tsconfig-data.json +24 -0
- package/tsconfig.json +17 -0
package/js/constants.ts
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import type { CutoutFixtureId, CutoutId, AddressableAreaName } from '../deck'
|
|
2
|
+
import type { ModuleType } from './types'
|
|
3
|
+
|
|
4
|
+
// constants for dealing with robot coordinate system (eg in labwareTools)
|
|
5
|
+
export const SLOT_LENGTH_MM = 127.76 // along X axis in robot coordinate system
|
|
6
|
+
|
|
7
|
+
export const SLOT_WIDTH_MM = 85.48 // along Y axis in robot coordinate system
|
|
8
|
+
|
|
9
|
+
// constants for SVG renders of the deck
|
|
10
|
+
export const SLOT_RENDER_WIDTH = SLOT_LENGTH_MM // along X axis in SVG coords
|
|
11
|
+
|
|
12
|
+
export const SLOT_RENDER_HEIGHT = SLOT_WIDTH_MM // along Y axis in SVG coords
|
|
13
|
+
|
|
14
|
+
// taken from opentrons_1_trash_1100ml_fixed v1's dimensions
|
|
15
|
+
export const FIXED_TRASH_RENDER_HEIGHT = 165.86 // along Y axis in SVG coords
|
|
16
|
+
|
|
17
|
+
// used for module visualization, remove this when we start using actual module dimensions
|
|
18
|
+
export const STD_SLOT_X_DIM = 128
|
|
19
|
+
export const STD_SLOT_Y_DIM = 86
|
|
20
|
+
export const STD_SLOT_DIVIDER_WIDTH = 4
|
|
21
|
+
|
|
22
|
+
export const OPENTRONS_LABWARE_NAMESPACE = 'opentrons'
|
|
23
|
+
export const FIXED_TRASH_ID = 'fixedTrash'
|
|
24
|
+
|
|
25
|
+
// TODO: IL 2020-02-19 These 3 constants are DEPRECATED because they're ambiguous model vs type.
|
|
26
|
+
export const THERMOCYCLER: 'thermocycler' = 'thermocycler'
|
|
27
|
+
export const TEMPDECK: 'tempdeck' = 'tempdeck'
|
|
28
|
+
export const MAGDECK: 'magdeck' = 'magdeck'
|
|
29
|
+
|
|
30
|
+
// these are the Module Def Schema v2 equivalents of the above. They should match the names of JSON definitions
|
|
31
|
+
// in shared-data/module/definitions/2.
|
|
32
|
+
export const MAGNETIC_MODULE_V1: 'magneticModuleV1' = 'magneticModuleV1'
|
|
33
|
+
export const MAGNETIC_MODULE_V2: 'magneticModuleV2' = 'magneticModuleV2'
|
|
34
|
+
export const TEMPERATURE_MODULE_V1: 'temperatureModuleV1' =
|
|
35
|
+
'temperatureModuleV1'
|
|
36
|
+
export const TEMPERATURE_MODULE_V2: 'temperatureModuleV2' =
|
|
37
|
+
'temperatureModuleV2'
|
|
38
|
+
export const THERMOCYCLER_MODULE_V1: 'thermocyclerModuleV1' =
|
|
39
|
+
'thermocyclerModuleV1'
|
|
40
|
+
export const THERMOCYCLER_MODULE_V2: 'thermocyclerModuleV2' =
|
|
41
|
+
'thermocyclerModuleV2'
|
|
42
|
+
export const HEATERSHAKER_MODULE_V1: 'heaterShakerModuleV1' =
|
|
43
|
+
'heaterShakerModuleV1'
|
|
44
|
+
|
|
45
|
+
export const MAGNETIC_BLOCK_V1: 'magneticBlockV1' = 'magneticBlockV1'
|
|
46
|
+
|
|
47
|
+
export const GRIPPER_V1: 'gripperV1' = 'gripperV1'
|
|
48
|
+
export const GRIPPER_V1_1: 'gripperV1.1' = 'gripperV1.1'
|
|
49
|
+
export const GRIPPER_V1_2: 'gripperV1.2' = 'gripperV1.2'
|
|
50
|
+
export const GRIPPER_MODELS = [GRIPPER_V1, GRIPPER_V1_1, GRIPPER_V1_2]
|
|
51
|
+
|
|
52
|
+
// robot display name
|
|
53
|
+
export const FLEX_DISPLAY_NAME: 'Opentrons Flex' = 'Opentrons Flex'
|
|
54
|
+
|
|
55
|
+
// pipette display categories
|
|
56
|
+
export const FLEX: 'FLEX' = 'FLEX'
|
|
57
|
+
export const GEN2: 'GEN2' = 'GEN2'
|
|
58
|
+
export const GEN1: 'GEN1' = 'GEN1'
|
|
59
|
+
|
|
60
|
+
// pipette mounts
|
|
61
|
+
export const LEFT: 'left' = 'left'
|
|
62
|
+
export const RIGHT: 'right' = 'right'
|
|
63
|
+
export const EXTENSION: 'extension' = 'extension'
|
|
64
|
+
|
|
65
|
+
// fake slot that PD uses to represent the slot the thermocycler sits in
|
|
66
|
+
export const SPAN7_8_10_11_SLOT: 'span7_8_10_11' = 'span7_8_10_11'
|
|
67
|
+
|
|
68
|
+
// NOTE: these are NOT module MODELs, they are `moduleType`s. Should match ENUM in module definition file.
|
|
69
|
+
export const TEMPERATURE_MODULE_TYPE: 'temperatureModuleType' =
|
|
70
|
+
'temperatureModuleType'
|
|
71
|
+
export const MAGNETIC_MODULE_TYPE: 'magneticModuleType' = 'magneticModuleType'
|
|
72
|
+
export const THERMOCYCLER_MODULE_TYPE: 'thermocyclerModuleType' =
|
|
73
|
+
'thermocyclerModuleType'
|
|
74
|
+
export const HEATERSHAKER_MODULE_TYPE: 'heaterShakerModuleType' =
|
|
75
|
+
'heaterShakerModuleType'
|
|
76
|
+
export const MAGNETIC_BLOCK_TYPE: 'magneticBlockType' = 'magneticBlockType'
|
|
77
|
+
|
|
78
|
+
export const MAGNETIC_MODULE_MODELS = [MAGNETIC_MODULE_V1, MAGNETIC_MODULE_V2]
|
|
79
|
+
|
|
80
|
+
export const NON_CONNECTING_MODULE_TYPES: ModuleType[] = [MAGNETIC_BLOCK_TYPE]
|
|
81
|
+
|
|
82
|
+
export const TEMPERATURE_MODULE_MODELS = [
|
|
83
|
+
TEMPERATURE_MODULE_V1,
|
|
84
|
+
TEMPERATURE_MODULE_V2,
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
export const THERMOCYCLER_MODULE_MODELS = [
|
|
88
|
+
THERMOCYCLER_MODULE_V1,
|
|
89
|
+
THERMOCYCLER_MODULE_V2,
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
export const HEATERSHAKER_MODULE_MODELS = [HEATERSHAKER_MODULE_V1]
|
|
93
|
+
|
|
94
|
+
export const MAGNETIC_BLOCK_MODELS = [MAGNETIC_BLOCK_V1]
|
|
95
|
+
|
|
96
|
+
export const MODULE_MODELS = [
|
|
97
|
+
...MAGNETIC_MODULE_MODELS,
|
|
98
|
+
...TEMPERATURE_MODULE_MODELS,
|
|
99
|
+
...THERMOCYCLER_MODULE_MODELS,
|
|
100
|
+
...HEATERSHAKER_MODULE_MODELS,
|
|
101
|
+
...MAGNETIC_BLOCK_MODELS,
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
export const MODULE_TYPES = [
|
|
105
|
+
TEMPERATURE_MODULE_TYPE,
|
|
106
|
+
MAGNETIC_MODULE_TYPE,
|
|
107
|
+
THERMOCYCLER_MODULE_TYPE,
|
|
108
|
+
HEATERSHAKER_MODULE_TYPE,
|
|
109
|
+
MAGNETIC_BLOCK_TYPE,
|
|
110
|
+
]
|
|
111
|
+
|
|
112
|
+
export const GEN_ONE_MULTI_PIPETTES = ['p10_multi', 'p50_multi', 'p300_multi']
|
|
113
|
+
|
|
114
|
+
export const IDENTITY_VECTOR = { x: 0, y: 0, z: 0 }
|
|
115
|
+
|
|
116
|
+
export const ROBOT_MODELS = ['OT-2 Standard', 'OT-3 Standard']
|
|
117
|
+
export const OT2_ROBOT_TYPE = 'OT-2 Standard' as const
|
|
118
|
+
export const FLEX_ROBOT_TYPE = 'OT-3 Standard' as const
|
|
119
|
+
|
|
120
|
+
// TODO(jr, 7/13/23): rename this constant to FLEX_PIPETTES
|
|
121
|
+
export const OT3_PIPETTES = [
|
|
122
|
+
'p300_single_flex',
|
|
123
|
+
'p1000_single_flex',
|
|
124
|
+
'p20_single_flex',
|
|
125
|
+
'p50_single_flex',
|
|
126
|
+
'p50_multi_flex',
|
|
127
|
+
'p1000_multi_flex',
|
|
128
|
+
'p1000_96',
|
|
129
|
+
]
|
|
130
|
+
export const OT2_PIPETTES = [
|
|
131
|
+
'p300_single',
|
|
132
|
+
'p300_multi',
|
|
133
|
+
'p300_single_gen2',
|
|
134
|
+
'p300_multi_gen2',
|
|
135
|
+
'p1000_single',
|
|
136
|
+
'p1000_single_gen2',
|
|
137
|
+
'p20_single_gen2',
|
|
138
|
+
'p20_multi_gen2',
|
|
139
|
+
'p50_single',
|
|
140
|
+
'p50_multi',
|
|
141
|
+
'p10_single',
|
|
142
|
+
'p10_multi',
|
|
143
|
+
]
|
|
144
|
+
|
|
145
|
+
// magnetic module info
|
|
146
|
+
export const MM: 'mm' = 'mm'
|
|
147
|
+
export const MAGNETIC_MODULES_MAX_ENGAGE_HEIGHT = 20
|
|
148
|
+
export const MAGNETIC_MODULE_V2_DISNEGAGED_HEIGHT = -2.5 // TODO(jr, 6/14/22): change this to -4 when ticket #9585 merges
|
|
149
|
+
export const MAGNETIC_MODULE_V1_DISNEGAGED_HEIGHT = -2.5
|
|
150
|
+
|
|
151
|
+
export const MAGNETIC_MODULE_TYPE_LABWARE_BOTTOM_HEIGHT = 0
|
|
152
|
+
|
|
153
|
+
export const CELSIUS: '°C' = '°C'
|
|
154
|
+
export const TEMP_MIN = 4
|
|
155
|
+
export const TEMP_MAX = 96
|
|
156
|
+
export const TEMP_BLOCK_MAX = 99
|
|
157
|
+
export const TEMP_LID_MIN = 37
|
|
158
|
+
export const TEMP_LID_MAX = 110
|
|
159
|
+
export const HS_TEMP_MIN = 37
|
|
160
|
+
export const HS_TEMP_MAX = 95
|
|
161
|
+
export const MICRO_LITERS = 'µL'
|
|
162
|
+
|
|
163
|
+
// Heater shaker module info
|
|
164
|
+
export const RPM: 'RPM' = 'RPM'
|
|
165
|
+
export const HS_RPM_MIN = 200
|
|
166
|
+
export const HS_RPM_MAX = 3000
|
|
167
|
+
export const TOO_HOT_TEMP = 48.9
|
|
168
|
+
export const MAX_LABWARE_HEIGHT_EAST_WEST_HEATER_SHAKER_MM = 53
|
|
169
|
+
|
|
170
|
+
export const OT2_STANDARD_MODEL: 'OT-2 Standard' = 'OT-2 Standard'
|
|
171
|
+
export const OT2_STANDARD_DECKID: 'ot2_standard' = 'ot2_standard'
|
|
172
|
+
export const FLEX_STANDARD_MODEL: 'OT-3 Standard' = 'OT-3 Standard'
|
|
173
|
+
export const FLEX_STANDARD_DECKID: 'ot3_standard' = 'ot3_standard'
|
|
174
|
+
|
|
175
|
+
export const SINGLE_CHANNEL: 'Single-Channel' = 'Single-Channel'
|
|
176
|
+
export const EIGHT_CHANNEL: '8-Channel' = '8-Channel'
|
|
177
|
+
export const NINETY_SIX_CHANNEL: '96-Channel' = '96-Channel'
|
|
178
|
+
export const SINGLE_MOUNT_PIPETTES: 'Single-Channel_and_8-Channel' =
|
|
179
|
+
'Single-Channel_and_8-Channel'
|
|
180
|
+
|
|
181
|
+
// Thermocycler module info
|
|
182
|
+
export const TC_MODULE_LOCATION_OT2: '7,8,10,11' = '7,8,10,11'
|
|
183
|
+
export const TC_MODULE_LOCATION_OT3: 'A1+B1' = 'A1+B1'
|
|
184
|
+
|
|
185
|
+
export const WEIGHT_OF_96_CHANNEL: '~10kg' = '~10kg'
|
|
186
|
+
|
|
187
|
+
export const SINGLE_LEFT_CUTOUTS: CutoutId[] = [
|
|
188
|
+
'cutoutA1',
|
|
189
|
+
'cutoutB1',
|
|
190
|
+
'cutoutC1',
|
|
191
|
+
'cutoutD1',
|
|
192
|
+
]
|
|
193
|
+
|
|
194
|
+
export const SINGLE_CENTER_CUTOUTS: CutoutId[] = [
|
|
195
|
+
'cutoutA2',
|
|
196
|
+
'cutoutB2',
|
|
197
|
+
'cutoutC2',
|
|
198
|
+
'cutoutD2',
|
|
199
|
+
]
|
|
200
|
+
|
|
201
|
+
export const SINGLE_RIGHT_CUTOUTS: CutoutId[] = [
|
|
202
|
+
'cutoutA3',
|
|
203
|
+
'cutoutB3',
|
|
204
|
+
'cutoutC3',
|
|
205
|
+
'cutoutD3',
|
|
206
|
+
]
|
|
207
|
+
|
|
208
|
+
export const STAGING_AREA_CUTOUTS: CutoutId[] = [
|
|
209
|
+
'cutoutA3',
|
|
210
|
+
'cutoutB3',
|
|
211
|
+
'cutoutC3',
|
|
212
|
+
'cutoutD3',
|
|
213
|
+
]
|
|
214
|
+
|
|
215
|
+
export const WASTE_CHUTE_CUTOUT: 'cutoutD3' = 'cutoutD3'
|
|
216
|
+
|
|
217
|
+
export const A1_ADDRESSABLE_AREA: 'A1' = 'A1'
|
|
218
|
+
export const A2_ADDRESSABLE_AREA: 'A2' = 'A2'
|
|
219
|
+
export const A3_ADDRESSABLE_AREA: 'A3' = 'A3'
|
|
220
|
+
export const A4_ADDRESSABLE_AREA: 'A4' = 'A4'
|
|
221
|
+
export const B1_ADDRESSABLE_AREA: 'B1' = 'B1'
|
|
222
|
+
export const B2_ADDRESSABLE_AREA: 'B2' = 'B2'
|
|
223
|
+
export const B3_ADDRESSABLE_AREA: 'B3' = 'B3'
|
|
224
|
+
export const B4_ADDRESSABLE_AREA: 'B4' = 'B4'
|
|
225
|
+
export const C1_ADDRESSABLE_AREA: 'C1' = 'C1'
|
|
226
|
+
export const C2_ADDRESSABLE_AREA: 'C2' = 'C2'
|
|
227
|
+
export const C3_ADDRESSABLE_AREA: 'C3' = 'C3'
|
|
228
|
+
export const C4_ADDRESSABLE_AREA: 'C4' = 'C4'
|
|
229
|
+
export const D1_ADDRESSABLE_AREA: 'D1' = 'D1'
|
|
230
|
+
export const D2_ADDRESSABLE_AREA: 'D2' = 'D2'
|
|
231
|
+
export const D3_ADDRESSABLE_AREA: 'D3' = 'D3'
|
|
232
|
+
export const D4_ADDRESSABLE_AREA: 'D4' = 'D4'
|
|
233
|
+
|
|
234
|
+
export const MOVABLE_TRASH_A1_ADDRESSABLE_AREA: 'movableTrashA1' =
|
|
235
|
+
'movableTrashA1'
|
|
236
|
+
export const MOVABLE_TRASH_A3_ADDRESSABLE_AREA: 'movableTrashA3' =
|
|
237
|
+
'movableTrashA3'
|
|
238
|
+
export const MOVABLE_TRASH_B1_ADDRESSABLE_AREA: 'movableTrashB1' =
|
|
239
|
+
'movableTrashB1'
|
|
240
|
+
export const MOVABLE_TRASH_B3_ADDRESSABLE_AREA: 'movableTrashB3' =
|
|
241
|
+
'movableTrashB3'
|
|
242
|
+
export const MOVABLE_TRASH_C1_ADDRESSABLE_AREA: 'movableTrashC1' =
|
|
243
|
+
'movableTrashC1'
|
|
244
|
+
export const MOVABLE_TRASH_C3_ADDRESSABLE_AREA: 'movableTrashC3' =
|
|
245
|
+
'movableTrashC3'
|
|
246
|
+
export const MOVABLE_TRASH_D1_ADDRESSABLE_AREA: 'movableTrashD1' =
|
|
247
|
+
'movableTrashD1'
|
|
248
|
+
export const MOVABLE_TRASH_D3_ADDRESSABLE_AREA: 'movableTrashD3' =
|
|
249
|
+
'movableTrashD3'
|
|
250
|
+
|
|
251
|
+
export const ONE_AND_EIGHT_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA: '1and8ChannelWasteChute' =
|
|
252
|
+
'1and8ChannelWasteChute'
|
|
253
|
+
export const NINETY_SIX_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA: '96ChannelWasteChute' =
|
|
254
|
+
'96ChannelWasteChute'
|
|
255
|
+
export const GRIPPER_WASTE_CHUTE_ADDRESSABLE_AREA: 'gripperWasteChute' =
|
|
256
|
+
'gripperWasteChute'
|
|
257
|
+
|
|
258
|
+
export const FLEX_SINGLE_SLOT_ADDRESSABLE_AREAS: AddressableAreaName[] = [
|
|
259
|
+
A1_ADDRESSABLE_AREA,
|
|
260
|
+
A2_ADDRESSABLE_AREA,
|
|
261
|
+
A3_ADDRESSABLE_AREA,
|
|
262
|
+
B1_ADDRESSABLE_AREA,
|
|
263
|
+
B2_ADDRESSABLE_AREA,
|
|
264
|
+
B3_ADDRESSABLE_AREA,
|
|
265
|
+
C1_ADDRESSABLE_AREA,
|
|
266
|
+
C2_ADDRESSABLE_AREA,
|
|
267
|
+
C3_ADDRESSABLE_AREA,
|
|
268
|
+
D1_ADDRESSABLE_AREA,
|
|
269
|
+
D2_ADDRESSABLE_AREA,
|
|
270
|
+
D3_ADDRESSABLE_AREA,
|
|
271
|
+
]
|
|
272
|
+
|
|
273
|
+
export const FLEX_STAGING_AREA_SLOT_ADDRESSABLE_AREAS: AddressableAreaName[] = [
|
|
274
|
+
A4_ADDRESSABLE_AREA,
|
|
275
|
+
B4_ADDRESSABLE_AREA,
|
|
276
|
+
C4_ADDRESSABLE_AREA,
|
|
277
|
+
D4_ADDRESSABLE_AREA,
|
|
278
|
+
]
|
|
279
|
+
|
|
280
|
+
export const MOVABLE_TRASH_ADDRESSABLE_AREAS: AddressableAreaName[] = [
|
|
281
|
+
MOVABLE_TRASH_A1_ADDRESSABLE_AREA,
|
|
282
|
+
MOVABLE_TRASH_A3_ADDRESSABLE_AREA,
|
|
283
|
+
MOVABLE_TRASH_B1_ADDRESSABLE_AREA,
|
|
284
|
+
MOVABLE_TRASH_B3_ADDRESSABLE_AREA,
|
|
285
|
+
MOVABLE_TRASH_C1_ADDRESSABLE_AREA,
|
|
286
|
+
MOVABLE_TRASH_C3_ADDRESSABLE_AREA,
|
|
287
|
+
MOVABLE_TRASH_D1_ADDRESSABLE_AREA,
|
|
288
|
+
MOVABLE_TRASH_D3_ADDRESSABLE_AREA,
|
|
289
|
+
]
|
|
290
|
+
|
|
291
|
+
export const WASTE_CHUTE_ADDRESSABLE_AREAS: AddressableAreaName[] = [
|
|
292
|
+
ONE_AND_EIGHT_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA,
|
|
293
|
+
NINETY_SIX_CHANNEL_WASTE_CHUTE_ADDRESSABLE_AREA,
|
|
294
|
+
GRIPPER_WASTE_CHUTE_ADDRESSABLE_AREA,
|
|
295
|
+
]
|
|
296
|
+
|
|
297
|
+
export const SINGLE_LEFT_SLOT_FIXTURE: 'singleLeftSlot' = 'singleLeftSlot'
|
|
298
|
+
export const SINGLE_CENTER_SLOT_FIXTURE: 'singleCenterSlot' = 'singleCenterSlot'
|
|
299
|
+
export const SINGLE_RIGHT_SLOT_FIXTURE: 'singleRightSlot' = 'singleRightSlot'
|
|
300
|
+
|
|
301
|
+
export const STAGING_AREA_RIGHT_SLOT_FIXTURE: 'stagingAreaRightSlot' =
|
|
302
|
+
'stagingAreaRightSlot'
|
|
303
|
+
|
|
304
|
+
export const TRASH_BIN_ADAPTER_FIXTURE: 'trashBinAdapter' = 'trashBinAdapter'
|
|
305
|
+
|
|
306
|
+
export const WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE: 'wasteChuteRightAdapterCovered' =
|
|
307
|
+
'wasteChuteRightAdapterCovered'
|
|
308
|
+
export const WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE: 'wasteChuteRightAdapterNoCover' =
|
|
309
|
+
'wasteChuteRightAdapterNoCover'
|
|
310
|
+
export const STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE: 'stagingAreaSlotWithWasteChuteRightAdapterCovered' =
|
|
311
|
+
'stagingAreaSlotWithWasteChuteRightAdapterCovered'
|
|
312
|
+
export const STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE: 'stagingAreaSlotWithWasteChuteRightAdapterNoCover' =
|
|
313
|
+
'stagingAreaSlotWithWasteChuteRightAdapterNoCover'
|
|
314
|
+
|
|
315
|
+
export const SINGLE_SLOT_FIXTURES: CutoutFixtureId[] = [
|
|
316
|
+
SINGLE_LEFT_SLOT_FIXTURE,
|
|
317
|
+
SINGLE_CENTER_SLOT_FIXTURE,
|
|
318
|
+
SINGLE_RIGHT_SLOT_FIXTURE,
|
|
319
|
+
]
|
|
320
|
+
|
|
321
|
+
export const WASTE_CHUTE_FIXTURES: CutoutFixtureId[] = [
|
|
322
|
+
WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE,
|
|
323
|
+
WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE,
|
|
324
|
+
STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE,
|
|
325
|
+
STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE,
|
|
326
|
+
]
|
|
327
|
+
|
|
328
|
+
export const WASTE_CHUTE_ONLY_FIXTURES: CutoutFixtureId[] = [
|
|
329
|
+
WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE,
|
|
330
|
+
WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE,
|
|
331
|
+
]
|
|
332
|
+
|
|
333
|
+
export const WASTE_CHUTE_STAGING_AREA_FIXTURES: CutoutFixtureId[] = [
|
|
334
|
+
STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE,
|
|
335
|
+
STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE,
|
|
336
|
+
]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import isEqual from 'lodash/isEqual'
|
|
2
|
+
import isObject from 'lodash/isObject'
|
|
3
|
+
import transform from 'lodash/transform'
|
|
4
|
+
|
|
5
|
+
const difference = (object: any, base: any): any => {
|
|
6
|
+
const changes = (object: any, base: any): any => {
|
|
7
|
+
return transform(object, function (result, value, key) {
|
|
8
|
+
if (!isEqual(value, base[key])) {
|
|
9
|
+
result[key] =
|
|
10
|
+
isObject(value) && isObject(base[key])
|
|
11
|
+
? changes(value, base[key])
|
|
12
|
+
: value
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return changes(object, base)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// deepEqual won't always return a diff, Cypress doesn't fully support object diffs :(
|
|
21
|
+
// also Cypress doesn't seem to support logging to the console? So throwing the diff as an error instead
|
|
22
|
+
export const expectDeepEqual = (assert: any, a: any, b: any): void => {
|
|
23
|
+
try {
|
|
24
|
+
assert.deepEqual(a, b)
|
|
25
|
+
} catch (e) {
|
|
26
|
+
// visualize undefineds
|
|
27
|
+
const replacer = (key: string, value: unknown): unknown =>
|
|
28
|
+
typeof value === 'undefined' ? '__undefined__' : value
|
|
29
|
+
|
|
30
|
+
throw Error(
|
|
31
|
+
'Expected deep equal. Diff is: ' +
|
|
32
|
+
JSON.stringify(difference(a, b), replacer, 4)
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
}
|
package/js/errors.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import errorDefinitions from '../errors/definitions/1/errors.json'
|
|
2
|
+
|
|
3
|
+
export type ErrorCodes = keyof typeof errorDefinitions.codes
|
|
4
|
+
export type ErrorCategories = keyof typeof errorDefinitions.categories
|
|
5
|
+
|
|
6
|
+
export interface ErrorCategory {
|
|
7
|
+
detail: string
|
|
8
|
+
codePrefix: string
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ErrorBody {
|
|
12
|
+
detail: string
|
|
13
|
+
category: ErrorCategory
|
|
14
|
+
code: ErrorCodes
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface JSONErrorBody {
|
|
18
|
+
detail: string
|
|
19
|
+
category: ErrorCategories
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function getError(code: ErrorCodes): ErrorBody | null {
|
|
23
|
+
return errorDefinitions.codes[code]
|
|
24
|
+
? {
|
|
25
|
+
code: code,
|
|
26
|
+
detail: errorDefinitions.codes[code].detail,
|
|
27
|
+
category:
|
|
28
|
+
errorDefinitions.categories[
|
|
29
|
+
(errorDefinitions.codes[code] as JSONErrorBody).category
|
|
30
|
+
],
|
|
31
|
+
}
|
|
32
|
+
: null
|
|
33
|
+
}
|
package/js/fixtures.ts
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FLEX_ROBOT_TYPE,
|
|
3
|
+
STAGING_AREA_RIGHT_SLOT_FIXTURE,
|
|
4
|
+
TRASH_BIN_ADAPTER_FIXTURE,
|
|
5
|
+
WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE,
|
|
6
|
+
WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE,
|
|
7
|
+
STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE,
|
|
8
|
+
STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE,
|
|
9
|
+
} from './constants'
|
|
10
|
+
import type { CutoutFixtureId } from '../deck'
|
|
11
|
+
import type {
|
|
12
|
+
AddressableArea,
|
|
13
|
+
CoordinateTuple,
|
|
14
|
+
Cutout,
|
|
15
|
+
DeckDefinition,
|
|
16
|
+
OT2Cutout,
|
|
17
|
+
} from './types'
|
|
18
|
+
|
|
19
|
+
export function getCutoutDisplayName(cutout: Cutout): string {
|
|
20
|
+
return cutout.replace('cutout', '')
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// mapping of OT-2 deck slots to cutouts
|
|
24
|
+
export const OT2_CUTOUT_BY_SLOT_ID: { [slotId: string]: OT2Cutout } = {
|
|
25
|
+
1: 'cutout1',
|
|
26
|
+
2: 'cutout2',
|
|
27
|
+
3: 'cutout3',
|
|
28
|
+
4: 'cutout4',
|
|
29
|
+
5: 'cutout5',
|
|
30
|
+
6: 'cutout6',
|
|
31
|
+
7: 'cutout7',
|
|
32
|
+
8: 'cutout8',
|
|
33
|
+
9: 'cutout9',
|
|
34
|
+
10: 'cutout10',
|
|
35
|
+
11: 'cutout11',
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// mapping of Flex deck slots to cutouts
|
|
39
|
+
export const FLEX_CUTOUT_BY_SLOT_ID: { [slotId: string]: Cutout } = {
|
|
40
|
+
A1: 'cutoutA1',
|
|
41
|
+
A2: 'cutoutA2',
|
|
42
|
+
A3: 'cutoutA3',
|
|
43
|
+
A4: 'cutoutA3',
|
|
44
|
+
B1: 'cutoutB1',
|
|
45
|
+
B2: 'cutoutB2',
|
|
46
|
+
B3: 'cutoutB3',
|
|
47
|
+
B4: 'cutoutB3',
|
|
48
|
+
C1: 'cutoutC1',
|
|
49
|
+
C2: 'cutoutC2',
|
|
50
|
+
C3: 'cutoutC3',
|
|
51
|
+
C4: 'cutoutC3',
|
|
52
|
+
D1: 'cutoutD1',
|
|
53
|
+
D2: 'cutoutD2',
|
|
54
|
+
D3: 'cutoutD3',
|
|
55
|
+
D4: 'cutoutD3',
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// returns the position associated with a slot id
|
|
59
|
+
export function getPositionFromSlotId(
|
|
60
|
+
slotId: string,
|
|
61
|
+
deckDef: DeckDefinition
|
|
62
|
+
): CoordinateTuple | null {
|
|
63
|
+
const cutoutWithSlot =
|
|
64
|
+
deckDef.robot.model === FLEX_ROBOT_TYPE
|
|
65
|
+
? FLEX_CUTOUT_BY_SLOT_ID[slotId]
|
|
66
|
+
: OT2_CUTOUT_BY_SLOT_ID[slotId]
|
|
67
|
+
|
|
68
|
+
const cutoutPosition =
|
|
69
|
+
deckDef.locations.cutouts.find(cutout => cutout.id === cutoutWithSlot)
|
|
70
|
+
?.position ?? null
|
|
71
|
+
|
|
72
|
+
// adjust for offset from cutout
|
|
73
|
+
const offsetFromCutoutFixture = getAddressableAreaFromSlotId(slotId, deckDef)
|
|
74
|
+
?.offsetFromCutoutFixture ?? [0, 0, 0]
|
|
75
|
+
|
|
76
|
+
const slotPosition: CoordinateTuple | null =
|
|
77
|
+
cutoutPosition != null
|
|
78
|
+
? [
|
|
79
|
+
cutoutPosition[0] + offsetFromCutoutFixture[0],
|
|
80
|
+
cutoutPosition[1] + offsetFromCutoutFixture[1],
|
|
81
|
+
cutoutPosition[2] + offsetFromCutoutFixture[2],
|
|
82
|
+
]
|
|
83
|
+
: null
|
|
84
|
+
|
|
85
|
+
return slotPosition
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function getAddressableAreaFromSlotId(
|
|
89
|
+
slotId: string,
|
|
90
|
+
deckDef: DeckDefinition
|
|
91
|
+
): AddressableArea | null {
|
|
92
|
+
return (
|
|
93
|
+
deckDef.locations.addressableAreas.find(
|
|
94
|
+
addressableArea => addressableArea.id === slotId
|
|
95
|
+
) ?? null
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function getFixtureDisplayName(
|
|
100
|
+
cutoutFixtureId: CutoutFixtureId | null
|
|
101
|
+
): string {
|
|
102
|
+
if (cutoutFixtureId === STAGING_AREA_RIGHT_SLOT_FIXTURE) {
|
|
103
|
+
return 'Staging area slot'
|
|
104
|
+
} else if (cutoutFixtureId === TRASH_BIN_ADAPTER_FIXTURE) {
|
|
105
|
+
return 'Trash bin'
|
|
106
|
+
} else if (cutoutFixtureId === WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE) {
|
|
107
|
+
return 'Waste chute only'
|
|
108
|
+
} else if (cutoutFixtureId === WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE) {
|
|
109
|
+
return 'Waste chute only with cover'
|
|
110
|
+
} else if (
|
|
111
|
+
cutoutFixtureId ===
|
|
112
|
+
STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_NO_COVER_FIXTURE
|
|
113
|
+
) {
|
|
114
|
+
return 'Waste chute with staging area slot'
|
|
115
|
+
} else if (
|
|
116
|
+
cutoutFixtureId ===
|
|
117
|
+
STAGING_AREA_SLOT_WITH_WASTE_CHUTE_RIGHT_ADAPTER_COVERED_FIXTURE
|
|
118
|
+
) {
|
|
119
|
+
return 'Waste chute with staging area slot and cover'
|
|
120
|
+
} else {
|
|
121
|
+
return 'Slot'
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const STANDARD_OT2_SLOTS = [
|
|
126
|
+
'1',
|
|
127
|
+
'2',
|
|
128
|
+
'3',
|
|
129
|
+
'4',
|
|
130
|
+
'5',
|
|
131
|
+
'6',
|
|
132
|
+
'7',
|
|
133
|
+
'8',
|
|
134
|
+
'9',
|
|
135
|
+
'10',
|
|
136
|
+
'11',
|
|
137
|
+
]
|
|
138
|
+
|
|
139
|
+
const STANDARD_FLEX_SLOTS = [
|
|
140
|
+
'A1',
|
|
141
|
+
'A2',
|
|
142
|
+
'A3',
|
|
143
|
+
'B1',
|
|
144
|
+
'B2',
|
|
145
|
+
'B3',
|
|
146
|
+
'C1',
|
|
147
|
+
'C2',
|
|
148
|
+
'C3',
|
|
149
|
+
'D1',
|
|
150
|
+
'D2',
|
|
151
|
+
'D3',
|
|
152
|
+
]
|
|
153
|
+
|
|
154
|
+
export const isAddressableAreaStandardSlot = (
|
|
155
|
+
addressableAreaId: string,
|
|
156
|
+
deckDef: DeckDefinition
|
|
157
|
+
): boolean =>
|
|
158
|
+
(deckDef.robot.model === FLEX_ROBOT_TYPE
|
|
159
|
+
? STANDARD_FLEX_SLOTS
|
|
160
|
+
: STANDARD_OT2_SLOTS
|
|
161
|
+
).includes(addressableAreaId)
|