witwin-maxwell 0.3.0__py3-none-win_amd64.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 (107) hide show
  1. witwin/maxwell/__init__.py +164 -0
  2. witwin/maxwell/adapters/__init__.py +1 -0
  3. witwin/maxwell/adapters/gds.py +203 -0
  4. witwin/maxwell/adapters/tidy3d.py +1669 -0
  5. witwin/maxwell/adjoint_inputs.py +70 -0
  6. witwin/maxwell/compiler/__init__.py +11 -0
  7. witwin/maxwell/compiler/materials.py +1355 -0
  8. witwin/maxwell/compiler/monitors.py +164 -0
  9. witwin/maxwell/compiler/sources.py +222 -0
  10. witwin/maxwell/fdfd/__init__.py +3 -0
  11. witwin/maxwell/fdfd/adjoint/__init__.py +3 -0
  12. witwin/maxwell/fdfd/adjoint/bridge.py +180 -0
  13. witwin/maxwell/fdfd/ams.py +300 -0
  14. witwin/maxwell/fdfd/krylov.py +280 -0
  15. witwin/maxwell/fdfd/plotting.py +110 -0
  16. witwin/maxwell/fdfd/postprocess.py +33 -0
  17. witwin/maxwell/fdfd/solver.py +1057 -0
  18. witwin/maxwell/fdtd/__init__.py +4 -0
  19. witwin/maxwell/fdtd/adjoint/__init__.py +21 -0
  20. witwin/maxwell/fdtd/adjoint/bridge.py +746 -0
  21. witwin/maxwell/fdtd/adjoint/capabilities.py +29 -0
  22. witwin/maxwell/fdtd/adjoint/core.py +3614 -0
  23. witwin/maxwell/fdtd/adjoint/dispatch.py +684 -0
  24. witwin/maxwell/fdtd/adjoint/native.py +2561 -0
  25. witwin/maxwell/fdtd/adjoint/profiler.py +195 -0
  26. witwin/maxwell/fdtd/adjoint/reverse_common.py +207 -0
  27. witwin/maxwell/fdtd/adjoint/seeds.py +524 -0
  28. witwin/maxwell/fdtd/boundary/__init__.py +37 -0
  29. witwin/maxwell/fdtd/boundary/bloch.py +90 -0
  30. witwin/maxwell/fdtd/boundary/common.py +41 -0
  31. witwin/maxwell/fdtd/boundary/cpml.py +527 -0
  32. witwin/maxwell/fdtd/boundary/runtime.py +209 -0
  33. witwin/maxwell/fdtd/checkpoint.py +227 -0
  34. witwin/maxwell/fdtd/coords.py +32 -0
  35. witwin/maxwell/fdtd/cuda/__init__.py +11 -0
  36. witwin/maxwell/fdtd/cuda/backend.py +3532 -0
  37. witwin/maxwell/fdtd/cuda/build.py +292 -0
  38. witwin/maxwell/fdtd/cuda/extension.cpp +2053 -0
  39. witwin/maxwell/fdtd/cuda/kernels/adjoint.cu +5290 -0
  40. witwin/maxwell/fdtd/cuda/kernels/aniso.cu +1704 -0
  41. witwin/maxwell/fdtd/cuda/kernels/boundary.cu +424 -0
  42. witwin/maxwell/fdtd/cuda/kernels/common.cu +74 -0
  43. witwin/maxwell/fdtd/cuda/kernels/common.cuh +82 -0
  44. witwin/maxwell/fdtd/cuda/kernels/dispersive.cu +782 -0
  45. witwin/maxwell/fdtd/cuda/kernels/electric.cu +3613 -0
  46. witwin/maxwell/fdtd/cuda/kernels/magnetic.cu +781 -0
  47. witwin/maxwell/fdtd/cuda/kernels/observers.cu +347 -0
  48. witwin/maxwell/fdtd/cuda/kernels/projection.cu +211 -0
  49. witwin/maxwell/fdtd/cuda/kernels/sources.cu +1482 -0
  50. witwin/maxwell/fdtd/cuda/kernels/spectral.cu +297 -0
  51. witwin/maxwell/fdtd/cuda/launch.h +23 -0
  52. witwin/maxwell/fdtd/cuda/prebuilt/witwin_maxwell_fdtd_cuda.pyd +0 -0
  53. witwin/maxwell/fdtd/cuda/runtime/__init__.py +6 -0
  54. witwin/maxwell/fdtd/cuda/runtime/dispatcher.py +6 -0
  55. witwin/maxwell/fdtd/cuda/runtime/graph.py +33 -0
  56. witwin/maxwell/fdtd/cuda/tensors.h +35 -0
  57. witwin/maxwell/fdtd/dispersion.py +48 -0
  58. witwin/maxwell/fdtd/evaluation.py +290 -0
  59. witwin/maxwell/fdtd/excitation/__init__.py +27 -0
  60. witwin/maxwell/fdtd/excitation/injection.py +1102 -0
  61. witwin/maxwell/fdtd/excitation/modes.py +1675 -0
  62. witwin/maxwell/fdtd/excitation/spatial.py +469 -0
  63. witwin/maxwell/fdtd/excitation/temporal.py +510 -0
  64. witwin/maxwell/fdtd/excitation/tfsf_apply.py +264 -0
  65. witwin/maxwell/fdtd/excitation/tfsf_common.py +421 -0
  66. witwin/maxwell/fdtd/excitation/tfsf_specs.py +490 -0
  67. witwin/maxwell/fdtd/excitation/tfsf_state.py +778 -0
  68. witwin/maxwell/fdtd/io.py +31 -0
  69. witwin/maxwell/fdtd/material_pullback.py +371 -0
  70. witwin/maxwell/fdtd/meshing/__init__.py +3 -0
  71. witwin/maxwell/fdtd/meshing/autogrid.py +335 -0
  72. witwin/maxwell/fdtd/observers.py +1453 -0
  73. witwin/maxwell/fdtd/plotting.py +121 -0
  74. witwin/maxwell/fdtd/postprocess.py +205 -0
  75. witwin/maxwell/fdtd/runtime/__init__.py +119 -0
  76. witwin/maxwell/fdtd/runtime/initialization.py +236 -0
  77. witwin/maxwell/fdtd/runtime/materials.py +1563 -0
  78. witwin/maxwell/fdtd/runtime/module_cache.py +31 -0
  79. witwin/maxwell/fdtd/runtime/spectral.py +581 -0
  80. witwin/maxwell/fdtd/runtime/stepping.py +1987 -0
  81. witwin/maxwell/fdtd/solver.py +502 -0
  82. witwin/maxwell/geometry/__init__.py +5 -0
  83. witwin/maxwell/geometry/polyslab.py +299 -0
  84. witwin/maxwell/materials.py +3 -0
  85. witwin/maxwell/media.py +1467 -0
  86. witwin/maxwell/monitors.py +743 -0
  87. witwin/maxwell/ports.py +113 -0
  88. witwin/maxwell/postprocess/RCS.py +139 -0
  89. witwin/maxwell/postprocess/__init__.py +42 -0
  90. witwin/maxwell/postprocess/diffraction.py +219 -0
  91. witwin/maxwell/postprocess/directivity.py +152 -0
  92. witwin/maxwell/postprocess/emission.py +67 -0
  93. witwin/maxwell/postprocess/modal.py +324 -0
  94. witwin/maxwell/postprocess/nfft.py +266 -0
  95. witwin/maxwell/postprocess/scattering_parameters.py +358 -0
  96. witwin/maxwell/postprocess/stratton_chu.py +1193 -0
  97. witwin/maxwell/result.py +967 -0
  98. witwin/maxwell/scene.py +1338 -0
  99. witwin/maxwell/simulation.py +659 -0
  100. witwin/maxwell/sources.py +917 -0
  101. witwin/maxwell/visualization/__init__.py +28 -0
  102. witwin/maxwell/visualization/interactive.py +484 -0
  103. witwin/maxwell/visualization/plots.py +568 -0
  104. witwin_maxwell-0.3.0.dist-info/METADATA +184 -0
  105. witwin_maxwell-0.3.0.dist-info/RECORD +107 -0
  106. witwin_maxwell-0.3.0.dist-info/WHEEL +4 -0
  107. witwin_maxwell-0.3.0.dist-info/licenses/LICENSE +13 -0
