[mlpack-svn] r15648 - in mlpack/conf/jenkins-conf/benchmark: benchmark reports/img util

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Fri Aug 23 06:46:24 EDT 2013


Author: marcus
Date: Fri Aug 23 06:46:23 2013
New Revision: 15648

Log:
Improve page structure and clean the page template.

Removed:
   mlpack/conf/jenkins-conf/benchmark/reports/img/mlpack_top_1.png
Modified:
   mlpack/conf/jenkins-conf/benchmark/benchmark/make_reports.py
   mlpack/conf/jenkins-conf/benchmark/util/database.py
   mlpack/conf/jenkins-conf/benchmark/util/graph.py
   mlpack/conf/jenkins-conf/benchmark/util/template.py

Modified: mlpack/conf/jenkins-conf/benchmark/benchmark/make_reports.py
==============================================================================
--- mlpack/conf/jenkins-conf/benchmark/benchmark/make_reports.py	(original)
+++ mlpack/conf/jenkins-conf/benchmark/benchmark/make_reports.py	Fri Aug 23 06:46:23 2013
@@ -25,6 +25,7 @@
 import argparse
 import glob
 import re
+import collections
 
 '''
 Create the top line chart.
@@ -36,7 +37,7 @@
   build, results = db.GetResultsSum("mlpack")
 
   GenerateSingleLineChart(results, "reports/img/mlpack_top_" + str(build) + 
-      ".png", backgroundColor="#F3F3F3")
+      ".png", backgroundColor="#F3F3F3", windowWidth=9, windowHeight=1.6)
   return "img/mlpack_top_" + str(build) + ".png"
 
 '''
@@ -76,27 +77,28 @@
 '''
 Create the table with the datasets informations.
 
- at results List of a List which contains the datasets informations.
+ at param resultList - List of a List which contains the datasets informations.
 @return HTML code which contains the dataset informations.
 '''
-def CreateDatasetTable(results):
+def CreateDatasetTable(resultList):
   datasets = []
   datasetTable = ""
+  for results in resultList:
+    results = results[0]
+    for result in results:
+      for data in result:
+        datasetName = data[8]
+
+        if datasetName not in datasets:
+         datasets.append(datasetName)
 
-  for result in results:
-    for data in result:
-      datasetName = data[8]
-
-      if datasetName not in datasets:
-       datasets.append(datasetName)
-
-       datasetTable += "<tr><td>" + datasetName + "</td>"
-       datasetTable += "<td>" + "{0:.5f}".format(data[9]) + " MB</td>"
-       datasetTable += "<td>" + str(data[10]) + "</td>"
-       datasetTable += "<td>" + str(data[11]) + "</td>"
-       datasetTable += "<td>" + str(data[10] * data[11]) + "</td>"
-       datasetTable += "<td>" + str(data[12]) + "</td>"
-       datasetTable += "</tr>"
+         datasetTable += "<tr><td>" + datasetName + "</td>"
+         datasetTable += "<td>" + "{0:.5f}".format(data[9]) + " MB</td>"
+         datasetTable += "<td>" + str(data[10]) + "</td>"
+         datasetTable += "<td>" + str(data[11]) + "</td>"
+         datasetTable += "<td>" + str(data[10] * data[11]) + "</td>"
+         datasetTable += "<td>" + str(data[12]) + "</td>"
+         datasetTable += "</tr>"
 
   return datasetTable
 
@@ -115,7 +117,7 @@
       memoryValues["nameID"] = result[7] + str(hash(datetime.datetime.now()))
       
       content = Profiler.MassifMemoryUsageReport(str(result[5])).lstrip(" ")
-      memoryValues["content"] = content
+      memoryValues["content"] = "content"
 
       filename = "img/massif_" + os.path.basename(result[5]).split('.')[0] + ".png"
       CreateMassifChart(result[5], "reports/" + filename)
@@ -157,81 +159,153 @@
   buildIds = []
   for libraryid in libraryIds:
     buildIds.append((db.GetLatestBuildFromLibary(libraryid[0]), libraryid[1]))
-
+  
+  methodGroup = {}
   # Iterate throw all methods and create for each method a new container.
   for method in db.GetAllMethods():
+    
     methodResults = []
     methodLibararies = []
+    resultBuildId = []
     for buildId in buildIds:
       results = db.GetMethodResultsForLibary(buildId[0], method[0])
 
