ansys-saf-cli 4.1.dev0__py3-none-any.whl

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 (143) hide show
  1. ansys/saf/cli/__init__.py +15 -0
  2. ansys/saf/cli/_cli/__init__.py +15 -0
  3. ansys/saf/cli/_cli/main.py +816 -0
  4. ansys/saf/cli/_cli/py.typed +0 -0
  5. ansys/saf/cli/_config/__init__.py +15 -0
  6. ansys/saf/cli/_config/const.py +45 -0
  7. ansys/saf/cli/_config/py.typed +0 -0
  8. ansys/saf/cli/_database/__init__.py +15 -0
  9. ansys/saf/cli/_database/manager.py +94 -0
  10. ansys/saf/cli/_database/models.py +53 -0
  11. ansys/saf/cli/_database/py.typed +0 -0
  12. ansys/saf/cli/_solutions/__init__.py +15 -0
  13. ansys/saf/cli/_solutions/add_step.py +256 -0
  14. ansys/saf/cli/_solutions/dependencies.py +162 -0
  15. ansys/saf/cli/_solutions/environment.py +1145 -0
  16. ansys/saf/cli/_solutions/plugins.py +254 -0
  17. ansys/saf/cli/_solutions/py.typed +0 -0
  18. ansys/saf/cli/_solutions/scaffolding.py +73 -0
  19. ansys/saf/cli/_solutions/templates/__init__.py +15 -0
  20. ansys/saf/cli/_solutions/templates/py.typed +0 -0
  21. ansys/saf/cli/_solutions/templates/solution/cookiecutter.json +18 -0
  22. ansys/saf/cli/_solutions/templates/solution/hooks/post_gen_project.py +54 -0
  23. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.codespell.ignore +2 -0
  24. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.devcontainer/devcontainer.json +26 -0
  25. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.env +5 -0
  26. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.flake8 +8 -0
  27. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/labeler.yml +9 -0
  28. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/labels.yml +27 -0
  29. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/workflows/build-release.yml +175 -0
  30. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.github/workflows/label.yml +89 -0
  31. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.gitignore +137 -0
  32. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.pre-commit-config.yaml +48 -0
  33. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.release-please-manifest.json +3 -0
  34. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.reuse/templates/copyright.jinja2 +1 -0
  35. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.vscode/extensions.json +8 -0
  36. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/.vscode/launch.json +28 -0
  37. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/AUTHORS +12 -0
  38. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CHANGELOG.md +1 -0
  39. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CODEOWNERS +3 -0
  40. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CODE_OF_CONDUCT.md +65 -0
  41. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CONTRIBUTING.md +2 -0
  42. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/CONTRIBUTORS.md +9 -0
  43. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/LICENSE.rst +41 -0
  44. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/README.md +69 -0
  45. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/Dockerfile +43 -0
  46. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/README.md +13 -0
  47. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/distributed-deployment-template/.env +27 -0
  48. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/distributed-deployment-template/compose.yaml +132 -0
  49. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone/.env +20 -0
  50. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone/compose.yaml +118 -0
  51. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-hps/.env +28 -0
  52. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-hps/compose.yaml +146 -0
  53. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-minerva/.env +25 -0
  54. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/deployments/standalone-with-minerva/compose.yaml +122 -0
  55. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/.vale.ini +28 -0
  56. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/Makefile +30 -0
  57. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/changelog.d/changelog_template.jinja +17 -0
  58. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/make.bat +46 -0
  59. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_static/css/custom.css +8 -0
  60. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_static/images/repository-banner.png +0 -0
  61. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/_templates/README.md +1 -0
  62. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/changelog.rst +12 -0
  63. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/conf.py +253 -0
  64. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/examples.rst +8 -0
  65. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/getting_started/desktop_installation.rst +165 -0
  66. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/getting_started/docker_installation.rst +68 -0
  67. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/index.rst +51 -0
  68. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/source/user_guide/index.rst +6 -0
  69. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/styles/config/vocabularies/ANSYS/accept.txt +5 -0
  70. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/doc/styles/config/vocabularies/ANSYS/reject.txt +0 -0
  71. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/examples/README.md +1 -0
  72. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/lock_files/dash/poetry.lock +7621 -0
  73. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/lock_files/no_ui/poetry.lock +7173 -0
  74. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/minerva/cli/README.md +3 -0
  75. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/minerva/oauth/App_Data/Certificates/README.md +3 -0
  76. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/minerva/oauth/oauth.config +9 -0
  77. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/pyproject.toml +192 -0
  78. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/release-please-config.json +9 -0
  79. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/sonar-project.properties +12 -0
  80. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/__init__.py +3 -0
  81. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/main.py +19 -0
  82. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/portal_assets/application.svg +36 -0
  83. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/portal_assets/description.json +3 -0
  84. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/portal_assets/project.svg +1 -0
  85. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/definition.py +24 -0
  86. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/first_step.py +34 -0
  87. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/method_assets/README.md +1 -0
  88. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/scripts/README.md +1 -0
  89. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/scripts/assets/README.md +1 -0
  90. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/solution/second_step.py +12 -0
  91. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/app.py +30 -0
  92. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/css/all.css +9 -0
  93. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/css/bootstrap.min.css +6 -0
  94. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/css/style.css +47 -0
  95. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/carbon--ibm-engineering-workflow-mgmt.svg +1 -0
  96. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/carbon--return.svg +1 -0
  97. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/game-icons--crossed-air-flows.svg +1 -0
  98. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/material-symbols--home.svg +1 -0
  99. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/radix-icons--moon.svg +1 -0
  100. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/radix-icons--sun.svg +1 -0
  101. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/streamline--startup-solid.svg +1 -0
  102. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/dark/teenyicons--doc-solid.svg +1 -0
  103. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/carbon--ibm-engineering-workflow-mgmt.svg +1 -0
  104. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/carbon--return.svg +1 -0
  105. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/game-icons--crossed-air-flows.svg +1 -0
  106. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/material-symbols--home.svg +1 -0
  107. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/radix-icons--moon.svg +1 -0
  108. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/radix-icons--sun.svg +1 -0
  109. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/streamline--startup-solid.svg +1 -0
  110. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/icons/light/teenyicons--doc-solid.svg +1 -0
  111. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/images/README.md +1 -0
  112. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/images/workflow-placeholder.png +0 -0
  113. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/installer/README.md +5 -0
  114. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/logos/dark/placeholder_logo.png +0 -0
  115. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/logos/light/placeholder_logo.png +0 -0
  116. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/orchestrator/README.md +3 -0
  117. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/pywebview/README.md +3 -0
  118. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/assets/scripts/README.md +1 -0
  119. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/components/README.md +1 -0
  120. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/pages/about_page.py +71 -0
  121. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/pages/first_page.py +147 -0
  122. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/pages/page.py +367 -0
  123. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/src/{{ cookiecutter.__solution_namespace_path }}/{{cookiecutter.__solution_module_name}}/ui/pages/second_page.py +32 -0
  124. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tests/common_test_files/README.md +1 -0
  125. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tests/conftest.py +37 -0
  126. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tests/unit/test_solution_api.py +42 -0
  127. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tests/unit/test_solution_ui.py +30 -0
  128. ansys/saf/cli/_solutions/templates/solution/{{cookiecutter.__solution_name}}/tox.ini +56 -0
  129. ansys/saf/cli/_utilities/__init__.py +15 -0
  130. ansys/saf/cli/_utilities/archiver.py +67 -0
  131. ansys/saf/cli/_utilities/backup.py +181 -0
  132. ansys/saf/cli/_utilities/conversion.py +64 -0
  133. ansys/saf/cli/_utilities/platform.py +26 -0
  134. ansys/saf/cli/_utilities/py.typed +0 -0
  135. ansys/saf/cli/_utilities/solution_modules.py +173 -0
  136. ansys/saf/cli/integrations/solutions_manager.py +64 -0
  137. ansys/saf/cli/py.typed +0 -0
  138. ansys_saf_cli-4.1.dev0.dist-info/METADATA +201 -0
  139. ansys_saf_cli-4.1.dev0.dist-info/RECORD +143 -0
  140. ansys_saf_cli-4.1.dev0.dist-info/WHEEL +4 -0
  141. ansys_saf_cli-4.1.dev0.dist-info/entry_points.txt +3 -0
  142. ansys_saf_cli-4.1.dev0.dist-info/licenses/AUTHORS +12 -0
  143. ansys_saf_cli-4.1.dev0.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,175 @@
