diff --git a/.clang_format.hook b/.clang_format.hook
new file mode 100644
index 00000000..632c9d0d
--- /dev/null
+++ b/.clang_format.hook
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# Copyright (c) 2024 PaddlePaddle Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -e
+
+readonly VERSION="13.0.0"
+
+version=$(clang-format -version)
+
+if ! [[ $(python -V 2>&1 | awk '{print $2}' | awk -F '.' '{print $1$2}') -ge 36 ]]; then
+ echo "clang-format installation by pip need python version great equal 3.6,
+ please change the default python to higher version."
+ exit 1
+fi
+
+if ! [[ $version == *"$VERSION"* ]]; then
+ # low version of pip may not have the source of clang-format whl
+ pip install --upgrade pip
+ pip install clang-format==13.0.0
+fi
+
+clang-format $@
\ No newline at end of file
diff --git a/.github/scripts/traffic_metrics.py b/.github/scripts/traffic_metrics.py
new file mode 100644
index 00000000..3f4fea07
--- /dev/null
+++ b/.github/scripts/traffic_metrics.py
@@ -0,0 +1,236 @@
+#!/usr/bin/env python3
+"""Fetch GitHub traffic stats and build a persistent CSV plus trend chart."""
+
+from __future__ import annotations
+
+import argparse
+import csv
+import os
+from dataclasses import dataclass
+from datetime import datetime
+from pathlib import Path
+from typing import Dict, Iterable, List, Mapping, Sequence
+
+import matplotlib
+
+matplotlib.use("Agg")
+
+import matplotlib.pyplot as plt
+import requests
+
+API_ROOT = "https://api.github.com"
+
+
+@dataclass
+class DailyMetrics:
+ date: str
+ views: int
+ unique_views: int
+ clones: int
+ unique_clones: int
+
+
+def _fetch(endpoint: str, repo: str, token: str) -> Mapping:
+ url = f"{API_ROOT}/repos/{repo}/{endpoint}"
+ headers = {"Accept": "application/vnd.github+json"}
+ if token:
+ headers["Authorization"] = f"Bearer {token}"
+ response = requests.get(url, headers=headers, timeout=30)
+ response.raise_for_status()
+ return response.json()
+
+
+def _normalize_daily(items: Iterable[Mapping], count_key: str) -> Dict[str, Dict[str, int]]:
+ daily: Dict[str, Dict[str, int]] = {}
+ for item in items:
+ # GitHub returns timestamps like "2024-12-05T00:00:00Z".
+ date_key = item["timestamp"][:10]
+ counts = daily.setdefault(date_key, {"count": 0, "uniques": 0})
+ counts["count"] = max(counts["count"], int(item[count_key]))
+ counts["uniques"] = max(counts["uniques"], int(item["uniques"]))
+ return daily
+
+
+def _load_existing(path: Path) -> Dict[str, DailyMetrics]:
+ if not path.exists():
+ return {}
+ existing: Dict[str, DailyMetrics] = {}
+ with path.open(newline="", encoding="utf-8") as handle:
+ reader = csv.DictReader(handle)
+ for row in reader:
+ existing[row["date"]] = DailyMetrics(
+ date=row["date"],
+ views=int(row["views"]),
+ unique_views=int(row["unique_views"]),
+ clones=int(row["clones"]),
+ unique_clones=int(row["unique_clones"]),
+ )
+ return existing
+
+
+def _merge(existing: Dict[str, DailyMetrics], updates: Dict[str, DailyMetrics]) -> Dict[str, DailyMetrics]:
+ merged = existing.copy()
+ for date_key, metrics in updates.items():
+ if date_key in merged:
+ prev = merged[date_key]
+ merged[date_key] = DailyMetrics(
+ date=date_key,
+ views=max(prev.views, metrics.views),
+ unique_views=max(prev.unique_views, metrics.unique_views),
+ clones=max(prev.clones, metrics.clones),
+ unique_clones=max(prev.unique_clones, metrics.unique_clones),
+ )
+ else:
+ merged[date_key] = metrics
+ return merged
+
+
+def _write_csv(metrics: Dict[str, DailyMetrics], path: Path) -> None:
+ ordered_dates = sorted(metrics.keys())
+ with path.open("w", newline="", encoding="utf-8") as handle:
+ fieldnames = ["date", "views", "unique_views", "clones", "unique_clones"]
+ writer = csv.DictWriter(handle, fieldnames=fieldnames)
+ writer.writeheader()
+ for date_key in ordered_dates:
+ record = metrics[date_key]
+ writer.writerow(
+ {
+ "date": record.date,
+ "views": record.views,
+ "unique_views": record.unique_views,
+ "clones": record.clones,
+ "unique_clones": record.unique_clones,
+ }
+ )
+
+
+def _latest(metrics: Dict[str, DailyMetrics], limit: int = 7) -> Sequence[DailyMetrics]:
+ if not metrics:
+ return []
+ ordered_dates = sorted(metrics.keys())
+ recent_dates = ordered_dates[-limit:]
+ return [metrics[date_key] for date_key in recent_dates]
+
+
+def _render_table(metrics: Dict[str, DailyMetrics], max_rows: int = 7) -> str:
+ header = "| Date | Views | Unique views | Clones | Unique clones |\n| --- | --- | --- | --- | --- |"
+ if not metrics:
+ return header + "\n| - | - | - | - | - |"
+ rows = [
+ f"| {item.date} | {item.views} | {item.unique_views} | {item.clones} | {item.unique_clones} |"
+ for item in _latest(metrics, max_rows)
+ ]
+ return header + "\n" + "\n".join(rows)
+
+
+def _update_readme(readme_path: Path, metrics: Dict[str, DailyMetrics], image_path: Path) -> None:
+ start_marker = ""
+ end_marker = ""
+ block = f"{start_marker}\n{_render_table(metrics)}\n\n})\n{end_marker}"
+
+ if not readme_path.exists():
+ print(f"README not found at {readme_path}, skip embedding metrics.")
+ return
+
+ content = readme_path.read_text(encoding="utf-8")
+ if start_marker in content and end_marker in content:
+ pre, rest = content.split(start_marker, 1)
+ _, post = rest.split(end_marker, 1)
+ new_content = pre + block + post
+ else:
+ new_content = content.rstrip() + "\n\n" + block + "\n"
+
+ readme_path.write_text(new_content, encoding="utf-8")
+
+
+def _plot(metrics: Dict[str, DailyMetrics], output_path: Path) -> None:
+ if not metrics:
+ print("No traffic data available to plot.")
+ return
+
+ ordered = [metrics[key] for key in sorted(metrics.keys())]
+ dates = [datetime.strptime(item.date, "%Y-%m-%d") for item in ordered]
+ view_counts = [item.views for item in ordered]
+ view_uniques = [item.unique_views for item in ordered]
+ clone_counts = [item.clones for item in ordered]
+ clone_uniques = [item.unique_clones for item in ordered]
+
+ plt.figure(figsize=(10, 6))
+ plt.plot(dates, view_counts, label="Views", linewidth=2)
+ plt.plot(dates, view_uniques, label="Unique views", linestyle="--", linewidth=1.5)
+ plt.plot(dates, clone_counts, label="Downloads (clones)", linewidth=2)
+ plt.plot(dates, clone_uniques, label="Unique downloaders", linestyle="--", linewidth=1.5)
+ plt.xlabel("Date")
+ plt.ylabel("Count")
+ plt.title("PaddleMaterials repository traffic")
+ plt.grid(True, linestyle="--", alpha=0.3)
+ plt.legend()
+ plt.tight_layout()
+ output_path.parent.mkdir(parents=True, exist_ok=True)
+ plt.savefig(output_path, dpi=150)
+ plt.close()
+
+
+def collect_metrics(repo: str, token: str) -> Dict[str, DailyMetrics]:
+ views_resp = _fetch("traffic/views?per=day", repo, token)
+ clones_resp = _fetch("traffic/clones?per=day", repo, token)
+
+ view_daily = _normalize_daily(views_resp.get("views", []), count_key="count")
+ clone_daily = _normalize_daily(clones_resp.get("clones", []), count_key="count")
+
+ # Combine the two sources into a consistent DailyMetrics map.
+ consolidated: Dict[str, DailyMetrics] = {}
+ all_dates = set(view_daily.keys()) | set(clone_daily.keys())
+ for date_key in all_dates:
+ views = view_daily.get(date_key, {"count": 0, "uniques": 0})
+ clones = clone_daily.get(date_key, {"count": 0, "uniques": 0})
+ consolidated[date_key] = DailyMetrics(
+ date=date_key,
+ views=views["count"],
+ unique_views=views["uniques"],
+ clones=clones["count"],
+ unique_clones=clones["uniques"],
+ )
+ return consolidated
+
+
+def main() -> None:
+ parser = argparse.ArgumentParser(description="Persist GitHub traffic metrics and draw a trend plot.")
+ parser.add_argument("--repo", required=True, help="Repository in owner/name format.")
+ parser.add_argument(
+ "--output-dir",
+ default="output/traffic",
+ help="Directory for CSV and chart outputs (default: output/traffic).",
+ )
+ parser.add_argument(
+ "--token",
+ default=os.getenv("GITHUB_TOKEN") or os.getenv("GH_TOKEN"),
+ help="GitHub token with repo access (defaults to GITHUB_TOKEN env).",
+ )
+ parser.add_argument(
+ "--readme",
+ default=None,
+ help="Path to README to embed the latest traffic table and chart (optional).",
+ )
+ args = parser.parse_args()
+
+ if not args.token:
+ raise SystemExit("Missing GitHub token (set GITHUB_TOKEN or pass --token).")
+
+ output_dir = Path(args.output_dir)
+ output_dir.mkdir(parents=True, exist_ok=True)
+ csv_path = output_dir / "traffic_metrics.csv"
+ plot_path = output_dir / "traffic_trend.png"
+
+ latest = collect_metrics(repo=args.repo, token=args.token)
+ existing = _load_existing(csv_path)
+ merged = _merge(existing, latest)
+ _write_csv(merged, csv_path)
+ _plot(merged, plot_path)
+ if args.readme:
+ _update_readme(Path(args.readme), merged, plot_path)
+ print(f"Wrote {csv_path} and {plot_path}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/.github/workflows/traffic-metrics.yml b/.github/workflows/traffic-metrics.yml
new file mode 100644
index 00000000..a9bd3e1c
--- /dev/null
+++ b/.github/workflows/traffic-metrics.yml
@@ -0,0 +1,44 @@
+name: traffic-metrics
+
+on:
+ schedule:
+ - cron: "0 1 * * *"
+ workflow_dispatch:
+
+permissions:
+ contents: write
+
+jobs:
+ collect:
+ runs-on: ubuntu-latest
+ env:
+ TRAFFIC_TOKEN: ${{ secrets.TRAFFIC_TOKEN || secrets.GITHUB_TOKEN }}
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: "3.10"
+
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ python -m pip install matplotlib requests
+
+ - name: Collect traffic metrics
+ env:
+ GH_TOKEN: ${{ env.TRAFFIC_TOKEN }}
+ GITHUB_TOKEN: ${{ env.TRAFFIC_TOKEN }}
+ REPO_NAME: ${{ github.repository }}
+ run: |
+ python .github/scripts/traffic_metrics.py --repo "${REPO_NAME}" --output-dir output/traffic --readme README.md
+
+ - name: Commit traffic artifacts
+ uses: stefanzweifel/git-auto-commit-action@v5
+ with:
+ commit_message: "chore: update traffic metrics"
+ file_pattern: |
+ output/traffic/*
+ README.md
diff --git a/.gitignore b/.gitignore
index d4bb188e..e4dd3a77 100644
--- a/.gitignore
+++ b/.gitignore
@@ -132,8 +132,51 @@ FETCH_HEAD
# auto generated version file by setuptools_scm
ppsci/_version.py
+ppmat/_version.py
__pycache__/
stability_prediction/data_bak/*
stability_prediction/log/*
-stability_prediction/checkpoints/*
\ No newline at end of file
+stability_prediction/checkpoints/*
+
+structure_prediction/data/*
+structure_prediction/data_bak/*
+structure_prediction/log/*
+structure_prediction/checkpoints/*
+
+data/*
+log/*
+
+output/*
+!output/traffic/
+!output/traffic/*
+experimental/output/*
+experimental/output
+experimental/data
+experimental/log/
+experimental/log2/
+
+output/*experimental/data/
+experimental/output/
+experimental/
+
+ppmat/models/mattersim/threebody_indices.c
+pretrained/
+result*
+spectrum_elucidation/retrival_database
+test/samplers
+outputs
+
+# codex
+AGENTS.md
+
+.baidu-cc/meta.json
+.comate/mcp.json
+dataset_ES
+
+electronic_structure/configs/omol25_data_split.json
+electronic_structure/configs/omol25.json
+electronic_structure/configs/qm9_data_split.json
+electronic_structure/configs/qm9.json
+electronic_structure/configs/crystal_data_split.json
+electronic_structure/configs/crystal.json
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..71e2feeb
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "paddle_scatter"]
+ path = paddle_scatter
+ url = https://github.com/PFCCLab/paddle_scatter.git
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 733df8d9..95e6cf20 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -3,45 +3,61 @@ repos:
rev: 5.11.5
hooks:
- id: isort
- args: ["--multi-line=7", "--sl"]
+ args: ["--multi-line=7", "--sl", "--profile", "black", "--filter-files"]
+ exclude: '(jointContribution|legacy)/.*'
- repo: https://github.com/psf/black
rev: 22.3.0
hooks:
- id: black
+ exclude: '(jointContribution|legacy)/.*'
- # - repo: https://github.com/charliermarsh/ruff-pre-commit
- # rev: "v0.0.272"
- # hooks:
- # - id: ruff
+ - repo: https://github.com/charliermarsh/ruff-pre-commit
+ rev: "v0.0.272"
+ hooks:
+ - id: ruff
+ exclude: '(jointContribution|legacy)/.*'
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: a11d9314b22d8f8c7556443875b731ef05965464
hooks:
- id: check-merge-conflict
+ exclude: '(jointContribution|legacy)/.*'
- id: check-symlinks
+ exclude: '(jointContribution|legacy)/.*'
- id: detect-private-key
+ exclude: '(jointContribution|legacy)/.*'
files: (?!.*paddle)^.*$
- id: end-of-file-fixer
+ exclude: '(jointContribution|legacy)/.*'
- id: trailing-whitespace
+ exclude: '(jointContribution|legacy)/.*'
- id: check-case-conflict
+ exclude: '(jointContribution|legacy)/.*'
- id: check-yaml
- exclude: "mkdocs.yml"
+ # exclude: "mkdocs.yml"
+ exclude: (^jointContribution/.* | "mkdocs.yml" | ^legacy/.*)
- id: pretty-format-json
+ exclude: '(jointContribution|legacy)/.*'
args: [--autofix]
- id: requirements-txt-fixer
+ exclude: '(jointContribution|legacy)/.*'
- repo: https://github.com/Lucas-C/pre-commit-hooks
rev: v1.0.1
hooks:
- id: forbid-crlf
files: \.md$
+ exclude: '(jointContribution|legacy)/.*'
- id: remove-crlf
files: \.md$
+ exclude: '(jointContribution|legacy)/.*'
- id: forbid-tabs
files: \.md$
+ exclude: '(jointContribution|legacy)/.*'
- id: remove-tabs
files: \.md$
+ exclude: '(jointContribution|legacy)/.*'
- repo: local
hooks:
@@ -51,3 +67,6 @@ repos:
entry: bash .clang_format.hook -i
language: system
files: \.(c|cc|cxx|cpp|cu|h|hpp|hxx|cuh|proto)$
+ exclude: '(jointContribution|legacy)/.*'
+
+exclude: '(jointContribution|legacy)/.*'
diff --git a/Install.md b/Install.md
new file mode 100644
index 00000000..88c71a1b
--- /dev/null
+++ b/Install.md
@@ -0,0 +1,63 @@
+# Installation 🔧
+
+[简体中文](./Install_cn.md)
+
+## 1. Installation Instructions
+
+We recommend using a conda virtual environment to manage dependencies. You can install conda via [Miniforge](https://github.com/conda-forge/miniforge).
+
+### 1.1 Create Virtual Environment
+Create and activate a new conda virtual environment:
+
+ conda create -n ppmat python=3.10
+ conda activate ppmat
+
+We currently develop under Python 3.10 environment and recommend using Python 3.10 or newer.
+
+### 1.2 Install PaddlePaddle
+Install the appropriate PaddlePaddle version based on your CUDA version. Refer to the [PaddlePaddle Official Website](https://www.paddlepaddle.org.cn/install/quick) for installation commands. We recommend installing PaddlePaddle version >= 3.1 or the develop version.
+
+For example, in a CUDA 12.6 environment, install the paddlepaddle-gpu version:
+
+ python -m pip install paddlepaddle-gpu==3.1.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
+
+After installation, verify the installation with:
+
+ python -c "import paddle; paddle.utils.run_check()"
+
+If you see "PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.", the installation was successful.
+
+### 1.3 Install PaddleMaterials from Source:
+
+ # Clone PaddleMaterials repository
+ git clone https://github.com/PaddlePaddle/PaddleMaterials.git
+
+ # Navigate to PaddleMaterials directory
+ cd PaddleMaterials
+
+ # Install dependencies
+ pip install --upgrade pip setuptools==68.2.2 wheel
+ pip install setuptools_scm
+ pip install Cython
+ # Install 3rd dependency paddle_scatter manully
+ git clone https://github.com/PFCCLab/paddle_scatter.git
+ cd paddle_scatter
+ pip install -v . --no-build-isolation
+ cd ..
+
+ # Install in editable mode
+ pip install -e . --no-build-isolation
+ # pip install -e . --no-build-isolation -i https://pypi.tuna.tsinghua.edu.cn/simple recommended if you are in China
+
+
+## 2. Run Examples
+
+Predict material properties using the MegNet model:
+
+ python property_prediction/predict.py --model_name='megnet_mp2018_train_60k_e_form' --weights_name='best.pdparams' --cif_file_path='./property_prediction/example_data/cifs/'
+
+Predict energy and forces using the MatterSim model:
+
+ python interatomic_potentials/predict.py --model_name='mattersim_1M' --weights_name='mattersim-v1.0.0-1M_model.pdparams' --cif_file_path='./interatomic_potentials/example_data/cifs/'
+
+For more usage instructions, refer to the [Get Started](./get_started.md) documentation.
diff --git a/Install_cn.md b/Install_cn.md
new file mode 100644
index 00000000..cde61945
--- /dev/null
+++ b/Install_cn.md
@@ -0,0 +1,63 @@
+
+# Installation 🔧
+
+[English](./Install.md)
+
+## 1. 安装说明
+
+我们推荐使用conda虚拟环境来管理依赖包,你可以通过安装[Miniforge](https://github.com/conda-forge/miniforge)使用conda。
+
+### 1.1 创建虚拟环境
+创建一个新的conda虚拟环境,并激活环境:
+
+ conda create -n ppmat python=3.10
+ conda activate ppmat
+
+目前我们在python 3.10环境下进行开发,因此建议使用python 3.10或者更高的版本。
+
+### 1.2 安装PaddlePaddle
+根据你的cuda版本安装对应版本的PaddlePaddle,具体安装命令可参考[PaddlePaddle官网](https://www.paddlepaddle.org.cn/install/quick)。我们推荐安装PaddlePaddle >= 3.1或者develop版本。
+
+例如,对于cuda12.6环境,安装paddlepaddle-gpu版本:
+
+ python -m pip install paddlepaddle-gpu==3.1.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
+
+安装完毕之后,运行以下命令,验证 Paddle 是否安装成功。
+
+ python -c "import paddle; paddle.utils.run_check()"
+
+如果出现 PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now. 信息,说明已成功安装。
+
+### 1.3 源码安装PaddleMaterials:
+
+ # clone PaddleMaterials
+ git clone https://github.com/PaddlePaddle/PaddleMaterials.git
+
+ # 切换到PaddleMaterials目录
+ cd PaddleMaterials
+
+ # 安装依赖
+ pip install --upgrade pip setuptools==68.2.2 wheel
+ pip install setuptools_scm
+ pip install Cython
+ # 手动安装第三方依赖paddle_scatter
+ git clone https://github.com/PFCCLab/paddle_scatter.git
+ cd paddle_scatter
+ pip install -v . --no-build-isolation
+ cd ..
+
+ # 以可编辑模式安装PaddleMaterials
+ pip install -e . --no-build-isolation -i https://pypi.tuna.tsinghua.edu.cn/simple
+
+
+## 2. 运行示例
+
+使用 MegNet 模型预测材料属性:
+
+ python property_prediction/predict.py --model_name='megnet_mp2018_train_60k_e_form' --weights_name='best.pdparams' --cif_file_path='./property_prediction/example_data/cifs/'
+
+使用 MatterSim 模型预测能量和力:
+
+ python interatomic_potentials/predict.py --model_name='mattersim_1M' --weights_name='mattersim-v1.0.0-1M_model.pdparams' --cif_file_path='./interatomic_potentials/example_data/cifs/'
+
+更多的使用说明可以参考[Get Started](./get_started.md)。
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..8db3174f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,203 @@
+Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
index 4790d07d..dc0adba4
--- a/README.md
+++ b/README.md
@@ -1,95 +1,207 @@
-# PaddlePaddle for Materials
+# PaddleMaterials
+
+
+
-## 基于GNN的二维材料稳定性预测
+## 🚀 Introduction
-### 整体流程
+**PaddleMaterials** is an end-to-end AI4Materials toolkit built on the **PaddlePaddle** deep learning framework. Designed as a data-mechanism dual-driven platform for developing and deploying foundation models in materials science, **PPMat** enables researchers to efficiently build AI models and accelerate material discovery using pretrained models.
-通过预测输入晶体的形成能(分解能等)等能量,实现晶体的稳定性预测,能量越低,稳定性越高。整体流程如下,网络模型输入为晶体的属性包括:原子类型、原子坐标、晶格常数等,网络模型输出为预测的晶体的形成能。涉及到:
-1. 晶体数据的图结构表示;
-2. GNN网络结构;
-3. 预测稳定性;
+
+
+
-
-

-
+### 🧩 Core Capabilities
-详见文档3.4节:https://365.kdocs.cn/l/cmMI44AGmqJG
+| Task | Description | Typical Applications |
+|------|-------------|---------------------|
+| **Property Prediction (PP)** | Predict material properties from structure | Forward design or predict formation energy, band gap, elastic moduli etc. |
+| **Structure Generation (SG)** | Generate novel crystal structures | Inverse design or structure generation |
+| **Machine Learning Interatomic Potential (MLIP)** | Surrogate Model for DFT as ML potentials | Molecular dynamics simulations |
+| **Electronic Structure (ES)** | Surrogate Model for DFT to predict physical field | Predict electronic density |
+| **Spectrum Elucidation (SE)** | Reconstruct structures from spectra | NMR structure elucidation |
+| **Spectrum Enhancement (SPEN)** | Enhance microscopy and spectrum signals | STEM image enhancement, denoising |
-#### 二维材料数据
+### 🧱 Supported Materials
-数据地址:https://365.kdocs.cn/ent/664860898/2340801472/304878020292
+- **Inorganic Crystals** - Well-supported with multiple datasets and pretrained models
+- **Organic Molecules** - Support for small molecule datasets and property prediction
+- *Polymers, catalysts, and amorphous materials are under development*
-下图为二维材料数据凸包能的直方图,横坐标为凸包能,纵坐标为频数。
-
-

-
+### ✨ Why PaddleMaterials?
-二维材料数据转换为Graph结构,其中节点为材料原子类型,边为两个节点之间的距离。
+- ✅ **Rich Pretrained Models & AI-ready Datasets** - 50+ pretrained models ready for inference and Multiple curated datasets for training
+- ✅ **Multi-Task Integration** - Unified framework across tasks of PP, SG, MLIP, ES, SE, SPEN etc.
+- ✅ **Multi-Hardware Support** - Full support for NVIDIA GPUs and MetaX GPUs and Intel CPUs
+- ✅ **Production-Ready** - Easy to use with standandlize design & distributed training, mixed precision, checkpoint recovery
+### 📑 Support Tasks
+| Task | Description | Link |
+|------|-------------|------|
+| **Property Prediction (PP)** | Predict formation energy, band gap, elastic properties | [README](property_prediction/README.md) |
+| **Structure Generation (SG)** | Generate new crystal structures with diffusion models | [README](structure_generation/README.md) |
+| **Machine Learning Interatomic Potential (MLIP)** | DFT-accurate potentials for molecular dynamics | [README](interatomic_potentials/README.md) |
+| **Electronic Structure (ES)** | Predict electronic structure properties | [README](electronic_structure/README.md) |
+| **Spectrum Elucidation (SE)** | Reconstruct molecular structures from NMR spectra | [README](spectrum_elucidation/README.md) |
+| **Spectrum Enhancement (SPEN)** | Enhance microscopy and spectral signals | [README](spectrum_enhancement/README.md) |
-### 环境准备
- python==3.10.9
- paddlepaddle==2.6.1
- pgl==2.2.3
- pymatgen==2024.6.10
+### 🤖 Available Pretrained Models
-#### 新建环境:
- conda create -n test_env python=3.10.9
- conda activate test_env
+| Task | Models | Dataset |
+|------|--------|---------|
+| **Property Prediction** | MEGNet, iComformer, DimeNet++ | MP2018, MP2024, JARVIS |
+| **Structure Generation** | MatterGen, DiffCSP | MP20, ALEX |
+| **Machine Learning Interatomic Potential** | CHGNet, MatterSim | MPTRJ |
+| **Electronic Structure** | InfGCN | QM9_ES, MP_ES, OMol25_MC_ES |
+| **Spectrum Elucidation** | DiffNMR | MSD_NMR |
+| **Spectrum Enhancement** | SFIN | SFIN-HAADF/BF |
-#### 安装所需依赖包:
- pip install -r requirments.txt
+Full model list: See [MODEL_REGISTRY](ppmat/models/__init__.py#L75)
+---
-由于PGL暂不兼容最新版本的Paddle,因此安装完成PGL后需要在安装路径内修改部分代码:
-例如我的安装路径为:anaconda3/envs/meg_paddle/lib/python3.10/site-packages/pgl
+## 🚀 Get Started
-1. 代码fluid替换为base:
+### 🔧 Installation
- a. 将pgl下所有文件中的 paddle.fluid 替换为 paddle.base
+Please refer to the installation [document](Install.md) for your hardware environment. See [SupportedHardwareList](./docs/multi_device.md) for more multi-hardware adaptation information.
- b. 将 paddle.base.core as core 替换为 paddle.base as core
+---
- 该部分会涉及到3个文件的改动,修改后如下:
- 
+### ⚡ Easy Inference
-2. 删除"overwrite"参数:
- 在pgl/utils/helper.py中,将第109行 'overwrite' 参数删除,如下所示:
+#### Property Prediction
- if non_static_mode():
- # return _C_ops.scatter(x, index, updates, 'overwrite', overwrite)
- return _C_ops.scatter(x, index, updates, overwrite)
+Predict material formation energy using a pretrained MEGNet model:
+```bash
+python property_prediction/predict.py \
+ --model_name='megnet_mp2018_train_60k_e_form' \
+ --weights_name='best.pdparams' \
+ --cif_file_path='./property_prediction/example_data/cifs/' \
+ --save_path='result.csv'
+```
-### 模型训练
+#### Structure Generation
- cd stability_prediction
- # 单卡训练
- python main.py
- # 多卡训练
- python -m paddle.distributed.launch --gpus="2,3,4,5" main.py
+Generate novel crystal structures:
-### 模型评估
+```bash
+python structure_generation/predict.py \
+ --model_name='mattergen_mp20' \
+ --num_structures=100 \
+ --save_path='generated_structures/'
+```
- # 修改配置文件 configs/megnet_2d.yaml 里的 model/pretrained 字段为训练好的模型路径
- # model:
- # ...
- # pretrained: './weights/megnet_2d_dp0.5/best.pdparams'
- cd stability_prediction
- python main.py --mode=test
+#### Interatomic Potentials
+Run molecular dynamics with ML potentials:
+```bash
+python interatomic_potentials/run_md.py
+ --model_name='mattersim_1M'
+ --structure_path='input.cif'
+ --temperature=300
+```
-### 二维材料训练
-超参数详见: [megnet_2d.yaml](stability_prediction/configs/megnet_2d.yaml)
+#### Electronic Structure
-实验结果:
+Run prediction of elcutorninc density:
- train_loss: 0.018
- val_loss: 0.049
- train_mae: 0.099
- val_mae: 0.145:
+```bash
+python interatomic_potentials/run_md.py
+ --model_name='mattersim_1M'
+ --structure_path='input.cif'
+ --temperature=300
+```
- test_mae: 0.142
+#### Spectrum Elucidation
+
+Run NMR spectrum elucidate:
+
+```bash
+python spectrum_elucidation/sample.py
+ --config_path='spectrum_elucidation/configs/diffnmr/DiffNMR.yaml'
+ --weights_name='DiffNMR_nless15_best.pdparams'
+ --save_path='result_diffnmr_nless15/'
+ --checkpoint_path="pretrained"
+```
+
+#### Spectrum Enhancement
+
+Run prediction of elcutorninc density:
+
+```bash
+python spectrum_enhancement/predict.py
+ --model_name sfin_haadf_enhance
+ --split val
+```
+
+---
+
+### 🏋️ Start Training
+
+For training and fine-tuning, refer to the [documentation](get_started.md).
+
+---
+
+## 🤝 Contributors & Cooperation & Community
+
+[](https://www.star-history.com/#PaddlePaddle/PaddleMaterilas&type=date&legend=top-left)
+
+Thanks to all contributors who have helped build PaddleMaterials!
+
+
+
+
+Thanks for the following organiziton for cooprative support!
+
+
+
+
+
+
+Join the PaddleMaterials WeChat group to discuss with us!
+
+
+
+
+## 🛠️ Contribute to PaddleMaterials
+
+For developer, please refer to [architecture](docs/ARCHITECTURE_ch.md).
+
+---
+
+## 📜 License
+
+PaddleMaterials is licensed under the [Apache License 2.0](LICENSE).
+
+---
+
+## 🎓 Citation
+
+```bibtex
+@misc{paddlematerials2025,
+ title={PaddleMaterials, a deep learning toolkit based on PaddlePaddle for material science.},
+ author={PaddleMaterials Contributors},
+ howpublished = {\url{https://github.com/PaddlePaddle/PaddleMaterials}},
+ year={2025}
+}
+```
+
+---
+
+## 🙏 Acknowledgements
+
+This repository references code from the following projects:
+
+[PaddleScience](https://github.com/PaddlePaddle/PaddleScience) |
+[Matgl](https://github.com/materialsvirtuallab/matgl) |
+[CDVAE](https://github.com/txie-93/cdvae) |
+[DiffCSP](https://github.com/jiaor17/DiffCSP) |
+[MatterGen](https://github.com/microsoft/mattergen) |
+[MatterSim](https://github.com/microsoft/mattersim) |
+[CHGNet](https://github.com/CederGroupHub/chgnet) |
+[AIRS](https://github.com/divelab/AIRS)
diff --git a/about_configs.md b/about_configs.md
new file mode 100644
index 00000000..f1ed2823
--- /dev/null
+++ b/about_configs.md
@@ -0,0 +1,454 @@
+# About Configs 🧩
+
+PaddleMaterials implements full lifecycle management for model training, covering core stages like training, fine-tuning, and prediction. It includes standardized datasets and build-in pre-trained model libraries, supporting one-click prediction. Training workflows are parameterized through structured configuration files, allowing end-to-end model training with simple parameter adjustments.
+
+
+
+
+ | Field Name |
+ Description |
+
+
+
+
+ | Global |
+ System-level parameters for centralized management of public configurations and cross-module shared settings. |
+
+
+ | Trainer |
+ Defines core training parameters including epoch count, checkpoint saving policies, and distributed training configurations. |
+
+
+ | Model |
+ Neural network architecture definition module with initialization parameters and loss function configurations. |
+
+
+ | Dataset |
+ Standardized data loading with integrated preprocessing, batching, and multi-process reading mechanisms. |
+
+
+ | Metric |
+ Evaluation metric functions for performance assessment during training and testing. |
+
+
+ | Optimizer |
+ Optimizer configuration interface supporting learning rate scheduling, weight decay, and gradient clipping parameters. |
+
+
+ | Predict |
+ Configuration parameters for prediction workflows. |
+
+
+
+
+Next, we demonstrate the configuration structure using MegNet training on the mp2018.6.1 dataset. The complete configuration file is available at [megnet_mp2018_train_60k_e_form.yaml](./property_prediction/configs/megnet/megnet_mp2018_train_60k_e_form.yaml). This configuration enables training of the MegNet model on mp2018.6.1 for formation energy, with the trained model capable of predicting formation energy for input structures.
+
+## 1. Global Configuration
+```yaml
+Global:
+# For mp2018 dataset, property names include:
+# "formation_energy_per_atom", "band_gap", "G", "K"
+label_names: ["formation_energy_per_atom"]
+do_train: True
+do_eval: False
+do_test: False
+
+graph_converter:
+ __class_name__: FindPointsInSpheres
+ __init_params__:
+ cutoff: 4.0
+ num_cpus: 10
+```
+
+
+
+
+ | Field Name |
+ Type |
+ Description |
+
+
+
+
+ | label_names |
+ List[str] |
+ Defines model training targets (must match dataset column names exactly). This example enables only formation energy prediction. |
+
+
+ | do_train |
+ Bool |
+ Enables/disables training loop execution. |
+
+
+ | do_eval |
+ Bool |
+ Enables/disables standalone evaluation process (independent of periodic validation during training). |
+
+
+ | do_test |
+ Bool |
+ Enables/disables inference testing (disabled by default). |
+
+
+ | graph_converter |
+ Class Config |
+ Material structure to graph conversion configuration for data loading and prediction stages. |
+
+
+
+
+PaddleMaterials uses `__class_name__` and `__init_params__` for flexible class instantiation without hardcoding, enabling different graph construction methods through configuration changes.
+
+## 2. Trainer Configuration
+
+The Trainer section initializes a `BaseTrainer` object controlling training, evaluation, and testing workflows:
+
+```yaml
+Trainer:
+ max_epochs: 2000
+ seed: 42
+ output_dir: ./output/megnet_mp2018_train_60k_e_form
+ save_freq: 100
+ log_freq: 20
+ start_eval_epoch: 1
+ eval_freq: 1
+ pretrained_model_path: null
+ pretrained_weight_name: null
+ resume_from_checkpoint: null
+ use_amp: False
+ amp_level: 'O1'
+ eval_with_no_grad: True
+ gradient_accumulation_steps: 1
+ best_metric_indicator: 'eval_metric'
+ name_for_best_metric: "formation_energy_per_atom"
+ greater_is_better: False
+ compute_metric_during_train: True
+ metric_strategy_during_eval: 'epoch'
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+```
+
+
+
+
+ | Field Name |
+ Type |
+ Description |
+
+
+
+
+ | max_epochs |
+ int |
+ Maximum training epochs. |
+
+
+ | seed |
+ int |
+ Random seed for reproducibility (controls numpy/paddle/random libraries). |
+
+
+ | output_dir |
+ str |
+ Output directory for model weights and logs. |
+
+
+ | save_freq |
+ int |
+ Checkpoint saving interval (epochs). Set to 0 for final epoch-only saving. |
+
+
+ | log_freq |
+ int |
+ Training log interval (steps). |
+
+
+ | start_eval_epoch |
+ int |
+ Epoch to begin evaluation (avoids early-stage fluctuations). |
+
+
+ | eval_freq |
+ int |
+ Evaluation interval (epochs). Set to 0 to disable periodic validation. |
+
+
+ | pretrained_model_path |
+ str/None |
+ Pre-trained model path (None = no pre-training). |
+
+
+ | pretrained_weight_name |
+ str/None |
+ When using the built-in model, specify the exact weight file name (e.g., latest.pdparams). |
+
+
+ | resume_from_checkpoint |
+ str/None |
+ Checkpoint path for training resumption (requires optimizer state and training metadata). |
+
+
+ | use_amp |
+ bool |
+ Enables automatic mixed precision training. |
+
+
+ | amp_level |
+ str |
+ Mixed precision mode ('O1'=partial FP32, 'O2'=FP16 optimization). |
+
+
+ | eval_with_no_grad |
+ bool |
+ Disables gradient computation during evaluation (set to False for models with higher-order derivatives). |
+
+
+ | gradient_accumulation_steps |
+ int |
+ Gradient accumulation steps for large batch simulation. |
+
+
+ | best_metric_indicator |
+ str |
+ Metric for best model selection (train/eval loss/metric). |
+
+
+ | name_for_best_metric |
+ str |
+ Specific metric name (must match Metric configuration). |
+
+
+ | greater_is_better |
+ bool |
+ Metric optimization direction (False = lower is better). |
+
+
+ | compute_metric_during_train |
+ bool |
+ Enables training set metric computation. |
+
+
+ | metric_strategy_during_eval |
+ str |
+ Evaluation strategy (an "epoch" refers to calculations performed after completing a full pass through the entire dataset, whereas a "step" denotes incremental calculations processed with each individual batch.). |
+
+
+ | use_visualdl/wandb/tensorboard |
+ bool |
+ Enables specific training logging tools. |
+
+
+
+
+## 3. Model Configuration
+
+Defines model architecture and hyperparameters. Example for MEGNetPlus:
+
+```yaml
+Model:
+ __class_name__: MEGNetPlus
+ __init_params__:
+ dim_node_embedding: 16
+ dim_edge_embedding: 100
+ dim_state_embedding: 2
+ nblocks: 3
+ nlayers_set2set: 1
+ niters_set2set: 2
+ bond_expansion_cfg:
+ rbf_type: "Gaussian"
+ initial: 0.0
+ final: 5.0
+ num_centers: 100
+ width: 0.5
+ property_name: ${Global.label_names}
+ data_mean: -1.6519
+ data_std: 1.0694
+```
+
+
+
+
+ | Field Name |
+ Type |
+ Description |
+
+
+
+
+ | __class_name__ |
+ str |
+ Model class name. |
+
+
+ | __init_params__ |
+ dict |
+ Initialization parameters (e.g., node embedding dimension). |
+
+
+
+
+## 4. Metric Configuration
+
+Defines evaluation metrics. Example:
+
+```yaml
+Metric:
+ formation_energy_per_atom:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+```
+
+Specifies metrics for specific properties (e.g., MAE for formation energy).
+
+
+
+
+ | Field Name |
+ Type |
+ Description |
+
+
+
+
+ | __class_name__ |
+ str |
+ Metric class name (supports PaddlePaddle APIs). |
+
+
+ | __init_params__ |
+ dict |
+ Initialization parameters (empty dict if none). |
+
+
+
+
+## 5. Optimizer Configuration
+
+Defines optimizer and learning rate parameters. Example:
+
+```yaml
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ beta1: 0.9
+ beta2: 0.999
+ lr:
+ __class_name__: Cosine
+ __init_params__:
+ learning_rate: 0.001
+ eta_min: 0.0001
+ by_epoch: True
+```
+
+
+
+
+ | Field Name |
+ Type |
+ Description |
+
+
+
+
+ | __class_name__ |
+ str |
+ Optimizer class name (e.g., Adam). |
+
+
+ | __init_params__ |
+ dict |
+ Optimizer parameters (e.g., beta1/beta2 for Adam). |
+
+
+ | lr.__class_name__ |
+ str |
+ Learning rate scheduler class name (e.g., Cosine). |
+
+
+ | lr.__init_params__ |
+ dict |
+ Scheduler parameters (e.g., initial/min learning rates). |
+
+
+
+
+## 6. Dataset Configuration
+
+Defines dataset classes and parameters. Example:
+
+```yaml
+Dataset:
+ train:
+ dataset:
+ __class_name__: MP2018Dataset
+ __init_params__:
+ path: "./data/mp2018_train_60k/mp.2018.6.1_train.json"
+ property_names: ${Global.label_names}
+ build_structure_cfg:
+ format: cif_str
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/mp2018_train_60k_cache_find_points_in_spheres_cutoff_4/mp.2018.6.1_train"
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: True
+ batch_size: 128
+ val:
+ # Similar structure to train with validation-specific parameters
+ test:
+ # Similar structure to train with test-specific parameters
+```
+
+
+
+
+ | Field Name |
+ Type |
+ Description |
+
+
+
+
+ | train.dataset.__class_name__ |
+ str |
+ Dataset class name (e.g., MP2018Dataset). |
+
+
+ | train.dataset.__init_params__.path |
+ str |
+ Data file path. |
+
+
+ | train.dataset.__init_params__.property_names |
+ str |
+ Target properties (references Global labels). |
+
+
+ | train.dataset.__init_params__.build_structure_cfg |
+ dict |
+ Material structure construction parameters. |
+
+
+ | train.sampler.__init_params__.batch_size |
+ int |
+ Training batch size (per GPU). |
+
+
+
+
+## 7. Predict Configuration
+
+Defines prediction parameters. Example:
+
+```yaml
+Predict:
+ graph_converter: ${Global.graph_converter}
+ eval_with_no_grad: True
+```
+
+References global graph converter and disables gradient computation during prediction (set to False for models with higher-order derivatives).
diff --git a/constants_spgroup.py b/constants_spgroup.py
new file mode 100644
index 00000000..53c1b022
--- /dev/null
+++ b/constants_spgroup.py
@@ -0,0 +1,232 @@
+spgroup_data = {
+ 1: ["aP", False],
+ 2: ["aP", True],
+ 3: ["mP", False],
+ 4: ["mP", False],
+ 5: ["mC", False],
+ 6: ["mP", False],
+ 7: ["mP", False],
+ 8: ["mC", False],
+ 9: ["mC", False],
+ 10: ["mP", True],
+ 11: ["mP", True],
+ 12: ["mC", True],
+ 13: ["mP", True],
+ 14: ["mP", True],
+ 15: ["mC", True],
+ 16: ["oP", False],
+ 17: ["oP", False],
+ 18: ["oP", False],
+ 19: ["oP", False],
+ 20: ["oC", False],
+ 21: ["oC", False],
+ 22: ["oF", False],
+ 23: ["oI", False],
+ 24: ["oI", False],
+ 25: ["oP", False],
+ 26: ["oP", False],
+ 27: ["oP", False],
+ 28: ["oP", False],
+ 29: ["oP", False],
+ 30: ["oP", False],
+ 31: ["oP", False],
+ 32: ["oP", False],
+ 33: ["oP", False],
+ 34: ["oP", False],
+ 35: ["oC", False],
+ 36: ["oC", False],
+ 37: ["oC", False],
+ 38: ["oA", False],
+ 39: ["oA", False],
+ 40: ["oA", False],
+ 41: ["oA", False],
+ 42: ["oF", False],
+ 43: ["oF", False],
+ 44: ["oI", False],
+ 45: ["oI", False],
+ 46: ["oI", False],
+ 47: ["oP", True],
+ 48: ["oP", True],
+ 49: ["oP", True],
+ 50: ["oP", True],
+ 51: ["oP", True],
+ 52: ["oP", True],
+ 53: ["oP", True],
+ 54: ["oP", True],
+ 55: ["oP", True],
+ 56: ["oP", True],
+ 57: ["oP", True],
+ 58: ["oP", True],
+ 59: ["oP", True],
+ 60: ["oP", True],
+ 61: ["oP", True],
+ 62: ["oP", True],
+ 63: ["oC", True],
+ 64: ["oC", True],
+ 65: ["oC", True],
+ 66: ["oC", True],
+ 67: ["oC", True],
+ 68: ["oC", True],
+ 69: ["oF", True],
+ 70: ["oF", True],
+ 71: ["oI", True],
+ 72: ["oI", True],
+ 73: ["oI", True],
+ 74: ["oI", True],
+ 75: ["tP", False],
+ 76: ["tP", False],
+ 77: ["tP", False],
+ 78: ["tP", False],
+ 79: ["tI", False],
+ 80: ["tI", False],
+ 81: ["tP", False],
+ 82: ["tI", False],
+ 83: ["tP", True],
+ 84: ["tP", True],
+ 85: ["tP", True],
+ 86: ["tP", True],
+ 87: ["tI", True],
+ 88: ["tI", True],
+ 89: ["tP", False],
+ 90: ["tP", False],
+ 91: ["tP", False],
+ 92: ["tP", False],
+ 93: ["tP", False],
+ 94: ["tP", False],
+ 95: ["tP", False],
+ 96: ["tP", False],
+ 97: ["tI", False],
+ 98: ["tI", False],
+ 99: ["tP", False],
+ 100: ["tP", False],
+ 101: ["tP", False],
+ 102: ["tP", False],
+ 103: ["tP", False],
+ 104: ["tP", False],
+ 105: ["tP", False],
+ 106: ["tP", False],
+ 107: ["tI", False],
+ 108: ["tI", False],
+ 109: ["tI", False],
+ 110: ["tI", False],
+ 111: ["tP", False],
+ 112: ["tP", False],
+ 113: ["tP", False],
+ 114: ["tP", False],
+ 115: ["tP", False],
+ 116: ["tP", False],
+ 117: ["tP", False],
+ 118: ["tP", False],
+ 119: ["tI", False],
+ 120: ["tI", False],
+ 121: ["tI", False],
+ 122: ["tI", False],
+ 123: ["tP", True],
+ 124: ["tP", True],
+ 125: ["tP", True],
+ 126: ["tP", True],
+ 127: ["tP", True],
+ 128: ["tP", True],
+ 129: ["tP", True],
+ 130: ["tP", True],
+ 131: ["tP", True],
+ 132: ["tP", True],
+ 133: ["tP", True],
+ 134: ["tP", True],
+ 135: ["tP", True],
+ 136: ["tP", True],
+ 137: ["tP", True],
+ 138: ["tP", True],
+ 139: ["tI", True],
+ 140: ["tI", True],
+ 141: ["tI", True],
+ 142: ["tI", True],
+ 143: ["hP", False],
+ 144: ["hP", False],
+ 145: ["hP", False],
+ 146: ["hR", False],
+ 147: ["hP", True],
+ 148: ["hR", True],
+ 149: ["hP", False],
+ 150: ["hP", False],
+ 151: ["hP", False],
+ 152: ["hP", False],
+ 153: ["hP", False],
+ 154: ["hP", False],
+ 155: ["hR", False],
+ 156: ["hP", False],
+ 157: ["hP", False],
+ 158: ["hP", False],
+ 159: ["hP", False],
+ 160: ["hR", False],
+ 161: ["hR", False],
+ 162: ["hP", True],
+ 163: ["hP", True],
+ 164: ["hP", True],
+ 165: ["hP", True],
+ 166: ["hR", True],
+ 167: ["hR", True],
+ 168: ["hP", False],
+ 169: ["hP", False],
+ 170: ["hP", False],
+ 171: ["hP", False],
+ 172: ["hP", False],
+ 173: ["hP", False],
+ 174: ["hP", False],
+ 175: ["hP", True],
+ 176: ["hP", True],
+ 177: ["hP", False],
+ 178: ["hP", False],
+ 179: ["hP", False],
+ 180: ["hP", False],
+ 181: ["hP", False],
+ 182: ["hP", False],
+ 183: ["hP", False],
+ 184: ["hP", False],
+ 185: ["hP", False],
+ 186: ["hP", False],
+ 187: ["hP", False],
+ 188: ["hP", False],
+ 189: ["hP", False],
+ 190: ["hP", False],
+ 191: ["hP", True],
+ 192: ["hP", True],
+ 193: ["hP", True],
+ 194: ["hP", True],
+ 195: ["cP", False],
+ 196: ["cF", False],
+ 197: ["cI", False],
+ 198: ["cP", False],
+ 199: ["cI", False],
+ 200: ["cP", True],
+ 201: ["cP", True],
+ 202: ["cF", True],
+ 203: ["cF", True],
+ 204: ["cI", True],
+ 205: ["cP", True],
+ 206: ["cI", True],
+ 207: ["cP", False],
+ 208: ["cP", False],
+ 209: ["cF", False],
+ 210: ["cF", False],
+ 211: ["cI", False],
+ 212: ["cP", False],
+ 213: ["cP", False],
+ 214: ["cI", False],
+ 215: ["cP", False],
+ 216: ["cF", False],
+ 217: ["cI", False],
+ 218: ["cP", False],
+ 219: ["cF", False],
+ 220: ["cI", False],
+ 221: ["cP", True],
+ 222: ["cP", True],
+ 223: ["cP", True],
+ 224: ["cP", True],
+ 225: ["cF", True],
+ 226: ["cF", True],
+ 227: ["cF", True],
+ 228: ["cF", True],
+ 229: ["cI", True],
+ 230: ["cI", True],
+}
diff --git a/docs/ARCHITECTURE_ch.md b/docs/ARCHITECTURE_ch.md
new file mode 100644
index 00000000..a2a9ca37
--- /dev/null
+++ b/docs/ARCHITECTURE_ch.md
@@ -0,0 +1,262 @@
+# PaddleMaterials 架构说明
+
+## 项目概述
+
+**PaddleMaterials**(简称PPMat)是一个基于飞桨(PaddlePaddle)深度学习框架的AI4Materials(人工智能驱动材料科学)端到端工具包。它是一个数据-机理双驱动的材料科学基础模型开发部署平台,支持无机材料、有机分子、聚合物等多种材料类型的研究与开发。
+
+---
+
+## 目录结构
+
+```
+PaddleMaterials/
+├── ppmat/ # 核心Python包
+│ ├── calculator/ # ASE计算器集成
+│ ├── datasets/ # 数据集处理模块
+│ ├── losses/ # 损失函数
+│ ├── metrics/ # 评估指标
+│ ├── models/ # 核心模型实现
+│ ├── optimizer/ # 优化器
+│ ├── predictor/ # 预测器
+│ ├── sampler/ # 采样器
+│ ├── schedulers/ # 扩散调度器
+│ ├── trainer/ # 训练框架
+│ └── utils/ # 工具函数
+│
+├── property_prediction/ # 性质预测任务
+├── structure_generation/ # 结构生成任务
+├── interatomic_potentials/ # 机器学习原子间势(MLIP)
+├── electronic_structure/ # 机器学习电子结构(MLES)
+├── spectrum_elucidation/ # 谱图解析任务(SE)
+├── ppmatSim/ # 分子动力学模拟工具
+├── research/ # 研究项目
+├── jointContribution/ # 联合贡献项目
+├── docs/ # 文档和资源
+├── test/ # 测试文件
+├── setup.py # 安装配置
+├── requirements.txt # 依赖列表
+└── README.md # 主说明文档
+```
+
+---
+
+## 核心模块详解
+
+### 1. ppmat/models/ - 深度学习模型库
+
+| 模型 | 路径 | 功能描述 |
+|------|------|----------|
+| **MEGNetPlus** | `ppmat/models/megnet/` | 等变图网络,材料性质预测 |
+| **iComformer** | `ppmat/models/comformer/` | 改进版ComFormer,晶体性质预测 |
+| **DimeNet++** | `ppmat/models/dimenetpp/` | 方向消息传递网络 |
+| **MatterGen** | `ppmat/models/mattergen/` | 条件扩散模型,晶体结构生成 |
+| **DiffCSP** | `ppmat/models/diffcsp/` | 扩散晶体结构预测 |
+| **CHGNet** | `ppmat/models/chgnet/` | 电荷图神经网络,原子间势 |
+| **MatterSim** | `ppmat/models/mattersim/` | 通用原子间势函数 |
+| **InfGCN** | `ppmat/models/infgcn/` | 电子结构预测 |
+| **DiffNMR** | `ppmat/models/diffnmr/` | NMR谱图解析 |
+
+### 2. ppmat/datasets/ - 数据集处理
+
+- **MP2018Dataset** - Materials Project 2018数据集
+- **MP2024Dataset** - Materials Project 2024数据集
+- **MP20Dataset** - 材料结构生成基准数据集
+- **JarvisDataset** - JARVIS材料数据集
+- **QM9Dataset** - 有机分子数据集
+- **OC20S2EFDataset** - Open Catalyst 2020数据集
+- **MSDnmrDataset** - NMR谱图数据集
+
+### 3. ppmat/trainer/ - 训练框架
+
+- **base_trainer.py** - 基础训练器,支持:
+ - 分布式训练(多GPU)
+ - 混合精度训练
+ - 断点续训
+ - 学习率调度
+ - 早停机制
+
+### 4. ppmat/utils/ - 工具函数
+
+包含晶体结构处理、可视化、模型保存/加载、日志记录等通用工具。
+
+---
+
+## 任务模块
+
+### property_prediction/ - 性质预测
+
+**功能**:预测材料的各种物理化学性质
+
+**支持任务**:
+- 形成能(Formation Energy)
+- 带隙(Band Gap)
+- 剪切模量(Shear Modulus)
+- 体积模量(Bulk Modulus)
+
+**配置文件**:`property_prediction/configs/`(包含 megnet、comformer、dimenet++ 配置)
+
+### structure_generation/ - 结构生成
+
+**功能**:生成新型晶体结构
+
+**模型**:
+- MatterGen - 无条件/条件结构生成
+- DiffCSP - 扩散晶体结构预测
+
+**配置文件**:`structure_generation/configs/`
+
+### interatomic_potentials/ - 原子间势
+
+**功能**:机器学习原子间势(MLIP)计算
+
+**模型**:
+- CHGNet - 电荷图神经网络势
+- MatterSim - 通用原子间势
+
+**配置文件**:`interatomic_potentials/configs/`
+
+### electronic_structure/ - 电子结构
+
+**功能**:机器学习电子结构(MLES)预测
+
+**模型**:
+- InfGCN - 推断图卷积网络
+
+**配置文件**:`electronic_structure/configs/`
+
+### spectrum_elucidation/ - 谱图解析
+
+**功能**:谱图到结构的解析
+
+**模型**:
+- DiffNMR - NMR谱图到结构解析
+
+**配置文件**:`spectrum_elucidation/configs/`
+
+---
+
+## 技术栈
+
+### 深度学习框架
+- **PaddlePaddle >= 3.1** - 核心深度学习框架
+
+### 主要依赖
+
+| 类别 | 依赖包 | 用途 |
+|------|--------|------|
+| 图神经网络 | pgl 2.2.6 | 图学习库 |
+| 科学计算 | numpy 1.26.4, scipy 1.13.1 | 数值计算 |
+| 材料科学 | pymatgen 2024.10.29 | 材料分析 |
+| | ase 3.23.0 | 原子模拟环境 |
+| | matminer 0.9.2 | 材料数据挖掘 |
+| 分子处理 | rdkit 2024.9.1 | 分子化学信息学 |
+| 配置管理 | hydra-core 1.3.2 | 配置管理 |
+| 可视化 | tensorboardX, visualdl, wandb | 训练可视化 |
+| 数据处理 | pandas, pyarrow, lmdb | 数据处理与存储 |
+
+### 支持的硬件
+- NVIDIA GPU(CUDA 12.x)
+- MetaX GPU(国产GPU)
+- CPU
+
+---
+
+## 配置系统
+
+项目使用 **Hydra** 进行配置管理,所有任务都通过YAML配置文件进行设置。
+
+### 配置继承
+
+支持配置继承和组合,例如:
+
+```yaml
+defaults:
+ - model: megnet
+ - dataset: mp2018
+ - optimizer: adam
+```
+
+---
+
+## 预训练模型
+
+项目提供丰富的预训练模型(MODEL_REGISTRY中定义):
+
+### 性质预测模型
+- `megnet_mp2018_train_60k_e_form` - 形成能预测
+- `comformer_mp2018_train_60k_band_gap` - 带隙预测
+- `dimenetpp_mp2018_train_60k_G` - 剪切模量预测
+
+### 结构生成模型
+- `mattergen_mp20` - 无条件结构生成
+- `diffcsp_mp20` - 扩散晶体结构预测
+
+### 原子间势模型
+- `chgnet_mptrj` - 通用势函数
+- `mattersim_1M/5M` - MatterSim势函数
+
+---
+
+## 使用示例
+
+### 性质预测
+
+```bash
+python property_prediction/predict.py \n --model_name='megnet_mp2018_train_60k_e_form' \n --weights_name='best.pdparams' \n --cif_file_path='./property_prediction/example_data/cifs/'
+```
+
+### 多GPU训练
+
+```bash
+python -m paddle.distributed.launch --gpus="0,1,2,3" \n property_prediction/train.py \n -c property_prediction/configs/megnet/megnet_mp2018_train_60k_e_form.yaml
+```
+
+---
+
+## 开发指南
+
+### 添加新模型
+
+1. 在 `ppmat/models/` 下创建新模型目录
+2. 继承基础模型类,实现 `forward` 方法
+3. 在 `ppmat/models/__init__.py` 中注册模型
+4. 创建对应的配置文件
+
+### 添加新数据集
+
+1. 在 `ppmat/datasets/` 下创建数据集类
+2. 继承 `BaseDataset`,实现 `get_data` 方法
+3. 在 `ppmat/datasets/__init__.py` 中注册数据集
+
+### 添加新任务
+
+1. 在根目录创建新任务目录
+2. 实现 `train.py`, `predict.py` 等入口脚本
+3. 创建 `configs/` 目录存放配置
+4. 在 `README.md` 中添加任务说明
+
+---
+
+## 文档索引
+
+| 文档 | 路径 | 说明 |
+|------|------|------|
+| 安装说明 | `Install.md` | 英文安装指南 |
+| 中文安装说明 | `Install_cn.md` | 中文安装指南 |
+| 快速开始 | `get_started.md` | 快速入门教程 |
+| 配置说明 | `about_configs.md` | Hydra配置详解 |
+| 多硬件支持 | `docs/multi_device.md` | 多硬件适配说明 |
+| MetaX支持 | `docs/MetaX/` | MetaX GPU适配文档 |
+
+---
+
+## 许可证
+
+本项目采用 [Apache License 2.0](LICENSE) 开源许可证。
+
+---
+
+## 联系方式
+
+- 项目主页:https://github.com/PaddlePaddle/PaddleMaterials
+- 问题反馈:https://github.com/PaddlePaddle/PaddleMaterials/issues
\ No newline at end of file
diff --git a/docs/MetaX/PaddleMaterials_MetaX_README.md b/docs/MetaX/PaddleMaterials_MetaX_README.md
new file mode 100644
index 00000000..dd509dc1
--- /dev/null
+++ b/docs/MetaX/PaddleMaterials_MetaX_README.md
@@ -0,0 +1,116 @@
+# PaddleMaterials on GiteeAI (MetaX)
+
+## Environment Setup on GiteeAI
+1. Register and log in to [giteeAI](https://ai.gitee.com/).
+2. Purchase computing resources and click **Rent Now**.
+ 
+3. Choose the **PaddleMaterials** image and click **Next** to create an instance.
+ 
+4. After the instance is created, click **Lab** to enter the container.
+ 
+5. In the Lab page, choose **Jupyter Lab**, then open a **Terminal**.
+ 
+
+## Training Process
+PaddleMaterials source directory: `/opt/PaddleMaterials`
+Reference documents:
+- [MLIP - Machine Learning Interatomic Potential](https://github.com/PaddlePaddle/PaddleMaterials/blob/develop/interatomic_potentials/README.md)
+- [MLES - Machine Learning Electronic Structure](https://github.com/PaddlePaddle/PaddleMaterials/blob/develop/electronic_structure/README.md)
+- [PP - Property Prediction](https://github.com/PaddlePaddle/PaddleMaterials/blob/develop/property_prediction/README.md)
+- [SG - Structure Generation](https://github.com/PaddlePaddle/PaddleMaterials/blob/develop/structure_generation/README.md)
+- [SE - Spectrum Elucidation](https://github.com/PaddlePaddle/PaddleMaterials/blob/develop/spectrum_elucidation/README.md)
+
+Below is the **Structure Generation / DiffCSP** example.
+
+### 1) Train
+```bash
+# single-gpu training
+python structure_generation/train.py -c structure_generation/configs/diffcsp/diffcsp_mp20.yaml
+```
+
+
+### 2) Sample
+```bash
+python structure_generation/sample.py --model_name='diffcsp_mp20' --weights_name='latest.pdparams' --save_path='result_diffcsp_mp20-1/' --chemical_formula='LiMnO2'
+```
+
+
+Result example: `Li1-Mn1-O2_1.cif`
+
+
+---
+
+## MetaX Results (from the "PaddleMaterials on MetaX benchmark" sheet)
+
+### Machine Learning Interatomic Potentials (MLIP)
+| Model | Metric | Benchmark | MetaX | Difference | Notes |
+| --- | --- | --- | --- | --- | --- |
+| CHGNet | energy_per_atom | -7.367691 | -7.3676915 | 5.0e-07 | |
+| CHGNet | force (max abs diff) | - | - | 3.03e-06 | Max component diff across 8 samples; see sheet for per-axis values |
+| CHGNet | magmom (max abs diff) | - | - | 7.0e-07 | Max across 8 samples; see sheet for per-axis values |
+| MatterSim | energy | -6.6172876 | -6.6172876 | 0 | |
+| MatterSim | force (max abs diff) | - | - | 1.64e-06 | Max component diff across 8 samples; see sheet for per-axis values |
+
+**CHGNet - force details**
+| # | Benchmark (x, y, z) | MetaX (x, y, z) | Difference (x, y, z) |
+| --- | --- | --- | --- |
+| 1 | -2.98e-08, -1.13e-07, 2.38e-02 | 1.19e-07, -7.66e-08, 2.38e-02 | 1.49e-07, 3.62052e-08, 8.214e-07 |
+| 2 | 2.98e-08, -1.41e-07, -2.38e-02 | -4.47e-08, 7.60e-08, -2.38e-02 | 7.45058e-08, 2.16824e-07, 5.809e-07 |
+| 3 | 3.58e-07, 1.12e-07, 9.26e-02 | 1.49e-07, 4.66e-08, 9.26e-02 | 2.08616e-07, 6.51926e-08, 3.879e-07 |
+| 4 | -2.98e-08, 4.10e-08, -9.26e-02 | 1.49e-07, -1.49e-08, -9.26e-02 | 1.78814e-07, 5.58794e-08, 3.75e-08 |
+| 5 | 8.94e-08, 1.46e-07, -2.43e-03 | 2.98e-08, 6.89e-08, -2.43e-03 | 5.96046e-08, 7.68341e-08, 2.3842e-07 |
+| 6 | -2.09e-07, -1.97e-06, -1.31e-02 | -7.45e-07, 1.06e-06, -1.31e-02 | 5.36442e-07, 3.0254e-06, 1.5495e-06 |
+| 7 | 2.98e-08, 1.89e-06, 1.31e-02 | 6.26e-07, -1.03e-06, 1.31e-02 | 5.96046e-07, 2.91504e-06, 1.0731e-06 |
+| 8 | -1.19e-07, 7.73e-08, 2.43e-03 | -5.96e-08, -6.19e-08, 2.43e-03 | 5.96046e-08, 1.39233e-07, 1.22192e-06 |
+
+**CHGNet - magmom details**
+| # | Benchmark | MetaX | Difference |
+| --- | --- | --- | --- |
+| 1 | 3.04922e-03 | 3.05e-03 | 6.71e-08 |
+| 2 | 3.04934e-03 | 3.05e-03 | 1.043e-07 |
+| 3 | 3.86942e+00 | 3.87e+00 | 7e-07 |
+| 4 | 3.86942e+00 | 3.87e+00 | 7e-07 |
+| 5 | 4.41358e-02 | 4.41e-02 | 1.64e-07 |
+| 6 | 3.86221e-02 | 3.86e-02 | 0 |
+| 7 | 3.86220e-02 | 3.86e-02 | 1.26e-07 |
+| 8 | 4.41357e-02 | 4.41e-02 | 7.4e-08 |
+
+**MatterSim - force details**
+| # | Benchmark (x, y, z) | MetaX (x, y, z) | Difference (x, y, z) |
+| --- | --- | --- | --- |
+| 1 | 1.72e-07, -9.79e-08, 1.26e-01 | 7.28e-08, 3.45e-08, 1.26e-01 | 9.8953e-08, 1.32313e-07, 9e-08 |
+| 2 | 7.01e-08, 5.59e-09, -1.26e-01 | -1.08e-07, 8.89e-08, -1.26e-01 | 1.77938e-07, 8.3357e-08, 7.4e-07 |
+| 3 | -8.96e-09, -1.93e-07, -1.51e-01 | -1.87e-08, -6.15e-07, -1.51e-01 | 9.77889e-09, 4.22704e-07, 3.1e-07 |
+| 4 | -2.14e-07, -1.66e-07, 1.51e-01 | -1.33e-07, 2.61e-07, 1.51e-01 | 8.07632e-08, 4.26546e-07, 1.01e-06 |
+| 5 | 1.65e-07, 2.76e-07, -1.01e-01 | -5.97e-08, 3.58e-07, -1.01e-01 | 2.25031e-07, 8.19564e-08, 1.4e-06 |
+| 6 | -1.81e-07, 2.43e-07, 8.90e-02 | -3.03e-07, -9.78e-08, 8.90e-02 | 1.21773e-07, 3.41037e-07, 3.57e-07 |
+| 7 | -1.89e-07, 4.66e-08, -8.90e-02 | 5.16e-07, 1.99e-07, -8.90e-02 | 7.04895e-07, 1.52737e-07, 5.66e-07 |
+| 8 | -1.68e-07, -1.27e-07, 1.01e-01 | -3.02e-08, -2.35e-07, 1.01e-01 | 1.38127e-07, 1.08732e-07, 1.64e-06 |
+
+### Property Prediction (PP)
+| Model | Metric | Benchmark | MetaX | Difference |
+| --- | --- | --- | --- | --- |
+| MEGNet | formation_energy_per_atom | -2.1585608 | -2.1585603 | 5.0e-07 |
+| MEGNet | band_gap | 1.11667 | 1.1166712 | 1.0e-07 |
+| MEGNet | shear_modulus | 4.02312e+02 | 402.3117952 | 0 |
+| MEGNet | bulk_modules | 1.10824e+03 | 1108.240846 | 0 |
+| ComFormer | formation_energy_per_atom | -2.1615877 | -2.1615882 | 5.0e-07 |
+| ComFormer | band_gap | 1.06078 | 1.0607839 | 3.0e-07 |
+| ComFormer | shear_modulus | 459.992749 | 4.59993e+02 | 0 |
+| ComFormer | bulk_modules | 1.02844e+03 | 1028.443467 | 0 |
+| DimeNet++ | formation_energy_per_atom | -2.1553288 | -2.1553288 | 0 |
+| DimeNet++ | band_gap | 1.03222 | 1.0322216 | 4.0e-07 |
+| DimeNet++ | shear_modulus | 6.77118e+01 | 67.71178 | 2.0e-05 |
+| DimeNet++ | bulk_modules | 1.06495e+02 | 106.4948 | 3.0e-05 |
+
+### Structure Generation (SG)
+| Model | Metric | Benchmark | MetaX | Difference |
+| --- | --- | --- | --- | --- |
+| MatterGen | S.U.N. | Functional | Functional | - |
+| DiffCSP | match_rate | 5.16914e-01 | 0.514370993 | 0.00254256 |
+| DiffCSP | rms_dist | 5.77073e-02 | 0.058631274 | 0.000924018 |
+
+### Spectrum Elucidation (SE)
+| Model | Metric | Benchmark | MetaX | Difference |
+| --- | --- | --- | --- | --- |
+| DiffNMR | Rebuild accuracy | 5.06670e-01 | 0.50535 | 0.00132 |
diff --git a/docs/MetaX/pic1.png b/docs/MetaX/pic1.png
new file mode 100644
index 00000000..6ac5658c
Binary files /dev/null and b/docs/MetaX/pic1.png differ
diff --git a/docs/MetaX/pic2.png b/docs/MetaX/pic2.png
new file mode 100644
index 00000000..be35c35e
Binary files /dev/null and b/docs/MetaX/pic2.png differ
diff --git a/docs/MetaX/pic3.png b/docs/MetaX/pic3.png
new file mode 100644
index 00000000..0e295419
Binary files /dev/null and b/docs/MetaX/pic3.png differ
diff --git a/docs/MetaX/pic4.png b/docs/MetaX/pic4.png
new file mode 100644
index 00000000..5ba3038c
Binary files /dev/null and b/docs/MetaX/pic4.png differ
diff --git a/docs/MetaX/pic5.png b/docs/MetaX/pic5.png
new file mode 100644
index 00000000..833e1428
Binary files /dev/null and b/docs/MetaX/pic5.png differ
diff --git a/docs/MetaX/pic6.png b/docs/MetaX/pic6.png
new file mode 100644
index 00000000..f492f272
Binary files /dev/null and b/docs/MetaX/pic6.png differ
diff --git a/docs/MetaX/pic7.png b/docs/MetaX/pic7.png
new file mode 100644
index 00000000..3f4b3216
Binary files /dev/null and b/docs/MetaX/pic7.png differ
diff --git a/docs/diff_arch.png b/docs/diff_arch.png
new file mode 100644
index 00000000..b1f471e9
Binary files /dev/null and b/docs/diff_arch.png differ
diff --git a/docs/feedback.png b/docs/feedback.png
new file mode 100644
index 00000000..24455e4e
Binary files /dev/null and b/docs/feedback.png differ
diff --git a/docs/logo.png b/docs/logo.png
new file mode 100644
index 00000000..6cce32fd
Binary files /dev/null and b/docs/logo.png differ
diff --git a/docs/logo_MetaX.png b/docs/logo_MetaX.png
new file mode 100644
index 00000000..585a224e
Binary files /dev/null and b/docs/logo_MetaX.png differ
diff --git a/docs/logo_SZNL_1.jpeg b/docs/logo_SZNL_1.jpeg
new file mode 100644
index 00000000..11618c22
Binary files /dev/null and b/docs/logo_SZNL_1.jpeg differ
diff --git a/docs/logo_SZNL_2.jpeg b/docs/logo_SZNL_2.jpeg
new file mode 100644
index 00000000..388465a7
Binary files /dev/null and b/docs/logo_SZNL_2.jpeg differ
diff --git a/docs/logo_SinochemDI_1.jpeg b/docs/logo_SinochemDI_1.jpeg
new file mode 100644
index 00000000..c75f0c29
Binary files /dev/null and b/docs/logo_SinochemDI_1.jpeg differ
diff --git a/docs/logo_SinochemDI_2.jpeg b/docs/logo_SinochemDI_2.jpeg
new file mode 100644
index 00000000..16c1409a
Binary files /dev/null and b/docs/logo_SinochemDI_2.jpeg differ
diff --git a/docs/multi_device.md b/docs/multi_device.md
new file mode 100644
index 00000000..119b02e7
--- /dev/null
+++ b/docs/multi_device.md
@@ -0,0 +1,49 @@
+# Multi-hardware Adaptation
+
+Paddle ecosystem relies on the contributions of developers and users. We warmly welcome contributions to adapt more models for multi-hardware support in Paddle.
+
+## 1. Supported Hardware List
+
+| Task Type | Model Name | NVIDIA | KUNLUNXIN | HYGON | Tecorigin | MetaX |
+|-----------|------------|------------|-----------|-------|-----------|-----------|
+| MLIP(Machine Learning Interatomic Potential) | [CHGNet](../interatomic_potentials/configs/chgnet/README.md) | ✅ | | | | ✅ |
+| MLIP(Machine Learning Interatomic Potential) | [MatterSim](../interatomic_potentials/configs/mattersim/README.md) | ✅ | | | | ✅ |
+| PP(Property Prediction) | [MEGNet](../property_prediction/configs/megnet/README.md) | ✅ | | | | ✅ |
+| PP(Property Prediction) | [DimeNet++](../property_prediction/configs/dimenet++/README.md) | ✅ | | | | ✅ |
+| PP(Property Prediction) | [ComFormer](../property_prediction/configs/comformer/README.md) | ✅ | | | | ✅ |
+| SG(Structure Generation) | [DiffCSP](../structure_generation/configs/diffcsp/README.md) | ✅ | | | | ✅ |
+| SG(Structure Generation) | [MatterGen](../structure_generation/configs/mattergen/README.md) | ✅ | | | | ✅ |
+| SE(Spectrum Elucidation) | [DiffNMR](../spectrum_elucidation/configs/diffnmr/README.md) | ✅ | | | | ✅ |
+
+
+## 2. How to Contribute
+
+We provide reference accuracy based on NVIDIA CUDA training and corresponding pre-trained model weights at the beginning of our public case documentation. If you need to run the models on specific hardware, please follow these steps:
+
+1.If your hardware type has not yet been integrated into PaddlePaddle, you can refer to the official documentation of PaddleCustomDevice to integrate it into the Paddle framework. If your hardware type has been integrated into PaddlePaddle but has not yet been added to PaddleMaterials' hardware support list, please add your hardware type in the tast clarrification README document..
+
+2.Prepare the necessary dataset according to the steps provided in the case documentation.
+
+3.If the model documentation provides model training commands, perform full training on your hardware, save the training logs, record the best model accuracy, and the best model weights. These are usually automatically saved in the case folder during training.
+
+4.If the model documentation provides model evaluation commands, evaluate the best model saved in step 3 on your hardware, save the evaluation logs, and record the evaluation accuracy. These are usually automatically saved in the case folder during evaluation.
+
+5.If the model documentation provides model export and inference commands, follow these commands to verify whether model export and inference can be executed normally on the new hardware and whether the inference results align with CUDA's results.
+
+6.After completing the above steps, you can add your hardware support information (✅) to the corresponding model in the table. And submit a PR to PaddleMaterials. Your PR should include at least the following:
+a.A usage guide document for running the model in your hardware environment
+b.The best model weights file saved during training (.pdparams file).
+c.Training/evaluation logs (.log files).
+d.Software versions used for validating model accuracy, including but not limited to:
+ d.1 PaddlePaddle version
+ d.2 PaddleCustomDevice version (if applicable)
+e.Machine environment details used for validating model accuracy, including but not limited to:
+ e.1 Chip model
+ e.2 System version
+ e.3 Hardware driver version
+ e.4 Operator library version, etc.
+
+## 3. More Referenced Documents
+* [PaddleUserGuide(ch)](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/index_cn.html)
+* [PaddleSupportedHardware(ch)](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/hardware_support/index_cn.html)
+* [PaddleCustomDevice](https://github.com/PaddlePaddle/PaddleCustomDevice)
\ No newline at end of file
diff --git a/docs/overview_ch.png b/docs/overview_ch.png
new file mode 100644
index 00000000..bd85424b
Binary files /dev/null and b/docs/overview_ch.png differ
diff --git a/docs/overview_en.png b/docs/overview_en.png
new file mode 100644
index 00000000..980fd7a9
Binary files /dev/null and b/docs/overview_en.png differ
diff --git a/docs/ppmat_logo.png b/docs/ppmat_logo.png
new file mode 100644
index 00000000..f353cd95
Binary files /dev/null and b/docs/ppmat_logo.png differ
diff --git a/docs/property_prediction.png b/docs/property_prediction.png
new file mode 100644
index 00000000..e31b7b8d
Binary files /dev/null and b/docs/property_prediction.png differ
diff --git a/docs/structure_generation.png b/docs/structure_generation.png
new file mode 100644
index 00000000..4805a668
Binary files /dev/null and b/docs/structure_generation.png differ
diff --git a/docs/wechat_group.png b/docs/wechat_group.png
new file mode 100644
index 00000000..7c17623e
Binary files /dev/null and b/docs/wechat_group.png differ
diff --git a/electronic_structure/README.md b/electronic_structure/README.md
new file mode 100644
index 00000000..edeece03
--- /dev/null
+++ b/electronic_structure/README.md
@@ -0,0 +1,33 @@
+# MLES-Machine Learning Electronic Structure
+
+## 1.Introduction
+
+Machine Learning Electronic Structure (MLES) is an emerging paradigm in computational chemistry and materials science that leverages machine learning to accelerate or even replace traditional ab initio electronic structure methods. It aims to retain quantum accuracy while drastically reducing computational costs. Current research in MLES can be broadly categorized into several directions: Neural Quantum States, Graph-Based Electronic Structure Models, ML Hamiltonians, Neural XC, SCF Accelerators etc. MLES has demonstrated strong potential in predicting material properties, guiding molecular design, and understanding catalytic mechanisms, making it an increasingly important tool in computational materials science and quantum chemistry.
+
+## 2.Models Matrix
+
+| **Supported Functions** | **[InfGCN](./configs/infgcn/README.md)** |
+| -------------------------------------------- | :--------: |
+| **Forward Prediction · Materials Properties**| |
+| Electron density | ✅ |
+| **ML Capabilities · Training** | |
+| Single-GPU | ✅ |
+| Distributed training | ✅ |
+| Mixed precision (AMP) | — |
+| Fine-tuning | ✅ |
+| Uncertainty / Active Learning | — |
+| Dynamic→Static graphs | — |
+| Compiler (CINN) opt. | — |
+| **ML Capabilities · Predict** | |
+| Distillation / Pruning | — |
+| Standard inference | ✅ |
+| Distributed inference | — |
+| Compiler-level inference | — |
+| **Datasets** | |
+| **Materials Project** | |
+| MP_EC | ✅ |
+| MD17_EC | ✅ |
+| QM9_EC | ✅ |
+| OMol25_EC | ✅ |
+
+**Notice**:🌟 represent originate research work published from paddlematerials toolkit
\ No newline at end of file
diff --git a/electronic_structure/configs/infgcn/README.md b/electronic_structure/configs/infgcn/README.md
new file mode 100644
index 00000000..f5ec02dd
--- /dev/null
+++ b/electronic_structure/configs/infgcn/README.md
@@ -0,0 +1,283 @@
+# InfGCN
+
+[InfGCN: Equivariant Neural Operator Learning with Graphon Convolution](https://arxiv.org/abs/2311.10908)
+
+## Abstract
+
+We propose a general architecture that combines a coefficient-learning scheme with a residual operator layer for learning mappings between continuous functions in 3D Euclidean space. The model is SE(3)-equivariant by design. From a graph-spectrum view, the method can be interpreted as convolution on graphons (dense graphs with infinitely many nodes), which we term InfGCN. By leveraging both the continuous graphon structure and the discrete graph structure of the input data, the model effectively captures geometric information while preserving equivariance. On large-scale electron-density datasets, InfGCN outperforms current state-of-the-art architectures, and ablation studies confirm the effectiveness of the design.
+
+
+
+---
+
+## Model Description
+
+### Overview
+InfGCN is an operator-learning model for **electron density prediction**. Given atom types $Z = (z_1,\ldots,z_N)$ and Cartesian coordinates $R = (r_1,\ldots,r_N) \in \mathbb{R}^{N \times 3}$, the model predicts a continuous electron-density field $\rho(x)$ (typically evaluated on a 3D grid). The core idea is:
+- **Atom-centered basis expansion** to represent $\rho(x)$
+- **SE(3)-equivariant graphon convolution** to learn expansion coefficients
+- Optional **residual operator layer** to refine global details
+
+### Method
+
+#### 1) Atom-centered basis expansion
+(1) Atom-centered basis expansion
+
+The density field is expanded as a sum of atom-centered basis functions:
+
+$$
+\hat{\rho}(x) = \sum_{i=1}^{N} \sum_{n=1}^{N_r} \sum_{l=0}^{l_{\max}} \sum_{m=-l}^{l}
+c_{i,nlm},\phi_{nlm}(x - r_i)
+$$
+
+A common choice for $\phi_{nlm}$ is a separable radial-angular basis:
+
+$$
+\phi_{nlm}(r) = g_n(|r|),Y_{lm}!\left(\widehat{r}\right),
+\qquad r = x - r_i
+$$
+
+where $g_n(\cdot)$ is a radial basis and $Y_{lm}$ are spherical harmonics. All learnable information is in the coefficients $c_{i,nlm}$.
+
+#### 2) SE(3)-equivariant coefficient learning
+Coefficients are updated with equivariant message passing:
+
+$$
+C_i^{(s)} = \sum_{j \in \mathcal{N}(i)} W_{ij}^{(s)} \odot C_j^{(s-1)}, \quad s = 1,\ldots,S
+$$
+
+Edge weights $W_{ij}^{(s)}$ depend on distance and angle features (radial basis on $\lVert r_{ij}\rVert$, spherical harmonics on $\widehat{r_{ij}}$, and an MLP). This yields rotation equivariance, permutation invariance, and physically meaningful local-to-global aggregation.
+
+#### 3) Residual operator layer (optional)
+
+A lightweight refinement adds a learnable correction on top of the base expansion:
+
+$$
+\hat{\rho}(x) = \hat{\rho}{\text{base}}(x) + \Delta \rho{\theta}(x)
+$$
+
+where $\Delta \rho_{\theta}$ is produced by an extra operator acting on intermediate features (for example, grid features or learned coefficients).
+
+#### 4) Training objective and metrics
+
+A standard regression objective minimizes an $L_2$ error over the 3D domain:
+
+$$
+\mathcal{L} = \mathbb{E}!\left[\left|\hat{\rho} - \rho\right|_2^2\right]
+$$
+
+The density is discretized on an $n \times n \times n$ grid; grid points can be subsampled for memory efficiency. A common metric is **Normalized Mean Absolute Error (NMAE)**:
+
+$$
+\mathrm{NMAE} =
+\frac{\sum_{i=1}^{n^3}\left|\hat{\rho}(x_i) - \rho(x_i)\right|}
+{\sum_{i=1}^{n^3}\left|\rho(x_i)\right|}
+$$
+
+---
+
+## Dataset Description
+
+### Recommended data fields
+- `atomic_numbers`: length-$N$ atomic numbers
+- `pos`: $N \times 3$ Cartesian coordinates (Angstroms)
+- `density`: 3D array (voxel grid), for example $n \times n \times n$
+- `grid_meta` (optional): origin, spacing, and box vectors to define $x_i$
+- Optional tags: `mol_id`, `frame_id`, normalization/scaling factors
+
+### Datasets
+- **QM9_EC**: Electron densities stored as `*.CHGCAR.lz4` in `dataset_ES/data_qm9` (train 123,835 / val 50 / test 10,000). [Data](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/QM9_ES/qm9_es.tar), [Atom dictionary](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/QM9_ES/qm9.json), [Split file](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/QM9_ES/qm9_data_split.json).
+- **MP_EC (cubic)**: Materials Project-style crystals serialized as `.json.xz` under `dataset_ES/data_cubic` (train 14,421 / val 1,000 / test 1,000). [Data](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/MP_ES/mp_es.tar), [Atom dictionary](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/MP_ES/crystal.json), [Split file](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/MP_ES/crystal_data_split.json).
+- **OMol25_EC**: Organic molecule cubes expected under `/home/liuxuwei01/processed_output` (train 16 / val 2 / test 2). [Data](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/OMol25_ES/MC_5k/omol25_mc_5k.tar), [Atom dictionary](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/OMol25_ES/MC_5k/omol25.json), [Split file](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/OMol25_ES/MC_5k/omol25_data_split.json).
+- **MD17_EC**: Small molecules (for example, ethanol, benzene, phenol, resorcinol) from the MD17 electron-density release in `dataset_ES/data_md`; default config trains on ethanol. [Data](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/MD17_ES/md17_es.tar.gz).
+
+---
+
+## Results
+
+
+
+**Note**: Benchmarks are being regenerated in Paddle; metrics and downloadable checkpoints will be published once validation completes. Pretrained QM9 weights: [infgcn_qm9](https://paddle-org.bj.bcebos.com/paddlematerials/checkpoints/electronic_structure/infgcn/infgcn_qm9.pdparams)
+
+---
+
+## Command
+
+### Training
+```bash
+# multi-gpu training (example with 4 GPUs)
+python -m paddle.distributed.launch --gpus="0,1,2,3" electronic_structure/train.py -c electronic_structure/configs/infgcn/infgcn_qm9.yaml
+# single-gpu training
+python electronic_structure/train.py -c electronic_structure/configs/infgcn/infgcn_qm9.yaml
+```
+
+### Validation
+```bash
+# Enable eval-only mode with a saved checkpoint.
+python electronic_structure/train.py -c electronic_structure/configs/infgcn/infgcn_qm9.yaml Global.do_eval=True Global.do_train=False Global.do_test=False Trainer.pretrained_model_path='path/to/model.pdparams'
+```
+
+### Testing
+```bash
+# Evaluate on the test split using a pretrained checkpoint.
+python electronic_structure/train.py -c electronic_structure/configs/infgcn/infgcn_qm9.yaml Global.do_eval=False Global.do_train=False Global.do_test=True Trainer.pretrained_model_path='path/to/model.pdparams'
+```
+
+### Prediction
+```bash
+# 1) Dataset-sample inference (uses dataset paths from the YAML unless overridden).
+python electronic_structure/predict.py \
+ --config electronic_structure/configs/infgcn/infgcn_qm9.yaml \
+ --checkpoint output/infgcn_qm9_best/infgcn_qm9.pdparams \
+ --split validation \
+ --index 0 \
+ --grid_batch_size 20000 \
+ --output_dir output/infgcn_qm9_best/vis_val0 \
+ --save_pred_cube \
+ --save_true_cube \
+ --cube_dir output/infgcn_qm9_best/cubes
+
+# 2) MOL-file inference (single file or directory).
+# This mode predicts electron density from molecular structure files (*.mol),
+# and can export predicted cube + html visualization.
+CUDA_VISIBLE_DEVICES=4 conda run -n ppmat python electronic_structure/predict.py \
+ --config output/infgcn_omol25_s1_trimmed_t_20260118_183549_s_42/infgcn_omol25_trimmed.yaml \
+ --checkpoint output/infgcn_omol25_s1_trimmed_t_20260118_183549_s_42/checkpoints/latest.pdparams \
+ --mol_input mols/Baidu_infGCN_Example_20260206 \
+ --atom_file /home/liuxuwei01/processed_output/omol25.json \
+ --output_dir output/infgcn_omol25_s1_trimmed_t_20260118_183549_s_42/mol_predict_latest_gpu4 \
+ --cube_dir output/infgcn_omol25_s1_trimmed_t_20260118_183549_s_42/mol_predict_latest_gpu4/cubes \
+ --save_pred_cube \
+ --save_html \
+ --grid_batch_size 4096
+
+# 3) MOL-file inference with reference (true) cube files.
+# If --mol_true_cube_dir provides matching files (.cube or _true.cube),
+# the script additionally writes true cube and true/diff html.
+CUDA_VISIBLE_DEVICES=4 conda run -n ppmat python electronic_structure/predict.py \
+ --config output/infgcn_omol25_s1_trimmed_t_20260118_183549_s_42/infgcn_omol25_trimmed.yaml \
+ --checkpoint output/infgcn_omol25_s1_trimmed_t_20260118_183549_s_42/checkpoints/latest.pdparams \
+ --mol_input mols/Baidu_infGCN_Example_20260206 \
+ --mol_true_cube_dir /path/to/true_cubes \
+ --atom_file /home/liuxuwei01/processed_output/omol25.json \
+ --output_dir output/infgcn_omol25_s1_trimmed_t_20260118_183549_s_42/mol_predict_latest_gpu4 \
+ --cube_dir output/infgcn_omol25_s1_trimmed_t_20260118_183549_s_42/mol_predict_latest_gpu4/cubes \
+ --save_true_cube \
+ --save_pred_cube \
+ --save_html \
+ --grid_batch_size 4096
+```
+
+Notes:
+- `--mol_input` supports either one `.mol` file or a directory of `.mol` files.
+- Optional grid controls for MOL mode: `--mol_grid_shape` (default `80,80,80`) and `--mol_grid_padding` (default `6.0` Angstrom).
+- If true/reference cube is not provided, only predicted outputs are available (`*_pred.cube`, `*_pred_density.html`).
+- If kaleido/Chrome is unavailable, the script writes interactive `.html` instead of `.png`.
+- If your datasets live elsewhere, create a symlink to the data root (for example, `ln -s /path/to/dataset_ES dataset_ES`).
+
+---
+
+## Citation
+```
+@article{cheng2023infgcn,
+ title={Equivariant neural operator learning with graphon convolution},
+ author={Cheng, Chaoran and Peng, Jian},
+ journal={arXiv preprint arXiv:2311.10908},
+ year={2023}
+}
+```
diff --git a/electronic_structure/configs/infgcn/infgcn_md17_benzene.yaml b/electronic_structure/configs/infgcn/infgcn_md17_benzene.yaml
new file mode 100644
index 00000000..8b799efe
--- /dev/null
+++ b/electronic_structure/configs/infgcn/infgcn_md17_benzene.yaml
@@ -0,0 +1,159 @@
+Global:
+ do_train: True
+ do_eval: True
+ do_test: True
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 32
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 10000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/infgcn_md17_benzene
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_loss' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "mae"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: True
+
+Model:
+ __class_name__: InfGCN
+ __init_params__:
+ n_atom_type: 3
+ num_radial: 16
+ num_spherical: 7
+ radial_embed_size: 64
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 3.0
+ grid_cutoff: 3.0
+ is_fc: false
+ gauss_start: 0.5
+ gauss_end: 5.0
+ residual: true
+
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.005
+ factor: 0.5
+ patience: 5
+ min_lr: 0.00001
+ by_epoch: True
+ indicator: "eval_loss"
+ indicator_name: "loss"
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md #
+ mol_name: benzene
+ split: "train"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 4
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ val:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: benzene
+ split: "validation"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 8
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ test:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: benzene
+ split: "test"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 1
+ loader:
+ num_workers: 2
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048 # recommend set blank if have enough gpu memory
+
+Predict:
+ eval_with_no_grad: True
+ num_infer: null
+ num_vis: 2
+ inf_samples: 4096
diff --git a/electronic_structure/configs/infgcn/infgcn_md17_ethane.yaml b/electronic_structure/configs/infgcn/infgcn_md17_ethane.yaml
new file mode 100644
index 00000000..4516b860
--- /dev/null
+++ b/electronic_structure/configs/infgcn/infgcn_md17_ethane.yaml
@@ -0,0 +1,158 @@
+Global:
+ do_train: True
+ do_eval: True
+ do_test: True
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 32
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 10000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/infgcn_md17_ethane
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_loss' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "mae"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: True
+
+Model:
+ __class_name__: InfGCN
+ __init_params__:
+ n_atom_type: 3
+ num_radial: 16
+ num_spherical: 7
+ radial_embed_size: 64
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 3.0
+ grid_cutoff: 3.0
+ is_fc: false
+ gauss_start: 0.5
+ gauss_end: 5.0
+ residual: true
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.005
+ factor: 0.5
+ patience: 5
+ min_lr: 0.00001
+ by_epoch: True
+ indicator: "eval_loss"
+ indicator_name: "loss"
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md #
+ mol_name: ethane
+ split: "train"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 4
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 1024
+ val:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: ethane
+ split: "validation"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 8
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ test:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: ethane
+ split: "test"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 1
+ loader:
+ num_workers: 2
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048 # recommend set blank if have enough gpu memory
+
+Predict:
+ eval_with_no_grad: True
+ num_infer: null
+ num_vis: 2
+ inf_samples: 4096
diff --git a/electronic_structure/configs/infgcn/infgcn_md17_ethanol.yaml b/electronic_structure/configs/infgcn/infgcn_md17_ethanol.yaml
new file mode 100644
index 00000000..7891453d
--- /dev/null
+++ b/electronic_structure/configs/infgcn/infgcn_md17_ethanol.yaml
@@ -0,0 +1,159 @@
+Global:
+ do_train: True
+ do_eval: True
+ do_test: True
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 32
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 10000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/infgcn_md17_ethanol
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_loss' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "mae"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: True
+
+Model:
+ __class_name__: InfGCN
+ __init_params__:
+ n_atom_type: 3
+ num_radial: 16
+ num_spherical: 7
+ radial_embed_size: 64
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 3.0
+ grid_cutoff: 3.0
+ is_fc: false
+ gauss_start: 0.5
+ gauss_end: 5.0
+ residual: true
+
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.005
+ factor: 0.5
+ patience: 5
+ min_lr: 0.00001
+ by_epoch: True
+ indicator: "eval_loss"
+ indicator_name: "loss"
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md #
+ mol_name: ethanol
+ split: "train"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 4
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 1024
+ val:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: ethanol
+ split: "validation"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 8
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ test:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: ethanol
+ split: "test"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 1
+ loader:
+ num_workers: 2
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048 # recommend set blank if have enough gpu memory
+
+Predict:
+ eval_with_no_grad: True
+ num_infer: null
+ num_vis: 2
+ inf_samples: 4096
diff --git a/electronic_structure/configs/infgcn/infgcn_md17_malonaldehyde.yaml b/electronic_structure/configs/infgcn/infgcn_md17_malonaldehyde.yaml
new file mode 100644
index 00000000..46d1e658
--- /dev/null
+++ b/electronic_structure/configs/infgcn/infgcn_md17_malonaldehyde.yaml
@@ -0,0 +1,159 @@
+Global:
+ do_train: True
+ do_eval: True
+ do_test: True
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 32
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 10000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/infgcn_md17_malonaldehyde
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_loss' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "mae"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: True
+
+Model:
+ __class_name__: InfGCN
+ __init_params__:
+ n_atom_type: 3
+ num_radial: 16
+ num_spherical: 7
+ radial_embed_size: 64
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 3.0
+ grid_cutoff: 3.0
+ is_fc: false
+ gauss_start: 0.5
+ gauss_end: 5.0
+ residual: true
+
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.005
+ factor: 0.5
+ patience: 5
+ min_lr: 0.00001
+ by_epoch: True
+ indicator: "eval_loss"
+ indicator_name: "loss"
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md #
+ mol_name: malonaldehyde
+ split: "train"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 4
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 1024
+ val:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: malonaldehyde
+ split: "validation"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 8
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ test:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: malonaldehyde
+ split: "test"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 1
+ loader:
+ num_workers: 2
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048 # recommend set blank if have enough gpu memory
+
+Predict:
+ eval_with_no_grad: True
+ num_infer: null
+ num_vis: 2
+ inf_samples: 4096
diff --git a/electronic_structure/configs/infgcn/infgcn_md17_phenol.yaml b/electronic_structure/configs/infgcn/infgcn_md17_phenol.yaml
new file mode 100644
index 00000000..bc308d1a
--- /dev/null
+++ b/electronic_structure/configs/infgcn/infgcn_md17_phenol.yaml
@@ -0,0 +1,159 @@
+Global:
+ do_train: True
+ do_eval: True
+ do_test: True
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 32
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 10000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/infgcn_md17_phenol
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_loss' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "mae"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: True
+
+Model:
+ __class_name__: InfGCN
+ __init_params__:
+ n_atom_type: 3
+ num_radial: 16
+ num_spherical: 7
+ radial_embed_size: 64
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 3.0
+ grid_cutoff: 3.0
+ is_fc: false
+ gauss_start: 0.5
+ gauss_end: 5.0
+ residual: true
+
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.005
+ factor: 0.5
+ patience: 5
+ min_lr: 0.00001
+ by_epoch: True
+ indicator: "eval_loss"
+ indicator_name: "loss"
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md #
+ mol_name: phenol
+ split: "train"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 4
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 1024
+ val:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: phenol
+ split: "validation"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 8
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ test:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: phenol
+ split: "test"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 1
+ loader:
+ num_workers: 2
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048 # recommend set blank if have enough gpu memory
+
+Predict:
+ eval_with_no_grad: True
+ num_infer: null
+ num_vis: 2
+ inf_samples: 4096
diff --git a/electronic_structure/configs/infgcn/infgcn_md17_resorcinol.yaml b/electronic_structure/configs/infgcn/infgcn_md17_resorcinol.yaml
new file mode 100644
index 00000000..e224fd97
--- /dev/null
+++ b/electronic_structure/configs/infgcn/infgcn_md17_resorcinol.yaml
@@ -0,0 +1,159 @@
+Global:
+ do_train: True
+ do_eval: True
+ do_test: True
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 32
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 10000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/infgcn_md17_resorcinol
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_loss' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "mae"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: True
+
+Model:
+ __class_name__: InfGCN
+ __init_params__:
+ n_atom_type: 3
+ num_radial: 16
+ num_spherical: 7
+ radial_embed_size: 64
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 3.0
+ grid_cutoff: 3.0
+ is_fc: false
+ gauss_start: 0.5
+ gauss_end: 5.0
+ residual: true
+
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.005
+ factor: 0.5
+ patience: 5
+ min_lr: 0.00001
+ by_epoch: True
+ indicator: "eval_loss"
+ indicator_name: "loss"
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md #
+ mol_name: resorcinol
+ split: "train"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 4
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 1024
+ val:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: resorcinol
+ split: "validation"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 8
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ test:
+ dataset:
+ __class_name__: SmallDensityDataset
+ __init_params__:
+ root: ./data/data_md
+ mol_name: resorcinol
+ split: "test"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 1
+ loader:
+ num_workers: 2
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048 # recommend set blank if have enough gpu memory
+
+Predict:
+ eval_with_no_grad: True
+ num_infer: null
+ num_vis: 2
+ inf_samples: 4096
diff --git a/electronic_structure/configs/infgcn/infgcn_mp.yaml b/electronic_structure/configs/infgcn/infgcn_mp.yaml
new file mode 100644
index 00000000..7202978a
--- /dev/null
+++ b/electronic_structure/configs/infgcn/infgcn_mp.yaml
@@ -0,0 +1,172 @@
+Global:
+ do_train: True
+ do_eval: True
+ do_test: True
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 2
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 100000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/infgcn_mp
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_loss' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "mae"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: True
+
+Model:
+ __class_name__: InfGCN
+ __init_params__:
+ n_atom_type: 84
+ num_radial: 16
+ num_spherical: 7
+ radial_embed_size: 64
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 3.0
+ grid_cutoff: 3.0
+ is_fc: false
+ gauss_start: 0.5
+ gauss_end: 5.0
+ residual: true
+
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.001
+ factor: 0.5
+ patience: 10
+ min_lr: 0.00001
+ by_epoch: True
+ indicator: "eval_loss"
+ indicator_name: "loss"
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: ./data/data_cubic
+ split_file: crystal_data_split.json
+ atom_file: ./data/data_cubic/crystal.json
+ extension: json
+ compression: xz
+ pbc: false
+ split: "train"
+ enable_cache: false # if have enough space, set true, which is not completely tested in this dataset
+ overwrite: false
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: True
+ batch_size: 16
+ loader:
+ num_workers: 0
+ use_shared_memory: False
+ collate_fn: DensityCollator
+ collate_params:
+ n_samples: 1024
+ val:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: ./data/data_cubic
+ split_file: crystal_data_split.json
+ atom_file: ./data/data_cubic/crystal.json
+ extension: json
+ compression: xz
+ pbc: false
+ split: "validation"
+ enable_cache: false # if have enough space, set true, which is not completely tested in this dataset
+ overwrite: false
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 6 # recommend >2 <=6, on V100 16G GPU
+ loader:
+ num_workers: 0
+ use_shared_memory: False
+ collate_fn: DensityCollator
+ collate_params:
+ n_samples: 4096
+ test:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: ./data/data_cubic
+ split_file: crystal_data_split.json
+ atom_file: ./data/data_cubic/crystal.json
+ extension: json
+ compression: xz
+ pbc: false
+ split: "test"
+ rotate: false
+ enable_cache: false # if have enough space, set true, which is not completely tested in this dataset
+ overwrite: false
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 1
+ loader:
+ num_workers: 0
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048 # recommend set blank if have enough gpu memory
diff --git a/electronic_structure/configs/infgcn/infgcn_omol25_MC_5k_trimmed.yaml b/electronic_structure/configs/infgcn/infgcn_omol25_MC_5k_trimmed.yaml
new file mode 100644
index 00000000..3f77e897
--- /dev/null
+++ b/electronic_structure/configs/infgcn/infgcn_omol25_MC_5k_trimmed.yaml
@@ -0,0 +1,195 @@
+Global:
+ do_train: True
+ do_eval: True
+ do_test: False
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 100
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 1000000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/infgcn_omol25_MC_5k_trimmed
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_loss' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "mae"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+
+Model:
+ __class_name__: InfGCN
+ __init_params__:
+ n_atom_type: 84
+ num_radial: 32
+ num_spherical: 7
+ radial_embed_size: 32
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 6.0
+ grid_cutoff: 6.0
+ is_fc: True
+ gauss_start: 0.5
+ gauss_end: 5.0
+ activation: norm
+ residual: true
+ pbc: false
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.001
+ factor: 0.5
+ patience: 10
+ min_lr: 1.0e-05
+ by_epoch: true
+ indicator: eval_loss
+ indicator_name: loss
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+
+# remind: just subsets of Metal Complexes of OMol25
+Dataset:
+ train:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: ./data/dataset_OMol25_MC_5k
+ split_file: omol25_s1_trimmed.json
+ atom_file: ./data/dataset_OMol25_MC_5k/omol25.json
+ extension: cube
+ compression: lz4
+ pbc: false
+ split: train
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: false
+ drop_last: false
+ batch_size: 1
+ loader:
+ num_workers: 0
+ use_shared_memory: false
+ collate_fn: DensityCollator
+ collate_params:
+ n_samples: 2048
+ sampling_mode: uniform
+ uniform_random_offset: true
+ sampling_seed: 42
+ clip_max: 200.0
+ importance_sampling: true
+ importance_threshold: 1.0e-05
+ importance_ratio: 0.6
+ extreme_threshold: 100.0
+ extreme_ratio: 0.05
+ val:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: ./data/dataset_OMol25_MC_5k
+ split_file: omol25_s1_trimmed.json
+ atom_file: ./data/dataset_OMol25_MC_5k/omol25.json
+ extension: cube
+ compression: lz4
+ pbc: false
+ split: validation
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: false
+ drop_last: false
+ batch_size: 1
+ loader:
+ num_workers: 0
+ use_shared_memory: false
+ collate_fn: DensityCollator
+ collate_params:
+ n_samples: 2048
+ sampling_mode: uniform
+ uniform_random_offset: true
+ sampling_seed: 42
+ clip_max: 200.0
+ importance_sampling: true
+ importance_threshold: 1.0e-05
+ importance_ratio: 0.6
+ extreme_threshold: 100.0
+ extreme_ratio: 0.05
+ test:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: ./data/dataset_OMol25_MC_5k
+ split_file: omol25_s1_trimmed.json
+ atom_file: ./data/dataset_OMol25_MC_5k/omol25.json
+ extension: cube
+ compression: lz4
+ pbc: false
+ split: test
+ rotate: false
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: false
+ drop_last: false
+ batch_size: 1
+ loader:
+ num_workers: 0
+ use_shared_memory: false
+ collate_fn: DensityCollator
+ collate_params:
+ n_samples: 2048
+ sampling_mode: uniform
+ uniform_random_offset: true
+ sampling_seed: 42
+ clip_max: 200.0
+ importance_sampling: true
+ importance_threshold: 1.0e-05
+ importance_ratio: 0.6
+ extreme_threshold: 100.0
+ extreme_ratio: 0.05
diff --git a/electronic_structure/configs/infgcn/infgcn_qm9.yaml b/electronic_structure/configs/infgcn/infgcn_qm9.yaml
new file mode 100644
index 00000000..79aaba21
--- /dev/null
+++ b/electronic_structure/configs/infgcn/infgcn_qm9.yaml
@@ -0,0 +1,177 @@
+Global:
+ do_train: True
+ do_eval: True
+ do_test: True
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 2
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 100000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/infgcn_qm9
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_loss' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "mae"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: True
+
+Model:
+ __class_name__: InfGCN
+ __init_params__:
+ n_atom_type: 5
+ num_radial: 16
+ num_spherical: 7
+ radial_embed_size: 64
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 3.0
+ grid_cutoff: 3.0
+ is_fc: false
+ gauss_start: 0.5
+ gauss_end: 5.0
+ residual: true
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.001
+ factor: 0.5
+ patience: 10
+ min_lr: 0.00001
+ by_epoch: True
+ indicator: "eval_loss"
+ indicator_name: "loss"
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: ./data/data_qm9
+ split_file: qm9_data_split.json
+ atom_file: ./data/data_qm9/qm9.json
+ extension: CHGCAR
+ compression: lz4
+ pbc: false
+ split: "train"
+ enable_cache: false # if have enough space, set true, which is not completely tested in this dataset
+ overwrite: false
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: True
+ batch_size: 16
+ loader:
+ num_workers: 0
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ val:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: ./data/data_qm9
+ split_file: qm9_data_split.json
+ atom_file: ./data/data_qm9/qm9.json
+ extension: CHGCAR
+ compression: lz4
+ pbc: false
+ split: "validation"
+ enable_cache: false # if have enough space, set true, which is not completely tested in this dataset
+ overwrite: false
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 16
+ loader:
+ num_workers: 0
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ test:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: ./data/data_qm9
+ split_file: qm9_data_split.json
+ atom_file: ./data/data_qm9/qm9.json
+ extension: CHGCAR
+ compression: lz4
+ pbc: false
+ split: "test"
+ rotate: false
+ enable_cache: false # if have enough space, set true, which is not completely tested in this dataset
+ overwrite: false
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: False
+ batch_size: 1
+ loader:
+ num_workers: 4
+ use_shared_memory: Flase
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048 # recommend set blank if have enough gpu memory
+
+Predict:
+ eval_with_no_grad: True
+ num_infer: 100
+ num_vis: 2
+ inf_samples: 4096
diff --git a/electronic_structure/configs/mateno/mateno_omol25.yaml b/electronic_structure/configs/mateno/mateno_omol25.yaml
new file mode 100644
index 00000000..140cb542
--- /dev/null
+++ b/electronic_structure/configs/mateno/mateno_omol25.yaml
@@ -0,0 +1,176 @@
+# MatENO Configuration for OMol25 Dataset
+Global:
+ do_train: True
+ do_eval: True
+ do_test: True
+ use_voxel: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 2000
+ # Max iteration which equals to steps * epoches, to early stop
+ max_iter: 40000
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/mateno_omol25
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 2000
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 20
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 0
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: True
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_metric' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "density"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: True
+
+
+Model:
+ __class_name__: MatENO
+ __init_params__:
+ n_atom_type: 69
+ num_radial: 32
+ num_spherical: 7
+ radial_embed_size: 32
+ radial_hidden_size: 128
+ num_radial_layer: 2
+ num_gcn_layer: 3
+ cutoff: 5.0
+ grid_cutoff: 5.0
+ is_fc: True
+ gauss_start: 0.5
+ gauss_end: 5.0
+ activation: "norm"
+ residual: True
+ pbc: False
+
+Metric:
+ density:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: ReduceOnPlateau
+ __init_params__:
+ learning_rate: 0.001
+ factor: 0.5
+ patience: 10
+ min_lr: 0.00001
+ by_epoch: True
+ indicator: "eval_loss"
+ indicator_name: "loss"
+ weight_decay: 0.0
+ beta1: 0.9
+ beta2: 0.999
+ # parameters'gradients clip setting, please choose one of three following methods: clip_norm:value, clip_norm_global:value, clip_value:value
+ clip_norm_global: 100.0
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: /home/liuxuwei01/data_afs/dataset_OMol25_MC_5k/processed_out
+ split_file: omol25_data_split.json
+ atom_file: /home/liuxuwei01/data_afs/dataset_OMol25_MC_5k/processed_out/omol25.json
+ extension: cube
+ compression: lz4
+ pbc: false
+ split: "train"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: True
+ batch_size: 2
+ loader:
+ num_workers: 0
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ val:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: /home/liuxuwei01/data_afs/dataset_OMol25_MC_5k/processed_out
+ split_file: omol25_data_split.json
+ atom_file: /home/liuxuwei01/data_afs/dataset_OMol25_MC_5k/processed_out/omol25.json
+ extension: cube
+ compression: lz4
+ pbc: false
+ split: "validation"
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 2
+ loader:
+ num_workers: 0
+ use_shared_memory: False
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
+ test:
+ dataset:
+ __class_name__: DensityDataset
+ __init_params__:
+ root: /home/liuxuwei01/data_afs/dataset_OMol25_MC_5k/processed_out
+ split_file: omol25_data_split.json
+ atom_file: /home/liuxuwei01/data_afs/dataset_OMol25_MC_5k/processed_out/omol25.json
+ extension: cube
+ compression: lz4
+ pbc: false
+ split: "test"
+ rotate: false
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 2
+ loader:
+ num_workers: 0
+ use_shared_memory: Flase
+ collate_fn: DensityCollator # DensityVoxelCollator # if use voxel
+ collate_params:
+ n_samples: 2048
diff --git a/electronic_structure/docs/infgcn.png b/electronic_structure/docs/infgcn.png
new file mode 100644
index 00000000..4e2d7005
Binary files /dev/null and b/electronic_structure/docs/infgcn.png differ
diff --git a/electronic_structure/generate_dataset.py b/electronic_structure/generate_dataset.py
new file mode 100644
index 00000000..19188e03
--- /dev/null
+++ b/electronic_structure/generate_dataset.py
@@ -0,0 +1,58 @@
+# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import argparse
+import os
+from pathlib import Path
+
+import numpy as np
+
+
+def read_xyz(file):
+ all_coords = []
+ try:
+ while True:
+ n_atom = int(file.readline())
+ file.readline()
+ coords = []
+ for _ in range(n_atom):
+ coords.append([float(x) for x in file.readline().split()[1:4]])
+ all_coords.append(coords)
+ except (StopIteration, ValueError):
+ all_coords = np.array(all_coords, dtype=float)
+ print(all_coords.shape)
+ return all_coords
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--root", type=str, default="./data")
+ parser.add_argument("--out", type=str, default="./data")
+ args = parser.parse_args()
+ root = Path(args.root)
+ out = Path(args.out)
+ for mol in ["ethane", "malonaldehyde"]:
+ den = np.loadtxt(root / f"{mol}_300K/densities.txt")
+ train_dir = root / f"{mol}/{mol}_train/"
+ os.makedirs(train_dir, exist_ok=True)
+ np.save(train_dir / "dft_densities.npy", den)
+ with open(root / f"{mol}_300K/structures.xyz") as f:
+ np.save(train_dir / "structures.npy", read_xyz(f))
+ den = np.loadtxt(root / f"{mol}_300K-test/densities.txt")
+ test_dir = root / f"{mol}/{mol}_test/"
+ os.makedirs(test_dir, exist_ok=True)
+ np.save(test_dir / "dft_densities.npy", den)
+ with open(root / f"{mol}_300K-test/structures.xyz") as f:
+ np.save(test_dir / "structures.npy", read_xyz(f))
+ print("Done")
diff --git a/electronic_structure/predict.py b/electronic_structure/predict.py
new file mode 100644
index 00000000..d466f3ce
--- /dev/null
+++ b/electronic_structure/predict.py
@@ -0,0 +1,1065 @@
+# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import argparse
+import copy
+import gzip
+import json
+import lzma
+import math
+from pathlib import Path
+import numpy as np
+import time
+
+import paddle
+import plotly.graph_objects as go
+from omegaconf import OmegaConf
+from tqdm import tqdm
+
+try:
+ from IPython.display import Image, display
+except ImportError: # Optional dependency; visualization still works for files
+ Image, display = None, None
+
+from ppmat.datasets import DensityDataset
+from ppmat.datasets import SmallDensityDataset
+from ppmat.datasets.geometric_data_type.data import Data
+from ppmat.models import build_model
+from ppmat.utils import logger
+from ppmat.utils.misc import set_random_seed
+
+BOHR2ANG = 0.529177
+ANG2BOHR = 1.0 / BOHR2ANG
+
+
+def get_pretrained_model(cfg_path, model_path):
+ logger.info(f"from {cfg_path} loading config")
+ cfg = OmegaConf.load(cfg_path)
+ cfg = OmegaConf.to_container(cfg, resolve=True)
+
+ model = build_model(cfg["Model"])
+ logger.info(f"from {model_path}loading model")
+ # if a directory is given, pick best > latest > highest epoch > any pdparams
+ mpath = Path(model_path)
+ if mpath.is_dir():
+ candidates = list(mpath.glob("**/*.pdparams"))
+ chosen = None
+ for name in ["best.pdparams", "latest.pdparams"]:
+ hits = [c for c in candidates if c.name == name]
+ if hits:
+ chosen = hits[0]
+ break
+ if chosen is None:
+ epochs = []
+ for c in candidates:
+ stem = c.stem
+ if stem.startswith("epoch_"):
+ try:
+ ep = int(stem.split("_")[1])
+ epochs.append((ep, c))
+ except Exception:
+ pass
+ if epochs:
+ epochs.sort(key=lambda x: -x[0])
+ chosen = epochs[0][1]
+ if chosen is None and candidates:
+ chosen = candidates[0]
+ if chosen is None:
+ raise FileNotFoundError(f"No .pdparams found under {model_path}")
+ model_path = str(chosen)
+ logger.info(f"Resolved checkpoint path: {model_path}")
+
+ state_dict = paddle.load(model_path)
+ if isinstance(state_dict, dict) and "model" in state_dict:
+ model.set_state_dict(state_dict["model"])
+ else:
+ model.set_state_dict(state_dict)
+ return model
+
+
+def inference_model(model, g, density, grid_coord, infos, grid_batch_size=8196):
+ with paddle.no_grad():
+ model.eval()
+ device = paddle.get_device()
+ prepared_infos = (
+ model._prepare_infos(infos, device) if hasattr(model, "_prepare_infos") else infos
+ )
+ if grid_batch_size is None:
+ if hasattr(model, "_forward_density"):
+ preds = model._forward_density(
+ g.x, g.pos, grid_coord, g.batch, prepared_infos
+ ).squeeze(0)
+ else:
+ # Fallback for legacy models expecting raw tensors
+ preds = model(g.x, g.pos, grid_coord, g.batch, prepared_infos).squeeze(0)
+ else:
+ preds = []
+ total = grid_coord.shape[1]
+ step = grid_batch_size
+ num_iter = (total + step - 1) // step
+ for start in tqdm(range(0, total, step), total=num_iter):
+ end = min(start + step, total)
+ grid = grid_coord[:, start:end]
+ if hasattr(model, "_forward_density"):
+ preds.append(
+ model._forward_density(
+ g.x, g.pos, grid, g.batch, prepared_infos
+ ).squeeze(0)
+ )
+ else:
+ preds.append(
+ model(g.x, g.pos, grid, g.batch, prepared_infos).squeeze(0)
+ )
+ preds = paddle.concat(preds, axis=0)
+
+ if density is None:
+ return preds, None, None
+
+ mask = (density > 0).astype(dtype="float32")
+ preds = preds * mask
+ density = density * mask
+ diff = paddle.abs(preds - density)
+ loss = diff.pow(2).sum()
+ denom = paddle.clip(density.sum(), min=1e-12)
+ mae = diff.sum() / denom
+ return preds, loss, mae
+
+
+def draw_volume(
+ grid,
+ density,
+ atom_type,
+ atom_coord,
+ isomin=0.05,
+ isomax=None,
+ surface_count=5,
+ title=None,
+):
+ atom_colorscale = ["grey", "white", "red", "blue", "green"]
+ fig = go.Figure()
+ fig.add_trace(
+ go.Volume(
+ x=grid[..., 0],
+ y=grid[..., 1],
+ z=grid[..., 2],
+ value=density,
+ isomin=isomin,
+ isomax=isomax,
+ opacity=0.1,
+ surface_count=surface_count,
+ caps=dict(x_show=False, y_show=False, z_show=False),
+ )
+ )
+
+ axis_dict = dict(
+ showgrid=False,
+ showbackground=False,
+ zeroline=False,
+ visible=False,
+ )
+
+ fig.add_trace(
+ go.Scatter3d(
+ x=atom_coord[:, 0],
+ y=atom_coord[:, 1],
+ z=atom_coord[:, 2],
+ mode="markers",
+ marker=dict(
+ size=10,
+ color=atom_type,
+ cmin=0,
+ cmax=4,
+ colorscale=atom_colorscale,
+ opacity=0.6,
+ ),
+ )
+ )
+
+ if title is not None:
+ title = dict(
+ text=title,
+ x=0.5,
+ y=0.3,
+ xanchor="center",
+ yanchor="bottom",
+ )
+
+ fig.update_layout(
+ autosize=False,
+ width=800,
+ height=800,
+ showlegend=False,
+ scene=dict(xaxis=axis_dict, yaxis=axis_dict, zaxis=axis_dict),
+ title=title,
+ title_font_family="Times New Roman",
+ )
+
+ return fig
+
+
+def safe_write_image(fig, path, show_plot=False):
+ try:
+ fig.write_image(path)
+ logger.info(f"Image saved to: {path}")
+ except Exception as e:
+ logger.warning(f"Failed to save image {path}: {e}")
+ try:
+ html_path = path.with_suffix(".html")
+ fig.write_html(html_path)
+ logger.info(f"Saved interactive HTML instead: {html_path}")
+ except Exception as html_e:
+ logger.warning(f"Failed to save HTML fallback for {path}: {html_e}")
+
+ if show_plot:
+ try:
+ if Image is None or display is None:
+ raise ImportError("IPython not installed")
+ img_bytes = fig.to_image(format="png", scale=2)
+ display(Image(img_bytes))
+ except Exception as e:
+ logger.warning(f"Failed to display image: {e}")
+
+
+def maybe_downsample_volume(grid, values, shape, max_points=250_000):
+ """
+ Downsample a regular 3D grid for visualization to keep Plotly volume traces responsive.
+ grid: numpy array of shape (n_points, 3)
+ values: list of numpy arrays aligned with grid, each of shape (n_points,)
+ shape: original lattice shape [nx, ny, nz]
+ """
+ if shape is None or len(shape) != 3:
+ return grid, values, False, 1
+
+ try:
+ shape = [int(s) for s in shape]
+ total = shape[0] * shape[1] * shape[2]
+ except Exception:
+ return grid, values, False, 1
+
+ if total != grid.shape[0] or any(val.shape[0] != grid.shape[0] for val in values):
+ return grid, values, False, 1
+ if total <= max_points:
+ return grid, values, False, 1
+
+ stride = max(1, math.ceil((total / max_points) ** (1 / 3)))
+ try:
+ grid_view = grid.reshape(shape[0], shape[1], shape[2], 3)
+ grid_ds = grid_view[::stride, ::stride, ::stride, :].reshape(-1, 3)
+ values_ds = [
+ val.reshape(shape[0], shape[1], shape[2])[::stride, ::stride, ::stride].reshape(-1)
+ for val in values
+ ]
+ except Exception as e:
+ logger.warning(f"Failed to downsample grid for visualization: {e}")
+ return grid, values, False, 1
+
+ return grid_ds, values_ds, True, stride
+
+
+def write_cube_generic(fileobj, atom_type, atom_coord, density, info, idx2atom_num=None):
+ """
+ Minimal cube writer for datasets without a built-in write_cube method.
+ idx2atom_num maps dataset atom indices to atomic numbers (e.g., [6,1,8] for C/H/O).
+ """
+ fileobj.write("Cube file written on " + time.strftime("%c"))
+ fileobj.write("\nOUTER LOOP: X, MIDDLE LOOP: Y, INNER LOOP: Z\n")
+ cell = info["cell"]
+ shape = info["shape"]
+ origin = info.get("origin", np.zeros(3, dtype=np.float32))
+ fileobj.write("{0:5}{1:12.6f}{2:12.6f}{3:12.6f}\n".format(len(atom_type), *origin))
+ for s, c in zip(shape, cell):
+ d = c / s
+ fileobj.write("{0:5}{1:12.6f}{2:12.6f}{3:12.6f}\n".format(s, *d))
+ for Z, (x, y, z) in zip(atom_type, atom_coord):
+ atomic_num = int(idx2atom_num[int(Z)]) if idx2atom_num is not None else int(Z)
+ fileobj.write(
+ "{0:5}{1:12.6f}{2:12.6f}{3:12.6f}{4:12.6f}\n".format(
+ atomic_num, float(atomic_num), x, y, z
+ )
+ )
+ density.tofile(fileobj, sep="\n", format="%e")
+
+
+def parse_grid_shape(shape_str):
+ parts = [p.strip() for p in str(shape_str).split(",") if p.strip()]
+ if len(parts) == 1:
+ n = int(parts[0])
+ if n <= 1:
+ raise ValueError(f"Invalid mol_grid_shape {shape_str}, each dimension must be > 1")
+ return [n, n, n]
+ if len(parts) == 3:
+ shape = [int(p) for p in parts]
+ if any(s <= 1 for s in shape):
+ raise ValueError(f"Invalid mol_grid_shape {shape_str}, each dimension must be > 1")
+ return shape
+ raise ValueError(f"Invalid mol_grid_shape {shape_str}, expected 'N' or 'Nx,Ny,Nz'")
+
+
+def normalize_element_symbol(symbol):
+ sym = str(symbol).strip()
+ if len(sym) == 0:
+ return sym
+ if len(sym) == 1:
+ return sym.upper()
+ return sym[0].upper() + sym[1:].lower()
+
+
+def load_atom_mapping(atom_file):
+ with Path(atom_file).open() as f:
+ atom_info = json.load(f)
+
+ atom_name2idx = {}
+ idx2atom_num = {}
+ for idx, item in enumerate(atom_info):
+ sym = normalize_element_symbol(item["name"])
+ atom_name2idx[sym] = idx
+ idx2atom_num[idx] = int(item["atom_num"])
+ return atom_name2idx, idx2atom_num
+
+
+def resolve_atom_file_for_mol(args_atom_file, dataset_atom_file):
+ candidates = []
+ if args_atom_file is not None:
+ candidates.append(Path(args_atom_file).expanduser())
+ if dataset_atom_file is not None:
+ candidates.append(Path(dataset_atom_file).expanduser())
+
+ for cand in candidates:
+ if cand.exists():
+ return cand
+
+ fallback = Path("/home/liuxuwei01/processed_output/omol25.json")
+ if fallback.exists():
+ logger.warning(
+ f"Configured atom_file not found ({candidates}); falling back to {fallback}"
+ )
+ return fallback
+
+ raise FileNotFoundError(
+ "Could not resolve atom_file for MOL inference. "
+ f"Checked: {[str(c) for c in candidates]} and fallback {fallback}"
+ )
+
+
+def collect_mol_files(mol_input, mol_pattern):
+ mol_path = Path(mol_input).expanduser()
+ if mol_path.is_file():
+ return [mol_path]
+ if not mol_path.is_dir():
+ raise FileNotFoundError(f"mol_input path not found: {mol_path}")
+
+ files = sorted([p for p in mol_path.glob(mol_pattern) if p.is_file()])
+ if not files:
+ files = sorted([p for p in mol_path.iterdir() if p.is_file() and p.suffix.lower() == ".mol"])
+ if not files:
+ raise FileNotFoundError(f"No .mol files found in directory: {mol_path}")
+ return files
+
+
+def open_text_maybe_compressed(path):
+ suffixes = "".join(path.suffixes).lower()
+ if suffixes.endswith(".lz4"):
+ import lz4.frame
+
+ return lz4.frame.open(path, mode="rt")
+ if suffixes.endswith(".xz"):
+ return lzma.open(path, mode="rt")
+ if suffixes.endswith(".gz"):
+ return gzip.open(path, mode="rt")
+ return path.open(mode="rt")
+
+
+def read_cube_density(path):
+ with open_text_maybe_compressed(path) as f:
+ f.readline()
+ f.readline()
+ line = f.readline().split()
+ if len(line) < 4:
+ raise ValueError(f"Invalid CUBE header (line 3) in {path}")
+ n_atom = int(line[0])
+ origin = np.array([float(x) for x in line[1:4]], dtype=np.float32)
+
+ shape = []
+ cell = np.zeros((3, 3), dtype=np.float32)
+ for i in range(3):
+ row = f.readline().split()
+ if len(row) < 4:
+ raise ValueError(f"Invalid CUBE axis line in {path}")
+ n, x, y, z = [float(s) for s in row[:4]]
+ shape.append(int(n))
+ cell[i] = np.array([x, y, z], dtype=np.float32)
+
+ x_coord = np.arange(shape[0], dtype=np.float32)[:, None] * cell[0][None, :]
+ y_coord = np.arange(shape[1], dtype=np.float32)[:, None] * cell[1][None, :]
+ z_coord = np.arange(shape[2], dtype=np.float32)[:, None] * cell[2][None, :]
+ grid_coord = (
+ x_coord.reshape(-1, 1, 1, 3)
+ + y_coord.reshape(1, -1, 1, 3)
+ + z_coord.reshape(1, 1, -1, 3)
+ ).reshape(-1, 3)
+ grid_coord = grid_coord + origin
+
+ atom_coord_ref = []
+ for _ in range(n_atom):
+ row = f.readline().split()
+ if len(row) < 5:
+ raise ValueError(f"Invalid CUBE atom line in {path}")
+ atom_coord_ref.append([float(row[2]), float(row[3]), float(row[4])])
+
+ n_grid = shape[0] * shape[1] * shape[2]
+ vals = []
+ for line in f:
+ parts = line.split()
+ if parts:
+ vals.extend(parts)
+ if len(vals) < n_grid:
+ raise ValueError(f"CUBE data too short in {path}: expect {n_grid}, got {len(vals)}")
+ density = np.array(vals[:n_grid], dtype=np.float32)
+
+ return (
+ paddle.to_tensor(density, dtype="float32"),
+ paddle.to_tensor(grid_coord, dtype="float32"),
+ {
+ "shape": shape,
+ "cell": paddle.to_tensor(cell, dtype="float32"),
+ "origin": paddle.to_tensor(origin, dtype="float32"),
+ "atom_coord_ref": np.asarray(atom_coord_ref, dtype=np.float32),
+ },
+ )
+
+
+def align_mol_atoms_to_cube(g, atom_coord_ref, sample_name, tol=0.05):
+ if atom_coord_ref is None:
+ return g
+ ref = np.asarray(atom_coord_ref, dtype=np.float32)
+ mol = g.pos.numpy().astype(np.float32)
+ if ref.ndim != 2 or ref.shape[1] != 3:
+ logger.warning(f"Invalid reference atom coordinates for {sample_name}, skip alignment")
+ return g
+ if mol.shape != ref.shape:
+ logger.warning(
+ f"Atom count mismatch for {sample_name} (mol={mol.shape[0]}, cube={ref.shape[0]}), "
+ "skip alignment"
+ )
+ return g
+
+ mol_center = mol.mean(axis=0)
+ ref_center = ref.mean(axis=0)
+ mol_c = mol - mol_center
+ ref_c = ref - ref_center
+ denom = float(np.sqrt((mol_c * mol_c).sum()))
+ numer = float(np.sqrt((ref_c * ref_c).sum()))
+ if denom < 1e-12 or numer < 1e-12:
+ return g
+
+ scale = numer / denom
+ aligned = mol_c * scale + ref_center
+ rms = float(np.sqrt(np.mean((aligned - ref) ** 2)))
+
+ # Typical unit mismatch is Angstrom->Bohr (about 1.8897).
+ # Apply alignment when scale obviously differs from 1.0 or residual is tiny after scaling.
+ if abs(scale - 1.0) > tol or rms < 1e-3:
+ g.pos = paddle.to_tensor(aligned, dtype="float32")
+ logger.info(
+ f"Aligned MOL coordinates to CUBE frame for {sample_name}: "
+ f"scale={scale:.6f} (A->Bohr~{ANG2BOHR:.6f}), rms={rms:.6e}"
+ )
+ else:
+ logger.info(
+ f"No coordinate rescale needed for {sample_name}: scale={scale:.6f}, rms={rms:.6e}"
+ )
+ return g
+
+
+def resolve_true_cube_for_mol(mol_path, true_cube_dir=None):
+ base = sanitize_base_name(mol_path.name)
+ base_density = f"{base[:-3]}Density" if base.endswith("Opt") else f"{base}Density"
+ roots = []
+ if true_cube_dir is not None:
+ roots.append(Path(true_cube_dir).expanduser())
+ roots.append(mol_path.parent)
+
+ stems = [base, f"{base}_true", base_density]
+ exts = [".cube", ".cub", ".cube.lz4", ".cube.gz", ".cube.xz", ".cub.lz4", ".cub.gz", ".cub.xz"]
+ name_candidates = []
+ for s in stems:
+ for ext in exts:
+ name_candidates.append(f"{s}{ext}")
+
+ seen = set()
+ uniq_candidates = []
+ for name in name_candidates:
+ if name not in seen:
+ uniq_candidates.append(name)
+ seen.add(name)
+
+ for root in roots:
+ if not root.exists():
+ continue
+ for name in uniq_candidates:
+ p = root / name
+ if p.is_file():
+ return p
+ return None
+
+
+def parse_mol_v2000(mol_path):
+ lines = mol_path.read_text(errors="replace").splitlines()
+ if len(lines) < 4:
+ raise ValueError(f"MOL file too short: {mol_path}")
+
+ counts = lines[3]
+ if "V3000" in counts.upper():
+ raise NotImplementedError(f"V3000 MOL is not supported yet: {mol_path}")
+
+ try:
+ n_atom = int(counts[:3])
+ except Exception:
+ parts = counts.split()
+ if len(parts) < 2:
+ raise ValueError(f"Failed to parse counts line in MOL file: {mol_path}")
+ n_atom = int(parts[0])
+
+ atom_start = 4
+ atom_end = atom_start + n_atom
+ if len(lines) < atom_end:
+ raise ValueError(f"Atom block incomplete in MOL file: {mol_path}")
+
+ coords = []
+ symbols = []
+ for line in lines[atom_start:atom_end]:
+ parts = line.split()
+ x = y = z = None
+ sym = None
+ if len(parts) >= 4:
+ try:
+ x, y, z = float(parts[0]), float(parts[1]), float(parts[2])
+ sym = parts[3]
+ except Exception:
+ x = y = z = None
+ sym = None
+ if x is None:
+ try:
+ x = float(line[0:10])
+ y = float(line[10:20])
+ z = float(line[20:30])
+ sym = line[31:34].strip()
+ except Exception as e:
+ raise ValueError(f"Failed to parse atom line in {mol_path}: {line}") from e
+
+ coords.append([x, y, z])
+ symbols.append(normalize_element_symbol(sym))
+
+ return np.asarray(coords, dtype=np.float32), symbols
+
+
+def build_mol_sample(mol_path, atom_name2idx, mol_grid_shape, mol_grid_padding):
+ atom_coord_np, atom_symbols = parse_mol_v2000(mol_path)
+
+ atom_type_idx = []
+ missing = set()
+ for sym in atom_symbols:
+ idx = atom_name2idx.get(sym)
+ if idx is None:
+ missing.add(sym)
+ else:
+ atom_type_idx.append(idx)
+ if missing:
+ raise ValueError(
+ f"Found atoms not covered by atom_file mapping in {mol_path}: {sorted(missing)}"
+ )
+
+ atom_type = paddle.to_tensor(atom_type_idx, dtype="int64")
+ atom_coord = paddle.to_tensor(atom_coord_np, dtype="float32")
+ g = Data(x=atom_type, pos=atom_coord)
+
+ shape = [int(s) for s in mol_grid_shape]
+ min_coord = atom_coord_np.min(axis=0)
+ max_coord = atom_coord_np.max(axis=0)
+ span = np.maximum(max_coord - min_coord, np.array([1e-3, 1e-3, 1e-3], dtype=np.float32))
+ axis_len = span + 2.0 * float(mol_grid_padding)
+ center = 0.5 * (min_coord + max_coord)
+ origin = center - 0.5 * axis_len
+
+ x = np.linspace(origin[0], origin[0] + axis_len[0], num=shape[0], endpoint=False, dtype=np.float32)
+ y = np.linspace(origin[1], origin[1] + axis_len[1], num=shape[1], endpoint=False, dtype=np.float32)
+ z = np.linspace(origin[2], origin[2] + axis_len[2], num=shape[2], endpoint=False, dtype=np.float32)
+ grid = np.stack(np.meshgrid(x, y, z, indexing="ij"), axis=-1).reshape(-1, 3).astype(np.float32)
+ grid_coord = paddle.to_tensor(grid, dtype="float32")
+
+ cell = np.diag(axis_len.astype(np.float32))
+ info = {
+ "shape": shape,
+ "cell": paddle.to_tensor(cell, dtype="float32"),
+ "origin": paddle.to_tensor(origin.astype(np.float32), dtype="float32"),
+ "file_name": mol_path.name,
+ }
+
+ return g, None, grid_coord, info
+
+
+def sanitize_base_name(sample_name):
+ base_name = Path(sample_name).name
+ for suf in [".lz4", ".zst", ".gz"]:
+ if base_name.endswith(suf):
+ base_name = base_name[: -len(suf)]
+ for suf in [".cube", ".CHGCAR", ".json", ".mol"]:
+ if base_name.endswith(suf):
+ base_name = base_name[: -len(suf)]
+ return base_name
+
+
+def prepare_info_cube(info, grid_coord):
+ info_cube = {}
+ shape = info.get("shape")
+ cell = info.get("cell")
+ origin = info.get("origin", None)
+ grid_np_full = grid_coord.detach().cpu().numpy()
+
+ if shape is not None and len(shape) == 3:
+ try:
+ shape_i = [int(s) for s in shape]
+ grid_view = grid_np_full.reshape(shape_i[0], shape_i[1], shape_i[2], 3)
+ origin_np = grid_view[0, 0, 0]
+ step_x = (
+ grid_view[1, 0, 0] - grid_view[0, 0, 0]
+ if shape_i[0] > 1
+ else np.zeros(3, dtype=np.float32)
+ )
+ step_y = (
+ grid_view[0, 1, 0] - grid_view[0, 0, 0]
+ if shape_i[1] > 1
+ else np.zeros(3, dtype=np.float32)
+ )
+ step_z = (
+ grid_view[0, 0, 1] - grid_view[0, 0, 0]
+ if shape_i[2] > 1
+ else np.zeros(3, dtype=np.float32)
+ )
+ cell_from_grid = np.stack(
+ [step_x * shape_i[0], step_y * shape_i[1], step_z * shape_i[2]], axis=0
+ )
+ except Exception:
+ origin_np = None
+ cell_from_grid = None
+ else:
+ origin_np = None
+ cell_from_grid = None
+
+ if shape is not None:
+ info_cube["shape"] = [int(s) for s in shape]
+ if cell is not None:
+ if hasattr(cell, "numpy"):
+ info_cube["cell"] = cell.numpy()
+ else:
+ info_cube["cell"] = np.array(cell, dtype=np.float32)
+ if cell_from_grid is not None:
+ info_cube["cell"] = cell_from_grid
+ if origin is not None:
+ if hasattr(origin, "numpy"):
+ info_cube["origin"] = origin.numpy()
+ else:
+ info_cube["origin"] = np.array(origin, dtype=np.float32)
+ if origin_np is not None:
+ info_cube["origin"] = origin_np
+ return info_cube
+
+
+def main():
+ parser = argparse.ArgumentParser(description="InfGCN electron density inference")
+ parser.add_argument(
+ "--config",
+ default="electronic_structure/configs/infgcn/infgcn_qm9.yaml",
+ help="Path to config yaml",
+ )
+ parser.add_argument(
+ "--checkpoint",
+ default="output/infgcn_qm9_best/infgcn_qm9.pdparams",
+ help="Checkpoint (.pdparams) to load",
+ )
+ parser.add_argument(
+ "--split",
+ default="test",
+ choices=["train", "validation", "test"],
+ help="Dataset split to sample from",
+ )
+ parser.add_argument(
+ "--index",
+ default=0,
+ type=int,
+ help="Index within the chosen split",
+ )
+ parser.add_argument(
+ "--data_root",
+ default=None,
+ help="Override dataset root; defaults to value in config",
+ )
+ parser.add_argument(
+ "--split_file",
+ default=None,
+ help="Override split file path; defaults to value in config",
+ )
+ parser.add_argument(
+ "--atom_file",
+ default=None,
+ help="Override atom info file; defaults to value in config",
+ )
+ parser.add_argument(
+ "--output_dir",
+ default="./results",
+ help="Directory to store predictions/visualizations",
+ )
+ parser.add_argument(
+ "--grid_batch_size",
+ default=4096,
+ type=int,
+ help="Number of grid points per forward pass",
+ )
+ parser.add_argument(
+ "--skip_vis",
+ action="store_true",
+ help="Skip writing/visualizing density plots",
+ )
+ parser.add_argument(
+ "--save_true_cube",
+ action="store_true",
+ help="Save reference (DFT) electron density as a cube file",
+ )
+ parser.add_argument(
+ "--save_pred_cube",
+ action="store_true",
+ help="Save predicted electron density as a cube file",
+ )
+ parser.add_argument(
+ "--save_html",
+ action="store_true",
+ help="Save Plotly figures as interactive HTML (in addition to PNG)",
+ )
+ parser.add_argument(
+ "--cube_dir",
+ default=None,
+ help="Directory to store cube files (defaults to output_dir)",
+ )
+ parser.add_argument(
+ "--show_plot",
+ action="store_true",
+ help="Display plotly figures inline (requires kaleido)",
+ )
+ parser.add_argument(
+ "--mol_input",
+ default=None,
+ help="Path to a .mol file or a directory of .mol files for direct structure inference",
+ )
+ parser.add_argument(
+ "--mol_pattern",
+ default="*.mol",
+ help="Glob pattern when --mol_input is a directory",
+ )
+ parser.add_argument(
+ "--mol_grid_shape",
+ default="80,80,80",
+ help="Grid shape for MOL inference, e.g. '80' or '80,80,80'",
+ )
+ parser.add_argument(
+ "--mol_grid_padding",
+ default=6.0,
+ type=float,
+ help="Padding (Angstrom) around molecular coordinates for MOL grid generation",
+ )
+ parser.add_argument(
+ "--mol_true_cube_dir",
+ default=None,
+ help=(
+ "Optional directory containing reference/true CUBE files for MOL inputs. "
+ "Expected names: .cube or _true.cube"
+ ),
+ )
+ args = parser.parse_args()
+
+ set_random_seed(42)
+
+ cfg = OmegaConf.load(args.config)
+ cfg = OmegaConf.to_container(cfg, resolve=True)
+
+ split_key = "val" if args.split == "validation" else args.split
+ ds_cfg_full = cfg["Dataset"][split_key]["dataset"]
+ dataset_cfg = ds_cfg_full.get("__init_params__", {})
+ dataset_params = copy.deepcopy(dataset_cfg)
+ dataset_params["split"] = args.split
+ if args.data_root is not None:
+ dataset_params["root"] = args.data_root
+ if args.split_file is not None:
+ dataset_params["split_file"] = args.split_file
+ if args.atom_file is not None:
+ dataset_params["atom_file"] = args.atom_file
+
+ use_mol_mode = args.mol_input is not None
+
+ dataset = None
+ cube_writer = None
+ idx2atom_num = None
+ atom_name2idx = None
+ mol_files = []
+ mol_grid_shape = None
+
+ if use_mol_mode:
+ atom_file_path = resolve_atom_file_for_mol(
+ args.atom_file,
+ dataset_params.get("atom_file"),
+ )
+ atom_name2idx, idx2atom_num = load_atom_mapping(atom_file_path)
+ mol_files = collect_mol_files(args.mol_input, args.mol_pattern)
+ mol_grid_shape = parse_grid_shape(args.mol_grid_shape)
+ cube_writer = lambda f, a, c, d, i: write_cube_generic(
+ f, a, c, d, i, idx2atom_num
+ )
+ logger.info(
+ f"MOL mode enabled: {len(mol_files)} file(s), atom_file={atom_file_path}, "
+ f"grid_shape={mol_grid_shape}, padding={args.mol_grid_padding}, "
+ f"true_cube_dir={args.mol_true_cube_dir}"
+ )
+ else:
+ dataset_cls_name = ds_cfg_full.get("__class_name__", "DensityDataset")
+ dataset_cls_map = {
+ "DensityDataset": DensityDataset,
+ "SmallDensityDataset": SmallDensityDataset,
+ }
+ if dataset_cls_name not in dataset_cls_map:
+ raise ValueError(f"Unsupported dataset class {dataset_cls_name}")
+ dataset = dataset_cls_map[dataset_cls_name](**dataset_params)
+ cube_writer = getattr(dataset, "write_cube", None)
+ idx2atom_num = getattr(dataset, "idx2atom_num", None)
+ if cube_writer is None:
+ if isinstance(dataset, SmallDensityDataset):
+ # Atom order in SmallDensityDataset: C=0, H=1, O=2
+ idx2atom_num = np.array([6, 1, 8], dtype=np.int64)
+ cube_writer = lambda f, a, c, d, i: write_cube_generic(
+ f, a, c, d, i, idx2atom_num
+ )
+ else:
+ cube_writer = lambda *args, **kwargs: (_ for _ in ()).throw(
+ AttributeError("Cube writer not available for this dataset")
+ )
+ if args.index >= len(dataset):
+ raise IndexError(
+ f"Index {args.index} exceeds dataset size {len(dataset)} for split {args.split}"
+ )
+
+ device = "gpu" if paddle.is_compiled_with_cuda() else "cpu"
+ paddle.set_device(device)
+ logger.info(f"Running inference on device: {device}")
+
+ output_dir = Path(args.output_dir)
+ output_dir.mkdir(parents=True, exist_ok=True)
+ cube_dir = Path(args.cube_dir) if args.cube_dir is not None else output_dir
+ cube_dir.mkdir(parents=True, exist_ok=True)
+
+ logger.info(f"Loading the pretrained model from {args.checkpoint}")
+ model = get_pretrained_model(args.config, args.checkpoint)
+ logger.info("Model loaded successfully.")
+
+ if use_mol_mode:
+ sample_iter = tqdm(mol_files, desc="MOL inference")
+ else:
+ sample_iter = [args.index]
+
+ for sample_item in sample_iter:
+ if use_mol_mode:
+ mol_path = sample_item
+ g, density, grid_coord, info = build_mol_sample(
+ mol_path,
+ atom_name2idx,
+ mol_grid_shape,
+ args.mol_grid_padding,
+ )
+ true_cube_path = resolve_true_cube_for_mol(mol_path, args.mol_true_cube_dir)
+ if true_cube_path is not None:
+ try:
+ density, grid_coord, info_ref = read_cube_density(true_cube_path)
+ g = align_mol_atoms_to_cube(g, info_ref.get("atom_coord_ref"), mol_path.name)
+ info = dict(info_ref)
+ info["file_name"] = mol_path.name
+ info["true_cube_file"] = str(true_cube_path)
+ logger.info(f"Using reference cube for {mol_path.name}: {true_cube_path}")
+ except Exception as e:
+ logger.warning(
+ f"Failed to read reference cube for {mol_path.name} at {true_cube_path}: {e}"
+ )
+ sample_name = info.get("file_name", mol_path.name)
+ else:
+ sample_name = f"{args.split}_{args.index}"
+ g, density, grid_coord, info = dataset[args.index]
+ sample_name = info.get("file_name", sample_name)
+
+ g.batch = paddle.zeros_like(g.x)
+ g = g.to(device)
+ if density is not None:
+ density = density.to(device)
+ grid_coord = grid_coord.to(device)
+
+ logger.info(f"Starting prediction for sample: {sample_name}")
+ preds, loss, mae = inference_model(
+ model,
+ g,
+ density,
+ grid_coord[None],
+ [info],
+ grid_batch_size=args.grid_batch_size,
+ )
+ if loss is not None and mae is not None:
+ logger.info(
+ f"Prediction completed for {sample_name}, "
+ f"Loss: {float(loss):.6f}, MAE: {float(mae):.6f}"
+ )
+ else:
+ logger.info(f"Prediction completed for {sample_name} (no reference density)")
+
+ sample_tag = sanitize_base_name(sample_name)
+
+ if args.save_true_cube or args.save_pred_cube:
+ atom_type_np = g.x.detach().cpu().numpy()
+ atom_coord_np = g.pos.detach().cpu().numpy()
+ info_cube = prepare_info_cube(info, grid_coord)
+
+ if args.save_true_cube:
+ if density is None:
+ logger.warning(
+ f"Skipping true cube for {sample_name}: no reference density available"
+ )
+ else:
+ true_cube_path = cube_dir / f"{sample_tag}_true.cube"
+ with true_cube_path.open("w") as f:
+ cube_writer(
+ f,
+ atom_type_np,
+ atom_coord_np,
+ density.detach().cpu().numpy(),
+ info_cube,
+ )
+ logger.info(f"Saved reference density cube to: {true_cube_path}")
+
+ if args.save_pred_cube:
+ pred_cube_path = cube_dir / f"{sample_tag}_pred.cube"
+ with pred_cube_path.open("w") as f:
+ cube_writer(
+ f,
+ atom_type_np,
+ atom_coord_np,
+ preds.detach().cpu().numpy(),
+ info_cube,
+ )
+ logger.info(f"Saved predicted density cube to: {pred_cube_path}")
+
+ if not args.skip_vis:
+ grid_np = grid_coord.detach().cpu().numpy()
+ preds_np = preds.detach().cpu().numpy()
+ shape = info.get("shape")
+ atom_type = g.x.detach().cpu().numpy()
+ atom_coord = g.pos.detach().cpu().numpy()
+
+ if density is not None:
+ density_np = density.detach().cpu().numpy()
+ diff_np = density_np - preds_np
+ grid_vis, (density_vis, diff_vis, preds_vis), did_downsample, stride = (
+ maybe_downsample_volume(
+ grid_np,
+ [density_np, diff_np, preds_np],
+ shape if shape is None else [int(s) for s in shape],
+ )
+ )
+ if did_downsample:
+ logger.warning(
+ f"Downsampled volume grid from {grid_np.shape[0]} to {grid_vis.shape[0]} "
+ f"points for visualization (stride={stride}) to keep HTML output responsive."
+ )
+
+ logger.info("Visualizing the DFT electron density")
+ fig = draw_volume(
+ grid_vis,
+ density_vis,
+ atom_type,
+ atom_coord,
+ isomin=0.05,
+ isomax=3.5,
+ surface_count=5,
+ title="DFT electron density",
+ )
+ true_density_path = output_dir / f"{sample_tag}_true_density.png"
+ safe_write_image(fig, true_density_path, show_plot=args.show_plot)
+ if args.save_html:
+ fig.write_html(output_dir / f"{sample_tag}_true_density.html")
+
+ logger.info("Visualizing electron density difference")
+ fig = draw_volume(
+ grid_vis,
+ diff_vis,
+ atom_type,
+ atom_coord,
+ isomin=-0.06,
+ isomax=0.06,
+ surface_count=4,
+ title="Electron Density Difference",
+ )
+ diff_density_path = output_dir / f"{sample_tag}_diff_density.png"
+ safe_write_image(fig, diff_density_path, show_plot=args.show_plot)
+ if args.save_html:
+ fig.write_html(output_dir / f"{sample_tag}_diff_density.html")
+
+ logger.info("Visualizing predicted electron density")
+ fig = draw_volume(
+ grid_vis,
+ preds_vis,
+ atom_type,
+ atom_coord,
+ isomin=0.05,
+ isomax=3.5,
+ surface_count=5,
+ title="Predicted Electron Density",
+ )
+ pred_density_path = output_dir / f"{sample_tag}_pred_density.png"
+ safe_write_image(fig, pred_density_path, show_plot=args.show_plot)
+ if args.save_html:
+ fig.write_html(output_dir / f"{sample_tag}_pred_density.html")
+ else:
+ grid_vis, (preds_vis,), did_downsample, stride = maybe_downsample_volume(
+ grid_np,
+ [preds_np],
+ shape if shape is None else [int(s) for s in shape],
+ )
+ if did_downsample:
+ logger.warning(
+ f"Downsampled volume grid from {grid_np.shape[0]} to {grid_vis.shape[0]} "
+ f"points for visualization (stride={stride}) to keep HTML output responsive."
+ )
+
+ logger.info("Visualizing predicted electron density")
+ fig = draw_volume(
+ grid_vis,
+ preds_vis,
+ atom_type,
+ atom_coord,
+ isomin=0.05,
+ isomax=3.5,
+ surface_count=5,
+ title="Predicted Electron Density",
+ )
+ pred_density_path = output_dir / f"{sample_tag}_pred_density.png"
+ safe_write_image(fig, pred_density_path, show_plot=args.show_plot)
+ if args.save_html:
+ fig.write_html(output_dir / f"{sample_tag}_pred_density.html")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/electronic_structure/train.py b/electronic_structure/train.py
new file mode 100644
index 00000000..5ba2db62
--- /dev/null
+++ b/electronic_structure/train.py
@@ -0,0 +1,179 @@
+# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import argparse
+import datetime
+import math
+import os
+import os.path as osp
+
+import paddle.distributed as dist
+import paddle.distributed.fleet as fleet
+from omegaconf import OmegaConf
+
+from ppmat.datasets import build_dataloader
+from ppmat.datasets import set_signal_handlers
+from ppmat.metrics import build_metric
+from ppmat.models import build_model
+from ppmat.optimizer import build_optimizer
+from ppmat.trainer.base_trainer import BaseTrainer
+from ppmat.utils import logger
+from ppmat.utils import misc
+from ppmat.utils.eager_comp_setting import setting_eager_mode
+
+
+def read_independent_dataloader_config(config):
+ """
+ Args:
+ config (dict): config dict
+ """
+ if config["Global"].get("do_train", True):
+ train_data_cfg = config["Dataset"].get("train")
+ assert (
+ train_data_cfg is not None
+ ), "train_data_cfg must be defined, when do_train is true"
+ train_loader = build_dataloader(train_data_cfg)
+ else:
+ train_loader = None
+
+ if config["Global"].get("do_eval", False) or config["Global"].get("do_train", True):
+ val_data_cfg = config["Dataset"].get("val")
+ if val_data_cfg is not None:
+ val_loader = build_dataloader(val_data_cfg)
+ else:
+ logger.info("No validation dataset defined.")
+ val_loader = None
+ else:
+ val_loader = None
+
+ if config["Global"].get("do_test", False):
+ test_data_cfg = config["Dataset"].get("test")
+ assert (
+ test_data_cfg is not None
+ ), "test_data_cfg must be defined, when do_test is true"
+ test_loader = build_dataloader(test_data_cfg)
+ else:
+ test_loader = None
+ return train_loader, val_loader, test_loader
+
+
+if __name__ == "__main__":
+ if dist.get_world_size() > 1:
+ fleet.init(is_collective=True)
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "-c",
+ "--config",
+ type=str,
+ default="./electronic_structure/configs/infgcn_md17_benzene.yaml",
+ help="Path to config file",
+ )
+
+ args, dynamic_args = parser.parse_known_args()
+
+ # load config and merge with cli args
+ config = OmegaConf.load(args.config)
+ cli_config = OmegaConf.from_dotlist(dynamic_args)
+ config = OmegaConf.merge(config, cli_config)
+
+ # set random seed
+ seed = config["Trainer"].get("seed", 42)
+ misc.set_random_seed(seed)
+ logger.info(f"Set random seed to {seed}")
+
+ # add timestamp to output_dir
+ timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
+ base_output_dir = config["Trainer"]["output_dir"]
+ config["Trainer"]["output_dir"] = f"{base_output_dir}_t_{timestamp}_s_{seed}"
+
+ # save config to output_dir, only rank 0 process will do this
+ if dist.get_rank() == 0:
+ os.makedirs(config["Trainer"]["output_dir"], exist_ok=True)
+ config_name = os.path.basename(args.config)
+ OmegaConf.save(config, osp.join(config["Trainer"]["output_dir"], config_name))
+ # convert to dict
+ config = OmegaConf.to_container(config, resolve=True)
+
+ # init logger
+ logger_path = osp.join(config["Trainer"]["output_dir"], "run.log")
+ logger.init_logger(log_file=logger_path)
+ logger.info(f"Logger saved to {logger_path}")
+
+ # enable primitive eager mode when requested
+ enabled = config["Global"].get("prim_eager_enabled", False)
+ white_list = config["Global"].get("prim_backward_white_list", None)
+ setting_eager_mode(enabled, white_list)
+
+ # build model from config
+ model_cfg = config["Model"]
+ model = build_model(model_cfg)
+
+ # build dataloader from config
+ set_signal_handlers()
+ if config["Dataset"].get("split_dataset_ratio") is not None:
+ # Split the dataset into train/val/test and build corresponding dataloaders
+ loader = build_dataloader(config["Dataset"])
+ train_loader = loader.get("train", None)
+ val_loader = loader.get("val", None)
+ test_loader = loader.get("test", None)
+ else:
+ # Use pre-split (independent) train/val/test datasets and build dataloaders
+ train_loader, val_loader, test_loader = read_independent_dataloader_config(
+ config
+ )
+
+ # build optimizer and learning rate scheduler from config
+ if config.get("Optimizer") is not None and config["Global"].get("do_train", True):
+ assert (
+ train_loader is not None
+ ), "train_loader must be defined when optimizer is defined."
+ assert (
+ config["Trainer"].get("max_epochs") is not None
+ ), "max_epochs must be defined when optimizer is defined."
+ optimizer, lr_scheduler = build_optimizer(
+ config["Optimizer"],
+ model,
+ config["Trainer"]["max_epochs"],
+ len(train_loader),
+ )
+ else:
+ optimizer, lr_scheduler = None, None
+
+ # build metric from config
+ metric_cfg = config.get("Metric")
+ if metric_cfg is not None:
+ metric_func = build_metric(metric_cfg)
+ else:
+ metric_func = None
+
+ # initialize trainer
+ trainer = BaseTrainer(
+ config["Trainer"],
+ model,
+ train_dataloader=train_loader,
+ val_dataloader=val_loader,
+ optimizer=optimizer,
+ lr_scheduler=lr_scheduler,
+ compute_metric_func_dict=metric_func,
+ )
+
+ if config["Global"].get("do_train", True):
+ trainer.train()
+ if config["Global"].get("do_eval", False):
+ logger.info("Evaluating on validation set")
+ time_info, loss_info, metric_info = trainer.eval(val_loader)
+ if config["Global"].get("do_test", False):
+ logger.info("Evaluating on test set")
+ time_info, loss_info, metric_info = trainer.eval(test_loader)
diff --git a/electronic_structure/visualize.py b/electronic_structure/visualize.py
new file mode 100644
index 00000000..ed8f3970
--- /dev/null
+++ b/electronic_structure/visualize.py
@@ -0,0 +1,52 @@
+# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import io
+
+import paddle
+import PIL
+from matplotlib import pyplot as plt
+from matplotlib.colors import ListedColormap
+
+plt.switch_backend("agg")
+cmap = ListedColormap(["grey", "white", "red", "blue", "green", "white"])
+
+
+def draw_stack(density, atom_type=None, atom_coord=None, dim=-1):
+ """
+ Draw a 2D density map along specific axis.
+ :param density: density data, tensor of shape (batch_size, nx, ny, nz)
+ :param atom_type: atom types, tensor of shape (batch_size, n_atom)
+ :param atom_coord: atom coordinates, tensor of shape (batch_size, n_atom, 3)
+ :param dim: axis along which to sum
+ :return: an image tensor
+ """
+ plt.figure(figsize=(3, 3))
+ plt.imshow(density.sum(axis=dim).detach().cpu().numpy(), cmap="viridis")
+ plt.colorbar()
+ if atom_type is not None:
+ idx = [i for i in range(3) if i != dim % 3]
+ coord = atom_coord.detach().cpu().numpy()
+ color = cmap(atom_type.detach().cpu().numpy())
+ plt.scatter(coord[:, idx[1]], coord[:, idx[0]], c=color, alpha=0.8)
+ buf = io.BytesIO()
+ plt.savefig(buf, format="jpg")
+ buf.seek(0)
+ image = PIL.Image.open(buf)
+ image = paddle.vision.transforms.ToTensor()(
+ image
+ ) # 这个是paconvert自动改的,应该是准确的把,之前是torchvision.transforms.ToTensor()
+ image = image.transpose([1, 2, 0]) # add in 0319
+ plt.close()
+ return image.numpy() # modified in 0319
diff --git a/get_started.md b/get_started.md
new file mode 100644
index 00000000..f19288ff
--- /dev/null
+++ b/get_started.md
@@ -0,0 +1,204 @@
+# Get Started ⚡
+
+PaddleMaterials provides multiple pre-trained models and standard datasets for material property prediction, material structure generation, and interatomic potentials tasks. This document demonstrates how to perform common tasks using these existing models and standard datasets.
+
+Training workflows are parameterized through structured configuration files, allowing end-to-end model training with simple parameter adjustments. You can refer to the [PaddleMaterials Configuration](./about_configs.md) section for detailed configuration information.
+
+We have provided commands for training, evaluation, testing, and inference in each model's README file. You can also refer directly to these README files to complete corresponding tasks.
+
+## 1. Inference with Existing Model
+
+You can perform inference using either built-in models or local models.
+
+### 1.1 Inference with Built-in Model
+
+PaddleMaterials offers multiple built-in models that can be directly used for inference. Taking the `megnet_mp2018_train_60k_e_form` model as an example (a MEGNet model trained on the MP2018 dataset for material formation energy prediction), use the following command for inference:
+```bash
+python property_prediction/predict.py --model_name='megnet_mp2018_train_60k_e_form' --weights_name='best.pdparams' --cif_file_path='./property_prediction/example_data/cifs/' --save_path='result.csv'
+```
+
+
+
+
+ | Parameter |
+ Description |
+
+
+
+
+ | --model_name |
+ Name of the built-in model |
+
+
+ | --weights_name |
+ Weights file name |
+
+
+ | --cif_file_path |
+ Path to CIF files for prediction |
+
+
+ | --save_path |
+ Path to save prediction results |
+
+
+
+
+### 1.2 Inference with Local Model
+
+In addition to built-in models, you can also use your own locally trained models for inference. Taking the `megnet_mp2018_train_60k_e_form` model as an example (assuming you've trained it locally), use the following command:
+```bash
+python property_prediction/predict.py --config_path='property_prediction/configs/megnet/megnet_mp2018_train_60k_e_form.yaml' --checkpoint_path='you_checkpoint_path.pdparams' --cif_file_path='./property_prediction/example_data/cifs/' --save_path='result.csv'
+```
+
+
+
+
+ | Parameter |
+ Description |
+
+
+
+
+ | --config_path |
+ Configuration file path |
+
+
+ | --checkpoint_path |
+ Model weights file path |
+
+
+ | --cif_file_path |
+ Path to CIF files for prediction |
+
+
+ | --save_path |
+ Path to save prediction results |
+
+
+
+
+## 2. Test Existing Models on Standard Datasets
+
+To test the `megnet_mp2018_train_60k_e_form` model (assuming you've trained it locally) on the MP2018 test set, use:
+```bash
+python property_prediction/train.py -c property_prediction/configs/megnet/megnet_mp2018_train_60k_e_form.yaml Global.do_test=True Global.do_train=False Global.do_eval=False Trainer.pretrained_model_path='your_checkpoint_path(*.pdparams)' Trainer.output_dir='your_output_dir'
+```
+
+
+
+
+ | Parameter |
+ Description |
+
+
+
+
+ | -c |
+ Configuration file path |
+
+
+ | Global.do_train |
+ Set to False for testing |
+
+
+ | Global.do_eval |
+ Whether to evaluate on validation set |
+
+
+ | Global.do_test |
+ Whether to evaluate on test set |
+
+
+ | Trainer.pretrained_model_path |
+ Your model weights path |
+
+
+ | Trainer.output_dir |
+ Output directory for log files |
+
+
+
+
+## 3. Train Predefined Models on Standard Datasets
+
+You can train models using PaddleMaterials's standard datasets and predefined configurations. For the `megnet_mp2018_train_60k_e_form` model:
+```bash
+# Single-GPU training for formation energy per atom
+python property_prediction/train.py -c property_prediction/configs/megnet/megnet_mp2018_train_60k_e_form.yaml
+```
+
+This command uses the `-c` parameter to specify the model configuration file. Training will be performed on the MP2018 training set, with logs saved to `Trainer.output_dir` by default (you can modify this path in the configuration file).
+
+PaddleMaterials also supports multi-GPU training using `paddle.distributed.launch`:
+```bash
+# Multi-GPU training with 4 GPUs
+python -m paddle.distributed.launch --gpus="0,1,2,3" property_prediction/train.py -c property_prediction/configs/megnet/megnet_mp2018_train_60k_e_form.yaml
+```
+
+The `--gpus` parameter specifies the GPU IDs and quantity to use.
+
+## 4. Train with Customized Datasets
+
+PaddleMaterials supports training with custom datasets. If your dataset format matches the standard format, you can directly use the provided configurations by modifying the dataset paths:
+
+```yaml
+...
+Dataset:
+ train:
+ dataset:
+ __class_name__: MP2018Dataset
+ __init_params__:
+ path: "your_train_data.json"
+...
+ val:
+ dataset:
+ __class_name__: MP2018Dataset
+ __init_params__:
+ path: "your_val_data.json"
+...
+ test:
+ dataset:
+ __class_name__: MP2018Dataset
+ __init_params__:
+ path: "your_test_data.json"
+```
+
+For datasets with different formats, you can either:
+1. Create a custom dataset class, import it in `ppmat/datasets/__init__.py`, and modify the configuration
+2. Convert your dataset to PaddleMaterials's supported format (recommended for convenience)
+
+## 5. Train with Customized Models and Standard Datasets
+
+1. Implement your custom model class (inheriting from `nn.Layer`) and import it in `ppmat/models/__init__.py`
+ > Your model must implement `__init__` and `forward` methods. The `forward` method should return a dictionary containing model outputs and losses.
+
+2. Copy the configuration file of the standard dataset you want to use (e.g., `megnet_mp2018_train_60k_e_form.yaml` for MP2018)
+
+3. Modify the `Model` section in the configuration to use your custom model:
+ ```yaml
+ Model:
+ __class_name__: your_model_class_name
+ __init_params__:
+ your_model_parameters
+ ```
+
+4. Adjust other hyperparameters (learning rate, batch size, etc.) as needed
+
+5. Start training with the modified configuration file
+
+## 6. Finetuning Models
+
+PaddleMaterials supports model finetuning. Follow these steps using standard configurations (only need to modify pretrained model path):
+
+1. Prepare your custom dataset (refer to Section 4)
+2. Copy the original model configuration file (e.g., `megnet_mp2018_train_60k_e_form.yaml`)
+3. Modify dataset paths in the copied configuration to point to your custom data
+4. Configure pretrained model parameters:
+ - For local models: Set `Trainer.pretrained_model_path` to your local path
+ - For built-in models:
+ - Set `Trainer.pretrained_model_path` to the built-in model URL
+ - Set `Trainer.pretrained_weight_name` to the weights file name (e.g., `latest.pdparams`)
+5. Adjust training parameters (learning rate, batch size, log directory, etc.)
+6. Execute training with the updated configuration
+ > The message `Finish loading pretrained model from: xxx.pdparams` indicates successful model loading
diff --git a/interatomic_potentials/README.md b/interatomic_potentials/README.md
new file mode 100644
index 00000000..ae0cd3b2
--- /dev/null
+++ b/interatomic_potentials/README.md
@@ -0,0 +1,35 @@
+# MLIP-Machine Learning Interatomic Potential
+
+## 1.Introduction
+
+Machine-learning interatomic potentials (MLIP) bridge the gap between quantum-level accuracy and classical molecular-dynamics speed. Traditional force fields rely on fixed functional forms and hand-tuned parameters, limiting transferability. In contrast, MLIP learn the energy-force landscape directly from high-fidelity density-functional-theory data, capturing many-body and chemical effects without explicit equations. Modern frameworks embed rigorous physical priors—permutation, rotation and translation invariance, smoothness, locality—into expressive models such as equivariant graph neural networks, message-passing networks, Gaussian process regressors and deep neural descriptors. A typical workflow begins by sampling diverse atomic configurations, computing reference energies, forces and stresses, then training the model with loss terms that balance all three quantities. Active-learning loops iteratively enrich the dataset where prediction uncertainty is high, minimizing human intervention. Once trained, an MLIP delivers near-DFT accuracy for million-atom, nanosecond-scale simulations at a small fraction of the cost, enabling studies of crack propagation, phase transitions, ion diffusion and catalytic reactions that were previously intractable. As datasets grow and architectures mature, MLIP are poised to become standard tools for predictive, large-scale materials and molecular modeling.
+
+## 2.Models Matrix
+
+| **Supported Functions** | **[CHGNet](./configs/chgnet/README.md)** | **[MatterSim](./configs/mattersim//README.md)** |
+| ----------------------------------- | ---------------------------------------- | ----------------------------------------------- |
+| **Forward Prediction** | | |
+| Energy | ✅ | ✅ |
+| Force | ✅ | ✅ |
+| Stress | ✅ | ✅ |
+| Magmom | ✅ | - |
+| **ML Capabilities · Training** | | |
+| Single-GPU | ✅ | ✅ |
+| Distributed Train | ✅ | ✅ |
+| Mixed Precision | - | - |
+| Fine-tuning | ✅ | ✅ |
+| Uncertainty / Active-Learning | - | - |
+| Dynamic→Static | - | - |
+| Compiler CINN | - | - |
+| **ML Capabilities · Predict** | | |
+| Distillation / Pruning | - | - |
+| Standard inference | ✅ | ✅ |
+| Distributed inference | - | - |
+| Compiler CINN | - | - |
+| **Molecular Dynamic Interface** | | |
+| ASE | ✅ | ✅ |
+| **Dataset** | | |
+| MPtrj | ✅ | 🚧 |
+| **ML2DDB🌟** | ✅ | - |
+
+**Notice**:🌟 represent originate research work published from paddlematerials toolkit
diff --git a/interatomic_potentials/configs/chgnet/README.md b/interatomic_potentials/configs/chgnet/README.md
new file mode 100644
index 00000000..91eba79c
--- /dev/null
+++ b/interatomic_potentials/configs/chgnet/README.md
@@ -0,0 +1,210 @@
+# CHGNet
+
+[CHGNet: Pretrained universal neural network potential for charge-informed atomistic modeling](https://www.nature.com/articles/s42256-023-00716-3)
+
+## Abstract
+
+The simulation of large-scale systems with complex electron interactions remains one of the greatest challenges for the atomistic modeling of materials. Although classical force fields often fail to describe the coupling between electronic states and ionic rearrangements, the more accurate ab-initio molecular dynamics suffers from computational complexity that prevents long-time and large-scale simulations, which are essential to study many technologically relevant phenomena, such as reactions, ion migrations, phase transformations, and degradation. In this work, we present the Crystal Hamiltonian Graph neural Network (CHGNet) as a novel machine-learning interatomic potential (MLIP), using a graph-neural-network-based force field to model a universal potential energy surface. CHGNet is pretrained on the energies, forces, stresses, and magnetic moments from the Materials Project Trajectory Dataset, which consists of over 10 years of density functional theory static and relaxation trajectories of ∼ 1.5 million inorganic structures. The explicit inclusion of magnetic moments enables CHGNet to learn and accurately represent the orbital occupancy of electrons, enhancing its capability to describe both atomic and electronic degrees of freedom. We demonstrate several applications of CHGNet in solid-state materials, including charge-informed molecular dynamics in LixMnO2, the finite temperature phase diagram for LixFePO4 and Li diffusion in garnet conductors. We critically analyze the significance of including charge information for capturing appropriate chemistry, and we provide new insights into ionic systems with additional electronic degrees of freedom that can not be observed by previous MLIPs.
+
+
+
+## Datasets:
+
+CHGNet is trained and evaluated on large-scale atomistic datasets covering both crystalline bulk materials and surface reaction systems. These datasets provide high-fidelity quantum-mechanical labels, including energies, forces, stresses, and electronic properties, enabling the construction of a charge-aware universal interatomic potential.
+
+The MPtrj dataset is used for CHGNet pretraining and bulk material modeling. The OC20 S2EF dataset is used to evaluate model generalization to surface reaction systems. All dataset splits are fixed and reproducible. Reported MAE values in the Results section follow the evaluation protocol of the original CHGNet paper.
+
+- MPtrj_2022.9_full:
+
+ The Materials Project Trajectory Dataset (MPtrj_2022.9) is the primary pretraining dataset for CHGNet. The original dataset can download from [here](https://figshare.com/articles/dataset/Materials_Project_Trjectory_MPtrj_Dataset/23713842).
+
+ This dataset contains long-term accumulated density functional theory (DFT) static and relaxation trajectories from the Materials Project (2022.9 release), covering a wide range of inorganic crystalline compounds.
+
+ - 145,923 unique compounds
+ - 1,580,395 crystal structures
+
+ Corresponding labels:
+ - 1,580,395 total energies
+ - 49,295,660 atomic forces
+ - 14,223,555 stresses
+ - 7,944,833 magnetic moments
+
+ All calculations are performed at the GGA / GGA+U level of theory. A strict filtering and deduplication protocol is applied to remove incompatible calculations and redundant structures, ensuring data consistency and quality.
+
+ Following the CHGNet paper, the dataset is randomly partitioned based on mp-id, such that structures from the same compound do not appear across different splits.
+
+ | Dataset | Train | Val | Test |
+ | :--------------------------------------------------------------------------: | :---: | :---: | :---: |
+ | [MPtrj_2022.9_full](https://paddle-org.bj.bcebos.com/paddlematerial/datasets/mptrj/MPtrj_2022.9_full.zip) | 116738 | 14592 | 14593 |
+
+ This dataset enables CHGNet to learn a unified potential energy surface across diverse chemistries, crystal symmetries, and magnetic configurations.
+
+- OC20 S2EF
+
+ The Open Catalyst 2020 (OC20) Structure-to-Energy-and-Force (S2EF) dataset is a large-scale benchmark for evaluating interatomic potentials in surface chemistry and catalysis.
+
+ OC20 S2EF focuses on predicting energies and atomic forces for adsorbate–surface systems, featuring:
+
+ - Large structural diversity
+ - Challenging out-of-equilibrium configurations
+ - Strong relevance to catalytic reaction modeling
+
+ We evaluate the CHGNet architecture on the OC20 S2EF dataset to assess its transferability beyond bulk crystalline systems. For more information and the download link, please visit [here](https://paddle-org.bj.bcebos.com/paddlematerials/datasets/OC20/s2ef_train_2M/0000.parquet).
+
+ | Dataset | Train | Val | Test |
+ | :------------ | :-------- | :------- | :------- |
+ | oc20_s2ef_2M | 2,000,000 | 100,000 | 200,000 |
+
+
+## Models
+
+Given atomic coordinates and lattice vectors, CHGNet constructs three coupled graphs within a cutoff radius:
+
+* **Atom graph**: nodes represent atoms with element-dependent features
+* **Bond graph**: edges encode pairwise interactions based on interatomic distances
+* **Angle graph**: captures three-body interactions through bond angles
+
+Interatomic distances are expanded using radial basis functions:
+$$
+e_{ij,n} =
+\sqrt{\frac{2}{r_c}}
+\frac{\sin\left(\frac{n\pi r_{ij}}{r_c}\right)}{r_{ij}}.
+$$
+
+Angular information is encoded using Fourier basis functions of bond angles.
+
+### Energy and Forces
+
+The total energy is obtained by summing atomic energy contributions:
+$$
+E_{\text{tot}} = \sum_i E_i.
+$$
+
+Atomic forces are computed as energy gradients with respect to atomic positions:
+$$
+\mathbf{F}_i = -\frac{\partial E_{\text{tot}}}{\partial \mathbf{r}_i}.
+$$
+
+Stresses are derived consistently from the energy–strain relation:
+$$
+\boldsymbol{\sigma} = \frac{1}{V} \frac{\partial E_{\text{tot}}}{\partial \boldsymbol{\varepsilon}}.
+$$
+
+CHGNet provides a unified, charge-aware interatomic potential capable of modeling complex crystalline materials, including systems with magnetism and charge transfer. It is suitable for structure relaxation, molecular dynamics, and materials property prediction, offering strong transferability across diverse inorganic systems.
+
+
+## Results
+
+
+
+**Note**: The model weights were directly adapted from the [CHGNet](https://github.com/CederGroupHub/chgnet) repository. Since the original paper did not disclose its randomly split test set, we repartitioned the test data according to the proportions described in the paper. However, due to differences in random seeds, the data partitioning could not be fully replicated, limiting the referential value of evaluation results obtained with our test set. To ensure result comparability, the MAE metrics listed in the table are directly cited from the original [paper's](https://www.nature.com/articles/s42256-023-00716-3) experimental results.
+
+### Training
+
+```bash
+# multi-gpu training
+python -m paddle.distributed.launch --gpus="0,1,2,3" interatomic_potentials/train.py -c interatomic_potentials/configs/chgnet/chgnet_mptrj.yaml
+# single-gpu training
+python interatomic_potentials/train.py -c interatomic_potentials/configs/chgnet/chgnet_mptrj.yaml
+```
+
+### Validation
+```bash
+# Adjust program behavior on-the-fly using command-line parameters – this provides a convenient way to customize settings without modifying the configuration file directly.
+# such as: --Global.do_eval=True
+
+python interatomic_potentials/train.py -c interatomic_potentials/configs/chgnet/chgnet_mptrj.yaml Global.do_eval=True Global.do_train=False Global.do_test=False Trainer.pretrained_model_path='your checkpoint path(*.pdparams)'
+
+```
+
+
+### Testing
+```bash
+# This command is used to evaluate the model's performance on the test dataset.
+
+python interatomic_potentials/train.py -c interatomic_potentials/configs/chgnet/chgnet_mptrj.yaml Global.do_test=True Global.do_train=False Global.do_eval=False Trainer.pretrained_model_path='your checkpoint path(*.pdparams)'
+
+```
+
+### Prediction
+
+```bash
+# This command is used to predict the properties of new crystal structures using a trained model.
+# Note: The model_name and weights_name parameters are used to specify the pre-trained model and its corresponding weights. The cif_file_path parameter is used to specify the path to the CIF files for which properties need to be predicted.
+# The prediction results will be saved in a CSV file specified by the save_path parameter. Default save_path is 'result.csv'.
+
+
+# Mode 1: Leverage a pre-trained machine learning model for crystal shear moduli prediction. The implementation includes automated model download functionality, eliminating the need for manual configuration.
+python interatomic_potentials/predict.py --model_name='chgnet_mptrj' --cif_file_path='./interatomic_potentials/example_data/cifs/'
+
+# Mode2: Use a custom configuration file and checkpoint for crystal shear moduli prediction. This approach allows for more flexibility and customization.
+python interatomic_potentials/predict.py --config_path='interatomic_potentials/configs/chgnet/chgnet_mptrj.yaml' --checkpoint_path="your checkpoint path(*.pdparams)"
+```
+
+
+## Citation
+```
+@article{deng2023chgnet,
+ title={CHGNet as a pretrained universal neural network potential for charge-informed atomistic modelling},
+ author={Deng, Bowen and Zhong, Peichen and Jun, KyuJung and Riebesell, Janosh and Han, Kevin and Bartel, Christopher J and Ceder, Gerbrand},
+ journal={Nature Machine Intelligence},
+ volume={5},
+ number={9},
+ pages={1031--1041},
+ year={2023},
+ publisher={Nature Publishing Group UK London}
+}
+```
diff --git a/interatomic_potentials/configs/chgnet/chgnet_mptrj.yaml b/interatomic_potentials/configs/chgnet/chgnet_mptrj.yaml
new file mode 100644
index 00000000..5e57ed8e
--- /dev/null
+++ b/interatomic_potentials/configs/chgnet/chgnet_mptrj.yaml
@@ -0,0 +1,225 @@
+Global:
+ do_train: True
+ do_eval: False
+ do_test: False
+
+ label_names: ['energy_per_atom', 'force', 'stress', 'magmom']
+ graph_converter:
+ __class_name__: CHGNetGraphConverter
+ __init_params__:
+ cutoff: 5.0
+ pdc: [1, 1, 1]
+ num_classes: 95
+ atom_graph_cutoff: 6.0
+ bond_graph_cutoff: 3.0
+
+ prim_eager_enabled: True
+ prim_backward_white_list: ['concat_grad', 'gather_grad', 'layer_norm_grad', 'split_grad']
+
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 20
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/chgnet_mptrj
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 100 # set 0 to disable saving during training
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 20 # log frequency [step]
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 1
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: False
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_metric' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "energy_per_atom"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+
+
+Model:
+ __class_name__: CHGNet
+ __init_params__:
+ atom_fea_dim: 64
+ bond_fea_dim: 64
+ angle_fea_dim: 64
+ composition_model: "MPtrj"
+ num_radial: 31
+ num_angular: 31
+ n_conv: 4
+ atom_conv_hidden_dim: 64
+ update_bond: True
+ bond_conv_hidden_dim: 64
+ update_angle: True
+ angle_layer_hidden_dim: 0
+ conv_dropout: 0
+ read_out: "ave"
+ mlp_hidden_dims: [64, 64, 64]
+ mlp_dropout: 0
+ mlp_first: True
+ is_intensive: True
+ atom_graph_cutoff: 6
+ bond_graph_cutoff: 3
+ cutoff_coeff: 8
+ learnable_rbf: True
+ is_freeze: False
+ property_names: ['energy_per_atom', 'force', 'stress', 'magmom']
+ return_site_energies: False
+ return_atom_feas: False
+ return_crystal_feas: False
+
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: Cosine
+ __init_params__:
+ learning_rate: 1e-3
+ eta_min: 1e-5
+ by_epoch: False
+
+
+Metric:
+ energy_per_atom:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+ force:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+ stress:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+ magmom:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: MPTrjDataset
+ __init_params__:
+ path: "./data/MPtrj_2022.9_full/train.json"
+ property_names: ${Global.label_names}
+ build_structure_cfg:
+ format: dict
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ filter_unvalid: False
+ transforms:
+ - __class_name__: Scale
+ __init_params__:
+ scale: -0.1
+ apply_keys: ['stress']
+ - __class_name__: Abs
+ __init_params__:
+ apply_keys: ['magmom']
+ num_workers: 0
+ use_shared_memory: False
+
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: True
+ batch_size: 40
+ val:
+ dataset:
+ __class_name__: MPTrjDataset
+ __init_params__:
+ path: "./data/MPtrj_2022.9_full/val.json"
+ property_names: ${Global.label_names}
+ build_structure_cfg:
+ format: dict
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ filter_unvalid: False
+ transforms:
+ - __class_name__: Scale
+ __init_params__:
+ scale: -0.1
+ apply_keys: ['stress']
+ - __class_name__: Abs
+ __init_params__:
+ apply_keys: ['magmom']
+ num_workers: 0
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 16
+ test:
+ dataset:
+ __class_name__: MPTrjDataset
+ __init_params__:
+ path: "./data/MPtrj_2022.9_full/test.json"
+ property_names: ${Global.label_names}
+ build_structure_cfg:
+ format: dict
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ filter_unvalid: False
+ transforms:
+ - __class_name__: Scale
+ __init_params__:
+ scale: -0.1
+ apply_keys: ['stress']
+ - __class_name__: Abs
+ __init_params__:
+ apply_keys: ['magmom']
+ num_workers: 0
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 16
+
+
+Predict:
+ graph_converter: ${Global.graph_converter}
+ eval_with_no_grad: False
diff --git a/interatomic_potentials/configs/chgnet/chgnet_oc20_s2ef_energy.yaml b/interatomic_potentials/configs/chgnet/chgnet_oc20_s2ef_energy.yaml
new file mode 100644
index 00000000..bb271c46
--- /dev/null
+++ b/interatomic_potentials/configs/chgnet/chgnet_oc20_s2ef_energy.yaml
@@ -0,0 +1,182 @@
+Global:
+ do_train: True
+ do_eval: False
+ do_test: False
+
+ label_names: ["energy_per_atom"]
+
+ graph_converter:
+ __class_name__: CHGNetGraphConverter
+ __init_params__:
+ cutoff: 5.0
+ pdc: [1, 1, 1]
+ num_classes: 95
+ atom_graph_cutoff: 6.0
+ bond_graph_cutoff: 3.0
+
+ prim_eager_enabled: True
+ prim_backward_white_list: ['concat_grad', 'gather_grad', 'layer_norm_grad', 'split_grad']
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: OC20S2EFDataset
+ __init_params__:
+ path: "./data/oc20"
+ property_names: ${Global.label_names}
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/oc20"
+ overwrite: False
+ filter_unvalid: False
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 128
+ val:
+ dataset:
+ __class_name__: OC20S2EFDataset
+ __init_params__:
+ path: "./data/oc20"
+ urls:
+ - "https://paddle-org.bj.bcebos.com/paddlematerials/datasets/OC20/s2ef_train_2M/0000.parquet"
+ property_names: ${Global.label_names}
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/oc20"
+ overwrite: False
+ filter_unvalid: False
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 128
+ test:
+ dataset:
+ __class_name__: OC20S2EFDataset
+ __init_params__:
+ path: "./data/oc20"
+ urls:
+ - "https://paddle-org.bj.bcebos.com/paddlematerials/datasets/OC20/s2ef_train_2M/0000.parquet"
+ property_names: ${Global.label_names}
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/oc20"
+ overwrite: False
+ filter_unvalid: False
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 128
+
+Model:
+ __class_name__: CHGNet
+ __init_params__:
+ atom_fea_dim: 64
+ bond_fea_dim: 64
+ angle_fea_dim: 64
+ composition_model: "MPtrj"
+ num_radial: 31
+ num_angular: 31
+ n_conv: 4
+ atom_conv_hidden_dim: 64
+ update_bond: True
+ bond_conv_hidden_dim: 64
+ update_angle: True
+ angle_layer_hidden_dim: 0
+ conv_dropout: 0
+ read_out: "ave"
+ mlp_hidden_dims: [64, 64, 64]
+ mlp_dropout: 0
+ mlp_first: True
+ is_intensive: True
+ atom_graph_cutoff: 6
+ bond_graph_cutoff: 3
+ cutoff_coeff: 8
+ learnable_rbf: True
+ is_freeze: False
+ property_names: ${Global.label_names}
+ return_site_energies: False
+ return_atom_feas: False
+ return_crystal_feas: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 20
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/chgnet_oc20_s2ef_energy
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 100 # set 0 to disable saving during training
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 20 # log frequency [step]
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 1
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: False
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_metric' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "energy_per_atom"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: Cosine
+ __init_params__:
+ learning_rate: 1e-3
+ eta_min: 1e-5
+ by_epoch: False
+
+Metric:
+ energy_per_atom:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+
+Predict:
+ graph_converter: ${Global.graph_converter}
+ eval_with_no_grad: False
diff --git a/interatomic_potentials/configs/chgnet/chgnet_oc20_s2ef_forces.yaml b/interatomic_potentials/configs/chgnet/chgnet_oc20_s2ef_forces.yaml
new file mode 100644
index 00000000..35cc3ae7
--- /dev/null
+++ b/interatomic_potentials/configs/chgnet/chgnet_oc20_s2ef_forces.yaml
@@ -0,0 +1,180 @@
+Global:
+ do_train: True
+ do_eval: False
+ do_test: False
+
+ label_names: ["forces"]
+
+ graph_converter:
+ __class_name__: CHGNetGraphConverter
+ __init_params__:
+ cutoff: 5.0
+ pdc: [1, 1, 1]
+ num_classes: 95
+ atom_graph_cutoff: 6.0
+ bond_graph_cutoff: 3.0
+
+ prim_eager_enabled: True
+ prim_backward_white_list: ['concat_grad', 'gather_grad', 'layer_norm_grad', 'split_grad']
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: OC20S2EFDataset
+ __init_params__:
+ path: "./data/oc20"
+ property_names: ${Global.label_names}
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/oc20"
+ overwrite: True
+ filter_unvalid: False
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 128
+ val:
+ dataset:
+ __class_name__: OC20S2EFDataset
+ __init_params__:
+ path: "./data/oc20"
+ property_names: ${Global.label_names}
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/oc20"
+ overwrite: False
+ filter_unvalid: False
+ url_indices: [0]
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 128
+ test:
+ dataset:
+ __class_name__: OC20S2EFDataset
+ __init_params__:
+ path: "./data/oc20"
+ property_names: ${Global.label_names}
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/oc20"
+ overwrite: False
+ filter_unvalid: False
+ url_indices: [0]
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 128
+
+Model:
+ __class_name__: CHGNet
+ __init_params__:
+ atom_fea_dim: 64
+ bond_fea_dim: 64
+ angle_fea_dim: 64
+ composition_model: "MPtrj"
+ num_radial: 31
+ num_angular: 31
+ n_conv: 4
+ atom_conv_hidden_dim: 64
+ update_bond: True
+ bond_conv_hidden_dim: 64
+ update_angle: True
+ angle_layer_hidden_dim: 0
+ conv_dropout: 0
+ read_out: "ave"
+ mlp_hidden_dims: [64, 64, 64]
+ mlp_dropout: 0
+ mlp_first: True
+ is_intensive: True
+ atom_graph_cutoff: 6
+ bond_graph_cutoff: 3
+ cutoff_coeff: 8
+ learnable_rbf: True
+ is_freeze: False
+ property_names: ${Global.label_names}
+ return_site_energies: False
+ return_atom_feas: False
+ return_crystal_feas: False
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 20
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/chgnet_oc20_s2ef_forces
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 100 # set 0 to disable saving during training
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 20 # log frequency [step]
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 1
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: null
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: null #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: False
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_metric' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "forces"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: Cosine
+ __init_params__:
+ learning_rate: 1e-3
+ eta_min: 1e-5
+ by_epoch: False
+
+Metric:
+ forces:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+
+Predict:
+ graph_converter: ${Global.graph_converter}
+ eval_with_no_grad: False
diff --git a/interatomic_potentials/configs/chgnet/chgnet_qm9_lumo.yaml b/interatomic_potentials/configs/chgnet/chgnet_qm9_lumo.yaml
new file mode 100644
index 00000000..e741ab6a
--- /dev/null
+++ b/interatomic_potentials/configs/chgnet/chgnet_qm9_lumo.yaml
@@ -0,0 +1,176 @@
+Global:
+ # This config is focused on running prediction (inference) for the 'lumo' property.
+ do_train: True
+ do_eval: False
+ do_test: False
+
+ # Target label(s) — changed to only 'lumo'
+ label_names: ['energy_per_atom']
+
+ # Reuse the same converter structure style as example; adjust to molecule tasks.
+ # You can replace __class_name__ and params with your project's actual converter.
+ graph_converter:
+ __class_name__: CHGNetGraphConverter
+ __init_params__:
+ cutoff: 5.0
+ pdc: [1, 1, 1]
+ num_classes: 95
+ atom_graph_cutoff: 6.0
+ bond_graph_cutoff: 3.0
+
+ prim_eager_enabled: True
+ prim_backward_white_list: ['concat_grad', 'gather_grad', 'layer_norm_grad', 'split_grad']
+
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 20
+ # Random seed
+ seed: 42
+ output_dir: ./output/qm9_predict_lumo
+ save_freq: 10
+ log_freq: 50
+
+ start_eval_epoch: 1
+ eval_freq: 1
+ pretrained_model_path: null
+ pretrained_weight_name: null
+ resume_from_checkpoint: null
+ use_amp: False
+ amp_level: 'O1'
+ eval_with_no_grad: True
+ gradient_accumulation_steps: 1
+
+ best_metric_indicator: 'eval_metric'
+ name_for_best_metric: "energy_per_atom"
+ greater_is_better: False
+
+ compute_metric_during_train: False
+ metric_strategy_during_eval: 'epoch'
+
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+
+
+Model:
+ # Keep the same class as the example if you use CHGNet for inference; otherwise change it.
+ __class_name__: CHGNet
+ __init_params__:
+ atom_fea_dim: 64
+ bond_fea_dim: 64
+ angle_fea_dim: 64
+ composition_model: "MPtrj"
+ num_radial: 31
+ num_angular: 31
+ n_conv: 4
+ atom_conv_hidden_dim: 64
+ update_bond: True
+ bond_conv_hidden_dim: 64
+ update_angle: True
+ angle_layer_hidden_dim: 0
+ conv_dropout: 0
+ read_out: "ave"
+ mlp_hidden_dims: [64, 64, 64]
+ mlp_dropout: 0
+ mlp_first: True
+ # IMPORTANT: only predict 'lumo' — change property_names accordingly
+ is_intensive: True
+ atom_graph_cutoff: 6
+ bond_graph_cutoff: 3
+ cutoff_coeff: 8
+ learnable_rbf: True
+ is_freeze: False
+ property_names: ['energy_per_atom']
+ return_site_energies: False
+ return_atom_feas: False
+ return_crystal_feas: False
+
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: Cosine
+ __init_params__:
+ learning_rate: 1e-3
+ eta_min: 1e-5
+ by_epoch: False
+
+
+Metric:
+ # Only one metric for the single target 'lumo'
+ energy_per_atom:
+ __class_name__: IgnoreNanMetricWrapper
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: QM9Dataset
+ __init_params__:
+ path: "./data/qm9"
+ property_names: ${Global.label_names}
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/qm9"
+ overwrite: False
+ filter_unvalid: True
+ # [Delete] url_indices: QM9Dataset does not support this parameter
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 128
+ val:
+ dataset:
+ __class_name__: QM9Dataset
+ __init_params__:
+ path: "./data/qm9"
+ property_names: ${Global.label_names}
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/qm9"
+ overwrite: False
+ filter_unvalid: True
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 128
+ test:
+ dataset:
+ __class_name__: QM9Dataset
+ __init_params__:
+ path: "./data/qm9"
+ property_names: ${Global.label_names}
+ build_graph_cfg: ${Global.graph_converter}
+ cache_path: "./data/qm9"
+ overwrite: False
+ filter_unvalid: True
+ num_workers: 4
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 128
+
+
+Predict:
+ graph_converter: ${Global.graph_converter}
+ eval_with_no_grad: True
+ # Path to model checkpoint to load for inference (set to your trained checkpoint)
+ checkpoint_path: ./checkpoints/best_model.pdparams
+ # Output file for predictions
+ output_path: ./predictions/qm9_lumo_predictions.csv
+ # Optional: whether to write per-sample details (pos, atomic_numbers) alongside predictions
+ write_details: False
\ No newline at end of file
diff --git a/interatomic_potentials/configs/mattersim/README.md b/interatomic_potentials/configs/mattersim/README.md
new file mode 100644
index 00000000..009f44e3
--- /dev/null
+++ b/interatomic_potentials/configs/mattersim/README.md
@@ -0,0 +1,85 @@
+# MatterSim
+
+[MatterSim: A Deep Learning Atomistic Model Across Elements, Temperatures and Pressures](https://arxiv.org/abs/2405.04967)
+
+## Abstract
+
+Accurate and fast prediction of materials properties is central to the digital transformation of materials design. However, the vast design space and diverse operating conditions pose significant challenges for accurately modeling arbitrary material candidates and forecasting their properties. We present MatterSim, a deep learning model actively learned from large-scale first-principles computations, for efficient atomistic simulations at first-principles level and accurate prediction of broad material properties across the periodic table, spanning temperatures from 0 to 5000 K and pressures up to 1000 GPa. Out-of-the-box, the model serves as a machine learning force field, and shows remarkable capabilities not only in predicting ground-state material structures and energetics, but also in simulating their behavior under realistic temperatures and pressures, signifying an up to ten-fold enhancement in precision compared to the prior best-in-class. This enables MatterSim to compute materials' lattice dynamics, mechanical and thermodynamic properties, and beyond, to an accuracy comparable with first-principles methods. Specifically, MatterSim predicts Gibbs free energies for a wide range of inorganic solids with near-first-principles accuracy and achieves a 15 meV/atom resolution for temperatures up to 1000K compared with experiments. This opens an opportunity to predict experimental phase diagrams of materials at minimal computational cost. Moreover, MatterSim also serves as a platform for continuous learning and customization by integrating domain-specific data. The model can be fine-tuned for atomistic simulations at a desired level of theory or for direct structure-to-property predictions, achieving high data efficiency with a reduction in data requirements by up to 97%.
+
+
+
+## Pre-trained Models
+
+1. MatterSim-v1.0.0-1M: A mini version of the model that is faster to run.
+2. MatterSim-v1.0.0-5M: A larger version of the model that is more accurate.
+
+
+### Training
+
+Fine-tune the mattersim_1M model using high_level_water.
+
+```bash
+# multi-gpu training
+python -m paddle.distributed.launch --gpus="0,1,2,3" interatomic_potentials/train.py -c interatomic_potentials/configs/mattersim/mattersim_1M_high_level_water.yaml
+# single-gpu training
+python interatomic_potentials/train.py -c interatomic_potentials/configs/mattersim/mattersim_1M_high_level_water.yaml
+```
+
+Fine-tune the mattersim_5M model using high_level_water.
+
+```bash
+# multi-gpu training
+python -m paddle.distributed.launch --gpus="0,1,2,3" interatomic_potentials/train.py -c interatomic_potentials/configs/mattersim/mattersim_5M_high_level_water.yaml
+# single-gpu training
+python interatomic_potentials/train.py -c interatomic_potentials/configs/mattersim/mattersim_5M_high_level_water.yaml
+```
+
+### Validation
+```bash
+# Adjust program behavior on-the-fly using command-line parameters – this provides a convenient way to customize settings without modifying the configuration file directly.
+# such as: --Global.do_eval=True
+
+python interatomic_potentials/train.py -c interatomic_potentials/configs/mattersim/mattersim_1M_high_level_water.yaml Global.do_eval=True Global.do_train=False Global.do_test=False Trainer.pretrained_model_path='your checkpoint path(*.pdparams)'
+
+```
+
+
+### Testing
+```bash
+# This command is used to evaluate the model's performance on the test dataset.
+
+python interatomic_potentials/train.py -c interatomic_potentials/configs/mattersim/mattersim_1M_high_level_water.yaml Global.do_test=True Global.do_train=False Global.do_eval=False Trainer.pretrained_model_path='your checkpoint path(*.pdparams)'
+
+```
+
+### Prediction
+
+```bash
+# This command is used to predict the properties of new crystal structures using a trained model.
+# Note: The model_name and weights_name parameters are used to specify the pre-trained model and its corresponding weights. The cif_file_path parameter is used to specify the path to the CIF files for which properties need to be predicted.
+# The prediction results will be saved in a CSV file specified by the save_path parameter. Default save_path is 'result.csv'.
+
+
+# Mode 1: Leverage a pre-trained machine learning model for crystal shear moduli prediction. The implementation includes automated model download functionality, eliminating the need for manual configuration.
+python interatomic_potentials/predict.py --model_name='mattersim_1M' --weights_name='mattersim-v1.0.0-1M_model.pdparams' --cif_file_path='./interatomic_potentials/example_data/cifs/'
+
+python interatomic_potentials/predict.py --model_name='mattersim_5M' --weights_name='mattersim-v1.0.0-5M_model.pdparams' --cif_file_path='./interatomic_potentials/example_data/cifs/'
+
+# Mode2: Use a custom configuration file and checkpoint for crystal shear moduli prediction. This approach allows for more flexibility and customization.
+python interatomic_potentials/predict.py --config_path='interatomic_potentials/configs/mattersim/mattersim_1M.yaml' --checkpoint_path="/root/host/home/zhangzhimin04/workspaces_123/ppmat/PaddleMaterial_experimental/experimental/output/mattersim_1M/mattersim-v1.0.0-1M_model.pdparams" --cif_file_path='./interatomic_potentials/example_data/cifs/'
+```
+
+
+## Citation
+```
+@article{yang2024mattersim,
+ title={MatterSim: A Deep Learning Atomistic Model Across Elements, Temperatures and Pressures},
+ author={Han Yang and Chenxi Hu and Yichi Zhou and Xixian Liu and Yu Shi and Jielan Li and Guanzhi Li and Zekun Chen and Shuizhou Chen and Claudio Zeni and Matthew Horton and Robert Pinsler and Andrew Fowler and Daniel Zügner and Tian Xie and Jake Smith and Lixin Sun and Qian Wang and Lingyu Kong and Chang Liu and Hongxia Hao and Ziheng Lu},
+ year={2024},
+ eprint={2405.04967},
+ archivePrefix={arXiv},
+ primaryClass={cond-mat.mtrl-sci},
+ url={https://arxiv.org/abs/2405.04967},
+ journal={arXiv preprint arXiv:2405.04967}
+}
+```
diff --git a/interatomic_potentials/configs/mattersim/mattersim_1M.yaml b/interatomic_potentials/configs/mattersim/mattersim_1M.yaml
new file mode 100644
index 00000000..5caae872
--- /dev/null
+++ b/interatomic_potentials/configs/mattersim/mattersim_1M.yaml
@@ -0,0 +1,97 @@
+Global:
+ do_train: True
+ do_eval: False
+ do_test: False
+
+ label_names: ['energy', 'force']
+
+ energy_key: 'energy'
+ force_key: 'force'
+ stress_key: null # 'stress' # high level water data not support stress
+
+
+ graph_converter:
+ __class_name__: M3GNetGraphConvertor
+ __init_params__: {}
+
+ prim_eager_enabled: True
+ prim_backward_white_list: ['stack_grad', 'assign_grad']
+
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 20
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/mattersim_1M
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 5 # set 0 to disable saving during training
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1 # log frequency [step]
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 1
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: "https://paddle-org.bj.bcebos.com/paddlematerial/checkpoints/interatomic_potentials/mattersim/mattersim_1M.zip"
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: mattersim-v1.0.0-1M_model.pdparams #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: False
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_metric' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "energy"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+
+
+Model:
+ __class_name__: M3GNet
+ __init_params__:
+ num_blocks: 3
+ units: 128
+ max_l: 4
+ max_n: 4
+ cutoff: 5.0
+ max_z: 94
+ threebody_cutoff: 4.0
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ loss_type: 'smooth_l1_loss'
+ huber_loss_delta: 0.01
+ loss_weights_dict:
+ energy: 1.0
+ force: 1.0
+ stress: 0.1
+
+
+Predict:
+ graph_converter: ${Global.graph_converter}
+ eval_with_no_grad: False
diff --git a/interatomic_potentials/configs/mattersim/mattersim_1M_high_level_water.yaml b/interatomic_potentials/configs/mattersim/mattersim_1M_high_level_water.yaml
new file mode 100644
index 00000000..bcaeab4e
--- /dev/null
+++ b/interatomic_potentials/configs/mattersim/mattersim_1M_high_level_water.yaml
@@ -0,0 +1,192 @@
+Global:
+ do_train: True
+ do_eval: False
+ do_test: False
+
+ label_names: ['energy', 'force']
+
+ energy_key: 'energy'
+ force_key: 'force'
+ stress_key: null # 'stress' # high level water data not support stress
+
+
+ graph_converter:
+ __class_name__: M3GNetGraphConvertor
+ __init_params__: {}
+
+ prim_eager_enabled: True
+ prim_backward_white_list: ['stack_grad', 'assign_grad']
+
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 20
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/mattersim_1M_high_level_water
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 5 # set 0 to disable saving during training
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1 # log frequency [step]
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 1
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: "https://paddle-org.bj.bcebos.com/paddlematerial/checkpoints/interatomic_potentials/mattersim/mattersim_1M.zip"
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: mattersim-v1.0.0-1M_model.pdparams #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: False
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_metric' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "energy"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+
+
+Model:
+ __class_name__: M3GNet
+ __init_params__:
+ num_blocks: 3
+ units: 128
+ max_l: 4
+ max_n: 4
+ cutoff: 5.0
+ max_z: 94
+ threebody_cutoff: 4.0
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ loss_type: 'smooth_l1_loss'
+ huber_loss_delta: 0.01
+ loss_weights_dict:
+ energy: 1.0
+ force: 1.0
+ stress: 0.1
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: Step
+ __init_params__:
+ learning_rate: 2e-4
+ step_size: 10
+ gamma: 0.95
+ by_epoch: True
+
+
+Metric:
+ energy:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+ force:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: HighLevelWaterDataset
+ __init_params__:
+ path: "./data/high_level_water/high_level_water.xyz"
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ build_structure_cfg:
+ format: ase_atoms
+ primitive: False
+ niggli: False
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ filter_unvalid: False
+ num_workers: 0
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: True
+ batch_size: 2
+ val:
+ dataset:
+ __class_name__: HighLevelWaterDataset
+ __init_params__:
+ path: "./data/high_level_water/high_level_water.xyz"
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ build_structure_cfg:
+ format: ase_atoms
+ primitive: False
+ niggli: False
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ filter_unvalid: False
+ num_workers: 0
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 16
+ test:
+ dataset:
+ __class_name__: HighLevelWaterDataset
+ __init_params__:
+ path: "./data/high_level_water/high_level_water.xyz"
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ build_structure_cfg:
+ format: ase_atoms
+ primitive: False
+ niggli: False
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ filter_unvalid: False
+ num_workers: 0
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 16
+
+
+Predict:
+ graph_converter: ${Global.graph_converter}
+ eval_with_no_grad: False
diff --git a/interatomic_potentials/configs/mattersim/mattersim_5M.yaml b/interatomic_potentials/configs/mattersim/mattersim_5M.yaml
new file mode 100644
index 00000000..09a702e7
--- /dev/null
+++ b/interatomic_potentials/configs/mattersim/mattersim_5M.yaml
@@ -0,0 +1,97 @@
+Global:
+ do_train: True
+ do_eval: False
+ do_test: False
+
+ label_names: ['energy', 'force']
+
+ energy_key: 'energy'
+ force_key: 'force'
+ stress_key: null # 'stress' # high level water data not support stress
+
+
+ graph_converter:
+ __class_name__: M3GNetGraphConvertor
+ __init_params__: {}
+
+ prim_eager_enabled: True
+ prim_backward_white_list: ['stack_grad', 'assign_grad']
+
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 20
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/mattersim_5M
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 5 # set 0 to disable saving during training
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1 # log frequency [step]
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 1
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: "https://paddle-org.bj.bcebos.com/paddlematerial/checkpoints/interatomic_potentials/mattersim/mattersim_5M.zip"
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: mattersim-v1.0.0-5M_model.pdparams #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: False
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_metric' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "energy"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+
+
+Model:
+ __class_name__: M3GNet
+ __init_params__:
+ num_blocks: 4
+ units: 256
+ max_l: 4
+ max_n: 4
+ cutoff: 5.0
+ max_z: 94
+ threebody_cutoff: 4.0
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ loss_type: 'smooth_l1_loss'
+ huber_loss_delta: 0.01
+ loss_weights_dict:
+ energy: 1.0
+ force: 1.0
+ stress: 0.1
+
+
+Predict:
+ graph_converter: ${Global.graph_converter}
+ eval_with_no_grad: False
diff --git a/interatomic_potentials/configs/mattersim/mattersim_5M_high_level_water.yaml b/interatomic_potentials/configs/mattersim/mattersim_5M_high_level_water.yaml
new file mode 100644
index 00000000..7cec4429
--- /dev/null
+++ b/interatomic_potentials/configs/mattersim/mattersim_5M_high_level_water.yaml
@@ -0,0 +1,192 @@
+Global:
+ do_train: True
+ do_eval: False
+ do_test: False
+
+ label_names: ['energy', 'force']
+
+ energy_key: 'energy'
+ force_key: 'force'
+ stress_key: null # 'stress' # high level water data not support stress
+
+
+ graph_converter:
+ __class_name__: M3GNetGraphConvertor
+ __init_params__: {}
+
+ prim_eager_enabled: True
+ prim_backward_white_list: ['stack_grad', 'assign_grad']
+
+
+Trainer:
+ # Max epochs to train
+ max_epochs: 20
+ # Random seed
+ seed: 42
+ # Save path for checkpoints and logs
+ output_dir: ./output/mattersim_5M_high_level_water
+ # Save frequency [epoch], for example, save_freq=10 means save checkpoints every 10 epochs
+ save_freq: 5 # set 0 to disable saving during training
+ # Logging frequency [step], for example, log_freq=10 means log every 10 steps
+ log_freq: 1 # log frequency [step]
+
+ # Start evaluation epoch, for example, start_eval_epoch=10 means start evaluation from epoch 10
+ start_eval_epoch: 1
+ # Evaluation frequency [epoch], for example, eval_freq=1 means evaluate every 1 epoch
+ eval_freq: 1 # set 0 to disable evaluation during training
+ # Pretrained model path, if null, no pretrained model will be loaded
+ pretrained_model_path: "https://paddle-org.bj.bcebos.com/paddlematerial/checkpoints/interatomic_potentials/mattersim/mattersim_5M.zip"
+ # Pretrained weight name, will be used when pretrained_model_path is a directory
+ pretrained_weight_name: mattersim-v1.0.0-5M_model.pdparams #'latest.pdparams'
+ # Resume from checkpoint path, useful for resuming training
+ resume_from_checkpoint: null
+ # whether use automatic mixed precision
+ use_amp: False
+ # automatic mixed precision level
+ amp_level: 'O1'
+ # whether run a model on no_grad mode during evaluation, useful for saving memory
+ # If the model contains higher-order derivatives in the forward, it should be set to
+ # False
+ eval_with_no_grad: False
+ # gradient accumulation steps, for example, gradient_accumulation_steps=2 means
+ # gradient accumulation every 2 forward steps
+ # Note:
+ # one complete step = gradient_accumulation_steps * forward steps + backward steps
+ gradient_accumulation_steps: 1
+
+ # best metric indicator, you can choose from "train_loss", "eval_loss", "train_metric", "eval_metric"
+ best_metric_indicator: 'eval_metric' # "train_loss", "eval_loss", "train_metric", "eval_metric"
+ # The name of the best metric, since you may have multiple metrics, such as "mae", "rmse", "mape"
+ name_for_best_metric: "energy"
+ # The metric whether is better when it is greater
+ greater_is_better: False
+
+ # compute metric during training or evaluation
+ compute_metric_during_train: True # True: the metric will be calculated on train dataset
+ metric_strategy_during_eval: 'epoch' # step or epoch, compute metric after step or epoch, if set to 'step', the metric will be calculated after every step, else after epoch
+
+ # whether use visualdl, wandb, tensorboard to log
+ use_visualdl: False
+ use_wandb: False
+ use_tensorboard: False
+
+
+Model:
+ __class_name__: M3GNet
+ __init_params__:
+ num_blocks: 4
+ units: 256
+ max_l: 4
+ max_n: 4
+ cutoff: 5.0
+ max_z: 94
+ threebody_cutoff: 4.0
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ loss_type: 'smooth_l1_loss'
+ huber_loss_delta: 0.01
+ loss_weights_dict:
+ energy: 1.0
+ force: 1.0
+ stress: 0.1
+
+Optimizer:
+ __class_name__: Adam
+ __init_params__:
+ lr:
+ __class_name__: Step
+ __init_params__:
+ learning_rate: 2e-4
+ step_size: 10
+ gamma: 0.95
+ by_epoch: True
+
+
+Metric:
+ energy:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+ force:
+ __class_name__: IgnoreNanMetricWrapper #MAEMetric
+ __init_params__:
+ __class_name__: paddle.nn.L1Loss
+ __init_params__: {}
+
+Dataset:
+ train:
+ dataset:
+ __class_name__: HighLevelWaterDataset
+ __init_params__:
+ path: "./data/high_level_water/high_level_water.xyz"
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ build_structure_cfg:
+ format: ase_atoms
+ primitive: False
+ niggli: False
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ filter_unvalid: False
+ num_workers: 0
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: True
+ drop_last: True
+ batch_size: 2
+ val:
+ dataset:
+ __class_name__: HighLevelWaterDataset
+ __init_params__:
+ path: "./data/high_level_water/high_level_water.xyz"
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ build_structure_cfg:
+ format: ase_atoms
+ primitive: False
+ niggli: False
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ filter_unvalid: False
+ num_workers: 0
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 16
+ test:
+ dataset:
+ __class_name__: HighLevelWaterDataset
+ __init_params__:
+ path: "./data/high_level_water/high_level_water.xyz"
+ energy_key: ${Global.energy_key}
+ force_key: ${Global.force_key}
+ stress_key: ${Global.stress_key}
+ build_structure_cfg:
+ format: ase_atoms
+ primitive: False
+ niggli: False
+ num_cpus: 10
+ build_graph_cfg: ${Global.graph_converter}
+ filter_unvalid: False
+ num_workers: 0
+ use_shared_memory: False
+ sampler:
+ __class_name__: BatchSampler
+ __init_params__:
+ shuffle: False
+ drop_last: False
+ batch_size: 16
+
+
+Predict:
+ graph_converter: ${Global.graph_converter}
+ eval_with_no_grad: False
diff --git a/interatomic_potentials/docs/chgnet.png b/interatomic_potentials/docs/chgnet.png
new file mode 100644
index 00000000..24eef545
Binary files /dev/null and b/interatomic_potentials/docs/chgnet.png differ
diff --git a/interatomic_potentials/docs/mattersim.png b/interatomic_potentials/docs/mattersim.png
new file mode 100644
index 00000000..e0e62bdd
Binary files /dev/null and b/interatomic_potentials/docs/mattersim.png differ
diff --git a/interatomic_potentials/example_data/cifs/mp-18767-LiMnO2.cif b/interatomic_potentials/example_data/cifs/mp-18767-LiMnO2.cif
new file mode 100644
index 00000000..7e04fa34
--- /dev/null
+++ b/interatomic_potentials/example_data/cifs/mp-18767-LiMnO2.cif
@@ -0,0 +1,40 @@
+# generated using pymatgen
+data_LiMnO2
+_symmetry_space_group_name_H-M 'P 1'
+_cell_length_a 2.86877900
+_cell_length_b 4.63447500
+_cell_length_c 5.83250700
+_cell_angle_alpha 90.00000000
+_cell_angle_beta 90.00000000
+_cell_angle_gamma 90.00000000
+_symmetry_Int_Tables_number 1
+_chemical_formula_structural LiMnO2
+_chemical_formula_sum 'Li2 Mn2 O4'
+_cell_volume 77.54484024
+_cell_formula_units_Z 2
+loop_
+ _symmetry_equiv_pos_site_id
+ _symmetry_equiv_pos_as_xyz
+ 1 'x, y, z'
+loop_
+ _atom_type_symbol
+ _atom_type_oxidation_number
+ Li+ 1.0
+ Mn3+ 3.0
+ O2- -2.0
+loop_
+ _atom_site_type_symbol
+ _atom_site_label
+ _atom_site_symmetry_multiplicity
+ _atom_site_fract_x
+ _atom_site_fract_y
+ _atom_site_fract_z
+ _atom_site_occupancy
+ Li+ Li0 1 0.50000000 0.50000000 0.37975050 1
+ Li+ Li1 1 0.00000000 0.00000000 0.62024950 1
+ Mn3+ Mn2 1 0.50000000 0.50000000 0.86325250 1
+ Mn3+ Mn3 1 0.00000000 0.00000000 0.13674750 1
+ O2- O4 1 0.50000000 0.00000000 0.36082450 1
+ O2- O5 1 0.00000000 0.50000000 0.09851350 1
+ O2- O6 1 0.50000000 0.00000000 0.90148650 1
+ O2- O7 1 0.00000000 0.50000000 0.63917550 1
diff --git a/interatomic_potentials/predict.py b/interatomic_potentials/predict.py
new file mode 100644
index 00000000..cd671d17
--- /dev/null
+++ b/interatomic_potentials/predict.py
@@ -0,0 +1,236 @@
+# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import argparse
+import os
+import os.path as osp
+from collections import defaultdict
+from typing import Optional
+
+import paddle
+import pandas as pd
+from omegaconf import OmegaConf
+from pymatgen.core import Structure
+from tqdm import tqdm
+
+from ppmat.datasets.transform import build_post_transforms
+from ppmat.models import build_graph_converter
+from ppmat.models import build_model
+from ppmat.models import build_model_from_name
+from ppmat.utils import logger
+from ppmat.utils import save_load
+
+
+class PotentialPredictor:
+ """Potential predictor.
+
+ This class provides an interface for predicting properties of crystalline
+ structures using pre-trained deep learning models. Supports two initialization
+ modes:
+
+ 1. **Automatic Model Loading**
+ Specify `model_name` and `weights_name` to automatically download
+ and load pre-trained weights from the `MODEL_REGISTRY`.
+
+ 2. **Custom Model Loading**
+ Provide explicit `config_path` and `checkpoint_path` to load
+ custom-trained models from local files.
+
+ Args:
+ model_name (Optional[str], optional): Name of the pre-defined model architecture
+ from the `MODEL_REGISTRY` registry. When specified, associated weights
+ will be automatically downloaded. Defaults to None.
+
+ weights_name (Optional[str], optional): Specific pre-trained weight identifier.
+ Used only when `model_name` is provided. Valid options include:
+ - 'best.pdparams' (highest validation performance)
+ - 'latest.pdparams' (most recent training checkpoint)
+ - Custom weight files ending with '.pdparams'
+ Defaults to None.
+
+ config_path (Optional[str], optional): Path to model configuration file (YAML)
+ for custom models. Required when not using predefined `model_name`.
+ Defaults to None.
+ checkpoint_path (Optional[str], optional): Path to model checkpoint file
+ (.pdparams) for custom models. Required when not using predefined
+ `model_name`. Defaults to None.
+ """
+
+ def __init__(
+ self,
+ model_name: Optional[str] = None,
+ weights_name: Optional[str] = None,
+ config_path: Optional[str] = None,
+ checkpoint_path: Optional[str] = None,
+ ):
+ # if model_name is not None, then config_path and checkpoint_path must be
+ # provided
+ if model_name is None:
+ assert (
+ config_path is not None and checkpoint_path is not None
+ ), "config_path and checkpoint_path must be provided when model_name is "
+ "None."
+
+ logger.info(f"Loading model from {config_path} and {checkpoint_path}.")
+
+ config = OmegaConf.load(config_path)
+ config = OmegaConf.to_container(config, resolve=True)
+
+ model_config = config.get("Model", None)
+ assert model_config is not None, "Model config must be provided."
+ model = build_model(model_config)
+ save_load.load_pretrain(model, checkpoint_path)
+
+ else:
+ logger.info("Since model_name is given, downloading it...")
+ model, config = build_model_from_name(model_name, weights_name)
+
+ self.model = model
+ self.config = config
+
+ self.model.eval()
+
+ predict_config = config.get("Predict", None)
+ self.predict_config = predict_config
+ self.eval_with_no_grad = predict_config.get("eval_with_no_grad", True)
+
+ self.graph_converter_fn = None
+ if self.predict_config is not None:
+ graph_converter_config = predict_config.get("graph_converter", None)
+ if graph_converter_config is not None:
+ self.graph_converter_fn = build_graph_converter(graph_converter_config)
+
+ self.post_transforms_cfg = predict_config.get("post_transforms", None)
+ if self.post_transforms_cfg is not None:
+ self.post_transforms = build_post_transforms(self.post_transforms_cfg)
+ else:
+ self.post_transforms = None
+
+ def graph_converter(self, structure):
+ if self.graph_converter_fn is None:
+ return structure
+ return self.graph_converter_fn(structure)
+
+ def post_process(self, data):
+ if self.post_transforms is None:
+ return data
+ return self.post_transforms(data)
+
+ def from_structures(self, structures):
+
+ data = self.graph_converter(structures)
+ data = data.tensor()
+ if self.eval_with_no_grad:
+ with paddle.no_grad():
+ out = self.model.predict(data)
+ else:
+ out = self.model.predict(data)
+ out = self.post_process(out)
+ return out
+
+ def from_cif_file(self, cif_file_path, save_path=None):
+ if save_path is not None:
+ assert save_path.endswith(".csv"), "save_path must end with .csv"
+ if osp.isdir(cif_file_path):
+ cif_files = [
+ osp.join(cif_file_path, f)
+ for f in os.listdir(cif_file_path)
+ if f.endswith(".cif")
+ ]
+ results = []
+ for cif_file in tqdm(cif_files):
+ structure = Structure.from_file(cif_file)
+ result = self.from_structures(structure)
+ results.append(result)
+ if save_path is not None:
+
+ keys = list(results[0].keys())
+ result_properties = defaultdict(list)
+ for key in keys:
+ for r in results:
+ result_properties[key].append(r[key])
+
+ # save cif_files and result to csv file
+ df = pd.DataFrame({"cif_file": cif_files, **result_properties})
+ df.to_csv(save_path, index=False)
+ logger.info(f"Saved the prediction result to {save_path}")
+
+ return results
+ else:
+ structure = Structure.from_file(cif_file_path)
+ result = self.from_structures(structure)
+
+ keys = list(result.keys())
+ result_properties = defaultdict(list)
+ for key in keys:
+ result_properties[key].append(result[key])
+
+ if save_path is not None:
+ df = pd.DataFrame({"cif_file": [cif_file_path], **result_properties})
+ df.to_csv(save_path, index=False)
+ logger.info(f"Saved the prediction result to {save_path}")
+
+ return result
+
+
+if __name__ == "__main__":
+
+ argparse = argparse.ArgumentParser()
+ argparse.add_argument(
+ "--model_name",
+ type=str,
+ default=None,
+ help="Model name.",
+ )
+ argparse.add_argument(
+ "--weights_name",
+ type=str,
+ default=None,
+ help="Weights name, e.g., best.pdparams, latest.pdparams.",
+ )
+ argparse.add_argument(
+ "--config_path",
+ type=str,
+ default=None,
+ help="Path to the configuration file.",
+ )
+ argparse.add_argument(
+ "--checkpoint_path",
+ type=str,
+ default=None,
+ help="Path to the checkpoint file.",
+ )
+ argparse.add_argument(
+ "--cif_file_path",
+ type=str,
+ default="./interatomic_potentials/",
+ help="Path to the CIF file whose material properties you want to predict.",
+ )
+ argparse.add_argument(
+ "--save_path",
+ type=str,
+ default="result.csv",
+ help="Path to save the prediction result.",
+ )
+ args = argparse.parse_args()
+
+ predictor = PotentialPredictor(
+ model_name=args.model_name,
+ weights_name=args.weights_name,
+ config_path=args.config_path,
+ checkpoint_path=args.checkpoint_path,
+ )
+
+ results = predictor.from_cif_file(args.cif_file_path, args.save_path)
+ print(results)
diff --git a/interatomic_potentials/train.py b/interatomic_potentials/train.py
new file mode 100644
index 00000000..09fd8880
--- /dev/null
+++ b/interatomic_potentials/train.py
@@ -0,0 +1,151 @@
+# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import argparse
+import os
+import os.path as osp
+
+import paddle.distributed as dist
+import paddle.distributed.fleet as fleet
+from omegaconf import OmegaConf
+
+from ppmat.datasets import build_dataloader
+from ppmat.datasets import set_signal_handlers
+from ppmat.metrics import build_metric
+from ppmat.models import build_model
+from ppmat.optimizer import build_optimizer
+from ppmat.trainer.base_trainer import BaseTrainer
+from ppmat.utils import logger
+from ppmat.utils import misc
+from ppmat.utils.eager_comp_setting import setting_eager_mode
+
+if dist.get_world_size() > 1:
+ fleet.init(is_collective=True)
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "-c",
+ "--config",
+ type=str,
+ help="Path to config file",
+ )
+
+ args, dynamic_args = parser.parse_known_args()
+
+ # load config and merge with cli args
+ config = OmegaConf.load(args.config)
+ cli_config = OmegaConf.from_dotlist(dynamic_args)
+ config = OmegaConf.merge(config, cli_config)
+
+ # save config to output_dir, only rank 0 process will do this
+ if dist.get_rank() == 0:
+ os.makedirs(config["Trainer"]["output_dir"], exist_ok=True)
+ config_name = os.path.basename(args.config)
+ OmegaConf.save(config, osp.join(config["Trainer"]["output_dir"], config_name))
+ # convert to dict
+ config = OmegaConf.to_container(config, resolve=True)
+
+ # init logger
+ logger_path = osp.join(config["Trainer"]["output_dir"], "run.log")
+ logger.init_logger(log_file=logger_path)
+ logger.info(f"Logger saved to {logger_path}")
+
+ # set random seed
+ seed = config["Trainer"].get("seed", 42)
+ misc.set_random_seed(seed)
+ logger.info(f"Set random seed to {seed}")
+
+ # set prim eager mode
+ enabled = config["Global"].get("prim_eager_enabled", False)
+ white_list = config["Global"].get("prim_backward_white_list", None)
+ setting_eager_mode(enabled, white_list)
+
+ # build model from config
+ model_cfg = config["Model"]
+ model = build_model(model_cfg)
+
+ # build dataloader from config
+ set_signal_handlers()
+ if config["Global"].get("do_train", True):
+ train_data_cfg = config["Dataset"].get("train")
+ assert (
+ train_data_cfg is not None
+ ), "train_data_cfg must be defined, when do_train is true"
+ train_loader = build_dataloader(train_data_cfg)
+ else:
+ train_loader = None
+
+ if config["Global"].get("do_eval", False) or config["Global"].get("do_train", True):
+ val_data_cfg = config["Dataset"].get("val")
+ if val_data_cfg is not None:
+ val_loader = build_dataloader(val_data_cfg)
+ else:
+ logger.info("No validation dataset defined.")
+ val_loader = None
+ else:
+ val_loader = None
+
+ if config["Global"].get("do_test", False):
+ test_data_cfg = config["Dataset"].get("test")
+ assert (
+ test_data_cfg is not None
+ ), "test_data_cfg must be defined, when do_test is true"
+ test_loader = build_dataloader(test_data_cfg)
+ else:
+ test_loader = None
+
+ # build optimizer and learning rate scheduler from config
+ if config.get("Optimizer") is not None and config["Global"].get("do_train", True):
+ assert (
+ train_loader is not None
+ ), "train_loader must be defined when optimizer is defined."
+ assert (
+ config["Trainer"].get("max_epochs") is not None
+ ), "max_epochs must be defined when optimizer is defined."
+ optimizer, lr_scheduler = build_optimizer(
+ config["Optimizer"],
+ model,
+ config["Trainer"]["max_epochs"],
+ len(train_loader),
+ )
+ else:
+ optimizer, lr_scheduler = None, None
+
+ # build metric from config
+ metric_cfg = config.get("Metric")
+ if metric_cfg is not None:
+ metric_func = build_metric(metric_cfg)
+ else:
+ metric_func = None
+
+ # # initialize trainer
+ trainer = BaseTrainer(
+ config["Trainer"],
+ model,
+ train_dataloader=train_loader,
+ val_dataloader=val_loader,
+ optimizer=optimizer,
+ lr_scheduler=lr_scheduler,
+ compute_metric_func_dict=metric_func,
+ )
+
+ if config["Global"].get("do_train", True):
+ trainer.train()
+ if config["Global"].get("do_eval", False):
+ logger.info("Evaluating on validation set")
+ time_info, loss_info, metric_info = trainer.eval(val_loader)
+ if config["Global"].get("do_test", False):
+ logger.info("Evaluating on test set")
+ time_info, loss_info, metric_info = trainer.eval(test_loader)
diff --git a/jointContribution/README.md b/jointContribution/README.md
new file mode 100644
index 00000000..9f4f5928
--- /dev/null
+++ b/jointContribution/README.md
@@ -0,0 +1 @@
+This directory is mainly used for sample libraries and model reproduction.
diff --git a/jointContribution/mattergen/LICENSE b/jointContribution/mattergen/LICENSE
new file mode 100644
index 00000000..9e841e7a
--- /dev/null
+++ b/jointContribution/mattergen/LICENSE
@@ -0,0 +1,21 @@
+ MIT License
+
+ Copyright (c) Microsoft Corporation.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
diff --git a/jointContribution/mattergen/MODEL_CARD.md b/jointContribution/mattergen/MODEL_CARD.md
new file mode 100644
index 00000000..7a7cfc1b
--- /dev/null
+++ b/jointContribution/mattergen/MODEL_CARD.md
@@ -0,0 +1,176 @@
+---
+license: mit
+license_link: https://opensource.org/license/mit
+
+arxiv: 2312.03687
+language:
+- en
+tags:
+- materials-science
+- generative-ai
+- materials-discovery
+---
+
+# MatterGen
+
+
+
+MatterGen is a generative model for inorganic materials design.
+
+## Model Details
+
+### Model Description
+
+
+
+MatterGen is a generative model for inorganic materials design. It is a diffusion model which jointly predicts a material’s atomic fractional coordinates, elements, as well as unit cell lattice vectors. Besides unconditional generation of material candidates, MatterGen can also be trained or fine-tuned for conditional generation based on target property values, e.g., bulk modulus, chemical system, or magnetic density.
+
+- **Developed by:** Materials Design Team, Microsoft Research AI for Science
+- **Model type:** Diffusion model
+- **License:** MIT
+
+### Model Sources
+
+
+
+- **Repository:** https://github.com/microsoft/mattergen
+- **Paper:** https://arxiv.org/abs/2312.03687
+
+## Uses
+
+
+
+### Direct Use
+
+
+
+1. Generate inorganic materials candidates without property condition.
+2. Fine-tune the base model on user-provided data with property-labeled materials.
+3. Generate inorganic materials candidates with target property, e.g., bulk modulus, chemical system, magnetic density, or user-defined target properties after fine-tuning.
+
+
+### Out-of-Scope Use
+
+
+
+* Generate materials with more than 20 atoms inside the unit cell.
+* Generate organic crystals or non-crystalline materials.
+* Generate crystals containing noble gas elements, radioactive elements, or elements with atomic number greater than 84 – these elements were removed from the training data.
+
+## Bias, Risks, and Limitations
+
+
+
+MatterGen was only trained on and evaluated on up to 20 atoms inside the unit cell; more atoms are currently not supported. MatterGen’s training data is materials below 0.1 eV/atoms below the reference convex hull. Therefore, it is expected that the fraction of generated materials on or below the convex hull is significantly lower than the fraction of materials within 0.1 eV/atom above the convex hull.
+
+
+### Recommendations
+
+
+
+The performance on property-guided generation heavily depends on the quality and quantity of the property labels used to train MatterGen. For extreme property values where there are few training structures with similar values, the performance may degrade.
+
+For fine-tuning the model on a new property, use a sufficient amount of labeled property data for training, i.e., at least several thousands of labeled structures. Also ensure good coverage of property values in the range of values which are intended for property-guided generation.
+
+## How to Get Started with the Model
+
+Clone the [repository](https://github.com/microsoft/mattergen) and follow the README instructions.
+
+## Training Details
+
+### Training Data
+
+
+
+MatterGen was trained on crystalline materials from the following data sources:
+1. MP (https://next-gen.materialsproject.org/; v2022.10.28, Creative Commons Attribution 4.0 International License), an open-access resource containing DFT-relaxed crystal structures obtained from a variety of sources, but largely based upon experimentally-known crystals.
+2. The Alexandria dataset (https://alexandria.icams.rub.de/; Creative Commons Attribution 4.0 International License), an open-access resource containing DFT-relaxed crystal structures from a variety of sources, including a large quantity of hypothetical crystal structures generated by ML methods or other algorithmic means.
+To train MatterGen, we select only structures with up to 20 atoms and whose energy above hull is below 0.1 eV/atom. Further, we remove structures that contain noble gas elements, elements with atomic number higher than 84 (which includes most radioactive elements), or the radioactive elements “Tc” and “Pm” from the training data. For more information, see paper, Supplementary C.1.
+
+### Training Procedure
+
+
+
+#### Preprocessing
+
+We relax structures from the above data sources with DFT and select only those structures whose energy above the combined convex hull is below 0.1 eV/atom. MatterGen is trained solely on primitive structures. We further select only structures with up to 20 atoms inside the unit cell. We use the Niggli reduction to preprocess the unit cell lattices, followed by the polar decomposition to ensure the lattice matrices are symmetric matrices. See the paper for more detailed information.
+
+#### Training Hyperparameters
+
+* Starting learning rate 1e-4, reduces successively by a factor of 0.6 when training loss does not reduce within 100 epochs, up to 1e-6.
+* Batch size 512
+* float32 precision
+
+#### Speeds, Sizes, Times
+
+
+
+* MatterGen contains 46.8M parameters
+* One training epoch of around 600K training samples takes around 6 minutes on 8 NVIDIA A100 GPUs
+* Sampling 1,000 structures takes around two hours using a single NVIDIA V100 GPU
+
+
+## Evaluation
+
+
+
+### Testing Data, Factors & Metrics
+
+
+#### Metrics
+
+
+
+MatterGen was evaluated on unconditional generation across the following metrics:
+* The percentage of stable, novel, and unique (S.U.N.) structures among 1,024 generated samples.
+ - Stable means a structure’s energy is less than 0.1 eV/atom above the reference convex hull
+ - Novel means a structure does not match any structure in our reference dataset with the disordered structure matcher presented in the paper.
+ - Unique means that there is no other structure among the generated ones which matches a given structure.
+* The average root mean square distance (RMSD) of generated structures and their DFT-relaxed local energy minima, measured in Angstrom.
+
+
+### Results
+
+MatterGen achieves 38.57 % S.U.N. rate among generated structures, and the average RMSD of its samples is 0.021 Angstrom. For more details see Section 2.2 of the MatterGen paper.
+We also evaluate MatterGen on property-conditioned generation.
+• For generation conditioned on chemical system, MatterGen produces 83 % S.U.N. structures on well-explored chemical systems, 65 % on partially explored systems, and 49 % on unexplored chemical systems. For more details, see Section 2.3 of the MatterGen paper.
+• Conditioning on a bulk modulus value of 400 GPa, MatterGen produces 106 S.U.N. structures with > 400 GPa bulk modulus given a budget of 180 DFT property calculations. For more details, see Section 2.4 of the MatterGen paper.
+• Conditioning on magnetic density of > 0.2 Angstrom-3, MatterGen produces 18 S.U.N. structures complying with the condition given a budget of 180 DFT property calculations. For more details, see Section 2.4 of the MatterGen paper.
+
+#### Summary
+
+MatterGen is able to produce novel, unique, and stable material candidates both with and without property conditions. For property-guided generation, MatterGen is able to produce S.U.N. structures with extreme property values such as 400 GPa bulk modulus, where there are only two such structures in the labeled reference set. MatterGen outperforms both classical as well as recent deep generative model baselines. For more details on the performance of MatterGen, see the paper.
+
+## Technical Specifications
+
+### Model Architecture and Objective
+
+The model architecture is based on GemNet (Gasteiger et al. 2021).
+
+## Citation
+
+
+
+**BibTeX:**
+```bibtex
+@article{zeni2023mattergen,
+ title={Mattergen: a generative model for inorganic materials design},
+ author={Zeni, Claudio and Pinsler, Robert and Z{\"u}gner, Daniel and Fowler, Andrew and Horton, Matthew and Fu, Xiang and Shysheya, Sasha and Crabb{\'e}, Jonathan and Sun, Lixin and Smith, Jake and others},
+ journal={arXiv preprint arXiv:2312.03687},
+ year={2023}
+}
+```
+
+**APA:**
+
+Zeni, C., Pinsler, R., Zügner, D., Fowler, A., Horton, M., Fu, X., ... & Xie, T. (2023). Mattergen: a generative model for inorganic materials design. arXiv preprint arXiv:2312.03687.
+
+
+## Model Card Authors
+
+Daniel Zügner (dzuegner@microsoft.com)
+
+## Model Card Contact
+
+Daniel Zügner (dzuegner@microsoft.com)
+Tian Xie (tianxie@microsoft.com)
\ No newline at end of file
diff --git a/jointContribution/mattergen/NOTICE b/jointContribution/mattergen/NOTICE
new file mode 100644
index 00000000..dc28ea14
--- /dev/null
+++ b/jointContribution/mattergen/NOTICE
@@ -0,0 +1,10443 @@
+NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This software incorporates material from third parties.
+Microsoft makes certain open source code available at https://3rdpartysource.microsoft.com,
+or you may send a check or money order for US $5.00, including the product name,
+the open source component name, platform, and version number, to:
+
+Source Code Compliance Team
+Microsoft Corporation
+One Microsoft Way
+Redmond, WA 98052
+USA
+
+Notwithstanding any other terms, you may reverse engineer this software to the extent
+required to debug changes to any libraries licensed under the GNU Lesser General Public License.
+
+---------------------------------------------------------
+
+aiohappyeyeballs 2.4.4 - 0BSD AND BSD-3-Clause AND LicenseRef-scancode-unknown-license-reference AND PSF-2.0 AND Python-2.0
+
+
+Copyright (c) 1995-2001 Corporation for National Research Initiatives
+Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands
+Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Python Software Foundation
+
+0BSD AND BSD-3-Clause AND LicenseRef-scancode-unknown-license-reference AND PSF-2.0 AND Python-2.0
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+absl-py 2.1.0 - Apache-2.0
+
+
+Copyright 2017 The Abseil Authors
+Copyright 2018 The Abseil Authors
+Copyright 2021 The Abseil Authors
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+aiohttp 3.11.11 - Apache-2.0
+
+
+Copyright Fedor Indutny, 2018
+Copyright aio-libs contributors
+copyright f project contributors
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+aiosignal 1.3.2 - Apache-2.0
+
+
+copyright 2013-2019, aiosignal contributors
+Copyright 2013-2019 Nikolay Kim and Andrew Svetlov
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+arrow 1.3.0 - Apache-2.0
+
+
+Copyright 2023 Chris Smith
+copyright 2023, Chris Smith
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+asttokens 3.0.0 - Apache-2.0
+
+
+copyright 2023, Grist Labs
+Copyright 2016 Grist Labs, Inc.
+Copyright 2023, Grist Labs, Inc.
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+async-timeout 5.0.1 - Apache-2.0
+
+
+Copyright 2016-2020 aio-libs collaboration
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+bcrypt 4.2.1 - Apache-2.0
+
+
+Copyright 2013-2024
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+bleach 6.2.0 - Apache-2.0
+
+
+Copyright (c) 2014-2017, Mozilla Foundation
+Copyright (c) 2006-2013 James Graham and other contributors
+copyright 2012-2015, James Socol 2015-2017, Mozilla Foundation
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+clarabel 0.9.0 - Apache-2.0
+
+
+(c) Paul Goulart
+Copyright 2022 University of Oxford Control Group
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+cython 3.0.11 - Apache-2.0
+
+
+(c) Copyright CNRI
+(c) Real 17.0 Imag
+Copyright (c) 2005 Carl Friedrich Bolz
+Copyright (c) 1995 Sun Microsystems, Inc.
+Copyright (c) 2010-2011, IPython Development Team
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+docker-pycreds 0.4.0 - Apache-2.0
+
+
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+fire 0.7.0 - Apache-2.0
+
+
+Copyright 2013 Google LLC.
+Copyright 2015 Google LLC.
+Copyright 2017 Google Inc.
+Copyright 2018 Google LLC.
+Copyright (c) 2018 Google Inc.
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+frozenlist 1.5.0 - Apache-2.0
+
+
+copyright 2013, frozenlist contributors
+Copyright 2013-2019 Nikolay Kim and Andrew Svetlov
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+lazy-model 0.2.0 - Apache-2.0
+
+
+Copyright 2022 Roman
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+msgpack 1.1.0 - Apache-2.0
+
+
+Copyright (c) 2009 Naoki INADA
+Copyright (c) 2008-2010 FURUHASHI Sadayuki
+Copyright (c) 2008-2011 INADA Naoki
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+multidict 6.1.0 - Apache-2.0
+
+
+Copyright 2016 Andrew Svetlov and aio-libs contributors
+copyright 2016, Andrew Svetlov and aio-libs contributors
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+osqp 0.6.7.post3 - Apache-2.0
+
+
+Copyright (c) 2012, Timothy A. Davis
+Copyright (c) 2013, Timothy A. Davis
+Copyright (c) Timothy A. Davis, Patrick R. Amestoy, and Iain S. Duff
+(c) Bartolomeo Stellato, Goran Banjac University of Oxford - Stanford University
+Copyright (c), 1996-2015, Timothy A. Davis, Patrick R. Amestoy, and Iain S. Duff
+Copyright (c) 1996-2013 by Timothy A. Davis, Patrick R. Amestoy, and Iain S. Duff
+Copyright (c) 2004 by Timothy A. Davis, Patrick Amestoy, Iain S. Duff, John K. Reid
+(c) Bartolomeo Stellato, Goran Banjac print University of Oxford - Stanford University
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+overrides 7.7.0 - Apache-2.0
+
+
+Copyright 2016 Keunhong Lee
+Copyright 2019 Mikko Korpela
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+petname 2.6 - Apache-2.0
+
+
+Copyright 2014 Dustin Kirkland
+Copyright (c) 2013 Casey Marshall
+Copyright (c) 2019 Dustin Kirkland
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+propcache 0.2.1 - Apache-2.0
+
+
+copyright f'2016, Andrew Svetlov, project
+Copyright 2016-2021, Andrew Svetlov and aio-libs team
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pyarrow 18.1.0 - Apache-2.0
+
+
+Copyright 2011 Kitware, Inc.
+Copyright 2012 Cloudera Inc.
+Copyright Contributors to the pythoncapi_compat project.
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pydeck 0.9.1 - Apache-2.0
+
+
+Copyright (c) 2015, Mapbox
+Copyright (c) 2016, Mapbox
+copyright 2011 Google Inc.
+Copyright 2020 Daniel Wirtz
+Copyright (c) 2008 Apple Inc.
+Copyright (c) 2014 Adam Krebs
+Copyright (c) 2016-17 Karl Cheng
+Copyright (c) 2016 Jorik Tangelder
+Copyright 2009 The Closure Library
+Copyright (c) 2014-2017, PhosphorJS
+Copyright (c) 2014-2018, PhosphorJS
+Copyright (c) 2014-2019, PhosphorJS
+Copyright (c) Microsoft Corporation
+(c) gr Halfwidth and Fullwidth Forms
+Copyright 2022 Foursquare Labs, Inc.
+Copyright (c) Uber Technologies, Inc.
+(c) 2013 Daniel Wirtz
+Copyright (c) Jupyter Development Team
+(c) 2015 Adam Krebs, Jimmy Yuen Ho Wong
+(c) Dean McNamee , 2012
+Copyright (c) 2018-2019 HERE Europe B.V.
+Copyright (c) 2015 Uber Technologies, Inc.
+Copyright (c) 2017 Uber Technologies, Inc.
+Copyright (c) 2019 Uber Technologies, Inc.
+Copyright 2009 The Closure Library Authors
+Copyright (c) 2016, AJ ONeal
+Copyright (c) 2017, Jupyter Development Team
+Copyright 2013 Daniel Wirtz
+Copyright (c) 2015-2017 Uber Technologies, Inc.
+Copyright (c) 2014-2016, Jupyter Development Team
+Copyright (c) 2014-2017, Jupyter Development Team
+Copyright (c) 2015 - 2017 Uber Technologies, Inc.
+Copyright (c) 2015 - 2018 Uber Technologies, Inc.
+Copyright (c) 2015 - 2019 Uber Technologies, Inc.
+Copyright 2018-2019, 2022 Uber Technologies, Inc.
+Copyright OpenJS Foundation and other contributors
+Copyright 2020 vis.gl, a Series of LF Projects, LLC
+Copyright (c) 2013 Stephen Oney, http://jsep.from.so
+Copyright (c) 2010-2015 Jeremy Ashkenas, DocumentCloud
+Copyright (c) 2019, Michael Fogleman, Vladimir Agafonkin
+Copyright (c) 2016-2017 Mohamad Moneimne and Contributors
+Copyright (c) 2012-2016, Jon Atkins
+Copyright (c) 2016-2021, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
+(c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors Backbone
+(c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors Underscore
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pymongo 4.10.1 - Apache-2.0
+
+
+Copyright 2015 MongoDB, Inc.
+Copyright 2016 MongoDB, Inc.
+Copyright 2017 MongoDB, Inc.
+Copyright 2018 MongoDB, Inc.
+Copyright 2009-2015 MongoDB, Inc.
+Copyright 2010-2015 MongoDB, Inc.
+Copyright 2011-2015 MongoDB, Inc.
+Copyright 2013-2016 MongoDB, Inc.
+Copyright 2014-2015 MongoDB, Inc.
+Copyright 2014-2016 MongoDB, Inc.
+Copyright 2009-present MongoDB, Inc.
+Copyright 2010-present MongoDB, Inc.
+Copyright 2011-present MongoDB, Inc.
+Copyright 2012-present MongoDB, Inc.
+Copyright 2013-present MongoDB, Inc.
+Copyright 2014-present MongoDB, Inc.
+Copyright 2015-present MongoDB, Inc.
+Copyright 2016-present MongoDB, Inc.
+Copyright 2017-present MongoDB, Inc.
+Copyright 2018-present MongoDB, Inc.
+Copyright 2019-present MongoDB, Inc.
+Copyright 2020-present MongoDB, Inc.
+Copyright 2021-present MongoDB, Inc.
+Copyright 2022-Present MongoDB, Inc.
+Copyright 2022-present MongoDB, Inc.
+Copyright 2023-Present MongoDB, Inc.
+Copyright 2023-present MongoDB, Inc.
+Copyright 2024-Present MongoDB, Inc.
+Copyright 2024-present MongoDB, Inc.
+Copyright 2007-2011 by the Sphinx team
+Copyright (c) 2007-2010 Michael G Schwern
+Copyright (c) 2006-2013 Alexander Chemeris
+copyright MongoDB, Inc. 2008-present. MongoDB, Mongo
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pynacl 1.5.0 - Apache-2.0
+
+
+(c) 2013-2019, Frank Denis
+Copyright 2013-2018 .format
+Copyright 2009 Colin Percival
+Copyright (c) 1994 X Consortium
+Copyright (c) 2015 Thomas Pornin
+Copyright 2013 Alexander Peslyak
+Copyright (c) 2013-2021 Frank Denis
+Copyright (c) 2013-2019 The libsodium
+Copyright 2012,2013 Alexander Peslyak
+Copyright 2005,2007,2009 Colin Percival
+Copyright (c) 2019 Reini Urban
+Copyright (c) 2011 Free Software Foundation, Inc.
+Copyright (c) 2014 Free Software Foundation, Inc.
+Copyright (c) 2021 Free Software Foundation, Inc.
+Copyright (c) 2017 David Seifert
+Copyright 1992-2021 Free Software Foundation, Inc.
+Copyright (c) 2008 Alan Woodland
+Copyright (c) 2008 Guido U. Draheim
+Copyright (c) 2019 Marc Stevens
+Copyright (c) 1994-2020 Free Software Foundation, Inc.
+Copyright (c) 1996-2013 Free Software Foundation, Inc.
+Copyright (c) 1996-2015 Free Software Foundation, Inc.
+Copyright (c) 1996-2020 Free Software Foundation, Inc.
+Copyright (c) 1997-2020 Free Software Foundation, Inc.
+Copyright (c) 1999-2013 Free Software Foundation, Inc.
+Copyright (c) 1999-2020 Free Software Foundation, Inc.
+Copyright (c) 2001-2020 Free Software Foundation, Inc.
+Copyright (c) 2002-2020 Free Software Foundation, Inc.
+Copyright (c) 2003-2020 Free Software Foundation, Inc.
+Copyright (c) 2004-2015 Free Software Foundation, Inc.
+Copyright (c) 2004-2020 Free Software Foundation, Inc.
+Copyright (c) 2006-2020 Free Software Foundation, Inc.
+Copyright (c) 2008-2013 Free Software Foundation, Inc.
+Copyright (c) 2009-2020 Free Software Foundation, Inc.
+Copyright (c) 2010-2015 Free Software Foundation, Inc.
+Copyright (c) 2011-2020 Free Software Foundation, Inc.
+Copyright (c) 2011 Daniel Richard G.
+Copyright (c) 2011 Maarten Bosmans
+Copyright 2013 Donald Stufft and individual contributors
+Copyright 2014 Donald Stufft and individual contributors
+Copyright 2016 Donald Stufft and individual contributors
+Copyright 2017 Donald Stufft and individual contributors
+Copyright 2018 Donald Stufft and individual contributors
+Copyright 2020 Donald Stufft and individual contributors
+copyright 2013, Donald Stufft and Individual Contributors
+Copyright (c) 2008 Steven G. Johnson
+Copyright (c) 2010 Diego Elio Petteno
+Copyright (c) 2004, 2011-2015 Free Software Foundation, Inc.
+Copyright 2013-2017 Donald Stufft and individual contributors
+Copyright 2013-2018 Donald Stufft and individual contributors
+Copyright 2013-2019 Donald Stufft and individual contributors
+Copyright 2016-2019 Donald Stufft and individual contributors
+Copyright (c) 1996-2001, 2003-2015 Free Software Foundation, Inc.
+Copyright (c) 2008 John Darrington
+Copyright (c) 2015 Enrico M. Crisostomo
+Copyright (c) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, Inc.
+Copyright (c) 2004-2005, 2007-2008, 2011-2015 Free Software Foundation, Inc.
+Copyright (c) 2004-2005, 2007-2009, 2011-2015 Free Software Foundation, Inc.
+Copyright (c) 2004-2005, 2007, 2009, 2011-2015 Free Software Foundation, Inc.
+Copyright (c) 2014, 2015, 2016 Philip Withnall
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+python-dateutil 2.9.0.post0 - Apache-2.0
+
+
+copyright 2019, dateutil
+Copyright 2017- dateutil contributors
+Copyright (c) 2015- - dateutil contributors
+Copyright 2017- Paul Ganssle
+Copyright (c) 2015- - Paul Ganssle
+Copyright (c) 2014-2016 - Yaron de Leeuw
+Copyright (c) 2003-2011 - Gustavo Niemeyer
+Copyright (c) 2012-2014 - Tomi Pievilainen
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pytorch-lightning 2.0.6 - Apache-2.0
+
+
+Copyright Lightning AI.
+Copyright The Lightning AI team
+Copyright (c) 2018- time.strftime
+Copyright (c) 2022- time.strftime
+Copyright 2018-2021 William Falcon
+Copyright 2020 The PyTorch Lightning team and Microsoft Corporation
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+qdldl 0.1.7.post5 - Apache-2.0
+
+
+Copyright (c) 2012, Timothy A. Davis
+Copyright (c) 2013, Timothy A. Davis
+Copyright 2020 Paul Goulat, Bartolomeo Stellato, Goran Banjac
+Copyright (c) Timothy A. Davis, Patrick R. Amestoy, and Iain S. Duff
+Copyright (c), 1996-2015, Timothy A. Davis, Patrick R. Amestoy, and Iain S. Duff
+Copyright (c) 1996-2013 by Timothy A. Davis, Patrick R. Amestoy, and Iain S. Duff
+Copyright (c) 2004 by Timothy A. Davis, Patrick Amestoy, Iain S. Duff, John K. Reid
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+requests 2.32.3 - Apache-2.0
+
+
+Copyright Kenneth Reitz
+Copyright 2019 Kenneth Reitz
+copyright (c) 2012 by Kenneth Reitz
+copyright (c) 2017 by Kenneth Reitz
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+s3transfer 0.10.4 - Apache-2.0
+
+
+Copyright 2016 Amazon.com, Inc. or its affiliates
+Copyright 2017 Amazon.com, Inc. or its affiliates
+Copyright 2018 Amazon.com, Inc. or its affiliates
+Copyright 2019 Amazon.com, Inc. or its affiliates
+Copyright 2021 Amazon.com, Inc. or its affiliates
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+streamlit 1.41.1 - Apache-2.0
+
+
+(c) Zeno Rocha
+(c) Kyle Simpson
+(c) Sindre Sorhus
+(c) 2020 Denis Pushkarev
+(c) http://www.esri.com>
+Copyright 2009 The Closure
+Copyright 2020 Daniel Wirtz
+(c) 2017-2021 Joachim Wester
+(c) 2017-2022 Joachim Wester
+Copyright (c) 2014-2018 Khan
+(c) 2009-2016 Michael Leibman
+Copyright (c) 2018 Jed Watson
+Steven Levithan (c) 2007-2017
+Steven Levithan (c) 2008-2017
+Steven Levithan (c) 2009-2017
+Steven Levithan (c) 2010-2017
+Steven Levithan (c) 2012-2017
+(c) Cure53 and other contributors
+Copyright (c) 2016 Jorik Tangelder
+Copyright 2018 John Madhavan-Reese
+Copyright (c) Microsoft Corporation
+(c) 2013 Daniel Wirtz
+Copyright (c) 2014-2015, Jon Schlinkert
+Copyright (c) 2009-2010 Design Science, Inc.
+Copyright (c) Facebook, Inc. and its affiliates
+Copyright (c) JS Foundation and other contributors
+Copyright OpenJS Foundation and other contributors
+Copyright jQuery Foundation and other contributors
+Copyright (c) 2016 Federico Zivolo and contributors
+Copyright (c) 2001, Janko Hauser
+Copyright (c) 2008-Present, IPython Development Team
+(c) 2009-2010, Design Science, Inc.
+Copyright (c) 2002-2022 - ProphICy Semiconductor, Inc.
+Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)
+Copyright (c) 2001, Nathaniel Gray
+Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc.
+Copyright (c) 2014-2018 Khan Academy
+copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc
+(c) 2019 Josh Johnson https://github.com/jshjohnson/Choices
+Copyright (c) 2010 Three Dub Media - http://threedubmedia.com
+Copyright (c) 2012 - 2022, Anaconda, Inc., and Bokeh Contributors
+Copyright (c) 2017 Benjamin Van Ryseghem
+Copyright (c) 2001-2007, Fernando Perez
+(c) http://www.esri.com> ESRI ,'ortoInstaMaps type:raster,'tiles' https://tilemaps.icgc.cat/mapfactory/wmts/orto_8_12/CAT3857
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+tenacity 9.0.0 - Apache-2.0
+
+
+Copyright 2013 Ray
+Copyright 2013-2014 Ray
+Copyright 2017 Elisey Zanko
+Copyright 2016 Joshua Harlow
+Copyright 2016 Julien Danjou
+Copyright 2016 Etienne Bersac
+Copyright 2016-2018 Julien Danjou
+Copyright 2016-2021 Julien Danjou
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+tornado 6.4.2 - Apache-2.0
+
+
+Copyright 2009 Facebook
+Copyright 2011 Facebook
+Copyright 2012 Facebook
+Copyright 2014 Facebook
+Copyright 2015 The Tornado Authors
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+tzdata 2024.2 - Apache-2.0
+
+
+Copyright (c) 2020, Paul Ganssle
+copyright 2020, Python Software Foundation
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+websocket-client 1.8.0 - Apache-2.0
+
+
+Copyright 2024 engn33r
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+yarl 1.18.3 - Apache-2.0
+
+
+copyright f'2016, Andrew Svetlov, project
+Copyright 2016-2021, Andrew Svetlov and aio-libs team
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+
+
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+
+
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+
+
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+
+
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+
+
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+
+
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+
+
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+
+
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+
+
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+
+you may not use this file except in compliance with the License.
+
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+
+distributed under the License is distributed on an "AS IS" BASIS,
+
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+See the License for the specific language governing permissions and
+
+limitations under the License.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+packaging 24.2 - Apache-2.0 AND BSD-2-Clause
+
+
+Copyright (c) 2017-present Ofek Lev
+Copyright (c) Donald Stufft and individual contributors
+
+Apache-2.0 AND BSD-2-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+prometheus-client 0.21.1 - Apache-2.0 AND BSD-2-Clause
+
+
+Copyright 2015 The Prometheus Authors
+Copyright (c) 2005-2016, Michele Simionato
+
+Apache-2.0 AND BSD-2-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+fonttools 4.55.3 - Apache-2.0 AND BSD-3-Clause AND MIT AND OFL-1.1
+
+
+Copyright 2017
+Copyright 2018
+Copyright c 2015
+COPYRIGHT STRING.
+(c) 2024 Unicode(r), Inc.
+Copyright 2011 Google Inc.
+Copyright 2013 Google Inc.
+Copyright 2015 Google Inc.
+Copyright 2016 Google Inc.
+Copyright 2019 Google Inc.
+Copyright 2023 Google Inc.
+(c) 2010 by Pablo Impallari
+Copyright 2013 Google, Inc.
+Copyright (c) 2000 BeOpen.com
+Copyright 2017 by Jens Kutilek
+Copyright 2021 Behdad Esfahbod
+Copyright 2023 Behdad Esfahbod
+Copyright (c) 2015 by FontTools
+Copyright 2015-2021 Google LLC.
+Copyright (c ) 2015 by FontTools
+Copyright 2008 The Bungee Project
+Copyright 2021 The Qahiri Project
+Copyright (c) 2009 Type Supply LLC
+Copyright (c) 2017 Just van Rossum
+(c) 2002 Adobe Systems Incorporated
+Copyright (c) 2010 by Pablo Impallari
+Copyright (c) 2015-2019 Belleve Invis
+Copyright 2010-2020 The Amiri Project
+Copyright (c) 2013-2014 Lennart Regebro
+Copyright (c) 2015-2019 The Mada Project
+Copyright 2015 Adobe System Incorporated
+Copyright (c) 2004-2022 SIL International
+Copyright 2014 Adobe Systems Incorporated
+Copyright (c) 2018 Adobe systems Co., Ltd.
+(c) 2014-2021 Adobe (http://www.adobe.com/)
+(c) 2014 - 2023 Adobe (http://www.adobe.com/)
+Copyright (c) 2002 Adobe Systems Incorporated
+Portions copyright (c) 1990 by Elsevier, Inc.
+(c) 2010 by Pablo Impallari. www.impallari.com
+Copyright (c) 2012-2019 The Libertinus Project
+copyright (c) 2005-2016, The RoboFab Developers
+Copyright (c) 2001-2010 by the STI Pub Companies
+Copyright (c) 2001-2011 by the STI Pub Companies
+Copyright 2010 - 2012 Adobe Systems Incorporated
+Portions copyright (c) 2009-2012 by Khaled Hosny
+copyright 2020, Just van Rossum, Behdad Esfahbod
+Copyright 2002-2019 Adobe (http://www.adobe.com/)
+Copyright 2014-2021 Adobe (http://www.adobe.com/)
+Copyright 2015-2021 The Aref Ruqaa Project Authors
+Copyright 1998, Just van Rossum
+Portions copyright (c) 1998-2003 by MicroPress, Inc.
+(c) Copyright 1994-1997 Summer Institute of Linguistics
+Copyright (c) 2010 by Pablo Impallari. www.impallari.com
+Copyright (c) 2015-2020 Belleve Invis (belleve@typeof.net)
+Copyright c 1997, 2009, 2011 American Mathematical Society
+(c) 2010, Pablo Impallari (www.impallari.com impallari@gmail.com)
+Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam
+(c) 2010 - 2012 Adobe Systems Incorporated (http://www.adobe.com/)
+Copyright (c) 1995-2001 Corporation for National Research Initiatives
+Copyright (c) 1999-2004 Just van Rossum, LettError (just@letterror.com)
+Copyright 2014, 2015 Adobe Systems Incorporated (http://www.adobe.com/)
+Copyright (c) 2010, Pablo Impallari (www.impallari.com impallari@gmail.com)
+Copyright (c) 2014, 2015 Adobe Systems Incorporated (http://www.adobe.com/)
+Copyright 2014, 2015, 2016 Adobe Systems Incorporated (http://www.adobe.com/)
+Copyright (c) 1997, 2009, 2011 American Mathematical Society http://www.ams.org
+Copyright 2015-2021 The Aref Ruqaa Project Authors (https://github.com/aliftype/aref-ruqaa)
+Copyright 2017 The Roboto Flex Project Authors (https://github.com/TypeNetwork/Roboto-Flex)
+Copyright 2017 The Roboto Flex Project Authors (https://github.com/TypeNetwork/Roboto-Flex)Roboto
+
+Apache-2.0 AND BSD-3-Clause AND MIT AND OFL-1.1
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+grpcio 1.69.0 - Apache-2.0 AND BSD-3-Clause AND MPL-2.0
+
+
+Copyright 2015 gRPC
+Copyright 2016 gRPC
+Copyright 2017 gRPC
+Copyright 2018 gRPC
+Copyright 2019 gRPC
+Copyright 2020 gRPC
+Copyright 2021 gRPC
+Copyright 2022 gRPC
+Copyright 2023 gRPC
+Copyright 2024 gRPC
+Copyright 2005 Nokia
+(c) 2006 Entrust, Inc.
+Copyright 2019 The gRPC
+Copyright 2020 The gRPC
+Copyright 2021 The gRPC
+Copyright 2021 the gRPC
+Copyright 2023 The gRPC
+Copyright 2024 The gRPC
+IsAlpha (c) IsDigit (c)
+IsLower (c) IsUpper (c)
+Copyright 2015-2016 gRPC
+Copyright 2022 Google LLC
+Copyright 2005 Google Inc.
+Copyright 2008 Google Inc.
+Copyright 2009 Google Inc.
+Copyright 2010 Google Inc.
+Copyright 2015 Google Inc.
+Copyright 2016 Brian Smith
+Copyright 2016 Google Inc.
+Copyright 2017 Google Inc.
+Copyright 2018 Google LLC.
+Copyright 2019 Google LLC.
+Copyright 2020 Google Inc.
+Copyright 2021 Google Inc.
+Copyright 2023 Google LLC.
+Copyright 2024 Google LLC.
+Copyright 2005, Google Inc.
+Copyright 2006, Google Inc.
+Copyright 2007, Google Inc.
+Copyright 2008, Google Inc.
+Copyright 2009, Google Inc.
+Copyright 2010, Google Inc.
+Copyright 2013, Google Inc.
+Copyright 2015, Google Inc.
+Copyright 2016, Google Inc.
+Copyright 2018, Google Inc.
+Copyright 2018, Google LLC.
+Copyright 2019, Google Inc.
+Copyright 2019, Google LLC.
+Copyright 2021 gRPC Authors
+Copyright 2022 gRPC Authors
+Copyright 2023 gRPC Authors
+(c) 1999 Entrust.net Limited
+(c) 2009 Entrust, Inc. - for
+(c) 2012 Entrust, Inc. - for
+(c) 2015 Entrust, Inc. - for
+Copyright (c) 2020, Arm Ltd.
+Copyright (c) 2003 Mark Adler
+Copyright (c) 2018 Mark Adler
+Copyright (c) 2021 Permission
+Copyright (c) 2011, RTFM, Inc.
+Copyright (c) 2015, Intel Inc.
+Copyright (c) 2023, Google LLC
+Copyright (c) 2024, Google LLC
+Copyright 1995-2023 Mark Adler
+Copyright 2004 The RE2 Authors
+Copyright 2005 Dominick Meglio
+Copyright 2005 The RE2 Authors
+Copyright 2006 The RE2 Authors
+Copyright 2007 The RE2 Authors
+Copyright 2008 The RE2 Authors
+Copyright 2009 The RE2 Authors
+Copyright 2010 The RE2 Authors
+Copyright 2016 The RE2 Authors
+Copyright 2018 The RE2 Authors
+Copyright (c) 2014, Google Inc.
+Copyright (c) 2015, Google Inc.
+Copyright (c) 2016, Google Inc.
+Copyright (c) 2017, Google Inc.
+Copyright (c) 2018, Google Inc.
+Copyright (c) 2019, Google Inc.
+Copyright (c) 2020, Google Inc.
+Copyright (c) 2021, Google Inc.
+Copyright (c) 2022, Google Inc.
+Copyright (c) 2023, Google Inc.
+Copyright (c) 2024, Google Inc.
+Copyright 2003-2009 Google Inc.
+Copyright 2003-2010 Google Inc.
+Copyright 2018 The gRPC Authors
+Copyright 2019 The gRPC Authors
+Copyright 2020 The gRPC Authors
+Copyright 2021 The gRPC Authors
+Copyright 2022 The gRPC Authors
+Copyright 2023 The gRPC Authors
+Copyright 2024 The gRPC Authors
+Copyright (c) 2021 by Brad House
+Copyright (c) 1990-2000 Info-ZIP.
+Copyright 2005 by Dominick Meglio
+Copyright 2017 The Abseil Authors
+Copyright 2018 The Abseil Authors
+Copyright 2019 The Abseil Authors
+Copyright 2020 The Abseil Authors
+Copyright 2021 The Abseil Authors
+Copyright 2022 The Abseil Authors
+Copyright 2023 The Abseil Authors
+Copyright 2024 The Abseil Authors
+Copyright (c) 1995-2003 Mark Adler
+Copyright (c) 1995-2008 Mark Adler
+Copyright (c) 1995-2017 Mark Adler
+Copyright (c) 1995-2019 Mark Adler
+Copyright (c) 1995-2022 Mark Adler
+Copyright (c) 1995-2023 Mark Adler
+Copyright (c) 2002-2013 Mark Adler
+Copyright (c) 2003-2010 Mark Adler
+Copyright (c) 2004-2017 Mark Adler
+Copyright (c) 2004-2019 Mark Adler
+Copyright (c) 2003, 2012 Mark Adler
+Copyright (c) 2004, 2010 Mark Adler
+Copyright (c) 2011, 2016 Mark Adler
+Copyright (c) 2012-2020 Yann Collet
+Copyright 1999-2005 The RE2 Authors
+Copyright 2001-2010 The RE2 Authors
+Copyright 2002-2009 The RE2 Authors
+Copyright 2003-2009 The RE2 Authors
+Copyright 2006-2007 The RE2 Authors
+Copyright 2006-2008 The RE2 Authors
+Copyright 2010 The Chromium Authors
+Copyright 2011 The Chromium Authors
+Copyright 2014 The Chromium Authors
+Copyright 2015 The Chromium Authors
+Copyright 2016 The Chromium Authors
+Copyright 2017 The Chromium Authors
+Copyright 2018 The Chromium Authors
+Copyright 2019 The Chromium Authors
+Copyright 2021 The Chromium Authors
+Copyright 2022 The Chromium Authors
+Copyright 2023 The Chromium Authors
+Copyright (c) 2007-2008 Even Rouault
+Copyright (c) 2017, the HRSS authors
+Copyright (c) 2004 by Daniel Stenberg
+Copyright (c) 2005 by Dominick Meglio
+Copyright (c) 2008 by Daniel Stenberg
+Copyright (c) 2012, Intel Corporation
+Copyright (c) 2014, Intel Corporation
+Copyright 2002 Sun Microsystems, Inc.
+Copyright (c) 1998-2005 Gilles Vollant
+Copyright (c) 1999 The OpenSSL Project
+Copyright (c) 2000 The OpenSSL Project
+Copyright (c) 2001 The OpenSSL Project
+Copyright (c) 2003 The OpenSSL Project
+Copyright (c) 2004 The OpenSSL Project
+Copyright (c) 2005 The OpenSSL Project
+Copyright (c) 2006 The OpenSSL Project
+Copyright (c) 2008 The OpenSSL Project
+Copyright (c) 2010 The OpenSSL Project
+Copyright (c) 2011 The OpenSSL Project
+Copyright (c) 2012 The OpenSSL Project
+Copyright (c) 2013 The OpenSSL Project
+Copyright (c) 2014 The OpenSSL Project
+Copyright (c) 2015 The OpenSSL Project
+Copyright (c) 2019 by Andrew Selivanov
+Copyright (c) 2012 The Chromium Authors
+Copyright (c) 1995-2003, 2010 Mark Adler
+Copyright (c) 1995-2005, 2010 Mark Adler
+Copyright (c) 1995-2011, 2016 Mark Adler
+Copyright (c) 1995-2017 Jean-loup Gailly
+Copyright (c) 1995-2018 Jean-loup Gailly
+Copyright (c) 1995-2021 Jean-loup Gailly
+holder is Tim Hudson (tjh@cryptsoft.com)
+Copyright (c) 2002 by Lucent Technologies
+Copyright (c) 2003, 2012, 2013 Mark Adler
+Copyright (c) 2004, 2005, 2012 Mark Adler
+Copyright (c) 2004, 2008, 2012 Mark Adler
+Copyright (c) 2004-2009 by Daniel Stenberg
+Copyright (c) 2004-2010 by Daniel Stenberg
+Copyright (c) 2004-2011 by Daniel Stenberg
+Copyright (c) 2004-2017 by Daniel Stenberg
+Copyright (c) 2005 - 2010, Daniel Stenberg
+Copyright (c) 2005-2013 by Daniel Stenberg
+Copyright (c) 2007-2013 by Daniel Stenberg
+Copyright (c) 2008-2013 by Daniel Stenberg
+Copyright (c) 2009-2013 by Daniel Stenberg
+Copyright (c) 2010-2012 by Daniel Stenberg
+Copyright (c) 2010-2013 by Daniel Stenberg
+Copyright 2017 The OpenSSL Project Authors
+Copyright (c) 1998-2000 The OpenSSL Project
+Copyright (c) 1998-2001 The OpenSSL Project
+Copyright (c) 1998-2002 The OpenSSL Project
+Copyright (c) 1998-2003 The OpenSSL Project
+Copyright (c) 1998-2004 The OpenSSL Project
+Copyright (c) 1998-2005 The OpenSSL Project
+Copyright (c) 1998-2006 The OpenSSL Project
+Copyright (c) 1998-2007 The OpenSSL Project
+Copyright (c) 1998-2011 The OpenSSL Project
+Copyright (c) 1999-2002 The OpenSSL Project
+Copyright (c) 1999-2003 The OpenSSL Project
+Copyright (c) 1999-2004 The OpenSSL Project
+Copyright (c) 1999-2005 The OpenSSL Project
+Copyright (c) 1999-2007 The OpenSSL Project
+Copyright (c) 1999-2008 The OpenSSL Project
+Copyright (c) 2000-2002 The OpenSSL Project
+Copyright (c) 2000-2003 The OpenSSL Project
+Copyright (c) 2000-2005 The OpenSSL Project
+Copyright (c) 2001-2011 The OpenSSL Project
+Copyright (c) 2002-2006 The OpenSSL Project
+Copyright (c) 2005, 2013 by Dominick Meglio
+Copyright (c) 2006, Network Resonance, Inc.
+Copyright (c) 2006,2007 The OpenSSL Project
+Copyright (c) 2004 - 2011 by Daniel Stenberg
+Copyright (c) 2004 - 2012 by Daniel Stenberg
+Copyright (c) 2004 - 2013 by Daniel Stenberg
+Copyright (c) 2009 - 2013 by Daniel Stenberg
+Copyright (c) 2009 - 2021 by Daniel Stenberg
+Copyright (c) 2017 - 2018 by Christian Ammer
+Copyright Amazon.com, Inc. or its affiliates
+Copyright (c) 2005, 2012, 2018, 2023 Mark Adler
+Copyright (c) 2007, 2008, 2012, 2018 Mark Adler
+Copyright 1995-2016 The OpenSSL Project Authors
+Copyright 1995-2017 The OpenSSL Project Authors
+Copyright 2000-2016 The OpenSSL Project Authors
+Copyright 2006-2017 The OpenSSL Project Authors
+Copyright 2006-2019 The OpenSSL Project Authors
+Copyright 2006-2021 The OpenSSL Project Authors
+Copyright 2007-2016 The OpenSSL Project Authors
+Copyright 2012-2016 The OpenSSL Project Authors
+Copyright 2013-2016 The OpenSSL Project Authors
+Copyright 2014-2016 The OpenSSL Project Authors
+Copyright 2014-2020 The OpenSSL Project Authors
+Copyright 2015-2016 The OpenSSL Project Authors
+Copyright (c) 2010 Jeremy Lal
+Copyright (c) 2012 Marko Kreen
+Copyright (c) 2018 The Android Open Source Project
+Copyright 2020 by
+Copyright 1995-2023 Jean-loup Gailly and Mark Adler
+Copyright (c) 1995-2006, 2011, 2016 Jean-loup Gailly
+Copyright (c) 1995-2016 Jean-loup Gailly, Mark Adler
+Copyright (c) 1995-2022 Jean-loup Gailly, Mark Adler
+Copyright (c) 1995, 1996, 1997, and 1998 WIDE Project
+Copyright (c) 2003, 2005, 2008, 2010, 2012 Mark Adler
+Copyright (c) 2004, 2008, 2012, 2016, 2019 Mark Adler
+Copyright (c) 1995-1997 Eric Young (eay@cryptsoft.com)
+Copyright (c) 1995-1998 Eric Young (eay@cryptsoft.com)
+(c) 2006 Entrust, Inc. Label Entrust Root Certification
+Copyright (c) 1995-2023 Jean-loup Gailly and Mark Adler
+Copyright (c) 1996,1999 by Internet Software Consortium
+Copyright (c) 1996-1999 by Internet Software Consortium
+Copyright (c) 2004 by Internet Systems Consortium, Inc.
+Copyright (c) 2009 by Jakub Hrozek
+Copyright (c) 2022, Robert Nagy
+(c) MaxCasefoldGroup raise unicode.Error 'casefold group
+Copyright (c) 2012 by Gilles Chehade
+Copyright (c) 1995-2006, 2010, 2011, 2016 Jean-loup Gailly
+Copyright (c) 2017 by John Schember
+Copyright (c) 2018 by John Schember
+Copyright 1998 by the Massachusetts Institute of Technology
+Copyright 2000 by the Massachusetts Institute of Technology
+Copyright (c) 2009-2010 Mathias Svensson http://result42.com
+Copyright (c) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler
+Copyright 1998, 2011 by the Massachusetts Institute of Technology
+Copyright (c) 1987-2001 The Regents of the University of California
+Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll
+Copyright (c) 1997 Christian Michelsen Research AS Advanced Computing
+Copyright (c) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler
+Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology
+Copyright (c) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson
+Copyright (c) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant
+(c) 1999 Entrust.net Limited Label Entrust.net Premium 2048 Secure Server CA Serial
+Copyright (c) 1998-2010 Gilles Vollant (minizip) http://www.winimage.com/zLibDll/minizip.html
+
+Apache-2.0 AND BSD-3-Clause AND MPL-2.0
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+json5 0.10.0 - Apache-2.0 AND MIT
+
+
+Copyright 2014 Dirk Pranke
+Copyright 2014 Google Inc.
+Copyright 2015 Google Inc.
+Copyright 2017 Google Inc.
+Copyright 2019 Google Inc.
+Copyright (c) 2014 Milo Yip
+Copyright (c) 2017 Wes McKinney
+Copyright (c) Microsoft Corporation
+
+Apache-2.0 AND MIT
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+types-python-dateutil 2.9.0.20241206 - Apache-2.0 AND MIT
+
+
+Copyright (c) 2015 Jukka Lehtosalo and contributors
+
+Apache-2.0 AND MIT
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+contextlib2 21.6.0 - Apache-2.0 AND Python-2.0
+
+
+copyright u'2021, Nick Coghlan
+Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Python Software Foundation
+
+Apache-2.0 AND Python-2.0
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+watchdog 6.0.0 - Apache-2.0 AND Python-2.0
+
+
+Copyright 2012-2014 Google, Inc.
+Copyright 2012-2018 Google, Inc.
+Copyright 2011-2012 Yesudeep Mangalapilly
+Copyright 2014-2018 Thomas Amland & contributors
+Copyright 2010-2011 Malthe Borch
+copyright COPYRIGHT The version info for the project
+Copyright 2018-2024 Mickael Schoentgen & contributors
+Copyright 2011-2012 Yesudeep Mangalapilly
+Copyright 2011-2024 Yesudeep Mangalapilly, Mickael Schoentgen & contributors
+
+Apache-2.0 AND Python-2.0
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+sniffio 1.3.1 - Apache-2.0 OR (Apache-2.0 AND MIT)
+
+
+
+Apache-2.0 OR (Apache-2.0 AND MIT)
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+cryptography 44.0.0 - Apache-2.0 OR BSD-3-Clause OR (Apache-2.0 AND BSD-3-Clause)
+
+
+Copyright 2013-2024
+Copyright 2015 The Go Authors
+Copyright (c) Individual contributors
+Copyright (c) 2005-2020, NumPy Developers
+copyright 2013-2024, Individual Contributors
+
+Apache-2.0 OR BSD-3-Clause OR (Apache-2.0 AND BSD-3-Clause)
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+isodate 0.7.2 - BSD-2-Clause
+
+
+Copyright (c) 2009, Gerhard Weis
+Copyright (c) 2009-2018, Gerhard Weis and contributors
+Copyright (c) 2021, Hugo van Kemenade and contributors
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+nest-asyncio 1.6.0 - BSD-2-Clause
+
+
+Copyright (c) 2018-2020, Ewald de Wit
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pygments 2.19.1 - BSD-2-Clause
+
+
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+sympy 1.13.3 - BSD-2-Clause
+
+
+(c) A. B
+(c) A . B
+(c) Fix Qasm
+Dagger (c), True
+Copyright 2016, latex2sympy
+copyright SymPy Development
+Copyright (c) 2009-2023, PyDy
+Copyright (c) 2014 Matthew Rocklin
+copyright 2015, SymPy Development Team
+Copyright (c) 2006-2014 SymPy developers
+Copyright (c) 2001, 2002 Vasil Yaroshevich
+Copyright (c) 2006-2023 SymPy Development Team
+Copyright (c) 2008 Jens Rasch
+Copyright (c) 2006-2018 SymPy Development Team, 2013-2023 Sergey B Kirpichev
+(c) Copyright 2000-2003 Symbolic Computation Laboratory, University of Western Ontario, London, Canada N6A
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+terminado 0.18.1 - BSD-2-Clause
+
+
+copyright 2014, Thomas Kluyver
+Copyright (c) Jupyter Development Team
+Copyright (c) 2012-2013, Christopher Jeffrey
+Copyright (c) 2014-, Jupyter development team
+Copyright (c) 2014, Ramalingam Saravanan
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+webencodings 0.5.1 - BSD-2-Clause
+
+
+Copyright 2012 by Simon Sapin
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+wrapt 1.17.0 - BSD-2-Clause
+
+
+Copyright (c) 2013-2023, Graham Dumpleton
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+babel 2.16.0 - BSD-2-Clause AND BSD-3-Clause
+
+
+copr Coptegr Crir
+copyright in Babel
+copr Kopteschr Tsch
+copr Koptschr Creer
+copr Koptyskr Creer
+copr Koptischr Creer
+Foobar. Copyright (c)
+Copyright 2013 by Lennart
+Copyright (c) 2006 Ufsoft.org
+Copyright of Edgewall Software
+copyright 2024, The Babel Team
+Copyright (c) 2007 FooBar, Inc.
+Copyright (c) 2007 ORGANIZATION
+Copyright (c) 2007 THE PACKAGE'S
+Copyright (c) (year)d Foo Company
+Copyright (c) 1990-2003 Foo Company
+Copyright (c) 1990-2003 ORGANIZATION
+Copyright (c) 2010 by Armin Ronacher
+Copyright (c) 2004-2024 Unicode, Inc.
+Copyright (c) 2013-2024 by the Babel Team
+copyright (c) 2013-2024 by the Babel Team
+copyright (c) 2015-2024 by the Babel Team
+Copyright (c) time.strftime Y FooBar, Inc.
+Copyright (c) 2007 - 2011 by Edgewall Software
+Copyright 2010 by Armin Ronacher. :license Flask Design
+Copyright (c) 2007-2011 Edgewall Software, 2013-2024 the Babel team
+POT for my really cool PROJECT project. Copyright (c) 1990-2003 ORGANIZATION
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+click 8.1.8 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright 2014 Pallets
+copyright 2014 Pallets
+Copyright 2001-2006 Gregory P. Ward
+Copyright 2002-2006 Python Software Foundation
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+comm 0.2.2 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2022, Jupyter
+Copyright (c) IPython Development Team
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+cycler 0.12.1 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2015, matplotlib project
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+decorator 5.1.1 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2005-2018, Michele Simionato
+Copyright (c) 2005-2020, Michele Simionato
+Copyright (c) 2005-2021, Michele Simionato
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+dill 0.3.9 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2011 by science+computing
+copyright d, The Uncertainty Quantification Foundation
+Copyright (c) 2008-2010 Marius Gedminas
+Copyright (c) 2009 PiCloud, Inc.
+Copyright (c) 2010 Stefano Rivera
+Copyright (c) 2004-2016 California Institute of Technology
+Copyright (c) 2008-2015 California Institute of Technology
+Copyright (c) 2008-2016 California Institute of Technology
+Copyright (c) 2012, Regents of the University of California
+Copyright (c) 2024 The Uncertainty Quantification Foundation
+Copyright (c) 2016-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2018-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2019-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2021-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2022-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2023-2024 The Uncertainty Quantification Foundation
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+fastjsonschema 2.21.1 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2018, Michal Horejsek
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+h5py 3.12.1 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2009 Darren Dale
+Copyright (c) 2015, Daniel Greenfeld
+Copyright 2006-2007 by The HDF Group
+Copyright (c) 2009-2022, Marcel Hellkamp
+Copyright (c) 2006-2008 Alexander Chemeris
+Copyright (c) 2002, 2003, 2004 Francesc Altet
+Copyright 2001-2013 Python Software Foundation
+Copyright (c) 2005, 2006, 2007 Carabos Coop. V.
+copyright 2014, Andrew Collette and contributors
+Copyright (c) 2008 Andrew Collette http://h5py.org
+Copyright (c) 2009 Andrew Collette http://h5py.org
+Copyright (c) 2008 Andrew Collette and contributors
+Copyright 2008-2013 Andrew Collette and contributors
+Copyright 2008-2019 Andrew Collette and contributors
+Copyright 2008-2020 Andrew Collette and contributors
+Copyright (c) 2008-2009 Andrew Collette http://h5py.org
+Copyright (c) 2000-2007 Marc Alexander Lehmann
+Copyright (c) 2000-2008 Marc Alexander Lehmann
+Copyright 1998-2006 by the Board of Trustees of the University of Illinois
+Copyright (c) 2008-2013 Andrew Collette and contributors http://www.h5py.org
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+idna 3.10 - BSD-2-Clause AND BSD-3-Clause
+
+
+(c) 2019 Unicode(r), Inc.
+Copyright (c) 2013-2024, Kim Davies and contributors
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+ipykernel 6.29.5 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) IPython Development Team
+copyright 2015, IPython Development Team
+Copyright (c) 2015, IPython Development Team
+Copyright (c) 2012 The IPython Development Team
+Copyright (c) 2008-2011 The IPython Development Team
+Copyright (c) 2010-2011 The IPython Development Team
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+ipywidgets 8.1.5 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) Vidar Tonaas Fauske
+Copyright (c) IPython Development Team
+Copyright (c) Jupyter Development Team
+Copyright (c) 2015 Project Jupyter Contributors
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jinja2 3.1.5 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright 2007 Pallets
+copyright 2007 Pallets
+(c) Copyright 2008 by http://domain.invalid/>
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+joblib 1.4.2 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright 2009 Brian Quinlan
+Copyright 2017, Thomas Moreau
+Copyright 2010, Gael Varoquaux
+Copyright 2012, Olivier Grisel
+(c) 2008-2021, Joblib developers
+Copyright (c) 2008 Gael Varoquaux
+Copyright (c) 2009 Gael Varoquaux
+Copyright (c) 2010 Gael Varoquaux
+Copyright (c) 2008-2021, The joblib
+Copyright (c) 2010-2011 Gael Varoquaux
+Copyright 2007-2022 by the Sphinx team
+copyright 2008-2021, Joblib developers
+(c) JS Foundation and other contributors
+Copyright JS Foundation and other contributors
+copyright https://docs.python.org/3/copyright.html
+Copyright (c) 2012, Regents of the University of California
+Copyright (c) 2012-now, CloudPickle developers and contributors
+Copyright (c) 2009 PiCloud, Inc.
+(c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors Underscore
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jsonlines 4.0.0 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2016, wouter bolsterlee
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jsonpointer 3.0.0 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2011 Stefan Kogl
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jupyter-lsp 2.2.5 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) Microsoft
+Copyright (c) 2016 Chad Smith
+Copyright 2018 Palantir Technologies, Inc.
+Copyright (c) 2022, jupyter-lsp contributors
+Copyright (c) 2012-2019 David Anthoff, Zac Nugent and other contributors (https://github.com/JuliaLang/Julia.tmbundle/contributors, https://github.com/julia-vscode/julia-vscode/contributors)
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+kiwisolver 1.4.8 - BSD-2-Clause AND BSD-3-Clause
+
+
+copyright 2018-2024, Nucleic team
+Copyright (c) 2001. Addison-Wesley
+Copyright (c) 2019-2021 Martin Ankerl
+Copyright (c) 2001 by Andrei Alexandrescu
+Copyright (c) 2013-2024, Nucleic Development Team
+Copyright (c) 2019-2024, Nucleic Development Team
+Copyright (c) 2020-2024, Nucleic Development Team
+Copyright (c) 2021-2024, Nucleic Development Team
+Copyright (c) 2023-2024, Nucleic Development Team
+Copyright (c) 2014-2024,, Nucleic Development Team
+Copyright 2000, 2004, 2005Adobe Systems Incorporated
+Copyright (c) 2019-2021 Martin Ankerl
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+markdown 3.7 - BSD-2-Clause AND BSD-3-Clause
+
+
+(c) 2004 Foo Corporation
+Copyright 2004 Manfred Stienstra
+Copyright The Python Markdown Project
+Copyright (c) 1999-2007 by Fredrik Lundh
+Copyright 2004, 2005, 2006 Yuri Takhteyev
+Copyright 2007-2019 The Python Markdown Project
+Copyright 2007-2021 The Python Markdown Project
+Copyright 2007-2022 The Python Markdown Project
+Copyright 2007-2023 The Python Markdown Project
+Copyright 2007-2024 The Python Markdown Project
+Copyright 2008-2014 The Python Markdown Project
+Copyright 2008-2024 The Python Markdown Project
+Copyright 2011-2014 The Python Markdown Project
+Copyright 2013-2014 The Python Markdown Project
+Copyright 2015-2018 The Python Markdown Project
+Copyright 2007, 2008 The Python Markdown Project
+Copyright 2008 Jack Miller (https://codezen.org/)
+Copyright Waylan Limberg (http://achinghead.com/)
+The Python-Markdown Project Copyright (c) 2010-2023
+Copyright 2008 Waylan Limberg (http://achinghead.com)
+Copyright 2009 Waylan Limberg (http://achinghead.com)
+Copyright 2011 Waylan Limberg (http://achinghead.com)
+Copyright 2011 Waylan Limberg (http://achinghead.com/)
+Copyright Tiago Serafim (https://www.tiagoserafim.com/)
+Copyright 2011 Brian Neal (https://deathofagremmie.com/)
+Copyright 2007-2008 Waylan Limberg (http://achinghead.com)
+Copyright (c) 2004, 2007 Chad Miller
+Copyright 2006-2008 Waylan Limberg (http://achinghead.com/)
+Copyright 2007-2008 Waylan Limberg (http://achinghead.com/)
+Copyright (c) 2003 John Gruber
+Copyright 2007-2008 Waylan Limberg (http://achinghead.com/) and Seemant Kulleen (http://www.kulleen.org/)
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+markupsafe 3.0.2 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright 2010 Pallets
+copyright 2010 Pallets
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+matplotlib-inline 0.1.7 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) IPython Development Team
+Copyright (c) 2019-2022, IPython Development Team
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+mpmath 1.3.0 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright 2013 Timo Hartmann (thartmann15 at gmail.com)
+Copyright (c) 2005-2021 Fredrik Johansson and mpmath contributors
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+multiprocess 0.70.17 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2006-2008, R Oudkerk
+Copyright (c) 2008-2016 California Institute of Technology
+Copyright (c) 2024 The Uncertainty Quantification Foundation
+Copyright (c) 2016-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2018-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2022-2024 The Uncertainty Quantification Foundation
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+nbformat 5.10.4 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) IPython Development Team
+Copyright (c) Jupyter Development Team
+copyright 2015, Jupyter Development Team
+Copyright (c) 2015-, Jupyter Development Team
+Copyright (c) 2013 The IPython Development Team
+Copyright (c) 2001-2015, IPython Development Team
+Copyright (c) 2008-2011 The IPython Development Team
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+networkx 3.4.2 - BSD-2-Clause AND BSD-3-Clause
+
+
+(c) Fcc Bcc
+Copyright (c) 2015 - Thomson Licensing, SAS
+Copyright 2011 Alex Levenson
+Copyright 2011 Reya Group
+Copyright 2011 Diederik van Liere
+Copyright (c) 2004-2024 NetworkX Developers Aric Hagberg Dan Schult
+Copyright (c) 2004-2024, NetworkX Developers Aric Hagberg Dan Schult
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+numpy 1.26.4 - BSD-2-Clause AND BSD-3-Clause
+
+
+(c) Jussi Pakkanen
+Copyright (c) 2017
+(c) Convert Chebyshev
+(c) Multiply a Hermite
+(c) Multiply a Laguerre
+(c) Multiply a Legendre
+(c) Multiply a Chebyshev
+Copyright (c) 2010 - 2019
+Copyright (c) 2018, Meson
+Copyright (c) 2022, Intel
+Copyright 2019 Red Hat, Inc.
+Copyright Absoft Corporation
+(c), True, True, False, False
+Copyright 2002 Pearu Peterson
+Copyright 2014 Jussi Pakkanen
+(c), False, False, False, True
+(c), False, False, True, False
+Copyright (c) 2012 Google Inc.
+Copyright (c) 2017 Dylan Baker
+Copyright 2017 Niklas Claesson
+Copyright (c) 2014 Ryan Juckett
+Copyright (c) 2013 THE PACKAGE'S
+Copyright 2011 by Enthought, Inc
+Copyright 2020 Intel Corporation
+Copyright 2022 Intel Corporation
+Copyright (c) 2011 Enthought, Inc
+Copyright (c) 2015 Pauli Virtanen
+Copyright (c) 2019 Kevin Sheppard
+Copyright 1999 2011 Pearu Peterson
+Copyright 2001-2005 Pearu Peterson
+Copyright (c) 2019 NumPy Developers
+Copyright (c) 2007 Cybozu Labs, Inc.
+Copyright (c) 2017 Intel Corporation
+Copyright (c) 2018 Intel Corporation
+Copyright (c) 2020 Intel Corporation
+Copyright (c) 2021 Intel Corporation
+Copyright (c) 2022 Intel Corporation
+Copyright (c) 2023 Intel Corporation
+Copyright (c) 2023, NumPy Developers
+Copyright (c) 2011 by Enthought, Inc.
+Copyright (c) 2014 Mathjax Consortium
+Copyright (c) 2015 Melissa E. O'Neill
+Copyright (c) 2015-2017 Martin Hensel
+Copyright (c) 2017 Arseny Maslennikov
+Copyright (c) 2018 Melissa E. O'Neill
+Copyright 1996-2023 Intel Corporation
+copyright 2008-2022, NumPy Developers
+copyright 2017-2018, NumPy Developers
+Copyright 2007-2018 by the Sphinx team
+Copyright (c) 2021 The Meson Developers
+Copyright 2011 present NumPy Developers
+Copyright (c) 2021 Microsoft Corporation
+Copyright 2010-2012, D. E. Shaw Research
+Copyright (c) 2005-2015, NumPy Developers
+Copyright (c) 2005-2017, NumPy Developers
+Copyright (c) 2005-2021, NumPy Developers
+Copyright (c) 2005-2023, NumPy Developers
+Copyright (c) 2017-2018 Intel Corporation
+Copyright (c) 2020-2021 Intel Corporation
+Copyright (c) 2020-2023 Intel Corporation
+Copyright (c) 2021-2022 Intel Corporation
+Copyright (c) 2022-2023 Intel Corporation
+Copyright 2013 The Meson development team
+Copyright 2015 The Meson development team
+Copyright 2016 The Meson development team
+Copyright 2017 The Meson development team
+Copyright 2018 The Meson development team
+Copyright 2019 The Meson development team
+Copyright 2019 The meson development team
+Copyright 2020 The Meson development team
+Copyright 2021 The Meson development team
+Copyright 2022 The Meson development team
+Copyright 2012-2020 Meson development team
+Copyright (c) 1993 by Sun Microsystems, Inc.
+Copyright (c) 2011-2014, The OpenBLAS Project
+Copyright (c) 2009-2017 The MathJax Consortium
+Copyright (c) 2010-2017 The MathJax Consortium
+Copyright (c) 2011-2015 The MathJax Consortium
+Copyright (c) 2011-2017 The MathJax Consortium
+Copyright (c) 2013-2017 The MathJax Consortium
+Copyright (c) 2014-2017 The MathJax Consortium
+Copyright (c) 2015-2017 The MathJax Consortium
+Copyright (c) 2016-2017 The MathJax Consortium
+Copyright 2012-2016 The Meson development team
+Copyright 2012-2017 The Meson development team
+Copyright 2012-2019 The Meson development team
+Copyright 2012-2020 The Meson development team
+Copyright 2012-2021 The Meson development team
+Copyright 2012-2022 The Meson development team
+Copyright 2012-2023 The Meson development team
+Copyright 2013-2014 The Meson development team
+Copyright 2013-2016 The Meson development team
+Copyright 2013-2017 The Meson development team
+Copyright 2013-2018 The Meson development team
+Copyright 2013-2019 The Meson development team
+Copyright 2013-2020 The Meson development team
+Copyright 2013-2021 The Meson development team
+Copyright 2013-2023 The Meson development team
+Copyright 2014-2016 The Meson development team
+Copyright 2014-2017 The Meson development team
+Copyright 2014-2019 The Meson development team
+Copyright 2014-2021 The Meson development team
+Copyright 2015-2016 The Meson development team
+Copyright 2015-2022 The Meson development team
+Copyright 2016-2017 The Meson development team
+Copyright 2016-2018 The Meson development team
+Copyright 2016-2021 The Meson development team
+Copyright 2016-2022 The Meson development team
+Copyright 2017-2021 The Meson development team
+Copyright 2019-2022 The meson development team
+Copyright 2021 The Meson development team from
+Copyright 2022 Mark Bolhuis
+Copyright (c) 2008 Ian Bicking and Contributors
+Copyright 2017, 2019 The Meson development team
+Copyright (c) 2005-2018 NVIDIA Corporation Built
+Copyright (c) 2010 The Android Open Source Project
+Copyright (c) 2021 2022, Scientific Python project
+Copyright 2015 Robert Kern
+Copyright (c) 2002-2017 Free Software Foundation, Inc.
+Copyright (c) 2010-2019 Free Software Foundation, Inc.
+Copyright 2014 Melissa O'Neill
+Copyright (c) Donald Stufft and individual contributors
+Copyright (c) 2007, 2011 David Schultz
+Copyright (c) 2006-2013 The University of Colorado Denver
+Copyright Absoft Corporation 1994-2002 Absoft Pro FORTRAN
+Copyright (c) 1995, 1996, 1997 Jim Hugunin, hugunin@mit.edu
+Copyright (c) 2003-2005, Jean-Sebastien Roy (js@jeannot.org)
+Copyright (c) 2000-2013 The University of California Berkeley
+Copyright (c) 2019 Takao Fujiwara
+Copyright (c) 2013 Gabriele Svelto
+Copyright (c) 2016 - 2019 Kim Walisch,
+Copyright (c) 2021 Intel Corporation project 'existing project
+Copyright 2016-2021 Matthew Brett, Isuru Fernando, Matti Picus
+Copyright (c) 2015-2021 Matthias Klumpp
+Copyright (c) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura
+Copyright (c) 2004-2018 Max-Planck-Society author Martin Reinecke
+Copyright (c) 2012 Stephen Montgomery-Smith
+Copyright 2021 The Meson development team SPDX-license-identifier
+Copyright (c) 2004, 2006 The Linux Foundation and its contributors
+Copyright 1999, 2000, 2001 Regents of the University of California
+Copyright (c) 2007 Free Software Foundation, Inc.
+Copyright (c) 2009 Free Software Foundation, Inc.
+Copyright (c) 2006, University of Georgia and Pierre G.F. Gerard-Marchant
+Copyright Absoft Corporation 1994-1998 mV2 Cray Research, Inc. 1994-1996 CF90
+Copyright 2011 present NumPy Developers. https://numpy.org/doc/stable/f2py/index.html
+Copyright (c) 2010 by Mark Wiebe (mwwiebe@gmail.com) The University of British Columbia
+Copyright (c) 2011 by Mark Wiebe (mwwiebe@gmail.com) The University of British Columbia
+Copyright (c) 2010-2011 by Mark Wiebe (mwwiebe@gmail.com) The University of British Columbia
+Copyright (c) 2009-2019 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
+Copyright (c) 1992-2013 The University of Tennessee and The University of Tennessee Research Foundation
+Copyright (c) 2022 Intel Corporation SPDX-License-Identifier BSD-3-Clause Authors Raghuveer Devulapalli
+Copyright (c) 2022 Intel Corporation SPDX-License-Identifier BSD-3-Clause Authors Liu Zhuan Tang Xi
+Copyright (c) 2021 Serge Sans Paille SPDX-License-Identifier BSD-3-Clause Authors Raghuveer Devulapalli Serge Sans Paille
+Copyright (c) 2021 Serge Sans Paille SPDX-License-Identifier BSD-3-Clause Authors Raghuveer Devulapalli Serge Sans Paille Liu Zhuan
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+omegaconf 2.3.0 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2018, Omry Yadan
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pandas 2.2.3 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2009', join
+Copyright (c) 1994 David Burren
+Copyright (c) 2014, Al Sweigart
+Copyright (c) 2011 Valentin Ochs
+Copyright (c) 2017 Anthony Sottile
+Copyright (c) 2005-2020 Rich Felker
+Copyright (c) 2015-2019 Jared Hobbs
+Copyright (c) 2017-2018 Arm Limited
+Copyright (c) 1999-2019, Arm Limited
+Copyright (c) 2002 Michael Ringgaard
+Copyright (c) 2003-2011 David Schultz
+Copyright (c) 2008 Stephen L. Moshier
+Copyright (c) 2010-2019 Keith Goodman
+Copyright (c) 2011 by Enthought, Inc.
+Copyright 2017- dateutil contributors
+Copyright (c) 2003-2009 Bruce D. Evans
+Copyright (c) 2001-2008 Ville Laurikari
+Copyright (c) 2003-2009 Steven G. Kargl
+Copyright (c) 1993,2004 Sun Microsystems
+Copyright (c) 2012, Lambda Foundry, Inc.
+Copyright (c) 2014, Electronic Arts Inc.
+Copyright (c) 2019 Bottleneck Developers
+Copyright (c) 1994 Sun Microsystems, Inc.
+Copyright (c) 2005-2011, NumPy Developers
+Copyright (c) 2005-2023, NumPy Developers
+Copyright (c) 2012, PyData Development Team
+Copyright (c) 2015- - dateutil contributors
+Copyright (c) 2016, PyData Development Team
+Copyright (c) 2020, PyData Development Team
+Copyright (c) 2023, PyData Development Team
+Copyright (c) 2011-2012, Lambda Foundry, Inc.
+Copyright 2017- Paul Ganssle
+Copyright (c) 2011-2012, PyData Development Team
+Copyright (c) 2011-2023, Open source contributors
+Copyright (c) 2008 The Android Open Source Project
+Copyright (c) 2008-2011 AQR Capital Management, LLC
+Copyright (c) 2015- - Paul Ganssle
+Copyright (c) 2007 Nick Galbreath nickg at modp dot com
+Copyright (c) Donald Stufft and individual contributors
+Copyright (c) 2014-2016 - Yaron de Leeuw
+Copyright (c) 2019 Hadley Wickham RStudio and Evan Miller
+Copyright (c) 2008- Attractive Chaos
+Copyright 2005, 2006, 2007 Nick Galbreath nickg at modp dot com
+Copyright (c) 2003-2011 - Gustavo Niemeyer
+Copyright (c) 1988-1993 The Regents of the University of California
+Copyright (c) 2011-2013, ESN Social Software AB and Jonas Tarnstrom
+Copyright (c) 2012-2014 - Tomi Pievilainen
+Copyright (c) 1995-2001 Corporation for National Research Initiatives
+Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands
+Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
+copyrighted by the Regents of the University of California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState Corporation
+Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Python Software Foundation
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pandocfilters 1.5.1 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2013 John MacFarlane
+Copyright (c) 2013, John MacFarlane
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+portalocker 2.10.1 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright 2022 Rick van Hattem
+Copyright (c) 2010 Kenneth Reitz
+Copyright 2010 by Armin Ronacher
+Copyright (c) 2012 Rick van Hattem
+Copyright (c) 2010 by Armin Ronacher
+Copyright 2010 by Armin Ronacher. :license Flask Design
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pox 0.3.5 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2010 Gael Varoquaux
+copyright d, The Uncertainty Quantification Foundation
+Copyright (c) 1997-2016 California Institute of Technology
+Copyright (c) 2004-2016 California Institute of Technology
+Copyright (c) 2013-2016 California Institute of Technology
+Copyright (c) 2024 The Uncertainty Quantification Foundation
+Copyright (c) 2016-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2018-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2022-2024 The Uncertainty Quantification Foundation
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+ppft 1.7.6.9 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2005-2012 Vitalii Vanovschi
+Copyright (c) 2005-2012, Vitalii Vanovschi
+copyright d, The Uncertainty Quantification Foundation
+Copyright (c) 2012-2016 California Institute of Technology
+Copyright (c) 2015-2016 California Institute of Technology
+Copyright (c) 2024 The Uncertainty Quantification Foundation
+Copyright (c) 2016-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2018-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2022-2024 The Uncertainty Quantification Foundation
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+prompt-toolkit 3.0.48 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2014, Jonathan Slenders
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pycparser 2.22 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2008-2022, Eli Bendersky
+Copyright (c) 2001-2017 David M. Beazley (Dabeaz LLC)
+David Beazley (http://www.dabeaz.com) Copyright (c) 2017
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+python-dotenv 1.0.1 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2014, Saurabh Kumar
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pyzmq 26.2.0 - BSD-2-Clause AND BSD-3-Clause
+
+
+(c) PyZMQ Developers
+(c) iMatix Corporation
+Copyright 2009 Facebook
+copyright of Boris Feld
+copyright of Chris Laws
+Copyright 2009, Facebook
+copyright of Frank Wiles
+copyright of Julian Taylor
+copyright of Thomas Kluyver
+Copyright 2010, Justin Riley
+copyright of Brian E. Granger
+copyright of Min Ragan-Kelley
+Copyright (c) PyZMQ Developers
+Copyright (c) 2010 Justin Riley
+Copyright (c) 2010 Brian Granger
+Copyright (c) 2010 Lisandro Dalcin
+Copyright (c) Stef van der Struijk
+Copyright (c) 2010 The IPython Team
+Copyright (c) 2022 PyZMQ Developers
+Copyright 2010, Andrew Gwozdziewycz
+Copyright (c) 2011- PyZMQ Developers
+Copyright (c) 2011-2012 Travis Cline
+Copyright (c) PyZMQ Development Team
+Copyright (c) 2012 Godefroid Chapelle
+Copyright (c) 2007-2010 iMatix Corporation
+Copyright (c) 2010 Brian Granger, Fernando Perez
+Copyright (c) 2010-2011 IPython Development Team
+Copyright 2010, Nikolaus Rath
+Copyright (c) 2010 Brian Granger, Min Ragan-Kelley
+copyright Brian E. Granger & Min Ragan-Kelley. OMQ
+Copyright (c) 2010 Brian E. Granger & Min Ragan-Kelley
+Copyright (c) 2010-2012 Brian Granger, Min Ragan-Kelley
+Copyright 2010, Brian E. Granger 2010, Min Ragan-Kelley
+Copyright (c) 2009-2012, Brian Granger, Min Ragan-Kelley
+Copyright (c) 2017-2019 SUSE LINUX GmbH, Nuernberg, Germany
+Copyright (c) 2003-2007 Robey Pointer
+Copyright 2007-2010, iMatix Corporation 2013 Brian Granger, Min Ragan-Kelley
+Copyright 2010-2011, Miguel Landaeta 2011-2014, Julian Taylor
+Copyright 2003-2007, Robey Pointer , 2010-2011, IPython Development Team
+Copyright 2010-2012, Brian Granger 2010-2013, Min Ragan-Kelley 2013 Felipe Cruz 2014 PyZMQ Developers
+Copyright 2010-2011, Brian E. Granger 2010, Andrew Gwozdziewycz 2010, Fernando Perez 2011, 2013, Min Ragan-Kelley
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+seaborn 0.13.2 - BSD-2-Clause AND BSD-3-Clause
+
+
+copyright f'2012- time.strftime
+Copyright (c) 2013 Eddy Petrisor
+Copyright (c) 2012 Alexei Boronine
+Copyright 2004-2005 by Enthought, Inc.
+Copyright (c) 2012-2023, Michael L. Waskom
+Copyright (c) 2010 ActiveState Software Inc.
+Copyright (c) 2005-2010 ActiveState Software Inc.
+Copyright , https://mwaskom.github.io/' Michael Waskom
+Copyright (c) Donald Stufft and individual contributors
+Copyright (c) 2001-2002 Enthought, Inc. 2003-2019, SciPy Developers
+Copyright (c) 2008 Stefan van der Walt , Pauli Virtanen
+Copyright (c) 2015 Min RK, Florian Rathgeber, Michael McNeil Forbes 2019 Casper da Costa-Luis
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+send2trash 1.8.3 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright 2017 Virgil Dupras
+Copyright (c) 2017, Virgil Dupras
+Copyright 2013 Hardcoded Software (http://www.hardcoded.net)
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+shapely 2.0.6 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2008, by Attractive Chaos
+Copyright (c) 2007, Sean C. Gillies. 2019, Casper van der Wel. 2007-2022, Shapely Contributors
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+spglib 2.5.0 - BSD-2-Clause AND BSD-3-Clause
+
+
+copyright 2009, Atsushi Togo
+Copyright (c) 2008 Atsushi Togo
+Copyright (c) 2010 Atsushi Togo
+Copyright (c) 2011 Atsushi Togo
+Copyright (c) 2012 Atsushi Togo
+Copyright (c) 2015 Atsushi Togo
+Copyright (c) 2016 Atsushi Togo
+Copyright (c) 2017 Atsushi Togo
+Copyright (c) 2023 Atsushi Togo
+Copyright (c) 2024, Spglib team
+Copyright (c) 2005 Atsushi Togo togo.atsushi@gmail.com
+Copyright (c) 2008 Atsushi Togo togo.atsushi@gmail.com
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+threadpoolctl 3.5.0 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2017, Intel Corporation
+(Copyright (c) 2017, Intel Corporation)
+Copyright (c) 2019, threadpoolctl contributors
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+tinycss2 1.4.0 - BSD-2-Clause AND BSD-3-Clause
+
+
+copyright Simon Sapin and contributors
+Copyright (c) 2013-2020, Simon Sapin and contributors
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+traitlets 5.14.3 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) Enthought, Inc.
+Copyright (c) 2010 Doug Hellmann
+Copyright (c) IPython Development Team
+Copyright (c) Jupyter Development Team
+Copyright 2007-2015 by the Sphinx team
+copyright 2015, The IPython Development Team
+Copyright (c) 2001-, IPython Development Team
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+uncertainties 3.2.2 - BSD-2-Clause AND BSD-3-Clause
+
+
+(c) 2010-2024, Eric O. LEBIGOT
+(c) 2009-2016 by Eric O. LEBIGOT
+(c) 2009-2024 by Eric O. LEBIGOT
+(c) 2010-2016 by Eric O. LEBIGOT
+Copyright (c) 2010-2020, Eric O. LEBIGOT (EOL)
+copyright f'2010- date.today .year, Eric O. LEBIGOT
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+werkzeug 3.1.3 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright 2007 Pallets
+copyright 2007 Pallets
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+widgetsnbextension 4.0.13 - BSD-2-Clause AND BSD-3-Clause
+
+
+Copyright (c) 2014 Dan Le
+Copyright (c) 2014 Adam Krebs
+Copyright (c) 2019 Leon Gersen
+Copyright (c) Vidar Tonaas Fauske
+Copyright (c) 2014-2017, PhosphorJS
+Copyright (c) 2014-2019, PhosphorJS
+Copyright (c) Microsoft Corporation
+Copyright (c) IPython Development Team
+Copyright (c) Jupyter Development Team
+(c) 2015 Adam Krebs, Jimmy Yuen Ho Wong
+Copyright (c) 2014-2017, Jon Schlinkert
+Copyright (c) 2015 Project Jupyter Contributors
+Copyright (c) 2019 Project Jupyter Contributors
+Copyright (c) 2014-2017, PhosphorJS Contributors
+Copyright OpenJS Foundation and other contributors
+Copyright (c) 2010-2015 Jeremy Ashkenas, DocumentCloud
+(c) 2010-2019 Jeremy Ashkenas and DocumentCloud Backbone
+(c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors Backbone
+
+BSD-2-Clause AND BSD-3-Clause
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+gitdb 4.0.12 - BSD-2-Clause AND BSD-3-Clause AND GPL-1.0-or-later
+
+
+Copyright (c) 2010, 2011 Sebastian Thiel and contributors
+Copyright (c) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors
+
+BSD-2-Clause AND BSD-3-Clause AND GPL-1.0-or-later
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+python-json-logger 3.2.1 - BSD-2-Clause AND BSD-3-Clause AND ISC AND Python-2.0
+
+
+Copyright (c) 2011, Zakaria Zajac
+Copyright (c) 2021, Timothee Mazzucotelli
+
+BSD-2-Clause AND BSD-3-Clause AND ISC AND Python-2.0
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+antlr4-python3-runtime 4.9.3 - BSD-3-Clause
+
+
+Copyright (c) 2012-2017 The ANTLR Project
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+contourpy 1.3.1 - BSD-3-Clause
+
+
+copyright 2021-2024, ContourPy
+Copyright (c) 2021-2024, ContourPy Developers
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+fsspec 2024.12.0 - BSD-3-Clause
+
+
+copyright 2018, Martin Durant
+Copyright (c) 2018, Martin Durant
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+gitpython 3.1.44 - BSD-3-Clause
+
+
+Copyright (c) 2008, 2009 Michael Trier and contributors
+Copyright (c) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors
+Copyright (c) 2008, 2009 Michael Trier and contributors, 2010-2015 Sebastian Thiel
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+httpcore 1.0.7 - BSD-3-Clause
+
+
+Copyright (c) 2020, Encode OSS Ltd (https://www.encode.io/)
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+httpx 0.28.1 - BSD-3-Clause
+
+
+Copyright (c) 2019, Encode OSS Ltd (https://www.encode.io/)
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+ipython 8.31.0 - BSD-3-Clause
+
+
+(c) Python and NumPy
+Copyright (c) 2000 Thomas Heller
+Copyright (c) 2010 Doug Hellmann
+Portions (c) 2009 by Robert Kern
+copyright 2007 by Armin Ronacher
+Copyright (c) 2014, Jonathan Slenders
+Copyright (c) 2015, Jonathan Slenders
+Copyright (c) IPython Development Team
+copyright The IPython Development Team
+Copyright (c) 2012 IPython Development Team
+Copyright (c) 2008, IPython Development Team
+Copyright (c) 2011, IPython Development Team
+Copyright (c) 2012, IPython Development Team
+Copyright (c) 2008 Pauli Virtanen
+Copyright (c) 2008 The IPython Development Team
+Copyright (c) 2011 The IPython Development Team
+Copyright (c) 2012 The IPython Development Team
+Copyright (c) 2013 The IPython Development Team
+Copyright (c) 2018 The IPython Development Team
+Copyright (c) 2004-2021 Holger Krekel and others
+Copyright (c) 2011, the IPython Development Team
+Copyright (c) 2012, the IPython Development Team
+Copyright (c) 2012- The IPython Development Team
+Copyright (c) 2013, the IPython Development Team
+Copyright (c) 2008-2011, IPython Development Team
+Copyright (c) 2010-2011, IPython Development Team
+Copyright (c) 2001 Janko Hauser
+Copyright (c) 2001, Janko Hauser
+Copyright (c) 2008-2011 The IPython Development Team
+Copyright (c) 2008-2012 The IPython Development Team
+Copyright (c) 2008-Present, IPython Development Team
+Copyright (c) 2009-2011 The IPython Development Team
+Copyright (c) 2010-2011 The IPython Development Team
+Copyright (c) 2001 Nathaniel Gray
+Copyright (c) 2001 Fernando Perez
+Copyright (c) 2001, Nathaniel Gray
+Copyright (c) 2005 Fernando Perez.
+Copyright (c) 2016 The IPython Team
+Copyright (c) 2001-2004 Fernando Perez
+Copyright (c) 2001-2005 Fernando Perez
+Copyright (c) 2001-2006 Fernando Perez
+Copyright (c) 2005-2006 Fernando Perez
+Copyright (c) 2001 Python Software Foundation, www.python.org
+Copyright (c) 2001-2007 Fernando Perez.
+Copyright (c) 2002-2006 Fernando Perez.
+Copyright (c) 2005-2006 Fernando Perez.
+Copyright (c) 2001, Fernando Perez
+Copyright (c) 2005 Jorgen Stenarson
+Copyright (c) 2001-2007, Fernando Perez
+Copyright (c) 2005-2006 Fernando Perez.
+Copyright (c) 2005 Fernando Perez Brian E Granger Benjamin Ragan-Kelley
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jupyter-client 8.6.3 - BSD-3-Clause
+
+
+Copyright (c) 2011- PyZMQ Developers
+Copyright (c) Jupyter Development Team
+copyright 2015, Jupyter Development Team
+Edits Copyright (c) 2010 The IPython Team
+Copyright (c) The Jupyter Development Team
+Copyright (c) 2015-, Jupyter Development Team
+Copyright (c) 2010-2011 IPython Development Team
+Copyright (c) 2001-2015, IPython Development Team
+Copyright (c) 2003-2007 Robey Pointer
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jupyter-core 5.7.2 - BSD-3-Clause
+
+
+Copyright (c) IPython Development Team
+Copyright (c) Jupyter Development Team
+copyright 2015, Jupyter Development Team
+Copyright (c) 2015-, Jupyter Development Team
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jupyter-events 0.11.0 - BSD-3-Clause
+
+
+copyright 2019, Project Jupyter
+Copyright (c) Jupyter Development Team
+Copyright (c) 2022-, Jupyter Development Team
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jupyter-server 2.15.0 - BSD-3-Clause
+
+
+Copyright (c) 2017 ORGANIZATION
+Copyright 2011-2019 Twitter, Inc.
+Copyright (c) Jupyter Development Team
+Copyright (c) 2015-, Jupyter Development Team
+Copyright (c) 2001-2015, IPython Development Team
+copyright 2020, Jupyter Team, https://jupyter.org
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jupyter-server-terminals 0.5.3 - BSD-3-Clause
+
+
+Copyright (c) Jupyter Development Team
+Copyright (c) 2021-, Jupyter Development Team
+copyright 2021, Jupyter Team, https://jupyter.org
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+mistune 3.1.0 - BSD-3-Clause
+
+
+(c) html' (c) AE D
+copyright 2019, Hsiaoming Yang
+Copyright (c) 2014, Hsiaoming Yang
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+nbclient 0.10.2 - BSD-3-Clause
+
+
+Copyright (c) IPython Development Team
+Copyright (c) Jupyter Development Team
+Copyright (c) 2020-, Jupyter Development Team
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+nbconvert 7.16.5 - BSD-3-Clause
+
+
+Copyright 2011-2016 Twitter, Inc.
+Copyright (c) IPython Development Team
+Copyright (c) Jupyter Development Team
+copyright 2015- s, Jupyter Development Team
+Copyright (c) 2017, Jupyter Development Team
+Copyright (c) 2015-, Jupyter Development Team
+Copyright (c) 2014 The IPython Development Team
+Copyright (c) 2013, the IPython Development Team
+Copyright (c) 2014-2017, PhosphorJS Contributors
+Copyright (c) 2016, the IPython Development Team
+Copyright (c) 2001-2015, IPython Development Team
+Copyright (c) 2014-2016, Jupyter Development Team
+Copyright (c) 2014-2017, Jupyter Development Team
+(c) Ivan Sagalaev Adapted from GitHub
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+notebook 7.3.2 - BSD-3-Clause
+
+
+(c) b.Vg
+(c) Sindre Sorhus
+copyright Koen Bok
+(c) 2011 Gary Court
+Copyright 2021 Mapbox
+Copyright (c) 2017, Vega
+Copyright (c) Felix Bohm
+Copyright 2011 Gary Court
+Copyright (c) 2017, Mapbox
+Copyright (c) Font Awesome
+Copyright 2019 Ron Buckton
+Copyright 2020 Google LLC.
+Copyright Gaetan Renaudeau
+Copyright (c) 2015 Treasure
+Copyright 2021 Mike Bostock
+(c) 2017-2021 Joachim Wester
+(c) 2017-2022 Joachim Wester
+Copyright (c) 2014 Alex Bell
+Copyright (c) 2017 Braintree
+Copyright 2001 Robert Penner
+Copyright 2015 Ricky Reusser
+Copyright 2015, Mike Bostock
+Copyright (c) 2011 Gary Court
+Copyright (c) 2015 JD Ballard
+Copyright (c) 2015 Josh Junon
+Copyright (c) 2018 Chris Holt
+Copyright (c) 2015 Dan Abramov
+Copyright (c) 2015 David Clark
+Copyright (c) 2023 Fadi Khadra
+Copyright (c) 2014 Athan Reines
+Copyright (c) 2015 Athan Reines
+(c) http://www.w3.org/1999/xhtml
+Copyright (c) 2013, Jason Davies
+Copyright (c) 2014. Athan Reines
+Copyright (c) 2015 Dmitry Ivanov
+Copyright (c) 2015. Athan Reines
+Copyright (c) 2017 Martin Hansen
+Copyright 2010-2015 Mike Bostock
+Copyright 2010-2020 Mike Bostock
+Copyright 2010-2021 Mike Bostock
+Copyright 2010-2022 Mike Bostock
+Copyright 2010-2023 Mike Bostock
+Copyright 2013-2021 Mike Bostock
+Copyright 2015-2016 Mike Bostock
+Copyright 2016-2021 Mike Bostock
+(c) Cure53 and other contributors
+Copyright (c) 2012 Heather Arthur
+Copyright (c) 2013 James Halliday
+Copyright (c) 2015 Shusaku Uesugi
+Copyright 2018 Vladimir Agafonkin
+Copyright (c) 2011 Fabrice Bellard
+Copyright 2008-2012 Charles Karney
+copyright (c) 2019 Denis Pushkarev
+Copyright (c) 2016 Adele Delamarche
+Copyright (c) 2017 Dmitry Soshnikov
+Copyright (c) 2018 Tamino Martinius
+Copyright (c) Microsoft Corporation
+Copyright 2012-2019 Michael Bostock
+(c) 2016-present Alexander Kuznetsov
+Athan Reines. kgryte@gmail.com. 2014
+Athan Reines. kgryte@gmail.com. 2015
+Copyright (c) 2014-2015 Athan Reines
+Copyright (c) 2017 Evgeny Poberezkin
+Copyright (c) 2020 Evgeny Poberezkin
+Copyright 2018-2021 Observable, Inc.
+Copyright (c) 2015-2023 Martin Hensel
+Copyright (c) 2015-present Evan Jacobs
+Copyright (c) 2016 Alexander Kuznetsov
+Copyright (c) 2020 by Marijn Haverbeke
+Copyright (c) Jupyter Development Team
+Copyright (c) 2014 The xterm.js authors
+Copyright (c) 2014-2017, Jon Schlinkert
+Copyright (c) 2016 typestyle Permission
+Copyright (c) 2021 @markedjs Permission
+Copyright (c) Font Awesome Font Awesome
+Copyright (c) 2016-present Sultan Tarimo
+Copyright (c) 2014 - 2022 Knut Sveidqvist
+Copyright (c) 2015-2021 Evgeny Poberezkin
+Copyright (c) 2013-present, Facebook, Inc.
+Copyright (c) 2014-present, Facebook, Inc.
+Copyright (c) 2019 iVis@Bilkent Permission
+(c) 2021-2023 Jupyter Notebook Contributors
+Copyright (c) Guillaume Potier. Distributed
+Copyright (c) 2014-2023, Lumino Contributors
+Copyright (c) 2013, 2014, 2020 Joachim Wester
+Copyright (c) 2014 The cheeriojs contributors
+Copyright (c) 2015-, Jupyter Development Team
+Copyright (c) 2018-present, iamkun Permission
+Copyright (c) 2021 Kiel University and others
+copyright JupyterLab development team. import
+Copyright (c) 2015 Unshift.io, Arnout Kazemier
+Copyright (c) 2017 Kiel University and others.
+Copyright JS Foundation and other contributors
+Copyright (c) 2013, 2014, 2015 P'unk Avenue LLC
+Copyright (c) Facebook, Inc. and its affiliates
+Copyright 2013 Andrey Sitnik
+Copyright 2017 Andrey Sitnik
+Copyright 2023 Dr.-Ing. Mario Heiderich, Cure53
+Copyright (c) 2014-2017, PhosphorJS Contributors
+Copyright (c) 2014-2019, PhosphorJS Contributors
+Copyright (c) 2001-2015, IPython Development Team
+Copyright (c) 2012-2018 Aseem Kishore, and others
+Copyright (c) 2016-2018, The Cytoscape Consortium
+Copyright (c) 2016-2023, The Cytoscape Consortium
+Copyright (c) Isaac Z. Schlueter and Contributors
+Copyright Joyent, Inc. and other Node contributors
+Copyright (c) 2012 Mathias Bynens
+Copyright (c) 2013 Mathias Bynens
+Copyright (c) 2015, Dan Flettre
+Copyright (c) 2012 Kris Kowal
+Copyright 2016 Interactive Data Lab and contributors
+Copyright (c) 2013 Roman Shtylman
+Copyright (c) 2013 Thaddee Tyl
+Copyright (c) 2019 - present, iVis@Bilkent. Permission
+Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
+Copyright (c) 2014, 2016, 2017, 2019, 2021 Simon Lydell
+Copyright (c) 2015 Titus Wormer
+Copyright (c) 2016 Titus Wormer
+Copyright (c) 2020 Titus Wormer
+Copyright (c) 2021 Titus Wormer
+Copyright (c) 2011 Heather Arthur
+Copyright (c) 2012 Yusuke Suzuki
+Copyright i-Vis Research Group, Bilkent University, 2007
+Copyright (c) 2004, John Gruber http://daringfireball.net
+Copyright (c) 2019-present Fabio Spampinato, Andrew Maney
+Copyright 2010, 2011, Chris Winberry
+Copyright (c) 2011 Ariya Hidayat
+Copyright (c) 2012 Ariya Hidayat
+Copyright (c) 2013 Ariya Hidayat
+Copyright (c) 2019 Kevin Jahns
+Copyright (c) 2018-2022 TypeFox GmbH (http://www.typefox.io)
+Copyright (c) 2010-2020 Robert Kieffer and other contributors
+Copyright (c) 2011-2016 Heather Arthur
+Copyright (c) 2012 Arpad Borsos
+Copyright (c) 2015, University of Washington Interactive Data Lab
+Copyright (c) 2016, University of Washington Interactive Data Lab
+Copyright (c) Luke Edwards (lukeed.com)
+Copyright (c) 2012 Joost-Wim Boekesteijn
+Marked Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/)
+Copyright (c) 2012 James Halliday, Josh Duff, and other contributors
+Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+Copyright (c) 2018 by Marijn Haverbeke and others
+Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov
+Copyright (c) 2015-2023, University of Washington Interactive Data Lab
+Copyright (c) Julien Crouzet and Florian Schwingenschlogl. Distributed
+Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)
+Copyright (c) 2012-2013, Christopher Jeffrey (https://github.com/chjj/)
+Copyright (c) 2017-present Dmitry Soshnikov
+Copyright jQuery Foundation and other contributors
+Copyright OpenJS Foundation and other contributors
+Copyright (c) 2018-2021 by Marijn Haverbeke and others
+Copyright (c) 2016 by Marijn Haverbeke and others
+Copyright (c) 2018 by Marijn Haverbeke and others
+Copyright (c) 2020 by Marijn Haverbeke and others
+Copyright (c) 2017, The xterm.js authors (https://github.com/xtermjs/xterm.js)
+Copyright (c) 2018, The xterm.js authors (https://github.com/xtermjs/xterm.js)
+Copyright (c) 2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)
+Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+Copyright (c) 2014-2016, SourceLair Private Company (https://www.sourcelair.com)
+Copyright (c) 2018-2021 by Marijn Haverbeke and others
+Copyright (c) 2017-2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)
+Copyright 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University
+Copyright (c) 2014 - Kevin Jahns - Chair of Computer Science
+Copyright (c) 2012-2013, Christopher Jeffrey (MIT License) https://github.com/chjj/term.js
+Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed) https://github.com/markedjs/marked
+Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann
+copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+notebook-shim 0.2.4 - BSD-3-Clause
+
+
+Copyright (c) 2022 Project Jupyter Contributors
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+pathos 0.3.3 - BSD-3-Clause
+
+
+(c) 1998-2004
+(c) 1998-2005
+Copyright (c) 2016 California Institute of Technology
+copyright d, The Uncertainty Quantification Foundation
+Copyright (c) 1997-2016 California Institute of Technology
+Copyright (c) 2004-2016 California Institute of Technology
+Copyright (c) 2008-2016 California Institute of Technology
+Copyright (c) 2015-2016 California Institute of Technology
+Copyright (c) 2024 The Uncertainty Quantification Foundation
+Copyright (c) 2016-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2018-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2022-2024 The Uncertainty Quantification Foundation
+Copyright (c) 2023-2024 The Uncertainty Quantification Foundation
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+protobuf 3.20.3 - BSD-3-Clause
+
+
+Copyright 2007 Google Inc.
+Copyright 2008 Google Inc.
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+psutil 6.1.1 - BSD-3-Clause
+
+
+copyright 2009- s, s
+Copyright (c) 2009, Giampaolo
+Copyright (c) 2017, Arnon Yaari
+Copyright (c) 2015, Ryo ONODERA.
+Copyright (c) 2009 Giampaolo Rodola
+Copyright (c) 2009, Giampaolo Rodola
+Copyright 2007-2011 by the Sphinx team
+Copyright (c) 2009, Giampaolo Rodola Jeff Tang
+Copyright (c) 2009, Giampaolo Rodola karthikrev
+Copyright (c) 2009, Jay Loden, Giampaolo Rodola
+Copyright (c) 2009, Giampaolo Rodola Landry Breuil
+Copyright (c) 2009, Giampaolo Rodola Himanshu Shekhar
+Copyright (c) 2009, Giampaolo Rodola Oleksii Shevchuk
+Copyright (c) 2009, Jay Loden, Dave Daeschler, Giampaolo Rodola
+Copyright (c) 2009, Jay Loden, Giampaolo Rodola Landry Breuil (OpenBSD implementation), Ryo Onodera (NetBSD implementation)
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+scipy 1.15.0 - BSD-3-Clause
+
+
+(c) 2024
+(c) B Whether
+(c) 2003, C. Bond
+Copyright 2021 The
+(c) Date July, 1988
+Copyright 2018 Nico
+Gamma (c) Gamma (c)
+(c) Compute Hessian H
+Csp spcreator (c) Dsp
+Csp spcreator (c) Gsp
+copyright Cephes Math
+2020 Intel Corporation
+2022 Intel Corporation
+Copyright (c) 2021 The
+Copyright John Maddock
+Copyright Albert Steppi
+Copyright Gautam Sewani
+(c) 2011 import warnings
+Copyright 2018 Ulf Adams
+Copyright Catch2 Authors
+copyright Xiaogang Zhang
+copyrighted by Alan Genz
+Copyright (c) 2024 HiGHS.
+Copyright 2006 Johan Rade
+Copyright 2012 K R Walker
+Copyright Paul A. Bristow
+copyright by Renee Touzin
+Copyright 2018 Peter Dimov
+Copyright 2020 Evan Miller
+Copyright 2020 Peter Dimov
+Copyright Evan Miller 2020
+Copyright Rene Rivera 2020
+Copyright Ryan Elandt 2023
+Copyright Thomas Mang 2010
+Copyright Thomas Mang 2011
+Copyright Thomas Mang 2012
+Copyright ohn Maddock 2012
+Csp self.spcreator (c) Dsp
+copyright 2024, Consortium
+(c) 2011 import numpy as np
+(c) 2012 import numpy as np
+(c) 2014 import numpy as np
+Copyright 2000 by Alan Genz
+Copyright 2006 John Maddock
+Copyright 2007 John Maddock
+Copyright 2008 John Maddock
+Copyright 2013 John Maddock
+Copyright 2014 John Maddock
+Copyright 2017 John Maddock
+Copyright 2020 Matt Borland
+Copyright 2024 Matt Borland
+Copyright Evan Miller, 2020
+Copyright Hubert Holin 2001
+Copyright John Maddock 2005
+Copyright John Maddock 2006
+Copyright John Maddock 2007
+Copyright John Maddock 2008
+Copyright John Maddock 2009
+Copyright John Maddock 2010
+Copyright John Maddock 2011
+Copyright John Maddock 2012
+Copyright John Maddock 2013
+Copyright John Maddock 2014
+Copyright John Maddock 2015
+Copyright John Maddock 2016
+Copyright John Maddock 2017
+Copyright John Maddock 2018
+Copyright John Maddock 2019
+Copyright John Maddock 2020
+Copyright John Maddock 2021
+Copyright John Maddock 2023
+Copyright John Maddock 2024
+Copyright Matt Borland 2021
+Copyright Matt Borland 2022
+Copyright Matt Borland 2023
+Copyright Matt Borland 2024
+Copyright Paul Bristow 2007
+Copyright Paul Bristow 2013
+Copyright Paul Bristow 2014
+copyright John Maddock 2008
+Copyright (c) Piers Lawrence
+Copyright 2008 Gautam Sewani
+Copyright 2013 Andrea Gavana
+Copyright 2013 Niall Douglas
+Copyright 2017 Nick Thompson
+Copyright 2018 Nick Thompson
+Copyright 2019 Nick Thompson
+Copyright Gautam Sewani 2008
+Copyright Jeremy Murphy 2016
+Copyright John Maddock, 2017
+Copyright John Maddock, 2020
+Copyright John Maddock, 2021
+Copyright John Maddock, 2022
+Copyright John Maddock, 2023
+Copyright Matt Borland, 2021
+Copyright Matt Borland, 2022
+Copyright Matt Borland, 2023
+Copyright Matt Borland, 2024
+Copyright Nick Thompson 2017
+Copyright Nick Thompson 2018
+Copyright Nick Thompson 2019
+Copyright Nick Thompson 2020
+Copyright Nick Thompson 2024
+Copyright Paul A. 2007, 2010
+Copyright Yosef Meller, 2009
+(c) Copyright Johan Rade 2006
+Copyright (c) 2006 Johan Rade
+Copyright (c) 2013 Kenneth L.
+Copyright (c) 2013, Alan Genz
+Copyright (c) 2014 Eric Moore
+Copyright (c) 2019 Peter Bell
+Copyright (c) 2022 Consortium
+Copyright (c) 2024 Consortium
+Copyright (c) jmc 2007 - 2010
+Copyright 2002 Gary Strangman
+Copyright 2002 Pearu Peterson
+Copyright 2013 Nikhar Agrawal
+Copyright 2014 Anton Bikineev
+Copyright 2014, Eric W. Moore
+Copyright Christian Lorentzen
+Copyright John Maddock 2006-7
+Copyright John Maddock 2007-8
+Copyright Madhur Chauhan 2020
+Copyright Nakhar Agrawal 2013
+Copyright Nick Thompson, 2017
+Copyright Nick Thompson, 2018
+Copyright Nick Thompson, 2019
+Copyright Nick Thompson, 2020
+Copyright Nick Thompson, 2021
+Copyright Nick Thompson, 2023
+Copyright Nick Thompson, 2024
+Copyright Paul A Bristow 2010
+Copyright Xiaogang Zhang 2006
+(c) Copyright Evan Miller 2020
+Copyright (c) 2008 Damian Eads
+Copyright (c) 2012 Google Inc.
+Copyright (c) 2020 Evan Miller
+Copyright 1999 Travis Oliphant
+Copyright 2005 Travis Oliphant
+Copyright 2010 Paul A. Bristow
+Copyright 2011 Paul A. Bristow
+Copyright 2012 Paul A. Bristow
+Copyright 2013 Paul A. Bristow
+Copyright 2015 Paul A. Bristow
+Copyright 2019 Paul A. Bristow
+Copyright 2020, Madhur Chauhan
+Copyright 2021 Alexander Grund
+Copyright 2021 Andrey Semashev
+Copyright 2021 Paul A. Bristow
+Copyright John Maddock 2006-15
+Copyright John Maddock 2008-11
+Copyright John Z. Maddock 2016
+Copyright John Z. Maddock 2017
+Copyright Paul A. Bristow 2006
+Copyright Paul A. Bristow 2007
+Copyright Paul A. Bristow 2008
+Copyright Paul A. Bristow 2009
+Copyright Paul A. Bristow 2010
+Copyright Paul A. Bristow 2011
+Copyright Paul A. Bristow 2012
+Copyright Paul A. Bristow 2013
+Copyright Paul A. Bristow 2014
+Copyright Paul A. Bristow 2015
+Copyright Paul A. Bristow 2016
+Copyright Paul A. Bristow 2017
+Copyright Paul A. Bristow 2018
+Copyright Paul A. Bristow 2019
+Copyright Paul A. Bristow 2021
+Copyright Paul a. Bristow 2010
+copyrighted by Enthought, Inc.
+(c) Copyright Hubert Holin 2001
+(c) Copyright Hubert Holin 2003
+(c) Copyright John Maddock 2005
+(c) Copyright John Maddock 2006
+(c) Copyright John Maddock 2007
+(c) Copyright John Maddock 2008
+(c) Copyright John Maddock 2009
+(c) Copyright John Maddock 2010
+(c) Copyright John Maddock 2013
+(c) Copyright John Maddock 2014
+(c) Copyright John Maddock 2015
+(c) Copyright John Maddock 2017
+(c) Copyright John Maddock 2018
+(c) Copyright John Maddock 2020
+(c) Copyright John Maddock 2021
+(c) Copyright John Maddock 2022
+(c) Copyright John Maddock 2023
+(c) Copyright John Maddock 2024
+(c) Copyright Matt Borland 2020
+(c) Copyright Matt Borland 2021
+(c) Copyright Matt Borland 2022
+(c) Copyright Matt Borland 2023
+(c) Copyright Matt Borland 2024
+Copyright (c) 2006 John Maddock
+Copyright (c) 2007 John Maddock
+Copyright (c) 2007, Damian Eads
+Copyright (c) 2009 John Maddock
+Copyright (c) 2011 John Maddock
+Copyright (c) 2012 John Maddock
+Copyright (c) 2014 John Maddock
+Copyright (c) 2015 John Maddock
+Copyright (c) 2016 Adrian Veres
+Copyright (c) 2017 John Maddock
+Copyright (c) 2020 John Maddock
+Copyright (c) 2021 Matt Borland
+Copyright (c) 2021 Orson Peters
+Copyright (c) 2022 John Maddock
+Copyright (c) 2024 Matt Borland
+Copyright (c) Tyler Reddy, 2016
+Copyright 2020-2021 Peter Dimov
+Copyright Benjamin Sobotta 2012
+Copyright Jeremy W. Murphy 2015
+Copyright Paul A. Bristow, 2019
+Copyright Peter Dimov 2015-2021
+Copyright Takuma Yoshimura 2024
+copyright (c) 2022, Robert Kern
+(c) Copyright Bruno Lalande 2008
+(c) Copyright Jeremy Murphy 2015
+(c) Copyright John Maddock, 2024
+(c) Copyright Nick Thompson 2017
+(c) Copyright Nick Thompson 2018
+(c) Copyright Nick Thompson 2019
+(c) Copyright Nick Thompson 2020
+(c) Copyright Nick Thompson 2021
+(c) Copyright Nick Thompson 2023
+Copyright (C) 2023 Adam Lugowski
+Copyright (c) 2017 Nick Thompson
+Copyright (c) 2018 Nick Thompson
+Copyright (c) 2019 Nick Thompson
+Copyright (c) 2020 Marco Gorelli
+Copyright (c) 2020 Nick Thompson
+Copyright (c) 2021 Nick Thompson
+Copyright (c) 2022 Adam Lugowski
+Copyright (c) 2023 Adam Lugowski
+Copyright (c) 2023 Nick Thompson
+Copyright (c) 2024 Nick Thompson
+Copyright 1991 Dieter Kraft, FHM
+Copyright 1997-2008 by Agner Fog
+Copyright 2002-2008 by Agner Fog
+Copyright 2002-2014 by Agner Fog
+Copyright 2004-2008 by Agner Fog
+Copyright 2004-2013 by Agner Fog
+Copyright 2020 Intel Corporation
+Copyright 2022 Intel Corporation
+Copyright 2022 James E. King III
+Copyright Anne M. Archibald 2008
+Copyright John Maddock 2005-2006
+Copyright John Maddock 2005-2008
+Copyright John Maddock 2011-2021
+Copyright Nicholas Thompson 2017
+Copyright Nicholas Thompson 2018
+Copyright Nikhar Agrawal 2013-14
+Copyright Paul A. Bristow 2006-7
+(c) Copyright Anton Bikineev 2014
+(c) Copyright James Folberth 2022
+(c) Copyright John Maddock 2006-7
+(c) Copyright John Maddock 2006-8
+(c) Copyright Nick Thompson, 2018
+(c) Copyright Nick Thompson, 2019
+(c) Copyright Victor Ananyev 2021
+Copyright (c) 2006 Xiaogang Zhang
+Copyright (c) 2006-7 John Maddock
+Copyright (c) 2009, Motorola, Inc
+Copyright (c) 2013 Anton Bikineev
+Copyright (c) 2013 Pauli Virtanen
+Copyright (c) 2014 Anton Bikineev
+Copyright (c) 2016-2018 ERGO-Code
+Copyright (c) 2016-2019 ERGO-Code
+Copyright (c) 2018-2019 ERGO-Code
+Copyright John Maddock 2006, 2007
+Copyright John Maddock 2006, 2010
+Copyright John Maddock 2006, 2011
+Copyright John Maddock 2006, 2012
+Copyright John Maddock 2007, 2014
+Copyright John Maddock 2008, 2012
+Copyright John Maddock 2010, 2012
+Copyright Nicholas McKibben, 2022
+Copyright Paul Bristow 2006, 2007
+Copyright Paul Bristow 2007, 2011
+(c) Copyright Antony Polukhin 2022
+(c) Copyright Paul A. Bristow 2006
+(c) Copyright Paul A. Bristow 2011
+Copyright (c) 2002 Travis Oliphant
+Copyright (c) 2006-2008 Johan Rade
+Copyright (c) 2010, Robert Parrish
+Copyright (c) 2011 Francois Mauger
+Copyright (c) 2011 Paul A. Bristow
+Copyright (c) 2012 Paul A. Bristow
+Copyright (c) 2018, Quansight-Labs
+Copyright (c) 2019 Paul A. Bristow
+Copyright (c) 2019-2020 Peter Bell
+Copyright (c) Pauli Virtanen, 2010
+Copyright 2015 Jon Lund Steffensen
+Copyright 2017 Two Blue Cubes Ltd.
+Copyright John Maddock 2009 - 2012
+Copyright Thijs van den Berg, 2008
+Copyright (c) 1993-2019 C.B. Barber
+Copyright (c) 2014-2022 Jarryd Beck
+Copyright (c) 2024 SciPy developers
+Copyright (c) Benjamin Sobotta 2012
+Copyright 2002 H Lohninger, TU Wein
+Copyright Paul A. Bristow 2006-2011
+(c) Copyright Hubert Holin 2003-2005
+(c) Copyright John Maddock 2005-2006
+(c) Copyright John Maddock 2005-2021
+Copyright (c) 2007 Cybozu Labs, Inc.
+Copyright (c) 2020 Michael Feldmeier
+Copyright (c) Damian Eads, 2007-2008
+Copyright 2011, 2012 Paul A. Bristow
+Copyright 2013 Christopher Kormanyos
+Copyright 2014 Christopher Kormanyos
+Copyright 2015 Jeremy William Murphy
+Copyright Christopher Kormanyos 2012
+Copyright Christopher Kormanyos 2013
+Copyright Christopher Kormanyos 2014
+Copyright Christopher Kormanyos 2016
+Copyright Christopher Kormanyos 2020
+Copyright Christopher Kormanyos 2021
+Copyright Christopher Kormanyos 2024
+Copyright Matthew Pulver 2018 - 2019
+Copyright Paul A. Bristow 2006, 2007
+Copyright Paul A. Bristow 2006, 2017
+Copyright Paul A. Bristow 2007, 2009
+Copyright Paul A. Bristow 2007, 2010
+Copyright Paul A. Bristow 2007, 2012
+Copyright Paul A. Bristow 2008, 2009
+Copyright Paul A. Bristow 2008, 2010
+Copyright Paul A. Bristow 2008, 2014
+Copyright Paul A. Bristow 2009, 2011
+Copyright Paul A. Bristow 2010, 2013
+Copyright Paul A. Bristow 2010, 2015
+Copyright Paul A. Bristow 2011, 2012
+Copyright Paul A. Bristow 2014, 2015
+Copyright Paul A. Bristow 2015, 2018
+Copyright Paul A. Bristow 2016, 2017
+Copyright Paul A. Bristow 2016, 2018
+Copyright Paul A. Bristow 2017, 2018
+(c) Copyright Daryle Walker 2001-2002
+(c) Copyright John Maddock 2006, 2015
+Copyright (c) 2007 - Sebastien Fabbro
+Copyright (c) 2007, 2008, Damian Eads
+Copyright (c) 2007, 2013 John Maddock
+Copyright (c) 2014 Mathjax Consortium
+Copyright (c) 2015-2017 Martin Hensel
+Copyright (c) 2016-2017 Felix Lenders
+Copyright (c) 2019 Max-Planck-Society
+Copyright (c) 2020-2023 Adam Lugowski
+Copyright (c) 2022-2023 Adam Lugowski
+Copyright Paul A. Bristow 2009 - 2019
+copyright Paul A. Bristow 2006 - 2010
+(c) Copyright Daryle Walker 2001, 2006
+(c) Copyright John Maddock 2008 - 2022
+(c) Copyright Matt Borland 2021 - 2022
+(c) Rasmus Munk Larsen, Stanford, 2004
+Copyright (c) 2012, Jaydeep P. Bardhan
+Copyright (c) 2012, Matthew G. Knepley
+Copyright (c) 2014, Janani Padmanabhan
+Copyright (c) 2021 - 2022 Matt Borland
+Copyright (c) 2022 Two Blue Cubes Ltd.
+Copyright 2004-2005 by Enthought, Inc.
+Copyright John Maddock 2005-2006, 2011
+Copyright John Maddock 2006-7, 2013-20
+Copyright (c) 1994 by Xerox Corporation
+Copyright (c) 1996-2008 Rice University
+Copyright (c) 2010 Thomas P. Robitaille
+Copyright (c) 2011 ashelly.myopenid.com
+Copyright 2013 John Maddock Distributed
+Copyright 2013 Paul Bristow Distributed
+Copyright 2014 Paul Bristow Distributed
+Copyright 2015 John Maddock Distributed
+Copyright 2017 John Maddock Distributed
+Copyright 2018 John Maddock Distributed
+Copyright 2019 John Maddock Distributed
+Copyright 2020 Matt Borland Distributed
+Copyright 2021 Matt Borland Distributed
+Copyright 2022 Matt Borland Distributed
+Copyright 2023 Matt Borland Distributed
+Copyright 2024 Matt Borland Distributed
+Copyright Paul A. Bristow 2007, 2013-14
+(c) Copyright Jeremy William Murphy 2015
+(c) Copyright Jeremy William Murphy 2016
+Copyright (c) 2001, 2002 Enthought, Inc.
+Copyright (c) 2003, 2007-14 Matteo Frigo
+Copyright (c) 2003-2005 Peter J. Verveer
+Copyright (c) 2013 Christopher Kormanyos
+Copyright 2002-2016 The SciPy Developers
+Copyright 2008 John Maddock. Distributed
+Copyright 2010 John Maddock. Distributed
+Copyright 2011 John Maddock. Distributed
+Copyright 2012 John Maddock. Distributed
+Copyright 2013 John Maddock. Distributed
+Copyright 2014 John Maddock. Distributed
+Copyright 2015 John Maddock. Distributed
+Copyright 2017 John Maddock. Distributed
+Copyright 2017 Nick Thompson Distributed
+Copyright 2019 John Maddock. Distributed
+Copyright 2024. Matt Borland Distributed
+Copyright (c) 1998-2007, Timothy A. Davis
+Copyright (c) 2005-2022, NumPy Developers
+Copyright 2008 Bruno Lalande. Distributed
+Copyright 2017, Nick Thompson Distributed
+Copyright 2019, Nick Thompson Distributed
+Copyright (c) 2005-2015, Michele Simionato
+Copyright (c) 2010-2018 Max-Planck-Society
+Copyright (c) 2010-2019 Max-Planck-Society
+Copyright (c) 2010-2022 Max-Planck-Society
+Copyright 1984, 1995 by Stephen L. Moshier
+Copyright 1984, 1996 by Stephen L. Moshier
+Copyright 2020 Madhur Chauhan. Distributed
+Copyright 2021 Nick Thompson, John Maddock
+Copyright Christopher Kormanyos 2012, 2013
+Copyright Nick Thompson, John Maddock 2020
+Copyright Paul A. Bristow 2006, 2007, 2012
+Copyright Paul A. Bristow 2006, 2012, 2017
+Copyright Paul A. Bristow 2007, 2008, 2010
+Copyright Paul A. Bristow 2007, 2009, 2010
+Copyright Paul A. Bristow 2007, 2009, 2012
+Copyright Paul A. Bristow 2007, 2010, 2011
+Copyright Paul A. Bristow 2007, 2010, 2012
+Copyright Paul A. Bristow 2008, 2009, 2014
+Copyright Paul A. Bristow 2016, 2017, 2018
+(c) Copyright Eric Ford & Hubert Holin 2001
+(c) Copyright Eric Ford 2001 & Hubert Holin
+(c) Rasmus Munk Larsen, Stanford University
+Copyright (c) 1993-2019 The Geometry Center
+Copyright (c) 1998-2000 Theodore C. Belding
+Copyright (c) 2024 Matt Borland Distributed
+Copyright 1984 - 1994 by Stephen L. Moshier
+Copyright 1985 by Stephen L. Moshier Direct
+Copyright Christopher Kormanyos 2002 - 2011
+Copyright Nick Thompson, John Maddock, 2020
+Copyright Nick Thompson, Matt Borland, 2022
+Copyright Nick Thompson, Matt Borland, 2023
+(c) Rasmus Munk Larsen, Stanford, 1999, 2004
+Copyright (c) 2001-2011 - Scilab Enterprises
+Copyright 2016, 2017 Peter Dimov Distributed
+copyright 2008 Paul A. Bristow, John Maddock
+Copyright (c) 2009 Pauli Virtanen Distributed
+Copyright (c) 2011-2014, The OpenBLAS Project
+Copyright (c) 2024 Tan Ping Liang, Peter Bell
+Copyright Johan Rade and Paul A. Bristow 2011
+Copyright John Maddock 2006, 2007, 2012, 2014
+Copyright Paul A. Bristow & John Maddock 2009
+(c) Copyright Nick Thompson, John Maddock 2023
+Copyright (c) 2009-2017 The MathJax Consortium
+Copyright (c) 2010-2017 The MathJax Consortium
+Copyright (c) 2011-2015 The MathJax Consortium
+Copyright (c) 2011-2017 The MathJax Consortium
+Copyright (c) 2013-2017 The MathJax Consortium
+Copyright (c) 2014-2017 The MathJax Consortium
+Copyright (c) 2015-2017 The MathJax Consortium
+Copyright (c) 2016-2017 The MathJax Consortium
+Copyright J.S. Roy (js@jeannot.org), 2002-2005
+(c) Copyright Christopher Kormanyos 1999 - 2021
+Copyright (c) 2008 Ian Bicking and Contributors
+Copyright (c) 2009, Pauli Virtanen
+Copyright (c) 2015, Pauli Virtanen
+Copyright 2005, 2013 Daryle Walker. Distributed
+Copyright 2006 John Maddock and Paul A. Bristow
+Copyright John Maddock and Paul A. Bristow 2007
+Copyright John Maddock and Paul A. Bristow 2010
+Copyright (c) 2008 Paul A. Bristow, John Maddock
+Copyright 1984, 1987, 1995 by Stephen L. Moshier
+Copyright 1984, 1987, 2000 by Stephen L. Moshier
+Copyright 1984, 1995, 2000 by Stephen L. Moshier
+Copyright 1985, 1987, 2000 by Stephen L. Moshier
+Copyright 2024 Christopher Kormanyos Distributed
+Copyright Paul A. Bristow 2006, 2007, 2009, 2010
+Copyright Paul A. Bristow 2007, 2009, 2010, 2012
+Copyright Paul A. Bristow 2007, 2010, 2012, 2014
+Copyright Paul A. Bristow 2007, 2010, 2014, 2016
+Copyright Paul A. Bristow 2008, 2009, 2012, 2016
+Copyright Rene Ferdinand Rivera Morell 2023-2024
+(c) Copyright Matt Borland and Nick Thompson 2022
+(c) Copyright Nick Thompson and Matt Borland 2020
+(c) Rasmus Munk Larsen, Stanford University, 2000
+(c) Rasmus Munk Larsen, Stanford University, 2004
+Copyright 1984, 1987 by Stephen L. Moshier Direct
+Copyright 1984, 1991 by Stephen L. Moshier Direct
+Copyright 1985, 1987 by Stephen L. Moshier Direct
+Copyright 2007, 2010 Paul A. Bristow. Distributed
+Copyright 2013, 2013 John Maddock, Anton Bikineev
+Copyright 2019 - 2021 Alexander Grund Distributed
+Copyright (c) 2010 David Fong and Michael Saunders
+Copyright (c) 2006, Systems Optimization Laboratory
+Copyright (c) 2007, John Travers
+Copyright (c) 2010 - Jordi Gutierrez Hermoso Octave
+Copyright Christopher Kormanyos 2013-14, 2020, 2024
+Copyright Paul A. Bristow & John Maddock 2009, 2010
+Copyright (c) 2006 Xiaogang Zhang, 2015 John Maddock
+Copyright (c) 2006, The Regents of the University of
+Copyright 1999, 2005, 2013 Hubert Holin. Distributed
+Copyright 2006 John Maddock and Paul A. Bristow 2011
+Copyright 2015 Ontario Institute for Cancer Research
+(c) Copyright Hubert Holin and Daryle Walker 2001-2002
+(c) Rasmus Munk Larsen, Stanford University, 2000,2004
+Copyright (C) 2022 Adam Lugowski. All rights reserved.
+Copyright (C) 2023 Adam Lugowski. All rights reserved.
+Copyright (c) 2002-2017 Free Software Foundation, Inc.
+Copyright (c) 2010-2019 Free Software Foundation, Inc.
+Copyright (c) 2016 Wenzel Jakob
+Copyright 1984, 1987, 1988, 2000 by Stephen L. Moshier
+Copyright 1984, 1987, 1989, 1995 by Stephen L. Moshier
+Copyright 1984, 1987, 1989, 2000 by Stephen L. Moshier
+Copyright 1984, 1987, 1992, 2000 by Stephen L. Moshier
+(c) Rasmus Munk Larsen, Stanford University, 1999, 2004
+(c) Rasmus Munk Larsen, Stanford University, 2000, 2004
+Copyright (c) 2021 Orson Peters
+Copyright (c) Donald Stufft and individual contributors
+Copyright 1984, 1987, 1988 by Stephen L. Moshier Direct
+Copyright 1984, 1987, 1989 by Stephen L. Moshier Direct
+Copyright 1984, 1987, 1993 by Stephen L. Moshier Direct
+Copyright 1985, 1987, 1989 by Stephen L. Moshier Direct
+Copyright 2007, 2010, 2012 Paul A. Bristow. Distributed
+copyright f'2008- date.today .year, The SciPy community
+Copyright (c) 2012 Massachusetts Institute of Technology
+Copyright (c) John Maddock & Paul A. Bristow 2007 - 2012
+Copyright 2002 H Lohninger, TU Wein H.Lohninger Teach/Me
+Copyright 2014 Marco Guazzone (marco.guazzone@gmail.com)
+(c) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+Copyright (c) 2006-2013 The University of Colorado Denver
+Copyright 2006 Hubert Holin and John Maddock. Distributed
+Copyright (c) 2006-2007, Robert Hetland
+Copyright (c) 2021-2024, Tom M. Ragonneau and Zaikun Zhang
+(c) 1995 Ernst Stadlober, Institut fuer Statistitk, TU Graz
+Copyright (C) 2022-2023 Adam Lugowski. All rights reserved.
+Copyright (c) 2000-2022 Wolfgang Hoermann and Josef Leydold
+Copyright (c) 2005, Rasmus Munk Larsen, Stanford University
+Copyright 2008, 2009 John Maddock, Paul A. Bristow and M.A.
+Copyright 2011 Paul A. Bristow and Thomas Mang. Distributed
+Copyright Daryle Walker, Hubert Holin and John Maddock 2006
+Copyright (c) 2002-2005, Jean-Sebastien Roy (js@jeannot.org)
+Copyright (c) 2004-2005, Jean-Sebastien Roy (js@jeannot.org)
+Copyright 1984, 1987, 1988, 1992, 2000 by Stephen L. Moshier
+Copyright 1984, 1987, 1989, 1992, 2000 by Stephen L. Moshier
+Copyright 2006 John Maddock and Paul A. Bristow. Distributed
+Copyright 2007 John Maddock and Paul A. Bristow. Distributed
+Copyright 2008 John Maddock and Paul A. Bristow. Distributed
+Copyright 2010 John Maddock and Paul A. Bristow. Distributed
+Copyright 2012 John Maddock and Paul A. Bristow. Distributed
+Copyright 2014 John Maddock and Paul A. Bristow. Distributed
+Copyright 2015 John Maddock and Paul A. Bristow. Distributed
+Copyright (c) 2000-2013 The University of California Berkeley
+Copyright 1984, 1987, 1988, 1992 by Stephen L. Moshier Direct
+Copyright 1984, 1987, 1989, 1992 by Stephen L. Moshier Direct
+Copyright (c) 1999, 2000, 2001 North Carolina State University
+Copyright (c) 2010 David Fong and Michael Saunders Distributed
+Copyright (c) Tyler Reddy, Richard Gowers, and Max Linke, 2016
+Copyright 2016-2021 Matthew Brett, Isuru Fernando, Matti Picus
+Copyright (c) 2004 David M. Cooke
+Copyright (c) 2004 Joel de Guzman http://spirit.sourceforge.net
+Copyright (c) John Maddock and Paul A. Bristow 2009, 2010, 2012
+Copyright Daryle Walker, Hubert Holin, John Maddock 2006 - 2007
+Copyright John Maddock & Paul A. Bristow 2007, 2009, 2010, 2012
+(c) 2000 W. Hoermann & J. Leydold, Institut f. Statistik, WU Wien
+(c) 2007 W. Hoermann & J. Leydold, Institut f. Statistik, WU Wien
+Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology
+Copyright (c) 2008, 2009, 2010, 2012 Paul A. Bristow, John Maddock
+Copyright 2006, 2007 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2009 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2010 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2011 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2012 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2013 John Maddock and Paul A. Bristow. Distributed
+Copyright 2007, 2010 John Maddock and Paul A. Bristow. Distributed
+Copyright 2007, 2013 John Maddock and Paul A. Bristow. Distributed
+Copyright 2008, 2009 John Maddock and Paul A. Bristow. Distributed
+Copyright 2008, 2012 John Maddock and Paul A. Bristow. Distributed
+Copyright 2010, 2012 John Maddock and Paul A. Bristow. Distributed
+Copyright (c) 2001-2002 Enthought, Inc. 2003-2024, SciPy Developers
+Copyright (c) 2007 Free Software Foundation, Inc.
+Copyright (c) 2009 Free Software Foundation, Inc.
+Copyright 2006 - 2010 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006 - 2012 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006 - 2013 John Maddock and Paul A. Bristow. Distributed
+copyright 2014 Christopher Kormanyos, John Maddock, Paul A. Bristow
+Copyright (c) 1996, 1997, 1998, 1999, 2000 Gerard Jungman, Brian Gough
+Copyright 2006, 2007, 2010 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2007, 2012 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2010, 2011 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2010, 2012 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2010, 2015 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2012, 2015 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2012, 2017 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2015, 2018 John Maddock and Paul A. Bristow. Distributed
+Copyright 2007, 2012, 2014 John Maddock and Paul A. Bristow. Distributed
+Copyright (c) 1998-2000 Theodore C. Belding University of Michigan Center
+Copyright (2022) National Technology & Engineering Solutions of Sandia, LLC
+Copyright 2006 John Maddock, Paul A. Bristow and Xiaogang Zhang. Distributed
+Copyright (c) 2021-04-21 Stefan van der Walt https://github.com/stefanv/lloyd
+copyright A. Volgenant/Amsterdam School of Economics, University of Amsterdam
+Copyright 2006, 2007, 2008, 2010 John Maddock and Paul A. Bristow. Distributed
+Copyright 2006, 2010, 2013, 2014 John Maddock and Paul A. Bristow. Distributed
+Copyright 2012 Benjamin Sobotta, John Maddock and Paul A. Bristow. Distributed
+Copyright Thomas Dybdahl Ahle, Nick Thompson, Matt Borland, John Maddock, 2023
+Copyright 2023 Thomas Dybdahl Alhe, Nicholas Thompson, Matt Borland Distributed
+Copyright 1998-2006 Liam Quinn. / Glyphs of the
+Copyright 2014 Christopher Kormanyos, John Maddock and Paul A. Bristow. Distributed
+Copyright 1987-, A. Volgenant/Amsterdam School of Economics, University of Amsterdam
+Copyright 2006, 2008, 2011 John Maddock, Johan Rade and Paul A. Bristow. Distributed
+Copyright 2016 John Maddock, Paul A. Bristow, Thomas Luu, Nicholas Thompson. Distributed
+Copyright 2013, 2014 Nikhar Agrawal, Christopher Kormanyos, John Maddock, Paul A. Bristow
+Copyright 2008, 2010, 2012, 2013, 2014, 2015 John Maddock and Paul A. Bristow. Distributed
+Copyright (c) 2018 Sylvain Gubian , Yang Xiang
+Copyright 2006, 2013 John Maddock, Paul A. Bristow, Xiaogang Zhang and Christopher Kormanyos
+Copyright (c) Tyler Reddy, Ross Hemsley, Edd Edmondson, Nikolai Nowaczyk, Joe Pitt-Francis, 2015
+Copyright 2013, 2014 Nikhar Agrawal, Christopher Kormanyos, John Maddock, Paul A. Bristow. Distributed
+Copyright (c) 1992-2013 The University of Tennessee and The University of Tennessee Research Foundation
+Copyright 2006, 2007, 2008, 2009, 2010, 2012, 2013, 2015, 2016 John Maddock and Paul A. Bristow. Distributed
+Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory
+Copyright (c) 2006, The Regents of the University of California, through Lawrence Berkeley National Laboratory
+Copyright (c) 2017, The Chancellor, Masters and Scholars of the University of Oxford, and the Chebfun Developers
+Copyright (c) 2008 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2009 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2010 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2003-2009, The Regents of the University of California, through Lawrence Berkeley National Laboratory
+Copyright (c) 2000-2010 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2000-2022 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2008-2010 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2009-2010 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2009-2011 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2009-2012 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2011-2012 Wolfgang Hoermann and Josef Leydold Institute for Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2000-2006 Wolfgang Hoermann and Josef Leydold Dept. for Statistics, University of Economics, Vienna, Austria
+Copyright (c) 2000-2006, 2010 Wolfgang Hoermann and Josef Leydold Department of Statistics and Mathematics, WU Wien, Austria
+Copyright (c) 2006-2021 Nikhar Agrawal, Anton Bikineev, Matthew Borland, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Rade
+copyright 2006-2021 Nikhar Agrawal, Anton Bikineev, Matthew Borland, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, Hubert Holin, Bruno Lalande, John Maddock, Evan Miller, Jeremy Murphy, Matthew Pulver, Johan Rade, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, Daryle Walker and Xiaogang Zhang
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+sentinels 1.0.0 - BSD-3-Clause
+
+
+Copyright (c) 2011, Rotem Yaari
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+setproctitle 1.3.4 - BSD-3-Clause
+
+
+Copyright (c) 2000-2009, PostgreSQL Global Development Group
+Copyright (c) 1998 Todd C. Miller
+Copyright (c) 2009-2021 Daniele Varrazzo
+Copyright (c) 2010-2021 Daniele Varrazzo
+Copyright (c) 2011-2021 Daniele Varrazzo
+Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
+Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
+Copyright (c) 2009-2021, Daniele Varrazzo
+Portions Copyright (c) 1994, The Regents of the University of California
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+smmap 5.0.2 - BSD-3-Clause
+
+
+Copyright (c) 2010, 2011 Sebastian Thiel and contributors
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+symfc 1.2.1 - BSD-3-Clause
+
+
+Copyright (c) 2023, symfc project
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+webcolors 24.11.1 - BSD-3-Clause
+
+
+copyright James Bennett and contributors
+Copyright (c) James Bennett, and contributors
+
+Copyright (c) . All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+mp-api 0.43.0 - BSD-3-Clause AND BSD-3-Clause-LBNL
+
+
+copyright 2022, The Materials Project
+Copyright (c) 2017, The Regents of the University of California, through Lawrence Berkeley National Laboratory
+
+BSD-3-Clause AND BSD-3-Clause-LBNL
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jupyterlab-widgets 3.0.13 - BSD-3-Clause AND CC0-1.0 AND ISC AND MIT
+
+
+Copyright (c) Felix Bohm
+Copyright (c) 2014 Alex Bell
+Copyright (c) 2019 Leon Gersen
+Copyright 2010-2015 Mike Bostock
+Copyright 2010-2021 Mike Bostock
+Copyright 2010-2022 Mike Bostock
+Copyright (c) 2014 Jameson Little
+Copyright (c) Jupyter Development Team
+Copyright (c) 2014-2017, Jon Schlinkert
+Copyright (c) 2014 The cheeriojs contributors
+Copyright JS Foundation and other contributors
+Copyright (c) 2013, 2014, 2015 P'unk Avenue LLC
+Copyright (c) 2015 Project Jupyter Contributors
+Copyright (c) 2019 Project Jupyter Contributors
+Copyright 2013 Andrey Sitnik
+Copyright 2017 Andrey Sitnik
+Copyright (c) 2014-2017, PhosphorJS Contributors
+Copyright (c) Isaac Z. Schlueter and Contributors
+Copyright OpenJS Foundation and other contributors
+Copyright (c) 2010-2019 Jeremy Ashkenas, DocumentCloud
+Copyright (c) 2013 Roman Shtylman
+Copyright 2010, 2011, Chris Winberry
+Copyright (c) 2012 James Halliday, Josh Duff, and other contributors
+Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov
+Copyright JS Foundation and other contributors, https://js.foundation
+Copyright OpenJS Foundation and other contributors, https://openjsf.org
+Copyright OpenJS Foundation and other contributors
+Copyright (c) Sindre Sorhus (https://sindresorhus.com)
+(c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors Backbone
+Copyright (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+Copyright (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
+
+BSD-3-Clause AND CC0-1.0 AND ISC AND MIT
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+altair 5.5.0 - BSD-3-Clause AND MIT
+
+
+Copyright (c) 2015-2023, Vega-Altair Developers
+
+BSD-3-Clause AND MIT
+
+---------------------------------------------------------
+
+---------------------------------------------------------
+
+jupyterlab 4.3.4 - BSD-3-Clause AND MIT
+
+
+(c) Yqn (c)
+(c) C Ofn (c)
+(c) Sindre Sorhus
+copyright Koen Bok
+(c) 2011 Gary Court
+Copyright 2021 Mapbox
+(c) 2019 Denis Pushkarev
+Copyright (c) 2017, Vega
+Copyright (c) Felix Bohm
+Copyright (c) 2016 podhmo
+Copyright 2011 Gary Court
+Copyright (c) 2017, Mapbox
+Copyright (c) Font Awesome
+Copyright 2019 Ron Buckton
+Copyright Gaetan Renaudeau
+Copyright (c) 2015 Treasure
+Copyright 2021 Mike Bostock
+(c) 2017-2021 Joachim Wester
+(c) 2017-2022 Joachim Wester
+Copyright (c) 2014 Alex Bell
+Copyright (c) 2017 Braintree
+Copyright 2001 Robert Penner
+Copyright 2015 Ricky Reusser
+Copyright 2015, Mike Bostock
+Copyright (c) 2015 JD Ballard
+Copyright (c) 2015 Josh Junon
+Copyright (c) 2018 Chris Holt
+Copyright (c) 2015 Dan Abramov
+Copyright (c) 2015 David Clark
+Copyright (c) 2022 Fadi Khadra
+Copyright Node.js contributors
+Copyright (c) 2014 Athan Reines
+Copyright (c) 2015 Athan Reines
+Copyright (c) Bloomberg Finance
+Copyright (c) 2015 Dmitry Ivanov
+Copyright (c) 2017 Martin Hansen
+Copyright 2010-2021 Mike Bostock
+Copyright 2010-2022 Mike Bostock
+Copyright 2010-2023 Mike Bostock
+Copyright 2013-2021 Mike Bostock
+Copyright 2015-2016 Mike Bostock
+Copyright 2016-2021 Mike Bostock
+(c) Cure53 and other contributors
+Copyright (c) 2012 Heather Arthur
+Copyright (c) 2013 James Halliday
+Copyright (c) 2015 Shusaku Uesugi
+Copyright (c) 2011 Fabrice Bellard
+Copyright (c) 2015, Rebecca Turner
+Copyright 2008-2012 Charles Karney
+Copyright (c) 2016 Adele Delamarche
+Copyright (c) 2017 Dmitry Soshnikov
+Copyright (c) 2018 Tamino Martinius
+Copyright (c) Microsoft Corporation
+Copyright 2012-2019 Michael Bostock
+(c) 2016-present Alexander Kuznetsov
+Copyright (c) 2014-2015 Athan Reines
+Copyright (c) 2017 Evgeny Poberezkin
+Copyright (c) 2020 Evgeny Poberezkin
+Copyright 2018-2021 Observable, Inc.
+Copyright (c) 2015-2021 Martin Hensel
+Copyright (c) 2015-present Evan Jacobs
+Copyright (c) 2016 Alexander Kuznetsov
+Copyright (c) Jupyter Development Team
+Copyright (c) 2014 The xterm.js authors
+Copyright (c) 2014-2016, Jon Schlinkert
+Copyright (c) 2014-2017, Jon Schlinkert
+Copyright (c) 2015-2018, Jon Schlinkert
+Copyright (c) 2016 typestyle Permission
+Copyright (c) 2021 @markedjs Permission
+Copyright (c) Font Awesome Font Awesome
+Copyright (c) 2016-present Sultan Tarimo
+Copyright (c) 2014 - 2022 Knut Sveidqvist
+Copyright (c) 2015-2021 Evgeny Poberezkin
+Copyright (c) 2014-present, Jon Schlinkert
+Copyright (c) 2015-present, Jon Schlinkert
+Copyright (c) 2019 iVis@Bilkent Permission
+Copyright (c) 2013, 2014, 2020 Joachim Wester
+Copyright (c) 2014 The cheeriojs contributors
+Copyright (c) 2018-present, iamkun Permission
+Copyright (c) 2015 Unshift.io, Arnout Kazemier
+Copyright JS Foundation and other contributors
+copyright year in About JupyterLab and LICENSE
+Copyright (c) 2013, 2014, 2015 P'unk Avenue LLC
+Copyright (c) Facebook, Inc. and its affiliates
+Copyright 2013 Andrey Sitnik
+Copyright 2017 Andrey Sitnik
+Copyright 2024 Dr.-Ing. Mario Heiderich, Cure53
+Copyright (c) 2014-2017, PhosphorJS Contributors
+Copyright (c) 2012-2018 Aseem Kishore, and others
+Copyright (c) 2016-2018, The Cytoscape Consortium
+Copyright (c) 2016-2023, The Cytoscape Consortium
+Copyright (c) Isaac Z. Schlueter and Contributors
+Copyright Joyent, Inc. and other Node contributors
+Copyright (c) 2015, Dan Flettre
+Copyright (c) 2011-2015 Paul Vorbach
+Copyright (c) 2015-2024 Project Jupyter Contributors
+Copyright 2016 Interactive Data Lab and contributors
+Copyright (c) 2013 Roman Shtylman
+Copyright (c) 2019 - present, iVis@Bilkent. Permission
+Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
+Copyright (c) 2014, 2016, 2017, 2019, 2021 Simon Lydell
+Copyright (c) 2015 Titus Wormer
+Copyright (c) 2016 Titus Wormer
+Copyright (c) 2020 Titus Wormer
+Copyright (c) 2021 Titus Wormer
+Copyright (c) 2011 Heather Arthur
+Copyright (c) 2004, John Gruber http://daringfireball.net
+Copyright (c) 2019-present Fabio Spampinato, Andrew Maney
+Copyright 2010, 2011, Chris Winberry
+Copyright (c) 2020 by Marijn Haverbeke
+Copyright (c) 2019 Kevin Jahns
+Copyright (c) 2020 Kevin Jahns
+Copyright (c) 2018-2022 TypeFox GmbH (http://www.typefox.io)
+Copyright (c) 2010-2020 Robert Kieffer and other contributors
+Copyright (c) 2011-2016 Heather Arthur