Source code for abed.html.rank_graphs

# -*- coding: utf-8 -*-

import dominate
import os
import json

from .common import navbar
from .utils import AbedHTMLTypes, copy_data_file
from ..conf import settings
from ..io import info
from ..utils import clean_str
from ..results.models import AbedTableTypes

tags = dominate.tags


[docs]def create_rank_graphs_html(tables): html = generate_graphs_html(tables) write_tables_html(html)
[docs]def get_table_id(table): values = [] values.append(clean_str(table.target)) values.append(clean_str(table.type)) if table.is_metric: if settings.TYPE == "ASSESS": values.append(clean_str(table.metricname)) elif settings.TYPE == "CV_TT": values.append(clean_str(table.trainmetricname)) values.append(clean_str(table.testmetricname)) if table.is_summary: values.append("summary") return "_".join(values)
[docs]def generate_graphs_html(tables): doc = dominate.document(title="ABED Rank Graphs") with doc.head: # meta tags tags.meta(charset="utf-8") tags.meta(http_equiv="X-UA-Compatible", content="IE=edge") tags.meta( name="viewport", content="width=device-width, initial-scale=1" ) tags.meta(name="description", content="Rank graphs for ABED results") tags.meta(name="author", content="Gertjan van den Burg") # JQuery & Bootstrap JS tags.script( type="text/javascript", src=copy_data_file("jquery/1.11.3/jquery.min.js"), ) tags.script( type="text/javascript", src=copy_data_file("bootstrap-3.3.5-dist/js/bootstrap.min.js"), ) # Bootstrap core CSS tags.link( rel="stylesheet", href=copy_data_file("bootstrap-3.3.5-dist/css/bootstrap.min.css"), ) # D3 and Labella tags.script(type="text/javascript", src=copy_data_file("d3/d3.min.js")) tags.script( type="text/javascript", src=copy_data_file("d3kit/d3kit.min.js") ) tags.script( type="text/javascript", src=copy_data_file("labella/labella.min.js"), ) tags.script( type="text/javascript", src=copy_data_file("d3kit-timeline/d3kit-timeline.min.js"), ) # ABED CSS & JS tags.link(rel="stylesheet", href=copy_data_file("abed/css/abed.css")) tags.script( type="text/javascript", src=copy_data_file("abed/js/abed_rankgraphs.js"), ) tables = [ t for t in tables if t.is_summary and t.type == AbedTableTypes.RANKS ] labels = sorted(set([t.target for t in tables])) lbl_table = {} for lbl in labels: lbl_table[lbl] = [t for t in tables if t.target == lbl] with doc: with tags.div(id="header"): navbar(active=AbedHTMLTypes.RANK_GRAPHS) with tags.div(id="content"): with tags.div(_class="container"): for lbl in sorted(lbl_table.keys()): with tags.div(_class="panel panel-default"): with tags.div(_class="panel-heading"): tags.h3("Target: %s" % lbl, _class="panel-title") with tags.div(_class="panel-body"): for table in lbl_table[lbl]: tabid = get_table_id(table) if table.is_metric: if settings.TYPE == "ASSESS": tags.p("Metric: %s" % table.metricname) elif settings.TYPE == "CV_TT": with tags.div(_class="col-xs-6"): tags.b( "Train Metric on %s: %s" % ( settings.YTRAIN_LABEL, table.trainmetricname, ) ) with tags.div(_class="col-xs-6"): tags.b( "Test Metric on %s: %s" % (lbl, table.testmetricname) ) with tags.div(id=tabid, _class="AbedRanks"): pass tags.hr() write_table_json(table, tabid) tags.comment("./container") with tags.div(id="footer"): pass return str(doc)
[docs]def write_table_json(table, tabid): data = [] averages = next((row for _id, row in table if _id == "Average"), None) headers = table.headers[1:] for hdr, avg in zip(headers, averages): data.append({"name": hdr, "time": float(avg)}) fname = os.path.join(settings.OUTPUT_DIR, "html", tabid + ".json") with open(fname, "w") as fid: fid.write(json.dumps(data)) info("Created output file: %s" % fname)
[docs]def write_tables_html(doc): fname = os.path.join( settings.OUTPUT_DIR, "html", AbedHTMLTypes.RANK_GRAPHS[-1] ) with open(fname, "w") as fid: fid.write(doc) info("Created output file: %s" % fname)