@grnsft/if 0.0.2
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/.devcontainer/devcontainer.json +38 -0
- package/.editorconfig +8 -0
- package/.env.example +9 -0
- package/.eslintignore +4 -0
- package/.eslintrc.json +8 -0
- package/.github/ISSUE_TEMPLATE/agenda.md +36 -0
- package/.github/ISSUE_TEMPLATE/blank-issue.md +10 -0
- package/.github/ISSUE_TEMPLATE/feedback.md +42 -0
- package/.github/ISSUE_TEMPLATE/model-plugin.md +63 -0
- package/.github/ISSUE_TEMPLATE/user-story.md +10 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +21 -0
- package/.github/workflows/nodejs-ci.yml +34 -0
- package/.gitmodules +3 -0
- package/.prettierrc.js +3 -0
- package/CONTRIBUTING.md +194 -0
- package/LICENSE +21 -0
- package/Makefile +16 -0
- package/README.md +67 -0
- package/build/__mocks__/azure/index.d.ts +11 -0
- package/build/__mocks__/azure/index.js +132 -0
- package/build/__mocks__/boavizta/countries.json +138 -0
- package/build/__mocks__/boavizta/instance_types.json +625 -0
- package/build/__mocks__/boavizta/providers.json +1 -0
- package/build/__mocks__/fs/index.d.ts +3 -0
- package/build/__mocks__/fs/index.js +56 -0
- package/build/__mocks__/model-universe/index.d.ts +33 -0
- package/build/__mocks__/model-universe/index.js +68 -0
- package/build/__mocks__/watt-time/data.json +119 -0
- package/build/__tests__/integration/ompl/index.test.d.ts +1 -0
- package/build/__tests__/integration/ompl/index.test.js +61 -0
- package/build/__tests__/unit/lib/azure-importer/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/azure-importer/index.test.js +152 -0
- package/build/__tests__/unit/lib/boavizta/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/boavizta/index.test.js +579 -0
- package/build/__tests__/unit/lib/case-studies/aveva.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/aveva.test.js +36 -0
- package/build/__tests__/unit/lib/case-studies/emem.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/emem.test.js +108 -0
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.js +53 -0
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.d.ts +1 -0
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.js +23 -0
- package/build/__tests__/unit/lib/ccf/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/ccf/index.test.js +223 -0
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.js +73 -0
- package/build/__tests__/unit/lib/sci/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci/index.test.js +106 -0
- package/build/__tests__/unit/lib/sci-e/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci-e/index.test.js +30 -0
- package/build/__tests__/unit/lib/sci-m/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci-m/index.test.js +58 -0
- package/build/__tests__/unit/lib/sci-o/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/sci-o/index.test.js +42 -0
- package/build/__tests__/unit/lib/shell-imp/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/shell-imp/index.test.js +21 -0
- package/build/__tests__/unit/lib/tdp-finder/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/tdp-finder/index.test.js +62 -0
- package/build/__tests__/unit/lib/teads-aws/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/teads-aws/index.test.js +170 -0
- package/build/__tests__/unit/lib/teads-curve/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/teads-curve/index.test.js +146 -0
- package/build/__tests__/unit/lib/watt-time/index.test.d.ts +1 -0
- package/build/__tests__/unit/lib/watt-time/index.test.js +106 -0
- package/build/__tests__/unit/util/args.test.d.ts +1 -0
- package/build/__tests__/unit/util/args.test.js +92 -0
- package/build/__tests__/unit/util/models-universe.test.d.ts +1 -0
- package/build/__tests__/unit/util/models-universe.test.js +211 -0
- package/build/__tests__/unit/util/observatory.test.d.ts +1 -0
- package/build/__tests__/unit/util/observatory.test.js +91 -0
- package/build/__tests__/unit/util/supercomputer.test.d.ts +1 -0
- package/build/__tests__/unit/util/supercomputer.test.js +231 -0
- package/build/__tests__/unit/util/yaml.test.d.ts +1 -0
- package/build/__tests__/unit/util/yaml.test.js +59 -0
- package/build/config/config.d.ts +32 -0
- package/build/config/config.js +74 -0
- package/build/config/index.d.ts +2 -0
- package/build/config/index.js +8 -0
- package/build/config/strings.d.ts +14 -0
- package/build/config/strings.js +30 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +46 -0
- package/build/lib/azure-importer/index.d.ts +55 -0
- package/build/lib/azure-importer/index.js +314 -0
- package/build/lib/boavizta/index.d.ts +53 -0
- package/build/lib/boavizta/index.js +254 -0
- package/build/lib/case-studies/aveva-model.d.ts +29 -0
- package/build/lib/case-studies/aveva-model.js +53 -0
- package/build/lib/case-studies/emem-model.d.ts +42 -0
- package/build/lib/case-studies/emem-model.js +93 -0
- package/build/lib/case-studies/eshoppen-model.d.ts +24 -0
- package/build/lib/case-studies/eshoppen-model.js +123 -0
- package/build/lib/case-studies/index.d.ts +4 -0
- package/build/lib/case-studies/index.js +21 -0
- package/build/lib/case-studies/sci-accenture-model.d.ts +10 -0
- package/build/lib/case-studies/sci-accenture-model.js +37 -0
- package/build/lib/ccf/aws-embodied.json +5591 -0
- package/build/lib/ccf/aws-instances.json +21116 -0
- package/build/lib/ccf/aws-use.json +79 -0
- package/build/lib/ccf/azure-embodied.json +6547 -0
- package/build/lib/ccf/azure-instances.json +8332 -0
- package/build/lib/ccf/azure-use.json +58 -0
- package/build/lib/ccf/gcp-embodied.json +3049 -0
- package/build/lib/ccf/gcp-instances.json +3880 -0
- package/build/lib/ccf/gcp-use.json +58 -0
- package/build/lib/ccf/index.d.ts +63 -0
- package/build/lib/ccf/index.js +338 -0
- package/build/lib/cloud-instance-metadata/aws-instances.json +1 -0
- package/build/lib/cloud-instance-metadata/azure-instances.json +1 -0
- package/build/lib/cloud-instance-metadata/index.d.ts +15 -0
- package/build/lib/cloud-instance-metadata/index.js +104 -0
- package/build/lib/index.d.ts +15 -0
- package/build/lib/index.js +32 -0
- package/build/lib/interfaces/ccf.d.ts +19 -0
- package/build/lib/interfaces/ccf.js +3 -0
- package/build/lib/interfaces/index.d.ts +7 -0
- package/build/lib/interfaces/index.js +18 -0
- package/build/lib/sci/index.d.ts +13 -0
- package/build/lib/sci/index.js +131 -0
- package/build/lib/sci-e/index.d.ts +38 -0
- package/build/lib/sci-e/index.js +85 -0
- package/build/lib/sci-m/index.d.ts +10 -0
- package/build/lib/sci-m/index.js +124 -0
- package/build/lib/sci-o/index.d.ts +17 -0
- package/build/lib/sci-o/index.js +52 -0
- package/build/lib/shell-imp/index.d.ts +32 -0
- package/build/lib/shell-imp/index.js +82 -0
- package/build/lib/tdp-finder/index.d.ts +19 -0
- package/build/lib/tdp-finder/index.js +98 -0
- package/build/lib/teads-aws/aws-embodied.json +1 -0
- package/build/lib/teads-aws/aws-instances.json +1 -0
- package/build/lib/teads-aws/index.d.ts +58 -0
- package/build/lib/teads-aws/index.js +208 -0
- package/build/lib/teads-curve/index.d.ts +52 -0
- package/build/lib/teads-curve/index.js +158 -0
- package/build/lib/watt-time/index.d.ts +18 -0
- package/build/lib/watt-time/index.js +204 -0
- package/build/types/azure-importer.d.ts +29 -0
- package/build/types/azure-importer.js +3 -0
- package/build/types/boavizta.d.ts +7 -0
- package/build/types/boavizta.js +3 -0
- package/build/types/common.d.ts +7 -0
- package/build/types/common.js +9 -0
- package/build/types/impl.d.ts +40 -0
- package/build/types/impl.js +3 -0
- package/build/types/models-universe.d.ts +24 -0
- package/build/types/models-universe.js +3 -0
- package/build/types/process-args.d.ts +7 -0
- package/build/types/process-args.js +3 -0
- package/build/types/supercomputer.d.ts +4 -0
- package/build/types/supercomputer.js +3 -0
- package/build/util/args.d.ts +8 -0
- package/build/util/args.js +48 -0
- package/build/util/errors.d.ts +6 -0
- package/build/util/errors.js +22 -0
- package/build/util/helpers.d.ts +4 -0
- package/build/util/helpers.js +18 -0
- package/build/util/models-universe.d.ts +28 -0
- package/build/util/models-universe.js +95 -0
- package/build/util/observatory.d.ts +20 -0
- package/build/util/observatory.js +31 -0
- package/build/util/supercomputer.d.ts +30 -0
- package/build/util/supercomputer.js +109 -0
- package/build/util/validations.d.ts +25 -0
- package/build/util/validations.js +52 -0
- package/build/util/yaml.d.ts +13 -0
- package/build/util/yaml.js +36 -0
- package/coverage/clover.xml +1172 -0
- package/coverage/coverage-final.json +27 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/config/config.ts.html +310 -0
- package/coverage/lcov-report/config/index.html +146 -0
- package/coverage/lcov-report/config/index.ts.html +91 -0
- package/coverage/lcov-report/config/strings.ts.html +118 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +341 -0
- package/coverage/lcov-report/lib/boavizta/index.html +116 -0
- package/coverage/lcov-report/lib/boavizta/index.ts.html +1171 -0
- package/coverage/lcov-report/lib/case-studies/aveva-model.ts.html +277 -0
- package/coverage/lcov-report/lib/case-studies/emem-model.ts.html +439 -0
- package/coverage/lcov-report/lib/case-studies/eshoppen-model.ts.html +550 -0
- package/coverage/lcov-report/lib/case-studies/index.html +176 -0
- package/coverage/lcov-report/lib/case-studies/index.ts.html +97 -0
- package/coverage/lcov-report/lib/case-studies/sci-accenture-model.ts.html +232 -0
- package/coverage/lcov-report/lib/ccf/index.html +116 -0
- package/coverage/lcov-report/lib/ccf/index.ts.html +1339 -0
- package/coverage/lcov-report/lib/cloud-instance-metadata/index.html +116 -0
- package/coverage/lcov-report/lib/cloud-instance-metadata/index.ts.html +370 -0
- package/coverage/lcov-report/lib/index.html +116 -0
- package/coverage/lcov-report/lib/index.ts.html +121 -0
- package/coverage/lcov-report/lib/sci/index.html +116 -0
- package/coverage/lcov-report/lib/sci/index.ts.html +571 -0
- package/coverage/lcov-report/lib/sci-e/index.html +116 -0
- package/coverage/lcov-report/lib/sci-e/index.ts.html +403 -0
- package/coverage/lcov-report/lib/sci-m/index.html +116 -0
- package/coverage/lcov-report/lib/sci-m/index.ts.html +487 -0
- package/coverage/lcov-report/lib/sci-o/index.html +116 -0
- package/coverage/lcov-report/lib/sci-o/index.ts.html +265 -0
- package/coverage/lcov-report/lib/shell-imp/index.html +116 -0
- package/coverage/lcov-report/lib/shell-imp/index.ts.html +376 -0
- package/coverage/lcov-report/lib/teads-aws/index.html +116 -0
- package/coverage/lcov-report/lib/teads-aws/index.ts.html +823 -0
- package/coverage/lcov-report/lib/teads-curve/index.html +116 -0
- package/coverage/lcov-report/lib/teads-curve/index.ts.html +625 -0
- package/coverage/lcov-report/lib/watt-time/index.html +116 -0
- package/coverage/lcov-report/lib/watt-time/index.ts.html +829 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov-report/types/common.ts.html +109 -0
- package/coverage/lcov-report/types/index.html +116 -0
- package/coverage/lcov-report/util/args.ts.html +244 -0
- package/coverage/lcov-report/util/index.html +176 -0
- package/coverage/lcov-report/util/models-universe.ts.html +679 -0
- package/coverage/lcov-report/util/observatory.ts.html +229 -0
- package/coverage/lcov-report/util/supercomputer.ts.html +466 -0
- package/coverage/lcov-report/util/yaml.ts.html +193 -0
- package/coverage/lcov.info +2094 -0
- package/docs/implementations/tdp-finder.md +36 -0
- package/examples/impls/case-studies/accenture.yml +155 -0
- package/examples/impls/case-studies/aveva.yaml +48 -0
- package/examples/impls/case-studies/azure-yassine.yaml +67 -0
- package/examples/impls/case-studies/boavizta.yml +26 -0
- package/examples/impls/case-studies/dow_msft.yml +173 -0
- package/examples/impls/case-studies/farm-insights.yaml +35 -0
- package/examples/impls/case-studies/gsf-website.yaml +93 -0
- package/examples/impls/case-studies/msft-eshoppen.yaml +162 -0
- package/examples/impls/case-studies/msft-green-ai.yaml +58 -0
- package/examples/impls/case-studies/ntt-data-on-premise.yaml +201 -0
- package/examples/impls/tdp-finder-test.yml +19 -0
- package/examples/impls/test/azure.yml +26 -0
- package/examples/impls/test/ccf.yml +19 -0
- package/examples/impls/test/complex-pipeline.yml +67 -0
- package/examples/impls/test/if-demo.yml +51 -0
- package/examples/impls/test/metadata.yml +20 -0
- package/examples/impls/test/nesting.yml +65 -0
- package/examples/impls/test/sci-e.yml +21 -0
- package/examples/impls/test/sci-m.yml +24 -0
- package/examples/impls/test/sci-o.yml +28 -0
- package/examples/impls/test/sci.yml +27 -0
- package/examples/impls/test/shell.yml +18 -0
- package/examples/impls/test/toto.yaml +22 -0
- package/examples/ompls/azure.yml +145 -0
- package/examples/ompls/ccf.yml +27 -0
- package/examples/ompls/complex-pipeline.yml +105 -0
- package/examples/ompls/full-sci.yml +64 -0
- package/examples/ompls/if-demo.yml +493 -0
- package/examples/ompls/metadata.yml +29 -0
- package/examples/ompls/nesting.yml +107 -0
- package/examples/ompls/sci-e.yml +23 -0
- package/examples/ompls/sci-m.yml +33 -0
- package/examples/ompls/sci-o.yml +29 -0
- package/examples/ompls/sci.yml +36 -0
- package/examples/ompls/shell.yml +23 -0
- package/jest.config.js +14 -0
- package/package.json +71 -0
- package/scripts/impact-test.sh +12 -0
- package/src/__mocks__/boavizta/countries.json +138 -0
- package/src/__mocks__/boavizta/instance_types.json +625 -0
- package/src/__mocks__/boavizta/providers.json +1 -0
- package/src/__mocks__/watt-time/data.json +119 -0
- package/src/config/units.yaml +125 -0
- package/src/lib/ccf/aws-embodied.json +5591 -0
- package/src/lib/ccf/aws-instances.json +21116 -0
- package/src/lib/ccf/aws-use.json +79 -0
- package/src/lib/ccf/azure-embodied.json +6547 -0
- package/src/lib/ccf/azure-instances.json +8332 -0
- package/src/lib/ccf/azure-use.json +58 -0
- package/src/lib/ccf/gcp-embodied.json +3049 -0
- package/src/lib/ccf/gcp-instances.json +3880 -0
- package/src/lib/ccf/gcp-use.json +58 -0
- package/src/lib/cloud-instance-metadata/aws-instances.json +1 -0
- package/src/lib/cloud-instance-metadata/azure-instances.json +1 -0
- package/src/lib/shell-imp/sampler +30 -0
- package/src/lib/tdp-finder/README.md +7 -0
- package/src/lib/tdp-finder/boavizta_data.csv +1768 -0
- package/src/lib/tdp-finder/data.csv +4460 -0
- package/src/lib/tdp-finder/data2.csv +2162 -0
- package/src/lib/teads-aws/aws-embodied.json +1 -0
- package/src/lib/teads-aws/aws-instances.json +1 -0
- package/tsconfig.test.json +39 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/yarn-error.log +5854 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SciMModel = void 0;
|
|
4
|
+
const config_1 = require("../../config");
|
|
5
|
+
const { MODEL_IDS } = config_1.CONFIG;
|
|
6
|
+
const { SCI_M } = MODEL_IDS;
|
|
7
|
+
class SciMModel {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.authParams = undefined;
|
|
10
|
+
}
|
|
11
|
+
authenticate(authParams) {
|
|
12
|
+
this.authParams = authParams;
|
|
13
|
+
}
|
|
14
|
+
async execute(inputs) {
|
|
15
|
+
if (!Array.isArray(inputs)) {
|
|
16
|
+
throw new Error('inputs should be an array');
|
|
17
|
+
}
|
|
18
|
+
const tunedinputs = inputs.map((input) => {
|
|
19
|
+
// te or total-embodied-emissions: Total embodied emissions of some underlying hardware.
|
|
20
|
+
// tir or time-reserved: The length of time the hardware is reserved for use by the software.
|
|
21
|
+
// el or expected-lifespan: The anticipated time that the equipment will be installed.
|
|
22
|
+
// rr or resources-reserved: The number of resources reserved for use by the software. (e.g. number of vCPUs you are using)
|
|
23
|
+
// tor or total-resources: The total number of resources available (e.g. total number of vCPUs for underlying hardware)
|
|
24
|
+
let te = 0.0;
|
|
25
|
+
let tir = 0.0;
|
|
26
|
+
let el = 0.0;
|
|
27
|
+
let rr = 0.0;
|
|
28
|
+
let tor = 0.0;
|
|
29
|
+
if (!('total-embodied-emissions' in input ||
|
|
30
|
+
'total-embodied-emissions' in input)) {
|
|
31
|
+
throw new Error('total-embodied-emissions is missing. Provide in gCO2e');
|
|
32
|
+
}
|
|
33
|
+
if (!('time-reserved' in input || 'time-reserved' in input)) {
|
|
34
|
+
throw new Error('time-reserved is missing. Provide in seconds');
|
|
35
|
+
}
|
|
36
|
+
if (!('expected-lifespan' in input || 'expected-lifespan' in input)) {
|
|
37
|
+
throw new Error('expected-lifespan is missing. Provide in seconds');
|
|
38
|
+
}
|
|
39
|
+
if (!('resources-reserved' in input || 'resources-reserved' in input)) {
|
|
40
|
+
throw new Error('resources-reserved is missing. Provide as a count');
|
|
41
|
+
}
|
|
42
|
+
if (!('total-resources' in input || 'total-resources' in input)) {
|
|
43
|
+
throw new Error('total-resources: total-resources is missing. Provide as a count');
|
|
44
|
+
}
|
|
45
|
+
if (('total-embodied-emissions' in input ||
|
|
46
|
+
'total-embodied-emissions' in input) &&
|
|
47
|
+
('time-reserved' in input || 'time-reserved' in input) &&
|
|
48
|
+
('expected-lifespan' in input || 'expected-lifespan') &&
|
|
49
|
+
('resources-reserved' in input || 'resources-reserved') &&
|
|
50
|
+
('total-resources' in input || 'total-resources' in input)) {
|
|
51
|
+
input['total-embodied-emissions'] =
|
|
52
|
+
input['total-embodied-emissions'] ??
|
|
53
|
+
input['total-embodied-emissions'];
|
|
54
|
+
input['time-reserved'] =
|
|
55
|
+
input['time-reserved'] ?? input['time-reserved'];
|
|
56
|
+
input['expected-lifespan'] =
|
|
57
|
+
input['expected-lifespan'] ?? input['expected-lifespan'];
|
|
58
|
+
input['resources-reserved'] =
|
|
59
|
+
input['resources-reserved'] ?? input['resources-reserved'];
|
|
60
|
+
input['total-resources'] =
|
|
61
|
+
input['total-resources'] ?? input['total-resources'];
|
|
62
|
+
if (typeof input['total-embodied-emissions'] === 'string') {
|
|
63
|
+
te = parseFloat(input[input['total-embodied-emissions']]);
|
|
64
|
+
}
|
|
65
|
+
else if (typeof input['total-embodied-emissions'] === 'number') {
|
|
66
|
+
te = input['total-embodied-emissions'];
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
te = parseFloat(input['total-embodied-emissions']);
|
|
70
|
+
}
|
|
71
|
+
if (typeof input['time-reserved'] === 'string') {
|
|
72
|
+
tir = parseFloat(input[input['time-reserved']]);
|
|
73
|
+
}
|
|
74
|
+
else if (typeof input['time-reserved'] === 'number') {
|
|
75
|
+
tir = input['time-reserved'];
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
tir = parseFloat(input['time-reserved']);
|
|
79
|
+
}
|
|
80
|
+
if (typeof input['expected-lifespan'] === 'string') {
|
|
81
|
+
el = parseFloat(input[input['expected-lifespan']]);
|
|
82
|
+
}
|
|
83
|
+
else if (typeof input['expected-lifespan'] === 'number') {
|
|
84
|
+
el = input['expected-lifespan'];
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
el = parseFloat(input['expected-lifespan']);
|
|
88
|
+
}
|
|
89
|
+
if (typeof input['resources-reserved'] === 'string') {
|
|
90
|
+
rr = parseFloat(input[input['resources-reserved']]);
|
|
91
|
+
}
|
|
92
|
+
else if (typeof input['resources-reserved'] === 'number') {
|
|
93
|
+
rr = input['resources-reserved'];
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
rr = parseFloat(input['resources-reserved']);
|
|
97
|
+
}
|
|
98
|
+
if (typeof input['total-resources'] === 'string') {
|
|
99
|
+
tor = parseFloat(input[input['total-resources']]);
|
|
100
|
+
}
|
|
101
|
+
else if (typeof input['total-resources'] === 'number') {
|
|
102
|
+
tor = input['total-resources'];
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
tor = parseFloat(input['total-resources']);
|
|
106
|
+
}
|
|
107
|
+
// M = TE * (TiR/EL) * (RR/ToR)
|
|
108
|
+
input['embodied-carbon'] = te * (tir / el) * (rr / tor);
|
|
109
|
+
}
|
|
110
|
+
return input;
|
|
111
|
+
});
|
|
112
|
+
return tunedinputs;
|
|
113
|
+
}
|
|
114
|
+
async configure(name, staticParams) {
|
|
115
|
+
this.staticParams = staticParams;
|
|
116
|
+
this.name = name;
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
modelIdentifier() {
|
|
120
|
+
return SCI_M;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.SciMModel = SciMModel;
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3NjaS1tL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHlDQUFvQztBQUlwQyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBQzNCLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxTQUFTLENBQUM7QUFFMUIsTUFBYSxTQUFTO0lBQXRCO1FBQ0UsZUFBVSxHQUF1QixTQUFTLENBQUM7SUEySDdDLENBQUM7SUF2SEMsWUFBWSxDQUFDLFVBQWtCO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQXFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM5QztRQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDckQsd0ZBQXdGO1lBQ3hGLDZGQUE2RjtZQUM3RixzRkFBc0Y7WUFDdEYsMkhBQTJIO1lBQzNILHVIQUF1SDtZQUN2SCxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDYixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDZCxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDYixJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDYixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDZCxJQUNFLENBQUMsQ0FDQywwQkFBMEIsSUFBSSxLQUFLO2dCQUNuQywwQkFBMEIsSUFBSSxLQUFLLENBQ3BDLEVBQ0Q7Z0JBQ0EsTUFBTSxJQUFJLEtBQUssQ0FDYix1REFBdUQsQ0FDeEQsQ0FBQzthQUNIO1lBQ0QsSUFBSSxDQUFDLENBQUMsZUFBZSxJQUFJLEtBQUssSUFBSSxlQUFlLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQzthQUNqRTtZQUNELElBQUksQ0FBQyxDQUFDLG1CQUFtQixJQUFJLEtBQUssSUFBSSxtQkFBbUIsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDbkUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO2FBQ3JFO1lBQ0QsSUFBSSxDQUFDLENBQUMsb0JBQW9CLElBQUksS0FBSyxJQUFJLG9CQUFvQixJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUNyRSxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7YUFDdEU7WUFDRCxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLElBQUksaUJBQWlCLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQy9ELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLENBQ2xFLENBQUM7YUFDSDtZQUNELElBQ0UsQ0FBQywwQkFBMEIsSUFBSSxLQUFLO2dCQUNsQywwQkFBMEIsSUFBSSxLQUFLLENBQUM7Z0JBQ3RDLENBQUMsZUFBZSxJQUFJLEtBQUssSUFBSSxlQUFlLElBQUksS0FBSyxDQUFDO2dCQUN0RCxDQUFDLG1CQUFtQixJQUFJLEtBQUssSUFBSSxtQkFBbUIsQ0FBQztnQkFDckQsQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLElBQUksb0JBQW9CLENBQUM7Z0JBQ3ZELENBQUMsaUJBQWlCLElBQUksS0FBSyxJQUFJLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxFQUMxRDtnQkFDQSxLQUFLLENBQUMsMEJBQTBCLENBQUM7b0JBQy9CLEtBQUssQ0FBQywwQkFBMEIsQ0FBQzt3QkFDakMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBQ3BDLEtBQUssQ0FBQyxlQUFlLENBQUM7b0JBQ3BCLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ25ELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztvQkFDeEIsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzNELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztvQkFDekIsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQzdELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztvQkFDdEIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3ZELElBQUksT0FBTyxLQUFLLENBQUMsMEJBQTBCLENBQUMsS0FBSyxRQUFRLEVBQUU7b0JBQ3pELEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0Q7cUJBQU0sSUFBSSxPQUFPLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDaEUsRUFBRSxHQUFHLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2lCQUN4QztxQkFBTTtvQkFDTCxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7aUJBQ3BEO2dCQUNELElBQUksT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUM5QyxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDtxQkFBTSxJQUFJLE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDckQsR0FBRyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDOUI7cUJBQU07b0JBQ0wsR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztpQkFDMUM7Z0JBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDbEQsRUFBRSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNwRDtxQkFBTSxJQUFJLE9BQU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQUssUUFBUSxFQUFFO29CQUN6RCxFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7aUJBQ2pDO3FCQUFNO29CQUNMLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztpQkFDN0M7Z0JBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDbkQsRUFBRSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyRDtxQkFBTSxJQUFJLE9BQU8sS0FBSyxDQUFDLG9CQUFvQixDQUFDLEtBQUssUUFBUSxFQUFFO29CQUMxRCxFQUFFLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7aUJBQ2xDO3FCQUFNO29CQUNMLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztpQkFDOUM7Z0JBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLFFBQVEsRUFBRTtvQkFDaEQsR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuRDtxQkFBTSxJQUFJLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssUUFBUSxFQUFFO29CQUN2RCxHQUFHLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNMLEdBQUcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztpQkFDNUM7Z0JBQ0QsK0JBQStCO2dCQUMvQixLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDekQ7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQ2IsSUFBWSxFQUNaLFlBQWdDO1FBRWhDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQTVIRCw4QkE0SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lPdXRwdXRNb2RlbEludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7Q09ORklHfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5pbXBvcnQge0tleVZhbHVlUGFpcn0gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uJztcblxuY29uc3Qge01PREVMX0lEU30gPSBDT05GSUc7XG5jb25zdCB7U0NJX019ID0gTU9ERUxfSURTO1xuXG5leHBvcnQgY2xhc3MgU2NpTU1vZGVsIGltcGxlbWVudHMgSU91dHB1dE1vZGVsSW50ZXJmYWNlIHtcbiAgYXV0aFBhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBzdGF0aWNQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZDtcbiAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGF1dGhlbnRpY2F0ZShhdXRoUGFyYW1zOiBvYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhQYXJhbXMgPSBhdXRoUGFyYW1zO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZShpbnB1dHM6IG9iamVjdCB8IG9iamVjdFtdIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0cyBzaG91bGQgYmUgYW4gYXJyYXknKTtcbiAgICB9XG5cbiAgICBjb25zdCB0dW5lZGlucHV0cyA9IGlucHV0cy5tYXAoKGlucHV0OiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIC8vIHRlIG9yIHRvdGFsLWVtYm9kaWVkLWVtaXNzaW9uczogVG90YWwgZW1ib2RpZWQgZW1pc3Npb25zIG9mIHNvbWUgdW5kZXJseWluZyBoYXJkd2FyZS5cbiAgICAgIC8vIHRpciBvciB0aW1lLXJlc2VydmVkOiBUaGUgbGVuZ3RoIG9mIHRpbWUgdGhlIGhhcmR3YXJlIGlzIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIHNvZnR3YXJlLlxuICAgICAgLy8gZWwgb3IgZXhwZWN0ZWQtbGlmZXNwYW46IFRoZSBhbnRpY2lwYXRlZCB0aW1lIHRoYXQgdGhlIGVxdWlwbWVudCB3aWxsIGJlIGluc3RhbGxlZC5cbiAgICAgIC8vIHJyIG9yIHJlc291cmNlcy1yZXNlcnZlZDogVGhlIG51bWJlciBvZiByZXNvdXJjZXMgcmVzZXJ2ZWQgZm9yIHVzZSBieSB0aGUgc29mdHdhcmUuIChlLmcuIG51bWJlciBvZiB2Q1BVcyB5b3UgYXJlIHVzaW5nKVxuICAgICAgLy8gdG9yIG9yIHRvdGFsLXJlc291cmNlczogVGhlIHRvdGFsIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIChlLmcuIHRvdGFsIG51bWJlciBvZiB2Q1BVcyBmb3IgdW5kZXJseWluZyBoYXJkd2FyZSlcbiAgICAgIGxldCB0ZSA9IDAuMDtcbiAgICAgIGxldCB0aXIgPSAwLjA7XG4gICAgICBsZXQgZWwgPSAwLjA7XG4gICAgICBsZXQgcnIgPSAwLjA7XG4gICAgICBsZXQgdG9yID0gMC4wO1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgICd0b3RhbC1lbWJvZGllZC1lbWlzc2lvbnMnIGluIGlucHV0IHx8XG4gICAgICAgICAgJ3RvdGFsLWVtYm9kaWVkLWVtaXNzaW9ucycgaW4gaW5wdXRcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAndG90YWwtZW1ib2RpZWQtZW1pc3Npb25zIGlzIG1pc3NpbmcuIFByb3ZpZGUgaW4gZ0NPMmUnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoISgndGltZS1yZXNlcnZlZCcgaW4gaW5wdXQgfHwgJ3RpbWUtcmVzZXJ2ZWQnIGluIGlucHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWUtcmVzZXJ2ZWQgaXMgbWlzc2luZy4gUHJvdmlkZSBpbiBzZWNvbmRzJyk7XG4gICAgICB9XG4gICAgICBpZiAoISgnZXhwZWN0ZWQtbGlmZXNwYW4nIGluIGlucHV0IHx8ICdleHBlY3RlZC1saWZlc3BhbicgaW4gaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQtbGlmZXNwYW4gaXMgbWlzc2luZy4gUHJvdmlkZSBpbiBzZWNvbmRzJyk7XG4gICAgICB9XG4gICAgICBpZiAoISgncmVzb3VyY2VzLXJlc2VydmVkJyBpbiBpbnB1dCB8fCAncmVzb3VyY2VzLXJlc2VydmVkJyBpbiBpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvdXJjZXMtcmVzZXJ2ZWQgaXMgbWlzc2luZy4gUHJvdmlkZSBhcyBhIGNvdW50Jyk7XG4gICAgICB9XG4gICAgICBpZiAoISgndG90YWwtcmVzb3VyY2VzJyBpbiBpbnB1dCB8fCAndG90YWwtcmVzb3VyY2VzJyBpbiBpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICd0b3RhbC1yZXNvdXJjZXM6IHRvdGFsLXJlc291cmNlcyBpcyBtaXNzaW5nLiBQcm92aWRlIGFzIGEgY291bnQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgICgndG90YWwtZW1ib2RpZWQtZW1pc3Npb25zJyBpbiBpbnB1dCB8fFxuICAgICAgICAgICd0b3RhbC1lbWJvZGllZC1lbWlzc2lvbnMnIGluIGlucHV0KSAmJlxuICAgICAgICAoJ3RpbWUtcmVzZXJ2ZWQnIGluIGlucHV0IHx8ICd0aW1lLXJlc2VydmVkJyBpbiBpbnB1dCkgJiZcbiAgICAgICAgKCdleHBlY3RlZC1saWZlc3BhbicgaW4gaW5wdXQgfHwgJ2V4cGVjdGVkLWxpZmVzcGFuJykgJiZcbiAgICAgICAgKCdyZXNvdXJjZXMtcmVzZXJ2ZWQnIGluIGlucHV0IHx8ICdyZXNvdXJjZXMtcmVzZXJ2ZWQnKSAmJlxuICAgICAgICAoJ3RvdGFsLXJlc291cmNlcycgaW4gaW5wdXQgfHwgJ3RvdGFsLXJlc291cmNlcycgaW4gaW5wdXQpXG4gICAgICApIHtcbiAgICAgICAgaW5wdXRbJ3RvdGFsLWVtYm9kaWVkLWVtaXNzaW9ucyddID1cbiAgICAgICAgICBpbnB1dFsndG90YWwtZW1ib2RpZWQtZW1pc3Npb25zJ10gPz9cbiAgICAgICAgICBpbnB1dFsndG90YWwtZW1ib2RpZWQtZW1pc3Npb25zJ107XG4gICAgICAgIGlucHV0Wyd0aW1lLXJlc2VydmVkJ10gPVxuICAgICAgICAgIGlucHV0Wyd0aW1lLXJlc2VydmVkJ10gPz8gaW5wdXRbJ3RpbWUtcmVzZXJ2ZWQnXTtcbiAgICAgICAgaW5wdXRbJ2V4cGVjdGVkLWxpZmVzcGFuJ10gPVxuICAgICAgICAgIGlucHV0WydleHBlY3RlZC1saWZlc3BhbiddID8/IGlucHV0WydleHBlY3RlZC1saWZlc3BhbiddO1xuICAgICAgICBpbnB1dFsncmVzb3VyY2VzLXJlc2VydmVkJ10gPVxuICAgICAgICAgIGlucHV0WydyZXNvdXJjZXMtcmVzZXJ2ZWQnXSA/PyBpbnB1dFsncmVzb3VyY2VzLXJlc2VydmVkJ107XG4gICAgICAgIGlucHV0Wyd0b3RhbC1yZXNvdXJjZXMnXSA9XG4gICAgICAgICAgaW5wdXRbJ3RvdGFsLXJlc291cmNlcyddID8/IGlucHV0Wyd0b3RhbC1yZXNvdXJjZXMnXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFsndG90YWwtZW1ib2RpZWQtZW1pc3Npb25zJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGUgPSBwYXJzZUZsb2F0KGlucHV0W2lucHV0Wyd0b3RhbC1lbWJvZGllZC1lbWlzc2lvbnMnXV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dFsndG90YWwtZW1ib2RpZWQtZW1pc3Npb25zJ10gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGUgPSBpbnB1dFsndG90YWwtZW1ib2RpZWQtZW1pc3Npb25zJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGUgPSBwYXJzZUZsb2F0KGlucHV0Wyd0b3RhbC1lbWJvZGllZC1lbWlzc2lvbnMnXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFsndGltZS1yZXNlcnZlZCddID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRpciA9IHBhcnNlRmxvYXQoaW5wdXRbaW5wdXRbJ3RpbWUtcmVzZXJ2ZWQnXV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dFsndGltZS1yZXNlcnZlZCddID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRpciA9IGlucHV0Wyd0aW1lLXJlc2VydmVkJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGlyID0gcGFyc2VGbG9hdChpbnB1dFsndGltZS1yZXNlcnZlZCddKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGlucHV0WydleHBlY3RlZC1saWZlc3BhbiddID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGVsID0gcGFyc2VGbG9hdChpbnB1dFtpbnB1dFsnZXhwZWN0ZWQtbGlmZXNwYW4nXV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dFsnZXhwZWN0ZWQtbGlmZXNwYW4nXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBlbCA9IGlucHV0WydleHBlY3RlZC1saWZlc3BhbiddO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsID0gcGFyc2VGbG9hdChpbnB1dFsnZXhwZWN0ZWQtbGlmZXNwYW4nXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFsncmVzb3VyY2VzLXJlc2VydmVkJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcnIgPSBwYXJzZUZsb2F0KGlucHV0W2lucHV0WydyZXNvdXJjZXMtcmVzZXJ2ZWQnXV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dFsncmVzb3VyY2VzLXJlc2VydmVkJ10gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcnIgPSBpbnB1dFsncmVzb3VyY2VzLXJlc2VydmVkJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnIgPSBwYXJzZUZsb2F0KGlucHV0WydyZXNvdXJjZXMtcmVzZXJ2ZWQnXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFsndG90YWwtcmVzb3VyY2VzJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdG9yID0gcGFyc2VGbG9hdChpbnB1dFtpbnB1dFsndG90YWwtcmVzb3VyY2VzJ11dKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXRbJ3RvdGFsLXJlc291cmNlcyddID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRvciA9IGlucHV0Wyd0b3RhbC1yZXNvdXJjZXMnXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3IgPSBwYXJzZUZsb2F0KGlucHV0Wyd0b3RhbC1yZXNvdXJjZXMnXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTSA9IFRFICogKFRpUi9FTCkgKiAoUlIvVG9SKVxuICAgICAgICBpbnB1dFsnZW1ib2RpZWQtY2FyYm9uJ10gPSB0ZSAqICh0aXIgLyBlbCkgKiAocnIgLyB0b3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR1bmVkaW5wdXRzO1xuICB9XG5cbiAgYXN5bmMgY29uZmlndXJlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzdGF0aWNQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPElPdXRwdXRNb2RlbEludGVyZmFjZT4ge1xuICAgIHRoaXMuc3RhdGljUGFyYW1zID0gc3RhdGljUGFyYW1zO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtb2RlbElkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0NJX007XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
+
export declare class SciOModel implements IOutputModelInterface {
|
|
3
|
+
authParams: object | undefined;
|
|
4
|
+
staticParams: object | undefined;
|
|
5
|
+
name: string | undefined;
|
|
6
|
+
authenticate(authParams: object): void;
|
|
7
|
+
/**
|
|
8
|
+
* Calculate the total emissions for a list of inputs.
|
|
9
|
+
*
|
|
10
|
+
* Each input require:
|
|
11
|
+
* @param {Object[]} inputs
|
|
12
|
+
* @param {string} inputs[].timestamp RFC3339 timestamp string
|
|
13
|
+
*/
|
|
14
|
+
execute(inputs: object | object[] | undefined): Promise<any[]>;
|
|
15
|
+
configure(name: string, staticParams: object | undefined): Promise<IOutputModelInterface>;
|
|
16
|
+
modelIdentifier(): string;
|
|
17
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SciOModel = void 0;
|
|
4
|
+
const config_1 = require("../../config");
|
|
5
|
+
const { MODEL_IDS } = config_1.CONFIG;
|
|
6
|
+
const { SCI_O } = MODEL_IDS;
|
|
7
|
+
class SciOModel {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.authParams = undefined;
|
|
10
|
+
}
|
|
11
|
+
authenticate(authParams) {
|
|
12
|
+
this.authParams = authParams;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Calculate the total emissions for a list of inputs.
|
|
16
|
+
*
|
|
17
|
+
* Each input require:
|
|
18
|
+
* @param {Object[]} inputs
|
|
19
|
+
* @param {string} inputs[].timestamp RFC3339 timestamp string
|
|
20
|
+
*/
|
|
21
|
+
async execute(inputs) {
|
|
22
|
+
if (inputs === undefined) {
|
|
23
|
+
throw new Error('Required Parameters not provided');
|
|
24
|
+
}
|
|
25
|
+
else if (!Array.isArray(inputs)) {
|
|
26
|
+
throw new Error('inputs must be an array');
|
|
27
|
+
}
|
|
28
|
+
return inputs.map((input) => {
|
|
29
|
+
if (!('grid-carbon-intensity' in input)) {
|
|
30
|
+
throw new Error('input missing `grid-carbon-intensity`');
|
|
31
|
+
}
|
|
32
|
+
if (!('energy' in input)) {
|
|
33
|
+
throw new Error('input missing `energy`');
|
|
34
|
+
}
|
|
35
|
+
this.configure(this.name, input);
|
|
36
|
+
const grid_ci = parseFloat(input['grid-carbon-intensity']);
|
|
37
|
+
const energy = parseFloat(input['energy']);
|
|
38
|
+
input['operational-carbon'] = grid_ci * energy;
|
|
39
|
+
return input;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async configure(name, staticParams) {
|
|
43
|
+
this.staticParams = staticParams;
|
|
44
|
+
this.name = name;
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
modelIdentifier() {
|
|
48
|
+
return SCI_O;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.SciOModel = SciOModel;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3NjaS1vL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHlDQUFvQztBQUlwQyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBQzNCLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxTQUFTLENBQUM7QUFFMUIsTUFBYSxTQUFTO0lBQXRCO1FBQ0UsZUFBVSxHQUF1QixTQUFTLENBQUM7SUFpRDdDLENBQUM7SUE3Q0MsWUFBWSxDQUFDLFVBQWtCO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQXFDO1FBQ2pELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7U0FDckQ7YUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLENBQUMsdUJBQXVCLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQzthQUMxRDtZQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMzQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQy9DLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FDYixJQUFZLEVBQ1osWUFBZ0M7UUFFaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBbERELDhCQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SU91dHB1dE1vZGVsSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHtDT05GSUd9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7S2V5VmFsdWVQYWlyfSBmcm9tICcuLi8uLi90eXBlcy9jb21tb24nO1xuXG5jb25zdCB7TU9ERUxfSURTfSA9IENPTkZJRztcbmNvbnN0IHtTQ0lfT30gPSBNT0RFTF9JRFM7XG5cbmV4cG9ydCBjbGFzcyBTY2lPTW9kZWwgaW1wbGVtZW50cyBJT3V0cHV0TW9kZWxJbnRlcmZhY2Uge1xuICBhdXRoUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIHN0YXRpY1BhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkO1xuICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgYXV0aGVudGljYXRlKGF1dGhQYXJhbXM6IG9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuYXV0aFBhcmFtcyA9IGF1dGhQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBlbWlzc2lvbnMgZm9yIGEgbGlzdCBvZiBpbnB1dHMuXG4gICAqXG4gICAqIEVhY2ggaW5wdXQgcmVxdWlyZTpcbiAgICogQHBhcmFtIHtPYmplY3RbXX0gaW5wdXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dHNbXS50aW1lc3RhbXAgUkZDMzMzOSB0aW1lc3RhbXAgc3RyaW5nXG4gICAqL1xuICBhc3luYyBleGVjdXRlKGlucHV0czogb2JqZWN0IHwgb2JqZWN0W10gfCB1bmRlZmluZWQpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKGlucHV0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIFBhcmFtZXRlcnMgbm90IHByb3ZpZGVkJyk7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShpbnB1dHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0cy5tYXAoKGlucHV0OiBLZXlWYWx1ZVBhaXIpID0+IHtcbiAgICAgIGlmICghKCdncmlkLWNhcmJvbi1pbnRlbnNpdHknIGluIGlucHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IG1pc3NpbmcgYGdyaWQtY2FyYm9uLWludGVuc2l0eWAnKTtcbiAgICAgIH1cbiAgICAgIGlmICghKCdlbmVyZ3knIGluIGlucHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IG1pc3NpbmcgYGVuZXJneWAnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlndXJlKHRoaXMubmFtZSEsIGlucHV0KTtcbiAgICAgIGNvbnN0IGdyaWRfY2kgPSBwYXJzZUZsb2F0KGlucHV0WydncmlkLWNhcmJvbi1pbnRlbnNpdHknXSk7XG4gICAgICBjb25zdCBlbmVyZ3kgPSBwYXJzZUZsb2F0KGlucHV0WydlbmVyZ3knXSk7XG4gICAgICBpbnB1dFsnb3BlcmF0aW9uYWwtY2FyYm9uJ10gPSBncmlkX2NpICogZW5lcmd5O1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29uZmlndXJlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzdGF0aWNQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPElPdXRwdXRNb2RlbEludGVyZmFjZT4ge1xuICAgIHRoaXMuc3RhdGljUGFyYW1zID0gc3RhdGljUGFyYW1zO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtb2RlbElkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0NJX087XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
+
export declare class ShellModel implements IOutputModelInterface {
|
|
3
|
+
authParams: object | undefined;
|
|
4
|
+
name: string | undefined;
|
|
5
|
+
staticParams: object | undefined;
|
|
6
|
+
executable: string;
|
|
7
|
+
/**
|
|
8
|
+
* Defined for compatibility. Not used.
|
|
9
|
+
*/
|
|
10
|
+
authenticate(authParams: object): void;
|
|
11
|
+
/**
|
|
12
|
+
* Configures the Plugin for IEF
|
|
13
|
+
* @param {Object} staticParams static parameters for the resource
|
|
14
|
+
*/
|
|
15
|
+
configure(name: string, staticParams?: object | undefined): Promise<IOutputModelInterface>;
|
|
16
|
+
execute(inputs: object | object[] | undefined): Promise<any[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Returns model identifier
|
|
19
|
+
*/
|
|
20
|
+
modelIdentifier(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Runs the model in a shell. Spawns a child process to run an external IMP,
|
|
23
|
+
* expects `execPath` to be a path to an executable with a CLI exposing two methods: `--execute` and `--impl`.
|
|
24
|
+
* The shell command then calls the `--command` method passing var impl as the path to the desired impl file.
|
|
25
|
+
* @param input Yaml string (impl minus top level config).
|
|
26
|
+
* @param {string} execPath Path to executable.
|
|
27
|
+
* @param {string} omplName Savename for ompl file.
|
|
28
|
+
* @returns - ompl data to stdout
|
|
29
|
+
* - ompl data to disk as omplName.yaml
|
|
30
|
+
*/
|
|
31
|
+
private runModelInShell;
|
|
32
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ShellModel = void 0;
|
|
4
|
+
const cp = require("child_process");
|
|
5
|
+
const yaml = require("js-yaml");
|
|
6
|
+
const config_1 = require("../../config");
|
|
7
|
+
const { MODEL_IDS } = config_1.CONFIG;
|
|
8
|
+
const { SHELL_MODEL } = MODEL_IDS;
|
|
9
|
+
class ShellModel {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.executable = '';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Defined for compatibility. Not used.
|
|
15
|
+
*/
|
|
16
|
+
authenticate(authParams) {
|
|
17
|
+
this.authParams = authParams;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Configures the Plugin for IEF
|
|
21
|
+
* @param {Object} staticParams static parameters for the resource
|
|
22
|
+
*/
|
|
23
|
+
async configure(name, staticParams = undefined) {
|
|
24
|
+
this.name = name;
|
|
25
|
+
if (staticParams === undefined) {
|
|
26
|
+
throw new Error('Required staticParams not provided');
|
|
27
|
+
}
|
|
28
|
+
if ('executable' in staticParams) {
|
|
29
|
+
this.executable = staticParams['executable'];
|
|
30
|
+
delete staticParams['executable'];
|
|
31
|
+
}
|
|
32
|
+
this.staticParams = staticParams;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
async execute(inputs) {
|
|
36
|
+
if (inputs === undefined) {
|
|
37
|
+
throw new Error('Required Parameters not provided');
|
|
38
|
+
}
|
|
39
|
+
const input = {};
|
|
40
|
+
input['inputs'] = inputs;
|
|
41
|
+
if (this.staticParams !== undefined) {
|
|
42
|
+
input['config'] = this.staticParams;
|
|
43
|
+
}
|
|
44
|
+
const inputAsString = yaml.dump(input);
|
|
45
|
+
const results = this.runModelInShell(inputAsString, this.executable);
|
|
46
|
+
return results['outputs'];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns model identifier
|
|
50
|
+
*/
|
|
51
|
+
modelIdentifier() {
|
|
52
|
+
return SHELL_MODEL;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Runs the model in a shell. Spawns a child process to run an external IMP,
|
|
56
|
+
* expects `execPath` to be a path to an executable with a CLI exposing two methods: `--execute` and `--impl`.
|
|
57
|
+
* The shell command then calls the `--command` method passing var impl as the path to the desired impl file.
|
|
58
|
+
* @param input Yaml string (impl minus top level config).
|
|
59
|
+
* @param {string} execPath Path to executable.
|
|
60
|
+
* @param {string} omplName Savename for ompl file.
|
|
61
|
+
* @returns - ompl data to stdout
|
|
62
|
+
* - ompl data to disk as omplName.yaml
|
|
63
|
+
*/
|
|
64
|
+
runModelInShell(input, execPath) {
|
|
65
|
+
try {
|
|
66
|
+
const execs = execPath.split(' ');
|
|
67
|
+
const executable = execs.shift() ?? '';
|
|
68
|
+
const result = cp
|
|
69
|
+
.spawnSync(executable, [...execs, '--execute'], {
|
|
70
|
+
input: input,
|
|
71
|
+
encoding: 'utf8',
|
|
72
|
+
})
|
|
73
|
+
.stdout.toString();
|
|
74
|
+
return yaml.load(result);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
throw new Error(e.message);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.ShellModel = ShellModel;
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3NoZWxsLWltcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvQ0FBb0M7QUFDcEMsZ0NBQWdDO0FBSWhDLHlDQUFvQztBQUlwQyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsZUFBTSxDQUFDO0FBQzNCLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxTQUFTLENBQUM7QUFFaEMsTUFBYSxVQUFVO0lBQXZCO1FBSUUsZUFBVSxHQUFHLEVBQUUsQ0FBQztJQWdGbEIsQ0FBQztJQTlFQzs7T0FFRztJQUNILFlBQVksQ0FBQyxVQUFrQjtRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FDYixJQUFZLEVBQ1osZUFBbUMsU0FBUztRQUU1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxZQUFZLElBQUksWUFBWSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBVyxDQUFDO1lBQ3ZELE9BQU8sWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFxQztRQUNqRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsTUFBTSxLQUFLLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDbkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDckM7UUFFRCxNQUFNLGFBQWEsR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyRSxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNLLGVBQWUsQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDckQsSUFBSTtZQUNGLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUV2QyxNQUFNLE1BQU0sR0FBRyxFQUFFO2lCQUNkLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRTtnQkFDOUMsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osUUFBUSxFQUFFLE1BQU07YUFDakIsQ0FBQztpQkFDRCxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBaUIsQ0FBQztTQUMxQztRQUFDLE9BQU8sQ0FBTSxFQUFFO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0NBQ0Y7QUFwRkQsZ0NBb0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuXG5pbXBvcnQge0lPdXRwdXRNb2RlbEludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7Q09ORklHfSBmcm9tICcuLi8uLi9jb25maWcnO1xuXG5pbXBvcnQge0tleVZhbHVlUGFpcn0gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uJztcblxuY29uc3Qge01PREVMX0lEU30gPSBDT05GSUc7XG5jb25zdCB7U0hFTExfTU9ERUx9ID0gTU9ERUxfSURTO1xuXG5leHBvcnQgY2xhc3MgU2hlbGxNb2RlbCBpbXBsZW1lbnRzIElPdXRwdXRNb2RlbEludGVyZmFjZSB7XG4gIGF1dGhQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZDsgLy8gRGVmaW5lZCBmb3IgY29tcGF0aWJpbGl0eS4gTm90IHVzZWQuXG4gIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy8gVGhlIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlLlxuICBzdGF0aWNQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZDtcbiAgZXhlY3V0YWJsZSA9ICcnO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVkIGZvciBjb21wYXRpYmlsaXR5LiBOb3QgdXNlZC5cbiAgICovXG4gIGF1dGhlbnRpY2F0ZShhdXRoUGFyYW1zOiBvYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhQYXJhbXMgPSBhdXRoUGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgdGhlIFBsdWdpbiBmb3IgSUVGXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0aWNQYXJhbXMgc3RhdGljIHBhcmFtZXRlcnMgZm9yIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgYXN5bmMgY29uZmlndXJlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBzdGF0aWNQYXJhbXM6IG9iamVjdCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPElPdXRwdXRNb2RlbEludGVyZmFjZT4ge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgaWYgKHN0YXRpY1BhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHN0YXRpY1BhcmFtcyBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgaWYgKCdleGVjdXRhYmxlJyBpbiBzdGF0aWNQYXJhbXMpIHtcbiAgICAgIHRoaXMuZXhlY3V0YWJsZSA9IHN0YXRpY1BhcmFtc1snZXhlY3V0YWJsZSddIGFzIHN0cmluZztcbiAgICAgIGRlbGV0ZSBzdGF0aWNQYXJhbXNbJ2V4ZWN1dGFibGUnXTtcbiAgICB9XG4gICAgdGhpcy5zdGF0aWNQYXJhbXMgPSBzdGF0aWNQYXJhbXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3luYyBleGVjdXRlKGlucHV0czogb2JqZWN0IHwgb2JqZWN0W10gfCB1bmRlZmluZWQpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKGlucHV0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIFBhcmFtZXRlcnMgbm90IHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQ6IEtleVZhbHVlUGFpciA9IHt9O1xuICAgIGlucHV0WydpbnB1dHMnXSA9IGlucHV0cztcbiAgICBpZiAodGhpcy5zdGF0aWNQYXJhbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5wdXRbJ2NvbmZpZyddID0gdGhpcy5zdGF0aWNQYXJhbXM7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRBc1N0cmluZzogc3RyaW5nID0geWFtbC5kdW1wKGlucHV0KTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnJ1bk1vZGVsSW5TaGVsbChpbnB1dEFzU3RyaW5nLCB0aGlzLmV4ZWN1dGFibGUpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHNbJ291dHB1dHMnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG1vZGVsIGlkZW50aWZpZXJcbiAgICovXG4gIG1vZGVsSWRlbnRpZmllcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBTSEVMTF9NT0RFTDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBtb2RlbCBpbiBhIHNoZWxsLiBTcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHRvIHJ1biBhbiBleHRlcm5hbCBJTVAsXG4gICAqICBleHBlY3RzIGBleGVjUGF0aGAgdG8gYmUgYSBwYXRoIHRvIGFuIGV4ZWN1dGFibGUgd2l0aCBhIENMSSBleHBvc2luZyB0d28gbWV0aG9kczogYC0tZXhlY3V0ZWAgYW5kIGAtLWltcGxgLlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0aGVuIGNhbGxzIHRoZSBgLS1jb21tYW5kYCBtZXRob2QgcGFzc2luZyB2YXIgaW1wbCBhcyB0aGUgcGF0aCB0byB0aGUgZGVzaXJlZCBpbXBsIGZpbGUuXG4gICAqIEBwYXJhbSBpbnB1dCBZYW1sIHN0cmluZyAoaW1wbCBtaW51cyB0b3AgbGV2ZWwgY29uZmlnKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4ZWNQYXRoIFBhdGggdG8gZXhlY3V0YWJsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9tcGxOYW1lIFNhdmVuYW1lIGZvciBvbXBsIGZpbGUuXG4gICAqIEByZXR1cm5zIC0gb21wbCBkYXRhIHRvIHN0ZG91dFxuICAgKiAgICAgICAgICAtIG9tcGwgZGF0YSB0byBkaXNrIGFzIG9tcGxOYW1lLnlhbWxcbiAgICovXG4gIHByaXZhdGUgcnVuTW9kZWxJblNoZWxsKGlucHV0OiBzdHJpbmcsIGV4ZWNQYXRoOiBzdHJpbmcpOiBLZXlWYWx1ZVBhaXIge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBleGVjcyA9IGV4ZWNQYXRoLnNwbGl0KCcgJyk7XG4gICAgICBjb25zdCBleGVjdXRhYmxlID0gZXhlY3Muc2hpZnQoKSA/PyAnJztcblxuICAgICAgY29uc3QgcmVzdWx0ID0gY3BcbiAgICAgICAgLnNwYXduU3luYyhleGVjdXRhYmxlLCBbLi4uZXhlY3MsICctLWV4ZWN1dGUnXSwge1xuICAgICAgICAgIGlucHV0OiBpbnB1dCxcbiAgICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICB9KVxuICAgICAgICAuc3Rkb3V0LnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4geWFtbC5sb2FkKHJlc3VsdCkgYXMgS2V5VmFsdWVQYWlyO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IOutputModelInterface } from '../interfaces';
|
|
2
|
+
export declare class TdpFinderModel implements IOutputModelInterface {
|
|
3
|
+
authParams: object | undefined;
|
|
4
|
+
staticParams: object | undefined;
|
|
5
|
+
name: string | undefined;
|
|
6
|
+
data: any;
|
|
7
|
+
authenticate(authParams: object): void;
|
|
8
|
+
/**
|
|
9
|
+
* Calculate the total emissions for a list of observations.
|
|
10
|
+
*
|
|
11
|
+
* Each Observation require:
|
|
12
|
+
* @param {Object[]} observations
|
|
13
|
+
* @param {string} observations[].timestamp RFC3339 timestamp string
|
|
14
|
+
*/
|
|
15
|
+
execute(observations: object | object[] | undefined): Promise<any[]>;
|
|
16
|
+
configure(name: string, staticParams: object | undefined): Promise<IOutputModelInterface>;
|
|
17
|
+
loadData(): Promise<any>;
|
|
18
|
+
modelIdentifier(): string;
|
|
19
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TdpFinderModel = void 0;
|
|
4
|
+
const config_1 = require("../../config");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const { MODEL_IDS } = config_1.CONFIG;
|
|
8
|
+
const { TDP } = MODEL_IDS;
|
|
9
|
+
class TdpFinderModel {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.authParams = undefined;
|
|
12
|
+
}
|
|
13
|
+
authenticate(authParams) {
|
|
14
|
+
this.authParams = authParams;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Calculate the total emissions for a list of observations.
|
|
18
|
+
*
|
|
19
|
+
* Each Observation require:
|
|
20
|
+
* @param {Object[]} observations
|
|
21
|
+
* @param {string} observations[].timestamp RFC3339 timestamp string
|
|
22
|
+
*/
|
|
23
|
+
async execute(observations) {
|
|
24
|
+
if (observations === undefined) {
|
|
25
|
+
throw new Error('Required Parameters not provided');
|
|
26
|
+
}
|
|
27
|
+
else if (!Array.isArray(observations)) {
|
|
28
|
+
throw new Error('Observations must be an array');
|
|
29
|
+
}
|
|
30
|
+
return observations.map((observation) => {
|
|
31
|
+
observation['thermal-design-power'] = 0;
|
|
32
|
+
if ('physical-processor' in observation) {
|
|
33
|
+
const physicalProcessors = observation['physical-processor'];
|
|
34
|
+
physicalProcessors.split(',').forEach(physicalProcessor => {
|
|
35
|
+
physicalProcessor = physicalProcessor.trim();
|
|
36
|
+
if (physicalProcessor in this.data &&
|
|
37
|
+
observation['thermal-design-power'] < this.data[physicalProcessor]) {
|
|
38
|
+
observation['thermal-design-power'] = this.data[physicalProcessor];
|
|
39
|
+
}
|
|
40
|
+
else if (!(physicalProcessor in this.data)) {
|
|
41
|
+
throw new Error(`physical-processor ${physicalProcessor} not found in database. Please check spelling / contribute to IEF with the data.`);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw new Error('physical-processor not provided');
|
|
47
|
+
}
|
|
48
|
+
return observation;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async configure(name, staticParams) {
|
|
52
|
+
this.staticParams = staticParams;
|
|
53
|
+
this.name = name;
|
|
54
|
+
this.data = await this.loadData();
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
async loadData() {
|
|
58
|
+
const data = {};
|
|
59
|
+
// read data.csv and read lines into memory
|
|
60
|
+
const result = fs.readFileSync(path.join(__dirname, 'data.csv'), 'utf8');
|
|
61
|
+
for (const line of result.split('\n')) {
|
|
62
|
+
const [name_w_at, tdp_r] = line.split(',');
|
|
63
|
+
const name = name_w_at.split('@')[0].trim();
|
|
64
|
+
const tdp = parseFloat(tdp_r.replace('\r', ''));
|
|
65
|
+
data[name] = tdp;
|
|
66
|
+
}
|
|
67
|
+
const result2 = fs.readFileSync(path.join(__dirname, 'data2.csv'), 'utf8');
|
|
68
|
+
for (const line of result2.split('\n')) {
|
|
69
|
+
const [name_w_at, tdp_r] = line.split(',');
|
|
70
|
+
if (name_w_at === '') {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const name = name_w_at.split('@')[0].trim();
|
|
74
|
+
const tdp = parseFloat(tdp_r.replace('\r', ''));
|
|
75
|
+
if (!(name in data) || data[name] < tdp) {
|
|
76
|
+
data[name] = tdp;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const result3 = fs.readFileSync(path.join(__dirname, 'boavizta_data.csv'), 'utf8');
|
|
80
|
+
for (const line of result3.split('\n')) {
|
|
81
|
+
const [name_w_at, tdp_r] = line.split(',');
|
|
82
|
+
if (name_w_at === '') {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const name = name_w_at.split('@')[0].trim();
|
|
86
|
+
const tdp = parseFloat(tdp_r.replace('\r', ''));
|
|
87
|
+
if (!(name in data) || data[name] < tdp) {
|
|
88
|
+
data[name] = tdp;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return data;
|
|
92
|
+
}
|
|
93
|
+
modelIdentifier() {
|
|
94
|
+
return TDP;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.TdpFinderModel = TdpFinderModel;
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RkcC1maW5kZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUNBQW9DO0FBR3BDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0IsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUMzQixNQUFNLEVBQUMsR0FBRyxFQUFDLEdBQUcsU0FBUyxDQUFDO0FBRXhCLE1BQWEsY0FBYztJQUEzQjtRQUNFLGVBQVUsR0FBdUIsU0FBUyxDQUFDO0lBcUc3QyxDQUFDO0lBaEdDLFlBQVksQ0FBQyxVQUFrQjtRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUEyQztRQUN2RCxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQ3JEO2FBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1NBQ2xEO1FBRUQsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBeUIsRUFBRSxFQUFFO1lBQ3BELFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxJQUFJLG9CQUFvQixJQUFJLFdBQVcsRUFBRTtnQkFDdkMsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQVcsQ0FBQztnQkFDdkUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO29CQUN4RCxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDN0Ms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QVMsRUFBRSxtQkFBbUIsQ0FBQyxFQUN6QyxNQUFNLENBQ1AsQ0FBQztRQUNGLEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsSUFBSSxTQUFTLEtBQUssRUFBRSxFQUFFO2dCQUNwQixTQUFTO2FBQ1Y7WUFDRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ2xCO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUF0R0Qsd0NBc0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJT3V0cHV0TW9kZWxJbnRlcmZhY2V9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQge0NPTkZJR30gZnJvbSAnLi4vLi4vY29uZmlnJztcblxuaW1wb3J0IHtLZXlWYWx1ZVBhaXJ9IGZyb20gJy4uLy4uL3R5cGVzL2NvbW1vbic7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5jb25zdCB7TU9ERUxfSURTfSA9IENPTkZJRztcbmNvbnN0IHtURFB9ID0gTU9ERUxfSURTO1xuXG5leHBvcnQgY2xhc3MgVGRwRmluZGVyTW9kZWwgaW1wbGVtZW50cyBJT3V0cHV0TW9kZWxJbnRlcmZhY2Uge1xuICBhdXRoUGFyYW1zOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIHN0YXRpY1BhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkO1xuICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRhdGE6IGFueTtcblxuICBhdXRoZW50aWNhdGUoYXV0aFBhcmFtczogb2JqZWN0KTogdm9pZCB7XG4gICAgdGhpcy5hdXRoUGFyYW1zID0gYXV0aFBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHRvdGFsIGVtaXNzaW9ucyBmb3IgYSBsaXN0IG9mIG9ic2VydmF0aW9ucy5cbiAgICpcbiAgICogRWFjaCBPYnNlcnZhdGlvbiByZXF1aXJlOlxuICAgKiBAcGFyYW0ge09iamVjdFtdfSBvYnNlcnZhdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9ic2VydmF0aW9uc1tdLnRpbWVzdGFtcCBSRkMzMzM5IHRpbWVzdGFtcCBzdHJpbmdcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUob2JzZXJ2YXRpb25zOiBvYmplY3QgfCBvYmplY3RbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAob2JzZXJ2YXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgUGFyYW1ldGVycyBub3QgcHJvdmlkZWQnKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG9ic2VydmF0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2JzZXJ2YXRpb25zIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JzZXJ2YXRpb25zLm1hcCgob2JzZXJ2YXRpb246IEtleVZhbHVlUGFpcikgPT4ge1xuICAgICAgb2JzZXJ2YXRpb25bJ3RoZXJtYWwtZGVzaWduLXBvd2VyJ10gPSAwO1xuICAgICAgaWYgKCdwaHlzaWNhbC1wcm9jZXNzb3InIGluIG9ic2VydmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHBoeXNpY2FsUHJvY2Vzc29ycyA9IG9ic2VydmF0aW9uWydwaHlzaWNhbC1wcm9jZXNzb3InXSBhcyBzdHJpbmc7XG4gICAgICAgIHBoeXNpY2FsUHJvY2Vzc29ycy5zcGxpdCgnLCcpLmZvckVhY2gocGh5c2ljYWxQcm9jZXNzb3IgPT4ge1xuICAgICAgICAgIHBoeXNpY2FsUHJvY2Vzc29yID0gcGh5c2ljYWxQcm9jZXNzb3IudHJpbSgpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBoeXNpY2FsUHJvY2Vzc29yIGluIHRoaXMuZGF0YSAmJlxuICAgICAgICAgICAgb2JzZXJ2YXRpb25bJ3RoZXJtYWwtZGVzaWduLXBvd2VyJ10gPCB0aGlzLmRhdGFbcGh5c2ljYWxQcm9jZXNzb3JdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvYnNlcnZhdGlvblsndGhlcm1hbC1kZXNpZ24tcG93ZXInXSA9IHRoaXMuZGF0YVtwaHlzaWNhbFByb2Nlc3Nvcl07XG4gICAgICAgICAgfSBlbHNlIGlmICghKHBoeXNpY2FsUHJvY2Vzc29yIGluIHRoaXMuZGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYHBoeXNpY2FsLXByb2Nlc3NvciAke3BoeXNpY2FsUHJvY2Vzc29yfSBub3QgZm91bmQgaW4gZGF0YWJhc2UuIFBsZWFzZSBjaGVjayBzcGVsbGluZyAvIGNvbnRyaWJ1dGUgdG8gSUVGIHdpdGggdGhlIGRhdGEuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwaHlzaWNhbC1wcm9jZXNzb3Igbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JzZXJ2YXRpb247XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjb25maWd1cmUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHN0YXRpY1BhcmFtczogb2JqZWN0IHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8SU91dHB1dE1vZGVsSW50ZXJmYWNlPiB7XG4gICAgdGhpcy5zdGF0aWNQYXJhbXMgPSBzdGF0aWNQYXJhbXM7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmRhdGEgPSBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3luYyBsb2FkRGF0YSgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGRhdGE6IEtleVZhbHVlUGFpciA9IHt9O1xuICAgIC8vIHJlYWQgZGF0YS5jc3YgYW5kIHJlYWQgbGluZXMgaW50byBtZW1vcnlcbiAgICBjb25zdCByZXN1bHQgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKF9fZGlybmFtZSwgJ2RhdGEuY3N2JyksICd1dGY4Jyk7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHJlc3VsdC5zcGxpdCgnXFxuJykpIHtcbiAgICAgIGNvbnN0IFtuYW1lX3dfYXQsIHRkcF9yXSA9IGxpbmUuc3BsaXQoJywnKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBuYW1lX3dfYXQuc3BsaXQoJ0AnKVswXS50cmltKCk7XG4gICAgICBjb25zdCB0ZHAgPSBwYXJzZUZsb2F0KHRkcF9yLnJlcGxhY2UoJ1xccicsICcnKSk7XG4gICAgICBkYXRhW25hbWVdID0gdGRwO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQyID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICdkYXRhMi5jc3YnKSwgJ3V0ZjgnKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgcmVzdWx0Mi5zcGxpdCgnXFxuJykpIHtcbiAgICAgIGNvbnN0IFtuYW1lX3dfYXQsIHRkcF9yXSA9IGxpbmUuc3BsaXQoJywnKTtcbiAgICAgIGlmIChuYW1lX3dfYXQgPT09ICcnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbmFtZSA9IG5hbWVfd19hdC5zcGxpdCgnQCcpWzBdLnRyaW0oKTtcbiAgICAgIGNvbnN0IHRkcCA9IHBhcnNlRmxvYXQodGRwX3IucmVwbGFjZSgnXFxyJywgJycpKTtcbiAgICAgIGlmICghKG5hbWUgaW4gZGF0YSkgfHwgZGF0YVtuYW1lXSA8IHRkcCkge1xuICAgICAgICBkYXRhW25hbWVdID0gdGRwO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQzID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJ2JvYXZpenRhX2RhdGEuY3N2JyksXG4gICAgICAndXRmOCdcbiAgICApO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiByZXN1bHQzLnNwbGl0KCdcXG4nKSkge1xuICAgICAgY29uc3QgW25hbWVfd19hdCwgdGRwX3JdID0gbGluZS5zcGxpdCgnLCcpO1xuICAgICAgaWYgKG5hbWVfd19hdCA9PT0gJycpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBuYW1lID0gbmFtZV93X2F0LnNwbGl0KCdAJylbMF0udHJpbSgpO1xuICAgICAgY29uc3QgdGRwID0gcGFyc2VGbG9hdCh0ZHBfci5yZXBsYWNlKCdcXHInLCAnJykpO1xuICAgICAgaWYgKCEobmFtZSBpbiBkYXRhKSB8fCBkYXRhW25hbWVdIDwgdGRwKSB7XG4gICAgICAgIGRhdGFbbmFtZV0gPSB0ZHA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBtb2RlbElkZW50aWZpZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVERQO1xuICB9XG59XG4iXX0=
|