sim-plugin-hfss 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.
@@ -0,0 +1,28 @@
1
+ name: ci
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - main
8
+
9
+ jobs:
10
+ test:
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ python: ["3.10", "3.12"]
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: astral-sh/setup-uv@v5
19
+ with:
20
+ python-version: ${{ matrix.python }}
21
+
22
+ - name: Run tests
23
+ run: |
24
+ mkdir -p .pytest_basetemp
25
+ uv run --extra test pytest --basetemp .pytest_basetemp/ci -q
26
+
27
+ - name: Build wheel
28
+ run: uv build
@@ -0,0 +1,76 @@
1
+ name: Release to PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ expected-version:
7
+ description: Version in pyproject.toml to publish
8
+ required: true
9
+ type: string
10
+ ref:
11
+ description: Git ref to publish
12
+ required: false
13
+ default: main
14
+ type: string
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ publish:
21
+ runs-on: ubuntu-latest
22
+ environment: pypi
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ ref: ${{ inputs.ref }}
27
+
28
+ - uses: astral-sh/setup-uv@v5
29
+ with:
30
+ python-version: "3.12"
31
+
32
+ - name: Verify version
33
+ run: |
34
+ expected="${{ inputs.expected-version }}"
35
+ version=$(uv run --no-project python -c "import pathlib, tomllib; print(tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version'])")
36
+ if [ "$expected" != "$version" ]; then
37
+ echo "expected version $expected does not match pyproject.toml version $version" >&2
38
+ exit 1
39
+ fi
40
+
41
+ - name: Check PyPI version availability
42
+ run: |
43
+ uv run --no-project python - <<'PY'
44
+ import pathlib
45
+ import sys
46
+ import tomllib
47
+ import urllib.error
48
+ import urllib.request
49
+
50
+ project = tomllib.loads(pathlib.Path("pyproject.toml").read_text())["project"]
51
+ name = project["name"]
52
+ version = project["version"]
53
+ url = f"https://pypi.org/pypi/{name}/{version}/json"
54
+ try:
55
+ with urllib.request.urlopen(url, timeout=20):
56
+ pass
57
+ except urllib.error.HTTPError as exc:
58
+ if exc.code == 404:
59
+ sys.exit(0)
60
+ raise
61
+ print(f"{name} {version} already exists on PyPI", file=sys.stderr)
62
+ sys.exit(1)
63
+ PY
64
+
65
+ - name: Build package
66
+ run: uv build
67
+
68
+ - name: Publish to PyPI
69
+ env:
70
+ UV_PUBLISH_TOKEN: ${{ secrets.UV_PUBLISH_TOKEN }}
71
+ run: |
72
+ if [ -z "$UV_PUBLISH_TOKEN" ]; then
73
+ echo "UV_PUBLISH_TOKEN secret is not configured" >&2
74
+ exit 1
75
+ fi
76
+ uv publish --token "$UV_PUBLISH_TOKEN" dist/*
@@ -0,0 +1,14 @@
1
+ .venv/
2
+ .pytest_cache/
3
+ .ruff_cache/
4
+ .mypy_cache/
5
+ .coverage
6
+ dist/
7
+ build/
8
+ *.egg-info/
9
+ batch.log
10
+ .pytest_basetemp/
11
+ .sim/
12
+ .tmp/
13
+ __pycache__/
14
+ *.py[cod]
@@ -0,0 +1,10 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 - 2026-05-06
4
+
5
+ - Bootstrap public HFSS 3D plugin package for sim-cli.
6
+ - Add lazy PyAEDT driver with no-AEDT unit coverage and opt-in real HFSS smoke coverage.
7
+ - Add broader AEDT discovery for regular and alternate AEDT launchers.
8
+ - Add a narrow PyAEDT 0.26.x AEDT startup compatibility shim.
9
+ - Add bundled HFSS skill and public documentation.
10
+ - Add CI, wheel-content checks, and a manual PyPI release workflow.
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
@@ -0,0 +1,14 @@
1
+ # Notice
2
+
3
+ This plugin is licensed under Apache-2.0 (see [LICENSE](LICENSE)).
4
+
5
+ This plugin does not bundle, embed, or redistribute Ansys HFSS, Ansys
6
+ Electronics Desktop, vendor binaries, vendor examples, or vendor license
7
+ files. It is a Python adapter that:
8
+
9
+ - depends on the PyAEDT Python package, and
10
+ - launches or attaches to an AEDT process that the user has installed and
11
+ licensed separately.
12
+
13
+ Users are responsible for satisfying all Ansys software, license, and local
14
+ environment prerequisites before using this plugin to drive HFSS.
@@ -0,0 +1,168 @@
1
+ Metadata-Version: 2.4
2
+ Name: sim-plugin-hfss
3
+ Version: 0.1.0
4
+ Summary: Ansys HFSS driver for sim-cli, distributed as a plugin
5
+ Project-URL: Homepage, https://github.com/svd-ai-lab/sim-plugin-hfss
6
+ Project-URL: Repository, https://github.com/svd-ai-lab/sim-plugin-hfss
7
+ Project-URL: Issues, https://github.com/svd-ai-lab/sim-plugin-hfss/issues
8
+ Project-URL: Changelog, https://github.com/svd-ai-lab/sim-plugin-hfss/blob/main/CHANGELOG.md
9
+ Author: svd-ai-lab
10
+ License-Expression: Apache-2.0
11
+ License-File: LICENSE
12
+ License-File: LICENSE-NOTICE.md
13
+ Keywords: aedt,em,hfss,plugin,pyaedt,pyansys,sim-cli,simulation
14
+ Classifier: Development Status :: 3 - Alpha
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: Science/Research
17
+ Classifier: License :: OSI Approved :: Apache Software License
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Topic :: Scientific/Engineering
23
+ Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
24
+ Requires-Python: >=3.10
25
+ Requires-Dist: pyaedt<1,>=0.26.3
26
+ Requires-Dist: sim-cli-core>=0.3.4
27
+ Provides-Extra: test
28
+ Requires-Dist: build>=1.0; extra == 'test'
29
+ Requires-Dist: pytest>=8; extra == 'test'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # sim-plugin-hfss
33
+
34
+ Use Codex, Claude Code, or another AI agent to work with
35
+ [Ansys HFSS](https://www.ansys.com/products/electronics/ansys-hfss) 3D
36
+ projects through [sim-cli](https://github.com/svd-ai-lab/sim-cli).
37
+
38
+ `sim-plugin-hfss` is an initial HFSS 3D driver plugin for sim-cli. It uses
39
+ PyAEDT as the Python control layer for Ansys Electronics Desktop (AEDT), keeps
40
+ the driver import-safe on machines without AEDT, and bundles an HFSS agent
41
+ skill so an agent has solver-specific workflow guidance after installation.
42
+
43
+ The HFSS/AEDT application is not bundled. See
44
+ [LICENSE-NOTICE.md](LICENSE-NOTICE.md).
45
+
46
+ ## Current maturity
47
+
48
+ This is an initial alpha release. It has unit coverage, protocol conformance
49
+ coverage, simulated PyAEDT session coverage, packaging checks, and opt-in real
50
+ HFSS smoke coverage for hosts with AEDT available.
51
+
52
+ Use it as an integration starting point, not as proof that a production HFSS
53
+ workflow has been validated end to end.
54
+
55
+ ## Scope
56
+
57
+ Version 0.1.0 targets HFSS 3D through PyAEDT's `ansys.aedt.core.hfss.Hfss`
58
+ interface.
59
+
60
+ Out of scope for this first version:
61
+
62
+ - HFSS 3D Layout
63
+ - Maxwell, Icepak, Q3D, Circuit, or generic AEDT workflows
64
+ - Direct `.aedt` or `.aedtz` batch solve without a PyAEDT script
65
+ - Plugin-index catalogue entry before the package is published and smoke-tested
66
+
67
+ ## What an agent can do with HFSS
68
+
69
+ - Detect PyAEDT Python scripts that instantiate HFSS.
70
+ - Check whether AEDT appears to be installed on the host.
71
+ - Start a PyAEDT-backed HFSS session in graphical or non-graphical mode when
72
+ AEDT is available.
73
+ - Execute bounded Python snippets against the active `hfss` object.
74
+ - Inspect session, project, and design summaries before continuing.
75
+ - Run complete PyAEDT Python scripts through `sim run --solver hfss`.
76
+
77
+ ## Install
78
+
79
+ Install from PyPI:
80
+
81
+ ```bash
82
+ uv pip install "sim-plugin-hfss==0.1.0"
83
+ ```
84
+
85
+ For source testing against the current main branch:
86
+
87
+ ```bash
88
+ uv pip install "git+https://github.com/svd-ai-lab/sim-plugin-hfss.git@main"
89
+ ```
90
+
91
+ After installation, sim-cli should auto-discover the driver and bundled skill:
92
+
93
+ ```bash
94
+ sim check hfss
95
+ sim run --solver hfss path/to/script.py
96
+ ```
97
+
98
+ If `sim check hfss` reports that AEDT itself is unavailable, first confirm the
99
+ Python package installed correctly, then fix the local AEDT installation,
100
+ environment variables, or runtime prerequisites.
101
+
102
+ ## AEDT discovery
103
+
104
+ The driver looks for AEDT using:
105
+
106
+ - `SIM_HFSS_AEDT_ROOT`
107
+ - `SIM_AEDT_ROOT`
108
+ - `ANSYSEM_ROOT*`
109
+ - AEDT launchers such as `ansysedt`, `ansysedt.exe`, or `ansysedtsv.exe` on
110
+ `PATH`
111
+ - conservative default Windows and Linux install roots
112
+
113
+ If AEDT is installed in a nonstandard location, set an explicit root:
114
+
115
+ ```powershell
116
+ $env:SIM_HFSS_AEDT_ROOT = 'C:\path\to\AnsysEM'
117
+ sim check hfss
118
+ ```
119
+
120
+ You do not need to add AEDT to the global system `PATH` when default discovery
121
+ or one of the explicit environment variables works.
122
+
123
+ ## Common agent workflow
124
+
125
+ 1. Run `sim check hfss`.
126
+ 2. Choose GUI mode only when visual review is required; otherwise prefer
127
+ non-graphical mode.
128
+ 3. Connect and inspect the active project/design before mutating anything:
129
+
130
+ ```bash
131
+ sim connect --solver hfss --ui-mode no_gui
132
+ sim inspect session.summary
133
+ sim inspect hfss.project.identity
134
+ sim inspect hfss.design.summary
135
+ ```
136
+
137
+ 4. Run one bounded PyAEDT snippet at a time.
138
+ 5. Inspect `last.result` and design state before solving or exporting.
139
+ 6. Validate engineering results from HFSS artifacts and domain criteria, not
140
+ from process success alone.
141
+
142
+ ## Develop
143
+
144
+ ```bash
145
+ git clone https://github.com/svd-ai-lab/sim-plugin-hfss
146
+ cd sim-plugin-hfss
147
+ uv sync --extra test
148
+ uv run pytest -q
149
+ uv build
150
+ ```
151
+
152
+ The test suite is designed to pass on machines without AEDT/HFSS. Real solver
153
+ smoke testing is opt-in:
154
+
155
+ ```bash
156
+ SIM_HFSS_RUN_INTEGRATION=1 uv run pytest tests/test_hfss_real_smoke.py -q
157
+ ```
158
+
159
+ On PowerShell:
160
+
161
+ ```powershell
162
+ $env:SIM_HFSS_RUN_INTEGRATION = '1'
163
+ uv run pytest tests/test_hfss_real_smoke.py -q
164
+ ```
165
+
166
+ ## License
167
+
168
+ Apache-2.0. See [LICENSE](LICENSE) and [LICENSE-NOTICE.md](LICENSE-NOTICE.md).
@@ -0,0 +1,137 @@
1
+ # sim-plugin-hfss
2
+
3
+ Use Codex, Claude Code, or another AI agent to work with
4
+ [Ansys HFSS](https://www.ansys.com/products/electronics/ansys-hfss) 3D
5
+ projects through [sim-cli](https://github.com/svd-ai-lab/sim-cli).
6
+
7
+ `sim-plugin-hfss` is an initial HFSS 3D driver plugin for sim-cli. It uses
8
+ PyAEDT as the Python control layer for Ansys Electronics Desktop (AEDT), keeps
9
+ the driver import-safe on machines without AEDT, and bundles an HFSS agent
10
+ skill so an agent has solver-specific workflow guidance after installation.
11
+
12
+ The HFSS/AEDT application is not bundled. See
13
+ [LICENSE-NOTICE.md](LICENSE-NOTICE.md).
14
+
15
+ ## Current maturity
16
+
17
+ This is an initial alpha release. It has unit coverage, protocol conformance
18
+ coverage, simulated PyAEDT session coverage, packaging checks, and opt-in real
19
+ HFSS smoke coverage for hosts with AEDT available.
20
+
21
+ Use it as an integration starting point, not as proof that a production HFSS
22
+ workflow has been validated end to end.
23
+
24
+ ## Scope
25
+
26
+ Version 0.1.0 targets HFSS 3D through PyAEDT's `ansys.aedt.core.hfss.Hfss`
27
+ interface.
28
+
29
+ Out of scope for this first version:
30
+
31
+ - HFSS 3D Layout
32
+ - Maxwell, Icepak, Q3D, Circuit, or generic AEDT workflows
33
+ - Direct `.aedt` or `.aedtz` batch solve without a PyAEDT script
34
+ - Plugin-index catalogue entry before the package is published and smoke-tested
35
+
36
+ ## What an agent can do with HFSS
37
+
38
+ - Detect PyAEDT Python scripts that instantiate HFSS.
39
+ - Check whether AEDT appears to be installed on the host.
40
+ - Start a PyAEDT-backed HFSS session in graphical or non-graphical mode when
41
+ AEDT is available.
42
+ - Execute bounded Python snippets against the active `hfss` object.
43
+ - Inspect session, project, and design summaries before continuing.
44
+ - Run complete PyAEDT Python scripts through `sim run --solver hfss`.
45
+
46
+ ## Install
47
+
48
+ Install from PyPI:
49
+
50
+ ```bash
51
+ uv pip install "sim-plugin-hfss==0.1.0"
52
+ ```
53
+
54
+ For source testing against the current main branch:
55
+
56
+ ```bash
57
+ uv pip install "git+https://github.com/svd-ai-lab/sim-plugin-hfss.git@main"
58
+ ```
59
+
60
+ After installation, sim-cli should auto-discover the driver and bundled skill:
61
+
62
+ ```bash
63
+ sim check hfss
64
+ sim run --solver hfss path/to/script.py
65
+ ```
66
+
67
+ If `sim check hfss` reports that AEDT itself is unavailable, first confirm the
68
+ Python package installed correctly, then fix the local AEDT installation,
69
+ environment variables, or runtime prerequisites.
70
+
71
+ ## AEDT discovery
72
+
73
+ The driver looks for AEDT using:
74
+
75
+ - `SIM_HFSS_AEDT_ROOT`
76
+ - `SIM_AEDT_ROOT`
77
+ - `ANSYSEM_ROOT*`
78
+ - AEDT launchers such as `ansysedt`, `ansysedt.exe`, or `ansysedtsv.exe` on
79
+ `PATH`
80
+ - conservative default Windows and Linux install roots
81
+
82
+ If AEDT is installed in a nonstandard location, set an explicit root:
83
+
84
+ ```powershell
85
+ $env:SIM_HFSS_AEDT_ROOT = 'C:\path\to\AnsysEM'
86
+ sim check hfss
87
+ ```
88
+
89
+ You do not need to add AEDT to the global system `PATH` when default discovery
90
+ or one of the explicit environment variables works.
91
+
92
+ ## Common agent workflow
93
+
94
+ 1. Run `sim check hfss`.
95
+ 2. Choose GUI mode only when visual review is required; otherwise prefer
96
+ non-graphical mode.
97
+ 3. Connect and inspect the active project/design before mutating anything:
98
+
99
+ ```bash
100
+ sim connect --solver hfss --ui-mode no_gui
101
+ sim inspect session.summary
102
+ sim inspect hfss.project.identity
103
+ sim inspect hfss.design.summary
104
+ ```
105
+
106
+ 4. Run one bounded PyAEDT snippet at a time.
107
+ 5. Inspect `last.result` and design state before solving or exporting.
108
+ 6. Validate engineering results from HFSS artifacts and domain criteria, not
109
+ from process success alone.
110
+
111
+ ## Develop
112
+
113
+ ```bash
114
+ git clone https://github.com/svd-ai-lab/sim-plugin-hfss
115
+ cd sim-plugin-hfss
116
+ uv sync --extra test
117
+ uv run pytest -q
118
+ uv build
119
+ ```
120
+
121
+ The test suite is designed to pass on machines without AEDT/HFSS. Real solver
122
+ smoke testing is opt-in:
123
+
124
+ ```bash
125
+ SIM_HFSS_RUN_INTEGRATION=1 uv run pytest tests/test_hfss_real_smoke.py -q
126
+ ```
127
+
128
+ On PowerShell:
129
+
130
+ ```powershell
131
+ $env:SIM_HFSS_RUN_INTEGRATION = '1'
132
+ uv run pytest tests/test_hfss_real_smoke.py -q
133
+ ```
134
+
135
+ ## License
136
+
137
+ Apache-2.0. See [LICENSE](LICENSE) and [LICENSE-NOTICE.md](LICENSE-NOTICE.md).
@@ -0,0 +1,5 @@
1
+ import ansys.aedt.core as aedt
2
+
3
+
4
+ hfss = aedt.Hfss(project="demo.aedt", design="HFSSDesign1", non_graphical=True)
5
+ print(hfss.design_name)
@@ -0,0 +1,5 @@
1
+ from ansys.aedt.core.hfss import Hfss
2
+
3
+
4
+ hfss = Hfss(project="demo.aedt", design="HFSSDesign1", non_graphical=True)
5
+ print({"project": hfss.project_name})
@@ -0,0 +1,5 @@
1
+ import pyaedt
2
+
3
+
4
+ hfss = pyaedt.Hfss(project="demo.aedt", design="HFSSDesign1", non_graphical=True)
5
+ print(hfss.design_name)
@@ -0,0 +1 @@
1
+ print("Hfss is not imported here")
@@ -0,0 +1,4 @@
1
+ from ansys.aedt.core.hfss import Hfss
2
+
3
+
4
+ hfss = Hfss(
@@ -0,0 +1 @@
1
+ print("plain python")