wasm-ara / utils /__init__.py
wasmdashai's picture
first commit
4451360
import sys
import yaml
try:
from yaml import CLoader as Loader
except ImportError:
from yaml import Loader
class DictConfig(object):
"""Creates a Config object from a dict
such that object attributes correspond to dict keys.
"""
def __init__(self, config_dict):
self.__dict__.update(config_dict)
def __str__(self):
return '\n'.join(f"{key}: {val}" for key, val in self.__dict__.items())
def __repr__(self):
return self.__str__()
def get_custom_config(fname):
with open(fname, 'r') as stream:
config_dict = yaml.load(stream, Loader)
config = DictConfig(config_dict)
return config
def get_basic_config():
return get_custom_config('configs/basic.yaml')
def get_config(fname):
config = get_basic_config()
custom_config = get_custom_config(fname)
config.__dict__.update(custom_config.__dict__)
return config
def read_lines_from_file(path, encoding='utf-8'):
lines = []
with open(path, 'r', encoding=encoding) as f:
for line in f:
lines.append(line.strip())
return lines
def write_lines_to_file(path, lines, mode='w', encoding='utf-8'):
with open(path, mode, encoding=encoding) as f:
for i, line in enumerate(lines):
if i == len(lines)-1:
f.write(line)
break
f.write(line + '\n')
def progbar(iterable, length=30, symbol='='):
"""Wrapper generator function for an iterable.
Prints a progressbar when yielding an item. \\
Args:
iterable: an object supporting iteration
length: length of the progressbar
"""
n = len(iterable)
for i, item in enumerate(iterable):
steps = length*(i+1) // n
sys.stdout.write('\r')
sys.stdout.write(f"[{symbol*steps:{length}}] {(100/n*(i+1)):.1f}%")
if i == (n-1):
sys.stdout.write('\n')
sys.stdout.flush()
yield item