From 825ca12ed8ae8e01275b7cf2e8467fe79745c43e Mon Sep 17 00:00:00 2001 From: Joonas Nivala Date: Mon, 16 Feb 2026 18:29:54 +0200 Subject: [PATCH 1/5] fix table calibration data view bug --- .../StatusModal/CalibrationTable.jsx | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/components/StatusModal/CalibrationTable.jsx b/src/components/StatusModal/CalibrationTable.jsx index b9d7c5f3b661..b7ae5b5a0a82 100644 --- a/src/components/StatusModal/CalibrationTable.jsx +++ b/src/components/StatusModal/CalibrationTable.jsx @@ -21,7 +21,16 @@ export const CalibrationTable = (props) => { }); }); - const sortedIds = Array.from(allIds); + const sortedIds = Array.from(allIds).map(id => { + const match = id.match(/QB(\d+)__QB(\d+)/); + if (match) { + const [, num1, num2] = match; + const smaller = Math.min(parseInt(num1), parseInt(num2)); + const larger = Math.max(parseInt(num1), parseInt(num2)); + return `QB${smaller}__QB${larger}`; + } + return id; + }); // Filter out metrics that have only N/A values for the filtered IDs const metrics = allMetrics.filter(metric => { @@ -53,8 +62,20 @@ export const CalibrationTable = (props) => { {id} {metrics.map(metric => { - const data = calibrationData[metric][id]; - const value = data?.value; + let data = calibrationData[metric][id]; + let value = data?.value; + + // If not found, try with flipped numbers + if ((value === null || value === undefined) && id.includes('__')) { + const match = id.match(/QB(\d+)__QB(\d+)/); + if (match) { + const [, num1, num2] = match; + const flippedId = `QB${num2}__QB${num1}`; + data = calibrationData[metric][flippedId]; + value = data?.value; + } + } + const unit = data?.unit || ''; return ( From b048d16e0072aecde88a54e9d0276e733af06fcc Mon Sep 17 00:00:00 2001 From: Joonas Nivala Date: Mon, 16 Feb 2026 18:51:12 +0200 Subject: [PATCH 2/5] bug fix --- src/components/StatusModal/CalibrationTable.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/StatusModal/CalibrationTable.jsx b/src/components/StatusModal/CalibrationTable.jsx index b7ae5b5a0a82..1c10e229d968 100644 --- a/src/components/StatusModal/CalibrationTable.jsx +++ b/src/components/StatusModal/CalibrationTable.jsx @@ -58,13 +58,13 @@ export const CalibrationTable = (props) => { - {sortedIds.map(id => ( + {sortedIds.map(id => ( {id} {metrics.map(metric => { let data = calibrationData[metric][id]; let value = data?.value; - + // If not found, try with flipped numbers if ((value === null || value === undefined) && id.includes('__')) { const match = id.match(/QB(\d+)__QB(\d+)/); @@ -75,7 +75,7 @@ export const CalibrationTable = (props) => { value = data?.value; } } - + const unit = data?.unit || ''; return ( From 8cfec83dc21a0e6837166f49e04846c04e9fe6f8 Mon Sep 17 00:00:00 2001 From: Joonas Nivala Date: Mon, 16 Feb 2026 19:05:21 +0200 Subject: [PATCH 3/5] big fix in table view --- .../StatusModal/CalibrationTable.jsx | 67 +++++++++++-------- .../StatusModal/RawDataSwitcher.jsx | 4 +- 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/src/components/StatusModal/CalibrationTable.jsx b/src/components/StatusModal/CalibrationTable.jsx index 1c10e229d968..d8b0b13d23b8 100644 --- a/src/components/StatusModal/CalibrationTable.jsx +++ b/src/components/StatusModal/CalibrationTable.jsx @@ -13,29 +13,40 @@ export const CalibrationTable = (props) => { // Get all unique qubit/coupler IDs const allIds = new Set(); + const idMap = {}; // Map normalized IDs to actual IDs in data allMetrics.forEach(metric => { Object.keys(calibrationData[metric]).forEach(id => { - if (id !== 'statistics' && ((qubitSwitch && !id.includes("__")) || (couplerSwitch && id.includes("__")))) { - allIds.add(id); + if (id !== 'statistics' && ((qubitSwitch && !id.includes("__")) || (!qubitSwitch && id.includes("__")))) { + // Normalize the ID + const match = id.match(/QB(\d+)__QB(\d+)/); + let normalizedId = id; + if (match) { + const [, num1, num2] = match; + const smaller = Math.min(parseInt(num1), parseInt(num2)); + const larger = Math.max(parseInt(num1), parseInt(num2)); + normalizedId = `QB${smaller}__QB${larger}`; + } + allIds.add(normalizedId); + idMap[normalizedId] = id; // Store the actual ID } }); }); - const sortedIds = Array.from(allIds).map(id => { - const match = id.match(/QB(\d+)__QB(\d+)/); - if (match) { - const [, num1, num2] = match; - const smaller = Math.min(parseInt(num1), parseInt(num2)); - const larger = Math.max(parseInt(num1), parseInt(num2)); - return `QB${smaller}__QB${larger}`; - } - return id; - }); - + var sortedIds; + if (qubitSwitch){ + sortedIds = Array.from(allIds).sort(); + } else { + sortedIds = Array.from(allIds).sort((a, b) => { + const [a1, a2] = a.match(/QB(\d+)__QB(\d+)/).slice(1).map(Number); + const [b1, b2] = b.match(/QB(\d+)__QB(\d+)/).slice(1).map(Number); + return a1 - b1 || a2 - b2; + }); + } // Filter out metrics that have only N/A values for the filtered IDs const metrics = allMetrics.filter(metric => { return sortedIds.some(id => { - const data = calibrationData[metric][id]; + const actualId = idMap[id]; + const data = calibrationData[metric][actualId]; const value = data?.value; return value !== null && value !== undefined; }); @@ -58,25 +69,27 @@ export const CalibrationTable = (props) => { - {sortedIds.map(id => ( + {sortedIds.map(id => ( {id} {metrics.map(metric => { - let data = calibrationData[metric][id]; + const actualId = idMap[id]; + let data = calibrationData[metric][actualId]; let value = data?.value; - - // If not found, try with flipped numbers - if ((value === null || value === undefined) && id.includes('__')) { - const match = id.match(/QB(\d+)__QB(\d+)/); + const unit = data?.unit || ''; + + // Try flipped ID if value is N/A + if ((value === null || value === undefined) && actualId.includes("__")) { + const match = actualId.match(/QB(\d+)__QB(\d+)/); if (match) { - const [, num1, num2] = match; - const flippedId = `QB${num2}__QB${num1}`; - data = calibrationData[metric][flippedId]; - value = data?.value; + const flippedId = `QB${match[2]}__QB${match[1]}`; + const flippedData = calibrationData[metric][flippedId]; + if (flippedData?.value !== null && flippedData?.value !== undefined) { + value = flippedData.value; + } } } - - const unit = data?.unit || ''; + return ( {value !== null && value !== undefined ? formatMetricValue(value, unit) : 'N/A'} @@ -90,4 +103,4 @@ export const CalibrationTable = (props) => { ); -}; +}; \ No newline at end of file diff --git a/src/components/StatusModal/RawDataSwitcher.jsx b/src/components/StatusModal/RawDataSwitcher.jsx index 81807f6f5ff7..1257008e7cfd 100644 --- a/src/components/StatusModal/RawDataSwitcher.jsx +++ b/src/components/StatusModal/RawDataSwitcher.jsx @@ -53,7 +53,6 @@ export const RawDataSwitcher = (props) => { value={viewState.qubitSwitch} onChangeValue={(e) => { updateViewState('qubitSwitch', e.detail) - updateViewState('couplerSwitch', !e.detail) }} > Qubits @@ -61,10 +60,9 @@ export const RawDataSwitcher = (props) => {
{ updateViewState('qubitSwitch', !e.detail) - updateViewState('couplerSwitch', e.detail) }} > Couplers From 15ff372e10f5990ec814b37461656dc81c1519fc Mon Sep 17 00:00:00 2001 From: Joonas Nivala Date: Mon, 16 Feb 2026 19:06:11 +0200 Subject: [PATCH 4/5] remove unused state --- src/components/StatusModal/CalibrationTable.jsx | 2 +- src/components/StatusModal/StatusModalConent.jsx | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/StatusModal/CalibrationTable.jsx b/src/components/StatusModal/CalibrationTable.jsx index d8b0b13d23b8..aefb3235b43d 100644 --- a/src/components/StatusModal/CalibrationTable.jsx +++ b/src/components/StatusModal/CalibrationTable.jsx @@ -5,7 +5,7 @@ import { formatMetricValue } from '../../utils/formatMetricValue'; // Render calibration data as a table export const CalibrationTable = (props) => { - const { calibrationData, qubitSwitch, couplerSwitch, qubitMetricOptions, couplerMetricOptions } = props; + const { calibrationData, qubitSwitch, qubitMetricOptions, couplerMetricOptions } = props; if (!calibrationData) return

