ddDT-GFM 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. dddt_gfm-0.1.0/.github/workflows/publish.yml +47 -0
  2. dddt_gfm-0.1.0/.github/workflows/test.yml +31 -0
  3. dddt_gfm-0.1.0/.gitignore +195 -0
  4. dddt_gfm-0.1.0/.readthedocs.yaml +19 -0
  5. dddt_gfm-0.1.0/LICENSE +24 -0
  6. dddt_gfm-0.1.0/PKG-INFO +95 -0
  7. dddt_gfm-0.1.0/README.md +25 -0
  8. dddt_gfm-0.1.0/ddDT_GFM.egg-info/PKG-INFO +95 -0
  9. dddt_gfm-0.1.0/ddDT_GFM.egg-info/SOURCES.txt +48 -0
  10. dddt_gfm-0.1.0/ddDT_GFM.egg-info/dependency_links.txt +1 -0
  11. dddt_gfm-0.1.0/ddDT_GFM.egg-info/requires.txt +24 -0
  12. dddt_gfm-0.1.0/ddDT_GFM.egg-info/scm_file_list.json +45 -0
  13. dddt_gfm-0.1.0/ddDT_GFM.egg-info/scm_version.json +8 -0
  14. dddt_gfm-0.1.0/ddDT_GFM.egg-info/top_level.txt +1 -0
  15. dddt_gfm-0.1.0/dddt_gfm/__init__.py +9 -0
  16. dddt_gfm-0.1.0/dddt_gfm/data_cleaning/__init__.py +0 -0
  17. dddt_gfm-0.1.0/dddt_gfm/data_cleaning/physics_constraint.py +358 -0
  18. dddt_gfm-0.1.0/dddt_gfm/dataloaders/__init__.py +0 -0
  19. dddt_gfm-0.1.0/dddt_gfm/dataloaders/dataloader_DIW.py +119 -0
  20. dddt_gfm-0.1.0/dddt_gfm/dataloaders/dataloader_sunsmart.py +1278 -0
  21. dddt_gfm-0.1.0/dddt_gfm/dataloaders/rwb_dataloader_sunsmart.py +1380 -0
  22. dddt_gfm-0.1.0/dddt_gfm/exemplar_DIW/__init__.py +0 -0
  23. dddt_gfm-0.1.0/dddt_gfm/exemplar_DIW/training/__init__.py +0 -0
  24. dddt_gfm-0.1.0/dddt_gfm/exemplar_DIW/training/train.py +194 -0
  25. dddt_gfm-0.1.0/dddt_gfm/exemplar_LPBF/__init__.py +0 -0
  26. dddt_gfm-0.1.0/dddt_gfm/exemplar_LPBF/training/__init__.py +0 -0
  27. dddt_gfm-0.1.0/dddt_gfm/exemplar_LPBF/training/train.py +269 -0
  28. dddt_gfm-0.1.0/dddt_gfm/exemplar_PV/__init__.py +0 -0
  29. dddt_gfm-0.1.0/dddt_gfm/exemplar_PV/training/__init__.py +0 -0
  30. dddt_gfm-0.1.0/dddt_gfm/exemplar_PV/training/train.py +262 -0
  31. dddt_gfm-0.1.0/dddt_gfm/models/__init__.py +0 -0
  32. dddt_gfm-0.1.0/dddt_gfm/models/stGAE.py +300 -0
  33. dddt_gfm-0.1.0/dddt_gfm/rwb-graph_UNET.py +161 -0
  34. dddt_gfm-0.1.0/dddt_gfm/tests/__init__.py +0 -0
  35. dddt_gfm-0.1.0/dddt_gfm/tests/test_util.py +5 -0
  36. dddt_gfm-0.1.0/dddt_gfm/util/__init__.py +0 -0
  37. dddt_gfm-0.1.0/dddt_gfm/util/callbacks.py +47 -0
  38. dddt_gfm-0.1.0/dddt_gfm/util/io.py +63 -0
  39. dddt_gfm-0.1.0/docs/Makefile +14 -0
  40. dddt_gfm-0.1.0/docs/_static/.gitkeep +0 -0
  41. dddt_gfm-0.1.0/docs/api.rst +29 -0
  42. dddt_gfm-0.1.0/docs/conf.py +66 -0
  43. dddt_gfm-0.1.0/docs/index.rst +24 -0
  44. dddt_gfm-0.1.0/docs/installation.rst +35 -0
  45. dddt_gfm-0.1.0/docs/make.bat +28 -0
  46. dddt_gfm-0.1.0/notebooks/DIW_demo.ipynb +266 -0
  47. dddt_gfm-0.1.0/notebooks/LPBF_demo.ipynb +954 -0
  48. dddt_gfm-0.1.0/notebooks/PV_demo.ipynb +797 -0
  49. dddt_gfm-0.1.0/pyproject.toml +76 -0
  50. dddt_gfm-0.1.0/setup.cfg +4 -0
