Coverage for parallel_bilby/utils.py: 93%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import functools
2import logging
3import os
4import sys
5import time
7import bilby
8from dynesty.utils import get_print_fn_args
10logger = bilby.core.utils.logger
13def get_cli_args():
14 """Tool to get CLI args (also makes testing easier)"""
15 return sys.argv[1:]
18def get_version_information():
19 version_file = os.path.join(
20 os.path.dirname(os.path.dirname(__file__)), "parallel_bilby/.version"
21 )
22 try:
23 with open(version_file, "r") as f:
24 return f.readline().rstrip()
25 except EnvironmentError:
26 print("No version information file '.version' found")
29def safe_file_dump(data, filename, module):
30 """Safely dump data to a .pickle file
32 Parameters
33 ----------
34 data:
35 data to dump
36 filename: str
37 The file to dump to
38 module: pickle, dill
39 The python module to use
40 """
42 temp_filename = filename + ".temp"
43 with open(temp_filename, "wb") as file:
44 module.dump(data, file)
45 os.rename(temp_filename, filename)
48def stopwatch(_func=None, *, log_level=logging.DEBUG):
49 def decorator_stopwatch(func):
50 @functools.wraps(func)
51 def wrapper(*args, **kwargs):
52 t0 = time.time()
53 result = func(*args, **kwargs)
54 dur = time.time() - t0
55 logger.log(log_level, f"{func.__name__} took {dur}s")
56 return result
58 return wrapper
60 if _func is None:
61 return decorator_stopwatch
62 else:
63 return decorator_stopwatch(_func)
66def stdout_sampling_log(**kwargs):
67 """Logs will look like:
68 #:282|eff(%):26.406|logl*:-inf<-160.2<inf|logz:-165.5+/-0.1|dlogz:1038.1>0.1
70 Adapted from dynesty
71 https://github.com/joshspeagle/dynesty/blob/bb1c5d5f9504c9c3bbeffeeba28ce28806b42273/py/dynesty/utils.py#L349
72 """
73 niter, short_str, mid_str, long_str = get_print_fn_args(**kwargs)
74 custom_str = [f"#: {niter:d}"] + mid_str
75 custom_str = "|".join(custom_str).replace(" ", "")
76 sys.stdout.write("\033[K" + custom_str + "\r")
77 sys.stdout.flush()