Source code for exorad.utils.util

import sys

import astropy.units as u
import numpy as np
from astropy.table import QTable
from astropy.table import Table
from astropy.table import vstack


[docs] def progressbar(it, prefix="", size=60, file=sys.stdout, label=""): count = len(it) if count > 0: def show(j): x = int(size * j / count) file.write( "%s[%s%s] %i/%i %s\r" % (prefix, "#" * x, "." * (size - x), j, count, label) ) file.flush() show(0) for i, item in enumerate(it): yield item show(i + 1) file.write("\n") file.flush()
[docs] def to_dict(obj, classkey=None): if isinstance(obj, dict): data = {} for k, v in obj.items(): data[k] = to_dict(v, classkey) return data elif isinstance(obj, u.Quantity): data = {"value": obj.value, "unit": str(obj.unit)} return data elif hasattr(obj, "_ast"): return to_dict(obj._ast()) elif isinstance(obj, QTable): data = {"table": obj} # # commented lines convert table to dict, but table is already converted during the writing process! # # keys = [k for k in obj.keys()] # data_to_dict = {} # for k in keys: # if hasattr(obj[k][0], 'unit'): # data_to_dict[k] = {'value': obj[k], 'unit': str(obj[k][0].unit)} # else: # if isinstance(obj[k][0], str): # data_to_dict[k] = {'value': [str(e) for e in obj[k]]} # else: # data_to_dict[k] = {'value': obj[k]} return data elif isinstance(obj, Table): keys = [k for k in obj.keys()] data = {} for k in keys: data[k] = {"value": obj[k]} return data elif hasattr(obj, "__dict__"): data = { key: to_dict(value, classkey) for key, value in obj.__dict__.items() if not callable(value) and not key.startswith("_") and key not in ["name"] } if classkey is not None and hasattr(obj, "__class__"): data[classkey] = obj.__class__.__name__ return data else: return obj
[docs] def vstack_tables(table_list): table = False for tab in table_list: if not table: table = tab else: col_name1 = [col for col in table.keys() if col not in tab.keys()] if col_name1: for c in col_name1: tab[c] = np.zeros(len(tab)) * table[c][0] col_name2 = [col for col in tab.keys() if col not in table.keys()] if col_name2: for c in col_name2: table[c] = np.zeros(len(table)) * tab[c][0] table = vstack([table, tab], join_type="outer") return table
[docs] def parse_range(inp, avail_values): if inp.strip() == "all": return [x for x in range(avail_values)] if inp.strip() == "none": return [] args = inp.split(",") numbers = [] for a in args: start = None end = None try: s = a.split("-") start = int(s[0]) end = int(s[1]) end += 1 except IndexError: start = int(a) end = int(a) + 1 except ValueError: print("Invalid axis format, should be int") return None for x in range(start, end): numbers.append(x) return numbers
[docs] def chunks(l, n): for i in range(0, len(l), n): yield l[i : i + n]