@mat3ra/esse 2026.4.4-0 → 2026.4.29-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +47 -2
  2. package/dist/js/esse/JSONSchemasInterface.js +1 -1
  3. package/dist/js/esse/JSONSchemasInterfaceServer.js +2 -3
  4. package/dist/js/esse/schemaUtils.js +1 -2
  5. package/dist/js/esse/utils.js +4 -5
  6. package/dist/js/example/job.json +6 -4
  7. package/dist/js/example/software/application.json +3 -2
  8. package/dist/js/example/workflow/subworkflow.json +6 -4
  9. package/dist/js/example/workflow/unit/execution.json +3 -2
  10. package/dist/js/example/workflow.json +6 -4
  11. package/dist/js/schema/job.json +12 -0
  12. package/dist/js/schema/properties_directory/non_scalar/workflow.json +12 -0
  13. package/dist/js/schema/property/holder.json +12 -0
  14. package/dist/js/schema/software/application.json +4 -0
  15. package/dist/js/schema/software/application_with_build_config.json +4 -0
  16. package/dist/js/schema/software_directory/modeling/deepmd.json +4 -0
  17. package/dist/js/schema/software_directory/modeling/lammps.json +4 -0
  18. package/dist/js/schema/software_directory/modeling/nwchem.json +4 -0
  19. package/dist/js/schema/software_directory/modeling/unit/execution.json +4 -0
  20. package/dist/js/schema/software_directory/modeling/vasp.json +4 -0
  21. package/dist/js/schema/software_directory/scripting/jupyter_lab.json +4 -0
  22. package/dist/js/schema/software_directory/scripting/python.json +4 -0
  23. package/dist/js/schema/software_directory/scripting/shell.json +4 -0
  24. package/dist/js/schema/software_directory/scripting/unit/execution.json +4 -0
  25. package/dist/js/schema/workflow/subworkflow/unit.json +4 -0
  26. package/dist/js/schema/workflow/subworkflow.json +8 -0
  27. package/dist/js/schema/workflow/unit/execution.json +4 -0
  28. package/dist/js/schema/workflow/unit.json +4 -0
  29. package/dist/js/schema/workflow.json +12 -0
  30. package/dist/js/schemas.json +1 -1
  31. package/dist/js/scripts/compileTs.js +1 -1
  32. package/dist/js/scripts/setSchemaIds.js +1 -1
  33. package/dist/js/types.d.ts +112 -0
  34. package/dist/js/types.js +5 -5
  35. package/dist/js/utils/ajv.js +4 -5
  36. package/dist/js/utils/common.js +2 -3
  37. package/dist/js/utils/filesystem.js +2 -3
  38. package/example/software/application.json +3 -2
  39. package/package.json +14 -14
  40. package/schema/software/application.json +4 -0
package/README.md CHANGED
@@ -52,6 +52,36 @@ from mat3ra.esse import ESSE
52
52
 
53
53
  helper = ESSE()
54
54
  schema = helper.get_schema_by_id("material")
