| | from __future__ import print_function |
| | from contextlib import contextmanager |
| | import numpy as np |
| | import time |
| | import shlex |
| | import subprocess |
| |
|
| | |
| | |
| | |
| |
|
| | def fmt_row(width, row, header=False): |
| | out = " | ".join(fmt_item(x, width) for x in row) |
| | if header: out = out + "\n" + "-"*len(out) |
| | return out |
| |
|
| | def fmt_item(x, l): |
| | if isinstance(x, np.ndarray): |
| | assert x.ndim==0 |
| | x = x.item() |
| | if isinstance(x, (float, np.float32, np.float64)): |
| | v = abs(x) |
| | if (v < 1e-4 or v > 1e+4) and v > 0: |
| | rep = "%7.2e" % x |
| | else: |
| | rep = "%7.5f" % x |
| | else: rep = str(x) |
| | return " "*(l - len(rep)) + rep |
| |
|
| | color2num = dict( |
| | gray=30, |
| | red=31, |
| | green=32, |
| | yellow=33, |
| | blue=34, |
| | magenta=35, |
| | cyan=36, |
| | white=37, |
| | crimson=38 |
| | ) |
| |
|
| | def colorize(string, color='green', bold=False, highlight=False): |
| | attr = [] |
| | num = color2num[color] |
| | if highlight: num += 10 |
| | attr.append(str(num)) |
| | if bold: attr.append('1') |
| | return '\x1b[%sm%s\x1b[0m' % (';'.join(attr), string) |
| |
|
| | def print_cmd(cmd, dry=False): |
| | if isinstance(cmd, str): |
| | pass |
| | else: |
| | cmd = ' '.join(shlex.quote(arg) for arg in cmd) |
| | print(colorize(('CMD: ' if not dry else 'DRY: ') + cmd)) |
| |
|
| |
|
| | def get_git_commit(cwd=None): |
| | return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], cwd=cwd).decode('utf8') |
| |
|
| | def get_git_commit_message(cwd=None): |
| | return subprocess.check_output(['git', 'show', '-s', '--format=%B', 'HEAD'], cwd=cwd).decode('utf8') |
| |
|
| | def ccap(cmd, dry=False, env=None, **kwargs): |
| | print_cmd(cmd, dry) |
| | if not dry: |
| | subprocess.check_call(cmd, env=env, **kwargs) |
| |
|
| |
|
| | MESSAGE_DEPTH = 0 |
| |
|
| | @contextmanager |
| | def timed(msg): |
| | global MESSAGE_DEPTH |
| | print(colorize('\t'*MESSAGE_DEPTH + '=: ' + msg, color='magenta')) |
| | tstart = time.time() |
| | MESSAGE_DEPTH += 1 |
| | yield |
| | MESSAGE_DEPTH -= 1 |
| | print(colorize('\t'*MESSAGE_DEPTH + "done in %.3f seconds"%(time.time() - tstart), color='magenta')) |
| |
|