    <div xmlns:py="http://genshi.edgewall.org/">
    <?python from genshi.builder import tag ?>
    <?python from genshi.util import flatten ?>
      <table class="datatable test_verdicts">
        <tr>
            <th></th>
            <th>Value</th>
            <th>Maximum allowed</th>
            <th>Pass/Fail</th>
        </tr>
        <tr>
            <td class="vertical_header_th" py:if="not results.edge_analysis_done">Max accuracy error:</td>
            <td class="vertical_header_th" py:if="results.edge_analysis_done">Max center accuracy error:</td>
            <td>${"%s mm" % results.max_input_offset if results.max_input_offset is not None else 'N/A'}</td>
            <td>${"%s" % settings['maxposerror']} mm</td>
            <td class="${'' if results.max_input_offset is None else 'passed' if settings['maxposerror'] >= results.max_input_offset else 'failed'}" >
                 ${results.max_input_offset_verdict}
            </td>
        </tr>
        <tr py:if="results.edge_analysis_done">
            <td class="vertical_header_th">Max edge accuracy error:</td>
            <td>${"%s" % results.max_edge_error} mm</td>
            <td>${"%s" % settings['edgepositioningerror']} mm</td>
            <td class="${'passed' if settings['edgepositioningerror'] >= results.max_edge_error else 'failed'}" >
                 ${"Pass" if settings['edgepositioningerror'] >= results.max_edge_error else "Fail"}
            </td>
        </tr>
        <tr py:if="not results.edge_analysis_done">
            <td class="vertical_header_th">Missing inputs:</td>
            <td>${results.missing_inputs}/${results.total_points}</td>
            <td>${int(settings['maxmissing'])}</td>
            <td class="${'passed' if results.missing_inputs_verdict else 'failed'}">${"Pass" if results.missing_inputs_verdict else "Fail"}</td>
        </tr>
        <tr py:if="results.edge_analysis_done">
            <td class="vertical_header_th">Missing center inputs:</td>
            <td>${results.missing_inputs - results.missing_edge_inputs}/${results.total_points - results.edge_points}</td>
            <td>${int(settings['maxmissing'])}</td>
            <td class="${'passed' if results.missing_inputs_verdict else 'failed'}">${"Pass" if results.missing_inputs_verdict else "Fail"}</td>
        </tr>
        <tr py:if="results.edge_analysis_done">
            <td class="vertical_header_th">Missing edge inputs:</td>
            <td>${results.missing_edge_inputs}/${results.edge_points}</td>
            <td>${int(settings['maxedgemissing'])}</td>
            <td class="${'passed' if results.missing_edge_inputs_verdict else 'failed'}">${"Pass" if results.missing_edge_inputs_verdict else "Fail"}</td>
        </tr>
        <tr>
            <td class="vertical_header_th">Errors:</td>
            <td>${len(results.errors)}</td>
            <td>0</td>
            <td class="${'passed' if len(results.errors) == 0 else 'failed'}">${"Pass" if len(results.errors) == 0 else "Fail"}</td>
        </tr>
        <tr py:if="len(results.errors) > 0">
            <td class="vertical_header_th">Error descriptions:</td>
            <td colspan="2">${tag(flatten((e,tag.br) for e in sorted(results.errors)))}</td>
        </tr>
      </table>

      <div py:if="'noimages' not in kwargs" py:for="img in results.images" class="preview">
        <a href="${img[1]}">
            <img src="${img[0]}" alt="Preview image"/>
        </a>
      </div>

        <!--! Preview table -->
        <div class="dtable no_print">
	        <div class="dtable_row">
		        <div class="dtable_header narrow_cell">Toggle:</div>
		        <div class="dtable_header narrow_cell"><button class="all_lines_button">All</button></div>
                <div class="dtable_header narrow_cell"><button class="failed_lines_button">Failed</button></div>
		        <div class="dtable_header narrow_cell"><button class="passed_lines_button">Passed</button></div>
            </div>
        </div>

	  <div class="dtable subplot_table">
		<div class="dtable_row">
			<div class="dtable_header narrow_cell">Tap</div>
			<div class="dtable_header narrow_cell"># of Fingers</div>
			<div class="dtable_header narrow_cell">Errors</div>
			<div class="dtable_header">Maximum offset</div>
			<div class="dtable_header narrow_cell">Pass/Fail</div>
			<div class="dtable_header no_print">Detailed plot</div>
		</div>
		<div py:for="tap in results.taps" class="dtable_row plot_header">
			<div class="dtable_cell narrow_cell">${tap.id}</div>
			<div class="dtable_cell narrow_cell">${tap.num_fingers}</div>
			<div class="dtable_cell narrow_cell">${len(tap.errors)}</div>
			<div class="dtable_cell">${tap.max_input_offset}</div>
			<div class="dtable_cell narrow_cell ${'' if tap.max_input_offset is None else 'passed' if tap.verdict else 'failed'}">${tap.verdict_text}</div>
			<div class="dtable_cell no_print"><button type="button" class="show_plot">Show/Hide</button></div>
			<div class="plot" data-src="${tap.image}"/>
		</div>		
      </div>
    </div>