55
+
56
+ # standalone schema validation and cleaning
57
+ from mat3ra.esse import validate_and_clean
58
+
59
+ data = {"a": "x", "b": 1, "c": "drop"}
60
+ schema = {
61
+ "type": "object",
62
+ "properties": {
63
+ "a": {"type": "string"},
64
+ "b": {"type": "integer"}
65
+ }
66
+ }
67
+
68
+ validate_and_clean(data, schema)
69
+ print(data) # {"a": "x", "b": 1}
70
+
71
+ # alternative: schema-aware cleaning via generated pydantic models
72
+ # also see how it is used in ade: https://github.com/Exabyte-io/ade/blob/main/src/py/mat3ra/ade/application.py
73
+ from pydantic import ConfigDict
74
+ from mat3ra.esse.models.software.application import ApplicationSchemaBase
75
+
76
+
77
+ class Application(ApplicationSchemaBase):
78
+ # drop keys the schema doesn't declare at construction time
79
+ model_config = ConfigDict(extra="ignore")
80
+
81
+
82
+ config = {"name": "espresso", "version": "6.3", "buildConfig": {"moduleName": "6.3-gnu"}}
83
+ app = Application(**config)
84
+ print(app.model_dump(exclude_none=True)) # {"name": "espresso", "version": "6.3", ...}
55
85
  ```
56
86
 
57
87
  ### 2.2. Usage in Node/JS/TS
@@ -61,6 +91,21 @@ const { ESSE } = require("@mat3ra/esse/lib/js/esse");
61
91
 
62
92
  const helper = new ESSE();
63
93
  const schema = helper.getSchemaById("material");
94
+
95
+ # schema validation and cleaning
96
+ const { validateAndClean } = require("@mat3ra/esse/lib/js/esse");
97
+
98
+ const data = {"a": "x", "b": 1, "c": "drop"};
99
+ const schema = {
100
+ "type": "object",
101
+ "properties": {
102
+ "a": {"type": "string"},
103
+ "b": {"type": "integer"}
104
+ }
105
+ }
106
+
107
+ const result = validateAndClean(data, schema);
108
+ console.log(result); // {"a": "x", "b": 1}
64
109
  ```
65
110
 
66
111
  ## 3. Directory Structure
@@ -116,7 +161,7 @@ When developing in python the following should be taken into account:
116
161
  1. The modules containing the schemas and examples are generated using the [build-schemas.py](./build_schemas.py) script. There is a setup for it to be run automatically on every commit, but it is recommended to run it manually before committing to make sure that the changes are reflected in the modules. This can be done with `pre-commit run --all-files`. The pre-commit package can be installed with `pip install pre-commit`. To rebuild schemas manually, run (note `-e` in install):
117
162
 
118
163
  ```bash
119
- python -m venv .venv
164
+ python -m venv .venv
120
165
  source .venv/bin/activate
121
166
  pip install -e ".[tests]"
122
167
  pip install pre-commit
@@ -128,7 +173,7 @@ When developing in python the following should be taken into account:
128
173
  2. Tests can be run using the following commands:
129
174
 
130
175
  ```bash
131
- python -m venv .venv
176
+ python -m venv .venv
132
177
  source .venv/bin/activate
133
178
  pip install ".[tests]"
134
179
  python -m unittest discover --verbose --catch --start-directory tests/py/esse/
@@ -66,5 +66,5 @@ class JSONSchemasInterface {
66
66
  return patchedSchema;
67
67
  }
68
68
  }
69
- exports.default = JSONSchemasInterface;
70
69
  JSONSchemasInterface.schemasCache = new Map();
70
+ exports.default = JSONSchemasInterface;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.readSchemaFolderSync = void 0;
6
+ exports.readSchemaFolderSync = readSchemaFolderSync;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const filesystem_1 = require("../utils/filesystem");
@@ -19,7 +19,6 @@ function readSchemaFolderSync(folderPath) {
19
19
  });
20
20
  return schemas;
21
21
  }
