From 3511f8717de098884b66e0120a190299ee82cfc4 Mon Sep 17 00:00:00 2001 From: aramoto99 <107896581+aramoto99@users.noreply.github.com> Date: Mon, 15 Aug 2022 14:00:40 +0900 Subject: [PATCH] Feature/database (#36) * Fix #19 (#20) * Fix #21 (#22) * fix README (#23) * Fixed a problem in which Snapshot could not be saved during parallel execution. * Add function of delete any data in DB/FS. * Fix code style Co-authored-by: Takashi OKADA Co-authored-by: KanaiYuma-aist <105629713+KanaiYuma-aist@users.noreply.github.com> --- aiaccel/argument.py | 1 - aiaccel/master/abstract.py | 48 ----------- aiaccel/module.py | 48 ----------- aiaccel/optimizer/abstract.py | 36 ++++---- aiaccel/optimizer/grid/search.py | 13 ++- aiaccel/optimizer/nelder_mead/search.py | 13 ++- aiaccel/optimizer/random/search.py | 13 ++- aiaccel/optimizer/sobol/search.py | 13 ++- aiaccel/optimizer/tpe/search.py | 13 ++- aiaccel/scheduler/abstract.py | 61 +++++++------- aiaccel/storage/error/db.py | 12 +++ aiaccel/storage/error/fs.py | 4 + aiaccel/storage/hp/db.py | 12 +++ aiaccel/storage/hp/fs.py | 4 + aiaccel/storage/jobstate/db.py | 12 +++ aiaccel/storage/jobstate/fs.py | 4 + aiaccel/storage/model/fs.py | 3 + aiaccel/storage/pid/db.py | 12 +++ aiaccel/storage/pid/fs.py | 3 + aiaccel/storage/result/db.py | 12 +++ aiaccel/storage/result/fs.py | 4 + aiaccel/storage/serializer/db.py | 12 +++ aiaccel/storage/timestamp/db.py | 8 ++ aiaccel/storage/timestamp/fs.py | 4 + aiaccel/storage/trial/db.py | 8 ++ aiaccel/storage/trial/fs.py | 4 + aiaccel/view.py | 4 +- tests/resumption/resumption_test.py | 3 + tests/unit/abci_test/test_abci_batch.py | 1 - .../evaluator_test/test_abstract_evaluator.py | 4 - .../evaluator_test/test_maximize_evaluator.py | 1 - .../evaluator_test/test_minimize_evaluator.py | 1 - .../unit/master_test/test_abstract_master.py | 69 --------------- tests/unit/master_test/test_local_master.py | 1 - .../test_abstract_verification.py | 5 -- .../optimizer_test/test_abstract_optimizer.py | 21 ----- tests/unit/optimizer_test/test_grid_search.py | 3 - .../optimizer_test/test_nelder_mead_search.py | 1 - .../unit/optimizer_test/test_random_search.py | 1 - .../unit/optimizer_test/test_sobol_search.py | 1 - tests/unit/optimizer_test/test_tpe_search.py | 3 +- tests/unit/plot/test_plot.py | 1 - .../scheduler_test/job/test_job_thread.py | 1 - .../scheduler_test/test_abci_scheduler.py | 2 - .../scheduler_test/test_abstract_scheduler.py | 19 +---- .../scheduler_test/test_local_scheduler.py | 2 - tests/unit/storage/db/test_error.py | 33 ++++++++ tests/unit/storage/db/test_hp.py | 84 ++++++++++++++++++- tests/unit/storage/db/test_jobstate.py | 46 ++++++++++ tests/unit/storage/db/test_pid.py | 46 ++++++++++ tests/unit/storage/db/test_result.py | 34 ++++++++ tests/unit/storage/db/test_serialize.py | 68 +++++++++++++++ tests/unit/storage/db/test_timestamp.py | 74 ++++++++++++++++ tests/unit/storage/db/test_trial.py | 40 +++++++++ tests/unit/storage/fs/test_fs_error.py | 34 ++++++++ tests/unit/storage/fs/test_fs_hp.py | 80 +++++++++++++++++- tests/unit/storage/fs/test_fs_jobstate.py | 45 ++++++++++ tests/unit/storage/fs/test_fs_pid.py | 46 ++++++++++ tests/unit/storage/fs/test_fs_result.py | 34 ++++++++ tests/unit/storage/fs/test_fs_serialize.py | 67 +++++++++++++++ tests/unit/storage/fs/test_fs_timestamp.py | 74 ++++++++++++++++ tests/unit/storage/fs/test_fs_trial.py | 40 +++++++++ tests/unit/test_module.py | 15 +--- tests/unit/test_wrapper_tools.py | 1 - tests/unit/util_test/test_random.py | 2 - tests/unit/view/test_view.py | 1 - 66 files changed, 1071 insertions(+), 314 deletions(-) diff --git a/aiaccel/argument.py b/aiaccel/argument.py index 7b53ef228..f5c2969b9 100644 --- a/aiaccel/argument.py +++ b/aiaccel/argument.py @@ -7,6 +7,5 @@ def __new__(cls): p.add_argument('--config', '-c', type=str) p.add_argument('--resume', type=int, default=None) p.add_argument('--clean', nargs='?', const=True, default=False) - p.add_argument('--nosave', nargs='?', const=True, default=False) p.add_argument('--fs', nargs='?', const=True, default=False) return vars(p.parse_args()) diff --git a/aiaccel/master/abstract.py b/aiaccel/master/abstract.py index 794e31bc8..fc1845f09 100644 --- a/aiaccel/master/abstract.py +++ b/aiaccel/master/abstract.py @@ -61,15 +61,10 @@ def __init__(self, options: dict) -> None: self.trial_number = self.config.trial_number.get() self.serialize = Serializer(self.config, 'master', self.options) - barrier = multiprocessing.Barrier(3) - self.set_barrier(barrier) - # optimizer self.o = create_optimizer(options['config'])(options) - self.o.set_barrier(barrier) # scheduler self.s = create_scheduler(options['config'])(options) - self.s.set_barrier(barrier) self.worker_o = multiprocessing.Process(target=self.o.start) self.worker_s = multiprocessing.Process(target=self.s.start) @@ -250,49 +245,6 @@ def inner_loop_post_process(self) -> bool: return True - def _serialize(self) -> None: - """Serialize this module. - - Returns: - dict: The serialized master objects. - """ - if self.options['nosave'] is True: - return - else: - self.serialize_data = { - 'start_time': self.start_time, - 'loop_start_time': self.loop_start_time - } - - if self.current_max_trial_number is None: - return - - self.serialize.serialize( - self.current_max_trial_number, - self.serialize_data, - self.get_native_random_state(), - self.get_numpy_random_state() - ) - - def _deserialize(self, trial_id: int) -> None: - """Deserialize this module. - - Args: - dict_objects(dict): A dictionary including serialized objects. - - Returns: - None - """ - data = self.serialize.deserialize(trial_id) - - loop_counts = data['optimization_variables']['loop_count'] - - if loop_counts is None: - return - - self.loop_count = loop_counts - print(f"(master)set inner loop count: {self.loop_count}") - def other_process_is_alive(self) -> bool: if ( not self.worker_o.is_alive() or diff --git a/aiaccel/module.py b/aiaccel/module.py index e9ac4f89a..abe3aa4bf 100644 --- a/aiaccel/module.py +++ b/aiaccel/module.py @@ -1,12 +1,10 @@ import aiaccel import logging import os -import threading import time import sys from aiaccel.config import Config from aiaccel.util.process import is_process_running -from multiprocessing import Barrier from pathlib import Path import numpy as np import random @@ -32,7 +30,6 @@ class AbstractModule(object): 5. call post_process() Attributes: - barrier (multiprocessing.Barrier): A barrier to synchronize processes. config (ConfileWrapper): A config object. dict_hp (Path): A path to hp directory. dict_lock (Path): A path to lock directory. @@ -99,7 +96,6 @@ def __init__(self, options: dict) -> None: self.hp_running = 0 self.hp_finished = 0 self.sleep_time = 1.0 - self.barrier = None self.seed = self.config.randseed.get() self.storage = Storage( self.ws, @@ -107,7 +103,6 @@ def __init__(self, options: dict) -> None: config_path=self.config.config_path ) self.management_trial_id = TrialId(self.options['config']) - self.barrier_timeout = (self.config.batch_job_timeout.get() * self.config.job_retry.get()) self.serialize_datas = {} self.deserialize_datas = {} @@ -191,17 +186,6 @@ def print_dict_state(self) -> None: self.hp_running) ) - def set_barrier(self, barrier: Barrier) -> None: - """Set a multiprocessing barrier. - - Args: - barrier (multiprocessing.Barrier): A barrier object. - - Returns: - None - """ - self.barrier = barrier - def set_logger( self, logger_name: str, @@ -262,10 +246,6 @@ def pre_process(self) -> None: self.storage.alive.set_any_process_state(module_type, 1) self.storage.pid.set_any_process_pid(module_type, os.getpid()) - self.set_native_random_seed() - self.set_numpy_random_seed() - self.resume() - def post_process(self) -> None: """Post-procedure after executed processes. @@ -368,39 +348,11 @@ def loop(self) -> None: self.wait() self.loop_count += 1 - if not self.is_barrier(): - break - if not self.check_error(): break - self._serialize() - - if not self.is_barrier(): - break - self.loop_post_process() - def is_barrier(self) -> bool: - """Is barrier waiting working well or not. - - Returns: - bool: It returns false if the barrier object is not set or the - processes are not running. Otherwise, it returns true. - """ - self.logger.debug("Waiting for sync") - - start_time = time.time() - check_cycle_time = 60 - - while self.is_process_alive() and (time.time() - start_time) < self.barrier_timeout: - try: - self.barrier.wait(check_cycle_time) - return True - except threading.BrokenBarrierError: - self.wait() - return False - def is_process_alive(self) -> bool: """Is processes(master, optimizer and scheduler) running or not. diff --git a/aiaccel/optimizer/abstract.py b/aiaccel/optimizer/abstract.py index dec056d9a..aa1495ff2 100644 --- a/aiaccel/optimizer/abstract.py +++ b/aiaccel/optimizer/abstract.py @@ -79,6 +79,7 @@ def register_ready(self, param: dict) -> str: # wd/ self.trial_id.increment() + self._serialize() param['trial_id'] = self.trial_id.get() # for p in param['parameters']: # self.storage.hp.set_any_trial_param( @@ -149,6 +150,9 @@ def pre_process(self) -> None: None """ super().pre_process() + self.set_native_random_seed() + self.set_numpy_random_seed() + self.resume() def post_process(self) -> None: """Post-procedure after executed processes. @@ -235,31 +239,23 @@ def inner_loop_post_process(self) -> bool: return True def _serialize(self) -> None: - """Serialize this module. - - Returns: - None - """ - if self.options['nosave'] is True: - pass - else: - self.serialize.serialize( - trial_id=self.current_max_trial_number, - optimization_variables=self.serialize_datas, - native_random_state=self.get_native_random_state(), - numpy_random_state=self.get_numpy_random_state() - ) + pass def _deserialize(self, trial_id: int) -> None: - """Deserialize this module. + pass + + def resume(self) -> None: + """ When in resume mode, load the previous + optimization data in advance. Args: - dict_objects(dict): A dictionary including serialized objects. + None Returns: None """ - d = self.serialize.deserialize(trial_id) - self.deserialize_datas = d['optimization_variables'] - self.set_native_random_state(d['native_random_state']) - self.set_numpy_random_state(d['numpy_random_state']) + if ( + self.options['resume'] is not None and + self.options['resume'] > 0 + ): + self._deserialize(self.options['resume']) diff --git a/aiaccel/optimizer/grid/search.py b/aiaccel/optimizer/grid/search.py index bbba74c77..2304cbbed 100644 --- a/aiaccel/optimizer/grid/search.py +++ b/aiaccel/optimizer/grid/search.py @@ -175,7 +175,12 @@ def _serialize(self) -> None: 'ready_params': self.ready_params, 'generate_index': self.generate_index } - super()._serialize() + self.serialize.serialize( + trial_id=self.trial_id.integer, + optimization_variables=self.serialize_datas, + native_random_state=self.get_native_random_state(), + numpy_random_state=self.get_numpy_random_state() + ) def _deserialize(self, trial_id: int) -> None: """Deserialize this module. @@ -186,7 +191,11 @@ def _deserialize(self, trial_id: int) -> None: Returns: None """ - super()._deserialize(trial_id) + d = self.serialize.deserialize(trial_id) + self.deserialize_datas = d['optimization_variables'] + self.set_native_random_state(d['native_random_state']) + self.set_numpy_random_state(d['numpy_random_state']) + self.ready_params = self.deserialize_datas['ready_params'] self.generate_index = self.deserialize_datas['generate_index'] self.num_of_generated_parameter = self.deserialize_datas['num_of_generated_parameter'] diff --git a/aiaccel/optimizer/nelder_mead/search.py b/aiaccel/optimizer/nelder_mead/search.py index 5128f5648..3504b2cd0 100644 --- a/aiaccel/optimizer/nelder_mead/search.py +++ b/aiaccel/optimizer/nelder_mead/search.py @@ -348,7 +348,12 @@ def _serialize(self) -> None: 'nelder_mead': self.nelder_mead.serialize(), 'order': self.order } - super()._serialize() + self.serialize.serialize( + trial_id=self.trial_id.integer, + optimization_variables=self.serialize_datas, + native_random_state=self.get_native_random_state(), + numpy_random_state=self.get_numpy_random_state() + ) def _deserialize(self, trial_id: int) -> None: """Deserialize this module. @@ -359,7 +364,11 @@ def _deserialize(self, trial_id: int) -> None: Returns: None """ - super()._deserialize(trial_id) + d = self.serialize.deserialize(trial_id) + self.deserialize_datas = d['optimization_variables'] + self.set_native_random_state(d['native_random_state']) + self.set_numpy_random_state(d['numpy_random_state']) + parameter_pool = copy.deepcopy(self.deserialize_datas['parameter_pool']) for p_pool in parameter_pool: for p_pool_param in p_pool['parameters']: diff --git a/aiaccel/optimizer/random/search.py b/aiaccel/optimizer/random/search.py index 56d497539..2a52168b6 100644 --- a/aiaccel/optimizer/random/search.py +++ b/aiaccel/optimizer/random/search.py @@ -52,7 +52,12 @@ def _serialize(self) -> dict: 'num_of_generated_parameter': self.num_of_generated_parameter, 'loop_count': self.loop_count } - super()._serialize() + self.serialize.serialize( + trial_id=self.trial_id.integer, + optimization_variables=self.serialize_datas, + native_random_state=self.get_native_random_state(), + numpy_random_state=self.get_numpy_random_state() + ) def _deserialize(self, trial_id: int) -> None: """ Deserialize this module. @@ -63,6 +68,10 @@ def _deserialize(self, trial_id: int) -> None: Returns: None """ - super()._deserialize(trial_id) + d = self.serialize.deserialize(trial_id) + self.deserialize_datas = d['optimization_variables'] + self.set_native_random_state(d['native_random_state']) + self.set_numpy_random_state(d['numpy_random_state']) + self.num_of_generated_parameter = self.deserialize_datas['num_of_generated_parameter'] self.loop_count = self.deserialize_datas['loop_count'] diff --git a/aiaccel/optimizer/sobol/search.py b/aiaccel/optimizer/sobol/search.py index 15a18c304..2f2198c75 100644 --- a/aiaccel/optimizer/sobol/search.py +++ b/aiaccel/optimizer/sobol/search.py @@ -82,7 +82,12 @@ def _serialize(self) -> dict: 'loop_count': self.loop_count, 'generate_index': self.generate_index } - super()._serialize() + self.serialize.serialize( + trial_id=self.trial_id.integer, + optimization_variables=self.serialize_datas, + native_random_state=self.get_native_random_state(), + numpy_random_state=self.get_numpy_random_state() + ) def _deserialize(self, trial_id: int) -> None: """Deserialize this module. @@ -93,7 +98,11 @@ def _deserialize(self, trial_id: int) -> None: Returns: None """ - super()._deserialize(trial_id) + d = self.serialize.deserialize(trial_id) + self.deserialize_datas = d['optimization_variables'] + self.set_native_random_state(d['native_random_state']) + self.set_numpy_random_state(d['numpy_random_state']) + self.generate_index = self.deserialize_datas['generate_index'] self.loop_count = self.deserialize_datas['loop_count'] self.num_of_generated_parameter = self.deserialize_datas['num_of_generated_parameter'] diff --git a/aiaccel/optimizer/tpe/search.py b/aiaccel/optimizer/tpe/search.py index b06b86b24..dd5b3955f 100644 --- a/aiaccel/optimizer/tpe/search.py +++ b/aiaccel/optimizer/tpe/search.py @@ -171,7 +171,12 @@ def _serialize(self) -> None: 'parameter_pool': parameter_pool, 'study': self.study } - super()._serialize() + self.serialize.serialize( + trial_id=self.trial_id.integer, + optimization_variables=self.serialize_datas, + native_random_state=self.get_native_random_state(), + numpy_random_state=self.get_numpy_random_state() + ) def _deserialize(self, trial_id: int) -> None: @@ -183,7 +188,11 @@ def _deserialize(self, trial_id: int) -> None: Returns: None """ - super()._deserialize(trial_id) + d = self.serialize.deserialize(trial_id) + self.deserialize_datas = d['optimization_variables'] + self.set_native_random_state(d['native_random_state']) + self.set_numpy_random_state(d['numpy_random_state']) + parameter_pool = copy.deepcopy(self.deserialize_datas['parameter_pool']) for _, params in parameter_pool.items(): for param in params: diff --git a/aiaccel/scheduler/abstract.py b/aiaccel/scheduler/abstract.py index ab47c6425..065426bcf 100644 --- a/aiaccel/scheduler/abstract.py +++ b/aiaccel/scheduler/abstract.py @@ -49,9 +49,9 @@ def __init__(self, options: dict) -> None: self.available_resource = self.max_resource self.stats = [] self.jobs = [] + self.job_status = {} self.algorithm = None self.sleep_time = self.config.sleep_time_scheduler.get() - self.job_status = {} self.serialize = Serializer(self.config, 'scheduler', self.options) def change_state_finished_trials(self) -> None: @@ -133,6 +133,10 @@ def pre_process(self) -> None: None """ super().pre_process() + self.set_native_random_seed() + self.set_numpy_random_seed() + self.resume() + self.algorithm = schdule_sampling.RamsomSampling(self.config) self.change_state_finished_trials() @@ -223,6 +227,7 @@ def inner_loop_main_process(self) -> bool: if len(selected_threads) > 0: for th in selected_threads: if th.get_state_name() == 'Scheduling': + self._serialize(th.trial_id) th.schedule() self.logger.debug( f"trial id: {th.trial_id} has been scheduled." @@ -248,24 +253,16 @@ def inner_loop_post_process(self) -> bool: return False return True - def _serialize(self) -> dict: - """Serialize this module. - - Returns: - dict: The serialized scheduler objects. - """ + def _serialize(self, trial_id) -> None: self.serialize_datas = {'loop_count': self.loop_count} - if self.options['nosave'] is True: - pass - else: - self.serialize.serialize( - trial_id=self.current_max_trial_number, - optimization_variables=self.serialize_datas, - native_random_state=self.get_native_random_state(), - numpy_random_state=self.get_numpy_random_state() - ) + self.serialize.serialize( + trial_id=trial_id, + optimization_variables=self.serialize_datas, + native_random_state=self.get_native_random_state(), + numpy_random_state=self.get_numpy_random_state() + ) def _deserialize(self, trial_id: int) -> None: """Deserialize this module. @@ -297,23 +294,7 @@ def parse_trial_id(self, command: str) -> str: """ pass - def update_scheduler_status(self): - # states = [ - # { - # "trial_id": job['trial_id'], - # "jobstate": job['thread'].get_state_name() - # } for job in self.jobs - # ] - # self.storage.jobstate.set_any_trial_jobstates(states=states) - - for job in self.jobs: - self.storage.jobstate.set_any_trial_jobstate( - trial_id=job['trial_id'], - state=job['thread'].get_state_name() - ) - def check_error(self): - # self.update_scheduler_status() # Check state machin jobstates = self.storage.jobstate.get_all_trial_jobstate() @@ -381,3 +362,19 @@ def all_done(self): num_trials += jobstates.count(s) return (num_trials >= self.config.trial_number.get()) + + def resume(self) -> None: + """ When in resume mode, load the previous + optimization data in advance. + + Args: + None + + Returns: + None + """ + if ( + self.options['resume'] is not None and + self.options['resume'] > 0 + ): + self._deserialize(self.options['resume']) diff --git a/aiaccel/storage/error/db.py b/aiaccel/storage/error/db.py index 679ff6fb3..5aa4f90b6 100644 --- a/aiaccel/storage/error/db.py +++ b/aiaccel/storage/error/db.py @@ -101,3 +101,15 @@ def all_delete(self) -> None: session.commit() session.expunge_all() self.engine.dispose() + + @retry(_MAX_NUM=60, _DELAY=1.0) + def delete_any_trial_error(self, trial_id: int) -> None: + """ + Returns: + None + """ + session = self.session() + session.query(ErrorTable).filter(ErrorTable.trial_id == trial_id).delete() + session.commit() + session.expunge_all() + self.engine.dispose() diff --git a/aiaccel/storage/error/fs.py b/aiaccel/storage/error/fs.py index f1eae5b03..f8508d181 100644 --- a/aiaccel/storage/error/fs.py +++ b/aiaccel/storage/error/fs.py @@ -76,3 +76,7 @@ def all_delete(self) -> None: self.update() for d in self.errors.data: d.remove() + + def delete_any_trial_error(self, trial_id: int) -> None: + self.update() + self.errors.remove(trial_id) diff --git a/aiaccel/storage/hp/db.py b/aiaccel/storage/hp/db.py index 967c0b843..fbd2cd652 100644 --- a/aiaccel/storage/hp/db.py +++ b/aiaccel/storage/hp/db.py @@ -108,3 +108,15 @@ def all_delete(self) -> None: session.commit() session.expunge_all() self.engine.dispose() + + @retry(_MAX_NUM=60, _DELAY=1.0) + def delete_any_trial_params(self, trial_id: int) -> None: + """ + Returns: + None + """ + session = self.session() + session.query(HpTable).filter(HpTable.trial_id == trial_id).delete() + session.commit() + session.expunge_all() + self.engine.dispose() diff --git a/aiaccel/storage/hp/fs.py b/aiaccel/storage/hp/fs.py index 81c5209c1..cf2beb7b9 100644 --- a/aiaccel/storage/hp/fs.py +++ b/aiaccel/storage/hp/fs.py @@ -128,3 +128,7 @@ def all_delete(self) -> None: for hp in self.datas.data: if hp is not None: hp.remove() + + def delete_any_trial_params(self, trial_id: int) -> None: + self.update() + self.datas.remove(trial_id) diff --git a/aiaccel/storage/jobstate/db.py b/aiaccel/storage/jobstate/db.py index f2346ddc4..840687ade 100644 --- a/aiaccel/storage/jobstate/db.py +++ b/aiaccel/storage/jobstate/db.py @@ -121,6 +121,18 @@ def get_all_trial_jobstate(self) -> list: ] return jobstates + @retry(_MAX_NUM=60, _DELAY=1.0) + def delete_any_trial_jobstate(self, trial_id: int) -> None: + """ + Returns: + None + """ + session = self.session() + session.query(JobStateTable).filter(JobStateTable.trial_id == trial_id).delete() + session.commit() + session.expunge_all() + self.engine.dispose() + @retry(_MAX_NUM=60, _DELAY=1.0) def is_failure(self, trial_id: int) -> bool: """Whether the jobstate of the specified trial is Failuer or not. diff --git a/aiaccel/storage/jobstate/fs.py b/aiaccel/storage/jobstate/fs.py index 6536c8e84..35cfb0133 100644 --- a/aiaccel/storage/jobstate/fs.py +++ b/aiaccel/storage/jobstate/fs.py @@ -58,3 +58,7 @@ def is_failure(self, trial_id: int) -> bool: def all_delete(self) -> None: self.update() self.jobstates.all_delete() + + def delete_any_trial_jobstate(self, trial_id: int) -> None: + self.update() + self.jobstates.remove(trial_id) diff --git a/aiaccel/storage/model/fs.py b/aiaccel/storage/model/fs.py index 35627b785..bbccaa8b3 100644 --- a/aiaccel/storage/model/fs.py +++ b/aiaccel/storage/model/fs.py @@ -103,6 +103,9 @@ def get(self, index: int) -> any: def set(self, index: int, set_data: any): self.arr[index].write(set_data) + def remove(self, index: int): + self.arr[index].remove() + @property def len(self): return len(self.arr) diff --git a/aiaccel/storage/pid/db.py b/aiaccel/storage/pid/db.py index 9cc22172d..5a828c1bf 100644 --- a/aiaccel/storage/pid/db.py +++ b/aiaccel/storage/pid/db.py @@ -79,3 +79,15 @@ def all_delete(self) -> None: session.commit() session.expunge_all() self.engine.dispose() + + @retry(_MAX_NUM=60, _DELAY=1.0) + def delete_any_process_pid(self, process_name: str) -> None: + """ + Returns: + None + """ + session = self.session() + session.query(PidTable).filter(PidTable.process_name == process_name).delete() + session.commit() + session.expunge_all() + self.engine.dispose() diff --git a/aiaccel/storage/pid/fs.py b/aiaccel/storage/pid/fs.py index 9dfb049e9..9fad47f78 100644 --- a/aiaccel/storage/pid/fs.py +++ b/aiaccel/storage/pid/fs.py @@ -48,3 +48,6 @@ def all_delete(self): self.master.remove() self.optimizer.remove() self.scheduler.remove() + + def delete_any_process_pid(self, process_name: str) -> None: + self._(process_name).remove() diff --git a/aiaccel/storage/result/db.py b/aiaccel/storage/result/db.py index 233a64070..1816aa85b 100644 --- a/aiaccel/storage/result/db.py +++ b/aiaccel/storage/result/db.py @@ -139,3 +139,15 @@ def all_delete(self) -> None: session.commit() session.expunge_all() self.engine.dispose() + + @retry(_MAX_NUM=60, _DELAY=1.0) + def delete_any_trial_objective(self, trial_id) -> None: + """ + Returns: + None + """ + session = self.session() + session.query(ResultTable).filter(ResultTable.trial_id == trial_id).delete() + session.commit() + session.expunge_all() + self.engine.dispose() diff --git a/aiaccel/storage/result/fs.py b/aiaccel/storage/result/fs.py index 259b2bb24..5e78afe87 100644 --- a/aiaccel/storage/result/fs.py +++ b/aiaccel/storage/result/fs.py @@ -152,3 +152,7 @@ def all_delete(self) -> None: """ self.update() self.results.all_delete() + + def delete_any_trial_objective(self, trial_id) -> None: + self.update() + self.results.remove(trial_id) diff --git a/aiaccel/storage/serializer/db.py b/aiaccel/storage/serializer/db.py index 0e862c5d5..267dc5ca1 100644 --- a/aiaccel/storage/serializer/db.py +++ b/aiaccel/storage/serializer/db.py @@ -91,6 +91,18 @@ def get_any_trial_serialize(self, trial_id: int, process_name: str) -> Any: data.numpy_random_state ) + @retry(_MAX_NUM=60, _DELAY=1.0) + def delete_any_trial_serialize(self, trial_id: int) -> None: + session = self.session() + ( + session.query(SerializeTable) + .filter(SerializeTable.trial_id == trial_id) + .delete() + ) + session.commit() + session.expunge_all() + self.engine.dispose() + def is_exists_any_trial(self, trial_id: int): process_names = [ 'master', diff --git a/aiaccel/storage/timestamp/db.py b/aiaccel/storage/timestamp/db.py index 0ff24a1bd..3be4a25f2 100644 --- a/aiaccel/storage/timestamp/db.py +++ b/aiaccel/storage/timestamp/db.py @@ -145,3 +145,11 @@ def all_delete(self) -> None: session.commit() session.expunge_all() self.engine.dispose() + + @retry(_MAX_NUM=60, _DELAY=1.0) + def delete_any_trial_timestamp(self, trial_id) -> None: + session = self.session() + session.query(TimestampTable).filter(TimestampTable.trial_id == trial_id).delete() + session.commit() + session.expunge_all() + self.engine.dispose() diff --git a/aiaccel/storage/timestamp/fs.py b/aiaccel/storage/timestamp/fs.py index f8a10fd80..0b0e19dc3 100644 --- a/aiaccel/storage/timestamp/fs.py +++ b/aiaccel/storage/timestamp/fs.py @@ -115,3 +115,7 @@ def all_delete(self) -> None: self.update() for d in self.datas.data: d.remove() + + def delete_any_trial_timestamp(self, trial_id) -> None: + self.update() + self.datas.remove(trial_id) diff --git a/aiaccel/storage/trial/db.py b/aiaccel/storage/trial/db.py index dab305bd6..2bcde83b0 100644 --- a/aiaccel/storage/trial/db.py +++ b/aiaccel/storage/trial/db.py @@ -108,6 +108,14 @@ def all_delete(self) -> None: session.expunge_all() self.engine.dispose() + @retry(_MAX_NUM=60, _DELAY=1.0) + def delete_any_trial_state(self, trial_id: int) -> None: + session = self.session() + session.query(TrialTable).filter(TrialTable.trial_id == trial_id).delete() + session.commit() + session.expunge_all() + self.engine.dispose() + @retry(_MAX_NUM=60, _DELAY=1.0) def get_ready(self) -> list: """Get the trial id whose status is ready. diff --git a/aiaccel/storage/trial/fs.py b/aiaccel/storage/trial/fs.py index ec178c014..77e3801cb 100644 --- a/aiaccel/storage/trial/fs.py +++ b/aiaccel/storage/trial/fs.py @@ -194,3 +194,7 @@ def get_all_trial_id(self) -> list: def all_delete(self): self.update() self.trials.all_delete() + + def delete_any_trial_state(self, trial_id: int) -> None: + self.update() + self.trials.remove(trial_id) diff --git a/aiaccel/view.py b/aiaccel/view.py index 83c8cd309..a0aaedb02 100644 --- a/aiaccel/view.py +++ b/aiaccel/view.py @@ -42,7 +42,7 @@ def view(self) -> None: if len(error) > 4: error = error[0:3] + "..." - resume = "possible" if self.storage.serializer.is_exists_any_trial(trial_id) else "" + # resume = "possible" if self.storage.serializer.is_exists_any_trial(trial_id) else "" infos.append( { @@ -53,7 +53,7 @@ def view(self) -> None: "job": str(job), "result": str(result), "error": error, - "resume": resume + # "resume": resume } ) diff --git a/tests/resumption/resumption_test.py b/tests/resumption/resumption_test.py index 600803de1..604cf24c1 100644 --- a/tests/resumption/resumption_test.py +++ b/tests/resumption/resumption_test.py @@ -69,6 +69,9 @@ def test_run(self, cd_work, data_dir, work_dir): config_file = data_dir.joinpath( 'config_{}.json'.format(self.search_algorithm) ) + # dict_resume = sorted( + # [f for f in list(work_dir.joinpath(aiaccel.dict_state).iterdir()) if pathlib.Path.is_dir(f)] + # )[-1].name commandline_args = [ "start.py", "--config", diff --git a/tests/unit/abci_test/test_abci_batch.py b/tests/unit/abci_test/test_abci_batch.py index 30a68295a..6efbe02a7 100644 --- a/tests/unit/abci_test/test_abci_batch.py +++ b/tests/unit/abci_test/test_abci_batch.py @@ -27,7 +27,6 @@ def test_create_abci_batch_file( 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, } commands = create_runner_command( diff --git a/tests/unit/master_test/evaluator_test/test_abstract_evaluator.py b/tests/unit/master_test/evaluator_test/test_abstract_evaluator.py index 65c24a9a6..97bf54960 100644 --- a/tests/unit/master_test/evaluator_test/test_abstract_evaluator.py +++ b/tests/unit/master_test/evaluator_test/test_abstract_evaluator.py @@ -10,7 +10,6 @@ def test_init(self): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'test' } @@ -22,7 +21,6 @@ def test_evaluate(self): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'test' } @@ -41,7 +39,6 @@ def test_print(self, clean_work_dir, setup_hp_finished, work_dir): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'test' } @@ -57,7 +54,6 @@ def test_save(self, clean_work_dir, setup_hp_finished, work_dir): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'test' } diff --git a/tests/unit/master_test/evaluator_test/test_maximize_evaluator.py b/tests/unit/master_test/evaluator_test/test_maximize_evaluator.py index 4ceb60ed9..e69187bdb 100644 --- a/tests/unit/master_test/evaluator_test/test_maximize_evaluator.py +++ b/tests/unit/master_test/evaluator_test/test_maximize_evaluator.py @@ -20,7 +20,6 @@ def test_maximize_evaluator(self): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, } evaluator = MaximizeEvaluator(options) diff --git a/tests/unit/master_test/evaluator_test/test_minimize_evaluator.py b/tests/unit/master_test/evaluator_test/test_minimize_evaluator.py index fb8856e5a..c86df07dc 100644 --- a/tests/unit/master_test/evaluator_test/test_minimize_evaluator.py +++ b/tests/unit/master_test/evaluator_test/test_minimize_evaluator.py @@ -19,7 +19,6 @@ def test_maximize_evaluator(self): 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } diff --git a/tests/unit/master_test/test_abstract_master.py b/tests/unit/master_test/test_abstract_master.py index 4e5b13f25..d3284fb02 100644 --- a/tests/unit/master_test/test_abstract_master.py +++ b/tests/unit/master_test/test_abstract_master.py @@ -157,7 +157,6 @@ def test_pre_process_3( 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -190,7 +189,6 @@ def test_post_process( 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -356,7 +354,6 @@ def test_loop_pre_process( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -381,7 +378,6 @@ def test_loop_post_process( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -405,7 +401,6 @@ def test_inner_loop_pre_process( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -446,7 +441,6 @@ def test_inner_loop_main_process( # 'config': config_json, # 'resume': None, # 'clean': False, - # 'nosave': False, # 'fs': False, # 'process_name': 'master' # } @@ -459,7 +453,6 @@ def test_inner_loop_main_process( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -501,7 +494,6 @@ def test_inner_loop_post_process( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -518,64 +510,3 @@ def test_inner_loop_post_process( master.worker_o.kill() master.worker_s.kill() master.storage.alive.init_alive() - - def test_serialize( - self, - cd_work, - clean_work_dir, - config_json, - database_remove - ): - database_remove() - - commandline_args = [ - "start.py", - "--config", - format(config_json) - ] - options = { - 'config': config_json, - 'resume': 0, - 'clean': False, - 'nosave': False, - 'fs': False, - 'process_name': 'master' - } - with patch.object(sys, 'argv', commandline_args): - master = AbstractMaster(options) - master.storage.alive.init_alive() - master.storage.trial.all_delete() - master.storage.trial.set_any_trial_state(trial_id=0, state="ready") - assert master._serialize() is None - assert 'start_time' in master.serialize_data - assert 'loop_start_time' in master.serialize_data - - def test_deserialize( - self, - cd_work, - clean_work_dir, - config_json, - database_remove - ): - database_remove() - - commandline_args = [ - "start.py", - "--config", - format(config_json) - ] - options = { - 'config': config_json, - 'resume': 0, - 'clean': False, - 'nosave': False, - 'fs': False, - 'process_name': 'master' - } - with patch.object(sys, 'argv', commandline_args): - master = AbstractMaster(options) - master.storage.alive.init_alive() - master.storage.trial.all_delete() - master.storage.trial.set_any_trial_state(trial_id=0, state="ready") - assert master._serialize() is None - assert master._deserialize(trial_id=0) is None diff --git a/tests/unit/master_test/test_local_master.py b/tests/unit/master_test/test_local_master.py index 1376d2128..99a9c2b17 100644 --- a/tests/unit/master_test/test_local_master.py +++ b/tests/unit/master_test/test_local_master.py @@ -9,7 +9,6 @@ def test_init(self, clean_work_dir): 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } diff --git a/tests/unit/master_test/verification_test/test_abstract_verification.py b/tests/unit/master_test/verification_test/test_abstract_verification.py index 3fc5cfdf8..11dbdda67 100644 --- a/tests/unit/master_test/verification_test/test_abstract_verification.py +++ b/tests/unit/master_test/verification_test/test_abstract_verification.py @@ -17,7 +17,6 @@ def test_init(self): 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -33,7 +32,6 @@ def test_verify(self, clean_work_dir, setup_hp_finished, work_dir): 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -82,7 +80,6 @@ def test_make_verification( 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -117,7 +114,6 @@ def test_print(self): 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -135,7 +131,6 @@ def test_save(self, clean_work_dir, setup_hp_finished, work_dir): 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } diff --git a/tests/unit/optimizer_test/test_abstract_optimizer.py b/tests/unit/optimizer_test/test_abstract_optimizer.py index f729a53e7..e247c1c4b 100644 --- a/tests/unit/optimizer_test/test_abstract_optimizer.py +++ b/tests/unit/optimizer_test/test_abstract_optimizer.py @@ -28,7 +28,6 @@ def setup_optimizer(self, clean_work_dir): 'config': self.config_json, 'resume': 0, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } @@ -89,23 +88,3 @@ def f(number=1): def test_inner_loop_post_process(self): assert self.optimizer.inner_loop_post_process() - - def test_serialize(self): - self.optimizer.storage.trial.set_any_trial_state(trial_id=0, state="ready") - self.optimizer.serialize_datas = { - 'num_of_generated_parameter': None, - 'loop_count': 0 - } - assert self.optimizer._serialize() is None - assert 'num_of_generated_parameter' in self.optimizer.serialize_datas - assert 'loop_count' in self.optimizer.serialize_datas - - def test_deserialize(self): - self.optimizer.pre_process() - self.optimizer.serialize_datas = { - 'num_of_generated_parameter': None, - 'loop_count': 0 - } - self.optimizer.storage.trial.set_any_trial_state(trial_id=0, state="finished") - self.optimizer._serialize() - assert self.optimizer._deserialize(trial_id=0) is None diff --git a/tests/unit/optimizer_test/test_grid_search.py b/tests/unit/optimizer_test/test_grid_search.py index 77252fbb9..ad3d67c0a 100644 --- a/tests/unit/optimizer_test/test_grid_search.py +++ b/tests/unit/optimizer_test/test_grid_search.py @@ -76,7 +76,6 @@ def test_pre_process(self, clean_work_dir): 'config': self.grid_config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } @@ -92,7 +91,6 @@ def test_get_parameter_index(self, clean_work_dir): 'config': self.grid_config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } @@ -116,7 +114,6 @@ def test_generate_parameter(self, clean_work_dir): 'config': self.grid_config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } diff --git a/tests/unit/optimizer_test/test_nelder_mead_search.py b/tests/unit/optimizer_test/test_nelder_mead_search.py index df91c0dc4..41f48934a 100644 --- a/tests/unit/optimizer_test/test_nelder_mead_search.py +++ b/tests/unit/optimizer_test/test_nelder_mead_search.py @@ -17,7 +17,6 @@ def setup_optimizer(self, clean_work_dir): 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } diff --git a/tests/unit/optimizer_test/test_random_search.py b/tests/unit/optimizer_test/test_random_search.py index a97c25336..1d8457fb1 100644 --- a/tests/unit/optimizer_test/test_random_search.py +++ b/tests/unit/optimizer_test/test_random_search.py @@ -9,7 +9,6 @@ def test_generate_parameter(self): 'config': str(self.config_random_path), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } diff --git a/tests/unit/optimizer_test/test_sobol_search.py b/tests/unit/optimizer_test/test_sobol_search.py index dbfbf1441..f349ddb1e 100644 --- a/tests/unit/optimizer_test/test_sobol_search.py +++ b/tests/unit/optimizer_test/test_sobol_search.py @@ -11,7 +11,6 @@ def setup_optimizer(self, clean_work_dir): 'config': self.config_sobol_path, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } diff --git a/tests/unit/optimizer_test/test_tpe_search.py b/tests/unit/optimizer_test/test_tpe_search.py index 02875bb3c..1b68aa053 100644 --- a/tests/unit/optimizer_test/test_tpe_search.py +++ b/tests/unit/optimizer_test/test_tpe_search.py @@ -14,7 +14,6 @@ def setup_optimizer(self, clean_work_dir, data_dir): 'config': data_dir / 'config_tpe.json', 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } @@ -50,6 +49,7 @@ def test_study_pickle_path(self): def test_serialize(self): self.optimizer.storage.trial.set_any_trial_state(trial_id=0, state="ready") + self.optimizer.trial_id.increment() assert self.optimizer._serialize() is None def test_deserialize(self): @@ -59,6 +59,7 @@ def test_deserialize(self): 'loop_count': 0 } self.optimizer.storage.trial.set_any_trial_state(trial_id=0, state="finished") + self.optimizer.trial_id.increment() self.optimizer._serialize() assert self.optimizer._deserialize(trial_id=0) is None diff --git a/tests/unit/plot/test_plot.py b/tests/unit/plot/test_plot.py index 1428c251d..e8592390a 100644 --- a/tests/unit/plot/test_plot.py +++ b/tests/unit/plot/test_plot.py @@ -12,7 +12,6 @@ 'config': str(config_path), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'test' } diff --git a/tests/unit/scheduler_test/job/test_job_thread.py b/tests/unit/scheduler_test/job/test_job_thread.py index 9e470734a..ebf93bf4e 100644 --- a/tests/unit/scheduler_test/job/test_job_thread.py +++ b/tests/unit/scheduler_test/job/test_job_thread.py @@ -443,7 +443,6 @@ def test_init( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } diff --git a/tests/unit/scheduler_test/test_abci_scheduler.py b/tests/unit/scheduler_test/test_abci_scheduler.py index b75000317..378f437ab 100644 --- a/tests/unit/scheduler_test/test_abci_scheduler.py +++ b/tests/unit/scheduler_test/test_abci_scheduler.py @@ -17,7 +17,6 @@ def test_get_stats( 'config': self.config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -45,7 +44,6 @@ def test_parse_trial_id( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } diff --git a/tests/unit/scheduler_test/test_abstract_scheduler.py b/tests/unit/scheduler_test/test_abstract_scheduler.py index 1a79df837..011b796ce 100644 --- a/tests/unit/scheduler_test/test_abstract_scheduler.py +++ b/tests/unit/scheduler_test/test_abstract_scheduler.py @@ -46,7 +46,6 @@ def test_init(self, config_json): 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -65,7 +64,6 @@ def test_change_state_finished_trials( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -87,7 +85,6 @@ def test_get_stats( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -108,7 +105,6 @@ def test_start_job_thread( 'config': str(config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -136,7 +132,6 @@ def test_update_resource( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -158,7 +153,6 @@ def test_pre_process( 'config': str(config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -181,7 +175,6 @@ def test_post_process(self, config_json, database_remove): 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -199,7 +192,6 @@ def test_loop_pre_process( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -218,7 +210,6 @@ def test_loop_post_process(self, config_json, database_remove): 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -239,7 +230,6 @@ def test_inner_loop_pre_process( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -274,7 +264,6 @@ def test_inner_loop_main_process( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -306,7 +295,6 @@ def test_inner_loop_post_process( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -325,14 +313,13 @@ def test_serialize( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } scheduler = AbstractScheduler(options) scheduler.storage.alive.init_alive() scheduler.storage.trial.set_any_trial_state(trial_id=0, state="finished") - scheduler._serialize() + scheduler._serialize(trial_id=0) assert 'loop_count' in scheduler.serialize_datas def test_deserialize( @@ -346,14 +333,13 @@ def test_deserialize( 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } scheduler = AbstractScheduler(options) scheduler.storage.alive.init_alive() scheduler.storage.trial.set_any_trial_state(trial_id=0, state="finished") - scheduler._serialize() + scheduler._serialize(trial_id=0) assert scheduler._deserialize(trial_id=0) is None def test_parse_trial_id(self, config_json, database_remove): @@ -362,7 +348,6 @@ def test_parse_trial_id(self, config_json, database_remove): 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } diff --git a/tests/unit/scheduler_test/test_local_scheduler.py b/tests/unit/scheduler_test/test_local_scheduler.py index e4c691faa..cf7a3505f 100644 --- a/tests/unit/scheduler_test/test_local_scheduler.py +++ b/tests/unit/scheduler_test/test_local_scheduler.py @@ -9,7 +9,6 @@ def test_get_stats(self, clean_work_dir, config_json, fake_process): 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -35,7 +34,6 @@ def test_parse_trial_id(self, config_json): 'config': config_json, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } diff --git a/tests/unit/storage/db/test_error.py b/tests/unit/storage/db/test_error.py index 6b1ea219f..31ff33bfc 100644 --- a/tests/unit/storage/db/test_error.py +++ b/tests/unit/storage/db/test_error.py @@ -75,3 +75,36 @@ def test_all_delete(): assert storage.error.all_delete() is None for id in ids: assert storage.error.get_any_trial_error(id) is None + +# delete_any_trial_error +@t_base() +def test_delete_any_trial_error(): + storage = Storage(ws.path) + + ids = [0, 1, 2] + messages = ["hoge0", "hoge1", "hoge2"] + + for i in range(len(ids)): + storage.error.set_any_trial_error( + trial_id=ids[i], + error_message=messages[i] + ) + + assert storage.error.get_any_trial_error(trial_id=0) is not None + assert storage.error.get_any_trial_error(trial_id=1) is not None + assert storage.error.get_any_trial_error(trial_id=2) is not None + + assert storage.error.delete_any_trial_error(trial_id=0) is None + assert storage.error.get_any_trial_error(trial_id=0) is None + assert storage.error.get_any_trial_error(trial_id=1) is not None + assert storage.error.get_any_trial_error(trial_id=2) is not None + + assert storage.error.delete_any_trial_error(trial_id=1) is None + assert storage.error.get_any_trial_error(trial_id=0) is None + assert storage.error.get_any_trial_error(trial_id=1) is None + assert storage.error.get_any_trial_error(trial_id=2) is not None + + assert storage.error.delete_any_trial_error(trial_id=2) is None + assert storage.error.get_any_trial_error(trial_id=0) is None + assert storage.error.get_any_trial_error(trial_id=1) is None + assert storage.error.get_any_trial_error(trial_id=2) is None diff --git a/tests/unit/storage/db/test_hp.py b/tests/unit/storage/db/test_hp.py index e77ed4da7..9b519b11d 100644 --- a/tests/unit/storage/db/test_hp.py +++ b/tests/unit/storage/db/test_hp.py @@ -4,7 +4,6 @@ from base import ws - # set_any_trial_param @t_base() def test_set_any_trial_param(): @@ -22,6 +21,7 @@ def test_set_any_trial_param(): param_type=param_type ) is None + # set_any_trial_param @t_base() def test_set_any_trial_params(): @@ -93,7 +93,6 @@ def test_get_any_trial_params(): else: assert False - # all_delete @t_base() @@ -113,4 +112,83 @@ def test_all_delete(): ) assert storage.hp.all_delete() is None - assert storage.hp.get_any_trial_params(trial_id) is None \ No newline at end of file + assert storage.hp.get_any_trial_params(trial_id) is None + + +# delete_any_trial_params +@t_base() +def test_delete_any_trial_params(): + storage = Storage(ws.path) + + trial_id = 0 + params = [ + { + "parameter_name": "x1", + "value": 0.01, + "type": "float" + }, + { + "parameter_name": "x2", + "value": 0.02, + "type": "float" + } + ] + storage.hp.set_any_trial_params( + trial_id=trial_id, + params=params + ) + + trial_id = 1 + params = [ + { + "parameter_name": "x1", + "value": 0.01, + "type": "float" + }, + { + "parameter_name": "x2", + "value": 0.02, + "type": "float" + } + ] + storage.hp.set_any_trial_params( + trial_id=trial_id, + params=params + ) + + trial_id = 2 + params = [ + { + "parameter_name": "x1", + "value": 0.01, + "type": "float" + }, + { + "parameter_name": "x2", + "value": 0.02, + "type": "float" + } + ] + storage.hp.set_any_trial_params( + trial_id=trial_id, + params=params + ) + + assert storage.hp.get_any_trial_params(trial_id=0) is not None + assert storage.hp.get_any_trial_params(trial_id=1) is not None + assert storage.hp.get_any_trial_params(trial_id=2) is not None + + assert storage.hp.delete_any_trial_params(trial_id=0) is None + assert storage.hp.get_any_trial_params(trial_id=0) is None + assert storage.hp.get_any_trial_params(trial_id=1) is not None + assert storage.hp.get_any_trial_params(trial_id=2) is not None + + assert storage.hp.delete_any_trial_params(trial_id=1) is None + assert storage.hp.get_any_trial_params(trial_id=0) is None + assert storage.hp.get_any_trial_params(trial_id=1) is None + assert storage.hp.get_any_trial_params(trial_id=2) is not None + + assert storage.hp.delete_any_trial_params(trial_id=2) is None + assert storage.hp.get_any_trial_params(trial_id=0) is None + assert storage.hp.get_any_trial_params(trial_id=1) is None + assert storage.hp.get_any_trial_params(trial_id=2) is None \ No newline at end of file diff --git a/tests/unit/storage/db/test_jobstate.py b/tests/unit/storage/db/test_jobstate.py index 8c9569140..61ad19c05 100644 --- a/tests/unit/storage/db/test_jobstate.py +++ b/tests/unit/storage/db/test_jobstate.py @@ -63,3 +63,49 @@ def test_is_failure(): assert storage.jobstate.is_failure(ids[i]) is True else: assert storage.jobstate.is_failure(ids[i]) is False + + +# delete_any_trial_jobstate +@t_base() +def test_delete_any_trial_jobstate(): + storage = Storage(ws.path) + + trial_id = 0 + state = "test_state_0" + storage.jobstate.set_any_trial_jobstate( + trial_id=trial_id, + state=state + ) + + trial_id = 1 + state = "test_state_1" + storage.jobstate.set_any_trial_jobstate( + trial_id=trial_id, + state=state + ) + + trial_id = 2 + state = "test_state_2" + storage.jobstate.set_any_trial_jobstate( + trial_id=trial_id, + state=state + ) + + assert storage.jobstate.get_any_trial_jobstate(trial_id=0) is not None + assert storage.jobstate.get_any_trial_jobstate(trial_id=1) is not None + assert storage.jobstate.get_any_trial_jobstate(trial_id=2) is not None + + assert storage.jobstate.delete_any_trial_jobstate(trial_id=0) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=0) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=1) is not None + assert storage.jobstate.get_any_trial_jobstate(trial_id=2) is not None + + assert storage.jobstate.delete_any_trial_jobstate(trial_id=1) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=0) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=1) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=2) is not None + + assert storage.jobstate.delete_any_trial_jobstate(trial_id=2) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=0) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=1) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=2) is None diff --git a/tests/unit/storage/db/test_pid.py b/tests/unit/storage/db/test_pid.py index d9dbff7a3..772a1a607 100644 --- a/tests/unit/storage/db/test_pid.py +++ b/tests/unit/storage/db/test_pid.py @@ -51,3 +51,49 @@ def test_all_delete(): storage.pid.all_delete() assert storage.pid.get_any_process_pid(process_name) is None + + +# delete_any_process_pid +@t_base() +def test_delete_any_process_pid(): + storage = Storage(ws.path) + + process_name = "test_process_0" + pid = 10000 + storage.pid.set_any_process_pid( + process_name=process_name, + pid=pid + ) + + process_name = "test_process_1" + pid = 10001 + storage.pid.set_any_process_pid( + process_name=process_name, + pid=pid + ) + + process_name = "test_process_2" + pid = 10002 + storage.pid.set_any_process_pid( + process_name=process_name, + pid=pid + ) + + assert storage.pid.get_any_process_pid("test_process_0") is not None + assert storage.pid.get_any_process_pid("test_process_1") is not None + assert storage.pid.get_any_process_pid("test_process_2") is not None + + assert storage.pid.delete_any_process_pid("test_process_0") is None + assert storage.pid.get_any_process_pid("test_process_0") is None + assert storage.pid.get_any_process_pid("test_process_1") is not None + assert storage.pid.get_any_process_pid("test_process_2") is not None + + assert storage.pid.delete_any_process_pid("test_process_1") is None + assert storage.pid.get_any_process_pid("test_process_0") is None + assert storage.pid.get_any_process_pid("test_process_1") is None + assert storage.pid.get_any_process_pid("test_process_2") is not None + + assert storage.pid.delete_any_process_pid("test_process_2") is None + assert storage.pid.get_any_process_pid("test_process_0") is None + assert storage.pid.get_any_process_pid("test_process_1") is None + assert storage.pid.get_any_process_pid("test_process_2") is None diff --git a/tests/unit/storage/db/test_result.py b/tests/unit/storage/db/test_result.py index 9ddffaf5c..7f044643f 100644 --- a/tests/unit/storage/db/test_result.py +++ b/tests/unit/storage/db/test_result.py @@ -123,3 +123,37 @@ def test_all_delete(): assert storage.result.get_any_trial_objective(0) == 1 assert storage.result.all_delete() is None assert storage.result.get_any_trial_objective(0) is None + + +# delete_any_trial_objective +@t_base() +def test_delete_any_trial_objective(): + storage = Storage(ws.path) + + ids = [0, 1, 2] + objectives = [0.01, 0.02, 0.03] + + for i in range(len(ids)): + storage.result.set_any_trial_objective( + trial_id=ids[i], + objective=objectives[i] + ) + + assert storage.result.get_any_trial_objective(ids[0]) is not None + assert storage.result.get_any_trial_objective(ids[1]) is not None + assert storage.result.get_any_trial_objective(ids[2]) is not None + + assert storage.result.delete_any_trial_objective(ids[0]) is None + assert storage.result.get_any_trial_objective(ids[0]) is None + assert storage.result.get_any_trial_objective(ids[1]) is not None + assert storage.result.get_any_trial_objective(ids[2]) is not None + + assert storage.result.delete_any_trial_objective(ids[1]) is None + assert storage.result.get_any_trial_objective(ids[0]) is None + assert storage.result.get_any_trial_objective(ids[1]) is None + assert storage.result.get_any_trial_objective(ids[2]) is not None + + assert storage.result.delete_any_trial_objective(ids[2]) is None + assert storage.result.get_any_trial_objective(ids[0]) is None + assert storage.result.get_any_trial_objective(ids[1]) is None + assert storage.result.get_any_trial_objective(ids[2]) is None diff --git a/tests/unit/storage/db/test_serialize.py b/tests/unit/storage/db/test_serialize.py index 19c42fee2..f26750860 100644 --- a/tests/unit/storage/db/test_serialize.py +++ b/tests/unit/storage/db/test_serialize.py @@ -99,3 +99,71 @@ def test_get_any_trial_serialize(): trial_id=trial_id, process_name=process_name ) is None + + + +# delete_any_trial_serialize +@t_base() +def test_delete_any_trial_serialize(): + storage = Storage(ws.path) + + trial_id = 0 + process_name = "test0" + optimization_variable = 0 + native_random_state = random.getstate() + numpy_random_state = np.random.get_state() + + storage.serializer.set_any_trial_serialize( + trial_id=trial_id, + optimization_variable=optimization_variable, + process_name=process_name, + native_random_state=native_random_state, + numpy_random_state=numpy_random_state + ) + + trial_id = 1 + process_name = "test1" + optimization_variable = 1 + native_random_state = random.getstate() + numpy_random_state = np.random.get_state() + + storage.serializer.set_any_trial_serialize( + trial_id=trial_id, + optimization_variable=optimization_variable, + process_name=process_name, + native_random_state=native_random_state, + numpy_random_state=numpy_random_state + ) + + trial_id = 2 + process_name = "test2" + optimization_variable = 2 + native_random_state = random.getstate() + numpy_random_state = np.random.get_state() + + storage.serializer.set_any_trial_serialize( + trial_id=trial_id, + optimization_variable=optimization_variable, + process_name=process_name, + native_random_state=native_random_state, + numpy_random_state=numpy_random_state + ) + + assert storage.serializer.get_any_trial_serialize(trial_id=0,process_name="test0") is not None + assert storage.serializer.get_any_trial_serialize(trial_id=1,process_name="test1") is not None + assert storage.serializer.get_any_trial_serialize(trial_id=2,process_name="test2") is not None + + assert storage.serializer.delete_any_trial_serialize(trial_id=0) is None + assert storage.serializer.get_any_trial_serialize(trial_id=0,process_name="test0") is None + assert storage.serializer.get_any_trial_serialize(trial_id=1,process_name="test1") is not None + assert storage.serializer.get_any_trial_serialize(trial_id=2,process_name="test2") is not None + + assert storage.serializer.delete_any_trial_serialize(trial_id=1) is None + assert storage.serializer.get_any_trial_serialize(trial_id=0,process_name="test0") is None + assert storage.serializer.get_any_trial_serialize(trial_id=1,process_name="test1") is None + assert storage.serializer.get_any_trial_serialize(trial_id=2,process_name="test2") is not None + + assert storage.serializer.delete_any_trial_serialize(trial_id=2) is None + assert storage.serializer.get_any_trial_serialize(trial_id=0,process_name="test0") is None + assert storage.serializer.get_any_trial_serialize(trial_id=1,process_name="test1") is None + assert storage.serializer.get_any_trial_serialize(trial_id=2,process_name="test2") is None diff --git a/tests/unit/storage/db/test_timestamp.py b/tests/unit/storage/db/test_timestamp.py index a756238fa..005e53e12 100644 --- a/tests/unit/storage/db/test_timestamp.py +++ b/tests/unit/storage/db/test_timestamp.py @@ -136,3 +136,77 @@ def test_all_delete(): assert storage.timestamp.all_delete() is None assert storage.timestamp.get_any_trial_start_time(trial_id) is None assert storage.timestamp.get_any_trial_end_time(trial_id) is None + + +# delete_any_trial_timestamp +@t_base() +def test_delete_any_trial_timestamp(): + storage = Storage(ws.path) + + trial_id = 0 + start_time = "00:00" + end_time = "10:00" + + storage.timestamp.set_any_trial_start_time( + trial_id=trial_id, + start_time=start_time + ) + storage.timestamp.set_any_trial_end_time( + trial_id=trial_id, + end_time=end_time + ) + + trial_id = 1 + start_time = "00:00" + end_time = "10:00" + storage.timestamp.set_any_trial_start_time( + trial_id=trial_id, + start_time=start_time + ) + storage.timestamp.set_any_trial_end_time( + trial_id=trial_id, + end_time=end_time + ) + + trial_id = 2 + start_time = "00:00" + end_time = "10:00" + storage.timestamp.set_any_trial_start_time( + trial_id=trial_id, + start_time=start_time + ) + storage.timestamp.set_any_trial_end_time( + trial_id=trial_id, + end_time=end_time + ) + + assert storage.timestamp.get_any_trial_start_time(trial_id=0) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=0) is not None + assert storage.timestamp.get_any_trial_start_time(trial_id=1) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=1) is not None + assert storage.timestamp.get_any_trial_start_time(trial_id=2) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=2) is not None + + assert storage.timestamp.delete_any_trial_timestamp(trial_id=0) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=1) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=1) is not None + assert storage.timestamp.get_any_trial_start_time(trial_id=2) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=2) is not None + + assert storage.timestamp.delete_any_trial_timestamp(trial_id=1) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=1) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=1) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=2) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=2) is not None + + assert storage.timestamp.delete_any_trial_timestamp(trial_id=2) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=1) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=1) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=2) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=2) is None diff --git a/tests/unit/storage/db/test_trial.py b/tests/unit/storage/db/test_trial.py index 549f7713e..c820cf962 100644 --- a/tests/unit/storage/db/test_trial.py +++ b/tests/unit/storage/db/test_trial.py @@ -206,3 +206,43 @@ def test_get_all_trial_id(): ) assert storage.trial.get_all_trial_id() == [0, 1, 2, 3, 4, 5, 6, 7, 8] + + +# delete_any_trial_state +@t_base() +def test_delete_any_trial_state(): + storage = Storage(ws.path) + + states = [ + "ready", + "running", + "finished", + ] + + for i in range(len(states)): + storage.trial.set_any_trial_state( + trial_id=i, + state=states[i] + ) + + for i in range(len(states)): + assert storage.trial.get_any_trial_state(i) == states[i] + + assert storage.trial.get_any_trial_state(trial_id=0) is not None + assert storage.trial.get_any_trial_state(trial_id=1) is not None + assert storage.trial.get_any_trial_state(trial_id=2) is not None + + assert storage.trial.delete_any_trial_state(trial_id=0) is None + assert storage.trial.get_any_trial_state(trial_id=0) is None + assert storage.trial.get_any_trial_state(trial_id=1) is not None + assert storage.trial.get_any_trial_state(trial_id=2) is not None + + assert storage.trial.delete_any_trial_state(trial_id=1) is None + assert storage.trial.get_any_trial_state(trial_id=0) is None + assert storage.trial.get_any_trial_state(trial_id=1) is None + assert storage.trial.get_any_trial_state(trial_id=2) is not None + + assert storage.trial.delete_any_trial_state(trial_id=2) is None + assert storage.trial.get_any_trial_state(trial_id=0) is None + assert storage.trial.get_any_trial_state(trial_id=1) is None + assert storage.trial.get_any_trial_state(trial_id=2) is None \ No newline at end of file diff --git a/tests/unit/storage/fs/test_fs_error.py b/tests/unit/storage/fs/test_fs_error.py index 318aea52a..721dccecd 100644 --- a/tests/unit/storage/fs/test_fs_error.py +++ b/tests/unit/storage/fs/test_fs_error.py @@ -77,3 +77,37 @@ def test_all_delete(): assert storage.error.all_delete() is None for id in ids: assert storage.error.get_any_trial_error(id) is None + + +# delete_any_trial_error +@t_base() +def test_delete_any_trial_error(): + storage = Storage(ws.path) + + ids = [0, 1, 2] + messages = ["hoge0", "hoge1", "hoge2"] + + for i in range(len(ids)): + storage.error.set_any_trial_error( + trial_id=ids[i], + error_message=messages[i] + ) + + assert storage.error.get_any_trial_error(trial_id=0) is not None + assert storage.error.get_any_trial_error(trial_id=1) is not None + assert storage.error.get_any_trial_error(trial_id=2) is not None + + assert storage.error.delete_any_trial_error(trial_id=0) is None + assert storage.error.get_any_trial_error(trial_id=0) is None + assert storage.error.get_any_trial_error(trial_id=1) is not None + assert storage.error.get_any_trial_error(trial_id=2) is not None + + assert storage.error.delete_any_trial_error(trial_id=1) is None + assert storage.error.get_any_trial_error(trial_id=0) is None + assert storage.error.get_any_trial_error(trial_id=1) is None + assert storage.error.get_any_trial_error(trial_id=2) is not None + + assert storage.error.delete_any_trial_error(trial_id=2) is None + assert storage.error.get_any_trial_error(trial_id=0) is None + assert storage.error.get_any_trial_error(trial_id=1) is None + assert storage.error.get_any_trial_error(trial_id=2) is None \ No newline at end of file diff --git a/tests/unit/storage/fs/test_fs_hp.py b/tests/unit/storage/fs/test_fs_hp.py index e08136315..f93540aeb 100644 --- a/tests/unit/storage/fs/test_fs_hp.py +++ b/tests/unit/storage/fs/test_fs_hp.py @@ -112,4 +112,82 @@ def test_all_delete(): ) assert storage.hp.all_delete() is None - assert storage.hp.get_any_trial_params(trial_id) is None \ No newline at end of file + assert storage.hp.get_any_trial_params(trial_id) is None + +# delete_any_trial_params +@t_base() +def test_delete_any_trial_params(): + storage = Storage(ws.path) + + trial_id = 0 + params = [ + { + "parameter_name": "x1", + "value": 0.01, + "type": "float" + }, + { + "parameter_name": "x2", + "value": 0.02, + "type": "float" + } + ] + storage.hp.set_any_trial_params( + trial_id=trial_id, + params=params + ) + + trial_id = 1 + params = [ + { + "parameter_name": "x1", + "value": 0.01, + "type": "float" + }, + { + "parameter_name": "x2", + "value": 0.02, + "type": "float" + } + ] + storage.hp.set_any_trial_params( + trial_id=trial_id, + params=params + ) + + trial_id = 2 + params = [ + { + "parameter_name": "x1", + "value": 0.01, + "type": "float" + }, + { + "parameter_name": "x2", + "value": 0.02, + "type": "float" + } + ] + storage.hp.set_any_trial_params( + trial_id=trial_id, + params=params + ) + + assert storage.hp.get_any_trial_params(trial_id=0) is not None + assert storage.hp.get_any_trial_params(trial_id=1) is not None + assert storage.hp.get_any_trial_params(trial_id=2) is not None + + assert storage.hp.delete_any_trial_params(trial_id=0) is None + assert storage.hp.get_any_trial_params(trial_id=0) is None + assert storage.hp.get_any_trial_params(trial_id=1) is not None + assert storage.hp.get_any_trial_params(trial_id=2) is not None + + assert storage.hp.delete_any_trial_params(trial_id=1) is None + assert storage.hp.get_any_trial_params(trial_id=0) is None + assert storage.hp.get_any_trial_params(trial_id=1) is None + assert storage.hp.get_any_trial_params(trial_id=2) is not None + + assert storage.hp.delete_any_trial_params(trial_id=2) is None + assert storage.hp.get_any_trial_params(trial_id=0) is None + assert storage.hp.get_any_trial_params(trial_id=1) is None + assert storage.hp.get_any_trial_params(trial_id=2) is None \ No newline at end of file diff --git a/tests/unit/storage/fs/test_fs_jobstate.py b/tests/unit/storage/fs/test_fs_jobstate.py index f6e519136..2daab9c95 100644 --- a/tests/unit/storage/fs/test_fs_jobstate.py +++ b/tests/unit/storage/fs/test_fs_jobstate.py @@ -64,3 +64,48 @@ def test_is_failure(): assert storage.jobstate.is_failure(ids[i]) is True else: assert storage.jobstate.is_failure(ids[i]) is False + +# delete_any_trial_jobstate +@t_base() +def test_delete_any_trial_jobstate(): + storage = Storage(ws.path) + + trial_id = 0 + state = "test_state_0" + storage.jobstate.set_any_trial_jobstate( + trial_id=trial_id, + state=state + ) + + trial_id = 1 + state = "test_state_1" + storage.jobstate.set_any_trial_jobstate( + trial_id=trial_id, + state=state + ) + + trial_id = 2 + state = "test_state_2" + storage.jobstate.set_any_trial_jobstate( + trial_id=trial_id, + state=state + ) + + assert storage.jobstate.get_any_trial_jobstate(trial_id=0) is not None + assert storage.jobstate.get_any_trial_jobstate(trial_id=1) is not None + assert storage.jobstate.get_any_trial_jobstate(trial_id=2) is not None + + assert storage.jobstate.delete_any_trial_jobstate(trial_id=0) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=0) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=1) is not None + assert storage.jobstate.get_any_trial_jobstate(trial_id=2) is not None + + assert storage.jobstate.delete_any_trial_jobstate(trial_id=1) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=0) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=1) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=2) is not None + + assert storage.jobstate.delete_any_trial_jobstate(trial_id=2) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=0) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=1) is None + assert storage.jobstate.get_any_trial_jobstate(trial_id=2) is None diff --git a/tests/unit/storage/fs/test_fs_pid.py b/tests/unit/storage/fs/test_fs_pid.py index 763ad0dc9..75ecbf42b 100644 --- a/tests/unit/storage/fs/test_fs_pid.py +++ b/tests/unit/storage/fs/test_fs_pid.py @@ -52,3 +52,49 @@ def test_all_delete(): storage.pid.all_delete() assert storage.pid.get_any_process_pid(process_name) is None + + +# delete_any_process_pid +@t_base() +def test_delete_any_process_pid(): + storage = Storage(ws.path) + + process_name = "test_process_0" + pid = 10000 + storage.pid.set_any_process_pid( + process_name=process_name, + pid=pid + ) + + process_name = "test_process_1" + pid = 10001 + storage.pid.set_any_process_pid( + process_name=process_name, + pid=pid + ) + + process_name = "test_process_2" + pid = 10002 + storage.pid.set_any_process_pid( + process_name=process_name, + pid=pid + ) + + assert storage.pid.get_any_process_pid("test_process_0") is not None + assert storage.pid.get_any_process_pid("test_process_1") is not None + assert storage.pid.get_any_process_pid("test_process_2") is not None + + assert storage.pid.delete_any_process_pid("test_process_0") is None + assert storage.pid.get_any_process_pid("test_process_0") is None + assert storage.pid.get_any_process_pid("test_process_1") is not None + assert storage.pid.get_any_process_pid("test_process_2") is not None + + assert storage.pid.delete_any_process_pid("test_process_1") is None + assert storage.pid.get_any_process_pid("test_process_0") is None + assert storage.pid.get_any_process_pid("test_process_1") is None + assert storage.pid.get_any_process_pid("test_process_2") is not None + + assert storage.pid.delete_any_process_pid("test_process_2") is None + assert storage.pid.get_any_process_pid("test_process_0") is None + assert storage.pid.get_any_process_pid("test_process_1") is None + assert storage.pid.get_any_process_pid("test_process_2") is None diff --git a/tests/unit/storage/fs/test_fs_result.py b/tests/unit/storage/fs/test_fs_result.py index 58d3a3d9b..9fcbce162 100644 --- a/tests/unit/storage/fs/test_fs_result.py +++ b/tests/unit/storage/fs/test_fs_result.py @@ -124,3 +124,37 @@ def test_all_delete(): assert storage.result.get_any_trial_objective(0) == 1 assert storage.result.all_delete() is None assert storage.result.get_any_trial_objective(0) is None + + +# delete_any_trial_objective +@t_base() +def test_delete_any_trial_objective(): + storage = Storage(ws.path) + + ids = [0, 1, 2] + objectives = [0.01, 0.02, 0.03] + + for i in range(len(ids)): + storage.result.set_any_trial_objective( + trial_id=ids[i], + objective=objectives[i] + ) + + assert storage.result.get_any_trial_objective(ids[0]) is not None + assert storage.result.get_any_trial_objective(ids[1]) is not None + assert storage.result.get_any_trial_objective(ids[2]) is not None + + assert storage.result.delete_any_trial_objective(ids[0]) is None + assert storage.result.get_any_trial_objective(ids[0]) is None + assert storage.result.get_any_trial_objective(ids[1]) is not None + assert storage.result.get_any_trial_objective(ids[2]) is not None + + assert storage.result.delete_any_trial_objective(ids[1]) is None + assert storage.result.get_any_trial_objective(ids[0]) is None + assert storage.result.get_any_trial_objective(ids[1]) is None + assert storage.result.get_any_trial_objective(ids[2]) is not None + + assert storage.result.delete_any_trial_objective(ids[2]) is None + assert storage.result.get_any_trial_objective(ids[0]) is None + assert storage.result.get_any_trial_objective(ids[1]) is None + assert storage.result.get_any_trial_objective(ids[2]) is None diff --git a/tests/unit/storage/fs/test_fs_serialize.py b/tests/unit/storage/fs/test_fs_serialize.py index dcccba901..a40f7f7e2 100644 --- a/tests/unit/storage/fs/test_fs_serialize.py +++ b/tests/unit/storage/fs/test_fs_serialize.py @@ -104,3 +104,70 @@ def test_get_any_trial_serialize(): trial_id=trial_id, process_name=process_name ) is None + + +# delete_any_trial_serialize +@t_base() +def test_delete_any_trial_serialize(): + storage = Storage(ws.path) + + trial_id = 0 + process_name = "test0" + optimization_variable = 0 + native_random_state = random.getstate() + numpy_random_state = np.random.get_state() + + storage.serializer.set_any_trial_serialize( + trial_id=trial_id, + optimization_variable=optimization_variable, + process_name=process_name, + native_random_state=native_random_state, + numpy_random_state=numpy_random_state + ) + + trial_id = 1 + process_name = "test1" + optimization_variable = 1 + native_random_state = random.getstate() + numpy_random_state = np.random.get_state() + + storage.serializer.set_any_trial_serialize( + trial_id=trial_id, + optimization_variable=optimization_variable, + process_name=process_name, + native_random_state=native_random_state, + numpy_random_state=numpy_random_state + ) + + trial_id = 2 + process_name = "test2" + optimization_variable = 2 + native_random_state = random.getstate() + numpy_random_state = np.random.get_state() + + storage.serializer.set_any_trial_serialize( + trial_id=trial_id, + optimization_variable=optimization_variable, + process_name=process_name, + native_random_state=native_random_state, + numpy_random_state=numpy_random_state + ) + + assert storage.serializer.get_any_trial_serialize(trial_id=0,process_name="test0") is not None + assert storage.serializer.get_any_trial_serialize(trial_id=1,process_name="test1") is not None + assert storage.serializer.get_any_trial_serialize(trial_id=2,process_name="test2") is not None + + assert storage.serializer.delete_any_trial_serialize(trial_id=0) is None + assert storage.serializer.get_any_trial_serialize(trial_id=0,process_name="test0") is None + assert storage.serializer.get_any_trial_serialize(trial_id=1,process_name="test1") is not None + assert storage.serializer.get_any_trial_serialize(trial_id=2,process_name="test2") is not None + + assert storage.serializer.delete_any_trial_serialize(trial_id=1) is None + assert storage.serializer.get_any_trial_serialize(trial_id=0,process_name="test0") is None + assert storage.serializer.get_any_trial_serialize(trial_id=1,process_name="test1") is None + assert storage.serializer.get_any_trial_serialize(trial_id=2,process_name="test2") is not None + + assert storage.serializer.delete_any_trial_serialize(trial_id=2) is None + assert storage.serializer.get_any_trial_serialize(trial_id=0,process_name="test0") is None + assert storage.serializer.get_any_trial_serialize(trial_id=1,process_name="test1") is None + assert storage.serializer.get_any_trial_serialize(trial_id=2,process_name="test2") is None diff --git a/tests/unit/storage/fs/test_fs_timestamp.py b/tests/unit/storage/fs/test_fs_timestamp.py index 7e81985c0..8d9545395 100644 --- a/tests/unit/storage/fs/test_fs_timestamp.py +++ b/tests/unit/storage/fs/test_fs_timestamp.py @@ -136,3 +136,77 @@ def test_all_delete(): assert storage.timestamp.all_delete() is None assert storage.timestamp.get_any_trial_start_time(trial_id) is None assert storage.timestamp.get_any_trial_end_time(trial_id) is None + + +# delete_any_trial_timestamp +@t_base() +def test_delete_any_trial_timestamp(): + storage = Storage(ws.path) + + trial_id = 0 + start_time = "00:00" + end_time = "10:00" + + storage.timestamp.set_any_trial_start_time( + trial_id=trial_id, + start_time=start_time + ) + storage.timestamp.set_any_trial_end_time( + trial_id=trial_id, + end_time=end_time + ) + + trial_id = 1 + start_time = "00:00" + end_time = "10:00" + storage.timestamp.set_any_trial_start_time( + trial_id=trial_id, + start_time=start_time + ) + storage.timestamp.set_any_trial_end_time( + trial_id=trial_id, + end_time=end_time + ) + + trial_id = 2 + start_time = "00:00" + end_time = "10:00" + storage.timestamp.set_any_trial_start_time( + trial_id=trial_id, + start_time=start_time + ) + storage.timestamp.set_any_trial_end_time( + trial_id=trial_id, + end_time=end_time + ) + + assert storage.timestamp.get_any_trial_start_time(trial_id=0) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=0) is not None + assert storage.timestamp.get_any_trial_start_time(trial_id=1) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=1) is not None + assert storage.timestamp.get_any_trial_start_time(trial_id=2) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=2) is not None + + assert storage.timestamp.delete_any_trial_timestamp(trial_id=0) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=1) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=1) is not None + assert storage.timestamp.get_any_trial_start_time(trial_id=2) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=2) is not None + + assert storage.timestamp.delete_any_trial_timestamp(trial_id=1) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=1) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=1) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=2) is not None + assert storage.timestamp.get_any_trial_end_time(trial_id=2) is not None + + assert storage.timestamp.delete_any_trial_timestamp(trial_id=2) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=0) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=1) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=1) is None + assert storage.timestamp.get_any_trial_start_time(trial_id=2) is None + assert storage.timestamp.get_any_trial_end_time(trial_id=2) is None diff --git a/tests/unit/storage/fs/test_fs_trial.py b/tests/unit/storage/fs/test_fs_trial.py index feff5ad55..0cc8c8549 100644 --- a/tests/unit/storage/fs/test_fs_trial.py +++ b/tests/unit/storage/fs/test_fs_trial.py @@ -207,3 +207,43 @@ def test_get_all_trial_id(): ) assert storage.trial.get_all_trial_id() == [0, 1, 2, 3, 4, 5, 6, 7, 8] + + +# delete_any_trial_state +@t_base() +def test_delete_any_trial_state(): + storage = Storage(ws.path) + + states = [ + "ready", + "running", + "finished", + ] + + for i in range(len(states)): + storage.trial.set_any_trial_state( + trial_id=i, + state=states[i] + ) + + for i in range(len(states)): + assert storage.trial.get_any_trial_state(i) == states[i] + + assert storage.trial.get_any_trial_state(trial_id=0) is not None + assert storage.trial.get_any_trial_state(trial_id=1) is not None + assert storage.trial.get_any_trial_state(trial_id=2) is not None + + assert storage.trial.delete_any_trial_state(trial_id=0) is None + assert storage.trial.get_any_trial_state(trial_id=0) is None + assert storage.trial.get_any_trial_state(trial_id=1) is not None + assert storage.trial.get_any_trial_state(trial_id=2) is not None + + assert storage.trial.delete_any_trial_state(trial_id=1) is None + assert storage.trial.get_any_trial_state(trial_id=0) is None + assert storage.trial.get_any_trial_state(trial_id=1) is None + assert storage.trial.get_any_trial_state(trial_id=2) is not None + + assert storage.trial.delete_any_trial_state(trial_id=2) is None + assert storage.trial.get_any_trial_state(trial_id=0) is None + assert storage.trial.get_any_trial_state(trial_id=1) is None + assert storage.trial.get_any_trial_state(trial_id=2) is None \ No newline at end of file diff --git a/tests/unit/test_module.py b/tests/unit/test_module.py index 01ce1f872..1d110fb6a 100644 --- a/tests/unit/test_module.py +++ b/tests/unit/test_module.py @@ -5,7 +5,6 @@ from aiaccel.util.filesystem import file_create from aiaccel.util.logger import str_to_logging_level from contextlib import ExitStack -from multiprocessing import Barrier from pathlib import Path from tests.base_test import BaseTest from unittest.mock import MagicMock @@ -62,7 +61,6 @@ def setup_module(self, clean_work_dir): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'test' } @@ -108,7 +106,6 @@ def test_get_module_type(self, work_dir): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' } @@ -127,7 +124,6 @@ def test_get_module_type(self, work_dir): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } @@ -139,7 +135,6 @@ def test_get_module_type(self, work_dir): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } @@ -171,10 +166,6 @@ def test_exit_alive(self, work_dir): def test_print_dict_state(self): assert self.module.print_dict_state() is None - def test_set_barrier(self): - barrier = Barrier(3) - assert self.module.set_barrier(barrier) is None - def test_set_logger(self, work_dir): assert self.module.set_logger( 'root.optimizer', @@ -326,6 +317,9 @@ def test_loop(self): stack.enter_context(patch.object( self.module, 'loop_post_process', return_value=True )) + stack.enter_context(patch.object( + self.module, 'check_error', return_value=False + )) self.module._serialize = Mock() self.module._serialize.side_effect = dummy_break @@ -345,8 +339,5 @@ def test_deserialize(self): except NotImplementedError: assert True - def test_is_barrier(self): - assert not self.module.is_barrier() - def test_is_process_alive(self): assert not self.module.is_process_alive() diff --git a/tests/unit/test_wrapper_tools.py b/tests/unit/test_wrapper_tools.py index f3e1efc36..cfba86490 100644 --- a/tests/unit/test_wrapper_tools.py +++ b/tests/unit/test_wrapper_tools.py @@ -26,7 +26,6 @@ def test_create_runner_command( 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, } diff --git a/tests/unit/util_test/test_random.py b/tests/unit/util_test/test_random.py index e5ffb9036..b13f4bf11 100644 --- a/tests/unit/util_test/test_random.py +++ b/tests/unit/util_test/test_random.py @@ -22,7 +22,6 @@ def test_random_optimizer(self, clean_work_dir, work_dir): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'optimizer' } @@ -66,7 +65,6 @@ def test_random_scheduler(self, clean_work_dir, work_dir): 'config': str(self.config_json), 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'scheduler' } diff --git a/tests/unit/view/test_view.py b/tests/unit/view/test_view.py index 704d0308a..01a04ec4b 100644 --- a/tests/unit/view/test_view.py +++ b/tests/unit/view/test_view.py @@ -52,7 +52,6 @@ def test_view(): 'config': config_path, 'resume': None, 'clean': False, - 'nosave': False, 'fs': False, 'process_name': 'master' }