@eagleoutice/flowr 1.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +27 -0
- package/benchmark/benchmark-slicer.js +223 -0
- package/benchmark/index.d.ts +3 -0
- package/benchmark/index.js +20 -0
- package/benchmark/slicer.d.ts +100 -0
- package/benchmark/slicer.js +223 -0
- package/benchmark/stats/index.d.ts +10 -0
- package/benchmark/stats/index.js +27 -0
- package/benchmark/stats/print.d.ts +7 -0
- package/benchmark/stats/print.js +157 -0
- package/benchmark/stats/stats.d.ts +41 -0
- package/benchmark/stats/stats.js +6 -0
- package/benchmark/stopwatch.d.ts +35 -0
- package/benchmark/stopwatch.js +79 -0
- package/cli/benchmark-app.d.ts +9 -0
- package/cli/benchmark-app.js +52 -0
- package/cli/benchmark-helper-app.d.ts +7 -0
- package/cli/benchmark-helper-app.js +60 -0
- package/cli/common/features.d.ts +3 -0
- package/cli/common/features.js +30 -0
- package/cli/common/index.d.ts +2 -0
- package/cli/common/index.js +19 -0
- package/cli/common/options.d.ts +20 -0
- package/cli/common/options.js +82 -0
- package/cli/common/script.d.ts +21 -0
- package/cli/common/script.js +61 -0
- package/cli/common/scripts-info.d.ts +24 -0
- package/cli/common/scripts-info.js +69 -0
- package/cli/export-quads-app.d.ts +7 -0
- package/cli/export-quads-app.js +46 -0
- package/cli/repl/commands/cfg.d.ts +3 -0
- package/cli/repl/commands/cfg.js +37 -0
- package/cli/repl/commands/commands.d.ts +11 -0
- package/cli/repl/commands/commands.js +103 -0
- package/cli/repl/commands/dataflow.d.ts +3 -0
- package/cli/repl/commands/dataflow.js +34 -0
- package/cli/repl/commands/execute.d.ts +4 -0
- package/cli/repl/commands/execute.js +27 -0
- package/cli/repl/commands/index.d.ts +2 -0
- package/cli/repl/commands/index.js +19 -0
- package/cli/repl/commands/main.d.ts +39 -0
- package/cli/repl/commands/main.js +14 -0
- package/cli/repl/commands/normalize.d.ts +3 -0
- package/cli/repl/commands/normalize.js +34 -0
- package/cli/repl/commands/parse.d.ts +2 -0
- package/cli/repl/commands/parse.js +109 -0
- package/cli/repl/commands/quit.d.ts +2 -0
- package/cli/repl/commands/quit.js +12 -0
- package/cli/repl/commands/version.d.ts +16 -0
- package/cli/repl/commands/version.js +33 -0
- package/cli/repl/core.d.ts +41 -0
- package/cli/repl/core.js +89 -0
- package/cli/repl/execute.d.ts +28 -0
- package/cli/repl/execute.js +79 -0
- package/cli/repl/index.d.ts +5 -0
- package/cli/repl/index.js +22 -0
- package/cli/repl/prompt.d.ts +2 -0
- package/cli/repl/prompt.js +9 -0
- package/cli/repl/server/connection.d.ts +21 -0
- package/cli/repl/server/connection.js +217 -0
- package/cli/repl/server/messages/analysis.d.ts +71 -0
- package/cli/repl/server/messages/analysis.js +21 -0
- package/cli/repl/server/messages/error.d.ts +11 -0
- package/cli/repl/server/messages/error.js +3 -0
- package/cli/repl/server/messages/hello.d.ts +20 -0
- package/cli/repl/server/messages/hello.js +3 -0
- package/cli/repl/server/messages/index.d.ts +1 -0
- package/cli/repl/server/messages/index.js +3 -0
- package/cli/repl/server/messages/messages.d.ts +35 -0
- package/cli/repl/server/messages/messages.js +20 -0
- package/cli/repl/server/messages/repl.d.ts +33 -0
- package/cli/repl/server/messages/repl.js +17 -0
- package/cli/repl/server/messages/slice.d.ts +25 -0
- package/cli/repl/server/messages/slice.js +17 -0
- package/cli/repl/server/net.d.ts +33 -0
- package/cli/repl/server/net.js +24 -0
- package/cli/repl/server/send.d.ts +4 -0
- package/cli/repl/server/send.js +18 -0
- package/cli/repl/server/server.d.ts +20 -0
- package/cli/repl/server/server.js +66 -0
- package/cli/repl/server/validate.d.ts +15 -0
- package/cli/repl/server/validate.js +34 -0
- package/cli/slicer-app.d.ts +11 -0
- package/cli/slicer-app.js +81 -0
- package/cli/statistics-app.d.ts +11 -0
- package/cli/statistics-app.js +98 -0
- package/cli/statistics-helper-app.d.ts +11 -0
- package/cli/statistics-helper-app.js +83 -0
- package/cli/summarizer-app.d.ts +18 -0
- package/cli/summarizer-app.js +67 -0
- package/core/index.d.ts +4 -0
- package/core/index.js +23 -0
- package/core/input.d.ts +42 -0
- package/core/input.js +3 -0
- package/core/output.d.ts +15 -0
- package/core/output.js +3 -0
- package/core/pipeline-executor.js +221 -0
- package/core/print/dataflow-printer.d.ts +8 -0
- package/core/print/dataflow-printer.js +62 -0
- package/core/print/normalize-printer.d.ts +7 -0
- package/core/print/normalize-printer.js +31 -0
- package/core/print/parse-printer.d.ts +3 -0
- package/core/print/parse-printer.js +29 -0
- package/core/print/print.d.ts +47 -0
- package/core/print/print.js +13 -0
- package/core/print/slice-diff-ansi.d.ts +2 -0
- package/core/print/slice-diff-ansi.js +49 -0
- package/core/slicer.d.ts +123 -0
- package/core/slicer.js +227 -0
- package/core/stepping-slicer.js +160 -0
- package/core/steps/all/00-parse.js +19 -0
- package/core/steps/all/10-normalize.js +21 -0
- package/core/steps/all/20-dataflow.js +21 -0
- package/core/steps/all/30-slice.js +16 -0
- package/core/steps/all/40-reconstruct.js +16 -0
- package/core/steps/all/core/00-parse.js +24 -0
- package/core/steps/all/core/10-normalize.js +46 -0
- package/core/steps/all/core/20-dataflow.js +39 -0
- package/core/steps/all/static-slicing/00-slice.js +21 -0
- package/core/steps/all/static-slicing/10-reconstruct.js +21 -0
- package/core/steps/index.js +21 -0
- package/core/steps/input.js +3 -0
- package/core/steps/output.js +3 -0
- package/core/steps/pipeline/create.js +130 -0
- package/core/steps/pipeline/default.js +15 -0
- package/core/steps/pipeline/dependency-checker.js +76 -0
- package/core/steps/pipeline/index.js +20 -0
- package/core/steps/pipeline/invalid-pipeline-error.js +14 -0
- package/core/steps/pipeline/pipeline.js +28 -0
- package/core/steps/step.js +8 -0
- package/core/steps/steps-provider.js +3 -0
- package/core/steps/steps.js +35 -0
- package/core/steps.d.ts +166 -0
- package/core/steps.js +99 -0
- package/dataflow/common/environments/append.js +48 -0
- package/dataflow/common/environments/environment.js +165 -0
- package/dataflow/common/environments/index.js +23 -0
- package/dataflow/common/environments/overwrite.js +82 -0
- package/dataflow/common/environments/register.js +49 -0
- package/dataflow/common/environments/resolve-by-name.js +35 -0
- package/dataflow/common/environments/scopes.js +6 -0
- package/dataflow/common/environments/scoping.js +27 -0
- package/dataflow/environments/append.d.ts +8 -0
- package/dataflow/environments/append.js +48 -0
- package/dataflow/environments/environment.d.ts +78 -0
- package/dataflow/environments/environment.js +161 -0
- package/dataflow/environments/index.d.ts +7 -0
- package/dataflow/environments/index.js +23 -0
- package/dataflow/environments/overwrite.d.ts +6 -0
- package/dataflow/environments/overwrite.js +82 -0
- package/dataflow/environments/register.d.ts +7 -0
- package/dataflow/environments/register.js +39 -0
- package/dataflow/environments/resolve-by-name.d.ts +12 -0
- package/dataflow/environments/resolve-by-name.js +35 -0
- package/dataflow/environments/scopes.d.ts +6 -0
- package/dataflow/environments/scopes.js +6 -0
- package/dataflow/environments/scoping.d.ts +4 -0
- package/dataflow/environments/scoping.js +27 -0
- package/dataflow/extractor.d.ts +6 -0
- package/dataflow/extractor.js +60 -0
- package/dataflow/graph/diff.d.ts +18 -0
- package/dataflow/graph/diff.js +206 -0
- package/dataflow/graph/edge.d.ts +37 -0
- package/dataflow/graph/edge.js +32 -0
- package/dataflow/graph/equal.js +127 -0
- package/dataflow/graph/graph.d.ts +120 -0
- package/dataflow/graph/graph.js +298 -0
- package/dataflow/graph/index.d.ts +4 -0
- package/dataflow/graph/index.js +21 -0
- package/dataflow/graph/quads.d.ts +8 -0
- package/dataflow/graph/quads.js +27 -0
- package/dataflow/graph/vertex.d.ts +86 -0
- package/dataflow/graph/vertex.js +3 -0
- package/dataflow/index.d.ts +5 -0
- package/dataflow/index.js +24 -0
- package/dataflow/internal/info.d.ts +21 -0
- package/dataflow/internal/info.js +16 -0
- package/dataflow/internal/linker.d.ts +41 -0
- package/dataflow/internal/linker.js +255 -0
- package/dataflow/internal/process/access.d.ts +4 -0
- package/dataflow/internal/process/access.js +53 -0
- package/dataflow/internal/process/expression-list.d.ts +8 -0
- package/dataflow/internal/process/expression-list.js +148 -0
- package/dataflow/internal/process/functions/argument.d.ts +8 -0
- package/dataflow/internal/process/functions/argument.js +46 -0
- package/dataflow/internal/process/functions/exit-points.d.ts +2 -0
- package/dataflow/internal/process/functions/exit-points.js +121 -0
- package/dataflow/internal/process/functions/function-call.d.ts +5 -0
- package/dataflow/internal/process/functions/function-call.js +99 -0
- package/dataflow/internal/process/functions/function-definition.d.ts +4 -0
- package/dataflow/internal/process/functions/function-definition.js +176 -0
- package/dataflow/internal/process/functions/parameter.d.ts +4 -0
- package/dataflow/internal/process/functions/parameter.js +47 -0
- package/dataflow/internal/process/if-then-else.d.ts +4 -0
- package/dataflow/internal/process/if-then-else.js +56 -0
- package/dataflow/internal/process/loops/for-loop.d.ts +4 -0
- package/dataflow/internal/process/loops/for-loop.js +54 -0
- package/dataflow/internal/process/loops/repeat-loop.d.ts +4 -0
- package/dataflow/internal/process/loops/repeat-loop.js +21 -0
- package/dataflow/internal/process/loops/while-loop.d.ts +4 -0
- package/dataflow/internal/process/loops/while-loop.js +31 -0
- package/dataflow/internal/process/operators/assignment.d.ts +4 -0
- package/dataflow/internal/process/operators/assignment.js +129 -0
- package/dataflow/internal/process/operators/non-assignment-binary-op.d.ts +4 -0
- package/dataflow/internal/process/operators/non-assignment-binary-op.js +25 -0
- package/dataflow/internal/process/operators/pipe.d.ts +4 -0
- package/dataflow/internal/process/operators/pipe.js +46 -0
- package/dataflow/internal/process/operators/unary-op.d.ts +4 -0
- package/dataflow/internal/process/operators/unary-op.js +10 -0
- package/dataflow/internal/process/symbol.d.ts +4 -0
- package/dataflow/internal/process/symbol.js +21 -0
- package/dataflow/internal/process/uninteresting-leaf.d.ts +3 -0
- package/dataflow/internal/process/uninteresting-leaf.js +9 -0
- package/dataflow/processor.d.ts +47 -0
- package/dataflow/processor.js +20 -0
- package/dataflow/v1/extractor.js +60 -0
- package/dataflow/v1/graph/diff.js +206 -0
- package/dataflow/v1/graph/edge.js +32 -0
- package/dataflow/v1/graph/graph.js +298 -0
- package/dataflow/v1/graph/index.js +21 -0
- package/dataflow/v1/graph/quads.js +27 -0
- package/dataflow/v1/graph/vertex.js +3 -0
- package/dataflow/v1/index.js +24 -0
- package/dataflow/v1/internal/info.js +16 -0
- package/dataflow/v1/internal/linker.js +255 -0
- package/dataflow/v1/internal/process/access.js +54 -0
- package/dataflow/v1/internal/process/expression-list.js +154 -0
- package/dataflow/v1/internal/process/functions/argument.js +46 -0
- package/dataflow/v1/internal/process/functions/exit-points.js +125 -0
- package/dataflow/v1/internal/process/functions/function-call.js +99 -0
- package/dataflow/v1/internal/process/functions/function-definition.js +176 -0
- package/dataflow/v1/internal/process/functions/parameter.js +47 -0
- package/dataflow/v1/internal/process/if-then-else.js +57 -0
- package/dataflow/v1/internal/process/loops/for-loop.js +54 -0
- package/dataflow/v1/internal/process/loops/repeat-loop.js +21 -0
- package/dataflow/v1/internal/process/loops/while-loop.js +31 -0
- package/dataflow/v1/internal/process/operators/assignment.js +129 -0
- package/dataflow/v1/internal/process/operators/non-assignment-binary-op.js +25 -0
- package/dataflow/v1/internal/process/operators/pipe.js +46 -0
- package/dataflow/v1/internal/process/operators/unary-op.js +10 -0
- package/dataflow/v1/internal/process/symbol.js +21 -0
- package/dataflow/v1/internal/process/uninteresting-leaf.js +9 -0
- package/dataflow/v1/processor.js +20 -0
- package/dataflow/v2/entry.js +11 -0
- package/flowr-1.3.7.tgz +0 -0
- package/flowr.d.ts +26 -0
- package/flowr.js +135 -0
- package/index.d.ts +6 -0
- package/index.js +23 -0
- package/package.json +384 -0
- package/r-bridge/index.d.ts +11 -0
- package/r-bridge/index.js +28 -0
- package/r-bridge/lang-4.x/ast/index.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/index.js +19 -0
- package/r-bridge/lang-4.x/ast/model/collect.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/model/collect.js +23 -0
- package/r-bridge/lang-4.x/ast/model/index.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/model/index.js +23 -0
- package/r-bridge/lang-4.x/ast/model/model.d.ts +127 -0
- package/r-bridge/lang-4.x/ast/model/model.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/index.d.ts +21 -0
- package/r-bridge/lang-4.x/ast/model/nodes/index.js +38 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/index.js +27 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/model/nodes/info/r-delimiter.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.d.ts +24 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-access.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-argument.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.d.ts +25 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-binary-op.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-break.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-break.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-comment.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-comment.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-expression-list.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.d.ts +18 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-for-loop.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.d.ts +31 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-call.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-function-definition.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-if-then-else.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-line-directive.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-logical.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-logical.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-next.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-next.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-number.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-parameter.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-pipe.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-repeat-loop.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-string.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.d.ts +7 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-symbol.js +9 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.d.ts +18 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-unary-op.js +3 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/nodes/r-while-loop.js +3 -0
- package/r-bridge/lang-4.x/ast/model/operators.d.ts +46 -0
- package/r-bridge/lang-4.x/ast/model/operators.js +67 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.d.ts +81 -0
- package/r-bridge/lang-4.x/ast/model/processing/decorate.js +342 -0
- package/r-bridge/lang-4.x/ast/model/processing/fold.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/model/processing/fold.js +20 -0
- package/r-bridge/lang-4.x/ast/model/processing/index.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/model/processing/index.js +22 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.d.ts +41 -0
- package/r-bridge/lang-4.x/ast/model/processing/role.js +17 -0
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.d.ts +61 -0
- package/r-bridge/lang-4.x/ast/model/processing/stateful-fold.js +87 -0
- package/r-bridge/lang-4.x/ast/model/processing/visitor.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/model/processing/visitor.js +109 -0
- package/r-bridge/lang-4.x/ast/model/type.d.ts +206 -0
- package/r-bridge/lang-4.x/ast/model/type.js +18 -0
- package/r-bridge/lang-4.x/ast/model/versions.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/model/versions.js +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/config.js +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/input-format.js +42 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/meta.js +118 -0
- package/r-bridge/lang-4.x/ast/parser/xml/common/xml-to-json.js +58 -0
- package/r-bridge/lang-4.x/ast/parser/xml/config.d.ts +25 -0
- package/r-bridge/lang-4.x/ast/parser/xml/config.js +16 -0
- package/r-bridge/lang-4.x/ast/parser/xml/data.d.ts +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/data.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.d.ts +292 -0
- package/r-bridge/lang-4.x/ast/parser/xml/hooks.js +136 -0
- package/r-bridge/lang-4.x/ast/parser/xml/index.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/parser/xml/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.d.ts +32 -0
- package/r-bridge/lang-4.x/ast/parser/xml/input-format.js +33 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/access.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/access.js +107 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.d.ts +15 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then-else.js +32 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/if-then.js +46 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/control/index.js +19 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/expression.js +65 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.d.ts +1 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/expression/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/argument.js +74 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/call.js +149 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/definition.js +60 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.d.ts +2 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/functions/parameter.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/index.js +27 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/break.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/for.js +72 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.d.ts +5 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/next.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/repeat.js +42 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/loops/while.js +45 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.d.ts +50 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/meta.js +118 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.d.ts +8 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/binary.js +162 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.d.ts +6 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/special.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/operators/unary.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/comment.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.d.ts +1 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.d.ts +12 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/other/line-directive.js +55 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.d.ts +10 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/elements.js +159 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.d.ts +4 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/structure/single-element.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.d.ts +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.d.ts +13 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/number.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.d.ts +11 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/string.js +41 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.d.ts +14 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/values/symbol.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.d.ts +9 -0
- package/r-bridge/lang-4.x/ast/parser/xml/internal/xml-to-json.js +51 -0
- package/r-bridge/lang-4.x/ast/parser/xml/parser.d.ts +17 -0
- package/r-bridge/lang-4.x/ast/parser/xml/parser.js +30 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/data.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/hooks.js +136 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/access.js +107 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then-else.js +32 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/if-then.js +46 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/control/index.js +19 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/expression.js +65 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/expression/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/argument.js +74 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/call.js +149 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/definition.js +60 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/functions/parameter.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/index.js +27 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/break.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/for.js +72 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/index.js +22 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/next.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/repeat.js +42 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/loops/while.js +45 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/binary.js +162 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/special.js +24 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/operators/unary.js +59 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/comment.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/other/line-directive.js +55 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/elements.js +159 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/root.js +34 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/structure/single-element.js +64 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/index.js +20 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/number.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/string.js +41 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/internal/values/symbol.js +56 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v1/normalize.js +30 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/data.js +3 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/access.js +95 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/expression.js +99 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/functions/argument.js +71 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/binary.js +30 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/index.js +19 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/operators/unary.js +35 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/comment.js +25 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/other/line-directive.js +38 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/root.js +26 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/single-element.js +63 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/index.js +18 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/number.js +46 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/string.js +33 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/internal/values/symbol.js +63 -0
- package/r-bridge/lang-4.x/ast/parser/xml/v2/normalize.js +25 -0
- package/r-bridge/lang-4.x/index.d.ts +2 -0
- package/r-bridge/lang-4.x/index.js +19 -0
- package/r-bridge/lang-4.x/values.d.ts +39 -0
- package/r-bridge/lang-4.x/values.js +149 -0
- package/r-bridge/retriever.d.ts +48 -0
- package/r-bridge/retriever.js +71 -0
- package/r-bridge/shell.d.ts +147 -0
- package/r-bridge/shell.js +423 -0
- package/reconstruct/reconstruct.d.ts +28 -0
- package/reconstruct/reconstruct.js +448 -0
- package/slicing/criterion/collect-all.d.ts +36 -0
- package/slicing/criterion/collect-all.js +23 -0
- package/slicing/criterion/filters/all-variables.d.ts +2 -0
- package/slicing/criterion/filters/all-variables.js +63 -0
- package/slicing/criterion/filters/index.d.ts +1 -0
- package/slicing/criterion/filters/index.js +18 -0
- package/slicing/criterion/index.d.ts +3 -0
- package/slicing/criterion/index.js +20 -0
- package/slicing/criterion/parse.d.ts +20 -0
- package/slicing/criterion/parse.js +79 -0
- package/slicing/index.d.ts +3 -0
- package/slicing/index.js +20 -0
- package/slicing/static/index.d.ts +1 -0
- package/slicing/static/index.js +18 -0
- package/slicing/static/static-slicer.d.ts +29 -0
- package/slicing/static/static-slicer.js +186 -0
- package/statistics/features/common-syntax-probability.d.ts +30 -0
- package/statistics/features/common-syntax-probability.js +159 -0
- package/statistics/features/feature.d.ts +175 -0
- package/statistics/features/feature.js +30 -0
- package/statistics/features/index.d.ts +1 -0
- package/statistics/features/index.js +18 -0
- package/statistics/features/post-processing.d.ts +12 -0
- package/statistics/features/post-processing.js +21 -0
- package/statistics/features/supported/assignments/assignments.d.ts +11 -0
- package/statistics/features/supported/assignments/assignments.js +53 -0
- package/statistics/features/supported/assignments/index.d.ts +1 -0
- package/statistics/features/supported/assignments/index.js +6 -0
- package/statistics/features/supported/assignments/post-process.d.ts +3 -0
- package/statistics/features/supported/assignments/post-process.js +125 -0
- package/statistics/features/supported/comments/comments.d.ts +18 -0
- package/statistics/features/supported/comments/comments.js +133 -0
- package/statistics/features/supported/comments/index.d.ts +1 -0
- package/statistics/features/supported/comments/index.js +6 -0
- package/statistics/features/supported/comments/post-process.d.ts +3 -0
- package/statistics/features/supported/comments/post-process.js +50 -0
- package/statistics/features/supported/control-flow/control-flow.d.ts +17 -0
- package/statistics/features/supported/control-flow/control-flow.js +67 -0
- package/statistics/features/supported/control-flow/index.d.ts +1 -0
- package/statistics/features/supported/control-flow/index.js +6 -0
- package/statistics/features/supported/control-flow/post-process.d.ts +3 -0
- package/statistics/features/supported/control-flow/post-process.js +65 -0
- package/statistics/features/supported/data-access/data-access.d.ts +15 -0
- package/statistics/features/supported/data-access/data-access.js +118 -0
- package/statistics/features/supported/data-access/index.d.ts +1 -0
- package/statistics/features/supported/data-access/index.js +6 -0
- package/statistics/features/supported/data-access/post-process.d.ts +3 -0
- package/statistics/features/supported/data-access/post-process.js +107 -0
- package/statistics/features/supported/defined-functions/defined-functions.d.ts +35 -0
- package/statistics/features/supported/defined-functions/defined-functions.js +139 -0
- package/statistics/features/supported/defined-functions/index.d.ts +1 -0
- package/statistics/features/supported/defined-functions/index.js +6 -0
- package/statistics/features/supported/defined-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/defined-functions/post-process.js +177 -0
- package/statistics/features/supported/expression-list/expression-list.d.ts +9 -0
- package/statistics/features/supported/expression-list/expression-list.js +36 -0
- package/statistics/features/supported/expression-list/index.d.ts +1 -0
- package/statistics/features/supported/expression-list/index.js +6 -0
- package/statistics/features/supported/expression-list/post-process.d.ts +3 -0
- package/statistics/features/supported/expression-list/post-process.js +44 -0
- package/statistics/features/supported/index.d.ts +10 -0
- package/statistics/features/supported/index.js +27 -0
- package/statistics/features/supported/loops/index.d.ts +1 -0
- package/statistics/features/supported/loops/index.js +6 -0
- package/statistics/features/supported/loops/loops.d.ts +20 -0
- package/statistics/features/supported/loops/loops.js +79 -0
- package/statistics/features/supported/loops/post-process.d.ts +3 -0
- package/statistics/features/supported/loops/post-process.js +72 -0
- package/statistics/features/supported/used-functions/index.d.ts +1 -0
- package/statistics/features/supported/used-functions/index.js +6 -0
- package/statistics/features/supported/used-functions/post-process.d.ts +6 -0
- package/statistics/features/supported/used-functions/post-process.js +179 -0
- package/statistics/features/supported/used-functions/used-functions.d.ts +24 -0
- package/statistics/features/supported/used-functions/used-functions.js +95 -0
- package/statistics/features/supported/used-packages/index.d.ts +1 -0
- package/statistics/features/supported/used-packages/index.js +6 -0
- package/statistics/features/supported/used-packages/post-process.d.ts +3 -0
- package/statistics/features/supported/used-packages/post-process.js +121 -0
- package/statistics/features/supported/used-packages/used-packages.d.ts +16 -0
- package/statistics/features/supported/used-packages/used-packages.js +130 -0
- package/statistics/features/supported/values/index.d.ts +1 -0
- package/statistics/features/supported/values/index.js +6 -0
- package/statistics/features/supported/values/post-process.d.ts +3 -0
- package/statistics/features/supported/values/post-process.js +72 -0
- package/statistics/features/supported/values/values.d.ts +14 -0
- package/statistics/features/supported/values/values.js +101 -0
- package/statistics/features/supported/variables/index.d.ts +1 -0
- package/statistics/features/supported/variables/index.js +6 -0
- package/statistics/features/supported/variables/post-process.d.ts +9 -0
- package/statistics/features/supported/variables/post-process.js +122 -0
- package/statistics/features/supported/variables/variables.d.ts +15 -0
- package/statistics/features/supported/variables/variables.js +70 -0
- package/statistics/index.d.ts +6 -0
- package/statistics/index.js +24 -0
- package/statistics/meta-statistics.d.ts +33 -0
- package/statistics/meta-statistics.js +17 -0
- package/statistics/output/ansi.d.ts +50 -0
- package/statistics/output/ansi.js +58 -0
- package/statistics/output/file-provider.d.ts +37 -0
- package/statistics/output/file-provider.js +97 -0
- package/statistics/output/index.d.ts +4 -0
- package/statistics/output/index.js +21 -0
- package/statistics/output/print-stats.d.ts +17 -0
- package/statistics/output/print-stats.js +69 -0
- package/statistics/output/statistics-file.d.ts +37 -0
- package/statistics/output/statistics-file.js +69 -0
- package/statistics/statistics.d.ts +24 -0
- package/statistics/statistics.js +109 -0
- package/util/args.d.ts +14 -0
- package/util/args.js +67 -0
- package/util/arrays.d.ts +44 -0
- package/util/arrays.js +145 -0
- package/util/assert.d.ts +11 -0
- package/util/assert.js +35 -0
- package/util/bimap.d.ts +24 -0
- package/util/bimap.js +71 -0
- package/util/cfg.d.ts +55 -0
- package/util/cfg.js +498 -0
- package/util/defaultmap.d.ts +34 -0
- package/util/defaultmap.js +65 -0
- package/util/diff.d.ts +43 -0
- package/util/diff.js +28 -0
- package/util/files.d.ts +54 -0
- package/util/files.js +144 -0
- package/util/json.d.ts +2 -0
- package/util/json.js +28 -0
- package/util/log.d.ts +22 -0
- package/util/log.js +48 -0
- package/util/mermaid/ast.d.ts +6 -0
- package/util/mermaid/ast.js +28 -0
- package/util/mermaid/cfg.d.ts +7 -0
- package/util/mermaid/cfg.js +44 -0
- package/util/mermaid/dfg.d.ts +21 -0
- package/util/mermaid/dfg.js +165 -0
- package/util/mermaid/index.d.ts +3 -0
- package/util/mermaid/index.js +20 -0
- package/util/mermaid/mermaid.d.ts +7 -0
- package/util/mermaid/mermaid.js +24 -0
- package/util/numbers.d.ts +1 -0
- package/util/numbers.js +9 -0
- package/util/objects.d.ts +17 -0
- package/util/objects.js +60 -0
- package/util/os.d.ts +2 -0
- package/util/os.js +25 -0
- package/util/parallel.d.ts +30 -0
- package/util/parallel.js +103 -0
- package/util/quads.d.ts +92 -0
- package/util/quads.js +189 -0
- package/util/random.d.ts +4 -0
- package/util/random.js +22 -0
- package/util/range.d.ts +32 -0
- package/util/range.js +61 -0
- package/util/set.d.ts +8 -0
- package/util/set.js +32 -0
- package/util/strings.d.ts +12 -0
- package/util/strings.js +41 -0
- package/util/summarizer/auto-detect.d.ts +2 -0
- package/util/summarizer/auto-detect.js +32 -0
- package/util/summarizer/benchmark/benchmark-summarizer.js +208 -0
- package/util/summarizer/benchmark/data.d.ts +66 -0
- package/util/summarizer/benchmark/data.js +13 -0
- package/util/summarizer/benchmark/first-phase/input.d.ts +2 -0
- package/util/summarizer/benchmark/first-phase/input.js +59 -0
- package/util/summarizer/benchmark/first-phase/process.d.ts +10 -0
- package/util/summarizer/benchmark/first-phase/process.js +208 -0
- package/util/summarizer/benchmark/second-phase/graph.d.ts +2 -0
- package/util/summarizer/benchmark/second-phase/graph.js +54 -0
- package/util/summarizer/benchmark/second-phase/process.d.ts +4 -0
- package/util/summarizer/benchmark/second-phase/process.js +89 -0
- package/util/summarizer/benchmark/summarizer.d.ts +34 -0
- package/util/summarizer/benchmark/summarizer.js +53 -0
- package/util/summarizer/statistics/first-phase/process.d.ts +6 -0
- package/util/summarizer/statistics/first-phase/process.js +81 -0
- package/util/summarizer/statistics/post-process/clusterer.d.ts +26 -0
- package/util/summarizer/statistics/post-process/clusterer.js +43 -0
- package/util/summarizer/statistics/post-process/file-based-count.d.ts +17 -0
- package/util/summarizer/statistics/post-process/file-based-count.js +49 -0
- package/util/summarizer/statistics/post-process/histogram.d.ts +59 -0
- package/util/summarizer/statistics/post-process/histogram.js +128 -0
- package/util/summarizer/statistics/post-process/index.d.ts +4 -0
- package/util/summarizer/statistics/post-process/index.js +21 -0
- package/util/summarizer/statistics/post-process/post-process-output.d.ts +16 -0
- package/util/summarizer/statistics/post-process/post-process-output.js +104 -0
- package/util/summarizer/statistics/second-phase/process.d.ts +11 -0
- package/util/summarizer/statistics/second-phase/process.js +117 -0
- package/util/summarizer/statistics/summarizer.d.ts +34 -0
- package/util/summarizer/statistics/summarizer.js +135 -0
- package/util/summarizer/summarizer.d.ts +25 -0
- package/util/summarizer/summarizer.js +13 -0
- package/util/time.d.ts +6 -0
- package/util/time.js +13 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ultimateStats2String = exports.stats2string = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* This module is tasked with processing the results of the benchmarking (see {@link SummarizedSlicerStats}).
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
const assert_1 = require("../../util/assert");
|
|
9
|
+
const padSize = 15;
|
|
10
|
+
function pad(string) {
|
|
11
|
+
return String(string).padStart(padSize, ' ');
|
|
12
|
+
}
|
|
13
|
+
function divWithRest(dividend, divisor) {
|
|
14
|
+
return [dividend / divisor, dividend % divisor];
|
|
15
|
+
}
|
|
16
|
+
function formatNanoseconds(nanoseconds) {
|
|
17
|
+
if (nanoseconds < 0) {
|
|
18
|
+
return '??';
|
|
19
|
+
}
|
|
20
|
+
const [seconds, rest] = divWithRest(typeof nanoseconds === 'number' ? BigInt(Math.round(nanoseconds)) : nanoseconds, BigInt(1e9));
|
|
21
|
+
const [milliseconds, remainingNanoseconds] = divWithRest(rest, BigInt(1e6));
|
|
22
|
+
const secondsStr = seconds > 0 ? `${String(seconds).padStart(2, '0')}.` : '';
|
|
23
|
+
const millisecondsStr = seconds > 0 ? `${String(milliseconds).padStart(3, '0')}:` : `${String(milliseconds)}:`;
|
|
24
|
+
const nanoStr = String(remainingNanoseconds).padEnd(3, '0').substring(0, 3);
|
|
25
|
+
const unit = seconds === 0n ? 'ms' : ' s'; /* space for padding */
|
|
26
|
+
return pad(`${secondsStr}${millisecondsStr}${nanoStr}${unit}`);
|
|
27
|
+
}
|
|
28
|
+
function print(measurements, key) {
|
|
29
|
+
const time = measurements.get(key);
|
|
30
|
+
(0, assert_1.guard)(time !== undefined, `Measurement for ${JSON.stringify(key)} not found`);
|
|
31
|
+
return formatNanoseconds(time);
|
|
32
|
+
}
|
|
33
|
+
function formatSummarizedTimeMeasure(measure) {
|
|
34
|
+
if (measure === undefined) {
|
|
35
|
+
return '??';
|
|
36
|
+
}
|
|
37
|
+
return `${formatNanoseconds(measure.min)} - ${formatNanoseconds(measure.max)} (median: ${formatNanoseconds(measure.median)}, mean: ${formatNanoseconds(measure.mean)}, std: ${formatNanoseconds(measure.std)})`;
|
|
38
|
+
}
|
|
39
|
+
function roundTo(num, digits = 4) {
|
|
40
|
+
const factor = Math.pow(10, digits);
|
|
41
|
+
return Math.round(num * factor) / factor;
|
|
42
|
+
}
|
|
43
|
+
function asPercentage(num) {
|
|
44
|
+
if (isNaN(num)) {
|
|
45
|
+
return '??%';
|
|
46
|
+
}
|
|
47
|
+
return pad(`${roundTo(num * 100, 3)}%`);
|
|
48
|
+
}
|
|
49
|
+
function asFloat(num) {
|
|
50
|
+
return pad(roundTo(num));
|
|
51
|
+
}
|
|
52
|
+
function formatSummarizedMeasure(measure, fmt = asFloat) {
|
|
53
|
+
if (measure === undefined) {
|
|
54
|
+
return '??';
|
|
55
|
+
}
|
|
56
|
+
return `${fmt(measure.min)} - ${fmt(measure.max)} (median: ${fmt(measure.median)}, mean: ${fmt(measure.mean)}, std: ${fmt(measure.std)})`;
|
|
57
|
+
}
|
|
58
|
+
function printSummarizedMeasurements(stats, key) {
|
|
59
|
+
const measure = stats.measurements.get(key);
|
|
60
|
+
(0, assert_1.guard)(measure !== undefined, `Measurement for ${JSON.stringify(key)} not found`);
|
|
61
|
+
return formatSummarizedTimeMeasure(measure);
|
|
62
|
+
}
|
|
63
|
+
function printCountSummarizedMeasurements(stats) {
|
|
64
|
+
const range = `${stats.min} - ${stats.max}`.padStart(padSize, ' ');
|
|
65
|
+
return `${range} (median: ${stats.median}, mean: ${stats.mean}, std: ${stats.std})`;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Converts the given stats to a human-readable string.
|
|
69
|
+
* You may have to {@link summarizeSlicerStats | summarize} the stats first.
|
|
70
|
+
*/
|
|
71
|
+
function stats2string(stats) {
|
|
72
|
+
let result = `
|
|
73
|
+
Request: ${JSON.stringify(stats.request)}
|
|
74
|
+
Shell init time: ${print(stats.commonMeasurements, 'initialize R session')}
|
|
75
|
+
Retrieval of token map: ${print(stats.commonMeasurements, 'retrieve token map')}
|
|
76
|
+
AST retrieval: ${print(stats.commonMeasurements, 'retrieve AST from R code')}
|
|
77
|
+
AST normalization: ${print(stats.commonMeasurements, 'normalize R AST')}
|
|
78
|
+
Dataflow creation: ${print(stats.commonMeasurements, 'produce dataflow information')}
|
|
79
|
+
|
|
80
|
+
Slicing summary for ${stats.perSliceMeasurements.numberOfSlices} slice${stats.perSliceMeasurements.numberOfSlices !== 1 ? 's' : ''}:`;
|
|
81
|
+
if (stats.perSliceMeasurements.numberOfSlices > 0) {
|
|
82
|
+
result += `
|
|
83
|
+
Total: ${printSummarizedMeasurements(stats.perSliceMeasurements, 'total')}
|
|
84
|
+
Slice creation: ${printSummarizedMeasurements(stats.perSliceMeasurements, 'static slicing')}
|
|
85
|
+
Reconstruction: ${printSummarizedMeasurements(stats.perSliceMeasurements, 'reconstruct code')}
|
|
86
|
+
Used Slice Criteria Sizes: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceCriteriaSizes)}
|
|
87
|
+
Result Slice Sizes:
|
|
88
|
+
Number of lines: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.lines)}
|
|
89
|
+
Number of characters: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.characters)}
|
|
90
|
+
Number of non whitespace characters: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.nonWhitespaceCharacters)}
|
|
91
|
+
Number of auto selected: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.autoSelected)}
|
|
92
|
+
Number of R tokens: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.tokens)}
|
|
93
|
+
Normalized R tokens: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.normalizedTokens)}
|
|
94
|
+
Number of dataflow nodes: ${printCountSummarizedMeasurements(stats.perSliceMeasurements.sliceSize.dataflowNodes)}
|
|
95
|
+
`;
|
|
96
|
+
}
|
|
97
|
+
return `${result}
|
|
98
|
+
Shell close: ${print(stats.commonMeasurements, 'close R session')}
|
|
99
|
+
Total: ${print(stats.commonMeasurements, 'total')}
|
|
100
|
+
|
|
101
|
+
Input:
|
|
102
|
+
Number of lines: ${pad(stats.input.numberOfLines)}
|
|
103
|
+
Number of characters: ${pad(stats.input.numberOfCharacters)}
|
|
104
|
+
Number of non whitespace characters: ${pad(stats.input.numberOfNonWhitespaceCharacters)}
|
|
105
|
+
Number of tokens: ${pad(stats.input.numberOfRTokens)}
|
|
106
|
+
Normalized R tokens: ${pad(stats.input.numberOfNormalizedTokens)}
|
|
107
|
+
|
|
108
|
+
Dataflow:
|
|
109
|
+
Number of nodes: ${pad(stats.dataflow.numberOfNodes)}
|
|
110
|
+
Number of edges: ${pad(stats.dataflow.numberOfEdges)}
|
|
111
|
+
Number of calls: ${pad(stats.dataflow.numberOfCalls)}
|
|
112
|
+
Number of function defs: ${pad(stats.dataflow.numberOfFunctionDefinitions)}`;
|
|
113
|
+
}
|
|
114
|
+
exports.stats2string = stats2string;
|
|
115
|
+
function ultimateStats2String(stats) {
|
|
116
|
+
// Used Slice Criteria Sizes: ${formatSummarizedMeasure(stats.perSliceMeasurements.sliceCriteriaSizes)}
|
|
117
|
+
return `
|
|
118
|
+
Summarized: ${stats.totalRequests} requests and ${stats.totalSlices} slices
|
|
119
|
+
Shell init time: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('initialize R session'))}
|
|
120
|
+
Retrieval of token map: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('retrieve token map'))}
|
|
121
|
+
AST retrieval: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('retrieve AST from R code'))}
|
|
122
|
+
AST normalization: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('normalize R AST'))}
|
|
123
|
+
Dataflow creation: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('produce dataflow information'))}
|
|
124
|
+
|
|
125
|
+
Slice summary for:
|
|
126
|
+
Total: ${formatSummarizedTimeMeasure(stats.perSliceMeasurements.get('total'))}
|
|
127
|
+
Slice creation: ${formatSummarizedTimeMeasure(stats.perSliceMeasurements.get('static slicing'))}
|
|
128
|
+
Reconstruction: ${formatSummarizedTimeMeasure(stats.perSliceMeasurements.get('reconstruct code'))}
|
|
129
|
+
Failed to Re-Parse: ${pad(stats.failedToRepParse)}/${stats.totalSlices}
|
|
130
|
+
Times hit Threshold: ${pad(stats.timesHitThreshold)}/${stats.totalSlices}
|
|
131
|
+
Reductions (reduced by x%):
|
|
132
|
+
Number of lines: ${formatSummarizedMeasure(stats.reduction.numberOfLines, asPercentage)}
|
|
133
|
+
Number of lines no auto: ${formatSummarizedMeasure(stats.reduction.numberOfLinesNoAutoSelection, asPercentage)}
|
|
134
|
+
Number of characters: ${formatSummarizedMeasure(stats.reduction.numberOfCharacters, asPercentage)}
|
|
135
|
+
Number of non whitespace characters: ${formatSummarizedMeasure(stats.reduction.numberOfNonWhitespaceCharacters, asPercentage)}
|
|
136
|
+
Number of R tokens: ${formatSummarizedMeasure(stats.reduction.numberOfRTokens, asPercentage)}
|
|
137
|
+
Normalized R tokens: ${formatSummarizedMeasure(stats.reduction.numberOfNormalizedTokens, asPercentage)}
|
|
138
|
+
Number of dataflow nodes: ${formatSummarizedMeasure(stats.reduction.numberOfDataflowNodes, asPercentage)}
|
|
139
|
+
|
|
140
|
+
Shell close: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('close R session'))}
|
|
141
|
+
Total: ${formatSummarizedTimeMeasure(stats.commonMeasurements.get('total'))}
|
|
142
|
+
|
|
143
|
+
Input:
|
|
144
|
+
Number of lines: ${formatSummarizedMeasure(stats.input.numberOfLines)}
|
|
145
|
+
Number of characters: ${formatSummarizedMeasure(stats.input.numberOfCharacters)}
|
|
146
|
+
Number of non whitespace characters: ${formatSummarizedMeasure(stats.input.numberOfNonWhitespaceCharacters)}
|
|
147
|
+
Number of tokens: ${formatSummarizedMeasure(stats.input.numberOfRTokens)}
|
|
148
|
+
Normalized R tokens: ${formatSummarizedMeasure(stats.input.numberOfNormalizedTokens)}
|
|
149
|
+
|
|
150
|
+
Dataflow:
|
|
151
|
+
Number of nodes: ${formatSummarizedMeasure(stats.dataflow.numberOfNodes)}
|
|
152
|
+
Number of edges: ${formatSummarizedMeasure(stats.dataflow.numberOfEdges)}
|
|
153
|
+
Number of calls: ${formatSummarizedMeasure(stats.dataflow.numberOfCalls)}
|
|
154
|
+
Number of function defs: ${formatSummarizedMeasure(stats.dataflow.numberOfFunctionDefinitions)}`;
|
|
155
|
+
}
|
|
156
|
+
exports.ultimateStats2String = ultimateStats2String;
|
|
157
|
+
//# sourceMappingURL=print.js.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { SingleSlicingCriterion, SlicingCriteria } from '../../slicing';
|
|
2
|
+
import { NodeId, RParseRequestFromFile, RParseRequestFromText } from '../../r-bridge';
|
|
3
|
+
import { ReconstructionResult } from '../../slicing';
|
|
4
|
+
export declare const CommonSlicerMeasurements: readonly ["initialize R session", "inject home path", "ensure installation of xmlparsedata", "retrieve token map", "retrieve AST from R code", "normalize R AST", "produce dataflow information", "close R session", "total"];
|
|
5
|
+
export type CommonSlicerMeasurements = typeof CommonSlicerMeasurements[number];
|
|
6
|
+
export declare const PerSliceMeasurements: readonly ["static slicing", "reconstruct code", "total"];
|
|
7
|
+
export type PerSliceMeasurements = typeof PerSliceMeasurements[number];
|
|
8
|
+
export type ElapsedTime = bigint;
|
|
9
|
+
export interface PerSliceStats {
|
|
10
|
+
measurements: Map<PerSliceMeasurements, ElapsedTime>;
|
|
11
|
+
slicingCriteria: {
|
|
12
|
+
criterion: SingleSlicingCriterion;
|
|
13
|
+
id: NodeId;
|
|
14
|
+
}[];
|
|
15
|
+
reconstructedCode: ReconstructionResult;
|
|
16
|
+
numberOfDataflowNodesSliced: number;
|
|
17
|
+
timesHitThreshold: number;
|
|
18
|
+
}
|
|
19
|
+
export interface SlicerStatsInput<T = number> {
|
|
20
|
+
numberOfLines: T;
|
|
21
|
+
numberOfCharacters: T;
|
|
22
|
+
numberOfNonWhitespaceCharacters: T;
|
|
23
|
+
numberOfRTokens: T;
|
|
24
|
+
numberOfNormalizedTokens: T;
|
|
25
|
+
}
|
|
26
|
+
export interface SlicerStatsDataflow<T = number> {
|
|
27
|
+
numberOfNodes: T;
|
|
28
|
+
numberOfEdges: T;
|
|
29
|
+
numberOfCalls: T;
|
|
30
|
+
numberOfFunctionDefinitions: T;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The statistics that are collected by the {@link BenchmarkSlicer} and used for benchmarking.
|
|
34
|
+
*/
|
|
35
|
+
export interface SlicerStats {
|
|
36
|
+
commonMeasurements: Map<CommonSlicerMeasurements, ElapsedTime>;
|
|
37
|
+
perSliceMeasurements: Map<SlicingCriteria, PerSliceStats>;
|
|
38
|
+
request: RParseRequestFromFile | RParseRequestFromText;
|
|
39
|
+
input: SlicerStatsInput;
|
|
40
|
+
dataflow: SlicerStatsDataflow;
|
|
41
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PerSliceMeasurements = exports.CommonSlicerMeasurements = void 0;
|
|
4
|
+
exports.CommonSlicerMeasurements = ['initialize R session', 'inject home path', 'ensure installation of xmlparsedata', 'retrieve token map', 'retrieve AST from R code', 'normalize R AST', 'produce dataflow information', 'close R session', 'total'];
|
|
5
|
+
exports.PerSliceMeasurements = ['static slicing', 'reconstruct code', 'total'];
|
|
6
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface IStoppableStopwatch {
|
|
2
|
+
/** Stop the given stopwatch. */
|
|
3
|
+
stop(): void;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Allows to measure keys of type `T` with a `Stopwatch`.
|
|
7
|
+
*
|
|
8
|
+
* Measure with {@link start}, {@link measure} or {@link measureAsync}, retrieve the final measurements with {@link get}.
|
|
9
|
+
*/
|
|
10
|
+
export declare class Measurements<T> {
|
|
11
|
+
private measurements;
|
|
12
|
+
/**
|
|
13
|
+
* Start a timer for the given key, and guards that this is the first time this key is started.
|
|
14
|
+
* Call {@link IStoppableStopwatch#stop} on the returned stopwatch to stop the timer.
|
|
15
|
+
*/
|
|
16
|
+
start(key: T): IStoppableStopwatch;
|
|
17
|
+
/**
|
|
18
|
+
* Automatically call {@link Measurements#start | start} and the corresponding stop to measure the execution time of the given function.
|
|
19
|
+
* @see {@link measureAsync}
|
|
20
|
+
*/
|
|
21
|
+
measure<Out>(key: T, fn: () => Out): Out;
|
|
22
|
+
/**
|
|
23
|
+
* Similar to {@link measure}, but await the promise as part of the measurement
|
|
24
|
+
*
|
|
25
|
+
* @param key - The key to write the resulting measurement to
|
|
26
|
+
* @param fn - The function to measure
|
|
27
|
+
*
|
|
28
|
+
* @see measure
|
|
29
|
+
*/
|
|
30
|
+
measureAsync<Out>(key: T, fn: () => Promise<Out>): Promise<Out>;
|
|
31
|
+
/**
|
|
32
|
+
* Retrieve all measure-results, requires that all stop-watches that have been started have also been stopped.
|
|
33
|
+
*/
|
|
34
|
+
get(): Map<T, bigint>;
|
|
35
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Measurements = void 0;
|
|
4
|
+
const assert_1 = require("../util/assert");
|
|
5
|
+
/** unguarded start-stop wrapper */
|
|
6
|
+
class Stopwatch {
|
|
7
|
+
timeStart;
|
|
8
|
+
timeEnd;
|
|
9
|
+
stopped = false;
|
|
10
|
+
start() {
|
|
11
|
+
this.timeStart = process.hrtime.bigint();
|
|
12
|
+
}
|
|
13
|
+
stop() {
|
|
14
|
+
this.timeEnd = process.hrtime.bigint();
|
|
15
|
+
// check after to not affect measurements
|
|
16
|
+
(0, assert_1.guard)(!this.stopped, 'cannot stop a stopwatch twice');
|
|
17
|
+
this.stopped = true;
|
|
18
|
+
}
|
|
19
|
+
get() {
|
|
20
|
+
(0, assert_1.guard)(this.timeStart !== undefined && this.timeEnd !== undefined, 'cannot get elapsed time as the stopwatch has not been started/stopped');
|
|
21
|
+
return this.timeEnd - this.timeStart;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Allows to measure keys of type `T` with a `Stopwatch`.
|
|
26
|
+
*
|
|
27
|
+
* Measure with {@link start}, {@link measure} or {@link measureAsync}, retrieve the final measurements with {@link get}.
|
|
28
|
+
*/
|
|
29
|
+
class Measurements {
|
|
30
|
+
measurements = new Map();
|
|
31
|
+
/**
|
|
32
|
+
* Start a timer for the given key, and guards that this is the first time this key is started.
|
|
33
|
+
* Call {@link IStoppableStopwatch#stop} on the returned stopwatch to stop the timer.
|
|
34
|
+
*/
|
|
35
|
+
start(key) {
|
|
36
|
+
// we guard *before* starting so there is no additional time penalty
|
|
37
|
+
(0, assert_1.guard)(!this.measurements.has(key), `already started stop watch for ${JSON.stringify(key)}`);
|
|
38
|
+
const stopwatch = new Stopwatch();
|
|
39
|
+
this.measurements.set(key, stopwatch);
|
|
40
|
+
stopwatch.start();
|
|
41
|
+
return stopwatch;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Automatically call {@link Measurements#start | start} and the corresponding stop to measure the execution time of the given function.
|
|
45
|
+
* @see {@link measureAsync}
|
|
46
|
+
*/
|
|
47
|
+
measure(key, fn) {
|
|
48
|
+
const stopwatch = this.start(key);
|
|
49
|
+
const result = fn();
|
|
50
|
+
stopwatch.stop();
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Similar to {@link measure}, but await the promise as part of the measurement
|
|
55
|
+
*
|
|
56
|
+
* @param key - The key to write the resulting measurement to
|
|
57
|
+
* @param fn - The function to measure
|
|
58
|
+
*
|
|
59
|
+
* @see measure
|
|
60
|
+
*/
|
|
61
|
+
async measureAsync(key, fn) {
|
|
62
|
+
const stopwatch = this.start(key);
|
|
63
|
+
const result = await fn();
|
|
64
|
+
stopwatch.stop();
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Retrieve all measure-results, requires that all stop-watches that have been started have also been stopped.
|
|
69
|
+
*/
|
|
70
|
+
get() {
|
|
71
|
+
const result = new Map();
|
|
72
|
+
for (const [key, stopwatch] of this.measurements) {
|
|
73
|
+
result.set(key, stopwatch.get());
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.Measurements = Measurements;
|
|
79
|
+
//# sourceMappingURL=stopwatch.js.map
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const log_1 = require("../util/log");
|
|
7
|
+
const files_1 = require("../util/files");
|
|
8
|
+
const parallel_1 = require("../util/parallel");
|
|
9
|
+
const assert_1 = require("../util/assert");
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const common_1 = require("./common");
|
|
12
|
+
const options = (0, common_1.processCommandLineArgs)('benchmark', [], {
|
|
13
|
+
subtitle: 'Slice given files with additional benchmark information',
|
|
14
|
+
examples: [
|
|
15
|
+
'{italic example-folder/}',
|
|
16
|
+
'{bold --help}'
|
|
17
|
+
]
|
|
18
|
+
});
|
|
19
|
+
if (options.input.length === 0) {
|
|
20
|
+
console.error('No input files given. Nothing to do. See \'--help\' if this is an error.');
|
|
21
|
+
process.exit(0);
|
|
22
|
+
}
|
|
23
|
+
(0, assert_1.guard)(options.slice === 'all' || options.slice === 'no', 'slice must be either all or no');
|
|
24
|
+
function removeIfExists(summarizedRaw) {
|
|
25
|
+
if (fs_1.default.existsSync(summarizedRaw)) {
|
|
26
|
+
console.log(`Removing existing ${summarizedRaw}`);
|
|
27
|
+
fs_1.default.unlinkSync(summarizedRaw);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function benchmark() {
|
|
31
|
+
removeIfExists(options.output);
|
|
32
|
+
console.log(`Writing output continuously to ${options.output}`);
|
|
33
|
+
console.log(`Using ${options.parallel} parallel executors`);
|
|
34
|
+
// we do not use the limit argument to be able to pick the limit randomly
|
|
35
|
+
const files = [];
|
|
36
|
+
for await (const file of (0, files_1.allRFilesFrom)(options.input)) {
|
|
37
|
+
files.push(file);
|
|
38
|
+
}
|
|
39
|
+
if (options.limit) {
|
|
40
|
+
log_1.log.info(`limiting to ${options.limit} files`);
|
|
41
|
+
// shuffle and limit
|
|
42
|
+
files.sort(() => Math.random() - 0.5);
|
|
43
|
+
}
|
|
44
|
+
const limit = options.limit ?? files.length;
|
|
45
|
+
const verboseAdd = options.verbose ? ['--verbose'] : [];
|
|
46
|
+
const pool = new parallel_1.LimitedThreadPool(`${__dirname}/benchmark-helper-app`, files.map(f => [f.content, '--output', options.output, '--slice', options.slice, ...verboseAdd]), limit, options.parallel);
|
|
47
|
+
await pool.run();
|
|
48
|
+
const stats = pool.getStats();
|
|
49
|
+
console.log(`Benchmarked ${stats.counter} files, skipped ${stats.skipped.length} files due to errors`);
|
|
50
|
+
}
|
|
51
|
+
void benchmark();
|
|
52
|
+
//# sourceMappingURL=benchmark-app.js.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const log_1 = require("../util/log");
|
|
7
|
+
const benchmark_1 = require("../benchmark");
|
|
8
|
+
const slicing_1 = require("../slicing");
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const json_1 = require("../util/json");
|
|
11
|
+
const assert_1 = require("../util/assert");
|
|
12
|
+
const common_1 = require("./common");
|
|
13
|
+
const options = (0, common_1.processCommandLineArgs)('benchmark-helper', [], {
|
|
14
|
+
subtitle: 'Will slice for all possible variables, signal by exit code if slicing was successful, and can be run standalone',
|
|
15
|
+
examples: [
|
|
16
|
+
'{italic example-file.R} --output {italic output.json}',
|
|
17
|
+
'{bold --help}'
|
|
18
|
+
]
|
|
19
|
+
});
|
|
20
|
+
if (options.verbose) {
|
|
21
|
+
log_1.log.error('running with *verbose* setting - do not use for final benchmark', options);
|
|
22
|
+
}
|
|
23
|
+
(0, assert_1.guard)(options.slice === 'all' || options.slice === 'no', 'slice must be either all or no');
|
|
24
|
+
async function benchmark() {
|
|
25
|
+
// we do not use the limit argument to be able to pick the limit randomly
|
|
26
|
+
(0, assert_1.guard)(options.input !== undefined, 'No input file given');
|
|
27
|
+
(0, assert_1.guard)(options.output !== undefined, 'No output file given');
|
|
28
|
+
console.log(`[${options.input}] Appending output to ${options.output}`);
|
|
29
|
+
// ensure the file exists
|
|
30
|
+
const fileStat = fs_1.default.statSync(options.input);
|
|
31
|
+
(0, assert_1.guard)(fileStat.isFile(), `File ${options.input} does not exist or is no file`);
|
|
32
|
+
const request = { request: 'file', content: options.input };
|
|
33
|
+
const slicer = new benchmark_1.BenchmarkSlicer();
|
|
34
|
+
try {
|
|
35
|
+
await slicer.init(request);
|
|
36
|
+
// ${escape}1F${escape}1G${escape}2K for line reset
|
|
37
|
+
if (options.slice === 'all') {
|
|
38
|
+
const count = await slicer.sliceForAll(slicing_1.DefaultAllVariablesFilter, (i, total, arr) => console.log(`[${options.input}] Slicing ${i + 1}/${total} [${JSON.stringify(arr[i])}]`));
|
|
39
|
+
console.log(`[${options.input}] Completed Slicing`);
|
|
40
|
+
(0, assert_1.guard)(count > 0, `No possible slices found for ${options.input}, skipping in count`);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(`[${options.input}] Skipping Slicing due to --slice=${options.slice}`);
|
|
44
|
+
}
|
|
45
|
+
const { stats } = slicer.finish();
|
|
46
|
+
// append line by line
|
|
47
|
+
fs_1.default.appendFileSync(options.output, `${JSON.stringify({ filename: options.input, stats }, json_1.jsonReplacer)}\n`);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
if (e instanceof Error) {
|
|
51
|
+
if (!e.message.includes('unable to parse R')) {
|
|
52
|
+
console.log(`[${options.input}] Non R-Side error : ${e.message}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
slicer.ensureSessionClosed(); // ensure finish
|
|
56
|
+
throw e;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
void benchmark();
|
|
60
|
+
//# sourceMappingURL=benchmark-helper-app.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.retrieveArchiveName = exports.validateFeatures = void 0;
|
|
7
|
+
const statistics_1 = require("../../statistics");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
function validateFeatures(features) {
|
|
10
|
+
for (const feature of features) {
|
|
11
|
+
if (feature === 'all') {
|
|
12
|
+
if (features.length > 1) {
|
|
13
|
+
console.error(`Feature "all" must be the only feature given, got ${features.join(', ')}`);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else if (!statistics_1.allFeatureNames.has(feature)) {
|
|
18
|
+
console.error(`Feature ${feature} is unknown, supported are ${[...statistics_1.allFeatureNames].join(', ')} or "all"`);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return features[0] === 'all' ? statistics_1.allFeatureNames : new Set(features);
|
|
23
|
+
}
|
|
24
|
+
exports.validateFeatures = validateFeatures;
|
|
25
|
+
function retrieveArchiveName(p) {
|
|
26
|
+
const basepath = path_1.default.normalize(p);
|
|
27
|
+
return `${basepath.endsWith(path_1.default.sep) ? basepath.substring(0, basepath.length - 1) : basepath}.tar.gz`;
|
|
28
|
+
}
|
|
29
|
+
exports.retrieveArchiveName = retrieveArchiveName;
|
|
30
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./script"), exports);
|
|
18
|
+
__exportStar(require("./scripts-info"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { OptionDefinition } from 'command-line-usage';
|
|
2
|
+
/**
|
|
3
|
+
* This interface describes options, that every script *must* provide.
|
|
4
|
+
*/
|
|
5
|
+
export interface CommonOptions {
|
|
6
|
+
/** Enables the most verbose logging option available. */
|
|
7
|
+
verbose: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Shows the respective help including usage examples,
|
|
10
|
+
* see {@link processCommandLineArgs} or {@link helpForOptions} for more information.
|
|
11
|
+
*/
|
|
12
|
+
help: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const benchmarkOptions: OptionDefinition[];
|
|
15
|
+
export declare const benchmarkHelperOptions: OptionDefinition[];
|
|
16
|
+
export declare const exportQuadsOptions: OptionDefinition[];
|
|
17
|
+
export declare const slicerOptions: OptionDefinition[];
|
|
18
|
+
export declare const statisticOptions: OptionDefinition[];
|
|
19
|
+
export declare const statisticHelperOptions: OptionDefinition[];
|
|
20
|
+
export declare const summarizerOptions: OptionDefinition[];
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.summarizerOptions = exports.statisticHelperOptions = exports.statisticOptions = exports.slicerOptions = exports.exportQuadsOptions = exports.benchmarkHelperOptions = exports.benchmarkOptions = void 0;
|
|
7
|
+
const os_1 = __importDefault(require("os"));
|
|
8
|
+
const time_1 = require("../../util/time");
|
|
9
|
+
const statistics_1 = require("../../statistics");
|
|
10
|
+
/**
|
|
11
|
+
* This string contains a string representation of the loading time of this module.
|
|
12
|
+
*/
|
|
13
|
+
const StartTimeString = (0, time_1.date2string)(new Date());
|
|
14
|
+
exports.benchmarkOptions = [
|
|
15
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging [do not use for the real benchmark as this affects the time measurements, but only to find errors]' },
|
|
16
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
17
|
+
{ name: 'limit', alias: 'l', type: Number, description: 'Limit the number of files to process (if given, this will choose these files randomly and add the chosen names to the output' },
|
|
18
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass a folder or file as src to read from', multiple: true, defaultOption: true, defaultValue: [], typeLabel: '{underline files/folders}' },
|
|
19
|
+
{ name: 'parallel', alias: 'p', type: String, description: 'Number of parallel executors (defaults to {italic max(cpu.count-1, 1)})', defaultValue: Math.max(os_1.default.cpus().length - 1, 1), typeLabel: '{underline number}' },
|
|
20
|
+
{ name: 'slice', alias: 's', type: String, description: 'Automatically slice for *all* variables (default) or *no* slicing and only parsing/dataflow construction', defaultValue: 'all', typeLabel: '{underline all/no}' },
|
|
21
|
+
{ name: 'output', alias: 'o', type: String, description: `File to write all the measurements to in a per-file-basis (defaults to {italic benchmark-${StartTimeString}.json})`, defaultValue: `benchmark-${StartTimeString}.json`, typeLabel: '{underline file}' }
|
|
22
|
+
];
|
|
23
|
+
exports.benchmarkHelperOptions = [
|
|
24
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging [do not use for the real benchmark as this affects the time measurements, but only to find errors]' },
|
|
25
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
26
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass a single file as src to read from', multiple: false, defaultOption: true, typeLabel: '{underline file}' },
|
|
27
|
+
{ name: 'slice', alias: 's', type: String, description: 'Automatically slice for *all* variables (default) or *no* slicing and only parsing/dataflow construction', defaultValue: 'all', typeLabel: '{underline all/no}' },
|
|
28
|
+
{ name: 'output', alias: 'o', type: String, description: 'File to write the measurements to (appends a single line in JSON format)', typeLabel: '{underline file}' },
|
|
29
|
+
];
|
|
30
|
+
exports.exportQuadsOptions = [
|
|
31
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
32
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
33
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass a folder or file as src to read from', multiple: true, defaultOption: true, defaultValue: [], typeLabel: '{underline files/folders}' },
|
|
34
|
+
{ name: 'limit', alias: 'l', type: Number, description: 'Limit the number of files to process' },
|
|
35
|
+
{ name: 'output', alias: 'o', type: String, description: 'File to write all the generated quads to (defaults to {italic out.quads})', typeLabel: '{underline file}' },
|
|
36
|
+
];
|
|
37
|
+
exports.slicerOptions = [
|
|
38
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
39
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
40
|
+
{ name: 'input', alias: 'i', type: String, description: '(Required) Pass a single file to slice', multiple: false, defaultOption: true, typeLabel: '{underline files}' },
|
|
41
|
+
{ name: 'input-is-text', alias: 'r', type: Boolean, description: 'Indicate, that the input is *not* a file, but R code to directly consume' },
|
|
42
|
+
{ name: 'diff', alias: 'd', type: Boolean, description: 'This requires ansi-output and only works if the api option is not set. It visualizes the slice as a diff.' },
|
|
43
|
+
{ name: 'criterion', alias: 'c', type: String, description: '(Required) Slicing criterion either in the form {underline line:col} or {underline line@variable}, multiple can be separated by \'{bold ;}\'. If you do not want to slice but only process the file, pass an empty string.', multiple: false },
|
|
44
|
+
{ name: 'stats', alias: 's', type: Boolean, description: 'Print stats and write them to {italic <output>.stats} (runtimes etc.)', multiple: false },
|
|
45
|
+
{ name: 'output', alias: 'o', type: String, description: 'File to write all the generated quads to (defaults to the commandline)', typeLabel: '{underline file}' },
|
|
46
|
+
{ name: 'api', type: Boolean, description: 'Instead of human-readable output, dump a lot of json with the results of all intermediate steps.' },
|
|
47
|
+
];
|
|
48
|
+
const featureNameList = [...statistics_1.allFeatureNames].map(s => `"${s}"`).join(', ');
|
|
49
|
+
exports.statisticOptions = [
|
|
50
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
51
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
52
|
+
{ name: 'limit', alias: 'l', type: Number, description: 'Limit the number of files to process' },
|
|
53
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass a folder or file as src to read from', multiple: true, defaultOption: true, defaultValue: [], typeLabel: '{underline files/folders}' },
|
|
54
|
+
{ name: 'output-dir', alias: 'o', type: String, description: 'Folder to write the output to', defaultValue: `${process.cwd()}/statistics-out/${(0, time_1.date2string)(new Date())}`, typeLabel: '{underline folder}' },
|
|
55
|
+
{ name: 'dump-json', type: Boolean, description: 'Write JSON output during the extraction', typeLabel: '{underline folder}' },
|
|
56
|
+
{ name: 'no-ansi', type: Boolean, description: 'Disable ansi-escape-sequences in the output. Useful, if you want to redirect the output to a file.' },
|
|
57
|
+
{ name: 'parallel', alias: 'p', type: String, description: 'Number of parallel executors (defaults to {italic max(cpu.count-1, 1)})', defaultValue: Math.max(os_1.default.cpus().length - 1, 1), typeLabel: '{underline number}' },
|
|
58
|
+
{ name: 'features', type: String, description: `Features to track, supported are "all" or ${featureNameList}`, multiple: true, defaultValue: 'all', typeLabel: '{underline names}' },
|
|
59
|
+
];
|
|
60
|
+
exports.statisticHelperOptions = [
|
|
61
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
62
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
63
|
+
{ name: 'input', alias: 'i', type: String, description: 'Pass single file as src to read from', multiple: false, defaultOption: true, typeLabel: '{underline file}' },
|
|
64
|
+
{ name: 'output-dir', alias: 'o', type: String, description: 'Folder to write the output to', typeLabel: '{underline folder}' },
|
|
65
|
+
{ name: 'root-dir', type: String, description: 'Root dir for the statistics files', defaultValue: '' },
|
|
66
|
+
{ name: 'compress', type: Boolean, description: 'Compress the output folder to a single file', defaultValue: false },
|
|
67
|
+
{ name: 'dump-json', type: Boolean, description: 'Write JSON output during the extraction', typeLabel: '{underline folder}' },
|
|
68
|
+
{ name: 'no-ansi', type: Boolean, description: 'Disable ansi-escape-sequences in the output. Useful, if you want to redirect the output to a file.' },
|
|
69
|
+
{ name: 'features', type: String, description: `Features to track, supported are "all" or ${featureNameList}`, multiple: true, defaultValue: 'all', typeLabel: '{underline names}' },
|
|
70
|
+
];
|
|
71
|
+
exports.summarizerOptions = [
|
|
72
|
+
{ name: 'verbose', alias: 'v', type: Boolean, description: 'Run with verbose logging' },
|
|
73
|
+
{ name: 'help', alias: 'h', type: Boolean, description: 'Print this usage guide' },
|
|
74
|
+
{ name: 'type', alias: 't', type: String, description: 'Manually specify if you want to post-process benchmark results, statistics, or compressed statistics (defaults to auto).', defaultValue: 'auto' },
|
|
75
|
+
{ name: 'graph', alias: 'g', type: Boolean, description: 'Produce data to be used for visualizing benchmarks over time' },
|
|
76
|
+
{ name: 'categorize', type: Boolean, description: 'Categorize the results (e.g., "test", "example", ...)', defaultValue: false },
|
|
77
|
+
{ name: 'project-skip', type: Number, description: 'Skip the first n folders to find the location of projects', defaultValue: 0 },
|
|
78
|
+
{ name: 'ultimate-only', alias: 'u', type: Boolean, description: 'Only perform the second summary-stage, with this, the input is used to find the summary-output.' },
|
|
79
|
+
{ name: 'input', alias: 'i', type: String, description: 'The {italic output} produced by the benchmark, the statistics, ...', defaultOption: true, multiple: false, typeLabel: '{underline file.json/output}' },
|
|
80
|
+
{ name: 'output', alias: 'o', type: String, description: 'Basename of the summaries (defaults to {italic <input>-summary})', typeLabel: '{underline file}' },
|
|
81
|
+
];
|
|
82
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The goal of this module is simply to streamline the creation of new scripts.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { scripts } from './scripts-info';
|
|
7
|
+
import { CommonOptions } from './options';
|
|
8
|
+
/**
|
|
9
|
+
* Just a helping data structure to allow the user to provide example usages of the respective script.
|
|
10
|
+
* The subtitle will be displayed next to the title.
|
|
11
|
+
*/
|
|
12
|
+
export interface HelpContent {
|
|
13
|
+
subtitle: string;
|
|
14
|
+
examples: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Automatically generates a uniform help from a given script (see {@link scripts}).
|
|
18
|
+
* Additionally, you can pass usage examples that may make use of the formatting instructions `{italic x}` and `{bold x}`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function helpForOptions(script: keyof typeof scripts, content: HelpContent): string;
|
|
21
|
+
export declare function processCommandLineArgs<T extends CommonOptions>(script: keyof typeof scripts, requireAdditionally: (keyof T)[], help: HelpContent): T;
|