From 33363287c4c466f48216c63da3b09dc13ff983ba Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:14:30 +0300 Subject: [PATCH 01/19] chore: stage verified rtichoke_viz v0.6.0 vendor --- .github/workflows/_temporary-vendor-v060.yml | 61 ++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/_temporary-vendor-v060.yml diff --git a/.github/workflows/_temporary-vendor-v060.yml b/.github/workflows/_temporary-vendor-v060.yml new file mode 100644 index 00000000..1ce800ab --- /dev/null +++ b/.github/workflows/_temporary-vendor-v060.yml @@ -0,0 +1,61 @@ +name: Temporary vendor rtichoke_viz v0.6.0 + +on: + push: + branches: + - feat/static-decision-curve-browser + paths: + - .github/workflows/_temporary-vendor-v060.yml + +permissions: + contents: write + +jobs: + vendor: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: feat/static-decision-curve-browser + - name: Download and verify immutable release + shell: bash + run: | + set -euo pipefail + url="https://github.com/uriahf/rtichoke_viz/releases/download/v0.6.0/rtichoke-viz-0.6.0.tar.gz" + expected="625613c7f692ff50b7757a27bb6caf84e311971bde92593141393dbd897af3a2" + tmp="$(mktemp -d)" + curl -fsSL "$url" -o "$tmp/rtichoke-viz-0.6.0.tar.gz" + actual="$(sha256sum "$tmp/rtichoke-viz-0.6.0.tar.gz" | awk '{print $1}')" + test "$actual" = "$expected" + tar -xzf "$tmp/rtichoke-viz-0.6.0.tar.gz" -C "$tmp" + vendor="src/rtichoke/_vendor/rtichoke_viz" + rm -f "$vendor"/rtichoke-viz-*.tar.gz + cp "$tmp/rtichoke-viz-0.6.0.tar.gz" "$vendor/" + cp "$tmp/rtichoke-viz.js" "$vendor/" + cp "$tmp/rtichoke-viz.css" "$vendor/" + cp "$tmp/rtichoke-viz.schema.json" "$vendor/" + cp "$tmp/rtichoke-viz-v2.schema.json" "$vendor/" + cat > "$vendor/VENDORED_FROM" <<'EOF' + repository=https://github.com/uriahf/rtichoke_viz + release=v0.6.0 + source_commit=3abb3f07a598c3e22d5362a3f88e52bb6b52b083 + archive=rtichoke-viz-0.6.0.tar.gz + sha256=625613c7f692ff50b7757a27bb6caf84e311971bde92593141393dbd897af3a2 + EOF + grep -qx 'version=0.6.0' "$tmp/MANIFEST" + grep -qx 'commit=3abb3f07a598c3e22d5362a3f88e52bb6b52b083' "$tmp/MANIFEST" + grep -q 'renderDecisionCurveV2' "$vendor/rtichoke-viz.js" + if grep -q 'renderInterventionsAvoidedV2' "$vendor/rtichoke-viz.js"; then + echo 'unexpected Interventions Avoided v2 export in v0.6.0' >&2 + exit 1 + fi + - name: Commit vendored payload + shell: bash + run: | + set -euo pipefail + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + git add src/rtichoke/_vendor/rtichoke_viz + git diff --cached --quiet && exit 0 + git commit -m "Vendor immutable rtichoke_viz v0.6.0" + git push origin HEAD:feat/static-decision-curve-browser From c6225e4d7e2d572da66abc7e09e5807b1ec15087 Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:16:33 +0300 Subject: [PATCH 02/19] chore: fix temporary v0.6.0 vendor extraction --- .github/workflows/_temporary-vendor-v060.yml | 23 +++++++++++--------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/_temporary-vendor-v060.yml b/.github/workflows/_temporary-vendor-v060.yml index 1ce800ab..0aeb6c28 100644 --- a/.github/workflows/_temporary-vendor-v060.yml +++ b/.github/workflows/_temporary-vendor-v060.yml @@ -24,17 +24,20 @@ jobs: url="https://github.com/uriahf/rtichoke_viz/releases/download/v0.6.0/rtichoke-viz-0.6.0.tar.gz" expected="625613c7f692ff50b7757a27bb6caf84e311971bde92593141393dbd897af3a2" tmp="$(mktemp -d)" - curl -fsSL "$url" -o "$tmp/rtichoke-viz-0.6.0.tar.gz" - actual="$(sha256sum "$tmp/rtichoke-viz-0.6.0.tar.gz" | awk '{print $1}')" + archive="$tmp/rtichoke-viz-0.6.0.tar.gz" + curl -fsSL "$url" -o "$archive" + actual="$(sha256sum "$archive" | awk '{print $1}')" test "$actual" = "$expected" - tar -xzf "$tmp/rtichoke-viz-0.6.0.tar.gz" -C "$tmp" + tar -xzf "$archive" -C "$tmp" + payload_dir="$(dirname "$(find "$tmp" -type f -name rtichoke-viz.js -print -quit)")" + test -n "$payload_dir" vendor="src/rtichoke/_vendor/rtichoke_viz" rm -f "$vendor"/rtichoke-viz-*.tar.gz - cp "$tmp/rtichoke-viz-0.6.0.tar.gz" "$vendor/" - cp "$tmp/rtichoke-viz.js" "$vendor/" - cp "$tmp/rtichoke-viz.css" "$vendor/" - cp "$tmp/rtichoke-viz.schema.json" "$vendor/" - cp "$tmp/rtichoke-viz-v2.schema.json" "$vendor/" + cp "$archive" "$vendor/" + cp "$payload_dir/rtichoke-viz.js" "$vendor/" + cp "$payload_dir/rtichoke-viz.css" "$vendor/" + cp "$payload_dir/rtichoke-viz.schema.json" "$vendor/" + cp "$payload_dir/rtichoke-viz-v2.schema.json" "$vendor/" cat > "$vendor/VENDORED_FROM" <<'EOF' repository=https://github.com/uriahf/rtichoke_viz release=v0.6.0 @@ -42,8 +45,8 @@ jobs: archive=rtichoke-viz-0.6.0.tar.gz sha256=625613c7f692ff50b7757a27bb6caf84e311971bde92593141393dbd897af3a2 EOF - grep -qx 'version=0.6.0' "$tmp/MANIFEST" - grep -qx 'commit=3abb3f07a598c3e22d5362a3f88e52bb6b52b083' "$tmp/MANIFEST" + grep -qx 'version=0.6.0' "$payload_dir/MANIFEST" + grep -qx 'commit=3abb3f07a598c3e22d5362a3f88e52bb6b52b083' "$payload_dir/MANIFEST" grep -q 'renderDecisionCurveV2' "$vendor/rtichoke-viz.js" if grep -q 'renderInterventionsAvoidedV2' "$vendor/rtichoke-viz.js"; then echo 'unexpected Interventions Avoided v2 export in v0.6.0' >&2 From 4b238d38ade5e5da485d0b1c53a044db7d9d9bb3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 09:16:42 +0000 Subject: [PATCH 03/19] Vendor immutable rtichoke_viz v0.6.0 --- .../_vendor/rtichoke_viz/VENDORED_FROM | 8 +- .../rtichoke_viz/rtichoke-viz-0.5.0.tar.gz | Bin 172333 -> 0 bytes .../rtichoke_viz/rtichoke-viz-0.6.0.tar.gz | Bin 0 -> 174455 bytes .../rtichoke_viz/rtichoke-viz-v2.schema.json | 762 +++++ .../_vendor/rtichoke_viz/rtichoke-viz.js | 2739 +++++++++-------- 5 files changed, 2205 insertions(+), 1304 deletions(-) delete mode 100644 src/rtichoke/_vendor/rtichoke_viz/rtichoke-viz-0.5.0.tar.gz create mode 100644 src/rtichoke/_vendor/rtichoke_viz/rtichoke-viz-0.6.0.tar.gz diff --git a/src/rtichoke/_vendor/rtichoke_viz/VENDORED_FROM b/src/rtichoke/_vendor/rtichoke_viz/VENDORED_FROM index 4ad06602..ab6a6962 100644 --- a/src/rtichoke/_vendor/rtichoke_viz/VENDORED_FROM +++ b/src/rtichoke/_vendor/rtichoke_viz/VENDORED_FROM @@ -1,5 +1,5 @@ repository=https://github.com/uriahf/rtichoke_viz -release=v0.5.0 -source_commit=9c5a114ebe968e8cef4d2f14bf82ed552d2c8a17 -archive=rtichoke-viz-0.5.0.tar.gz -sha256=ab36ae71f9090b4de62da8f552ebe84ac35885ab04958667faaf070db2c98f65 +release=v0.6.0 +source_commit=3abb3f07a598c3e22d5362a3f88e52bb6b52b083 +archive=rtichoke-viz-0.6.0.tar.gz +sha256=625613c7f692ff50b7757a27bb6caf84e311971bde92593141393dbd897af3a2 diff --git a/src/rtichoke/_vendor/rtichoke_viz/rtichoke-viz-0.5.0.tar.gz b/src/rtichoke/_vendor/rtichoke_viz/rtichoke-viz-0.5.0.tar.gz deleted file mode 100644 index 01064d7842d7d062524c54053967b60db51b7129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172333 zcmV()K;OR~iwFP!000001MK~4V;eV;D1e^N{uOPV%pB69XtE{0C_6rhlg#ACNqlWj z&dewpr$x3T#uTZLlr6>4{p}a^0t%0AHYGWe+1>1p#m1vhC=?2XLZL8Uj)%vyx8>Hm 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 diff --git a/src/rtichoke/_vendor/rtichoke_viz/rtichoke-viz-0.6.0.tar.gz b/src/rtichoke/_vendor/rtichoke_viz/rtichoke-viz-0.6.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4e948e6782453a56158d4e650bb6e82c812ed038 GIT binary patch literal 174455 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 z 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 evaluation.id)); const seriesIds = /* @__PURE__ */ new Set(); - if (evaluationIds.size !== spec.evaluations.length) { - throw new Error("duplicate evaluation id"); - } + if (evaluationIds.size !== spec.evaluations.length) throw new Error("duplicate evaluation id"); for (const series of spec.series) { - if (seriesIds.has(series.id)) { - throw new Error(`duplicate series id: ${series.id}`); - } + if (seriesIds.has(series.id)) throw new Error(`duplicate series id: ${series.id}`); seriesIds.add(series.id); - if (!evaluationIds.has(series.evaluationId)) { - throw new Error(`unknown evaluation id: ${series.evaluationId}`); - } + if (!evaluationIds.has(series.evaluationId)) throw new Error(`unknown evaluation id: ${series.evaluationId}`); } for (const datum2 of spec.data) { - if (!seriesIds.has(datum2.seriesId)) { - throw new Error(`unknown series id: ${datum2.seriesId}`); - } + if (!seriesIds.has(datum2.seriesId)) throw new Error(`unknown series id: ${datum2.seriesId}`); } if (spec.type === "calibration") { for (const datum2 of spec.distribution ?? []) { - if (!seriesIds.has(datum2.seriesId)) { - throw new Error(`unknown distribution series id: ${datum2.seriesId}`); + if (!seriesIds.has(datum2.seriesId)) throw new Error(`unknown distribution series id: ${datum2.seriesId}`); + } + } + const populations = new Set(spec.evaluations.map((evaluation) => evaluation.population)); + for (const reference of spec.references ?? []) { + if ((reference.scope === "population" || reference.scope === "population_horizon") && !populations.has(reference.population)) { + throw new Error(`unknown reference population: ${reference.population}`); + } + } + if (spec.type === "decision_curve") { + const decisionCurve = spec; + const references = decisionCurve.references; + decisionCurve.evaluations.forEach((evaluation, index2) => { + const expectedId = `evaluation-${index2 + 1}`; + if (evaluation.id !== expectedId) throw new Error(`decision curve evaluation ids must be ordinal: expected ${expectedId}`); + const expectedDisplay = evaluation.model ?? evaluation.population; + const expectedRole = evaluation.model === void 0 ? "population" : "model"; + const series = decisionCurve.series[index2]; + if (!series || series.id !== `series-${index2 + 1}` || series.evaluationId !== evaluation.id) { + throw new Error("decision curve series must map one-to-one in evaluation order"); } + if (series.display.label !== expectedDisplay || series.display.group !== expectedDisplay || series.display.role !== expectedRole) { + throw new Error("decision curve display must follow evaluation semantics"); + } + }); + if (decisionCurve.series.length !== decisionCurve.evaluations.length) throw new Error("decision curve requires exactly one series per evaluation"); + const treatNone = references.filter((reference) => "benchmark" in reference && reference.benchmark === "treat_none"); + if (treatNone.length !== 1) throw new Error("decision curve requires exactly one Treat None reference"); + const treatAll = references.filter( + (reference) => "benchmark" in reference && reference.benchmark === "treat_all" + ); + const treatAllPopulations = /* @__PURE__ */ new Set(); + for (const reference of treatAll) { + if (treatAllPopulations.has(reference.population)) throw new Error(`duplicate Treat All population: ${reference.population}`); + treatAllPopulations.add(reference.population); + } + if (treatAllPopulations.size !== populations.size || [...populations].some((population) => !treatAllPopulations.has(population))) { + throw new Error("decision curve requires exactly one Treat All reference per population"); } } } @@ -18827,313 +18907,820 @@ function renderCalibration(spec) { return container; } -// src/render/performance-table.ts -var MISSING = "\u2014"; -function cell(document2, text2, className) { - const element = document2.createElement("td"); - element.textContent = text2; - if (className) element.className = className; - return element; +// src/render/v2.ts +var RTICHOKE_COLORS2 = [ + "#1b9e77", + "#d95f02", + "#7570b3", + "#e7298a", + "#07004D", + "#E6AB02", + "#FE5F55", + "#54494B", + "#006E90", + "#BC96E6" +]; +var RTICHOKE_BROWSER_THEME = { + width: 600, + height: 600, + margins: { top: 28, right: 28, bottom: 58, left: 66 }, + background: "#ffffff", + frame: { color: "#444444", width: 1 }, + typography: { + fontFamily: "Arial, Helvetica, sans-serif", + fontSize: 12, + axisTitleSize: 14, + axisTitleWeight: 400, + legendSize: 12 + }, + axis: { + color: "#444444", + tickSize: 5, + tickPadding: 7, + ticks: 6, + numberFormat: ".1f" + }, + colors: RTICHOKE_COLORS2, + line: { width: 2, dash: null }, + marker: { radius: 5, fill: null, stroke: "#ffffff", strokeWidth: 1.5 }, + reference: { color: "#BEBEBE", width: 2, dash: "4,4" }, + legend: { position: "top", swatchWidth: 15, columns: null }, + tip: { digits: 3 } +}; +function mergeTheme(options) { + const custom8 = options.theme ?? {}; + return { + ...RTICHOKE_BROWSER_THEME, + width: options.width ?? RTICHOKE_BROWSER_THEME.width, + height: options.height ?? RTICHOKE_BROWSER_THEME.height, + background: custom8.background ?? RTICHOKE_BROWSER_THEME.background, + colors: options.colors ?? RTICHOKE_BROWSER_THEME.colors, + margins: { ...RTICHOKE_BROWSER_THEME.margins, ...custom8.margins }, + frame: { ...RTICHOKE_BROWSER_THEME.frame, ...custom8.frame }, + typography: { ...RTICHOKE_BROWSER_THEME.typography, ...custom8.typography }, + axis: { ...RTICHOKE_BROWSER_THEME.axis, ...custom8.axis }, + line: { ...RTICHOKE_BROWSER_THEME.line, ...custom8.line }, + marker: { ...RTICHOKE_BROWSER_THEME.marker, ...custom8.marker }, + reference: { ...RTICHOKE_BROWSER_THEME.reference, ...custom8.reference }, + legend: { ...RTICHOKE_BROWSER_THEME.legend, ...custom8.legend }, + tip: { ...RTICHOKE_BROWSER_THEME.tip, ...custom8.tip } + }; } -function header(document2, text2) { - const element = document2.createElement("th"); - element.scope = "col"; - element.textContent = text2; - return element; +function resolveV2RenderOptions(groupsOrCount, options = {}) { + const groups2 = typeof groupsOrCount === "number" ? Array.from( + { length: groupsOrCount }, + (_, index2) => `group-${index2 + 1}` + ) : [...groupsOrCount]; + const theme = mergeTheme(options); + if (!Number.isFinite(theme.width) || theme.width <= 0 || !Number.isFinite(theme.height) || theme.height <= 0) + throw new Error( + "Renderer width and height must be positive finite numbers" + ); + if (!Number.isInteger(theme.tip.digits) || theme.tip.digits < 0 || theme.tip.digits > 20) + throw new Error("Renderer tip digits must be an integer between 0 and 20"); + const colors = groups2.length <= 1 ? ["#000000"] : [...theme.colors]; + if (colors.length < groups2.length) + throw new Error( + "Renderer colors must contain at least one color per display group" + ); + const assigned = colors.slice(0, Math.max(groups2.length, 1)); + return { + theme: { ...theme, colors: assigned }, + groups: groups2, + colors: assigned, + colorByGroup: new Map( + groups2.map((group2, index2) => [group2, assigned[index2]]) + ), + showLegend: groups2.length > 1 + }; } -function formatNumber2(value) { - return new Intl.NumberFormat("en-US", { maximumSignificantDigits: 6 }).format(value); +function displayBySeries(spec) { + return new Map(spec.series.map((series) => [series.id, series.display])); } -function formatMetric(value) { - if (!value || value.estimate === null) return MISSING; - const estimate = formatNumber2(value.estimate); - if (value.lower === void 0 && value.upper === void 0) return estimate; - const lower2 = value.lower === void 0 || value.lower === null ? MISSING : formatNumber2(value.lower); - const upper = value.upper === void 0 || value.upper === null ? MISSING : formatNumber2(value.upper); - return `${estimate} [${lower2}, ${upper}]`; +function displayGroups(spec) { + return [...new Set(spec.series.map((series) => series.display.group))]; } -function formatOperatingPoint(type2, value) { - return type2 === "ppcr" ? `PPCR ${formatNumber2(value)}` : `Threshold ${formatNumber2(value)}`; +function seriesRenderData(spec, data) { + const displays = displayBySeries(spec); + return data.map((datum2) => ({ + ...datum2, + group: displays.get(datum2.seriesId).group, + label: displays.get(datum2.seriesId).label + })); } -function formatContext(context) { - if (!context) return MISSING; - const parts = []; - if (context.censoringHeuristic) parts.push(`censoring: ${context.censoringHeuristic}`); - if (context.competingEventHeuristic) parts.push(`competing event: ${context.competingEventHeuristic}`); - return parts.length ? parts.join("; ") : MISSING; +function tooltip(digits, fields) { + return fields.filter(([, value]) => value !== void 0).map( + ([label, value]) => `${label}: ${typeof value === "number" ? value.toFixed(digits) : String(value)}` + ).join("\n"); } -function renderPerformanceTable(spec, document2 = globalThis.document) { - assertPerformanceTableReferentialIntegrity(spec); - const root2 = document2.createElement("div"); - root2.className = "rtichoke-performance-table"; - if (spec.title) { - const title = document2.createElement("div"); - title.className = "rtichoke-performance-table__title"; - title.textContent = spec.title; - root2.append(title); - } - const table = document2.createElement("table"); - table.className = "rtichoke-performance-table__table"; - const head = document2.createElement("thead"); - const headRow = document2.createElement("tr"); - for (const label of ["Model", "Population", "Evaluation", "Operating point", "Horizon", "Context"]) { - headRow.append(header(document2, label)); - } - for (const metric of spec.metrics) headRow.append(header(document2, metric.label)); - head.append(headRow); - table.append(head); - const evaluations = new Map(spec.evaluations.map((evaluation) => [evaluation.id, evaluation])); - const body = document2.createElement("tbody"); - for (const row of spec.rows) { - const evaluation = evaluations.get(row.evaluationId); - const tr = document2.createElement("tr"); - tr.dataset.evaluationId = row.evaluationId; - tr.append(cell(document2, evaluation.model ?? MISSING, "rtichoke-performance-table__model")); - tr.append(cell(document2, evaluation.population, "rtichoke-performance-table__population")); - tr.append(cell(document2, evaluation.label ?? evaluation.id, "rtichoke-performance-table__evaluation")); - tr.append(cell(document2, formatOperatingPoint(row.operatingPoint.type, row.operatingPoint.value))); - tr.append(cell(document2, row.horizon === void 0 ? MISSING : formatNumber2(row.horizon))); - tr.append(cell(document2, formatContext(row.context))); - const values2 = new Map(row.values.map((value) => [value.metricId, value])); - for (const metric of spec.metrics) { - const td = cell(document2, formatMetric(values2.get(metric.id)), "rtichoke-performance-table__metric"); - td.dataset.metricId = metric.id; - tr.append(td); +function basePlotOptions(resolved, spec) { + const { theme } = resolved; + const labelByGroup = new Map( + spec.series.map((series) => [series.display.group, series.display.label]) + ); + return { + width: theme.width, + height: theme.height, + marginTop: theme.margins.top, + marginRight: theme.margins.right, + marginBottom: theme.margins.bottom, + marginLeft: theme.margins.left, + style: { + background: theme.background, + color: theme.axis.color, + fontFamily: theme.typography.fontFamily, + fontSize: `${theme.typography.fontSize}px` + }, + color: { + legend: resolved.showLegend, + domain: resolved.groups, + range: resolved.colors, + tickFormat: (group2) => labelByGroup.get(group2) ?? group2 } - body.append(tr); - } - table.append(body); - root2.append(table); - return root2; + }; } - -// node_modules/@sinclair/typebox/build/esm/errors/function.mjs -function DefaultErrorFunction(error) { - switch (error.errorType) { - case ValueErrorType.ArrayContains: - return "Expected array to contain at least one matching value"; - case ValueErrorType.ArrayMaxContains: - return `Expected array to contain no more than ${error.schema.maxContains} matching values`; - case ValueErrorType.ArrayMinContains: - return `Expected array to contain at least ${error.schema.minContains} matching values`; - case ValueErrorType.ArrayMaxItems: - return `Expected array length to be less or equal to ${error.schema.maxItems}`; - case ValueErrorType.ArrayMinItems: - return `Expected array length to be greater or equal to ${error.schema.minItems}`; - case ValueErrorType.ArrayUniqueItems: - return "Expected array elements to be unique"; - case ValueErrorType.Array: - return "Expected array"; - case ValueErrorType.AsyncIterator: - return "Expected AsyncIterator"; - case ValueErrorType.BigIntExclusiveMaximum: - return `Expected bigint to be less than ${error.schema.exclusiveMaximum}`; - case ValueErrorType.BigIntExclusiveMinimum: - return `Expected bigint to be greater than ${error.schema.exclusiveMinimum}`; - case ValueErrorType.BigIntMaximum: - return `Expected bigint to be less or equal to ${error.schema.maximum}`; - case ValueErrorType.BigIntMinimum: - return `Expected bigint to be greater or equal to ${error.schema.minimum}`; - case ValueErrorType.BigIntMultipleOf: - return `Expected bigint to be a multiple of ${error.schema.multipleOf}`; - case ValueErrorType.BigInt: - return "Expected bigint"; - case ValueErrorType.Boolean: - return "Expected boolean"; - case ValueErrorType.DateExclusiveMinimumTimestamp: - return `Expected Date timestamp to be greater than ${error.schema.exclusiveMinimumTimestamp}`; - case ValueErrorType.DateExclusiveMaximumTimestamp: - return `Expected Date timestamp to be less than ${error.schema.exclusiveMaximumTimestamp}`; - case ValueErrorType.DateMinimumTimestamp: - return `Expected Date timestamp to be greater or equal to ${error.schema.minimumTimestamp}`; - case ValueErrorType.DateMaximumTimestamp: - return `Expected Date timestamp to be less or equal to ${error.schema.maximumTimestamp}`; - case ValueErrorType.DateMultipleOfTimestamp: - return `Expected Date timestamp to be a multiple of ${error.schema.multipleOfTimestamp}`; - case ValueErrorType.Date: - return "Expected Date"; - case ValueErrorType.Function: - return "Expected function"; - case ValueErrorType.IntegerExclusiveMaximum: - return `Expected integer to be less than ${error.schema.exclusiveMaximum}`; - case ValueErrorType.IntegerExclusiveMinimum: - return `Expected integer to be greater than ${error.schema.exclusiveMinimum}`; - case ValueErrorType.IntegerMaximum: - return `Expected integer to be less or equal to ${error.schema.maximum}`; - case ValueErrorType.IntegerMinimum: - return `Expected integer to be greater or equal to ${error.schema.minimum}`; - case ValueErrorType.IntegerMultipleOf: - return `Expected integer to be a multiple of ${error.schema.multipleOf}`; - case ValueErrorType.Integer: - return "Expected integer"; - case ValueErrorType.IntersectUnevaluatedProperties: - return "Unexpected property"; - case ValueErrorType.Intersect: - return "Expected all values to match"; - case ValueErrorType.Iterator: - return "Expected Iterator"; - case ValueErrorType.Literal: - return `Expected ${typeof error.schema.const === "string" ? `'${error.schema.const}'` : error.schema.const}`; - case ValueErrorType.Never: - return "Never"; - case ValueErrorType.Not: - return "Value should not match"; - case ValueErrorType.Null: - return "Expected null"; - case ValueErrorType.NumberExclusiveMaximum: - return `Expected number to be less than ${error.schema.exclusiveMaximum}`; - case ValueErrorType.NumberExclusiveMinimum: - return `Expected number to be greater than ${error.schema.exclusiveMinimum}`; - case ValueErrorType.NumberMaximum: - return `Expected number to be less or equal to ${error.schema.maximum}`; - case ValueErrorType.NumberMinimum: - return `Expected number to be greater or equal to ${error.schema.minimum}`; - case ValueErrorType.NumberMultipleOf: - return `Expected number to be a multiple of ${error.schema.multipleOf}`; - case ValueErrorType.Number: - return "Expected number"; - case ValueErrorType.Object: - return "Expected object"; - case ValueErrorType.ObjectAdditionalProperties: - return "Unexpected property"; - case ValueErrorType.ObjectMaxProperties: - return `Expected object to have no more than ${error.schema.maxProperties} properties`; - case ValueErrorType.ObjectMinProperties: - return `Expected object to have at least ${error.schema.minProperties} properties`; - case ValueErrorType.ObjectRequiredProperty: - return "Expected required property"; - case ValueErrorType.Promise: - return "Expected Promise"; - case ValueErrorType.RegExp: - return "Expected string to match regular expression"; - case ValueErrorType.StringFormatUnknown: - return `Unknown format '${error.schema.format}'`; - case ValueErrorType.StringFormat: - return `Expected string to match '${error.schema.format}' format`; - case ValueErrorType.StringMaxLength: - return `Expected string length less or equal to ${error.schema.maxLength}`; - case ValueErrorType.StringMinLength: - return `Expected string length greater or equal to ${error.schema.minLength}`; - case ValueErrorType.StringPattern: - return `Expected string to match '${error.schema.pattern}'`; - case ValueErrorType.String: - return "Expected string"; - case ValueErrorType.Symbol: - return "Expected symbol"; - case ValueErrorType.TupleLength: - return `Expected tuple to have ${error.schema.maxItems || 0} elements`; - case ValueErrorType.Tuple: - return "Expected tuple"; - case ValueErrorType.Uint8ArrayMaxByteLength: - return `Expected byte length less or equal to ${error.schema.maxByteLength}`; - case ValueErrorType.Uint8ArrayMinByteLength: - return `Expected byte length greater or equal to ${error.schema.minByteLength}`; - case ValueErrorType.Uint8Array: - return "Expected Uint8Array"; - case ValueErrorType.Undefined: - return "Expected undefined"; - case ValueErrorType.Union: - return "Expected union value"; - case ValueErrorType.Void: - return "Expected void"; - case ValueErrorType.Kind: - return `Expected kind '${error.schema[Kind]}'`; - default: - return "Unknown error type"; - } +function axisOptions2(theme, label, domain) { + return { + label, + domain, + grid: false, + line: true, + ticks: theme.axis.ticks, + tickSize: theme.axis.tickSize, + tickPadding: theme.axis.tickPadding, + tickFormat: theme.axis.numberFormat + }; } -var errorFunction = DefaultErrorFunction; -function GetErrorFunction() { - return errorFunction; +function frameMark(theme) { + return frame2({ + stroke: theme.frame.color, + strokeWidth: theme.frame.width + }); } - -// node_modules/@sinclair/typebox/build/esm/value/deref/deref.mjs -var TypeDereferenceError = class extends TypeBoxError { - constructor(schema) { - super(`Unable to dereference schema with $id '${schema.$ref}'`); - this.schema = schema; +function referenceMarks(spec, theme) { + const style = { + stroke: theme.reference.color, + strokeWidth: theme.reference.width, + strokeDasharray: theme.reference.dash + }; + const marks2 = []; + for (const reference of spec.references ?? []) { + if (reference.type === "identity") + marks2.push( + line( + [ + { x: 0, y: 0 }, + { x: 1, y: 1 } + ], + { x: "x", y: "y", ...style, title: reference.label } + ) + ); + else if (reference.type === "horizontal" && reference.value !== void 0) + marks2.push( + ruleY([reference.value], { ...style, title: reference.label }) + ); + else if (reference.type === "path" && reference.points) + marks2.push( + line(reference.points, { + x: "x", + y: "y", + ...style, + title: reference.label + }) + ); } -}; -function Resolve(schema, references) { - const target = references.find((target2) => target2.$id === schema.$ref); - if (target === void 0) - throw new TypeDereferenceError(schema); - return Deref(target, references); -} -function Pushref(schema, references) { - if (!IsString2(schema.$id) || references.some((target) => target.$id === schema.$id)) - return references; - references.push(schema); - return references; + return marks2; } -function Deref(schema, references) { - return schema[Kind] === "This" || schema[Kind] === "Ref" ? Resolve(schema, references) : schema; +function finishMarks(marks2, theme) { + marks2.push(frameMark(theme)); + return marks2; } - -// node_modules/@sinclair/typebox/build/esm/value/hash/hash.mjs -var ValueHashError = class extends TypeBoxError { - constructor(value) { - super(`Unable to hash value`); - this.value = value; - } -}; -var ByteMarker; -(function(ByteMarker2) { - ByteMarker2[ByteMarker2["Undefined"] = 0] = "Undefined"; - ByteMarker2[ByteMarker2["Null"] = 1] = "Null"; - ByteMarker2[ByteMarker2["Boolean"] = 2] = "Boolean"; - ByteMarker2[ByteMarker2["Number"] = 3] = "Number"; - ByteMarker2[ByteMarker2["String"] = 4] = "String"; - ByteMarker2[ByteMarker2["Object"] = 5] = "Object"; - ByteMarker2[ByteMarker2["Array"] = 6] = "Array"; - ByteMarker2[ByteMarker2["Date"] = 7] = "Date"; - ByteMarker2[ByteMarker2["Uint8Array"] = 8] = "Uint8Array"; - ByteMarker2[ByteMarker2["Symbol"] = 9] = "Symbol"; - ByteMarker2[ByteMarker2["BigInt"] = 10] = "BigInt"; -})(ByteMarker || (ByteMarker = {})); -var Accumulator = BigInt("14695981039346656037"); -var [Prime, Size] = [BigInt("1099511628211"), BigInt( - "18446744073709551616" - /* 2 ^ 64 */ -)]; -var Bytes = Array.from({ length: 256 }).map((_, i) => BigInt(i)); -var F64 = new Float64Array(1); -var F64In = new DataView(F64.buffer); -var F64Out = new Uint8Array(F64.buffer); -function* NumberToBytes(value) { - const byteCount = value === 0 ? 1 : Math.ceil(Math.floor(Math.log2(value) + 1) / 8); - for (let i = 0; i < byteCount; i++) { - yield value >> 8 * (byteCount - 1 - i) & 255; +function themedPlot(options, theme) { + const plot2 = plot(options); + for (const label of plot2.querySelectorAll( + '[aria-label$="axis label"] text' + )) { + label.style.fontSize = `${theme.typography.axisTitleSize}px`; + label.style.fontWeight = String(theme.typography.axisTitleWeight); } -} -function ArrayType2(value) { - FNV1A64(ByteMarker.Array); - for (const item of value) { - Visit4(item); + for (const frame3 of plot2.querySelectorAll( + '[aria-label="frame"]' + )) { + frame3.setAttribute("stroke", theme.frame.color); } -} -function BooleanType(value) { - FNV1A64(ByteMarker.Boolean); - FNV1A64(value ? 1 : 0); -} -function BigIntType(value) { - FNV1A64(ByteMarker.BigInt); - F64In.setBigInt64(0, value); - for (const byte of F64Out) { - FNV1A64(byte); + if (plot2 instanceof HTMLElement) { + plot2.style.fontSize = `${theme.typography.legendSize}px`; + for (const swatch of plot2.querySelectorAll( + 'svg[width="15"]' + )) { + swatch.setAttribute("width", String(theme.legend.swatchWidth)); + } } + return plot2; } -function DateType2(value) { - FNV1A64(ByteMarker.Date); - Visit4(value.getTime()); -} -function NullType(value) { - FNV1A64(ByteMarker.Null); -} -function NumberType(value) { - FNV1A64(ByteMarker.Number); - F64In.setFloat64(0, value); - for (const byte of F64Out) { +function renderRocV2(spec, options = {}) { + assertV2ReferentialIntegrity(spec); + const resolved = resolveV2RenderOptions(displayGroups(spec), options); + const { theme } = resolved; + const data = seriesRenderData(spec, spec.data).map((datum2) => ({ + ...datum2, + false_positive_rate: 1 - datum2.specificity, + title: tooltip(theme.tip.digits, [ + ["Series", datum2.label], + ["Cutoff", datum2.cutoff], + ["Sensitivity", datum2.sensitivity], + ["Specificity", datum2.specificity] + ]) + })); + const marks2 = referenceMarks(spec, theme); + marks2.push( + line(data, { + x: "false_positive_rate", + y: "sensitivity", + z: "seriesId", + stroke: "group", + strokeWidth: theme.line.width, + strokeDasharray: theme.line.dash ?? void 0, + title: "title", + tip: true + }) + ); + return themedPlot( + { + ...basePlotOptions(resolved, spec), + x: axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), + y: axisOptions2(theme, spec.yAxis.label, spec.yAxis.domain), + marks: finishMarks(marks2, theme) + }, + theme + ); +} +function renderCalibrationV2(spec, options = {}) { + assertV2ReferentialIntegrity(spec); + const resolved = resolveV2RenderOptions(displayGroups(spec), options); + const { theme } = resolved; + const data = seriesRenderData(spec, spec.data).map((datum2) => ({ + ...datum2, + title: tooltip(theme.tip.digits, [ + ["Series", datum2.label], + ["Predicted", datum2.predicted], + ["Observed", datum2.observed], + ["Events", datum2.events], + ["Total", datum2.total] + ]) + })); + const marks2 = referenceMarks(spec, theme); + marks2.push( + line(data, { + x: "predicted", + y: "observed", + z: "seriesId", + stroke: "group", + strokeWidth: theme.line.width, + strokeDasharray: theme.line.dash ?? void 0, + title: "title", + tip: true + }) + ); + const discrete = data.filter((datum2) => datum2.method === "discrete"); + if (discrete.length > 0) + marks2.push( + dot(discrete, { + x: "predicted", + y: "observed", + fill: theme.marker.fill ?? "group", + stroke: theme.marker.stroke, + strokeWidth: theme.marker.strokeWidth, + r: theme.marker.radius, + title: "title", + tip: true + }) + ); + const hasDistribution = (spec.distribution?.length ?? 0) > 0; + const mainHeight = hasDistribution ? Math.round(theme.height * 0.8) : theme.height; + const calibration = themedPlot( + { + ...basePlotOptions(resolved, spec), + height: mainHeight, + marginBottom: hasDistribution ? 8 : theme.margins.bottom, + x: hasDistribution ? { + ...axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), + axis: null, + label: null + } : axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), + y: axisOptions2(theme, spec.yAxis.label, spec.yAxis.domain), + marks: finishMarks(marks2, theme) + }, + theme + ); + if (!hasDistribution || !spec.distribution) return calibration; + const distribution = seriesRenderData(spec, spec.distribution).map( + (datum2) => ({ + ...datum2, + title: tooltip(theme.tip.digits, [ + ["Series", datum2.label], + ["Midpoint", datum2.midpoint], + ["Count", datum2.count] + ]) + }) + ); + const histogram = themedPlot( + { + ...basePlotOptions(resolved, spec), + height: theme.height - mainHeight, + marginTop: 0, + marginBottom: theme.margins.bottom, + x: axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), + y: { + label: null, + grid: false, + ticks: 3, + tickSize: theme.axis.tickSize, + tickPadding: theme.axis.tickPadding + }, + color: { legend: false, domain: resolved.groups, range: resolved.colors }, + marks: finishMarks( + [ + rectY(distribution, { + x1: (datum2) => datum2.midpoint - datum2.binWidth / 2, + x2: (datum2) => datum2.midpoint + datum2.binWidth / 2, + y: "count", + fill: "group", + fillOpacity: 1 / Math.max(resolved.groups.length, 1), + title: "title", + tip: true + }) + ], + theme + ) + }, + theme + ); + const container = document.createElement("div"); + container.className = "rtichoke-calibration"; + container.style.width = `${theme.width}px`; + container.style.maxWidth = "100%"; + container.append(calibration, histogram); + return container; +} +function renderLineChart(spec, options, x2, y2) { + assertV2ReferentialIntegrity(spec); + const resolved = resolveV2RenderOptions(displayGroups(spec), options); + const { theme } = resolved; + const data = seriesRenderData( + spec, + spec.data + ).map((datum2) => { + const values2 = datum2; + const yLabel = y2 === "ppv" ? "PPV" : y2 === "sensitivity" ? "Sensitivity" : "Lift"; + return { + ...datum2, + title: tooltip(theme.tip.digits, [ + ["Series", datum2.label], + ["Cutoff", values2.cutoff], + [x2 === "ppcr" ? "PPCR" : "Sensitivity", values2[x2]], + [yLabel, values2[y2]] + ]) + }; + }); + const marks2 = referenceMarks(spec, theme); + marks2.push( + line(data, { + x: x2, + y: y2, + z: "seriesId", + stroke: "group", + strokeWidth: theme.line.width, + strokeDasharray: theme.line.dash ?? void 0, + title: "title", + tip: true + }) + ); + return themedPlot( + { + ...basePlotOptions(resolved, spec), + x: axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), + y: axisOptions2(theme, spec.yAxis.label, spec.yAxis.domain), + marks: finishMarks(marks2, theme) + }, + theme + ); +} +function horizons(spec) { + return [ + ...new Set( + spec.series.map((series) => series.horizon).filter((horizon) => horizon !== void 0) + ) + ]; +} +function selectHorizonSpec(spec, horizon) { + const series = spec.series.filter( + (item) => item.horizon === void 0 || item.horizon === horizon + ); + const seriesIds = new Set(series.map((item) => item.id)); + return { + ...spec, + series, + data: spec.data.filter((datum2) => seriesIds.has(datum2.seriesId)), + references: spec.references?.filter( + (reference) => reference.scope !== "population_horizon" || reference.horizon === horizon + ) + }; +} +function renderHorizonLineChart(spec, options, x2, y2) { + const availableHorizons = horizons(spec); + if (availableHorizons.length <= 1) return renderLineChart(spec, options, x2, y2); + const container = document.createElement("div"); + container.className = "rtichoke-horizon-chart"; + const control = document.createElement("label"); + control.textContent = "Fixed Time Horizon: "; + const select = document.createElement("select"); + select.setAttribute("aria-label", "Fixed Time Horizon"); + for (const horizon of availableHorizons) { + const option = document.createElement("option"); + option.value = String(horizon); + option.textContent = String(horizon); + select.append(option); + } + control.append(select); + const chart = document.createElement("div"); + const draw = (horizon) => { + chart.replaceChildren( + renderLineChart(selectHorizonSpec(spec, horizon), options, x2, y2) + ); + }; + select.addEventListener("change", () => draw(Number(select.value))); + container.append(control, chart); + draw(availableHorizons[0]); + return container; +} +function renderPrecisionRecallV2(spec, options = {}) { + return renderLineChart(spec, options, "sensitivity", "ppv"); +} +function renderGainsV2(spec, options = {}) { + return renderHorizonLineChart(spec, options, "ppcr", "sensitivity"); +} +function renderLiftV2(spec, options = {}) { + return renderHorizonLineChart(spec, options, "ppcr", "lift"); +} + +// src/render/decision-curve.ts +function renderDecisionCurveV2(spec, options = {}) { + assertV2ReferentialIntegrity(spec); + const groups2 = [...new Set(spec.series.map((series) => series.display.group))]; + const resolved = resolveV2RenderOptions(groups2, options); + const { theme } = resolved; + const displayBySeries2 = new Map(spec.series.map((series) => [series.id, series.display])); + const labelByGroup = new Map(spec.series.map((series) => [series.display.group, series.display.label])); + const data = spec.data.map((datum2) => ({ + ...datum2, + group: displayBySeries2.get(datum2.seriesId).group, + label: displayBySeries2.get(datum2.seriesId).label, + title: `Series: ${displayBySeries2.get(datum2.seriesId).label} +Threshold: ${datum2.threshold.toFixed(theme.tip.digits)} +Net Benefit: ${datum2.netBenefit.toFixed(theme.tip.digits)}` + })); + const referenceStyle = { stroke: theme.reference.color, strokeWidth: theme.reference.width, strokeDasharray: theme.reference.dash }; + const marks2 = []; + for (const reference of spec.references) { + if (reference.benchmark === "treat_none") { + marks2.push(ruleY([0], { ...referenceStyle, title: reference.label ?? "Treat None" })); + } else { + marks2.push(line(reference.points, { x: "x", y: "y", ...referenceStyle, title: reference.label ?? `Treat All \u2014 ${reference.population}` })); + } + } + marks2.push( + line(data, { x: "threshold", y: "netBenefit", z: "seriesId", stroke: "group", strokeWidth: theme.line.width, strokeDasharray: theme.line.dash ?? void 0, title: "title", tip: true }), + frame2({ stroke: theme.frame.color, strokeWidth: theme.frame.width }) + ); + const axis2 = (label, domain) => ({ label, domain, grid: false, line: true, ticks: theme.axis.ticks, tickSize: theme.axis.tickSize, tickPadding: theme.axis.tickPadding, tickFormat: theme.axis.numberFormat }); + const plot2 = plot({ + width: theme.width, + height: theme.height, + marginTop: theme.margins.top, + marginRight: theme.margins.right, + marginBottom: theme.margins.bottom, + marginLeft: theme.margins.left, + style: { background: theme.background, color: theme.axis.color, fontFamily: theme.typography.fontFamily, fontSize: `${theme.typography.fontSize}px` }, + color: { legend: resolved.showLegend, domain: resolved.groups, range: resolved.colors, tickFormat: (group2) => labelByGroup.get(group2) ?? group2 }, + x: axis2(spec.xAxis.label, spec.xAxis.domain), + y: axis2(spec.yAxis.label, spec.yAxis.domain), + marks: marks2 + }); + for (const label of plot2.querySelectorAll('[aria-label$="axis label"] text')) { + label.style.fontSize = `${theme.typography.axisTitleSize}px`; + label.style.fontWeight = String(theme.typography.axisTitleWeight); + } + return plot2; +} + +// src/render/performance-table.ts +var MISSING = "\u2014"; +function cell(document2, text2, className) { + const element = document2.createElement("td"); + element.textContent = text2; + if (className) element.className = className; + return element; +} +function header(document2, text2) { + const element = document2.createElement("th"); + element.scope = "col"; + element.textContent = text2; + return element; +} +function formatNumber2(value) { + return new Intl.NumberFormat("en-US", { maximumSignificantDigits: 6 }).format(value); +} +function formatMetric(value) { + if (!value || value.estimate === null) return MISSING; + const estimate = formatNumber2(value.estimate); + if (value.lower === void 0 && value.upper === void 0) return estimate; + const lower2 = value.lower === void 0 || value.lower === null ? MISSING : formatNumber2(value.lower); + const upper = value.upper === void 0 || value.upper === null ? MISSING : formatNumber2(value.upper); + return `${estimate} [${lower2}, ${upper}]`; +} +function formatOperatingPoint(type2, value) { + return type2 === "ppcr" ? `PPCR ${formatNumber2(value)}` : `Threshold ${formatNumber2(value)}`; +} +function formatContext(context) { + if (!context) return MISSING; + const parts = []; + if (context.censoringHeuristic) parts.push(`censoring: ${context.censoringHeuristic}`); + if (context.competingEventHeuristic) parts.push(`competing event: ${context.competingEventHeuristic}`); + return parts.length ? parts.join("; ") : MISSING; +} +function renderPerformanceTable(spec, document2 = globalThis.document) { + assertPerformanceTableReferentialIntegrity(spec); + const root2 = document2.createElement("div"); + root2.className = "rtichoke-performance-table"; + if (spec.title) { + const title = document2.createElement("div"); + title.className = "rtichoke-performance-table__title"; + title.textContent = spec.title; + root2.append(title); + } + const table = document2.createElement("table"); + table.className = "rtichoke-performance-table__table"; + const head = document2.createElement("thead"); + const headRow = document2.createElement("tr"); + for (const label of ["Model", "Population", "Evaluation", "Operating point", "Horizon", "Context"]) { + headRow.append(header(document2, label)); + } + for (const metric of spec.metrics) headRow.append(header(document2, metric.label)); + head.append(headRow); + table.append(head); + const evaluations = new Map(spec.evaluations.map((evaluation) => [evaluation.id, evaluation])); + const body = document2.createElement("tbody"); + for (const row of spec.rows) { + const evaluation = evaluations.get(row.evaluationId); + const tr = document2.createElement("tr"); + tr.dataset.evaluationId = row.evaluationId; + tr.append(cell(document2, evaluation.model ?? MISSING, "rtichoke-performance-table__model")); + tr.append(cell(document2, evaluation.population, "rtichoke-performance-table__population")); + tr.append(cell(document2, evaluation.label ?? evaluation.id, "rtichoke-performance-table__evaluation")); + tr.append(cell(document2, formatOperatingPoint(row.operatingPoint.type, row.operatingPoint.value))); + tr.append(cell(document2, row.horizon === void 0 ? MISSING : formatNumber2(row.horizon))); + tr.append(cell(document2, formatContext(row.context))); + const values2 = new Map(row.values.map((value) => [value.metricId, value])); + for (const metric of spec.metrics) { + const td = cell(document2, formatMetric(values2.get(metric.id)), "rtichoke-performance-table__metric"); + td.dataset.metricId = metric.id; + tr.append(td); + } + body.append(tr); + } + table.append(body); + root2.append(table); + return root2; +} + +// node_modules/@sinclair/typebox/build/esm/errors/function.mjs +function DefaultErrorFunction(error) { + switch (error.errorType) { + case ValueErrorType.ArrayContains: + return "Expected array to contain at least one matching value"; + case ValueErrorType.ArrayMaxContains: + return `Expected array to contain no more than ${error.schema.maxContains} matching values`; + case ValueErrorType.ArrayMinContains: + return `Expected array to contain at least ${error.schema.minContains} matching values`; + case ValueErrorType.ArrayMaxItems: + return `Expected array length to be less or equal to ${error.schema.maxItems}`; + case ValueErrorType.ArrayMinItems: + return `Expected array length to be greater or equal to ${error.schema.minItems}`; + case ValueErrorType.ArrayUniqueItems: + return "Expected array elements to be unique"; + case ValueErrorType.Array: + return "Expected array"; + case ValueErrorType.AsyncIterator: + return "Expected AsyncIterator"; + case ValueErrorType.BigIntExclusiveMaximum: + return `Expected bigint to be less than ${error.schema.exclusiveMaximum}`; + case ValueErrorType.BigIntExclusiveMinimum: + return `Expected bigint to be greater than ${error.schema.exclusiveMinimum}`; + case ValueErrorType.BigIntMaximum: + return `Expected bigint to be less or equal to ${error.schema.maximum}`; + case ValueErrorType.BigIntMinimum: + return `Expected bigint to be greater or equal to ${error.schema.minimum}`; + case ValueErrorType.BigIntMultipleOf: + return `Expected bigint to be a multiple of ${error.schema.multipleOf}`; + case ValueErrorType.BigInt: + return "Expected bigint"; + case ValueErrorType.Boolean: + return "Expected boolean"; + case ValueErrorType.DateExclusiveMinimumTimestamp: + return `Expected Date timestamp to be greater than ${error.schema.exclusiveMinimumTimestamp}`; + case ValueErrorType.DateExclusiveMaximumTimestamp: + return `Expected Date timestamp to be less than ${error.schema.exclusiveMaximumTimestamp}`; + case ValueErrorType.DateMinimumTimestamp: + return `Expected Date timestamp to be greater or equal to ${error.schema.minimumTimestamp}`; + case ValueErrorType.DateMaximumTimestamp: + return `Expected Date timestamp to be less or equal to ${error.schema.maximumTimestamp}`; + case ValueErrorType.DateMultipleOfTimestamp: + return `Expected Date timestamp to be a multiple of ${error.schema.multipleOfTimestamp}`; + case ValueErrorType.Date: + return "Expected Date"; + case ValueErrorType.Function: + return "Expected function"; + case ValueErrorType.IntegerExclusiveMaximum: + return `Expected integer to be less than ${error.schema.exclusiveMaximum}`; + case ValueErrorType.IntegerExclusiveMinimum: + return `Expected integer to be greater than ${error.schema.exclusiveMinimum}`; + case ValueErrorType.IntegerMaximum: + return `Expected integer to be less or equal to ${error.schema.maximum}`; + case ValueErrorType.IntegerMinimum: + return `Expected integer to be greater or equal to ${error.schema.minimum}`; + case ValueErrorType.IntegerMultipleOf: + return `Expected integer to be a multiple of ${error.schema.multipleOf}`; + case ValueErrorType.Integer: + return "Expected integer"; + case ValueErrorType.IntersectUnevaluatedProperties: + return "Unexpected property"; + case ValueErrorType.Intersect: + return "Expected all values to match"; + case ValueErrorType.Iterator: + return "Expected Iterator"; + case ValueErrorType.Literal: + return `Expected ${typeof error.schema.const === "string" ? `'${error.schema.const}'` : error.schema.const}`; + case ValueErrorType.Never: + return "Never"; + case ValueErrorType.Not: + return "Value should not match"; + case ValueErrorType.Null: + return "Expected null"; + case ValueErrorType.NumberExclusiveMaximum: + return `Expected number to be less than ${error.schema.exclusiveMaximum}`; + case ValueErrorType.NumberExclusiveMinimum: + return `Expected number to be greater than ${error.schema.exclusiveMinimum}`; + case ValueErrorType.NumberMaximum: + return `Expected number to be less or equal to ${error.schema.maximum}`; + case ValueErrorType.NumberMinimum: + return `Expected number to be greater or equal to ${error.schema.minimum}`; + case ValueErrorType.NumberMultipleOf: + return `Expected number to be a multiple of ${error.schema.multipleOf}`; + case ValueErrorType.Number: + return "Expected number"; + case ValueErrorType.Object: + return "Expected object"; + case ValueErrorType.ObjectAdditionalProperties: + return "Unexpected property"; + case ValueErrorType.ObjectMaxProperties: + return `Expected object to have no more than ${error.schema.maxProperties} properties`; + case ValueErrorType.ObjectMinProperties: + return `Expected object to have at least ${error.schema.minProperties} properties`; + case ValueErrorType.ObjectRequiredProperty: + return "Expected required property"; + case ValueErrorType.Promise: + return "Expected Promise"; + case ValueErrorType.RegExp: + return "Expected string to match regular expression"; + case ValueErrorType.StringFormatUnknown: + return `Unknown format '${error.schema.format}'`; + case ValueErrorType.StringFormat: + return `Expected string to match '${error.schema.format}' format`; + case ValueErrorType.StringMaxLength: + return `Expected string length less or equal to ${error.schema.maxLength}`; + case ValueErrorType.StringMinLength: + return `Expected string length greater or equal to ${error.schema.minLength}`; + case ValueErrorType.StringPattern: + return `Expected string to match '${error.schema.pattern}'`; + case ValueErrorType.String: + return "Expected string"; + case ValueErrorType.Symbol: + return "Expected symbol"; + case ValueErrorType.TupleLength: + return `Expected tuple to have ${error.schema.maxItems || 0} elements`; + case ValueErrorType.Tuple: + return "Expected tuple"; + case ValueErrorType.Uint8ArrayMaxByteLength: + return `Expected byte length less or equal to ${error.schema.maxByteLength}`; + case ValueErrorType.Uint8ArrayMinByteLength: + return `Expected byte length greater or equal to ${error.schema.minByteLength}`; + case ValueErrorType.Uint8Array: + return "Expected Uint8Array"; + case ValueErrorType.Undefined: + return "Expected undefined"; + case ValueErrorType.Union: + return "Expected union value"; + case ValueErrorType.Void: + return "Expected void"; + case ValueErrorType.Kind: + return `Expected kind '${error.schema[Kind]}'`; + default: + return "Unknown error type"; + } +} +var errorFunction = DefaultErrorFunction; +function GetErrorFunction() { + return errorFunction; +} + +// node_modules/@sinclair/typebox/build/esm/value/deref/deref.mjs +var TypeDereferenceError = class extends TypeBoxError { + constructor(schema) { + super(`Unable to dereference schema with $id '${schema.$ref}'`); + this.schema = schema; + } +}; +function Resolve(schema, references) { + const target = references.find((target2) => target2.$id === schema.$ref); + if (target === void 0) + throw new TypeDereferenceError(schema); + return Deref(target, references); +} +function Pushref(schema, references) { + if (!IsString2(schema.$id) || references.some((target) => target.$id === schema.$id)) + return references; + references.push(schema); + return references; +} +function Deref(schema, references) { + return schema[Kind] === "This" || schema[Kind] === "Ref" ? Resolve(schema, references) : schema; +} + +// node_modules/@sinclair/typebox/build/esm/value/hash/hash.mjs +var ValueHashError = class extends TypeBoxError { + constructor(value) { + super(`Unable to hash value`); + this.value = value; + } +}; +var ByteMarker; +(function(ByteMarker2) { + ByteMarker2[ByteMarker2["Undefined"] = 0] = "Undefined"; + ByteMarker2[ByteMarker2["Null"] = 1] = "Null"; + ByteMarker2[ByteMarker2["Boolean"] = 2] = "Boolean"; + ByteMarker2[ByteMarker2["Number"] = 3] = "Number"; + ByteMarker2[ByteMarker2["String"] = 4] = "String"; + ByteMarker2[ByteMarker2["Object"] = 5] = "Object"; + ByteMarker2[ByteMarker2["Array"] = 6] = "Array"; + ByteMarker2[ByteMarker2["Date"] = 7] = "Date"; + ByteMarker2[ByteMarker2["Uint8Array"] = 8] = "Uint8Array"; + ByteMarker2[ByteMarker2["Symbol"] = 9] = "Symbol"; + ByteMarker2[ByteMarker2["BigInt"] = 10] = "BigInt"; +})(ByteMarker || (ByteMarker = {})); +var Accumulator = BigInt("14695981039346656037"); +var [Prime, Size] = [BigInt("1099511628211"), BigInt( + "18446744073709551616" + /* 2 ^ 64 */ +)]; +var Bytes = Array.from({ length: 256 }).map((_, i) => BigInt(i)); +var F64 = new Float64Array(1); +var F64In = new DataView(F64.buffer); +var F64Out = new Uint8Array(F64.buffer); +function* NumberToBytes(value) { + const byteCount = value === 0 ? 1 : Math.ceil(Math.floor(Math.log2(value) + 1) / 8); + for (let i = 0; i < byteCount; i++) { + yield value >> 8 * (byteCount - 1 - i) & 255; + } +} +function ArrayType2(value) { + FNV1A64(ByteMarker.Array); + for (const item of value) { + Visit4(item); + } +} +function BooleanType(value) { + FNV1A64(ByteMarker.Boolean); + FNV1A64(value ? 1 : 0); +} +function BigIntType(value) { + FNV1A64(ByteMarker.BigInt); + F64In.setBigInt64(0, value); + for (const byte of F64Out) { + FNV1A64(byte); + } +} +function DateType2(value) { + FNV1A64(ByteMarker.Date); + Visit4(value.getTime()); +} +function NullType(value) { + FNV1A64(ByteMarker.Null); +} +function NumberType(value) { + FNV1A64(ByteMarker.Number); + F64In.setFloat64(0, value); + for (const byte of F64Out) { FNV1A64(byte); } } @@ -21633,1076 +22220,617 @@ function Visit13(schema, references) { return FromThis9(schema_, references_); case "Tuple": return FromTuple14(schema_, references_); - case "Union": - return FromUnion19(schema_, references_); - default: - return IsTransform(schema); - } -} -var visited = /* @__PURE__ */ new Set(); -function HasTransform(schema, references) { - visited.clear(); - return Visit13(schema, references); -} - -// node_modules/@sinclair/typebox/build/esm/value/decode/decode.mjs -function Decode(...args) { - const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]]; - if (!Check(schema, references, value)) - throw new TransformDecodeCheckError(schema, value, Errors(schema, references, value).First()); - return HasTransform(schema, references) ? TransformDecode(schema, references, value) : value; -} - -// node_modules/@sinclair/typebox/build/esm/value/default/default.mjs -function ValueOrDefault(schema, value) { - const defaultValue = HasPropertyKey2(schema, "default") ? schema.default : void 0; - const clone = IsFunction2(defaultValue) ? defaultValue() : Clone2(defaultValue); - return IsUndefined2(value) ? clone : IsObject2(value) && IsObject2(clone) ? Object.assign(clone, value) : value; -} -function HasDefaultProperty(schema) { - return IsKind(schema) && "default" in schema; -} -function FromArray17(schema, references, value) { - if (IsArray2(value)) { - for (let i = 0; i < value.length; i++) { - value[i] = Visit14(schema.items, references, value[i]); - } - return value; - } - const defaulted = ValueOrDefault(schema, value); - if (!IsArray2(defaulted)) - return defaulted; - for (let i = 0; i < defaulted.length; i++) { - defaulted[i] = Visit14(schema.items, references, defaulted[i]); - } - return defaulted; -} -function FromDate7(schema, references, value) { - return IsDate2(value) ? value : ValueOrDefault(schema, value); -} -function FromImport10(schema, references, value) { - const definitions = globalThis.Object.values(schema.$defs); - const target = schema.$defs[schema.$ref]; - return Visit14(target, [...references, ...definitions], value); -} -function FromIntersect18(schema, references, value) { - const defaulted = ValueOrDefault(schema, value); - return schema.allOf.reduce((acc, schema2) => { - const next = Visit14(schema2, references, defaulted); - return IsObject2(next) ? { ...acc, ...next } : next; - }, {}); -} -function FromObject18(schema, references, value) { - const defaulted = ValueOrDefault(schema, value); - if (!IsObject2(defaulted)) - return defaulted; - const knownPropertyKeys = Object.getOwnPropertyNames(schema.properties); - for (const key of knownPropertyKeys) { - const propertyValue = Visit14(schema.properties[key], references, defaulted[key]); - if (IsUndefined2(propertyValue)) - continue; - defaulted[key] = Visit14(schema.properties[key], references, defaulted[key]); - } - if (!HasDefaultProperty(schema.additionalProperties)) - return defaulted; - for (const key of Object.getOwnPropertyNames(defaulted)) { - if (knownPropertyKeys.includes(key)) - continue; - defaulted[key] = Visit14(schema.additionalProperties, references, defaulted[key]); - } - return defaulted; -} -function FromRecord13(schema, references, value) { - const defaulted = ValueOrDefault(schema, value); - if (!IsObject2(defaulted)) - return defaulted; - const additionalPropertiesSchema = schema.additionalProperties; - const [propertyKeyPattern, propertySchema] = Object.entries(schema.patternProperties)[0]; - const knownPropertyKey = new RegExp(propertyKeyPattern); - for (const key of Object.getOwnPropertyNames(defaulted)) { - if (!(knownPropertyKey.test(key) && HasDefaultProperty(propertySchema))) - continue; - defaulted[key] = Visit14(propertySchema, references, defaulted[key]); - } - if (!HasDefaultProperty(additionalPropertiesSchema)) - return defaulted; - for (const key of Object.getOwnPropertyNames(defaulted)) { - if (knownPropertyKey.test(key)) - continue; - defaulted[key] = Visit14(additionalPropertiesSchema, references, defaulted[key]); - } - return defaulted; -} -function FromRef14(schema, references, value) { - return Visit14(Deref(schema, references), references, ValueOrDefault(schema, value)); -} -function FromThis10(schema, references, value) { - return Visit14(Deref(schema, references), references, value); -} -function FromTuple15(schema, references, value) { - const defaulted = ValueOrDefault(schema, value); - if (!IsArray2(defaulted) || IsUndefined2(schema.items)) - return defaulted; - const [items, max3] = [schema.items, Math.max(schema.items.length, defaulted.length)]; - for (let i = 0; i < max3; i++) { - if (i < items.length) - defaulted[i] = Visit14(items[i], references, defaulted[i]); - } - return defaulted; -} -function FromUnion20(schema, references, value) { - const defaulted = ValueOrDefault(schema, value); - for (const inner of schema.anyOf) { - const result = Visit14(inner, references, Clone2(defaulted)); - if (Check(inner, references, result)) { - return result; - } - } - return defaulted; -} -function Visit14(schema, references, value) { - const references_ = Pushref(schema, references); - const schema_ = schema; - switch (schema_[Kind]) { - case "Array": - return FromArray17(schema_, references_, value); - case "Date": - return FromDate7(schema_, references_, value); - case "Import": - return FromImport10(schema_, references_, value); - case "Intersect": - return FromIntersect18(schema_, references_, value); - case "Object": - return FromObject18(schema_, references_, value); - case "Record": - return FromRecord13(schema_, references_, value); - case "Ref": - return FromRef14(schema_, references_, value); - case "This": - return FromThis10(schema_, references_, value); - case "Tuple": - return FromTuple15(schema_, references_, value); - case "Union": - return FromUnion20(schema_, references_, value); - default: - return ValueOrDefault(schema_, value); - } -} -function Default5(...args) { - return args.length === 3 ? Visit14(args[0], args[1], args[2]) : Visit14(args[0], [], args[1]); -} - -// node_modules/@sinclair/typebox/build/esm/value/pointer/pointer.mjs -var pointer_exports = {}; -__export(pointer_exports, { - Delete: () => Delete3, - Format: () => Format, - Get: () => Get3, - Has: () => Has3, - Set: () => Set4, - ValuePointerRootDeleteError: () => ValuePointerRootDeleteError, - ValuePointerRootSetError: () => ValuePointerRootSetError -}); -var ValuePointerRootSetError = class extends TypeBoxError { - constructor(value, path2, update) { - super("Cannot set root value"); - this.value = value; - this.path = path2; - this.update = update; - } -}; -var ValuePointerRootDeleteError = class extends TypeBoxError { - constructor(value, path2) { - super("Cannot delete root value"); - this.value = value; - this.path = path2; - } -}; -function Escape2(component) { - return component.indexOf("~") === -1 ? component : component.replace(/~1/g, "/").replace(/~0/g, "~"); -} -function* Format(pointer2) { - if (pointer2 === "") - return; - let [start2, end] = [0, 0]; - for (let i = 0; i < pointer2.length; i++) { - const char = pointer2.charAt(i); - if (char === "/") { - if (i === 0) { - start2 = i + 1; - } else { - end = i; - yield Escape2(pointer2.slice(start2, end)); - start2 = i + 1; - } - } else { - end = i; - } - } - yield Escape2(pointer2.slice(start2)); -} -function Set4(value, pointer2, update) { - if (pointer2 === "") - throw new ValuePointerRootSetError(value, pointer2, update); - let [owner, next, key] = [null, value, ""]; - for (const component of Format(pointer2)) { - if (next[component] === void 0) - next[component] = {}; - owner = next; - next = next[component]; - key = component; - } - owner[key] = update; -} -function Delete3(value, pointer2) { - if (pointer2 === "") - throw new ValuePointerRootDeleteError(value, pointer2); - let [owner, next, key] = [null, value, ""]; - for (const component of Format(pointer2)) { - if (next[component] === void 0 || next[component] === null) - return; - owner = next; - next = next[component]; - key = component; - } - if (Array.isArray(owner)) { - const index2 = parseInt(key); - owner.splice(index2, 1); - } else { - delete owner[key]; - } -} -function Has3(value, pointer2) { - if (pointer2 === "") - return true; - let [owner, next, key] = [null, value, ""]; - for (const component of Format(pointer2)) { - if (next[component] === void 0) - return false; - owner = next; - next = next[component]; - key = component; + case "Union": + return FromUnion19(schema_, references_); + default: + return IsTransform(schema); } - return Object.getOwnPropertyNames(owner).includes(key); } -function Get3(value, pointer2) { - if (pointer2 === "") - return value; - let current = value; - for (const component of Format(pointer2)) { - if (current[component] === void 0) - return void 0; - current = current[component]; - } - return current; +var visited = /* @__PURE__ */ new Set(); +function HasTransform(schema, references) { + visited.clear(); + return Visit13(schema, references); } -// node_modules/@sinclair/typebox/build/esm/value/equal/equal.mjs -function ObjectType3(left2, right2) { - if (!IsObject2(right2)) - return false; - const leftKeys = [...Object.keys(left2), ...Object.getOwnPropertySymbols(left2)]; - const rightKeys = [...Object.keys(right2), ...Object.getOwnPropertySymbols(right2)]; - if (leftKeys.length !== rightKeys.length) - return false; - return leftKeys.every((key) => Equal(left2[key], right2[key])); -} -function DateType3(left2, right2) { - return IsDate2(right2) && left2.getTime() === right2.getTime(); -} -function ArrayType3(left2, right2) { - if (!IsArray2(right2) || left2.length !== right2.length) - return false; - return left2.every((value, index2) => Equal(value, right2[index2])); -} -function TypedArrayType(left2, right2) { - if (!IsTypedArray(right2) || left2.length !== right2.length || Object.getPrototypeOf(left2).constructor.name !== Object.getPrototypeOf(right2).constructor.name) - return false; - return left2.every((value, index2) => Equal(value, right2[index2])); +// node_modules/@sinclair/typebox/build/esm/value/decode/decode.mjs +function Decode(...args) { + const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]]; + if (!Check(schema, references, value)) + throw new TransformDecodeCheckError(schema, value, Errors(schema, references, value).First()); + return HasTransform(schema, references) ? TransformDecode(schema, references, value) : value; } -function ValueType(left2, right2) { - return left2 === right2; + +// node_modules/@sinclair/typebox/build/esm/value/default/default.mjs +function ValueOrDefault(schema, value) { + const defaultValue = HasPropertyKey2(schema, "default") ? schema.default : void 0; + const clone = IsFunction2(defaultValue) ? defaultValue() : Clone2(defaultValue); + return IsUndefined2(value) ? clone : IsObject2(value) && IsObject2(clone) ? Object.assign(clone, value) : value; } -function Equal(left2, right2) { - if (IsDate2(left2)) - return DateType3(left2, right2); - if (IsTypedArray(left2)) - return TypedArrayType(left2, right2); - if (IsArray2(left2)) - return ArrayType3(left2, right2); - if (IsObject2(left2)) - return ObjectType3(left2, right2); - if (IsValueType(left2)) - return ValueType(left2, right2); - throw new Error("ValueEquals: Unable to compare value"); +function HasDefaultProperty(schema) { + return IsKind(schema) && "default" in schema; } - -// node_modules/@sinclair/typebox/build/esm/value/delta/delta.mjs -var Insert = Object2({ - type: Literal("insert"), - path: String2(), - value: Unknown() -}); -var Update = Object2({ - type: Literal("update"), - path: String2(), - value: Unknown() -}); -var Delete4 = Object2({ - type: Literal("delete"), - path: String2() -}); -var Edit = Union([Insert, Update, Delete4]); -var ValueDiffError = class extends TypeBoxError { - constructor(value, message) { - super(message); - this.value = value; +function FromArray17(schema, references, value) { + if (IsArray2(value)) { + for (let i = 0; i < value.length; i++) { + value[i] = Visit14(schema.items, references, value[i]); + } + return value; } -}; -function CreateUpdate(path2, value) { - return { type: "update", path: path2, value }; + const defaulted = ValueOrDefault(schema, value); + if (!IsArray2(defaulted)) + return defaulted; + for (let i = 0; i < defaulted.length; i++) { + defaulted[i] = Visit14(schema.items, references, defaulted[i]); + } + return defaulted; } -function CreateInsert(path2, value) { - return { type: "insert", path: path2, value }; +function FromDate7(schema, references, value) { + return IsDate2(value) ? value : ValueOrDefault(schema, value); } -function CreateDelete(path2) { - return { type: "delete", path: path2 }; +function FromImport10(schema, references, value) { + const definitions = globalThis.Object.values(schema.$defs); + const target = schema.$defs[schema.$ref]; + return Visit14(target, [...references, ...definitions], value); } -function AssertDiffable(value) { - if (globalThis.Object.getOwnPropertySymbols(value).length > 0) - throw new ValueDiffError(value, "Cannot diff objects with symbols"); +function FromIntersect18(schema, references, value) { + const defaulted = ValueOrDefault(schema, value); + return schema.allOf.reduce((acc, schema2) => { + const next = Visit14(schema2, references, defaulted); + return IsObject2(next) ? { ...acc, ...next } : next; + }, {}); } -function* ObjectType4(path2, current, next) { - AssertDiffable(current); - AssertDiffable(next); - if (!IsStandardObject(next)) - return yield CreateUpdate(path2, next); - const currentKeys = globalThis.Object.getOwnPropertyNames(current); - const nextKeys = globalThis.Object.getOwnPropertyNames(next); - for (const key of nextKeys) { - if (HasPropertyKey2(current, key)) - continue; - yield CreateInsert(`${path2}/${key}`, next[key]); - } - for (const key of currentKeys) { - if (!HasPropertyKey2(next, key)) - continue; - if (Equal(current, next)) +function FromObject18(schema, references, value) { + const defaulted = ValueOrDefault(schema, value); + if (!IsObject2(defaulted)) + return defaulted; + const knownPropertyKeys = Object.getOwnPropertyNames(schema.properties); + for (const key of knownPropertyKeys) { + const propertyValue = Visit14(schema.properties[key], references, defaulted[key]); + if (IsUndefined2(propertyValue)) continue; - yield* Visit15(`${path2}/${key}`, current[key], next[key]); + defaulted[key] = Visit14(schema.properties[key], references, defaulted[key]); } - for (const key of currentKeys) { - if (HasPropertyKey2(next, key)) + if (!HasDefaultProperty(schema.additionalProperties)) + return defaulted; + for (const key of Object.getOwnPropertyNames(defaulted)) { + if (knownPropertyKeys.includes(key)) continue; - yield CreateDelete(`${path2}/${key}`); + defaulted[key] = Visit14(schema.additionalProperties, references, defaulted[key]); } + return defaulted; } -function* ArrayType4(path2, current, next) { - if (!IsArray2(next)) - return yield CreateUpdate(path2, next); - for (let i = 0; i < Math.min(current.length, next.length); i++) { - yield* Visit15(`${path2}/${i}`, current[i], next[i]); - } - for (let i = 0; i < next.length; i++) { - if (i < current.length) +function FromRecord13(schema, references, value) { + const defaulted = ValueOrDefault(schema, value); + if (!IsObject2(defaulted)) + return defaulted; + const additionalPropertiesSchema = schema.additionalProperties; + const [propertyKeyPattern, propertySchema] = Object.entries(schema.patternProperties)[0]; + const knownPropertyKey = new RegExp(propertyKeyPattern); + for (const key of Object.getOwnPropertyNames(defaulted)) { + if (!(knownPropertyKey.test(key) && HasDefaultProperty(propertySchema))) continue; - yield CreateInsert(`${path2}/${i}`, next[i]); + defaulted[key] = Visit14(propertySchema, references, defaulted[key]); } - for (let i = current.length - 1; i >= 0; i--) { - if (i < next.length) + if (!HasDefaultProperty(additionalPropertiesSchema)) + return defaulted; + for (const key of Object.getOwnPropertyNames(defaulted)) { + if (knownPropertyKey.test(key)) continue; - yield CreateDelete(`${path2}/${i}`); - } -} -function* TypedArrayType2(path2, current, next) { - if (!IsTypedArray(next) || current.length !== next.length || globalThis.Object.getPrototypeOf(current).constructor.name !== globalThis.Object.getPrototypeOf(next).constructor.name) - return yield CreateUpdate(path2, next); - for (let i = 0; i < Math.min(current.length, next.length); i++) { - yield* Visit15(`${path2}/${i}`, current[i], next[i]); + defaulted[key] = Visit14(additionalPropertiesSchema, references, defaulted[key]); } + return defaulted; } -function* ValueType2(path2, current, next) { - if (current === next) - return; - yield CreateUpdate(path2, next); -} -function* Visit15(path2, current, next) { - if (IsStandardObject(current)) - return yield* ObjectType4(path2, current, next); - if (IsArray2(current)) - return yield* ArrayType4(path2, current, next); - if (IsTypedArray(current)) - return yield* TypedArrayType2(path2, current, next); - if (IsValueType(current)) - return yield* ValueType2(path2, current, next); - throw new ValueDiffError(current, "Unable to diff value"); -} -function Diff(current, next) { - return [...Visit15("", current, next)]; -} -function IsRootUpdate(edits) { - return edits.length > 0 && edits[0].path === "" && edits[0].type === "update"; +function FromRef14(schema, references, value) { + return Visit14(Deref(schema, references), references, ValueOrDefault(schema, value)); } -function IsIdentity(edits) { - return edits.length === 0; +function FromThis10(schema, references, value) { + return Visit14(Deref(schema, references), references, value); } -function Patch(current, edits) { - if (IsRootUpdate(edits)) { - return Clone2(edits[0].value); - } - if (IsIdentity(edits)) { - return Clone2(current); +function FromTuple15(schema, references, value) { + const defaulted = ValueOrDefault(schema, value); + if (!IsArray2(defaulted) || IsUndefined2(schema.items)) + return defaulted; + const [items, max3] = [schema.items, Math.max(schema.items.length, defaulted.length)]; + for (let i = 0; i < max3; i++) { + if (i < items.length) + defaulted[i] = Visit14(items[i], references, defaulted[i]); } - const clone = Clone2(current); - for (const edit of edits) { - switch (edit.type) { - case "insert": { - pointer_exports.Set(clone, edit.path, edit.value); - break; - } - case "update": { - pointer_exports.Set(clone, edit.path, edit.value); - break; - } - case "delete": { - pointer_exports.Delete(clone, edit.path); - break; - } + return defaulted; +} +function FromUnion20(schema, references, value) { + const defaulted = ValueOrDefault(schema, value); + for (const inner of schema.anyOf) { + const result = Visit14(inner, references, Clone2(defaulted)); + if (Check(inner, references, result)) { + return result; } } - return clone; + return defaulted; } - -// node_modules/@sinclair/typebox/build/esm/value/encode/encode.mjs -function Encode(...args) { - const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]]; - const encoded = HasTransform(schema, references) ? TransformEncode(schema, references, value) : value; - if (!Check(schema, references, encoded)) - throw new TransformEncodeCheckError(schema, encoded, Errors(schema, references, encoded).First()); - return encoded; +function Visit14(schema, references, value) { + const references_ = Pushref(schema, references); + const schema_ = schema; + switch (schema_[Kind]) { + case "Array": + return FromArray17(schema_, references_, value); + case "Date": + return FromDate7(schema_, references_, value); + case "Import": + return FromImport10(schema_, references_, value); + case "Intersect": + return FromIntersect18(schema_, references_, value); + case "Object": + return FromObject18(schema_, references_, value); + case "Record": + return FromRecord13(schema_, references_, value); + case "Ref": + return FromRef14(schema_, references_, value); + case "This": + return FromThis10(schema_, references_, value); + case "Tuple": + return FromTuple15(schema_, references_, value); + case "Union": + return FromUnion20(schema_, references_, value); + default: + return ValueOrDefault(schema_, value); + } } - -// node_modules/@sinclair/typebox/build/esm/value/mutate/mutate.mjs -function IsStandardObject2(value) { - return IsObject2(value) && !IsArray2(value); +function Default5(...args) { + return args.length === 3 ? Visit14(args[0], args[1], args[2]) : Visit14(args[0], [], args[1]); } -var ValueMutateError = class extends TypeBoxError { - constructor(message) { - super(message); + +// node_modules/@sinclair/typebox/build/esm/value/pointer/pointer.mjs +var pointer_exports = {}; +__export(pointer_exports, { + Delete: () => Delete3, + Format: () => Format, + Get: () => Get3, + Has: () => Has3, + Set: () => Set4, + ValuePointerRootDeleteError: () => ValuePointerRootDeleteError, + ValuePointerRootSetError: () => ValuePointerRootSetError +}); +var ValuePointerRootSetError = class extends TypeBoxError { + constructor(value, path2, update) { + super("Cannot set root value"); + this.value = value; + this.path = path2; + this.update = update; } }; -function ObjectType5(root2, path2, current, next) { - if (!IsStandardObject2(current)) { - pointer_exports.Set(root2, path2, Clone2(next)); - } else { - const currentKeys = Object.getOwnPropertyNames(current); - const nextKeys = Object.getOwnPropertyNames(next); - for (const currentKey of currentKeys) { - if (!nextKeys.includes(currentKey)) { - delete current[currentKey]; - } - } - for (const nextKey of nextKeys) { - if (!currentKeys.includes(nextKey)) { - current[nextKey] = null; +var ValuePointerRootDeleteError = class extends TypeBoxError { + constructor(value, path2) { + super("Cannot delete root value"); + this.value = value; + this.path = path2; + } +}; +function Escape2(component) { + return component.indexOf("~") === -1 ? component : component.replace(/~1/g, "/").replace(/~0/g, "~"); +} +function* Format(pointer2) { + if (pointer2 === "") + return; + let [start2, end] = [0, 0]; + for (let i = 0; i < pointer2.length; i++) { + const char = pointer2.charAt(i); + if (char === "/") { + if (i === 0) { + start2 = i + 1; + } else { + end = i; + yield Escape2(pointer2.slice(start2, end)); + start2 = i + 1; } - } - for (const nextKey of nextKeys) { - Visit16(root2, `${path2}/${nextKey}`, current[nextKey], next[nextKey]); + } else { + end = i; } } + yield Escape2(pointer2.slice(start2)); } -function ArrayType5(root2, path2, current, next) { - if (!IsArray2(current)) { - pointer_exports.Set(root2, path2, Clone2(next)); - } else { - for (let index2 = 0; index2 < next.length; index2++) { - Visit16(root2, `${path2}/${index2}`, current[index2], next[index2]); - } - current.splice(next.length); +function Set4(value, pointer2, update) { + if (pointer2 === "") + throw new ValuePointerRootSetError(value, pointer2, update); + let [owner, next, key] = [null, value, ""]; + for (const component of Format(pointer2)) { + if (next[component] === void 0) + next[component] = {}; + owner = next; + next = next[component]; + key = component; } + owner[key] = update; } -function TypedArrayType3(root2, path2, current, next) { - if (IsTypedArray(current) && current.length === next.length) { - for (let i = 0; i < current.length; i++) { - current[i] = next[i]; - } +function Delete3(value, pointer2) { + if (pointer2 === "") + throw new ValuePointerRootDeleteError(value, pointer2); + let [owner, next, key] = [null, value, ""]; + for (const component of Format(pointer2)) { + if (next[component] === void 0 || next[component] === null) + return; + owner = next; + next = next[component]; + key = component; + } + if (Array.isArray(owner)) { + const index2 = parseInt(key); + owner.splice(index2, 1); } else { - pointer_exports.Set(root2, path2, Clone2(next)); + delete owner[key]; } } -function ValueType3(root2, path2, current, next) { - if (current === next) - return; - pointer_exports.Set(root2, path2, next); -} -function Visit16(root2, path2, current, next) { - if (IsArray2(next)) - return ArrayType5(root2, path2, current, next); - if (IsTypedArray(next)) - return TypedArrayType3(root2, path2, current, next); - if (IsStandardObject2(next)) - return ObjectType5(root2, path2, current, next); - if (IsValueType(next)) - return ValueType3(root2, path2, current, next); -} -function IsNonMutableValue(value) { - return IsTypedArray(value) || IsValueType(value); -} -function IsMismatchedValue(current, next) { - return IsStandardObject2(current) && IsArray2(next) || IsArray2(current) && IsStandardObject2(next); +function Has3(value, pointer2) { + if (pointer2 === "") + return true; + let [owner, next, key] = [null, value, ""]; + for (const component of Format(pointer2)) { + if (next[component] === void 0) + return false; + owner = next; + next = next[component]; + key = component; + } + return Object.getOwnPropertyNames(owner).includes(key); } -function Mutate(current, next) { - if (IsNonMutableValue(current) || IsNonMutableValue(next)) - throw new ValueMutateError("Only object and array types can be mutated at the root level"); - if (IsMismatchedValue(current, next)) - throw new ValueMutateError("Cannot assign due type mismatch of assignable values"); - Visit16(current, "", current, next); +function Get3(value, pointer2) { + if (pointer2 === "") + return value; + let current = value; + for (const component of Format(pointer2)) { + if (current[component] === void 0) + return void 0; + current = current[component]; + } + return current; } -// node_modules/@sinclair/typebox/build/esm/value/parse/parse.mjs -var ParseError = class extends TypeBoxError { - constructor(message) { - super(message); - } -}; -var ParseRegistry; -(function(ParseRegistry2) { - const registry2 = /* @__PURE__ */ new Map([ - ["Assert", (type2, references, value) => { - Assert(type2, references, value); - return value; - }], - ["Cast", (type2, references, value) => Cast(type2, references, value)], - ["Clean", (type2, references, value) => Clean(type2, references, value)], - ["Clone", (_type, _references, value) => Clone2(value)], - ["Convert", (type2, references, value) => Convert(type2, references, value)], - ["Decode", (type2, references, value) => HasTransform(type2, references) ? TransformDecode(type2, references, value) : value], - ["Default", (type2, references, value) => Default5(type2, references, value)], - ["Encode", (type2, references, value) => HasTransform(type2, references) ? TransformEncode(type2, references, value) : value] - ]); - function Delete5(key) { - registry2.delete(key); - } - ParseRegistry2.Delete = Delete5; - function Set5(key, callback) { - registry2.set(key, callback); - } - ParseRegistry2.Set = Set5; - function Get4(key) { - return registry2.get(key); - } - ParseRegistry2.Get = Get4; -})(ParseRegistry || (ParseRegistry = {})); -var ParseDefault = [ - "Clone", - "Clean", - "Default", - "Convert", - "Assert", - "Decode" -]; -function ParseValue(operations, type2, references, value) { - return operations.reduce((value2, operationKey) => { - const operation = ParseRegistry.Get(operationKey); - if (IsUndefined2(operation)) - throw new ParseError(`Unable to find Parse operation '${operationKey}'`); - return operation(type2, references, value2); - }, value); +// node_modules/@sinclair/typebox/build/esm/value/equal/equal.mjs +function ObjectType3(left2, right2) { + if (!IsObject2(right2)) + return false; + const leftKeys = [...Object.keys(left2), ...Object.getOwnPropertySymbols(left2)]; + const rightKeys = [...Object.keys(right2), ...Object.getOwnPropertySymbols(right2)]; + if (leftKeys.length !== rightKeys.length) + return false; + return leftKeys.every((key) => Equal(left2[key], right2[key])); } -function Parse(...args) { - const [operations, schema, references, value] = args.length === 4 ? [args[0], args[1], args[2], args[3]] : args.length === 3 ? IsArray2(args[0]) ? [args[0], args[1], [], args[2]] : [ParseDefault, args[0], args[1], args[2]] : args.length === 2 ? [ParseDefault, args[0], [], args[1]] : (() => { - throw new ParseError("Invalid Arguments"); - })(); - return ParseValue(operations, schema, references, value); +function DateType3(left2, right2) { + return IsDate2(right2) && left2.getTime() === right2.getTime(); +} +function ArrayType3(left2, right2) { + if (!IsArray2(right2) || left2.length !== right2.length) + return false; + return left2.every((value, index2) => Equal(value, right2[index2])); +} +function TypedArrayType(left2, right2) { + if (!IsTypedArray(right2) || left2.length !== right2.length || Object.getPrototypeOf(left2).constructor.name !== Object.getPrototypeOf(right2).constructor.name) + return false; + return left2.every((value, index2) => Equal(value, right2[index2])); +} +function ValueType(left2, right2) { + return left2 === right2; +} +function Equal(left2, right2) { + if (IsDate2(left2)) + return DateType3(left2, right2); + if (IsTypedArray(left2)) + return TypedArrayType(left2, right2); + if (IsArray2(left2)) + return ArrayType3(left2, right2); + if (IsObject2(left2)) + return ObjectType3(left2, right2); + if (IsValueType(left2)) + return ValueType(left2, right2); + throw new Error("ValueEquals: Unable to compare value"); } -// node_modules/@sinclair/typebox/build/esm/value/value/value.mjs -var value_exports2 = {}; -__export(value_exports2, { - Assert: () => Assert, - Cast: () => Cast, - Check: () => Check, - Clean: () => Clean, - Clone: () => Clone2, - Convert: () => Convert, - Create: () => Create2, - Decode: () => Decode, - Default: () => Default5, - Diff: () => Diff, - Edit: () => Edit, - Encode: () => Encode, - Equal: () => Equal, - Errors: () => Errors, - Hash: () => Hash, - Mutate: () => Mutate, - Parse: () => Parse, - Patch: () => Patch, - ValueErrorIterator: () => ValueErrorIterator +// node_modules/@sinclair/typebox/build/esm/value/delta/delta.mjs +var Insert = Object2({ + type: Literal("insert"), + path: String2(), + value: Unknown() }); - -// src/render/v2.ts -var RTICHOKE_COLORS2 = [ - "#1b9e77", - "#d95f02", - "#7570b3", - "#e7298a", - "#07004D", - "#E6AB02", - "#FE5F55", - "#54494B", - "#006E90", - "#BC96E6" -]; -var RTICHOKE_BROWSER_THEME = { - width: 600, - height: 600, - margins: { top: 28, right: 28, bottom: 58, left: 66 }, - background: "#ffffff", - frame: { color: "#444444", width: 1 }, - typography: { - fontFamily: "Arial, Helvetica, sans-serif", - fontSize: 12, - axisTitleSize: 14, - axisTitleWeight: 400, - legendSize: 12 - }, - axis: { - color: "#444444", - tickSize: 5, - tickPadding: 7, - ticks: 6, - numberFormat: ".1f" - }, - colors: RTICHOKE_COLORS2, - line: { width: 2, dash: null }, - marker: { radius: 5, fill: null, stroke: "#ffffff", strokeWidth: 1.5 }, - reference: { color: "#BEBEBE", width: 2, dash: "4,4" }, - legend: { position: "top", swatchWidth: 15, columns: null }, - tip: { digits: 3 } +var Update = Object2({ + type: Literal("update"), + path: String2(), + value: Unknown() +}); +var Delete4 = Object2({ + type: Literal("delete"), + path: String2() +}); +var Edit = Union([Insert, Update, Delete4]); +var ValueDiffError = class extends TypeBoxError { + constructor(value, message) { + super(message); + this.value = value; + } }; -function mergeTheme(options) { - const custom8 = options.theme ?? {}; - return { - ...RTICHOKE_BROWSER_THEME, - width: options.width ?? RTICHOKE_BROWSER_THEME.width, - height: options.height ?? RTICHOKE_BROWSER_THEME.height, - background: custom8.background ?? RTICHOKE_BROWSER_THEME.background, - colors: options.colors ?? RTICHOKE_BROWSER_THEME.colors, - margins: { ...RTICHOKE_BROWSER_THEME.margins, ...custom8.margins }, - frame: { ...RTICHOKE_BROWSER_THEME.frame, ...custom8.frame }, - typography: { ...RTICHOKE_BROWSER_THEME.typography, ...custom8.typography }, - axis: { ...RTICHOKE_BROWSER_THEME.axis, ...custom8.axis }, - line: { ...RTICHOKE_BROWSER_THEME.line, ...custom8.line }, - marker: { ...RTICHOKE_BROWSER_THEME.marker, ...custom8.marker }, - reference: { ...RTICHOKE_BROWSER_THEME.reference, ...custom8.reference }, - legend: { ...RTICHOKE_BROWSER_THEME.legend, ...custom8.legend }, - tip: { ...RTICHOKE_BROWSER_THEME.tip, ...custom8.tip } - }; +function CreateUpdate(path2, value) { + return { type: "update", path: path2, value }; } -function resolveV2RenderOptions(groupsOrCount, options = {}) { - const groups2 = typeof groupsOrCount === "number" ? Array.from( - { length: groupsOrCount }, - (_, index2) => `group-${index2 + 1}` - ) : [...groupsOrCount]; - const theme = mergeTheme(options); - if (!Number.isFinite(theme.width) || theme.width <= 0 || !Number.isFinite(theme.height) || theme.height <= 0) - throw new Error( - "Renderer width and height must be positive finite numbers" - ); - if (!Number.isInteger(theme.tip.digits) || theme.tip.digits < 0 || theme.tip.digits > 20) - throw new Error("Renderer tip digits must be an integer between 0 and 20"); - const colors = groups2.length <= 1 ? ["#000000"] : [...theme.colors]; - if (colors.length < groups2.length) - throw new Error( - "Renderer colors must contain at least one color per display group" - ); - const assigned = colors.slice(0, Math.max(groups2.length, 1)); - return { - theme: { ...theme, colors: assigned }, - groups: groups2, - colors: assigned, - colorByGroup: new Map( - groups2.map((group2, index2) => [group2, assigned[index2]]) - ), - showLegend: groups2.length > 1 - }; +function CreateInsert(path2, value) { + return { type: "insert", path: path2, value }; } -function displayBySeries(spec) { - return new Map(spec.series.map((series) => [series.id, series.display])); +function CreateDelete(path2) { + return { type: "delete", path: path2 }; } -function displayGroups(spec) { - return [...new Set(spec.series.map((series) => series.display.group))]; +function AssertDiffable(value) { + if (globalThis.Object.getOwnPropertySymbols(value).length > 0) + throw new ValueDiffError(value, "Cannot diff objects with symbols"); } -function seriesRenderData(spec, data) { - const displays = displayBySeries(spec); - return data.map((datum2) => ({ - ...datum2, - group: displays.get(datum2.seriesId).group, - label: displays.get(datum2.seriesId).label - })); +function* ObjectType4(path2, current, next) { + AssertDiffable(current); + AssertDiffable(next); + if (!IsStandardObject(next)) + return yield CreateUpdate(path2, next); + const currentKeys = globalThis.Object.getOwnPropertyNames(current); + const nextKeys = globalThis.Object.getOwnPropertyNames(next); + for (const key of nextKeys) { + if (HasPropertyKey2(current, key)) + continue; + yield CreateInsert(`${path2}/${key}`, next[key]); + } + for (const key of currentKeys) { + if (!HasPropertyKey2(next, key)) + continue; + if (Equal(current, next)) + continue; + yield* Visit15(`${path2}/${key}`, current[key], next[key]); + } + for (const key of currentKeys) { + if (HasPropertyKey2(next, key)) + continue; + yield CreateDelete(`${path2}/${key}`); + } } -function tooltip(digits, fields) { - return fields.filter(([, value]) => value !== void 0).map( - ([label, value]) => `${label}: ${typeof value === "number" ? value.toFixed(digits) : String(value)}` - ).join("\n"); +function* ArrayType4(path2, current, next) { + if (!IsArray2(next)) + return yield CreateUpdate(path2, next); + for (let i = 0; i < Math.min(current.length, next.length); i++) { + yield* Visit15(`${path2}/${i}`, current[i], next[i]); + } + for (let i = 0; i < next.length; i++) { + if (i < current.length) + continue; + yield CreateInsert(`${path2}/${i}`, next[i]); + } + for (let i = current.length - 1; i >= 0; i--) { + if (i < next.length) + continue; + yield CreateDelete(`${path2}/${i}`); + } } -function basePlotOptions(resolved, spec) { - const { theme } = resolved; - const labelByGroup = new Map( - spec.series.map((series) => [series.display.group, series.display.label]) - ); - return { - width: theme.width, - height: theme.height, - marginTop: theme.margins.top, - marginRight: theme.margins.right, - marginBottom: theme.margins.bottom, - marginLeft: theme.margins.left, - style: { - background: theme.background, - color: theme.axis.color, - fontFamily: theme.typography.fontFamily, - fontSize: `${theme.typography.fontSize}px` - }, - color: { - legend: resolved.showLegend, - domain: resolved.groups, - range: resolved.colors, - tickFormat: (group2) => labelByGroup.get(group2) ?? group2 - } - }; +function* TypedArrayType2(path2, current, next) { + if (!IsTypedArray(next) || current.length !== next.length || globalThis.Object.getPrototypeOf(current).constructor.name !== globalThis.Object.getPrototypeOf(next).constructor.name) + return yield CreateUpdate(path2, next); + for (let i = 0; i < Math.min(current.length, next.length); i++) { + yield* Visit15(`${path2}/${i}`, current[i], next[i]); + } +} +function* ValueType2(path2, current, next) { + if (current === next) + return; + yield CreateUpdate(path2, next); } -function axisOptions2(theme, label, domain) { - return { - label, - domain, - grid: false, - line: true, - ticks: theme.axis.ticks, - tickSize: theme.axis.tickSize, - tickPadding: theme.axis.tickPadding, - tickFormat: theme.axis.numberFormat - }; +function* Visit15(path2, current, next) { + if (IsStandardObject(current)) + return yield* ObjectType4(path2, current, next); + if (IsArray2(current)) + return yield* ArrayType4(path2, current, next); + if (IsTypedArray(current)) + return yield* TypedArrayType2(path2, current, next); + if (IsValueType(current)) + return yield* ValueType2(path2, current, next); + throw new ValueDiffError(current, "Unable to diff value"); } -function frameMark(theme) { - return frame2({ - stroke: theme.frame.color, - strokeWidth: theme.frame.width - }); +function Diff(current, next) { + return [...Visit15("", current, next)]; } -function referenceMarks(spec, theme) { - const style = { - stroke: theme.reference.color, - strokeWidth: theme.reference.width, - strokeDasharray: theme.reference.dash - }; - const marks2 = []; - for (const reference of spec.references ?? []) { - if (reference.type === "identity") - marks2.push( - line( - [ - { x: 0, y: 0 }, - { x: 1, y: 1 } - ], - { x: "x", y: "y", ...style, title: reference.label } - ) - ); - else if (reference.type === "horizontal" && reference.value !== void 0) - marks2.push( - ruleY([reference.value], { ...style, title: reference.label }) - ); - else if (reference.type === "path" && reference.points) - marks2.push( - line(reference.points, { - x: "x", - y: "y", - ...style, - title: reference.label - }) - ); - } - return marks2; +function IsRootUpdate(edits) { + return edits.length > 0 && edits[0].path === "" && edits[0].type === "update"; } -function finishMarks(marks2, theme) { - marks2.push(frameMark(theme)); - return marks2; +function IsIdentity(edits) { + return edits.length === 0; } -function themedPlot(options, theme) { - const plot2 = plot(options); - for (const label of plot2.querySelectorAll( - '[aria-label$="axis label"] text' - )) { - label.style.fontSize = `${theme.typography.axisTitleSize}px`; - label.style.fontWeight = String(theme.typography.axisTitleWeight); +function Patch(current, edits) { + if (IsRootUpdate(edits)) { + return Clone2(edits[0].value); } - for (const frame3 of plot2.querySelectorAll( - '[aria-label="frame"]' - )) { - frame3.setAttribute("stroke", theme.frame.color); + if (IsIdentity(edits)) { + return Clone2(current); } - if (plot2 instanceof HTMLElement) { - plot2.style.fontSize = `${theme.typography.legendSize}px`; - for (const swatch of plot2.querySelectorAll( - 'svg[width="15"]' - )) { - swatch.setAttribute("width", String(theme.legend.swatchWidth)); + const clone = Clone2(current); + for (const edit of edits) { + switch (edit.type) { + case "insert": { + pointer_exports.Set(clone, edit.path, edit.value); + break; + } + case "update": { + pointer_exports.Set(clone, edit.path, edit.value); + break; + } + case "delete": { + pointer_exports.Delete(clone, edit.path); + break; + } } - } - return plot2; -} -function renderRocV2(spec, options = {}) { - assertV2ReferentialIntegrity(spec); - const resolved = resolveV2RenderOptions(displayGroups(spec), options); - const { theme } = resolved; - const data = seriesRenderData(spec, spec.data).map((datum2) => ({ - ...datum2, - false_positive_rate: 1 - datum2.specificity, - title: tooltip(theme.tip.digits, [ - ["Series", datum2.label], - ["Cutoff", datum2.cutoff], - ["Sensitivity", datum2.sensitivity], - ["Specificity", datum2.specificity] - ]) - })); - const marks2 = referenceMarks(spec, theme); - marks2.push( - line(data, { - x: "false_positive_rate", - y: "sensitivity", - z: "seriesId", - stroke: "group", - strokeWidth: theme.line.width, - strokeDasharray: theme.line.dash ?? void 0, - title: "title", - tip: true - }) - ); - return themedPlot( - { - ...basePlotOptions(resolved, spec), - x: axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), - y: axisOptions2(theme, spec.yAxis.label, spec.yAxis.domain), - marks: finishMarks(marks2, theme) - }, - theme - ); -} -function renderCalibrationV2(spec, options = {}) { - assertV2ReferentialIntegrity(spec); - const resolved = resolveV2RenderOptions(displayGroups(spec), options); - const { theme } = resolved; - const data = seriesRenderData(spec, spec.data).map((datum2) => ({ - ...datum2, - title: tooltip(theme.tip.digits, [ - ["Series", datum2.label], - ["Predicted", datum2.predicted], - ["Observed", datum2.observed], - ["Events", datum2.events], - ["Total", datum2.total] - ]) - })); - const marks2 = referenceMarks(spec, theme); - marks2.push( - line(data, { - x: "predicted", - y: "observed", - z: "seriesId", - stroke: "group", - strokeWidth: theme.line.width, - strokeDasharray: theme.line.dash ?? void 0, - title: "title", - tip: true - }) - ); - const discrete = data.filter((datum2) => datum2.method === "discrete"); - if (discrete.length > 0) - marks2.push( - dot(discrete, { - x: "predicted", - y: "observed", - fill: theme.marker.fill ?? "group", - stroke: theme.marker.stroke, - strokeWidth: theme.marker.strokeWidth, - r: theme.marker.radius, - title: "title", - tip: true - }) - ); - const hasDistribution = (spec.distribution?.length ?? 0) > 0; - const mainHeight = hasDistribution ? Math.round(theme.height * 0.8) : theme.height; - const calibration = themedPlot( - { - ...basePlotOptions(resolved, spec), - height: mainHeight, - marginBottom: hasDistribution ? 8 : theme.margins.bottom, - x: hasDistribution ? { - ...axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), - axis: null, - label: null - } : axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), - y: axisOptions2(theme, spec.yAxis.label, spec.yAxis.domain), - marks: finishMarks(marks2, theme) - }, - theme - ); - if (!hasDistribution || !spec.distribution) return calibration; - const distribution = seriesRenderData(spec, spec.distribution).map( - (datum2) => ({ - ...datum2, - title: tooltip(theme.tip.digits, [ - ["Series", datum2.label], - ["Midpoint", datum2.midpoint], - ["Count", datum2.count] - ]) - }) - ); - const histogram = themedPlot( - { - ...basePlotOptions(resolved, spec), - height: theme.height - mainHeight, - marginTop: 0, - marginBottom: theme.margins.bottom, - x: axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), - y: { - label: null, - grid: false, - ticks: 3, - tickSize: theme.axis.tickSize, - tickPadding: theme.axis.tickPadding - }, - color: { legend: false, domain: resolved.groups, range: resolved.colors }, - marks: finishMarks( - [ - rectY(distribution, { - x1: (datum2) => datum2.midpoint - datum2.binWidth / 2, - x2: (datum2) => datum2.midpoint + datum2.binWidth / 2, - y: "count", - fill: "group", - fillOpacity: 1 / Math.max(resolved.groups.length, 1), - title: "title", - tip: true - }) - ], - theme - ) - }, - theme - ); - const container = document.createElement("div"); - container.className = "rtichoke-calibration"; - container.style.width = `${theme.width}px`; - container.style.maxWidth = "100%"; - container.append(calibration, histogram); - return container; + } + return clone; } -function renderLineChart(spec, options, x2, y2) { - assertV2ReferentialIntegrity(spec); - const resolved = resolveV2RenderOptions(displayGroups(spec), options); - const { theme } = resolved; - const data = seriesRenderData( - spec, - spec.data - ).map((datum2) => { - const values2 = datum2; - const yLabel = y2 === "ppv" ? "PPV" : y2 === "sensitivity" ? "Sensitivity" : "Lift"; - return { - ...datum2, - title: tooltip(theme.tip.digits, [ - ["Series", datum2.label], - ["Cutoff", values2.cutoff], - [x2 === "ppcr" ? "PPCR" : "Sensitivity", values2[x2]], - [yLabel, values2[y2]] - ]) - }; - }); - const marks2 = referenceMarks(spec, theme); - marks2.push( - line(data, { - x: x2, - y: y2, - z: "seriesId", - stroke: "group", - strokeWidth: theme.line.width, - strokeDasharray: theme.line.dash ?? void 0, - title: "title", - tip: true - }) - ); - return themedPlot( - { - ...basePlotOptions(resolved, spec), - x: axisOptions2(theme, spec.xAxis.label, spec.xAxis.domain), - y: axisOptions2(theme, spec.yAxis.label, spec.yAxis.domain), - marks: finishMarks(marks2, theme) - }, - theme - ); + +// node_modules/@sinclair/typebox/build/esm/value/encode/encode.mjs +function Encode(...args) { + const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]]; + const encoded = HasTransform(schema, references) ? TransformEncode(schema, references, value) : value; + if (!Check(schema, references, encoded)) + throw new TransformEncodeCheckError(schema, encoded, Errors(schema, references, encoded).First()); + return encoded; } -function horizons(spec) { - return [ - ...new Set( - spec.series.map((series) => series.horizon).filter((horizon) => horizon !== void 0) - ) - ]; + +// node_modules/@sinclair/typebox/build/esm/value/mutate/mutate.mjs +function IsStandardObject2(value) { + return IsObject2(value) && !IsArray2(value); } -function selectHorizonSpec(spec, horizon) { - const series = spec.series.filter( - (item) => item.horizon === void 0 || item.horizon === horizon - ); - const seriesIds = new Set(series.map((item) => item.id)); - return { - ...spec, - series, - data: spec.data.filter((datum2) => seriesIds.has(datum2.seriesId)), - references: spec.references?.filter( - (reference) => reference.scope !== "population_horizon" || reference.horizon === horizon - ) - }; +var ValueMutateError = class extends TypeBoxError { + constructor(message) { + super(message); + } +}; +function ObjectType5(root2, path2, current, next) { + if (!IsStandardObject2(current)) { + pointer_exports.Set(root2, path2, Clone2(next)); + } else { + const currentKeys = Object.getOwnPropertyNames(current); + const nextKeys = Object.getOwnPropertyNames(next); + for (const currentKey of currentKeys) { + if (!nextKeys.includes(currentKey)) { + delete current[currentKey]; + } + } + for (const nextKey of nextKeys) { + if (!currentKeys.includes(nextKey)) { + current[nextKey] = null; + } + } + for (const nextKey of nextKeys) { + Visit16(root2, `${path2}/${nextKey}`, current[nextKey], next[nextKey]); + } + } } -function renderHorizonLineChart(spec, options, x2, y2) { - const availableHorizons = horizons(spec); - if (availableHorizons.length <= 1) return renderLineChart(spec, options, x2, y2); - const container = document.createElement("div"); - container.className = "rtichoke-horizon-chart"; - const control = document.createElement("label"); - control.textContent = "Fixed Time Horizon: "; - const select = document.createElement("select"); - select.setAttribute("aria-label", "Fixed Time Horizon"); - for (const horizon of availableHorizons) { - const option = document.createElement("option"); - option.value = String(horizon); - option.textContent = String(horizon); - select.append(option); +function ArrayType5(root2, path2, current, next) { + if (!IsArray2(current)) { + pointer_exports.Set(root2, path2, Clone2(next)); + } else { + for (let index2 = 0; index2 < next.length; index2++) { + Visit16(root2, `${path2}/${index2}`, current[index2], next[index2]); + } + current.splice(next.length); } - control.append(select); - const chart = document.createElement("div"); - const draw = (horizon) => { - chart.replaceChildren( - renderLineChart(selectHorizonSpec(spec, horizon), options, x2, y2) - ); - }; - select.addEventListener("change", () => draw(Number(select.value))); - container.append(control, chart); - draw(availableHorizons[0]); - return container; } -function renderPrecisionRecallV2(spec, options = {}) { - return renderLineChart(spec, options, "sensitivity", "ppv"); +function TypedArrayType3(root2, path2, current, next) { + if (IsTypedArray(current) && current.length === next.length) { + for (let i = 0; i < current.length; i++) { + current[i] = next[i]; + } + } else { + pointer_exports.Set(root2, path2, Clone2(next)); + } } -function renderGainsV2(spec, options = {}) { - return renderHorizonLineChart(spec, options, "ppcr", "sensitivity"); +function ValueType3(root2, path2, current, next) { + if (current === next) + return; + pointer_exports.Set(root2, path2, next); } -function renderLiftV2(spec, options = {}) { - return renderHorizonLineChart(spec, options, "ppcr", "lift"); +function Visit16(root2, path2, current, next) { + if (IsArray2(next)) + return ArrayType5(root2, path2, current, next); + if (IsTypedArray(next)) + return TypedArrayType3(root2, path2, current, next); + if (IsStandardObject2(next)) + return ObjectType5(root2, path2, current, next); + if (IsValueType(next)) + return ValueType3(root2, path2, current, next); +} +function IsNonMutableValue(value) { + return IsTypedArray(value) || IsValueType(value); +} +function IsMismatchedValue(current, next) { + return IsStandardObject2(current) && IsArray2(next) || IsArray2(current) && IsStandardObject2(next); +} +function Mutate(current, next) { + if (IsNonMutableValue(current) || IsNonMutableValue(next)) + throw new ValueMutateError("Only object and array types can be mutated at the root level"); + if (IsMismatchedValue(current, next)) + throw new ValueMutateError("Cannot assign due type mismatch of assignable values"); + Visit16(current, "", current, next); +} + +// node_modules/@sinclair/typebox/build/esm/value/parse/parse.mjs +var ParseError = class extends TypeBoxError { + constructor(message) { + super(message); + } +}; +var ParseRegistry; +(function(ParseRegistry2) { + const registry2 = /* @__PURE__ */ new Map([ + ["Assert", (type2, references, value) => { + Assert(type2, references, value); + return value; + }], + ["Cast", (type2, references, value) => Cast(type2, references, value)], + ["Clean", (type2, references, value) => Clean(type2, references, value)], + ["Clone", (_type, _references, value) => Clone2(value)], + ["Convert", (type2, references, value) => Convert(type2, references, value)], + ["Decode", (type2, references, value) => HasTransform(type2, references) ? TransformDecode(type2, references, value) : value], + ["Default", (type2, references, value) => Default5(type2, references, value)], + ["Encode", (type2, references, value) => HasTransform(type2, references) ? TransformEncode(type2, references, value) : value] + ]); + function Delete5(key) { + registry2.delete(key); + } + ParseRegistry2.Delete = Delete5; + function Set5(key, callback) { + registry2.set(key, callback); + } + ParseRegistry2.Set = Set5; + function Get4(key) { + return registry2.get(key); + } + ParseRegistry2.Get = Get4; +})(ParseRegistry || (ParseRegistry = {})); +var ParseDefault = [ + "Clone", + "Clean", + "Default", + "Convert", + "Assert", + "Decode" +]; +function ParseValue(operations, type2, references, value) { + return operations.reduce((value2, operationKey) => { + const operation = ParseRegistry.Get(operationKey); + if (IsUndefined2(operation)) + throw new ParseError(`Unable to find Parse operation '${operationKey}'`); + return operation(type2, references, value2); + }, value); } +function Parse(...args) { + const [operations, schema, references, value] = args.length === 4 ? [args[0], args[1], args[2], args[3]] : args.length === 3 ? IsArray2(args[0]) ? [args[0], args[1], [], args[2]] : [ParseDefault, args[0], args[1], args[2]] : args.length === 2 ? [ParseDefault, args[0], [], args[1]] : (() => { + throw new ParseError("Invalid Arguments"); + })(); + return ParseValue(operations, schema, references, value); +} + +// node_modules/@sinclair/typebox/build/esm/value/value/value.mjs +var value_exports2 = {}; +__export(value_exports2, { + Assert: () => Assert, + Cast: () => Cast, + Check: () => Check, + Clean: () => Clean, + Clone: () => Clone2, + Convert: () => Convert, + Create: () => Create2, + Decode: () => Decode, + Default: () => Default5, + Diff: () => Diff, + Edit: () => Edit, + Encode: () => Encode, + Equal: () => Equal, + Errors: () => Errors, + Hash: () => Hash, + Mutate: () => Mutate, + Parse: () => Parse, + Patch: () => Patch, + ValueErrorIterator: () => ValueErrorIterator +}); // src/render/report.ts function renderReport(spec) { - if (!value_exports2.Check(ReportSpecSchema, spec)) { - throw new Error("Invalid ReportSpec"); - } + if (!value_exports2.Check(ReportSpecSchema, spec)) throw new Error("Invalid ReportSpec"); assertReportReferentialIntegrity(spec); const root2 = document.createElement("div"); root2.className = "rtichoke-report"; @@ -22743,6 +22871,9 @@ function renderReport(spec) { case "lift": content.append(renderLiftV2(component.spec)); break; + case "decision_curve": + content.append(renderDecisionCurveV2(component.spec)); + break; } container.append(content); root2.append(container); @@ -22818,6 +22949,11 @@ function renderRoc(spec) { export { CalibrationSpecSchema, CalibrationV2SpecSchema, + DecisionCurveV2DatumSchema, + DecisionCurveV2EvaluationSchema, + DecisionCurveV2ReferenceSchema, + DecisionCurveV2SeriesSchema, + DecisionCurveV2SpecSchema, DisplayGroupingSpecSchema, DisplayRoleSchema, EvaluationSpecSchema, @@ -22841,6 +22977,8 @@ export { RtichokeChartSpecSchema, RtichokeChartSpecV2Schema, SeriesSpecSchema, + TreatAllReferenceSchema, + TreatNoneReferenceSchema, assertPerformanceTableReferentialIntegrity, assertReportReferentialIntegrity, assertV2ReferentialIntegrity, @@ -22848,6 +22986,7 @@ export { calibrationV2SpecFromRtichokeRows, renderCalibration, renderCalibrationV2, + renderDecisionCurveV2, renderGainsV2, renderLiftV2, renderPerformanceTable, From 8b9f38afe92e0a5ae2b5233f98b74f4500ace1ab Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:17:06 +0300 Subject: [PATCH 04/19] chore: remove temporary vendor helper --- .github/workflows/_temporary-vendor-v060.yml | 64 -------------------- 1 file changed, 64 deletions(-) delete mode 100644 .github/workflows/_temporary-vendor-v060.yml diff --git a/.github/workflows/_temporary-vendor-v060.yml b/.github/workflows/_temporary-vendor-v060.yml deleted file mode 100644 index 0aeb6c28..00000000 --- a/.github/workflows/_temporary-vendor-v060.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: Temporary vendor rtichoke_viz v0.6.0 - -on: - push: - branches: - - feat/static-decision-curve-browser - paths: - - .github/workflows/_temporary-vendor-v060.yml - -permissions: - contents: write - -jobs: - vendor: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: feat/static-decision-curve-browser - - name: Download and verify immutable release - shell: bash - run: | - set -euo pipefail - url="https://github.com/uriahf/rtichoke_viz/releases/download/v0.6.0/rtichoke-viz-0.6.0.tar.gz" - expected="625613c7f692ff50b7757a27bb6caf84e311971bde92593141393dbd897af3a2" - tmp="$(mktemp -d)" - archive="$tmp/rtichoke-viz-0.6.0.tar.gz" - curl -fsSL "$url" -o "$archive" - actual="$(sha256sum "$archive" | awk '{print $1}')" - test "$actual" = "$expected" - tar -xzf "$archive" -C "$tmp" - payload_dir="$(dirname "$(find "$tmp" -type f -name rtichoke-viz.js -print -quit)")" - test -n "$payload_dir" - vendor="src/rtichoke/_vendor/rtichoke_viz" - rm -f "$vendor"/rtichoke-viz-*.tar.gz - cp "$archive" "$vendor/" - cp "$payload_dir/rtichoke-viz.js" "$vendor/" - cp "$payload_dir/rtichoke-viz.css" "$vendor/" - cp "$payload_dir/rtichoke-viz.schema.json" "$vendor/" - cp "$payload_dir/rtichoke-viz-v2.schema.json" "$vendor/" - cat > "$vendor/VENDORED_FROM" <<'EOF' - repository=https://github.com/uriahf/rtichoke_viz - release=v0.6.0 - source_commit=3abb3f07a598c3e22d5362a3f88e52bb6b52b083 - archive=rtichoke-viz-0.6.0.tar.gz - sha256=625613c7f692ff50b7757a27bb6caf84e311971bde92593141393dbd897af3a2 - EOF - grep -qx 'version=0.6.0' "$payload_dir/MANIFEST" - grep -qx 'commit=3abb3f07a598c3e22d5362a3f88e52bb6b52b083' "$payload_dir/MANIFEST" - grep -q 'renderDecisionCurveV2' "$vendor/rtichoke-viz.js" - if grep -q 'renderInterventionsAvoidedV2' "$vendor/rtichoke-viz.js"; then - echo 'unexpected Interventions Avoided v2 export in v0.6.0' >&2 - exit 1 - fi - - name: Commit vendored payload - shell: bash - run: | - set -euo pipefail - git config user.name github-actions[bot] - git config user.email 41898282+github-actions[bot]@users.noreply.github.com - git add src/rtichoke/_vendor/rtichoke_viz - git diff --cached --quiet && exit 0 - git commit -m "Vendor immutable rtichoke_viz v0.6.0" - git push origin HEAD:feat/static-decision-curve-browser From 4dd6b53493ccc6f3d7059dae8a384ac8ed02032d Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:17:43 +0300 Subject: [PATCH 05/19] Add static Decision Curve v2 adapter --- src/rtichoke/_decision_curve_viz_spec_v2.py | 170 ++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 src/rtichoke/_decision_curve_viz_spec_v2.py diff --git a/src/rtichoke/_decision_curve_viz_spec_v2.py b/src/rtichoke/_decision_curve_viz_spec_v2.py new file mode 100644 index 00000000..30784d57 --- /dev/null +++ b/src/rtichoke/_decision_curve_viz_spec_v2.py @@ -0,0 +1,170 @@ +"""Canonical static Decision Curve v2 adapter. + +This module translates already-computed production Decision Curve quantities +into the shared rtichoke_viz contract. It deliberately does not recompute model +statistics or threshold membership. +""" + +from __future__ import annotations + +from collections.abc import Mapping + +import polars as pl + +from rtichoke.processing.evaluation_semantics import _EvaluationMetadata + +_REQUIRED_COLUMNS = { + "reference_group", + "chosen_cutoff", + "net_benefit", + "real_positives", + "n", +} + + +def _decision_curve_v2_spec_from_performance_data( + performance_data: pl.DataFrame, + evaluation_metadata: Mapping[str, _EvaluationMetadata], + *, + min_p_threshold: float = 0.0, + max_p_threshold: float = 1.0, +) -> dict[str, object]: + """Build canonical static Decision Curve v2 from production quantities.""" + missing = _REQUIRED_COLUMNS.difference(performance_data.columns) + if missing: + raise ValueError( + "Decision Curve performance data is missing columns: " + + ", ".join(sorted(missing)) + ) + + rows = performance_data.filter( + pl.col("chosen_cutoff").is_finite() & pl.col("net_benefit").is_finite() + ).select( + "reference_group", + "chosen_cutoff", + "net_benefit", + "real_positives", + "n", + ).to_dicts() + + row_groups = {str(row["reference_group"]) for row in rows} + missing_metadata = row_groups.difference(evaluation_metadata) + if missing_metadata: + raise ValueError( + "Decision Curve rows are missing evaluation metadata: " + + ", ".join(sorted(missing_metadata)) + ) + + ordered_groups = [group for group in evaluation_metadata if group in row_groups] + evaluation_ids = { + group: f"evaluation-{index}" + for index, group in enumerate(ordered_groups, start=1) + } + series_ids = { + group: f"series-{index}" for index, group in enumerate(ordered_groups, start=1) + } + + evaluations: list[dict[str, object]] = [] + series: list[dict[str, object]] = [] + for group in ordered_groups: + metadata = evaluation_metadata[group] + evaluation: dict[str, object] = { + "id": evaluation_ids[group], + "population": metadata.population, + } + if metadata.model is not None: + evaluation["model"] = metadata.model + evaluations.append(evaluation) + + display_value = metadata.model or metadata.population + series.append( + { + "id": series_ids[group], + "evaluationId": evaluation_ids[group], + "display": { + "label": display_value, + "group": display_value, + "role": "model" if metadata.model is not None else "population", + }, + } + ) + + data = [ + { + "seriesId": series_ids[str(row["reference_group"])], + "threshold": float(row["chosen_cutoff"]), + "netBenefit": float(row["net_benefit"]), + } + for row in rows + ] + + prevalence_values: dict[str, set[float]] = {} + population_thresholds: dict[str, list[float]] = {} + for row in rows: + group = str(row["reference_group"]) + population = evaluation_metadata[group].population + n = float(row["n"]) + if n <= 0: + raise ValueError("Decision Curve population size must be positive.") + prevalence_values.setdefault(population, set()).add( + float(row["real_positives"]) / n + ) + threshold = float(row["chosen_cutoff"]) + if 0.0 <= threshold < 1.0: + population_thresholds.setdefault(population, []).append(threshold) + + populations = list( + dict.fromkeys(metadata.population for metadata in evaluation_metadata.values()) + ) + references: list[dict[str, object]] = [ + { + "type": "horizontal", + "scope": "global", + "value": 0.0, + "label": "Treat None", + "benchmark": "treat_none", + } + ] + for population in populations: + values = prevalence_values.get(population, set()) + if not values: + continue + if len(values) != 1: + raise ValueError( + f"Population {population!r} has inconsistent prevalence values." + ) + prevalence = next(iter(values)) + thresholds = sorted(set(population_thresholds.get(population, []))) + references.append( + { + "type": "path", + "scope": "population", + "population": population, + "label": f"Treat All — {population}", + "benchmark": "treat_all", + "points": [ + { + "x": threshold, + "y": prevalence + - (1.0 - prevalence) * threshold / (1.0 - threshold), + } + for threshold in thresholds + ], + } + ) + + return { + "schemaVersion": "2.0", + "type": "decision_curve", + "evaluations": evaluations, + "series": series, + "data": data, + "x": "threshold", + "y": "netBenefit", + "xAxis": { + "label": "Probability threshold", + "domain": [min_p_threshold, max_p_threshold], + }, + "yAxis": {"label": "Net benefit"}, + "references": references, + } From d3ce823cb7c582378ae61e7b55f5c6504cb02daf Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:18:18 +0300 Subject: [PATCH 06/19] Wire static Decision Curve browser rendering --- src/rtichoke/utility/decision.py | 205 +++++++++++++++---------------- 1 file changed, 101 insertions(+), 104 deletions(-) diff --git a/src/rtichoke/utility/decision.py b/src/rtichoke/utility/decision.py index b47f1296..8e9abdc3 100644 --- a/src/rtichoke/utility/decision.py +++ b/src/rtichoke/utility/decision.py @@ -1,17 +1,64 @@ """ -A module for Decision Curves using Plotly helpers +A module for Decision Curves using Plotly helpers and canonical browser rendering. """ -from typing import Dict, List, Sequence, Union +from typing import Any, Dict, List, Sequence, Union + +import numpy as np +import polars as pl from plotly.graph_objs._figure import Figure + +from rtichoke._decision_curve_viz_spec_v2 import ( + _decision_curve_v2_spec_from_performance_data, +) +from rtichoke._renderers import RtichokeBrowserChart, _validate_renderer +from rtichoke.performance_data.performance_data import prepare_performance_data from rtichoke.processing.binary_color_values import _apply_color_values_binary +from rtichoke.processing.evaluation_semantics import ( + _EvaluationMetadata, + _build_evaluation_metadata, +) from rtichoke.processing.plotly_helper_functions import _plot_rtichoke_curve_binary from rtichoke.processing.time_reference_lines import ( _create_rtichoke_plotly_curve_times_reference_safe, ) -from rtichoke.performance_data.performance_data import prepare_performance_data -import numpy as np -import polars as pl + + +def _decision_curve_browser_chart( + performance_data: pl.DataFrame, + evaluation_metadata: dict[str, _EvaluationMetadata], + *, + size: int, + min_p_threshold: float, + max_p_threshold: float, +) -> RtichokeBrowserChart: + spec = _decision_curve_v2_spec_from_performance_data( + performance_data, + evaluation_metadata, + min_p_threshold=min_p_threshold, + max_p_threshold=max_p_threshold, + ) + return RtichokeBrowserChart(spec=spec, size=size) + + +def _performance_data_evaluation_metadata( + performance_data: pl.DataFrame, +) -> dict[str, _EvaluationMetadata]: + """Treat pre-computed groups as populations when model identity is unknown.""" + groups = list( + dict.fromkeys( + str(value) for value in performance_data["reference_group"].to_list() + ) + ) + return { + group: _EvaluationMetadata( + reference_group=group, + evaluation=group, + model=None, + population=group, + ) + for group in groups + } def create_decision_curve( @@ -45,44 +92,37 @@ def create_decision_curve( "#D1603D", "#585123", ], -) -> Figure: + renderer: str = "plotly", +) -> Any: """Creates a Decision Curve. - Decision Curve Analysis is a method for evaluating and comparing prediction - models that incorporates the clinical consequences of a decision. The curve - plots the net benefit of a model against the probability threshold used to - determine positive cases. This helps to assess the real-world utility of a - model. - - Parameters - ---------- - probs : Dict[str, np.ndarray] - A dictionary mapping model or dataset names to 1-D numpy arrays of - predicted probabilities. - reals : Union[np.ndarray, Dict[str, np.ndarray]] - The true binary labels (0 or 1). - decision_type : str, optional - Type of decision curve. ``"conventional"`` for a standard decision curve - or another value for the "interventions avoided" variant. Defaults to - ``"conventional"``. - min_p_threshold : float, optional - The minimum probability threshold to plot. Defaults to 0. - max_p_threshold : float, optional - The maximum probability threshold to plot. Defaults to 1. - by : float, optional - The step size for the probability thresholds. Defaults to 0.01. - stratified_by : Sequence[str], optional - Variables for stratification. Defaults to ``["probability_threshold"]``. - size : int, optional - The width and height of the plot in pixels. Defaults to 600. - color_values : List[str], optional - A list of hex color strings for the plot lines. - - Returns - ------- - Figure - A Plotly ``Figure`` object representing the Decision Curve. + ``renderer="plotly"`` preserves the historical default. For static + conventional Decision Curves, ``"browser"`` and ``"rtichoke_viz"`` return + a canonical :class:`RtichokeBrowserChart` built from the already-computed + production net-benefit values. """ + selected_renderer = _validate_renderer(renderer) + if selected_renderer != "plotly": + if selected_renderer == "matplotlib" or decision_type != "conventional": + raise ValueError( + "Static conventional Decision Curves support 'plotly', 'browser', " + "and 'rtichoke_viz' renderers." + ) + performance_data = prepare_performance_data( + probs=probs, + reals=reals, + stratified_by=stratified_by, + by=by, + ) + evaluation_metadata = _build_evaluation_metadata(probs, reals, np.array([])) + return _decision_curve_browser_chart( + performance_data, + evaluation_metadata, + size=size, + min_p_threshold=min_p_threshold, + max_p_threshold=max_p_threshold, + ) + if decision_type == "conventional": curve = "decision" else: @@ -113,34 +153,29 @@ def plot_decision_curve( max_p_threshold: float = 1, stratified_by: Sequence[str] = ["probability_threshold"], size: int = 600, -) -> Figure: + renderer: str = "plotly", +) -> Any: """Plots a Decision Curve from pre-computed performance data. - This function is useful for plotting a Decision Curve directly from a - DataFrame that already contains the necessary performance metrics. - - Parameters - ---------- - performance_data : pl.DataFrame - A Polars DataFrame with performance metrics, including net benefit and - probability thresholds. - decision_type : str, optional - Type of decision curve to plot. Defaults to ``"conventional"``. - min_p_threshold : float, optional - The minimum probability threshold to plot. Defaults to 0. - max_p_threshold : float, optional - The maximum probability threshold to plot. Defaults to 1. - stratified_by : Sequence[str], optional - The columns in `performance_data` used for stratification. Defaults to - ``["probability_threshold"]``. - size : int, optional - The width and height of the plot in pixels. Defaults to 600. - - Returns - ------- - Figure - A Plotly ``Figure`` object representing the Decision Curve. + For browser rendering, pre-computed ``reference_group`` values are treated + as distinct populations because separate model identity is not encoded in + this input shape. """ + selected_renderer = _validate_renderer(renderer) + if selected_renderer != "plotly": + if selected_renderer == "matplotlib" or decision_type != "conventional": + raise ValueError( + "Static conventional Decision Curves support 'plotly', 'browser', " + "and 'rtichoke_viz' renderers." + ) + return _decision_curve_browser_chart( + performance_data, + _performance_data_evaluation_metadata(performance_data), + size=size, + min_p_threshold=min_p_threshold, + max_p_threshold=max_p_threshold, + ) + if decision_type == "conventional": curve = "decision" else: @@ -197,44 +232,7 @@ def create_decision_curve_times( "#585123", ], ) -> Figure: - """Creates a time-dependent Decision Curve. - - Generates a Decision Curve for time-to-event models, which is evaluated at - specified time horizons and handles censored data and competing risks. - - Parameters - ---------- - probs : Dict[str, np.ndarray] - A dictionary of predicted probabilities. - reals : Union[np.ndarray, Dict[str, np.ndarray]] - The true event statuses. - times : Union[np.ndarray, Dict[str, np.ndarray]] - The event or censoring times. - fixed_time_horizons : list[float] - A list of time points for performance evaluation. - decision_type : str, optional - Type of decision curve to plot. Defaults to ``"conventional"``. - heuristics_sets : list[Dict], optional - Specifies how to handle censored data and competing events. - min_p_threshold : float, optional - The minimum probability threshold to plot. Defaults to 0. - max_p_threshold : float, optional - The maximum probability threshold to plot. Defaults to 1. - by : float, optional - The step size for the probability thresholds. Defaults to 0.01. - stratified_by : Sequence[str], optional - Variables for stratification. Defaults to ``["probability_threshold"]``. - size : int, optional - The width and height of the plot in pixels. Defaults to 600. - color_values : List[str], optional - A list of hex color strings for the plot lines. - - Returns - ------- - Figure - A Plotly ``Figure`` object for the time-dependent Decision Curve. - """ - + """Creates a time-dependent Decision Curve using the existing Plotly path.""" if decision_type == "conventional": curve = "decision" else: @@ -254,5 +252,4 @@ def create_decision_curve_times( min_p_threshold=min_p_threshold, max_p_threshold=max_p_threshold, ) - return fig From 2f4ff95d80302a9424aaaccc92b7327f9460846d Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:18:47 +0300 Subject: [PATCH 07/19] Test static Decision Curve browser adoption --- tests/test_decision_curve_v2.py | 153 ++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 tests/test_decision_curve_v2.py diff --git a/tests/test_decision_curve_v2.py b/tests/test_decision_curve_v2.py new file mode 100644 index 00000000..37144b24 --- /dev/null +++ b/tests/test_decision_curve_v2.py @@ -0,0 +1,153 @@ +from pathlib import Path + +import numpy as np +import polars as pl +from plotly.graph_objects import Figure + +from rtichoke._decision_curve_viz_spec_v2 import ( + _decision_curve_v2_spec_from_performance_data, +) +from rtichoke._renderers import RtichokeBrowserChart +from rtichoke.processing.evaluation_semantics import _EvaluationMetadata +from rtichoke.utility.decision import create_decision_curve, plot_decision_curve + + +def _performance_data(*, equal_prevalence: bool = False) -> pl.DataFrame: + p_a = (2, 8) + p_b = p_a if equal_prevalence else (4, 8) + rows = [] + for group, (positives, n), values in ( + ("a", p_a, (0.20, 0.12)), + ("b", p_b, (0.30, 0.18)), + ): + for threshold, net_benefit in zip((0.2, 0.5), values): + rows.append( + { + "reference_group": group, + "chosen_cutoff": threshold, + "net_benefit": net_benefit, + "real_positives": positives, + "n": n, + } + ) + return pl.DataFrame(rows) + + +def test_shared_population_has_two_evaluations_and_one_treat_all_path(): + data = _performance_data(equal_prevalence=True) + metadata = { + "a": _EvaluationMetadata("a", "a", "model-a", "population-1"), + "b": _EvaluationMetadata("b", "b", "model-b", "population-1"), + } + + spec = _decision_curve_v2_spec_from_performance_data(data, metadata) + + assert spec["schemaVersion"] == "2.0" + assert spec["type"] == "decision_curve" + assert [item["id"] for item in spec["evaluations"]] == [ + "evaluation-1", + "evaluation-2", + ] + assert [item["id"] for item in spec["series"]] == ["series-1", "series-2"] + assert all( + series["id"] != series["evaluationId"] for series in spec["series"] + ) + assert [row["netBenefit"] for row in spec["data"]] == [0.20, 0.12, 0.30, 0.18] + + treat_none = [r for r in spec["references"] if r["benchmark"] == "treat_none"] + treat_all = [r for r in spec["references"] if r["benchmark"] == "treat_all"] + assert treat_none == [ + { + "type": "horizontal", + "scope": "global", + "value": 0.0, + "label": "Treat None", + "benchmark": "treat_none", + } + ] + assert len(treat_all) == 1 + assert treat_all[0]["scope"] == "population" + assert treat_all[0]["population"] == "population-1" + assert treat_all[0]["points"][0] == {"x": 0.2, "y": 0.0625} + + +def test_distinct_equal_prevalence_populations_remain_distinct_reference_owners(): + data = _performance_data(equal_prevalence=True) + metadata = { + "a": _EvaluationMetadata("a", "a", None, "population-a"), + "b": _EvaluationMetadata("b", "b", None, "population-b"), + } + + spec = _decision_curve_v2_spec_from_performance_data(data, metadata) + treat_all = [r for r in spec["references"] if r["benchmark"] == "treat_all"] + + assert [r["population"] for r in treat_all] == ["population-a", "population-b"] + assert treat_all[0]["points"] == treat_all[1]["points"] + assert all("model" not in evaluation for evaluation in spec["evaluations"]) + assert [series["display"]["role"] for series in spec["series"]] == [ + "population", + "population", + ] + + +def test_model_values_are_copied_not_recomputed(): + data = pl.DataFrame( + { + "reference_group": ["a"], + "chosen_cutoff": [0.37], + "net_benefit": [0.123456789], + "real_positives": [2], + "n": [8], + } + ) + metadata = { + "a": _EvaluationMetadata("a", "a", "model-a", "population-a") + } + + spec = _decision_curve_v2_spec_from_performance_data(data, metadata) + + assert spec["data"] == [ + {"seriesId": "series-1", "threshold": 0.37, "netBenefit": 0.123456789} + ] + + +def test_public_browser_renderer_is_opt_in_and_plotly_remains_default(tmp_path: Path): + probs = {"model-a": np.array([0.9, 0.7, 0.4, 0.1])} + reals = np.array([1, 1, 0, 0]) + + browser = create_decision_curve(probs, reals, by=0.2, renderer="browser") + alias = create_decision_curve(probs, reals, by=0.2, renderer="rtichoke_viz") + plotly = create_decision_curve(probs, reals, by=0.2) + + assert isinstance(browser, RtichokeBrowserChart) + assert isinstance(alias, RtichokeBrowserChart) + assert isinstance(plotly, Figure) + html_path = browser.write_html(tmp_path / "decision.html") + html = html_path.read_text(encoding="utf-8") + assert "renderDecisionCurveV2" in html + assert browser.spec["type"] == "decision_curve" + + +def test_precomputed_browser_input_does_not_fabricate_model_identity(): + browser = plot_decision_curve(_performance_data(), renderer="browser") + + assert isinstance(browser, RtichokeBrowserChart) + assert all("model" not in item for item in browser.spec["evaluations"]) + assert [item["population"] for item in browser.spec["evaluations"]] == ["a", "b"] + + +def test_browser_adoption_does_not_enable_interventions_avoided(): + probs = {"model-a": np.array([0.9, 0.7, 0.4, 0.1])} + reals = np.array([1, 1, 0, 0]) + + try: + create_decision_curve( + probs, + reals, + decision_type="interventions avoided", + renderer="browser", + ) + except ValueError as error: + assert "Static conventional Decision Curves" in str(error) + else: + raise AssertionError("Interventions Avoided browser adoption is out of scope") From 578bd28a6411cbe1cfb609b6626b93dd2b5811f6 Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:19:00 +0300 Subject: [PATCH 08/19] Verify vendored rtichoke_viz v0.6.0 --- tests/test_rtichoke_viz_vendor.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/tests/test_rtichoke_viz_vendor.py b/tests/test_rtichoke_viz_vendor.py index 8b504a23..77e48991 100644 --- a/tests/test_rtichoke_viz_vendor.py +++ b/tests/test_rtichoke_viz_vendor.py @@ -4,18 +4,19 @@ _VENDOR = Path(__file__).parents[1] / "src" / "rtichoke" / "_vendor" / "rtichoke_viz" -_RELEASE_DIR = "rtichoke-viz-0.5.0" -_SHA256 = "ab36ae71f9090b4de62da8f552ebe84ac35885ab04958667faaf070db2c98f65" +_RELEASE_DIR = "rtichoke-viz-0.6.0" +_SHA256 = "625613c7f692ff50b7757a27bb6caf84e311971bde92593141393dbd897af3a2" +_SOURCE_COMMIT = "3abb3f07a598c3e22d5362a3f88e52bb6b52b083" -def test_vendored_rtichoke_viz_v050_provenance_archive_and_schemas(): +def test_vendored_rtichoke_viz_v060_provenance_archive_and_schemas(): provenance = (_VENDOR / "VENDORED_FROM").read_text() - assert "release=v0.5.0" in provenance - assert "source_commit=9c5a114ebe968e8cef4d2f14bf82ed552d2c8a17" in provenance - assert "archive=rtichoke-viz-0.5.0.tar.gz" in provenance + assert "release=v0.6.0" in provenance + assert f"source_commit={_SOURCE_COMMIT}" in provenance + assert "archive=rtichoke-viz-0.6.0.tar.gz" in provenance assert f"sha256={_SHA256}" in provenance - archive = _VENDOR / "rtichoke-viz-0.5.0.tar.gz" + archive = _VENDOR / "rtichoke-viz-0.6.0.tar.gz" assert hashlib.sha256(archive.read_bytes()).hexdigest() == _SHA256 with tarfile.open(archive, "r:gz") as release: assert set(release.getnames()) == { @@ -28,7 +29,9 @@ def test_vendored_rtichoke_viz_v050_provenance_archive_and_schemas(): } manifest = release.extractfile(f"{_RELEASE_DIR}/MANIFEST") assert manifest is not None - assert manifest.read() + assert manifest.read().decode() == ( + f"version=0.6.0\ncommit={_SOURCE_COMMIT}\n" + ) for filename in ( "rtichoke-viz.css", "rtichoke-viz.js", @@ -39,7 +42,7 @@ def test_vendored_rtichoke_viz_v050_provenance_archive_and_schemas(): assert packaged is not None assert (_VENDOR / filename).read_bytes() == packaged.read() - assert not (_VENDOR / "rtichoke-viz-0.4.0.tar.gz").exists() + assert not (_VENDOR / "rtichoke-viz-0.5.0.tar.gz").exists() assert (_VENDOR / "rtichoke-viz.js").stat().st_size > 0 assert (_VENDOR / "rtichoke-viz.css").stat().st_size > 0 @@ -47,9 +50,10 @@ def test_vendored_rtichoke_viz_v050_provenance_archive_and_schemas(): v2_schema = (_VENDOR / "rtichoke-viz-v2.schema.json").read_text() assert '"$id": "https://rtichoke.dev/schema/viz/1.0.json"' in v1_schema assert '"$id": "https://rtichoke.dev/schema/viz/2.0.json"' in v2_schema + assert '"decision_curve"' in v2_schema -def test_v050_bundle_keeps_existing_exports_and_adds_report_exports(): +def test_v060_bundle_keeps_existing_exports_and_adds_decision_curve(): bundle = (_VENDOR / "rtichoke-viz.js").read_text(encoding="utf-8") for export_name in ( "renderRoc", @@ -57,10 +61,13 @@ def test_v050_bundle_keeps_existing_exports_and_adds_report_exports(): "RtichokeChartSpecSchema", "renderGainsV2", "renderLiftV2", + "renderDecisionCurveV2", + "DecisionCurveV2SpecSchema", "RtichokeChartSpecV2Schema", "renderPerformanceTable", "renderReport", ): assert export_name in bundle + assert "renderInterventionsAvoidedV2" not in bundle assert "Fixed Time Horizon" in bundle From ced9bc65f81fb22d5f6694a5f4af7b9a7c21198e Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:19:12 +0300 Subject: [PATCH 09/19] chore: stage Decision Curve renderer check --- .../_temporary-decision-curve-check.yml | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .github/workflows/_temporary-decision-curve-check.yml diff --git a/.github/workflows/_temporary-decision-curve-check.yml b/.github/workflows/_temporary-decision-curve-check.yml new file mode 100644 index 00000000..4ec7461f --- /dev/null +++ b/.github/workflows/_temporary-decision-curve-check.yml @@ -0,0 +1,53 @@ +name: Temporary Decision Curve check + +on: + push: + branches: + - feat/static-decision-curve-browser + paths: + - .github/workflows/_temporary-decision-curve-check.yml + +permissions: + contents: write + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: feat/static-decision-curve-browser + - uses: astral-sh/setup-uv@v6 + - name: Add Decision Curve browser export dispatch + shell: bash + run: | + set -euo pipefail + python - <<'PY' + from pathlib import Path + path = Path('src/rtichoke/_renderers.py') + text = path.read_text() + old = ' "lift": "renderLiftV2",\n' + new = old + ' "decision_curve": "renderDecisionCurveV2",\n' + if '"decision_curve": "renderDecisionCurveV2"' not in text: + if old not in text: + raise SystemExit('renderer dispatch anchor missing') + text = text.replace(old, new, 1) + path.write_text(text) + PY + - name: Run focused checks + shell: bash + run: | + set -euo pipefail + uv sync + uv run ruff check src/rtichoke/_decision_curve_viz_spec_v2.py src/rtichoke/utility/decision.py src/rtichoke/_renderers.py tests/test_decision_curve_v2.py tests/test_rtichoke_viz_vendor.py + uv run pytest -q tests/test_decision_curve_v2.py tests/test_rtichoke_viz_vendor.py tests/test_cutoff_boundary_semantics.py tests/test_interventions_avoided_scaling.py tests/test_decision_curve_dcurves_parity.py + - name: Commit renderer dispatch + shell: bash + run: | + set -euo pipefail + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + git add src/rtichoke/_renderers.py + git diff --cached --quiet && exit 0 + git commit -m "Dispatch Decision Curve browser renderer" + git push origin HEAD:feat/static-decision-curve-browser From 15e69d23c892cfccc27b461b0bcb124d6566445d Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:20:23 +0300 Subject: [PATCH 10/19] Use tolerant Treat All geometry assertion --- tests/test_decision_curve_v2.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_decision_curve_v2.py b/tests/test_decision_curve_v2.py index 37144b24..3fe04974 100644 --- a/tests/test_decision_curve_v2.py +++ b/tests/test_decision_curve_v2.py @@ -68,7 +68,9 @@ def test_shared_population_has_two_evaluations_and_one_treat_all_path(): assert len(treat_all) == 1 assert treat_all[0]["scope"] == "population" assert treat_all[0]["population"] == "population-1" - assert treat_all[0]["points"][0] == {"x": 0.2, "y": 0.0625} + first_point = treat_all[0]["points"][0] + assert first_point["x"] == 0.2 + assert np.isclose(first_point["y"], 0.0625) def test_distinct_equal_prevalence_populations_remain_distinct_reference_owners(): From c07501d8d483af8cf54f147e01df9b3a7ff98d67 Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:20:40 +0300 Subject: [PATCH 11/19] chore: rerun Decision Curve focused checks --- .github/workflows/_temporary-decision-curve-check.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/_temporary-decision-curve-check.yml b/.github/workflows/_temporary-decision-curve-check.yml index 4ec7461f..548ef709 100644 --- a/.github/workflows/_temporary-decision-curve-check.yml +++ b/.github/workflows/_temporary-decision-curve-check.yml @@ -51,3 +51,5 @@ jobs: git diff --cached --quiet && exit 0 git commit -m "Dispatch Decision Curve browser renderer" git push origin HEAD:feat/static-decision-curve-browser + +# temporary rerun after floating-point assertion fix From b667f3b8d1a0a90c75ccd5e2624fbf48bea6a043 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 09:21:16 +0000 Subject: [PATCH 12/19] Dispatch Decision Curve browser renderer --- src/rtichoke/_renderers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rtichoke/_renderers.py b/src/rtichoke/_renderers.py index 97135714..3e9970f4 100644 --- a/src/rtichoke/_renderers.py +++ b/src/rtichoke/_renderers.py @@ -55,6 +55,7 @@ def write_html(self, path: str | Path) -> Path: "precision_recall": "renderPrecisionRecallV2", "gains": "renderGainsV2", "lift": "renderLiftV2", + "decision_curve": "renderDecisionCurveV2", }.get(str(self.spec.get("type"))) if render_export is None: raise ValueError( From 7360ea4ab8aa325488ed971ba387c3d62e269c8a Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:22:08 +0300 Subject: [PATCH 13/19] Add Decision Curve real-browser acceptance --- .../test_decision_curve_browser_acceptance.py | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tests/test_decision_curve_browser_acceptance.py diff --git a/tests/test_decision_curve_browser_acceptance.py b/tests/test_decision_curve_browser_acceptance.py new file mode 100644 index 00000000..15d8b716 --- /dev/null +++ b/tests/test_decision_curve_browser_acceptance.py @@ -0,0 +1,71 @@ +from contextlib import contextmanager +from functools import partial +from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path +from threading import Thread +from typing import Iterator + +import numpy as np +import pytest + +from rtichoke.utility.decision import create_decision_curve + + +@contextmanager +def _serve(directory: Path) -> Iterator[str]: + handler = partial(SimpleHTTPRequestHandler, directory=str(directory)) + server = ThreadingHTTPServer(("127.0.0.1", 0), handler) + thread = Thread(target=server.serve_forever, daemon=True) + thread.start() + try: + yield f"http://127.0.0.1:{server.server_port}" + finally: + server.shutdown() + thread.join() + server.server_close() + + +def test_static_decision_curve_renders_model_and_references_in_real_browser(tmp_path): + try: + from playwright.sync_api import sync_playwright # type: ignore[import-untyped] + except ImportError: + pytest.skip("playwright is not available") + + probs = { + "Model A": np.array([0.05, 0.15, 0.30, 0.45, 0.60, 0.75, 0.90]), + "Model B": np.array([0.10, 0.20, 0.35, 0.50, 0.65, 0.80, 0.95]), + } + reals = np.array([0, 0, 0, 1, 0, 1, 1]) + chart = create_decision_curve( + probs, + reals, + by=0.1, + min_p_threshold=0.1, + max_p_threshold=0.8, + renderer="browser", + ) + chart.write_html(tmp_path / "decision.html") + + with _serve(tmp_path) as base_url: + with sync_playwright() as p: + browser = p.chromium.launch(headless=True) + page = browser.new_page() + errors: list[str] = [] + page.on( + "console", + lambda msg: errors.append(msg.text) + if msg.type in ["error", "warning"] + else None, + ) + page.on("pageerror", lambda err: errors.append(str(err))) + page.goto(f"{base_url}/decision.html") + page.wait_for_selector("svg") + + content = page.content() + assert "Model A" in content + assert "Model B" in content + assert "Treat None" in content + assert "Treat All" in content + assert page.locator("svg").count() >= 1 + assert len(errors) == 0, f"Console errors found: {errors}" + browser.close() From c73c0f4b0b775bcc5663439f129f5aa94d3b5a77 Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:22:27 +0300 Subject: [PATCH 14/19] Run Decision Curve browser acceptance --- .github/workflows/quarto-acceptance.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/quarto-acceptance.yml b/.github/workflows/quarto-acceptance.yml index 632e811d..21d8ab25 100644 --- a/.github/workflows/quarto-acceptance.yml +++ b/.github/workflows/quarto-acceptance.yml @@ -7,9 +7,13 @@ on: - "src/rtichoke/summary_report/**" - "src/rtichoke/_report_browser.py" - "src/rtichoke/_report_spec.py" + - "src/rtichoke/_renderers.py" + - "src/rtichoke/_decision_curve_viz_spec_v2.py" + - "src/rtichoke/utility/decision.py" - "src/rtichoke/_vendor/rtichoke_viz/**" - "tests/test_quarto_summary_report_browser.py" - "tests/test_summary_report_browser.py" + - "tests/test_decision_curve_browser_acceptance.py" - ".github/workflows/quarto-acceptance.yml" pull_request: branches: ["main"] @@ -17,9 +21,13 @@ on: - "src/rtichoke/summary_report/**" - "src/rtichoke/_report_browser.py" - "src/rtichoke/_report_spec.py" + - "src/rtichoke/_renderers.py" + - "src/rtichoke/_decision_curve_viz_spec_v2.py" + - "src/rtichoke/utility/decision.py" - "src/rtichoke/_vendor/rtichoke_viz/**" - "tests/test_quarto_summary_report_browser.py" - "tests/test_summary_report_browser.py" + - "tests/test_decision_curve_browser_acceptance.py" - ".github/workflows/quarto-acceptance.yml" workflow_dispatch: @@ -48,5 +56,8 @@ jobs: - name: Install Playwright Chromium for browser acceptance run: uv run --with playwright playwright install chromium - - name: Run Quarto browser report acceptance tests - run: uv run --with playwright pytest tests/test_quarto_summary_report_browser.py + - name: Run browser acceptance tests + run: >- + uv run --with playwright pytest + tests/test_quarto_summary_report_browser.py + tests/test_decision_curve_browser_acceptance.py From 8c1f09bc15c4363e5609d57a795b7dc216a6b683 Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:22:34 +0300 Subject: [PATCH 15/19] chore: remove temporary Decision Curve check --- .../_temporary-decision-curve-check.yml | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 .github/workflows/_temporary-decision-curve-check.yml diff --git a/.github/workflows/_temporary-decision-curve-check.yml b/.github/workflows/_temporary-decision-curve-check.yml deleted file mode 100644 index 548ef709..00000000 --- a/.github/workflows/_temporary-decision-curve-check.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: Temporary Decision Curve check - -on: - push: - branches: - - feat/static-decision-curve-browser - paths: - - .github/workflows/_temporary-decision-curve-check.yml - -permissions: - contents: write - -jobs: - check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: feat/static-decision-curve-browser - - uses: astral-sh/setup-uv@v6 - - name: Add Decision Curve browser export dispatch - shell: bash - run: | - set -euo pipefail - python - <<'PY' - from pathlib import Path - path = Path('src/rtichoke/_renderers.py') - text = path.read_text() - old = ' "lift": "renderLiftV2",\n' - new = old + ' "decision_curve": "renderDecisionCurveV2",\n' - if '"decision_curve": "renderDecisionCurveV2"' not in text: - if old not in text: - raise SystemExit('renderer dispatch anchor missing') - text = text.replace(old, new, 1) - path.write_text(text) - PY - - name: Run focused checks - shell: bash - run: | - set -euo pipefail - uv sync - uv run ruff check src/rtichoke/_decision_curve_viz_spec_v2.py src/rtichoke/utility/decision.py src/rtichoke/_renderers.py tests/test_decision_curve_v2.py tests/test_rtichoke_viz_vendor.py - uv run pytest -q tests/test_decision_curve_v2.py tests/test_rtichoke_viz_vendor.py tests/test_cutoff_boundary_semantics.py tests/test_interventions_avoided_scaling.py tests/test_decision_curve_dcurves_parity.py - - name: Commit renderer dispatch - shell: bash - run: | - set -euo pipefail - git config user.name github-actions[bot] - git config user.email 41898282+github-actions[bot]@users.noreply.github.com - git add src/rtichoke/_renderers.py - git diff --cached --quiet && exit 0 - git commit -m "Dispatch Decision Curve browser renderer" - git push origin HEAD:feat/static-decision-curve-browser - -# temporary rerun after floating-point assertion fix From 8d32192be6d2dd54b1d05e0f0410427037f4f93e Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:24:59 +0300 Subject: [PATCH 16/19] chore: stage Ruff formatting --- .github/workflows/_temporary-format.yml | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/_temporary-format.yml diff --git a/.github/workflows/_temporary-format.yml b/.github/workflows/_temporary-format.yml new file mode 100644 index 00000000..dd731356 --- /dev/null +++ b/.github/workflows/_temporary-format.yml @@ -0,0 +1,35 @@ +name: Temporary Ruff format + +on: + push: + branches: + - feat/static-decision-curve-browser + paths: + - .github/workflows/_temporary-format.yml + +permissions: + contents: write + +jobs: + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: feat/static-decision-curve-browser + - uses: astral-sh/setup-uv@v6 + - run: uv sync + - name: Format touched Python files + run: >- + uv run ruff format + src/rtichoke/_decision_curve_viz_spec_v2.py + tests/test_decision_curve_v2.py + tests/test_rtichoke_viz_vendor.py + - name: Commit formatting + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + git add src/rtichoke/_decision_curve_viz_spec_v2.py tests/test_decision_curve_v2.py tests/test_rtichoke_viz_vendor.py + git diff --cached --quiet && exit 0 + git commit -m "Format Decision Curve browser changes" + git push origin HEAD:feat/static-decision-curve-browser From e907e96068cb72e80e2fcafc310391742cdff376 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 09:25:26 +0000 Subject: [PATCH 17/19] Format Decision Curve browser changes --- src/rtichoke/_decision_curve_viz_spec_v2.py | 22 ++++++++++++--------- tests/test_decision_curve_v2.py | 8 ++------ tests/test_rtichoke_viz_vendor.py | 4 +--- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/rtichoke/_decision_curve_viz_spec_v2.py b/src/rtichoke/_decision_curve_viz_spec_v2.py index 30784d57..ec57e55a 100644 --- a/src/rtichoke/_decision_curve_viz_spec_v2.py +++ b/src/rtichoke/_decision_curve_viz_spec_v2.py @@ -37,15 +37,19 @@ def _decision_curve_v2_spec_from_performance_data( + ", ".join(sorted(missing)) ) - rows = performance_data.filter( - pl.col("chosen_cutoff").is_finite() & pl.col("net_benefit").is_finite() - ).select( - "reference_group", - "chosen_cutoff", - "net_benefit", - "real_positives", - "n", - ).to_dicts() + rows = ( + performance_data.filter( + pl.col("chosen_cutoff").is_finite() & pl.col("net_benefit").is_finite() + ) + .select( + "reference_group", + "chosen_cutoff", + "net_benefit", + "real_positives", + "n", + ) + .to_dicts() + ) row_groups = {str(row["reference_group"]) for row in rows} missing_metadata = row_groups.difference(evaluation_metadata) diff --git a/tests/test_decision_curve_v2.py b/tests/test_decision_curve_v2.py index 3fe04974..f0279cc1 100644 --- a/tests/test_decision_curve_v2.py +++ b/tests/test_decision_curve_v2.py @@ -49,9 +49,7 @@ def test_shared_population_has_two_evaluations_and_one_treat_all_path(): "evaluation-2", ] assert [item["id"] for item in spec["series"]] == ["series-1", "series-2"] - assert all( - series["id"] != series["evaluationId"] for series in spec["series"] - ) + assert all(series["id"] != series["evaluationId"] for series in spec["series"]) assert [row["netBenefit"] for row in spec["data"]] == [0.20, 0.12, 0.30, 0.18] treat_none = [r for r in spec["references"] if r["benchmark"] == "treat_none"] @@ -102,9 +100,7 @@ def test_model_values_are_copied_not_recomputed(): "n": [8], } ) - metadata = { - "a": _EvaluationMetadata("a", "a", "model-a", "population-a") - } + metadata = {"a": _EvaluationMetadata("a", "a", "model-a", "population-a")} spec = _decision_curve_v2_spec_from_performance_data(data, metadata) diff --git a/tests/test_rtichoke_viz_vendor.py b/tests/test_rtichoke_viz_vendor.py index 77e48991..c4bc49a8 100644 --- a/tests/test_rtichoke_viz_vendor.py +++ b/tests/test_rtichoke_viz_vendor.py @@ -29,9 +29,7 @@ def test_vendored_rtichoke_viz_v060_provenance_archive_and_schemas(): } manifest = release.extractfile(f"{_RELEASE_DIR}/MANIFEST") assert manifest is not None - assert manifest.read().decode() == ( - f"version=0.6.0\ncommit={_SOURCE_COMMIT}\n" - ) + assert manifest.read().decode() == (f"version=0.6.0\ncommit={_SOURCE_COMMIT}\n") for filename in ( "rtichoke-viz.css", "rtichoke-viz.js", From 96561d309f5e900dacf47f736746b8e000d180d9 Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:25:35 +0300 Subject: [PATCH 18/19] chore: remove temporary Ruff formatter --- .github/workflows/_temporary-format.yml | 35 ------------------------- 1 file changed, 35 deletions(-) delete mode 100644 .github/workflows/_temporary-format.yml diff --git a/.github/workflows/_temporary-format.yml b/.github/workflows/_temporary-format.yml deleted file mode 100644 index dd731356..00000000 --- a/.github/workflows/_temporary-format.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Temporary Ruff format - -on: - push: - branches: - - feat/static-decision-curve-browser - paths: - - .github/workflows/_temporary-format.yml - -permissions: - contents: write - -jobs: - format: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: feat/static-decision-curve-browser - - uses: astral-sh/setup-uv@v6 - - run: uv sync - - name: Format touched Python files - run: >- - uv run ruff format - src/rtichoke/_decision_curve_viz_spec_v2.py - tests/test_decision_curve_v2.py - tests/test_rtichoke_viz_vendor.py - - name: Commit formatting - run: | - git config user.name github-actions[bot] - git config user.email 41898282+github-actions[bot]@users.noreply.github.com - git add src/rtichoke/_decision_curve_viz_spec_v2.py tests/test_decision_curve_v2.py tests/test_rtichoke_viz_vendor.py - git diff --cached --quiet && exit 0 - git commit -m "Format Decision Curve browser changes" - git push origin HEAD:feat/static-decision-curve-browser From 720156a9ec22eff7c77c6297eb2a90742e0a3fb4 Mon Sep 17 00:00:00 2001 From: Uriah Finkel Date: Tue, 25 Aug 2026 12:26:13 +0300 Subject: [PATCH 19/19] Verify rtichoke_viz v0.6.0 in wheel --- .github/workflows/python-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index bc2f64ac..f3596f77 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -52,14 +52,14 @@ jobs: prefix = "rtichoke/_vendor/rtichoke_viz/" required = { f"{prefix}VENDORED_FROM", - f"{prefix}rtichoke-viz-0.5.0.tar.gz", + f"{prefix}rtichoke-viz-0.6.0.tar.gz", f"{prefix}rtichoke-viz.js", f"{prefix}rtichoke-viz.css", f"{prefix}rtichoke-viz.schema.json", f"{prefix}rtichoke-viz-v2.schema.json", } assert required <= names - assert f"{prefix}rtichoke-viz-0.4.0.tar.gz" not in names + assert f"{prefix}rtichoke-viz-0.5.0.tar.gz" not in names PY - name: Run tests