# ahwillia/affinewarp architecture

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

- Interactive diagram: https://gitdiagram.com/ahwillia/affinewarp
- Repository: https://github.com/ahwillia/affinewarp

## Overview

affinewarp is a research library for aligning repeated multivariate time series with linear shifts or piecewise-linear time warps, chiefly for neural recordings. The user workflow is to provide trial data, fit an alignment model that alternates template and warp estimation, then predict or transform aligned data; spike-event data has a specialized representation and transform path. The package also provides model selection, evaluation metrics, synthetic data generation, multi-template shift models, and visualization. Arrows are limited to relationships visible in excerpts, the source index, or README; unsampled implementation details are not inferred.

Main entry points: [`affinewarp/shiftwarp.py`](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/shiftwarp.py) (Shift Warping), [`affinewarp/piecewisewarp.py`](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/piecewisewarp.py) (Piecewise Warping), [`affinewarp/crossval.py`](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/crossval.py) (Cross Validation), [`affinewarp/datasets.py`](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/datasets.py) (Synthetic Data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_models["Warp Models"]
  node_shift_model["Shift Warping<br/>[shiftwarp.py]"]
  node_piecewise_model["Piecewise Warping<br/>[piecewisewarp.py]"]
  node_multi_shift["Multi-Shift Model<br/>[multiwarp.py]"]
end

subgraph group_optimization["Fit Internals"]
  node_optimizer["Warp Optimizers<br/>[_optimizers.py]"]
  node_banded_solver["Banded Solver<br/>[bmat.py]"]
end

subgraph group_data["Data Handling"]
  node_spike_data["Spike Data<br/>[spikedata.py]"]
  node_dimension_utils["Input Utilities<br/>[utils.py]"]
end

subgraph group_analysis["Analysis Tools"]
  node_cross_validation["Cross Validation<br/>[crossval.py]"]
  node_metrics["Warp Metrics<br/>[metrics.py]"]
  node_synthetic_data["Synthetic Data<br/>[datasets.py]"]
  node_visualization["Visualization<br/>[visualization.py]"]
end

node_analyst(("Analyst"))
node_trial_data["Trial Data"]

node_analyst -->|"provides"| node_trial_data
node_trial_data -->|"fit input"| node_shift_model
node_trial_data -->|"fit input"| node_piecewise_model
node_shift_model -->|"uses optimizers"| node_optimizer
node_piecewise_model -->|"uses optimizers"| node_optimizer
node_shift_model -->|"solves templates"| node_banded_solver
node_shift_model -->|"checks inputs"| node_dimension_utils
node_piecewise_model -.->|"checks inputs"| node_dimension_utils
node_shift_model -->|"transforms spikes"| node_spike_data
node_multi_shift -->|"builds models"| node_shift_model
node_analyst -->|"selects models"| node_cross_validation
node_cross_validation -->|"fits candidates"| node_piecewise_model
node_cross_validation -->|"fits shift candidate"| node_shift_model
node_analyst -->|"evaluates warps"| node_metrics
node_analyst -->|"generates examples"| node_synthetic_data
node_synthetic_data -->|"predicts data"| node_piecewise_model
node_analyst -.->|"visualizes results"| node_visualization

click node_shift_model "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/shiftwarp.py"
click node_piecewise_model "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/piecewisewarp.py"
click node_multi_shift "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/multiwarp.py"
click node_optimizer "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/_optimizers.py"
click node_banded_solver "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/bmat.py"
click node_spike_data "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/spikedata.py"
click node_dimension_utils "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/utils.py"
click node_cross_validation "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/crossval.py"
click node_metrics "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/metrics.py"
click node_synthetic_data "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/datasets.py"
click node_visualization "https://github.com/ahwillia/affinewarp/blob/master/affinewarp/visualization.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_shift_model,node_piecewise_model,node_multi_shift toneBlue
class node_optimizer,node_banded_solver toneAmber
class node_spike_data,node_dimension_utils toneMint
class node_cross_validation,node_metrics,node_synthetic_data,node_visualization toneRose
class node_analyst,node_trial_data toneIndigo
```

## Components

### Warp Models

- [Shift Warping](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/shiftwarp.py): `affinewarp/shiftwarp.py`
- [Piecewise Warping](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/piecewisewarp.py): `affinewarp/piecewisewarp.py`
- [Multi-Shift Model](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/multiwarp.py): `affinewarp/multiwarp.py`

### Fit Internals

- [Warp Optimizers](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/_optimizers.py): `affinewarp/_optimizers.py`
- [Banded Solver](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/bmat.py): `affinewarp/bmat.py`

### Data Handling

- [Spike Data](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/spikedata.py): `affinewarp/spikedata.py`
- [Input Utilities](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/utils.py): `affinewarp/utils.py`

### Analysis Tools

- [Cross Validation](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/crossval.py): `affinewarp/crossval.py`
- [Warp Metrics](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/metrics.py): `affinewarp/metrics.py`
- [Synthetic Data](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/datasets.py): `affinewarp/datasets.py`
- [Visualization](https://github.com/ahwillia/affinewarp/blob/master/affinewarp/visualization.py): `affinewarp/visualization.py`

### Other components

- **Analyst**
- **Trial Data**

## Connections

- Analyst → Trial Data: provides (evidence: `README.md`)
- Trial Data → Shift Warping: fit input (evidence: `affinewarp/shiftwarp.py`)
- Trial Data → Piecewise Warping: fit input (evidence: `affinewarp/piecewisewarp.py`)
- Shift Warping → Warp Optimizers: uses optimizers (evidence: `affinewarp/shiftwarp.py`)
- Piecewise Warping → Warp Optimizers: uses optimizers (evidence: `affinewarp/piecewisewarp.py`)
- Shift Warping → Banded Solver: solves templates (evidence: `affinewarp/shiftwarp.py`)
- Shift Warping → Input Utilities: checks inputs (evidence: `affinewarp/shiftwarp.py`)
- Piecewise Warping → Input Utilities: checks inputs (evidence: `affinewarp/piecewisewarp.py`)
- Shift Warping → Spike Data: transforms spikes (evidence: `affinewarp/shiftwarp.py`)
- Multi-Shift Model → Shift Warping: builds models (evidence: `affinewarp/multiwarp.py`)
- Analyst → Cross Validation: selects models (evidence: `README.md`)
- Cross Validation → Piecewise Warping: fits candidates (evidence: `affinewarp/crossval.py`)
- Cross Validation → Shift Warping: fits shift candidate (evidence: `affinewarp/crossval.py`)
- Analyst → Warp Metrics: evaluates warps (evidence: `README.md`)
- Analyst → Synthetic Data: generates examples (evidence: `affinewarp/datasets.py`)
- Synthetic Data → Piecewise Warping: predicts data (evidence: `affinewarp/datasets.py`)
- Analyst → Visualization: visualizes results
