# fraunhoferportugal/pymdma architecture

> Architecture diagram of the GitHub repository fraunhoferportugal/pymdma, 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/fraunhoferportugal/pymdma
- Repository: https://github.com/fraunhoferportugal/pymdma

## Overview

pyMDMA is a Python library for auditing input and synthetic datasets across image, tabular, and time-series modalities. Users invoke evaluation through the CLI or API, or import modality metrics directly; the shared runtime selects metrics and modality-specific input handling, computes results, and formats outputs. The modality branches provide their own loaders, feature extraction, and input/synthesis metrics. The README establishes the product capabilities; several subsystem details are represented at directory level because their implementations were not sampled.

Main entry points: [`src/pymdma/common/selection.py`](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/selection.py) (Metric Selector), [`src/pymdma/api/run_api.py`](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/api/run_api.py) (REST API), [`src/pymdma/common/compute.py`](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/compute.py) (Computation Manager), [`src/pymdma/cli.py`](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/cli.py) (CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["User Interfaces"]
  node_cli["CLI<br/>[cli.py]"]
  node_api["REST API<br/>[run_api.py]"]
end

subgraph group_runtime["Evaluation Runtime"]
  node_selector["Metric Selector<br/>[selection.py]"]
  node_compute["Computation Manager<br/>[compute.py]"]
  node_contracts["Metric Contracts<br/>[definitions.py]"]
  node_results["Result Formatting<br/>[output.py]"]
  node_general_metrics["Shared Metrics"]
end

subgraph group_image["Image Auditing"]
  node_image_input["Image Input<br/>[input_layer.py]"]
  node_image_features["Image Features<br/>[features.py]"]
  node_image_metrics["Image Metrics"]
  node_image_processing["Image Processing<br/>[processing.py]"]
end

subgraph group_tabular["Tabular Auditing"]
  node_tabular_input["Tabular Input<br/>[input_layer.py]"]
  node_tabular_load["Tabular Loading<br/>[load.py]"]
  node_tabular_harmonize["Data Harmonization<br/>[harmonize.py]"]
  node_tabular_embed["Tabular Embeddings<br/>[embed.py]"]
  node_tabular_metrics["Tabular Metrics"]
end

subgraph group_timeseries["Time-Series Auditing"]
  node_ts_input["Time-Series Input<br/>[input_layer.py]"]
  node_ts_dataset["Time-Series Dataset<br/>[simple_dataset.py]"]
  node_ts_features["Time-Series Features<br/>[features.py]"]
  node_ts_metrics["Time-Series Metrics"]
end

node_user(("User"))

node_user -->|"runs evaluation"| node_cli
node_user -->|"requests evaluation"| node_api
node_cli -->|"selects metrics"| node_selector
node_cli -->|"runs computation"| node_compute
node_api -->|"selects metrics"| node_selector
node_api -->|"runs computation"| node_compute
node_api -->|"formats response"| node_results
node_selector -->|"creates input"| node_image_input
node_selector -->|"creates input"| node_tabular_input
node_selector -->|"creates input"| node_ts_input
node_selector -->|"loads metrics"| node_image_metrics
node_compute -->|"uses metric interface"| node_contracts
node_compute -->|"produces results"| node_results
node_image_input -->|"extracts features"| node_image_features
node_image_input -->|"uses processing"| node_image_processing
node_tabular_input -->|"loads data"| node_tabular_load
node_tabular_load -->|"harmonizes data"| node_tabular_harmonize
node_tabular_load -->|"encodes data"| node_tabular_embed
node_ts_input -->|"builds datasets"| node_ts_dataset
node_ts_input -->|"uses features"| node_ts_features
node_user -->|"imports metrics"| node_image_metrics
node_image_features -->|"feeds features"| node_image_metrics

click node_cli "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/cli.py"
click node_api "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/api/run_api.py"
click node_selector "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/selection.py"
click node_compute "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/compute.py"
click node_contracts "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/definitions.py"
click node_results "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/output.py"
click node_image_input "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/image/input_layer.py"
click node_image_features "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/image/models/features.py"
click node_image_metrics "https://github.com/fraunhoferportugal/pymdma/tree/main/src/pymdma/image/measures"
click node_image_processing "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/image/utils/processing.py"
click node_tabular_input "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/tabular/input_layer.py"
click node_tabular_load "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/tabular/data/load.py"
click node_tabular_harmonize "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/tabular/data/harmonize.py"
click node_tabular_embed "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/tabular/embeddings/embed.py"
click node_tabular_metrics "https://github.com/fraunhoferportugal/pymdma/tree/main/src/pymdma/tabular/measures"
click node_ts_input "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/time_series/input_layer.py"
click node_ts_dataset "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/time_series/data/simple_dataset.py"
click node_ts_features "https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/time_series/models/features.py"
click node_ts_metrics "https://github.com/fraunhoferportugal/pymdma/tree/main/src/pymdma/time_series/measures"
click node_general_metrics "https://github.com/fraunhoferportugal/pymdma/tree/main/src/pymdma/general/measures"

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_cli,node_api,node_user toneBlue
class node_selector,node_compute,node_contracts,node_results,node_general_metrics toneAmber
class node_image_input,node_image_features,node_image_metrics,node_image_processing toneMint
class node_tabular_input,node_tabular_load,node_tabular_harmonize,node_tabular_embed,node_tabular_metrics toneRose
class node_ts_input,node_ts_dataset,node_ts_features,node_ts_metrics toneIndigo
```

## Components

### User Interfaces

- [CLI](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/cli.py): `src/pymdma/cli.py`
- [REST API](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/api/run_api.py): `src/pymdma/api/run_api.py`

### Evaluation Runtime

- [Metric Selector](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/selection.py): `src/pymdma/common/selection.py`
- [Computation Manager](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/compute.py): `src/pymdma/common/compute.py`
- [Metric Contracts](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/definitions.py): `src/pymdma/common/definitions.py`
- [Result Formatting](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/common/output.py): `src/pymdma/common/output.py`
- [Shared Metrics](https://github.com/fraunhoferportugal/pymdma/tree/main/src/pymdma/general/measures): `src/pymdma/general/measures`

### Image Auditing

- [Image Input](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/image/input_layer.py): `src/pymdma/image/input_layer.py`
- [Image Features](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/image/models/features.py): `src/pymdma/image/models/features.py`
- [Image Metrics](https://github.com/fraunhoferportugal/pymdma/tree/main/src/pymdma/image/measures): `src/pymdma/image/measures`
- [Image Processing](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/image/utils/processing.py): `src/pymdma/image/utils/processing.py`

### Tabular Auditing

- [Tabular Input](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/tabular/input_layer.py): `src/pymdma/tabular/input_layer.py`
- [Tabular Loading](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/tabular/data/load.py): `src/pymdma/tabular/data/load.py`
- [Data Harmonization](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/tabular/data/harmonize.py): `src/pymdma/tabular/data/harmonize.py`
- [Tabular Embeddings](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/tabular/embeddings/embed.py): `src/pymdma/tabular/embeddings/embed.py`
- [Tabular Metrics](https://github.com/fraunhoferportugal/pymdma/tree/main/src/pymdma/tabular/measures): `src/pymdma/tabular/measures`

### Time-Series Auditing

- [Time-Series Input](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/time_series/input_layer.py): `src/pymdma/time_series/input_layer.py`
- [Time-Series Dataset](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/time_series/data/simple_dataset.py): `src/pymdma/time_series/data/simple_dataset.py`
- [Time-Series Features](https://github.com/fraunhoferportugal/pymdma/blob/main/src/pymdma/time_series/models/features.py): `src/pymdma/time_series/models/features.py`
- [Time-Series Metrics](https://github.com/fraunhoferportugal/pymdma/tree/main/src/pymdma/time_series/measures): `src/pymdma/time_series/measures`

### Other components

- **User**

## Connections

- User → CLI: runs evaluation
- User → REST API: requests evaluation
- CLI → Metric Selector: selects metrics (evidence: `src/pymdma/cli.py`)
- CLI → Computation Manager: runs computation (evidence: `src/pymdma/cli.py`)
- REST API → Metric Selector: selects metrics (evidence: `src/pymdma/api/run_api.py`)
- REST API → Computation Manager: runs computation (evidence: `src/pymdma/api/run_api.py`)
- REST API → Result Formatting: formats response (evidence: `src/pymdma/api/run_api.py`)
- Metric Selector → Image Input: creates input (evidence: `src/pymdma/common/selection.py`)
- Metric Selector → Tabular Input: creates input (evidence: `src/pymdma/common/selection.py`)
- Metric Selector → Time-Series Input: creates input (evidence: `src/pymdma/common/selection.py`)
- Metric Selector → Image Metrics: loads metrics (evidence: `src/pymdma/common/selection.py`)
- Computation Manager → Metric Contracts: uses metric interface (evidence: `src/pymdma/common/compute.py`)
- Computation Manager → Result Formatting: produces results (evidence: `src/pymdma/common/compute.py`)
- Image Input → Image Features: extracts features (evidence: `src/pymdma/image/input_layer.py`)
- Image Input → Image Processing: uses processing (evidence: `src/pymdma/image/input_layer.py`)
- Tabular Input → Tabular Loading: loads data (evidence: `src/pymdma/tabular/input_layer.py`)
- Tabular Loading → Data Harmonization: harmonizes data (evidence: `src/pymdma/tabular/data/load.py`)
- Tabular Loading → Tabular Embeddings: encodes data (evidence: `src/pymdma/tabular/data/load.py`)
- Time-Series Input → Time-Series Dataset: builds datasets (evidence: `src/pymdma/time_series/input_layer.py`)
- Time-Series Input → Time-Series Features: uses features (evidence: `src/pymdma/time_series/input_layer.py`)
- User → Image Metrics: imports metrics
- Image Features → Image Metrics: feeds features
