ppef 1.1.0 → 1.2.1

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.
Files changed (171) hide show
  1. package/README.md +76 -125
  2. package/dist/__tests__/cli/evaluate-command.integration.test.d.ts +8 -0
  3. package/dist/__tests__/cli/evaluate-command.integration.test.d.ts.map +1 -0
  4. package/dist/__tests__/cli/evaluate-command.integration.test.js +308 -0
  5. package/dist/__tests__/cli/evaluate-command.integration.test.js.map +1 -0
  6. package/dist/__tests__/evaluators/claims-evaluator.unit.test.d.ts +8 -0
  7. package/dist/__tests__/evaluators/claims-evaluator.unit.test.d.ts.map +1 -0
  8. package/dist/__tests__/evaluators/claims-evaluator.unit.test.js +405 -0
  9. package/dist/__tests__/evaluators/claims-evaluator.unit.test.js.map +1 -0
  10. package/dist/__tests__/evaluators/metrics-evaluator.unit.test.d.ts +8 -0
  11. package/dist/__tests__/evaluators/metrics-evaluator.unit.test.d.ts.map +1 -0
  12. package/dist/__tests__/evaluators/metrics-evaluator.unit.test.js +424 -0
  13. package/dist/__tests__/evaluators/metrics-evaluator.unit.test.js.map +1 -0
  14. package/dist/__tests__/evaluators/registry.unit.test.d.ts +7 -0
  15. package/dist/__tests__/evaluators/registry.unit.test.d.ts.map +1 -0
  16. package/dist/__tests__/evaluators/registry.unit.test.js +173 -0
  17. package/dist/__tests__/evaluators/registry.unit.test.js.map +1 -0
  18. package/dist/__tests__/evaluators/robustness-evaluator.unit.test.d.ts +8 -0
  19. package/dist/__tests__/evaluators/robustness-evaluator.unit.test.d.ts.map +1 -0
  20. package/dist/__tests__/evaluators/robustness-evaluator.unit.test.js +260 -0
  21. package/dist/__tests__/evaluators/robustness-evaluator.unit.test.js.map +1 -0
  22. package/dist/__tests__/framework-pipeline.integration.test.js +36 -9
  23. package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -1
  24. package/dist/__tests__/index-exports.unit.test.js +9 -12
  25. package/dist/__tests__/index-exports.unit.test.js.map +1 -1
  26. package/dist/aggregation/pipeline.d.ts.map +1 -1
  27. package/dist/aggregation/pipeline.js +40 -3
  28. package/dist/aggregation/pipeline.js.map +1 -1
  29. package/dist/claims/index.d.ts +6 -3
  30. package/dist/claims/index.d.ts.map +1 -1
  31. package/dist/claims/index.js +6 -3
  32. package/dist/claims/index.js.map +1 -1
  33. package/dist/cli/__tests__/aggregate.command.unit.test.js +3 -0
  34. package/dist/cli/__tests__/aggregate.command.unit.test.js.map +1 -1
  35. package/dist/cli/__tests__/binary-sut.integration.test.d.ts +8 -0
  36. package/dist/cli/__tests__/binary-sut.integration.test.d.ts.map +1 -0
  37. package/dist/cli/__tests__/binary-sut.integration.test.js +165 -0
  38. package/dist/cli/__tests__/binary-sut.integration.test.js.map +1 -0
  39. package/dist/cli/__tests__/config-loader.unit.test.d.ts +7 -0
  40. package/dist/cli/__tests__/config-loader.unit.test.d.ts.map +1 -0
  41. package/dist/cli/__tests__/config-loader.unit.test.js +611 -0
  42. package/dist/cli/__tests__/config-loader.unit.test.js.map +1 -0
  43. package/dist/cli/command-deps.d.ts +13 -1
  44. package/dist/cli/command-deps.d.ts.map +1 -1
  45. package/dist/cli/commands/aggregate.d.ts.map +1 -1
  46. package/dist/cli/commands/aggregate.js +3 -0
  47. package/dist/cli/commands/aggregate.js.map +1 -1
  48. package/dist/cli/commands/evaluate.d.ts +41 -0
  49. package/dist/cli/commands/evaluate.d.ts.map +1 -0
  50. package/dist/cli/commands/evaluate.js +287 -0
  51. package/dist/cli/commands/evaluate.js.map +1 -0
  52. package/dist/cli/commands/run.d.ts.map +1 -1
  53. package/dist/cli/commands/run.js +93 -1
  54. package/dist/cli/commands/run.js.map +1 -1
  55. package/dist/cli/index.d.ts +2 -1
  56. package/dist/cli/index.d.ts.map +1 -1
  57. package/dist/cli/index.js +3 -1
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/cli/module-loader.d.ts +23 -1
  60. package/dist/cli/module-loader.d.ts.map +1 -1
  61. package/dist/cli/module-loader.js +19 -1
  62. package/dist/cli/module-loader.js.map +1 -1
  63. package/dist/cli/types.d.ts +19 -0
  64. package/dist/cli/types.d.ts.map +1 -1
  65. package/dist/evaluators/claims-evaluator.d.ts +87 -0
  66. package/dist/evaluators/claims-evaluator.d.ts.map +1 -0
  67. package/dist/evaluators/claims-evaluator.js +289 -0
  68. package/dist/evaluators/claims-evaluator.js.map +1 -0
  69. package/dist/evaluators/exploratory-evaluator.d.ts +136 -0
  70. package/dist/evaluators/exploratory-evaluator.d.ts.map +1 -0
  71. package/dist/evaluators/exploratory-evaluator.js +545 -0
  72. package/dist/evaluators/exploratory-evaluator.js.map +1 -0
  73. package/dist/evaluators/index.d.ts +13 -0
  74. package/dist/evaluators/index.d.ts.map +1 -0
  75. package/dist/evaluators/index.js +14 -0
  76. package/dist/evaluators/index.js.map +1 -0
  77. package/dist/evaluators/metrics-evaluator.d.ts +114 -0
  78. package/dist/evaluators/metrics-evaluator.d.ts.map +1 -0
  79. package/dist/evaluators/metrics-evaluator.js +433 -0
  80. package/dist/evaluators/metrics-evaluator.js.map +1 -0
  81. package/dist/evaluators/registry.d.ts +106 -0
  82. package/dist/evaluators/registry.d.ts.map +1 -0
  83. package/dist/evaluators/registry.js +148 -0
  84. package/dist/evaluators/registry.js.map +1 -0
  85. package/dist/evaluators/robustness-evaluator.d.ts +57 -0
  86. package/dist/evaluators/robustness-evaluator.d.ts.map +1 -0
  87. package/dist/evaluators/robustness-evaluator.js +186 -0
  88. package/dist/evaluators/robustness-evaluator.js.map +1 -0
  89. package/dist/executor/__tests__/binary-sut.unit.test.d.ts +8 -0
  90. package/dist/executor/__tests__/binary-sut.unit.test.d.ts.map +1 -0
  91. package/dist/executor/__tests__/binary-sut.unit.test.js +313 -0
  92. package/dist/executor/__tests__/binary-sut.unit.test.js.map +1 -0
  93. package/dist/executor/__tests__/checkpoint-storage.unit.test.js +43 -0
  94. package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -1
  95. package/dist/executor/__tests__/executor.unit.test.js +56 -9
  96. package/dist/executor/__tests__/executor.unit.test.js.map +1 -1
  97. package/dist/executor/__tests__/resource-calculator.unit.test.d.ts +10 -0
  98. package/dist/executor/__tests__/resource-calculator.unit.test.d.ts.map +1 -0
  99. package/dist/executor/__tests__/resource-calculator.unit.test.js +104 -0
  100. package/dist/executor/__tests__/resource-calculator.unit.test.js.map +1 -0
  101. package/dist/executor/__tests__/worker-threads-executor.unit.test.d.ts +8 -0
  102. package/dist/executor/__tests__/worker-threads-executor.unit.test.d.ts.map +1 -0
  103. package/dist/executor/__tests__/worker-threads-executor.unit.test.js +276 -0
  104. package/dist/executor/__tests__/worker-threads-executor.unit.test.js.map +1 -0
  105. package/dist/executor/binary-sut.d.ts +105 -0
  106. package/dist/executor/binary-sut.d.ts.map +1 -0
  107. package/dist/executor/binary-sut.js +174 -0
  108. package/dist/executor/binary-sut.js.map +1 -0
  109. package/dist/executor/checkpoint-storage.d.ts.map +1 -1
  110. package/dist/executor/checkpoint-storage.js +6 -4
  111. package/dist/executor/checkpoint-storage.js.map +1 -1
  112. package/dist/executor/executor.d.ts +28 -0
  113. package/dist/executor/executor.d.ts.map +1 -1
  114. package/dist/executor/executor.js +85 -24
  115. package/dist/executor/executor.js.map +1 -1
  116. package/dist/executor/index.d.ts +4 -0
  117. package/dist/executor/index.d.ts.map +1 -1
  118. package/dist/executor/index.js +4 -0
  119. package/dist/executor/index.js.map +1 -1
  120. package/dist/executor/resource-calculator.d.ts +49 -0
  121. package/dist/executor/resource-calculator.d.ts.map +1 -0
  122. package/dist/executor/resource-calculator.js +129 -0
  123. package/dist/executor/resource-calculator.js.map +1 -0
  124. package/dist/executor/worker-entry.js +26 -10
  125. package/dist/executor/worker-entry.js.map +1 -1
  126. package/dist/executor/worker-executor.d.ts +104 -3
  127. package/dist/executor/worker-executor.d.ts.map +1 -1
  128. package/dist/executor/worker-executor.js +224 -4
  129. package/dist/executor/worker-executor.js.map +1 -1
  130. package/dist/executor/worker-threads-executor.d.ts +245 -0
  131. package/dist/executor/worker-threads-executor.d.ts.map +1 -0
  132. package/dist/executor/worker-threads-executor.js +332 -0
  133. package/dist/executor/worker-threads-executor.js.map +1 -0
  134. package/dist/index.d.ts +1 -0
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +4 -2
  137. package/dist/index.js.map +1 -1
  138. package/dist/renderers/latex-renderer.d.ts +60 -0
  139. package/dist/renderers/latex-renderer.d.ts.map +1 -1
  140. package/dist/renderers/latex-renderer.js +299 -0
  141. package/dist/renderers/latex-renderer.js.map +1 -1
  142. package/dist/renderers/types.d.ts +9 -0
  143. package/dist/renderers/types.d.ts.map +1 -1
  144. package/dist/renderers/types.js.map +1 -1
  145. package/dist/robustness/index.d.ts +5 -2
  146. package/dist/robustness/index.d.ts.map +1 -1
  147. package/dist/robustness/index.js +4 -2
  148. package/dist/robustness/index.js.map +1 -1
  149. package/dist/types/evaluator.d.ts +449 -0
  150. package/dist/types/evaluator.d.ts.map +1 -0
  151. package/dist/types/evaluator.js +9 -0
  152. package/dist/types/evaluator.js.map +1 -0
  153. package/dist/types/result.d.ts +2 -0
  154. package/dist/types/result.d.ts.map +1 -1
  155. package/package.json +2 -2
  156. package/dist/claims/__tests__/evaluator.unit.test.d.ts +0 -12
  157. package/dist/claims/__tests__/evaluator.unit.test.d.ts.map +0 -1
  158. package/dist/claims/__tests__/evaluator.unit.test.js +0 -801
  159. package/dist/claims/__tests__/evaluator.unit.test.js.map +0 -1
  160. package/dist/claims/evaluator.d.ts +0 -33
  161. package/dist/claims/evaluator.d.ts.map +0 -1
  162. package/dist/claims/evaluator.js +0 -174
  163. package/dist/claims/evaluator.js.map +0 -1
  164. package/dist/robustness/__tests__/analyzer.unit.test.d.ts +0 -11
  165. package/dist/robustness/__tests__/analyzer.unit.test.d.ts.map +0 -1
  166. package/dist/robustness/__tests__/analyzer.unit.test.js +0 -455
  167. package/dist/robustness/__tests__/analyzer.unit.test.js.map +0 -1
  168. package/dist/robustness/analyzer.d.ts +0 -61
  169. package/dist/robustness/analyzer.d.ts.map +0 -1
  170. package/dist/robustness/analyzer.js +0 -191
  171. 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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EACN,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GAExB,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,SAAS,gBAAgB,CACxB,WAAmB,EACnB,qBAA8B,EAC9B,YAAqB;IAErB,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,IAAI,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IACnE,IAAI,qBAAqB,KAAK,SAAS;QAAE,MAAM,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IAE9F,OAAO;QACN,GAAG,EAAE;YACJ,KAAK,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE;YAC7B,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC3D;QACD,OAAO,EAAE;YACR,OAAO,EAAE;gBACR,QAAQ,EAAE,WAAW;gBACrB,SAAS,EAAE,WAAW,GAAG,GAAG;gBAC5B,MAAM,EAAE,WAAW,GAAG,IAAI;aAC1B;SACD;QACD,WAAW,EAAE;YACZ,cAAc,EAAE,IAAI;YACpB,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,IAAI;SACrB;QACD,OAAO,EAAE,EAAE;QACX,UAAU,EAAE;YACX,OAAO,EAAE;gBACR,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,MAAM;aACnB;SACD;KACD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACzB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,MAAgB;IAC/C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC3C,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACtD,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACrD,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAE/E,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,qCAAqC;YACrC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,yBAAyB,IAAI,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC/D,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAElE,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,wCAAwC;YACxC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACpE,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAE/E,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,4CAA4C;YAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,sBAAsB,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACzD,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAEhF,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,qDAAqD;YACrD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC9C,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAE3E,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,mCAAmC;YACnC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACpD,MAAM,WAAW,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5F,MAAM,gBAAgB,GAAG;gBACxB,gBAAgB,CAAC,IAAI,CAAC;gBACtB,gBAAgB,CAAC,GAAG,CAAC;gBACrB,gBAAgB,CAAC,IAAI,CAAC;aACtB,CAAC;YAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,gDAAgD;YAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACxE,MAAM,WAAW,GAAuB,EAAE,CAAC;YAC3C,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAEpE,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC7E,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAuB,EAAE,CAAC;YAEhD,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAChD,MAAM,WAAW,GAAuB,EAAE,CAAC;YAC3C,MAAM,gBAAgB,GAAuB,EAAE,CAAC;YAEhD,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACpD,MAAM,WAAW,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,MAAM,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAExE,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC3E,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzF,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,gCAAgC;YAChC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;YACnD,wDAAwD;YACxD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;YAC9F,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAExD,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAErF,2EAA2E;YAC3E,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO;YAC/B,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO;YAC/B,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU;YACrC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU;YACrC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU;YACrC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU;SACrC,CAAC;QAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvE,uCAAuC;QACvC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO;YAC/B,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU;SACrC,CAAC;QAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,yBAAyB;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,CAAC,CAAC;QAClF,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACrB,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO;YAC/B,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;SACzB,CAAC;QAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvE,qBAAqB;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1D,MAAM,CAAC,EAAE,CACR,MAAM,CAAC,gBAAiB,CAAC,CAAC,CAAC,CAAC,iBAAiB;gBAC5C,MAAM,CAAC,gBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAClD,CAAC;QACH,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE/F,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAChE,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO;YAC9B,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,8BAA8B;YACzD,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,2BAA2B;SACrD,CAAC;QAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvE,sCAAsC;QACtC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO;YAC9B,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,cAAc;YACzC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,cAAc;SACzC,CAAC;QAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvE,gBAAgB;QAChB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvE,sCAAsC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC5D,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,uBAAuB;SAClD,CAAC;QAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE1E,oCAAoC;QACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC1D,MAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9F,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAClB,qCAAqC;QACrC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,WAAW,GAAG;YACnB,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;SACzB,CAAC;QACF,MAAM,WAAW,GAAG;YACnB,gBAAgB,CAAC,GAAG,CAAC;YACrB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;SACzB,CAAC;QAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAEvE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACvD,MAAM,WAAW,GAAG;YACnB,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,eAAe;YAC1C,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;SACzB,CAAC;QACF,MAAM,WAAW,GAAG;YACnB,gBAAgB,CAAC,GAAG,CAAC;YACrB,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,gBAAgB;YAC1C,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAEvE,mDAAmD;QACnD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC9D,MAAM,WAAW,GAAG;YACnB,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;SACzB,CAAC;QACF,MAAM,WAAW,GAAG;YACnB,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,oBAAoB;SAC/C,CAAC;QAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAEvE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACvC,MAAM,WAAW,GAAG;YACnB,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;SACzB,CAAC;QACF,MAAM,WAAW,GAAG;YACnB,gBAAgB,CAAC,GAAG,CAAC;YACrB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;SACzB,CAAC;QAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAEvE,wBAAwB;QACxB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC1D,MAAM,WAAW,GAAG;YACnB,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO;YAC/B,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY;YACvC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY;SACvC,CAAC;QAEF,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAEvE,oCAAoC;QACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC/D,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;YAC5C,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;YAClC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;SAClC,CAAC;QAEF,MAAM,OAAO,GAA8B;YAC1C,OAAO,EAAE,CAAC,UAAU,CAAC;YACrB,aAAa,EAAE,CAAC,OAAO,CAAC;YACxB,eAAe,EAAE,CAAC,CAAC,CAAC;YACpB,YAAY,EAAE,CAAC;SACf,CAAC;QAEF,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAE7E,MAAM,OAAO,GAA8B;YAC1C,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;YAClC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YAChC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACvB,YAAY,EAAE,CAAC;SACf,CAAC;QAEF,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;YAClC,gBAAgB,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC;SAChC,CAAC;QAEF,MAAM,OAAO,GAA8B;YAC1C,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;YAClC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;SAChC,CAAC;QAEF,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1D,qDAAqD;QACrD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC1D,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;SAClC,CAAC;QAEF,MAAM,OAAO,GAA8B;YAC1C,OAAO,EAAE,CAAC,UAAU,CAAC;YACrB,aAAa,EAAE,CAAC,OAAO,CAAC;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1D,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC9C,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,CAAC;YACtB,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;YAClC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;YAClC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;SAClC,CAAC;QAEF,MAAM,OAAO,GAA8B;YAC1C,OAAO,EAAE,CAAC,UAAU,CAAC;YACrB,aAAa,EAAE,CAAC,OAAO,CAAC;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACtC,MAAM,OAAO,GAAG;YACf,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;YAC5C,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;SAClC,CAAC;QACF,kBAAkB;QAClB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC;QAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC;QAE7B,MAAM,OAAO,GAA8B;YAC1C,OAAO,EAAE,CAAC,UAAU,CAAC;YACrB,aAAa,EAAE,CAAC,OAAO,CAAC;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,MAAM,OAAO,GAA8B;YAC1C,OAAO,EAAE,CAAC,UAAU,CAAC;YACrB,aAAa,EAAE,CAAC,OAAO,CAAC;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAE7E,MAAM,OAAO,GAA8B;YAC1C,OAAO,EAAE,CAAC,UAAU,CAAC;YACrB,aAAa,EAAE,CAAC,OAAO,CAAC;SACxB,CAAC;QAEF,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -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"}