ppef 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +76 -125
- package/dist/__tests__/cli/evaluate-command.integration.test.d.ts +8 -0
- package/dist/__tests__/cli/evaluate-command.integration.test.d.ts.map +1 -0
- package/dist/__tests__/cli/evaluate-command.integration.test.js +308 -0
- package/dist/__tests__/cli/evaluate-command.integration.test.js.map +1 -0
- package/dist/__tests__/evaluators/claims-evaluator.unit.test.d.ts +8 -0
- package/dist/__tests__/evaluators/claims-evaluator.unit.test.d.ts.map +1 -0
- package/dist/__tests__/evaluators/claims-evaluator.unit.test.js +405 -0
- package/dist/__tests__/evaluators/claims-evaluator.unit.test.js.map +1 -0
- package/dist/__tests__/evaluators/metrics-evaluator.unit.test.d.ts +8 -0
- package/dist/__tests__/evaluators/metrics-evaluator.unit.test.d.ts.map +1 -0
- package/dist/__tests__/evaluators/metrics-evaluator.unit.test.js +424 -0
- package/dist/__tests__/evaluators/metrics-evaluator.unit.test.js.map +1 -0
- package/dist/__tests__/evaluators/registry.unit.test.d.ts +7 -0
- package/dist/__tests__/evaluators/registry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/evaluators/registry.unit.test.js +173 -0
- package/dist/__tests__/evaluators/registry.unit.test.js.map +1 -0
- package/dist/__tests__/evaluators/robustness-evaluator.unit.test.d.ts +8 -0
- package/dist/__tests__/evaluators/robustness-evaluator.unit.test.d.ts.map +1 -0
- package/dist/__tests__/evaluators/robustness-evaluator.unit.test.js +260 -0
- package/dist/__tests__/evaluators/robustness-evaluator.unit.test.js.map +1 -0
- package/dist/__tests__/framework-pipeline.integration.test.js +36 -9
- package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -1
- package/dist/__tests__/index-exports.unit.test.js +9 -12
- package/dist/__tests__/index-exports.unit.test.js.map +1 -1
- package/dist/aggregation/pipeline.d.ts.map +1 -1
- package/dist/aggregation/pipeline.js +40 -3
- package/dist/aggregation/pipeline.js.map +1 -1
- package/dist/claims/index.d.ts +6 -3
- package/dist/claims/index.d.ts.map +1 -1
- package/dist/claims/index.js +6 -3
- package/dist/claims/index.js.map +1 -1
- package/dist/cli/__tests__/aggregate.command.unit.test.js +3 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.js.map +1 -1
- package/dist/cli/__tests__/binary-sut.integration.test.d.ts +8 -0
- package/dist/cli/__tests__/binary-sut.integration.test.d.ts.map +1 -0
- package/dist/cli/__tests__/binary-sut.integration.test.js +165 -0
- package/dist/cli/__tests__/binary-sut.integration.test.js.map +1 -0
- package/dist/cli/__tests__/config-loader.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/config-loader.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/config-loader.unit.test.js +611 -0
- package/dist/cli/__tests__/config-loader.unit.test.js.map +1 -0
- package/dist/cli/command-deps.d.ts +13 -1
- package/dist/cli/command-deps.d.ts.map +1 -1
- package/dist/cli/commands/aggregate.d.ts.map +1 -1
- package/dist/cli/commands/aggregate.js +3 -0
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/evaluate.d.ts +41 -0
- package/dist/cli/commands/evaluate.d.ts.map +1 -0
- package/dist/cli/commands/evaluate.js +287 -0
- package/dist/cli/commands/evaluate.js.map +1 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +93 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/index.d.ts +2 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +3 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/module-loader.d.ts +23 -1
- package/dist/cli/module-loader.d.ts.map +1 -1
- package/dist/cli/module-loader.js +19 -1
- package/dist/cli/module-loader.js.map +1 -1
- package/dist/cli/types.d.ts +19 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/evaluators/claims-evaluator.d.ts +87 -0
- package/dist/evaluators/claims-evaluator.d.ts.map +1 -0
- package/dist/evaluators/claims-evaluator.js +289 -0
- package/dist/evaluators/claims-evaluator.js.map +1 -0
- package/dist/evaluators/exploratory-evaluator.d.ts +136 -0
- package/dist/evaluators/exploratory-evaluator.d.ts.map +1 -0
- package/dist/evaluators/exploratory-evaluator.js +545 -0
- package/dist/evaluators/exploratory-evaluator.js.map +1 -0
- package/dist/evaluators/index.d.ts +13 -0
- package/dist/evaluators/index.d.ts.map +1 -0
- package/dist/evaluators/index.js +14 -0
- package/dist/evaluators/index.js.map +1 -0
- package/dist/evaluators/metrics-evaluator.d.ts +114 -0
- package/dist/evaluators/metrics-evaluator.d.ts.map +1 -0
- package/dist/evaluators/metrics-evaluator.js +433 -0
- package/dist/evaluators/metrics-evaluator.js.map +1 -0
- package/dist/evaluators/registry.d.ts +106 -0
- package/dist/evaluators/registry.d.ts.map +1 -0
- package/dist/evaluators/registry.js +148 -0
- package/dist/evaluators/registry.js.map +1 -0
- package/dist/evaluators/robustness-evaluator.d.ts +57 -0
- package/dist/evaluators/robustness-evaluator.d.ts.map +1 -0
- package/dist/evaluators/robustness-evaluator.js +186 -0
- package/dist/evaluators/robustness-evaluator.js.map +1 -0
- package/dist/executor/__tests__/binary-sut.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/binary-sut.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/binary-sut.unit.test.js +313 -0
- package/dist/executor/__tests__/binary-sut.unit.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js +43 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -1
- package/dist/executor/__tests__/executor.unit.test.js +56 -9
- package/dist/executor/__tests__/executor.unit.test.js.map +1 -1
- package/dist/executor/__tests__/resource-calculator.unit.test.d.ts +10 -0
- package/dist/executor/__tests__/resource-calculator.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/resource-calculator.unit.test.js +104 -0
- package/dist/executor/__tests__/resource-calculator.unit.test.js.map +1 -0
- package/dist/executor/__tests__/worker-threads-executor.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/worker-threads-executor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/worker-threads-executor.unit.test.js +276 -0
- package/dist/executor/__tests__/worker-threads-executor.unit.test.js.map +1 -0
- package/dist/executor/binary-sut.d.ts +105 -0
- package/dist/executor/binary-sut.d.ts.map +1 -0
- package/dist/executor/binary-sut.js +174 -0
- package/dist/executor/binary-sut.js.map +1 -0
- package/dist/executor/checkpoint-storage.d.ts.map +1 -1
- package/dist/executor/checkpoint-storage.js +6 -4
- package/dist/executor/checkpoint-storage.js.map +1 -1
- package/dist/executor/executor.d.ts +28 -0
- package/dist/executor/executor.d.ts.map +1 -1
- package/dist/executor/executor.js +85 -24
- package/dist/executor/executor.js.map +1 -1
- package/dist/executor/index.d.ts +4 -0
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +4 -0
- package/dist/executor/index.js.map +1 -1
- package/dist/executor/resource-calculator.d.ts +49 -0
- package/dist/executor/resource-calculator.d.ts.map +1 -0
- package/dist/executor/resource-calculator.js +129 -0
- package/dist/executor/resource-calculator.js.map +1 -0
- package/dist/executor/worker-entry.js +26 -10
- package/dist/executor/worker-entry.js.map +1 -1
- package/dist/executor/worker-executor.d.ts +104 -3
- package/dist/executor/worker-executor.d.ts.map +1 -1
- package/dist/executor/worker-executor.js +224 -4
- package/dist/executor/worker-executor.js.map +1 -1
- package/dist/executor/worker-threads-executor.d.ts +245 -0
- package/dist/executor/worker-threads-executor.d.ts.map +1 -0
- package/dist/executor/worker-threads-executor.js +332 -0
- package/dist/executor/worker-threads-executor.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/renderers/latex-renderer.d.ts +60 -0
- package/dist/renderers/latex-renderer.d.ts.map +1 -1
- package/dist/renderers/latex-renderer.js +299 -0
- package/dist/renderers/latex-renderer.js.map +1 -1
- package/dist/renderers/types.d.ts +9 -0
- package/dist/renderers/types.d.ts.map +1 -1
- package/dist/renderers/types.js.map +1 -1
- package/dist/robustness/index.d.ts +5 -2
- package/dist/robustness/index.d.ts.map +1 -1
- package/dist/robustness/index.js +4 -2
- package/dist/robustness/index.js.map +1 -1
- package/dist/types/evaluator.d.ts +449 -0
- package/dist/types/evaluator.d.ts.map +1 -0
- package/dist/types/evaluator.js +9 -0
- package/dist/types/evaluator.js.map +1 -0
- package/dist/types/result.d.ts +2 -0
- package/dist/types/result.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/claims/__tests__/evaluator.unit.test.d.ts +0 -12
- package/dist/claims/__tests__/evaluator.unit.test.d.ts.map +0 -1
- package/dist/claims/__tests__/evaluator.unit.test.js +0 -801
- package/dist/claims/__tests__/evaluator.unit.test.js.map +0 -1
- package/dist/claims/evaluator.d.ts +0 -33
- package/dist/claims/evaluator.d.ts.map +0 -1
- package/dist/claims/evaluator.js +0 -174
- package/dist/claims/evaluator.js.map +0 -1
- package/dist/robustness/__tests__/analyzer.unit.test.d.ts +0 -11
- package/dist/robustness/__tests__/analyzer.unit.test.d.ts.map +0 -1
- package/dist/robustness/__tests__/analyzer.unit.test.js +0 -455
- package/dist/robustness/__tests__/analyzer.unit.test.js.map +0 -1
- package/dist/robustness/analyzer.d.ts +0 -61
- package/dist/robustness/analyzer.d.ts.map +0 -1
- package/dist/robustness/analyzer.js +0 -191
- package/dist/robustness/analyzer.js.map +0 -1
|
@@ -1,455 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for Robustness Analyzer
|
|
3
|
-
*
|
|
4
|
-
* Tests robustness analysis functions including:
|
|
5
|
-
* - analyzeRobustnessForMetric
|
|
6
|
-
* - analyzeRobustnessWithCurve
|
|
7
|
-
* - compareRobustness
|
|
8
|
-
* - createRobustnessAnalysis
|
|
9
|
-
*/
|
|
10
|
-
import { describe, it } from "node:test";
|
|
11
|
-
import { strict as assert } from "node:assert";
|
|
12
|
-
import { analyzeRobustnessForMetric, analyzeRobustnessWithCurve, compareRobustness, createRobustnessAnalysis, } from "../analyzer.js";
|
|
13
|
-
/**
|
|
14
|
-
* Create a mock evaluation result.
|
|
15
|
-
*/
|
|
16
|
-
function createMockResult(metricValue, perturbationIntensity, perturbation) {
|
|
17
|
-
const config = {};
|
|
18
|
-
if (perturbation !== undefined)
|
|
19
|
-
config.perturbation = perturbation;
|
|
20
|
-
if (perturbationIntensity !== undefined)
|
|
21
|
-
config.perturbationIntensity = perturbationIntensity;
|
|
22
|
-
return {
|
|
23
|
-
run: {
|
|
24
|
-
runId: `run-${Math.random()}`,
|
|
25
|
-
sut: "test-sut",
|
|
26
|
-
sutRole: "primary",
|
|
27
|
-
caseId: "test-case",
|
|
28
|
-
repetition: 0,
|
|
29
|
-
config: Object.keys(config).length > 0 ? config : undefined,
|
|
30
|
-
},
|
|
31
|
-
metrics: {
|
|
32
|
-
numeric: {
|
|
33
|
-
accuracy: metricValue,
|
|
34
|
-
precision: metricValue * 0.9,
|
|
35
|
-
recall: metricValue * 0.95,
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
correctness: {
|
|
39
|
-
expectedExists: true,
|
|
40
|
-
producedOutput: true,
|
|
41
|
-
valid: true,
|
|
42
|
-
matchesExpected: true,
|
|
43
|
-
},
|
|
44
|
-
outputs: {},
|
|
45
|
-
provenance: {
|
|
46
|
-
runtime: {
|
|
47
|
-
platform: "test",
|
|
48
|
-
arch: "test",
|
|
49
|
-
nodeVersion: "test",
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Create mock base results.
|
|
56
|
-
*/
|
|
57
|
-
function createBaseResults() {
|
|
58
|
-
return [createMockResult(0.85), createMockResult(0.87), createMockResult(0.86)];
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Create mock perturbed results.
|
|
62
|
-
*/
|
|
63
|
-
function createPerturbedResults(values) {
|
|
64
|
-
return values.map((v) => createMockResult(v, 1, "noise"));
|
|
65
|
-
}
|
|
66
|
-
describe("analyzeRobustnessForMetric", () => {
|
|
67
|
-
describe("with valid base and perturbed results", () => {
|
|
68
|
-
it("should compute variance under perturbation", () => {
|
|
69
|
-
const baseResults = createBaseResults();
|
|
70
|
-
const perturbedResults = createPerturbedResults([0.82, 0.84, 0.86, 0.88, 0.9]);
|
|
71
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
72
|
-
// Variance should be a finite number
|
|
73
|
-
assert.ok(Number.isFinite(result.varianceUnderPerturbation));
|
|
74
|
-
assert.ok(result.varianceUnderPerturbation >= 0);
|
|
75
|
-
});
|
|
76
|
-
it("should compute standard deviation under perturbation", () => {
|
|
77
|
-
const baseResults = createBaseResults();
|
|
78
|
-
const perturbedResults = createPerturbedResults([0.8, 0.85, 0.9]);
|
|
79
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
80
|
-
// Std should be finite and non-negative
|
|
81
|
-
assert.ok(Number.isFinite(result.stdUnderPerturbation));
|
|
82
|
-
assert.ok(result.stdUnderPerturbation >= 0);
|
|
83
|
-
});
|
|
84
|
-
it("should compute coefficient of variation for non-zero mean", () => {
|
|
85
|
-
const baseResults = createBaseResults();
|
|
86
|
-
const perturbedResults = createPerturbedResults([0.82, 0.84, 0.86, 0.88, 0.9]);
|
|
87
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
88
|
-
// Coefficient of variation should be finite
|
|
89
|
-
assert.ok(Number.isFinite(result.coefficientOfVariation));
|
|
90
|
-
assert.ok(result.coefficientOfVariation >= 0);
|
|
91
|
-
});
|
|
92
|
-
it("should handle stable results with low variance", () => {
|
|
93
|
-
const baseResults = createBaseResults();
|
|
94
|
-
const perturbedResults = createPerturbedResults([0.85, 0.85, 0.85, 0.85, 0.85]);
|
|
95
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
96
|
-
// Very stable results should have near-zero variance
|
|
97
|
-
assert.ok(result.varianceUnderPerturbation < 0.01);
|
|
98
|
-
assert.ok(result.stdUnderPerturbation < 0.1);
|
|
99
|
-
});
|
|
100
|
-
it("should handle high variance results", () => {
|
|
101
|
-
const baseResults = createBaseResults();
|
|
102
|
-
const perturbedResults = createPerturbedResults([0.5, 0.6, 0.7, 0.8, 0.9]);
|
|
103
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
104
|
-
// High variance should be detected
|
|
105
|
-
assert.ok(result.varianceUnderPerturbation > 0.01);
|
|
106
|
-
assert.ok(result.stdUnderPerturbation > 0.1);
|
|
107
|
-
});
|
|
108
|
-
it("should filter out NaN values from results", () => {
|
|
109
|
-
const baseResults = [createMockResult(0.85), createMockResult(NaN), createMockResult(0.87)];
|
|
110
|
-
const perturbedResults = [
|
|
111
|
-
createMockResult(0.82),
|
|
112
|
-
createMockResult(NaN),
|
|
113
|
-
createMockResult(0.84),
|
|
114
|
-
];
|
|
115
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
116
|
-
// Should compute stats from non-NaN values only
|
|
117
|
-
assert.ok(Number.isFinite(result.varianceUnderPerturbation));
|
|
118
|
-
assert.ok(Number.isFinite(result.stdUnderPerturbation));
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
describe("with empty results", () => {
|
|
122
|
-
it("should return NaN for all metrics when base results are empty", () => {
|
|
123
|
-
const baseResults = [];
|
|
124
|
-
const perturbedResults = createPerturbedResults([0.82, 0.84, 0.86]);
|
|
125
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
126
|
-
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
127
|
-
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
128
|
-
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
129
|
-
});
|
|
130
|
-
it("should return NaN for all metrics when perturbed results are empty", () => {
|
|
131
|
-
const baseResults = createBaseResults();
|
|
132
|
-
const perturbedResults = [];
|
|
133
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
134
|
-
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
135
|
-
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
136
|
-
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
137
|
-
});
|
|
138
|
-
it("should return NaN when both are empty", () => {
|
|
139
|
-
const baseResults = [];
|
|
140
|
-
const perturbedResults = [];
|
|
141
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
142
|
-
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
143
|
-
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
144
|
-
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
145
|
-
});
|
|
146
|
-
it("should return NaN when all values are NaN", () => {
|
|
147
|
-
const baseResults = [createMockResult(NaN), createMockResult(NaN)];
|
|
148
|
-
const perturbedResults = [createMockResult(NaN), createMockResult(NaN)];
|
|
149
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
150
|
-
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
151
|
-
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
152
|
-
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
describe("edge cases", () => {
|
|
156
|
-
it("should return NaN for coefficient of variation when mean is zero", () => {
|
|
157
|
-
const baseResults = createBaseResults();
|
|
158
|
-
const perturbedResults = [createMockResult(0), createMockResult(0), createMockResult(0)];
|
|
159
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
160
|
-
// Std should be 0 (no variance)
|
|
161
|
-
assert.strictEqual(result.stdUnderPerturbation, 0);
|
|
162
|
-
// Coefficient of variation should be NaN (mean is zero)
|
|
163
|
-
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
164
|
-
});
|
|
165
|
-
it("should return NaN for std and coefficient of variation with single perturbed result", () => {
|
|
166
|
-
const baseResults = createBaseResults();
|
|
167
|
-
const perturbedResults = createPerturbedResults([0.85]);
|
|
168
|
-
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
169
|
-
// Single value: std is undefined (needs n > 1), so variance and cv are NaN
|
|
170
|
-
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
171
|
-
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
172
|
-
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
describe("analyzeRobustnessWithCurve", () => {
|
|
177
|
-
it("should group results by perturbation intensity", () => {
|
|
178
|
-
const results = [
|
|
179
|
-
createMockResult(0.85), // Base
|
|
180
|
-
createMockResult(0.86), // Base
|
|
181
|
-
createMockResult(0.82, 1), // Level 1
|
|
182
|
-
createMockResult(0.83, 1), // Level 1
|
|
183
|
-
createMockResult(0.78, 2), // Level 2
|
|
184
|
-
createMockResult(0.79, 2), // Level 2
|
|
185
|
-
];
|
|
186
|
-
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
187
|
-
// Should have degradation curve points
|
|
188
|
-
assert.ok(result.degradationCurve.length >= 2);
|
|
189
|
-
});
|
|
190
|
-
it("should include level 0 (base) in degradation curve", () => {
|
|
191
|
-
const results = [
|
|
192
|
-
createMockResult(0.85), // Base
|
|
193
|
-
createMockResult(0.82, 1), // Level 1
|
|
194
|
-
];
|
|
195
|
-
const result = analyzeRobustnessWithCurve(results, "accuracy", [1]);
|
|
196
|
-
// Should have base level
|
|
197
|
-
const baseLevel = result.degradationCurve.find((d) => d.perturbationLevel === 0);
|
|
198
|
-
assert.ok(baseLevel);
|
|
199
|
-
assert.strictEqual(baseLevel.metricValue, 0.85);
|
|
200
|
-
});
|
|
201
|
-
it("should sort degradation curve by perturbation level", () => {
|
|
202
|
-
const results = [
|
|
203
|
-
createMockResult(0.78, 2),
|
|
204
|
-
createMockResult(0.85), // Base
|
|
205
|
-
createMockResult(0.82, 1),
|
|
206
|
-
];
|
|
207
|
-
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
208
|
-
// Check sorted order
|
|
209
|
-
for (let i = 1; i < result.degradationCurve.length; i++) {
|
|
210
|
-
assert.ok(result.degradationCurve[i].perturbationLevel >=
|
|
211
|
-
result.degradationCurve[i - 1].perturbationLevel);
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
it("should include stdDev in degradation curve", () => {
|
|
215
|
-
const results = [createMockResult(0.85), createMockResult(0.82, 1), createMockResult(0.84, 1)];
|
|
216
|
-
const result = analyzeRobustnessWithCurve(results, "accuracy", [1]);
|
|
217
|
-
const level1 = result.degradationCurve.find((d) => d.perturbationLevel === 1);
|
|
218
|
-
assert.ok(level1);
|
|
219
|
-
assert.ok(level1.stdDev !== undefined);
|
|
220
|
-
});
|
|
221
|
-
it("should detect breakpoint when degradation exceeds 10%", () => {
|
|
222
|
-
const results = [
|
|
223
|
-
createMockResult(0.9), // Base
|
|
224
|
-
createMockResult(0.89, 1), // 1.1% change - no breakpoint
|
|
225
|
-
createMockResult(0.8, 2), // 11% change - breakpoint!
|
|
226
|
-
];
|
|
227
|
-
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
228
|
-
// Should detect breakpoint at level 2
|
|
229
|
-
assert.strictEqual(result.breakpoint, 2);
|
|
230
|
-
});
|
|
231
|
-
it("should not detect breakpoint when degradation is under 10%", () => {
|
|
232
|
-
const results = [
|
|
233
|
-
createMockResult(0.9), // Base
|
|
234
|
-
createMockResult(0.89, 1), // 1.1% change
|
|
235
|
-
createMockResult(0.88, 2), // 2.2% change
|
|
236
|
-
];
|
|
237
|
-
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
238
|
-
// No breakpoint
|
|
239
|
-
assert.strictEqual(result.breakpoint, undefined);
|
|
240
|
-
});
|
|
241
|
-
it("should compute overall variance from all perturbed results", () => {
|
|
242
|
-
const results = [
|
|
243
|
-
createMockResult(0.85),
|
|
244
|
-
createMockResult(0.82, 1),
|
|
245
|
-
createMockResult(0.84, 1),
|
|
246
|
-
createMockResult(0.78, 2),
|
|
247
|
-
createMockResult(0.8, 2),
|
|
248
|
-
];
|
|
249
|
-
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
250
|
-
// Should have finite overall variance
|
|
251
|
-
assert.ok(Number.isFinite(result.varianceUnderPerturbation));
|
|
252
|
-
assert.ok(result.varianceUnderPerturbation > 0);
|
|
253
|
-
});
|
|
254
|
-
it("should handle missing intensity levels gracefully", () => {
|
|
255
|
-
const results = [
|
|
256
|
-
createMockResult(0.85),
|
|
257
|
-
createMockResult(0.82, 1), // Only level 1 present
|
|
258
|
-
];
|
|
259
|
-
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2, 3]);
|
|
260
|
-
// Should only have levels with data
|
|
261
|
-
assert.ok(result.degradationCurve.length >= 1);
|
|
262
|
-
assert.ok(result.degradationCurve.length <= 2); // Base + level 1
|
|
263
|
-
});
|
|
264
|
-
it("should filter NaN values from curve computation", () => {
|
|
265
|
-
const results = [createMockResult(0.85), createMockResult(NaN, 1), createMockResult(0.82, 1)];
|
|
266
|
-
const result = analyzeRobustnessWithCurve(results, "accuracy", [1]);
|
|
267
|
-
const level1 = result.degradationCurve.find((d) => d.perturbationLevel === 1);
|
|
268
|
-
assert.ok(level1);
|
|
269
|
-
// Should compute from non-NaN values
|
|
270
|
-
assert.strictEqual(level1.metricValue, 0.82);
|
|
271
|
-
});
|
|
272
|
-
});
|
|
273
|
-
describe("compareRobustness", () => {
|
|
274
|
-
it("should compute variance for both SUTs", () => {
|
|
275
|
-
const sutAResults = [
|
|
276
|
-
createMockResult(0.85),
|
|
277
|
-
createMockResult(0.82, 1),
|
|
278
|
-
createMockResult(0.83, 1),
|
|
279
|
-
];
|
|
280
|
-
const sutBResults = [
|
|
281
|
-
createMockResult(0.8),
|
|
282
|
-
createMockResult(0.78, 1),
|
|
283
|
-
createMockResult(0.82, 1),
|
|
284
|
-
];
|
|
285
|
-
const result = compareRobustness(sutAResults, sutBResults, "accuracy");
|
|
286
|
-
assert.ok(Number.isFinite(result.sutAVariance));
|
|
287
|
-
assert.ok(Number.isFinite(result.sutBVariance));
|
|
288
|
-
});
|
|
289
|
-
it("should compute relative robustness correctly", () => {
|
|
290
|
-
const sutAResults = [
|
|
291
|
-
createMockResult(0.85),
|
|
292
|
-
createMockResult(0.82, 1), // Low variance
|
|
293
|
-
createMockResult(0.83, 1),
|
|
294
|
-
];
|
|
295
|
-
const sutBResults = [
|
|
296
|
-
createMockResult(0.8),
|
|
297
|
-
createMockResult(0.7, 1), // High variance
|
|
298
|
-
createMockResult(0.9, 1),
|
|
299
|
-
];
|
|
300
|
-
const result = compareRobustness(sutAResults, sutBResults, "accuracy");
|
|
301
|
-
// Lower relative robustness means A is more robust
|
|
302
|
-
assert.ok(result.relativeRobustness < 1);
|
|
303
|
-
});
|
|
304
|
-
it("should return Infinity when SUT B has zero variance", () => {
|
|
305
|
-
const sutAResults = [
|
|
306
|
-
createMockResult(0.85),
|
|
307
|
-
createMockResult(0.82, 1),
|
|
308
|
-
createMockResult(0.83, 1),
|
|
309
|
-
];
|
|
310
|
-
const sutBResults = [
|
|
311
|
-
createMockResult(0.85),
|
|
312
|
-
createMockResult(0.85, 1),
|
|
313
|
-
createMockResult(0.85, 1), // Perfect stability
|
|
314
|
-
];
|
|
315
|
-
const result = compareRobustness(sutAResults, sutBResults, "accuracy");
|
|
316
|
-
assert.strictEqual(result.relativeRobustness, Infinity);
|
|
317
|
-
});
|
|
318
|
-
it("should handle equal variance", () => {
|
|
319
|
-
const sutAResults = [
|
|
320
|
-
createMockResult(0.85),
|
|
321
|
-
createMockResult(0.82, 1),
|
|
322
|
-
createMockResult(0.83, 1),
|
|
323
|
-
];
|
|
324
|
-
const sutBResults = [
|
|
325
|
-
createMockResult(0.8),
|
|
326
|
-
createMockResult(0.77, 1),
|
|
327
|
-
createMockResult(0.78, 1),
|
|
328
|
-
];
|
|
329
|
-
const result = compareRobustness(sutAResults, sutBResults, "accuracy");
|
|
330
|
-
// Same variance pattern
|
|
331
|
-
assert.strictEqual(result.relativeRobustness, 1);
|
|
332
|
-
});
|
|
333
|
-
it("should filter results by perturbation intensity", () => {
|
|
334
|
-
const sutAResults = [
|
|
335
|
-
createMockResult(0.85), // Base
|
|
336
|
-
createMockResult(0.82, 1), // Perturbed
|
|
337
|
-
createMockResult(0.83, 1), // Perturbed
|
|
338
|
-
];
|
|
339
|
-
const result = compareRobustness(sutAResults, sutAResults, "accuracy");
|
|
340
|
-
// Should only use perturbed results
|
|
341
|
-
assert.ok(Number.isFinite(result.sutAVariance));
|
|
342
|
-
});
|
|
343
|
-
});
|
|
344
|
-
describe("createRobustnessAnalysis", () => {
|
|
345
|
-
it("should create analysis output with correct structure", () => {
|
|
346
|
-
const results = [
|
|
347
|
-
createMockResult(0.85, undefined, undefined),
|
|
348
|
-
createMockResult(0.82, 1, "noise"),
|
|
349
|
-
createMockResult(0.83, 1, "noise"),
|
|
350
|
-
];
|
|
351
|
-
const options = {
|
|
352
|
-
metrics: ["accuracy"],
|
|
353
|
-
perturbations: ["noise"],
|
|
354
|
-
intensityLevels: [1],
|
|
355
|
-
runsPerLevel: 2,
|
|
356
|
-
};
|
|
357
|
-
const output = createRobustnessAnalysis(results, options);
|
|
358
|
-
assert.strictEqual(output.version, "1.0.0");
|
|
359
|
-
assert.ok(output.timestamp);
|
|
360
|
-
assert.ok(Array.isArray(output.results));
|
|
361
|
-
assert.ok(output.config);
|
|
362
|
-
});
|
|
363
|
-
it("should include config in output", () => {
|
|
364
|
-
const results = [createMockResult(0.85), createMockResult(0.82, 1, "noise")];
|
|
365
|
-
const options = {
|
|
366
|
-
metrics: ["accuracy", "precision"],
|
|
367
|
-
perturbations: ["noise", "blur"],
|
|
368
|
-
intensityLevels: [1, 2],
|
|
369
|
-
runsPerLevel: 3,
|
|
370
|
-
};
|
|
371
|
-
const output = createRobustnessAnalysis(results, options);
|
|
372
|
-
assert.deepStrictEqual(output.config.perturbations, ["noise", "blur"]);
|
|
373
|
-
assert.deepStrictEqual(output.config.metrics, ["accuracy", "precision"]);
|
|
374
|
-
assert.deepStrictEqual(output.config.intensityLevels, [1, 2]);
|
|
375
|
-
assert.strictEqual(output.config.runsPerLevel, 3);
|
|
376
|
-
});
|
|
377
|
-
it("should analyze each metric-perturbation combination", () => {
|
|
378
|
-
const results = [
|
|
379
|
-
createMockResult(0.85),
|
|
380
|
-
createMockResult(0.82, 1, "noise"),
|
|
381
|
-
createMockResult(0.8, 1, "blur"),
|
|
382
|
-
];
|
|
383
|
-
const options = {
|
|
384
|
-
metrics: ["accuracy", "precision"],
|
|
385
|
-
perturbations: ["noise", "blur"],
|
|
386
|
-
};
|
|
387
|
-
const output = createRobustnessAnalysis(results, options);
|
|
388
|
-
// Should have 4 results: 2 metrics x 2 perturbations
|
|
389
|
-
assert.strictEqual(output.results.length, 4);
|
|
390
|
-
});
|
|
391
|
-
it("should compute baseline value from base results", () => {
|
|
392
|
-
const results = [
|
|
393
|
-
createMockResult(0.85),
|
|
394
|
-
createMockResult(0.87),
|
|
395
|
-
createMockResult(0.82, 1, "noise"),
|
|
396
|
-
];
|
|
397
|
-
const options = {
|
|
398
|
-
metrics: ["accuracy"],
|
|
399
|
-
perturbations: ["noise"],
|
|
400
|
-
};
|
|
401
|
-
const output = createRobustnessAnalysis(results, options);
|
|
402
|
-
// Baseline should be average of base results
|
|
403
|
-
const baseline = output.results[0].baselineValue;
|
|
404
|
-
assert.ok(Number.isFinite(baseline));
|
|
405
|
-
assert.ok(baseline > 0);
|
|
406
|
-
});
|
|
407
|
-
it("should include run count in results", () => {
|
|
408
|
-
const results = [
|
|
409
|
-
createMockResult(0.85),
|
|
410
|
-
createMockResult(0.82, 1, "noise"),
|
|
411
|
-
createMockResult(0.83, 1, "noise"),
|
|
412
|
-
createMockResult(0.84, 1, "noise"),
|
|
413
|
-
];
|
|
414
|
-
const options = {
|
|
415
|
-
metrics: ["accuracy"],
|
|
416
|
-
perturbations: ["noise"],
|
|
417
|
-
};
|
|
418
|
-
const output = createRobustnessAnalysis(results, options);
|
|
419
|
-
assert.strictEqual(output.results[0].runCount, 3);
|
|
420
|
-
});
|
|
421
|
-
it("should group results by SUT", () => {
|
|
422
|
-
const results = [
|
|
423
|
-
createMockResult(0.85, undefined, undefined),
|
|
424
|
-
createMockResult(0.82, 1, "noise"),
|
|
425
|
-
];
|
|
426
|
-
// Modify SUT name
|
|
427
|
-
results[0].run.sut = "sut-a";
|
|
428
|
-
results[1].run.sut = "sut-a";
|
|
429
|
-
const options = {
|
|
430
|
-
metrics: ["accuracy"],
|
|
431
|
-
perturbations: ["noise"],
|
|
432
|
-
};
|
|
433
|
-
const output = createRobustnessAnalysis(results, options);
|
|
434
|
-
assert.strictEqual(output.results[0].sut, "sut-a");
|
|
435
|
-
});
|
|
436
|
-
it("should handle empty results gracefully", () => {
|
|
437
|
-
const results = [];
|
|
438
|
-
const options = {
|
|
439
|
-
metrics: ["accuracy"],
|
|
440
|
-
perturbations: ["noise"],
|
|
441
|
-
};
|
|
442
|
-
const output = createRobustnessAnalysis(results, options);
|
|
443
|
-
assert.strictEqual(output.results.length, 0);
|
|
444
|
-
});
|
|
445
|
-
it("should default runsPerLevel to 1 when not specified", () => {
|
|
446
|
-
const results = [createMockResult(0.85), createMockResult(0.82, 1, "noise")];
|
|
447
|
-
const options = {
|
|
448
|
-
metrics: ["accuracy"],
|
|
449
|
-
perturbations: ["noise"],
|
|
450
|
-
};
|
|
451
|
-
const output = createRobustnessAnalysis(results, options);
|
|
452
|
-
assert.strictEqual(output.config.runsPerLevel, 1);
|
|
453
|
-
});
|
|
454
|
-
});
|
|
455
|
-
//# sourceMappingURL=analyzer.unit.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.unit.test.js","sourceRoot":"","sources":["../../../src/robustness/__tests__/analyzer.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Robustness Analyzer
|
|
3
|
-
*
|
|
4
|
-
* Analyzes algorithm robustness under perturbations.
|
|
5
|
-
* Computes variance, stability, and degradation metrics.
|
|
6
|
-
*/
|
|
7
|
-
import type { RobustnessAnalysisOutput, RobustnessMetrics } from "../types/perturbation.js";
|
|
8
|
-
import type { EvaluationResult } from "../types/result.js";
|
|
9
|
-
/**
|
|
10
|
-
* Options for robustness analysis.
|
|
11
|
-
*/
|
|
12
|
-
export interface RobustnessAnalysisOptions {
|
|
13
|
-
/** Metrics to analyze */
|
|
14
|
-
metrics: string[];
|
|
15
|
-
/** Perturbations applied */
|
|
16
|
-
perturbations: string[];
|
|
17
|
-
/** Intensity levels tested (if applicable) */
|
|
18
|
-
intensityLevels?: number[];
|
|
19
|
-
/** Number of runs per perturbation level */
|
|
20
|
-
runsPerLevel?: number;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Analyze robustness of a SUT under perturbation.
|
|
24
|
-
*
|
|
25
|
-
* @param baseResults - Results without perturbation
|
|
26
|
-
* @param perturbedResults - Results with perturbation, keyed by perturbation name
|
|
27
|
-
* @param metric - Metric to analyze
|
|
28
|
-
* @returns Robustness metrics
|
|
29
|
-
*/
|
|
30
|
-
export declare const analyzeRobustnessForMetric: (baseResults: EvaluationResult[], perturbedResults: EvaluationResult[], metric: string) => RobustnessMetrics;
|
|
31
|
-
/**
|
|
32
|
-
* Analyze robustness across multiple perturbation levels.
|
|
33
|
-
*
|
|
34
|
-
* @param results - All results including perturbed ones
|
|
35
|
-
* @param metric - Metric to analyze
|
|
36
|
-
* @param intensityLevels - Perturbation intensity levels
|
|
37
|
-
* @returns Robustness metrics with degradation curve
|
|
38
|
-
*/
|
|
39
|
-
export declare const analyzeRobustnessWithCurve: (results: EvaluationResult[], metric: string, intensityLevels: number[]) => RobustnessMetrics;
|
|
40
|
-
/**
|
|
41
|
-
* Compare robustness between two SUTs.
|
|
42
|
-
*
|
|
43
|
-
* @param sutAResults - Results for SUT A (including perturbed)
|
|
44
|
-
* @param sutBResults - Results for SUT B (including perturbed)
|
|
45
|
-
* @param metric - Metric to compare
|
|
46
|
-
* @returns Object with comparison metrics
|
|
47
|
-
*/
|
|
48
|
-
export declare const compareRobustness: (sutAResults: EvaluationResult[], sutBResults: EvaluationResult[], metric: string) => {
|
|
49
|
-
sutAVariance: number;
|
|
50
|
-
sutBVariance: number;
|
|
51
|
-
relativeRobustness: number;
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* Create a full robustness analysis output.
|
|
55
|
-
*
|
|
56
|
-
* @param results - All evaluation results (base and perturbed)
|
|
57
|
-
* @param options - Analysis options
|
|
58
|
-
* @returns Complete robustness analysis output
|
|
59
|
-
*/
|
|
60
|
-
export declare const createRobustnessAnalysis: (results: EvaluationResult[], options: RobustnessAnalysisOptions) => RobustnessAnalysisOutput;
|
|
61
|
-
//# sourceMappingURL=analyzer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/robustness/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACX,wBAAwB,EAExB,iBAAiB,EACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACzC,yBAAyB;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,4BAA4B;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,GACtC,aAAa,gBAAgB,EAAE,EAC/B,kBAAkB,gBAAgB,EAAE,EACpC,QAAQ,MAAM,KACZ,iBAwCF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,GACtC,SAAS,gBAAgB,EAAE,EAC3B,QAAQ,MAAM,EACd,iBAAiB,MAAM,EAAE,KACvB,iBA2EF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAC7B,aAAa,gBAAgB,EAAE,EAC/B,aAAa,gBAAgB,EAAE,EAC/B,QAAQ,MAAM,KACZ;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;CAyB3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GACpC,SAAS,gBAAgB,EAAE,EAC3B,SAAS,yBAAyB,KAChC,wBAqDF,CAAC"}
|