-      if results:        
+      if results:
         methodLibararies.append(buildId[1])
+        resultBuildId.append(buildId[0])
         methodResults.append(results)
 
     if methodResults:
-      # Generate a "unique" hash for the chart names.
-      chartHash = str(hash(str(method[1:]) + str(buildIds)))
+      t = (methodResults, methodLibararies, resultBuildId)
+      if method[1] in methodGroup:
+        methodGroup[method[1]].append(t)
+      else:
+        methodGroup[method[1]] = [t]
 
-      # Create the memory content.
-      memoryContent = ""
-      mlpackMemoryId = db.GetLibrary("mlpack_memory")
-      if mlpackMemoryId:
+  methodGroup = collections.OrderedDict(sorted(methodGroup.items()))
+  collapseGroup = 0
+  for methodName, results in methodGroup.items():
+    # Create the container.
+    reportValues = {}
+    reportValues["methodName"] = methodName
+    
+
+    resultPanel = ""
+    methodInfo = ""
+    memoryContent = ""
+
+    mlpackMemoryId = db.GetLibrary("mlpack_memory")
+    mlpackMemoryBuilId = ""
+    if mlpackMemoryId:
         mlpackMemoryBuilId = db.GetLatestBuildFromLibary(mlpackMemoryId[0][0])
-        if mlpackMemoryBuilId:
-          memoryResults = db.GetMemoryResults(mlpackMemoryBuilId, mlpackMemoryId[0][0], method[0])
-          memoryContent = CreateMemoryContent(memoryResults)
+
+    # Variables to count the status informations.
+    failureCount= 0
+    datasetCount = 0
+    timeoutCount = 0
+    bestLibCount = 0
+    totalTimeCount = 0
+    libCount = 0
+
+    for result in results:
+      resultValues = {}
+      groupPanel = {}
+      
+      methodResults = result[0]
+      methodLibararies = result[1]
+      resultBuildId = result[2]
+      methodId = methodResults[0][0][6]
+
+      # Generate a "unique" hash for the chart name.
+      chartHash = str(hash(str(result)))
 
       # Generate a "unique" name for the line chart.
       lineChartName = "img/line_" + chartHash + ".png"
 
-      # Create the line chart.
-      build, methodResultsSum = db.GetResultsMethodSum("mlpack", method[0])
+      build, methodResultsSum = db.GetResultsMethodSum("mlpack", methodId)
       GenerateSingleLineChart(methodResultsSum, "reports/" + lineChartName)
 
       # Generate a "unique" name for the bar chart.
       barChartName = "img/bar_" + chartHash + ".png"
-      
+
       # Create the bar chart.
       ChartInfo = GenerateBarChart(methodResults, methodLibararies, 
           "reports/" + barChartName)
-      numDatasets, totalTime, failure, timeouts, bestLibCount, timingData = ChartInfo
+      numDatasets, totalTime, failure, timeouts, bestLibnum, timingData = ChartInfo
+
+      # Increase status informations.
+      failureCount += failure
+      datasetCount += numDatasets
+      timeoutCount += timeouts
+      bestLibCount += bestLibnum
+      totalTimeCount += totalTime
 
-      # Create the timing table.
       header, timingTable = CreateTimingTable(timingData, methodLibararies)
-      datasetTable = CreateDatasetTable(methodResults)
 
-      # Create the method info content.
-      methodInfo = CreateMethodInfo(db.GetMethodInfo(method[0]), str(method[1:][0]))
+      libCount = libCount if libCount >= len(methodLibararies) else len(methodLibararies)
 
-      # Create the container.
-      reportValues = {}
-      reportValues["methodName"] = str(method[1:][0])
-      reportValues["parameters"] = str(method[1:][1]) if method[1:][1] else "None"
-
-      # Calculate the percent for the progress bar.
-      if numDatasets != 0:
-        negative = (((numDatasets - bestLibCount) / float(numDatasets)) * 100.0)
-        reportValues["progressPositive"] = "{0:.2f}".format(100 - negative) + "%"
-        reportValues["progressNegative"] = "{0:.2f}".format(negative) + "%"
+      parameters = db.GetMethodParameters(methodId)
+      if parameters:
+        parameters = parameters[0][0]
       else:
