|
import numpy as np |
|
import os, sys |
|
import pickle |
|
import yaml |
|
from easydict import EasyDict as edict |
|
from typing import Any, IO |
|
|
|
ROOT_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..') |
|
|
|
class TextLogger: |
|
def __init__(self, log_path): |
|
self.log_path = log_path |
|
with open(self.log_path, "w") as f: |
|
f.write("") |
|
def log(self, log): |
|
with open(self.log_path, "a+") as f: |
|
f.write(log + "\n") |
|
|
|
class Loader(yaml.SafeLoader): |
|
"""YAML Loader with `!include` constructor.""" |
|
|
|
def __init__(self, stream: IO) -> None: |
|
"""Initialise Loader.""" |
|
|
|
try: |
|
self._root = os.path.split(stream.name)[0] |
|
except AttributeError: |
|
self._root = os.path.curdir |
|
|
|
super().__init__(stream) |
|
|
|
def construct_include(loader: Loader, node: yaml.Node) -> Any: |
|
"""Include file referenced at node.""" |
|
|
|
filename = os.path.abspath(os.path.join(loader._root, loader.construct_scalar(node))) |
|
extension = os.path.splitext(filename)[1].lstrip('.') |
|
|
|
with open(filename, 'r') as f: |
|
if extension in ('yaml', 'yml'): |
|
return yaml.load(f, Loader) |
|
elif extension in ('json', ): |
|
return json.load(f) |
|
else: |
|
return ''.join(f.readlines()) |
|
|
|
def get_config(config_path): |
|
yaml.add_constructor('!include', construct_include, Loader) |
|
with open(config_path, 'r') as stream: |
|
config = yaml.load(stream, Loader=Loader) |
|
config = edict(config) |
|
_, config_filename = os.path.split(config_path) |
|
config_name, _ = os.path.splitext(config_filename) |
|
config.name = config_name |
|
return config |
|
|
|
def ensure_dir(path): |
|
""" |
|
create path by first checking its existence, |
|
:param paths: path |
|
:return: |
|
""" |
|
if not os.path.exists(path): |
|
os.makedirs(path) |
|
|
|
def read_pkl(data_url): |
|
file = open(data_url,'rb') |
|
content = pickle.load(file) |
|
file.close() |
|
return content |