Example #1
0
 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
Example #2
0
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
Example #3
0
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'))
Example #4
0
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())
Example #5
0
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())
Example #6
0
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())
Example #7
0
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())
Example #8
0
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()
Example #9
0
    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)
Example #10
0
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")
    )
Example #11
0
 def from_dict(cls, d):
     return cls(Table.from_dict(d), config=d.get("config"))
Example #12
0
 def from_dict(cls, d):
     return cls(Table.from_dict(d), config=d.get('config'), tid=d['id'])