# horiaphilip/sat-visualizer architecture

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

- Interactive diagram: https://gitdiagram.com/horiaphilip/sat-visualizer
- Repository: https://github.com/horiaphilip/sat-visualizer

## Overview

SAT Visualizer is a single-file Pygame application for exploring reductions of Graph Isomorphism, Clique, Sudoku, and N-Queens Completion to CNF and solving them with PySAT. The user selects a problem, adjusts parameters or generates an instance, then requests a solve; the main loop dispatches to the matching solver and renders the result. The graph separates UI orchestration, problem encodings/solvers, and visualization. The excerpt is partial, so edges are limited to relationships explicit in the excerpt or README.

Main entry points: [`cc.py`](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py) (Pygame main loop)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Interactive application"]
  node_app["Pygame main loop<br/>[cc.py]"]
  node_controls["Buttons and sliders<br/>[cc.py]"]
end

subgraph group_problems["Problem solving"]
  node_graphutils["Graph utilities<br/>[cc.py]"]
  node_gi["Isomorphism solver<br/>[cc.py]"]
  node_clique["Clique solver<br/>[cc.py]"]
  node_sudoku["Sudoku solver<br/>[cc.py]"]
  node_sudokugen["Sudoku generator<br/>[cc.py]"]
  node_queens["Queens solver<br/>[cc.py]"]
  node_sat["PySAT solver"]
end

subgraph group_display["Visualization"]
  node_render["Problem rendering<br/>[cc.py]"]
end

node_user(("User"))

node_user -->|"operates"| node_app
node_app -->|"handles input"| node_controls
node_app -->|"dispatches solve"| node_gi
node_app -->|"dispatches solve"| node_clique
node_app -->|"dispatches solve"| node_sudoku
node_app -.->|"dispatches solve"| node_queens
node_app -->|"generates puzzle"| node_sudokugen
node_app -->|"renders state"| node_render
node_gi -.->|"solves CNF"| node_sat
node_clique -->|"solves CNF"| node_sat
node_sudoku -.->|"solves CNF"| node_sat
node_queens -.->|"solves CNF"| node_sat
node_app -.->|"uses graph data"| node_graphutils

click node_app "https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py"
click node_controls "https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py"
click node_graphutils "https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py"
click node_gi "https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py"
click node_clique "https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py"
click node_sudoku "https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py"
click node_sudokugen "https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py"
click node_queens "https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py"
click node_render "https://github.com/horiaphilip/sat-visualizer/blob/main/cc.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_app,node_controls,node_user toneBlue
class node_graphutils,node_gi,node_clique,node_sudoku,node_sudokugen,node_queens,node_sat toneAmber
class node_render toneMint
```

## Components

### Interactive application

- [Pygame main loop](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py): `cc.py`
- [Buttons and sliders](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py): `cc.py`

### Problem solving

- [Graph utilities](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py): `cc.py`
- [Isomorphism solver](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py): `cc.py`
- [Clique solver](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py): `cc.py`
- [Sudoku solver](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py): `cc.py`
- [Sudoku generator](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py): `cc.py`
- [Queens solver](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py): `cc.py`
- **PySAT solver**

### Visualization

- [Problem rendering](https://github.com/horiaphilip/sat-visualizer/blob/main/cc.py): `cc.py`

### Other components

- **User**

## Connections

- User → Pygame main loop: operates (evidence: `README.md`)
- Pygame main loop → Buttons and sliders: handles input (evidence: `cc.py`)
- Pygame main loop → Isomorphism solver: dispatches solve (evidence: `cc.py`)
- Pygame main loop → Clique solver: dispatches solve (evidence: `cc.py`)
- Pygame main loop → Sudoku solver: dispatches solve (evidence: `cc.py`)
- Pygame main loop → Queens solver: dispatches solve (evidence: `cc.py`)
- Pygame main loop → Sudoku generator: generates puzzle (evidence: `cc.py`)
- Pygame main loop → Problem rendering: renders state (evidence: `cc.py`)
- Isomorphism solver → PySAT solver: solves CNF
- Clique solver → PySAT solver: solves CNF (evidence: `cc.py`)
- Sudoku solver → PySAT solver: solves CNF
- Queens solver → PySAT solver: solves CNF
- Pygame main loop → Graph utilities: uses graph data (evidence: `cc.py`)
