This is a selected list of the open source projects I have developed or contributed to as part of my research. See my GitHub profile for a more detailed list.

The asterisk (*) on author names in publication entries indicates equal contribution to the work.


This package provides recurrent neural network (RNN) modules for computing time-domain solutions and gradients of the wave equation with pytorch. This library is the basis for our analog machine learning paper [1].

  1. Wave Physics as an Analog Recurrent Neural Network
    Tyler W. Hughes*, Ian A. D. Williamson*, Momchil Minkov, Shanhui Fan
    arXiv:1904.12831 [physics]
    April 2019

GitHub Repository


This is a package developed primarily by Tyler Hughes based on our code and learnings from angler and fdfdpy. Ceviche is designed to use the flexible automatic differentiation (AD) capabilities of the HIPS autograd package. This design choice carries over into optimizing photonic devices because AD simplifies the process of constructing objective / loss functions and taking gradients of several simulations simultaneously. Having a fully differentiable optical simulation framework also facilitates the integration of inverse design and machine learning models.

This code is the basis for the results presented in our forward mode differentiation paper [1].

  1. Forward-Mode Differentiation of Maxwell’s Equations
    Tyler W Hughes, Ian A.D. Williamson, Momchil Minkov, Shanhui Fan
    ACS Photonics
    October 2019

GitHub Repository


Simulation of optical neural networks (ONNs) based on on-chip interferometer meshes and electro-optic nonlinear activation functions; based on Tensor Flow and Python. This framework was used for the simulations in our ONN activation function paper [1] and our parallel nullificaiton paper [2].

  1. Reprogrammable Electro-Optic Nonlinear Activation Functions for Optical Neural Networks
    Ian A. D. Williamson, Tyler W. Hughes, Momchil Minkov, Ben Bartlett, Sunil Pai, Shanhui Fan
    IEEE Journal of Selected Topics in Quantum Electronics, vol. 26, num. 1, pp. 1-12
    January 2020
  2. Parallel Fault-Tolerant Programming of an Arbitrary Feedforward Photonic Network
    Sunil Pai, Ian A. D. Williamson, Tyler W. Hughes, Momchil Minkov, Olav Solgaard, Shanhui Fan, David A. B. Miller
    arXiv:1909.06179 [physics]
    September 2019

GitHub Repository Notebooks


This is a pure Julia package for solving Maxwell’s equations with the finite difference frequency domain (FDFD) method, with support for dynamic modulation and eigenmode analysis.

GitHub Repository


Python-based library for simulating and optimizing linear and nonlinear optical devices, as demonstrated in our paper [1]. The underlying algorithms are the finite difference frequency domain (FDFD) method and adjoint variable method (AVM). The underlying FDFD code is based on fdfdpy.

  1. Adjoint Method and Inverse Design for Nonlinear Nanophotonic Devices
    Tyler W. Hughes*, Momchil Minkov*, Ian A. D. Williamson, Shanhui Fan
    ACS Photonics, vol. 5, num. 12, pp. 4781-4787
    December 2018

GitHub Repository


Python-based library for solving Maxwell’s equations with the finite difference frequency domain (FDFD) method. Most of this code was later used as the basis for angler.

GitHub Repository