Source code for stark_qa.tools.node

[docs]def dict_tree(dictionary, indent=0): """ Create a visual tree representation of a dictionary. Args: dictionary (dict): The dictionary to represent as a tree. indent (int): The current indentation level. Returns: str: A string representing the dictionary as a tree. """ tree_str = '' for key, value in dictionary.items(): if indent > 0: tree_str += ' |-----' * indent + f"{key}\n" else: tree_str += f"--{key}\n" if isinstance(value, dict): tree_str += dict_tree(value, indent + 1) return tree_str
[docs]class Node: def __init__(self): pass def __repr__(self): return dict_tree(self.dictionary) def __attr__(self): """ Recursively gather attributes of the node. Returns: list: A list of attribute names. """ attributes = [] lst = self.__dir__() for item in lst: if not item.startswith('__'): if isinstance(getattr(self, item), Node): attributes.extend([f'{item}.{i}' for i in getattr(self, item).__attr__()]) else: attributes.append(item) return list(filter(lambda x: 'dictionary' not in x, attributes))
[docs]def register_node(node, dictionary): """ Register a dictionary into a Node object. Args: node (Node): The node to register the dictionary to. dictionary (dict): The dictionary to register. """ setattr(node, 'dictionary', dictionary) for key, value in dictionary.items(): if isinstance(value, dict): setattr(node, key, Node()) register_node(getattr(node, key), value) else: setattr(node, key, value)
[docs]def df_row_to_dict(row, column_names=None): """ Convert a row of a DataFrame to a dictionary. Args: row (pandas.Series): A row of a DataFrame. column_names (list, optional): The list of column names. Defaults to None. Returns: dict: A dictionary that contains the same information as the row. """ if column_names is None: column_names = row.index return {name: row[name] for name in column_names}