import React from 'react' import { VARIANT_NAME_MAP } from './galleryUtils' import MetricInfoIcon from './MetricInfoIcon' interface ExampleVariantMetricsTablesProps { variantMetadatas: Record> } const ACCURACY_METRICS = ['bit_acc', 'word_acc', 'log10_p_value'] const ExampleVariantMetricsTables: React.FC = ({ variantMetadatas, }) => { const variantKeys = Object.keys(variantMetadatas) if (variantKeys.length === 0) return null // Collect all unique metadata keys across all variants let allKeys = Array.from( new Set(variantKeys.flatMap((variant) => Object.keys(variantMetadatas[variant] || {}))) ) // Split keys into accuracy and quality metrics const accuracyKeys = [...ACCURACY_METRICS.filter((k) => allKeys.includes(k))] if (allKeys.includes('detected')) { accuracyKeys.unshift('detected') } const qualityKeys = allKeys.filter((k) => !accuracyKeys.includes(k) && k !== 'detected') // Helper to render a table for a set of keys and a set of variants const renderTable = (keys: string[], title: string, rowVariants: string[]) => keys.length === 0 ? null : (
{title}
{keys.map((k) => ( ))} {rowVariants.map((variant) => variantKeys.includes(variant) ? ( {keys.map((k) => ( ))} ) : null )}
Variant {k} {k !== 'detected' && }
{VARIANT_NAME_MAP[variant] || variant} {variantMetadatas[variant] && k in variantMetadatas[variant] ? String(variantMetadatas[variant][k]) : ''}
) return ( <> {renderTable(accuracyKeys, 'Accuracy Metrics', ['wmd', 'attacked_wmd'])} {renderTable(qualityKeys, 'Quality Metrics', ['wmd'])} ) } export default ExampleVariantMetricsTables