From e50194f055e2330a999d40985d1a8f8c12e90c25 Mon Sep 17 00:00:00 2001 From: Josh McVey Date: Tue, 23 Apr 2024 13:44:01 -0400 Subject: [PATCH] fix(test): snapshot file naming cleanup --- app-testing/.gitignore | 4 +- app-testing/automation/data/protocol.py | 7 +- .../automation/data/protocol_category.py | 17 - app-testing/automation/data/protocol_files.py | 112 ---- .../data/protocol_with_overrides.py | 7 +- app-testing/automation/data/protocols.py | 529 ++++++------------ .../data/protocols_with_overrides.py | 19 +- app-testing/example.env | 186 +++--- .../generated_protocols/.keepme | 0 ...ETTES_TC_verifyThermocyclerLoadedSlots.py} | 0 ...ETTES_TC_verifyThermocyclerLoadedSlots.py} | 0 ...GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment.py} | 0 ...IP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4.py} | 0 ...0M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x.py} | 0 ...5_P1000S_None_SimpleNormalizeLongRight.py} | 0 ..._96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3.py} | 0 ...RIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3.py} | 0 ...0_96_GRIP_HS_MB_TM_MagMaxRNAExtraction.py} | 0 ...96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction.py} | 0 ...IP_HS_TM_QuickZymoMagbeadRNAExtraction.py} | 0 ..._15_P50M_P1000M_KAPALibraryQuantLongv2.py} | 0 ...ETTES_TC_verifyThermocyclerLoadedSlots.py} | 0 ...00_96_GRIP_DeckConfiguration1NoModules.py} | 0 ..._DeckConfiguration1NoModulesNoFixtures.py} | 0 ...96_GRIP_HS_MB_TC_TM_DeckConfiguration1.py} | 0 ..._MB_TC_TM_DeckConfiguration1NoFixtures.py} | 0 ..._v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke.py} | 0 ...B_TC_TM_TriggerPrepareForMountMovement.py} | 0 ..._16_P1000_96_TC_PartialTipPickupColumn.py} | 0 ..._16_P1000_96_TC_PartialTipPickupSingle.py} | 0 ...ETTES_TC_verifyThermocyclerLoadedSlots.py} | 0 ... => Flex_S_v2_18_NO_PIPETTES_GoldenRTP.py} | 0 ..._16_NO_PIPETTES_AccessToFixedTrashProp.py} | 0 ...PETTES_MM_MagneticModuleInFlexProtocol.py} | 0 ...TES_TC_TrashBinAndThermocyclerConflict.py} | 0 ...ex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2.py} | 0 ...NO_PIPETTES_TM_ModuleInStagingAreaCol3.py} | 0 ...NO_PIPETTES_TM_ModuleInStagingAreaCol4.py} | 0 ...lex_X_v2_16_NO_PIPETTES_TrashBinInCol2.py} | 0 ..._NO_PIPETTES_TrashBinInStagingAreaCol3.py} | 0 ..._NO_PIPETTES_TrashBinInStagingAreaCol4.py} | 0 ...x_X_v2_16_P1000_96_DropTipsWithNoTrash.py} | 0 ..._P1000_96_GRIP_DropLabwareIntoTrashBin.py} | 0 ...artialTipPickupThermocyclerLidConflict.py} | 0 ...0_96_TC_PartialTipPickupTryToReturnTip.py} | 0 ...TC_pipetteCollisionWithThermocyclerLid.py} | 0 ...petteCollisionWithThermocyclerLidClips.py} | 0 ...1000_96_TM_ModuleAndWasteChuteConflict.py} | 0 ...300MGen2_None_OT2PipetteInFlexProtocol.py} | 0 ...2_18_NO_PIPETTES_DescriptionTooLongRTP.py} | 0 ...18_NO_PIPETTES_Overrides_BadTypesInRTP.py} | 0 ...S_Overrides_DefaultChoiceNoMatchChoice.py} | 0 ...IPETTES_Overrides_DefaultOutOfRangeRTP.py} | 0 ..._GRIP_TC_TM_GripperCollisionWithTips.json} | 0 ...OT2_S_v2_11_P10S_P300M_MM_TC1_TM_Swift.py} | 0 ..._Python310SyntaxRobotAnalysisOnlyError.py} | 0 ...py => OT2_S_v2_12_P300M_P20S_FailOnRun.py} | 0 ..._v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3.py} | 0 ...13_P300M_P20S_MM_TC_TM_Smoke620Release.py} | 0 ...ETTES_TC_VerifyThermocyclerLoadedSlots.py} | 0 ..._v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3.py} | 0 ...ETTES_TC_VerifyThermocyclerLoadedSlots.py} | 0 ..._v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3.py} | 0 ...5_P300M_P20S_HS_TC_TM_dispense_changes.py} | 0 ...ETTES_TC_VerifyThermocyclerLoadedSlots.py} | 0 ...2_16_NO_PIPETTES_verifyDoesNotDeadlock.py} | 0 ..._v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3.py} | 0 ...0S_HS_TC_TM_aspirateDispenseMix0Volume.py} | 0 ...6_P300M_P20S_HS_TC_TM_dispense_changes.py} | 0 ..._P300M_P20S_aspirateDispenseMix0Volume.py} | 0 ..._verifyNoFloatingPointErrorInPipetting.py} | 0 ...ETTES_TC_VerifyThermocyclerLoadedSlots.py} | 0 ..._v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3.py} | 0 ...7_P300M_P20S_HS_TC_TM_dispense_changes.py} | 0 ... OT2_S_v2_18_NO_PIPETTES_GoldenRTP_OT2.py} | 0 ...S_v2_18_None_None_duplicateChoiceValue.py} | 0 ...S_None_MM1_MM2_EngageMagHeightFromBase.py} | 0 ...> OT2_S_v2_3_P300S_None_MM1_MM2_TM_Mix.py} | 0 ...py => OT2_S_v2_4_P300M_None_MM_TM_Zymo.py} | 0 ...py => OT2_S_v2_7_P20S_None_Walkthrough.py} | 0 ..._v3_P300SGen1_None_Gen1PipetteSimple.json} | 0 ...> OT2_S_v4_P300M_P20S_MM_TM_TC1_PD40.json} | 0 ...2_S_v4_P300S_None_MM_TM_TM_MOAMTemps.json} | 0 ... OT2_S_v6_P1000S_None_SimpleTransfer.json} | 0 ..._P20S_P300M_TransferReTransferLiquid.json} | 0 ...2_S_v6_P300M_P20S_HS_Smoke620release.json} | 0 ...v6_P300M_P20S_MixTransferManyLiquids.json} | 0 ...0M_P300S_HS_HS_NormalUseWithTransfer.json} | 0 ...11_P300S_TC1_TC2_ThermocyclerMoamError.py} | 0 ...T2_X_v2_13_None_None_PythonSyntaxError.py} | 0 ...e_HS_HeaterShakerConflictWithTrashBin1.py} | 0 ...e_HS_HeaterShakerConflictWithTrashBin2.py} | 0 ...T2_X_v2_18_None_None_NoRTPdisplay_name.py} | 0 ... OT2_X_v2_18_None_None_StrRTPwith_unit.py} | 0 ..._18_None_None_duplicateRTPVariableName.py} | 0 ...r.py => OT2_X_v2_7_P300S_TwinningError.py} | 0 ...2_X_v4_P300M_P20S_MM_TC1_TM_e2eTests.json} | 0 ...=> OT2_X_v6_P20S_None_SimpleTransfer.json} | 0 ...> OT2_X_v6_P20S_P300M_HS_HSCollision.json} | 0 ..._X_v6_P300M_P20S_HS_MM_TM_TC_AllMods.json} | 0 app-testing/files/protocols/README.md | 31 +- ...InRTP_Override_wrong_type_in_maximum].json | 18 + ...InRTP_Override_wrong_type_in_minimum].json | 18 + ...P_Override_default_less_than_minimum].json | 18 + ...Override_wrong_type_in_variable_name].json | 18 + ...verride_default_greater_than_maximum].json | 18 + ...ride_int_default_no_matching_choices].json | 18 + ...pesInRTP_Override_wrong_type_in_unit].json | 18 + ...ride_str_default_no_matching_choices].json | 18 + ...de_wrong_type_in_choice_display_name].json | 18 + ...de_float_default_no_matching_choices].json | 18 + ...P_Override_wrong_type_in_description].json | 18 + ..._Override_wrong_type_in_choice_value].json | 18 + ...InRTP_Override_wrong_type_in_default].json | 18 + ..._Override_wrong_type_in_display_name].json | 18 + 115 files changed, 547 insertions(+), 617 deletions(-) delete mode 100644 app-testing/automation/data/protocol_category.py delete mode 100644 app-testing/automation/data/protocol_files.py rename app-testing/files/{protocols => }/generated_protocols/.keepme (100%) rename app-testing/files/protocols/{Flex/Success/v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py => Flex_S_v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py => Flex_S_v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment.py => Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4.py => Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x.py => Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P1000S_None_SimpleNormalizeLongRight.py => Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3.py => Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3.py => Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction.py => Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction.py => Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction.py => Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_15_P50M_P1000M_KAPALibraryQuantLongv2.py => Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py => Flex_S_v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_16_P1000_96_GRIP_DeckConfiguration1NoModules.py => Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures.py => Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1.py => Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures.py => Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke.py => Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement.py => Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_16_P1000_96_TC_PartialTipPickupColumn.py => Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_16_P1000_96_TC_PartialTipPickupSingle.py => Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py => Flex_S_v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py} (100%) rename app-testing/files/protocols/{Flex/Success/v2_18_NO_PIPETTES_GoldenRTP.py => Flex_S_v2_18_NO_PIPETTES_GoldenRTP.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_NO_PIPETTES_AccessToFixedTrashProp.py => Flex_X_v2_16_NO_PIPETTES_AccessToFixedTrashProp.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol.py => Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict.py => Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_NO_PIPETTES_TM_ModuleInCol2.py => Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3.py => Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4.py => Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_NO_PIPETTES_TrashBinInCol2.py => Flex_X_v2_16_NO_PIPETTES_TrashBinInCol2.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3.py => Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4.py => Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_P1000_96_DropTipsWithNoTrash.py => Flex_X_v2_16_P1000_96_DropTipsWithNoTrash.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin.py => Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict.py => Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip.py => Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid.py => Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips.py => Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_P1000_96_TM_ModuleAndWasteChuteConflict.py => Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_16_P300MGen2_None_OT2PipetteInFlexProtocol.py => Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_18_NO_PIPETTES_DescriptionTooLongRTP.py => Flex_X_v2_18_NO_PIPETTES_DescriptionTooLongRTP.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_18_NO_PIPETTES_Overrides_BadTypesInRTP.py => Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice.py => Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice.py} (100%) rename app-testing/files/protocols/{Flex/Error/v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP.py => Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP.py} (100%) rename app-testing/files/protocols/{Flex/Error/v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips.json => Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips.json} (100%) rename app-testing/files/protocols/{OT2/Success/v2_11_P10S_P300M_MM_TC1_TM_Swift.py => OT2_S_v2_11_P10S_P300M_MM_TC1_TM_Swift.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError.py => OT2_S_v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_12_P300M_P20S_FailOnRun.py => OT2_S_v2_12_P300M_P20S_FailOnRun.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3.py => OT2_S_v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_13_P300M_P20S_MM_TC_TM_Smoke620Release.py => OT2_S_v2_13_P300M_P20S_MM_TC_TM_Smoke620Release.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py => OT2_S_v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3.py => OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py => OT2_S_v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3.py => OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_15_P300M_P20S_HS_TC_TM_dispense_changes.py => OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py => OT2_S_v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_16_NO_PIPETTES_verifyDoesNotDeadlock.py => OT2_S_v2_16_NO_PIPETTES_verifyDoesNotDeadlock.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3.py => OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume.py => OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_16_P300M_P20S_HS_TC_TM_dispense_changes.py => OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_16_P300M_P20S_aspirateDispenseMix0Volume.py => OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting.py => OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py => OT2_S_v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3.py => OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_17_P300M_P20S_HS_TC_TM_dispense_changes.py => OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_18_NO_PIPETTES_GoldenRTP_OT2.py => OT2_S_v2_18_NO_PIPETTES_GoldenRTP_OT2.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_18_None_None_duplicateChoiceValue.py => OT2_S_v2_18_None_None_duplicateChoiceValue.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase.py => OT2_S_v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_3_P300S_None_MM1_MM2_TM_Mix.py => OT2_S_v2_3_P300S_None_MM1_MM2_TM_Mix.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_4_P300M_None_MM_TM_Zymo.py => OT2_S_v2_4_P300M_None_MM_TM_Zymo.py} (100%) rename app-testing/files/protocols/{OT2/Success/v2_7_P20S_None_Walkthrough.py => OT2_S_v2_7_P20S_None_Walkthrough.py} (100%) rename app-testing/files/protocols/{OT2/Success/v3_P300SGen1_None_Gen1PipetteSimple.json => OT2_S_v3_P300SGen1_None_Gen1PipetteSimple.json} (100%) rename app-testing/files/protocols/{OT2/Success/v4_P300M_P20S_MM_TM_TC1_PD40.json => OT2_S_v4_P300M_P20S_MM_TM_TC1_PD40.json} (100%) rename app-testing/files/protocols/{OT2/Success/v4_P300S_None_MM_TM_TM_MOAMTemps.json => OT2_S_v4_P300S_None_MM_TM_TM_MOAMTemps.json} (100%) rename app-testing/files/protocols/{OT2/Success/v6_P1000S_None_SimpleTransfer.json => OT2_S_v6_P1000S_None_SimpleTransfer.json} (100%) rename app-testing/files/protocols/{OT2/Success/v6_P20S_P300M_TransferReTransferLiquid.json => OT2_S_v6_P20S_P300M_TransferReTransferLiquid.json} (100%) rename app-testing/files/protocols/{OT2/Success/v6_P300M_P20S_HS_Smoke620release.json => OT2_S_v6_P300M_P20S_HS_Smoke620release.json} (100%) rename app-testing/files/protocols/{OT2/Success/v6_P300M_P20S_MixTransferManyLiquids.json => OT2_S_v6_P300M_P20S_MixTransferManyLiquids.json} (100%) rename app-testing/files/protocols/{OT2/Success/v6_P300M_P300S_HS_HS_NormalUseWithTransfer.json => OT2_S_v6_P300M_P300S_HS_HS_NormalUseWithTransfer.json} (100%) rename app-testing/files/protocols/{OT2/Error/v2_11_P300S_TC1_TC2_ThermocyclerMoamError.py => OT2_X_v2_11_P300S_TC1_TC2_ThermocyclerMoamError.py} (100%) rename app-testing/files/protocols/{OT2/Error/v2_13_None_None_PythonSyntaxError.py => OT2_X_v2_13_None_None_PythonSyntaxError.py} (100%) rename app-testing/files/protocols/{OT2/Error/v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1.py => OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1.py} (100%) rename app-testing/files/protocols/{OT2/Error/v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2.py => OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2.py} (100%) rename app-testing/files/protocols/{OT2/Error/v2_18_None_None_NoRTPdisplay_name.py => OT2_X_v2_18_None_None_NoRTPdisplay_name.py} (100%) rename app-testing/files/protocols/{OT2/Error/v2_18_None_None_StrRTPwith_unit.py => OT2_X_v2_18_None_None_StrRTPwith_unit.py} (100%) rename app-testing/files/protocols/{OT2/Error/v2_18_None_None_duplicateRTPVariableName.py => OT2_X_v2_18_None_None_duplicateRTPVariableName.py} (100%) rename app-testing/files/protocols/{OT2/Error/v2_7_P300S_TwinningError.py => OT2_X_v2_7_P300S_TwinningError.py} (100%) rename app-testing/files/protocols/{OT2/Error/v4_P300M_P20S_MM_TC1_TM_e2eTests.json => OT2_X_v4_P300M_P20S_MM_TC1_TM_e2eTests.json} (100%) rename app-testing/files/protocols/{OT2/Error/v6_P20S_None_SimpleTransfer.json => OT2_X_v6_P20S_None_SimpleTransfer.json} (100%) rename app-testing/files/protocols/{OT2/Error/v6_P20S_P300M_HS_HSCollision.json => OT2_X_v6_P20S_P300M_HS_HSCollision.json} (100%) rename app-testing/files/protocols/{OT2/Error/v6_P300M_P20S_HS_MM_TM_TC_AllMods.json => OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods.json} (100%) create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0affe60373][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_maximum].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[1e5825a070][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_minimum].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[38b5298c77][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_less_than_minimum].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4fadc166c0][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_variable_name].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[51a761307d][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_greater_than_maximum].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[60c1d39463][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_int_default_no_matching_choices].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6ad5590adf][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_unit].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e744cbb48][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_str_default_no_matching_choices].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7d06568bfe][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_display_name].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7f2ef0eaff][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_float_default_no_matching_choices].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a06502b2dc][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_description].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b806f07be9][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_value].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e496fec176][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_default].json create mode 100644 app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f88b7d6e30][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_display_name].json diff --git a/app-testing/.gitignore b/app-testing/.gitignore index 6ae4921e11a..90e4fc52e04 100644 --- a/app-testing/.gitignore +++ b/app-testing/.gitignore @@ -1,5 +1,5 @@ .env results analysis_results/*.json -files/protocols/generated_protocols/* -!files/protocols/generated_protocols/.keepme +files/generated_protocols/* +!files/generated_protocols/.keepme diff --git a/app-testing/automation/data/protocol.py b/app-testing/automation/data/protocol.py index 5f0d95ed1ca..71c33ed0ce1 100644 --- a/app-testing/automation/data/protocol.py +++ b/app-testing/automation/data/protocol.py @@ -7,8 +7,6 @@ from pydantic import BaseModel, Field -from automation.data.protocol_category import ProtocolCategory -from automation.data.protocol_files import names from automation.resources.robot_data import module_types GENERATED_PROTOCOLS_FOLDER = "generated_protocols" @@ -18,9 +16,8 @@ class Protocol(BaseModel): """Model to describe a protocol used in a test.""" - file_stem: names = Field(description="file name not including extension") + file_stem: str = Field(description="file name not including extension") file_extension: Literal["json", "py"] = Field(description="file extension of the protocol") - protocol_name: str = Field(description="the protocol name which will appear in the protocol name field in the app") robot: Literal["OT2", "Flex"] = Field(description="the robot type which will appear in the robot field in the app") app_error: bool = Field(description="will analysis with the app raise an error") robot_error: bool = Field(description="will analysis with the robot raise an error") @@ -35,7 +32,6 @@ class Protocol(BaseModel): override_variable_name: Optional[str] = Field(description="The variable name to override", default=None) override_value: Optional[str] = Field(description="The value of the override", default=None) from_override: bool = Field(description="Is this protocol generated from an override", default=False) - category: ProtocolCategory = Field(description="The category of the protocol to map to the folder structure") @property def file_path(self) -> Path: @@ -52,7 +48,6 @@ def file_path(self) -> Path: Path(__file__).resolve().parent.parent.parent, os.getenv("FILES_FOLDER", "files"), "protocols", - self.category.folder_path, f"{self.file_stem}.{self.file_extension}", ) diff --git a/app-testing/automation/data/protocol_category.py b/app-testing/automation/data/protocol_category.py deleted file mode 100644 index 469d2d3c595..00000000000 --- a/app-testing/automation/data/protocol_category.py +++ /dev/null @@ -1,17 +0,0 @@ -from dataclasses import dataclass -from pathlib import Path -from typing import Literal - - -@dataclass(frozen=True) -class ProtocolCategory: - """Folder structure hierarchy for protocols.""" - - robot: Literal["Flex", "OT2"] - outcome: Literal["Success", "Error"] - # the remainder of the description is in the file name - - @property - def folder_path(self) -> Path: - """Folder name for the category.""" - return Path(self.robot, self.outcome) diff --git a/app-testing/automation/data/protocol_files.py b/app-testing/automation/data/protocol_files.py deleted file mode 100644 index 4129f930758..00000000000 --- a/app-testing/automation/data/protocol_files.py +++ /dev/null @@ -1,112 +0,0 @@ -"""Define the possible names of protocol files to use in testing.""" - -from typing import Literal - -names = Literal[ - "v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict", - "v2_16_NO_PIPETTES_AccessToFixedTrashProp", - "v2_16_NO_PIPETTES_TrashBinInCol2", - "v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips", - "v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4", - "v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3", - "v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict", - "v2_16_P1000_96_DropTipsWithNoTrash", - "v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip", - "v2_16_NO_PIPETTES_TM_ModuleInCol2", - "v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin", - "v2_16_P1000_96_TM_ModuleAndWasteChuteConflict", - "v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4", - "v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol", - "v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips", - "v2_16_P300MGen2_None_OT2PipetteInFlexProtocol", - "v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid", - "v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3", - "v2_15_P50M_P1000M_KAPALibraryQuantLongv2", - "v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", - "v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1", - "v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3", - "v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", - "v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke", - "v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures", - "v2_18_NO_PIPETTES_GoldenRTP", - "v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction", - "v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x", - "v2_15_P1000S_None_SimpleNormalizeLongRight", - "v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement", - "v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction", - "v2_16_P1000_96_TC_PartialTipPickupSingle", - "v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3", - "v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment", - "v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", - "v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction", - "v2_16_P1000_96_GRIP_DeckConfiguration1NoModules", - "v2_16_P1000_96_TC_PartialTipPickupColumn", - "v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures", - "v2_18_NO_PIPETTES_BadTypesInRTP", - "v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4", - "v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", - "v2_7_P300S_TwinningError", - "v2_13_None_None_PythonSyntaxError", - "v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1", - "v6_P20S_None_SimpleTransfer", - "v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2", - "v4_P300M_P20S_MM_TC1_TM_e2eTests", - "v6_P300M_P20S_HS_MM_TM_TC_AllMods", - "v2_11_P300S_TC1_TC2_ThermocyclerMoamError", - "v6_P20S_P300M_HS_HSCollision", - "v2_11_P10S_P300M_MM_TC1_TM_Swift", - "v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError", - "v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting", - "v2_16_P300M_P20S_aspirateDispenseMix0Volume", - "v6_P20S_P300M_TransferReTransferLiquid", - "v2_17_P300M_P20S_HS_TC_TM_dispense_changes", - "v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", - "v6_P300M_P20S_HS_Smoke620release", - "v6_P300M_P300S_HS_HS_NormalUseWithTransfer", - "v6_P1000S_None_SimpleTransfer", - "v2_15_P300M_P20S_HS_TC_TM_dispense_changes", - "v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", - "v2_7_P20S_None_Walkthrough", - "v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", - "v6_P300M_P20S_MixTransferManyLiquids", - "v3_P300SGen1_None_Gen1PipetteSimple", - "v2_4_P300M_None_MM_TM_Zymo", - "v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3", - "v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3", - "v2_16_P300M_P20S_HS_TC_TM_dispense_changes", - "v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3", - "v2_13_P300M_P20S_MM_TC_TM_Smoke620Release", - "v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3", - "v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase", - "v2_12_P300M_P20S_FailOnRun", - "v2_3_P300S_None_MM1_MM2_TM_Mix", - "v4_P300M_P20S_MM_TM_TC1_PD40", - "v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3", - "v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", - "v2_16_NO_PIPETTES_verifyDoesNotDeadlock", - "v4_P300S_None_MM_TM_TM_MOAMTemps", - "v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume", - "v2_18_NO_PIPETTES_DescriptionTooLongRTP", - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP", # The one with overrides, children below - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_display_name", - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_variable_name", - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_display_name", - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_value", - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_default", - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_description", - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_minimum", - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_maximum", - "v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_unit", - "v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP", - "v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_less_than_minimum", - "v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_greater_than_maximum", - "v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice", - "v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_str_default_no_matching_choices", - "v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_float_default_no_matching_choices", - "v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_int_default_no_matching_choices", - "v2_18_None_None_duplicateRTPVariableName", - "v2_18_None_None_duplicateChoiceValue", - "v2_18_None_None_StrRTPwith_unit", - "v2_18_None_None_NoRTPdisplay_name", - "v2_18_NO_PIPETTES_GoldenRTP_OT2", -] diff --git a/app-testing/automation/data/protocol_with_overrides.py b/app-testing/automation/data/protocol_with_overrides.py index 04319cb68ce..368c3466a39 100644 --- a/app-testing/automation/data/protocol_with_overrides.py +++ b/app-testing/automation/data/protocol_with_overrides.py @@ -6,7 +6,6 @@ from pydantic import Field from automation.data.protocol import GENERATED_PROTOCOLS_FOLDER, OVERRIDE_MONIKER, Protocol -from automation.data.protocol_files import names class ProtocolWithOverrides(Protocol): @@ -25,11 +24,11 @@ def create_protocols(self) -> None: protocols: list[Protocol] = [] for override in self.overrides: # Create the new file name with the override appended before the extension - new_file_stem: names = f"{self.file_stem}{OVERRIDE_MONIKER}{override}" # type: ignore + new_file_stem: str = f"{self.file_stem}{OVERRIDE_MONIKER}{override}" # type: ignore new_file_name = f"{new_file_stem}.{self.file_extension}" # Create the full path for the new file # all generated files live at files/protocols/$GENERATED_PROTOCOLS_FOLDER - new_file_path = Path(self.file_path.parent.parent.parent, GENERATED_PROTOCOLS_FOLDER, new_file_name) + new_file_path = Path(self.file_path.parent.parent, GENERATED_PROTOCOLS_FOLDER, new_file_name) # Prepare the override string to prepend override_string = f'{self.override_variable_name} = "{override}"\n' # Write the new file with the override string prepended @@ -39,7 +38,6 @@ def create_protocols(self) -> None: protocol = Protocol( file_stem=new_file_stem, file_extension=self.file_extension, - protocol_name=self.protocol_name, robot=self.robot, app_error=self.app_error, robot_error=self.robot_error, @@ -53,7 +51,6 @@ def create_protocols(self) -> None: expected_test_reason=self.expected_test_reason, from_override=True, override_value=override, - category=self.category, ) protocols.append(protocol) self.protocols = protocols diff --git a/app-testing/automation/data/protocols.py b/app-testing/automation/data/protocols.py index 4c84dbd0b29..b0e712af26d 100644 --- a/app-testing/automation/data/protocols.py +++ b/app-testing/automation/data/protocols.py @@ -1,7 +1,6 @@ """Map for protocol files available for testing.""" from automation.data.protocol import Protocol -from automation.data.protocol_category import ProtocolCategory class Protocols: @@ -14,41 +13,33 @@ class Protocols: # Begin JSON Protocols ################################################################################### ########################################################################################################## - v6_P1000S_None_SimpleTransfer: Protocol = Protocol( - file_stem="v6_P1000S_None_SimpleTransfer", + OT2_S_v6_P1000S_None_SimpleTransfer: Protocol = Protocol( + file_stem="OT2_S_v6_P1000S_None_SimpleTransfer", file_extension="json", - protocol_name="Need Pipette", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v6_P20S_P300M_HS_HSCollision: Protocol = Protocol( - file_stem="v6_P20S_P300M_HS_HSCollision", + OT2_S_v6_P20S_P300M_HS_HSCollision: Protocol = Protocol( + file_stem="OT2_S_v6_P20S_P300M_HS_HSCollision", file_extension="json", - protocol_name="HS Collision", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, description="""This protocol gives an error in PD.8-Channel pipette cannot access labware8-Channel pipettes cannot access labware or tip racks to the left or right of a Heater-Shaker GEN1 module. Move labware to a different slot to access it with an 8-Channel pipette.If you export it anyway there are NOT analysis errors in the app side analysis.TODO on if there are robot side analysis errors but do not expect them?""", # noqa: E501 ) - v6_P20S_P300M_TransferReTransferLiquid: Protocol = Protocol( - file_stem="v6_P20S_P300M_TransferReTransferLiquid", + OT2_S_v6_P20S_P300M_TransferReTransferLiquid: Protocol = Protocol( + file_stem="OT2_S_v6_P20S_P300M_TransferReTransferLiquid", file_extension="json", - protocol_name="Transfer- Multi liquid (retransfer)", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v6_P20S_None_SimpleTransfer: Protocol = Protocol( - file_stem="v6_P20S_None_SimpleTransfer", + OT2_X_v6_P20S_None_SimpleTransfer: Protocol = Protocol( + file_stem="OT2_X_v6_P20S_None_SimpleTransfer", file_extension="json", - protocol_name="Have Pipette", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=True, @@ -56,21 +47,17 @@ class Protocols: robot_analysis_error="?", ) - v6_P300M_P20S_HS_Smoke620release: Protocol = Protocol( - file_stem="v6_P300M_P20S_HS_Smoke620release", + OT2_S_v6_P300M_P20S_HS_Smoke620release: Protocol = Protocol( + file_stem="OT2_S_v6_P300M_P20S_HS_Smoke620release", file_extension="json", - protocol_name="H/S normal use", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v6_P300M_P20S_HS_MM_TM_TC_AllMods: Protocol = Protocol( - file_stem="v6_P300M_P20S_HS_MM_TM_TC_AllMods", + OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods: Protocol = Protocol( + file_stem="OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods", file_extension="json", - protocol_name="All mods", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=True, @@ -78,21 +65,17 @@ class Protocols: robot_analysis_error="?", ) - v4_P300M_P20S_MM_TM_TC1_PD40: Protocol = Protocol( - file_stem="v4_P300M_P20S_MM_TM_TC1_PD40", + OT2_S_v4_P300M_P20S_MM_TM_TC1_PD40: Protocol = Protocol( + file_stem="OT2_S_v4_P300M_P20S_MM_TM_TC1_PD40", file_extension="json", - protocol_name="script_pur_sample_1", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v4_P300M_P20S_MM_TC1_TM_e2eTests: Protocol = Protocol( - file_stem="v4_P300M_P20S_MM_TC1_TM_e2eTests", + OT2_X_v4_P300M_P20S_MM_TC1_TM_e2eTests: Protocol = Protocol( + file_stem="OT2_X_v4_P300M_P20S_MM_TC1_TM_e2eTests", file_extension="json", - protocol_name="script_pur_sample_1", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=True, @@ -100,51 +83,41 @@ class Protocols: robot_analysis_error="?", ) - v6_P300M_P20S_MixTransferManyLiquids: Protocol = Protocol( - file_stem="v6_P300M_P20S_MixTransferManyLiquids", + OT2_S_v6_P300M_P20S_MixTransferManyLiquids: Protocol = Protocol( + file_stem="OT2_S_v6_P300M_P20S_MixTransferManyLiquids", file_extension="json", - protocol_name="Mix/transfer- several liquids", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v6_P300M_P300S_HS_HS_NormalUseWithTransfer: Protocol = Protocol( - file_stem="v6_P300M_P300S_HS_HS_NormalUseWithTransfer", + OT2_S_v6_P300M_P300S_HS_HS_NormalUseWithTransfer: Protocol = Protocol( + file_stem="OT2_S_v6_P300M_P300S_HS_HS_NormalUseWithTransfer", file_extension="json", - protocol_name="H/S normal use", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v3_P300SGen1_None_Gen1PipetteSimple: Protocol = Protocol( - file_stem="v3_P300SGen1_None_Gen1PipetteSimple", + OT2_S_v3_P300SGen1_None_Gen1PipetteSimple: Protocol = Protocol( + file_stem="OT2_S_v3_P300SGen1_None_Gen1PipetteSimple", file_extension="json", - protocol_name="gen1 pipette", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v4_P300S_None_MM_TM_TM_MOAMTemps: Protocol = Protocol( - file_stem="v4_P300S_None_MM_TM_TM_MOAMTemps", + OT2_S_v4_P300S_None_MM_TM_TM_MOAMTemps: Protocol = Protocol( + file_stem="OT2_S_v4_P300S_None_MM_TM_TM_MOAMTemps", file_extension="json", - protocol_name="MoaM", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips: Protocol = Protocol( - file_stem="v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips", + Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips: Protocol = Protocol( + file_stem="Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips", file_extension="json", - protocol_name="Gripper Collision with Tips", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, @@ -155,22 +128,18 @@ class Protocols: # Begin Python Protocols ################################################################################### ############################################################################################################ - v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError: Protocol = Protocol( - file_stem="v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError", + OT2_S_v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError: Protocol = Protocol( + file_stem="OT2_S_v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError", file_extension="py", - protocol_name="🛠 3.10 only Python 🛠", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=True, robot_analysis_error="?", ) - v2_13_None_None_PythonSyntaxError: Protocol = Protocol( - file_stem="v2_13_None_None_PythonSyntaxError", + OT2_X_v2_13_None_None_PythonSyntaxError: Protocol = Protocol( + file_stem="OT2_X_v2_13_None_None_PythonSyntaxError", file_extension="py", - protocol_name="bad import", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=True, @@ -178,125 +147,101 @@ class Protocols: robot_analysis_error="?", ) - v2_11_P10S_P300M_MM_TC1_TM_Swift: Protocol = Protocol( - file_stem="v2_11_P10S_P300M_MM_TC1_TM_Swift", + OT2_S_v2_11_P10S_P300M_MM_TC1_TM_Swift: Protocol = Protocol( + file_stem="OT2_S_v2_11_P10S_P300M_MM_TC1_TM_Swift", file_extension="py", - protocol_name="OT2_P10S_P300M_TC1_TM_MM_2_11_Swift.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_7_P20S_None_Walkthrough: Protocol = Protocol( - file_stem="v2_7_P20S_None_Walkthrough", + OT2_S_v2_7_P20S_None_Walkthrough: Protocol = Protocol( + file_stem="OT2_S_v2_7_P20S_None_Walkthrough", file_extension="py", - protocol_name="OT2 Guided Walk-through", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_16_P300M_P20S_aspirateDispenseMix0Volume: Protocol = Protocol( - file_stem="v2_16_P300M_P20S_aspirateDispenseMix0Volume", + OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume: Protocol = Protocol( + file_stem="OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume", file_extension="py", - protocol_name="QA Protocol - API 2.16 - Aspirate Dispense Mix with 0 Volume", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_12_P300M_P20S_FailOnRun: Protocol = Protocol( - file_stem="v2_12_P300M_P20S_FailOnRun", + OT2_S_v2_12_P300M_P20S_FailOnRun: Protocol = Protocol( + file_stem="OT2_S_v2_12_P300M_P20S_FailOnRun", file_extension="py", - protocol_name="Will fail on run", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( - file_stem="v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3", + OT2_S_v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( + file_stem="OT2_S_v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3", file_extension="py", - protocol_name="🛠️ 2.13 Smoke Test V3 🪄", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, custom_labware=["cpx_4_tuberack_100ul"], ) - v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( - file_stem="v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3", + OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( + file_stem="OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3", file_extension="py", - protocol_name="🛠️ 2.14 Smoke Test V3 🪄", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, custom_labware=["cpx_4_tuberack_100ul"], ) - v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( - file_stem="v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3", + OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( + file_stem="OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3", file_extension="py", - protocol_name="🛠️ 2.15 Smoke Test V3 🪄", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, custom_labware=["cpx_4_tuberack_100ul"], ) - v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( - file_stem="v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3", + OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( + file_stem="OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3", file_extension="py", - protocol_name="🛠️ 2.16 Smoke Test V3 🪄", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, custom_labware=["cpx_4_tuberack_100ul"], ) - v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( - file_stem="v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3", + OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3: Protocol = Protocol( + file_stem="OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3", file_extension="py", - protocol_name="🛠️ 2.17 Smoke Test V3 🪄", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_13_P300M_P20S_MM_TC_TM_Smoke620Release: Protocol = Protocol( - file_stem="v2_13_P300M_P20S_MM_TC_TM_Smoke620Release", + OT2_S_v2_13_P300M_P20S_MM_TC_TM_Smoke620Release: Protocol = Protocol( + file_stem="OT2_S_v2_13_P300M_P20S_MM_TC_TM_Smoke620Release", file_extension="py", - protocol_name="🛠 Logo-Modules-CustomLabware 🛠", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, custom_labware=["cpx_4_tuberack_100ul"], ) - v2_4_P300M_None_MM_TM_Zymo: Protocol = Protocol( - file_stem="v2_4_P300M_None_MM_TM_Zymo", + OT2_S_v2_4_P300M_None_MM_TM_Zymo: Protocol = Protocol( + file_stem="OT2_S_v2_4_P300M_None_MM_TM_Zymo", file_extension="py", - protocol_name="Zymo Direct-zol96 Magbead RNA", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_11_P300S_TC1_TC2_ThermocyclerMoamError: Protocol = Protocol( - file_stem="v2_11_P300S_TC1_TC2_ThermocyclerMoamError", + OT2_X_v2_11_P300S_TC1_TC2_ThermocyclerMoamError: Protocol = Protocol( + file_stem="OT2_X_v2_11_P300S_TC1_TC2_ThermocyclerMoamError", file_extension="py", - protocol_name="OT2_P300S_Thermocycler_Moam_Error.py", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=True, @@ -304,11 +249,9 @@ class Protocols: robot_analysis_error="?", ) - v2_7_P300S_TwinningError: Protocol = Protocol( - file_stem="v2_7_P300S_TwinningError", + OT2_X_v2_7_P300S_TwinningError: Protocol = Protocol( + file_stem="OT2_X_v2_7_P300S_TwinningError", file_extension="py", - protocol_name="My Protocol", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=True, @@ -316,262 +259,210 @@ class Protocols: robot_analysis_error="?", ) - v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase: Protocol = Protocol( - file_stem="v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase", + OT2_S_v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase: Protocol = Protocol( + file_stem="OT2_S_v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase", file_extension="py", - protocol_name="OT2_P300SLeft_MM1_MM_2_2_EngageMagHeightFromBase.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_3_P300S_None_MM1_MM2_TM_Mix: Protocol = Protocol( - file_stem="v2_3_P300S_None_MM1_MM2_TM_Mix", + OT2_S_v2_3_P300S_None_MM1_MM2_TM_Mix: Protocol = Protocol( + file_stem="OT2_S_v2_3_P300S_None_MM1_MM2_TM_Mix", file_extension="py", - protocol_name="OT2_P300SLeft_MM1_MM_TM_2_3_Mix.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume: Protocol = Protocol( - file_stem="v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume", + OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume: Protocol = Protocol( + file_stem="OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume", file_extension="py", - protocol_name="OT2_P300M_P20S_TC_HS_TM_2_16_aspirateDispenseMix0Volume.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_15_P300M_P20S_HS_TC_TM_dispense_changes: Protocol = Protocol( - file_stem="v2_15_P300M_P20S_HS_TC_TM_dispense_changes", + OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes: Protocol = Protocol( + file_stem="OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes", file_extension="py", - protocol_name="OT2_P300M_P20S_TC_HS_TM_2_15_dispense_changes.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_16_P300M_P20S_HS_TC_TM_dispense_changes: Protocol = Protocol( - file_stem="v2_16_P300M_P20S_HS_TC_TM_dispense_changes", + OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes: Protocol = Protocol( + file_stem="OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes", file_extension="py", - protocol_name="OT2_P300M_P20S_TC_HS_TM_2_16_dispense_changes.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_17_P300M_P20S_HS_TC_TM_dispense_changes: Protocol = Protocol( - file_stem="v2_17_P300M_P20S_HS_TC_TM_dispense_changes", + OT2_X_v2_17_P300M_P20S_HS_TC_TM_dispense_changes: Protocol = Protocol( + file_stem="OT2_X_v2_17_P300M_P20S_HS_TC_TM_dispense_changes", file_extension="py", - protocol_name="OT2_P300M_P20S_TC_HS_TM_2_17_dispense_changes.py", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=False, app_analysis_error="ValueError [line 15]: Cannot dispense more than pipette max volume", # noqa: E501 ) - v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots: Protocol = Protocol( - file_stem="v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", + OT2_S_v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots: Protocol = Protocol( + file_stem="OT2_S_v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", file_extension="py", - protocol_name="OT2_None_None_TC_2_14_VerifyThermocyclerLoadedSlots.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots: Protocol = Protocol( - file_stem="v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", + OT2_S_v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots: Protocol = Protocol( + file_stem="OT2_S_v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", file_extension="py", - protocol_name="OT2_None_None_TC_2_15_VerifyThermocyclerLoadedSlots.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", + OT2_X_v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots: Protocol = Protocol( + file_stem="OT2_X_v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", file_extension="py", - protocol_name="OT2_None_None_TC_2_16_VerifyThermocyclerLoadedSlots.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots: Protocol = Protocol( - file_stem="v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", + OT2_S_v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots: Protocol = Protocol( + file_stem="OT2_S_v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots", file_extension="py", - protocol_name="OT2_None_None_TC_2_17_VerifyThermocyclerLoadedSlots.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1: Protocol = Protocol( - file_stem="v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1", + OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1: Protocol = Protocol( + file_stem="OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1", file_extension="py", - protocol_name="OT2_None_None_HS_2_16_AnalysisError_HeaterShakerConflictWithTrashBin1.py", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=False, app_analysis_error="DeckConflictError [line 19]: trash_bin in slot 12 prevents heater_shaker in slot 11 from using slot 11.", # noqa: E501 ) - v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2: Protocol = Protocol( - file_stem="v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2", + OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2: Protocol = Protocol( + file_stem="OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2", file_extension="py", - protocol_name="OT2_None_None_HS_2_16_AnalysisError_HeaterShakerConflictWithTrashBin2.py", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=False, app_analysis_error="DeckConflictError [line 19]: trash_bin in slot 12 prevents heater_shaker in slot 11 from using slot 11.", # noqa: E501 ) - v2_16_NO_PIPETTES_verifyDoesNotDeadlock: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_verifyDoesNotDeadlock", + OT2_S_v2_16_NO_PIPETTES_verifyDoesNotDeadlock: Protocol = Protocol( + file_stem="OT2_S_v2_16_NO_PIPETTES_verifyDoesNotDeadlock", file_extension="py", - protocol_name="OT2_None_None_2_16_verifyDoesNotDeadlock.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting: Protocol = Protocol( - file_stem="v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting", + OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting: Protocol = Protocol( + file_stem="OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting", file_extension="py", - protocol_name="OT2_P300S_None_2_16_verifyNoFloatingPointErrorInPipetting.py", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction: Protocol = Protocol( - file_stem="v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction", + Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction: Protocol = Protocol( + file_stem="Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction", file_extension="py", - protocol_name="Quick Zymo Magbead RNA Extraction with Lysis: Bacteria 96 Channel Deletion Test", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, custom_labware=["opentrons_ot3_96_tiprack_1000ul_rss"], ) - v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction: Protocol = Protocol( - file_stem="v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction", + Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction: Protocol = Protocol( + file_stem="Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction", file_extension="py", - protocol_name="Omega HDQ DNA Extraction: Bacteria 96 FOR ABR TESTING", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, custom_labware=["opentrons_ot3_96_tiprack_1000ul_rss"], ) - v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction: Protocol = Protocol( - file_stem="v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction", + Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction: Protocol = Protocol( + file_stem="Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction", file_extension="py", - protocol_name="MagMax RNA Extraction: Cells 96 ABR TESTING", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, custom_labware=["opentrons_ot3_96_tiprack_200ul_rss"], ) - v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3: Protocol = Protocol( - file_stem="v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3", + Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3: Protocol = Protocol( + file_stem="Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3", file_extension="py", - protocol_name="Illumina DNA Prep 96x Head PART III", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, custom_labware=["opentrons_ot3_96_tiprack_200ul_rss", "opentrons_ot3_96_tiprack_50ul_rss"], ) - v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3: Protocol = Protocol( - file_stem="v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3", + Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3: Protocol = Protocol( + file_stem="Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3", file_extension="py", - protocol_name="IDT xGen EZ 96x Head PART I-III ABR", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, custom_labware=["opentrons_ot3_96_tiprack_50ul_rss", "opentrons_ot3_96_tiprack_200ul_rss"], ) - v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4: Protocol = Protocol( - file_stem="v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4", + Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4: Protocol = Protocol( + file_stem="Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4", file_extension="py", - protocol_name="Illumina DNA Enrichment v4", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment: Protocol = Protocol( - file_stem="v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment", + Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment: Protocol = Protocol( + file_stem="Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment", file_extension="py", - protocol_name="Illumina DNA Enrichment", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x: Protocol = Protocol( - file_stem="v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x", + Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x: Protocol = Protocol( + file_stem="Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x", file_extension="py", - protocol_name="Illumina DNA Prep 24x", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_15_P1000S_None_SimpleNormalizeLongRight: Protocol = Protocol( - file_stem="v2_15_P1000S_None_SimpleNormalizeLongRight", + Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight: Protocol = Protocol( + file_stem="Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight", file_extension="py", - protocol_name="Flex ABR Simple Normalize Long", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, custom_labware=["opentrons_ot3_96_tiprack_200ul_rss"], ) - v2_15_P50M_P1000M_KAPALibraryQuantLongv2: Protocol = Protocol( - file_stem="v2_15_P50M_P1000M_KAPALibraryQuantLongv2", + Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2: Protocol = Protocol( + file_stem="Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2", file_extension="py", - protocol_name="Flex ABR KAPA Library Quant v2", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_16_NO_PIPETTES_TrashBinInCol2: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_TrashBinInCol2", + Flex_X_v2_16_NO_PIPETTES_TrashBinInCol2: Protocol = Protocol( + file_stem="Flex_X_v2_16_NO_PIPETTES_TrashBinInCol2", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Trash Bin in Column 2", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="InvalidTrashBinLocationError [line 15]: Invalid location for trash bin: C2. Valid slots: Any slot in column 1 or 3.", # noqa: E501 ) - v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3", + Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3: Protocol = Protocol( + file_stem="Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Trash Bin in Staging Area Column 3", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, @@ -580,33 +471,27 @@ class Protocols: expected_test_reason="Analysis does not throw error when modules or fixtures are in staging area column 3.", # noqa: E501 ) - v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4", + Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4: Protocol = Protocol( + file_stem="Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Trash Bin in Staging Area Column 4", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="ValueError [line 15]: Staging areas not permitted for trash bin.", # noqa: E501 ) - v2_16_P1000_96_DropTipsWithNoTrash: Protocol = Protocol( - file_stem="v2_16_P1000_96_DropTipsWithNoTrash", + Flex_X_v2_16_P1000_96_DropTipsWithNoTrash: Protocol = Protocol( + file_stem="Flex_X_v2_16_P1000_96_DropTipsWithNoTrash", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Drop Tips with no Trash", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="NoTrashDefinedError [line 24]: Error 4000 GENERAL_ERROR (NoTrashDefinedError): No trash container has been defined in this protocol.", # noqa: E501 ) - v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3", + Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3: Protocol = Protocol( + file_stem="Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Module in Staging Area Column 3", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, @@ -615,323 +500,261 @@ class Protocols: expected_test_reason="Analysis does not throw error when modules or fixtures are in staging area column 3.", # noqa: E501 ) - v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4", + Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4: Protocol = Protocol( + file_stem="Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Module in Staging Area Column 4", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="ValueError [line 15]: Cannot load a module onto a staging slot.", # noqa: E501 ) - v2_16_P1000_96_TM_ModuleAndWasteChuteConflict: Protocol = Protocol( - file_stem="v2_16_P1000_96_TM_ModuleAndWasteChuteConflict", + Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict: Protocol = Protocol( + file_stem="Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Module and Waste Chute Conflict", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="ProtocolCommandFailedError [line 25]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): IncompatibleAddressableAreaError: Cannot use Waste Chute, not compatible with one or more of the following fixtures: Slot D3", # noqa: E501 ) - v2_16_NO_PIPETTES_AccessToFixedTrashProp: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_AccessToFixedTrashProp", + Flex_X_v2_16_NO_PIPETTES_AccessToFixedTrashProp: Protocol = Protocol( + file_stem="Flex_X_v2_16_NO_PIPETTES_AccessToFixedTrashProp", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Access to Fixed Trash Property", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="APIVersionError [line 15]: Fixed Trash is not supported on Flex protocols in API Version 2.16 and above.", # noqa: E501 ) - v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin: Protocol = Protocol( - file_stem="v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin", + Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin: Protocol = Protocol( + file_stem="Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Drop Labware in Trash Bin", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="ProtocolCommandFailedError [line 20]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): IncompatibleAddressableAreaError: Cannot use Slot C3, not compatible with one or more of the following fixtures: Trash Bin in C3", # noqa: E501 ) - v2_16_P300MGen2_None_OT2PipetteInFlexProtocol: Protocol = Protocol( - file_stem="v2_16_P300MGen2_None_OT2PipetteInFlexProtocol", + Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol: Protocol = Protocol( + file_stem="Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol", file_extension="py", - protocol_name="QA Protocol - Analysis Error - OT2 Pipette in Flex Protocol", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="ProtocolCommandFailedError [line 22]: Error 4000 GENERAL_ERROR (ProtocolCommandFailedError): InvalidSpecificationForRobotTypeError: Cannot load a Gen2 pipette on a Flex.", # noqa: E501 ) - v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol", + Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol: Protocol = Protocol( + file_stem="Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Magnetic Module in Flex Protocol", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="ValueError [line 15]: A magneticModuleType cannot be loaded into slot C1", # noqa: E501 ) - v2_16_NO_PIPETTES_TM_ModuleInCol2: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_TM_ModuleInCol2", + Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2: Protocol = Protocol( + file_stem="Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2", file_extension="py", - protocol_name="QA Protocol - Analysis Error - Module in Column 2", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="ValueError [line 15]: A temperatureModuleType cannot be loaded into slot C2", # noqa: E501 ) - v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures: Protocol = Protocol( - file_stem="v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures", + Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures: Protocol = Protocol( + file_stem="Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures", file_extension="py", - protocol_name="QA Protocol - Deck Configuration 1 - No Fixtures", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_16_P1000_96_GRIP_DeckConfiguration1NoModules: Protocol = Protocol( - file_stem="v2_16_P1000_96_GRIP_DeckConfiguration1NoModules", + Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules: Protocol = Protocol( + file_stem="Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules", file_extension="py", - protocol_name="QA Protocol - Deck Configuration 1 - No Modules", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures: Protocol = Protocol( - file_stem="v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures", + Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures: Protocol = Protocol( + file_stem="Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures", file_extension="py", - protocol_name="QA Protocol - Deck Configuration 1 - No Modules or Fixtures", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1: Protocol = Protocol( - file_stem="v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1", + Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1: Protocol = Protocol( + file_stem="Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1", file_extension="py", - protocol_name="QA Protocol - Deck Configuration 1", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke: Protocol = Protocol( - file_stem="v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke", + Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke: Protocol = Protocol( + file_stem="Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke", file_extension="py", - protocol_name="QA Protocol - MEGAAA PROTOCOL - LETS BREAK, I MEAN TEST, EVERYTHING!!!!!", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots: Protocol = Protocol( - file_stem="v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", + Flex_S_v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots: Protocol = Protocol( + file_stem="Flex_S_v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", file_extension="py", - protocol_name="QA Protocol - Verify Thermocycler Loaded Slots", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots: Protocol = Protocol( - file_stem="v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", + Flex_S_v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots: Protocol = Protocol( + file_stem="Flex_S_v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", file_extension="py", - protocol_name="QA Protocol - Verify Thermocycler Loaded Slots", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", + Flex_S_v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots: Protocol = Protocol( + file_stem="Flex_S_v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", file_extension="py", - protocol_name="QA Protocol - Verify Thermocycler Loaded Slots", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots: Protocol = Protocol( - file_stem="v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", + Flex_S_v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots: Protocol = Protocol( + file_stem="Flex_S_v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots", file_extension="py", - protocol_name="QA Protocol - Verify Thermocycler Loaded Slots", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict: Protocol = Protocol( - file_stem="v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict", + Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict: Protocol = Protocol( + file_stem="Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict", file_extension="py", - protocol_name="Flex_None_None_TC_2_16_AnalysisError_TrashBinAndThermocyclerConflict", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="IncompatibleAddressableAreaError [line 15]: Cannot use Trash Bin in C3, not compatible with one or more of the following fixtures: Thermocycler in C3", # noqa: E501 ) - v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips: Protocol = Protocol( - file_stem="v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips", + Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips: Protocol = Protocol( + file_stem="Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips", file_extension="py", - protocol_name="Flex_P1000_96_None_TC_2_16_AnalysisError_pipetteCollisionWithThermocyclerLidClips", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="IncompatibleAddressableAreaError [line 15]: Cannot use Slot C3, not compatible with one or more of the following fixtures: Thermocycler in C3", # noqa: E501 ) - v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid: Protocol = Protocol( - file_stem="v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid", + Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid: Protocol = Protocol( + file_stem="Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid", file_extension="py", - protocol_name="Flex_P1000_96_None_TC_2_16_AnalysisError_pipetteCollisionWithThermocyclerLid", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="IncompatibleAddressableAreaError [line 15]: Cannot use Slot C3, not compatible with one or more of the following fixtures: Thermocycler in C3", # noqa: E501 ) - v2_16_P1000_96_TC_PartialTipPickupSingle: Protocol = Protocol( - file_stem="v2_16_P1000_96_TC_PartialTipPickupSingle", + Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle: Protocol = Protocol( + file_stem="Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle", file_extension="py", - protocol_name="Partial Tip Pickup Single", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_16_P1000_96_TC_PartialTipPickupColumn: Protocol = Protocol( - file_stem="v2_16_P1000_96_TC_PartialTipPickupColumn", + Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn: Protocol = Protocol( + file_stem="Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn", file_extension="py", - protocol_name="Partial Tip Pickup Column", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip: Protocol = Protocol( - file_stem="v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip", + Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip: Protocol = Protocol( + file_stem="Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip", file_extension="py", - protocol_name="Partial Tip Pickup Try to Return Tip", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="ValueError [line 15]: Cannot return tip in partial tip pickup mode.", # noqa: E501 ) - v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict: Protocol = Protocol( - file_stem="v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict", + Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict: Protocol = Protocol( + file_stem="Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict", file_extension="py", - protocol_name="Partial Tip Pickup Thermocycler Lid Conflict", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=False, app_analysis_error="IncompatibleAddressableAreaError [line 15]: Cannot use Slot C3, not compatible with one or more of the following fixtures: Thermocycler in C3", # noqa: E501 ) - v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement: Protocol = Protocol( - file_stem="v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement", + Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement: Protocol = Protocol( + file_stem="Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement", file_extension="py", - protocol_name="96ch protocol with modules gripper moves and pipette aspirations", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_18_NO_PIPETTES_GoldenRTP: Protocol = Protocol( - file_stem="v2_18_NO_PIPETTES_GoldenRTP", + Flex_S_v2_18_NO_PIPETTES_GoldenRTP: Protocol = Protocol( + file_stem="Flex_S_v2_18_NO_PIPETTES_GoldenRTP", file_extension="py", - protocol_name="Golden RTP Examples", - category=ProtocolCategory(robot="Flex", outcome="Success"), robot="Flex", app_error=False, robot_error=False, ) - v2_18_NO_PIPETTES_DescriptionTooLongRTP: Protocol = Protocol( - file_stem="v2_18_NO_PIPETTES_DescriptionTooLongRTP", + Flex_X_v2_18_NO_PIPETTES_DescriptionTooLongRTP: Protocol = Protocol( + file_stem="Flex_X_v2_18_NO_PIPETTES_DescriptionTooLongRTP", file_extension="py", - protocol_name="Description too long", - category=ProtocolCategory(robot="Flex", outcome="Error"), robot="Flex", app_error=True, robot_error=True, ) - v2_18_None_None_duplicateRTPVariableName: Protocol = Protocol( - file_stem="v2_18_None_None_duplicateRTPVariableName", + OT2_X_v2_18_None_None_duplicateRTPVariableName: Protocol = Protocol( + file_stem="OT2_X_v2_18_None_None_duplicateRTPVariableName", file_extension="py", - protocol_name="Multiple RTP Variables with Same Name", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=True, ) - v2_18_None_None_duplicateChoiceValue: Protocol = Protocol( - file_stem="v2_18_None_None_duplicateChoiceValue", + OT2_S_v2_18_None_None_duplicateChoiceValue: Protocol = Protocol( + file_stem="OT2_S_v2_18_None_None_duplicateChoiceValue", file_extension="py", - protocol_name="Duplicate choice value", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, ) - v2_18_None_None_StrRTPwith_unit: Protocol = Protocol( - file_stem="v2_18_None_None_StrRTPwith_unit", + OT2_X_v2_18_None_None_StrRTPwith_unit: Protocol = Protocol( + file_stem="OT2_X_v2_18_None_None_StrRTPwith_unit", file_extension="py", - protocol_name="Str RTP with unit", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=True, ) - v2_18_None_None_NoRTPdisplay_name: Protocol = Protocol( - file_stem="v2_18_None_None_NoRTPdisplay_name", + OT2_X_v2_18_None_None_NoRTPdisplay_name: Protocol = Protocol( + file_stem="OT2_X_v2_18_None_None_NoRTPdisplay_name", file_extension="py", - protocol_name="No RTP Display Name", - category=ProtocolCategory(robot="OT2", outcome="Error"), robot="OT2", app_error=True, robot_error=True, ) - v2_18_NO_PIPETTES_GoldenRTP_OT2: Protocol = Protocol( - file_stem="v2_18_NO_PIPETTES_GoldenRTP_OT2", + OT2_S_v2_18_NO_PIPETTES_GoldenRTP_OT2: Protocol = Protocol( + file_stem="OT2_S_v2_18_NO_PIPETTES_GoldenRTP_OT2", file_extension="py", - protocol_name="Golden RTP Examples OT2", - category=ProtocolCategory(robot="OT2", outcome="Success"), robot="OT2", app_error=False, robot_error=False, diff --git a/app-testing/automation/data/protocols_with_overrides.py b/app-testing/automation/data/protocols_with_overrides.py index 5f0489417e1..2c6133180ad 100644 --- a/app-testing/automation/data/protocols_with_overrides.py +++ b/app-testing/automation/data/protocols_with_overrides.py @@ -1,12 +1,10 @@ -from automation.data.protocol_category import ProtocolCategory from automation.data.protocol_with_overrides import ProtocolWithOverrides class ProtocolsWithOverrides: - v2_18_NO_PIPETTES_Overrides_BadTypesInRTP: ProtocolWithOverrides = ProtocolWithOverrides( - file_stem="v2_18_NO_PIPETTES_Overrides_BadTypesInRTP", + Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP: ProtocolWithOverrides = ProtocolWithOverrides( + file_stem="Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP", file_extension="py", - protocol_name="Golden RTP Examples 2", robot="Flex", app_error=True, robot_error=True, @@ -22,13 +20,11 @@ class ProtocolsWithOverrides: "wrong_type_in_maximum", "wrong_type_in_unit", # we going unit or suffix? ], - category=ProtocolCategory(robot="Flex", outcome="Error"), ) - v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP: ProtocolWithOverrides = ProtocolWithOverrides( - file_stem="v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP", + Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP: ProtocolWithOverrides = ProtocolWithOverrides( + file_stem="Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP", file_extension="py", - protocol_name="Default not in range", robot="Flex", app_error=True, robot_error=True, @@ -37,17 +33,14 @@ class ProtocolsWithOverrides: "default_greater_than_maximum", "default_less_than_minimum", ], - category=ProtocolCategory(robot="Flex", outcome="Error"), ) - v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice: ProtocolWithOverrides = ProtocolWithOverrides( - file_stem="v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice", + Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice: ProtocolWithOverrides = ProtocolWithOverrides( + file_stem="Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice", file_extension="py", - protocol_name="default choice does not match a choice", robot="Flex", app_error=True, robot_error=True, override_variable_name="type_to_test", overrides=["str_default_no_matching_choices", "float_default_no_matching_choices", "int_default_no_matching_choices"], - category=ProtocolCategory(robot="Flex", outcome="Error"), ) diff --git a/app-testing/example.env b/app-testing/example.env index 8dfbb63379c..3bddafd75ba 100644 --- a/app-testing/example.env +++ b/app-testing/example.env @@ -18,104 +18,104 @@ TARGET=edge # dynamically generate with make print-protocols APP_ANALYSIS_TEST_PROTOCOLS=" -v2_11_P10S_P300M_MM_TC1_TM_Swift, -v2_11_P300S_TC1_TC2_ThermocyclerMoamError, -v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError, -v2_12_P300M_P20S_FailOnRun, -v2_13_None_None_PythonSyntaxError, -v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3, -v2_13_P300M_P20S_MM_TC_TM_Smoke620Release, -v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots, -v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots, -v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3, -v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots, -v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots, -v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment, -v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4, -v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x, -v2_15_P1000S_None_SimpleNormalizeLongRight, -v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3, -v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3, -v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction, -v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction, -v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction, -v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3, -v2_15_P300M_P20S_HS_TC_TM_dispense_changes, -v2_15_P50M_P1000M_KAPALibraryQuantLongv2, -v2_16_NO_PIPETTES_AccessToFixedTrashProp, -v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol, -v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict, -v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots, -v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots, -v2_16_NO_PIPETTES_TM_ModuleInCol2, -v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3, -v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4, -v2_16_NO_PIPETTES_TrashBinInCol2, -v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3, -v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4, -v2_16_NO_PIPETTES_verifyDoesNotDeadlock, -v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1, -v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2, -v2_16_P1000_96_DropTipsWithNoTrash, -v2_16_P1000_96_GRIP_DeckConfiguration1NoModules, -v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures, -v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin, -v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1, -v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures, -v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke, -v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement, -v2_16_P1000_96_TC_PartialTipPickupColumn, -v2_16_P1000_96_TC_PartialTipPickupSingle, -v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict, -v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip, -v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid, -v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips, -v2_16_P1000_96_TM_ModuleAndWasteChuteConflict, -v2_16_P300MGen2_None_OT2PipetteInFlexProtocol, -v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3, -v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume, -v2_16_P300M_P20S_HS_TC_TM_dispense_changes, -v2_16_P300M_P20S_aspirateDispenseMix0Volume, -v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting, -v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots, -v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots, -v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3, -v2_17_P300M_P20S_HS_TC_TM_dispense_changes, -v2_18_NO_PIPETTES_DescriptionTooLongRTP, -v2_18_NO_PIPETTES_GoldenRTP, -v2_18_NO_PIPETTES_GoldenRTP_OT2, -v2_18_None_None_NoRTPdisplay_name, -v2_18_None_None_StrRTPwith_unit, -v2_18_None_None_duplicateChoiceValue, -v2_18_None_None_duplicateRTPVariableName, -v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase, -v2_3_P300S_None_MM1_MM2_TM_Mix, -v2_4_P300M_None_MM_TM_Zymo, -v2_7_P20S_None_Walkthrough, -v2_7_P300S_TwinningError, -v3_P300SGen1_None_Gen1PipetteSimple, -v4_P300M_P20S_MM_TC1_TM_e2eTests, -v4_P300M_P20S_MM_TM_TC1_PD40, -v4_P300S_None_MM_TM_TM_MOAMTemps, -v6_P1000S_None_SimpleTransfer, -v6_P20S_None_SimpleTransfer, -v6_P20S_P300M_HS_HSCollision, -v6_P20S_P300M_TransferReTransferLiquid, -v6_P300M_P20S_HS_MM_TM_TC_AllMods, -v6_P300M_P20S_HS_Smoke620release, -v6_P300M_P20S_MixTransferManyLiquids, -v6_P300M_P300S_HS_HS_NormalUseWithTransfer, -v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips +Flex_S_v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots, +Flex_S_v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots, +Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment, +Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4, +Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x, +Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight, +Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3, +Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3, +Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction, +Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction, +Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction, +Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2, +Flex_S_v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots, +Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules, +Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures, +Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1, +Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures, +Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke, +Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement, +Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn, +Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle, +Flex_S_v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots, +Flex_S_v2_18_NO_PIPETTES_GoldenRTP, +Flex_X_v2_16_NO_PIPETTES_AccessToFixedTrashProp, +Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol, +Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict, +Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2, +Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3, +Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4, +Flex_X_v2_16_NO_PIPETTES_TrashBinInCol2, +Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3, +Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4, +Flex_X_v2_16_P1000_96_DropTipsWithNoTrash, +Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin, +Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict, +Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip, +Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid, +Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips, +Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict, +Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol, +Flex_X_v2_18_NO_PIPETTES_DescriptionTooLongRTP, +Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips, +OT2_S_v2_11_P10S_P300M_MM_TC1_TM_Swift, +OT2_S_v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError, +OT2_S_v2_12_P300M_P20S_FailOnRun, +OT2_S_v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3, +OT2_S_v2_13_P300M_P20S_MM_TC_TM_Smoke620Release, +OT2_S_v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots, +OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3, +OT2_S_v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots, +OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3, +OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes, +OT2_S_v2_16_NO_PIPETTES_verifyDoesNotDeadlock, +OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3, +OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume, +OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes, +OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume, +OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting, +OT2_S_v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots, +OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3, +OT2_S_v2_18_NO_PIPETTES_GoldenRTP_OT2, +OT2_S_v2_18_None_None_duplicateChoiceValue, +OT2_S_v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase, +OT2_S_v2_3_P300S_None_MM1_MM2_TM_Mix, +OT2_S_v2_4_P300M_None_MM_TM_Zymo, +OT2_S_v2_7_P20S_None_Walkthrough, +OT2_S_v3_P300SGen1_None_Gen1PipetteSimple, +OT2_S_v4_P300M_P20S_MM_TM_TC1_PD40, +OT2_S_v4_P300S_None_MM_TM_TM_MOAMTemps, +OT2_S_v6_P1000S_None_SimpleTransfer, +OT2_S_v6_P20S_P300M_HS_HSCollision, +OT2_S_v6_P20S_P300M_TransferReTransferLiquid, +OT2_S_v6_P300M_P20S_HS_Smoke620release, +OT2_S_v6_P300M_P20S_MixTransferManyLiquids, +OT2_S_v6_P300M_P300S_HS_HS_NormalUseWithTransfer, +OT2_X_v2_11_P300S_TC1_TC2_ThermocyclerMoamError, +OT2_X_v2_13_None_None_PythonSyntaxError, +OT2_X_v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots, +OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1, +OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2, +OT2_X_v2_17_P300M_P20S_HS_TC_TM_dispense_changes, +OT2_X_v2_18_None_None_NoRTPdisplay_name, +OT2_X_v2_18_None_None_StrRTPwith_unit, +OT2_X_v2_18_None_None_duplicateRTPVariableName, +OT2_X_v2_7_P300S_TwinningError, +OT2_X_v4_P300M_P20S_MM_TC1_TM_e2eTests, +OT2_X_v6_P20S_None_SimpleTransfer, +OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods " APP_ANALYSIS_TEST_PROTOCOLS_WITH_OVERRIDES=" -v2_18_NO_PIPETTES_Overrides_BadTypesInRTP, -v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice, -v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP +Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP, +Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice, +Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP " # run one -# APP_ANALYSIS_TEST_PROTOCOLS="Flex_P1000MLeft_P50MRight_HS_MM_TC_TM_2_15_ABR3_Illumina_DNA_Enrichment" -# APP_ANALYSIS_TEST_PROTOCOLS_WITH_OVERRIDES="v2_18_NO_PIPETTES_Overrides_BadTypesInRTP" +# APP_ANALYSIS_TEST_PROTOCOLS="Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4" +# APP_ANALYSIS_TEST_PROTOCOLS_WITH_OVERRIDES="Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP" FILES_FOLDER="files" diff --git a/app-testing/files/protocols/generated_protocols/.keepme b/app-testing/files/generated_protocols/.keepme similarity index 100% rename from app-testing/files/protocols/generated_protocols/.keepme rename to app-testing/files/generated_protocols/.keepme diff --git a/app-testing/files/protocols/Flex/Success/v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py b/app-testing/files/protocols/Flex_S_v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py rename to app-testing/files/protocols/Flex_S_v2_14_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py b/app-testing/files/protocols/Flex_S_v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py rename to app-testing/files/protocols/Flex_S_v2_15_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment.py b/app-testing/files/protocols/Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment.py rename to app-testing/files/protocols/Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichment.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4.py b/app-testing/files/protocols/Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4.py rename to app-testing/files/protocols/Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAEnrichmentv4.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x.py b/app-testing/files/protocols/Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x.py rename to app-testing/files/protocols/Flex_S_v2_15_P1000M_P50M_GRIP_HS_MB_TC_TM_IlluminaDNAPrep24x.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P1000S_None_SimpleNormalizeLongRight.py b/app-testing/files/protocols/Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P1000S_None_SimpleNormalizeLongRight.py rename to app-testing/files/protocols/Flex_S_v2_15_P1000S_None_SimpleNormalizeLongRight.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3.py b/app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3.py rename to app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IDTXgen96Part1to3.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3.py b/app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3.py rename to app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_MB_TC_TM_IlluminaDNAPrep96PART3.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction.py b/app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction.py rename to app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_MagMaxRNAExtraction.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction.py b/app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction.py rename to app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_MB_TM_OmegaHDQDNAExtraction.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction.py b/app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction.py rename to app-testing/files/protocols/Flex_S_v2_15_P1000_96_GRIP_HS_TM_QuickZymoMagbeadRNAExtraction.py diff --git a/app-testing/files/protocols/Flex/Success/v2_15_P50M_P1000M_KAPALibraryQuantLongv2.py b/app-testing/files/protocols/Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_15_P50M_P1000M_KAPALibraryQuantLongv2.py rename to app-testing/files/protocols/Flex_S_v2_15_P50M_P1000M_KAPALibraryQuantLongv2.py diff --git a/app-testing/files/protocols/Flex/Success/v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py b/app-testing/files/protocols/Flex_S_v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py rename to app-testing/files/protocols/Flex_S_v2_16_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py diff --git a/app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_DeckConfiguration1NoModules.py b/app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_DeckConfiguration1NoModules.py rename to app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModules.py diff --git a/app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures.py b/app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures.py rename to app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_DeckConfiguration1NoModulesNoFixtures.py diff --git a/app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1.py b/app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1.py rename to app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1.py diff --git a/app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures.py b/app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures.py rename to app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_DeckConfiguration1NoFixtures.py diff --git a/app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke.py b/app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke.py rename to app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_Smoke.py diff --git a/app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement.py b/app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement.py rename to app-testing/files/protocols/Flex_S_v2_16_P1000_96_GRIP_HS_MB_TC_TM_TriggerPrepareForMountMovement.py diff --git a/app-testing/files/protocols/Flex/Success/v2_16_P1000_96_TC_PartialTipPickupColumn.py b/app-testing/files/protocols/Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_16_P1000_96_TC_PartialTipPickupColumn.py rename to app-testing/files/protocols/Flex_S_v2_16_P1000_96_TC_PartialTipPickupColumn.py diff --git a/app-testing/files/protocols/Flex/Success/v2_16_P1000_96_TC_PartialTipPickupSingle.py b/app-testing/files/protocols/Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_16_P1000_96_TC_PartialTipPickupSingle.py rename to app-testing/files/protocols/Flex_S_v2_16_P1000_96_TC_PartialTipPickupSingle.py diff --git a/app-testing/files/protocols/Flex/Success/v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py b/app-testing/files/protocols/Flex_S_v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py rename to app-testing/files/protocols/Flex_S_v2_17_NO_PIPETTES_TC_verifyThermocyclerLoadedSlots.py diff --git a/app-testing/files/protocols/Flex/Success/v2_18_NO_PIPETTES_GoldenRTP.py b/app-testing/files/protocols/Flex_S_v2_18_NO_PIPETTES_GoldenRTP.py similarity index 100% rename from app-testing/files/protocols/Flex/Success/v2_18_NO_PIPETTES_GoldenRTP.py rename to app-testing/files/protocols/Flex_S_v2_18_NO_PIPETTES_GoldenRTP.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_AccessToFixedTrashProp.py b/app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_AccessToFixedTrashProp.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_AccessToFixedTrashProp.py rename to app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_AccessToFixedTrashProp.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol.py b/app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol.py rename to app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_MM_MagneticModuleInFlexProtocol.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict.py b/app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict.py rename to app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TC_TrashBinAndThermocyclerConflict.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TM_ModuleInCol2.py b/app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TM_ModuleInCol2.py rename to app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TM_ModuleInCol2.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3.py b/app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3.py rename to app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol3.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4.py b/app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4.py rename to app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TM_ModuleInStagingAreaCol4.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TrashBinInCol2.py b/app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TrashBinInCol2.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TrashBinInCol2.py rename to app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TrashBinInCol2.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3.py b/app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3.py rename to app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol3.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4.py b/app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4.py rename to app-testing/files/protocols/Flex_X_v2_16_NO_PIPETTES_TrashBinInStagingAreaCol4.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_P1000_96_DropTipsWithNoTrash.py b/app-testing/files/protocols/Flex_X_v2_16_P1000_96_DropTipsWithNoTrash.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_P1000_96_DropTipsWithNoTrash.py rename to app-testing/files/protocols/Flex_X_v2_16_P1000_96_DropTipsWithNoTrash.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin.py b/app-testing/files/protocols/Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin.py rename to app-testing/files/protocols/Flex_X_v2_16_P1000_96_GRIP_DropLabwareIntoTrashBin.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict.py b/app-testing/files/protocols/Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict.py rename to app-testing/files/protocols/Flex_X_v2_16_P1000_96_TC_PartialTipPickupThermocyclerLidConflict.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip.py b/app-testing/files/protocols/Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip.py rename to app-testing/files/protocols/Flex_X_v2_16_P1000_96_TC_PartialTipPickupTryToReturnTip.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid.py b/app-testing/files/protocols/Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid.py rename to app-testing/files/protocols/Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLid.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips.py b/app-testing/files/protocols/Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips.py rename to app-testing/files/protocols/Flex_X_v2_16_P1000_96_TC_pipetteCollisionWithThermocyclerLidClips.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TM_ModuleAndWasteChuteConflict.py b/app-testing/files/protocols/Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_P1000_96_TM_ModuleAndWasteChuteConflict.py rename to app-testing/files/protocols/Flex_X_v2_16_P1000_96_TM_ModuleAndWasteChuteConflict.py diff --git a/app-testing/files/protocols/Flex/Error/v2_16_P300MGen2_None_OT2PipetteInFlexProtocol.py b/app-testing/files/protocols/Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_16_P300MGen2_None_OT2PipetteInFlexProtocol.py rename to app-testing/files/protocols/Flex_X_v2_16_P300MGen2_None_OT2PipetteInFlexProtocol.py diff --git a/app-testing/files/protocols/Flex/Error/v2_18_NO_PIPETTES_DescriptionTooLongRTP.py b/app-testing/files/protocols/Flex_X_v2_18_NO_PIPETTES_DescriptionTooLongRTP.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_18_NO_PIPETTES_DescriptionTooLongRTP.py rename to app-testing/files/protocols/Flex_X_v2_18_NO_PIPETTES_DescriptionTooLongRTP.py diff --git a/app-testing/files/protocols/Flex/Error/v2_18_NO_PIPETTES_Overrides_BadTypesInRTP.py b/app-testing/files/protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_18_NO_PIPETTES_Overrides_BadTypesInRTP.py rename to app-testing/files/protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP.py diff --git a/app-testing/files/protocols/Flex/Error/v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice.py b/app-testing/files/protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice.py rename to app-testing/files/protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice.py diff --git a/app-testing/files/protocols/Flex/Error/v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP.py b/app-testing/files/protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP.py similarity index 100% rename from app-testing/files/protocols/Flex/Error/v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP.py rename to app-testing/files/protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP.py diff --git a/app-testing/files/protocols/Flex/Error/v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips.json b/app-testing/files/protocols/Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips.json similarity index 100% rename from app-testing/files/protocols/Flex/Error/v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips.json rename to app-testing/files/protocols/Flex_X_v8_P1000_96_HS_GRIP_TC_TM_GripperCollisionWithTips.json diff --git a/app-testing/files/protocols/OT2/Success/v2_11_P10S_P300M_MM_TC1_TM_Swift.py b/app-testing/files/protocols/OT2_S_v2_11_P10S_P300M_MM_TC1_TM_Swift.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_11_P10S_P300M_MM_TC1_TM_Swift.py rename to app-testing/files/protocols/OT2_S_v2_11_P10S_P300M_MM_TC1_TM_Swift.py diff --git a/app-testing/files/protocols/OT2/Success/v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError.py b/app-testing/files/protocols/OT2_S_v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError.py rename to app-testing/files/protocols/OT2_S_v2_12_NO_PIPETTES_Python310SyntaxRobotAnalysisOnlyError.py diff --git a/app-testing/files/protocols/OT2/Success/v2_12_P300M_P20S_FailOnRun.py b/app-testing/files/protocols/OT2_S_v2_12_P300M_P20S_FailOnRun.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_12_P300M_P20S_FailOnRun.py rename to app-testing/files/protocols/OT2_S_v2_12_P300M_P20S_FailOnRun.py diff --git a/app-testing/files/protocols/OT2/Success/v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3.py b/app-testing/files/protocols/OT2_S_v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3.py rename to app-testing/files/protocols/OT2_S_v2_13_P300M_P20S_HS_TC_TM_SmokeTestV3.py diff --git a/app-testing/files/protocols/OT2/Success/v2_13_P300M_P20S_MM_TC_TM_Smoke620Release.py b/app-testing/files/protocols/OT2_S_v2_13_P300M_P20S_MM_TC_TM_Smoke620Release.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_13_P300M_P20S_MM_TC_TM_Smoke620Release.py rename to app-testing/files/protocols/OT2_S_v2_13_P300M_P20S_MM_TC_TM_Smoke620Release.py diff --git a/app-testing/files/protocols/OT2/Success/v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py b/app-testing/files/protocols/OT2_S_v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py rename to app-testing/files/protocols/OT2_S_v2_14_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py diff --git a/app-testing/files/protocols/OT2/Success/v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3.py b/app-testing/files/protocols/OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3.py rename to app-testing/files/protocols/OT2_S_v2_14_P300M_P20S_HS_TC_TM_SmokeTestV3.py diff --git a/app-testing/files/protocols/OT2/Success/v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py b/app-testing/files/protocols/OT2_S_v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py rename to app-testing/files/protocols/OT2_S_v2_15_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py diff --git a/app-testing/files/protocols/OT2/Success/v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3.py b/app-testing/files/protocols/OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3.py rename to app-testing/files/protocols/OT2_S_v2_15_P300M_P20S_HS_TC_TM_SmokeTestV3.py diff --git a/app-testing/files/protocols/OT2/Success/v2_15_P300M_P20S_HS_TC_TM_dispense_changes.py b/app-testing/files/protocols/OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_15_P300M_P20S_HS_TC_TM_dispense_changes.py rename to app-testing/files/protocols/OT2_S_v2_15_P300M_P20S_HS_TC_TM_dispense_changes.py diff --git a/app-testing/files/protocols/OT2/Success/v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py b/app-testing/files/protocols/OT2_S_v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py rename to app-testing/files/protocols/OT2_S_v2_16_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py diff --git a/app-testing/files/protocols/OT2/Success/v2_16_NO_PIPETTES_verifyDoesNotDeadlock.py b/app-testing/files/protocols/OT2_S_v2_16_NO_PIPETTES_verifyDoesNotDeadlock.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_16_NO_PIPETTES_verifyDoesNotDeadlock.py rename to app-testing/files/protocols/OT2_S_v2_16_NO_PIPETTES_verifyDoesNotDeadlock.py diff --git a/app-testing/files/protocols/OT2/Success/v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3.py b/app-testing/files/protocols/OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3.py rename to app-testing/files/protocols/OT2_S_v2_16_P300M_P20S_HS_TC_TM_SmokeTestV3.py diff --git a/app-testing/files/protocols/OT2/Success/v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume.py b/app-testing/files/protocols/OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume.py rename to app-testing/files/protocols/OT2_S_v2_16_P300M_P20S_HS_TC_TM_aspirateDispenseMix0Volume.py diff --git a/app-testing/files/protocols/OT2/Success/v2_16_P300M_P20S_HS_TC_TM_dispense_changes.py b/app-testing/files/protocols/OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_16_P300M_P20S_HS_TC_TM_dispense_changes.py rename to app-testing/files/protocols/OT2_S_v2_16_P300M_P20S_HS_TC_TM_dispense_changes.py diff --git a/app-testing/files/protocols/OT2/Success/v2_16_P300M_P20S_aspirateDispenseMix0Volume.py b/app-testing/files/protocols/OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_16_P300M_P20S_aspirateDispenseMix0Volume.py rename to app-testing/files/protocols/OT2_S_v2_16_P300M_P20S_aspirateDispenseMix0Volume.py diff --git a/app-testing/files/protocols/OT2/Success/v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting.py b/app-testing/files/protocols/OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting.py rename to app-testing/files/protocols/OT2_S_v2_16_P300S_None_verifyNoFloatingPointErrorInPipetting.py diff --git a/app-testing/files/protocols/OT2/Success/v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py b/app-testing/files/protocols/OT2_S_v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py rename to app-testing/files/protocols/OT2_S_v2_17_NO_PIPETTES_TC_VerifyThermocyclerLoadedSlots.py diff --git a/app-testing/files/protocols/OT2/Success/v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3.py b/app-testing/files/protocols/OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3.py rename to app-testing/files/protocols/OT2_S_v2_17_P300M_P20S_HS_TC_TM_SmokeTestV3.py diff --git a/app-testing/files/protocols/OT2/Success/v2_17_P300M_P20S_HS_TC_TM_dispense_changes.py b/app-testing/files/protocols/OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_17_P300M_P20S_HS_TC_TM_dispense_changes.py rename to app-testing/files/protocols/OT2_S_v2_17_P300M_P20S_HS_TC_TM_dispense_changes.py diff --git a/app-testing/files/protocols/OT2/Success/v2_18_NO_PIPETTES_GoldenRTP_OT2.py b/app-testing/files/protocols/OT2_S_v2_18_NO_PIPETTES_GoldenRTP_OT2.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_18_NO_PIPETTES_GoldenRTP_OT2.py rename to app-testing/files/protocols/OT2_S_v2_18_NO_PIPETTES_GoldenRTP_OT2.py diff --git a/app-testing/files/protocols/OT2/Success/v2_18_None_None_duplicateChoiceValue.py b/app-testing/files/protocols/OT2_S_v2_18_None_None_duplicateChoiceValue.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_18_None_None_duplicateChoiceValue.py rename to app-testing/files/protocols/OT2_S_v2_18_None_None_duplicateChoiceValue.py diff --git a/app-testing/files/protocols/OT2/Success/v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase.py b/app-testing/files/protocols/OT2_S_v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase.py rename to app-testing/files/protocols/OT2_S_v2_2_P300S_None_MM1_MM2_EngageMagHeightFromBase.py diff --git a/app-testing/files/protocols/OT2/Success/v2_3_P300S_None_MM1_MM2_TM_Mix.py b/app-testing/files/protocols/OT2_S_v2_3_P300S_None_MM1_MM2_TM_Mix.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_3_P300S_None_MM1_MM2_TM_Mix.py rename to app-testing/files/protocols/OT2_S_v2_3_P300S_None_MM1_MM2_TM_Mix.py diff --git a/app-testing/files/protocols/OT2/Success/v2_4_P300M_None_MM_TM_Zymo.py b/app-testing/files/protocols/OT2_S_v2_4_P300M_None_MM_TM_Zymo.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_4_P300M_None_MM_TM_Zymo.py rename to app-testing/files/protocols/OT2_S_v2_4_P300M_None_MM_TM_Zymo.py diff --git a/app-testing/files/protocols/OT2/Success/v2_7_P20S_None_Walkthrough.py b/app-testing/files/protocols/OT2_S_v2_7_P20S_None_Walkthrough.py similarity index 100% rename from app-testing/files/protocols/OT2/Success/v2_7_P20S_None_Walkthrough.py rename to app-testing/files/protocols/OT2_S_v2_7_P20S_None_Walkthrough.py diff --git a/app-testing/files/protocols/OT2/Success/v3_P300SGen1_None_Gen1PipetteSimple.json b/app-testing/files/protocols/OT2_S_v3_P300SGen1_None_Gen1PipetteSimple.json similarity index 100% rename from app-testing/files/protocols/OT2/Success/v3_P300SGen1_None_Gen1PipetteSimple.json rename to app-testing/files/protocols/OT2_S_v3_P300SGen1_None_Gen1PipetteSimple.json diff --git a/app-testing/files/protocols/OT2/Success/v4_P300M_P20S_MM_TM_TC1_PD40.json b/app-testing/files/protocols/OT2_S_v4_P300M_P20S_MM_TM_TC1_PD40.json similarity index 100% rename from app-testing/files/protocols/OT2/Success/v4_P300M_P20S_MM_TM_TC1_PD40.json rename to app-testing/files/protocols/OT2_S_v4_P300M_P20S_MM_TM_TC1_PD40.json diff --git a/app-testing/files/protocols/OT2/Success/v4_P300S_None_MM_TM_TM_MOAMTemps.json b/app-testing/files/protocols/OT2_S_v4_P300S_None_MM_TM_TM_MOAMTemps.json similarity index 100% rename from app-testing/files/protocols/OT2/Success/v4_P300S_None_MM_TM_TM_MOAMTemps.json rename to app-testing/files/protocols/OT2_S_v4_P300S_None_MM_TM_TM_MOAMTemps.json diff --git a/app-testing/files/protocols/OT2/Success/v6_P1000S_None_SimpleTransfer.json b/app-testing/files/protocols/OT2_S_v6_P1000S_None_SimpleTransfer.json similarity index 100% rename from app-testing/files/protocols/OT2/Success/v6_P1000S_None_SimpleTransfer.json rename to app-testing/files/protocols/OT2_S_v6_P1000S_None_SimpleTransfer.json diff --git a/app-testing/files/protocols/OT2/Success/v6_P20S_P300M_TransferReTransferLiquid.json b/app-testing/files/protocols/OT2_S_v6_P20S_P300M_TransferReTransferLiquid.json similarity index 100% rename from app-testing/files/protocols/OT2/Success/v6_P20S_P300M_TransferReTransferLiquid.json rename to app-testing/files/protocols/OT2_S_v6_P20S_P300M_TransferReTransferLiquid.json diff --git a/app-testing/files/protocols/OT2/Success/v6_P300M_P20S_HS_Smoke620release.json b/app-testing/files/protocols/OT2_S_v6_P300M_P20S_HS_Smoke620release.json similarity index 100% rename from app-testing/files/protocols/OT2/Success/v6_P300M_P20S_HS_Smoke620release.json rename to app-testing/files/protocols/OT2_S_v6_P300M_P20S_HS_Smoke620release.json diff --git a/app-testing/files/protocols/OT2/Success/v6_P300M_P20S_MixTransferManyLiquids.json b/app-testing/files/protocols/OT2_S_v6_P300M_P20S_MixTransferManyLiquids.json similarity index 100% rename from app-testing/files/protocols/OT2/Success/v6_P300M_P20S_MixTransferManyLiquids.json rename to app-testing/files/protocols/OT2_S_v6_P300M_P20S_MixTransferManyLiquids.json diff --git a/app-testing/files/protocols/OT2/Success/v6_P300M_P300S_HS_HS_NormalUseWithTransfer.json b/app-testing/files/protocols/OT2_S_v6_P300M_P300S_HS_HS_NormalUseWithTransfer.json similarity index 100% rename from app-testing/files/protocols/OT2/Success/v6_P300M_P300S_HS_HS_NormalUseWithTransfer.json rename to app-testing/files/protocols/OT2_S_v6_P300M_P300S_HS_HS_NormalUseWithTransfer.json diff --git a/app-testing/files/protocols/OT2/Error/v2_11_P300S_TC1_TC2_ThermocyclerMoamError.py b/app-testing/files/protocols/OT2_X_v2_11_P300S_TC1_TC2_ThermocyclerMoamError.py similarity index 100% rename from app-testing/files/protocols/OT2/Error/v2_11_P300S_TC1_TC2_ThermocyclerMoamError.py rename to app-testing/files/protocols/OT2_X_v2_11_P300S_TC1_TC2_ThermocyclerMoamError.py diff --git a/app-testing/files/protocols/OT2/Error/v2_13_None_None_PythonSyntaxError.py b/app-testing/files/protocols/OT2_X_v2_13_None_None_PythonSyntaxError.py similarity index 100% rename from app-testing/files/protocols/OT2/Error/v2_13_None_None_PythonSyntaxError.py rename to app-testing/files/protocols/OT2_X_v2_13_None_None_PythonSyntaxError.py diff --git a/app-testing/files/protocols/OT2/Error/v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1.py b/app-testing/files/protocols/OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1.py similarity index 100% rename from app-testing/files/protocols/OT2/Error/v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1.py rename to app-testing/files/protocols/OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin1.py diff --git a/app-testing/files/protocols/OT2/Error/v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2.py b/app-testing/files/protocols/OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2.py similarity index 100% rename from app-testing/files/protocols/OT2/Error/v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2.py rename to app-testing/files/protocols/OT2_X_v2_16_None_None_HS_HeaterShakerConflictWithTrashBin2.py diff --git a/app-testing/files/protocols/OT2/Error/v2_18_None_None_NoRTPdisplay_name.py b/app-testing/files/protocols/OT2_X_v2_18_None_None_NoRTPdisplay_name.py similarity index 100% rename from app-testing/files/protocols/OT2/Error/v2_18_None_None_NoRTPdisplay_name.py rename to app-testing/files/protocols/OT2_X_v2_18_None_None_NoRTPdisplay_name.py diff --git a/app-testing/files/protocols/OT2/Error/v2_18_None_None_StrRTPwith_unit.py b/app-testing/files/protocols/OT2_X_v2_18_None_None_StrRTPwith_unit.py similarity index 100% rename from app-testing/files/protocols/OT2/Error/v2_18_None_None_StrRTPwith_unit.py rename to app-testing/files/protocols/OT2_X_v2_18_None_None_StrRTPwith_unit.py diff --git a/app-testing/files/protocols/OT2/Error/v2_18_None_None_duplicateRTPVariableName.py b/app-testing/files/protocols/OT2_X_v2_18_None_None_duplicateRTPVariableName.py similarity index 100% rename from app-testing/files/protocols/OT2/Error/v2_18_None_None_duplicateRTPVariableName.py rename to app-testing/files/protocols/OT2_X_v2_18_None_None_duplicateRTPVariableName.py diff --git a/app-testing/files/protocols/OT2/Error/v2_7_P300S_TwinningError.py b/app-testing/files/protocols/OT2_X_v2_7_P300S_TwinningError.py similarity index 100% rename from app-testing/files/protocols/OT2/Error/v2_7_P300S_TwinningError.py rename to app-testing/files/protocols/OT2_X_v2_7_P300S_TwinningError.py diff --git a/app-testing/files/protocols/OT2/Error/v4_P300M_P20S_MM_TC1_TM_e2eTests.json b/app-testing/files/protocols/OT2_X_v4_P300M_P20S_MM_TC1_TM_e2eTests.json similarity index 100% rename from app-testing/files/protocols/OT2/Error/v4_P300M_P20S_MM_TC1_TM_e2eTests.json rename to app-testing/files/protocols/OT2_X_v4_P300M_P20S_MM_TC1_TM_e2eTests.json diff --git a/app-testing/files/protocols/OT2/Error/v6_P20S_None_SimpleTransfer.json b/app-testing/files/protocols/OT2_X_v6_P20S_None_SimpleTransfer.json similarity index 100% rename from app-testing/files/protocols/OT2/Error/v6_P20S_None_SimpleTransfer.json rename to app-testing/files/protocols/OT2_X_v6_P20S_None_SimpleTransfer.json diff --git a/app-testing/files/protocols/OT2/Error/v6_P20S_P300M_HS_HSCollision.json b/app-testing/files/protocols/OT2_X_v6_P20S_P300M_HS_HSCollision.json similarity index 100% rename from app-testing/files/protocols/OT2/Error/v6_P20S_P300M_HS_HSCollision.json rename to app-testing/files/protocols/OT2_X_v6_P20S_P300M_HS_HSCollision.json diff --git a/app-testing/files/protocols/OT2/Error/v6_P300M_P20S_HS_MM_TM_TC_AllMods.json b/app-testing/files/protocols/OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods.json similarity index 100% rename from app-testing/files/protocols/OT2/Error/v6_P300M_P20S_HS_MM_TM_TC_AllMods.json rename to app-testing/files/protocols/OT2_X_v6_P300M_P20S_HS_MM_TM_TC_AllMods.json diff --git a/app-testing/files/protocols/README.md b/app-testing/files/protocols/README.md index 9fbbf2cdc2f..a405a88ecbc 100644 --- a/app-testing/files/protocols/README.md +++ b/app-testing/files/protocols/README.md @@ -1,34 +1,33 @@ # File Organization -## Folder Structure -Robot/outcome - ## File Naming -Assuming Gen2 on Pipettes and modules -Include a suffix 1 if not +Assuming Gen2 on Pipettes and modules; Include a suffix 1 if not. ### Naming Convention in order + +- Robot (OT2 or Flex) +- Success (S) or Failure (X) - PD or API version - Pipettes (do your best) - Modules - - GRIP(gripper) - - HS(heater shaker) - - MM(magnetic module) - - MB(magnetic block) - - TC(Thermocycler) - - TM(Temperature Module) + - GRIP(gripper) + - HS(heater shaker) + - MM(magnetic module) + - MB(magnetic block) + - TC(Thermocycler) + - TM(Temperature Module) - Overrides `Overrides` or nothing -- Description +- Description (don't exceed 25 characters) ### Examples #### .py -2.18_None_None_Overrides_BadTypesInRTP.py -2.16_None_None_AnalysisError_TrashBinInStagingAreaCol4.py -2.16_P1000_96_GRIPPER_HS_TM_TC_MB_DeckConfiguration1_NoFixtures.py +OT2_2.18_None_None_Overrides_BadTypesInRTP.py +OT2_2.16_None_None_AnalysisError_TrashBinInStagingAreaCol4.py +OT2_2.16_P1000_96_GRIPPER_HS_TM_TC_MB_DeckConfiguration1_NoFixtures.py #### .json -5_2_6_P300M_P20S_MM_TM_TC1_PD40.json +OT2_5_2_6_P300M_P20S_MM_TM_TC1_PD40.json diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0affe60373][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_maximum].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0affe60373][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_maximum].json new file mode 100644 index 00000000000..e413eb3c896 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[0affe60373][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_maximum].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 2, + "command_output": "Usage: python -m opentrons.cli analyze [OPTIONS] FILES...\nTry 'python -m opentrons.cli analyze --help' for help.\n\nError: Invalid value for 'FILES...': Path '/var/lib/ot/protocols/generated_protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_maximum.py' does not exist.\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[1e5825a070][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_minimum].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[1e5825a070][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_minimum].json new file mode 100644 index 00000000000..63a9a2b758a --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[1e5825a070][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_minimum].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 2, + "command_output": "Usage: python -m opentrons.cli analyze [OPTIONS] FILES...\nTry 'python -m opentrons.cli analyze --help' for help.\n\nError: Invalid value for 'FILES...': Path '/var/lib/ot/protocols/generated_protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_minimum.py' does not exist.\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[38b5298c77][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_less_than_minimum].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[38b5298c77][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_less_than_minimum].json new file mode 100644 index 00000000000..bf3cb2b3a98 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[38b5298c77][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_less_than_minimum].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 1, + "command_output": "Traceback (most recent call last):\n File \"/usr/local/lib/python3.10/runpy.py\", line 187, in _run_module_as_main\n mod_name, mod_spec, code = _get_module_details(mod_name, _Error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 146, in _get_module_details\n return _get_module_details(pkg_main_name, error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 110, in _get_module_details\n __import__(pkg_name)\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/__init__.py\", line 9, in \n from .analyze import analyze\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/analyze.py\", line 31, in \n from opentrons.util.performance_helpers import track_analysis\n File \"/usr/local/lib/python3.10/site-packages/opentrons/util/performance_helpers.py\", line 4, in \n from opentrons_shared_data.performance.dev_types import (\nModuleNotFoundError: No module named 'opentrons_shared_data.performance'\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4fadc166c0][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_variable_name].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4fadc166c0][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_variable_name].json new file mode 100644 index 00000000000..d154fb760d8 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[4fadc166c0][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_variable_name].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 2, + "command_output": "Usage: python -m opentrons.cli analyze [OPTIONS] FILES...\nTry 'python -m opentrons.cli analyze --help' for help.\n\nError: Invalid value for 'FILES...': Path '/var/lib/ot/protocols/generated_protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_variable_name.py' does not exist.\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[51a761307d][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_greater_than_maximum].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[51a761307d][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_greater_than_maximum].json new file mode 100644 index 00000000000..bf3cb2b3a98 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[51a761307d][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultOutOfRangeRTP_Override_default_greater_than_maximum].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 1, + "command_output": "Traceback (most recent call last):\n File \"/usr/local/lib/python3.10/runpy.py\", line 187, in _run_module_as_main\n mod_name, mod_spec, code = _get_module_details(mod_name, _Error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 146, in _get_module_details\n return _get_module_details(pkg_main_name, error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 110, in _get_module_details\n __import__(pkg_name)\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/__init__.py\", line 9, in \n from .analyze import analyze\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/analyze.py\", line 31, in \n from opentrons.util.performance_helpers import track_analysis\n File \"/usr/local/lib/python3.10/site-packages/opentrons/util/performance_helpers.py\", line 4, in \n from opentrons_shared_data.performance.dev_types import (\nModuleNotFoundError: No module named 'opentrons_shared_data.performance'\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[60c1d39463][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_int_default_no_matching_choices].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[60c1d39463][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_int_default_no_matching_choices].json new file mode 100644 index 00000000000..bf3cb2b3a98 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[60c1d39463][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_int_default_no_matching_choices].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 1, + "command_output": "Traceback (most recent call last):\n File \"/usr/local/lib/python3.10/runpy.py\", line 187, in _run_module_as_main\n mod_name, mod_spec, code = _get_module_details(mod_name, _Error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 146, in _get_module_details\n return _get_module_details(pkg_main_name, error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 110, in _get_module_details\n __import__(pkg_name)\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/__init__.py\", line 9, in \n from .analyze import analyze\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/analyze.py\", line 31, in \n from opentrons.util.performance_helpers import track_analysis\n File \"/usr/local/lib/python3.10/site-packages/opentrons/util/performance_helpers.py\", line 4, in \n from opentrons_shared_data.performance.dev_types import (\nModuleNotFoundError: No module named 'opentrons_shared_data.performance'\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6ad5590adf][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_unit].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6ad5590adf][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_unit].json new file mode 100644 index 00000000000..63d50a052ed --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6ad5590adf][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_unit].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 2, + "command_output": "Usage: python -m opentrons.cli analyze [OPTIONS] FILES...\nTry 'python -m opentrons.cli analyze --help' for help.\n\nError: Invalid value for 'FILES...': Path '/var/lib/ot/protocols/generated_protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_unit.py' does not exist.\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e744cbb48][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_str_default_no_matching_choices].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e744cbb48][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_str_default_no_matching_choices].json new file mode 100644 index 00000000000..bf3cb2b3a98 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[6e744cbb48][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_str_default_no_matching_choices].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 1, + "command_output": "Traceback (most recent call last):\n File \"/usr/local/lib/python3.10/runpy.py\", line 187, in _run_module_as_main\n mod_name, mod_spec, code = _get_module_details(mod_name, _Error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 146, in _get_module_details\n return _get_module_details(pkg_main_name, error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 110, in _get_module_details\n __import__(pkg_name)\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/__init__.py\", line 9, in \n from .analyze import analyze\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/analyze.py\", line 31, in \n from opentrons.util.performance_helpers import track_analysis\n File \"/usr/local/lib/python3.10/site-packages/opentrons/util/performance_helpers.py\", line 4, in \n from opentrons_shared_data.performance.dev_types import (\nModuleNotFoundError: No module named 'opentrons_shared_data.performance'\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7d06568bfe][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_display_name].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7d06568bfe][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_display_name].json new file mode 100644 index 00000000000..8bd304d3726 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7d06568bfe][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_display_name].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 2, + "command_output": "Usage: python -m opentrons.cli analyze [OPTIONS] FILES...\nTry 'python -m opentrons.cli analyze --help' for help.\n\nError: Invalid value for 'FILES...': Path '/var/lib/ot/protocols/generated_protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_display_name.py' does not exist.\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7f2ef0eaff][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_float_default_no_matching_choices].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7f2ef0eaff][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_float_default_no_matching_choices].json new file mode 100644 index 00000000000..bf3cb2b3a98 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[7f2ef0eaff][Flex_X_v2_18_NO_PIPETTES_Overrides_DefaultChoiceNoMatchChoice_Override_float_default_no_matching_choices].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 1, + "command_output": "Traceback (most recent call last):\n File \"/usr/local/lib/python3.10/runpy.py\", line 187, in _run_module_as_main\n mod_name, mod_spec, code = _get_module_details(mod_name, _Error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 146, in _get_module_details\n return _get_module_details(pkg_main_name, error)\n File \"/usr/local/lib/python3.10/runpy.py\", line 110, in _get_module_details\n __import__(pkg_name)\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/__init__.py\", line 9, in \n from .analyze import analyze\n File \"/usr/local/lib/python3.10/site-packages/opentrons/cli/analyze.py\", line 31, in \n from opentrons.util.performance_helpers import track_analysis\n File \"/usr/local/lib/python3.10/site-packages/opentrons/util/performance_helpers.py\", line 4, in \n from opentrons_shared_data.performance.dev_types import (\nModuleNotFoundError: No module named 'opentrons_shared_data.performance'\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a06502b2dc][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_description].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a06502b2dc][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_description].json new file mode 100644 index 00000000000..0ad6ddac98e --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[a06502b2dc][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_description].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 2, + "command_output": "Usage: python -m opentrons.cli analyze [OPTIONS] FILES...\nTry 'python -m opentrons.cli analyze --help' for help.\n\nError: Invalid value for 'FILES...': Path '/var/lib/ot/protocols/generated_protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_description.py' does not exist.\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b806f07be9][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_value].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b806f07be9][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_value].json new file mode 100644 index 00000000000..2e07febfda5 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[b806f07be9][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_value].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 2, + "command_output": "Usage: python -m opentrons.cli analyze [OPTIONS] FILES...\nTry 'python -m opentrons.cli analyze --help' for help.\n\nError: Invalid value for 'FILES...': Path '/var/lib/ot/protocols/generated_protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_choice_value.py' does not exist.\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e496fec176][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_default].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e496fec176][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_default].json new file mode 100644 index 00000000000..2b7469934b5 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[e496fec176][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_default].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 2, + "command_output": "Usage: python -m opentrons.cli analyze [OPTIONS] FILES...\nTry 'python -m opentrons.cli analyze --help' for help.\n\nError: Invalid value for 'FILES...': Path '/var/lib/ot/protocols/generated_protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_default.py' does not exist.\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +} diff --git a/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f88b7d6e30][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_display_name].json b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f88b7d6e30][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_display_name].json new file mode 100644 index 00000000000..cf209b282f3 --- /dev/null +++ b/app-testing/tests/__snapshots__/analyses_snapshot_test/test_analysis_snapshot[f88b7d6e30][Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_display_name].json @@ -0,0 +1,18 @@ +{ + "commands": [], + "config": {}, + "errors": [ + { + "analysis_execution_time": null, + "command_exit_code": 2, + "command_output": "Usage: python -m opentrons.cli analyze [OPTIONS] FILES...\nTry 'python -m opentrons.cli analyze --help' for help.\n\nError: Invalid value for 'FILES...': Path '/var/lib/ot/protocols/generated_protocols/Flex_X_v2_18_NO_PIPETTES_Overrides_BadTypesInRTP_Override_wrong_type_in_display_name.py' does not exist.\n" + } + ], + "files": [], + "labware": [], + "liquids": [], + "metadata": [], + "modules": [], + "pipettes": [], + "runTimeParameters": [] +}