From 9319658c2e72a88daab217a85641027189c76943 Mon Sep 17 00:00:00 2001 From: Philipp Schaad Date: Mon, 25 Apr 2022 17:23:29 +0200 Subject: [PATCH] Data Container Editing and 'Offline' Editing of SDFGs (#134) Co-authored-by: Tal Ben-Nun --- backend/dace_vscode/editing.py | 4 +- backend/run_dace.py | 16 +- package-lock.json | 146 +++--- package.json | 2 +- src/dace_interface.ts | 2 +- src/utils/sdfg_meta_dict.json | 1 + .../components/sdfv/properties/properties.ts | 84 +++- .../sdfv/renderer/vscode_renderer.ts | 5 +- .../components/sdfv/utils/attributes_table.ts | 461 +++++++++++++++--- .../components/sdfv/utils/helpers.ts | 109 +++-- src/webclients/components/sdfv/vscode_sdfv.ts | 38 +- tsconfig.json | 1 + 12 files changed, 629 insertions(+), 240 deletions(-) create mode 100644 src/utils/sdfg_meta_dict.json diff --git a/backend/dace_vscode/editing.py b/backend/dace_vscode/editing.py index c8984fda..f34441cd 100644 --- a/backend/dace_vscode/editing.py +++ b/backend/dace_vscode/editing.py @@ -2,7 +2,7 @@ # All rights reserved. from dace import ( - serialize, nodes, SDFG, SDFGState, InterstateEdge, Memlet, dtypes + nodes, SDFG, SDFGState, InterstateEdge, Memlet, dtypes ) from dace_vscode.utils import ( load_sdfg_from_json, @@ -98,7 +98,7 @@ def insert_sdfg_element(sdfg_str, type, parent_uuid, edge_a_uuid): sub_sdfg = SDFG('nested_sdfg') sub_sdfg.add_array('in', [1], dtypes.float32) sub_sdfg.add_array('out', [1], dtypes.float32) - + nsdfg = parent.add_nested_sdfg(sub_sdfg, sdfg, {'in'}, {'out'}) uuid = [get_uuid(nsdfg, parent)] elif type == 'LibraryNode': diff --git a/backend/run_dace.py b/backend/run_dace.py index d54bd178..fb831694 100644 --- a/backend/run_dace.py +++ b/backend/run_dace.py @@ -3,6 +3,7 @@ ##################################################################### # Before importing anything, try to take the ".env" file into account +import json import os import re import sys @@ -56,14 +57,21 @@ ) from dace_vscode import transformations, editing, arith_ops +meta_dict = {} -def get_property_metdata(): +def get_property_metdata(force_regenerate=False): """ Generate a dictionary of class properties and their metadata. This iterates over all classes registered as serializable in DaCe's serialization module, checks whether there are properties present (true for any class registered via the @make.properties decorator), and then assembels their metadata to a dictionary. """ + # If a cached version of the dictionary is available, return that. + if meta_dict and not force_regenerate: + return { + 'metaDict': meta_dict, + } + # Lazy import to cut down on module load time. from dace.sdfg.nodes import full_class_path @@ -77,9 +85,10 @@ def get_property_metdata(): from dace.transformation import optimizer _ = optimizer.Optimizer(dace.SDFG('dummy')).get_pattern_matches() - meta_dict = {} + meta_dict.clear() meta_dict['__reverse_type_lookup__'] = {} meta_dict['__libs__'] = {} + meta_dict['__data_container_types__'] = {} for typename in dace.serialize._DACE_SERIALIZE_TYPES: t = dace.serialize._DACE_SERIALIZE_TYPES[typename] if hasattr(t, '__properties__'): @@ -134,9 +143,12 @@ def get_property_metdata(): # For library nodes we want to make sure they are all easily # accessible under '__libs__', to be able to list them all out. + # Same for data container types. if (issubclass(t, dace.sdfg.nodes.LibraryNode) and not t == dace.sdfg.nodes.LibraryNode): meta_dict['__libs__'][typename] = meta_key + elif (issubclass(t, dace.data.Data) and t is not dace.data.Data): + meta_dict['__data_container_types__'][typename] = meta_key # Save a lookup for enum values not present yet. enum_list = [ diff --git a/package-lock.json b/package-lock.json index e885292c..e8021f46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -176,9 +176,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", + "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -301,9 +301,9 @@ } }, "node_modules/@spcl/sdfv": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/@spcl/sdfv/-/sdfv-1.0.26.tgz", - "integrity": "sha512-nP2lmxO+cpt2i6h7XBM5Pcq5djxVEIijF/ujpr7H/IjsEEaPjaIt5iauEFwEX+MEIceujzGr6fKW9LLj3zboIw==", + "version": "1.0.27", + "resolved": "https://registry.npmjs.org/@spcl/sdfv/-/sdfv-1.0.27.tgz", + "integrity": "sha512-l+1+39a/QO6DkXu8WYeAibSuY4ZJtxeJpGtbVh0nHcrRt86yf0VtBYYyioIBWDzTC3UUw4Pt67zb0Oycf0J8DA==", "dependencies": { "@babel/runtime": "^7.17.2", "@types/mathjs": "^6.0.11", @@ -412,9 +412,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "12.20.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.48.tgz", - "integrity": "sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ==", + "version": "12.20.49", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.49.tgz", + "integrity": "sha512-5e6QNb9bkeh4Hni4ktLqUZuUqnGTX/kou2aZkXyxtuYaHXgBm+In1SHR9V+7kDzWzjB08KC2uqt2doDi7cuAAA==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -1041,9 +1041,9 @@ "dev": true }, "node_modules/autoprefixer": { - "version": "10.4.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", - "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz", + "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==", "dev": true, "funding": [ { @@ -1057,7 +1057,7 @@ ], "dependencies": { "browserslist": "^4.20.2", - "caniuse-lite": "^1.0.30001317", + "caniuse-lite": "^1.0.30001332", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -1190,9 +1190,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "dev": true, "funding": [ { @@ -1205,10 +1205,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", - "node-releases": "^2.0.2", + "node-releases": "^2.0.3", "picocolors": "^1.0.0" }, "bin": { @@ -1868,9 +1868,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.114", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.114.tgz", - "integrity": "sha512-gRwLpVYWHGbERPU6o8pKfR168V6enWEXzZc6zQNNXbgJ7UJna+9qzAIHY94+9KOv71D/CH+QebLA9pChD2q8zA==", + "version": "1.4.119", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.119.tgz", + "integrity": "sha512-HPEmKy+d0xK8oCfEHc5t6wDsSAi1WmE3Ld08QrBjAPxaAzfuKP66VJ77lcTqxTt7GJmSE279s75mhW64Xh+4kw==", "dev": true }, "node_modules/emoji-regex": { @@ -2049,12 +2049,12 @@ } }, "node_modules/eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", - "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz", + "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.2.1", + "@eslint/eslintrc": "^1.2.2", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -4377,18 +4377,18 @@ } }, "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", - "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/node-gyp/node_modules/wide-align": { @@ -6255,14 +6255,14 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -6982,9 +6982,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", + "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -7081,9 +7081,9 @@ "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" }, "@spcl/sdfv": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/@spcl/sdfv/-/sdfv-1.0.26.tgz", - "integrity": "sha512-nP2lmxO+cpt2i6h7XBM5Pcq5djxVEIijF/ujpr7H/IjsEEaPjaIt5iauEFwEX+MEIceujzGr6fKW9LLj3zboIw==", + "version": "1.0.27", + "resolved": "https://registry.npmjs.org/@spcl/sdfv/-/sdfv-1.0.27.tgz", + "integrity": "sha512-l+1+39a/QO6DkXu8WYeAibSuY4ZJtxeJpGtbVh0nHcrRt86yf0VtBYYyioIBWDzTC3UUw4Pt67zb0Oycf0J8DA==", "requires": { "@babel/runtime": "^7.17.2", "@types/mathjs": "^6.0.11", @@ -7189,9 +7189,9 @@ "dev": true }, "@types/node": { - "version": "12.20.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.48.tgz", - "integrity": "sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ==", + "version": "12.20.49", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.49.tgz", + "integrity": "sha512-5e6QNb9bkeh4Hni4ktLqUZuUqnGTX/kou2aZkXyxtuYaHXgBm+In1SHR9V+7kDzWzjB08KC2uqt2doDi7cuAAA==", "dev": true }, "@types/normalize-package-data": { @@ -7661,13 +7661,13 @@ "dev": true }, "autoprefixer": { - "version": "10.4.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", - "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz", + "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==", "dev": true, "requires": { "browserslist": "^4.20.2", - "caniuse-lite": "^1.0.30001317", + "caniuse-lite": "^1.0.30001332", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -7767,15 +7767,15 @@ "dev": true }, "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", - "node-releases": "^2.0.2", + "node-releases": "^2.0.3", "picocolors": "^1.0.0" } }, @@ -8279,9 +8279,9 @@ } }, "electron-to-chromium": { - "version": "1.4.114", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.114.tgz", - "integrity": "sha512-gRwLpVYWHGbERPU6o8pKfR168V6enWEXzZc6zQNNXbgJ7UJna+9qzAIHY94+9KOv71D/CH+QebLA9pChD2q8zA==", + "version": "1.4.119", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.119.tgz", + "integrity": "sha512-HPEmKy+d0xK8oCfEHc5t6wDsSAi1WmE3Ld08QrBjAPxaAzfuKP66VJ77lcTqxTt7GJmSE279s75mhW64Xh+4kw==", "dev": true }, "emoji-regex": { @@ -8420,12 +8420,12 @@ "dev": true }, "eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", - "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz", + "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.2.1", + "@eslint/eslintrc": "^1.2.2", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -10177,14 +10177,14 @@ } }, "npmlog": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", - "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "requires": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" } }, @@ -11528,14 +11528,14 @@ "dev": true }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, diff --git a/package.json b/package.json index 33fd9560..8f31d741 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "sdfv", "displayName": "DaCe SDFG Editor", "description": "Transform and optimize data-centric programs with a click of a button", - "version": "1.0.15", + "version": "1.1.0", "engines": { "vscode": "^1.55.0" }, diff --git a/src/dace_interface.ts b/src/dace_interface.ts index a79311cf..7b3b998a 100644 --- a/src/dace_interface.ts +++ b/src/dace_interface.ts @@ -856,4 +856,4 @@ export class DaCeInterface return this.daemonRunning; } -} \ No newline at end of file +} diff --git a/src/utils/sdfg_meta_dict.json b/src/utils/sdfg_meta_dict.json new file mode 100644 index 00000000..7fb294ec --- /dev/null +++ b/src/utils/sdfg_meta_dict.json @@ -0,0 +1 @@ +{"__reverse_type_lookup__": {"typeclass": {"metatype": "typeclass", "desc": "", "category": "General", "default": "int32", "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "tuple": {"metatype": "tuple", "desc": "", "category": "General", "default": []}, "bool": {"metatype": "bool", "desc": "", "category": "General", "default": false}, "StorageType": {"metatype": "StorageType", "desc": "Storage location", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "AllocationLifetime": {"metatype": "AllocationLifetime", "desc": "Data allocation span", "category": "General", "default": "Scope", "choices": ["Scope", "State", "SDFG", "Global", "Persistent"]}, "dict": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "str"}, "DebugInfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "SymbolicProperty": {"metatype": "SymbolicProperty", "desc": "The total allocated size of the array. Can be used for padding.", "category": "General", "default": 0}, "int": {"metatype": "int", "desc": "Allocation alignment in bytes (0 uses compiler-default)", "category": "General", "default": 0}, "list": {"metatype": "list", "desc": "", "category": "General", "default": [], "element_type": "pystr_to_symbolic"}, "SubsetProperty": {"metatype": "SubsetProperty", "desc": "Subset of elements to move from the data attached to this edge.", "category": "General", "default": null}, "DataProperty": {"metatype": "DataProperty", "desc": "Data descriptor attached to this memlet", "category": "General", "default": null}, "LambdaProperty": {"metatype": "LambdaProperty", "desc": "If set, defines a write-conflict resolution lambda function. The syntax of the lambda function receives two elements: `current` value and `new` value, and returns the value after resolution", "category": "General", "default": null}, "DataInstrumentationType": {"metatype": "DataInstrumentationType", "desc": "Instrument data contents at this access", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Save", "Restore"]}, "str": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "set": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "CodeBlock": {"metatype": "CodeBlock", "desc": "Tasklet code", "category": "General", "default": {"string_data": "", "language": "Python"}}, "InstrumentationType": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}, "SDFGReferenceProperty": {"metatype": "SDFGReferenceProperty", "desc": "The SDFG", "category": "General", "default": null}, "ScheduleType": {"metatype": "ScheduleType", "desc": "SDFG schedule", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "Range": {"metatype": "Range", "desc": "Ranges of map parameters", "category": "General", "default": {"type": "Range", "ranges": []}, "indirected": true}, "LibraryImplementationProperty": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null}, "Property": {"metatype": "Property", "desc": "A scalar which will be multiplied with A @ B before adding C", "category": "General", "default": 1}, "TilingType": {"metatype": "TilingType", "desc": "normal: the outerloop increments with tile_size, ceilrange: uses ceiling(N/tile_size) in outer range, number_of_tiles: tiles the map into the number of provided tiles, provide the number of tiles over tile_size", "category": "General", "default": "Normal", "choices": ["Normal", "CeilRange", "NumberOfTiles"]}, "DeviceType": {"category": "General", "metatype": "DeviceType", "choices": ["CPU", "GPU", "FPGA"]}, "Language": {"category": "General", "metatype": "Language", "choices": ["Python", "CPP", "OpenCL", "SystemVerilog", "MLIR"]}, "ReductionType": {"category": "General", "metatype": "ReductionType", "choices": ["Custom", "Min", "Max", "Sum", "Product", "Logical_And", "Bitwise_And", "Logical_Or", "Bitwise_Or", "Logical_Xor", "Bitwise_Xor", "Min_Location", "Max_Location", "Exchange", "Sub", "Div"]}, "Typeclasses": {"category": "General", "metatype": "Typeclasses", "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}}, "__libs__": {"MatMul": "dace.libraries.blas.nodes.matmul.MatMul", "Dot": "dace.libraries.blas.nodes.dot.Dot", "Gemv": "dace.libraries.blas.nodes.gemv.Gemv", "Gemm": "dace.libraries.blas.nodes.gemm.Gemm", "Ger": "dace.libraries.blas.nodes.ger.Ger", "BatchedMatMul": "dace.libraries.blas.nodes.batched_matmul.BatchedMatMul", "Transpose": "dace.libraries.blas.nodes.transpose.Transpose", "Axpy": "dace.libraries.blas.nodes.axpy.Axpy", "CodeLibraryNode": "dace.libraries.standard.nodes.code.CodeLibraryNode", "Gearbox": "dace.libraries.standard.nodes.gearbox.Gearbox", "Reduce": "dace.libraries.standard.nodes.reduce.Reduce"}, "__data_container_types__": {"Scalar": "Scalar", "Array": "Array", "Stream": "Stream", "View": "View", "Reference": "Reference"}, "Data": {"dtype": {"metatype": "typeclass", "desc": "", "category": "General", "default": "int32", "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "shape": {"metatype": "tuple", "desc": "", "category": "General", "default": []}, "transient": {"metatype": "bool", "desc": "", "category": "General", "default": false}, "storage": {"metatype": "StorageType", "desc": "Storage location", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "lifetime": {"metatype": "AllocationLifetime", "desc": "Data allocation span", "category": "General", "default": "Scope", "choices": ["Scope", "State", "SDFG", "Global", "Persistent"]}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "str"}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}}, "Scalar": {"allow_conflicts": {"metatype": "bool", "desc": "", "category": "General", "default": false}, "dtype": {"metatype": "typeclass", "desc": "", "category": "General", "default": "int32", "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "shape": {"metatype": "tuple", "desc": "", "category": "General", "default": []}, "transient": {"metatype": "bool", "desc": "", "category": "General", "default": false}, "storage": {"metatype": "StorageType", "desc": "Storage location", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "lifetime": {"metatype": "AllocationLifetime", "desc": "Data allocation span", "category": "General", "default": "Scope", "choices": ["Scope", "State", "SDFG", "Global", "Persistent"]}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "str"}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}}, "Array": {"allow_conflicts": {"metatype": "bool", "desc": "If enabled, allows more than one memlet to write to the same memory location without conflict resolution.", "category": "General", "default": false}, "strides": {"metatype": "tuple", "desc": "For each dimension, the number of elements to skip in order to obtain the next element in that dimension.", "category": "General", "default": []}, "total_size": {"metatype": "SymbolicProperty", "desc": "The total allocated size of the array. Can be used for padding.", "category": "General", "default": 0}, "offset": {"metatype": "tuple", "desc": "Initial offset to translate all indices by.", "category": "General", "default": []}, "may_alias": {"metatype": "bool", "desc": "This pointer may alias with other pointers in the same function", "category": "General", "default": false}, "alignment": {"metatype": "int", "desc": "Allocation alignment in bytes (0 uses compiler-default)", "category": "General", "default": 0}, "start_offset": {"metatype": "int", "desc": "Allocation offset elements for manual alignment (pre-padding)", "category": "General", "default": 0}, "dtype": {"metatype": "typeclass", "desc": "", "category": "General", "default": "int32", "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "shape": {"metatype": "tuple", "desc": "", "category": "General", "default": []}, "transient": {"metatype": "bool", "desc": "", "category": "General", "default": false}, "storage": {"metatype": "StorageType", "desc": "Storage location", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "lifetime": {"metatype": "AllocationLifetime", "desc": "Data allocation span", "category": "General", "default": "Scope", "choices": ["Scope", "State", "SDFG", "Global", "Persistent"]}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "str"}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}}, "Stream": {"offset": {"metatype": "list", "desc": "", "category": "General", "default": [], "element_type": "pystr_to_symbolic"}, "buffer_size": {"metatype": "SymbolicProperty", "desc": "Size of internal buffer.", "category": "General", "default": 0}, "dtype": {"metatype": "typeclass", "desc": "", "category": "General", "default": "int32", "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "shape": {"metatype": "tuple", "desc": "", "category": "General", "default": []}, "transient": {"metatype": "bool", "desc": "", "category": "General", "default": false}, "storage": {"metatype": "StorageType", "desc": "Storage location", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "lifetime": {"metatype": "AllocationLifetime", "desc": "Data allocation span", "category": "General", "default": "Scope", "choices": ["Scope", "State", "SDFG", "Global", "Persistent"]}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "str"}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}}, "View": {"allow_conflicts": {"metatype": "bool", "desc": "If enabled, allows more than one memlet to write to the same memory location without conflict resolution.", "category": "General", "default": false}, "strides": {"metatype": "tuple", "desc": "For each dimension, the number of elements to skip in order to obtain the next element in that dimension.", "category": "General", "default": []}, "total_size": {"metatype": "SymbolicProperty", "desc": "The total allocated size of the array. Can be used for padding.", "category": "General", "default": 0}, "offset": {"metatype": "tuple", "desc": "Initial offset to translate all indices by.", "category": "General", "default": []}, "may_alias": {"metatype": "bool", "desc": "This pointer may alias with other pointers in the same function", "category": "General", "default": false}, "alignment": {"metatype": "int", "desc": "Allocation alignment in bytes (0 uses compiler-default)", "category": "General", "default": 0}, "start_offset": {"metatype": "int", "desc": "Allocation offset elements for manual alignment (pre-padding)", "category": "General", "default": 0}, "dtype": {"metatype": "typeclass", "desc": "", "category": "General", "default": "int32", "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "shape": {"metatype": "tuple", "desc": "", "category": "General", "default": []}, "transient": {"metatype": "bool", "desc": "", "category": "General", "default": false}, "storage": {"metatype": "StorageType", "desc": "Storage location", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "lifetime": {"metatype": "AllocationLifetime", "desc": "Data allocation span", "category": "General", "default": "Scope", "choices": ["Scope", "State", "SDFG", "Global", "Persistent"]}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "str"}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}}, "Reference": {"allow_conflicts": {"metatype": "bool", "desc": "If enabled, allows more than one memlet to write to the same memory location without conflict resolution.", "category": "General", "default": false}, "strides": {"metatype": "tuple", "desc": "For each dimension, the number of elements to skip in order to obtain the next element in that dimension.", "category": "General", "default": []}, "total_size": {"metatype": "SymbolicProperty", "desc": "The total allocated size of the array. Can be used for padding.", "category": "General", "default": 0}, "offset": {"metatype": "tuple", "desc": "Initial offset to translate all indices by.", "category": "General", "default": []}, "may_alias": {"metatype": "bool", "desc": "This pointer may alias with other pointers in the same function", "category": "General", "default": false}, "alignment": {"metatype": "int", "desc": "Allocation alignment in bytes (0 uses compiler-default)", "category": "General", "default": 0}, "start_offset": {"metatype": "int", "desc": "Allocation offset elements for manual alignment (pre-padding)", "category": "General", "default": 0}, "dtype": {"metatype": "typeclass", "desc": "", "category": "General", "default": "int32", "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "shape": {"metatype": "tuple", "desc": "", "category": "General", "default": []}, "transient": {"metatype": "bool", "desc": "", "category": "General", "default": false}, "storage": {"metatype": "StorageType", "desc": "Storage location", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "lifetime": {"metatype": "AllocationLifetime", "desc": "Data allocation span", "category": "General", "default": "Scope", "choices": ["Scope", "State", "SDFG", "Global", "Persistent"]}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "str"}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}}, "Memlet": {"volume": {"metatype": "SymbolicProperty", "desc": "The exact number of elements moved using this memlet, or the maximum number if dynamic=True (with 0 as unbounded)", "category": "General", "default": 0}, "dynamic": {"metatype": "bool", "desc": "Is the number of elements moved determined at runtime (e.g., data dependent)", "category": "General", "default": false}, "subset": {"metatype": "SubsetProperty", "desc": "Subset of elements to move from the data attached to this edge.", "category": "General", "default": null}, "other_subset": {"metatype": "SubsetProperty", "desc": "Subset of elements after reindexing to the data not attached to this edge (e.g., for offsets and reshaping).", "category": "General", "default": null}, "data": {"metatype": "DataProperty", "desc": "Data descriptor attached to this memlet", "category": "General", "default": null}, "wcr": {"metatype": "LambdaProperty", "desc": "If set, defines a write-conflict resolution lambda function. The syntax of the lambda function receives two elements: `current` value and `new` value, and returns the value after resolution", "category": "General", "default": null}, "debuginfo": {"metatype": "DebugInfo", "desc": "Line information to track source and generated code", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "wcr_nonatomic": {"metatype": "bool", "desc": "If True, always generates non-conflicting (non-atomic) writes in resulting code", "category": "General", "default": false}, "allow_oob": {"metatype": "bool", "desc": "Bypass out-of-bounds validation", "category": "General", "default": false}}, "Node": {"in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "AccessNode": {"setzero": {"metatype": "bool", "desc": "Initialize to zero", "category": "General", "default": false}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "data": {"metatype": "DataProperty", "desc": "Data (array, stream, scalar) to access", "category": "General", "default": null}, "instrument": {"metatype": "DataInstrumentationType", "desc": "Instrument data contents at this access", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Save", "Restore"]}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "CodeNode": {"label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "Tasklet": {"code": {"metatype": "CodeBlock", "desc": "Tasklet code", "category": "General", "default": {"string_data": "", "language": "Python"}}, "state_fields": {"metatype": "list", "desc": "Fields that are added to the global state", "category": "General", "default": [], "element_type": "str"}, "code_global": {"metatype": "CodeBlock", "desc": "Global scope code needed for tasklet execution", "category": "General", "default": {"string_data": "", "language": "CPP"}}, "code_init": {"metatype": "CodeBlock", "desc": "Extra code that is called on DaCe runtime initialization", "category": "General", "default": {"string_data": "", "language": "CPP"}}, "code_exit": {"metatype": "CodeBlock", "desc": "Extra code that is called on DaCe runtime cleanup", "category": "General", "default": {"string_data": "", "language": "CPP"}}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "RTLTasklet": {"ip_cores": {"metatype": "dict", "desc": "A set of IP cores used by the tasklet.", "category": "General", "default": {}, "key_type": "str", "value_type": "dict"}, "code": {"metatype": "CodeBlock", "desc": "Tasklet code", "category": "General", "default": {"string_data": "", "language": "Python"}}, "state_fields": {"metatype": "list", "desc": "Fields that are added to the global state", "category": "General", "default": [], "element_type": "str"}, "code_global": {"metatype": "CodeBlock", "desc": "Global scope code needed for tasklet execution", "category": "General", "default": {"string_data": "", "language": "CPP"}}, "code_init": {"metatype": "CodeBlock", "desc": "Extra code that is called on DaCe runtime initialization", "category": "General", "default": {"string_data": "", "language": "CPP"}}, "code_exit": {"metatype": "CodeBlock", "desc": "Extra code that is called on DaCe runtime cleanup", "category": "General", "default": {"string_data": "", "language": "CPP"}}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "NestedSDFG": {"sdfg": {"metatype": "SDFGReferenceProperty", "desc": "The SDFG", "category": "General", "default": null}, "schedule": {"metatype": "ScheduleType", "desc": "SDFG schedule", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "symbol_mapping": {"metatype": "dict", "desc": "Mapping between internal symbols and their values, expressed as symbolic expressions", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "is_collapsed": {"metatype": "bool", "desc": "Show this node/scope/state as collapsed", "category": "General", "default": false}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}, "no_inline": {"metatype": "bool", "desc": "If True, this nested SDFG will not be inlined during simplification", "category": "General", "default": false}, "unique_name": {"metatype": "str", "desc": "Unique name of the SDFG", "category": "General", "default": ""}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "MapEntry": {"label": {"metatype": "str", "desc": "Label of the map", "category": "General", "default": "", "indirected": true}, "params": {"metatype": "list", "desc": "Mapped parameters", "category": "General", "default": [], "indirected": true, "element_type": "str"}, "range": {"metatype": "Range", "desc": "Ranges of map parameters", "category": "General", "default": {"type": "Range", "ranges": []}, "indirected": true}, "schedule": {"metatype": "ScheduleType", "desc": "Map schedule", "category": "General", "default": "Default", "indirected": true, "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "unroll": {"metatype": "bool", "desc": "Map unrolling", "category": "General", "default": false, "indirected": true}, "collapse": {"metatype": "int", "desc": "How many dimensions to collapse into the parallel range", "category": "General", "default": 1, "indirected": true}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}, "indirected": true}, "is_collapsed": {"metatype": "bool", "desc": "Show this node/scope/state as collapsed", "category": "General", "default": false, "indirected": true}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "indirected": true, "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "MapExit": {"in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "Map": {"label": {"metatype": "str", "desc": "Label of the map", "category": "General", "default": ""}, "params": {"metatype": "list", "desc": "Mapped parameters", "category": "General", "default": [], "element_type": "str"}, "range": {"metatype": "Range", "desc": "Ranges of map parameters", "category": "General", "default": {"type": "Range", "ranges": []}}, "schedule": {"metatype": "ScheduleType", "desc": "Map schedule", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "unroll": {"metatype": "bool", "desc": "Map unrolling", "category": "General", "default": false}, "collapse": {"metatype": "int", "desc": "How many dimensions to collapse into the parallel range", "category": "General", "default": 1}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "is_collapsed": {"metatype": "bool", "desc": "Show this node/scope/state as collapsed", "category": "General", "default": false}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}}, "ConsumeEntry": {"label": {"metatype": "str", "desc": "Name of the consume node", "category": "General", "default": "", "indirected": true}, "pe_index": {"metatype": "str", "desc": "Processing element identifier", "category": "General", "default": "", "indirected": true}, "num_pes": {"metatype": "SymbolicProperty", "desc": "Number of processing elements", "category": "General", "default": 1, "indirected": true}, "condition": {"metatype": "CodeBlock", "desc": "Quiescence condition", "category": "General", "default": null, "indirected": true}, "schedule": {"metatype": "ScheduleType", "desc": "Consume schedule", "category": "General", "default": "Default", "indirected": true, "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "chunksize": {"metatype": "int", "desc": "Maximal size of elements to consume at a time", "category": "General", "default": 1, "indirected": true}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}, "indirected": true}, "is_collapsed": {"metatype": "bool", "desc": "Show this node/scope/state as collapsed", "category": "General", "default": false, "indirected": true}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "indirected": true, "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "ConsumeExit": {"in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "Consume": {"label": {"metatype": "str", "desc": "Name of the consume node", "category": "General", "default": ""}, "pe_index": {"metatype": "str", "desc": "Processing element identifier", "category": "General", "default": ""}, "num_pes": {"metatype": "SymbolicProperty", "desc": "Number of processing elements", "category": "General", "default": 1}, "condition": {"metatype": "CodeBlock", "desc": "Quiescence condition", "category": "General", "default": null}, "schedule": {"metatype": "ScheduleType", "desc": "Consume schedule", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "chunksize": {"metatype": "int", "desc": "Maximal size of elements to consume at a time", "category": "General", "default": 1}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "is_collapsed": {"metatype": "bool", "desc": "Show this node/scope/state as collapsed", "category": "General", "default": false}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}}, "PipelineEntry": {"init_size": {"metatype": "SymbolicProperty", "desc": "Number of initialization iterations.", "category": "General", "default": 0, "indirected": true}, "init_overlap": {"metatype": "bool", "desc": "Whether to increment regular map indices during initialization.", "category": "General", "default": true, "indirected": true}, "drain_size": {"metatype": "SymbolicProperty", "desc": "Number of drain iterations.", "category": "General", "default": 1, "indirected": true}, "drain_overlap": {"metatype": "bool", "desc": "Whether to increment regular map indices during pipeline drain.", "category": "General", "default": true, "indirected": true}, "additional_iterators": {"metatype": "dict", "desc": "Additional iterators, managed by the user inside the scope.", "category": "General", "default": {}, "indirected": true}, "label": {"metatype": "str", "desc": "Label of the map", "category": "General", "default": "", "indirected": true}, "params": {"metatype": "list", "desc": "Mapped parameters", "category": "General", "default": [], "indirected": true, "element_type": "str"}, "range": {"metatype": "Range", "desc": "Ranges of map parameters", "category": "General", "default": {"type": "Range", "ranges": []}, "indirected": true}, "schedule": {"metatype": "ScheduleType", "desc": "Map schedule", "category": "General", "default": "Default", "indirected": true, "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "unroll": {"metatype": "bool", "desc": "Map unrolling", "category": "General", "default": false, "indirected": true}, "collapse": {"metatype": "int", "desc": "How many dimensions to collapse into the parallel range", "category": "General", "default": 1, "indirected": true}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}, "indirected": true}, "is_collapsed": {"metatype": "bool", "desc": "Show this node/scope/state as collapsed", "category": "General", "default": false, "indirected": true}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "indirected": true, "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "PipelineExit": {"in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "Pipeline": {"init_size": {"metatype": "SymbolicProperty", "desc": "Number of initialization iterations.", "category": "General", "default": 0}, "init_overlap": {"metatype": "bool", "desc": "Whether to increment regular map indices during initialization.", "category": "General", "default": true}, "drain_size": {"metatype": "SymbolicProperty", "desc": "Number of drain iterations.", "category": "General", "default": 1}, "drain_overlap": {"metatype": "bool", "desc": "Whether to increment regular map indices during pipeline drain.", "category": "General", "default": true}, "additional_iterators": {"metatype": "dict", "desc": "Additional iterators, managed by the user inside the scope.", "category": "General", "default": {}}, "label": {"metatype": "str", "desc": "Label of the map", "category": "General", "default": ""}, "params": {"metatype": "list", "desc": "Mapped parameters", "category": "General", "default": [], "element_type": "str"}, "range": {"metatype": "Range", "desc": "Ranges of map parameters", "category": "General", "default": {"type": "Range", "ranges": []}}, "schedule": {"metatype": "ScheduleType", "desc": "Map schedule", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "unroll": {"metatype": "bool", "desc": "Map unrolling", "category": "General", "default": false}, "collapse": {"metatype": "int", "desc": "How many dimensions to collapse into the parallel range", "category": "General", "default": 1}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "is_collapsed": {"metatype": "bool", "desc": "Show this node/scope/state as collapsed", "category": "General", "default": false}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}}, "LibraryNode": {"name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "SDFGState": {"is_collapsed": {"metatype": "bool", "desc": "Show this node/scope/state as collapsed", "category": "General", "default": false}, "nosync": {"metatype": "bool", "desc": "Do not synchronize at the end of the state", "category": "General", "default": false}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}, "executions": {"metatype": "SymbolicProperty", "desc": "The number of times this state gets executed (0 stands for unbounded)", "category": "General", "default": 0}, "dynamic_executions": {"metatype": "bool", "desc": "The number of executions of this state is dynamic", "category": "General", "default": true}, "ranges": {"metatype": "dict", "desc": "Variable ranges, typically within loops", "category": "General", "default": {}, "key_type": "symbol", "value_type": "Range"}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}}, "ProcessGrid": {"name": {"metatype": "str", "desc": "The process-grid's name.", "category": "General", "default": ""}, "is_subgrid": {"metatype": "bool", "desc": "If true, spanws sub-grids out of the parent process-grid.", "category": "General", "default": false}, "shape": {"metatype": "tuple", "desc": "The process-grid's shape.", "category": "General", "default": []}, "parent_grid": {"metatype": "str", "desc": "Name of the parent process-grid (mandatory if `is_subgrid` is true, otherwise ignored).", "category": "General", "default": null}, "color": {"metatype": "list", "desc": "The i-th entry specifies whether the i-th dimension is kept in the sub-grid or is dropped (mandatory if `is_subgrid` is true, otherwise ignored).", "category": "General", "default": null, "element_type": "int"}, "exact_grid": {"metatype": "SymbolicProperty", "desc": "If set then, out of all the sub-grids created, only the one that contains the rank with id `exact_grid` will be utilized for collective communication (optional if `is_subgrid` is true, otherwise ignored).", "category": "General", "default": null}, "root": {"metatype": "SymbolicProperty", "desc": "The root rank for collective communication.", "category": "General", "default": 0}}, "SubArray": {"name": {"metatype": "str", "desc": "The type's name.", "category": "General", "default": ""}, "dtype": {"metatype": "typeclass", "desc": "", "category": "General", "default": "int32", "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "shape": {"metatype": "tuple", "desc": "The array's shape.", "category": "General", "default": []}, "subshape": {"metatype": "tuple", "desc": "The sub-array's shape.", "category": "General", "default": []}, "pgrid": {"metatype": "str", "desc": "Name of the process-grid where the data are distributed.", "category": "General", "default": null}, "correspondence": {"metatype": "list", "desc": "Correspondence of the array's indices to the process grid's indices.", "category": "General", "default": null, "element_type": "int"}}, "RedistrArray": {"name": {"metatype": "str", "desc": "The redistribution's name.", "category": "General", "default": ""}, "array_a": {"metatype": "str", "desc": "Sub-array that will be redistributed.", "category": "General", "default": null}, "array_b": {"metatype": "str", "desc": "Output sub-array.", "category": "General", "default": null}}, "LogicalGroup": {"nodes": {"metatype": "list", "desc": "Nodes in this group given by [State, Node] id tuples", "category": "General", "default": [], "element_type": "tuple"}, "states": {"metatype": "list", "desc": "States in this group given by their ids", "category": "General", "default": [], "element_type": "int"}, "name": {"metatype": "str", "desc": "Logical group name", "category": "General", "default": ""}, "color": {"metatype": "str", "desc": "Color for the group, given as a hexadecimal string", "category": "General", "default": ""}}, "InterstateEdge": {"assignments": {"metatype": "dict", "desc": "Assignments to perform upon transition (e.g., 'x=x+1; y = 0')", "category": "General", "default": {}}, "condition": {"metatype": "CodeBlock", "desc": "Transition condition", "category": "General", "default": {"string_data": "1", "language": "Python"}}}, "SDFG": {"arg_names": {"metatype": "list", "desc": "Ordered argument names (used for calling conventions).", "category": "General", "default": [], "element_type": "str"}, "constants_prop": {"metatype": "dict", "desc": "Compile-time constants", "category": "General", "default": {}}, "_arrays": {"metatype": "dict", "desc": "Data descriptors for this SDFG", "category": "General", "default": {}}, "symbols": {"metatype": "dict", "desc": "Global symbols for this SDFG", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "instrument": {"metatype": "InstrumentationType", "desc": "Measure execution statistics with given method", "category": "General", "default": "No_Instrumentation", "choices": ["No_Instrumentation", "Timer", "PAPI_Counters", "GPU_Events", "FPGA"]}, "global_code": {"metatype": "dict", "desc": "Code generated in a global scope on the output files.", "category": "General", "default": {}, "key_type": "str", "value_type": "CodeBlock"}, "init_code": {"metatype": "dict", "desc": "Code generated in the `__dace_init` function.", "category": "General", "default": {}, "key_type": "str", "value_type": "CodeBlock"}, "exit_code": {"metatype": "dict", "desc": "Code generated in the `__dace_exit` function.", "category": "General", "default": {}, "key_type": "str", "value_type": "CodeBlock"}, "orig_sdfg": {"metatype": "SDFGReferenceProperty", "desc": "", "category": "General", "default": null}, "transformation_hist": {"metatype": "list", "desc": "", "category": "General", "default": []}, "logical_groups": {"metatype": "list", "desc": "Logical groupings of nodes and edges", "category": "General", "default": [], "element_type": "LogicalGroup"}, "openmp_sections": {"metatype": "bool", "desc": "Whether to generate OpenMP sections in code", "category": "General", "default": true}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "_pgrids": {"metatype": "dict", "desc": "Process-grid descriptors for this SDFG", "category": "General", "default": {}, "key_type": "str", "value_type": "ProcessGrid"}, "_subarrays": {"metatype": "dict", "desc": "Sub-array descriptors for this SDFG", "category": "General", "default": {}, "key_type": "str", "value_type": "SubArray"}, "_rdistrarrays": {"metatype": "dict", "desc": "Sub-array redistribution descriptors for this SDFG", "category": "General", "default": {}, "key_type": "str", "value_type": "RedistrArray"}, "callback_mapping": {"metatype": "dict", "desc": "Mapping between callback name and its original callback (for when the same callback is used with a different signature)", "category": "General", "default": {}, "key_type": "str", "value_type": "str"}}, "PatternTransformation": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "SingleStateTransformation": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "MultiStateTransformation": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandTransformation": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "SubgraphTransformation": {"sdfg_id": {"metatype": "int", "desc": "ID of SDFG to transform", "category": "General", "default": 0}, "state_id": {"metatype": "int", "desc": "ID of state to transform subgraph within, or -1 to transform the SDFG", "category": "General", "default": 0}, "subgraph": {"metatype": "set", "desc": "Subgraph in transformation instance", "category": "General", "default": []}}, "SpecializeMatMul": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.blas.nodes.matmul.MatMul": {"name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["specialize"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "OpenBLAS": {}, "IntelMKL": {}, "cuBLAS": {}, "ExpandDotPure": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandDotOpenBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandDotMKL": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandDotCuBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandDotFpgaPartialSums": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandDotFpgaAccumulate": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.blas.nodes.dot.Dot": {"n": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": null}, "accumulator_type": {"metatype": "typeclass", "desc": "Accumulator or intermediate storage type", "category": "General", "default": null, "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["pure", "OpenBLAS", "MKL", "cuBLAS", "FPGA_PartialSums", "FPGA_Accumulate"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "ExpandGemvPure": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemvFpgaAccumulate": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemvFpgaTilesByColumn": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemvCuBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemvOpenBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemvMKL": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemvPBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.blas.nodes.gemv.Gemv": {"alpha": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": 1}, "beta": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": 0}, "transA": {"metatype": "bool", "desc": "Whether to transpose A before multiplying", "category": "General", "default": false}, "n": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": null}, "m": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": null}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["pure", "OpenBLAS", "MKL", "cuBLAS", "FPGA_Accumulate", "FPGA_TilesByColumn", "PBLAS"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "ExpandGemmPure": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemmOpenBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemmMKL": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemmCuBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGemmPBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.blas.nodes.gemm.Gemm": {"transA": {"metatype": "bool", "desc": "Whether to transpose A before multiplying", "category": "General", "default": false}, "transB": {"metatype": "bool", "desc": "Whether to transpose B before multiplying", "category": "General", "default": false}, "alpha": {"metatype": "Property", "desc": "A scalar which will be multiplied with A @ B before adding C", "category": "General", "default": 1}, "beta": {"metatype": "Property", "desc": "A scalar which will be multiplied with C before adding C", "category": "General", "default": 0}, "cin": {"metatype": "bool", "desc": "Whether to have a _cin connector when beta != 0", "category": "General", "default": true}, "algorithm": {"metatype": "str", "desc": "If applicable, chooses the vendor-provided implementation (algorithm) for the multiplication", "category": "General", "default": null}, "accumulator_type": {"metatype": "typeclass", "desc": "Accumulator or intermediate storage type used in multiplication", "category": "General", "default": null, "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "compute_type": {"metatype": "str", "desc": "If applicable, overrides computation type (CUBLAS-specific, see ``cublasComputeType_t``)", "category": "General", "default": null}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["pure", "MKL", "OpenBLAS", "cuBLAS", "PBLAS", "FPGA1DSystolic"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "ExpandGerPure": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGerFpga": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.blas.nodes.ger.Ger": {"n_tile_size": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": 1}, "m_tile_size": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": 1}, "n": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": "n"}, "m": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": "m"}, "alpha": {"metatype": "SymbolicProperty", "desc": "A scalar which will be multiplied with the outer product x*yT before adding matrix A", "category": "General", "default": 1}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["pure", "FPGA"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "ExpandBatchedMatMulPure": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandBatchedMatMulMKL": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandBatchedMatMulOpenBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandBatchedMatMulCuBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.blas.nodes.batched_matmul.BatchedMatMul": {"transA": {"metatype": "bool", "desc": "Whether to transpose A before multiplying", "category": "General", "default": false}, "transB": {"metatype": "bool", "desc": "Whether to transpose B before multiplying", "category": "General", "default": false}, "alpha": {"metatype": "Property", "desc": "A scalar which will be multiplied with A @ B before adding C", "category": "General", "default": 1}, "beta": {"metatype": "Property", "desc": "A scalar which will be multiplied with C before adding C", "category": "General", "default": 0}, "algorithm": {"metatype": "str", "desc": "If applicable, chooses the vendor-provided implementation (algorithm) for the multiplication", "category": "General", "default": null}, "accumulator_type": {"metatype": "typeclass", "desc": "Accumulator or intermediate storage type used in multiplication", "category": "General", "default": null, "choices": ["bool", "bool_", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float16", "float32", "float64", "complex64", "complex128"]}, "compute_type": {"metatype": "str", "desc": "If applicable, overrides computation type (CUBLAS-specific, see ``cublasComputeType_t``)", "category": "General", "default": null}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["pure", "MKL", "OpenBLAS", "cuBLAS"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "ExpandTransposePure": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandTransposeMKL": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandTransposeOpenBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandTransposeCuBLAS": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.blas.nodes.transpose.Transpose": {"dtype": {"metatype": "typeclass", "desc": "", "category": "General", "default": null}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["pure", "MKL", "OpenBLAS", "cuBLAS"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "ExpandAxpyVectorized": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandAxpyFpga": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.blas.nodes.axpy.Axpy": {"a": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": "a"}, "n": {"metatype": "SymbolicProperty", "desc": "", "category": "General", "default": "n"}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["pure", "fpga"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "dace.libraries.standard.nodes.code.CodeLibraryNode": {"inputdict": {"metatype": "dict", "desc": "", "category": "General", "default": {}}, "outputdict": {"metatype": "dict", "desc": "", "category": "General", "default": {}}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["default"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "Expansion": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandGearbox": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.standard.nodes.gearbox.Gearbox": {"size": {"metatype": "SymbolicProperty", "desc": "Number of wide vectors to convert to/from narrow vectors.", "category": "General", "default": 0}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["pure"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "CUDA": {}, "ExpandReducePure": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandReducePureSequentialDim": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandReduceOpenMP": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandReduceCUDADevice": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandReduceCUDABlock": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandReduceCUDABlockAll": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "ExpandReduceFPGAPartialReduction": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "dace.libraries.standard.nodes.reduce.Reduce": {"axes": {"metatype": "list", "desc": "", "category": "General", "default": null, "element_type": "int"}, "wcr": {"metatype": "LambdaProperty", "desc": "", "category": "General", "default": "(lambda a, b: a)"}, "identity": {"metatype": "Property", "desc": "", "category": "General", "default": null}, "name": {"metatype": "str", "desc": "Name of node", "category": "General", "default": ""}, "implementation": {"metatype": "LibraryImplementationProperty", "desc": "Which implementation this library node will expand into.Must match a key in the list of possible implementations.", "category": "General", "default": null, "choices": ["pure", "pure-seq", "OpenMP", "CUDA (device)", "CUDA (block)", "CUDA (block allreduce)", "FPGAPartialReduction"]}, "schedule": {"metatype": "ScheduleType", "desc": "If set, determines the default device mapping of the node upon expansion, if expanded to a nested SDFG.", "category": "General", "default": "Default", "choices": ["Default", "Sequential", "MPI", "CPU_Multicore", "Unrolled", "SVE_Map", "GPU_Default", "GPU_Device", "GPU_ThreadBlock", "GPU_ThreadBlock_Dynamic", "GPU_Persistent", "FPGA_Device"]}, "debuginfo": {"metatype": "DebugInfo", "desc": "", "category": "General", "default": {"type": "DebugInfo", "start_line": 0, "end_line": 0, "start_column": 0, "end_column": 0, "filename": null}}, "label": {"metatype": "str", "desc": "Name of the CodeNode", "category": "General", "default": ""}, "location": {"metatype": "dict", "desc": "Full storage location identifier (e.g., rank, GPU ID)", "category": "General", "default": {}, "key_type": "str", "value_type": "pystr_to_symbolic"}, "environments": {"metatype": "set", "desc": "Environments required by CMake to build and run this code node.", "category": "General", "default": []}, "in_connectors": {"metatype": "dict", "desc": "A set of input connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}, "out_connectors": {"metatype": "dict", "desc": "A set of output connectors for this node.", "category": "General", "default": {}, "key_type": "str", "value_type": "typeclass"}}, "MapCollapse": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "MapReduceFusion": {"no_init": {"metatype": "bool", "desc": "If enabled, does not create initialization states for reduce nodes with identity", "category": "General", "default": false}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "MapDimShuffle": {"parameters": {"metatype": "tuple", "desc": "Desired order of map parameters", "category": "General", "default": []}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "TrivialMapElimination": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "TrivialMapRangeElimination": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "StripMining": {"dim_idx": {"metatype": "int", "desc": "Index of dimension to be strip-mined", "category": "General", "default": -1}, "new_dim_prefix": {"metatype": "str", "desc": "Prefix for new dimension name", "category": "General", "default": "tile"}, "tile_size": {"metatype": "SymbolicProperty", "desc": "Tile size of strip-mined dimension, or number of tiles if tiling_type=number_of_tiles", "category": "General", "default": 64}, "tile_stride": {"metatype": "SymbolicProperty", "desc": "Stride between two tiles of the strip-mined dimension. If zero, it is set equal to the tile size.", "category": "General", "default": 0}, "tile_offset": {"metatype": "SymbolicProperty", "desc": "Tile stride offset (negative)", "category": "General", "default": 0}, "divides_evenly": {"metatype": "bool", "desc": "Tile size divides dimension range evenly?", "category": "General", "default": false}, "strided": {"metatype": "bool", "desc": "Continuous (false) or strided (true) elements in tile", "category": "General", "default": false}, "tiling_type": {"metatype": "TilingType", "desc": "normal: the outerloop increments with tile_size, ceilrange: uses ceiling(N/tile_size) in outer range, number_of_tiles: tiles the map into the number of provided tiles, provide the number of tiles over tile_size", "category": "General", "default": "Normal", "choices": ["Normal", "CeilRange", "NumberOfTiles"]}, "skew": {"metatype": "bool", "desc": "If True, offsets inner tile back such that it starts with zero", "category": "General", "default": false}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "MapTiling": {"prefix": {"metatype": "str", "desc": "Prefix for new range symbols", "category": "General", "default": "tile"}, "tile_sizes": {"metatype": "tuple", "desc": "Tile size per dimension", "category": "General", "default": ["128", "128", "128"]}, "strides": {"metatype": "tuple", "desc": "Tile stride (enables overlapping tiles). If empty, matches tile", "category": "General", "default": []}, "tile_offset": {"metatype": "tuple", "desc": "Negative Stride offset per dimension", "category": "General", "default": null}, "divides_evenly": {"metatype": "bool", "desc": "Tile size divides dimension length evenly", "category": "General", "default": false}, "tile_trivial": {"metatype": "bool", "desc": "Tiles even if tile_size is 1", "category": "General", "default": false}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "MapTilingWithOverlap": {"lower_overlap": {"metatype": "tuple", "desc": "Lower overlap per dimension", "category": "General", "default": []}, "upper_overlap": {"metatype": "tuple", "desc": "Upper overlap per dimension", "category": "General", "default": []}, "prefix": {"metatype": "str", "desc": "Prefix for new range symbols", "category": "General", "default": "tile"}, "tile_sizes": {"metatype": "tuple", "desc": "Tile size per dimension", "category": "General", "default": ["128", "128", "128"]}, "strides": {"metatype": "tuple", "desc": "Tile stride (enables overlapping tiles). If empty, matches tile", "category": "General", "default": []}, "tile_offset": {"metatype": "tuple", "desc": "Negative Stride offset per dimension", "category": "General", "default": null}, "divides_evenly": {"metatype": "bool", "desc": "Tile size divides dimension length evenly", "category": "General", "default": false}, "tile_trivial": {"metatype": "bool", "desc": "Tiles even if tile_size is 1", "category": "General", "default": false}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "BufferTiling": {"tile_sizes": {"metatype": "tuple", "desc": "Tile size per dimension", "category": "General", "default": ["128", "128", "128"]}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "Vectorization": {"vector_len": {"metatype": "int", "desc": "Vector length", "category": "General", "default": 4}, "propagate_parent": {"metatype": "bool", "desc": "Propagate vector length through parent SDFGs", "category": "General", "default": false}, "strided_map": {"metatype": "bool", "desc": "Use strided map range (jump by vector length) instead of modifying memlets", "category": "General", "default": true}, "preamble": {"metatype": "bool", "desc": "Force creation or skipping a preamble map without vectors", "category": "General", "default": null}, "postamble": {"metatype": "bool", "desc": "Force creation or skipping a postamble map without vectors", "category": "General", "default": null}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "StreamTransient": {"with_buffer": {"metatype": "bool", "desc": "Use an intermediate buffer for accumulation", "category": "General", "default": true}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "AccumulateTransient": {"array": {"metatype": "str", "desc": "Array to create local storage for (if empty, first available)", "category": "General", "default": null}, "identity": {"metatype": "SymbolicProperty", "desc": "Identity value to set", "category": "General", "default": null}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "LocalStorage": {"array": {"metatype": "str", "desc": "Array to create local storage for (if empty, first available)", "category": "General", "default": null}, "prefix": {"metatype": "str", "desc": "Prefix for new data node", "category": "General", "default": "trans_"}, "create_array": {"metatype": "bool", "desc": "if false, it does not create a new array.", "category": "General", "default": true}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "InLocalStorage": {"array": {"metatype": "str", "desc": "Array to create local storage for (if empty, first available)", "category": "General", "default": null}, "prefix": {"metatype": "str", "desc": "Prefix for new data node", "category": "General", "default": "trans_"}, "create_array": {"metatype": "bool", "desc": "if false, it does not create a new array.", "category": "General", "default": true}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "OutLocalStorage": {"array": {"metatype": "str", "desc": "Array to create local storage for (if empty, first available)", "category": "General", "default": null}, "prefix": {"metatype": "str", "desc": "Prefix for new data node", "category": "General", "default": "trans_"}, "create_array": {"metatype": "bool", "desc": "if false, it does not create a new array.", "category": "General", "default": true}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "StreamingMemory": {"buffer_size": {"metatype": "int", "desc": "Set buffer size for the newly-created stream", "category": "General", "default": 1}, "storage": {"metatype": "StorageType", "desc": "Set storage type for the newly-created stream", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "use_memory_buffering": {"metatype": "bool", "desc": "Set if memory buffering should be used.", "category": "General", "default": false}, "memory_buffering_target_bytes": {"metatype": "int", "desc": "Set bytes read/written from memory if memory buffering is enabled.", "category": "General", "default": 64}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "StreamingComposition": {"buffer_size": {"metatype": "int", "desc": "Set buffer size for the newly-created stream", "category": "General", "default": 1}, "storage": {"metatype": "StorageType", "desc": "Set storage type for the newly-created stream", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "PruneConnectors": {"remove_unused_containers": {"metatype": "bool", "desc": "If True, remove unused containers from parent SDFG.", "category": "General", "default": false}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "TrivialTaskletElimination": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "CopyToDevice": {"storage": {"metatype": "StorageType", "desc": "Nested SDFG storage", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "GPUTransformMap": {"fullcopy": {"metatype": "bool", "desc": "Copy whole arrays rather than used subset", "category": "General", "default": false}, "toplevel_trans": {"metatype": "bool", "desc": "Make all GPU transients top-level", "category": "General", "default": false}, "register_trans": {"metatype": "bool", "desc": "Make all transients inside GPU maps registers", "category": "General", "default": false}, "sequential_innermaps": {"metatype": "bool", "desc": "Make all internal maps Sequential", "category": "General", "default": false}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "GPUTransformLocalStorage": {"fullcopy": {"metatype": "bool", "desc": "Copy whole arrays rather than used subset", "category": "General", "default": false}, "nested_seq": {"metatype": "bool", "desc": "Makes nested code semantically-equivalent to single-core code,transforming nested maps and memory into sequential and local memory respectively.", "category": "General", "default": true}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "MPITransformMap": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "WarpTiling": {"warp_size": {"metatype": "int", "desc": "Hardware warp size", "category": "General", "default": 32}, "replicate_maps": {"metatype": "bool", "desc": "Replicate tiled maps that lead to multiple other tiled maps", "category": "General", "default": true}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "BankSplit": {"split_array_info": {"metatype": "Property", "desc": "Describes how many times this array is split in each dimension, where the k-th number describes how many times dimension k is split. If the k-th number is 1 this means that the array is not split in the k-th dimension at all. If None, then the transform will split the first dimension exactly shape[0] times.", "category": "General", "default": null}, "default_to_storage": {"metatype": "StorageType", "desc": "The storage type of involved arrays will be set to the value of this property if they have Default storage type. ", "category": "General", "default": "CPU_Heap"}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "MatrixProductTranspose": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "GPUPersistentKernel": {"validate": {"metatype": "bool", "desc": "Validate the sdfg and the nested sdfg", "category": "General", "default": true}, "include_in_assignment": {"metatype": "bool", "desc": "Wether to include global variable assignments of the edge going into the kernel inside the kernel or have it happen on the outside. If the assignment is needed in the kernel, it needs to be included.", "category": "General", "default": true}, "kernel_prefix": {"metatype": "str", "desc": "Name of the kernel. If no value is given the kerenl will be refrenced as `kernel`, if a value is given the kernel will be named `_kernel`. This is useful if multiple kernels are created.", "category": "General", "default": ""}, "sdfg_id": {"metatype": "int", "desc": "ID of SDFG to transform", "category": "General", "default": 0}, "state_id": {"metatype": "int", "desc": "ID of state to transform subgraph within, or -1 to transform the SDFG", "category": "General", "default": 0}, "subgraph": {"metatype": "set", "desc": "Subgraph in transformation instance", "category": "General", "default": []}}, "ReduceExpansion": {"debug": {"metatype": "bool", "desc": "Debug Info", "category": "General", "default": false}, "create_in_transient": {"metatype": "bool", "desc": "Create local in-transientin registers", "category": "General", "default": false}, "create_out_transient": {"metatype": "bool", "desc": "Create local out-transientin registers", "category": "General", "default": false}, "reduce_implementation": {"metatype": "str", "desc": "Reduce implementation of inner reduce. If specified,overrides any existing implementations", "category": "General", "default": null}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "MultiExpansion": {"debug": {"metatype": "bool", "desc": "Debug Mode", "category": "General", "default": false}, "sequential_innermaps": {"metatype": "bool", "desc": "Make all inner maps that arecreated during expansion sequential", "category": "General", "default": false}, "check_contiguity": {"metatype": "bool", "desc": "Don't allow expansion if last (contiguous)dimension is partially split", "category": "General", "default": false}, "permutation_only": {"metatype": "bool", "desc": "Only allow permutations without inner splits", "category": "General", "default": false}, "allow_offset": {"metatype": "bool", "desc": "Offset ranges to zero", "category": "General", "default": true}, "sdfg_id": {"metatype": "int", "desc": "ID of SDFG to transform", "category": "General", "default": 0}, "state_id": {"metatype": "int", "desc": "ID of state to transform subgraph within, or -1 to transform the SDFG", "category": "General", "default": 0}, "subgraph": {"metatype": "set", "desc": "Subgraph in transformation instance", "category": "General", "default": []}}, "SubgraphFusion": {"debug": {"metatype": "bool", "desc": "Show debug info", "category": "General", "default": false}, "transient_allocation": {"metatype": "StorageType", "desc": "Storage Location to push transients to that are fully contained within the subgraph.", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "schedule_innermaps": {"metatype": "ScheduleType", "desc": "Schedule of inner maps. If none, keeps schedule.", "category": "General", "default": null}, "consolidate": {"metatype": "bool", "desc": "Consolidate edges that enter and exit the fused map.", "category": "General", "default": false}, "propagate": {"metatype": "bool", "desc": "Propagate memlets of edges that enter and exit the fused map.Disable if this causes problems (e.g., if memlet propagation doesnot work correctly).", "category": "General", "default": true}, "disjoint_subsets": {"metatype": "bool", "desc": "Check for disjoint subsets in can_be_applied. If multipleaccess nodes pointing to the same data appear within a subgraphto be fused, this check confirms that their access sets areindependent per iteration space to avoid race conditions.", "category": "General", "default": true}, "keep_global": {"metatype": "list", "desc": "A list of array names to treat as non-transients and not compress", "category": "General", "default": [], "element_type": "str"}, "sdfg_id": {"metatype": "int", "desc": "ID of SDFG to transform", "category": "General", "default": 0}, "state_id": {"metatype": "int", "desc": "ID of state to transform subgraph within, or -1 to transform the SDFG", "category": "General", "default": 0}, "subgraph": {"metatype": "set", "desc": "Subgraph in transformation instance", "category": "General", "default": []}}, "FPGATransformSDFG": {"promote_global_trans": {"metatype": "bool", "desc": "If True, transient arrays that are fully internal are pulled out so that they can be allocated on the host.", "category": "General", "default": true}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "GPUTransformSDFG": {"toplevel_trans": {"metatype": "bool", "desc": "Make all GPU transients top-level", "category": "General", "default": true}, "register_trans": {"metatype": "bool", "desc": "Make all transients inside GPU maps registers", "category": "General", "default": true}, "sequential_innermaps": {"metatype": "bool", "desc": "Make all internal maps Sequential", "category": "General", "default": true}, "skip_scalar_tasklets": {"metatype": "bool", "desc": "If True, does not transform tasklets that manipulate (Default-stored) scalars", "category": "General", "default": true}, "simplify": {"metatype": "bool", "desc": "Reapply simplification after modifying graph", "category": "General", "default": true}, "exclude_copyin": {"metatype": "str", "desc": "Exclude these arrays from being copied into the device (comma-separated)", "category": "General", "default": ""}, "exclude_tasklets": {"metatype": "str", "desc": "Exclude these tasklets from being processed as CPU tasklets (comma-separated)", "category": "General", "default": ""}, "exclude_copyout": {"metatype": "str", "desc": "Exclude these arrays from being copied out of the device (comma-separated)", "category": "General", "default": ""}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "InlineSDFG": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "InlineTransients": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "RefineNestedAccess": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "NestSDFG": {"promote_global_trans": {"metatype": "bool", "desc": "Promotes transients to be allocated once", "category": "General", "default": false}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "LoopUnroll": {"count": {"metatype": "int", "desc": "Number of iterations to unroll, or zero for all iterations (loop must be constant-sized for 0)", "category": "General", "default": 0}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "LoopPeeling": {"begin": {"metatype": "bool", "desc": "If True, peels loop from beginning (first `count` iterations), otherwise peels last `count` iterations.", "category": "General", "default": true}, "count": {"metatype": "int", "desc": "Number of iterations to unroll, or zero for all iterations (loop must be constant-sized for 0)", "category": "General", "default": 0}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "LoopToMap": {"itervar": {"metatype": "str", "desc": "The name of the iteration variable (optional).", "category": "General", "default": null}, "sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "InlineMultistateSDFG": {"sdfg_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "state_id": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}, "_subgraph": {"metatype": "dict", "desc": "", "category": "(Debug)", "default": {}, "key_type": "int", "value_type": "int"}, "expr_index": {"metatype": "int", "desc": "", "category": "(Debug)", "default": 0}}, "StencilTiling": {"debug": {"metatype": "bool", "desc": "Debug mode", "category": "General", "default": false}, "prefix": {"metatype": "str", "desc": "Prefix for new inner tiled range symbols", "category": "General", "default": "stencil"}, "strides": {"metatype": "tuple", "desc": "Tile stride", "category": "General", "default": ["1"]}, "schedule": {"metatype": "ScheduleType", "desc": "Dace.Dtypes.ScheduleType of Inner Maps", "category": "General", "default": "Default"}, "unroll_loops": {"metatype": "bool", "desc": "Unroll Inner Loops if they have Size > 1", "category": "General", "default": false}, "sdfg_id": {"metatype": "int", "desc": "ID of SDFG to transform", "category": "General", "default": 0}, "state_id": {"metatype": "int", "desc": "ID of state to transform subgraph within, or -1 to transform the SDFG", "category": "General", "default": 0}, "subgraph": {"metatype": "set", "desc": "Subgraph in transformation instance", "category": "General", "default": []}}, "OnTheFlyMapFusion": {"sdfg_id": {"metatype": "int", "desc": "ID of SDFG to transform", "category": "General", "default": 0}, "state_id": {"metatype": "int", "desc": "ID of state to transform subgraph within, or -1 to transform the SDFG", "category": "General", "default": 0}, "subgraph": {"metatype": "set", "desc": "Subgraph in transformation instance", "category": "General", "default": []}}, "SubgraphOTFFusion": {"sdfg_id": {"metatype": "int", "desc": "ID of SDFG to transform", "category": "General", "default": 0}, "state_id": {"metatype": "int", "desc": "ID of state to transform subgraph within, or -1 to transform the SDFG", "category": "General", "default": 0}, "subgraph": {"metatype": "set", "desc": "Subgraph in transformation instance", "category": "General", "default": []}}, "CompositeFusion": {"debug": {"metatype": "bool", "desc": "Debug mode", "category": "General", "default": false}, "allow_expansion": {"metatype": "bool", "desc": "Allow MultiExpansion first", "category": "General", "default": true}, "allow_tiling": {"metatype": "bool", "desc": "Allow StencilTiling (after MultiExpansion)", "category": "General", "default": false}, "transient_allocation": {"metatype": "StorageType", "desc": "Storage Location to push transients to that are fully contained within the subgraph.", "category": "General", "default": "Default", "choices": ["Default", "Register", "CPU_Pinned", "CPU_Heap", "CPU_ThreadLocal", "GPU_Global", "GPU_Shared", "FPGA_Global", "FPGA_Local", "FPGA_Registers", "FPGA_ShiftRegister", "SVE_Register"]}, "schedule_innermaps": {"metatype": "ScheduleType", "desc": "Schedule of inner fused maps", "category": "General", "default": null}, "stencil_unroll_loops": {"metatype": "bool", "desc": "Unroll inner stencil loops if they have size > 1", "category": "General", "default": false}, "stencil_strides": {"metatype": "tuple", "desc": "Stencil tile stride", "category": "General", "default": ["1"]}, "expansion_split": {"metatype": "bool", "desc": "Allow MultiExpansion to split up maps, if enabled", "category": "General", "default": true}, "sdfg_id": {"metatype": "int", "desc": "ID of SDFG to transform", "category": "General", "default": 0}, "state_id": {"metatype": "int", "desc": "ID of state to transform subgraph within, or -1 to transform the SDFG", "category": "General", "default": 0}, "subgraph": {"metatype": "set", "desc": "Subgraph in transformation instance", "category": "General", "default": []}}} \ No newline at end of file diff --git a/src/webclients/components/sdfv/properties/properties.ts b/src/webclients/components/sdfv/properties/properties.ts index a17d0f55..148e4719 100644 --- a/src/webclients/components/sdfv/properties/properties.ts +++ b/src/webclients/components/sdfv/properties/properties.ts @@ -81,7 +81,7 @@ export abstract class Property { } export class KeyProperty { - /* + /* * Note: This does not extend the Property class by design, because it * behaves slightly differently. * TODO(later): Adapt this in such a way, that it can be made a coherent @@ -118,6 +118,7 @@ export class KeyProperty { propertyDescriptor ); delete this.target[this.key]; + this.key = res.value; } return res.valueChanged; } @@ -126,6 +127,10 @@ export class KeyProperty { return this.input; } + public getKey(): string { + return this.key; + } + } export class ValueProperty extends Property { @@ -149,6 +154,12 @@ export class ValueProperty extends Property { if (this.datatype === 'LambdaProperty') { if (value === '' || value === undefined) value = null; + } else if (this.input.attr('type') === 'number') { + try { + value = parseInt(value); + } catch { + // ignored. + } } return { @@ -295,12 +306,19 @@ export class ListProperty extends Property { key: string, subkey: string | undefined, datatype: string, - protected propertiesList: Property[] + protected propertiesList: Property[], + protected originalValue: any ) { super(element, xform, target, key, subkey, datatype); } public getValue(): PropertyValueReturn { + if (!this.propertiesList.length) + return { + value: this.originalValue, + valueChanged: false, + }; + const newList = []; for (let i = 0; i < this.propertiesList.length; i++) { const res = this.propertiesList[i].getValue(); @@ -331,8 +349,9 @@ export class ListProperty extends Property { } export type PropertyEntry = { + key: string | undefined, keyProp: KeyProperty | undefined, - valProp: Property | undefined, + valProp: Property[] | undefined, deleteBtn: JQuery | undefined, row: JQuery, }; @@ -348,33 +367,43 @@ export class DictProperty extends Property { key: string, subkey: string | undefined, datatype: string, - protected properties: DictPropertyList + protected properties: DictPropertyList, + protected originalValue: any ) { super(element, xform, target, key, subkey, datatype); } public getValue(): PropertyValueReturn { + if (!this.properties.length) + return { + value: this.originalValue, + valueChanged: false, + }; + const newDict: { [key: string]: any } = {}; let valueChanged = false; this.properties.forEach(prop => { - if (prop.keyProp && prop.valProp) { - const keyRes = prop.keyProp.getValue(); - const valRes = prop.valProp.getValue(); - if (keyRes !== undefined && keyRes.value !== undefined && - keyRes.value !== '') { - const valSubkey = prop.valProp.getSubkey(); - if (prop.valProp.getDatatype() === 'CodeBlock' && - valSubkey !== undefined) { - // For code properties, we need to write back the entire - // code property structure, including language info. - let codeVal = prop.valProp.getTarget()[ - prop.valProp.getKey() - ]; - codeVal[valSubkey] = valRes.value; - newDict[keyRes.value] = codeVal; - } else { - newDict[keyRes.value] = valRes.value; - } + if ((prop.keyProp || prop.key) && prop.valProp) { + const keyRes = prop.keyProp?.getValue(); + let keyVal = keyRes?.value; + if (!keyVal || keyVal === '') + keyVal = prop.key; + if (keyVal !== undefined && keyVal !== '') { + prop.valProp.forEach(vp => { + const valRes = vp.getValue(); + const valSubkey = vp.getSubkey(); + if (vp.getDatatype() === 'CodeBlock' && + valSubkey !== undefined) { + // For code properties, we need to write back the + // entire code property structure, including + // language info. + let codeVal = vp.getTarget()[vp.getKey()]; + codeVal[valSubkey] = valRes.value; + newDict[keyVal] = codeVal; + } else { + newDict[keyVal] = valRes.value; + } + }); valueChanged = true; } } @@ -483,12 +512,19 @@ export class RangeProperty extends Property { key: string, subkey: string | undefined, datatype: string, - protected rangeInputList: RangeInput[] + protected rangeInputList: RangeInput[], + protected originalValue: any ) { super(element, xform, target, key, subkey, datatype); } public getValue(): PropertyValueReturn { + if (!this.rangeInputList.length) + return { + value: this.originalValue, + valueChanged: false, + }; + let newRanges: Range[] = []; for (let i = 0; i < this.rangeInputList.length; i++) { let targetRange: Range = { @@ -528,4 +564,4 @@ export class RangeProperty extends Property { this.rangeInputList = rangeInputList; } -} \ No newline at end of file +} diff --git a/src/webclients/components/sdfv/renderer/vscode_renderer.ts b/src/webclients/components/sdfv/renderer/vscode_renderer.ts index bb5a4540..82282235 100644 --- a/src/webclients/components/sdfv/renderer/vscode_renderer.ts +++ b/src/webclients/components/sdfv/renderer/vscode_renderer.ts @@ -206,12 +206,13 @@ export class VSCodeRenderer extends SDFGRenderer { } public showSelectLibraryNodeDialog(callback: CallableFunction): void { - const sdfgMetaDict = VSCodeSDFV.getInstance().getMetaDict(); - if (sdfgMetaDict === null) { + if (!VSCodeSDFV.getInstance().getDaemonConnected()) { this.showNoDaemonDialog(); return; } + const sdfgMetaDict = VSCodeSDFV.getInstance().getMetaDict(); + const modalRet = createSingleUseModal( 'Select Library Node', true, '' ); diff --git a/src/webclients/components/sdfv/utils/attributes_table.ts b/src/webclients/components/sdfv/utils/attributes_table.ts index 554d0c65..4235e958 100644 --- a/src/webclients/components/sdfv/utils/attributes_table.ts +++ b/src/webclients/components/sdfv/utils/attributes_table.ts @@ -4,6 +4,8 @@ import { Connector, Edge, + JsonSDFG, + JsonSDFGNode, LibraryNode, LogicalGroup, SDFGElement, @@ -29,6 +31,8 @@ import { VSCodeRenderer } from '../renderer/vscode_renderer'; import { VSCodeSDFV } from '../vscode_sdfv'; import { createSingleUseModal, + doForAllNodeTypes, + elementUpdateLabel, getElementMetadata, getTransformationMetadata, vscodeWriteGraph @@ -139,6 +143,111 @@ export function attrTablePutCode( ); } +export function attrTablePutData( + key: string, subkey: string | undefined, val: any, elem: any | undefined, + xform: any | undefined, target: any, cell: JQuery, dtype: string, + meta: any, editableKeys: boolean = false +): DictProperty { + const dataCellContainer = $('
', { + 'class': 'popup-editable-property-container', + }).appendTo(cell); + const dataEditBtn = $('', { + 'class': 'material-icons property-edit-btn', + 'text': 'edit', + 'title': 'Click to edit', + }).appendTo(dataCellContainer); + + const prop = new DictProperty( + elem, xform, target, key, subkey, dtype, [], val + ); + + dataEditBtn.on('click', () => { + prop.setProperties([]); + + const modal = createSingleUseModal( + key, true, 'property-edit-modal-body' + ); + + const rowbox = $('
', { + 'class': 'container-fluid', + }).appendTo(modal.body); + Object.keys(val.attributes).forEach(k => { + let v = val.attributes[k]; + + let valMeta = undefined; + if (k in meta) + valMeta = meta[k]; + + const attrProp = attributeTablePutEntry( + k, v, valMeta, val.attributes, elem, xform, rowbox, + editableKeys, false, editableKeys + ); + + if (attrProp.deleteBtn) + attrProp.deleteBtn.on('click', () => { + attrProp.keyProp?.getInput().val(''); + attrProp.row.hide(); + }); + + if (attrProp) + prop.getProperties().push(attrProp); + }); + + // If code editors (monaco editors) are part of this dictionary, they + // need to be resized again as soon as the modal is shown in order to + // properly fill the container. + modal.modal.on('shown.bs.modal', () => { + for (const property of prop.getProperties()) { + if (property.valProp instanceof CodeProperty) + property.valProp.getEditor().layout(); + } + }); + + if (editableKeys) { + const addItemContainer = $('
', { + 'class': 'container-fluid', + }).appendTo(modal.body); + const addItemButtonRow = $('
', { + 'class': 'row', + }).appendTo(addItemContainer); + $('', { + 'class': 'material-icons property-add-row-btn', + 'text': 'playlist_add', + 'title': 'Add item', + 'click': () => { + const newProp = attributeTablePutEntry( + '', '', { metatype: 'str' }, val.attributes, elem, + xform, rowbox, true, false, true + ); + if (newProp) { + prop.getProperties().push(newProp); + + if (newProp.deleteBtn) + newProp.deleteBtn.on('click', () => { + newProp.keyProp?.getInput().val(''); + newProp.row.hide(); + }); + } + }, + }).appendTo($('
', { + 'class': 'col-2', + }).appendTo(addItemButtonRow)); + } + + if (modal.confirmBtn) + modal.confirmBtn.on('click', () => { + const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); + if (prop.update() && !xform && sdfg) + vscodeWriteGraph(sdfg); + modal.modal.modal('hide'); + }); + + modal.modal.modal('show'); + }); + + return prop; +} + export function attrTablePutNumber( key: string, subkey: string | undefined, val: number, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string @@ -237,7 +346,7 @@ export function attrTablePutTypeclass( export function attrTablePutDict( key: string, subkey: string | undefined, val: any, elem: any | undefined, xform: any | undefined, target: any, cell: JQuery, dtype: string, - valMeta: any + valMeta: any, allowAdding: boolean = true ): DictProperty { const dictCellContainer = $('
', { 'class': 'popup-editable-property-container', @@ -253,7 +362,9 @@ export function attrTablePutDict( 'title': 'Click to edit', }).appendTo(dictCellContainer); - const prop = new DictProperty(elem, xform, target, key, subkey, dtype, []); + const prop = new DictProperty( + elem, xform, target, key, subkey, dtype, [], val + ); dictEditBtn.on('click', () => { prop.setProperties([]); @@ -367,7 +478,9 @@ export function attrTablePutList( 'title': 'Click to edit', }).appendTo(listCellContainer); - const prop = new ListProperty(elem, xform, target, key, subkey, dtype, []); + const prop = new ListProperty( + elem, xform, target, key, subkey, dtype, [], val + ); listCellEditBtn.on('click', () => { prop.setPropertiesList([]); @@ -404,8 +517,12 @@ export function attrTablePutList( }); } - if (attrProp && attrProp.valProp) - prop.getPropertiesList().push(attrProp.valProp); + if (attrProp && attrProp.valProp) { + if (Array.isArray(attrProp.valProp)) + prop.getPropertiesList().push(...attrProp.valProp); + else + prop.getPropertiesList().push(attrProp.valProp); + } } // If code editors (monaco editors) are part of this list, they @@ -436,7 +553,10 @@ export function attrTablePutList( false, true ); if (newProp && newProp.valProp) { - prop.getPropertiesList().push(newProp.valProp); + if (Array.isArray(newProp.valProp)) + prop.getPropertiesList().push(...newProp.valProp); + else + prop.getPropertiesList().push(newProp.valProp); if (newProp.deleteBtn) { newProp.deleteBtn.on('click', () => { @@ -493,7 +613,7 @@ export function attrTablePutRange( }).appendTo(rangeCellContainer); const prop = new RangeProperty( - elem, xform, target, key, 'ranges', dtype, [] + elem, xform, target, key, 'ranges', dtype, [], val ); rangeEditBtn.on('click', () => { @@ -707,10 +827,12 @@ export function attrTablePutLogicalGroup( export function attributeTablePutEntry( key: string, val: any, meta: any, target: any, elem: any | undefined, xform: any | undefined, root: JQuery, editableKey: boolean, - updateOnChange: boolean, addDeleteButton: boolean + updateOnChange: boolean, addDeleteButton: boolean, + keyChangeHandlerOverride?: (prop: KeyProperty) => void, + valueChangeHandlerOverride?: (prop: Property) => void ): PropertyEntry { let keyProp: KeyProperty | undefined = undefined; - let valProp: Property | undefined = undefined; + let valProp: Property[] | undefined = undefined; let deleteBtn = undefined; let dtype = undefined; @@ -722,6 +844,20 @@ export function attributeTablePutEntry( choices = meta['choices']; } + const valPropUpdateHandler = valueChangeHandlerOverride !== undefined ? + valueChangeHandlerOverride : (prop: Property) => { + const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); + if (!xform && prop.update() && sdfg) + vscodeWriteGraph(sdfg); + }; + + const keyPropUpdateHandler = keyChangeHandlerOverride !== undefined ? + keyChangeHandlerOverride : (prop: KeyProperty) => { + const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); + if (prop && prop.update() && !xform && sdfg) + vscodeWriteGraph(sdfg); + }; + const row = $('
', { 'class': 'row attr-table-row', }).appendTo(root); @@ -773,29 +909,29 @@ export function attributeTablePutEntry( const sdfgMetaDict = VSCodeSDFV.getInstance().getMetaDict(); switch (dtype) { case 'typeclass': - valProp = attrTablePutTypeclass( + valProp = [attrTablePutTypeclass( key, undefined, val, elem, xform, target, valueCell, dtype, choices - ); + )]; break; case 'bool': - valProp = attrTablePutBool( + valProp = [attrTablePutBool( key, undefined, val, elem, xform, target, valueCell, dtype - ); + )]; break; case 'str': case 'LambdaProperty': case 'SymbolicProperty': // TODO(later): Treat symbolic expressions with a symbolic // parser, they're not just a regular string. - valProp = attrTablePutText( + valProp = [attrTablePutText( key, undefined, val, elem, xform, target, valueCell, dtype - ); + )]; break; case 'int': - valProp = attrTablePutNumber( + valProp = [attrTablePutNumber( key, undefined, val, elem, xform, target, valueCell, dtype - ); + )]; break; case 'dict': let valType = undefined; @@ -806,9 +942,10 @@ export function attributeTablePutEntry( sdfgMetaDict['__reverse_type_lookup__'] && sdfgMetaDict['__reverse_type_lookup__'][valType]) valMeta = sdfgMetaDict['__reverse_type_lookup__'][valType]; + const allowAdding = addDeleteButton; attrTablePutDict( key, undefined, val, elem, xform, target, valueCell, dtype, - valMeta + valMeta, allowAdding ); break; case 'set': @@ -829,107 +966,104 @@ export function attributeTablePutEntry( metatype: elemType, }; - valProp = attrTablePutList( + valProp = [attrTablePutList( key, undefined, val, elem, xform, target, valueCell, dtype, elemMeta - ); + )]; break; case 'Range': case 'SubsetProperty': - valProp = attrTablePutRange( + valProp = [attrTablePutRange( key, undefined, val, elem, xform, target, valueCell, dtype - ); + )]; break; case 'DataProperty': - valProp = attrTablePutSelect( + valProp = [attrTablePutSelect( key, undefined, val, elem, xform, target, valueCell, dtype, elem ? Object.keys(elem.sdfg.attributes._arrays): [] - ); + )]; break; case 'CodeBlock': - valProp = attrTablePutCode( + valProp = [attrTablePutCode( key, undefined, val ? val.string_data : '', elem, xform, target, valueCell, dtype + )]; + break; + case 'Array': + case 'Data': + case 'Scalar': + case 'View': + case 'Reference': + case 'Stream': + const containerTypeChoices = Object.keys( + VSCodeSDFV.getInstance().getMetaDict()[ + '__data_container_types__' + ] ); + const dataTypeProp = attrTablePutSelect( + key, 'type', val.type, elem, xform, target, valueCell, + dtype, containerTypeChoices + ); + const dataAttrProp = attrTablePutData( + key, 'attributes', val, elem, xform, target, + valueCell, dtype, meta + ); + valProp = [dataTypeProp, dataAttrProp]; break; case 'LogicalGroup': - valProp = attrTablePutLogicalGroup( + valProp = [attrTablePutLogicalGroup( key, undefined, val, elem, xform, target, valueCell, dtype - ); + )]; break; default: - if (choices !== undefined) { - valProp = attrTablePutSelect( + if (choices !== undefined) + valProp = [attrTablePutSelect( key, undefined, val, elem, xform, target, valueCell, dtype, choices - ); - } else { + )]; + else valueCell.html(sdfg_property_to_string( val, VSCodeRenderer.getInstance()?.view_settings() )); - } break; } } if (updateOnChange && valProp !== undefined) { - if (valProp instanceof ValueProperty) { - if (valProp instanceof ComboboxProperty) { - valProp.getInput().on('hidden.editable-select', () => { - if (valProp) { - const valueChanged = valProp.update(); - const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); - if (!xform && valueChanged && sdfg) - vscodeWriteGraph(sdfg); - } - }); - valProp.getInput().on('select.editable-select', () => { - if (valProp) { - const valueChanged = valProp.update(); - const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); - if (!xform && valueChanged && sdfg) - vscodeWriteGraph(sdfg); - } + valProp.forEach(prop => { + if (prop instanceof ValueProperty) { + if (prop instanceof ComboboxProperty) { + prop.getInput().on('hidden.editable-select', () => { + valPropUpdateHandler(prop); + }); + prop.getInput().on('select.editable-select', () => { + valPropUpdateHandler(prop); + }); + } else { + prop.getInput().on('change', () => { + valPropUpdateHandler(prop); + }); + } + } else if (prop instanceof CodeProperty) { + prop.getCodeInput().on('change', () => { + valPropUpdateHandler(prop); }); - } else { - valProp.getInput().on('change', () => { - if (valProp) { - valProp.update(); - const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); - if (!xform && sdfg) - vscodeWriteGraph(sdfg); - } + prop.getLangInput().on('change', () => { + valPropUpdateHandler(prop); }); } - } else if (valProp instanceof CodeProperty) { - valProp.getCodeInput().on('change', () => { - if (valProp) { - valProp.update(); - const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); - if (!xform && sdfg) - vscodeWriteGraph(sdfg); - } - }); - valProp.getLangInput().on('change', () => { - if (valProp) { - valProp.update(); - const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); - if (!xform && sdfg) - vscodeWriteGraph(sdfg); - } - }); - } + }); } - if (updateOnChange && keyProp !== undefined && - keyProp.getInput() !== undefined) + if (updateOnChange && keyProp && keyProp.getInput() !== undefined) { keyProp.getInput().on('change', () => { - const sdfg = VSCodeRenderer.getInstance()?.get_sdfg(); - if (keyProp && keyProp.update() && !xform && sdfg) - vscodeWriteGraph(sdfg); + if (keyProp) + keyPropUpdateHandler(keyProp); }); + } return { + key: key, keyProp: keyProp, valProp: valProp, deleteBtn: deleteBtn, @@ -1113,3 +1247,170 @@ export function generateAttributesTable( gotoCppBtn.show(); } } + +export function appendDataDescriptorTable( + root: JQuery, + descriptors: { [key: string]: { type: string, attributes: any } }, + sdfg: JsonSDFG +): void { + const dataTableBaseContainer = $('
', { + 'class': 'container-fluid attr-table-base-container', + }).appendTo(root); + + const catRow = $('
', { + 'class': 'row attr-table-cat-row', + }).appendTo(dataTableBaseContainer); + const catContainer = $('
', { + 'class': 'col-12 attr-table-cat-container', + }).appendTo(catRow); + const catToggleBtn = $('