Metadata-Version: 2.4
Name: tidy3d
Version: 2.11.2
Summary: A fast FDTD solver
Project-URL: Homepage, https://github.com/flexcompute/tidy3d
Project-URL: Repository, https://github.com/flexcompute/tidy3d
Project-URL: Documentation, https://docs.flexcompute.com/projects/tidy3d/en/latest/
Project-URL: Bug Tracker, https://github.com/flexcompute/tidy3d/issues
Author-email: Tyler Hughes <tyler@flexcompute.com>
License: LGPLv2+
License-File: LICENSE
Classifier: License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)
Classifier: Operating System :: OS Independent
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 :: Python :: 3.14
Requires-Python: <3.15,>=3.10
Requires-Dist: autograd<2.0.0,>=1.7.0
Requires-Dist: boto3<2.0.0,>=1.28.0
Requires-Dist: click<9.0.0,>=8.1.0
Requires-Dist: dask<2027.0.0,>=2025.12.0
Requires-Dist: filelock<4.0.0,>=3.20.1
Requires-Dist: h5netcdf<2.0.0,>=1.0.2
Requires-Dist: h5py<3.17,>=3.0.0; python_version < '3.14'
Requires-Dist: h5py<3.17,>=3.16.0; python_version >= '3.14'
Requires-Dist: importlib-metadata<10.0.0,>=6.0.0
Requires-Dist: joblib<2.0.0,>=1.5.3
Requires-Dist: matplotlib<4.0.0,>=3.10.0
Requires-Dist: numpy<2.5.0,>=2.2.6
Requires-Dist: pandas<4.0,>=2.2
Requires-Dist: pydantic-settings<3.0.0,>=2.10.0
Requires-Dist: pydantic<3,>=2.10.3
Requires-Dist: pyjwt<3.0.0,>=2.10.1
Requires-Dist: pyroots<0.6.0,>=0.5.0
Requires-Dist: pyyaml<7.0.0,>=6.0.3
Requires-Dist: requests<3.0.0,>=2.31.0
Requires-Dist: responses<0.27.0,>=0.25.8
Requires-Dist: rich<15.0,>=13.0
Requires-Dist: scipy<2.0,>=1.14
Requires-Dist: shapely<3.0,>=2.0
Requires-Dist: toml<0.11.0,>=0.10.2
Requires-Dist: tomlkit<0.15.0,>=0.13.2
Requires-Dist: typing-extensions<5.0.0,>=4.15.0
Requires-Dist: xarray<2026.5.0,>=2023.08
Provides-Extra: design
Requires-Dist: bayesian-optimization<4.0.0,>=2.0.0; extra == 'design'
Requires-Dist: pygad==3.3.1; extra == 'design'
Requires-Dist: pyswarms<2.0.0,>=1.3.0; extra == 'design'
Provides-Extra: dev
Requires-Dist: bayesian-optimization<4.0.0,>=2.0.0; extra == 'dev'
Requires-Dist: cma<5.0.0,>=4.4.1; extra == 'dev'
Requires-Dist: coverage<8.0.0,>=7.13.1; extra == 'dev'
Requires-Dist: diff-cover<11.0.0,>=10.1.0; extra == 'dev'
Requires-Dist: dill<0.5.0,>=0.4.0; extra == 'dev'
Requires-Dist: gdstk<1.1,>=0.9.49; extra == 'dev'
Requires-Dist: grcwa<0.2.0,>=0.1.2; extra == 'dev'
Requires-Dist: ipython<9.0.0,>=8.38.0; extra == 'dev'
Requires-Dist: jinja2<4.0.0,>=3.1.2; extra == 'dev'
Requires-Dist: jupyter<2.0.0,>=1.1.1; extra == 'dev'
Requires-Dist: libcst<2.0.0,>=1.5.0; extra == 'dev'
Requires-Dist: memory-profiler<0.62.0,>=0.61.0; extra == 'dev'
Requires-Dist: mypy==1.13.0; extra == 'dev'
Requires-Dist: myst-parser<5.0.0,>=4.0.1; extra == 'dev'
Requires-Dist: nbconvert<8.0.0,>=7.17.0; extra == 'dev'
Requires-Dist: nbdime<5.0.0,>=4.0.2; extra == 'dev'
Requires-Dist: nbsphinx<0.10.0,>=0.8.7; extra == 'dev'
Requires-Dist: nest-asyncio<2.0.0,>=1.6.0; extra == 'dev'
Requires-Dist: networkx<3.0.0,>=2.6.3; extra == 'dev'
Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == 'dev'
Requires-Dist: optax<0.3.0,>=0.2.2; extra == 'dev'
Requires-Dist: orbax-checkpoint<0.11.33; extra == 'dev'
Requires-Dist: pre-commit<5,>=4; extra == 'dev'
Requires-Dist: psutil<8.0.0,>=7.2.1; extra == 'dev'
Requires-Dist: pydata-sphinx-theme<0.16.0,>=0.13.3; extra == 'dev'
Requires-Dist: pygad==3.3.1; extra == 'dev'
Requires-Dist: pylint<5.0.0,>=4.0.4; extra == 'dev'
Requires-Dist: pyswarms<2.0.0,>=1.3.0; extra == 'dev'
Requires-Dist: pytest-cov<7.0.0,>=6.0.0; extra == 'dev'
Requires-Dist: pytest-env<2.0.0,>=1.1.5; extra == 'dev'
Requires-Dist: pytest-testmon<3.0.0,>=2.1.3; extra == 'dev'
Requires-Dist: pytest-timeout<3.0.0,>=2.4.0; extra == 'dev'
Requires-Dist: pytest-xdist<4.0.0,>=3.6.1; extra == 'dev'
Requires-Dist: pytest<10.0.0,>=8.1; extra == 'dev'
Requires-Dist: pyvista<0.48.0,>=0.45; extra == 'dev'
Requires-Dist: rtree==1.2.0; extra == 'dev'
Requires-Dist: ruff==0.14.1; extra == 'dev'
Requires-Dist: sax<0.12,>=0.11; extra == 'dev'
Requires-Dist: scikit-rf<2.0.0,>=1.9.0; extra == 'dev'
Requires-Dist: signac<3.0.0,>=2.3.0; extra == 'dev'
Requires-Dist: sphinx-book-theme<2.0.0,>=1.0.1; extra == 'dev'
Requires-Dist: sphinx-copybutton<0.6.0,>=0.5.2; extra == 'dev'
Requires-Dist: sphinx-design<0.7.0,>=0.6.1; extra == 'dev'
Requires-Dist: sphinx-favicon<2.0.0,>=1.0.1; extra == 'dev'
Requires-Dist: sphinx-notfound-page<2.0.0,>=1.1.0; extra == 'dev'
Requires-Dist: sphinx-sitemap<3.0.0,>=2.5.1; extra == 'dev'
Requires-Dist: sphinx-tabs<4.0.0,>=3.4.7; extra == 'dev'
Requires-Dist: sphinx<9.0.0,>=6; extra == 'dev'
Requires-Dist: sphinxemoji<0.4.0,>=0.3.2; extra == 'dev'
Requires-Dist: tmm<0.3.0,>=0.2.0; extra == 'dev'
Requires-Dist: torch<3.0.0,>=2.2.0; (sys_platform != 'darwin') and extra == 'dev'
Requires-Dist: torch<3.0.0,>=2.2.0; (sys_platform == 'darwin') and extra == 'dev'
Requires-Dist: towncrier<26.0.0,>=25.8.0; extra == 'dev'
Requires-Dist: tox<5.0.0,>=4.33.0; extra == 'dev'
Requires-Dist: trame-vtk<3.0.0,>=2.0.0; extra == 'dev'
Requires-Dist: trame-vuetify<3.0.0,>=2.0.0; extra == 'dev'
Requires-Dist: trame<4.0.0,>=3.0.0; extra == 'dev'
Requires-Dist: trimesh<5.0.0,>=4.6; extra == 'dev'
Requires-Dist: vtk<10.0.0,>=9.6.0; extra == 'dev'
Requires-Dist: zizmor<2.0.0,>=1.20.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: cma<5.0.0,>=4.4.1; extra == 'docs'
Requires-Dist: gdstk<1.1,>=0.9.49; extra == 'docs'
Requires-Dist: grcwa<0.2.0,>=0.1.2; extra == 'docs'
Requires-Dist: ipython<9.0.0,>=8.38.0; extra == 'docs'
Requires-Dist: jinja2<4.0.0,>=3.1.2; extra == 'docs'
Requires-Dist: jupyter<2.0.0,>=1.1.1; extra == 'docs'
Requires-Dist: myst-parser<5.0.0,>=4.0.1; extra == 'docs'
Requires-Dist: nbconvert<8.0.0,>=7.17.0; extra == 'docs'
Requires-Dist: nbdime<5.0.0,>=4.0.2; extra == 'docs'
Requires-Dist: nbsphinx<0.10.0,>=0.8.7; extra == 'docs'
Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == 'docs'
Requires-Dist: optax<0.3.0,>=0.2.2; extra == 'docs'
Requires-Dist: orbax-checkpoint<0.11.33; extra == 'docs'
Requires-Dist: pydata-sphinx-theme<0.16.0,>=0.13.3; extra == 'docs'
Requires-Dist: pylint<5.0.0,>=4.0.4; extra == 'docs'
Requires-Dist: sax<0.12,>=0.11; extra == 'docs'
Requires-Dist: signac<3.0.0,>=2.3.0; extra == 'docs'
Requires-Dist: sphinx-book-theme<2.0.0,>=1.0.1; extra == 'docs'
Requires-Dist: sphinx-copybutton<0.6.0,>=0.5.2; extra == 'docs'
Requires-Dist: sphinx-design<0.7.0,>=0.6.1; extra == 'docs'
Requires-Dist: sphinx-favicon<2.0.0,>=1.0.1; extra == 'docs'
Requires-Dist: sphinx-notfound-page<2.0.0,>=1.1.0; extra == 'docs'
Requires-Dist: sphinx-sitemap<3.0.0,>=2.5.1; extra == 'docs'
Requires-Dist: sphinx-tabs<4.0.0,>=3.4.7; extra == 'docs'
Requires-Dist: sphinx<9.0.0,>=6; extra == 'docs'
Requires-Dist: sphinxemoji<0.4.0,>=0.3.2; extra == 'docs'
Requires-Dist: tmm<0.3.0,>=0.2.0; extra == 'docs'
Provides-Extra: extras
Requires-Dist: tidy3d-extras==2.11.2; extra == 'extras'
Provides-Extra: gdstk
Requires-Dist: gdstk<1.1,>=0.9.49; extra == 'gdstk'
Provides-Extra: heatcharge
Requires-Dist: networkx<3.0.0,>=2.6.3; extra == 'heatcharge'
Requires-Dist: rtree==1.2.0; extra == 'heatcharge'
Requires-Dist: trimesh<5.0.0,>=4.6; extra == 'heatcharge'
Requires-Dist: vtk<10.0.0,>=9.6.0; extra == 'heatcharge'
Provides-Extra: pytorch
Requires-Dist: torch<3.0.0,>=2.2.0; (sys_platform != 'darwin') and extra == 'pytorch'
Requires-Dist: torch<3.0.0,>=2.2.0; (sys_platform == 'darwin') and extra == 'pytorch'
Provides-Extra: pyvista
Requires-Dist: nest-asyncio<2.0.0,>=1.6.0; extra == 'pyvista'
Requires-Dist: pyvista<0.48.0,>=0.45; extra == 'pyvista'
Requires-Dist: trame-vtk<3.0.0,>=2.0.0; extra == 'pyvista'
Requires-Dist: trame-vuetify<3.0.0,>=2.0.0; extra == 'pyvista'
Requires-Dist: trame<4.0.0,>=3.0.0; extra == 'pyvista'
Requires-Dist: vtk<10.0.0,>=9.6.0; extra == 'pyvista'
Provides-Extra: ruff
Requires-Dist: ruff==0.14.1; extra == 'ruff'
Provides-Extra: scikit-rf
Requires-Dist: scikit-rf<2.0.0,>=1.9.0; extra == 'scikit-rf'
Provides-Extra: tests
Requires-Dist: networkx<3.0.0,>=2.6.3; extra == 'tests'
Requires-Dist: orbax-checkpoint<0.11.33; extra == 'tests'
Requires-Dist: pre-commit<5,>=4; extra == 'tests'
Requires-Dist: psutil<8.0.0,>=7.2.1; extra == 'tests'
Requires-Dist: pylint<5.0.0,>=4.0.4; extra == 'tests'
Requires-Dist: pytest-cov<7.0.0,>=6.0.0; extra == 'tests'
Requires-Dist: pytest-env<2.0.0,>=1.1.5; extra == 'tests'
Requires-Dist: pytest-testmon<3.0.0,>=2.1.3; extra == 'tests'
Requires-Dist: pytest-timeout<3.0.0,>=2.4.0; extra == 'tests'
Requires-Dist: pytest-xdist<4.0.0,>=3.6.1; extra == 'tests'
Requires-Dist: pytest<10.0.0,>=8.1; extra == 'tests'
Requires-Dist: rtree==1.2.0; extra == 'tests'
Requires-Dist: trimesh<5.0.0,>=4.6; extra == 'tests'
Provides-Extra: trimesh
Requires-Dist: networkx<3.0.0,>=2.6.3; extra == 'trimesh'
Requires-Dist: rtree==1.2.0; extra == 'trimesh'
Requires-Dist: trimesh<5.0.0,>=4.6; extra == 'trimesh'
Provides-Extra: vtk
Requires-Dist: vtk<10.0.0,>=9.6.0; extra == 'vtk'
Description-Content-Type: text/markdown