@@ -0,0 +1,184 @@
1
+ Metadata-Version: 2.4
2
+ Name: witwin-maxwell
3
+ Version: 0.3.0
4
+ Summary: Witwin Maxwell - Electromagnetic simulation (FDTD/FDFD)
5
+ Project-URL: License, https://witwin.ai/license
6
+ License-Expression: LicenseRef-Witwin-Research OR LicenseRef-Witwin-Commercial
7
+ License-File: LICENSE
8
+ Requires-Python: <3.15,>=3.10
9
+ Requires-Dist: numpy>=1.24
10
+ Requires-Dist: scipy>=1.10
11
+ Requires-Dist: torch>=2.10
12
+ Requires-Dist: witwin<0.2,>=0.1
13
+ Provides-Extra: direct
14
+ Requires-Dist: nvidia-cudss-cu12; extra == 'direct'
15
+ Requires-Dist: nvmath-python[cu12]; extra == 'direct'
16
+ Description-Content-Type: text/markdown
17
+
18
+ # WiTwin Maxwell — Differentiable Electromagnetic Solver
19
+
20
+ [![PyPI](https://img.shields.io/pypi/v/witwin-maxwell)](https://pypi.org/project/witwin-maxwell/) [![Downloads](https://img.shields.io/pypi/dm/witwin-maxwell)](https://pypi.org/project/witwin-maxwell/) ![Code Size](https://img.shields.io/github/languages/code-size/Asixa/witwin-platform) [![License](https://img.shields.io/badge/license-dual--licensed-blue)](https://witwin.ai/license)
21
+
22
+ WiTwin Maxwell is a differentiable full-wave electromagnetic solver with a **PyTorch-native interface** and a native CUDA FDTD runtime at its core. The FDTD field-update loops run as hand-written GPU kernels shipped in prebuilt platform wheels, while the entire workflow — scene definition, simulation dispatch, result access, and automatic differentiation — stays inside standard PyTorch through `SceneModule`, `MaterialRegion`, and adjoint backward support.
23
+
24
+ The public solver workflow is `Scene -> Simulation -> Result` for both runtimes:
25
+
26
+ - `FDTD`: native-CUDA Yee-grid time-domain solver with CPML, multi-frequency DFT sampling, material dispersion and nonlinearity, and differentiable adjoint support
27
+ - `FDFD` (limited/experimental): CUDA-only sparse single-frequency solver for linear isotropic or diagonal-electric media with `none`/PML boundaries. It does not yet match FDTD's material, boundary, nonuniform-grid, source, monitor, or adjoint coverage.
28
+
29
+ ## Get Started
30
+
31
+ CPython 3.10-3.14, PyTorch 2.10 or newer, and an NVIDIA GPU are supported.
32
+ This package depends on the base `witwin` package.
33
+
34
+ ```bash
35
+ pip install witwin-maxwell
36
+ ```
37
+
38
+ ## Prebuilt CUDA Support
39
+
40
+ Release wheels are built for Linux x86_64 and Windows x86_64 with CUDA 12.8. Each wheel carries one Python-independent native FDTD library using the LibTorch Stable ABI introduced for this surface in PyTorch 2.10. The same wheel and native binary are CI load-tested with PyTorch 2.10/cu128, 2.11/cu128, and 2.12/cu126 across CPython 3.10-3.14; no Torch-minor-specific binary selection or JIT rebuild is required. The fat binaries contain native code for compute capabilities 7.0, 7.5, 8.0, 8.6, 8.9, 9.0, 10.0, 10.1, and 12.0, plus compute 12.0 PTX. This includes native coverage for RTX 2080-class Turing GPUs and current data-center and RTX/RTX PRO Blackwell families.
41
+
42
+ Linux wheels target `manylinux_2_35_x86_64`. The installed NVIDIA driver must support the CUDA 12.x runtime supplied by PyTorch; the CUDA toolkit is only needed for source/JIT builds.
43
+
44
+ For full CUDA 12.8 and Blackwell support, use at least driver 570.26 on Linux or 570.65 on Windows. Pre-Blackwell systems can use NVIDIA's CUDA 12.x minor-version compatibility floor (525.60.13 on Linux or 528.33 on Windows), subject to NVIDIA's compatibility-mode feature limits.
45
+
46
+ ## Public API
47
+
48
+ The main user-facing API is intentionally small:
49
+
50
+ - `Scene`: domain, grid, boundaries, structures, sources, monitors, ports, and differentiable material regions
51
+ - `Simulation`: runtime configuration through `Simulation.fdtd(...)`
52
+ - `Result`: structured field access, material tensors, monitor payloads, plotting, stats, and save support
53
+
54
+ For module-style inverse-design workflows, define a `SceneModule`, implement `to_scene()`, and pass that module directly into `Simulation`.
55
+
56
+ `Scene` stays declarative. Solver-sized Yee-grid coordinates, material tensors, and related runtime state are compiled during `Simulation.prepare()` / `Simulation.run()` and live on the internal solver scene rather than the public `Scene` object.
57
+
58
+ ## Support Matrix
59
+
60
+ | Area | Currently supported | Notes |
61
+ | --- | --- | --- |
62
+ | Solvers | `Simulation.fdtd(...)`; limited `Simulation.fdfd(...)` | FDTD is the primary, full-featured runtime. FDFD is a CUDA-only sparse single-frequency path with isotropic/diagonal-electric, dispersive/conductive, `none`/PML, iterative/direct-solver, and basic adjoint support; nonuniform grids, magnetic/nonlinear/full-tensor media, in-domain PEC, symmetry, and broader FDTD parity are not implemented. Both return `Result`. |
63
+ | Sources | `PointDipole`, `PlaneWave`, `GaussianBeam`, `AstigmaticGaussianBeam`, `ModeSource`, `TFSF`, uniform/custom current and custom field sources | Soft and TFSF launch paths are available. `TFSF.slab(...)` supports any normal axis, CW or broadband waveforms, and periodic/Bloch grating layouts. `ModeSource` remains experimental. |
64
+ | Source time | `CW`, `GaussianPulse`, `RickerWavelet`, `CustomSourceTime` | Shared waveform vocabulary across public source APIs, including sampled or callable custom temporal signals. |
65
+ | Boundaries | `none`, `pml`, `periodic`, `bloch`, `pec`, `pmc` | Per-axis and per-face mixed layouts are available through `BoundarySpec.faces(...)`, including x/y Bloch plus z PML for grating FDTD workflows. |
66
+ | Materials | Isotropic and tensor electric/magnetic media; conductive, Debye, Drude, Lorentz, Sellmeier, gain, nonlinear, modulated, perturbation, custom dispersive, `Medium2D`, `Graphene`, and `LossyMetalMedium` | Compatible material effects compose in the same compiled Yee model. `MaterialRegion` is the primary differentiable design primitive; specialized combinations and adjoint limits are listed in `FEATURE_LIST.md`. |
67
+ | Geometry and grids | `Box`, `Sphere`, `Cylinder`, `Ellipsoid`, `Cone`, `Pyramid`, `Prism`, `Torus`, `HollowBox`, `Mesh`, `PolySlab`, custom/automatic/nonuniform grids, mesh overrides, and subpixel averaging | Shared geometry and `Structure` primitives are re-exported through `witwin.maxwell`; `Scene` owns device placement and compilation. |
68
+ | Monitors | Point, plane, finite-plane, flux, time-domain, material/permittivity, mode, diffraction, dipole-emission, and closed-surface monitors | Frequency selection is available through `Result.at(...)`; closed surfaces feed equivalent-current and near-to-far postprocessing. |
69
+ | Ports | `ModePort` | First-class modal port with S-parameter/modal-overlap workflows, including broadband, lossy, anisotropic, and bent-waveguide forward modes; still experimental. |
70
+ | Results | `result.E`, `result.H`, `result.materials`, `Result.monitor(...)`, `Result.save(...)` | Structured field and material access stay torch-native. |
71
+ | Postprocess | Equivalent currents, background-aware/curved-surface Stratton-Chu propagation, near-to-far transform, directivity, bistatic RCS, S-parameters, and modal overlap | Use `witwin.maxwell.postprocess`. |
72
+ | Differentiable workflows | `SceneModule`, `MaterialRegion`, trainable material/geometry/source inputs, native-CUDA FDTD adjoint backward | Native reverse kernels cover standard/CPML/Bloch fields and supported conductive, dispersive, anisotropic, nonlinear, TFSF, and multi-source compositions. Explicit capability guards reject unsupported gradients. |
73
+ | Interoperability | Tidy3D scene export and GDS geometry import | Tidy3D export covers grids, boundaries, common geometry, broad material/source/monitor families, and validated SI/unit-convention conversions. |
74
+
75
+ For the exhaustive user-visible capability inventory, see [`FEATURE_LIST.md`](FEATURE_LIST.md). The numerical conventions and lessons from the Maxwell-vs-Tidy3D validation campaign are recorded in [`docs/validation/tidy3d-numerical-alignment-0.3.0.md`](docs/validation/tidy3d-numerical-alignment-0.3.0.md).
76
+
77
+ ## Minimal Differentiable Example
78
+
79
+ The example below uses a point source and a dielectric cube, plots a vertical electric-field slice, and backpropagates to the cube position.
80
+
81
+ ```python
82
+ import torch
83
+ import witwin.maxwell as mw
84
+
85
+ # Train the cube position directly.
86
+ box_x = torch.tensor(0.10, device="cuda", requires_grad=True)
87
+ box_position = torch.stack((box_x, box_x.new_tensor(0.0), box_x.new_tensor(0.06)))
88
+
89
+ # Build a minimal scene: one dielectric cube and one point dipole.
90
+ scene = mw.Scene(
91
+ domain=mw.Domain(bounds=((-0.24, 0.24), (-0.24, 0.24), (-0.24, 0.24))),
92
+ grid=mw.GridSpec.uniform(0.12),
93
+ boundary=mw.BoundarySpec.pml(num_layers=2, strength=1.0),
94
+ device="cuda",
95
+ subpixel_samples=5,
96
+ )
97
+ scene.add_structure(
98
+ mw.Structure(
99
+ name="cube",
100
+ geometry=mw.Box(position=box_position, size=(0.18, 0.18, 0.18)),
101
+ material=mw.Material(eps_r=20.0),
102
+ )
103
+ )
104
+ scene.add_source(
105
+ mw.PointDipole(
106
+ position=(0.0, 0.0, -0.06),
107
+ polarization="Ez",
108
+ width=0.04,
109
+ source_time=mw.GaussianPulse(
110
+ frequency=1.0e9,
111
+ fwidth=0.25e9,
112
+ amplitude=50.0,
113
+ ),
114
+ )
115
+ )
116
+ scene.add_monitor(mw.PointMonitor("probe", (0.0, 0.0, 0.06), fields=("Ez",)))
117
+
118
+ sim = mw.Simulation.fdtd(
119
+ scene,
120
+ frequencies=[1.0e9],
121
+ run_time=mw.TimeConfig(time_steps=32),
122
+ spectral_sampler=mw.SpectralSampler(window="none"),
123
+ full_field_dft=True,
124
+ )
125
+
126
+ # Run the simulation and backpropagate from a probe value.
127
+ result = sim.run()
128
+ probe = result.monitor("probe")["data"]
129
+ loss = torch.abs(probe) ** 2
130
+ loss.backward()
131
+
132
+ print("probe =", probe)
133
+ print("loss =", float(loss.detach().item()))
134
+ print("d(loss)/d(box_x) =", box_x.grad)
135
+
136
+ # Plot a vertical field slice at y = 0.
137
+ result.plot.field(axis="y", position=0.0, component="abs", field_log_scale=True)
138
+ ```
139
+
140
+ This example is intentionally minimal and does not require wrapping the scene in a class.
141
+
142
+ The current public backward path is for trainable inputs that contribute to compiled material tensors, such as `MaterialRegion.density` and supported trainable geometry parameters. Parameters that only affect source placement or other non-material branches are not yet part of the public adjoint path.
143
+
144
+ ## Development and Validation
145
+
146
+ Common local commands:
147
+
148
+ ```bash
149
+ python -m pytest tests
150
+ python -m pytest tests/api/public/test_public_api.py tests/api/public/test_simulation_smoke.py
151
+ python -m pytest tests/boundaries/cpml/test_fdtd_cpml.py tests/monitors/observers/test_fdtd_observers.py
152
+ python -m pytest tests/gradients/test_fdtd_adjoint_bridge.py
153
+ python -m benchmark
154
+ python -m benchmark dipole_vacuum
155
+ python -m benchmark planewave_vacuum
156
+ ```
157
+
158
+ Benchmark assets live under `benchmark/scenes/`, `benchmark/cache/`, `benchmark/plots/`, and `benchmark/RESULTS.md`.
159
+
160
+ The release validation suite combines unit/API tests, native CUDA parity and adjoint tests, and Maxwell-vs-Tidy3D numerical comparisons. Cross-solver comparisons use common physical-domain coordinates, external PML on both sides, coordinate-aligned complex field slices, and solver-independent scalar observables. See the [0.3.0 numerical-alignment notes](docs/validation/tidy3d-numerical-alignment-0.3.0.md) for the conventions, visual diagnosis workflow, and known residuals.
161
+
162
+ ## Current Notes
163
+
164
+ - Core Maxwell workflows are GPU/CUDA-first.
165
+ - FDFD is available but remains limited/experimental. It is suitable for supported linear single-frequency scenes; use FDTD for nonuniform grids, magnetic or nonlinear media, full off-diagonal anisotropy, in-domain PEC, symmetry, and the broader source/monitor/adjoint feature set.
166
+ - `bloch_wavevector="auto"` is supported for fixed-angle CW TFSF grating slabs; broadband automatic Bloch phase requests are rejected.
167
+ - Full off-diagonal `Tensor3x3` electric anisotropy is supported by FDTD, including supported CPML, dispersion, conduction, and adjoint compositions; use `DiagonalTensor3` when the material is naturally diagonal because it is cheaper.
168
+ - `LossyMetalMedium` is a narrowband, normal-incidence planar SIBC model. Curved, oblique, laterally finite, and adjoint SIBC workflows require a volumetric material model or a future generalized surface operator.
169
+ - The public differentiable path covers supported trainable material, geometry, and source inputs. Runtime capability checks reject combinations without a physically implemented reverse channel.
170
+ - `ModeSource`, `ModeMonitor`, and `ModePort` are available, but they are still marked experimental.
171
+
172
+ ## License
173
+
174
+ Witwin Maxwell is available under a dual-license model for academic and
175
+ non-commercial research use or commercial and enterprise use. See the
176
+ [Witwin licensing page](https://witwin.ai/license) for the applicable terms.
177
+
178
+ ## Developer
179
+
180
+ <a href="http://xingyuchen.me/">
181
+ <img src="https://github.com/Asixa.png" alt="Xingyu Chen" width="48" height="48" style="border-radius:50%;">
182
+ </a>
183
+
184
+ [Xingyu Chen](http://xingyuchen.me/)
@@ -0,0 +1,107 @@
1
+ witwin/maxwell/__init__.py,sha256=pVOKs0hiweu0v1-hcka2sI8vaaJVKkOpi9EB_73vIR4,3420
2
+ witwin/maxwell/adjoint_inputs.py,sha256=6pvexf8h5gQPoXjNIVOUhhT1UEdEGQAs5-mgVz1iWC8,2546
3
+ witwin/maxwell/materials.py,sha256=WmPrCPLei9N-NL0b4ER5q6kd3-FXWsFE1cWFLDveh8g,100
4
+ witwin/maxwell/media.py,sha256=HTgCDXwJNA2T4SMp5fN-uGI7lR-UKAVNtvJDwUFa6cw,67484
5
+ witwin/maxwell/monitors.py,sha256=loFN7BfPplSA2HKk16u5GU-Rv00p5-x3FLrSXtW9vDs,29671
6
+ witwin/maxwell/ports.py,sha256=4bpPn7lC3IJpvVArk5mSX6mW8GZ5pBf_Cx1oEHkrWQc,4390
7
+ witwin/maxwell/result.py,sha256=Nn6DonZeuSo4T2VzA5R3YeNJgsGLpzIlQ2WOkphZkAk,37476
8
+ witwin/maxwell/scene.py,sha256=z8nxcxHfLqn1IbFyZL7RjH_9jKZZRlWRSSslMl2hFMQ,51892
9
+ witwin/maxwell/simulation.py,sha256=kUeoHAoCNIILf995ayna-XqcMcmnBJcpB3Us69zuQJs,25690
10
+ witwin/maxwell/sources.py,sha256=7T8b_1Sq0uccnuarm1ZdW4M-9pWAe2B3nSwI0sucCtw,37088
11
+ witwin/maxwell/adapters/__init__.py,sha256=aiE9g0ZMypTviXMkmyAPLvHJG-p_X3K_OQm8NRbQYmA,35
12
+ witwin/maxwell/adapters/gds.py,sha256=1Pq_biZtaHLeg2aa0oMsqAGoCbafYRsVPklJ0izqRFw,8075
13
+ witwin/maxwell/adapters/tidy3d.py,sha256=Jiybu6TiVBHR9YXYQD-YVgPl-O7QRjPPCzl8kmyqFrI,74751
14
+ witwin/maxwell/compiler/__init__.py,sha256=DkQlKi3dDS92mTKvsUott8vnkcXvInEROjnHAvK_SKw,365
15
+ witwin/maxwell/compiler/materials.py,sha256=6Pxfv0C-_Un11vKyHgURpnEOgwb51tp14rcpaTWz5V0,58915
16
+ witwin/maxwell/compiler/monitors.py,sha256=LdhDgBYMVcfIsDvEqPojAAgNBxNlOJfJRhV8q3qdZ-U,7346
17
+ witwin/maxwell/compiler/sources.py,sha256=FJngdimStEuiV3kMD65BvQkvbPP0APm05H-b56BnByU,8954
18
+ witwin/maxwell/fdfd/__init__.py,sha256=wDqKysXWVsjkWqdF2EQx66WvD3T-D2PyAUbmDHGLyOs,48
19
+ witwin/maxwell/fdfd/ams.py,sha256=NbR_TVPX88vpXZ5v_RD-u514MF3HY07mOrKV7K1QX1M,12704
20
+ witwin/maxwell/fdfd/krylov.py,sha256=DEBiXiTZSvmi6wg-C9M7GdM2c-BchSTKmfIearxQeCU,9689
21
+ witwin/maxwell/fdfd/plotting.py,sha256=VEBxp7ubfiOiHvRIEXRD5PfyE1s5W7o0i8s9Yg1h4ZY,3392
22
+ witwin/maxwell/fdfd/postprocess.py,sha256=8N6_0t4fmRORmYHWvE1an5LDCZfJ_tEwhSST0W9G3zk,1226
23
+ witwin/maxwell/fdfd/solver.py,sha256=IaJKFOoaDdIk7QldeT2MeF-kYWg6cDgj3QBnOg58RKQ,54267
24
+ witwin/maxwell/fdfd/adjoint/__init__.py,sha256=54NM_BczCebhW4ZeaXDSyLxjkavvFVQOfmkmAx7iv3Y,98
25
+ witwin/maxwell/fdfd/adjoint/bridge.py,sha256=ojhQ_WGgnjBYx0WDaOzz5oJtpq7fcH8GYIvMznRaJiM,7157
26
+ witwin/maxwell/fdtd/__init__.py,sha256=ssVXmXtTAMN00sc-Q8KJFTGCPayf4xScdSZnox8SZf4,168
27
+ witwin/maxwell/fdtd/checkpoint.py,sha256=JckRsJcjv5uyGasd5SrPMHzcD9TLE12BtX5gw3j4DCk,9717
28
+ witwin/maxwell/fdtd/coords.py,sha256=uOUpClLs6mV65UOoCf88dSUsv9nrV8rF5__6e3ejU-g,1190
29
+ witwin/maxwell/fdtd/dispersion.py,sha256=OH9STLScGSJiu9jf1tk_CQVHSPjHwJA-_BP0ZJuAmZY,1604
30
+ witwin/maxwell/fdtd/evaluation.py,sha256=TlKsrFh_mOWqjQLDbWo8pdIoIafwkHdeDfW6yQLqcj0,9257
31
+ witwin/maxwell/fdtd/io.py,sha256=SW1zx71QnJ5eCvzoKvBFYLAgc0lOY3qCMVqFRIlgJxs,1063
32
+ witwin/maxwell/fdtd/material_pullback.py,sha256=SSKLmw_2zgL5vjUd8OGEL9AjD8x7TM7-TIdsx5DfKbo,13825
33
+ witwin/maxwell/fdtd/observers.py,sha256=SIvDoyKnJoGTgT80usAqpzWXnyoNqlk_OTEpdvhVg94,65155
34
+ witwin/maxwell/fdtd/plotting.py,sha256=nzbMlXLwSdo-fo_Hcp55tg9UYDOWBKFor_QXLbJWe4E,4023
35
+ witwin/maxwell/fdtd/postprocess.py,sha256=hnxU-CoxvtRrT_ooefOy8thkPmwLO6ciNMSPLihl7SA,7926
36
+ witwin/maxwell/fdtd/solver.py,sha256=sQHy-QX-DgnZweMeFcZK32FDmMYvNQsJMWZ6ahadt54,21908
37
+ witwin/maxwell/fdtd/adjoint/__init__.py,sha256=O_2t3I7VXPcswMsxs5_aaW2buENrlmSmFrEubrFnIPc,590
38
+ witwin/maxwell/fdtd/adjoint/bridge.py,sha256=0WzoyhCGPWvSqfzwSKXS52zRikoac6LAmlfV_EZO-LQ,39894
39
+ witwin/maxwell/fdtd/adjoint/capabilities.py,sha256=ZHIb4RH9SvRQePI-PFpBTSCfFXgUGOjG2LAlrszrgTs,1275
40
+ witwin/maxwell/fdtd/adjoint/core.py,sha256=_RTvjwtesQ7oQNheTFhHThDzX2ZGEwJ1wufgtiSPfYw,156238
41
+ witwin/maxwell/fdtd/adjoint/dispatch.py,sha256=36dDNC2cDYv9ntz6AYthon-AoJCh89OnmU22H_oLxAc,27389
42
+ witwin/maxwell/fdtd/adjoint/native.py,sha256=abuH0uyedCKvdg5J5sUUJ9zfYaIL1QvgSlHqUHRAy4k,110579
43
+ witwin/maxwell/fdtd/adjoint/profiler.py,sha256=DhsaAa6ZwmyzhBI7aOjulk-2dJqcJTNhY_ODBSnoyvc,7523
44
+ witwin/maxwell/fdtd/adjoint/reverse_common.py,sha256=kw_0alqEuhL0x_js0HAAeQi8aTqs56jFNwp4Nq6IaY4,6922
45
+ witwin/maxwell/fdtd/adjoint/seeds.py,sha256=-uQ3HSIFPUJyH35NESdnwvOzMMncB6CCiPSUdeMVP8w,20396
46
+ witwin/maxwell/fdtd/boundary/__init__.py,sha256=I2rl6ih8rnuPZ1RrXu3wzldDbsPbJaarsv0BoRkjsJI,932
47
+ witwin/maxwell/fdtd/boundary/bloch.py,sha256=JZQbVH1_t8hAvuZ-G6oRXKqPdV_0jRRak7WH5gC99ug,3440
48
+ witwin/maxwell/fdtd/boundary/common.py,sha256=Fxvr4EIRofDjyGcIfUJBA_DSr_AmsZ3SQtJ4joUa03Q,1345
49
+ witwin/maxwell/fdtd/boundary/cpml.py,sha256=59GFy3zPUh5SyaHbYoidBY-_Ah1YaKYoIRO2Cf1ZmXE,21110
50
+ witwin/maxwell/fdtd/boundary/runtime.py,sha256=ZyvbFI9KALz0_MbEa11n1koYgKOysJ01LTk1bW7xMMA,8511
51
+ witwin/maxwell/fdtd/cuda/__init__.py,sha256=qvgEspeUclEjtXbGdwf2756H1Cc07nRYlrUdeys9qNY,304
52
+ witwin/maxwell/fdtd/cuda/backend.py,sha256=7PrhaH_oAXa3DNJtZJ93Op7tk1fAVH1gqsXLtDobMQM,96377
53
+ witwin/maxwell/fdtd/cuda/build.py,sha256=iu37XLQwPokkp8lYiiBEzN8kQnTI5i4r6E13p6ilE9Y,10474
54
+ witwin/maxwell/fdtd/cuda/extension.cpp,sha256=ymyZwYhD7Jx8wbXKNfxH3_8Bf1vj1xlGijoXzi86HaE,118199
55
+ witwin/maxwell/fdtd/cuda/launch.h,sha256=6ou5itweVsmJu3g88dSD4v24ertQ__xI99rvxJVUSNI,701
56
+ witwin/maxwell/fdtd/cuda/tensors.h,sha256=9uDZhfk8Xi7BSKtNKWUayvjONH7n3Ju6Mh0FSAOPO0k,1114
57
+ witwin/maxwell/fdtd/cuda/kernels/adjoint.cu,sha256=Zixf3qo7qWa9nqN6bmLdzG52JesShHW-PGqg_xriIYk,240191
58
+ witwin/maxwell/fdtd/cuda/kernels/aniso.cu,sha256=YgbXo7Xjo_DP-nROcQw_pXNuFaFIBl6gMPEYkF5mBSw,63648
59
+ witwin/maxwell/fdtd/cuda/kernels/boundary.cu,sha256=kaQEbTzuGGBCXlCVBtWrqrseK32p_IicCpubh79Rm7M,15421
60
+ witwin/maxwell/fdtd/cuda/kernels/common.cu,sha256=kv13ah3ZSoldBbu3yhAJXefmm7iCTtlVBkXy7YQWAHw,2507
61
+ witwin/maxwell/fdtd/cuda/kernels/common.cuh,sha256=WDbpBJDO5bPvTxO6Pu0lYsi4hjL6Hr7BhNK54pxBUGc,2816
62
+ witwin/maxwell/fdtd/cuda/kernels/dispersive.cu,sha256=TxtAajd7YGAXRV_3rmrswZm-mbXD0XqSZZq37e_5zc8,30301
63
+ witwin/maxwell/fdtd/cuda/kernels/electric.cu,sha256=5uKVU37GeufhzGdqB7QkLkajkIysvUx7ehQDfzcaoEg,156161
64
+ witwin/maxwell/fdtd/cuda/kernels/magnetic.cu,sha256=isff7FpFWkUhgbVz5UBu8BxfD5WpwHmie5_HpgAhzlg,34708
65
+ witwin/maxwell/fdtd/cuda/kernels/observers.cu,sha256=UlyixGZ1I-ydYX4ZCjftKZcdXlczRG9hs6HpJ5tWJuI,13303
66
+ witwin/maxwell/fdtd/cuda/kernels/projection.cu,sha256=9QTbWzPVf80HsRR0tVC3eb2MElZO5RjEkwrOgWNSWxg,7611
67
+ witwin/maxwell/fdtd/cuda/kernels/sources.cu,sha256=_0LyWfvHrFHhklOl6AfgIYCVy1I0wXZn4Fw1mXp0_uc,55138
68
+ witwin/maxwell/fdtd/cuda/kernels/spectral.cu,sha256=ZgpNiNHI0vp0zwp6khws8B8fD_y_3-rk5LYcEWd1izw,11862
69
+ witwin/maxwell/fdtd/cuda/prebuilt/witwin_maxwell_fdtd_cuda.pyd,sha256=BedDvoo7S0Tev30he3x5ZjDeqDBjCzEdboWCpS_RxQI,16769024
70
+ witwin/maxwell/fdtd/cuda/runtime/__init__.py,sha256=3M8e7QFFAmCPxQdQa6D9TGQpNB1rviqkqU3fadT5RgQ,166
71
+ witwin/maxwell/fdtd/cuda/runtime/dispatcher.py,sha256=J6wIQY8MaJApLnJ7g1_MjwufPWn_l-xx0BrZGCdvZek,164
72
+ witwin/maxwell/fdtd/cuda/runtime/graph.py,sha256=elPTy3dZEuOGL7hkBtf0i-4-hTR250D5KwP0-6KciPc,924
73
+ witwin/maxwell/fdtd/excitation/__init__.py,sha256=2gtrzs2UnNmvsSkqL1tIasFs3KPoSIetT253vYmVEPs,796
74
+ witwin/maxwell/fdtd/excitation/injection.py,sha256=oxKATamQfe0-YGrSt4nkfjJsLtipLkRAx-btHxut7ss,46739
75
+ witwin/maxwell/fdtd/excitation/modes.py,sha256=h4FPyIuaxhG1HpVf2tYIPWAEK2XvLiGLsPNwNjrsP6A,74761
76
+ witwin/maxwell/fdtd/excitation/spatial.py,sha256=3GqHYyKFS4hioge-3txdGwfmiKDZRHOfl-OSfT24NRo,17918
77
+ witwin/maxwell/fdtd/excitation/temporal.py,sha256=D6RQmNEsTrCCBx92JfFknHuPExyZ2OjIAgVWtzJjfVM,18706
78
+ witwin/maxwell/fdtd/excitation/tfsf_apply.py,sha256=w1K-vfc_XoSwCrXJJoalixB11hv-sF_CMY95F4OEfZo,11206
79
+ witwin/maxwell/fdtd/excitation/tfsf_common.py,sha256=vK0Vf3Qri3453B6b0Ti_eq6n1ILXCSH-zjG1WoSHFOg,17033
80
+ witwin/maxwell/fdtd/excitation/tfsf_specs.py,sha256=VHDFKHnTF2NFMHbh8TvTcswiyQ-XM89Vz11rxIfqCmM,16624
81
+ witwin/maxwell/fdtd/excitation/tfsf_state.py,sha256=HbfDEUcgPM1CXHsZyZuj5L22SslyNPhtAd4xtuZsP-E,29488
82
+ witwin/maxwell/fdtd/meshing/__init__.py,sha256=CDDFF1vqLVPUTPpG-NNkTxH5_-TAXtGVEyXyW8Zmtn0,100
83
+ witwin/maxwell/fdtd/meshing/autogrid.py,sha256=ZGeL6ktiGv0e6p7RwhxU7Ef57llCeNOtk1895phCXvU,14917
84
+ witwin/maxwell/fdtd/runtime/__init__.py,sha256=mo0jrwhzF-lwCmpLYDARkoVI9pqhgZ9HTPsfQ4hlo3Y,3880
85
+ witwin/maxwell/fdtd/runtime/initialization.py,sha256=7M6Ici0u_QuvpM-Gfc8vkdgNUx45KBD4a3VlA55sNpc,9643
86
+ witwin/maxwell/fdtd/runtime/materials.py,sha256=o96SzGwdJ7dw_r1YeM6KwYaOJE6ucBzivfiMi6GUpvM,73815
87
+ witwin/maxwell/fdtd/runtime/module_cache.py,sha256=ioJbdYPp22B7cxDIZZq9Bs88sIm2O2PdJK_2H3QX1_8,983
88
+ witwin/maxwell/fdtd/runtime/spectral.py,sha256=HexwCV7DAXnGloMaB2gFUC7dh9RTm_do14hZ-DygtCU,26740
89
+ witwin/maxwell/fdtd/runtime/stepping.py,sha256=TuRh-6_i9IzFKWqFUssqokKJVimWMhYyvsWeh6q649M,83127
90
+ witwin/maxwell/geometry/__init__.py,sha256=uyGk6_z0BKGVR5KqCSSKMJ6jmh7qas65cy7FSEWWJtQ,146
91
+ witwin/maxwell/geometry/polyslab.py,sha256=HphEv3uAtHO6I4d5JLeZyOI6nlWpO_QlMZEyjO1FYn0,12162
92
+ witwin/maxwell/postprocess/RCS.py,sha256=aSwz2ZN8m27HQ5LWCzV9eoaWj-JCZ_HnfjrMtuzi01U,5641
93
+ witwin/maxwell/postprocess/__init__.py,sha256=f7_OTNZPyZQzNdE2goaoUsK-opg-gYmpChzhPwUlZeU,1549
94
+ witwin/maxwell/postprocess/diffraction.py,sha256=gQG74L0PUhkN27lprAFNtBqAeHMAkugHRlG9J68GmpY,8254
95
+ witwin/maxwell/postprocess/directivity.py,sha256=_UuG6AiNFrhkhtgv0h61y55-gNK7wkBOmAgpyUPbEn4,6375
96
+ witwin/maxwell/postprocess/emission.py,sha256=tPrQBT538gryl9YbikdzZ31FZAi3D8D3kIbHijdMOd4,2882
97
+ witwin/maxwell/postprocess/modal.py,sha256=f9c0ylH8_-VHCoJ99qlH63T4TllaGeLTtm-kgpwjvrw,14141
98
+ witwin/maxwell/postprocess/nfft.py,sha256=oeoo_0paFMp3niCaajrBGOjw0lf6dMvkrgHr1RRVBSM,10200
99
+ witwin/maxwell/postprocess/scattering_parameters.py,sha256=vYetfhsV_Hiyyg-cPb8RibcjUolHFINxxpknmqzmmdk,15546
100
+ witwin/maxwell/postprocess/stratton_chu.py,sha256=oyYT0bNm4I5OrmmVn9IRrWOWcbAcqBzcRqoS2mD4yYQ,49709
101
+ witwin/maxwell/visualization/__init__.py,sha256=r3SOyzV7faXHRNGIhFsNd6KAz4pLoi0KN4s3hxMptls,878
102
+ witwin/maxwell/visualization/interactive.py,sha256=uBWOYoFOi7XPFWvdN5FXUFMvoN4WYt5OInV1-ZjFZzU,13933
103
+ witwin/maxwell/visualization/plots.py,sha256=ZrgeMMDNmrOUKTTSv5S6ErwYAC0pJjRENSygZHXwZKY,25160
104
+ witwin_maxwell-0.3.0.dist-info/METADATA,sha256=1XB1UQ0Oe2UWsQMkZ4oLYbmPsVtZ3hCE2LAEir0lrGo,12748
105
+ witwin_maxwell-0.3.0.dist-info/WHEEL,sha256=THPaOYRwJrp5fq_kO4FXfug4mAwzOMPTtR1n4yCKCdg,94
106
+ witwin_maxwell-0.3.0.dist-info/licenses/LICENSE,sha256=ypmZ6cVCDm176-yJ16P-2snC2-PWVgF1gorpvbgrlQ0,419
107
+ witwin_maxwell-0.3.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.31.0
3
+ Root-Is-Purelib: false
4
+ Tag: py3-none-win_amd64
@@ -0,0 +1,13 @@
1
+ Witwin Dual License
2
+
3
+ Copyright (c) 2026 Xingyu Chen. All rights reserved.
4
+
5
+ This software is available under a dual-license model:
6
+
7
+ 1. A research license for academic and non-commercial research use.
8
+ 2. A commercial license for commercial and enterprise use.
9
+
10
+ The complete and current license terms, including information about obtaining
11
+ the applicable license, are available at:
12
+
13
+ https://witwin.ai/license