22
- exports.readSchemaFolderSync = readSchemaFolderSync;
23
22
  class JSONSchemasInterfaceServer extends JSONSchemasInterface_1.default {
24
23
  static setSchemaFolder(schemaFolder) {
25
24
  if (this.schemaFolder !== schemaFolder) {
@@ -42,5 +41,5 @@ class JSONSchemasInterfaceServer extends JSONSchemasInterface_1.default {
42
41
  return super.getSchemaById(schemaId);
43
42
  }
44
43
  }
45
- exports.default = JSONSchemasInterfaceServer;
46
44
  JSONSchemasInterfaceServer.schemaFolder = path_1.default.resolve(__dirname, "./../schema");
45
+ exports.default = JSONSchemasInterfaceServer;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mapObjectDeep = void 0;
3
+ exports.mapObjectDeep = mapObjectDeep;
4
4
  function mapObjectDeep(object, mapValue) {
5
5
  if (typeof object !== "object" || object === null) {
6
6
  return object;
@@ -14,4 +14,3 @@ function mapObjectDeep(object, mapValue) {
14
14
  });
15
15
  return Object.fromEntries(entries);
16
16
  }
17
- exports.mapObjectDeep = mapObjectDeep;
@@ -3,7 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.applyPatchTree = exports.applyPatchWithDotNotation = exports.parseIncludeReferenceStatementsByDir = exports.parseIncludeReferenceStatements = void 0;
6
+ exports.parseIncludeReferenceStatements = parseIncludeReferenceStatements;
7
+ exports.parseIncludeReferenceStatementsByDir = parseIncludeReferenceStatementsByDir;
8
+ exports.applyPatchWithDotNotation = applyPatchWithDotNotation;
9
+ exports.applyPatchTree = applyPatchTree;
7
10
  // @ts-ignore
8
11
  const json_schema_deref_sync_1 = __importDefault(require("json-schema-deref-sync"));
9
12
  const path_1 = __importDefault(require("path"));
@@ -30,7 +33,6 @@ function parseIncludeReferenceStatements(filePath) {
30
33
  }
31
34
  return dereferenced;
32
35
  }
33
- exports.parseIncludeReferenceStatements = parseIncludeReferenceStatements;
34
36
  /**
35
37
  * Resolves `include` and `$ref` statements for all the JSON files inside a given directory.
36
38
  * @param dirPath directory to parse.
@@ -58,7 +60,6 @@ function parseIncludeReferenceStatementsByDir(dirPath, wrapInDataAndPath = false
58
60
  });
59
61
  return wrapInDataAndPath ? schemasWithPath : schemas;
60
62
  }
61
- exports.parseIncludeReferenceStatementsByDir = parseIncludeReferenceStatementsByDir;
62
63
  function isPlainObject(value) {
63
64
  return value !== null && typeof value === "object" && !Array.isArray(value);
64
65
  }
@@ -86,7 +87,6 @@ function applyPatchWithDotNotation(target, path, patchValue) {
86
87
  }
87
88
  // If existingValue is undefined, we skip;
88
89
  }
89
- exports.applyPatchWithDotNotation = applyPatchWithDotNotation;
90
90
  function applyPatchTree(schema, patchNode, pathPrefix) {
91
91
  Object.entries(patchNode).forEach(([key, value]) => {
92
92
  if (key.includes(".")) {
@@ -107,4 +107,3 @@ function applyPatchTree(schema, patchNode, pathPrefix) {
107
107
  }
108
108
  });
109
109
  }
110
- exports.applyPatchTree = applyPatchTree;
@@ -80,8 +80,9 @@
80
80
  "name": "espresso",
81
81
  "shortName": "qe",
82
82
  "summary": "Quantum Espresso",
83
- "version": "5.1.1",
84
- "hasAdvancedComputeOptions": true
83
+ "version": "6.3",
84
+ "hasAdvancedComputeOptions": true,
85
+ "isUsingMaterial": true
85
86
  },
86
87
  "model": {
87
88
  "method": {
@@ -104,8 +105,9 @@
104
105
  "name": "espresso",
105
106
  "shortName": "qe",
106
107
  "summary": "Quantum Espresso",
107
- "version": "5.1.1",
108
- "hasAdvancedComputeOptions": true
108
+ "version": "6.3",
109
+ "hasAdvancedComputeOptions": true,
110
+ "isUsingMaterial": true
109
111
  },
110
112
  "compute": null,
111
113
  "executable": {
@@ -2,6 +2,7 @@
2
2
  "name": "espresso",
3
3
  "shortName": "qe",
4
4
  "summary": "Quantum Espresso",
5
- "version": "5.1.1",
6
- "hasAdvancedComputeOptions": true
5
+ "version": "6.3",
6
+ "hasAdvancedComputeOptions": true,
7
+ "isUsingMaterial": true
7
8
  }
@@ -4,8 +4,9 @@
4
4
  "name": "espresso",
5
5
  "shortName": "qe",
6
6
  "summary": "Quantum Espresso",
7
- "version": "5.1.1",
8
- "hasAdvancedComputeOptions": true
7
+ "version": "6.3",
8
+ "hasAdvancedComputeOptions": true,
9
+ "isUsingMaterial": true
9
10
  },
10
11
  "model": {
11
12
  "method": {
@@ -28,8 +29,9 @@
28
29
  "name": "espresso",
29
30
  "shortName": "qe",
30
31
  "summary": "Quantum Espresso",
31
- "version": "5.1.1",
32
- "hasAdvancedComputeOptions": true
32
+ "version": "6.3",
33
+ "hasAdvancedComputeOptions": true,
34
+ "isUsingMaterial": true
33
35
  },
34
36
  "compute": null,
35
37
  "executable": {
@@ -3,8 +3,9 @@
3
3
  "name": "espresso",
4
4
  "shortName": "qe",
5
5
  "summary": "Quantum Espresso",
6
- "version": "5.1.1",
7
- "hasAdvancedComputeOptions": true
6
+ "version": "6.3",
7
+ "hasAdvancedComputeOptions": true,
8
+ "isUsingMaterial": true
8
9
  },
9
10
  "compute": null,
10
11
  "executable": {
@@ -27,8 +27,9 @@
27
27
  "name": "espresso",
28
28
  "shortName": "qe",
29
29
  "summary": "Quantum Espresso",
30
- "version": "5.1.1",
31
- "hasAdvancedComputeOptions": true
30
+ "version": "6.3",
31
+ "hasAdvancedComputeOptions": true,
32
+ "isUsingMaterial": true
32
33
  },
33
34
  "model": {
34
35
  "method": {
@@ -51,8 +52,9 @@
51
52
  "name": "espresso",
52
53
  "shortName": "qe",
53
54
  "summary": "Quantum Espresso",
54
- "version": "5.1.1",
55
- "hasAdvancedComputeOptions": true
55
+ "version": "6.3",
56
+ "hasAdvancedComputeOptions": true,
57
+ "isUsingMaterial": true
56
58
  },
57
59
  "compute": null,
58
60
  "executable": {
@@ -1234,6 +1234,10 @@
1234
1234
  "description": "Whether licensing is present",
1235
1235
  "type": "boolean"
1236
1236
  },
1237
+ "isUsingMaterial": {
1238
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
1239
+ "type": "boolean"
1240
+ },
1237
1241
  "_id": {
1238
1242
  "description": "entity identity",
1239
1243
  "type": "string"
@@ -2448,6 +2452,10 @@
2448
2452
  "description": "Whether licensing is present",
2449
2453
  "type": "boolean"
2450
2454
  },
2455
+ "isUsingMaterial": {
2456
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
2457
+ "type": "boolean"
2458
+ },
2451
2459
  "_id": {
2452
2460
  "description": "entity identity",
2453
2461
  "type": "string"
@@ -3870,6 +3878,10 @@
3870
3878
  "description": "Whether licensing is present",
3871
3879
  "type": "boolean"
3872
3880
  },
3881
+ "isUsingMaterial": {
3882
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
3883
+ "type": "boolean"
3884
+ },
3873
3885
  "_id": {
3874
3886
  "description": "entity identity",
3875
3887
  "type": "string"
@@ -1231,6 +1231,10 @@
1231
1231
  "description": "Whether licensing is present",
1232
1232
  "type": "boolean"
1233
1233
  },
1234
+ "isUsingMaterial": {
1235
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
1236
+ "type": "boolean"
1237
+ },
1234
1238
  "_id": {
1235
1239
  "description": "entity identity",
1236
1240
  "type": "string"
@@ -2445,6 +2449,10 @@
2445
2449
  "description": "Whether licensing is present",
2446
2450
  "type": "boolean"
2447
2451
  },
2452
+ "isUsingMaterial": {
2453
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
2454
+ "type": "boolean"
2455
+ },
2448
2456
  "_id": {
2449
2457
  "description": "entity identity",
2450
2458
  "type": "string"
@@ -3867,6 +3875,10 @@
3867
3875
  "description": "Whether licensing is present",
3868
3876
  "type": "boolean"
3869
3877
  },
3878
+ "isUsingMaterial": {
3879
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
3880
+ "type": "boolean"
3881
+ },
3870
3882
  "_id": {
3871
3883
  "description": "entity identity",
3872
3884
  "type": "string"
@@ -3511,6 +3511,10 @@
3511
3511
  "description": "Whether licensing is present",
3512
3512
  "type": "boolean"
3513
3513
  },
3514
+ "isUsingMaterial": {
3515
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
3516
+ "type": "boolean"
3517
+ },
3514
3518
  "_id": {
3515
3519
  "description": "entity identity",
3516
3520
  "type": "string"
@@ -4725,6 +4729,10 @@
4725
4729
  "description": "Whether licensing is present",
4726
4730
  "type": "boolean"
4727
4731
  },
4732
+ "isUsingMaterial": {
4733
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
4734
+ "type": "boolean"
4735
+ },
4728
4736
  "_id": {
4729
4737
  "description": "entity identity",
4730
4738
  "type": "string"
@@ -6147,6 +6155,10 @@
6147
6155
  "description": "Whether licensing is present",
6148
6156
  "type": "boolean"
6149
6157
  },
6158
+ "isUsingMaterial": {
6159
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
6160
+ "type": "boolean"
6161
+ },
6150
6162
  "_id": {
6151
6163
  "description": "entity identity",
6152
6164
  "type": "string"
@@ -33,6 +33,10 @@
33
33
  "description": "Whether licensing is present",
34
34
  "type": "boolean"
35
35
  },
36
+ "isUsingMaterial": {
37
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
38
+ "type": "boolean"
39
+ },
36
40
  "_id": {
37
41
  "description": "entity identity",
38
42
  "type": "string"
@@ -71,6 +71,10 @@
71
71
  "description": "Whether licensing is present",
72
72
  "type": "boolean"
73
73
  },
74
+ "isUsingMaterial": {
75
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
76
+ "type": "boolean"
77
+ },
74
78
  "_id": {
75
79
  "description": "entity identity",
76
80
  "type": "string"
@@ -53,6 +53,10 @@
53
53
  "description": "Whether licensing is present",
54
54
  "type": "boolean"
55
55
  },
56
+ "isUsingMaterial": {
57
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
58
+ "type": "boolean"
59
+ },
56
60
  "_id": {
57
61
  "description": "entity identity",
58
62
  "type": "string"
@@ -56,6 +56,10 @@
56
56
  "description": "Whether licensing is present",
57
57
  "type": "boolean"
58
58
  },
59
+ "isUsingMaterial": {
60
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
61
+ "type": "boolean"
62
+ },
59
63
  "_id": {
60
64
  "description": "entity identity",
61
65
  "type": "string"
@@ -52,6 +52,10 @@
52
52
  "description": "Whether licensing is present",
53
53
  "type": "boolean"
54
54
  },
55
+ "isUsingMaterial": {
56
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
57
+ "type": "boolean"
58
+ },
55
59
  "_id": {
56
60
  "description": "entity identity",
57
61
  "type": "string"
@@ -50,6 +50,10 @@
50
50
  "description": "Whether licensing is present",
51
51
  "type": "boolean"
52
52
  },
53
+ "isUsingMaterial": {
54
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
55
+ "type": "boolean"
56
+ },
53
57
  "_id": {
54
58
  "description": "entity identity",
55
59
  "type": "string"
@@ -58,6 +58,10 @@
58
58
  "description": "Whether licensing is present",
59
59
  "type": "boolean"
60
60
  },
61
+ "isUsingMaterial": {
62
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
63
+ "type": "boolean"
64
+ },
61
65
  "_id": {
62
66
  "description": "entity identity",
63
67
  "type": "string"
@@ -56,6 +56,10 @@
56
56
  "description": "Whether licensing is present",
57
57
  "type": "boolean"
58
58
  },
59
+ "isUsingMaterial": {
60
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
61
+ "type": "boolean"
62
+ },
59
63
  "_id": {
60
64
  "description": "entity identity",
61
65
  "type": "string"
@@ -70,6 +70,10 @@
70
70
  "description": "Whether licensing is present",
71
71
  "type": "boolean"
72
72
  },
73
+ "isUsingMaterial": {
74
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
75
+ "type": "boolean"
76
+ },
73
77
  "_id": {
74
78
  "description": "entity identity",
75
79
  "type": "string"
@@ -70,6 +70,10 @@
70
70
  "description": "Whether licensing is present",
71
71
  "type": "boolean"
72
72
  },
73
+ "isUsingMaterial": {
74
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
75
+ "type": "boolean"
76
+ },
73
77
  "_id": {
74
78
  "description": "entity identity",
75
79
  "type": "string"
@@ -50,6 +50,10 @@
50
50
  "description": "Whether licensing is present",
51
51
  "type": "boolean"
52
52
  },
53
+ "isUsingMaterial": {
54
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
55
+ "type": "boolean"
56
+ },
53
57
  "_id": {
54
58
  "description": "entity identity",
55
59
  "type": "string"
@@ -1197,6 +1197,10 @@
1197
1197
  "description": "Whether licensing is present",
1198
1198
  "type": "boolean"
1199
1199
  },
1200
+ "isUsingMaterial": {
1201
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
1202
+ "type": "boolean"
1203
+ },
1200
1204
  "_id": {
1201
1205
  "description": "entity identity",
1202
1206
  "type": "string"
@@ -1211,6 +1211,10 @@
1211
1211
  "description": "Whether licensing is present",
1212
1212
  "type": "boolean"
1213
1213
  },
1214
+ "isUsingMaterial": {
1215
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
1216
+ "type": "boolean"
1217
+ },
1214
1218
  "_id": {
1215
1219
  "description": "entity identity",
1216
1220
  "type": "string"
@@ -2425,6 +2429,10 @@
2425
2429
  "description": "Whether licensing is present",
2426
2430
  "type": "boolean"
2427
2431
  },
2432
+ "isUsingMaterial": {
2433
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
2434
+ "type": "boolean"
2435
+ },
2428
2436
  "_id": {
2429
2437
  "description": "entity identity",
2430
2438
  "type": "string"
@@ -50,6 +50,10 @@
50
50
  "description": "Whether licensing is present",
51
51
  "type": "boolean"
52
52
  },
53
+ "isUsingMaterial": {
54
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
55
+ "type": "boolean"
56
+ },
53
57
  "_id": {
54
58
  "description": "entity identity",
55
59
  "type": "string"
@@ -1197,6 +1197,10 @@
1197
1197
  "description": "Whether licensing is present",
1198
1198
  "type": "boolean"
1199
1199
  },
1200
+ "isUsingMaterial": {
1201
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
1202
+ "type": "boolean"
1203
+ },
1200
1204
  "_id": {
1201
1205
  "description": "entity identity",
1202
1206
  "type": "string"
@@ -1223,6 +1223,10 @@
1223
1223
  "description": "Whether licensing is present",
1224
1224
  "type": "boolean"
1225
1225
  },
1226
+ "isUsingMaterial": {
1227
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
1228
+ "type": "boolean"
1229
+ },
1226
1230
  "_id": {
1227
1231
  "description": "entity identity",
1228
1232
  "type": "string"
@@ -2437,6 +2441,10 @@
2437
2441
  "description": "Whether licensing is present",
2438
2442
  "type": "boolean"
2439
2443
  },
2444
+ "isUsingMaterial": {
2445
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
2446
+ "type": "boolean"
2447
+ },
2440
2448
  "_id": {
2441
2449
  "description": "entity identity",
2442
2450
  "type": "string"
@@ -3859,6 +3867,10 @@
3859
3867
  "description": "Whether licensing is present",
3860
3868
  "type": "boolean"
3861
3869
  },
3870
+ "isUsingMaterial": {
3871
+ "description": "Whether the application is using (being passed during a downstream processing routine) a material structure.",
3872
+ "type": "boolean"
3873
+ },
3862
3874
  "_id": {
3863
3875
  "description": "entity identity",
3864
3876
  "type": "string"