-        reportValues["progressPositive"] = "0%"
-        reportValues["progressNegative"] = "100%"
+        parameters = ""
+
+      resultValues["parameters"] = lineChartName
+      resultValues["lineChart"] = lineChartName
+      resultValues["barChart"] = barChartName
+      resultValues["timingHeader"] = header
+      resultValues["timingTable"] = timingTable
+
+      groupPanel["nameID"] = chartHash
+      groupPanel["name"] = "Parameters: " + (parameters if parameters else "None")
+      groupPanel["content"] = resultsPanel % resultValues
+
+      resultPanel += resultsTemplate % groupPanel
+
+      # Create the memory content.
+      if mlpackMemoryBuilId:
+        memoryResults = db.GetMemoryResults(mlpackMemoryBuilId, mlpackMemoryId[0][0], methodId)
+
+        groupPanel["content"] = CreateMemoryContent(memoryResults)
+        if groupPanel["content"]:
+          groupPanel["nameID"] = chartHash + "_m"
+          groupPanel["name"] = "Parameters: " + (parameters if parameters else "None")
+          
+          memoryContent += resultsTemplate % groupPanel
+
+      # Create the method info content.
+      if not methodInfo:
+        methodInfo = CreateMethodInfo(db.GetMethodInfo(methodId), methodName)
+      
+    datasetTable = CreateDatasetTable(results)
+
+    # Calculate the percent for the progress bar.
+    if numDatasets != 0:
+      negative = (((datasetCount - bestLibCount) / float(datasetCount)) * 100.0)
+      reportValues["progressPositive"] = "{0:.2f}".format(100 - negative) + "%"
+      reportValues["progressNegative"] = "{0:.2f}".format(negative) + "%"
+    else:
+      reportValues["progressPositive"] = "0%"
+      reportValues["progressNegative"] = "100%"
+    
+    reportValues["numLibararies"] = libCount
+    reportValues["numDatasets"] = datasetCount
+    reportValues["totalTime"] =  "{0:.2f}".format(totalTimeCount)
+    reportValues["failure"] = failureCount
+    reportValues["timeouts"] = timeoutCount
+    reportValues["datasetTable"] = datasetTable
+    reportValues["memoryContent"] = memoryContent
+    reportValues["methodInfo"] = methodInfo
+    reportValues["resultsPanel"] = resultPanel
+    reportValues["methods"] = len(results)
+    reportValues["groupOne"] = collapseGroup
+    reportValues["groupTwo"] = collapseGroup + 1
+    reportValues["groupThree"] = collapseGroup + 2
 
-      reportValues["barChart"] = barChartName
-      reportValues["lineChart"] = lineChartName
-      reportValues["numLibararies"] = str(len(methodLibararies))
-      reportValues["numDatasets"] = numDatasets
-      reportValues["totalTime"] = totalTime
-      reportValues["failure"] = failure
-      reportValues["timeouts"] = timeouts
-      reportValues["timingHeader"] = header
-      reportValues["timingTable"] = timingTable
-      reportValues["datasetTable"] = datasetTable
-      reportValues["memoryContent"] = memoryContent
-      reportValues["methodInfo"] = methodInfo
+    methodsPage += methodTemplate % reportValues
 
-      methodsPage += methodTemplate % reportValues
+    # Increase collapse group id.
+    collapseGroup += 3
 
   return methodsPage
 
@@ -270,14 +344,14 @@
       content = content[:pos+len(pattern)]
 
       if i == 1:
-        content += '<li><a href="index.html">&laquo;</a></li>\n'
+        content += '<li class="previous"><a href="index.html">&larr; Newer</a></li>\n'
       else:
-        content += '<li><a href="index_' + str(i - 1) + '.html">&laquo;</a></li>\n'
+        content += '<li class="previous"><a href="index_' + str(i - 1) + '.html">&larr; Newer</a></li>\n'
       
       if i == maxId:
-        content += '<li><a href="#">&raquo;</a></li>'
+        content += '<li class="next disabled"><a href="#">Older &rarr;</a></li>'
       else:
-        content += '<li><a href="index_' + str(i + 1) + '.html">&raquo;</a></li>\n'
+        content += '<li class="next"><a href="index_' + str(i + 1) + '.html">Older &rarr;</a></li>\n'
 
       content += paginationTemplate
       fid.seek(0)
@@ -292,11 +366,11 @@
 def NewPagination():
   maxId, files = GetMaxIndex()
 
