Skip to content
🦐 Electromagnetic Simulation + Automatic Differentiation
Python Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

ceviche Build Status

Electromagnetic Simulation Tools + Automatic Differentiation. Code for the paper: Forward-Mode Differentiation of Maxwell's Equations (arxiv preprint).


(logo by @ngilmer)

What is ceviche?

ceviche provides two core electromagnetic simulation tools for solving Maxwell's equations:

  • finite-difference frequency-domain (FDFD)

  • finite-difference time-domain (FDTD)

Both are written in numpy / scipy and are compatible with the HIPS autograd package, supporting forward-mode and reverse-mode automatic differentiation.

This allows you to write code to solve your E&M problem, and then use automatic differentiation on your results.

As a result, you can do gradient-based optimization, sensitivity analysis, or plug your E&M solver into a machine learning model without the tedius process of deriving your derivatives analytically.


There are many ways to install ceviche.

The easiest is by

pip install ceviche

But to install from a local copy, one can instead do

git clone
pip install -e ceviche
pip install -r ceviche/requirements.txt

Alternatively, just download it:

git clone

and then import the package from within your python script

import sys

Package Structure


The ceviche directory contains everything needed.

To get the FDFD and FDTD simulators, import directly from ceviche import fdtd, fdfd_ez, fdfd_hz, fdfd_ez_nl

To get the differentiation, import from ceviche import jacobian. contains some constants EPSILON_0, C_0, ETA_0, Q_E, which are needed throughout the package contains a few useful functions for plotting, autogradding, and various other things.


There are many demos in the examples directory, which will give you a good sense of how to use the package. There is also workshop material consiting of a series of notebooks available in a separate repository.


Tests are located in tests. To run, cd into tests and

python -m unittest

to run all or


to run a specific one. Some of these tests involve visual inspection of the field plots rather than error checking on values.

To run all of the gradient checking functions, run

bash tests/


If you use this for your research or work, please cite

  title={Forward-mode Differentiation of Maxwell's Equations},
  author={Hughes, Tyler W and Williamson, Ian AD and Minkov, Momchil and Fan, Shanhui},
  journal={ACS Photonics},
  publisher={ACS Publications}
You can’t perform that action at this time.