No calibration data available

; const allMetrics = Object.keys(calibrationData); diff --git a/src/components/StatusModal/StatusModalConent.jsx b/src/components/StatusModal/StatusModalConent.jsx index a4a1796ef205..7683e2f16a6c 100644 --- a/src/components/StatusModal/StatusModalConent.jsx +++ b/src/components/StatusModal/StatusModalConent.jsx @@ -34,7 +34,6 @@ export const ModalContent = (props) => { rawDataType: { name: 'Calibration Data', value: 'calibration_data' }, tableView: false, qubitSwitch: true, - couplerSwitch: false, }); // Update functions for grouped states @@ -132,7 +131,6 @@ export const ModalContent = (props) => { From d67613f326c666d02a909a49f20eeab79b7fd2ee Mon Sep 17 00:00:00 2001 From: Joonas Nivala Date: Mon, 16 Feb 2026 19:09:24 +0200 Subject: [PATCH 5/5] better id sorting --- src/components/StatusModal/CalibrationTable.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/StatusModal/CalibrationTable.jsx b/src/components/StatusModal/CalibrationTable.jsx index aefb3235b43d..0fde7b08a640 100644 --- a/src/components/StatusModal/CalibrationTable.jsx +++ b/src/components/StatusModal/CalibrationTable.jsx @@ -34,7 +34,11 @@ export const CalibrationTable = (props) => { var sortedIds; if (qubitSwitch){ - sortedIds = Array.from(allIds).sort(); + sortedIds = Array.from(allIds).sort((a, b) => { + const numA = parseInt(a.replace('QB', '')); + const numB = parseInt(b.replace('QB', '')); + return numA - numB; + }); } else { sortedIds = Array.from(allIds).sort((a, b) => { const [a1, a2] = a.match(/QB(\d+)__QB(\d+)/).slice(1).map(Number);