@grnsft/if 0.0.6 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.examples/ompls/azure.yml +205 -0
- package/.github/workflows/nodejs-ci.yml +0 -8
- package/README.md +48 -9
- package/build/index.js +1 -2
- package/coverage/clover.xml +132 -1118
- package/coverage/coverage-final.json +9 -26
- package/coverage/lcov-report/config/config.ts.html +3 -66
- package/coverage/lcov-report/config/index.html +15 -15
- package/coverage/lcov-report/config/index.ts.html +3 -3
- package/coverage/lcov-report/config/strings.ts.html +82 -19
- package/coverage/lcov-report/index.html +36 -231
- package/coverage/lcov-report/lib/index.html +43 -13
- package/coverage/lcov-report/lib/models-universe.ts.html +433 -0
- package/coverage/lcov-report/lib/observatory.ts.html +187 -0
- package/coverage/lcov-report/lib/supercomputer.ts.html +553 -0
- package/coverage/lcov-report/util/args.ts.html +23 -8
- package/coverage/lcov-report/util/errors.ts.html +157 -0
- package/coverage/lcov-report/util/index.html +20 -50
- package/coverage/lcov-report/util/yaml.ts.html +17 -11
- package/coverage/lcov.info +225 -2004
- package/examples/impls/test/azure.yml +8 -8
- package/examples/impls/test/ccf.yml +5 -3
- package/examples/impls/test/if-demo.yml +19 -9
- package/examples/impls/test/metadata.yml +3 -2
- package/examples/impls/test/nesting.yml +10 -13
- package/examples/impls/test/sci-e.yml +1 -1
- package/examples/impls/test/sci-m.yml +2 -2
- package/examples/impls/test/sci-o.yml +2 -4
- package/examples/impls/test/sci.yml +38 -15
- package/examples/impls/test/shell.yml +2 -1
- package/examples/impls/{tdp-finder-test.yml → test/tdp-finder.yml} +8 -8
- package/examples/ompls/ccf.yml +3 -1
- package/examples/ompls/if-demo.yml +46 -22
- package/package.json +15 -7
- package/tsconfig.build.json +7 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/build/__mocks__/azure/index.d.ts +0 -11
- package/build/__mocks__/azure/index.js +0 -132
- package/build/__mocks__/boavizta/countries.json +0 -138
- package/build/__mocks__/boavizta/instance_types.json +0 -625
- package/build/__mocks__/boavizta/providers.json +0 -1
- package/build/__mocks__/fs/index.d.ts +0 -3
- package/build/__mocks__/fs/index.js +0 -56
- package/build/__mocks__/model-universe/index.d.ts +0 -31
- package/build/__mocks__/model-universe/index.js +0 -64
- package/build/__mocks__/watt-time/data.json +0 -119
- package/build/__tests__/integration/ompl/index.test.d.ts +0 -1
- package/build/__tests__/integration/ompl/index.test.js +0 -61
- package/build/__tests__/unit/lib/azure-importer/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/azure-importer/index.test.js +0 -152
- package/build/__tests__/unit/lib/boavizta/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/boavizta/index.test.js +0 -579
- package/build/__tests__/unit/lib/case-studies/aveva.test.d.ts +0 -1
- package/build/__tests__/unit/lib/case-studies/aveva.test.js +0 -36
- package/build/__tests__/unit/lib/case-studies/emem.test.d.ts +0 -1
- package/build/__tests__/unit/lib/case-studies/emem.test.js +0 -108
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.d.ts +0 -1
- package/build/__tests__/unit/lib/case-studies/eshoppen.test.js +0 -53
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.d.ts +0 -1
- package/build/__tests__/unit/lib/case-studies/sci-accenture.test.js +0 -23
- package/build/__tests__/unit/lib/ccf/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/ccf/index.test.js +0 -223
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/cloud-instance-metadata/index.test.js +0 -73
- package/build/__tests__/unit/lib/models-universe.test.d.ts +0 -1
- package/build/__tests__/unit/lib/models-universe.test.js +0 -193
- package/build/__tests__/unit/lib/observatory.test.d.ts +0 -1
- package/build/__tests__/unit/lib/observatory.test.js +0 -99
- package/build/__tests__/unit/lib/sci/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/sci/index.test.js +0 -106
- package/build/__tests__/unit/lib/sci-e/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/sci-e/index.test.js +0 -30
- package/build/__tests__/unit/lib/sci-m/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/sci-m/index.test.js +0 -58
- package/build/__tests__/unit/lib/sci-o/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/sci-o/index.test.js +0 -42
- package/build/__tests__/unit/lib/shell-imp/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/shell-imp/index.test.js +0 -21
- package/build/__tests__/unit/lib/supercomputer.test.d.ts +0 -1
- package/build/__tests__/unit/lib/supercomputer.test.js +0 -231
- package/build/__tests__/unit/lib/tdp-finder/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/tdp-finder/index.test.js +0 -62
- package/build/__tests__/unit/lib/teads-aws/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/teads-aws/index.test.js +0 -170
- package/build/__tests__/unit/lib/teads-curve/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/teads-curve/index.test.js +0 -146
- package/build/__tests__/unit/lib/watt-time/index.test.d.ts +0 -1
- package/build/__tests__/unit/lib/watt-time/index.test.js +0 -106
- package/build/__tests__/unit/util/args.test.d.ts +0 -1
- package/build/__tests__/unit/util/args.test.js +0 -92
- package/build/__tests__/unit/util/models-universe.test.d.ts +0 -1
- package/build/__tests__/unit/util/models-universe.test.js +0 -193
- package/build/__tests__/unit/util/observatory.test.d.ts +0 -1
- package/build/__tests__/unit/util/observatory.test.js +0 -99
- package/build/__tests__/unit/util/supercomputer.test.d.ts +0 -1
- package/build/__tests__/unit/util/supercomputer.test.js +0 -231
- package/build/__tests__/unit/util/yaml.test.d.ts +0 -1
- package/build/__tests__/unit/util/yaml.test.js +0 -59
- package/build/config/config.d.ts +0 -9
- package/build/config/config.js +0 -51
- package/build/lib/azure-importer/index.d.ts +0 -55
- package/build/lib/azure-importer/index.js +0 -314
- package/build/lib/boavizta/index.d.ts +0 -53
- package/build/lib/boavizta/index.js +0 -254
- package/build/lib/case-studies/aveva-model.d.ts +0 -29
- package/build/lib/case-studies/aveva-model.js +0 -53
- package/build/lib/case-studies/emem-model.d.ts +0 -42
- package/build/lib/case-studies/emem-model.js +0 -93
- package/build/lib/case-studies/eshoppen-model.d.ts +0 -24
- package/build/lib/case-studies/eshoppen-model.js +0 -123
- package/build/lib/case-studies/index.d.ts +0 -4
- package/build/lib/case-studies/index.js +0 -21
- package/build/lib/case-studies/sci-accenture-model.d.ts +0 -10
- package/build/lib/case-studies/sci-accenture-model.js +0 -37
- package/build/lib/ccf/aws-embodied.json +0 -5591
- package/build/lib/ccf/aws-instances.json +0 -21116
- package/build/lib/ccf/aws-use.json +0 -79
- package/build/lib/ccf/azure-embodied.json +0 -6547
- package/build/lib/ccf/azure-instances.json +0 -8332
- package/build/lib/ccf/azure-use.json +0 -58
- package/build/lib/ccf/gcp-embodied.json +0 -3049
- package/build/lib/ccf/gcp-instances.json +0 -3880
- package/build/lib/ccf/gcp-use.json +0 -58
- package/build/lib/ccf/index.d.ts +0 -63
- package/build/lib/ccf/index.js +0 -338
- package/build/lib/cloud-instance-metadata/aws-instances.json +0 -1
- package/build/lib/cloud-instance-metadata/azure-instances.json +0 -1
- package/build/lib/cloud-instance-metadata/index.d.ts +0 -15
- package/build/lib/cloud-instance-metadata/index.js +0 -104
- package/build/lib/index.d.ts +0 -14
- package/build/lib/index.js +0 -32
- package/build/lib/interfaces/ccf.d.ts +0 -19
- package/build/lib/interfaces/ccf.js +0 -3
- package/build/lib/interfaces/index.d.ts +0 -7
- package/build/lib/interfaces/index.js +0 -18
- package/build/lib/observatory.d.ts +0 -20
- package/build/lib/observatory.js +0 -31
- package/build/lib/sci/index.d.ts +0 -13
- package/build/lib/sci/index.js +0 -131
- package/build/lib/sci-e/index.d.ts +0 -38
- package/build/lib/sci-e/index.js +0 -85
- package/build/lib/sci-m/index.d.ts +0 -10
- package/build/lib/sci-m/index.js +0 -124
- package/build/lib/sci-o/index.d.ts +0 -17
- package/build/lib/sci-o/index.js +0 -52
- package/build/lib/shell-imp/index.d.ts +0 -32
- package/build/lib/shell-imp/index.js +0 -82
- package/build/lib/tdp-finder/index.d.ts +0 -19
- package/build/lib/tdp-finder/index.js +0 -98
- package/build/lib/teads-aws/aws-embodied.json +0 -1
- package/build/lib/teads-aws/aws-instances.json +0 -1
- package/build/lib/teads-aws/index.d.ts +0 -58
- package/build/lib/teads-aws/index.js +0 -208
- package/build/lib/teads-curve/index.d.ts +0 -52
- package/build/lib/teads-curve/index.js +0 -158
- package/build/lib/watt-time/index.d.ts +0 -18
- package/build/lib/watt-time/index.js +0 -204
- package/build/types/model-interface.d.ts +0 -16
- package/build/types/model-interface.js +0 -3
- package/build/types/process-args.d.ts +0 -7
- package/build/types/process-args.js +0 -3
- package/build/types/supercomputer.d.ts +0 -4
- package/build/types/supercomputer.js +0 -3
- package/build/util/args.js +0 -48
- package/build/util/errors.d.ts +0 -6
- package/build/util/errors.js +0 -22
- package/build/util/helpers.js +0 -18
- package/build/util/models-universe.d.ts +0 -28
- package/build/util/models-universe.js +0 -95
- package/build/util/observatory.d.ts +0 -20
- package/build/util/observatory.js +0 -31
- package/build/util/supercomputer.d.ts +0 -30
- package/build/util/supercomputer.js +0 -109
- package/docs/implementations/tdp-finder.md +0 -36
- package/examples/impls/test/complex-pipeline.yml +0 -67
- package/examples/impls/test/toto.yaml +0 -22
- package/src/__mocks__/boavizta/countries.json +0 -138
- package/src/__mocks__/boavizta/instance_types.json +0 -625
- package/src/__mocks__/boavizta/providers.json +0 -1
- package/src/__mocks__/watt-time/data.json +0 -119
- package/tsconfig.tsbuildinfo +0 -1
- package/yarn-error.log +0 -5854
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Supercomputer = void 0;
|
|
4
|
-
const observatory_1 = require("./observatory");
|
|
5
|
-
const errors_1 = require("./errors");
|
|
6
|
-
const config_1 = require("../config");
|
|
7
|
-
const { ImplValidationError } = errors_1.ERRORS;
|
|
8
|
-
const { STRUCTURE_MALFORMED } = config_1.STRINGS;
|
|
9
|
-
/**
|
|
10
|
-
* Computer for `impl` documents.
|
|
11
|
-
*/
|
|
12
|
-
class Supercomputer {
|
|
13
|
-
constructor(impl, modelsHandbook) {
|
|
14
|
-
this.olderChild = { name: '', info: {} };
|
|
15
|
-
this.impl = impl;
|
|
16
|
-
this.modelsHandbook = modelsHandbook;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Flattens config entries.
|
|
20
|
-
*/
|
|
21
|
-
flattenConfigValues(config) {
|
|
22
|
-
if (!config) {
|
|
23
|
-
return {};
|
|
24
|
-
}
|
|
25
|
-
const configModelNames = Object.keys(config);
|
|
26
|
-
const values = configModelNames.reduce((acc, name) => {
|
|
27
|
-
acc = {
|
|
28
|
-
...acc,
|
|
29
|
-
...config[name],
|
|
30
|
-
};
|
|
31
|
-
return acc;
|
|
32
|
-
}, {});
|
|
33
|
-
return values;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Adds config entries to each obsercation object passed.
|
|
37
|
-
*/
|
|
38
|
-
enrichInputs(inputs, config, nestedConfig) {
|
|
39
|
-
const configValues = this.flattenConfigValues(config);
|
|
40
|
-
const nestedConfigValues = this.flattenConfigValues(nestedConfig);
|
|
41
|
-
return inputs.map((input) => ({
|
|
42
|
-
...input,
|
|
43
|
-
...configValues,
|
|
44
|
-
...nestedConfigValues,
|
|
45
|
-
}));
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* If child is top level, then initializes `this.olderChild`.
|
|
49
|
-
* If `children` object contains `children` property, it means inputs are nested (calls compute again).
|
|
50
|
-
* Otherwise enriches inputs, passes them to Observatory.
|
|
51
|
-
* For each model from pipeline Observatory gathers inputs. Then results are stored.
|
|
52
|
-
*/
|
|
53
|
-
async calculateOutputsForChild(childrenObject, params) {
|
|
54
|
-
const { childName, areChildrenNested } = params;
|
|
55
|
-
if (!areChildrenNested) {
|
|
56
|
-
this.olderChild = {
|
|
57
|
-
name: childName,
|
|
58
|
-
info: this.impl.graph.children[childName],
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
const { pipeline, inputs, config } = this.olderChild.info;
|
|
62
|
-
if ('children' in childrenObject[childName]) {
|
|
63
|
-
return this.compute(childrenObject[childName].children);
|
|
64
|
-
}
|
|
65
|
-
if (!('inputs' in childrenObject[childName])) {
|
|
66
|
-
throw new ImplValidationError(STRUCTURE_MALFORMED(childName));
|
|
67
|
-
}
|
|
68
|
-
const specificInputs = areChildrenNested
|
|
69
|
-
? childrenObject[childName].inputs
|
|
70
|
-
: inputs;
|
|
71
|
-
const childrenConfig = childrenObject[childName].config || {};
|
|
72
|
-
const enrichedInputs = this.enrichInputs(specificInputs, config, childrenConfig);
|
|
73
|
-
const observatory = new observatory_1.Observatory(enrichedInputs);
|
|
74
|
-
for (const modelName of pipeline) {
|
|
75
|
-
const params = config && config[modelName];
|
|
76
|
-
const modelInstance = await this.modelsHandbook.getInitializedModel(modelName, params);
|
|
77
|
-
await observatory.doInvestigationsWith(modelInstance);
|
|
78
|
-
}
|
|
79
|
-
const outputs = observatory.getOutputs();
|
|
80
|
-
if (areChildrenNested) {
|
|
81
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
82
|
-
// @ts-ignore
|
|
83
|
-
this.impl.graph.children[this.olderChild.name].children[childName].outputs = observatory.getOutputs();
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
this.impl.graph.children[this.olderChild.name].outputs = outputs;
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Checks if object is top level children or nested, then runs through all children and calculates outputs.
|
|
91
|
-
*/
|
|
92
|
-
async compute(childrenObject) {
|
|
93
|
-
const implOrChildren = childrenObject || this.impl;
|
|
94
|
-
const areChildrenNested = !!childrenObject;
|
|
95
|
-
const children = areChildrenNested
|
|
96
|
-
? implOrChildren
|
|
97
|
-
: implOrChildren.graph.children;
|
|
98
|
-
const childrenNames = Object.keys(children);
|
|
99
|
-
for (const childName of childrenNames) {
|
|
100
|
-
await this.calculateOutputsForChild(children, {
|
|
101
|
-
childName,
|
|
102
|
-
areChildrenNested,
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
return this.impl;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
exports.Supercomputer = Supercomputer;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwZXJjb21wdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3N1cGVyY29tcHV0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0NBQTBDO0FBRTFDLHFDQUFnQztBQUVoQyxzQ0FBa0M7QUFLbEMsTUFBTSxFQUFDLG1CQUFtQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRXJDLE1BQU0sRUFBQyxtQkFBbUIsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFLeEIsWUFBWSxJQUFVLEVBQUUsY0FBOEI7UUFKOUMsZUFBVSxHQUFxQixFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDO1FBSzFELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUFDLE1BQWM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLElBQVksRUFBRSxFQUFFO1lBQ2hFLEdBQUcsR0FBRztnQkFDSixHQUFHLEdBQUc7Z0JBQ04sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2hCLENBQUM7WUFFRixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FDbEIsTUFBcUIsRUFDckIsTUFBYyxFQUNkLFlBQW9CO1FBRXBCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVsRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakMsR0FBRyxLQUFLO1lBQ1IsR0FBRyxZQUFZO1lBQ2YsR0FBRyxrQkFBa0I7U0FDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxLQUFLLENBQUMsd0JBQXdCLENBQ3BDLGNBQXdCLEVBQ3hCLE1BQVc7UUFFWCxNQUFNLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFDLEdBQUcsTUFBTSxDQUFDO1FBRTlDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHO2dCQUNoQixJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQzthQUMxQyxDQUFDO1NBQ0g7UUFFRCxNQUFNLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUV4RCxJQUFJLFVBQVUsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6RDtRQUVELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtZQUM1QyxNQUFNLElBQUksbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUMvRDtRQUVELE1BQU0sY0FBYyxHQUFHLGlCQUFpQjtZQUN0QyxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU07WUFDbEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUVYLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRTlELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQ3RDLGNBQWMsRUFDZCxNQUFNLEVBQ04sY0FBYyxDQUNmLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFcEQsS0FBSyxNQUFNLFNBQVMsSUFBSSxRQUFRLEVBQUU7WUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQ2pFLFNBQVMsRUFDVCxNQUFNLENBQ1AsQ0FBQztZQUVGLE1BQU0sV0FBVyxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXpDLElBQUksaUJBQWlCLEVBQUU7WUFDckIsNkRBQTZEO1lBQzdELGFBQWE7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQ3JELFNBQVMsQ0FDVixDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFckMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNqRSxPQUFPO0lBQ1QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFvQjtRQUN2QyxNQUFNLGNBQWMsR0FBRyxjQUFjLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQWEsaUJBQWlCO1lBQzFDLENBQUMsQ0FBQyxjQUFjO1lBQ2hCLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVDLEtBQUssTUFBTSxTQUFTLElBQUksYUFBYSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRTtnQkFDNUMsU0FBUztnQkFDVCxpQkFBaUI7YUFDbEIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBMUlELHNDQTBJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9kZWxzVW5pdmVyc2V9IGZyb20gJy4vbW9kZWxzLXVuaXZlcnNlJztcbmltcG9ydCB7T2JzZXJ2YXRvcnl9IGZyb20gJy4vb2JzZXJ2YXRvcnknO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7Q2hpbGRJbmZvcm1hdGlvbn0gZnJvbSAnLi4vdHlwZXMvc3VwZXJjb21wdXRlcic7XG5pbXBvcnQge0NoaWxkcmVuLCBDb25maWcsIEltcGwsIE1vZGVsUGFyYW1zfSBmcm9tICcuLi90eXBlcy9pbXBsJztcblxuY29uc3Qge0ltcGxWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG5jb25zdCB7U1RSVUNUVVJFX01BTEZPUk1FRH0gPSBTVFJJTkdTO1xuXG4vKipcbiAqIENvbXB1dGVyIGZvciBgaW1wbGAgZG9jdW1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgU3VwZXJjb21wdXRlciB7XG4gIHByaXZhdGUgb2xkZXJDaGlsZDogQ2hpbGRJbmZvcm1hdGlvbiA9IHtuYW1lOiAnJywgaW5mbzoge319O1xuICBwcml2YXRlIGltcGw6IEltcGw7XG4gIHByaXZhdGUgbW9kZWxzSGFuZGJvb2s6IE1vZGVsc1VuaXZlcnNlO1xuXG4gIGNvbnN0cnVjdG9yKGltcGw6IEltcGwsIG1vZGVsc0hhbmRib29rOiBNb2RlbHNVbml2ZXJzZSkge1xuICAgIHRoaXMuaW1wbCA9IGltcGw7XG4gICAgdGhpcy5tb2RlbHNIYW5kYm9vayA9IG1vZGVsc0hhbmRib29rO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW5zIGNvbmZpZyBlbnRyaWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBmbGF0dGVuQ29uZmlnVmFsdWVzKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWdNb2RlbE5hbWVzID0gT2JqZWN0LmtleXMoY29uZmlnKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBjb25maWdNb2RlbE5hbWVzLnJlZHVjZSgoYWNjOiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgYWNjID0ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIC4uLmNvbmZpZ1tuYW1lXSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGNvbmZpZyBlbnRyaWVzIHRvIGVhY2ggb2JzZXJjYXRpb24gb2JqZWN0IHBhc3NlZC5cbiAgICovXG4gIHByaXZhdGUgZW5yaWNoSW5wdXRzKFxuICAgIGlucHV0czogTW9kZWxQYXJhbXNbXSxcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBuZXN0ZWRDb25maWc6IENvbmZpZ1xuICApIHtcbiAgICBjb25zdCBjb25maWdWYWx1ZXMgPSB0aGlzLmZsYXR0ZW5Db25maWdWYWx1ZXMoY29uZmlnKTtcbiAgICBjb25zdCBuZXN0ZWRDb25maWdWYWx1ZXMgPSB0aGlzLmZsYXR0ZW5Db25maWdWYWx1ZXMobmVzdGVkQ29uZmlnKTtcblxuICAgIHJldHVybiBpbnB1dHMubWFwKChpbnB1dDogYW55KSA9PiAoe1xuICAgICAgLi4uaW5wdXQsXG4gICAgICAuLi5jb25maWdWYWx1ZXMsXG4gICAgICAuLi5uZXN0ZWRDb25maWdWYWx1ZXMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGNoaWxkIGlzIHRvcCBsZXZlbCwgdGhlbiBpbml0aWFsaXplcyBgdGhpcy5vbGRlckNoaWxkYC5cbiAgICogSWYgYGNoaWxkcmVuYCBvYmplY3QgY29udGFpbnMgYGNoaWxkcmVuYCBwcm9wZXJ0eSwgaXQgbWVhbnMgaW5wdXRzIGFyZSBuZXN0ZWQgKGNhbGxzIGNvbXB1dGUgYWdhaW4pLlxuICAgKiBPdGhlcndpc2UgZW5yaWNoZXMgaW5wdXRzLCBwYXNzZXMgdGhlbSB0byBPYnNlcnZhdG9yeS5cbiAgICogRm9yIGVhY2ggbW9kZWwgZnJvbSBwaXBlbGluZSBPYnNlcnZhdG9yeSBnYXRoZXJzIGlucHV0cy4gVGhlbiByZXN1bHRzIGFyZSBzdG9yZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNhbGN1bGF0ZU91dHB1dHNGb3JDaGlsZChcbiAgICBjaGlsZHJlbk9iamVjdDogQ2hpbGRyZW4sXG4gICAgcGFyYW1zOiBhbnlcbiAgKSB7XG4gICAgY29uc3Qge2NoaWxkTmFtZSwgYXJlQ2hpbGRyZW5OZXN0ZWR9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCFhcmVDaGlsZHJlbk5lc3RlZCkge1xuICAgICAgdGhpcy5vbGRlckNoaWxkID0ge1xuICAgICAgICBuYW1lOiBjaGlsZE5hbWUsXG4gICAgICAgIGluZm86IHRoaXMuaW1wbC5ncmFwaC5jaGlsZHJlbltjaGlsZE5hbWVdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7cGlwZWxpbmUsIGlucHV0cywgY29uZmlnfSA9IHRoaXMub2xkZXJDaGlsZC5pbmZvO1xuXG4gICAgaWYgKCdjaGlsZHJlbicgaW4gY2hpbGRyZW5PYmplY3RbY2hpbGROYW1lXSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZShjaGlsZHJlbk9iamVjdFtjaGlsZE5hbWVdLmNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBpZiAoISgnaW5wdXRzJyBpbiBjaGlsZHJlbk9iamVjdFtjaGlsZE5hbWVdKSkge1xuICAgICAgdGhyb3cgbmV3IEltcGxWYWxpZGF0aW9uRXJyb3IoU1RSVUNUVVJFX01BTEZPUk1FRChjaGlsZE5hbWUpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWZpY0lucHV0cyA9IGFyZUNoaWxkcmVuTmVzdGVkXG4gICAgICA/IGNoaWxkcmVuT2JqZWN0W2NoaWxkTmFtZV0uaW5wdXRzXG4gICAgICA6IGlucHV0cztcblxuICAgIGNvbnN0IGNoaWxkcmVuQ29uZmlnID0gY2hpbGRyZW5PYmplY3RbY2hpbGROYW1lXS5jb25maWcgfHwge307XG5cbiAgICBjb25zdCBlbnJpY2hlZElucHV0cyA9IHRoaXMuZW5yaWNoSW5wdXRzKFxuICAgICAgc3BlY2lmaWNJbnB1dHMsXG4gICAgICBjb25maWcsXG4gICAgICBjaGlsZHJlbkNvbmZpZ1xuICAgICk7XG5cbiAgICBjb25zdCBvYnNlcnZhdG9yeSA9IG5ldyBPYnNlcnZhdG9yeShlbnJpY2hlZElucHV0cyk7XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBvZiBwaXBlbGluZSkge1xuICAgICAgY29uc3QgcGFyYW1zID0gY29uZmlnICYmIGNvbmZpZ1ttb2RlbE5hbWVdO1xuICAgICAgY29uc3QgbW9kZWxJbnN0YW5jZSA9IGF3YWl0IHRoaXMubW9kZWxzSGFuZGJvb2suZ2V0SW5pdGlhbGl6ZWRNb2RlbChcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBwYXJhbXNcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IG9ic2VydmF0b3J5LmRvSW52ZXN0aWdhdGlvbnNXaXRoKG1vZGVsSW5zdGFuY2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHMgPSBvYnNlcnZhdG9yeS5nZXRPdXRwdXRzKCk7XG5cbiAgICBpZiAoYXJlQ2hpbGRyZW5OZXN0ZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuaW1wbC5ncmFwaC5jaGlsZHJlblt0aGlzLm9sZGVyQ2hpbGQubmFtZV0uY2hpbGRyZW5bXG4gICAgICAgIGNoaWxkTmFtZVxuICAgICAgXS5vdXRwdXRzID0gb2JzZXJ2YXRvcnkuZ2V0T3V0cHV0cygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbXBsLmdyYXBoLmNoaWxkcmVuW3RoaXMub2xkZXJDaGlsZC5uYW1lXS5vdXRwdXRzID0gb3V0cHV0cztcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG9iamVjdCBpcyB0b3AgbGV2ZWwgY2hpbGRyZW4gb3IgbmVzdGVkLCB0aGVuIHJ1bnMgdGhyb3VnaCBhbGwgY2hpbGRyZW4gYW5kIGNhbGN1bGF0ZXMgb3V0cHV0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wdXRlKGNoaWxkcmVuT2JqZWN0PzogYW55KSB7XG4gICAgY29uc3QgaW1wbE9yQ2hpbGRyZW4gPSBjaGlsZHJlbk9iamVjdCB8fCB0aGlzLmltcGw7XG4gICAgY29uc3QgYXJlQ2hpbGRyZW5OZXN0ZWQgPSAhIWNoaWxkcmVuT2JqZWN0O1xuICAgIGNvbnN0IGNoaWxkcmVuOiBDaGlsZHJlbiA9IGFyZUNoaWxkcmVuTmVzdGVkXG4gICAgICA/IGltcGxPckNoaWxkcmVuXG4gICAgICA6IGltcGxPckNoaWxkcmVuLmdyYXBoLmNoaWxkcmVuO1xuICAgIGNvbnN0IGNoaWxkcmVuTmFtZXMgPSBPYmplY3Qua2V5cyhjaGlsZHJlbik7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkTmFtZSBvZiBjaGlsZHJlbk5hbWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhbGN1bGF0ZU91dHB1dHNGb3JDaGlsZChjaGlsZHJlbiwge1xuICAgICAgICBjaGlsZE5hbWUsXG4gICAgICAgIGFyZUNoaWxkcmVuTmVzdGVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW1wbDtcbiAgfVxufVxuIl19
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# TDP Finder Model
|
|
2
|
-
|
|
3
|
-
## Scope
|
|
4
|
-
|
|
5
|
-
The TDP Finder model finds the thermal design power (TDP) of a given processor by looking it up in the model datasets. There are scenarios where the lookup can return multiple possible TDP values. In these cases, we return the maximum of the possible values. There are also cases where no TDP can be found for a specific processor. In these cases, we throw an error. The TDP is then used by other models to calculate the `energy-cpu` value.
|
|
6
|
-
|
|
7
|
-
## Used DataSets
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
[./data.csv](./data.csv) Dataset from https://www.kaggle.com/datasets/lincolnzh/cpu-specifications-dataset Licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)
|
|
11
|
-
|
|
12
|
-
[./data2.csv](./data2.csv) Dataset from [Codecarbon](https://github.com/mlco2/codecarbon/blob/master/codecarbon/data/hardware/cpu_power.csv) Licensed under MIT
|
|
13
|
-
|
|
14
|
-
[./boavizta_data.csv](./boavizta_data.csv) Dataset from Boavizta API [Data Source](https://github.com/Boavizta/boaviztapi/blob/main/boaviztapi/data/crowdsourcing/cpu_specs.csv) Licensed under MIT
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
## Implementation
|
|
18
|
-
|
|
19
|
-
IEF implements the plugin based on the logic described above.
|
|
20
|
-
|
|
21
|
-
## Usage with IMPL
|
|
22
|
-
* Model Name: `tdp-finder`
|
|
23
|
-
```yaml
|
|
24
|
-
input:
|
|
25
|
-
- physical-processor: Intel Xeon Platinum 8175M, AMD A8-9600
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Output in OMPL
|
|
29
|
-
```yaml
|
|
30
|
-
input:
|
|
31
|
-
- physical-processor: Intel Xeon Platinum 8175M
|
|
32
|
-
output:
|
|
33
|
-
- physical-processor: Intel Xeon Platinum 8175M
|
|
34
|
-
tdp: 165
|
|
35
|
-
```
|
|
36
|
-
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
name: gsf-demo-pipeline
|
|
2
|
-
description:
|
|
3
|
-
More complex pipeline example
|
|
4
|
-
tags:
|
|
5
|
-
kind: web
|
|
6
|
-
complexity: moderate
|
|
7
|
-
category: cloud
|
|
8
|
-
initialize:
|
|
9
|
-
models:
|
|
10
|
-
- name: teads-curve
|
|
11
|
-
kind: builtin
|
|
12
|
-
- name: sci-m
|
|
13
|
-
kind: builtin
|
|
14
|
-
- name: sci-o
|
|
15
|
-
kind: builtin
|
|
16
|
-
- name: sci-e
|
|
17
|
-
kind: builtin
|
|
18
|
-
- name: eshoppen-net
|
|
19
|
-
kind: builtin
|
|
20
|
-
- name: eshoppen-mem
|
|
21
|
-
kind: builtin
|
|
22
|
-
- name: eshoppen-cpu
|
|
23
|
-
kind: builtin
|
|
24
|
-
- name: sampler
|
|
25
|
-
kind: shell
|
|
26
|
-
graph:
|
|
27
|
-
children:
|
|
28
|
-
child:
|
|
29
|
-
pipeline:
|
|
30
|
-
- eshoppen-mem
|
|
31
|
-
- eshoppen-cpu
|
|
32
|
-
- eshoppen-net
|
|
33
|
-
- sci-e
|
|
34
|
-
- sci-o
|
|
35
|
-
- sampler
|
|
36
|
-
config:
|
|
37
|
-
teads-curve:
|
|
38
|
-
thermal-design-power: 1
|
|
39
|
-
sampler:
|
|
40
|
-
executable: python3 /usr/local/bin/sampler
|
|
41
|
-
inputs:
|
|
42
|
-
- timestamp: 2023-07-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
|
|
43
|
-
processor: Intel® Core™ i7-1185G7
|
|
44
|
-
data-in: 1
|
|
45
|
-
data-out: 1
|
|
46
|
-
net-energy: 1
|
|
47
|
-
n-hours: 1
|
|
48
|
-
n-chips: 1
|
|
49
|
-
tdp-mem: 1
|
|
50
|
-
tdp-coeff: 1
|
|
51
|
-
duration: 3600 # Secs
|
|
52
|
-
thermal-design-power: 28 # W
|
|
53
|
-
cpu-util: 18.392
|
|
54
|
-
grid-carbon-intensity: 951 # gCO2e/kWh
|
|
55
|
-
- timestamp: 2023-08-06T00:00 # [KEYWORD] [NO-SUBFIELDS] time when measurement occurred
|
|
56
|
-
processor: Intel® Core™ i7-1185G7
|
|
57
|
-
data-in: 1
|
|
58
|
-
data-out: 1
|
|
59
|
-
net-energy: 1
|
|
60
|
-
n-hours: 1
|
|
61
|
-
n-chips: 1
|
|
62
|
-
tdp-mem: 1
|
|
63
|
-
tdp-coeff: 1
|
|
64
|
-
duration: 3600 # Secs
|
|
65
|
-
thermal-design-power: 20 # W
|
|
66
|
-
cpu-util: 16
|
|
67
|
-
grid-carbon-intensity: 800 # gCO2e/kWh
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
name: ccf-demo
|
|
2
|
-
description: example impl invoking CCF model
|
|
3
|
-
initialize:
|
|
4
|
-
models:
|
|
5
|
-
- name: azure-importer
|
|
6
|
-
kind: builtin
|
|
7
|
-
graph:
|
|
8
|
-
children:
|
|
9
|
-
child:
|
|
10
|
-
pipeline:
|
|
11
|
-
- azure-importer
|
|
12
|
-
config:
|
|
13
|
-
azure-importer:
|
|
14
|
-
metric: Percentage CPU
|
|
15
|
-
interval: PT1M
|
|
16
|
-
aggregation: avg
|
|
17
|
-
observations:
|
|
18
|
-
- null
|
|
19
|
-
impacts:
|
|
20
|
-
- metric: Percentage CPU
|
|
21
|
-
interval: PT1M
|
|
22
|
-
aggregation: avg
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"0-Global": "WOR",
|
|
3
|
-
"1-Europe": "EEE",
|
|
4
|
-
"Albania": "ALB",
|
|
5
|
-
"Algeria": "DZA",
|
|
6
|
-
"Angola": "AGO",
|
|
7
|
-
"Argentina": "ARG",
|
|
8
|
-
"Armenia": "ARM",
|
|
9
|
-
"Australia": "AUS",
|
|
10
|
-
"Austria": "AUT",
|
|
11
|
-
"Azerbaijan": "AZE",
|
|
12
|
-
"Bahrain": "BHR",
|
|
13
|
-
"Bangladesh": "BGD",
|
|
14
|
-
"Belarus": "BLR",
|
|
15
|
-
"Belgium": "BEL",
|
|
16
|
-
"Benin": "BEN",
|
|
17
|
-
"Bolivia": "BOL",
|
|
18
|
-
"Bosnia and Herzegovina": "BIH",
|
|
19
|
-
"Botswana": "BWA",
|
|
20
|
-
"Brazil": "BRA",
|
|
21
|
-
"Brunei": "BRN",
|
|
22
|
-
"Bulgaria": "BGR",
|
|
23
|
-
"Cambodia": "KHM",
|
|
24
|
-
"Cameroon": "CMR",
|
|
25
|
-
"Canada": "CAN",
|
|
26
|
-
"Chile": "CHL",
|
|
27
|
-
"China": "CHN",
|
|
28
|
-
"Colombia": "COL",
|
|
29
|
-
"Congo": "COG",
|
|
30
|
-
"Costa Rica": "CRI",
|
|
31
|
-
"Croatia": "HRV",
|
|
32
|
-
"Cuba": "CUB",
|
|
33
|
-
"Cyprus": "CYP",
|
|
34
|
-
"Czech Republic": "CZE",
|
|
35
|
-
"Denmark": "DNK",
|
|
36
|
-
"Dominican Republic": "DOM",
|
|
37
|
-
"DR Congo": "COD",
|
|
38
|
-
"Ecuador": "ECU",
|
|
39
|
-
"Egypt": "EGY",
|
|
40
|
-
"El Salvador": "SLV",
|
|
41
|
-
"Eritrea": "ERI",
|
|
42
|
-
"Estonia": "EST",
|
|
43
|
-
"Ethiopia": "ETH",
|
|
44
|
-
"Finland": "FIN",
|
|
45
|
-
"France": "FRA",
|
|
46
|
-
"Gabon": "GAB",
|
|
47
|
-
"Georgia": "GEO",
|
|
48
|
-
"Germany": "DEU",
|
|
49
|
-
"Ghana": "GHA",
|
|
50
|
-
"Greece": "GRC",
|
|
51
|
-
"Guatemala": "GTM",
|
|
52
|
-
"Haiti": "HTI",
|
|
53
|
-
"Honduras": "HND",
|
|
54
|
-
"Hungary": "HUN",
|
|
55
|
-
"Iceland": "ISL",
|
|
56
|
-
"India": "IND",
|
|
57
|
-
"Indonesia": "IDN",
|
|
58
|
-
"Iran": "IRN",
|
|
59
|
-
"Iraq": "IRQ",
|
|
60
|
-
"Ireland": "IRL",
|
|
61
|
-
"Israel": "ISR",
|
|
62
|
-
"Italy": "ITA",
|
|
63
|
-
"Ivory Coast": "CIV",
|
|
64
|
-
"Jamaica": "JAM",
|
|
65
|
-
"Japan": "JPN",
|
|
66
|
-
"Jordan": "JOR",
|
|
67
|
-
"Kazakhstan": "KAZ",
|
|
68
|
-
"Kenya": "KEN",
|
|
69
|
-
"Kuwait": "KWT",
|
|
70
|
-
"Kyrgyzstan": "KGZ",
|
|
71
|
-
"Latvia": "LVA",
|
|
72
|
-
"Lebanon": "LBN",
|
|
73
|
-
"Libyan Arab Jamahiriya": "LBY",
|
|
74
|
-
"Lithuania": "LTU",
|
|
75
|
-
"Luxembourg": "LUX",
|
|
76
|
-
"Malaysia": "MYS",
|
|
77
|
-
"Malta": "MLT",
|
|
78
|
-
"Mexico": "MEX",
|
|
79
|
-
"Moldova": "MDA",
|
|
80
|
-
"Mongolia": "MNG",
|
|
81
|
-
"Morocco": "MAR",
|
|
82
|
-
"Mozambique": "MOZ",
|
|
83
|
-
"Myanmar": "MMR",
|
|
84
|
-
"Namibia": "NAM",
|
|
85
|
-
"Nepal": "NPL",
|
|
86
|
-
"Netherlands": "NLD",
|
|
87
|
-
"New Zealand": "NZL",
|
|
88
|
-
"Nicaragua": "NIC",
|
|
89
|
-
"Nigeria": "NGA",
|
|
90
|
-
"North Korea": "PRK",
|
|
91
|
-
"North Macedonia": "MKD",
|
|
92
|
-
"Norway": "NOR",
|
|
93
|
-
"Oman": "OMN",
|
|
94
|
-
"Pakistan": "PAK",
|
|
95
|
-
"Panama": "PAN",
|
|
96
|
-
"Paraguay": "PRY",
|
|
97
|
-
"Peru": "PER",
|
|
98
|
-
"Philippines": "PHL",
|
|
99
|
-
"Poland": "POL",
|
|
100
|
-
"Portugal": "PRT",
|
|
101
|
-
"Qatar": "QAT",
|
|
102
|
-
"Romania": "ROU",
|
|
103
|
-
"Russian Federation": "RUS",
|
|
104
|
-
"Saudi Arabia": "SAU",
|
|
105
|
-
"Senegal": "SEN",
|
|
106
|
-
"Serbia": "SCG",
|
|
107
|
-
"Singapore": "SGP",
|
|
108
|
-
"Slovakia": "SVK",
|
|
109
|
-
"Slovenia": "SVN",
|
|
110
|
-
"South Africa": "ZAF",
|
|
111
|
-
"South Korea": "KOR",
|
|
112
|
-
"Spain": "ESP",
|
|
113
|
-
"Sri Lanka": "LKA",
|
|
114
|
-
"Sudan": "SDN",
|
|
115
|
-
"Sweden": "SWE",
|
|
116
|
-
"Switzerland": "CHE",
|
|
117
|
-
"Syrian Arab Republic": "SYR",
|
|
118
|
-
"Taiwan": "TWN",
|
|
119
|
-
"Tajikistan": "TJK",
|
|
120
|
-
"Tanzania": "TZA",
|
|
121
|
-
"Thailand": "THA",
|
|
122
|
-
"Togo": "TGO",
|
|
123
|
-
"Trinidad and Tobago": "TTO",
|
|
124
|
-
"Tunisia": "TUN",
|
|
125
|
-
"Turkey": "TUR",
|
|
126
|
-
"Turkmenistan": "TKM",
|
|
127
|
-
"Ukraine": "UKR",
|
|
128
|
-
"United Arab Emirates": "ARE",
|
|
129
|
-
"United Kingdom": "GBR",
|
|
130
|
-
"United States of America": "USA",
|
|
131
|
-
"Uruguay": "URY",
|
|
132
|
-
"Uzbekistan": "UZB",
|
|
133
|
-
"Venezuela": "VEN",
|
|
134
|
-
"Vietnam": "VNM",
|
|
135
|
-
"Yemen": "YEM",
|
|
136
|
-
"Zambia": "ZMB",
|
|
137
|
-
"Zimbabwe": "ZWE"
|
|
138
|
-
}
|