Metadata-Version: 2.4
Name: micromode
Version: 0.1.0a1
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Rust
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Physics
Requires-Dist: h5py>=3.10,<4.0
Requires-Dist: matplotlib>=3.8,<4.0
Requires-Dist: numpy>=2.2.6,<2.5.0
Requires-Dist: xarray>=2023.8,<2026.5.0
Requires-Dist: maturin>=1.7,<2 ; extra == 'dev'
Requires-Dist: packaging>=24.2 ; extra == 'dev'
Requires-Dist: pkginfo>=1.12.1.2 ; extra == 'dev'
Requires-Dist: pytest>=8.1,<10.0.0 ; extra == 'dev'
Requires-Dist: pytest-cov>=5,<8 ; extra == 'dev'
Requires-Dist: pytest-xdist>=3.6,<4.0 ; extra == 'dev'
Requires-Dist: tomli>=2,<3 ; python_full_version < '3.11' and extra == 'dev'
Requires-Dist: twine>=5,<7 ; extra == 'dev'
Provides-Extra: dev
License-File: LICENSE
Summary: Rust-backed photonics mode solver with a small Python API.
Keywords: electromagnetics,fdtd,fdfd,mode-solver,photonics,waveguide
Author: Quentin Wach
Maintainer: Quentin Wach
License-Expression: Apache-2.0
Requires-Python: >=3.10, <3.14
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Changelog, https://github.com/QuentinWach/micromode/blob/main/CHANGELOG.md
Project-URL: Homepage, https://github.com/QuentinWach/micromode
Project-URL: Issues, https://github.com/QuentinWach/micromode/issues
Project-URL: Repository, https://github.com/QuentinWach/micromode

# micromode

A minimal FDFD electromagnetic mode solver for rasterized waveguide cross sections with a Rust core made to be a standard plugin for FDTD engines.

[![License](https://img.shields.io/github/license/QuentinWach/micromode)](LICENSE)
[![Tests](https://img.shields.io/github/actions/workflow/status/QuentinWach/micromode/tests.yml?branch=main&label=tests)](https://github.com/QuentinWach/micromode/actions/workflows/tests.yml)
![Coverage](https://img.shields.io/badge/coverage-87%25-brightgreen)

```bash
pip install micromode
```


## Why Use It?

- Grid-first API: pass arrays directly, with no required geometry model.
- Rust sparse backend: one production solve path.
- Practical outputs: fields, `n_eff`, `k_eff`, mode area, polarization fractions,
  Lorentz overlaps, plotting, dataframe export, and HDF5 save/load.
- Tensor-aware: supports scalar, diagonal anisotropic, and full tensor material
  grids.
- Works for both 2D cross sections and 1D slices.

You give it a material grid. It returns guided modes: effective indices, six-component fields, polarization metrics, mode area, overlaps, diagnostics, plots, and HDF5 output. MicroMode is intentionally not a CAD or geometry package. It is the solver piece you use after geometry has already been rasterized onto a mode-plane grid.


## Quick Start

```python
import micromode as mm

wavelength_um = 1.55
freq = mm.C_0 / wavelength_um

# Arrays from your own rasterizer.
eps_xx, x_edges, y_edges = mode_plane_arrays(...)

materials = mm.Materials.from_diagonal(
    eps_xx=eps_xx,
    x_edges=x_edges,
    y_edges=y_edges,
)

data = mm.solve_modes(
    material_grid=materials,
    freqs=[freq],
    num_modes=2,
    target_neff=2.5,
)

print(data.n_eff.values)
data.plot_field("Ex", mode_index=0)
data.to_hdf5("modes.h5")
```