@@ -0,0 +1,47 @@
1
+ name: publish
2
+
3
+ # Build and publish to PyPI when a version tag (e.g. v2024.07.03) is pushed.
4
+ # Uses PyPI Trusted Publishing (OIDC) -- no API token/secret required. You must
5
+ # first configure a "trusted publisher" for this project on PyPI:
6
+ # https://docs.pypi.org/trusted-publishers/adding-a-publisher/
7
+ on:
8
+ push:
9
+ tags:
10
+ - "v*"
11
+
12
+ jobs:
13
+ build:
14
+ name: Build distribution
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ with:
19
+ fetch-depth: 0 # setuptools_scm needs full history + tags
20
+ - uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.12"
23
+ - name: Build sdist and wheel
24
+ run: |
25
+ python -m pip install --upgrade build
26
+ python -m build
27
+ - uses: actions/upload-artifact@v4
28
+ with:
29
+ name: dist
30
+ path: dist/
31
+
32
+ publish:
33
+ name: Publish to PyPI
34
+ needs: build
35
+ runs-on: ubuntu-latest
36
+ environment:
37
+ name: pypi
38
+ url: https://pypi.org/p/dddt-gfm
39
+ permissions:
40
+ id-token: write # required for trusted publishing
41
+ steps:
42
+ - uses: actions/download-artifact@v4
43
+ with:
44
+ name: dist
45
+ path: dist/
46
+ - name: Publish to PyPI
47
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,31 @@
1
+ name: test
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+
8
+ jobs:
9
+ test:
10
+
11
+ strategy:
12
+ fail-fast: false # don't cancel other matrix jobs when one fails
13
+ matrix:
14
+ python-version: ["3.9", "3.10", "3.11", "3.12"]
15
+ os: [ubuntu-latest, macos-latest, windows-latest]
16
+
17
+ runs-on: ${{ matrix.os }}
18
+
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ - name: Set up Python
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+ - name: Install dependencies
26
+ run: |
27
+ pip install -e .
28
+ pip install .[test]
29
+ - name: Run tests
30
+ run: |
31
+ pytest
@@ -0,0 +1,195 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
110
+ .pdm.toml
111
+ .pdm-python
112
+ .pdm-build/
113
+
114
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
115
+ __pypackages__/
116
+
117
+ # Celery stuff
118
+ celerybeat-schedule
119
+ celerybeat.pid
120
+
121
+ # SageMath parsed files
122
+ *.sage.py
123
+
124
+ # Environments
125
+ .env
126
+ .venv
127
+ env/
128
+ venv/
129
+ ENV/
130
+ env.bak/
131
+ venv.bak/
132
+
133
+ # Spyder project settings
134
+ .spyderproject
135
+ .spyproject
136
+
137
+ # Rope project settings
138
+ .ropeproject
139
+
140
+ # mkdocs documentation
141
+ /site
142
+
143
+ # mypy
144
+ .mypy_cache/
145
+ .dmypy.json
146
+ dmypy.json
147
+
148
+ # Pyre type checker
149
+ .pyre/
150
+
151
+ # pytype static type analyzer
152
+ .pytype/
153
+
154
+ # Cython debug symbols
155
+ cython_debug/
156
+
157
+ # PyCharm
158
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
159
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
160
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
161
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
162
+ #.idea/
163
+
164
+
165
+ DS_Store/
166
+ *.DS_Store
167
+
168
+ pip-log.txt
169
+ pip-delete-this-directory.txt
170
+
171
+ bin/
172
+ develop-eggs/
173
+ dist/
174
+ eggs/
175
+ lib/
176
+ lib64/
177
+ parts/
178
+ sdist/
179
+ var/
180
+ Drafts/
181
+ */build/
182
+ build/
183
+ venv/
184
+
185
+
186
+ # Byte-compiled / optimized / DLL files
187
+ .pytest_cache/
188
+ __pycache__/
189
+ *.py[cod]
190
+
191
+ data/
192
+ *.csv
193
+
194
+ */lightning_logs/
195
+ lightning_logs/
@@ -0,0 +1,19 @@
1
+ # Read the Docs configuration file
2
+ # https://docs.readthedocs.io/en/stable/config-file/v2.html
3
+
4
+ version: 2
5
+
6
+ build:
7
+ os: ubuntu-24.04
8
+ tools:
9
+ python: "3.12"
10
+
11
+ sphinx:
12
+ configuration: docs/conf.py
13
+
14
+ python:
15
+ install:
16
+ - method: pip
17
+ path: .
18
+ extra_requirements:
19
+ - docs
dddt_gfm-0.1.0/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ BSD 2-Clause License
2
+
3
+ Copyright (c) 2024, CWRU SDLE
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,95 @@
1
+ Metadata-Version: 2.4
2
+ Name: ddDT-GFM
3
+ Version: 0.1.0
4
+ Summary: Data-driven Foundation Models for fleet-level system performance prediction using spatiotemporal graph neural networks.
5
+ Author: Benjamin G. Pierce, Raymond J. Wieser, Weiqi Yue, Yangxin Fan, Hein Htet Aung, Thomas G. Ciardi, Yinghui Wu
6
+ Author-email: "Pawan K. Tripathi" <pawan.tripathi@case.edu>, "Roger H. French" <rxf131@case.edu>
7
+ License: BSD 2-Clause License
8
+
9
+ Copyright (c) 2024, CWRU SDLE
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright notice, this
15
+ list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright notice,
18
+ this list of conditions and the following disclaimer in the documentation
19
+ and/or other materials provided with the distribution.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+ Project-URL: Homepage, https://github.com/cwru-sdle/ddDT-GFM
33
+ Project-URL: Repository, https://github.com/cwru-sdle/ddDT-GFM
34
+ Project-URL: Documentation, https://dddt-gfm.readthedocs.io
35
+ Classifier: Development Status :: 3 - Alpha
36
+ Classifier: Intended Audience :: Science/Research
37
+ Classifier: License :: OSI Approved :: BSD License
38
+ Classifier: Operating System :: OS Independent
39
+ Classifier: Programming Language :: Python :: 3
40
+ Classifier: Programming Language :: Python :: 3.9
41
+ Classifier: Programming Language :: Python :: 3.10
42
+ Classifier: Programming Language :: Python :: 3.11
43
+ Classifier: Programming Language :: Python :: 3.12
44
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
45
+ Requires-Python: >=3.9
46
+ Description-Content-Type: text/markdown
47
+ License-File: LICENSE
48
+ Requires-Dist: numpy
49
+ Requires-Dist: pandas
50
+ Requires-Dist: scipy
51
+ Requires-Dist: scikit-learn
52
+ Requires-Dist: matplotlib
53
+ Requires-Dist: seaborn
54
+ Requires-Dist: tqdm
55
+ Requires-Dist: requests
56
+ Requires-Dist: torch
57
+ Requires-Dist: torchvision
58
+ Requires-Dist: pytorch_lightning
59
+ Provides-Extra: full
60
+ Requires-Dist: torch_geometric; extra == "full"
61
+ Requires-Dist: torch_sparse; extra == "full"
62
+ Requires-Dist: torch-spatiotemporal; extra == "full"
63
+ Provides-Extra: test
64
+ Requires-Dist: pytest; extra == "test"
65
+ Provides-Extra: docs
66
+ Requires-Dist: sphinx>=7; extra == "docs"
67
+ Requires-Dist: furo; extra == "docs"
68
+ Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
69
+ Dynamic: license-file
70
+
71
+ # ddDT-GFM
72
+ ## Data-driven Digital Twins: Generalized Foundation Models for Fleet Level System Performance Prediction, Advanced Manufacturing Tool and Part Qualification, Conformance, and Lifetime
73
+
74
+ ## Abstract
75
+ Digital twins are comprised of computational models that mimic the 'as built' characteristics of devices, systems, and networks of systems whose performance in the real world warrants quantitative and critical assessment.
76
+ The literature on constructing digital twins is historically focused around task-specific, physics-based models that seek to understand the device from first principles, thereby constructing an idealized understanding of the system.
77
+ However, these ``empirical digital twins" (eDT) can be quite difficult to construct, as the level of detail required to accurately model the complex physics of many devices is often missing or expensive to obtain, especially for systems with widespread deployment.
78
+ Additionally, eDTs generally assume the device is working as intended; in practice, many systems experience some form of derating or degradation that causes them to operate off-specification.
79
+ As it is often the goal of a digital twin model to quantify these departures from the idealized system, it is quite difficult to separate derated assumptions from the expected model output.
80
+ In contrast, data-driven digital twins (ddDT) seek to model the system as it actually is based on real observations about the device in question.
81
+ Additionally, ddDTs generally utilize a flexible model architecture (typically an artificial neural network) to avoid injecting implicit bias into the system.
82
+ This flexibility also lends itself to another advantage: modularity.
83
+ Digital twins are often utilized to answer multiple different questions about the system.
84
+ With a ddDT, it is possible to train the model in a self-supervised manner via a reconstruction objective in order to obtain an encoder module.
85
+ This module can then be used as a Foundation Model (FM) for different tasks without either constructing a entirely new task-specific eDT or training another ddDT from scratch.
86
+ This work presents a unified pipeline for constructing data-driven Foundation Models for three exemplifying cases: solar photovoltaic fleets, direct ink write additive manufacturing, and laser powder bed fusion.
87
+ Although these three systems are conceptually very different, the presented Foundation Model utilizes the flexibility of spatiotemporal graph neural networks (st-GNNs) to apply the same methodology to each case, allowing scientists to focus on their scientific objectives rather than troubleshooting a overwhelmingly detailed modeling pipeline.
88
+
89
+ ## Downloading data
90
+ You can download the data used in this work from OSF with the `util` module of this package.
91
+ For example, to download a PV site:
92
+ ```py
93
+ from dddt_gfm.util.io import OSF_download
94
+ OSF_download(0, 'downloaded_test.csv', './')
95
+ ```
@@ -0,0 +1,25 @@
1
+ # ddDT-GFM
2
+ ## Data-driven Digital Twins: Generalized Foundation Models for Fleet Level System Performance Prediction, Advanced Manufacturing Tool and Part Qualification, Conformance, and Lifetime
3
+
4
+ ## Abstract
5
+ Digital twins are comprised of computational models that mimic the 'as built' characteristics of devices, systems, and networks of systems whose performance in the real world warrants quantitative and critical assessment.
6
+ The literature on constructing digital twins is historically focused around task-specific, physics-based models that seek to understand the device from first principles, thereby constructing an idealized understanding of the system.
7
+ However, these ``empirical digital twins" (eDT) can be quite difficult to construct, as the level of detail required to accurately model the complex physics of many devices is often missing or expensive to obtain, especially for systems with widespread deployment.
8
+ Additionally, eDTs generally assume the device is working as intended; in practice, many systems experience some form of derating or degradation that causes them to operate off-specification.
9
+ As it is often the goal of a digital twin model to quantify these departures from the idealized system, it is quite difficult to separate derated assumptions from the expected model output.
10
+ In contrast, data-driven digital twins (ddDT) seek to model the system as it actually is based on real observations about the device in question.
11
+ Additionally, ddDTs generally utilize a flexible model architecture (typically an artificial neural network) to avoid injecting implicit bias into the system.
12
+ This flexibility also lends itself to another advantage: modularity.
13
+ Digital twins are often utilized to answer multiple different questions about the system.
14
+ With a ddDT, it is possible to train the model in a self-supervised manner via a reconstruction objective in order to obtain an encoder module.
15
+ This module can then be used as a Foundation Model (FM) for different tasks without either constructing a entirely new task-specific eDT or training another ddDT from scratch.
16
+ This work presents a unified pipeline for constructing data-driven Foundation Models for three exemplifying cases: solar photovoltaic fleets, direct ink write additive manufacturing, and laser powder bed fusion.
17
+ Although these three systems are conceptually very different, the presented Foundation Model utilizes the flexibility of spatiotemporal graph neural networks (st-GNNs) to apply the same methodology to each case, allowing scientists to focus on their scientific objectives rather than troubleshooting a overwhelmingly detailed modeling pipeline.
18
+
19
+ ## Downloading data
20
+ You can download the data used in this work from OSF with the `util` module of this package.
21
+ For example, to download a PV site:
22
+ ```py
23
+ from dddt_gfm.util.io import OSF_download
24
+ OSF_download(0, 'downloaded_test.csv', './')
25
+ ```
@@ -0,0 +1,95 @@
1
+ Metadata-Version: 2.4
2
+ Name: ddDT-GFM
3
+ Version: 0.1.0
4
+ Summary: Data-driven Foundation Models for fleet-level system performance prediction using spatiotemporal graph neural networks.
5
+ Author: Benjamin G. Pierce, Raymond J. Wieser, Weiqi Yue, Yangxin Fan, Hein Htet Aung, Thomas G. Ciardi, Yinghui Wu
6
+ Author-email: "Pawan K. Tripathi" <pawan.tripathi@case.edu>, "Roger H. French" <rxf131@case.edu>
7
+ License: BSD 2-Clause License
8
+
9
+ Copyright (c) 2024, CWRU SDLE
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright notice, this
15
+ list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright notice,
18
+ this list of conditions and the following disclaimer in the documentation
19
+ and/or other materials provided with the distribution.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+
32
+ Project-URL: Homepage, https://github.com/cwru-sdle/ddDT-GFM
33
+ Project-URL: Repository, https://github.com/cwru-sdle/ddDT-GFM
34
+ Project-URL: Documentation, https://dddt-gfm.readthedocs.io
35
+ Classifier: Development Status :: 3 - Alpha
36
+ Classifier: Intended Audience :: Science/Research
37
+ Classifier: License :: OSI Approved :: BSD License
38
+ Classifier: Operating System :: OS Independent
39
+ Classifier: Programming Language :: Python :: 3
40
+ Classifier: Programming Language :: Python :: 3.9
41
+ Classifier: Programming Language :: Python :: 3.10
42
+ Classifier: Programming Language :: Python :: 3.11
43
+ Classifier: Programming Language :: Python :: 3.12
44
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
45
+ Requires-Python: >=3.9
46
+ Description-Content-Type: text/markdown
47
+ License-File: LICENSE
48
+ Requires-Dist: numpy
49
+ Requires-Dist: pandas
50
+ Requires-Dist: scipy
51
+ Requires-Dist: scikit-learn
52
+ Requires-Dist: matplotlib
53
+ Requires-Dist: seaborn
54
+ Requires-Dist: tqdm
55
+ Requires-Dist: requests
56
+ Requires-Dist: torch
57
+ Requires-Dist: torchvision
58
+ Requires-Dist: pytorch_lightning
59
+ Provides-Extra: full
60
+ Requires-Dist: torch_geometric; extra == "full"
61
+ Requires-Dist: torch_sparse; extra == "full"
62
+ Requires-Dist: torch-spatiotemporal; extra == "full"
63
+ Provides-Extra: test
64
+ Requires-Dist: pytest; extra == "test"
65
+ Provides-Extra: docs
66
+ Requires-Dist: sphinx>=7; extra == "docs"
67
+ Requires-Dist: furo; extra == "docs"
68
+ Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
69
+ Dynamic: license-file
70
+
71
+ # ddDT-GFM
72
+ ## Data-driven Digital Twins: Generalized Foundation Models for Fleet Level System Performance Prediction, Advanced Manufacturing Tool and Part Qualification, Conformance, and Lifetime
73
+
74
+ ## Abstract
75
+ Digital twins are comprised of computational models that mimic the 'as built' characteristics of devices, systems, and networks of systems whose performance in the real world warrants quantitative and critical assessment.
76
+ The literature on constructing digital twins is historically focused around task-specific, physics-based models that seek to understand the device from first principles, thereby constructing an idealized understanding of the system.
77
+ However, these ``empirical digital twins" (eDT) can be quite difficult to construct, as the level of detail required to accurately model the complex physics of many devices is often missing or expensive to obtain, especially for systems with widespread deployment.
78
+ Additionally, eDTs generally assume the device is working as intended; in practice, many systems experience some form of derating or degradation that causes them to operate off-specification.
79
+ As it is often the goal of a digital twin model to quantify these departures from the idealized system, it is quite difficult to separate derated assumptions from the expected model output.
80
+ In contrast, data-driven digital twins (ddDT) seek to model the system as it actually is based on real observations about the device in question.
81
+ Additionally, ddDTs generally utilize a flexible model architecture (typically an artificial neural network) to avoid injecting implicit bias into the system.
82
+ This flexibility also lends itself to another advantage: modularity.
83
+ Digital twins are often utilized to answer multiple different questions about the system.
84
+ With a ddDT, it is possible to train the model in a self-supervised manner via a reconstruction objective in order to obtain an encoder module.
85
+ This module can then be used as a Foundation Model (FM) for different tasks without either constructing a entirely new task-specific eDT or training another ddDT from scratch.
86
+ This work presents a unified pipeline for constructing data-driven Foundation Models for three exemplifying cases: solar photovoltaic fleets, direct ink write additive manufacturing, and laser powder bed fusion.
87
+ Although these three systems are conceptually very different, the presented Foundation Model utilizes the flexibility of spatiotemporal graph neural networks (st-GNNs) to apply the same methodology to each case, allowing scientists to focus on their scientific objectives rather than troubleshooting a overwhelmingly detailed modeling pipeline.
88
+
89
+ ## Downloading data
90
+ You can download the data used in this work from OSF with the `util` module of this package.
91
+ For example, to download a PV site:
92
+ ```py
93
+ from dddt_gfm.util.io import OSF_download
94
+ OSF_download(0, 'downloaded_test.csv', './')
95
+ ```
@@ -0,0 +1,48 @@
1
+ .gitignore
2
+ .readthedocs.yaml
3
+ LICENSE
4
+ README.md
5
+ pyproject.toml
6
+ .github/workflows/publish.yml
7
+ .github/workflows/test.yml
8
+ ddDT_GFM.egg-info/PKG-INFO
9
+ ddDT_GFM.egg-info/SOURCES.txt
10
+ ddDT_GFM.egg-info/dependency_links.txt
11
+ ddDT_GFM.egg-info/requires.txt
12
+ ddDT_GFM.egg-info/scm_file_list.json
13
+ ddDT_GFM.egg-info/scm_version.json
14
+ ddDT_GFM.egg-info/top_level.txt
15
+ dddt_gfm/__init__.py
16
+ dddt_gfm/rwb-graph_UNET.py
17
+ dddt_gfm/data_cleaning/__init__.py
18
+ dddt_gfm/data_cleaning/physics_constraint.py
19
+ dddt_gfm/dataloaders/__init__.py
20
+ dddt_gfm/dataloaders/dataloader_DIW.py
21
+ dddt_gfm/dataloaders/dataloader_sunsmart.py
22
+ dddt_gfm/dataloaders/rwb_dataloader_sunsmart.py
23
+ dddt_gfm/exemplar_DIW/__init__.py
24
+ dddt_gfm/exemplar_DIW/training/__init__.py
25
+ dddt_gfm/exemplar_DIW/training/train.py
26
+ dddt_gfm/exemplar_LPBF/__init__.py
27
+ dddt_gfm/exemplar_LPBF/training/__init__.py
28
+ dddt_gfm/exemplar_LPBF/training/train.py
29
+ dddt_gfm/exemplar_PV/__init__.py
30
+ dddt_gfm/exemplar_PV/training/__init__.py
31
+ dddt_gfm/exemplar_PV/training/train.py
32
+ dddt_gfm/models/__init__.py
33
+ dddt_gfm/models/stGAE.py
34
+ dddt_gfm/tests/__init__.py
35
+ dddt_gfm/tests/test_util.py
36
+ dddt_gfm/util/__init__.py
37
+ dddt_gfm/util/callbacks.py
38
+ dddt_gfm/util/io.py
39
+ docs/Makefile
40
+ docs/api.rst
41
+ docs/conf.py
42
+ docs/index.rst
43
+ docs/installation.rst
44
+ docs/make.bat
45
+ docs/_static/.gitkeep
46
+ notebooks/DIW_demo.ipynb
47
+ notebooks/LPBF_demo.ipynb
48
+ notebooks/PV_demo.ipynb
@@ -0,0 +1,24 @@
1
+ numpy
2
+ pandas
3
+ scipy
4
+ scikit-learn
5
+ matplotlib
6
+ seaborn
7
+ tqdm
8
+ requests
9
+ torch
10
+ torchvision
11
+ pytorch_lightning
12
+
13
+ [docs]
14
+ sphinx>=7
15
+ furo
16
+ sphinx-autodoc-typehints
17
+
18
+ [full]
19
+ torch_geometric
20
+ torch_sparse
21
+ torch-spatiotemporal
22
+
23
+ [test]
24
+ pytest
@@ -0,0 +1,45 @@
1
+ {
2
+ "files": [
3
+ "README.md",
4
+ "LICENSE",
5
+ "pyproject.toml",
6
+ ".gitignore",
7
+ ".readthedocs.yaml",
8
+ "docs/Makefile",
9
+ "docs/index.rst",
10
+ "docs/api.rst",
11
+ "docs/make.bat",
12
+ "docs/installation.rst",
13
+ "docs/conf.py",
14
+ "docs/_static/.gitkeep",
15
+ "dddt_gfm/__init__.py",
16
+ "dddt_gfm/rwb-graph_UNET.py",
17
+ "dddt_gfm/models/__init__.py",
18
+ "dddt_gfm/models/stGAE.py",
19
+ "dddt_gfm/data_cleaning/__init__.py",
20
+ "dddt_gfm/data_cleaning/physics_constraint.py",
21
+ "dddt_gfm/exemplar_LPBF/__init__.py",
22
+ "dddt_gfm/exemplar_LPBF/training/__init__.py",
23
+ "dddt_gfm/exemplar_LPBF/training/train.py",
24
+ "dddt_gfm/util/__init__.py",
25
+ "dddt_gfm/util/io.py",
26
+ "dddt_gfm/util/callbacks.py",
27
+ "dddt_gfm/exemplar_DIW/__init__.py",
28
+ "dddt_gfm/exemplar_DIW/training/__init__.py",
29
+ "dddt_gfm/exemplar_DIW/training/train.py",
30
+ "dddt_gfm/dataloaders/__init__.py",
31
+ "dddt_gfm/dataloaders/rwb_dataloader_sunsmart.py",
32
+ "dddt_gfm/dataloaders/dataloader_sunsmart.py",
33
+ "dddt_gfm/dataloaders/dataloader_DIW.py",
34
+ "dddt_gfm/exemplar_PV/__init__.py",
35
+ "dddt_gfm/exemplar_PV/training/__init__.py",
36
+ "dddt_gfm/exemplar_PV/training/train.py",
37
+ "dddt_gfm/tests/__init__.py",
38
+ "dddt_gfm/tests/test_util.py",
39
+ "notebooks/DIW_demo.ipynb",
40
+ "notebooks/LPBF_demo.ipynb",
41
+ "notebooks/PV_demo.ipynb",
42
+ ".github/workflows/test.yml",
43
+ ".github/workflows/publish.yml"
44
+ ]
45
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.1.0",
3
+ "distance": 0,
4
+ "node": "g25c83e5c83a17f1e38f9655abc00634d9903611d",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-07-15"
8
+ }
@@ -0,0 +1 @@
1
+ dddt_gfm