# sunoh-kim/mac architecture

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

- Interactive diagram: https://gitdiagram.com/sunoh-kim/mac
- Repository: https://github.com/sunoh-kim/mac

## Overview

This repository implements MAC, a tuning-free test-time defense for CLIP. Its documented workflow evaluates adversarially corrupted images, creates multiple augmented views, applies corruption-aware counterattacks, and aggregates predictions. The graph includes the MAC evaluation code, dataset/model support, and the bundled AutoAttack subsystem. Some relationships rely on the SOURCE INDEX or README; unsampled implementation details are not inferred.

Main entry points: [`code/utils.py`](https://github.com/sunoh-kim/mac/blob/main/code/utils.py) (Evaluation utilities), [`code/mac.py`](https://github.com/sunoh-kim/mac/blob/main/code/mac.py) (MAC evaluation), [`autoattack/autoattack.py`](https://github.com/sunoh-kim/mac/blob/main/autoattack/autoattack.py) (AutoAttack runner), [`autoattack/autopgd_base.py`](https://github.com/sunoh-kim/mac/blob/main/autoattack/autopgd_base.py) (Auto-PGD)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mac["MAC defense"]
  node_evaluator["MAC evaluation<br/>[mac.py]"]
  node_mac_utils["Evaluation utilities<br/>[utils.py]"]
end

subgraph group_data["Data and prompts"]
  node_augmenter["View augmentation<br/>[datautils.py]"]
  node_dataset_classes["Dataset classes"]
  node_caltech["Caltech datasets<br/>[caltech.py]"]
  node_country211["Country211 dataset<br/>[country211.py]"]
  node_dtd["DTD dataset<br/>[dtd.py]"]
  node_eurosat["EuroSAT dataset<br/>[eurosat.py]"]
  node_aircraft["Aircraft dataset<br/>[fgvc_aircraft.py]"]
  node_food101["Food101 dataset<br/>[food101.py]"]
  node_imagenet_variants["ImageNet variants"]
  node_imagenet_prompts["ImageNet prompts<br/>[imagnet_prompts.py]"]
end

subgraph group_clip["CLIP models"]
  node_clip_loader["CLIP loader<br/>[clip.py]"]
  node_clip_model["CLIP architecture<br/>[model.py]"]
  node_prompters["Prompt modules<br/>[prompters.py]"]
end

subgraph group_attacks["Attack methods"]
  node_attack_dispatch["Attack selection<br/>[attacks.py]"]
  node_attack_helpers["Attack helpers<br/>[func.py]"]
end

subgraph group_autoattack["AutoAttack"]
  node_autoattack["AutoAttack runner<br/>[autoattack.py]"]
  node_apgd["Auto-PGD<br/>[autopgd_base.py]"]
  node_fab["FAB attack<br/>[fab_base.py]"]
  node_square["Square attack<br/>[square.py]"]
  node_checks["Attack checks<br/>[checks.py]"]
  node_attack_utils["Attack utilities<br/>[other_utils.py]"]
end

node_user(("Evaluation user"))
node_datasets[("Prepared datasets")]
node_results["Evaluation results"]

node_user -->|"runs evaluation"| node_evaluator
node_evaluator -->|"uses attacks"| node_attack_dispatch
node_evaluator -->|"loads CLIP"| node_clip_loader
node_evaluator -->|"uses prompts"| node_prompters
node_evaluator -->|"uses utilities"| node_mac_utils
node_evaluator -->|"uses helpers"| node_attack_helpers
node_evaluator -.->|"uses augmentation"| node_augmenter
node_evaluator -->|"saves results"| node_results
node_datasets -.->|"supplies inputs"| node_mac_utils
node_mac_utils -->|"builds datasets"| node_augmenter
node_mac_utils -->|"uses class maps"| node_imagenet_variants
node_mac_utils -->|"uses prompts"| node_imagenet_prompts
node_mac_utils -->|"loads dataset"| node_caltech
node_mac_utils -->|"loads dataset"| node_country211
node_mac_utils -->|"loads dataset"| node_dtd
node_mac_utils -->|"loads dataset"| node_eurosat
node_mac_utils -->|"loads dataset"| node_aircraft
node_mac_utils -->|"loads dataset"| node_food101
node_mac_utils -->|"imports datasets"| node_dataset_classes
node_dataset_classes -.->|"defines dataset"| node_caltech
node_clip_loader -->|"builds model"| node_clip_model
node_attack_dispatch -->|"invokes runner"| node_autoattack
node_autoattack -->|"dispatches attack"| node_apgd
node_autoattack -->|"dispatches attack"| node_fab
node_autoattack -->|"dispatches attack"| node_square
node_autoattack -->|"uses checks"| node_checks
node_autoattack -->|"uses utilities"| node_attack_utils
node_apgd -->|"checks gradients"| node_checks
node_apgd -->|"uses utilities"| node_attack_utils
node_fab -.->|"uses utilities"| node_attack_utils
node_square -.->|"references attack"| node_apgd

click node_evaluator "https://github.com/sunoh-kim/mac/blob/main/code/mac.py"
click node_mac_utils "https://github.com/sunoh-kim/mac/blob/main/code/utils.py"
click node_augmenter "https://github.com/sunoh-kim/mac/blob/main/data/datautils.py"
click node_dataset_classes "https://github.com/sunoh-kim/mac/tree/main/code/replace/datasets"
click node_caltech "https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/caltech.py"
click node_country211 "https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/country211.py"
click node_dtd "https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/dtd.py"
click node_eurosat "https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/eurosat.py"
click node_aircraft "https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/fgvc_aircraft.py"
click node_food101 "https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/food101.py"
click node_imagenet_variants "https://github.com/sunoh-kim/mac/blob/main/data/imagenet_variants.py"
click node_imagenet_prompts "https://github.com/sunoh-kim/mac/blob/main/data/imagnet_prompts.py"
click node_clip_loader "https://github.com/sunoh-kim/mac/blob/main/code/replace/clip.py"
click node_clip_model "https://github.com/sunoh-kim/mac/blob/main/code/replace/model.py"
click node_prompters "https://github.com/sunoh-kim/mac/blob/main/code/models/prompters.py"
click node_attack_dispatch "https://github.com/sunoh-kim/mac/blob/main/code/attacks.py"
click node_attack_helpers "https://github.com/sunoh-kim/mac/blob/main/code/func.py"
click node_autoattack "https://github.com/sunoh-kim/mac/blob/main/autoattack/autoattack.py"
click node_apgd "https://github.com/sunoh-kim/mac/blob/main/autoattack/autopgd_base.py"
click node_fab "https://github.com/sunoh-kim/mac/blob/main/autoattack/fab_base.py"
click node_square "https://github.com/sunoh-kim/mac/blob/main/autoattack/square.py"
click node_checks "https://github.com/sunoh-kim/mac/blob/main/autoattack/checks.py"
click node_attack_utils "https://github.com/sunoh-kim/mac/blob/main/autoattack/other_utils.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_evaluator,node_mac_utils,node_user toneBlue
class node_augmenter,node_dataset_classes,node_caltech,node_country211,node_dtd,node_eurosat,node_aircraft,node_food101,node_imagenet_variants,node_imagenet_prompts,node_datasets toneAmber
class node_clip_loader,node_clip_model,node_prompters toneMint
class node_attack_dispatch,node_attack_helpers toneRose
class node_autoattack,node_apgd,node_fab,node_square,node_checks,node_attack_utils,node_results toneIndigo
```

## Components

### MAC defense

- [MAC evaluation](https://github.com/sunoh-kim/mac/blob/main/code/mac.py): `code/mac.py`
- [Evaluation utilities](https://github.com/sunoh-kim/mac/blob/main/code/utils.py): `code/utils.py`

### Data and prompts

- [View augmentation](https://github.com/sunoh-kim/mac/blob/main/data/datautils.py): `data/datautils.py`
- [Dataset classes](https://github.com/sunoh-kim/mac/tree/main/code/replace/datasets): `code/replace/datasets`
- [Caltech datasets](https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/caltech.py): `code/replace/datasets/caltech.py`
- [Country211 dataset](https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/country211.py): `code/replace/datasets/country211.py`
- [DTD dataset](https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/dtd.py): `code/replace/datasets/dtd.py`
- [EuroSAT dataset](https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/eurosat.py): `code/replace/datasets/eurosat.py`
- [Aircraft dataset](https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/fgvc_aircraft.py): `code/replace/datasets/fgvc_aircraft.py`
- [Food101 dataset](https://github.com/sunoh-kim/mac/blob/main/code/replace/datasets/food101.py): `code/replace/datasets/food101.py`
- [ImageNet variants](https://github.com/sunoh-kim/mac/blob/main/data/imagenet_variants.py): `data/imagenet_variants.py`
- [ImageNet prompts](https://github.com/sunoh-kim/mac/blob/main/data/imagnet_prompts.py): `data/imagnet_prompts.py`

### CLIP models

- [CLIP loader](https://github.com/sunoh-kim/mac/blob/main/code/replace/clip.py): `code/replace/clip.py`
- [CLIP architecture](https://github.com/sunoh-kim/mac/blob/main/code/replace/model.py): `code/replace/model.py`
- [Prompt modules](https://github.com/sunoh-kim/mac/blob/main/code/models/prompters.py): `code/models/prompters.py`

### Attack methods

- [Attack selection](https://github.com/sunoh-kim/mac/blob/main/code/attacks.py): `code/attacks.py`
- [Attack helpers](https://github.com/sunoh-kim/mac/blob/main/code/func.py): `code/func.py`

### AutoAttack

- [AutoAttack runner](https://github.com/sunoh-kim/mac/blob/main/autoattack/autoattack.py): `autoattack/autoattack.py`
- [Auto-PGD](https://github.com/sunoh-kim/mac/blob/main/autoattack/autopgd_base.py): `autoattack/autopgd_base.py`
- [FAB attack](https://github.com/sunoh-kim/mac/blob/main/autoattack/fab_base.py): `autoattack/fab_base.py`
- [Square attack](https://github.com/sunoh-kim/mac/blob/main/autoattack/square.py): `autoattack/square.py`
- [Attack checks](https://github.com/sunoh-kim/mac/blob/main/autoattack/checks.py): `autoattack/checks.py`
- [Attack utilities](https://github.com/sunoh-kim/mac/blob/main/autoattack/other_utils.py): `autoattack/other_utils.py`

### Other components

- **Evaluation user**
- **Prepared datasets**
- **Evaluation results**

## Connections

- Evaluation user → MAC evaluation: runs evaluation
- MAC evaluation → Attack selection: uses attacks (evidence: `code/mac.py`)
- MAC evaluation → CLIP loader: loads CLIP (evidence: `code/mac.py`)
- MAC evaluation → Prompt modules: uses prompts (evidence: `code/mac.py`)
- MAC evaluation → Evaluation utilities: uses utilities (evidence: `code/mac.py`)
- MAC evaluation → Attack helpers: uses helpers (evidence: `code/mac.py`)
- MAC evaluation → View augmentation: uses augmentation
- MAC evaluation → Evaluation results: saves results
- Prepared datasets → Evaluation utilities: supplies inputs
- Evaluation utilities → View augmentation: builds datasets (evidence: `code/utils.py`)
- Evaluation utilities → ImageNet variants: uses class maps (evidence: `code/utils.py`)
- Evaluation utilities → ImageNet prompts: uses prompts (evidence: `code/utils.py`)
- Evaluation utilities → Caltech datasets: loads dataset (evidence: `code/utils.py`)
- Evaluation utilities → Country211 dataset: loads dataset (evidence: `code/utils.py`)
- Evaluation utilities → DTD dataset: loads dataset (evidence: `code/utils.py`)
- Evaluation utilities → EuroSAT dataset: loads dataset (evidence: `code/utils.py`)
- Evaluation utilities → Aircraft dataset: loads dataset (evidence: `code/utils.py`)
- Evaluation utilities → Food101 dataset: loads dataset (evidence: `code/utils.py`)
- Evaluation utilities → Dataset classes: imports datasets (evidence: `code/utils.py`)
- Dataset classes → Caltech datasets: defines dataset
- CLIP loader → CLIP architecture: builds model (evidence: `code/replace/clip.py`)
- Attack selection → AutoAttack runner: invokes runner (evidence: `code/attacks.py`)
- AutoAttack runner → Auto-PGD: dispatches attack (evidence: `autoattack/autoattack.py`)
- AutoAttack runner → FAB attack: dispatches attack (evidence: `autoattack/autoattack.py`)
- AutoAttack runner → Square attack: dispatches attack (evidence: `autoattack/autoattack.py`)
- AutoAttack runner → Attack checks: uses checks (evidence: `autoattack/autoattack.py`)
- AutoAttack runner → Attack utilities: uses utilities (evidence: `autoattack/autoattack.py`)
- Auto-PGD → Attack checks: checks gradients (evidence: `autoattack/autopgd_base.py`)
- Auto-PGD → Attack utilities: uses utilities (evidence: `autoattack/autopgd_base.py`)
- FAB attack → Attack utilities: uses utilities
- Square attack → Auto-PGD: references attack (evidence: `autoattack/square.py`)
