Source code for hypernets.experiment.job

# -*- coding: utf-8 -*-
import abc
import os.path

import pandas as pd

from hypernets import hyperctl
from hypernets.utils import logging

logger = logging.get_logger(__name__)


[docs]class ExperimentJobCreator(metaclass=abc.ABCMeta):
[docs] @abc.abstractmethod def create_and_run_experiment(self): raise NotImplemented
@staticmethod def _read_file(file_path): require_file_msg = "Csv and parquet files are supported(file name end with 'csv' or 'parquet')" assert file_path is not None, "file_path can not be None" splits = os.path.basename(file_path).split(".") if len(splits) < 2: raise ValueError(require_file_msg) suffix = splits[-1] if suffix == 'csv': return pd.read_csv(file_path) elif suffix == 'parquet': return pd.read_parquet(file_path) else: raise ValueError(require_file_msg)
[docs]class CompeteExperimentJobCreator(ExperimentJobCreator, metaclass=abc.ABCMeta):
[docs] def create_and_run_experiment(self): job_params = hyperctl.get_job_params() if 'run_kwargs' in job_params: run_kwargs = job_params.pop('run_kwargs') else: run_kwargs = {} make_kwargs = job_params job_working_dir = hyperctl.api.get_job_data_dir() assert job_working_dir exp = self.create_experiment_with_params(make_kwargs, job_working_dir) assert exp exp.run(**run_kwargs)
[docs] @staticmethod def set_default_eval_dir(job_working_dir, make_kwargs): # set default prediction dir if enable persist if make_kwargs.get('evaluation_persist_prediction') is True: if make_kwargs.get('evaluation_persist_prediction_dir') is None: make_kwargs['evaluation_persist_prediction_dir'] = f"{job_working_dir}/prediction"
[docs] @staticmethod def set_default_render_path(job_working_dir, make_kwargs): # set default report file path if make_kwargs.get('report_render') == 'excel': report_render_options = make_kwargs.get('report_render_options') default_excel_report_path = f"{job_working_dir}/report.xlsx" if report_render_options is not None: if report_render_options.get('file_path') is None: report_render_options['file_path'] = default_excel_report_path make_kwargs['report_render_options'] = report_render_options else: pass # use user setting else: make_kwargs['report_render_options'] = {'file_path': default_excel_report_path} return make_kwargs
[docs] def create_experiment_with_params(self, make_kwargs, job_working_dir): self.set_default_eval_dir(job_working_dir, make_kwargs) self.set_default_render_path(job_working_dir, make_kwargs) return self._create_experiment(make_kwargs)
@abc.abstractmethod def _create_experiment(self, make_options): raise NotImplemented