-  pagination = '<li><a href="#">&laquo;</a></li>\n'
+  pagination = '<li class="previous disabled"><a href="#">&larr; Newer</a></li>\n'
   if maxId > 0:
-    pagination += '<li><a href="index_1.html">&raquo;</a></li>\n'
+    pagination += '<li class="next"><a href="index_1.html">Older &rarr;</a></li>\n'
   else:    
-    pagination += '<li><a href="#">&raquo;</a></li>'
+    pagination += '<li class="next disabled"><a href="#">Older &rarr;</a></li>'
 
   return pagination
 

Modified: mlpack/conf/jenkins-conf/benchmark/util/database.py
==============================================================================
--- mlpack/conf/jenkins-conf/benchmark/util/database.py	(original)
+++ mlpack/conf/jenkins-conf/benchmark/util/database.py	Fri Aug 23 06:46:23 2013
@@ -5,7 +5,7 @@
   Class to handle the database.
 '''
 
-import sqlite3 as lite
+import sqlite3
 import datetime
 
 
@@ -20,7 +20,7 @@
   @param databasePath - Path to the database.
   '''
   def __init__(self, databasePath="benchmark.db"):
-    con = lite.connect(databasePath)
+    con = sqlite3.connect(databasePath)
     con.execute('pragma foreign_keys = on')
 
     self.con = con
@@ -308,7 +308,7 @@
   '''
   def GetAllMethods(self):
     with self.con:
-      self.cur.execute("SELECT * FROM methods")
+      self.cur.execute("SELECT * FROM methods ORDER BY name ASC")
       return self.cur.fetchall()
 
   '''
@@ -394,3 +394,15 @@
     with self.con:
       self.cur.execute("INSERT INTO method_info VALUES (NULL,?,?)", 
         (methodId, info))
+
+  '''
+  Get the parameters of a given method.
+
+  @param methodId - The id of the method.
+  @return The parameters of the method.
+  '''
+  def GetMethodParameters(self, methodId):
+    with self.con:
+      self.cur.execute("SELECT parameters FROM methods WHERE id=" + 
+          str(methodId))
+      return self.cur.fetchall()

Modified: mlpack/conf/jenkins-conf/benchmark/util/graph.py
==============================================================================
--- mlpack/conf/jenkins-conf/benchmark/util/graph.py	(original)
+++ mlpack/conf/jenkins-conf/benchmark/util/graph.py	Fri Aug 23 06:46:23 2013
@@ -48,15 +48,15 @@
   barWidth = 0.15
   opacity = 0.9
   fill = True
-  windowWidth = 10.4
-  windowHeight = 1.5
+  windowWidth = 8.1
+  windowHeight = 1.3
   gridLineWidth = 0.2
 
   # Create figure and set the color.
   matplotlib.rc('axes', facecolor=backgroundColor)
   matplotlib.rcParams.update({'font.size': 8})
   fig = plt.figure(figsize=(windowWidth, windowHeight), 
-      facecolor=backgroundColor, dpi=80)
+      facecolor=backgroundColor, dpi=100)
   plt.rc('lines', linewidth=lineWidth)
   ax = plt.subplot(1,1,1)
 
@@ -178,9 +178,11 @@
   # Set axis labels.
   plt.ylabel("time [s]", color="#6e6e6e")
 
+  
   # Save the bar chart.
+  fig.tight_layout()
   fig.savefig(fileName, bbox_extra_artists=(lgd,), bbox_inches='tight', 
-    facecolor=fig.get_facecolor(), edgecolor='none', format='png')
+    facecolor=fig.get_facecolor(), edgecolor='none', format='png', dpi=100)
   plt.close()
 
   # Count the time in which bestlib is the best.
