def iterate(self, nested_dict=None): """http://stackoverflow.com/questions/10756427/loop-through-all-nested-dictionary-values""" d = self if nested_dict is None else nested_dict if nested_dict is None: self.level = 0 for key in list(d.keys()): value = d[key] if isinstance(value, _Mapping): if value.get('@class') == 'Structure': from pymatgen import Structure yield key, Structure.from_dict(value) continue yield (self.level, key), None if value.get('@class') == 'Table': from mpcontribs.io.core.components.tdata import Table yield key, Table.from_dict(value) continue if Quantity is not None and value.get('@class') == 'Quantity': quantity = Quantity.from_dict(value) yield key, quantity continue self.level += 1 for inner_key, inner_value in self.iterate(nested_dict=value): yield inner_key, inner_value self.level -= 1 else: yield (self.level, key), value
def get_context(project, columns=None): ctx = {'project': project} client = load_client() prov = client.projects.get_entry(project=project).response().result for k in ['id', 'project', 'other']: prov.pop(k) ctx['title'] = prov.pop('title') ctx['provenance'] = RecursiveDict(prov).render() data = client.projects.get_table(project=project, columns=columns, per_page=3).response().result if data['items']: columns = list(data['items'][0].keys()) table = Table(data['items'], columns=columns) ctx['table'] = table.render(project=project) return ctx
def read_csv(body, is_data_section=True, **kwargs): """run pandas.read_csv on (sub)section body""" import pandas body = body.strip() if not body: return None from mpcontribs.io.core.components.tdata import Table if is_data_section: cur_line = 1 while 1: body_split = body.split('\n', cur_line) first_line = body_split[cur_line - 1].strip() cur_line += 1 if first_line and not first_line.startswith(csv_comment_char): break sep = kwargs.get('sep', ',') options = {'sep': sep, 'header': 0} header = [col.strip() for col in first_line.split(sep)] body = '\n'.join([sep.join(header), body_split[1]]) if first_line.startswith('level_'): options.update({'index_col': [0, 1]}) ncols = len(header) else: options = {'sep': ':', 'header': None, 'index_col': 0} ncols = 2 options.update(**kwargs) converters = dict((col, strip_converter) for col in range(ncols)) return Table( pandas.read_csv(StringIO(body), comment=csv_comment_char, skipinitialspace=True, squeeze=True, converters=converters, encoding='utf8', **options).dropna(how='all'))
def index(request): ctx = RequestContext(request) try: ctx['project'] = project prov = client.projects.get_entry(project=project).response().result prov.pop('id') ctx['title'] = prov.pop('title') ctx['provenance'] = RecursiveDict(prov).render() columns = ['phase', 'ΔH', 'ΔH|hyd', 'GS?', 'CIF'] data = client.contributions.get_table( project=project, columns=columns, per_page=3 ).response().result columns = list(data['items'][0].keys()) table = Table(data['items'], columns=columns) ctx['table'] = table.render(project=project) except Exception as ex: ctx['alert'] = str(ex) return render(request, "explorer_index.html", ctx.flatten())
def index(request): ctx = RequestContext(request) try: ctx['project'] = project prov = client.projects.get_entry(project=project).response().result prov.pop('id') ctx['title'] = prov.pop('title') ctx['provenance'] = RecursiveDict(prov).render() columns = ['phase', 'ΔH', 'ΔH|hyd', 'GS?', 'CIF'] data = client.contributions.get_table(project=project, columns=columns, per_page=3).response().result columns = list(data['items'][0].keys()) table = Table(data['items'], columns=columns) ctx['table'] = table.render(project=project) except Exception as ex: ctx['alert'] = str(ex) return render(request, "explorer_index.html", ctx.flatten())
def index(request): ctx = RequestContext(request) try: ctx['project'] = project prov = client.projects.get_entry(project=project).response().result prov.pop('id') ctx['title'] = prov.pop('title') ctx['provenance'] = RecursiveDict(prov).render() keys, subkeys = ['NUS', 'JARVIS'], ['id', 'Eₓ', 'CIF'] columns = ['##'.join([k, sk]) for k in keys for sk in subkeys] # columns_jarvis = ['id', 'E', 'ΔE|optB88vdW', 'ΔE|mbj', 'CIF'] data = client.contributions.get_table( project=project, columns=columns, per_page=3 ).response().result columns = list(data['items'][0].keys()) table = Table(data['items'], columns=columns) ctx['table'] = table.render(project=project) except Exception as ex: ctx['alert'] = str(ex) return render(request, "explorer_index.html", ctx.flatten())
def index(request): ctx = RequestContext(request) try: ctx['project'] = project prov = client.projects.get_entry(project=project).response().result prov.pop('id') ctx['title'] = prov.pop('title') ctx['provenance'] = RecursiveDict(prov).render() keys, subkeys = ['NUS', 'JARVIS'], ['id', 'Eₓ', 'CIF'] columns = ['##'.join([k, sk]) for k in keys for sk in subkeys] # columns_jarvis = ['id', 'E', 'ΔE|optB88vdW', 'ΔE|mbj', 'CIF'] data = client.contributions.get_table(project=project, columns=columns, per_page=3).response().result columns = list(data['items'][0].keys()) table = Table(data['items'], columns=columns) ctx['table'] = table.render(project=project) except Exception as ex: ctx['alert'] = str(ex) return render(request, "explorer_index.html", ctx.flatten())
def test_components(): d = {k: {} for k in mp_level01_titles} d["data"] = {"a": 3.5, "b": {"display": "6 eV", "value": 6, "unit": "eV"}} exp = HierarchicalData([("data", RecursiveDict([("a", 3.5), ("b", "6 eV")]))]) assert HierarchicalData(d) == exp fn = os.path.join(os.path.dirname(__file__), "test_table.json") with open(fn, "r") as f: d = json.load(f) table = Table.from_dict(d) assert table.render() plot = Plot.from_dict(d) assert plot.get_figure()
def add_data_table(self, identifier, dataframe, name, plot_options=None): """add a datatable to the root-level section Args: identifier (str): MP category ID (`mp_cat_id`) dataframe (pandas.DataFrame): tabular data as Pandas DataFrame name (str): table name, optional if only one table in section plot_options (dict): options for according plotly graph """ # TODO: optional table name, required if multiple tables per root-level section name = "".join([replacements.get(c, c) for c in name]) self.document.rec_update( nest_dict(Table(dataframe).to_dict(), [identifier, name])) self.document[identifier].insert_default_plot_options( dataframe, name, update_plot_options=plot_options)
def read_csv(body, is_data_section=True, **kwargs): """run pandas.read_csv on (sub)section body""" csv_comment_char = "#" import pandas body = body.strip() if not body: return None from mpcontribs.io.core.components.tdata import Table if is_data_section: cur_line = 1 while 1: body_split = body.split("\n", cur_line) first_line = body_split[cur_line - 1].strip() cur_line += 1 if first_line and not first_line.startswith(csv_comment_char): break sep = kwargs.get("sep", ",") options = {"sep": sep, "header": 0} header = [col.strip() for col in first_line.split(sep)] body = "\n".join([sep.join(header), body_split[1]]) if first_line.startswith("level_"): options.update({"index_col": [0, 1]}) ncols = len(header) else: options = {"sep": ":", "header": None, "index_col": 0} ncols = 2 options.update(**kwargs) converters = dict((col, strip_converter) for col in range(ncols)) return Table( pandas.read_csv( StringIO(body), comment=csv_comment_char, skipinitialspace=True, squeeze=True, converters=converters, encoding="utf8", **options ).dropna(how="all") )
def from_dict(cls, d): return cls(Table.from_dict(d), config=d.get("config"))
def from_dict(cls, d): return cls(Table.from_dict(d), config=d.get('config'), tid=d['id'])