# dongjin-seo2020/adjointdiffusion architecture

> Architecture diagram of the GitHub repository dongjin-seo2020/adjointdiffusion, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dongjin-seo2020/adjointdiffusion
- Repository: https://github.com/dongjin-seo2020/adjointdiffusion

## Overview

AdjointDiffusion generates fabrication-aware structures with diffusion models, then guides reverse sampling using electromagnetic simulation and adjoint gradients. The documented workflow runs from dataset generation through model training to sampling and optimization; baseline optimizers provide comparison methods. The graph includes the central diffusion, training, simulation, and baseline modules. Some connections are based on the README or SOURCE INDEX because their implementation files were not excerpted; uncertain wiring is omitted.

Main entry points: [`image_sample.py`](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/image_sample.py) (Sampling entry), [`image_train.py`](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/image_train.py) (Training entry), [`guided_diffusion/train_util.py`](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/train_util.py) (Training loop), [`guided_diffusion/script_util.py`](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/script_util.py) (Model factory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Design workflow"]
  node_dataset_gen["Dataset generation"]
  node_fabrication_data[("Fabrication data")]
  node_sample_cli["Sampling entry<br/>[image_sample.py]"]
  node_adjoint_sim["Adjoint simulation<br/>[simulation.py]"]
  node_standalone_sim["Simulation module<br/>[simulation.py]"]
end

subgraph group_diffusion["Diffusion model"]
  node_model_factory["Model factory<br/>[script_util.py]"]
  node_unet["UNet model<br/>[unet.py]"]
  node_diffusion_process["Diffusion process"]
  node_timestep_spacing["Timestep spacing<br/>[respace.py]"]
  node_losses["Diffusion losses<br/>[losses.py]"]
  node_nn_util["Network utilities<br/>[nn.py]"]
end

subgraph group_runtime["Training runtime"]
  node_train_cli["Training entry<br/>[image_train.py]"]
  node_data_loader["Image loader<br/>[image_datasets.py]"]
  node_schedule_sampler["Schedule sampler<br/>[resample.py]"]
  node_train_loop["Training loop<br/>[train_util.py]"]
  node_mixed_precision["Mixed precision<br/>[fp16_util.py]"]
  node_distributed["Distributed utilities<br/>[dist_util.py]"]
  node_logger["Experiment logger<br/>[logger.py]"]
end

subgraph group_baselines["Baseline optimization"]
  node_ga_cis["GA CIS baseline"]
  node_ga_waveguide["GA waveguide baseline"]
  node_nlopt_cis["NLopt CIS baseline"]
  node_nlopt_waveguide["NLopt waveguide baseline"]
end

node_designer(("Researcher"))
node_wandb["Weights &amp; Biases"]

node_designer -->|"generates"| node_dataset_gen
node_dataset_gen -->|"writes structures"| node_fabrication_data
node_designer -->|"starts training"| node_train_cli
node_fabrication_data -->|"loads images"| node_data_loader
node_train_cli -->|"loads data"| node_data_loader
node_train_cli -->|"creates model"| node_model_factory
node_train_cli -->|"creates sampler"| node_schedule_sampler
node_train_cli -->|"starts loop"| node_train_loop
node_model_factory -->|"constructs"| node_unet
node_model_factory -->|"constructs"| node_diffusion_process
node_model_factory -->|"uses spacing"| node_timestep_spacing
node_diffusion_process -->|"requests gradients"| node_adjoint_sim
node_train_loop -->|"computes training loss"| node_diffusion_process
node_train_loop -->|"trains parameters"| node_mixed_precision
node_train_loop -->|"synchronizes ranks"| node_distributed
node_train_loop -->|"logs progress"| node_logger
node_schedule_sampler -->|"samples timesteps"| node_diffusion_process
node_unet -->|"uses utilities"| node_nn_util
node_designer -->|"starts sampling"| node_sample_cli
node_sample_cli -->|"creates model"| node_model_factory
node_sample_cli -->|"samples designs"| node_diffusion_process
node_sample_cli -.->|"configures simulation"| node_adjoint_sim
node_sample_cli -->|"logs outputs"| node_logger
node_adjoint_sim -->|"tracks experiments"| node_wandb
node_designer -->|"runs baseline"| node_ga_cis
node_designer -->|"runs baseline"| node_ga_waveguide
node_designer -->|"runs baseline"| node_nlopt_cis
node_designer -->|"runs baseline"| node_nlopt_waveguide

click node_dataset_gen "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/dataset_generation.py"
click node_train_cli "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/image_train.py"
click node_sample_cli "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/image_sample.py"
click node_data_loader "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/image_datasets.py"
click node_model_factory "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/script_util.py"
click node_unet "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/unet.py"
click node_diffusion_process "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/gaussian_diffusion.py"
click node_timestep_spacing "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/respace.py"
click node_losses "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/losses.py"
click node_nn_util "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/nn.py"
click node_schedule_sampler "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/resample.py"
click node_train_loop "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/train_util.py"
click node_mixed_precision "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/fp16_util.py"
click node_distributed "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/dist_util.py"
click node_logger "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/logger.py"
click node_adjoint_sim "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/simulation.py"
click node_standalone_sim "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/simulation.py"
click node_ga_cis "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/baseline_algorithms/%5Badjoint_optimization%5D%20GA_CIS.py"
click node_ga_waveguide "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/baseline_algorithms/%5Badjoint_optimization%5D%20GA_waveguide.py"
click node_nlopt_cis "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/baseline_algorithms/%5Badjoint_optimization%5D%20nlopt_CIS.py"
click node_nlopt_waveguide "https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/baseline_algorithms/%5Badjoint_optimization%5D%20nlopt_waveguide.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dataset_gen,node_fabrication_data,node_sample_cli,node_adjoint_sim,node_standalone_sim toneBlue
class node_model_factory,node_unet,node_diffusion_process,node_timestep_spacing,node_losses,node_nn_util toneAmber
class node_train_cli,node_data_loader,node_schedule_sampler,node_train_loop,node_mixed_precision,node_distributed,node_logger toneMint
class node_ga_cis,node_ga_waveguide,node_nlopt_cis,node_nlopt_waveguide toneRose
class node_designer,node_wandb toneIndigo
```

## Components

### Design workflow

- [Dataset generation](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/dataset_generation.py): `dataset_generation.py`
- **Fabrication data**
- [Sampling entry](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/image_sample.py): `image_sample.py`
- [Adjoint simulation](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/simulation.py): `guided_diffusion/simulation.py`
- [Simulation module](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/simulation.py): `simulation.py`

### Diffusion model

- [Model factory](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/script_util.py): `guided_diffusion/script_util.py`
- [UNet model](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/unet.py): `guided_diffusion/unet.py`
- [Diffusion process](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/gaussian_diffusion.py): `guided_diffusion/gaussian_diffusion.py`
- [Timestep spacing](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/respace.py): `guided_diffusion/respace.py`
- [Diffusion losses](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/losses.py): `guided_diffusion/losses.py`
- [Network utilities](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/nn.py): `guided_diffusion/nn.py`

### Training runtime

- [Training entry](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/image_train.py): `image_train.py`
- [Image loader](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/image_datasets.py): `guided_diffusion/image_datasets.py`
- [Schedule sampler](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/resample.py): `guided_diffusion/resample.py`
- [Training loop](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/train_util.py): `guided_diffusion/train_util.py`
- [Mixed precision](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/fp16_util.py): `guided_diffusion/fp16_util.py`
- [Distributed utilities](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/dist_util.py): `guided_diffusion/dist_util.py`
- [Experiment logger](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/guided_diffusion/logger.py): `guided_diffusion/logger.py`

### Baseline optimization

- [GA CIS baseline](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/baseline_algorithms/%5Badjoint_optimization%5D%20GA_CIS.py): `baseline_algorithms/[adjoint_optimization] GA_CIS.py`
- [GA waveguide baseline](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/baseline_algorithms/%5Badjoint_optimization%5D%20GA_waveguide.py): `baseline_algorithms/[adjoint_optimization] GA_waveguide.py`
- [NLopt CIS baseline](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/baseline_algorithms/%5Badjoint_optimization%5D%20nlopt_CIS.py): `baseline_algorithms/[adjoint_optimization] nlopt_CIS.py`
- [NLopt waveguide baseline](https://github.com/dongjin-seo2020/adjointdiffusion/blob/main/baseline_algorithms/%5Badjoint_optimization%5D%20nlopt_waveguide.py): `baseline_algorithms/[adjoint_optimization] nlopt_waveguide.py`

### Other components

- **Researcher**
- **Weights & Biases**

## Connections

- Researcher → Dataset generation: generates (evidence: `README.md`)
- Dataset generation → Fabrication data: writes structures (evidence: `README.md`)
- Researcher → Training entry: starts training (evidence: `README.md`)
- Fabrication data → Image loader: loads images
- Training entry → Image loader: loads data (evidence: `image_train.py`)
- Training entry → Model factory: creates model (evidence: `image_train.py`)
- Training entry → Schedule sampler: creates sampler (evidence: `image_train.py`)
- Training entry → Training loop: starts loop (evidence: `image_train.py`)
- Model factory → UNet model: constructs (evidence: `guided_diffusion/script_util.py`)
- Model factory → Diffusion process: constructs (evidence: `guided_diffusion/script_util.py`)
- Model factory → Timestep spacing: uses spacing (evidence: `guided_diffusion/script_util.py`)
- Diffusion process → Adjoint simulation: requests gradients (evidence: `guided_diffusion/gaussian_diffusion.py`)
- Training loop → Diffusion process: computes training loss (evidence: `guided_diffusion/train_util.py`)
- Training loop → Mixed precision: trains parameters (evidence: `guided_diffusion/train_util.py`)
- Training loop → Distributed utilities: synchronizes ranks (evidence: `guided_diffusion/train_util.py`)
- Training loop → Experiment logger: logs progress (evidence: `guided_diffusion/train_util.py`)
- Schedule sampler → Diffusion process: samples timesteps (evidence: `guided_diffusion/resample.py`)
- UNet model → Network utilities: uses utilities (evidence: `guided_diffusion/unet.py`)
- Researcher → Sampling entry: starts sampling (evidence: `README.md`)
- Sampling entry → Model factory: creates model (evidence: `image_sample.py`)
- Sampling entry → Diffusion process: samples designs (evidence: `README.md`)
- Sampling entry → Adjoint simulation: configures simulation
- Sampling entry → Experiment logger: logs outputs (evidence: `image_sample.py`)
- Adjoint simulation → Weights & Biases: tracks experiments (evidence: `README.md`)
- Researcher → GA CIS baseline: runs baseline (evidence: `README.md`)
- Researcher → GA waveguide baseline: runs baseline (evidence: `README.md`)
- Researcher → NLopt CIS baseline: runs baseline (evidence: `README.md`)
- Researcher → NLopt waveguide baseline: runs baseline (evidence: `README.md`)
