diff --git a/loadExperiment.py b/loadExperiment.py index 3d753fa3ff54d85de035ac412130161e1138ae0b..d84854c340ab5f7879ec45d73e3e4844d7e93153 100644 --- a/loadExperiment.py +++ b/loadExperiment.py @@ -12,8 +12,10 @@ repo = None folder = None commandsFile = None +instructionFile = None inputFiles = [] +outputFiles = [] beforeHash = None @@ -37,7 +39,7 @@ def init(repository,branch) -> None : os.chdir(folder) def getParameters() -> None : - global commandsFile, inputFiles, outputFiles, beforeHash + global commandsFile, inputFiles, outputFiles, beforeHash, instructionFile if not (os.path.exists('experimentResume.yaml')): raise Exception("No exeperimentResume.yaml file found, the branch is not an exeperiment") with open('experimentResume.yaml', 'r') as stream: @@ -46,6 +48,8 @@ def getParameters() -> None : outputFiles = parameters.get('outputs') inputFiles = parameters.get('inputs') beforeHash = parameters.get('checksums') + instructionFile = parameters.get('instructions') + def runExperiment() -> None : file = open(commandsFile, "r") @@ -55,6 +59,15 @@ def runExperiment() -> None : process.check_returncode() print("done") +def checkForInstructions() -> None : + if (instructionFile != None) : + print("You can check the instructions for the experiment in the file : " + instructionFile) + else : + warnings.warn("No instructions for the experiment found in the repository") + print("Run the exepriment and then press enter when it's done") + done = "nope" + while (done != "") : + done = input() def genChecksum(file) -> str : hash_md5 = hashlib.md5() @@ -67,7 +80,7 @@ def genChecksums() -> list[dict]: checksums = [] for file in os.listdir(OUTPUT_FOLDER) : if not file.endswith(".gitkeep"): - checksums.append({file : genChecksum(f'outputs/{file}')}) + checksums.append({f"{OUTPUT_FOLDER}/{file}" : genChecksum(f'{OUTPUT_FOLDER}/{file}')}) return checksums @@ -76,7 +89,7 @@ def compareChecksums() -> bool: for (dict1, dict2) in zip(beforeHash, genChecksums()): for (key, value) in dict1.items(): if dict2.get(key) != value : - warnings.warn(f"{OUTPUT_FOLDER}/{key} has changed") + warnings.warn(f"{key} has changed") changes = True return changes @@ -87,11 +100,14 @@ def run(repository, branch) -> None : print("Getting the experiment parameters ...") getParameters() print("Running the experiment ...") - runExperiment() + if (commandsFile != None) : + runExperiment() + else : + checkForInstructions() print("Comparing checksums of the outputs ...") if (compareChecksums()) : print("The exepriment was reproduced with succes but some output files are differents.") else : print("The exepriment was reproduced with succes !") - -#TODO : laisser à l'utilisateur le temps de reproduire l'experience \ No newline at end of file + +#TODO : sur la mainExperiment15, on a du changement quand on reproduit l'expérience ... \ No newline at end of file diff --git a/registerExperiment.py b/registerExperiment.py index df348cf080c19aa2edee11e41248fc3969dc7c46..b9daa5d4e3d05a97444cb29dbd7a039daee523d1 100644 --- a/registerExperiment.py +++ b/registerExperiment.py @@ -17,7 +17,8 @@ inputFiles = [] paramsFolder = None paramsFiles = [] -commandsFile = "commands.txt" +commandsFile = None +instructionFile = None experimentName = None @@ -111,11 +112,19 @@ def searchForParamsFolder() -> None: def askForCommandsFile() -> None: global commandsFile commandsFile = input("Enter the name of the commands file: ") - if commandsFile == "": - raise Exception("No commands file given") if not fileExists(commandsFile): raise Exception(f"{commandsFile} file does not exist") +def askForInstructionFile() -> None : + global instructionFile + print("If you have an instruction file, enter its name, otherwise press enter") + instructionFile = input() + if instructionFile == "": + warnings.warn("No instruction file given, make sure you give instructions to reproduce the experiment along with it") + else: + if not fileExists(instructionFile): + raise Exception(f"{instructionFile} file does not exist") + def registeringExperimentInputs(inputs) -> None: with open(commandsFile, "w") as file: for input in inputs: @@ -173,24 +182,21 @@ def writeInYaml() -> None: cur_yaml.update({"inputs":inputFiles}) cur_yaml.update({"outputs":outputFiles}) cur_yaml.update({"params":paramsFiles}) + cur_yaml.update({"instruction":instructionFile}) checksums = {"checksums":genChecksums()} cur_yaml.update(checksums) with open('experimentResume.yaml', 'w') as yamlFile: yaml.safe_dump(cur_yaml, yamlFile) -def successfullyCreatedNewBranch(name) -> bool : - try: - repository.git.checkout('-b',name) - return True - except Exception as e: - return False def pushBranch(version=1) -> None: print("Pushing branch...") - while not(successfullyCreatedNewBranch(f"{experimentName}Experiment{version}")): + while f"{experimentName}Experiment{version}" in repository.remote().refs: + print(f"{experimentName}Experiment{version} already exists") version += 1 newTag = f"{currentTag}-e{version}" print(f"creating {experimentName}Experiment{version} branch and pushing changes to it ...") + repository.git.checkout(b=f"{experimentName}Experiment{version}") repository.git.add(all=True) repository.git.commit(m=f"{experimentName}Experiment{version}") repository.git.push('--set-upstream',repository.remote().name,f"{experimentName}Experiment{version}") @@ -224,6 +230,7 @@ def run(folder) -> None : askForCommandsFile() runExperiment() else: + askForInstructionFile() done = "" while(done != "done"): done = input("Run your experiment and then type 'done' when you are done : ") @@ -235,4 +242,7 @@ def run(folder) -> None : scanParameters() checkGeneratedFiles() writeInYaml() + print("Please check the experimentResume.yaml, if everything is correct, press enter to continue, otherwise type \"abort\"") + if input() == "abort": + raise Exception("Aborted") pushBranch()