Spaces:
Running
Running
Integrate verified DBP measurements into the leaderboard
Browse filesReplace float measurements with verified full-frame results, recompute available numeric aggregates, and use the shared score and rank rules. Retire the standalone measurement page and resources.
- README.md +6 -11
- app.js +12 -13
- data.json +2 -2
- dataset-catalog.json +0 -0
- export_results.py +0 -12
- index.html +5 -5
- manifest.json +173 -57
- style.css +0 -3
- ui-data.json +0 -0
README.md
CHANGED
|
@@ -22,10 +22,12 @@ From the source project checkout, regenerate the snapshots with:
|
|
| 22 |
```bash
|
| 23 |
python3 deploy/huggingface-compressionbenchmark/export_results.py
|
| 24 |
python3 deploy/huggingface-compressionbenchmark/apply_dataset_scope.py
|
|
|
|
|
|
|
| 25 |
python3 deploy/huggingface-compressionbenchmark/build_ui_payload.py
|
| 26 |
```
|
| 27 |
|
| 28 |
-
Publish `
|
| 29 |
|
| 30 |
Only measurements in the authoritative current project scope are exported. Missing metrics and missing coverage are displayed explicitly. Existing results do not imply independently verified round trips or uniform hardware environments unless those checks are recorded in the source.
|
| 31 |
|
|
@@ -37,19 +39,12 @@ Only measurements in the authoritative current project scope are exported. Missi
|
|
| 37 |
- Dataset-level method details, snapshot provenance, and metric definitions
|
| 38 |
- Searchable 169-dataset catalog grouped into six source categories, with explicit measurement availability and source links
|
| 39 |
- Overall composite score and average dataset Rank, with 36 valid positive one-decimal weight combinations
|
| 40 |
-
- Independent DBP native-float audit with complete frame sizes, encode/decode boundaries, bitwise verification, runtime and dtype filters, per-column JSON/CSV downloads, and source/build receipts
|
| 41 |
- Searchable Methods documentation and a 30-family operator catalog with 102 implementation-directory entries, references, I/O contracts, examples, and status
|
| 42 |
|
| 43 |
-
The dataset catalog and
|
| 44 |
|
| 45 |
The Overall score is `a × average rate + b × normalized average encode time + c × normalized average decode time`. Time normalization is linear min–max across all eligible rows in the selected runtime, scope and row mode; an equal-time range normalizes to zero. Search, family and coverage filters only hide rows and never change the reference. Average Rank averages per-dataset composite-score ranks with dataset-local time normalization and fractional ties. Missing results are omitted. Coverage and candidate counts can differ across datasets; method details expose dataset scores, ranks and candidate counts. CSV downloads include weights, normalization bounds and rank coverage. The default weights are `a=0.4, b=0.3, c=0.3`.
|
| 46 |
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
## DBP native-float remeasurement
|
| 50 |
-
|
| 51 |
-
[DBP full-wire audit](https://thulab-compressionbenchmark.static.hf.space/dbp-audit.html) publishes a separate frozen 169-dataset native-float campaign across C++, Java, and Python. Exact float32 and float64 widths are retained. Encode timing includes scale search, conversion, allocation, and the entire DBF1/DBF2 frame; decode timing includes header parsing, allocation, and inverse scaling or IEEE reconstruction. Frame sizes include the 10-byte dtype/mode/scale/count header per block. Validity sidecars are accounted for separately. Every valid value must match the original native IEEE bits after decoding, and all three implementations must produce the same complete-frame sequence digest per aggregate.
|
| 52 |
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
The source checkout includes `scripts/build_dbp_audit_payload.py`. Its complete-publication mode requires the frozen campaign binding, source receipts, normalized three-runtime result records, execution-artifact manifest, and environment receipt. It rejects incomplete scope, missing results, changed inputs or artifacts, unequal frame hashes, incorrect native widths, and unverified values. Its optional partial-output mode is restricted to a directory outside the deployment payload.
|
|
|
|
| 22 |
```bash
|
| 23 |
python3 deploy/huggingface-compressionbenchmark/export_results.py
|
| 24 |
python3 deploy/huggingface-compressionbenchmark/apply_dataset_scope.py
|
| 25 |
+
# Reapply verified measurement updates before packing the browser payload.
|
| 26 |
+
python3 scripts/integrate_dbp_leaderboard.py --measurements /path/to/frozen-measurements.json --expected-sha256 VERIFIED_SHA256 --receipt /path/to/integration-receipt.json
|
| 27 |
python3 deploy/huggingface-compressionbenchmark/build_ui_payload.py
|
| 28 |
```
|
| 29 |
|
| 30 |
+
Publish `README.md`, `index.html`, `style.css`, `app.js`, `ranking.js`, `reference-catalog.json`, `dataset-catalog.json`, `data.json`, `ui-data.json`, `manifest.json`, `export_results.py`, `apply_dataset_scope.py`, and `build_ui_payload.py` to the static Space. The manifest records the exact source-file identities and metric boundaries. The compact browser payload retains the full snapshot's measurements and SHA-256 identity. The reference and dataset catalogs are independent documentation payloads and do not create benchmark measurements.
|
| 31 |
|
| 32 |
Only measurements in the authoritative current project scope are exported. Missing metrics and missing coverage are displayed explicitly. Existing results do not imply independently verified round trips or uniform hardware environments unless those checks are recorded in the source.
|
| 33 |
|
|
|
|
| 39 |
- Dataset-level method details, snapshot provenance, and metric definitions
|
| 40 |
- Searchable 169-dataset catalog grouped into six source categories, with explicit measurement availability and source links
|
| 41 |
- Overall composite score and average dataset Rank, with 36 valid positive one-decimal weight combinations
|
|
|
|
| 42 |
- Searchable Methods documentation and a 30-family operator catalog with 102 implementation-directory entries, references, I/O contracts, examples, and status
|
| 43 |
|
| 44 |
+
The dataset catalog and measured benchmark scope are separate. All 169 catalog entries are searchable and selectable. Dataset coverage can differ by method and runtime; unavailable combinations show **No published measurements**, remain excluded from rankings, and are never converted to zero-valued results. The default family view selects the best measured compression-rate configuration independently for each measured dataset. Switch to **Exact configuration** to hold a configuration fixed. Runtime results stay separate.
|
| 45 |
|
| 46 |
The Overall score is `a × average rate + b × normalized average encode time + c × normalized average decode time`. Time normalization is linear min–max across all eligible rows in the selected runtime, scope and row mode; an equal-time range normalizes to zero. Search, family and coverage filters only hide rows and never change the reference. Average Rank averages per-dataset composite-score ranks with dataset-local time normalization and fractional ties. Missing results are omitted. Coverage and candidate counts can differ across datasets; method details expose dataset scores, ranks and candidate counts. CSV downloads include weights, normalization bounds and rank coverage. The default weights are `a=0.4, b=0.3, c=0.3`.
|
| 47 |
|
| 48 |
+
Encoding and decoding costs use each result's recorded point-count contract. Native-float measurements divide by valid native values; historical imported rows retain their source 8-byte-equivalent point definition. Timing comparisons should therefore stay within the same runtime and measurement contract.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
|
| 50 |
+
Source project: https://github.com/xjz17/web_compression
|
|
|
|
|
|
app.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
import {WEIGHT_TENTHS,parseWeights,addRankingMetrics} from './ranking.js?v=
|
| 2 |
const $ = (id) => document.getElementById(id);
|
| 3 |
const escape = (value) => String(value ?? '').replace(/[&<>"']/g, (c) => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
|
| 4 |
const number = (v) => v != null && Number.isFinite(Number(v)) ? Number(v) : null;
|
|
@@ -72,19 +72,19 @@ function renderTable() {
|
|
| 72 |
function refresh() {
|
| 73 |
if(!snapshot)return;
|
| 74 |
$('precision').disabled=$('dtype').value!=='float';
|
| 75 |
-
const selectedDataset=state().dataset,selectedHasMeasurements=selectedDataset==='all'||records.some(r=>r.dataset===selectedDataset);
|
| 76 |
if(!selectedHasMeasurements) {
|
| 77 |
-
$('results-note').textContent=
|
| 78 |
} else if(scopeKey()==='float'&&!records.some(r=>r.scope==='float')) {
|
| 79 |
// The exporter must publish an explicit all-float scope; never combine
|
| 80 |
// preaggregated fixed/non-fixed metrics and call it an all-float result.
|
| 81 |
-
$('results-note').textContent=
|
| 82 |
-
} else $('results-note').textContent=state().mode==='family'?'Each family uses its lowest-rate measured configuration per dataset. Configurations may differ across datasets; use Exact configuration for fixed parameters.':'Each row retains one exact configuration. Lower compression rates and lower ns/point are better. Coverage counts datasets, not identical column sets.';
|
| 83 |
currentRows=aggregate(filteredRecords(true));
|
| 84 |
const weights=parseWeights($('weights').value);
|
| 85 |
$('score-note').textContent=`Score = ${weights[0].toFixed(1)} × average rate + ${weights[1].toFixed(1)} × normalized encode + ${weights[2].toFixed(1)} × normalized decode. Lower is better. Time normalization: (time − minimum) / (maximum − minimum), across all measured rows in this runtime, scope and row mode. Search and visibility filters keep the reference fixed. Average Rank: mean of per-dataset score ranks with dataset-local time normalization; ties share their average position. Missing results are omitted. Dataset candidate counts differ, so compare rank coverage and inspect method details.`;
|
| 86 |
-
const s=state(),scope=scopeKey(),measuredCount=new Set(records.map(r=>r.dataset)).size,ds=s.dataset==='all'?`all ${measuredCount} measured datasets`:datasetDisplayName(s.dataset);
|
| 87 |
-
const names={overall:'
|
| 88 |
$('selection-summary').textContent=`${runtimeName(s.runtime)} · ${names[scope]||scope} · ${ds} · ${currentRows.length} methods`;
|
| 89 |
$('view-title').textContent=activeTab==='dataset'?`${s.dataset==='all'?'Dataset':datasetDisplayName(s.dataset)} leaderboard`:activeTab==='tradeoffs'?'Storage and execution trade-offs':'Overall leaderboard';
|
| 90 |
renderTable();
|
|
@@ -108,7 +108,7 @@ function showMethod(method,focus=false) {
|
|
| 108 |
if(!row){selectedMethod=null;detail.hidden=true;return;}selectedMethod=method;
|
| 109 |
const meta=methods.get(method)??methods.get(row.source[0].configuration), pipeline=meta?.operator_pipeline;
|
| 110 |
const source=row.source.slice().sort((a,b)=>a.dataset.localeCompare(b.dataset));
|
| 111 |
-
detail.innerHTML=`<div class="detail-head"><div><h2 id="detail-title">${escape(method)}</h2><p class="muted">${escape(row.family)} · ${escape(runtimeName(row.runtime))} · ${row.coverage} measured datasets</p></div><button id="close-detail" class="quiet-button">Close details</button></div><div class="detail-grid"><div><strong>${fmt(row.compression_rate,4)}</strong><span>average compression rate</span></div><div><strong>${fmt(row.compression_time,2)}</strong><span>encoding ns/point</span></div><div><strong>${fmt(row.decompression_time,2)}</strong><span>decoding ns/point</span></div><div><strong>${row.coverage} / ${row.totalDatasets}</strong><span>dataset coverage</span></div></div>${pipeline?`<p class="source-code">Interpretive operator mapping: ${escape(typeof pipeline==='string'?pipeline:JSON.stringify(pipeline))}</p>`:''}<p class="muted">Dataset metrics below come from the published result files.
|
| 112 |
detail.hidden=false;$('close-detail').addEventListener('click',()=>{detail.hidden=true;selectedMethod=null;});
|
| 113 |
if(focus){detail.scrollIntoView({block:'nearest',behavior:'auto'});detail.focus({preventScroll:true});}
|
| 114 |
}
|
|
@@ -177,7 +177,7 @@ function renderMethodDocumentation() {
|
|
| 177 |
const rows=families.map(family=>{const entry=catalogMethod(family)||{},names=configurations.get(family),note=publicNote(entry.notes),search=[family,entry.display_name,entry.description,note,...names,referenceSearchText(entry.reference_ids)].join(' ').toLowerCase();return {family,entry,names,note,search};}).filter(row=>!query||row.search.includes(query));
|
| 178 |
const described=families.filter(family=>catalogMethod(family)?.description).length;
|
| 179 |
status.textContent=`${rows.length} of ${families.length} measured method families shown · ${described} descriptions available`;
|
| 180 |
-
container.innerHTML=rows.length?rows.map(({family,entry,names,note})=>{const display=entry.display_name||family
|
| 181 |
}
|
| 182 |
function renderOperatorDocumentation() {
|
| 183 |
const container=$('operator-catalog'),status=$('operator-doc-status');
|
|
@@ -214,7 +214,7 @@ function renderOperatorImplementation(entry) {
|
|
| 214 |
function renderDocumentationViews() { renderMethodDocumentation();renderOperatorDocumentation(); }
|
| 215 |
async function loadReferenceCatalog() {
|
| 216 |
try {
|
| 217 |
-
const response=await fetch('./reference-catalog.json?v=
|
| 218 |
if(!response.ok)throw new Error(`Reference catalog request returned ${response.status}.`);
|
| 219 |
const catalog=await response.json();
|
| 220 |
if(!catalog||!Array.isArray(catalog.methods)||!Array.isArray(catalog.operators)||!Array.isArray(catalog.references))throw new Error('Reference catalog has an invalid schema.');
|
|
@@ -260,7 +260,7 @@ function renderDatasetEntry(entry,isMeasured) {
|
|
| 260 |
}
|
| 261 |
async function loadDatasetCatalog() {
|
| 262 |
try {
|
| 263 |
-
const response=await fetch('./dataset-catalog.json?v=
|
| 264 |
const catalog=await response.json();if(!catalog||!Array.isArray(catalog.datasets)||!catalog.summary)throw new Error('Dataset catalog has an invalid schema.');datasetCatalog=catalog;
|
| 265 |
} catch(error) { datasetCatalogError=error instanceof Error?error:new Error('Dataset catalog is unavailable.'); }
|
| 266 |
if(snapshot){populateDatasetControls();renderDatasetCatalog();renderAbout();}
|
|
@@ -269,7 +269,6 @@ function renderAbout() {
|
|
| 269 |
const b=snapshot.benchmark||{},s=snapshot.source||{},c=snapshot.coverage||{};
|
| 270 |
const notes=[b.scope_note,b.aggregation_note,b.selection_note,...(b.notes||[]),...(b.measurement_boundaries||[])].filter(Boolean);
|
| 271 |
$('methodology').innerHTML=notes.map(n=>`<p class="notice">${escape(n)}</p>`).join('');
|
| 272 |
-
for(const [method,audit] of Object.entries(b.method_audits||{}))$('methodology').innerHTML+=`<div class="notice"><strong>${escape(method)} measurement audit · ${escape(audit.audited_at)}</strong>${[audit.implementation,audit.timing,audit.storage,audit.roundtrip,audit.comparison].map(n=>`<p>${escape(n)}</p>`).join('')}</div>`;
|
| 273 |
const definitions=b.metric_definitions||{};if(Object.keys(definitions).length)$('methodology').innerHTML+=`<dl class="definitions">${Object.entries(definitions).map(([k,v])=>`<div><dt>${escape(k.replaceAll('_',' '))}</dt><dd>${escape(typeof v==='string'?v:JSON.stringify(v))}</dd></div>`).join('')}</dl>`;
|
| 274 |
const exclusions=c.exclusions||c.excluded_datasets||snapshot.exclusions||[];
|
| 275 |
const catalogCount=number(datasetCatalog?.summary?.dataset_count??c.catalog_dataset_count)??datasetEntries().length,measuredCount=number(datasetCatalog?.summary?.published_result_dataset_count??datasetCatalog?.summary?.published_measurement_dataset_count??datasetCatalog?.summary?.measured_dataset_count??c.measured_dataset_count)??new Set(records.map(r=>r.dataset)).size;
|
|
@@ -309,5 +308,5 @@ function setupTheme() {
|
|
| 309 |
setupTheme();
|
| 310 |
void loadReferenceCatalog();
|
| 311 |
void loadDatasetCatalog();
|
| 312 |
-
try { const response=await fetch('./ui-data.json?v=20261009-dbp-
|
| 313 |
catch(e){$('load-error').hidden=false;$('load-error').textContent=`The result snapshot could not be loaded. Please reload the page or download the JSON from the repository. ${e.message}`;$('snapshot').textContent='Snapshot unavailable';$('leaderboard').querySelector('tbody').innerHTML='<tr><td class="empty-cell">Results unavailable.</td></tr>';}
|
|
|
|
| 1 |
+
import {WEIGHT_TENTHS,parseWeights,addRankingMetrics} from './ranking.js?v=20261009-dbp-integrated-v1';
|
| 2 |
const $ = (id) => document.getElementById(id);
|
| 3 |
const escape = (value) => String(value ?? '').replace(/[&<>"']/g, (c) => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
|
| 4 |
const number = (v) => v != null && Number.isFinite(Number(v)) ? Number(v) : null;
|
|
|
|
| 72 |
function refresh() {
|
| 73 |
if(!snapshot)return;
|
| 74 |
$('precision').disabled=$('dtype').value!=='float';
|
| 75 |
+
const selectedDataset=state().dataset,selectedHasMeasurements=selectedDataset==='all'||records.some(r=>r.dataset===selectedDataset),columnCoverageNote='Metrics aggregate the numeric columns measured for each method; column coverage may differ.';
|
| 76 |
if(!selectedHasMeasurements) {
|
| 77 |
+
$('results-note').textContent=`No published measurements are available for this catalog dataset. It is excluded from rankings rather than treated as zero. ${columnCoverageNote}`;
|
| 78 |
} else if(scopeKey()==='float'&&!records.some(r=>r.scope==='float')) {
|
| 79 |
// The exporter must publish an explicit all-float scope; never combine
|
| 80 |
// preaggregated fixed/non-fixed metrics and call it an all-float result.
|
| 81 |
+
$('results-note').textContent=`All-float measurements are not available in this snapshot. Select a precision category. ${columnCoverageNote}`;
|
| 82 |
+
} else $('results-note').textContent=`${state().mode==='family'?'Each family uses its lowest-rate measured configuration per dataset. Configurations may differ across datasets; use Exact configuration for fixed parameters.':'Each row retains one exact configuration. Lower compression rates and lower ns/point are better. Coverage counts datasets, not identical column sets.'} ${columnCoverageNote}`;
|
| 83 |
currentRows=aggregate(filteredRecords(true));
|
| 84 |
const weights=parseWeights($('weights').value);
|
| 85 |
$('score-note').textContent=`Score = ${weights[0].toFixed(1)} × average rate + ${weights[1].toFixed(1)} × normalized encode + ${weights[2].toFixed(1)} × normalized decode. Lower is better. Time normalization: (time − minimum) / (maximum − minimum), across all measured rows in this runtime, scope and row mode. Search and visibility filters keep the reference fixed. Average Rank: mean of per-dataset score ranks with dataset-local time normalization; ties share their average position. Missing results are omitted. Dataset candidate counts differ, so compare rank coverage and inspect method details.`;
|
| 86 |
+
const s=state(),scope=scopeKey(),measuredCount=new Set(records.filter(r=>r.runtime===s.runtime&&r.scope===scope).map(r=>r.dataset)).size,ds=s.dataset==='all'?`all ${measuredCount} measured datasets`:datasetDisplayName(s.dataset);
|
| 87 |
+
const names={overall:'available numeric measurements',integer:'integer columns',float:'floating-point columns',fixed_float:'fixed-precision float columns',nonfixed_float:'non-fixed-precision float columns'};
|
| 88 |
$('selection-summary').textContent=`${runtimeName(s.runtime)} · ${names[scope]||scope} · ${ds} · ${currentRows.length} methods`;
|
| 89 |
$('view-title').textContent=activeTab==='dataset'?`${s.dataset==='all'?'Dataset':datasetDisplayName(s.dataset)} leaderboard`:activeTab==='tradeoffs'?'Storage and execution trade-offs':'Overall leaderboard';
|
| 90 |
renderTable();
|
|
|
|
| 108 |
if(!row){selectedMethod=null;detail.hidden=true;return;}selectedMethod=method;
|
| 109 |
const meta=methods.get(method)??methods.get(row.source[0].configuration), pipeline=meta?.operator_pipeline;
|
| 110 |
const source=row.source.slice().sort((a,b)=>a.dataset.localeCompare(b.dataset));
|
| 111 |
+
detail.innerHTML=`<div class="detail-head"><div><h2 id="detail-title">${escape(method)}</h2><p class="muted">${escape(row.family)} · ${escape(runtimeName(row.runtime))} · ${row.coverage} measured datasets</p></div><button id="close-detail" class="quiet-button">Close details</button></div><div class="detail-grid"><div><strong>${fmt(row.compression_rate,4)}</strong><span>average compression rate</span></div><div><strong>${fmt(row.compression_time,2)}</strong><span>encoding ns/point</span></div><div><strong>${fmt(row.decompression_time,2)}</strong><span>decoding ns/point</span></div><div><strong>${row.coverage} / ${row.totalDatasets}</strong><span>dataset coverage</span></div></div>${pipeline?`<p class="source-code">Interpretive operator mapping: ${escape(typeof pipeline==='string'?pipeline:JSON.stringify(pipeline))}</p>`:''}<p class="muted">Dataset metrics below come from the published result files. Measurement boundaries, source hashes, and available verification evidence are recorded in the manifest.</p><div class="detail-table"><table><thead><tr><th>Dataset</th><th>Configuration</th><th>Rate ↓</th><th>Encode ns/point ↓</th><th>Decode ns/point ↓</th><th>Original bytes</th><th>Compressed bytes</th><th>Dataset score ↓</th><th>Dataset Rank ↓</th><th>Rank candidates</th></tr></thead><tbody>${source.map(r=>`<tr><td>${escape(r.dataset)}</td><td>${escape(r.configuration)}</td><td class="numeric">${fmt(r.compression_rate,4)}</td><td class="numeric">${fmt(r.compression_time,2)}</td><td class="numeric">${fmt(r.decompression_time,2)}</td><td class="numeric">${fmt(r.original_bytes,0)}</td><td class="numeric">${fmt(r.compressed_bytes,0)}</td><td class="numeric">${fmt(r.dataset_score,4)}</td><td class="numeric">${fmt(r.dataset_rank,2)}</td><td class="numeric">${fmt(r.dataset_candidate_count,0)}</td></tr>`).join('')}</tbody></table></div>`;
|
| 112 |
detail.hidden=false;$('close-detail').addEventListener('click',()=>{detail.hidden=true;selectedMethod=null;});
|
| 113 |
if(focus){detail.scrollIntoView({block:'nearest',behavior:'auto'});detail.focus({preventScroll:true});}
|
| 114 |
}
|
|
|
|
| 177 |
const rows=families.map(family=>{const entry=catalogMethod(family)||{},names=configurations.get(family),note=publicNote(entry.notes),search=[family,entry.display_name,entry.description,note,...names,referenceSearchText(entry.reference_ids)].join(' ').toLowerCase();return {family,entry,names,note,search};}).filter(row=>!query||row.search.includes(query));
|
| 178 |
const described=families.filter(family=>catalogMethod(family)?.description).length;
|
| 179 |
status.textContent=`${rows.length} of ${families.length} measured method families shown · ${described} descriptions available`;
|
| 180 |
+
container.innerHTML=rows.length?rows.map(({family,entry,names,note})=>{const display=entry.display_name||family;return `<article class="documentation-card"><div class="documentation-card-head"><div><h3>${escape(display)}</h3>${display!==family?`<span class="documentation-code">${escape(family)}</span>`:''}</div><span class="documentation-count">${names.length} configuration${names.length===1?'':'s'}</span></div><p class="documentation-description">${escape(entry.description||'A reference description is not available for this measured family.')}</p>${note?`<p class="documentation-note">${escape(note)}</p>`:''}${renderReferences(entry.reference_ids)}<details class="configuration-details"><summary>Published configurations (${names.length})</summary><ul>${names.map(name=>`<li>${escape(name)}</li>`).join('')}</ul></details></article>`;}).join(''):'<p class="documentation-empty">No method documentation matches this search.</p>';
|
| 181 |
}
|
| 182 |
function renderOperatorDocumentation() {
|
| 183 |
const container=$('operator-catalog'),status=$('operator-doc-status');
|
|
|
|
| 214 |
function renderDocumentationViews() { renderMethodDocumentation();renderOperatorDocumentation(); }
|
| 215 |
async function loadReferenceCatalog() {
|
| 216 |
try {
|
| 217 |
+
const response=await fetch('./reference-catalog.json?v=20261009-dbp-integrated-v1',{cache:'no-cache'});
|
| 218 |
if(!response.ok)throw new Error(`Reference catalog request returned ${response.status}.`);
|
| 219 |
const catalog=await response.json();
|
| 220 |
if(!catalog||!Array.isArray(catalog.methods)||!Array.isArray(catalog.operators)||!Array.isArray(catalog.references))throw new Error('Reference catalog has an invalid schema.');
|
|
|
|
| 260 |
}
|
| 261 |
async function loadDatasetCatalog() {
|
| 262 |
try {
|
| 263 |
+
const response=await fetch('./dataset-catalog.json?v=20261009-dbp-integrated-v1',{cache:'no-cache'});if(!response.ok)throw new Error(`Dataset catalog request returned ${response.status}.`);
|
| 264 |
const catalog=await response.json();if(!catalog||!Array.isArray(catalog.datasets)||!catalog.summary)throw new Error('Dataset catalog has an invalid schema.');datasetCatalog=catalog;
|
| 265 |
} catch(error) { datasetCatalogError=error instanceof Error?error:new Error('Dataset catalog is unavailable.'); }
|
| 266 |
if(snapshot){populateDatasetControls();renderDatasetCatalog();renderAbout();}
|
|
|
|
| 269 |
const b=snapshot.benchmark||{},s=snapshot.source||{},c=snapshot.coverage||{};
|
| 270 |
const notes=[b.scope_note,b.aggregation_note,b.selection_note,...(b.notes||[]),...(b.measurement_boundaries||[])].filter(Boolean);
|
| 271 |
$('methodology').innerHTML=notes.map(n=>`<p class="notice">${escape(n)}</p>`).join('');
|
|
|
|
| 272 |
const definitions=b.metric_definitions||{};if(Object.keys(definitions).length)$('methodology').innerHTML+=`<dl class="definitions">${Object.entries(definitions).map(([k,v])=>`<div><dt>${escape(k.replaceAll('_',' '))}</dt><dd>${escape(typeof v==='string'?v:JSON.stringify(v))}</dd></div>`).join('')}</dl>`;
|
| 273 |
const exclusions=c.exclusions||c.excluded_datasets||snapshot.exclusions||[];
|
| 274 |
const catalogCount=number(datasetCatalog?.summary?.dataset_count??c.catalog_dataset_count)??datasetEntries().length,measuredCount=number(datasetCatalog?.summary?.published_result_dataset_count??datasetCatalog?.summary?.published_measurement_dataset_count??datasetCatalog?.summary?.measured_dataset_count??c.measured_dataset_count)??new Set(records.map(r=>r.dataset)).size;
|
|
|
|
| 308 |
setupTheme();
|
| 309 |
void loadReferenceCatalog();
|
| 310 |
void loadDatasetCatalog();
|
| 311 |
+
try { const response=await fetch('./ui-data.json?v=20261009-dbp-integrated-v1',{cache:'no-cache'});if(!response.ok)throw new Error(`Snapshot request returned ${response.status}`);snapshot=await response.json();init(); }
|
| 312 |
catch(e){$('load-error').hidden=false;$('load-error').textContent=`The result snapshot could not be loaded. Please reload the page or download the JSON from the repository. ${e.message}`;$('snapshot').textContent='Snapshot unavailable';$('leaderboard').querySelector('tbody').innerHTML='<tr><td class="empty-cell">Results unavailable.</td></tr>';}
|
data.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:605712c81fe1189cbfb804e52a680c17c55570ac4dfaa296cdd7e2c747ece9c9
|
| 3 |
+
size 35484449
|
dataset-catalog.json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
export_results.py
CHANGED
|
@@ -468,18 +468,6 @@ def main() -> int:
|
|
| 468 |
"scope_note": "Current result rows cover numeric int/float report evidence for the retained 19 public datasets. They reflect the columns present in each report; they do not assert full-column coverage beyond those files.",
|
| 469 |
"aggregation_note": "Average metrics are arithmetic means over available per-dataset measurements. Overall compression rate and weighted times use summed measured bytes, points, and nanoseconds only.",
|
| 470 |
"selection_note": "Configuration views retain measured configurations passing the project's method-name filter. This does not certify every result as lossless. Family views choose the lowest-rate configuration independently for each dataset, scope, and runtime.",
|
| 471 |
-
"method_audits": {
|
| 472 |
-
"DBP": {
|
| 473 |
-
"audited_at": "2026-10-09",
|
| 474 |
-
"label": "Historical kernel measurements",
|
| 475 |
-
"full_wire_audit_url": "./dbp-audit.html",
|
| 476 |
-
"implementation": "The historical project DBP snapshot encodes deltas with ZigZag and ULEB128. The separate DBF1/DBF2 native-float remeasurement adds a complete reconstruction header and a bit-exact scale-or-IEEE mode.",
|
| 477 |
-
"timing": "Historical leaderboard float preparation/scaling is outside the reported codec timer. The separate native-float audit measures scale selection, conversion, complete frame encoding, parsing and inverse reconstruction within their respective timers.",
|
| 478 |
-
"storage": "Historical leaderboard float payload sizes omit reconstruction scale/mode metadata. The separate native-float audit counts the entire DBF1/DBF2 frame, including its 10-byte header per block; validity sidecars are recorded separately.",
|
| 479 |
-
"roundtrip": "Historical integer-payload checks do not certify those leaderboard float rows. The new native-float audit verifies every valid value against its original float32 or float64 bit pattern and compares complete frame hashes across C++, Java and Python.",
|
| 480 |
-
"comparison": "Historical and newly frozen typed inputs have different column and dtype scopes. The native-float audit is published separately and does not enter the historical Overall scores or Average Rank.",
|
| 481 |
-
}
|
| 482 |
-
},
|
| 483 |
"notes": [
|
| 484 |
"Missing combinations are unavailable rather than zero.",
|
| 485 |
"Hardware identity and round-trip verification are not reported by these source CSVs.",
|
|
|
|
| 468 |
"scope_note": "Current result rows cover numeric int/float report evidence for the retained 19 public datasets. They reflect the columns present in each report; they do not assert full-column coverage beyond those files.",
|
| 469 |
"aggregation_note": "Average metrics are arithmetic means over available per-dataset measurements. Overall compression rate and weighted times use summed measured bytes, points, and nanoseconds only.",
|
| 470 |
"selection_note": "Configuration views retain measured configurations passing the project's method-name filter. This does not certify every result as lossless. Family views choose the lowest-rate configuration independently for each dataset, scope, and runtime.",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 471 |
"notes": [
|
| 472 |
"Missing combinations are unavailable rather than zero.",
|
| 473 |
"Hardware identity and round-trip verification are not reported by these source CSVs.",
|
index.html
CHANGED
|
@@ -6,8 +6,8 @@
|
|
| 6 |
<meta name="description" content="THULab time-series compression benchmark: measured compression rates, encoding and decoding costs, and dataset coverage.">
|
| 7 |
<meta name="color-scheme" content="light dark">
|
| 8 |
<title>THULab | Time Series Compression Benchmark</title>
|
| 9 |
-
<link rel="stylesheet" href="style.css?v=20261009-
|
| 10 |
-
<script src="app.js?v=20261009-
|
| 11 |
</head>
|
| 12 |
<body>
|
| 13 |
<a class="skip-link" href="#content">Skip to results</a>
|
|
@@ -51,7 +51,7 @@
|
|
| 51 |
</section>
|
| 52 |
<div class="filters" id="filters">
|
| 53 |
<label>Runtime<select id="runtime"></select></label>
|
| 54 |
-
<label>Data type<select id="dtype"><option value="overall">
|
| 55 |
<label>Float precision<select id="precision"><option value="all">All precision</option><option value="fixed">Fixed precision</option><option value="non_fixed">Non-fixed precision</option></select></label>
|
| 56 |
<label>Dataset<select id="dataset"><option value="all">All datasets</option></select></label>
|
| 57 |
<label>Method rows<select id="row-mode"><option value="family">Best measured per family</option><option value="configuration">Exact configuration</option></select></label>
|
|
@@ -62,7 +62,7 @@
|
|
| 62 |
<div><h2 id="view-title">Overall leaderboard</h2><p id="selection-summary" class="muted" aria-live="polite">Reading published results…</p></div>
|
| 63 |
<div class="toolbar-actions"><button id="reset" class="quiet-button">Reset filters</button><button id="download" class="primary-button" disabled>Download CSV</button></div>
|
| 64 |
</div>
|
| 65 |
-
<div class="results-note" id="results-note">Compression rate = compressed bytes / original bytes. Lower rates and lower ns/point are better.</div>
|
| 66 |
<div id="score-controls" class="score-controls">
|
| 67 |
<label>Score weights · a: rate / b: encode / c: decode<select id="weights" aria-label="Score weights a b c"></select></label>
|
| 68 |
<p id="score-note" class="muted" aria-live="polite">Positive weights in steps of 0.1, summing to 1.0.</p>
|
|
@@ -108,7 +108,7 @@
|
|
| 108 |
<dl class="definitions">
|
| 109 |
<div><dt>Average compression rate ↓</dt><dd>Arithmetic mean of the per-dataset compression rates in the selected scope.</dd></div>
|
| 110 |
<div><dt>Overall compression rate ↓</dt><dd>Total compressed bytes divided by total original bytes over the selected measured records.</dd></div>
|
| 111 |
-
<div><dt>Encoding / decoding cost ↓</dt><dd>Nanoseconds per
|
| 112 |
<div><dt>Coverage</dt><dd>Datasets with usable measurements for a method out of the datasets in the selected scope. Missing results are never filled with zero.</dd></div>
|
| 113 |
<div><dt>Composite score ↓</dt><dd>a × average compression rate + b × normalized average encoding time + c × normalized average decoding time. Each time uses min–max over all measured rows in the selected runtime, scope and row mode, before search, family and coverage filters. If all times are equal, their normalized value is zero. All measured inputs must have usable timing metrics.</dd></div>
|
| 114 |
<div><dt>Average Rank ↓</dt><dd>Compute the same weighted score within each dataset, normalizing times within that dataset. Rank lower scores first; ties share their average position. Then take the arithmetic mean of the method's available dataset ranks. Weights are strictly positive tenths summing to 1.0. Missing measurements do not receive ranks.</dd></div>
|
|
|
|
| 6 |
<meta name="description" content="THULab time-series compression benchmark: measured compression rates, encoding and decoding costs, and dataset coverage.">
|
| 7 |
<meta name="color-scheme" content="light dark">
|
| 8 |
<title>THULab | Time Series Compression Benchmark</title>
|
| 9 |
+
<link rel="stylesheet" href="style.css?v=20261009-dbp-integrated-v1">
|
| 10 |
+
<script src="app.js?v=20261009-dbp-integrated-v1" type="module"></script>
|
| 11 |
</head>
|
| 12 |
<body>
|
| 13 |
<a class="skip-link" href="#content">Skip to results</a>
|
|
|
|
| 51 |
</section>
|
| 52 |
<div class="filters" id="filters">
|
| 53 |
<label>Runtime<select id="runtime"></select></label>
|
| 54 |
+
<label>Data type<select id="dtype"><option value="overall">Available numeric</option><option value="int">Integer</option><option value="float">Floating point</option></select></label>
|
| 55 |
<label>Float precision<select id="precision"><option value="all">All precision</option><option value="fixed">Fixed precision</option><option value="non_fixed">Non-fixed precision</option></select></label>
|
| 56 |
<label>Dataset<select id="dataset"><option value="all">All datasets</option></select></label>
|
| 57 |
<label>Method rows<select id="row-mode"><option value="family">Best measured per family</option><option value="configuration">Exact configuration</option></select></label>
|
|
|
|
| 62 |
<div><h2 id="view-title">Overall leaderboard</h2><p id="selection-summary" class="muted" aria-live="polite">Reading published results…</p></div>
|
| 63 |
<div class="toolbar-actions"><button id="reset" class="quiet-button">Reset filters</button><button id="download" class="primary-button" disabled>Download CSV</button></div>
|
| 64 |
</div>
|
| 65 |
+
<div class="results-note" id="results-note">Compression rate = compressed bytes / original bytes. Lower rates and lower ns/point are better. Metrics aggregate the numeric columns measured for each method; column coverage may differ.</div>
|
| 66 |
<div id="score-controls" class="score-controls">
|
| 67 |
<label>Score weights · a: rate / b: encode / c: decode<select id="weights" aria-label="Score weights a b c"></select></label>
|
| 68 |
<p id="score-note" class="muted" aria-live="polite">Positive weights in steps of 0.1, summing to 1.0.</p>
|
|
|
|
| 108 |
<dl class="definitions">
|
| 109 |
<div><dt>Average compression rate ↓</dt><dd>Arithmetic mean of the per-dataset compression rates in the selected scope.</dd></div>
|
| 110 |
<div><dt>Overall compression rate ↓</dt><dd>Total compressed bytes divided by total original bytes over the selected measured records.</dd></div>
|
| 111 |
+
<div><dt>Encoding / decoding cost ↓</dt><dd>Nanoseconds per point under each result's recorded measurement contract. Native-float measurements use valid native values; historical imported rows retain their source 8-byte-equivalent point definition. Compare timings within the same runtime and measurement contract.</dd></div>
|
| 112 |
<div><dt>Coverage</dt><dd>Datasets with usable measurements for a method out of the datasets in the selected scope. Missing results are never filled with zero.</dd></div>
|
| 113 |
<div><dt>Composite score ↓</dt><dd>a × average compression rate + b × normalized average encoding time + c × normalized average decoding time. Each time uses min–max over all measured rows in the selected runtime, scope and row mode, before search, family and coverage filters. If all times are equal, their normalized value is zero. All measured inputs must have usable timing metrics.</dd></div>
|
| 114 |
<div><dt>Average Rank ↓</dt><dd>Compute the same weighted score within each dataset, normalizing times within that dataset. Rank lower scores first; ties share their average position. Then take the arithmetic mean of the method's available dataset ranks. Weights are strictly positive tenths summing to 1.0. Missing measurements do not receive ranks.</dd></div>
|
manifest.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
"catalog_dataset_count": 169,
|
| 4 |
"configuration_aggregate_row_count": 4653,
|
| 5 |
"dataset_count": 169,
|
| 6 |
-
"dataset_result_row_count":
|
| 7 |
"excluded_datasets": [
|
| 8 |
"Arade",
|
| 9 |
"poisson_timestamps",
|
|
@@ -11,7 +11,7 @@
|
|
| 11 |
"supply_chain_location"
|
| 12 |
],
|
| 13 |
"family_best_aggregate_row_count": 1383,
|
| 14 |
-
"measured_dataset_count":
|
| 15 |
"method_configuration_count": 311,
|
| 16 |
"method_family_count": 93,
|
| 17 |
"missing_measurement_policy": "Missing report and dataset/scope/runtime/configuration combinations are omitted; the UI must display them as unavailable, never as zero.",
|
|
@@ -28,60 +28,8 @@
|
|
| 28 |
"source_report_file_count": 108
|
| 29 |
},
|
| 30 |
"data_file": "data.json",
|
| 31 |
-
"data_sha256": "
|
| 32 |
-
"dataset_catalog_sha256": "
|
| 33 |
-
"dbp_native_float_audit": {
|
| 34 |
-
"files": {
|
| 35 |
-
"dbp-audit-build-receipt.json": {
|
| 36 |
-
"bytes": 5292,
|
| 37 |
-
"sha256": "211958f34d280daea3ab6dde8c56ca5b4207cc78ad767a22a37910dc3b5cb892"
|
| 38 |
-
},
|
| 39 |
-
"dbp-audit-columns.csv": {
|
| 40 |
-
"bytes": 11753491,
|
| 41 |
-
"sha256": "ed617bab971dfaa2e398aca2ad9fb73ee5b0d5b8c614667d3c95fa3e02247d7f"
|
| 42 |
-
},
|
| 43 |
-
"dbp-audit.html": {
|
| 44 |
-
"bytes": 7245,
|
| 45 |
-
"sha256": "aca2a426b2a4fa56eb59ca2bfbc164ce9096ff13deb2bd5479e91c16a407b059"
|
| 46 |
-
},
|
| 47 |
-
"dbp-audit.js": {
|
| 48 |
-
"bytes": 25037,
|
| 49 |
-
"sha256": "9ae0d2a00500b1be7433981527618c0c31702b075d51387cf816fb3166693338"
|
| 50 |
-
},
|
| 51 |
-
"dbp-audit.json": {
|
| 52 |
-
"bytes": 24243804,
|
| 53 |
-
"sha256": "febe0d4494cf3778bb3e386ac8674f24406e29d1d7d9b47bd834b332b0e201fb"
|
| 54 |
-
},
|
| 55 |
-
"dbp-audit.schema.json": {
|
| 56 |
-
"bytes": 15210,
|
| 57 |
-
"sha256": "e3409dbf44c07b9edd6e855980ad56e70a526b2940df0a0e20e4f7c14415d10d"
|
| 58 |
-
}
|
| 59 |
-
},
|
| 60 |
-
"scope": "separate frozen typed data; excluded from historical Overall scores and Average Rank",
|
| 61 |
-
"source_scope_sha256": "0fabc01f25d62ddb49585b3208103543b16c6e50340195360a0516411fa148b4",
|
| 62 |
-
"summary": {
|
| 63 |
-
"all_null_nonempty_aggregate_count": 92,
|
| 64 |
-
"dataset_receipt_count": 169,
|
| 65 |
-
"datasets_with_float_schema_count": 163,
|
| 66 |
-
"float32_aggregate_count": 2332,
|
| 67 |
-
"float32_native_values_bytes": 2111592024,
|
| 68 |
-
"float64_aggregate_count": 1858,
|
| 69 |
-
"float64_native_values_bytes": 7636696656,
|
| 70 |
-
"header_bytes": 54052230,
|
| 71 |
-
"logical_blocks": 5405223,
|
| 72 |
-
"measured_dataset_count": 162,
|
| 73 |
-
"n_a_aggregate_count": 94,
|
| 74 |
-
"n_a_dataset_count": 7,
|
| 75 |
-
"native_values_bytes": 9748288680,
|
| 76 |
-
"no_float_schema_dataset_count": 6,
|
| 77 |
-
"nonempty_aggregate_count": 4096,
|
| 78 |
-
"schema_aggregate_count": 4190,
|
| 79 |
-
"valid_value_count": 1482485088,
|
| 80 |
-
"validity_bytes": 208277366,
|
| 81 |
-
"zero_row_aggregate_count": 2
|
| 82 |
-
},
|
| 83 |
-
"timing_context": "shared-server single-pass diagnostic"
|
| 84 |
-
},
|
| 85 |
"excluded_content": [
|
| 86 |
"raw datasets",
|
| 87 |
"user uploads",
|
|
@@ -90,6 +38,174 @@
|
|
| 90 |
"binaries and model artifacts",
|
| 91 |
"external or vendored benchmark results"
|
| 92 |
],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
"result_csv_files": [
|
| 94 |
{
|
| 95 |
"path": "backend/dataset/Air-Quality/Air-Quality_float_cpp_compression_result.csv",
|
|
@@ -643,7 +759,7 @@
|
|
| 643 |
{
|
| 644 |
"path": "dataset-catalog.json",
|
| 645 |
"role": "reviewed_dataset_catalog",
|
| 646 |
-
"sha256": "
|
| 647 |
"status": "reviewed_public_catalog"
|
| 648 |
}
|
| 649 |
]
|
|
|
|
| 3 |
"catalog_dataset_count": 169,
|
| 4 |
"configuration_aggregate_row_count": 4653,
|
| 5 |
"dataset_count": 169,
|
| 6 |
+
"dataset_result_row_count": 65219,
|
| 7 |
"excluded_datasets": [
|
| 8 |
"Arade",
|
| 9 |
"poisson_timestamps",
|
|
|
|
| 11 |
"supply_chain_location"
|
| 12 |
],
|
| 13 |
"family_best_aggregate_row_count": 1383,
|
| 14 |
+
"measured_dataset_count": 164,
|
| 15 |
"method_configuration_count": 311,
|
| 16 |
"method_family_count": 93,
|
| 17 |
"missing_measurement_policy": "Missing report and dataset/scope/runtime/configuration combinations are omitted; the UI must display them as unavailable, never as zero.",
|
|
|
|
| 28 |
"source_report_file_count": 108
|
| 29 |
},
|
| 30 |
"data_file": "data.json",
|
| 31 |
+
"data_sha256": "605712c81fe1189cbfb804e52a680c17c55570ac4dfaa296cdd7e2c747ece9c9",
|
| 32 |
+
"dataset_catalog_sha256": "d69abc85742dc050e4cdab1e5a03fd3392a0e0f1964b2a88ca87ba7f768b7385",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
"excluded_content": [
|
| 34 |
"raw datasets",
|
| 35 |
"user uploads",
|
|
|
|
| 38 |
"binaries and model artifacts",
|
| 39 |
"external or vendored benchmark results"
|
| 40 |
],
|
| 41 |
+
"measurement_runs": [
|
| 42 |
+
{
|
| 43 |
+
"decode_boundary": "DBF header parse, integer-body decode, and inverse scaling or IEEE-word reconstruction",
|
| 44 |
+
"encode_boundary": "scale selection, native conversion, DBF header and integer-body serialization",
|
| 45 |
+
"environment": {
|
| 46 |
+
"artifact_manifest_sha256": "65c71e76b36196328ae7ecc6b2c456e941226ef9b7e300dd623ce32a6a3d2cf2",
|
| 47 |
+
"captured_at": "2026-10-09T03:40:04.510444+00:00",
|
| 48 |
+
"clock": {
|
| 49 |
+
"cpp": "std::chrono::steady_clock",
|
| 50 |
+
"cpu_scaling_governor": {
|
| 51 |
+
"36": "schedutil",
|
| 52 |
+
"37": "schedutil",
|
| 53 |
+
"38": "schedutil",
|
| 54 |
+
"39": "schedutil"
|
| 55 |
+
},
|
| 56 |
+
"frequency_fixed": false,
|
| 57 |
+
"java": "System.nanoTime",
|
| 58 |
+
"linux_clocksource": "tsc",
|
| 59 |
+
"python": "time.perf_counter_ns"
|
| 60 |
+
},
|
| 61 |
+
"concurrent_load": {
|
| 62 |
+
"measurement_workers": 4,
|
| 63 |
+
"other_user_processes_observed": true,
|
| 64 |
+
"runtimes_per_dataset": "cpp then java then python sequentially on the same pinned CPU",
|
| 65 |
+
"shared_server": true,
|
| 66 |
+
"source_preflight_completed_at": "2026-10-09T03:10:50.855189+00:00",
|
| 67 |
+
"source_preflight_overlap": true,
|
| 68 |
+
"source_preflight_workers": [
|
| 69 |
+
32,
|
| 70 |
+
33,
|
| 71 |
+
34,
|
| 72 |
+
35
|
| 73 |
+
],
|
| 74 |
+
"timing_context": "shared-server single-pass diagnostic"
|
| 75 |
+
},
|
| 76 |
+
"cpu": {
|
| 77 |
+
"affinity_observed_from_passed_run_receipts": [
|
| 78 |
+
36,
|
| 79 |
+
37,
|
| 80 |
+
38,
|
| 81 |
+
39
|
| 82 |
+
],
|
| 83 |
+
"passed_receipts_at_capture": 169,
|
| 84 |
+
"sibling_cpus": [
|
| 85 |
+
100,
|
| 86 |
+
101,
|
| 87 |
+
102,
|
| 88 |
+
103
|
| 89 |
+
],
|
| 90 |
+
"worker_physical_cpus": [
|
| 91 |
+
36,
|
| 92 |
+
37,
|
| 93 |
+
38,
|
| 94 |
+
39
|
| 95 |
+
]
|
| 96 |
+
},
|
| 97 |
+
"cpu_affinity": [
|
| 98 |
+
36,
|
| 99 |
+
37,
|
| 100 |
+
38,
|
| 101 |
+
39
|
| 102 |
+
],
|
| 103 |
+
"environment_receipt_sha256": "472c685502e53d740e45730ab4ceaaebf87cbb539ba0666e479b43b97c807c2c",
|
| 104 |
+
"hardware": {
|
| 105 |
+
"cores_per_socket": 32,
|
| 106 |
+
"cpu_model": "AMD EPYC 7542 32-Core Processor",
|
| 107 |
+
"logical_cpu_count": 128,
|
| 108 |
+
"memory_bytes": 270275891200,
|
| 109 |
+
"numa_nodes": 2,
|
| 110 |
+
"socket_count": 2,
|
| 111 |
+
"threads_per_core": 2
|
| 112 |
+
},
|
| 113 |
+
"notes": [
|
| 114 |
+
"Encode/decode timers exclude source I/O, segment SHA checks, missing-bitmap checks, frame-sequence hashing, and post-decode bitwise verification.",
|
| 115 |
+
"CPU frequency was not fixed; elapsed timings are diagnostic and are not publication-robust throughput measurements.",
|
| 116 |
+
"Four dataset workers ran concurrently; each dataset executed C++, Java, then Python on one pinned physical CPU."
|
| 117 |
+
],
|
| 118 |
+
"observed_cpu_affinity": [
|
| 119 |
+
36,
|
| 120 |
+
37,
|
| 121 |
+
38,
|
| 122 |
+
39
|
| 123 |
+
],
|
| 124 |
+
"os": {
|
| 125 |
+
"machine": "x86_64",
|
| 126 |
+
"pretty_name": "Ubuntu 22.04.5 LTS",
|
| 127 |
+
"release": "5.15.0-152-generic",
|
| 128 |
+
"system": "Linux",
|
| 129 |
+
"uname": "Linux server 5.15.0-152-generic #162-Ubuntu SMP Wed Jul 23 09:48:42 UTC 2025 x86_64 x86_64"
|
| 130 |
+
},
|
| 131 |
+
"repetitions": 1,
|
| 132 |
+
"runtime_artifact_manifest_sha256": "65c71e76b36196328ae7ecc6b2c456e941226ef9b7e300dd623ce32a6a3d2cf2",
|
| 133 |
+
"runtime_versions": {
|
| 134 |
+
"cpp": "g++ (Ubuntu 11.4.0-1ubuntu1~22.04.2) 11.4.0",
|
| 135 |
+
"java": "openjdk version \"17.0.16\" 2025-07-15",
|
| 136 |
+
"python": "Python 3.10.12"
|
| 137 |
+
},
|
| 138 |
+
"shared_server": true,
|
| 139 |
+
"warmup_blocks": 20
|
| 140 |
+
},
|
| 141 |
+
"evidence": {
|
| 142 |
+
"campaign_binding": {
|
| 143 |
+
"frame_verification": {
|
| 144 |
+
"case_count": 7,
|
| 145 |
+
"cold_decoder_pairs": 63,
|
| 146 |
+
"status": "passed"
|
| 147 |
+
},
|
| 148 |
+
"remote_build_receipt_sha256": "61e2ca13e53abd6c7a9fc8c5ba4da00bb64efbb024e67a568e1113d4a3b17cf3",
|
| 149 |
+
"source_commit": "19efaafe89bfe6794b2125eb4953b8ea84b4e157",
|
| 150 |
+
"source_commit_receipt_sha256": "71751b80101bb3ee84c35443ef989b971d6b2dec45e5c4add18a81b3d6899541",
|
| 151 |
+
"status": "passed"
|
| 152 |
+
},
|
| 153 |
+
"campaign_binding_sha256": "8bbc012129798d7d8af52c39872d6453863df56684c20b507ae3d226bdbd084c",
|
| 154 |
+
"campaign_progress_sha256": "a926e03715d60c9858b5899fac25756e25451f1e53c851ec1d5067db9c353af1",
|
| 155 |
+
"campaign_run_receipt_sha256": "22a89a5f6abddcdbdfabe8b7826ac6fa80a681812559cc1f0707e66beee0a227",
|
| 156 |
+
"compact_collection_receipt_sha256": "969a6b417d0ff541eb1583f51861ca79bc6f8e70a0c9e818efbe95e3f3fb4c93",
|
| 157 |
+
"environment_receipt_sha256": "472c685502e53d740e45730ab4ceaaebf87cbb539ba0666e479b43b97c807c2c",
|
| 158 |
+
"frame_verification_receipt_sha256": "8bcf811178f8b76e3e379ee659b01061420b0c55e7808a81b9c7e245240fb7d2",
|
| 159 |
+
"input_scope_receipt_sha256": "e1a7955aa457dfbda38f182806bde4dcc8c87d58d90c031dd5e65e346c669c00",
|
| 160 |
+
"runtime_artifact_manifest_sha256": "65c71e76b36196328ae7ecc6b2c456e941226ef9b7e300dd623ce32a6a3d2cf2",
|
| 161 |
+
"runtime_artifacts": {
|
| 162 |
+
"controller_source_sha256": "d40f8ea7c282d0dfbe4d0556973bc677539b736515bb6b0f4bcac94437b83855",
|
| 163 |
+
"cpp_executable_sha256": "4bc96cb0fb707e4dce26689fdef054635210d7f1251ae426bd95c5b2c6a8025f",
|
| 164 |
+
"java_class_count": 11,
|
| 165 |
+
"java_classes_content_manifest_sha256": "d394933edf1a387d1c0328f889e0481e32cf6315394addd03b3b327efd44f912",
|
| 166 |
+
"python_cli_source_sha256": "faebc76dba7b8146c031b187c38801ed0694d740f7f3fc0db8050ffefe3a4685",
|
| 167 |
+
"python_codec_source_sha256": "7bdafe826c0ea960d05d13bdc4c28c4548fc03a9c2f978f1834c7d56c6d8db7d",
|
| 168 |
+
"python_dependency_source_sha256": [
|
| 169 |
+
"122c35627319bfc38edac585e4dd2daf9e9b9ec2fe18dc302eea181eaf4aac37",
|
| 170 |
+
"4a8e16adec02a5a2227cf4949b73ad30bf4a444c98b3d1b6309deb5afb171ae9"
|
| 171 |
+
],
|
| 172 |
+
"sha256": "65c71e76b36196328ae7ecc6b2c456e941226ef9b7e300dd623ce32a6a3d2cf2",
|
| 173 |
+
"status": "passed"
|
| 174 |
+
},
|
| 175 |
+
"runtime_result_chain_sha256": {
|
| 176 |
+
"cpp": "1425ca9522347fe60ad2c83481779a1a595fcd7635e2dccc04a95483357a4f9a",
|
| 177 |
+
"java": "a7a55d5e216cfa82cf8513d665a8e551c41f2b7ce1e1d7415295bd856fa390c1",
|
| 178 |
+
"python": "1c8813058d1d946d910cadb62141b75adff197d74dbd923135a7ad8a1c6db995"
|
| 179 |
+
},
|
| 180 |
+
"scope_sha256": "0fabc01f25d62ddb49585b3208103543b16c6e50340195360a0516411fa148b4",
|
| 181 |
+
"source_authority": {
|
| 182 |
+
"core_preparation_anchor_sha256": "cf8b8523f5fd565baa58e65603599be133e5b25d23c99de14b783cef659461b3",
|
| 183 |
+
"input_inventory_sha256": "83f6c03b74e3b71d191b6e2e01bba9c814424155afb8d8ef923d0cc4dbc7ca93",
|
| 184 |
+
"remote_full_receipt_sha256": "2ed96588ca3127f444a73ce0e81cad9f352aed5aba7df45532f564fb15083b4b",
|
| 185 |
+
"source_scope_sha256": "7ec5714939750c0551371d52e593685e3c4226681a4283af0a4d5b8abea64cfd",
|
| 186 |
+
"thulab_preparation_anchor_sha256": "8bff220cdd913798b420fd7a739a9d9517379f75559735f83703e2a268b5b38b"
|
| 187 |
+
},
|
| 188 |
+
"source_column_inventory_sha256": "f94ed9a9dfd95a74f5c48986d650f30a8f867a21e1a18ef02be6610206a21453",
|
| 189 |
+
"source_evidence_chain_sha256": "9a9972cb684000d6c9788865c2e949a3a69cae11a17342caef00a718f1583ab7"
|
| 190 |
+
},
|
| 191 |
+
"family": "DBP",
|
| 192 |
+
"generated_at": "2026-10-09T03:41:20.288512+00:00",
|
| 193 |
+
"integrated_at": "2026-10-09T04:35:42.726677+00:00",
|
| 194 |
+
"measured_dataset_count_per_runtime": 162,
|
| 195 |
+
"method": "DELTA_BINARY_PACKED",
|
| 196 |
+
"point_count_basis": "valid native-width numeric values",
|
| 197 |
+
"precision_rule": "dominant decimal-place fraction >=0.85; absent statistics use the existing non-fixed fallback",
|
| 198 |
+
"runtimes": [
|
| 199 |
+
"cpp",
|
| 200 |
+
"java",
|
| 201 |
+
"python"
|
| 202 |
+
],
|
| 203 |
+
"size_boundary": "complete codec frame including reconstruction header; shared validity sidecars excluded",
|
| 204 |
+
"source_scope_sha256": "0fabc01f25d62ddb49585b3208103543b16c6e50340195360a0516411fa148b4",
|
| 205 |
+
"source_sha256": "febe0d4494cf3778bb3e386ac8674f24406e29d1d7d9b47bd834b332b0e201fb",
|
| 206 |
+
"verified_column_count_per_runtime": 4096
|
| 207 |
+
}
|
| 208 |
+
],
|
| 209 |
"result_csv_files": [
|
| 210 |
{
|
| 211 |
"path": "backend/dataset/Air-Quality/Air-Quality_float_cpp_compression_result.csv",
|
|
|
|
| 759 |
{
|
| 760 |
"path": "dataset-catalog.json",
|
| 761 |
"role": "reviewed_dataset_catalog",
|
| 762 |
+
"sha256": "d69abc85742dc050e4cdab1e5a03fd3392a0e0f1964b2a88ca87ba7f768b7385",
|
| 763 |
"status": "reviewed_public_catalog"
|
| 764 |
}
|
| 765 |
]
|
style.css
CHANGED
|
@@ -14,6 +14,3 @@
|
|
| 14 |
.dataset-catalog-panel{margin:18px 0 20px;padding:18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.dataset-catalog-head{display:flex;align-items:end;justify-content:space-between;gap:24px}.dataset-catalog-head>div:first-child{min-width:0}.dataset-catalog-controls{display:grid;grid-template-columns:180px minmax(220px,320px);gap:10px;flex:0 0 auto}.dataset-catalog{max-height:430px;overflow:auto;padding-right:5px}.dataset-category{margin-top:18px}.dataset-category:first-child{margin-top:0}.dataset-category>h3{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:8px;margin:0;padding:8px 2px;background:var(--surface);border-bottom:1px solid var(--line);font-size:14px}.dataset-category>h3 span{padding:2px 6px;border-radius:999px;background:var(--soft);color:var(--muted);font-size:9px}.dataset-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding-top:8px}.dataset-entry{min-width:0;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--bg)}.dataset-entry.measured{border-left:3px solid var(--accent)}.dataset-entry.selected{box-shadow:inset 0 0 0 1px var(--accent);background:var(--accent-soft)}.dataset-entry button{display:flex;align-items:start;justify-content:space-between;gap:8px;width:100%;padding:0;border:0;background:transparent;color:var(--text);text-align:left}.dataset-entry button:hover strong{color:var(--accent);text-decoration:underline}.dataset-entry strong{display:block;font-size:12px;line-height:1.35;overflow-wrap:anywhere}.dataset-entry small{display:block;margin-top:2px;color:var(--muted);font:9px "SFMono-Regular",Consolas,monospace;overflow-wrap:anywhere}.dataset-state{flex:0 0 auto;max-width:92px;padding:2px 5px;border-radius:4px;background:var(--soft);color:var(--muted);font-size:8px;line-height:1.35;text-align:right}.dataset-entry.measured .dataset-state{background:var(--accent-soft);color:var(--accent)}.dataset-entry p{margin:7px 0 0;color:var(--muted);font-size:9px;line-height:1.45}.dataset-entry .dataset-snapshot-note{color:#9a5a16}.dataset-links{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:6px}.dataset-links a,.dataset-source{font-size:9px;overflow-wrap:anywhere}
|
| 15 |
@media(max-width:1000px){.operator-summary{grid-template-columns:repeat(3,1fr)}.dataset-list{grid-template-columns:repeat(2,minmax(0,1fr))}.dataset-catalog-head{align-items:stretch;flex-direction:column;gap:12px}.dataset-catalog-controls{width:100%;grid-template-columns:1fr 1.5fr}}
|
| 16 |
@media(max-width:768px){.operator-summary{grid-template-columns:repeat(2,1fr)}.implementation-entry dl>div{grid-template-columns:1fr;gap:1px}.dataset-catalog-panel{padding:14px}.dataset-catalog-controls,.dataset-list{grid-template-columns:1fr}.dataset-catalog{max-height:520px}}
|
| 17 |
-
.documentation-action{display:inline-flex;margin-top:12px;font-size:11px}.dbp-audit-main{max-width:1440px}.audit-hero{display:flex;align-items:center;justify-content:space-between;gap:32px;padding:34px 0 24px}.audit-hero .intro-text{margin:0;max-width:820px}.audit-state-card{flex:0 0 230px;padding:16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.audit-state-card>span,.audit-state-card>small{display:block;color:var(--muted);font-size:10px}.audit-state-card>strong{display:inline-block;margin:7px 0}.status-chip{padding:3px 8px;border-radius:999px;border:1px solid var(--line);background:var(--soft);font-size:10px;line-height:1.4;text-transform:uppercase;letter-spacing:.05em}.status-complete,.status-ok,.status-passed{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.status-failed{border-color:#b34938;background:#b3493818;color:#b34938}.status-incomplete,.status-pending,.status-running,.status-partial,.status-skipped,.status-n-a,.status-na,.status-unknown{color:var(--muted)}.audit-scope-notice{margin:0 0 26px}.audit-scope-notice p{max-width:110ch;margin:6px 0 0}.section-heading{display:flex;align-items:end;justify-content:space-between;gap:24px;margin:24px 0 12px}.section-heading>div:first-child{min-width:0}.audit-summary{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:1px;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--line)}.audit-summary>div{padding:14px;background:var(--surface);text-align:center}.audit-summary strong{display:block;font-size:22px;line-height:1.2;font-variant-numeric:tabular-nums}.audit-summary span{display:block;margin-top:5px;color:var(--muted);font-size:10px}.audit-meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:24px 0}.audit-meta-grid article{padding:18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.audit-meta-grid h2{margin-bottom:12px}.audit-definitions{display:grid;grid-template-columns:minmax(120px,.45fr) 1fr;margin:0}.audit-definitions dt,.audit-definitions dd{padding:7px 0;border-top:1px solid var(--line);font-size:11px;overflow-wrap:anywhere}.audit-definitions dt{color:var(--muted);font-weight:600}.audit-definitions dd{margin:0}.runtime-status-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.runtime-status-card{padding:15px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.runtime-status-card header{display:flex;align-items:center;justify-content:space-between;gap:12px}.runtime-status-card h3{margin:0;font-size:15px}.runtime-status-card p{margin:8px 0 0;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.audit-results{margin-top:26px}.audit-filters{display:grid;grid-template-columns:.8fr .9fr 1fr 1.8fr;gap:12px;padding:15px;border:1px solid var(--line);border-radius:var(--radius);background:var(--soft)}.audit-table-wrap{max-height:610px}.audit-table-wrap thead th:nth-child(3),.audit-table-wrap thead th:nth-child(4),.audit-table-wrap tbody td:nth-child(3),.audit-table-wrap tbody td:nth-child(4){text-align:left}.audit-table-wrap td{font-size:11px}.audit-table-wrap .mode-count{display:block;color:var(--muted);font-size:9px}.audit-pagination{display:flex;align-items:center;justify-content:center;gap:14px;padding:12px}.audit-pagination span{color:var(--muted);font-size:11px}.dataset-receipt-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;max-height:460px;overflow:auto;padding-right:5px}.dataset-receipt-card{min-width:0;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--surface)}.dataset-receipt-card header{display:flex;align-items:start;justify-content:space-between;gap:8px}.dataset-receipt-card strong{display:block;font-size:11px;overflow-wrap:anywhere}.dataset-receipt-card small{display:block;color:var(--muted);font-size:9px}.dataset-receipt-card p{margin:6px 0 0;color:var(--muted);font-size:9px;line-height:1.45;overflow-wrap:anywhere}.audit-reading-note{max-width:100ch;margin:30px 0}.audit-reading-note p{color:var(--muted);font-size:12px}.audit-validation-error{color:#b34938}.audit-validation-ok{color:var(--muted)}
|
| 18 |
-
@media(max-width:1000px){.audit-summary{grid-template-columns:repeat(3,1fr)}.audit-filters{grid-template-columns:repeat(2,1fr)}.dataset-receipt-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
|
| 19 |
-
@media(max-width:768px){.audit-hero{align-items:stretch;flex-direction:column;padding-top:24px}.audit-state-card{flex:auto;width:100%}.audit-summary{grid-template-columns:repeat(2,1fr)}.audit-meta-grid,.runtime-status-grid,.audit-filters,.dataset-receipt-grid{grid-template-columns:1fr}.section-heading{align-items:stretch;flex-direction:column;gap:10px}.audit-definitions{grid-template-columns:1fr}.audit-definitions dd{padding-top:0;border-top:0}.audit-results .toolbar-actions{width:100%}.audit-results .toolbar-actions button{flex:1}}
|
|
|
|
| 14 |
.dataset-catalog-panel{margin:18px 0 20px;padding:18px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.dataset-catalog-head{display:flex;align-items:end;justify-content:space-between;gap:24px}.dataset-catalog-head>div:first-child{min-width:0}.dataset-catalog-controls{display:grid;grid-template-columns:180px minmax(220px,320px);gap:10px;flex:0 0 auto}.dataset-catalog{max-height:430px;overflow:auto;padding-right:5px}.dataset-category{margin-top:18px}.dataset-category:first-child{margin-top:0}.dataset-category>h3{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:8px;margin:0;padding:8px 2px;background:var(--surface);border-bottom:1px solid var(--line);font-size:14px}.dataset-category>h3 span{padding:2px 6px;border-radius:999px;background:var(--soft);color:var(--muted);font-size:9px}.dataset-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding-top:8px}.dataset-entry{min-width:0;padding:10px;border:1px solid var(--line);border-radius:6px;background:var(--bg)}.dataset-entry.measured{border-left:3px solid var(--accent)}.dataset-entry.selected{box-shadow:inset 0 0 0 1px var(--accent);background:var(--accent-soft)}.dataset-entry button{display:flex;align-items:start;justify-content:space-between;gap:8px;width:100%;padding:0;border:0;background:transparent;color:var(--text);text-align:left}.dataset-entry button:hover strong{color:var(--accent);text-decoration:underline}.dataset-entry strong{display:block;font-size:12px;line-height:1.35;overflow-wrap:anywhere}.dataset-entry small{display:block;margin-top:2px;color:var(--muted);font:9px "SFMono-Regular",Consolas,monospace;overflow-wrap:anywhere}.dataset-state{flex:0 0 auto;max-width:92px;padding:2px 5px;border-radius:4px;background:var(--soft);color:var(--muted);font-size:8px;line-height:1.35;text-align:right}.dataset-entry.measured .dataset-state{background:var(--accent-soft);color:var(--accent)}.dataset-entry p{margin:7px 0 0;color:var(--muted);font-size:9px;line-height:1.45}.dataset-entry .dataset-snapshot-note{color:#9a5a16}.dataset-links{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:6px}.dataset-links a,.dataset-source{font-size:9px;overflow-wrap:anywhere}
|
| 15 |
@media(max-width:1000px){.operator-summary{grid-template-columns:repeat(3,1fr)}.dataset-list{grid-template-columns:repeat(2,minmax(0,1fr))}.dataset-catalog-head{align-items:stretch;flex-direction:column;gap:12px}.dataset-catalog-controls{width:100%;grid-template-columns:1fr 1.5fr}}
|
| 16 |
@media(max-width:768px){.operator-summary{grid-template-columns:repeat(2,1fr)}.implementation-entry dl>div{grid-template-columns:1fr;gap:1px}.dataset-catalog-panel{padding:14px}.dataset-catalog-controls,.dataset-list{grid-template-columns:1fr}.dataset-catalog{max-height:520px}}
|
|
|
|
|
|
|
|
|
ui-data.json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|