From 0cd691234a40bd70ff5bdf32c296e95bada5f938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Fri, 4 Oct 2024 15:55:06 +0200 Subject: [PATCH 01/10] Autogenerate plugin documentation --- docs/conf.py | 10 ++ docs/index.rst | 2 +- docs/plugin-overview.rst | 312 --------------------------------------- docs/plugin_autodoc.py | 174 ++++++++++++++++++++++ 4 files changed, 185 insertions(+), 313 deletions(-) delete mode 100644 docs/plugin-overview.rst create mode 100644 docs/plugin_autodoc.py diff --git a/docs/conf.py b/docs/conf.py index c9f58722d..24b07d574 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -99,6 +99,16 @@ api_title = info.get("title") version = info.get("version") +# -- update plugin documentation --------------------------------------------- + +plugin_doc_command = ["python", "docs/plugin_autodoc.py"] + +if not ON_READTHEDOCS: + plugin_doc_command = ["poetry", "run"] + plugin_doc_command + +subprocess.run(plugin_doc_command, cwd=project_root, env=flask_environ) + + # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be diff --git a/docs/index.rst b/docs/index.rst index c05c42c10..379b83038 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -20,7 +20,7 @@ Welcome to QHAna-Plugin-Runner's documentation! plugin-types/index data-formats/index cli - plugin-overview + all-plugins adr/index source/qhana_plugin_runner changelog diff --git a/docs/plugin-overview.rst b/docs/plugin-overview.rst deleted file mode 100644 index 7ce7b4cd2..000000000 --- a/docs/plugin-overview.rst +++ /dev/null @@ -1,312 +0,0 @@ -Plugin Overview -=============== - -.. flat-table:: - :header-rows: 2 - - * - :rspan:`1` Name - - :rspan:`1` Algorithm - - :rspan:`1` Tags - - :cspan:`2` Inputs - - :cspan:`1` Outputs - - * - parameter - - data type - - content type - - data type - - content type - - * - `Aggregators `_ - - Mean/ Meadian/ Max/ Min Aggregators - - aggregator - - attributeDistancesUrl - - custom/attribute-distances - - application/zip - - custom/entity-distances - - application/zip - - * - :rspan:`2` `Costume Loader `_ - - :rspan:`2` - - :rspan:`2` data-loading - - :rspan:`2` - - :rspan:`2` - - :rspan:`2` - - entity/list - - application/json - - * - entity/attribute-metadata - - application/json - - * - custom/taxonomy-graphs - - application/zip - - * - `CSV Visualization `_ - - - - visualization - - data - - \* - - text/csv - - \* - - text/html - - * - `Entity Filter `_ - - - - data-loading - - inputFileUrl - - entity/list - - application/json, text/csv - - entity/list - - application/json, text/csv - - * - `File Upload `_ - - - - data-loading - - - - - - - - \* - - \* - - * - `Hello World `_ - - - - hello-world - - - - - - - - txt - - text/plain - - * - `Hello World Multi-Step `_ - - - - hello-world, multistep - - - - - - - - txt - - text/plain - - - * - `Hybrid Autoencoder `_ - - `Quantum Autoencoder `_, `QNN1+2 (Circuit A+B) `_, `QNN3 `_, `General Two-Qubit-Gate `_ - - dimensionality-reduction - - - - custom/real-valued-entities - - application/json - - custom/real-valued-entities - - application/json - - * - `JSON Visualization `_ - - - - - - data - - \* - - application/json - - custom/hello-world-output - - text/html - - * - `Manual Classification `_ - - - - data-annotation - - inputFileUrl - - entity/list - - application/json, text/csv - - entity/list - - application/json, text/csv - - * - `Multidimensional Scaling `_ - - `Metric or nonmetric MDS `_ - - dist-to-points - - entityDistancesUrl - - custom/entity-distances - - application/json - - entity/vector - - application/json - - * - `Minio Storage `_ - - - - - - - - - - - - - - - - * - `NISQ Analyzer `_ - - - - nisq-analyzer - - - - - - custom/nisq-analyzer-result - - application/json - - * - :rspan:`2` `One-Hot Encoding `_ - - :rspan:`2` One-Hot Encoding - - :rspan:`2` encoding, one-hot - - entitiesUrl - - entity/list - - application/json - - :rspan:`2` entity/vector - - :rspan:`2` application/csv - - * - taxonomiesZipUrl - - graph/taxonomy - - application/zip - - * - entitiesMetadataUrl - - entity/attribute-metadata - - application/json - - * - :rspan:`2` `Principle Component Analysis `_ - - :rspan:`2` normal, incremental, sparse and kernel PCA - - :rspan:`2` dimension-reduction - - :rspan:`2` entityPointsUrl - - :rspan:`2` entity/vector - - :rspan:`2` text/csv, application/json - - custom/plot - - text/html - - * - custom/pca-metadata - - application/json - - * - entity/vector - - text/csv - - * - `Quantum k-Means `_ - - `Quantum k-Means `_ with custom adaptations for State-Preparation-Quantum-k-Means - - points-to-clusters, k-means - - entityPointsUrl - - entity/vector - - application/json - - custom/clusters - - application/json - - * - :rspan:`1` `Quantum Kernel Estimation `_ - - :rspan:`1` Quantum Kernel Estimation with kernels from `Havlíček, V. et al. (2019) `_ and `Suzuki, Y. et al. (2020) `_ - - :rspan:`1` kernel, mapping - - entityPointsUrl1 - - entity/vector - - application/json - - :rspan:`1` custom/kernel-matrix - - :rspan:`1` application/json - - * - entityPointsUrl2 - - entity/vector - - application/json - - * - :rspan:`1` `Qiskit Quantum Kernel Estimation `_ - - :rspan:`1` Qiskit Quantum Kernel using qiskit's feature maps (ZFeatureMap, ZZFeatureMap, PauliFeatureMap) using the proposed kernel from `Havlíček, V. et al. (2019). `_ - - :rspan:`1` kernel, mapping - - entityPointsUrl1 - - entity/vector - - application/json - - :rspan:`1` custom/kernel-matrix - - :rspan:`1` application/json - - * - entityPointsUrl2 - - entity/vector - - application/json - - * - :rspan:`3` `Qiskit Simulator `_ - - :rspan:`3` - - :rspan:`3` circuit-executor, qc-simulator, qiskit, qasm, qasm-2 - - :rspan:`1` circuit - - :rspan:`1` executable/circuit - - :rspan:`1` text/x-qasm - - entity/vector - - application/json - - * - entity/vector - - application/json - - * - :rspan:`1` executionOptions - - :rspan:`1` provenance/execution-options - - :rspan:`1` text/csv, application/json, application/X-lines+json - - provenance/trace - - application/json - - * - provenance/execution-options - - application/json - - * - :rspan:`1` `Sym Max Mean Attribute Comparer `_ - - :rspan:`1` - - :rspan:`1` attribute-similarity-calculation - - entitiesUrl - - entity/list - - application/json - - :rspan:`1` custom/attribute-similarities - - :rspan:`1` application/zip - - * - elementSimilaritiesUrl - - custom/element-similarities - - application/zip - - * - `Time Tanh Similarities `_ - - - - similarity-calculation - - entitiesUrl - - entity/list - - application/json - - custom/element-similarities - - application/zip - - * - `Transformers (Similarity to Distance) `_ - - Linear/ Exponential/ Gaussian/ Polynomial/ Square Inverse - - sim-to-dist - - attributeSimilaritiesUrl - - custom/attribute-similarities - - application/zip - - custom/attribute-distances - - application/zip - - * - :rspan:`1` `Visualization `_ - - :rspan:`1` - - :rspan:`1` visualization - - entityPointsUrl - - entity/numeric - - application/json - - :rspan:`1` - - :rspan:`1` - - * - clustersUrl - - custom/clusters - - application/json - - * - `Workflows `_ - - - - workflow, bpmn - - - - - - - - - - - - * - :rspan:`2` `Wu Palmer `_ - - :rspan:`2` Wu Palmer - - :rspan:`2` similarity-calculation - - entitiesUrl - - entity/list - - application/json - - :rspan:`2` custom/element-similarities - - :rspan:`2` application/zip - - * - entitiesMetadataUrl - - entity/attribute-metadata - - application/json - - * - taxonomiesZipUrl - - graph/taxonomy - - application/zip - - * - :rspan:`1` `Zip Merger `_ - - :rspan:`1` - - :rspan:`1` utility - - zip1Url - - any - - application/zip - - :rspan:`1` any - - :rspan:`1` application/zip - - * - zip2Url - - any - - application/zip - \ No newline at end of file diff --git a/docs/plugin_autodoc.py b/docs/plugin_autodoc.py new file mode 100644 index 000000000..a1623b413 --- /dev/null +++ b/docs/plugin_autodoc.py @@ -0,0 +1,174 @@ +from inspect import getfile +from pathlib import Path + + +def normalize_mimetype_like(mimetype: str): + if not mimetype or mimetype == "*": + return "*/*" + + if "/" not in mimetype: + return mimetype + "/*" + + first, second = mimetype.split("/", maxsplit=1) + if not first: + first = "*" + if not second: + second = "*" + + return f"{first}/{second}" + + +def prepare_data_metadata(metadata): + metadata["dataType"] = normalize_mimetype_like(metadata["dataType"]) + metadata["contentType"] = [ + normalize_mimetype_like(c) for c in metadata["contentType"] + ] + return metadata + + +def get_plugin_info(plugin, metadata, base_path): + info = {} + info["identifier"] = plugin.identifier + info["id"] = metadata["name"] + info["type"] = metadata["type"] + info["version"] = metadata["version"] + info["name"] = metadata["title"] + info["description"] = metadata["description"] if metadata["description"] else "" + info["tags"] = sorted(metadata["tags"]) + info["input"] = [ + prepare_data_metadata(m) for m in metadata["entryPoint"].get("dataInput", []) + ] + info["output"] = [ + prepare_data_metadata(m) for m in metadata["entryPoint"].get("dataOutput", []) + ] + info["path"] = Path(getfile(type(plugin))).relative_to(base_path) + return info + + +def get_plugins(base_path): + from qhana_plugin_runner import create_app + from qhana_plugin_runner.util.plugins import QHAnaPluginBase + + app = create_app(silent_log=True) + + plugins = [p for p in QHAnaPluginBase.get_plugins().values()] + + with app.test_client() as c: + plugin_metadata = [c.get(f"/plugins/{p.identifier}/").json for p in plugins] + + return [ + get_plugin_info(p, m, base_path) + for (p, m) in zip(plugins, plugin_metadata) + if "status" not in m and "code" not in m + ] + + +def write_index(doc, plugins): + doc.write(":::{Table} Plugin Overview\n") + doc.write(":width: 100%\n") + doc.write(":widths: 30 20 10 50\n\n") + doc.write("| Plugin | ID | Type | Tags |\n") + doc.write("|--------|----|------|------|\n") + for p in sorted(plugins, key=lambda p: p["name"]): + doc.write( + f"|[{p['name']} (@{p['version']})](#{p['id']})|{p['identifier']}|{p['type']}|{', '.join(p['tags'])}|\n" + ) + doc.write("\n:::\n\n") + + +def write_merged_data(doc, plugins): + tags = set() + input_formats = set() + output_formats = set() + input_datatypes = set() + output_datatypes = set() + + for p in plugins: + tags.update(p["tags"]) + for input_def in p["input"]: + input_formats.update(input_def["contentType"]) + input_datatypes.add(input_def["dataType"]) + for output_def in p["output"]: + output_formats.update(output_def["contentType"]) + output_datatypes.add(output_def["dataType"]) + + doc.write("## Overview\n\n") + doc.write(f"**Used tags:** {', '.join(f'`{t}`' for t in sorted(tags))}\\\n") + doc.write( + f"**Input formats:** {', '.join(f'`{f}`' for f in sorted(input_formats))}\\\n" + ) + doc.write( + f"**Output formats:** {', '.join(f'`{f}`' for f in sorted(output_formats))}\\\n" + ) + doc.write( + f"**Input datatypes:** {', '.join(f'`{f}`' for f in sorted(input_datatypes))}\\\n" + ) + doc.write( + f"**Output datatypes:** {', '.join(f'`{f}`' for f in sorted(output_datatypes))}\n\n" + ) + + +def write_plugin(doc, p): + doc.write(f"({p['id']})=\n") + doc.write(f"### {p['name']} (@{p['version']})\n\n") + doc.write(f"{p['type']} – {', '.join(p['tags'])}\\\n") + doc.write(f"*Path:* {{file}}`{p['path']}`\n\n") + doc.write(p["description"]) + doc.write("\n\n") + if p["input"]: + doc.write("**Inputs:**\n\n") + doc.write("| Data Type | Content Type | Required |\n") + doc.write("|-----------|--------------| :------: |\n") + for data_input in p["input"]: + doc.write( + f"|{data_input['dataType']}|{', '.join(data_input['contentType'])}|{'✓' if data_input['required'] else '🗙'}|\n" + ) + doc.write("\n\n") + if p["output"]: + doc.write("**Outputs:**\n\n") + doc.write("| Data Type | Content Type | Always |\n") + doc.write("|-----------|--------------| :----: |\n") + for data_output in p["output"]: + doc.write( + f"|{data_output['dataType']}|{', '.join(data_output['contentType'])}|{'✓' if data_output['required'] else '🗙'}|\n" + ) + doc.write("\n\n") + + +def create_plugin_doc(): + import warnings + + doc_path = Path(".").resolve() + if doc_path.name != "docs": + doc_path = doc_path / "docs" + + base_path = doc_path.parent + + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", module="apispec.ext.marshmallow.common", lineno=139 + ) + plugins = get_plugins(base_path) + + doc_path = doc_path / "all-plugins.md" + + with doc_path.open("wt") as doc: + doc.write("# All Plugins\n\n") + write_index(doc, plugins) + write_merged_data(doc, plugins) + doc.write("## Plugins\n\n") + for plugin in sorted(plugins, key=lambda p: p["name"]): + write_plugin(doc, plugin) + doc.write("\n") + + +if __name__ == "__main__": + from os import environ + + if not environ.get("PLUGIN_FOLDERS"): + # TODO remove after testing? + environ["PLUGIN_FOLDERS"] = ( + "./plugins:./stable_plugins/classical_ml/data_preparation:./stable_plugins/classical_ml/scikit_ml:./stable_plugins/data_synthesis:./stable_plugins/demo:./stable_plugins/file_utils:./stable_plugins/infrastructure:./stable_plugins/muse:./stable_plugins/nisq_analyzer:./stable_plugins/quantum_ml/max_cut:./stable_plugins/quantum_ml/pennylane_qiskit_ml:./stable_plugins/quantum_ml/qiskit_ml:./stable_plugins/visualization/complex:./stable_plugins/visualization/file_types:./stable_plugins/workflow" + ) + + create_plugin_doc() From cf36fec99b6db1e0d02e06e32641eb1d90831548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Fri, 4 Oct 2024 15:57:38 +0200 Subject: [PATCH 02/10] Add setting for silencing log output on app creation --- qhana_plugin_runner/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/qhana_plugin_runner/__init__.py b/qhana_plugin_runner/__init__.py index f901bf909..94a4d23aa 100644 --- a/qhana_plugin_runner/__init__.py +++ b/qhana_plugin_runner/__init__.py @@ -56,7 +56,7 @@ def load_toml(file_like: IO[Any]) -> Mapping[str, Any]: return parse_toml("\n".join(file_like.readlines())) -def create_app(test_config: Optional[Dict[str, Any]] = None): +def create_app(test_config: Optional[Dict[str, Any]] = None, silent_log: bool=False): """Flask app factory.""" instance_folder_env_var = f"{ENV_VAR_PREFIX}_INSTANCE_FOLDER" @@ -176,7 +176,8 @@ def create_app(test_config: Optional[Dict[str, Any]] = None): default_logging_handler.setFormatter(formatter) default_logging_handler.setLevel(log_severity) root = getLogger() - root.addHandler(default_logging_handler) + if not silent_log: + root.addHandler(default_logging_handler) app.logger.removeHandler(default_logging_handler) logger: Logger = app.logger From 8f3bc9a83e00ebda8f7488d477c646e2eb273299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Fri, 4 Oct 2024 15:59:20 +0200 Subject: [PATCH 03/10] Run black --- qhana_plugin_runner/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qhana_plugin_runner/__init__.py b/qhana_plugin_runner/__init__.py index 94a4d23aa..453417040 100644 --- a/qhana_plugin_runner/__init__.py +++ b/qhana_plugin_runner/__init__.py @@ -56,7 +56,7 @@ def load_toml(file_like: IO[Any]) -> Mapping[str, Any]: return parse_toml("\n".join(file_like.readlines())) -def create_app(test_config: Optional[Dict[str, Any]] = None, silent_log: bool=False): +def create_app(test_config: Optional[Dict[str, Any]] = None, silent_log: bool = False): """Flask app factory.""" instance_folder_env_var = f"{ENV_VAR_PREFIX}_INSTANCE_FOLDER" From dee165cdd19cb0dd306a7e5edc798d492054cdfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Mon, 7 Oct 2024 11:11:11 +0200 Subject: [PATCH 04/10] Improve formatting of autogenerated plugin doc --- docs/plugin_autodoc.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/plugin_autodoc.py b/docs/plugin_autodoc.py index a1623b413..51702d3ad 100644 --- a/docs/plugin_autodoc.py +++ b/docs/plugin_autodoc.py @@ -64,15 +64,17 @@ def get_plugins(base_path): def write_index(doc, plugins): - doc.write(":::{Table} Plugin Overview\n") + doc.write(":::{list-table} Plugin Overview\n") + doc.write(":header-rows: 1\n") doc.write(":width: 100%\n") - doc.write(":widths: 30 20 10 50\n\n") - doc.write("| Plugin | ID | Type | Tags |\n") - doc.write("|--------|----|------|------|\n") + doc.write(":widths: 30 10 30\n\n") + doc.write("* - Plugin\n - Type\n - Tags\n") + sep = "\n\n " for p in sorted(plugins, key=lambda p: p["name"]): - doc.write( - f"|[{p['name']} (@{p['version']})](#{p['id']})|{p['identifier']}|{p['type']}|{', '.join(p['tags'])}|\n" - ) + doc.write(f"* - [{p['name']} (@{p['version']})](#{p['id']})\n\n") + doc.write(f" {p['identifier']}\n") + doc.write(f" - {p['type']}\n") + doc.write(f" - {sep.join(p['tags'])}\n") doc.write("\n:::\n\n") @@ -93,12 +95,12 @@ def write_merged_data(doc, plugins): output_datatypes.add(output_def["dataType"]) doc.write("## Overview\n\n") - doc.write(f"**Used tags:** {', '.join(f'`{t}`' for t in sorted(tags))}\\\n") + doc.write(f"**Used tags:** {', '.join(f'`{t}`' for t in sorted(tags))}\n\n") doc.write( f"**Input formats:** {', '.join(f'`{f}`' for f in sorted(input_formats))}\\\n" ) doc.write( - f"**Output formats:** {', '.join(f'`{f}`' for f in sorted(output_formats))}\\\n" + f"**Output formats:** {', '.join(f'`{f}`' for f in sorted(output_formats))}\n\n" ) doc.write( f"**Input datatypes:** {', '.join(f'`{f}`' for f in sorted(input_datatypes))}\\\n" From ab65f3d9d97d6815554c553bb9d46a8a1804c086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Mon, 7 Oct 2024 11:27:38 +0200 Subject: [PATCH 05/10] Fix plugin tags and plugin id --- .../classical_ml/data_preparation/one-hot_encoding.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stable_plugins/classical_ml/data_preparation/one-hot_encoding.py b/stable_plugins/classical_ml/data_preparation/one-hot_encoding.py index 0624722a6..0717b0b18 100644 --- a/stable_plugins/classical_ml/data_preparation/one-hot_encoding.py +++ b/stable_plugins/classical_ml/data_preparation/one-hot_encoding.py @@ -97,8 +97,8 @@ """ -_plugin_name = "one-hot encoding" -__version__ = "v0.2.0" +_plugin_name = "one-hot-encoding" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -307,8 +307,8 @@ def post(self, arguments): class OneHot(QHAnaPluginBase): name = _plugin_name version = __version__ - description = "Converts Muse Data to One-Hot Encodings" - tags = ["encoding", "one-hot"] + description = "Converts Data to One-Hot Encodings" + tags = ["preprocessing", "encoding", "one-hot-encoding"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) From 38cc7366a647eb10109a88affcbfe7975825345d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Mon, 7 Oct 2024 11:29:49 +0200 Subject: [PATCH 06/10] Refactor pandas preprocessing plugin to support json --- .../pandas_preprocessing/__init__.py | 4 ++-- .../pandas_preprocessing/routes.py | 4 +--- .../pandas_preprocessing/schemas.py | 20 ++++++++----------- .../pandas_preprocessing/tasks.py | 7 +++++-- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/__init__.py b/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/__init__.py index ec3d385f3..24dcc6d30 100644 --- a/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/__init__.py +++ b/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/__init__.py @@ -21,7 +21,7 @@ _plugin_name = "pandas-preprocessing" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -38,7 +38,7 @@ class PDPreprocessing(QHAnaPluginBase): version = __version__ description = "Uses pandas preprocessing methods, to preprocess csv files." - tags = [] + tags = ["preprocessing", "data-cleaning"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/routes.py b/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/routes.py index 33b943c3b..dff5f0df5 100644 --- a/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/routes.py +++ b/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/routes.py @@ -72,9 +72,7 @@ def get(self): data_input=[ InputDataMetadata( data_type="*", - content_type=[ - "text/csv", - ], + content_type=["text/csv", "application/json"], required=True, parameter="fileUrl", ), diff --git a/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/schemas.py b/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/schemas.py index f9cb8cb5f..e9a6ff555 100644 --- a/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/schemas.py +++ b/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/schemas.py @@ -12,26 +12,22 @@ # See the License for the specific language governing permissions and # limitations under the License. -from marshmallow import post_load, validate +from dataclasses import dataclass + import marshmallow as ma -from qhana_plugin_runner.api.util import ( - FrontendFormBaseSchema, - MaBaseSchema, - FileUrl, -) +from marshmallow import post_load, validate + from qhana_plugin_runner.api import EnumField +from qhana_plugin_runner.api.util import FileUrl, FrontendFormBaseSchema, MaBaseSchema -from dataclasses import dataclass from .backend.pandas_preprocessing import ( - PreprocessingEnum, AxisEnum, + CaseEnum, KeepEnum, PositionEnum, - CaseEnum, + PreprocessingEnum, ) -from celery.utils.log import get_task_logger - class TaskResponseSchema(MaBaseSchema): name = ma.fields.String(required=True, allow_none=False, dump_only=True) @@ -52,7 +48,7 @@ class FirstInputParametersSchema(FrontendFormBaseSchema): required=True, allow_none=False, data_input_type="*", - data_content_types="text/csv", + data_content_types=["text/csv", "application/json"], metadata={ "label": "File URL", "description": "The file must be a csv file.", diff --git a/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/tasks.py b/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/tasks.py index 612e2ea97..ce6c460fb 100644 --- a/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/tasks.py +++ b/stable_plugins/classical_ml/data_preparation/pandas_preprocessing/tasks.py @@ -31,7 +31,7 @@ from qhana_plugin_runner.storage import STORE from qhana_plugin_runner.requests import retrieve_filename -from pandas import read_csv +from pandas import read_csv, read_json from .backend.checkbox_list import get_checkbox_list_dict TASK_LOGGER = get_task_logger(__name__) @@ -72,7 +72,10 @@ def first_task(self, db_id: int) -> str: TASK_LOGGER.info(f"Loaded input parameters from db: {str(input_params)}") - df = read_csv(file_url) + try: + df = read_json(file_url, orient="records") + except: + df = read_csv(file_url) # Output data with SpooledTemporaryFile(mode="w") as output: From 9857ab46f1750846d94dfa46588d1deac525ed0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Mon, 7 Oct 2024 11:31:34 +0200 Subject: [PATCH 07/10] Fix missing data in manual classification input schema Fixes missing choose data button in micro frontend --- stable_plugins/muse/manual_classification/schemas.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stable_plugins/muse/manual_classification/schemas.py b/stable_plugins/muse/manual_classification/schemas.py index 77d3a0289..6786a62e7 100644 --- a/stable_plugins/muse/manual_classification/schemas.py +++ b/stable_plugins/muse/manual_classification/schemas.py @@ -12,6 +12,8 @@ class LoadParametersSchema(FrontendFormBaseSchema): input_file_url = FileUrl( required=True, allow_none=False, + data_content_types=["text/csv", "application/json", "application/X-lines+json"], + data_input_type="entity", metadata={ "label": "Entities URL", "description": "URL to a json file with a list of entities.", From 30c6dbc8402c283fb4ef8e702e3cbac51a2c0884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Mon, 7 Oct 2024 11:33:35 +0200 Subject: [PATCH 08/10] Update plugin tags to apply them more consistently --- docs/all-plugins.md | 1497 +++++++++++++++++ plugins/neural_network/__init__.py | 11 +- plugins/optimization_coordinator/__init__.py | 2 +- plugins/sql_loader/__init__.py | 4 +- .../data_preparation/aggregators.py | 4 +- .../data_preparation/entity_filter.py | 4 +- .../data_preparation/sym_max_mean.py | 4 +- .../data_preparation/time_tanh.py | 4 +- .../data_preparation/transformers.py | 4 +- .../data_preparation/wu_palmer.py | 4 +- .../scikit_ml/classical_k_means/__init__.py | 4 +- .../scikit_ml/classical_k_medoids/__init__.py | 4 +- stable_plugins/classical_ml/scikit_ml/mds.py | 4 +- .../scikit_ml/optics-clustering/__init__.py | 4 +- .../classical_ml/scikit_ml/pca/__init__.py | 4 +- .../data_synthesis/data_creator/__init__.py | 4 +- stable_plugins/demo/circuit-demo.py | 4 +- .../demo/hello_worl_multi_step/__init__.py | 4 +- stable_plugins/demo/hello_world.py | 4 +- .../muse/costume_loader_pkg/__init__.py | 4 +- .../muse/manual_classification/__init__.py | 4 +- .../quantum_ml/max_cut/max_cut/__init__.py | 4 +- .../hybrid_ae_pkg/__init__.py | 4 +- .../pennylane_qiskit_ml/qcnn/__init__.py | 4 +- .../pennylane_qiskit_ml/qnn/__init__.py | 4 +- .../pennylane_qiskit_ml/qnn/routes.py | 2 +- .../quantum_k_means/__init__.py | 4 +- .../quantum_k_nearest_neighbours/__init__.py | 4 +- .../quantum_kernel_estimation/__init__.py | 4 +- .../quantum_parzen_window/__init__.py | 4 +- .../__init__.py | 4 +- .../quantum_ml/qiskit_ml/svm/__init__.py | 4 +- .../__init__.py | 4 +- .../file_types/csv_visualization.py | 4 +- .../file_types/json_visualization.py | 6 +- .../file_types/qasm_visualization.py | 6 +- stable_plugins/workflow/workflows/__init__.py | 2 +- .../workflow/workflows/management.py | 2 +- .../workflow/workflows/management_routes.py | 2 +- stable_plugins/workflow/workflows/routes.py | 2 +- 40 files changed, 1578 insertions(+), 74 deletions(-) create mode 100644 docs/all-plugins.md diff --git a/docs/all-plugins.md b/docs/all-plugins.md new file mode 100644 index 000000000..43d16d006 --- /dev/null +++ b/docs/all-plugins.md @@ -0,0 +1,1497 @@ +# All Plugins + +:::{list-table} Plugin Overview +:header-rows: 1 +:width: 100% +:widths: 30 10 30 + +* - Plugin + - Type + - Tags +* - [Aggregators (@v0.2.1)](#distance-aggregator) + + distance-aggregator@v0-2-1 + - processing + - distance-calculation + + preprocessing +* - [Classical k Means (@v0.1.1)](#classical-k-means) + + classical-k-means@v0-1-1 + - processing + - ML + + clustering +* - [Classical k Medoids (@v0.1.1)](#classical-k-medoids) + + classical-k-medoids@v0-1-1 + - processing + - ML + + clustering +* - [Cluster Visualization (@v0.3.0)](#cluster-visualization) + + cluster-visualization@v0-3-0 + - visualization + - visualization +* - [Costume loader (@v0.2.1)](#costume-loader) + + costume-loader@v0-2-1 + - dataloader + - MUSE + + data-loading +* - [Data Creation (@v0.2.2)](#data-creator) + + data-creator@v0-2-2 + - dataloader + - data-loading + + data-synthesizing +* - [Deploy Workflow (@v0.1.1)](#deploy-workflow) + + deploy-workflow@v0-1-1 + - processing + - bpmn + + camunda-engine + + workflow +* - [Entity loader/filter (@v0.2.1)](#entity-filter) + + entity-filter@v0-2-1 + - processing + - filter + + preprocessing + + sample +* - [Hybrid Autoencoder (@v0.2.1)](#hybrid-autoencoder) + + hybrid-autoencoder@v0-2-1 + - processing + - QML + + feature-engineering + + preprocessing + + quantum +* - [Manual Classification (@v0.2.1)](#manual-classification) + + manual-classification@v0-2-1 + - processing + - data-annotation + + manual + + preprocessing +* - [Max Cut (@v0.1.1)](#max_cut) + + max_cut@v0-1-1 + - processing + - QML + + clustering + + quantum +* - [Multidimensional Scaling (MDS) (@v0.2.1)](#mds) + + mds@v0-2-1 + - processing + - distance-calculation + + embedding + + feature-engineering + + preprocessing +* - [One-Hot Encoding (@v0.2.1)](#one-hot-encoding) + + one-hot-encoding@v0-2-1 + - processing + - encoding + + one-hot-encoding + + preprocessing +* - [Optics (@v0.1.1)](#optics) + + optics@v0-1-1 + - processing + - ML + + clustering +* - [Optimizer plugin (@v1.0.1)](#optimizer) + + optimizer@v1-0-1 + - processing + - optimization +* - [Pandas Preprocessing (@v0.1.1)](#pandas-preprocessing) + + pandas-preprocessing@v0-1-1 + - processing + - data-cleaning + + preprocessing +* - [Principle Component Analysis (PCA) (@v0.2.2)](#pca) + + pca@v0-2-2 + - processing + - feature-engineering + + preprocessing +* - [Qiskit Executor (@v0.1.1)](#qiskit-executor) + + qiskit-executor@v0-1-1 + - processing + - circuit-executor + + qasm + + qasm-2 + + qasm-3 + + qc-executor + + qiskit +* - [Qiskit Quantum Kernel Estimation (@v0.2.1)](#qiskit-quantum-kernel-estimation) + + qiskit-quantum-kernel-estimation@v0-2-1 + - processing + - QML + + kernel + + mapping + + quantum +* - [Quantum CNN (@v0.1.1)](#quantum-cnn@v0-1-1) + + quantum-cnn@v0-1-1 + - processing + - QML + + classification + + neural-network + + quantum +* - [Quantum Kernel Estimation (@v0.2.1)](#quantum-kernel-estimation) + + quantum-kernel-estimation@v0-2-1 + - processing + - QML + + kernel + + mapping + + quantum +* - [Quantum Neutral Network (QNN) (@v0.1.1)](#qnn) + + qnn@v0-1-1 + - processing + - QML + + classical + + classification + + neural-network + + quantum +* - [Quantum Parzen Window (@v0.2.1)](#quantum-parzen-window) + + quantum-parzen-window@v0-2-1 + - processing + - QML + + classification + + quantum + + supervised-learning +* - [Quantum Variational Classifier (@v0.1.1)](#vqc) + + vqc@v0-1-1 + - processing + - QML + + classification + + quantum +* - [Quantum k Nearest Neighbours (@v0.2.1)](#quantum-k-nearest-neighbours) + + quantum-k-nearest-neighbours@v0-2-1 + - processing + - QML + + clustering + + quantum + + supervised-learning +* - [Quantum k-means (@v0.2.1)](#quantum-k-means) + + quantum-k-means@v0-2-1 + - processing + - QML + + clustering + + quantum +* - [REST API Connector (@v0.1.0)](#rest-connector) + + rest-connector@v0-1-0 + - interaction + - rest +* - [SQL Loader (@v0.1.1)](#sql-loader) + + sql-loader@v0-1-1 + - processing + - data-loading + + mariadb + + mysql + + postgresql + + sql +* - [SVM (@v0.1.1)](#svm) + + svm@v0-1-1 + - processing + - ML + + QML + + classical + + classification + + quantum + + supervised-learning +* - [Scipy Minimizer Plugin (@v1.0.0)](#scipy-minimizer) + + scipy-minimizer@v1-0-0 + - processing + - minimizer + + optimization +* - [Scipy Minimizer with Gradient Plugin (@v1.0.0)](#scipy-minimizer-grad) + + scipy-minimizer-grad@v1-0-0 + - processing + - gradient + + minimizer + + optimization +* - [Similarities to distances transformers (@v0.2.1)](#sim-to-dist-transformers) + + sim-to-dist-transformers@v0-2-1 + - processing + - distance-calculation + + preprocessing + + similarity-calculation +* - [Sym Max Mean attribute comparer (@v0.1.1)](#sym-max-mean) + + sym-max-mean@v0-1-1 + - processing + - preprocessing + + similarity-calculation +* - [Time tanh similarities (@v0.2.1)](#time-tanh) + + time-tanh@v0-2-1 + - processing + - preprocessing + + similarity-calculation +* - [Workflow Management (@v0.1.1)](#workflow-management) + + workflow-management@v0-1-1 + - interaction + - bpmn + + camunda-engine + + workflow +* - [Wu Palmer similarities (@v0.2.1)](#wu-palmer) + + wu-palmer@v0-2-1 + - processing + - preprocessing + + similarity-calculation +* - [Zip merger (@v0.2.0)](#zip-merger) + + zip-merger@v0-2-0 + - processing + - utility +* - [circuit-demo (@v1.0.1)](#circuit-demo) + + circuit-demo@v1-0-1 + - processing + - circuit-demo + + demo + + quantum +* - [csv-visualization (@v0.1.1)](#csv-visualization) + + csv-visualization@v0-1-1 + - visualization + - csv + + visualization +* - [file-upload (@v0.2.0)](#file-upload) + + file-upload@v0-2-0 + - dataloader + - data-loading +* - [hello-world (@v0.2.1)](#hello-world) + + hello-world@v0-2-1 + - processing + - demo + + hello-world +* - [hello-world-multi-step (@v0.2.1)](#hello-world-multi-step) + + hello-world-multi-step@v0-2-1 + - processing + - demo + + hello-world + + multistep +* - [hinge-loss (@v1.0.0)](#hinge-loss@v1-0-0) + + hinge-loss@v1-0-0 + - processing + - objective-function + + optimization +* - [json-visualization (@v0.2.1)](#json-visualization) + + json-visualization@v0-2-1 + - visualization + - json + + visualization +* - [neural-network (@v1.0.1)](#neural-network@v1-0-1) + + neural-network@v1-0-1 + - processing + - ML + + classical + + gradient + + neural-network + + objective-function + + optimization +* - [nisq-analyzer (@v0.2.0)](#nisq-analyzer) + + nisq-analyzer@v0-2-0 + - processing + - nisq-analyzer +* - [qasm-visualization (@v0.3.1)](#qasm-visualization) + + qasm-visualization@v0-3-1 + - visualization + - qasm + + visualization +* - [qiskit-simulator (@v0.3.0)](#qiskit-simulator) + + qiskit-simulator@v0-3-0 + - processing + - circuit-executor + + qasm + + qasm-2 + + qc-simulator + + qiskit +* - [ridge-loss (@v1.0.0)](#ridge-loss@v1-0-0) + + ridge-loss@v1-0-0 + - processing + - objective-function + + optimization + +::: + +## Overview + +**Used tags:** `ML`, `MUSE`, `QML`, `bpmn`, `camunda-engine`, `circuit-demo`, `circuit-executor`, `classical`, `classification`, `clustering`, `csv`, `data-annotation`, `data-cleaning`, `data-loading`, `data-synthesizing`, `demo`, `distance-calculation`, `embedding`, `encoding`, `feature-engineering`, `filter`, `gradient`, `hello-world`, `json`, `kernel`, `manual`, `mapping`, `mariadb`, `minimizer`, `multistep`, `mysql`, `neural-network`, `nisq-analyzer`, `objective-function`, `one-hot-encoding`, `optimization`, `postgresql`, `preprocessing`, `qasm`, `qasm-2`, `qasm-3`, `qc-executor`, `qc-simulator`, `qiskit`, `quantum`, `rest`, `sample`, `similarity-calculation`, `sql`, `supervised-learning`, `utility`, `visualization`, `workflow` + +**Input formats:** `application/X-lines+json`, `application/json`, `application/zip`, `text/csv`, `text/x-qasm`\ +**Output formats:** `*/*`, `application/csv`, `application/json`, `application/qasm`, `application/zip`, `image/svg+xml`, `text/csv`, `text/html`, `text/plain`, `text/x-qasm` + +**Input datatypes:** `*/*`, `custom/attribute-distances`, `custom/attribute-similarities`, `custom/clusters`, `custom/element-similarities`, `custom/entity-distances`, `entity/*`, `entity/attribute-metadata`, `entity/label`, `entity/list`, `entity/matrix`, `entity/shaped_vector`, `entity/vector`, `executable/circuit`, `graph/taxonomy`, `provenance/execution-options`\ +**Output datatypes:** `*/*`, `custom/attribute-distances`, `custom/attribute-similarities`, `custom/clusters`, `custom/element-similarities`, `custom/entity-distances`, `custom/hello-world-output`, `custom/kernel-matrix`, `custom/nisq-analyzer-result`, `custom/pca-metadata`, `custom/plot`, `entity/attribute-metadata`, `entity/label`, `entity/list`, `entity/vector`, `executable/circuit`, `graph/taxonomy`, `plot/*`, `provenance/execution-options`, `provenance/trace`, `qnn-weights/*`, `representative-circuit/*`, `txt/*`, `vqc-metadata/*` + +## Plugins + +(distance-aggregator)= +### Aggregators (@v0.2.1) + +processing – distance-calculation, preprocessing\ +*Path:* {file}`stable_plugins/classical_ml/data_preparation/aggregators.py` + +Aggregates attribute distances to entity distances. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|custom/attribute-distances|application/zip|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/entity-distances|application/zip|✓| + + +(classical-k-means)= +### Classical k Means (@v0.1.1) + +processing – ML, clustering\ +*Path:* {file}`stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py` + +Clusters data with classical k means algorithm. +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json, text/csv|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|🗙| + + +(classical-k-medoids)= +### Classical k Medoids (@v0.1.1) + +processing – ML, clustering\ +*Path:* {file}`stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py` + +Clusters data with classical k medoids algorithm. +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|text/csv, application/json|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|🗙| + + +(cluster-visualization)= +### Cluster Visualization (@v0.3.0) + +visualization – visualization\ +*Path:* {file}`stable_plugins/visualization/complex/cluster_visualization.py` + +Plots points with cluster information. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/*|application/json|✓| +|custom/clusters|application/json|✓| + + +(costume-loader)= +### Costume loader (@v0.2.1) + +dataloader – MUSE, data-loading\ +*Path:* {file}`stable_plugins/muse/costume_loader_pkg/__init__.py` + +Loads all the costumes or base elements from the MUSE database. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/list|application/json|✓| +|entity/attribute-metadata|application/json|✓| +|graph/taxonomy|application/zip|✓| + + +(data-creator)= +### Data Creation (@v0.2.2) + +dataloader – data-loading, data-synthesizing\ +*Path:* {file}`stable_plugins/data_synthesis/data_creator/__init__.py` + +A plugin to create datasets. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/vector|application/json|✓| +|entity/label|application/json|✓| +|entity/vector|application/json|✓| +|entity/label|application/json|✓| + + +(deploy-workflow)= +### Deploy Workflow (@v0.1.1) + +processing – bpmn, camunda-engine, workflow\ +*Path:* {file}`stable_plugins/workflow/workflows/__init__.py` + +Deploys a BPMN workflow to Camunda and exposes it as a plugin. + +(entity-filter)= +### Entity loader/filter (@v0.2.1) + +processing – filter, preprocessing, sample\ +*Path:* {file}`stable_plugins/classical_ml/data_preparation/entity_filter.py` + +Loads and filters entities from a file that contains a list of entities. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/list|application/json, text/csv|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/list|application/json, text/csv|✓| + + +(hybrid-autoencoder)= +### Hybrid Autoencoder (@v0.2.1) + +processing – QML, feature-engineering, preprocessing, quantum\ +*Path:* {file}`stable_plugins/quantum_ml/pennylane_qiskit_ml/hybrid_ae_pkg/__init__.py` + +Reduces the dimensionality of a given dataset with a combination of classical and quantum neural networks. +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json, text/csv|✓| +|entity/vector|application/json, text/csv|🗙| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/vector|application/json|✓| +|entity/vector|application/json|✓| +|qnn-weights/*|application/json|✓| + + +(manual-classification)= +### Manual Classification (@v0.2.1) + +processing – data-annotation, manual, preprocessing\ +*Path:* {file}`stable_plugins/muse/manual_classification/__init__.py` + +Manually annotate classes for data sets from MUSE database. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/list|application/json, text/csv|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/list|application/json, text/csv|✓| + + +(max_cut)= +### Max Cut (@v0.1.1) + +processing – QML, clustering, quantum\ +*Path:* {file}`stable_plugins/quantum_ml/max_cut/max_cut/__init__.py` + +Clusters data with the max cut algorithm + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/matrix|application/json|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|🗙| + + +(mds)= +### Multidimensional Scaling (MDS) (@v0.2.1) + +processing – distance-calculation, embedding, feature-engineering, preprocessing\ +*Path:* {file}`stable_plugins/classical_ml/scikit_ml/mds.py` + +Converts distance values (distance matrix) to points in a space. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|custom/entity-distances|application/json|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/vector|application/json|✓| + + +(one-hot-encoding)= +### One-Hot Encoding (@v0.2.1) + +processing – encoding, one-hot-encoding, preprocessing\ +*Path:* {file}`stable_plugins/classical_ml/data_preparation/one-hot_encoding.py` + +Converts Data to One-Hot Encodings + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/list|application/json|✓| +|graph/taxonomy|application/zip|✓| +|entity/attribute-metadata|application/json|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/vector|application/csv|✓| + + +(optics)= +### Optics (@v0.1.1) + +processing – ML, clustering\ +*Path:* {file}`stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py` + +Clusters data with the OPTICS algorithm. The plugin uses the implementation by scikit-learn v1.1. More information about the algorithm can be found [here](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.OPTICS.html#sklearn.cluster.OPTICS). +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|🗙| + + +(optimizer)= +### Optimizer plugin (@v1.0.1) + +processing – optimization\ +*Path:* {file}`plugins/optimization_coordinator/__init__.py` + +This plugin provides an API to optimize data given an user selected objective-function and a minimization algorithm. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|txt/*|text/plain|✓| +|txt/*|text/plain|✓| + + +(pandas-preprocessing)= +### Pandas Preprocessing (@v0.1.1) + +processing – data-cleaning, preprocessing\ +*Path:* {file}`stable_plugins/classical_ml/data_preparation/pandas_preprocessing/__init__.py` + +Uses pandas preprocessing methods, to preprocess csv files. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|*/*|text/csv, application/json|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|*/*|text/csv|✓| + + +(pca)= +### Principle Component Analysis (PCA) (@v0.2.2) + +processing – feature-engineering, preprocessing\ +*Path:* {file}`stable_plugins/classical_ml/scikit_ml/pca/__init__.py` + +The PCA Plugin reduces the number of dimensions by computing the principle components. +The new orthonormal basis consists of the k first principle components. The methods implemented here are from scikit-learn. Currently this plugin uses scikit-learn version 1.1. + +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|text/csv, application/json|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/plot|text/html|🗙| +|custom/pca-metadata|application/json|✓| +|entity/vector|text/csv|✓| + + +(qiskit-executor)= +### Qiskit Executor (@v0.1.1) + +processing – circuit-executor, qasm, qasm-2, qasm-3, qc-executor, qiskit\ +*Path:* {file}`plugins/qiskit_executor/__init__.py` + +Allows execution of quantum circuits using IBM Quantum backends. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|executable/circuit|text/x-qasm|✓| +|provenance/execution-options|text/csv, application/json, application/X-lines+json|🗙| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/vector|application/json|✓| +|provenance/trace|application/json|✓| +|provenance/execution-options|application/json|✓| + + +(qiskit-quantum-kernel-estimation)= +### Qiskit Quantum Kernel Estimation (@v0.2.1) + +processing – QML, kernel, mapping, quantum\ +*Path:* {file}`stable_plugins/quantum_ml/qiskit_ml/qiskit_quantum_kernel_estimation/__init__.py` + +Produces a kernel matrix from a quantum kernel. Specifically qiskit's feature maps are used, combined with qiskit_machine_learning.kernels.QuantumKernel. These feature maps are ZFeatureMap, ZZFeatureMap, PauliFeatureMap from qiskit.circuit.library. These feature maps all use the proposed kernel by Havlíček [0]. The following versions were used `qiskit~=0.43` and `qiskit-machine-learning~=0.4.0`. + +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format. They may be stored in either a csv or a json file. The plugin ``data-creator`` can generate these entities. + +Source: +[0] [Havlíček, V., Córcoles, A.D., Temme, K. et al. Supervised learning with quantum-enhanced feature spaces. Nature 567, 209–212 (2019).](https://doi.org/10.1038/s41586-019-0980-2) + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json, text/csv|✓| +|entity/vector|application/json, text/csv|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/kernel-matrix|application/json|✓| + + +(quantum-cnn@v0-1-1)= +### Quantum CNN (@v0.1.1) + +processing – QML, classification, neural-network, quantum\ +*Path:* {file}`stable_plugins/quantum_ml/pennylane_qiskit_ml/qcnn/__init__.py` + +Labels data with the help of a quantum convolutional neural network + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/shaped_vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|✓| +|entity/shaped_vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|🗙| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|✓| +|plot/*|text/html|✓| +|qnn-weights/*|application/json|✓| + + +(quantum-kernel-estimation)= +### Quantum Kernel Estimation (@v0.2.1) + +processing – QML, kernel, mapping, quantum\ +*Path:* {file}`stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_kernel_estimation/__init__.py` + +This plugin produces the matrix of a quantum kernel. Since this depends on the expected values of the quantum circuit, we can only estimate it and therefore call it Quantum Kernel Estimation. The Plugin implements the kernels by Havlíček et al [0] and Suzuki et al [1]. + +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format. They may be stored in either a csv or a json file. The plugin ``data-creator`` can generate these entities. + +Source: +[0] [Havlíček, V., Córcoles, A.D., Temme, K. et al. Supervised learning with quantum-enhanced feature spaces. Nature 567, 209–212 (2019).](https://doi.org/10.1038/s41586-019-0980-2) +[1] [Suzuki, Y., Yano, H., Gao, Q. et al. Analysis and synthesis of feature map for kernel-based quantum classifier. Quantum Mach. Intell. 2, 9 (2020).](https://doi.org/10.1007/s42484-020-00020-y) + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json, text/csv|✓| +|entity/vector|application/json, text/csv|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/kernel-matrix|application/json|✓| + + +(qnn)= +### Quantum Neutral Network (QNN) (@v0.1.1) + +processing – QML, classical, classification, neural-network, quantum\ +*Path:* {file}`stable_plugins/quantum_ml/pennylane_qiskit_ml/qnn/__init__.py` + +Simple QNN with variable number of variational quantum layers + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|✓| +|entity/vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|🗙| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|🗙| +|plot/*|text/html|🗙| +|qnn-weights/*|application/json|✓| +|representative-circuit/*|application/qasm|🗙| + + +(quantum-parzen-window)= +### Quantum Parzen Window (@v0.2.1) + +processing – QML, classification, quantum, supervised-learning\ +*Path:* {file}`stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_parzen_window/__init__.py` + +This plugin implements a quantum parzen window. A parzen window labels an unlabeled data point via a majority vote of all labeled points that are at most a certain distance away from the unlabeled point.The Plugin implements the algorithm by Ruan et al. [0]. + +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format and labels in the [entity/label](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-label) format. Both may be stored in either a csv or a json file. Both can be generated with the ``data-creator`` plugin. +Source: +[0] [Ruan, Y., Xue, X., Liu, H. et al. Quantum Algorithm for K-Nearest Neighbors Classification Based on the Metric of Hamming Distance. Int J Theor Phys 56, 3496–3507 (2017).](https://doi.org/10.1007/s10773-017-3514-4) + + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|✓| +|entity/vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|🗙| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|🗙| +|plot/*|text/html|🗙| +|representative-circuit/*|application/qasm|✓| + + +(vqc)= +### Quantum Variational Classifier (@v0.1.1) + +processing – QML, classification, quantum\ +*Path:* {file}`stable_plugins/quantum_ml/qiskit_ml/variational_quantum_classifier/__init__.py` + +This plugin implements the Variational Quantum Classifier (VQC) by Qiskit [0]. It's currently using version 0.4.0 of qiskit's machine learning library. +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format and labels in the [entity/label](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-label) format. Both may be stored in either a csv or a json file. Both can be generated with the ``data-creator`` plugin. + +Source: +[0] [Qiskit documentation, Variational Quantum Classifier](https://qiskit.org/documentation/machine-learning/stubs/qiskit_machine_learning.algorithms.VQC.html#qiskit_machine_learning.algorithms.VQC) +[1] [Havlíček, V., Córcoles, A.D., Temme, K. et al. Supervised learning with quantum-enhanced feature spaces. Nature 567, 209–212 (2019).](https://doi.org/10.1038/s41586-019-0980-2) + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|✓| +|entity/vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|🗙| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|🗙| +|plot/*|text/html|🗙| +|representative-circuit/*|application/qasm|✓| +|vqc-metadata/*|application/json|✓| + + +(quantum-k-nearest-neighbours)= +### Quantum k Nearest Neighbours (@v0.2.1) + +processing – QML, clustering, quantum, supervised-learning\ +*Path:* {file}`stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_nearest_neighbours/__init__.py` + +This plugin implements quantum k nearest neighbours algorithms. Given a set of already labeled data and an integer k, a new data point is labeled by a majority vote of the k nearest training points. +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format and labels in the [entity/label](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-label) format. Both may be stored in either a csv or a json file. Both can be generated with the ``data-creator`` plugin. + +Source: +[0] [Schuld, M., Sinayskiy, I., Petruccione, F. (2014). Quantum Computing for Pattern Classification. In: Pham, DN., Park, SB. (eds) PRICAI 2014: Trends in Artificial Intelligence. PRICAI 2014. Lecture Notes in Computer Science(), vol 8862. Springer, Cham.](https://doi.org/10.1007/978-3-319-13560-1_17) +[1] [Basheer, Afrad and Afham, A. and Goyal, Sandeep K. (2020). Quantum k-nearest neighbors algorithm. In arXiv.](https://doi.org/10.48550/arXiv.2003.09187) +[2] [Ruan, Y., Xue, X., Liu, H. et al. Quantum Algorithm for K-Nearest Neighbors Classification Based on the Metric of Hamming Distance. Int J Theor Phys 56, 3496–3507 (2017).](https://doi.org/10.1007/s10773-017-3514-4) + + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|✓| +|entity/vector|application/json, text/csv|✓| +|entity/label|application/json, text/csv|🗙| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|🗙| +|plot/*|text/html|🗙| +|representative-circuit/*|application/qasm|✓| + + +(quantum-k-means)= +### Quantum k-means (@v0.2.1) + +processing – QML, clustering, quantum\ +*Path:* {file}`stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_means/__init__.py` + +This plugin groups the data into different clusters, with the help of quantum algorithms. +Currently there are four implemented algorithms. Destructive interference and negative rotation are from [0], positive correlation is from [1] and state preparation is from a previous colleague. +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format in either a csv or a json file. +Source: +[0] [S. Khan and A. Awan and G. Vall-Llosera. K-Means Clustering on Noisy Intermediate Scale Quantum Computers.arXiv.](https://doi.org/10.48550/ARXIV.1909.12183) +[1] + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|application/json, text/csv|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/clusters|application/json|✓| + + +(rest-connector)= +### REST API Connector (@v0.1.0) + +interaction – rest\ +*Path:* {file}`plugins/rest_connector/plugin.py` + +Integrate REST APIs as plugins. + +(sql-loader)= +### SQL Loader (@v0.1.1) + +processing – data-loading, mariadb, mysql, postgresql, sql\ +*Path:* {file}`plugins/sql_loader/__init__.py` + +Allows to manage sql databases and use them as a source. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/list|application/json|✓| + + +(svm)= +### SVM (@v0.1.1) + +processing – ML, QML, classical, classification, quantum, supervised-learning\ +*Path:* {file}`stable_plugins/quantum_ml/qiskit_ml/svm/__init__.py` + +Classifies data with a support vector machine. This plugin uses the implementation of scikit-learn 1.1 [0]. The quantum kernels are from Qiskit [1] and the data maps are from Havlíček et al. [2] and Suzuki et al. [3]. + +The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format and labels in the [entity/label](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-label) format. A precomputed kernel matrix should be stored in the [entity/matrix](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-matrix) format. All of them may be stored in either a csv or a json file. A set of entity points and labels can be generated with the ``data-creator`` plugin. A precomputed kernel can be computed with a quantum kernel estimation plugin, given the entity points. + +Source: +[0] [https://scikit-learn.org/1.1/modules/svm.html#svm](https://scikit-learn.org/1.1/modules/svm.html#svm) +[1] Qiskit's quantum kernels [ZFeatureMap](https://qiskit.org/documentation/stubs/qiskit.circuit.library.ZFeatureMap.html), [ZZFeatureMap](https://qiskit.org/documentation/stubs/qiskit.circuit.library.ZZFeatureMap.html) and [PauliFeatureMap](https://qiskit.org/documentation/stubs/qiskit.circuit.library.PauliFeatureMap.html) +[2] [Havlíček, V., Córcoles, A.D., Temme, K. et al. Supervised learning with quantum-enhanced feature spaces. Nature 567, 209–212 (2019).](https://doi.org/10.1038/s41586-019-0980-2) +[3] [Suzuki, Y., Yano, H., Gao, Q. et al. Analysis and synthesis of feature map for kernel-based quantum classifier. Quantum Mach. Intell. 2, 9 (2020).](https://doi.org/10.1007/s42484-020-00020-y) + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/vector|text/csv, application/json|🗙| +|entity/label|text/csv, application/json|✓| +|entity/vector|text/csv, application/json|🗙| +|entity/label|text/csv, application/json|🗙| +|entity/matrix|text/csv, application/json|🗙| +|entity/matrix|text/csv, application/json|🗙| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/label|application/json|✓| +|plot/*|text/html|🗙| +|plot/*|text/html|🗙| +|entity/vector|application/json|✓| + + +(scipy-minimizer)= +### Scipy Minimizer Plugin (@v1.0.0) + +processing – minimizer, optimization\ +*Path:* {file}`plugins/scipy_minimizer/__init__.py` + +This plugin provides an API to minimize a given objective function with scipy.optimize.minimize(). + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|txt/*|text/plain|✓| +|txt/*|text/plain|✓| + + +(scipy-minimizer-grad)= +### Scipy Minimizer with Gradient Plugin (@v1.0.0) + +processing – gradient, minimizer, optimization\ +*Path:* {file}`plugins/scipy_minimizer_grad/__init__.py` + +This plugin provides an API to minimize a given objective function with scipy.optimize.minimize() with gradient support. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|txt/*|text/plain|✓| +|txt/*|text/plain|✓| + + +(sim-to-dist-transformers)= +### Similarities to distances transformers (@v0.2.1) + +processing – distance-calculation, preprocessing, similarity-calculation\ +*Path:* {file}`stable_plugins/classical_ml/data_preparation/transformers.py` + +Transforms similarities to distances. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|custom/attribute-similarities|application/zip|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/attribute-distances|application/zip|✓| + + +(sym-max-mean)= +### Sym Max Mean attribute comparer (@v0.1.1) + +processing – preprocessing, similarity-calculation\ +*Path:* {file}`stable_plugins/classical_ml/data_preparation/sym_max_mean.py` + +Compares attributes and returns similarity values. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/list|application/json|✓| +|custom/element-similarities|application/zip|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/attribute-similarities|application/zip|✓| + + +(time-tanh)= +### Time tanh similarities (@v0.2.1) + +processing – preprocessing, similarity-calculation\ +*Path:* {file}`stable_plugins/classical_ml/data_preparation/time_tanh.py` + +Compares elements and returns similarity values. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/list|application/json|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/element-similarities|application/zip|✓| + + +(workflow-management)= +### Workflow Management (@v0.1.1) + +interaction – bpmn, camunda-engine, workflow\ +*Path:* {file}`stable_plugins/workflow/workflows/management.py` + +Manage workflows deployed in Camunda. + +(wu-palmer)= +### Wu Palmer similarities (@v0.2.1) + +processing – preprocessing, similarity-calculation\ +*Path:* {file}`stable_plugins/classical_ml/data_preparation/wu_palmer.py` + +Compares elements and returns similarity values. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|entity/list|application/json|✓| +|entity/attribute-metadata|application/json|✓| +|graph/taxonomy|application/zip|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/element-similarities|application/zip|✓| + + +(zip-merger)= +### Zip merger (@v0.2.0) + +processing – utility\ +*Path:* {file}`stable_plugins/file_utils/zip_merger.py` + +Merges two zip files into one zip file. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|*/*|application/zip|✓| +|*/*|application/zip|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|*/*|application/zip|✓| + + +(circuit-demo)= +### circuit-demo (@v1.0.1) + +processing – circuit-demo, demo, quantum\ +*Path:* {file}`stable_plugins/demo/circuit-demo.py` + +A demo plugin implementing circuits for the bell states and executing them using a circuit executor. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/vector|application/json|✓| +|executable/circuit|text/x-qasm|✓| + + +(csv-visualization)= +### csv-visualization (@v0.1.1) + +visualization – csv, visualization\ +*Path:* {file}`stable_plugins/visualization/file_types/csv_visualization.py` + +A demo CSV visualization plugin. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|*/*|text/csv|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|*/*|text/html|✓| + + +(file-upload)= +### file-upload (@v0.2.0) + +dataloader – data-loading\ +*Path:* {file}`stable_plugins/file_utils/file_upload.py` + +Uploads files to use in the workflow. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|*/*|*/*|✓| + + +(hello-world)= +### hello-world (@v0.2.1) + +processing – demo, hello-world\ +*Path:* {file}`stable_plugins/demo/hello_world.py` + +Tests the connection of all components by printing some text. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/hello-world-output|text/plain|✓| + + +(hello-world-multi-step)= +### hello-world-multi-step (@v0.2.1) + +processing – demo, hello-world, multistep\ +*Path:* {file}`stable_plugins/demo/hello_worl_multi_step/__init__.py` + +Tests the connection of all components by printing some text. Also tests the ability to execute multi-step plugins. + +(hinge-loss@v1-0-0)= +### hinge-loss (@v1.0.0) + +processing – objective-function, optimization\ +*Path:* {file}`plugins/hinge_loss/__init__.py` + +Hinge Loss objective-function plugin. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|txt/*|text/plain|✓| + + +(json-visualization)= +### json-visualization (@v0.2.1) + +visualization – json, visualization\ +*Path:* {file}`stable_plugins/visualization/file_types/json_visualization.py` + +Visualizes JSON data. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|*/*|application/json|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/hello-world-output|text/html|✓| + + +(neural-network@v1-0-1)= +### neural-network (@v1.0.1) + +processing – ML, classical, gradient, neural-network, objective-function, optimization\ +*Path:* {file}`plugins/neural_network/__init__.py` + +Neural Network objective-function plugin. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|txt/*|text/plain|✓| + + +(nisq-analyzer)= +### nisq-analyzer (@v0.2.0) + +processing – nisq-analyzer\ +*Path:* {file}`stable_plugins/nisq_analyzer/nisq_analyzer.py` + +Provides the NISQ Analyzer UI. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|custom/nisq-analyzer-result|application/json|✓| + + +(qasm-visualization)= +### qasm-visualization (@v0.3.1) + +visualization – qasm, visualization\ +*Path:* {file}`stable_plugins/visualization/file_types/qasm_visualization.py` + +Visualizes QASM data. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|*/*|text/x-qasm|✓| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|*/*|image/svg+xml|✓| + + +(qiskit-simulator)= +### qiskit-simulator (@v0.3.0) + +processing – circuit-executor, qasm, qasm-2, qc-simulator, qiskit\ +*Path:* {file}`stable_plugins/quantum_ml/qiskit_ml/qiskit_simulator.py` + +Allows execution of quantum circuits using a simulator packaged with qiskit. + +**Inputs:** + +| Data Type | Content Type | Required | +|-----------|--------------| :------: | +|executable/circuit|text/x-qasm|✓| +|provenance/execution-options|text/csv, application/json, application/X-lines+json|🗙| + + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|entity/vector|application/json|✓| +|entity/vector|application/json|🗙| +|provenance/trace|application/json|✓| +|provenance/execution-options|application/json|✓| + + +(ridge-loss@v1-0-0)= +### ridge-loss (@v1.0.0) + +processing – objective-function, optimization\ +*Path:* {file}`plugins/ridge_loss/__init__.py` + +Ridge Loss objective-function plugin. + +**Outputs:** + +| Data Type | Content Type | Always | +|-----------|--------------| :----: | +|txt/*|text/plain|✓| + + + diff --git a/plugins/neural_network/__init__.py b/plugins/neural_network/__init__.py index 63a09555c..ea40bd2d6 100644 --- a/plugins/neural_network/__init__.py +++ b/plugins/neural_network/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "neural-network" -__version__ = "v1.0.0" +__version__ = "v1.0.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -35,7 +35,14 @@ class NeuralNetwork(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Neural Network objective-function plugin." - tags = ["optimization", "objective-function", "gradient"] + tags = [ + "optimization", + "objective-function", + "gradient", + "neural-network", + "classical", + "ML", + ] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/plugins/optimization_coordinator/__init__.py b/plugins/optimization_coordinator/__init__.py index 503237469..2c1588930 100644 --- a/plugins/optimization_coordinator/__init__.py +++ b/plugins/optimization_coordinator/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "optimizer" -__version__ = "v1.0.0" +__version__ = "v1.0.1" _identifier = plugin_identifier(_plugin_name, __version__) diff --git a/plugins/sql_loader/__init__.py b/plugins/sql_loader/__init__.py index d05d649f2..7f7cb5181 100644 --- a/plugins/sql_loader/__init__.py +++ b/plugins/sql_loader/__init__.py @@ -21,7 +21,7 @@ _plugin_name = "sql-loader" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -38,7 +38,7 @@ class SQLLoaderPlugin(QHAnaPluginBase): version = __version__ description = "Allows to manage sql databases and use them as a source." - tags = ["sql", "mysql", "mariadb", "postgresql"] + tags = ["data-loading", "sql", "mysql", "mariadb", "postgresql"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/data_preparation/aggregators.py b/stable_plugins/classical_ml/data_preparation/aggregators.py index 2a564b8a5..82c942941 100644 --- a/stable_plugins/classical_ml/data_preparation/aggregators.py +++ b/stable_plugins/classical_ml/data_preparation/aggregators.py @@ -53,7 +53,7 @@ _plugin_name = "distance-aggregator" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -232,7 +232,7 @@ class Aggregator(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Aggregates attribute distances to entity distances." - tags = ["aggregator"] + tags = ["preprocessing", "distance-calculation"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/data_preparation/entity_filter.py b/stable_plugins/classical_ml/data_preparation/entity_filter.py index 2fe97d270..533a10a65 100644 --- a/stable_plugins/classical_ml/data_preparation/entity_filter.py +++ b/stable_plugins/classical_ml/data_preparation/entity_filter.py @@ -60,7 +60,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "entity-filter" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) INFINITY = -1 @@ -293,7 +293,7 @@ class EntityFilter(QHAnaPluginBase): description = ( "Loads and filters entities from a file that contains a list of entities." ) - tags = ["data-loading"] + tags = ["preprocessing", "filter", "sample"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/data_preparation/sym_max_mean.py b/stable_plugins/classical_ml/data_preparation/sym_max_mean.py index 0aafb18e8..07a50a2ed 100644 --- a/stable_plugins/classical_ml/data_preparation/sym_max_mean.py +++ b/stable_plugins/classical_ml/data_preparation/sym_max_mean.py @@ -58,7 +58,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "sym-max-mean" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -229,7 +229,7 @@ class SymMaxMean(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Compares attributes and returns similarity values." - tags = ["attribute-similarity-calculation"] + tags = ["preprocessing", "similarity-calculation"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/data_preparation/time_tanh.py b/stable_plugins/classical_ml/data_preparation/time_tanh.py index 6c5721a46..619716f1e 100644 --- a/stable_plugins/classical_ml/data_preparation/time_tanh.py +++ b/stable_plugins/classical_ml/data_preparation/time_tanh.py @@ -57,7 +57,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "time-tanh" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -227,7 +227,7 @@ class TimeTanh(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Compares elements and returns similarity values." - tags = ["similarity-calculation"] + tags = ["preprocessing", "similarity-calculation"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/data_preparation/transformers.py b/stable_plugins/classical_ml/data_preparation/transformers.py index 8cd7ada58..f2fde24b0 100644 --- a/stable_plugins/classical_ml/data_preparation/transformers.py +++ b/stable_plugins/classical_ml/data_preparation/transformers.py @@ -56,7 +56,7 @@ from qhana_plugin_runner.requests import retrieve_filename _plugin_name = "sim-to-dist-transformers" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -254,7 +254,7 @@ class Transformers(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Transforms similarities to distances." - tags = ["sim-to-dist"] + tags = ["preprocessing", "similarity-calculation", "distance-calculation"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/data_preparation/wu_palmer.py b/stable_plugins/classical_ml/data_preparation/wu_palmer.py index 9793e0d23..bd25e4444 100644 --- a/stable_plugins/classical_ml/data_preparation/wu_palmer.py +++ b/stable_plugins/classical_ml/data_preparation/wu_palmer.py @@ -60,7 +60,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "wu-palmer" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -260,7 +260,7 @@ class WuPalmer(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Compares elements and returns similarity values." - tags = ["similarity-calculation"] + tags = ["preprocessing", "similarity-calculation"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py b/stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py index 32cfdd948..4a0da392e 100644 --- a/stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py +++ b/stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py @@ -21,7 +21,7 @@ _plugin_name = "classical-k-means" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -41,7 +41,7 @@ class ClassicalKMeans(QHAnaPluginBase): "and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points." ) - tags = [] + tags = ["ML", "clustering"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py b/stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py index 510f331da..f910fe5f5 100644 --- a/stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py +++ b/stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py @@ -21,7 +21,7 @@ _plugin_name = "classical-k-medoids" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -40,7 +40,7 @@ class ClassicalKMedoids(QHAnaPluginBase): "The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format " "and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points." ) - tags = [] + tags = ["ML", "clustering"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/scikit_ml/mds.py b/stable_plugins/classical_ml/scikit_ml/mds.py index 61bb0f3d8..7062f9a1d 100644 --- a/stable_plugins/classical_ml/scikit_ml/mds.py +++ b/stable_plugins/classical_ml/scikit_ml/mds.py @@ -52,7 +52,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "mds" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -277,7 +277,7 @@ class MDS(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Converts distance values (distance matrix) to points in a space." - tags = ["dist-to-points"] + tags = ["preprocessing", "distance-calculation", "feature-engineering", "embedding"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py b/stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py index eb511f43a..c866dc28a 100644 --- a/stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py +++ b/stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py @@ -21,7 +21,7 @@ _plugin_name = "optics" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -45,7 +45,7 @@ class Optics(QHAnaPluginBase): "The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format " "and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points." ) - tags = [] + tags = ["ML", "clustering"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/scikit_ml/pca/__init__.py b/stable_plugins/classical_ml/scikit_ml/pca/__init__.py index 4d3c18741..47ad8cc74 100644 --- a/stable_plugins/classical_ml/scikit_ml/pca/__init__.py +++ b/stable_plugins/classical_ml/scikit_ml/pca/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import plugin_identifier, QHAnaPluginBase _plugin_name = "pca" -__version__ = "v0.2.1" +__version__ = "v0.2.2" _identifier = plugin_identifier(_plugin_name, __version__) @@ -45,7 +45,7 @@ class PCA(QHAnaPluginBase): "and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points." ) version = __version__ - tags = ["dimension-reduction"] + tags = ["preprocessing", "feature-engineering"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/data_synthesis/data_creator/__init__.py b/stable_plugins/data_synthesis/data_creator/__init__.py index a75ad9f37..2cd538f65 100644 --- a/stable_plugins/data_synthesis/data_creator/__init__.py +++ b/stable_plugins/data_synthesis/data_creator/__init__.py @@ -22,7 +22,7 @@ _plugin_name = "data-creator" -__version__ = "v0.2.1" +__version__ = "v0.2.2" _identifier = plugin_identifier(_plugin_name, __version__) @@ -39,7 +39,7 @@ class DataCreator(QHAnaPluginBase): version = __version__ description = "A plugin to create datasets." - tags = [] + tags = ["data-loading", "data-synthesizing"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/demo/circuit-demo.py b/stable_plugins/demo/circuit-demo.py index aaf0cafbb..bc2c098a9 100644 --- a/stable_plugins/demo/circuit-demo.py +++ b/stable_plugins/demo/circuit-demo.py @@ -63,7 +63,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "circuit-demo" -__version__ = "v1.0.0" +__version__ = "v1.0.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -412,7 +412,7 @@ class CircuitDemo(QHAnaPluginBase): name = _plugin_name version = __version__ description = "A demo plugin implementing circuits for the bell states and executing them using a circuit executor." - tags = ["circuit-demo", "demo"] + tags = ["circuit-demo", "demo", "quantum"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/demo/hello_worl_multi_step/__init__.py b/stable_plugins/demo/hello_worl_multi_step/__init__.py index 6d46957e1..ee3dfee89 100644 --- a/stable_plugins/demo/hello_worl_multi_step/__init__.py +++ b/stable_plugins/demo/hello_worl_multi_step/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import plugin_identifier, QHAnaPluginBase _plugin_name = "hello-world-multi-step" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -36,7 +36,7 @@ class HelloWorldMultiStep(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Tests the connection of all components by printing some text. Also tests the ability to execute multi-step plugins." - tags = ["hello-world", "multistep"] + tags = ["hello-world", "demo", "multistep"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/demo/hello_world.py b/stable_plugins/demo/hello_world.py index 0ecc4f431..942bf7625 100644 --- a/stable_plugins/demo/hello_world.py +++ b/stable_plugins/demo/hello_world.py @@ -47,7 +47,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "hello-world" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -195,7 +195,7 @@ class HelloWorld(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Tests the connection of all components by printing some text." - tags = ["hello-world"] + tags = ["hello-world", "demo"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/muse/costume_loader_pkg/__init__.py b/stable_plugins/muse/costume_loader_pkg/__init__.py index e7ceb4495..84ae62ff1 100644 --- a/stable_plugins/muse/costume_loader_pkg/__init__.py +++ b/stable_plugins/muse/costume_loader_pkg/__init__.py @@ -19,7 +19,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "costume-loader" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -35,7 +35,7 @@ class CostumeLoader(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Loads all the costumes or base elements from the MUSE database." - tags = ["data-loading"] + tags = ["data-loading", "MUSE"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/muse/manual_classification/__init__.py b/stable_plugins/muse/manual_classification/__init__.py index ee1b87c1f..cd0bd7f94 100644 --- a/stable_plugins/muse/manual_classification/__init__.py +++ b/stable_plugins/muse/manual_classification/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import plugin_identifier, QHAnaPluginBase _plugin_name = "manual-classification" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) MANUAL_CLASSIFICATION_BLP = SecurityBlueprint( @@ -35,7 +35,7 @@ class ManualClassification(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Manually annotate classes for data sets from MUSE database." - tags = ["data-annotation"] + tags = ["preprocessing", "data-annotation", "manual"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/max_cut/max_cut/__init__.py b/stable_plugins/quantum_ml/max_cut/max_cut/__init__.py index 7e93918d6..8492fe80c 100644 --- a/stable_plugins/quantum_ml/max_cut/max_cut/__init__.py +++ b/stable_plugins/quantum_ml/max_cut/max_cut/__init__.py @@ -21,7 +21,7 @@ _plugin_name = "max_cut" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -38,7 +38,7 @@ class MaxCut(QHAnaPluginBase): version = __version__ description = "Clusters data with the max cut algorithm" - tags = [] + tags = ["QML", "clustering", "quantum"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/pennylane_qiskit_ml/hybrid_ae_pkg/__init__.py b/stable_plugins/quantum_ml/pennylane_qiskit_ml/hybrid_ae_pkg/__init__.py index 1cc7abe8b..4f7983814 100644 --- a/stable_plugins/quantum_ml/pennylane_qiskit_ml/hybrid_ae_pkg/__init__.py +++ b/stable_plugins/quantum_ml/pennylane_qiskit_ml/hybrid_ae_pkg/__init__.py @@ -19,7 +19,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "hybrid-autoencoder" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -39,7 +39,7 @@ class HybridAutoencoderPlugin(QHAnaPluginBase): "The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format " "and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points." ) - tags = ["dimensionality-reduction"] + tags = ["QML", "preprocessing", "feature-engineering", "quantum"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/pennylane_qiskit_ml/qcnn/__init__.py b/stable_plugins/quantum_ml/pennylane_qiskit_ml/qcnn/__init__.py index 89df9058f..8a9b1dadb 100644 --- a/stable_plugins/quantum_ml/pennylane_qiskit_ml/qcnn/__init__.py +++ b/stable_plugins/quantum_ml/pennylane_qiskit_ml/qcnn/__init__.py @@ -21,7 +21,7 @@ _plugin_name = "quantum-cnn" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -38,7 +38,7 @@ class QCNN(QHAnaPluginBase): version = __version__ description = "Labels data with the help of a quantum convolutional neural network" - tags = [] + tags = ["QML", "classification", "quantum", "neural-network"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/pennylane_qiskit_ml/qnn/__init__.py b/stable_plugins/quantum_ml/pennylane_qiskit_ml/qnn/__init__.py index eee89a98f..c5b99ee6a 100644 --- a/stable_plugins/quantum_ml/pennylane_qiskit_ml/qnn/__init__.py +++ b/stable_plugins/quantum_ml/pennylane_qiskit_ml/qnn/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "qnn" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -43,7 +43,7 @@ class QNN(QHAnaPluginBase): "Both may be stored in either a csv or a json file. Both can be generated with the ``data-creator`` plugin." ) - tags = ["classification", "quantum", "classical", "neural network"] + tags = ["QML", "classification", "quantum", "classical", "neural-network"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/pennylane_qiskit_ml/qnn/routes.py b/stable_plugins/quantum_ml/pennylane_qiskit_ml/qnn/routes.py index 6b49333b9..1d415fe0b 100644 --- a/stable_plugins/quantum_ml/pennylane_qiskit_ml/qnn/routes.py +++ b/stable_plugins/quantum_ml/pennylane_qiskit_ml/qnn/routes.py @@ -133,7 +133,7 @@ def get(self): ), ], ), - tags=["neural-network", "machine-learning"], + tags=QNN.instance.tags, ) diff --git a/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_means/__init__.py b/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_means/__init__.py index 50076b9a1..8f757c724 100644 --- a/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_means/__init__.py +++ b/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_means/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import plugin_identifier, QHAnaPluginBase _plugin_name = "quantum-k-means" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -44,7 +44,7 @@ class QKMeans(QHAnaPluginBase): "[0] [S. Khan and A. Awan and G. Vall-Llosera. K-Means Clustering on Noisy Intermediate Scale Quantum Computers.arXiv.](https://doi.org/10.48550/ARXIV.1909.12183)\n" "[1] " ) - tags = ["points-to-clusters", "k-means"] + tags = ["QML", "clustering", "quantum"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_nearest_neighbours/__init__.py b/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_nearest_neighbours/__init__.py index e17fe2918..7a2b1a4d7 100644 --- a/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_nearest_neighbours/__init__.py +++ b/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_k_nearest_neighbours/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import plugin_identifier, QHAnaPluginBase _plugin_name = "quantum-k-nearest-neighbours" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -46,7 +46,7 @@ class QKNN(QHAnaPluginBase): "[1] [Basheer, Afrad and Afham, A. and Goyal, Sandeep K. (2020). Quantum k-nearest neighbors algorithm. In arXiv.](https://doi.org/10.48550/arXiv.2003.09187)\n" "[2] [Ruan, Y., Xue, X., Liu, H. et al. Quantum Algorithm for K-Nearest Neighbors Classification Based on the Metric of Hamming Distance. Int J Theor Phys 56, 3496–3507 (2017).](https://doi.org/10.1007/s10773-017-3514-4)\n" ) - tags = ["k-nearest-neighbours", "supervised-learning"] + tags = ["QML", "clustering", "quantum", "supervised-learning"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_kernel_estimation/__init__.py b/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_kernel_estimation/__init__.py index c7349e6e7..a07daf37a 100644 --- a/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_kernel_estimation/__init__.py +++ b/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_kernel_estimation/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import plugin_identifier, QHAnaPluginBase _plugin_name = "quantum-kernel-estimation" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -45,7 +45,7 @@ class QKE(QHAnaPluginBase): "[0] [Havlíček, V., Córcoles, A.D., Temme, K. et al. Supervised learning with quantum-enhanced feature spaces. Nature 567, 209–212 (2019).](https://doi.org/10.1038/s41586-019-0980-2)\n" "[1] [Suzuki, Y., Yano, H., Gao, Q. et al. Analysis and synthesis of feature map for kernel-based quantum classifier. Quantum Mach. Intell. 2, 9 (2020).](https://doi.org/10.1007/s42484-020-00020-y)" ) - tags = ["kernel", "mapping"] + tags = ["QML", "quantum", "kernel", "mapping"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_parzen_window/__init__.py b/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_parzen_window/__init__.py index a872d1690..4f0d06856 100644 --- a/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_parzen_window/__init__.py +++ b/stable_plugins/quantum_ml/pennylane_qiskit_ml/quantum_parzen_window/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import plugin_identifier, QHAnaPluginBase _plugin_name = "quantum-parzen-window" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -45,7 +45,7 @@ class QParzenWindow(QHAnaPluginBase): "Source:\n" "[0] [Ruan, Y., Xue, X., Liu, H. et al. Quantum Algorithm for K-Nearest Neighbors Classification Based on the Metric of Hamming Distance. Int J Theor Phys 56, 3496–3507 (2017).](https://doi.org/10.1007/s10773-017-3514-4)\n" ) - tags = ["parzen-window", "supervised-learning", "quantum"] + tags = ["QML", "classification", "supervised-learning", "quantum"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/qiskit_ml/qiskit_quantum_kernel_estimation/__init__.py b/stable_plugins/quantum_ml/qiskit_ml/qiskit_quantum_kernel_estimation/__init__.py index 20ee20f48..553daad53 100644 --- a/stable_plugins/quantum_ml/qiskit_ml/qiskit_quantum_kernel_estimation/__init__.py +++ b/stable_plugins/quantum_ml/qiskit_ml/qiskit_quantum_kernel_estimation/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import plugin_identifier, QHAnaPluginBase _plugin_name = "qiskit-quantum-kernel-estimation" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -49,7 +49,7 @@ class QiskitQKE(QHAnaPluginBase): "Source:\n" "[0] [Havlíček, V., Córcoles, A.D., Temme, K. et al. Supervised learning with quantum-enhanced feature spaces. Nature 567, 209–212 (2019).](https://doi.org/10.1038/s41586-019-0980-2)" ) - tags = ["kernel", "mapping"] + tags = ["QML", "quantum", "kernel", "mapping"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/qiskit_ml/svm/__init__.py b/stable_plugins/quantum_ml/qiskit_ml/svm/__init__.py index 28f4c8615..aa77df6a6 100644 --- a/stable_plugins/quantum_ml/qiskit_ml/svm/__init__.py +++ b/stable_plugins/quantum_ml/qiskit_ml/svm/__init__.py @@ -21,7 +21,7 @@ _plugin_name = "svm" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -56,7 +56,7 @@ class SVM(QHAnaPluginBase): "[3] [Suzuki, Y., Yano, H., Gao, Q. et al. Analysis and synthesis of feature map for kernel-based quantum classifier. Quantum Mach. Intell. 2, 9 (2020).](https://doi.org/10.1007/s42484-020-00020-y)" ) - tags = ["quantum", "classical", "supervised"] + tags = ["QML", "ML", "quantum", "classical", "classification", "supervised-learning"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/quantum_ml/qiskit_ml/variational_quantum_classifier/__init__.py b/stable_plugins/quantum_ml/qiskit_ml/variational_quantum_classifier/__init__.py index fbcf96ee7..2c9668e84 100644 --- a/stable_plugins/quantum_ml/qiskit_ml/variational_quantum_classifier/__init__.py +++ b/stable_plugins/quantum_ml/qiskit_ml/variational_quantum_classifier/__init__.py @@ -20,7 +20,7 @@ from qhana_plugin_runner.util.plugins import plugin_identifier, QHAnaPluginBase _plugin_name = "vqc" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -47,7 +47,7 @@ class VQC(QHAnaPluginBase): "[0] [Qiskit documentation, Variational Quantum Classifier](https://qiskit.org/documentation/machine-learning/stubs/qiskit_machine_learning.algorithms.VQC.html#qiskit_machine_learning.algorithms.VQC)\n" "[1] [Havlíček, V., Córcoles, A.D., Temme, K. et al. Supervised learning with quantum-enhanced feature spaces. Nature 567, 209–212 (2019).](https://doi.org/10.1038/s41586-019-0980-2)" ) - tags = ["classification", "quantum"] + tags = ["QML", "classification", "quantum"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/visualization/file_types/csv_visualization.py b/stable_plugins/visualization/file_types/csv_visualization.py index e79d9e899..3806cefd1 100644 --- a/stable_plugins/visualization/file_types/csv_visualization.py +++ b/stable_plugins/visualization/file_types/csv_visualization.py @@ -48,7 +48,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "csv-visualization" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -204,7 +204,7 @@ class CsvVisualization(QHAnaPluginBase): name = _plugin_name version = __version__ description = "A demo CSV visualization plugin." - tags = ["visualization"] + tags = ["visualization", "csv"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/visualization/file_types/json_visualization.py b/stable_plugins/visualization/file_types/json_visualization.py index a15cfd96a..15722569f 100644 --- a/stable_plugins/visualization/file_types/json_visualization.py +++ b/stable_plugins/visualization/file_types/json_visualization.py @@ -48,7 +48,7 @@ from qhana_plugin_runner.util.plugins import QHAnaPluginBase, plugin_identifier _plugin_name = "json-visualization" -__version__ = "v0.2.0" +__version__ = "v0.2.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -110,7 +110,7 @@ def get(self): ) ], ), - tags=[], + tags=plugin.tags, ) @@ -199,7 +199,7 @@ class JsonVisualization(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Visualizes JSON data." - tags = ["visualization"] + tags = ["visualization", "json"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/visualization/file_types/qasm_visualization.py b/stable_plugins/visualization/file_types/qasm_visualization.py index fef16fe32..0153aa8f9 100644 --- a/stable_plugins/visualization/file_types/qasm_visualization.py +++ b/stable_plugins/visualization/file_types/qasm_visualization.py @@ -53,7 +53,7 @@ from qhana_plugin_runner.db.models.virtual_plugins import DataBlob, PluginState _plugin_name = "qasm-visualization" -__version__ = "v0.3.0" +__version__ = "v0.3.1" _identifier = plugin_identifier(_plugin_name, __version__) @@ -115,7 +115,7 @@ def get(self): ) ], ), - tags=["visualization", "qasm"], + tags=plugin.tags, ) @@ -250,7 +250,7 @@ class QasmVisualization(QHAnaPluginBase): name = _plugin_name version = __version__ description = "Visualizes QASM data." - tags = ["visualization"] + tags = ["visualization", "qasm"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/workflow/workflows/__init__.py b/stable_plugins/workflow/workflows/__init__.py index 247a0cc73..2adcf3d65 100644 --- a/stable_plugins/workflow/workflows/__init__.py +++ b/stable_plugins/workflow/workflows/__init__.py @@ -11,7 +11,7 @@ TASK_LOGGER = get_task_logger(__name__) _plugin_name = "deploy-workflow" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) WORKFLOWS_BLP = SecurityBlueprint( diff --git a/stable_plugins/workflow/workflows/management.py b/stable_plugins/workflow/workflows/management.py index 90121dede..a7175261a 100644 --- a/stable_plugins/workflow/workflows/management.py +++ b/stable_plugins/workflow/workflows/management.py @@ -11,7 +11,7 @@ TASK_LOGGER = get_task_logger(__name__) _plugin_name = "workflow-management" -__version__ = "v0.1.0" +__version__ = "v0.1.1" _identifier = plugin_identifier(_plugin_name, __version__) WORKFLOW_MGMNT_BLP = SecurityBlueprint( diff --git a/stable_plugins/workflow/workflows/management_routes.py b/stable_plugins/workflow/workflows/management_routes.py index df0e14df7..5d27fb0c3 100644 --- a/stable_plugins/workflow/workflows/management_routes.py +++ b/stable_plugins/workflow/workflows/management_routes.py @@ -99,7 +99,7 @@ def get(self): data_input=[], data_output=[], ), - tags=["workflow", "bpmn", "camunda-engine"], + tags=WorkflowManagement.instance.tags, ) diff --git a/stable_plugins/workflow/workflows/routes.py b/stable_plugins/workflow/workflows/routes.py index 22726e675..0d7050acc 100644 --- a/stable_plugins/workflow/workflows/routes.py +++ b/stable_plugins/workflow/workflows/routes.py @@ -49,7 +49,7 @@ def get(self): data_input=[], data_output=[], ), - tags=["workflow", "bpmn", "camunda-engine"], + tags=DeployWorkflow.instance.tags, ) From e7c03a595f31f23689f304bd31a2265650e0591d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Thu, 10 Oct 2024 16:55:58 +0200 Subject: [PATCH 09/10] Add "classical" tags to classical ML plugins --- .../classical_ml/scikit_ml/classical_k_means/__init__.py | 2 +- .../classical_ml/scikit_ml/classical_k_medoids/__init__.py | 2 +- .../classical_ml/scikit_ml/optics-clustering/__init__.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py b/stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py index 4a0da392e..99319a003 100644 --- a/stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py +++ b/stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py @@ -41,7 +41,7 @@ class ClassicalKMeans(QHAnaPluginBase): "and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points." ) - tags = ["ML", "clustering"] + tags = ["ML", "clustering", "classical"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py b/stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py index f910fe5f5..6fc2671f1 100644 --- a/stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py +++ b/stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py @@ -40,7 +40,7 @@ class ClassicalKMedoids(QHAnaPluginBase): "The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format " "and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points." ) - tags = ["ML", "clustering"] + tags = ["ML", "clustering", "classical"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) diff --git a/stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py b/stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py index c866dc28a..b2aad8121 100644 --- a/stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py +++ b/stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py @@ -45,7 +45,7 @@ class Optics(QHAnaPluginBase): "The entity points should be saved in the [entity/vector](https://qhana-plugin-runner.readthedocs.io/en/latest/data-formats/examples/entities.html#entity-vector) format " "and they may be stored in either a csv or a json file. The ``data-creator`` plugin can generate some entity points." ) - tags = ["ML", "clustering"] + tags = ["ML", "clustering", "classical"] def __init__(self, app: Optional[Flask]) -> None: super().__init__(app) From e374c7ef5884e508809932fa4ba785ece4027b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20B=C3=BChler?= Date: Thu, 10 Oct 2024 17:06:17 +0200 Subject: [PATCH 10/10] Change unicode character in plugin documentation to a better supported alternative --- docs/all-plugins.md | 72 +++++++++++++++++++++++------------------- docs/plugin_autodoc.py | 4 +-- 2 files changed, 41 insertions(+), 35 deletions(-) diff --git a/docs/all-plugins.md b/docs/all-plugins.md index 43d16d006..4765d3fc2 100644 --- a/docs/all-plugins.md +++ b/docs/all-plugins.md @@ -21,6 +21,8 @@ - processing - ML + classical + clustering * - [Classical k Medoids (@v0.1.1)](#classical-k-medoids) @@ -28,6 +30,8 @@ - processing - ML + classical + clustering * - [Cluster Visualization (@v0.3.0)](#cluster-visualization) @@ -121,6 +125,8 @@ - processing - ML + classical + clustering * - [Optimizer plugin (@v1.0.1)](#optimizer) @@ -473,7 +479,7 @@ Aggregates attribute distances to entity distances. (classical-k-means)= ### Classical k Means (@v0.1.1) -processing – ML, clustering\ +processing – ML, classical, clustering\ *Path:* {file}`stable_plugins/classical_ml/scikit_ml/classical_k_means/__init__.py` Clusters data with classical k means algorithm. @@ -491,13 +497,13 @@ The entity points should be saved in the [entity/vector](https://qhana-plugin-ru | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/label|application/json|✓| -|plot/*|text/html|🗙| +|plot/*|text/html|╳| (classical-k-medoids)= ### Classical k Medoids (@v0.1.1) -processing – ML, clustering\ +processing – ML, classical, clustering\ *Path:* {file}`stable_plugins/classical_ml/scikit_ml/classical_k_medoids/__init__.py` Clusters data with classical k medoids algorithm. @@ -515,7 +521,7 @@ The entity points should be saved in the [entity/vector](https://qhana-plugin-ru | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/label|application/json|✓| -|plot/*|text/html|🗙| +|plot/*|text/html|╳| (cluster-visualization)= @@ -613,7 +619,7 @@ The entity points should be saved in the [entity/vector](https://qhana-plugin-ru | Data Type | Content Type | Required | |-----------|--------------| :------: | |entity/vector|application/json, text/csv|✓| -|entity/vector|application/json, text/csv|🗙| +|entity/vector|application/json, text/csv|╳| **Outputs:** @@ -667,7 +673,7 @@ Clusters data with the max cut algorithm | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/label|application/json|✓| -|plot/*|text/html|🗙| +|plot/*|text/html|╳| (mds)= @@ -719,7 +725,7 @@ Converts Data to One-Hot Encodings (optics)= ### Optics (@v0.1.1) -processing – ML, clustering\ +processing – ML, classical, clustering\ *Path:* {file}`stable_plugins/classical_ml/scikit_ml/optics-clustering/__init__.py` Clusters data with the OPTICS algorithm. The plugin uses the implementation by scikit-learn v1.1. More information about the algorithm can be found [here](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.OPTICS.html#sklearn.cluster.OPTICS). @@ -737,7 +743,7 @@ The entity points should be saved in the [entity/vector](https://qhana-plugin-ru | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/label|application/json|✓| -|plot/*|text/html|🗙| +|plot/*|text/html|╳| (optimizer)= @@ -800,7 +806,7 @@ The entity points should be saved in the [entity/vector](https://qhana-plugin-ru | Data Type | Content Type | Always | |-----------|--------------| :----: | -|custom/plot|text/html|🗙| +|custom/plot|text/html|╳| |custom/pca-metadata|application/json|✓| |entity/vector|text/csv|✓| @@ -818,7 +824,7 @@ Allows execution of quantum circuits using IBM Quantum backends. | Data Type | Content Type | Required | |-----------|--------------| :------: | |executable/circuit|text/x-qasm|✓| -|provenance/execution-options|text/csv, application/json, application/X-lines+json|🗙| +|provenance/execution-options|text/csv, application/json, application/X-lines+json|╳| **Outputs:** @@ -873,7 +879,7 @@ Labels data with the help of a quantum convolutional neural network |entity/shaped_vector|application/json, text/csv|✓| |entity/label|application/json, text/csv|✓| |entity/shaped_vector|application/json, text/csv|✓| -|entity/label|application/json, text/csv|🗙| +|entity/label|application/json, text/csv|╳| **Outputs:** @@ -930,7 +936,7 @@ Simple QNN with variable number of variational quantum layers |entity/vector|application/json, text/csv|✓| |entity/label|application/json, text/csv|✓| |entity/vector|application/json, text/csv|✓| -|entity/label|application/json, text/csv|🗙| +|entity/label|application/json, text/csv|╳| **Outputs:** @@ -938,10 +944,10 @@ Simple QNN with variable number of variational quantum layers | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/label|application/json|✓| -|plot/*|text/html|🗙| -|plot/*|text/html|🗙| +|plot/*|text/html|╳| +|plot/*|text/html|╳| |qnn-weights/*|application/json|✓| -|representative-circuit/*|application/qasm|🗙| +|representative-circuit/*|application/qasm|╳| (quantum-parzen-window)= @@ -964,7 +970,7 @@ Source: |entity/vector|application/json, text/csv|✓| |entity/label|application/json, text/csv|✓| |entity/vector|application/json, text/csv|✓| -|entity/label|application/json, text/csv|🗙| +|entity/label|application/json, text/csv|╳| **Outputs:** @@ -972,8 +978,8 @@ Source: | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/label|application/json|✓| -|plot/*|text/html|🗙| -|plot/*|text/html|🗙| +|plot/*|text/html|╳| +|plot/*|text/html|╳| |representative-circuit/*|application/qasm|✓| @@ -997,7 +1003,7 @@ Source: |entity/vector|application/json, text/csv|✓| |entity/label|application/json, text/csv|✓| |entity/vector|application/json, text/csv|✓| -|entity/label|application/json, text/csv|🗙| +|entity/label|application/json, text/csv|╳| **Outputs:** @@ -1005,8 +1011,8 @@ Source: | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/label|application/json|✓| -|plot/*|text/html|🗙| -|plot/*|text/html|🗙| +|plot/*|text/html|╳| +|plot/*|text/html|╳| |representative-circuit/*|application/qasm|✓| |vqc-metadata/*|application/json|✓| @@ -1033,7 +1039,7 @@ Source: |entity/vector|application/json, text/csv|✓| |entity/label|application/json, text/csv|✓| |entity/vector|application/json, text/csv|✓| -|entity/label|application/json, text/csv|🗙| +|entity/label|application/json, text/csv|╳| **Outputs:** @@ -1041,8 +1047,8 @@ Source: | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/label|application/json|✓| -|plot/*|text/html|🗙| -|plot/*|text/html|🗙| +|plot/*|text/html|╳| +|plot/*|text/html|╳| |representative-circuit/*|application/qasm|✓| @@ -1116,12 +1122,12 @@ Source: | Data Type | Content Type | Required | |-----------|--------------| :------: | -|entity/vector|text/csv, application/json|🗙| +|entity/vector|text/csv, application/json|╳| |entity/label|text/csv, application/json|✓| -|entity/vector|text/csv, application/json|🗙| -|entity/label|text/csv, application/json|🗙| -|entity/matrix|text/csv, application/json|🗙| -|entity/matrix|text/csv, application/json|🗙| +|entity/vector|text/csv, application/json|╳| +|entity/label|text/csv, application/json|╳| +|entity/matrix|text/csv, application/json|╳| +|entity/matrix|text/csv, application/json|╳| **Outputs:** @@ -1129,8 +1135,8 @@ Source: | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/label|application/json|✓| -|plot/*|text/html|🗙| -|plot/*|text/html|🗙| +|plot/*|text/html|╳| +|plot/*|text/html|╳| |entity/vector|application/json|✓| @@ -1466,7 +1472,7 @@ Allows execution of quantum circuits using a simulator packaged with qiskit. | Data Type | Content Type | Required | |-----------|--------------| :------: | |executable/circuit|text/x-qasm|✓| -|provenance/execution-options|text/csv, application/json, application/X-lines+json|🗙| +|provenance/execution-options|text/csv, application/json, application/X-lines+json|╳| **Outputs:** @@ -1474,7 +1480,7 @@ Allows execution of quantum circuits using a simulator packaged with qiskit. | Data Type | Content Type | Always | |-----------|--------------| :----: | |entity/vector|application/json|✓| -|entity/vector|application/json|🗙| +|entity/vector|application/json|╳| |provenance/trace|application/json|✓| |provenance/execution-options|application/json|✓| diff --git a/docs/plugin_autodoc.py b/docs/plugin_autodoc.py index 51702d3ad..cba36abc2 100644 --- a/docs/plugin_autodoc.py +++ b/docs/plugin_autodoc.py @@ -123,7 +123,7 @@ def write_plugin(doc, p): doc.write("|-----------|--------------| :------: |\n") for data_input in p["input"]: doc.write( - f"|{data_input['dataType']}|{', '.join(data_input['contentType'])}|{'✓' if data_input['required'] else '🗙'}|\n" + f"|{data_input['dataType']}|{', '.join(data_input['contentType'])}|{'✓' if data_input['required'] else '╳'}|\n" ) doc.write("\n\n") if p["output"]: @@ -132,7 +132,7 @@ def write_plugin(doc, p): doc.write("|-----------|--------------| :----: |\n") for data_output in p["output"]: doc.write( - f"|{data_output['dataType']}|{', '.join(data_output['contentType'])}|{'✓' if data_output['required'] else '🗙'}|\n" + f"|{data_output['dataType']}|{', '.join(data_output['contentType'])}|{'✓' if data_output['required'] else '╳'}|\n" ) doc.write("\n\n")