@@ -199,7 +201,8 @@
 @param fileName - The filename of the line chart.
 @param backgroundColor - The color of the image background.
 '''
-def GenerateSingleLineChart(data, fileName, backgroundColor="#FFFFFF"):
+def GenerateSingleLineChart(data, fileName, backgroundColor="#FFFFFF",  
+    windowWidth=8.1, windowHeight=1.3):
   def NormalizeData(data):
     i = 0
     while len(data) != i:
@@ -215,16 +218,14 @@
   if not CheckFileAvailable(fileName):
     # Line chart settings.
     lineWidth = 1.5
-    opacity = 0.9
-    windowWidth = 10.3
-    windowHeight = 1.5
+    opacity = 0.9    
     gridLineWidth = 0.2
 
     # Create figure and set the color.
     matplotlib.rc('axes', facecolor=backgroundColor)
     matplotlib.rcParams.update({'font.size': 8})
     fig = plt.figure(figsize=(windowWidth, windowHeight), 
-        facecolor=backgroundColor, dpi=80)
+        facecolor=backgroundColor, dpi=100)
     plt.rc('lines', linewidth=lineWidth)
     ax = plt.subplot(1,1,1)
 
@@ -264,8 +265,9 @@
     plt.xlabel("benchmark build", color="#6e6e6e")
 
     # Save the line chart.
+    fig.tight_layout()
     fig.savefig(fileName, bbox_inches='tight', facecolor=fig.get_facecolor(), 
-        edgecolor='none')
+        edgecolor='none', dpi=100)
     plt.close()
 
 '''
@@ -279,15 +281,15 @@
   if not CheckFileAvailable(fileName):
     lineWidth = 1.5
     opacity = 0.9
-    windowWidth = 10.2
-    windowHeight = 1.5
+    windowWidth = 8.1
+    windowHeight = 1.3
     gridLineWidth = 0.2
 
     # Create figure and set the color.
     matplotlib.rc('axes', facecolor=backgroundColor)
     matplotlib.rcParams.update({'font.size': 8})
     fig = plt.figure(figsize=(windowWidth, windowHeight), 
-        facecolor=backgroundColor, dpi=80)
+        facecolor=backgroundColor, dpi=100)
     plt.rc('lines', linewidth=lineWidth)
     ax = plt.subplot(1,1,1)
 
@@ -339,6 +341,7 @@
       label.set_color("#6e6e6e")
          
     # Save the memory chart.
+    fig.tight_layout()
     fig.savefig(fileName, bbox_extra_artists=(lgd,), bbox_inches='tight', 
-      facecolor=fig.get_facecolor(), edgecolor='none', format='png')
+      facecolor=fig.get_facecolor(), edgecolor='none', format='png', dpi=100)
     plt.close()