# Tidy3D
[![PyPI
Name](https://img.shields.io/badge/pypi-tidy3d-blue?style=for-the-badge)](https://pypi.python.org/pypi/tidy3d)
[![PyPI version shields.io](https://img.shields.io/pypi/v/tidy3d.svg?style=for-the-badge)](https://pypi.python.org/pypi/tidy3d/)
[![Documentation](https://img.shields.io/badge/docs-flexcompute-00643C?style=for-the-badge)](https://docs.flexcompute.com/projects/tidy3d/en/latest/)
[![Tests](https://img.shields.io/github/actions/workflow/status/flexcompute/tidy3d/tidy3d-python-client-tests.yml?branch=develop&style=for-the-badge)](https://github.com/flexcompute/tidy3d/actions/workflows/tidy3d-python-client-tests.yml)
[![License: LGPL-2.1](https://img.shields.io/badge/license-LGPL--2.1-blue?style=for-the-badge)](LICENSE)
[![Ruff](https://img.shields.io/badge/code%20style-ruff-5A4FCF?style=for-the-badge)](https://github.com/astral-sh/ruff)
![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/daquinteroflex/4702549574741e87deaadba436218ebd/raw/tidy3d_extension.json)

[![Notebooks](https://img.shields.io/badge/Demo-Live%20notebooks-8A2BE2?style=for-the-badge)](https://github.com/flexcompute/tidy3d-notebooks)

![](https://raw.githubusercontent.com/flexcompute/tidy3d/main/img/Tidy3D-logo.svg)

Tidy3D is a software package for solving extremely large electrodynamics problems using the finite-difference time-domain (FDTD) method. It can be controlled through either an [open source python package](https://github.com/flexcompute/tidy3d) or a [web-based graphical user interface](https://tidy3d.simulation.cloud).

This repository contains the python API to allow you to:


* Programmatically define FDTD simulations.
* Submit and manage simulations running on Flexcompute's servers.
* Download and postprocess the results from the simulations.

![](https://raw.githubusercontent.com/flexcompute/tidy3d/main/img/snippet.png)

## Installation

### Signing up for tidy3d

Note that while this front end package is open source, to run simulations on Flexcompute servers requires an account with credits.
You can sign up for an account [here](https://tidy3d.simulation.cloud/signup).
After that, you can install the front end with the instructions below, or visit [this page](https://docs.flexcompute.com/projects/tidy3d/en/latest/install.html) in our documentation for more details.

### Quickstart Installation

To install the Tidy3D Python API locally, the following instructions should work for most users.

```
pip install --user tidy3d
tidy3d configure --apikey=XXX
```

Where `XXX` is your API key, which can be copied from your [account page](https://tidy3d.simulation.cloud/account) in the web interface.

In a hosted jupyter notebook environment (eg google  colab), it may be more convenient to install and configure via the following lines at the top of the notebook.

```
!pip install tidy3d
import tidy3d.web as web
web.configure("XXX")
```

**Advanced installation instructions for all platforms is available in the [documentation installation guides](https://docs.flexcompute.com/projects/tidy3d/en/latest/install.html).**

### Authentication Verification

To test the authentication, you may try importing the web interface via.

```
python -c "import tidy3d; tidy3d.web.test()"
```

It should pass without any errors if the API key is set up correctly.

To get started, our documentation has a lot of [examples](https://docs.flexcompute.com/projects/tidy3d/en/latest/notebooks/docs/index.html) for inspiration.

## Common Documentation References

| API Resource       | URL                                                                              |
|--------------------|----------------------------------------------------------------------------------|
| Installation Guide | https://docs.flexcompute.com/projects/tidy3d/en/latest/install.html              |
| Documentation      | https://docs.flexcompute.com/projects/tidy3d/en/latest/index.html                |
| Example Library    | https://docs.flexcompute.com/projects/tidy3d/en/latest/notebooks/docs/index.html |
| FAQ                | https://docs.flexcompute.com/projects/tidy3d/en/latest/faq/docs/index.html       |


## FlexAgent MCP

FlexAgent adds an AI-assisted layer on top of Tidy3D via the Model Context Protocol (MCP); read more about [AI-assisted simulation in Tidy3D](https://hs.flexcompute.com/news/ai-assisted-simulation-in-tidy3d-ushering-in-a-new-era-of-photonic-design). Install `tidy3d-mcp` directly when you want that experience outside the Tidy3D extensions for [Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=Flexcompute.tidy3d) and [Cursor](https://open-vsx.org/extension/Flexcompute/tidy3d). This repo also ships native plugin packaging for Claude Code and Gemini CLI.

These commands assume [uv](https://docs.astral.sh/uv/getting-started/installation/) is installed on your machine.

**Codex CLI / IDE**

```bash
codex mcp add tidy3d -- uvx tidy3d-mcp
```

**Claude Code**

Add the Tidy3D marketplace, then install the plugin:

```bash
claude plugin marketplace add https://github.com/flexcompute/tidy3d
claude plugin install tidy3d@tidy3d
```

**Gemini CLI**

Install the extension from this repo:

```bash
gemini extensions install https://github.com/flexcompute/tidy3d
```

**Cursor CLI / IDE**

Cursor reuses the same schema across the editor and `cursor-agent`. Configure `.cursor/mcp.json` (per-project) or `~/.cursor/mcp.json` (global) and then run `cursor-agent mcp list` to verify:

```json
{
  "mcpServers": {
    "tidy3d": {
      "command": "uvx",
      "args": ["tidy3d-mcp"]
    }
  }
}
```


## Related Source Repositories

| Name              | Repository                                      |
|-------------------|-------------------------------------------------|
| Source Code       | https://github.com/flexcompute/tidy3d           |
| Notebooks Source  | https://github.com/flexcompute/tidy3d-notebooks |
| FAQ Source Code   | https://github.com/flexcompute/tidy3d-faq       |


## Issues / Feedback / Bug Reporting

Your feedback helps us immensely!

If you find bugs, file an [Issue](https://github.com/flexcompute/tidy3d/issues).
For more general discussions, questions, comments, anything else, open a topic in the [Discussions Tab](https://github.com/flexcompute/tidy3d/discussions).

## License

[GNU LGPL](https://github.com/flexcompute/tidy3d/blob/main/LICENSE)
