--- a +++ b/utils.py @@ -0,0 +1,117 @@ +import platform +import pwd +import subprocess +import time +import numpy as np +import glob +import os +import cPickle as pickle + +maxfloat = np.finfo(np.float32).max + + +def auto_make_dir(path): + if not os.path.exists(path): + os.makedirs(path) + print 'Created dir', path + + +def find_model_metadata(metadata_dir, config_name): + metadata_paths = glob.glob(metadata_dir + '/%s-*' % config_name) + if not metadata_paths: + raise ValueError('No metadata files for config %s' % config_name) + elif len(metadata_paths) > 1: + raise ValueError('Multiple metadata files for config %s' % config_name) + print 'Loaded model from', metadata_paths[0] + return metadata_paths[0] + + +def get_train_valid_split(train_data_path): + filename = 'valid_split.pkl' + # if not os.path.isfile(filename): + # print 'Making validation split' + # create_validation_split.save_train_validation_ids(filename, train_data_path) + return load_pkl(filename) + + +def check_data_paths(data_path): + if not os.path.isdir(data_path): + raise ValueError('wrong path to DICOM data') + + +def get_dir_path(dir_name, root_dir, no_name=True): + if no_name: + username = '' + else: + username = pwd.getpwuid(os.getuid())[0] + dir_path = root_dir + '/' + dir_name + '/%s' % username + if not os.path.isdir(dir_path): + os.makedirs(dir_path) + return dir_path + + +def hms(seconds): + seconds = np.floor(seconds) + minutes, seconds = divmod(seconds, 60) + hours, minutes = divmod(minutes, 60) + + return "%02d:%02d:%02d" % (hours, minutes, seconds) + + +def timestamp(): + return time.strftime("%Y%m%d-%H%M%S", time.localtime()) + + +def hostname(): + return platform.node() + + +def generate_expid(arch_name): + return "%s-%s" % (arch_name, timestamp()) + + +def get_git_revision_hash(): + try: + return subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip() + except: + return 0 + + +def save_pkl(obj, path): + with open(path, 'wb') as f: + pickle.dump(obj, f) + + +def load_pkl(path): + with open(path, 'rb') as f: + obj = pickle.load(f) + return obj + + +def save_np(obj, path): + np.save(file=path, arr=obj, fix_imports=True) + + +def load_np(path): + return np.load(path) + + +def copy(from_folder, to_folder): + command = "cp -r %s %s/." % (from_folder, to_folder) + print command + os.system(command) + + +def current_learning_rate(schedule, idx): + s = schedule.keys() + s.sort() + current_lr = schedule[0] + for i in s: + if idx >= i: + current_lr = schedule[i] + + return current_lr + + +def get_script_name(file_path): + return os.path.basename(file_path).replace('.py', '')