1
+ name: build and release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+ types: [opened, reopened, synchronize, ready_for_review]
11
+ release:
12
+ types: [published]
13
+ workflow_dispatch:
14
+
15
+ env:
16
+ MAIN_PYTHON_VERSION: "3.12"
17
+ POETRY_VERSION: "2.3.2"
18
+ DOCUMENTATION_CNAME: "" # Replace with the CNAME of the documentation
19
+ WHEEL: "{{ cookiecutter.__solution_name }}"
20
+ HTML_DOCUMENTATION_ARTIFACT: "{{ cookiecutter.__solution_name }}-documentation"
21
+
22
+ concurrency:
23
+ group: {{ "${{ github.workflow }}-${{ github.ref }}" }}
24
+ cancel-in-progress: true
25
+
26
+ jobs:
27
+ check-code-style:
28
+ name: Check code style
29
+ runs-on: ubuntu-latest
30
+ timeout-minutes: 10
31
+ steps:
32
+ - name: Check code style
33
+ uses: ansys/actions/code-style@v10
34
+ with:
35
+ python-version: {{ "${{ env.MAIN_PYTHON_VERSION }}" }}
36
+
37
+ {% if cookiecutter.__ui_framework != "none" %}
38
+ build:
39
+ name: Build
40
+ runs-on: windows-latest
41
+ env:
42
+ # Workaround for Python toolset mismatch on windows-2025:
43
+ # Python's PCbuild conditionally tries to use v140 (VS 2015 toolset) when
44
+ # PlatformToolset is empty. However, v140 is not available on windows-2025
45
+ # (which has VS 2022 Enterprise), causing an MSB8020 build error.
46
+ # By pre-setting PlatformToolset to v143 here, the conditional check sees a
47
+ # non-empty value and skips the v140 assignment, using v143 instead.
48
+ PlatformToolset: "v143"
49
+ steps:
50
+ - name: Enable long paths
51
+ shell: bash
52
+ run: git config --global core.longpaths true
53
+
54
+ - name: Build
55
+ uses: ansys/saf-devops/saf-build@v1
56
+ with:
57
+ python-version: {{ "${{ env.MAIN_PYTHON_VERSION }}" }}
58
+ poetry-version: {{ "${{ env.POETRY_VERSION }}" }}
59
+ dependencies-source: "build-system"
60
+ artifact-name: {{ "${{ env.WHEEL }}-${{ runner.os }}" }}
61
+ build-result: executable
62
+ {% endif %}
63
+
64
+ run-tests:
65
+ name: Run tests
66
+ runs-on: windows-latest
67
+ timeout-minutes: 20
68
+ strategy:
69
+ matrix:
70
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
71
+ fail-fast: false
72
+ env:
73
+ # Workaround for Python toolset mismatch on windows-2025:
74
+ # Python's PCbuild conditionally tries to use v140 (VS 2015 toolset) when
75
+ # PlatformToolset is empty. However, v140 is not available on windows-2025
76
+ # (which has VS 2022 Enterprise), causing an MSB8020 build error.
77
+ # By pre-setting PlatformToolset to v143 here, the conditional check sees a
78
+ # non-empty value and skips the v140 assignment, using v143 instead.
79
+ PlatformToolset: "v143"
80
+ steps:
81
+ - name: Run tests
82
+ uses: ansys/actions/tests-pytest@v10
83
+ with:
84
+ python-version: {{ "${{ matrix.python-version }}" }}
85
+ {% if cookiecutter.__ui_framework != "none" %}
86
+ optional-dependencies-name: "tests,ui"
87
+ {% else %}
88
+ optional-dependencies-name: "tests"
89
+ {% endif %}
90
+
91
+ check-licenses:
92
+ if: |
93
+ (github.event_name == 'push' && github.ref == 'refs/heads/main') ||
94
+ github.event_name == 'workflow_dispatch'
95
+ runs-on: ubuntu-latest
96
+ steps:
97
+ - name: Checkout repository
98
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
99
+ with:
100
+ persist-credentials: false
101
+
102
+ - name: Prepare python environment of the solution
103
+ id: python-setup
104
+ uses: ansys/saf-devops/prepare-python-environment@v1
105
+ with:
106
+ python-version: {{ "${{ env.MAIN_PYTHON_VERSION }}" }}
107
+ poetry-version: {{ "${{ env.POETRY_VERSION }}" }}
108
+ python-project-path: "."
109
+ poetry-install-args: "--all-extras"
110
+
111
+ - name: Check licenses
112
+ uses: ansys/actions/check-licenses@73fa84c704bb6691f254cfe4d4b928c338b0d4da # v10.3.0
113
+ with:
114
+ checkout: false
115
+ python-version: {{ "${{ env.MAIN_PYTHON_VERSION }}" }}
116
+ target: "all"
117
+ skip-install: true
118
+ activate-venv: "source {{ "${{ steps.python-setup.outputs.venv-exe-location }}" }}/activate"
119
+ use-uv: false
120
+
121
+ check-doc-style:
122
+ name: Check documentation style
123
+ runs-on: ubuntu-latest
124
+ timeout-minutes: 10
125
+ steps:
126
+ - name: Check documentation style
127
+ uses: ansys/actions/doc-style@v10
128
+ with:
129
+ token: {{ "${{ github.token }}" }}
130
+ files: "doc"
131
+
132
+ build-doc:
133
+ name: Build documentation
134
+ runs-on: ubuntu-latest
135
+ needs: check-doc-style
136
+ timeout-minutes: 10
137
+ steps:
138
+ - name: Build documentation
139
+ uses: ansys/actions/doc-build@v10
140
+ with:
141
+ python-version: {{ "${{ env.MAIN_PYTHON_VERSION }}" }}
142
+ check-links: true
143
+ optional-dependencies-name: ''
144
+ group-dependencies-name: 'doc'
145
+ uploaded-artifact-name-prefix: {{ "${{ env.HTML_DOCUMENTATION_ARTIFACT }}" }}
146
+ env:
147
+ REPOSITORY_NAME: {{ "${{ github.repository }}" }}
148
+
149
+ doc-deploy-dev:
150
+ name: "Deploy development documentation"
151
+ # Deploy development only when merging or pushing to the 'main' branch
152
+ if: github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/v')
153
+ runs-on: ubuntu-latest
154
+ needs: build-doc
155
+ steps:
156
+ - if: {{ "${{ env.DOCUMENTATION_CNAME != '' }}" }}
157
+ uses: ansys/actions/doc-deploy-dev@v5
158
+ with:
159
+ doc-artifact-name: {{ "${{ env.HTML_DOCUMENTATION_ARTIFACT }}" }}-html
160
+ cname: {{ "${{ env.DOCUMENTATION_CNAME }}" }}
161
+ token: {{ "${{ github.token }}" }}
162
+
163
+ doc-deploy-stable:
164
+ name: "Deploy stable documentation"
165
+ if: github.event_name == 'release'
166
+ runs-on: ubuntu-latest
167
+ needs:
168
+ - build-doc
169
+ steps:
170
+ - if: {{ "${{ env.DOCUMENTATION_CNAME != '' }}" }}
171
+ uses: ansys/actions/doc-deploy-stable@v5
172
+ with:
173
+ doc-artifact-name: {{ "${{ env.HTML_DOCUMENTATION_ARTIFACT }}" }}-html
174
+ cname: {{ "${{ env.DOCUMENTATION_CNAME }}" }}
175
+ token: {{ "${{ github.token }}" }}
@@ -0,0 +1,89 @@
1
+ name: Labeler
2
+ on:
3
+ pull_request:
4
+ # opened, reopened, and synchronize are default for pull_request
5
+ # edited - when PR title or body is changed
6
+ # labeled - when labels are added to PR
7
+ types: [opened, reopened, synchronize, edited, labeled]
8
+ push:
9
+ branches: [ main ]
10
+ paths:
11
+ - '.github/labels.yml'
12
+
13
+ concurrency:
14
+ group: {{ '${{ github.workflow }}-${{ github.ref }}' }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+
19
+ label-syncer:
20
+ name: Syncer
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: micnncim/action-label-syncer@v1
25
+ env:
26
+ GITHUB_TOKEN: {{ '${{ secrets.GITHUB_TOKEN }}' }}
27
+
28
+ labeler:
29
+ name: Set labels
30
+ needs: [label-syncer]
31
+ permissions:
32
+ contents: read
33
+ pull-requests: write
34
+ runs-on: ubuntu-latest
35
+ steps:
36
+
37
+ # Label based on modified files
38
+ - name: Label based on changed files
39
+ uses: actions/labeler@v5
40
+ with:
41
+ repo-token: {{ "${{ secrets.GITHUB_TOKEN }}" }}
42
+ sync-labels: true
43
+
44
+ # Label based on branch name
45
+ - uses: actions-ecosystem/action-add-labels@v1
46
+ if: |
47
+ startsWith(github.event.pull_request.head.ref, 'doc') ||
48
+ startsWith(github.event.pull_request.head.ref, 'docs')
49
+ with:
50
+ labels: documentation
51
+
52
+ - uses: actions-ecosystem/action-add-labels@v1
53
+ if: |
54
+ startsWith(github.event.pull_request.head.ref, 'maint') ||
55
+ startsWith(github.event.pull_request.head.ref, 'no-ci') ||
56
+ startsWith(github.event.pull_request.head.ref, 'ci')
57
+ with:
58
+ labels: maintenance
59
+
60
+ - uses: actions-ecosystem/action-add-labels@v1
61
+ if: startsWith(github.event.pull_request.head.ref, 'feat')
62
+ with:
63
+ labels: |
64
+ enhancement
65
+
66
+ - uses: actions-ecosystem/action-add-labels@v1
67
+ if: |
68
+ startsWith(github.event.pull_request.head.ref, 'fix') ||
69
+ startsWith(github.event.pull_request.head.ref, 'patch')
70
+ with:
71
+ labels: bug
72
+
73
+ commenter:
74
+ runs-on: ubuntu-latest
75
+ steps:
76
+ - name: Suggest to add labels
77
+ uses: peter-evans/create-or-update-comment@v2
78
+ # Execute only when no labels have been applied to the pull request
79
+ if: toJSON(github.event.pull_request.labels.*.name) == '{}'
80
+ with:
81
+ issue-number: {{ '${{ github.event.pull_request.number }}' }}
82
+ body: |
83
+ Please add one of the following labels to add this contribution to the Release Notes :point_down:
84
+ - [bug]({{ cookiecutter.__repository_url }}/pulls?q=label%3Abug+)
85
+ - [documentation]({{ cookiecutter.__repository_url }}/pulls?q=label%3Adocumentation+)
86
+ - [enhancement]({{ cookiecutter.__repository_url }}/pulls?q=label%3Aenhancement+)
87
+ - [good first issue]({{ cookiecutter.__repository_url }}/pulls?q=label%3Agood+first+issue)
88
+ - [maintenance]({{ cookiecutter.__repository_url }}/pulls?q=label%3Amaintenance+)
89
+ - [release]({{ cookiecutter.__repository_url }}/pulls?q=label%3Arelease+)
@@ -0,0 +1,137 @@
1
+ # Created by https://www.toptal.com/developers/gitignore/api/python
2
+ # Edit at https://www.toptal.com/developers/gitignore?templates=python
3
+
4
+ ### Python ###
5
+ # Byte-compiled / optimized / DLL files
6
+ __pycache__/
7
+ *.py[cod]
8
+ *$py.class
9
+
10
+ # C extensions
11
+ *.so
12
+
13
+ # Distribution / packaging
14
+ .Python
15
+ # build/
16
+ develop-eggs/
17
+ dist/
18
+ downloads/
19
+ eggs/
20
+ .eggs/
21
+ lib/
22
+ lib64/
23
+ parts/
24
+ sdist/
25
+ var/
26
+ wheels/
27
+ share/python-wheels/
28
+ *.egg-info/
29
+ .installed.cfg
30
+ *.egg
31
+ MANIFEST
32
+ *.whl
33
+
34
+ # PyInstaller
35
+ # Usually these files are written by a python script from a template
36
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
37
+ *.manifest
38
+ *.spec
39
+
40
+ # Installer logs
41
+ pip-log.txt
42
+ pip-delete-this-directory.txt
43
+
44
+ # Unit test / coverage reports
45
+ htmlcov/
46
+ .tox/
47
+ {toxworkdir}/
48
+ .nox/
49
+ .coverage
50
+ .coverage.*
51
+ .cache
52
+ nosetests.xml
53
+ coverage.xml
54
+ coverage.json
55
+ coverage.lcov
56
+ *.cover
57
+ *.py,cover
58
+ .hypothesis/
59
+ .pytest_cache/
60
+ cover/
61
+
62
+ # Translations
63
+ *.mo
64
+ *.pot
65
+
66
+ # Django stuff:
67
+ *.log
68
+ local_settings.py
69
+ db.sqlite3
70
+ db.sqlite3-journal
71
+
72
+ # Flask stuff:
73
+ instance/
74
+ .webassets-cache
75
+
76
+ # Scrapy stuff:
77
+ .scrapy
78
+
79
+ # Sphinx documentation
80
+ doc/build/
81
+
82
+ # PyBuilder
83
+ .pybuilder/
84
+ target/
85
+
86
+ # Jupyter Notebook
87
+ .ipynb_checkpoints
88
+
89
+ # IPython
90
+ profile_default/
91
+ ipython_config.py
92
+
93
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
94
+ __pypackages__/
95
+
96
+ # Celery stuff
97
+ celerybeat-schedule
98
+ celerybeat.pid
99
+
100
+ # SageMath parsed files
101
+ *.sage.py
102
+
103
+ # Environments
104
+ .poetry
105
+ .venv
106
+ env/
107
+ venv/
108
+ ENV/
109
+ env.bak/
110
+ venv.bak/
111
+
112
+ # Spyder project settings
113
+ .spyderproject
114
+ .spyproject
115
+
116
+ # Rope project settings
117
+ .ropeproject
118
+
119
+ # mkdocs documentation
120
+ /site
121
+
122
+ # mypy
123
+ .mypy_cache/
124
+ .dmypy.json
125
+ dmypy.json
126
+
127
+ # Pyre type checker
128
+ .pyre/
129
+
130
+ # pytype static type analyzer
131
+ .pytype/
132
+
133
+ # Cython debug symbols
134
+ cython_debug/
135
+
136
+ # Poetry
137
+ poetry.toml
@@ -0,0 +1,48 @@
1
+ repos:
2
+
3
+ - repo: https://github.com/psf/black
4
+ rev: 24.4.2
5
+ hooks:
6
+ - id: black
7
+
8
+ - repo: https://github.com/pycqa/isort
9
+ rev: 5.13.2
10
+ hooks:
11
+ - id: isort
12
+
13
+ - repo: https://github.com/PyCQA/flake8
14
+ rev: 7.0.0
15
+ hooks:
16
+ - id: flake8
17
+
18
+ - repo: https://github.com/codespell-project/codespell
19
+ rev: v2.3.0
20
+ hooks:
21
+ - id: codespell
22
+ args: [--skip, "doc/styles/*,doc/_build/*,*.js,*.tmp", --ignore-words, ".codespell.ignore", --exclude, "pyproject.toml,poetry.lock"]
23
+
24
+ - repo: https://github.com/pycqa/pydocstyle
25
+ rev: 6.3.0
26
+ hooks:
27
+ - id: pydocstyle
28
+ additional_dependencies: [toml]
29
+ exclude: "tests/"
30
+
31
+ - repo: https://github.com/ansys/pre-commit-hooks
32
+ rev: fd1d6b0b4baeb08e32d4de0909999576695c0433 # v0.5.2
33
+ hooks:
34
+ - id: add-license-headers
35
+ args:
36
+ - --start_year=2023
37
+ - --custom_template=copyright.jinja2
38
+
39
+ - repo: https://github.com/dotenv-linter/dotenv-linter
40
+ rev: f9076b02daed89f54ed0bd23951a4cfa5ccceac4 # v4.0.0
41
+ hooks:
42
+ - id: dotenv-linter
43
+ args: [check]
44
+
45
+ - repo: https://github.com/python-poetry/poetry
46
+ rev: a84cd0f1bedb5769ef6ef7389d8ee99b93b9ba4c # frozen: v2.3.2
47
+ hooks:
48
+ - id: poetry-check
@@ -0,0 +1 @@
1
+ Copyright (C) 2023 - 2026 ANSYS, Inc. and/or its affiliates.
@@ -0,0 +1,8 @@
1
+ {
2
+ "recommendations": [
3
+ "ms-python.python",
4
+ "ms-python.vscode-pylance",
5
+ "be5invis.toml",
6
+ "tht13.rst-vscode"
7
+ ]
8
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "name": "Python: Remote Attach",
9
+ "type": "python",
10
+ "request": "attach",
11
+ "connect": {
12
+ "host": "localhost",
13
+ "port": 5724
14
+ },
15
+ "justMyCode": false
16
+ },
17
+ {
18
+ "name": "Python: Remote Attach Dash",
19
+ "type": "python",
20
+ "request": "attach",
21
+ "connect": {
22
+ "host": "localhost",
23
+ "port": 5725
24
+ },
25
+ "justMyCode": false
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,12 @@
1
+ # This is the list of {{ cookiecutter.__solution_name }}'s significant contributors.
2
+ #
3
+ # This file does not necessarily list everyone who has contributed code.
4
+ #
5
+ # For contributions made under a Corporate CLA, the organization is
6
+ # added to this file.
7
+ #
8
+ # If you have contributed to the repository and want to be added to this file,
9
+ # submit a request.
10
+ #
11
+ #
12
+ ANSYS, Inc.
@@ -0,0 +1,3 @@
1
+ # Declare here default code reviewers. Checkout out official documentation:
2
+ # https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
3
+
@@ -0,0 +1,65 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our
7
+ project and our community a harassment-free experience for everyone,
8
+ regardless of age, body size, disability, ethnicity, sex
9
+ characteristics, gender identity and expression, level of experience,
10
+ education, socioeconomic status, nationality, personal appearance,
11
+ race, religion, or sexual identity and orientation.
12
+
13
+ ## Our Standards
14
+
15
+ Examples of behavior that contributes to creating a positive environment
16
+ include:
17
+
18
+ * Using welcoming and inclusive language
19
+ * Being respectful of differing viewpoints and experiences
20
+ * Gracefully accepting constructive criticism
21
+ * Focusing on what is best for the community
22
+ * Showing empathy towards other community members
23
+
24
+ Examples of unacceptable behavior by participants include:
25
+
26
+ * The use of sexualized language or imagery and unwelcome sexual
27
+ attention or advances
28
+ * Trolling, insulting/derogatory comments, and personal or political attacks
29
+ * Public or private harassment
30
+ * Publishing others' private information, such as a physical or electronic
31
+ address, without explicit permission
32
+ * Other conduct which could reasonably be considered inappropriate in a
33
+ professional setting
34
+
35
+ ## Our Responsibilities
36
+
37
+ Project maintainers are responsible for clarifying the standards of acceptable
38
+ behavior and are expected to take appropriate and fair corrective action in
39
+ response to any instances of unacceptable behavior.
40
+
41
+ Project maintainers have the right and responsibility to remove, edit, or reject
42
+ comments, commits, code, wiki edits, issues, and other contributions that are
43
+ not aligned to this Code of Conduct, or to ban temporarily or permanently any
44
+ contributor for other behaviors that they deem inappropriate, threatening,
45
+ offensive, or harmful.
46
+
47
+ ## Scope
48
+
49
+ This Code of Conduct applies both within project spaces and in public spaces
50
+ when an individual is representing the project or its community. Examples of
51
+ representing a project or community include using an official project e-mail
52
+ address, posting via an official social media account, or acting as an appointed
53
+ representative at an online or offline event. Representation of a project may be
54
+ further defined and clarified by project maintainers.
55
+
56
+ ## Attribution
57
+
58
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
59
+ version 1.4, available at
60
+ https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
61
+
62
+ [homepage]: https://www.contributor-covenant.org
63
+
64
+ For answers to common questions about this code of conduct, see
65
+ https://www.contributor-covenant.org/faq
@@ -0,0 +1,9 @@
1
+ # Contributors
2
+
3
+ ## Project Lead or Owner
4
+
5
+ * [First Last]()
6
+
7
+ ## Individual Contributors
8
+
9
+ * [First Last]()
@@ -0,0 +1,41 @@
1
+ ANSYS, Inc. Legal Notices
2
+ ==========================
3
+
4
+ Copyright and Trademark Information
5
+ ------------------------------------
6
+
7
+ © 2023 ANSYS, Inc. All rights reserved. Unauthorized use, distribution, or duplication is prohibited. This solution is subject to U.S. laws governing export and re-export.
8
+
9
+ ANSYS, Ansys Workbench, AUTODYN, CFX, FLUENT and any and all ANSYS, Inc. brand, product, service and feature names, logos and slogans are registered trademarks or trademarks of ANSYS, Inc. or its subsidiaries located in the United States or other countries. ICEM CFD is a trademark used by ANSYS, Inc. under license. CFX is a trademark of Sony Corporation in Japan. All other brand, product, service, and feature names or trademarks are the property of their respective owners. FLEXlm and FLEXnet are trademarks of Flexera Software LLC.
10
+
11
+ Disclaimer Notice
12
+ -----------------
13
+
14
+ THIS ANSYS SOFTWARE PRODUCT AND PROGRAM DOCUMENTATION INCLUDE TRADE SECRETS AND ARE CONFIDENTIAL AND PROPRIETARY PRODUCTS OF ANSYS, INC., ITS SUBSIDIARIES, OR LICENSORS. The software products and documentation are furnished by ANSYS, Inc., its subsidiaries, or affiliates under a software license agreement that contains provisions concerning non-disclosure, copying, length and nature of use, compliance with exporting laws, warranties, disclaimers, limitations of liability, and remedies, and other provisions. The software products and documentation may be used, disclosed, transferred, or copied only in accordance with the terms and conditions of that software license agreement.
15
+
16
+ ANSYS, Inc. and ANSYS Europe, Ltd. are UL registered ISO 9001: 2015 companies.
17
+
18
+ U.S. Government Rights
19
+ -----------------------
20
+
21
+ For U.S. Government users, except as specifically granted by the ANSYS, Inc. software license agreement, the use, duplication, or disclosure by the United States Government is subject to restrictions stated in the ANSYS, Inc. software license agreement and FAR 12.212 (for non-DOD licenses).
22
+
23
+ Third-Party Software Notices
24
+ -----------------------------
25
+
26
+ See the Legal Notices in the Ansys product help files for the complete Legal Notices for ANSYS proprietary software and third-party software. If you are unable to access the Legal Notices, contact ANSYS, Inc.
27
+
28
+ Contact Information
29
+ --------------------
30
+
31
+ ANSYS, Inc.
32
+ Southpointe
33
+ 2600 Ansys Drive
34
+ Canonsburg, PA 15317
35
+ ansysinfo@ansys.com
36
+ <http://www.ansys.com>
37
+ (T) 724-746-3304
38
+ (F) 724-514-9494
39
+
40
+ **Ansys Solution Applications Organization**
41
+ Email the Solution Applications team at solution-applications.maintainers@ansys.com.