ppef 1.0.0 → 1.1.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.
Files changed (336) hide show
  1. package/README.md +172 -0
  2. package/bin/ppef.mjs +20 -0
  3. package/dist/__tests__/framework-pipeline.integration.test.d.ts +7 -0
  4. package/dist/__tests__/framework-pipeline.integration.test.d.ts.map +1 -0
  5. package/dist/__tests__/framework-pipeline.integration.test.js +415 -0
  6. package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -0
  7. package/dist/__tests__/index-exports.unit.test.d.ts +8 -0
  8. package/dist/__tests__/index-exports.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/index-exports.unit.test.js +127 -0
  10. package/dist/__tests__/index-exports.unit.test.js.map +1 -0
  11. package/dist/__tests__/registry-executor.integration.test.d.ts +5 -0
  12. package/dist/__tests__/registry-executor.integration.test.d.ts.map +1 -0
  13. package/dist/__tests__/registry-executor.integration.test.js +352 -0
  14. package/dist/__tests__/registry-executor.integration.test.js.map +1 -0
  15. package/dist/__tests__/test-helpers.d.ts +94 -0
  16. package/dist/__tests__/test-helpers.d.ts.map +1 -0
  17. package/dist/__tests__/test-helpers.js +271 -0
  18. package/dist/__tests__/test-helpers.js.map +1 -0
  19. package/dist/aggregation/__tests__/aggregators.unit.test.d.ts +7 -0
  20. package/dist/aggregation/__tests__/aggregators.unit.test.d.ts.map +1 -0
  21. package/dist/aggregation/__tests__/aggregators.unit.test.js +350 -0
  22. package/dist/aggregation/__tests__/aggregators.unit.test.js.map +1 -0
  23. package/dist/aggregation/__tests__/pipeline.unit.test.d.ts +7 -0
  24. package/dist/aggregation/__tests__/pipeline.unit.test.d.ts.map +1 -0
  25. package/dist/aggregation/__tests__/pipeline.unit.test.js +213 -0
  26. package/dist/aggregation/__tests__/pipeline.unit.test.js.map +1 -0
  27. package/dist/aggregation/aggregators.d.ts +63 -0
  28. package/dist/aggregation/aggregators.d.ts.map +1 -0
  29. package/dist/aggregation/aggregators.js +228 -0
  30. package/dist/aggregation/aggregators.js.map +1 -0
  31. package/dist/aggregation/index.d.ts +8 -0
  32. package/dist/aggregation/index.d.ts.map +1 -0
  33. package/dist/aggregation/index.js +8 -0
  34. package/dist/aggregation/index.js.map +1 -0
  35. package/dist/aggregation/pipeline.d.ts +38 -0
  36. package/dist/aggregation/pipeline.d.ts.map +1 -0
  37. package/dist/aggregation/pipeline.js +198 -0
  38. package/dist/aggregation/pipeline.js.map +1 -0
  39. package/dist/claims/__tests__/evaluator.unit.test.d.ts +12 -0
  40. package/dist/claims/__tests__/evaluator.unit.test.d.ts.map +1 -0
  41. package/dist/claims/__tests__/evaluator.unit.test.js +801 -0
  42. package/dist/claims/__tests__/evaluator.unit.test.js.map +1 -0
  43. package/dist/claims/evaluator.d.ts +33 -0
  44. package/dist/claims/evaluator.d.ts.map +1 -0
  45. package/dist/claims/evaluator.js +174 -0
  46. package/dist/claims/evaluator.js.map +1 -0
  47. package/dist/claims/index.d.ts +7 -0
  48. package/dist/claims/index.d.ts.map +1 -0
  49. package/dist/claims/index.js +7 -0
  50. package/dist/claims/index.js.map +1 -0
  51. package/dist/cli/__tests__/aggregate.command.unit.test.d.ts +7 -0
  52. package/dist/cli/__tests__/aggregate.command.unit.test.d.ts.map +1 -0
  53. package/dist/cli/__tests__/aggregate.command.unit.test.js +396 -0
  54. package/dist/cli/__tests__/aggregate.command.unit.test.js.map +1 -0
  55. package/dist/cli/__tests__/commands.unit.test.d.ts +10 -0
  56. package/dist/cli/__tests__/commands.unit.test.d.ts.map +1 -0
  57. package/dist/cli/__tests__/commands.unit.test.js +217 -0
  58. package/dist/cli/__tests__/commands.unit.test.js.map +1 -0
  59. package/dist/cli/__tests__/index.unit.test.d.ts +10 -0
  60. package/dist/cli/__tests__/index.unit.test.d.ts.map +1 -0
  61. package/dist/cli/__tests__/index.unit.test.js +65 -0
  62. package/dist/cli/__tests__/index.unit.test.js.map +1 -0
  63. package/dist/cli/__tests__/logger.unit.test.d.ts +11 -0
  64. package/dist/cli/__tests__/logger.unit.test.d.ts.map +1 -0
  65. package/dist/cli/__tests__/logger.unit.test.js +180 -0
  66. package/dist/cli/__tests__/logger.unit.test.js.map +1 -0
  67. package/dist/cli/__tests__/module-loader.unit.test.d.ts +11 -0
  68. package/dist/cli/__tests__/module-loader.unit.test.d.ts.map +1 -0
  69. package/dist/cli/__tests__/module-loader.unit.test.js +262 -0
  70. package/dist/cli/__tests__/module-loader.unit.test.js.map +1 -0
  71. package/dist/cli/__tests__/output-writer.unit.test.d.ts +10 -0
  72. package/dist/cli/__tests__/output-writer.unit.test.d.ts.map +1 -0
  73. package/dist/cli/__tests__/output-writer.unit.test.js +216 -0
  74. package/dist/cli/__tests__/output-writer.unit.test.js.map +1 -0
  75. package/dist/cli/__tests__/plan.command.unit.test.d.ts +7 -0
  76. package/dist/cli/__tests__/plan.command.unit.test.d.ts.map +1 -0
  77. package/dist/cli/__tests__/plan.command.unit.test.js +289 -0
  78. package/dist/cli/__tests__/plan.command.unit.test.js.map +1 -0
  79. package/dist/cli/__tests__/run.command.unit.test.d.ts +7 -0
  80. package/dist/cli/__tests__/run.command.unit.test.d.ts.map +1 -0
  81. package/dist/cli/__tests__/run.command.unit.test.js +422 -0
  82. package/dist/cli/__tests__/run.command.unit.test.js.map +1 -0
  83. package/dist/cli/__tests__/validate.command.unit.test.d.ts +7 -0
  84. package/dist/cli/__tests__/validate.command.unit.test.d.ts.map +1 -0
  85. package/dist/cli/__tests__/validate.command.unit.test.js +226 -0
  86. package/dist/cli/__tests__/validate.command.unit.test.js.map +1 -0
  87. package/dist/cli/command-deps.d.ts +125 -0
  88. package/dist/cli/command-deps.d.ts.map +1 -0
  89. package/dist/cli/command-deps.js +7 -0
  90. package/dist/cli/command-deps.js.map +1 -0
  91. package/dist/cli/commands/aggregate.d.ts +35 -0
  92. package/dist/cli/commands/aggregate.d.ts.map +1 -0
  93. package/dist/cli/commands/aggregate.js +121 -0
  94. package/dist/cli/commands/aggregate.js.map +1 -0
  95. package/dist/cli/commands/plan.d.ts +36 -0
  96. package/dist/cli/commands/plan.d.ts.map +1 -0
  97. package/dist/cli/commands/plan.js +109 -0
  98. package/dist/cli/commands/plan.js.map +1 -0
  99. package/dist/cli/commands/run.d.ts +33 -0
  100. package/dist/cli/commands/run.d.ts.map +1 -0
  101. package/dist/cli/commands/run.js +185 -0
  102. package/dist/cli/commands/run.js.map +1 -0
  103. package/dist/cli/commands/validate.d.ts +27 -0
  104. package/dist/cli/commands/validate.d.ts.map +1 -0
  105. package/dist/cli/commands/validate.js +88 -0
  106. package/dist/cli/commands/validate.js.map +1 -0
  107. package/dist/cli/config-loader.d.ts +30 -0
  108. package/dist/cli/config-loader.d.ts.map +1 -0
  109. package/dist/cli/config-loader.js +181 -0
  110. package/dist/cli/config-loader.js.map +1 -0
  111. package/dist/cli/index.d.ts +26 -0
  112. package/dist/cli/index.d.ts.map +1 -0
  113. package/dist/cli/index.js +58 -0
  114. package/dist/cli/index.js.map +1 -0
  115. package/dist/cli/logger.d.ts +75 -0
  116. package/dist/cli/logger.d.ts.map +1 -0
  117. package/dist/cli/logger.js +131 -0
  118. package/dist/cli/logger.js.map +1 -0
  119. package/dist/cli/module-loader.d.ts +46 -0
  120. package/dist/cli/module-loader.d.ts.map +1 -0
  121. package/dist/cli/module-loader.js +116 -0
  122. package/dist/cli/module-loader.js.map +1 -0
  123. package/dist/cli/output-writer.d.ts +51 -0
  124. package/dist/cli/output-writer.d.ts.map +1 -0
  125. package/dist/cli/output-writer.js +65 -0
  126. package/dist/cli/output-writer.js.map +1 -0
  127. package/dist/cli/types.d.ts +174 -0
  128. package/dist/cli/types.d.ts.map +1 -0
  129. package/dist/cli/types.js +7 -0
  130. package/dist/cli/types.js.map +1 -0
  131. package/dist/collector/__tests__/result-collector.unit.test.d.ts +7 -0
  132. package/dist/collector/__tests__/result-collector.unit.test.d.ts.map +1 -0
  133. package/dist/collector/__tests__/result-collector.unit.test.js +1021 -0
  134. package/dist/collector/__tests__/result-collector.unit.test.js.map +1 -0
  135. package/dist/collector/__tests__/schema.unit.test.d.ts +7 -0
  136. package/dist/collector/__tests__/schema.unit.test.d.ts.map +1 -0
  137. package/dist/collector/__tests__/schema.unit.test.js +360 -0
  138. package/dist/collector/__tests__/schema.unit.test.js.map +1 -0
  139. package/dist/collector/index.d.ts +8 -0
  140. package/dist/collector/index.d.ts.map +1 -0
  141. package/dist/collector/index.js +8 -0
  142. package/dist/collector/index.js.map +1 -0
  143. package/dist/collector/result-collector.d.ts +159 -0
  144. package/dist/collector/result-collector.d.ts.map +1 -0
  145. package/dist/collector/result-collector.js +213 -0
  146. package/dist/collector/result-collector.js.map +1 -0
  147. package/dist/collector/schema.d.ts +34 -0
  148. package/dist/collector/schema.d.ts.map +1 -0
  149. package/dist/collector/schema.js +145 -0
  150. package/dist/collector/schema.js.map +1 -0
  151. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts +10 -0
  152. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts.map +1 -0
  153. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js +122 -0
  154. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js.map +1 -0
  155. package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts +7 -0
  156. package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts.map +1 -0
  157. package/dist/executor/__tests__/checkpoint-manager.integration.test.js +330 -0
  158. package/dist/executor/__tests__/checkpoint-manager.integration.test.js.map +1 -0
  159. package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts +7 -0
  160. package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts.map +1 -0
  161. package/dist/executor/__tests__/checkpoint-manager.unit.test.js +531 -0
  162. package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -0
  163. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +8 -0
  164. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -0
  165. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +493 -0
  166. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -0
  167. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts +8 -0
  168. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts.map +1 -0
  169. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js +164 -0
  170. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js.map +1 -0
  171. package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts +7 -0
  172. package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts.map +1 -0
  173. package/dist/executor/__tests__/checkpoint-storage.unit.test.js +490 -0
  174. package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -0
  175. package/dist/executor/__tests__/executor.unit.test.d.ts +7 -0
  176. package/dist/executor/__tests__/executor.unit.test.d.ts.map +1 -0
  177. package/dist/executor/__tests__/executor.unit.test.js +202 -0
  178. package/dist/executor/__tests__/executor.unit.test.js.map +1 -0
  179. package/dist/executor/__tests__/memory-monitor.unit.test.d.ts +7 -0
  180. package/dist/executor/__tests__/memory-monitor.unit.test.d.ts.map +1 -0
  181. package/dist/executor/__tests__/memory-monitor.unit.test.js +285 -0
  182. package/dist/executor/__tests__/memory-monitor.unit.test.js.map +1 -0
  183. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts +12 -0
  184. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts.map +1 -0
  185. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js +196 -0
  186. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js.map +1 -0
  187. package/dist/executor/__tests__/parallel-executor.integration.test.d.ts +7 -0
  188. package/dist/executor/__tests__/parallel-executor.integration.test.d.ts.map +1 -0
  189. package/dist/executor/__tests__/parallel-executor.integration.test.js +249 -0
  190. package/dist/executor/__tests__/parallel-executor.integration.test.js.map +1 -0
  191. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts +8 -0
  192. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -0
  193. package/dist/executor/__tests__/parallel-executor.unit.test.js +473 -0
  194. package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -0
  195. package/dist/executor/__tests__/run-id.unit.test.d.ts +8 -0
  196. package/dist/executor/__tests__/run-id.unit.test.d.ts.map +1 -0
  197. package/dist/executor/__tests__/run-id.unit.test.js +156 -0
  198. package/dist/executor/__tests__/run-id.unit.test.js.map +1 -0
  199. package/dist/executor/__tests__/worker-entry.integration.test.d.ts +24 -0
  200. package/dist/executor/__tests__/worker-entry.integration.test.d.ts.map +1 -0
  201. package/dist/executor/__tests__/worker-entry.integration.test.js +82 -0
  202. package/dist/executor/__tests__/worker-entry.integration.test.js.map +1 -0
  203. package/dist/executor/__tests__/worker-entry.unit.test.d.ts +7 -0
  204. package/dist/executor/__tests__/worker-entry.unit.test.d.ts.map +1 -0
  205. package/dist/executor/__tests__/worker-entry.unit.test.js +364 -0
  206. package/dist/executor/__tests__/worker-entry.unit.test.js.map +1 -0
  207. package/dist/executor/checkpoint-manager.d.ts +231 -0
  208. package/dist/executor/checkpoint-manager.d.ts.map +1 -0
  209. package/dist/executor/checkpoint-manager.js +395 -0
  210. package/dist/executor/checkpoint-manager.js.map +1 -0
  211. package/dist/executor/checkpoint-storage.d.ts +230 -0
  212. package/dist/executor/checkpoint-storage.d.ts.map +1 -0
  213. package/dist/executor/checkpoint-storage.js +370 -0
  214. package/dist/executor/checkpoint-storage.js.map +1 -0
  215. package/dist/executor/checkpoint-types.d.ts +48 -0
  216. package/dist/executor/checkpoint-types.d.ts.map +1 -0
  217. package/dist/executor/checkpoint-types.js +8 -0
  218. package/dist/executor/checkpoint-types.js.map +1 -0
  219. package/dist/executor/executor.d.ts +164 -0
  220. package/dist/executor/executor.d.ts.map +1 -0
  221. package/dist/executor/executor.js +408 -0
  222. package/dist/executor/executor.js.map +1 -0
  223. package/dist/executor/index.d.ts +11 -0
  224. package/dist/executor/index.d.ts.map +1 -0
  225. package/dist/executor/index.js +11 -0
  226. package/dist/executor/index.js.map +1 -0
  227. package/dist/executor/memory-monitor.d.ts +115 -0
  228. package/dist/executor/memory-monitor.d.ts.map +1 -0
  229. package/dist/executor/memory-monitor.js +168 -0
  230. package/dist/executor/memory-monitor.js.map +1 -0
  231. package/dist/executor/parallel-executor.d.ts +239 -0
  232. package/dist/executor/parallel-executor.d.ts.map +1 -0
  233. package/dist/executor/parallel-executor.js +329 -0
  234. package/dist/executor/parallel-executor.js.map +1 -0
  235. package/dist/executor/run-id.d.ts +71 -0
  236. package/dist/executor/run-id.d.ts.map +1 -0
  237. package/dist/executor/run-id.js +74 -0
  238. package/dist/executor/run-id.js.map +1 -0
  239. package/dist/executor/worker-entry.d.ts +10 -0
  240. package/dist/executor/worker-entry.d.ts.map +1 -0
  241. package/dist/executor/worker-entry.js +42 -0
  242. package/dist/executor/worker-entry.js.map +1 -0
  243. package/dist/executor/worker-executor.d.ts +156 -0
  244. package/dist/executor/worker-executor.d.ts.map +1 -0
  245. package/dist/executor/worker-executor.js +88 -0
  246. package/dist/executor/worker-executor.js.map +1 -0
  247. package/dist/index.cjs +11 -0
  248. package/dist/index.d.ts +15 -0
  249. package/dist/index.d.ts.map +1 -0
  250. package/dist/index.js +24 -0
  251. package/dist/index.js.map +1 -0
  252. package/dist/registry/case-registry.d.ts +113 -0
  253. package/dist/registry/case-registry.d.ts.map +1 -0
  254. package/dist/registry/case-registry.js +160 -0
  255. package/dist/registry/case-registry.js.map +1 -0
  256. package/dist/registry/index.d.ts +8 -0
  257. package/dist/registry/index.d.ts.map +1 -0
  258. package/dist/registry/index.js +8 -0
  259. package/dist/registry/index.js.map +1 -0
  260. package/dist/registry/sut-registry.d.ts +96 -0
  261. package/dist/registry/sut-registry.d.ts.map +1 -0
  262. package/dist/registry/sut-registry.js +126 -0
  263. package/dist/registry/sut-registry.js.map +1 -0
  264. package/dist/renderers/index.d.ts +10 -0
  265. package/dist/renderers/index.d.ts.map +1 -0
  266. package/dist/renderers/index.js +9 -0
  267. package/dist/renderers/index.js.map +1 -0
  268. package/dist/renderers/latex-renderer.d.ts +84 -0
  269. package/dist/renderers/latex-renderer.d.ts.map +1 -0
  270. package/dist/renderers/latex-renderer.js +208 -0
  271. package/dist/renderers/latex-renderer.js.map +1 -0
  272. package/dist/renderers/types.d.ts +106 -0
  273. package/dist/renderers/types.d.ts.map +1 -0
  274. package/dist/renderers/types.js +23 -0
  275. package/dist/renderers/types.js.map +1 -0
  276. package/dist/robustness/__tests__/analyzer.unit.test.d.ts +11 -0
  277. package/dist/robustness/__tests__/analyzer.unit.test.d.ts.map +1 -0
  278. package/dist/robustness/__tests__/analyzer.unit.test.js +455 -0
  279. package/dist/robustness/__tests__/analyzer.unit.test.js.map +1 -0
  280. package/dist/robustness/__tests__/perturbations.unit.test.d.ts +11 -0
  281. package/dist/robustness/__tests__/perturbations.unit.test.d.ts.map +1 -0
  282. package/dist/robustness/__tests__/perturbations.unit.test.js +284 -0
  283. package/dist/robustness/__tests__/perturbations.unit.test.js.map +1 -0
  284. package/dist/robustness/analyzer.d.ts +61 -0
  285. package/dist/robustness/analyzer.d.ts.map +1 -0
  286. package/dist/robustness/analyzer.js +191 -0
  287. package/dist/robustness/analyzer.js.map +1 -0
  288. package/dist/robustness/index.d.ts +8 -0
  289. package/dist/robustness/index.d.ts.map +1 -0
  290. package/dist/robustness/index.js +8 -0
  291. package/dist/robustness/index.js.map +1 -0
  292. package/dist/robustness/perturbations.d.ts +46 -0
  293. package/dist/robustness/perturbations.d.ts.map +1 -0
  294. package/dist/robustness/perturbations.js +184 -0
  295. package/dist/robustness/perturbations.js.map +1 -0
  296. package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts +7 -0
  297. package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts.map +1 -0
  298. package/dist/statistical/__tests__/mann-whitney-u.unit.test.js +185 -0
  299. package/dist/statistical/__tests__/mann-whitney-u.unit.test.js.map +1 -0
  300. package/dist/statistical/index.d.ts +8 -0
  301. package/dist/statistical/index.d.ts.map +1 -0
  302. package/dist/statistical/index.js +8 -0
  303. package/dist/statistical/index.js.map +1 -0
  304. package/dist/statistical/mann-whitney-u.d.ts +62 -0
  305. package/dist/statistical/mann-whitney-u.d.ts.map +1 -0
  306. package/dist/statistical/mann-whitney-u.js +127 -0
  307. package/dist/statistical/mann-whitney-u.js.map +1 -0
  308. package/dist/types/aggregate.d.ts +124 -0
  309. package/dist/types/aggregate.d.ts.map +1 -0
  310. package/dist/types/aggregate.js +9 -0
  311. package/dist/types/aggregate.js.map +1 -0
  312. package/dist/types/case.d.ts +105 -0
  313. package/dist/types/case.d.ts.map +1 -0
  314. package/dist/types/case.js +10 -0
  315. package/dist/types/case.js.map +1 -0
  316. package/dist/types/claims.d.ts +122 -0
  317. package/dist/types/claims.d.ts.map +1 -0
  318. package/dist/types/claims.js +14 -0
  319. package/dist/types/claims.js.map +1 -0
  320. package/dist/types/index.d.ts +12 -0
  321. package/dist/types/index.d.ts.map +1 -0
  322. package/dist/types/index.js +7 -0
  323. package/dist/types/index.js.map +1 -0
  324. package/dist/types/perturbation.d.ts +105 -0
  325. package/dist/types/perturbation.d.ts.map +1 -0
  326. package/dist/types/perturbation.js +9 -0
  327. package/dist/types/perturbation.js.map +1 -0
  328. package/dist/types/result.d.ts +150 -0
  329. package/dist/types/result.d.ts.map +1 -0
  330. package/dist/types/result.js +12 -0
  331. package/dist/types/result.js.map +1 -0
  332. package/dist/types/sut.d.ts +128 -0
  333. package/dist/types/sut.d.ts.map +1 -0
  334. package/dist/types/sut.js +12 -0
  335. package/dist/types/sut.js.map +1 -0
  336. package/package.json +290 -7
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Unit tests for Perturbations
3
+ *
4
+ * Tests perturbation application including:
5
+ * - Edge removal perturbation
6
+ * - Seed shift perturbation
7
+ * - Node removal perturbation
8
+ * - Weight noise perturbation
9
+ */
10
+ import { describe, it } from "node:test";
11
+ import { strict as assert } from "node:assert";
12
+ import { PERTURBATIONS, createPerturbation, edgeRemovalPerturbation, getPerturbation, nodeRemovalPerturbation, seedShiftPerturbation, weightNoisePerturbation, } from "../perturbations.js";
13
+ /**
14
+ * Create a mock evaluation case for testing.
15
+ */
16
+ const createMockCase = (caseId) => ({
17
+ caseId,
18
+ name: `Test Case ${caseId}`,
19
+ caseClass: "test-class",
20
+ version: "1.0.0",
21
+ tags: ["baseline"],
22
+ inputs: {
23
+ summary: {
24
+ nodes: 100,
25
+ edges: 500,
26
+ seeds: ["node1", "node2"],
27
+ },
28
+ artefacts: [
29
+ {
30
+ type: "graph",
31
+ uri: `/data/${caseId}.graph.json`,
32
+ hash: "abc123",
33
+ metadata: { format: "json" },
34
+ },
35
+ ],
36
+ },
37
+ });
38
+ describe("perturbations", () => {
39
+ describe("edgeRemovalPerturbation", () => {
40
+ it("should preserve required fields (caseId, inputs)", () => {
41
+ const mockCase = createMockCase("case-001");
42
+ const perturbed = edgeRemovalPerturbation.apply(mockCase, 42);
43
+ assert.ok(perturbed.caseId);
44
+ assert.ok(perturbed.inputs);
45
+ assert.ok(perturbed.inputs.summary);
46
+ assert.ok(perturbed.inputs.artefacts);
47
+ });
48
+ it("should generate a unique caseId for perturbed case", () => {
49
+ const mockCase = createMockCase("case-001");
50
+ const perturbed = edgeRemovalPerturbation.apply(mockCase, 42);
51
+ assert.notStrictEqual(perturbed.caseId, mockCase.caseId);
52
+ assert.strictEqual(perturbed.caseId.length, 16); // SHA-256 slice
53
+ });
54
+ it("should add perturbation metadata to summary", () => {
55
+ const mockCase = createMockCase("case-001");
56
+ const perturbed = edgeRemovalPerturbation.apply(mockCase, 42);
57
+ assert.ok(perturbed.inputs.summary);
58
+ const summary = perturbed.inputs.summary;
59
+ assert.strictEqual(summary.perturbation, "edge-removal");
60
+ assert.strictEqual(summary.perturbationIntensity, 0.1);
61
+ assert.strictEqual(summary.perturbationSeed, 42);
62
+ });
63
+ it("should add perturbation metadata to artefacts", () => {
64
+ const mockCase = createMockCase("case-001");
65
+ const perturbed = edgeRemovalPerturbation.apply(mockCase, 42);
66
+ assert.ok(perturbed.inputs.artefacts);
67
+ const artefacts = perturbed.inputs.artefacts;
68
+ assert.strictEqual(artefacts.length, 1);
69
+ assert.ok(artefacts[0].metadata);
70
+ const metadata = artefacts[0].metadata;
71
+ assert.strictEqual(metadata.perturbation, "edge-removal");
72
+ assert.strictEqual(metadata.perturbationIntensity, 0.1);
73
+ assert.strictEqual(metadata.perturbationSeed, 42);
74
+ });
75
+ it("should add perturbation tags", () => {
76
+ const mockCase = createMockCase("case-001");
77
+ const perturbed = edgeRemovalPerturbation.apply(mockCase, 42);
78
+ assert.ok(perturbed.tags?.includes("perturbed"));
79
+ assert.ok(perturbed.tags?.includes("edge-removal"));
80
+ assert.ok(perturbed.tags?.includes("baseline")); // Original tag preserved
81
+ });
82
+ it("should update name with intensity percentage", () => {
83
+ const mockCase = createMockCase("case-001");
84
+ const perturbed = edgeRemovalPerturbation.apply(mockCase, 42);
85
+ assert.ok(perturbed.name?.includes("10%"));
86
+ assert.ok(perturbed.name?.includes("edges removed"));
87
+ });
88
+ it("should preserve other inputs.summary fields", () => {
89
+ const mockCase = createMockCase("case-001");
90
+ const perturbed = edgeRemovalPerturbation.apply(mockCase, 42);
91
+ assert.ok(perturbed.inputs.summary);
92
+ const summary = perturbed.inputs.summary;
93
+ assert.strictEqual(summary.nodes, 100);
94
+ assert.strictEqual(summary.edges, 500);
95
+ assert.deepStrictEqual(summary.seeds, ["node1", "node2"]);
96
+ });
97
+ });
98
+ describe("seedShiftPerturbation", () => {
99
+ it("should preserve required fields (caseId, inputs)", () => {
100
+ const mockCase = createMockCase("case-002");
101
+ const perturbed = seedShiftPerturbation.apply(mockCase, 42);
102
+ assert.ok(perturbed.caseId);
103
+ assert.ok(perturbed.inputs);
104
+ assert.ok(perturbed.inputs.summary);
105
+ });
106
+ it("should generate a unique caseId for perturbed case", () => {
107
+ const mockCase = createMockCase("case-002");
108
+ const perturbed = seedShiftPerturbation.apply(mockCase, 42);
109
+ assert.notStrictEqual(perturbed.caseId, mockCase.caseId);
110
+ assert.strictEqual(perturbed.caseId.length, 16);
111
+ });
112
+ it("should add perturbation metadata to summary", () => {
113
+ const mockCase = createMockCase("case-002");
114
+ const perturbed = seedShiftPerturbation.apply(mockCase, 42);
115
+ assert.ok(perturbed.inputs.summary);
116
+ const summary = perturbed.inputs.summary;
117
+ assert.strictEqual(summary.perturbation, "seed-shift");
118
+ assert.strictEqual(summary.perturbationSeed, 42);
119
+ });
120
+ it("should add perturbation tags", () => {
121
+ const mockCase = createMockCase("case-002");
122
+ const perturbed = seedShiftPerturbation.apply(mockCase, 42);
123
+ assert.ok(perturbed.tags?.includes("perturbed"));
124
+ assert.ok(perturbed.tags?.includes("seed-shift"));
125
+ });
126
+ it("should update name with perturbation description", () => {
127
+ const mockCase = createMockCase("case-002");
128
+ const perturbed = seedShiftPerturbation.apply(mockCase, 42);
129
+ assert.ok(perturbed.name?.includes("seeds shifted"));
130
+ });
131
+ });
132
+ describe("nodeRemovalPerturbation", () => {
133
+ it("should preserve required fields (caseId, inputs)", () => {
134
+ const mockCase = createMockCase("case-003");
135
+ const perturbed = nodeRemovalPerturbation.apply(mockCase, 42);
136
+ assert.ok(perturbed.caseId);
137
+ assert.ok(perturbed.inputs);
138
+ assert.ok(perturbed.inputs.summary);
139
+ });
140
+ it("should generate a unique caseId for perturbed case", () => {
141
+ const mockCase = createMockCase("case-003");
142
+ const perturbed = nodeRemovalPerturbation.apply(mockCase, 42);
143
+ assert.notStrictEqual(perturbed.caseId, mockCase.caseId);
144
+ assert.strictEqual(perturbed.caseId.length, 16);
145
+ });
146
+ it("should add perturbation metadata to summary", () => {
147
+ const mockCase = createMockCase("case-003");
148
+ const perturbed = nodeRemovalPerturbation.apply(mockCase, 42);
149
+ assert.ok(perturbed.inputs.summary);
150
+ const summary = perturbed.inputs.summary;
151
+ assert.strictEqual(summary.perturbation, "node-removal");
152
+ assert.strictEqual(summary.perturbationIntensity, 0.05);
153
+ assert.strictEqual(summary.perturbationSeed, 42);
154
+ });
155
+ it("should add perturbation tags", () => {
156
+ const mockCase = createMockCase("case-003");
157
+ const perturbed = nodeRemovalPerturbation.apply(mockCase, 42);
158
+ assert.ok(perturbed.tags?.includes("perturbed"));
159
+ assert.ok(perturbed.tags?.includes("node-removal"));
160
+ });
161
+ it("should update name with intensity percentage", () => {
162
+ const mockCase = createMockCase("case-003");
163
+ const perturbed = nodeRemovalPerturbation.apply(mockCase, 42);
164
+ assert.ok(perturbed.name?.includes("5%"));
165
+ assert.ok(perturbed.name?.includes("nodes removed"));
166
+ });
167
+ });
168
+ describe("weightNoisePerturbation", () => {
169
+ it("should preserve required fields (caseId, inputs)", () => {
170
+ const mockCase = createMockCase("case-004");
171
+ const perturbed = weightNoisePerturbation.apply(mockCase, 42);
172
+ assert.ok(perturbed.caseId);
173
+ assert.ok(perturbed.inputs);
174
+ assert.ok(perturbed.inputs.summary);
175
+ });
176
+ it("should generate a unique caseId for perturbed case", () => {
177
+ const mockCase = createMockCase("case-004");
178
+ const perturbed = weightNoisePerturbation.apply(mockCase, 42);
179
+ assert.notStrictEqual(perturbed.caseId, mockCase.caseId);
180
+ assert.strictEqual(perturbed.caseId.length, 16);
181
+ });
182
+ it("should add perturbation metadata to summary", () => {
183
+ const mockCase = createMockCase("case-004");
184
+ const perturbed = weightNoisePerturbation.apply(mockCase, 42);
185
+ assert.ok(perturbed.inputs.summary);
186
+ const summary = perturbed.inputs.summary;
187
+ assert.strictEqual(summary.perturbation, "weight-noise");
188
+ assert.strictEqual(summary.perturbationIntensity, 0.1);
189
+ assert.strictEqual(summary.perturbationSeed, 42);
190
+ });
191
+ it("should add perturbation tags", () => {
192
+ const mockCase = createMockCase("case-004");
193
+ const perturbed = weightNoisePerturbation.apply(mockCase, 42);
194
+ assert.ok(perturbed.tags?.includes("perturbed"));
195
+ assert.ok(perturbed.tags?.includes("weight-noise"));
196
+ });
197
+ it("should update name with intensity percentage", () => {
198
+ const mockCase = createMockCase("case-004");
199
+ const perturbed = weightNoisePerturbation.apply(mockCase, 42);
200
+ assert.ok(perturbed.name?.includes("10%"));
201
+ assert.ok(perturbed.name?.includes("weight noise"));
202
+ });
203
+ });
204
+ describe("PERTURBATIONS array", () => {
205
+ it("should contain all four built-in perturbations", () => {
206
+ assert.strictEqual(PERTURBATIONS.length, 4);
207
+ assert.ok(PERTURBATIONS.some((p) => p.id === "edge-removal"), "Should contain edge-removal");
208
+ assert.ok(PERTURBATIONS.some((p) => p.id === "seed-shift"), "Should contain seed-shift");
209
+ assert.ok(PERTURBATIONS.some((p) => p.id === "node-removal"), "Should contain node-removal");
210
+ assert.ok(PERTURBATIONS.some((p) => p.id === "weight-noise"), "Should contain weight-noise");
211
+ });
212
+ });
213
+ describe("getPerturbation", () => {
214
+ it("should return perturbation by id", () => {
215
+ const edgeRemoval = getPerturbation("edge-removal");
216
+ assert.ok(edgeRemoval);
217
+ assert.strictEqual(edgeRemoval.id, "edge-removal");
218
+ });
219
+ it("should return undefined for unknown id", () => {
220
+ const unknown = getPerturbation("unknown-perturbation");
221
+ assert.strictEqual(unknown, undefined);
222
+ });
223
+ it("should find all built-in perturbations by id", () => {
224
+ const ids = ["edge-removal", "seed-shift", "node-removal", "weight-noise"];
225
+ for (const id of ids) {
226
+ const perturbation = getPerturbation(id);
227
+ assert.ok(perturbation, `Should find perturbation with id: ${id}`);
228
+ assert.strictEqual(perturbation.id, id);
229
+ }
230
+ });
231
+ });
232
+ describe("createPerturbation", () => {
233
+ it("should create perturbation with custom intensity", () => {
234
+ const custom = createPerturbation({ type: "edge-removal", intensity: 0.25 });
235
+ assert.strictEqual(custom.id, "edge-removal");
236
+ assert.strictEqual(custom.intensity, 0.25);
237
+ });
238
+ it("should apply custom intensity to perturbed case", () => {
239
+ const mockCase = createMockCase("case-005");
240
+ const custom = createPerturbation({ type: "node-removal", intensity: 0.15 });
241
+ const perturbed = custom.apply(mockCase, 42);
242
+ assert.strictEqual(perturbed.inputs.summary?.perturbationIntensity, 0.15);
243
+ assert.ok(perturbed.name?.includes("15%"));
244
+ });
245
+ it("should throw error for unknown perturbation type", () => {
246
+ assert.throws(() => createPerturbation({
247
+ type: "unknown-type",
248
+ intensity: 0.1,
249
+ }), /Unknown perturbation type: unknown-type/);
250
+ });
251
+ it("should preserve name and description from base perturbation", () => {
252
+ const custom = createPerturbation({ type: "edge-removal", intensity: 0.2 });
253
+ assert.strictEqual(custom.name, "Edge Removal");
254
+ assert.strictEqual(custom.description, "Randomly remove a fraction of edges");
255
+ });
256
+ it("should preserve type from base perturbation", () => {
257
+ const custom = createPerturbation({ type: "weight-noise", intensity: 0.05 });
258
+ assert.strictEqual(custom.type, "noise");
259
+ });
260
+ });
261
+ describe("perturbation determinism", () => {
262
+ it("should produce same caseId for same inputs", () => {
263
+ const mockCase = createMockCase("case-006");
264
+ const perturbed1 = edgeRemovalPerturbation.apply(mockCase, 42);
265
+ const perturbed2 = edgeRemovalPerturbation.apply(mockCase, 42);
266
+ assert.strictEqual(perturbed1.caseId, perturbed2.caseId);
267
+ });
268
+ it("should produce different caseId for different seeds", () => {
269
+ const mockCase = createMockCase("case-007");
270
+ const perturbed1 = nodeRemovalPerturbation.apply(mockCase, 42);
271
+ const perturbed2 = nodeRemovalPerturbation.apply(mockCase, 100);
272
+ assert.notStrictEqual(perturbed1.caseId, perturbed2.caseId);
273
+ });
274
+ it("should produce different caseId for different intensities", () => {
275
+ const mockCase = createMockCase("case-008");
276
+ const custom1 = createPerturbation({ type: "edge-removal", intensity: 0.1 });
277
+ const custom2 = createPerturbation({ type: "edge-removal", intensity: 0.2 });
278
+ const perturbed1 = custom1.apply(mockCase, 42);
279
+ const perturbed2 = custom2.apply(mockCase, 42);
280
+ assert.notStrictEqual(perturbed1.caseId, perturbed2.caseId);
281
+ });
282
+ });
283
+ });
284
+ //# sourceMappingURL=perturbations.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perturbations.unit.test.js","sourceRoot":"","sources":["../../../src/robustness/__tests__/perturbations.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Robustness Analyzer
3
+ *
4
+ * Analyzes algorithm robustness under perturbations.
5
+ * Computes variance, stability, and degradation metrics.
6
+ */
7
+ import { computeSummaryStats } from "../aggregation/aggregators.js";
8
+ /**
9
+ * Analyze robustness of a SUT under perturbation.
10
+ *
11
+ * @param baseResults - Results without perturbation
12
+ * @param perturbedResults - Results with perturbation, keyed by perturbation name
13
+ * @param metric - Metric to analyze
14
+ * @returns Robustness metrics
15
+ */
16
+ export const analyzeRobustnessForMetric = (baseResults, perturbedResults, metric) => {
17
+ // Extract metric values
18
+ const baseValues = baseResults
19
+ .map((r) => r.metrics.numeric[metric])
20
+ .filter((v) => !Number.isNaN(v));
21
+ const perturbedValues = perturbedResults
22
+ .map((r) => r.metrics.numeric[metric])
23
+ .filter((v) => !Number.isNaN(v));
24
+ if (baseValues.length === 0 || perturbedValues.length === 0) {
25
+ return {
26
+ varianceUnderPerturbation: Number.NaN,
27
+ stdUnderPerturbation: Number.NaN,
28
+ coefficientOfVariation: Number.NaN,
29
+ };
30
+ }
31
+ // Compute statistics for perturbed results
32
+ // Note: baseStats could be used for relative comparison in future
33
+ const perturbedStats = computeSummaryStats(perturbedValues);
34
+ // Variance under perturbation
35
+ const varianceUnderPerturbation = perturbedStats.std === undefined ? Number.NaN : perturbedStats.std ** 2;
36
+ // Standard deviation
37
+ const stdUnderPerturbation = perturbedStats.std ?? Number.NaN;
38
+ // Coefficient of variation (relative variance)
39
+ const coefficientOfVariation = perturbedStats.mean !== 0 && perturbedStats.std !== undefined
40
+ ? perturbedStats.std / Math.abs(perturbedStats.mean)
41
+ : Number.NaN;
42
+ return {
43
+ varianceUnderPerturbation,
44
+ stdUnderPerturbation,
45
+ coefficientOfVariation,
46
+ };
47
+ };
48
+ /**
49
+ * Analyze robustness across multiple perturbation levels.
50
+ *
51
+ * @param results - All results including perturbed ones
52
+ * @param metric - Metric to analyze
53
+ * @param intensityLevels - Perturbation intensity levels
54
+ * @returns Robustness metrics with degradation curve
55
+ */
56
+ export const analyzeRobustnessWithCurve = (results, metric, intensityLevels) => {
57
+ // Group results by perturbation intensity
58
+ const byIntensity = new Map();
59
+ // Base results (no perturbation)
60
+ const baseResults = results.filter((r) => r.run.config?.perturbationIntensity === undefined);
61
+ byIntensity.set(0, baseResults);
62
+ // Perturbed results
63
+ for (const level of intensityLevels) {
64
+ const levelResults = results.filter((r) => r.run.config?.perturbationIntensity === level);
65
+ if (levelResults.length > 0) {
66
+ byIntensity.set(level, levelResults);
67
+ }
68
+ }
69
+ // Build degradation curve
70
+ const degradationCurve = [];
71
+ for (const [level, levelResults] of byIntensity) {
72
+ const values = levelResults
73
+ .map((r) => r.metrics.numeric[metric])
74
+ .filter((v) => !Number.isNaN(v));
75
+ if (values.length > 0) {
76
+ const stats = computeSummaryStats(values);
77
+ degradationCurve.push({
78
+ perturbationLevel: level,
79
+ metricValue: stats.mean,
80
+ stdDev: stats.std,
81
+ });
82
+ }
83
+ }
84
+ // Sort by level
85
+ degradationCurve.sort((a, b) => a.perturbationLevel - b.perturbationLevel);
86
+ // Find breakpoint (significant degradation)
87
+ let breakpoint;
88
+ if (degradationCurve.length >= 2) {
89
+ const baseValue = degradationCurve[0].metricValue;
90
+ for (let index = 1; index < degradationCurve.length; index++) {
91
+ const relativeChange = Math.abs((degradationCurve[index].metricValue - baseValue) / baseValue);
92
+ if (relativeChange > 0.1) {
93
+ // 10% degradation threshold
94
+ breakpoint = degradationCurve[index].perturbationLevel;
95
+ break;
96
+ }
97
+ }
98
+ }
99
+ // Compute overall variance from all perturbed results
100
+ const allPerturbedValues = results
101
+ .filter((r) => r.run.config?.perturbationIntensity !== undefined)
102
+ .map((r) => r.metrics.numeric[metric])
103
+ .filter((v) => !Number.isNaN(v));
104
+ const overallStats = computeSummaryStats(allPerturbedValues);
105
+ return {
106
+ varianceUnderPerturbation: overallStats.std === undefined ? Number.NaN : overallStats.std ** 2,
107
+ stdUnderPerturbation: overallStats.std ?? Number.NaN,
108
+ coefficientOfVariation: overallStats.mean !== 0 && overallStats.std !== undefined
109
+ ? overallStats.std / Math.abs(overallStats.mean)
110
+ : Number.NaN,
111
+ degradationCurve,
112
+ breakpoint,
113
+ };
114
+ };
115
+ /**
116
+ * Compare robustness between two SUTs.
117
+ *
118
+ * @param sutAResults - Results for SUT A (including perturbed)
119
+ * @param sutBResults - Results for SUT B (including perturbed)
120
+ * @param metric - Metric to compare
121
+ * @returns Object with comparison metrics
122
+ */
123
+ export const compareRobustness = (sutAResults, sutBResults, metric) => {
124
+ const sutAPerturbed = sutAResults.filter((r) => r.run.config?.perturbationIntensity !== undefined);
125
+ const sutBPerturbed = sutBResults.filter((r) => r.run.config?.perturbationIntensity !== undefined);
126
+ const sutABase = sutAResults.filter((r) => r.run.config?.perturbationIntensity === undefined);
127
+ const sutBBase = sutBResults.filter((r) => r.run.config?.perturbationIntensity === undefined);
128
+ const sutARobustness = analyzeRobustnessForMetric(sutABase, sutAPerturbed, metric);
129
+ const sutBRobustness = analyzeRobustnessForMetric(sutBBase, sutBPerturbed, metric);
130
+ const relativeRobustness = sutBRobustness.varianceUnderPerturbation === 0
131
+ ? Infinity
132
+ : sutARobustness.varianceUnderPerturbation / sutBRobustness.varianceUnderPerturbation;
133
+ return {
134
+ sutAVariance: sutARobustness.varianceUnderPerturbation,
135
+ sutBVariance: sutBRobustness.varianceUnderPerturbation,
136
+ relativeRobustness,
137
+ };
138
+ };
139
+ /**
140
+ * Create a full robustness analysis output.
141
+ *
142
+ * @param results - All evaluation results (base and perturbed)
143
+ * @param options - Analysis options
144
+ * @returns Complete robustness analysis output
145
+ */
146
+ export const createRobustnessAnalysis = (results, options) => {
147
+ const analysisResults = [];
148
+ // Group results by SUT
149
+ const bySut = new Map();
150
+ for (const result of results) {
151
+ const existing = bySut.get(result.run.sut) ?? [];
152
+ existing.push(result);
153
+ bySut.set(result.run.sut, existing);
154
+ }
155
+ // Analyze each SUT for each metric and perturbation
156
+ for (const [sut, sutResults] of bySut) {
157
+ for (const metric of options.metrics) {
158
+ for (const perturbation of options.perturbations) {
159
+ // Filter to this perturbation
160
+ const baseResults = sutResults.filter((r) => !r.run.config?.perturbation);
161
+ const perturbedResults = sutResults.filter((r) => r.run.config?.perturbation === perturbation);
162
+ const robustness = analyzeRobustnessForMetric(baseResults, perturbedResults, metric);
163
+ // Get baseline value
164
+ const baseValues = baseResults.map((r) => r.metrics.numeric[metric]);
165
+ const baselineValue = baseValues.length > 0
166
+ ? baseValues.reduce((a, b) => a + b, 0) / baseValues.length
167
+ : Number.NaN;
168
+ analysisResults.push({
169
+ sut,
170
+ perturbation,
171
+ metric,
172
+ robustness,
173
+ baselineValue,
174
+ runCount: perturbedResults.length,
175
+ });
176
+ }
177
+ }
178
+ }
179
+ return {
180
+ version: "1.0.0",
181
+ timestamp: new Date().toISOString(),
182
+ results: analysisResults,
183
+ config: {
184
+ perturbations: options.perturbations,
185
+ metrics: options.metrics,
186
+ intensityLevels: options.intensityLevels,
187
+ runsPerLevel: options.runsPerLevel ?? 1,
188
+ },
189
+ };
190
+ };
191
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/robustness/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Robustness Module
3
+ *
4
+ * Re-exports perturbations and robustness analysis.
5
+ */
6
+ export { analyzeRobustnessForMetric, analyzeRobustnessWithCurve, compareRobustness, createRobustnessAnalysis, type RobustnessAnalysisOptions, } from "./analyzer.js";
7
+ export { createPerturbation, edgeRemovalPerturbation, getPerturbation, nodeRemovalPerturbation, PERTURBATIONS, seedShiftPerturbation, weightNoisePerturbation, } from "./perturbations.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/robustness/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,yBAAyB,GAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,uBAAuB,GACvB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Robustness Module
3
+ *
4
+ * Re-exports perturbations and robustness analysis.
5
+ */
6
+ export { analyzeRobustnessForMetric, analyzeRobustnessWithCurve, compareRobustness, createRobustnessAnalysis, } from "./analyzer.js";
7
+ export { createPerturbation, edgeRemovalPerturbation, getPerturbation, nodeRemovalPerturbation, PERTURBATIONS, seedShiftPerturbation, weightNoisePerturbation, } from "./perturbations.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/robustness/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GAExB,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,uBAAuB,GACvB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Perturbation Implementations
3
+ *
4
+ * Concrete perturbations for robustness analysis.
5
+ * Each perturbation modifies evaluation cases in controlled ways.
6
+ */
7
+ import type { Perturbation, PerturbationConfig } from "../types/perturbation.js";
8
+ /**
9
+ * Edge removal perturbation.
10
+ * Randomly removes a fraction of edges from the graph.
11
+ */
12
+ export declare const edgeRemovalPerturbation: Perturbation;
13
+ /**
14
+ * Seed shift perturbation.
15
+ * Shifts seed nodes to their neighbors.
16
+ */
17
+ export declare const seedShiftPerturbation: Perturbation;
18
+ /**
19
+ * Node removal perturbation.
20
+ * Randomly removes non-seed nodes from the graph.
21
+ */
22
+ export declare const nodeRemovalPerturbation: Perturbation;
23
+ /**
24
+ * Weight noise perturbation.
25
+ * Adds Gaussian noise to edge weights.
26
+ */
27
+ export declare const weightNoisePerturbation: Perturbation;
28
+ /**
29
+ * All built-in perturbations.
30
+ */
31
+ export declare const PERTURBATIONS: Perturbation[];
32
+ /**
33
+ * Get a perturbation by ID.
34
+ *
35
+ * @param id - Perturbation identifier
36
+ * @returns Perturbation or undefined
37
+ */
38
+ export declare const getPerturbation: (id: string) => Perturbation | undefined;
39
+ /**
40
+ * Create a perturbation with custom intensity.
41
+ *
42
+ * @param config - Perturbation configuration
43
+ * @returns Perturbation with configured intensity
44
+ */
45
+ export declare const createPerturbation: (config: PerturbationConfig) => Perturbation;
46
+ //# sourceMappingURL=perturbations.d.ts.map