Spaces:
Runtime error
Runtime error
| import os,shutil | |
| import argparse | |
| def create_file(file_path,file_content): | |
| with open(file_path,"w") as f: | |
| f.write(file_content) | |
| def create_data(data_dir,dataset_name,task_dir): | |
| # call src/task/scripts/create_dataset.py dataset_name | |
| os.system(f"python {task_dir}/scripts/create_dataset.py {dataset_name}") | |
| register_datasets_file_path = os.path.join(data_dir,"register_datasets.py") | |
| create_file(register_datasets_file_path, | |
| f"""# register your datasets here | |
| datasets = ["{dataset_name}"] | |
| """) | |
| def create_model(model_dir:str, model_name:str, task_dir:str): | |
| base_model_interface_path = os.path.join(model_dir,"base_model_interface.py") | |
| create_file(base_model_interface_path, | |
| """import numpy as np | |
| from abc import ABC, abstractmethod | |
| # BaseModel Abstract class | |
| # all the models within this task must inherit this class | |
| class BaseModel(ABC): | |
| @abstractmethod | |
| def train(self): | |
| pass | |
| @abstractmethod | |
| def evaluate(self): | |
| pass | |
| @abstractmethod | |
| def predict(self,inputs): | |
| pass | |
| @abstractmethod | |
| def show_results(self): | |
| pass | |
| """) | |
| # call src/task/scripts/create_model.py model_name | |
| os.system(f"python {task_dir}/scripts/create_model.py {model_name}") | |
| register_models_path = os.path.join(model_dir,"register_models.py") | |
| create_file(register_models_path, | |
| f"""# register models of this task here | |
| models = ["{model_name}"] | |
| """) | |
| losses_path = os.path.join(model_dir,"losses.py") | |
| create_file(losses_path, | |
| """# define loss functions here | |
| """) | |
| metrics_path = os.path.join(model_dir,"metrics.py") | |
| create_file(metrics_path, | |
| """# define metrics here | |
| """) | |
| callbacks_path = os.path.join(model_dir,"callbacks.py") | |
| create_file(callbacks_path, | |
| """# define callbacks here | |
| """) | |
| dataloaders_path = os.path.join(model_dir,"dataloaders.py") | |
| create_file(dataloaders_path, | |
| """# define dataloaders here | |
| """) | |
| def create_scripts(scripts_dir,task): | |
| create_dataset_path = os.path.join(scripts_dir,"create_dataset.py") | |
| create_file(create_dataset_path, | |
| f"""import os,shutil | |
| import argparse | |
| def create_file(file_path,file_content): | |
| with open(file_path,"w") as f: | |
| f.write(file_content) | |
| def create_dataset(args): | |
| dataset_name = args.name | |
| force_flag = args.force | |
| datasets_dir = os.path.join('src','{task}','data','datasets') | |
| os.makedirs(datasets_dir,exist_ok=True) | |
| dataset_path = os.path.join(datasets_dir,dataset_name+".py") | |
| # deleted old dataset if force flag exists and dataset already exists | |
| if os.path.exists(dataset_path): | |
| if force_flag: | |
| print("Replacing existing dataset:",dataset_name) | |
| shutil.remove(dataset_path) | |
| else: | |
| print(f"{{dataset_name}} already exists, use --force flag if you want to reset it to default") | |
| exit() | |
| create_file(dataset_path, | |
| \"\"\"# write dataset downloading preparation code in this file | |
| # Note: download_prepare() this is specially choosen name so don't change this function's name | |
| # you can add, remove and change any other function from this file | |
| def download_prepare(): | |
| \\"\\"\\" function used to download dataset and apply | |
| all type of data preprocessing required to prepare the dataset | |
| \\"\\"\\" | |
| download_dataset() | |
| unzip_dataset() | |
| clean_dataset() | |
| move_dataset() | |
| def download_dataset(): | |
| \\"\\"\\"download dataset\\"\\"\\" | |
| pass | |
| def unzip_dataset(): | |
| \\"\\"\\"unzip dataset(if required)\\"\\"\\" | |
| pass | |
| def clean_dataset(): | |
| \\"\\"\\"clean dataset(if required)\\"\\"\\" | |
| pass | |
| def move_dataset(): | |
| \\"\\"\\"move dataset to processed folder\\"\\"\\" | |
| pass | |
| \"\"\") | |
| def main(): | |
| parser = argparse.ArgumentParser(description="Create blueprint dataset") | |
| parser.add_argument('name',type=str,help="name of dataset (e.g., pascal-voc)") | |
| parser.add_argument("--force",action="store_true",help="forcefully replace old existing dataset to default",default=False) | |
| args = parser.parse_args() | |
| create_dataset(args) | |
| if __name__=="__main__": | |
| main() | |
| """) | |
| create_model_path = os.path.join(scripts_dir,"create_model.py") | |
| create_file(create_model_path, | |
| f"""import os,shutil | |
| import argparse | |
| def create_file(file_path,file_content): | |
| with open(file_path,"w") as f: | |
| f.write(file_content) | |
| def create_model(args): | |
| model_name = args.name | |
| force_flag = args.force | |
| models_dir = os.path.join('src','{task}','model',"models") | |
| os.makedirs(models_dir,exist_ok=True) | |
| model_path = os.path.join(models_dir,model_name+".py") | |
| # deleted old model if force flag exists and model already exists | |
| if os.path.exists(model_path): | |
| if force_flag: | |
| print("Replacing existing model:",model_name) | |
| shutil.remove(model_path) | |
| else: | |
| print(f"{{model_name}} already exists, use --force flag if you want to reset it to default") | |
| exit() | |
| model_name_camel_case = "".join([part.capitalize() for part in model_name.split("_")]) | |
| create_file(model_path, | |
| f\"\"\"from src.{task}.model.base_model_interface import BaseModel | |
| class Model(BaseModel): | |
| def train(self): | |
| pass | |
| def predict(self,inputs): | |
| pass | |
| \"\"\") | |
| def main(): | |
| parser = argparse.ArgumentParser(description="Create blueprint model") | |
| parser.add_argument('name',type=str,help="name of model (e.g., model_v2)") | |
| parser.add_argument("--force",action="store_true",help="forcefully replace old existing model to default",default=False) | |
| args = parser.parse_args() | |
| create_model(args) | |
| if __name__=="__main__": | |
| main() | |
| """) | |
| def create_task(args): | |
| """Used to create task within our main task""" | |
| task = args.task | |
| force_flag = args.force | |
| dataset_name = "dataset1" | |
| model_name = "model1" | |
| task_dir = os.path.join('src',task) | |
| data_dir = os.path.join(task_dir,'data') | |
| model_dir = os.path.join(task_dir,'model') | |
| scripts_dir = os.path.join(task_dir,"scripts") | |
| # print(scripts_dir) | |
| # deleted old task if force flag exists and task already exists | |
| if os.path.exists(task_dir): | |
| if force_flag: | |
| print("Replacing existing task:",task) | |
| shutil.rmtree(task_dir) | |
| else: | |
| print(f"{task} already exists, use --force flag if you want to reset it to default") | |
| exit() | |
| # create empty folders | |
| os.makedirs(task_dir,exist_ok=True) | |
| os.makedirs(data_dir,exist_ok=True) | |
| os.makedirs(model_dir,exist_ok=True) | |
| os.makedirs(scripts_dir,exist_ok=True) | |
| # make config validator file | |
| validate_config_file_path = os.path.join(task_dir,"validate_config.py") | |
| create_file(validate_config_file_path, | |
| '''# from cerberus import Validator | |
| # write config file schema here | |
| # based on cerberus Validator | |
| schema = { | |
| "seed": { | |
| "type": "integer", | |
| }, | |
| "image_size": {"type": "integer", "required": True}, | |
| "train_size": {"type": "float", "required": True}, | |
| "shuffle": {"type": "boolean", "required": True}, | |
| "batch_size": { | |
| "type": "integer", | |
| "required": True, | |
| }, | |
| "epochs": { | |
| "type": "integer", | |
| "required": True, | |
| }, | |
| } | |
| ''') | |
| # make scripts files | |
| create_scripts(scripts_dir,task) | |
| # make data files | |
| create_data(data_dir,dataset_name,task_dir) | |
| # make model files | |
| create_model(model_dir,model_name,task_dir) | |
| def main(): | |
| parser = argparse.ArgumentParser(description="Create blueprint task") | |
| parser.add_argument('task',type=str,help="task of project (e.g., simple_regression_colorization)") | |
| parser.add_argument("--force",action="store_true",help="forcefully replace old existing task to default",default=False) | |
| args = parser.parse_args() | |
| create_task(args) | |
| if __name__=="__main__": | |
| main() | |