Modified: mlpack/conf/jenkins-conf/benchmark/util/template.py
==============================================================================
--- mlpack/conf/jenkins-conf/benchmark/util/template.py	(original)
+++ mlpack/conf/jenkins-conf/benchmark/util/template.py	Fri Aug 23 06:46:23 2013
@@ -8,165 +8,120 @@
 pageTemplate = """
 <!doctype html>
 <html>
-    <head>
-        <meta charset="utf-8">
-        <meta name="description" content="">
-        <meta name="viewport" content="width=device-width, initial-scale=1">
-        <title></title>
-        <link rel="stylesheet" href="framework/bs3/css/bootstrap.min.css">
-        <link rel="stylesheet" href="framework/font/style.css">
-        <link rel="stylesheet" href="css/style.css">
-    </head>
-    <body>
-  <div class="container">
-    <div class="row">
-      <div class="col-lg-12">
-        <div class="text-center">
-          <h4>Benchmarks</h4>
-        </div>  
-
-        <!-- Container Start -->
-        <div class="container--graph collapse-group well">
-          <div class="container__topContent">
-            <div>
-              <img class="center--image" src="%(topLineChart)s" alt="">
-            </div>
-          </div>
-        </div>
-        %(methods)s
-        </div>
-      </div>
-    </div>
-    <div class="pagination--holder">
-      <ul class="pagination">
-        %(pagination)s
-      </ul>
-    </div>
-  </div>
-    <script src="framework/jquery/jquery.min.js"></script>
-    <script src="framework/bs3/js/bootstrap.min.js"></script>
-    <script src="js/slider.js"></script>
-    <!--[if lte IE 7]>
-      <script src="framework/font/lte-ie7.js"></script>
-    <![endif]-->      
-    </body>
+<head>
+<meta charset="utf-8">
+<meta name="description" content="">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>Benchmark Results</title>
+<link rel="stylesheet" href="framework/bs3/css/bootstrap.min.css">
+<link rel="stylesheet" href="framework/font/style.css">
+<link rel="stylesheet" href="css/style.css">
+</head>
+<body>
+<div class="container">
+<div class="row">
+<div class="col-lg-12">
+<div class="text-center"><h4>Benchmarks</h4></div>
+<div class="container--graph collapse-group well">
+<div class="container__topContent">
+<div><img class="center--image" src="%(topLineChart)s" alt="" style="max-width: 100%%;"></div>
+</div></div>%(methods)s</div></div></div>
+<div class="pagination--holder">
+<ul class="pagination">%(pagination)s</ul></div>
+<script src="framework/jquery/jquery.min.js"></script>
+<script src="framework/bs3/js/bootstrap.min.js"></script>
+<script src="js/slider.js"></script>
+<!--[if lte IE 7]>
+<script src="framework/font/lte-ie7.js"></script>
+<![endif]-->
+</body>
 </html>
 """
 
 paginationTemplate = """
-</ul>
-    </div>
-  </div>
-    <script src="framework/jquery/jquery.min.js"></script>
-    <script src="framework/bs3/js/bootstrap.min.js"></script>
-    <script src="js/slider.js"></script>
-    <!--[if lte IE 7]>
-      <script src="framework/font/lte-ie7.js"></script>
-    <![endif]-->
-    </body>
+</div>
+</div>
+<script src="framework/jquery/jquery.min.js"></script>
+<script src="framework/bs3/js/bootstrap.min.js"></script>
+<script src="js/slider.js"></script>
+<!--[if lte IE 7]>
+<script src="framework/font/lte-ie7.js"></script>
+<![endif]-->
+</body>
 </html>
 """
 
 methodTemplate = """
-        <!-- Container Start -->
-        <div class="container--graph collapse-group well">
-          <div class="container__topContent">
-            <p class="graph--name">%(methodName)s</p>
-            <div class="holder--progressBar">
-              <span class="progressBar__percentage">%(progressPositive)s</span>
-              <span class="progressBar__firstPart" style="width:%(progressPositive)s;"></span>
-              <span class="progressBar__secondPart" style="width:%(progressNegative)s;"></span>
-            </div>
-            <div class="btn-group">
-              <a href="#collapseOne" class="btn graphs btn-grey icon-bars js-button"></a>
-              <a href="#collapseTwo" class="btn info btn-grey icon-info js-button"></a>
-              <a href="#collapseThree" class="btn memory btn-grey icon-paragraph-right-2 js-button"></a>
-            </div>
-          </div>
-          <div id="collapseOne" class="container__bottomContent graph collapse">
-            <div>
-              <img class="panel" src="%(lineChart)s" alt="">
-            </div>
-            <div>
-              <img class="panel" src="%(barChart)s" alt="">
-            </div>
-            <div>
-              <div class="panel">
-                <table class="table table-striped">
-                  <thead>
-                    <tr>
-                      <th></th>
-                      %(timingHeader)s
-                    </tr>
-                  </thead>
-                  <tbody>
-                    %(timingTable)s
-                  </tbody>
-                </table>
-              </div>
-            </div>
-          </div>
-          <div id="collapseTwo" class="container__bottomContent infos collapse">
-            <div>
-              <div class="panel">
-                <table class="table table-striped">
-                  <thead>
-                    <tr>
-                      <th></th>
-                      <th>Size</th>   
-                      <th>Number of Instances</th>
-                      <th>Number of Attributes</th>
-                      <th>Instances</th>
-                      <th>Attribute Types</th>
-                    </tr>
-                  </thead>
-                  <tbody>
-                    %(datasetTable)s
-                  </tbody>
-                </table>
-                    %(methodInfo)s
-              </div>
-            </div>
-          </div>
-          <div id="collapseTwo" class="container__bottomContent memories collapse">
-            <div>
-            </div>%(memoryContent)s</div>
-          <div class="container__bottomContent">&#160;</div>
-           <div class="row">
-            <div class="col-lg-2">Libraries: %(numLibararies)s</div>
-            <div class="col-lg-2">Datasets: %(numDatasets)s</div>
-            <div class="col-lg-3">Total time: %(totalTime)s seconds</div>
-            <div class="col-lg-2">Script failure: %(failure)s</div>
-            <div class="col-lg-2">Timeouts failure: %(timeouts)s</div>
-          </div>
-          <div class="row">
-            <div class="col-lg-10">Parameters: %(parameters)s</div>
-          </div>
-        </div>
-
+<div class="container--graph collapse-group well">
+<div class="container__topContent">
+<p class="graph--name">%(methodName)s</p>
+<div class="holder--progressBar">
+<span class="progressBar__percentage">%(progressPositive)s</span>
+<span class="progressBar__firstPart" style="width:%(progressPositive)s;"></span>
+<span class="progressBar__secondPart" style="width:%(progressNegative)s;"></span>
+</div><div class="btn-group">
+<a href="#collapse%(groupOne)s" class="btn graphs btn-grey icon-bars js-button"></a>
+<a href="#collapse%(groupTwo)s" class="btn info btn-grey icon-info js-button"></a>
+<a href="#collapse%(groupThree)s" class="btn memory btn-grey icon-paragraph-right-2 js-button"></a>
+</div></div>
+<div id="collapse%(groupOne)s" class="container__bottomContent graph collapse">
+<div><div class="panel panel-default">
+<div class="panel-heading">Benchmark Results</div>
+<div class="panel-body">%(resultsPanel)s</div></div></div></div>
+<div id="collapse%(groupTwo)s" class="container__bottomContent infos collapse">
+<div>
+<div class="panel panel-default">
+<div class="panel-heading">Dataset Infos</div>
+<div class="panel-body">
+<table class="table table-striped">
+  <thead>
+    <tr><th></th><th>Size</th><th>Number of Instances</th><th>Number of Attributes</th><th>Instances</th><th>Attribute Types</th></tr>
+  </thead>
+  <tbody>%(datasetTable)s</tbody>
+</table>%(methodInfo)s</div></div></div></div>
+<div id="collapse%(groupThree)s" class="container__bottomContent memories collapse"><div>
+<div><div class="panel panel-default">
+<div class="panel-heading">Memory Results</div>
+<div class="panel-body">%(memoryContent)s</div></div></div></div></div>
+<div class="container__bottomContent">&#160;</div>
+<div class="row">
+<div class="col-lg-2">Libraries: %(numLibararies)s</div>
+<div class="col-lg-2">Datasets: %(numDatasets)s</div>
+<div class="col-lg-3">Total time: %(totalTime)s seconds</div>
+<div class="col-lg-2">Script failure: %(failure)s</div>
+<div class="col-lg-2">Timeouts failure: %(timeouts)s</div>
+<div class="col-lg-2">Parameters: %(methods)s</div></div></div>
 """
 
 memoryPanelTemplate = """
 <div class="panel">
-  <div><img class="center--image" src="%(memoryChart)s" alt=""></div>
-  <div class="accordion-group">
-  <div class="accordion-heading"><a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#%(nameID)s">%(name)s</a></div>
-    <div id="%(nameID)s" class="accordion-body collapse">
-      <div class="accordion-inner">
-      <pre>%(content)s</pre>
-      </div>
-    </div>
-  </div>
-</div>
+<div><img class="center--image" src="%(memoryChart)s" alt="" style="max-width: 100%%;"></div>
+<div class="accordion-group">
+<div class="accordion-heading"><a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#%(nameID)s">%(name)s</a></div>
+<div id="%(nameID)s" class="accordion-body collapse">
+<div class="accordion-inner"><pre>%(content)s</pre></div></div></div></div>
 """
 
 panelTemplate = """
 <div class="accordion-group">
 <div class="accordion-heading"><a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#%(nameID)s">%(name)s</a></div>
-  <div id="%(nameID)s" class="accordion-body collapse">
-    <div class="accordion-inner">
-    <pre>%(content)s</pre>
-    </div>
-  </div>
-</div>
+<div id="%(nameID)s" class="accordion-body collapse">
+<div class="accordion-inner"><pre>%(content)s</pre></div></div></div>
+"""
+
+resultsTemplate = """
+<div class="accordion-group">
+<div class="accordion-heading"><a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#%(nameID)s">%(name)s</a></div>
+<div id="%(nameID)s" class="accordion-body collapse"><div class="accordion-inner">%(content)s</div></div></div>
+"""
+
+resultsPanel = """
+<div class="panel-body">
+<div><img class="panel" src="%(lineChart)s" alt="" style="max-width: 100%%;"></div>
+<div><img class="panel" src="%(barChart)s" alt="" style="max-width: 100%%;"></div>
+<div><div class="panel">
+<table class="table table-striped">
+<thead><tr><th></th>%(timingHeader)s</tr></thead>
+<tbody>%(timingTable)s</tbody>
+</table></div></div></div>
 """
\ No newline at end of file



More information about the mlpack-svn mailing list