From 28381d12fd9de54c0d69e2df76baf29e75ade6b5 Mon Sep 17 00:00:00 2001 From: Jameson Graef Rollins <jameson.rollins@ligo.org> Date: Mon, 22 Feb 2021 10:52:59 -0800 Subject: [PATCH] add ability to retrieve nested items from Budget and Trace objects e.g. Budget['SubBuget.BudgetItem'] --- gwinc/nb.py | 24 ++++++++++++++++++++++-- gwinc/trace.py | 19 +++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/gwinc/nb.py b/gwinc/nb.py index 19ce472e..56baa8bf 100644 --- a/gwinc/nb.py +++ b/gwinc/nb.py @@ -418,13 +418,33 @@ class Budget(Noise): return name def __getitem__(self, name): + """Get a (possibly nested) sub-BudgetItem. + + """ + try: + name, rest = name.split('.', 1) + except ValueError: + rest = None try: - return self._noise_objs[name] + o = self._noise_objs[name] except KeyError: try: - return self._cal_objs[name] + o = self._cal_objs[name] except KeyError: raise KeyError("unknown noise or cal name '{}".format(name)) + if rest: + return o[rest] + else: + return o + + def get(self, key, default=None): + """Get a (possibly nested) sub-BudgetItem. + + """ + try: + return self[key] + except KeyError: + return default def keys(self): """Iterate over budget noise names.""" diff --git a/gwinc/trace.py b/gwinc/trace.py index d113b985..a15d5590 100644 --- a/gwinc/trace.py +++ b/gwinc/trace.py @@ -61,8 +61,23 @@ class BudgetTrace: raise AttributeError def __getitem__(self, name): - """get budget trace by name""" - return self._bdict[name] + """get budget trace by name + + """ + try: + name, rest = name.split('.', 1) + return self._bdict[name][rest] + except ValueError: + return self._bdict[name] + + def get(self, key, default=None): + """get a (possibly nested) Trace item. + + """ + try: + return self[key] + except KeyError: + return default def items(self): """iterator of budget (name, trace) tuples""" -- GitLab