How mcmahon-lab/2d-programmable-waveguide works
This repository is a compact demo toolkit for simulating programmable 2D photonic waveguides and exploring inverse design, classification, multimode transformations, and physics-aware training. The user-facing workflow is to run a Jupyter example, define or optimize an index pattern and input field, then simulate propagation and inspect the output. The library supplies the propagation solver, waveguide geometry, mode and beam utilities, and training helpers. Notebook-to-module links follow the README’s descriptions; source-level edges are limited to relationships shown in the excerpts or SOURCE INDEX.
Main entry points: split_step_solver.py BPM propagation · Example 1 Y-splitter.ipynb Y-splitter · Example 2 Inverse design.ipynb Inverse design · Example 3 MNIST classification.ipynb MNIST classification
Components 16
Demonstration notebooks
- Y-splitter
Example 1 Y-splitter.ipynb - Inverse design
Example 2 Inverse design.ipynb - MNIST classification
Example 3 MNIST classification.ipynb - Mode conversion
Example 4 Mode conversion in multimode waveguide.ipynb - Multimode MVM
Example 5 Matrix-vector-multiplication in multimode waveguide.ipynb - Mismatched passes
Example 6 Mismatched forward-backward pass.ipynb
Waveguide physics
- Waveguide geometry
tdwg_lib/waveguide.py - BPM propagation
tdwg_lib/split_step_solver.py - Eigenmode solver
tdwg_lib/mode_solver.py - Beam and mode fields
tdwg_lib/beam_utils.py
Numerical utilities
- PyTorch Fourier tools
tdwg_lib/ftutils_torch.py - NumPy Fourier tools
tdwg_lib/ftutils_np.py - Smoothing helpers
tdwg_lib/helpers.py
Design and training
- PAT autograd
tdwg_lib/pat.py - Training utilities
tdwg_lib/pnn_utils.py
Other components
- Researcher
Connections 15
- Researcher → Y-splitter: runs example
README.md - Researcher → Inverse design: runs example
README.md - Researcher → MNIST classification: runs example
README.md - Researcher → Mode conversion: runs example
README.md - Researcher → Multimode MVM: runs example
README.md - Researcher → Mismatched passes: runs example
README.md - Y-splitter → BPM propagation: simulates propagation
README.md - Inverse design → BPM propagation: optimizes simulation
README.md - Mode conversion → BPM propagation: demonstrates propagation
README.md - Multimode MVM → BPM propagation: designs transformation
README.md - MNIST classification → BPM propagation: classifies with waveguide
README.md - Mismatched passes → PAT autograd: uses PAT approach
README.md - Waveguide geometry → PyTorch Fourier tools: builds frequency axis
tdwg_lib/waveguide.py - BPM propagation → PyTorch Fourier tools: uses frequency axis
tdwg_lib/split_step_solver.py - Eigenmode solver → NumPy Fourier tools: uses transforms
tdwg_lib/mode_solver.py