Source code for spux.utils.traverse


import inspect

[docs]def components (root, includes=['Model', 'Likelihood', 'Sampler']): """Auto-magically generate a table for all SPUX components.""" traversed = [] base = type(root).__bases__[0].__name__ if base in includes: if hasattr (root, 'assign'): dependencies = list (inspect.signature (root.assign) .parameters.keys ()) for arg in dependencies: option = getattr (root, arg) base = type(option).__bases__[0].__name__ if hasattr (option, 'assign') or base in includes: traversed += components (getattr (root, arg)) component = {} component ['Component'] = type(root).__bases__[0].__name__ component ['Class'] = type(root).__name__ options = [] args = list (inspect.signature (root.__init__) .parameters.keys ()) for arg in args: value = str (getattr (root, arg)) if len (value) > 10: value = '<...>' options += ['%s=%s' % (arg, value)] component ['Options'] = ', '.join (options) traversed += [component] return traversed
[docs]def infos (info): """Auto-magically generate a table for info tructure.""" fields = list (info.keys ()) if 'infos' in fields: taskinfos = info ['infos'] if type (taskinfos) == list: iterators = '%s - %s' % (0, len (taskinfos) - 1) taskinfo = [taskinfo for taskinfo in taskinfos if taskinfo is not None] [0] elif type (taskinfos) == dict: iterators = sorted (list (taskinfos.keys ())) iterators = '%s - %s' % (iterators [0], iterators [-1]) taskinfo = [taskinfo for taskinfo in taskinfos.values () if taskinfo is not None] [0] else: iterators = '-' taskinfo = taskinfos return [{'Fields' : ', '.join (fields), 'Iterators for infos' : iterators}] + infos (taskinfo) else: return [{'Fields' : ', '.join (fields), 'Iterators for infos' : '-'}]