Spaces:
Running
on
Zero
Running
on
Zero
File size: 2,943 Bytes
08f69f6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
"""Utility functions."""
import contextlib
import csv
import json
import os
import pathlib
import warnings
import numpy as np
def save_args(filename, args):
"""Save the command-line arguments."""
args_dict = {}
for key, value in vars(args).items():
if isinstance(value, pathlib.Path):
args_dict[key] = str(value)
else:
args_dict[key] = value
save_json(filename, args_dict)
def inverse_dict(d):
"""Return the inverse dictionary."""
return {v: k for k, v in d.items()}
def save_txt(filename, data):
"""Save a list to a TXT file."""
with open(filename, "w", encoding="utf8") as f:
for item in data:
f.write(f"{item}\n")
def load_txt(filename):
"""Load a TXT file as a list."""
with open(filename, encoding="utf8") as f:
return [line.strip() for line in f]
def save_json(filename, data):
"""Save data as a JSON file."""
with open(filename, "w", encoding="utf8") as f:
json.dump(data, f)
def load_json(filename):
"""Load data from a JSON file."""
with open(filename, encoding="utf8") as f:
return json.load(f)
def save_csv(filename, data, header=""):
"""Save data as a CSV file."""
np.savetxt(
filename, data, fmt="%d", delimiter=",", header=header, comments=""
)
def load_csv(filename, skiprows=1):
"""Load data from a CSV file."""
return np.loadtxt(filename, dtype=int, delimiter=",", skiprows=skiprows)
def load_csv_text(filename, headerless=True):
"""Read a CSV file into a list of dictionaries or lists."""
with open(filename) as f:
if headerless:
return [row for row in csv.reader(f)]
reader = csv.DictReader(f)
return [
{field: row[field] for field in reader.fieldnames}
for row in reader
]
def ignore_exceptions(func):
"""Decorator that ignores all errors and warnings."""
def inner(*args, **kwargs):
with warnings.catch_warnings():
warnings.simplefilter("ignore")
try:
return func(*args, **kwargs)
except Exception:
return None
return inner
def suppress_outputs(func):
"""Decorator that suppresses writing to stdout and stderr."""
def inner(*args, **kwargs):
devnull = open(os.devnull, "w")
with contextlib.redirect_stdout(devnull):
with contextlib.redirect_stderr(devnull):
return func(*args, **kwargs)
return inner
def resolve_paths(func):
"""Decorator that resolves all paths."""
def inner(*args, **kwargs):
parsed = func(*args, **kwargs)
for key in vars(parsed).keys():
if isinstance(getattr(parsed, key), pathlib.Path):
setattr(
parsed, key, getattr(parsed, key).expanduser().resolve()
)
return parsed
return inner
|