rapidfem 0.2.1__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.
- rapidfem-0.2.1/.github/workflows/deploy-demo.yml +61 -0
- rapidfem-0.2.1/.github/workflows/wheels.yml +150 -0
- rapidfem-0.2.1/.gitignore +47 -0
- rapidfem-0.2.1/Cargo.lock +1365 -0
- rapidfem-0.2.1/Cargo.toml +29 -0
- rapidfem-0.2.1/LICENSE +661 -0
- rapidfem-0.2.1/PKG-INFO +179 -0
- rapidfem-0.2.1/README.md +147 -0
- rapidfem-0.2.1/docs/static-demo.md +92 -0
- rapidfem-0.2.1/pyproject.toml +57 -0
- rapidfem-0.2.1/python/Cargo.lock +1510 -0
- rapidfem-0.2.1/python/Cargo.toml +15 -0
- rapidfem-0.2.1/python/README.md +147 -0
- rapidfem-0.2.1/python/debug_substrate_tag.py +86 -0
- rapidfem-0.2.1/python/examples/builder_patch_antenna.py +113 -0
- rapidfem-0.2.1/python/examples/builder_wr90.py +48 -0
- rapidfem-0.2.1/python/examples/geometry_fragment.py +47 -0
- rapidfem-0.2.1/python/examples/geometry_wr90.py +81 -0
- rapidfem-0.2.1/python/examples/patch_antenna.py +65 -0
- rapidfem-0.2.1/python/examples/rfic_gds_sky130.py +108 -0
- rapidfem-0.2.1/python/examples/rfic_inductance_validation.py +209 -0
- rapidfem-0.2.1/python/examples/rfic_microstrip.py +104 -0
- rapidfem-0.2.1/python/examples/rfic_spiral_validation.py +259 -0
- rapidfem-0.2.1/python/examples/rfic_wire_min.py +150 -0
- rapidfem-0.2.1/python/examples/wr90.py +53 -0
- rapidfem-0.2.1/python/spike_geometry.py +286 -0
- rapidfem-0.2.1/python/src/lib.rs +327 -0
- rapidfem-0.2.1/python_src/rapidfem/__init__.py +100 -0
- rapidfem-0.2.1/python_src/rapidfem/_cli.py +151 -0
- rapidfem-0.2.1/python_src/rapidfem/_show_capture.py +62 -0
- rapidfem-0.2.1/python_src/rapidfem/bridge.py +224 -0
- rapidfem-0.2.1/python_src/rapidfem/builder.py +955 -0
- rapidfem-0.2.1/python_src/rapidfem/examples/__init__.py +6 -0
- rapidfem-0.2.1/python_src/rapidfem/examples/coax_step.py +78 -0
- rapidfem-0.2.1/python_src/rapidfem/examples/iris_filter.py +97 -0
- rapidfem-0.2.1/python_src/rapidfem/examples/microstrip_line.py +130 -0
- rapidfem-0.2.1/python_src/rapidfem/examples/patch_antenna.py +161 -0
- rapidfem-0.2.1/python_src/rapidfem/examples/wr90.py +63 -0
- rapidfem-0.2.1/python_src/rapidfem/examples/wr90_pml.py +88 -0
- rapidfem-0.2.1/python_src/rapidfem/geometry.py +1116 -0
- rapidfem-0.2.1/python_src/rapidfem/io.py +146 -0
- rapidfem-0.2.1/python_src/rapidfem/rfic.py +519 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/__init__.py +7 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/api.py +822 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/bus.py +43 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/__init__.py +3 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/404.html +42 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/CNAME +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/env.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/assets/0.D9BPtZGD.css +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/assets/2.DQx7kmyG.css +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/assets/3.7H1Qmg1u.css +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/assets/4.D5ywvrNv.css +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/8JA6wOM_.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/BiMBxLpA.js +3789 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/CR1c6hWL.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/CYSOoxjT.js +2 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/CwAP3ik2.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/D5CK9Z8e.js +11 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/DS00yKme.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/DZ5O8Cz3.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/DjRDjFqR.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/HmEuodsi.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/chunks/pKXBG7yB.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/entry/app.BxIsfjFG.js +2 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/entry/start.xq-Z1Urp.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/nodes/0.mCgTYB0q.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/nodes/1.BP6YpX2t.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/nodes/2.dZbBPtnp.js +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/nodes/3.CcLI6sL5.js +126 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/immutable/nodes/4.Cc9T6wv6.js +19 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/_app/version.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/coax_step.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/coax_step_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/iris_filter.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/iris_filter_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/manifest.json +312 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/microstrip_line.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/microstrip_line_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/patch_antenna.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/patch_antenna_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/wr90.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/wr90_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/wr90_pml.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/demo/wr90_pml_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/embed/fem-viewer.js +116 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/embed/test.html +46 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/favicon.svg +4 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend/dist/index.html +45 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/package-lock.json +1896 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/package.json +33 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/app.css +168 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/app.html +13 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/embed/fem-viewer.ts +479 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/api.ts +320 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/bridge/mesh_spec.ts +53 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/bridge/rp_to_spec.ts +167 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/bridge/spec.ts +83 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/Cell.svelte +335 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/CodeEditor.svelte +187 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/CodeSnippet.svelte +169 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/FileBrowser.svelte +538 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/MeshViewer.svelte +999 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/Notebook.svelte +205 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/Resizer.svelte +73 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/ResultsPanel.svelte +281 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/Select.svelte +115 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/components/fields.css +89 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/examples.ts +7 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/kernel.ts +373 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/msh.ts +15 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/render/canvas3d.ts +643 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/render/mesh_scene.ts +195 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/render/scene_builder.ts +377 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/sparams.ts +110 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/static_mode.ts +22 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/theme.ts +129 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/lib/viz.ts +177 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/routes/+layout.svelte +6 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/routes/+layout.ts +3 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/routes/+page.svelte +399 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/routes/+page.ts +5 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/routes/demo/+page.svelte +1166 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/routes/embed/test/+page.svelte +219 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/src/routes/embed/test/+page.ts +4 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/CNAME +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/coax_step.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/coax_step_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/iris_filter.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/iris_filter_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/manifest.json +312 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/microstrip_line.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/microstrip_line_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/patch_antenna.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/patch_antenna_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/wr90.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/wr90_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/wr90_pml.json +1 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/demo/wr90_pml_c4_d1.bin +0 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/embed/fem-viewer.js +116 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/static/favicon.svg +4 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/svelte.config.js +26 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/tsconfig.json +14 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/vite.config.ts +17 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/frontend-src/vite.embed.config.ts +34 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/kernel.py +61 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/kernel_ws.py +131 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/serialize.py +424 -0
- rapidfem-0.2.1/python_src/rapidfem/ui/server.py +148 -0
- rapidfem-0.2.1/scripts/bake_demo.py +525 -0
- rapidfem-0.2.1/scripts/build_frontend.ps1 +31 -0
- rapidfem-0.2.1/scripts/build_frontend.sh +25 -0
- rapidfem-0.2.1/scripts/patch_antenna.py +280 -0
- rapidfem-0.2.1/src/abc_order2.rs +387 -0
- rapidfem-0.2.1/src/assembly.rs +555 -0
- rapidfem-0.2.1/src/basis.rs +182 -0
- rapidfem-0.2.1/src/coefficients.rs +142 -0
- rapidfem-0.2.1/src/config.rs +324 -0
- rapidfem-0.2.1/src/constants.rs +7 -0
- rapidfem-0.2.1/src/csym_ldlt.rs +229 -0
- rapidfem-0.2.1/src/eigenmode.rs +260 -0
- rapidfem-0.2.1/src/error_estimator.rs +334 -0
- rapidfem-0.2.1/src/farfield.rs +482 -0
- rapidfem-0.2.1/src/interp.rs +256 -0
- rapidfem-0.2.1/src/lib.rs +25 -0
- rapidfem-0.2.1/src/main.rs +210 -0
- rapidfem-0.2.1/src/materials.rs +216 -0
- rapidfem-0.2.1/src/mesh.rs +161 -0
- rapidfem-0.2.1/src/mesh_io.rs +169 -0
- rapidfem-0.2.1/src/pardiso.rs +332 -0
- rapidfem-0.2.1/src/port.rs +155 -0
- rapidfem-0.2.1/src/quadrature.rs +158 -0
- rapidfem-0.2.1/src/simulation.rs +697 -0
- rapidfem-0.2.1/src/sparam.rs +184 -0
- rapidfem-0.2.1/src/tet_assembly.rs +443 -0
- rapidfem-0.2.1/src/touchstone.rs +64 -0
- rapidfem-0.2.1/src/tri_assembly.rs +320 -0
- rapidfem-0.2.1/src/vtk_export.rs +158 -0
- rapidfem-0.2.1/src/waveguide.rs +665 -0
- rapidfem-0.2.1/tests/abc_order2_test.rs +24 -0
- rapidfem-0.2.1/tests/benchmark.rs +148 -0
- rapidfem-0.2.1/tests/benchmark_large.rs +89 -0
- rapidfem-0.2.1/tests/config_cavity_eigen.toml +12 -0
- rapidfem-0.2.1/tests/config_iris_error.toml +23 -0
- rapidfem-0.2.1/tests/config_iris_sweep.toml +23 -0
- rapidfem-0.2.1/tests/config_patch.toml +23 -0
- rapidfem-0.2.1/tests/config_patch_cq.toml +31 -0
- rapidfem-0.2.1/tests/config_patch_ff.toml +31 -0
- rapidfem-0.2.1/tests/config_stepped_viz.toml +22 -0
- rapidfem-0.2.1/tests/config_two_iris.toml +19 -0
- rapidfem-0.2.1/tests/config_two_iris_fine_viz.toml +22 -0
- rapidfem-0.2.1/tests/config_two_iris_viz.toml +22 -0
- rapidfem-0.2.1/tests/config_vtk_test.toml +19 -0
- rapidfem-0.2.1/tests/config_wr90.toml +23 -0
- rapidfem-0.2.1/tests/csym_ldlt_test.rs +80 -0
- rapidfem-0.2.1/tests/e2e_test.rs +120 -0
- rapidfem-0.2.1/tests/mesh_verify.rs +43 -0
- rapidfem-0.2.1/tests/meshes/cavity.msh +1691 -0
- rapidfem-0.2.1/tests/meshes/coax.msh +179423 -0
- rapidfem-0.2.1/tests/meshes/iris_coarse.msh +3025 -0
- rapidfem-0.2.1/tests/meshes/iris_fine.msh +6474 -0
- rapidfem-0.2.1/tests/meshes/parallel_plate.msh +3706 -0
- rapidfem-0.2.1/tests/meshes/patch_antenna.msh +3942 -0
- rapidfem-0.2.1/tests/meshes/patch_antenna_cq.msh +37158 -0
- rapidfem-0.2.1/tests/meshes/stepped_coarse.msh +4286 -0
- rapidfem-0.2.1/tests/meshes/stepped_fine.msh +32838 -0
- rapidfem-0.2.1/tests/meshes/stepped_medium.msh +11830 -0
- rapidfem-0.2.1/tests/meshes/two_iris_coarse.msh +5484 -0
- rapidfem-0.2.1/tests/meshes/two_iris_fine.msh +42324 -0
- rapidfem-0.2.1/tests/meshes/two_iris_medium.msh +17812 -0
- rapidfem-0.2.1/tests/meshes/wg_50k_100k.msh +85675 -0
- rapidfem-0.2.1/tests/meshes/wg_50k_50k.msh +29260 -0
- rapidfem-0.2.1/tests/meshes/wg_large.msh +2420 -0
- rapidfem-0.2.1/tests/meshes/wg_medium.msh +1693 -0
- rapidfem-0.2.1/tests/meshes/wg_small.msh +1693 -0
- rapidfem-0.2.1/tests/meshes/wg_tiny.msh +1693 -0
- rapidfem-0.2.1/tests/meshes/wg_xlarge.msh +5215 -0
- rapidfem-0.2.1/tests/meshes/wr90_pml.msh +4601 -0
- rapidfem-0.2.1/tests/meshes/wr90_straight.msh +1532 -0
- rapidfem-0.2.1/tests/pardiso_test.rs +44 -0
- rapidfem-0.2.1/tests/tet_assembly_test.rs +39 -0
- rapidfem-0.2.1/tests/tri_assembly_test.rs +96 -0
- rapidfem-0.2.1/tests/waveguide_test.rs +82 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: Deploy static demo
|
|
2
|
+
|
|
3
|
+
# Builds the SvelteKit frontend with VITE_STATIC_MODE=1 and deploys it
|
|
4
|
+
# to GitHub Pages (fem.rapidpassives.org).
|
|
5
|
+
#
|
|
6
|
+
# The example outputs in `python/python_src/rapidfem/ui/frontend-src/static/demo/`
|
|
7
|
+
# are pre-baked LOCALLY by `python scripts/bake_demo.py` and checked
|
|
8
|
+
# into git, so CI never has to run gmsh + the FEM solver.
|
|
9
|
+
# Re-bake locally + commit whenever an example changes.
|
|
10
|
+
|
|
11
|
+
on:
|
|
12
|
+
push:
|
|
13
|
+
branches: [master]
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
|
|
16
|
+
concurrency:
|
|
17
|
+
group: deploy-static-demo
|
|
18
|
+
cancel-in-progress: false
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
pages: write
|
|
23
|
+
id-token: write
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
build:
|
|
27
|
+
name: Build frontend
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v4
|
|
31
|
+
|
|
32
|
+
- name: Set up Node
|
|
33
|
+
uses: actions/setup-node@v4
|
|
34
|
+
with:
|
|
35
|
+
node-version: '20'
|
|
36
|
+
cache: 'npm'
|
|
37
|
+
cache-dependency-path: python/python_src/rapidfem/ui/frontend-src/package-lock.json
|
|
38
|
+
|
|
39
|
+
- name: Install frontend deps + build (static mode)
|
|
40
|
+
working-directory: python/python_src/rapidfem/ui/frontend-src
|
|
41
|
+
env:
|
|
42
|
+
VITE_STATIC_MODE: '1'
|
|
43
|
+
run: |
|
|
44
|
+
npm ci
|
|
45
|
+
npm run build
|
|
46
|
+
|
|
47
|
+
- name: Upload Pages artifact
|
|
48
|
+
uses: actions/upload-pages-artifact@v3
|
|
49
|
+
with:
|
|
50
|
+
path: python/python_src/rapidfem/ui/frontend/dist
|
|
51
|
+
|
|
52
|
+
deploy:
|
|
53
|
+
name: Deploy to GitHub Pages
|
|
54
|
+
needs: build
|
|
55
|
+
runs-on: ubuntu-latest
|
|
56
|
+
environment:
|
|
57
|
+
name: github-pages
|
|
58
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
59
|
+
steps:
|
|
60
|
+
- id: deployment
|
|
61
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
name: Build wheels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ['v*']
|
|
6
|
+
release:
|
|
7
|
+
types: [published]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
build-frontend:
|
|
15
|
+
name: Build SvelteKit frontend
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: actions/setup-node@v4
|
|
20
|
+
with:
|
|
21
|
+
node-version: '20'
|
|
22
|
+
cache: 'npm'
|
|
23
|
+
cache-dependency-path: python/python_src/rapidfem/ui/frontend-src/package-lock.json
|
|
24
|
+
- name: Install + build frontend
|
|
25
|
+
working-directory: python/python_src/rapidfem/ui/frontend-src
|
|
26
|
+
run: |
|
|
27
|
+
npm ci
|
|
28
|
+
npm run build
|
|
29
|
+
- name: Upload frontend dist
|
|
30
|
+
uses: actions/upload-artifact@v4
|
|
31
|
+
with:
|
|
32
|
+
name: frontend-dist
|
|
33
|
+
path: python/python_src/rapidfem/ui/frontend/dist
|
|
34
|
+
if-no-files-found: error
|
|
35
|
+
|
|
36
|
+
build-wheels:
|
|
37
|
+
name: Wheels — ${{ matrix.os }} / py${{ matrix.python-version }}
|
|
38
|
+
needs: build-frontend
|
|
39
|
+
runs-on: ${{ matrix.os }}
|
|
40
|
+
strategy:
|
|
41
|
+
fail-fast: false
|
|
42
|
+
matrix:
|
|
43
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
44
|
+
python-version: ['3.10'] # abi3 wheel covers >=3.10
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v4
|
|
47
|
+
|
|
48
|
+
- uses: actions/setup-python@v5
|
|
49
|
+
with:
|
|
50
|
+
python-version: ${{ matrix.python-version }}
|
|
51
|
+
|
|
52
|
+
- name: Download frontend dist
|
|
53
|
+
uses: actions/download-artifact@v4
|
|
54
|
+
with:
|
|
55
|
+
name: frontend-dist
|
|
56
|
+
path: python/python_src/rapidfem/ui/frontend/dist
|
|
57
|
+
|
|
58
|
+
- name: Install Rust toolchain
|
|
59
|
+
uses: dtolnay/rust-toolchain@stable
|
|
60
|
+
|
|
61
|
+
- name: Cache cargo registry + target
|
|
62
|
+
uses: actions/cache@v4
|
|
63
|
+
with:
|
|
64
|
+
path: |
|
|
65
|
+
~/.cargo/registry
|
|
66
|
+
~/.cargo/git
|
|
67
|
+
target
|
|
68
|
+
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock', 'python/Cargo.toml') }}
|
|
69
|
+
|
|
70
|
+
# Stage repo-root README into python/ so maturin can pack it.
|
|
71
|
+
# pyproject's readme path is relative to pyproject; maturin sdist refuses
|
|
72
|
+
# `..` segments, so we copy instead of referencing the parent.
|
|
73
|
+
- name: Stage README into package dir
|
|
74
|
+
shell: bash
|
|
75
|
+
run: cp README.md python/README.md
|
|
76
|
+
|
|
77
|
+
# `pip install --upgrade pip` fails on Windows (pip.exe can't replace
|
|
78
|
+
# itself while running). `python -m pip` works on every platform.
|
|
79
|
+
- name: Install maturin
|
|
80
|
+
run: python -m pip install --upgrade pip maturin
|
|
81
|
+
|
|
82
|
+
- name: Build wheel (abi3)
|
|
83
|
+
working-directory: python
|
|
84
|
+
run: maturin build --release --strip --out dist
|
|
85
|
+
|
|
86
|
+
- name: Upload wheel
|
|
87
|
+
uses: actions/upload-artifact@v4
|
|
88
|
+
with:
|
|
89
|
+
name: wheel-${{ matrix.os }}
|
|
90
|
+
path: python/dist/*.whl
|
|
91
|
+
if-no-files-found: error
|
|
92
|
+
|
|
93
|
+
build-sdist:
|
|
94
|
+
name: Source distribution
|
|
95
|
+
needs: build-frontend
|
|
96
|
+
runs-on: ubuntu-latest
|
|
97
|
+
steps:
|
|
98
|
+
- uses: actions/checkout@v4
|
|
99
|
+
- uses: actions/setup-python@v5
|
|
100
|
+
with:
|
|
101
|
+
python-version: '3.11'
|
|
102
|
+
- name: Download frontend dist
|
|
103
|
+
uses: actions/download-artifact@v4
|
|
104
|
+
with:
|
|
105
|
+
name: frontend-dist
|
|
106
|
+
path: python/python_src/rapidfem/ui/frontend/dist
|
|
107
|
+
- name: Stage README into package dir
|
|
108
|
+
run: cp README.md python/README.md
|
|
109
|
+
- run: python -m pip install --upgrade pip maturin
|
|
110
|
+
- name: Build sdist
|
|
111
|
+
working-directory: python
|
|
112
|
+
run: maturin sdist --out dist
|
|
113
|
+
- uses: actions/upload-artifact@v4
|
|
114
|
+
with:
|
|
115
|
+
name: sdist
|
|
116
|
+
path: python/dist/*.tar.gz
|
|
117
|
+
if-no-files-found: error
|
|
118
|
+
|
|
119
|
+
publish-pypi:
|
|
120
|
+
name: Publish to PyPI
|
|
121
|
+
needs: [build-wheels, build-sdist]
|
|
122
|
+
# Only fires on a published GitHub Release (any semver — major / minor /
|
|
123
|
+
# patch). Bare `v*` tag pushes still build artifacts but do not publish,
|
|
124
|
+
# so accidental test tags can't reach PyPI.
|
|
125
|
+
if: github.event_name == 'release' && github.event.action == 'published'
|
|
126
|
+
runs-on: ubuntu-latest
|
|
127
|
+
environment:
|
|
128
|
+
name: pypi
|
|
129
|
+
url: https://pypi.org/p/rapidfem
|
|
130
|
+
permissions:
|
|
131
|
+
id-token: write # OIDC token for PyPI Trusted Publishing
|
|
132
|
+
steps:
|
|
133
|
+
- name: Download all wheels + sdist
|
|
134
|
+
uses: actions/download-artifact@v4
|
|
135
|
+
with:
|
|
136
|
+
path: dist
|
|
137
|
+
pattern: 'wheel-*'
|
|
138
|
+
merge-multiple: true
|
|
139
|
+
|
|
140
|
+
- name: Download sdist
|
|
141
|
+
uses: actions/download-artifact@v4
|
|
142
|
+
with:
|
|
143
|
+
name: sdist
|
|
144
|
+
path: dist
|
|
145
|
+
|
|
146
|
+
- name: Publish to PyPI
|
|
147
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
148
|
+
with:
|
|
149
|
+
packages-dir: dist
|
|
150
|
+
skip-existing: true
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/target
|
|
2
|
+
|
|
3
|
+
# Solver outputs
|
|
4
|
+
tests/**/*.vtk
|
|
5
|
+
tests/**/*.csv
|
|
6
|
+
tests/**/*.png
|
|
7
|
+
tests/**/*.s1p
|
|
8
|
+
tests/**/*.s2p
|
|
9
|
+
tests/**/*.snp
|
|
10
|
+
tests/output_*
|
|
11
|
+
|
|
12
|
+
# Adaptive refinement size fields
|
|
13
|
+
tests/meshes/*_size.pos
|
|
14
|
+
|
|
15
|
+
# Python
|
|
16
|
+
__pycache__/
|
|
17
|
+
*.pyc
|
|
18
|
+
*.pyd
|
|
19
|
+
*.pdb
|
|
20
|
+
*.so
|
|
21
|
+
*.dylib
|
|
22
|
+
python/target/
|
|
23
|
+
python/python_src/rapidfem/_native.*
|
|
24
|
+
python/python_src/rapidfem/rapidfem.*
|
|
25
|
+
python/dist/
|
|
26
|
+
python/*.egg-info/
|
|
27
|
+
# Staged at build time from the repo root by CI / build scripts.
|
|
28
|
+
python/README.md
|
|
29
|
+
.maturin/
|
|
30
|
+
|
|
31
|
+
# Frontend build output (locally built; in CI built fresh into the wheel)
|
|
32
|
+
python/python_src/rapidfem/ui/frontend/dist/
|
|
33
|
+
python/python_src/rapidfem/ui/frontend-src/node_modules/
|
|
34
|
+
python/python_src/rapidfem/ui/frontend-src/.svelte-kit/
|
|
35
|
+
python/python_src/rapidfem/ui/frontend-src/build/
|
|
36
|
+
|
|
37
|
+
# Stray workdir leftovers — when `rapidfem serve` is started from this
|
|
38
|
+
# repo root, opening any bundled example copies it here. Not real source.
|
|
39
|
+
/coax_step*.py
|
|
40
|
+
/iris_filter*.py
|
|
41
|
+
/patch_antenna*.py
|
|
42
|
+
/wr90*.py
|
|
43
|
+
/microstrip*.py
|
|
44
|
+
/welcome.py
|
|
45
|
+
|
|
46
|
+
# Static demo bake artefacts (regenerated locally by scripts/bake_demo.py
|
|
47
|
+
# and committed to git, so CI can deploy without re-running FEM solves)
|