Skip to main content

Getting Started with flip-utils

About flip-utils

flip-utils is the pip-installable distribution published from this repository. Its Python import package is flip, which contains the shared platform logic used by FLIP jobs and services including core training logic, FLARE components, Flower helpers, and utility helpers.

The FLIP platform uses this package to power federated learning applications across multiple job types: standard federated training, distributed evaluation, diffusion model training, and custom federated optimization.

Installation

Install the published package from PyPI:

pip install flip-utils
# or with uv
uv add flip-utils

To use the latest development version, clone the monorepo and install from source:

git clone https://github.com/londonaicentre/FLIP.git
cd FLIP/flip-utils
uv sync
# or
pip install .

To build a distributable wheel for development:

uv build

Package Structure & Modules

The flip package is organized into logical modules:

flip.core

Core classes and abstractions:

  • FLIPBase — Abstract base class with common FL logic

  • FLIPStandardProd — Production implementation using FLIP platform APIs

  • FLIPStandardDev — Development implementation using local CSV/filesystem

  • FLIP() factory — Automatically selects the correct implementation based on environment

flip.constants

Configuration and enumerations:

  • FlipConstants — Pydantic-settings configuration singleton

  • ResourceType — Enum for imaging resource types (DICOM, NIFTI, etc.)

  • ModelStatus — Enum for model training states

  • JobType — Enum for supported FL job types

  • PTConstants — PyTorch-specific constants and settings

flip.utils

Utility helpers:

  • Utils — General utility functions

  • model_weights_handling — Model weight aggregation and manipulation

flip.nvflare

FLARE-specific components:

  • controllers/ — Workflow controllers (ScatterAndGather, CrossSiteModelEval, etc.)

  • components/ — Event handlers, persistors, privacy filters, model locators, etc.

  • recipes/ — High-level FLARE job recipes

  • runtime.py — Runtime helpers for FLARE apps

  • metrics.py — Metrics collection and reporting

  • site_policy.py — Renders the trust’s site privacy policy at fl-client start (python -m flip.nvflare.site_policy)

  • server_site_config.py — Registers FLIP’s server site components at fl-server start (python -m flip.nvflare.server_site_config), among them JobSchedulingReporter, which relays FLARE’s scheduling verdict to the hub

flip.flower

Flower-specific helpers:

  • strategy.py — FlipFedAvg (FedAvg with FLIP hub telemetry and optional best-model selection) and min_clients_from_run_config

  • privacy.py — flip_local_dp_mod, the client-side local differential-privacy mod

  • selection.py — BestModelSelector, best-model tracking across rounds

  • metrics.py — Server-side metrics collection and reporting for Flower runs

  • progress.py — Progress/status reporting helpers for Flower runs

Using the FLIP Factory

The FLIP() factory automatically selects between development and production implementations based on the LOCAL_DEV environment variable:

from flip import FLIP

# Uses FLIPStandardProd in production or FLIPStandardDev in local dev
flip = FLIP()
df = flip.get_dataframe(project_id, query)

See the API reference for detailed method documentation.

Job Types

Pass the job type to the FLIP() factory (FLIP(job_type=...)). The JobType enum (flip.constants.job_types) defines the values recognised by FLIP():

Type

Description

standard

Federated training with FedAvg aggregation (default)

evaluation

Distributed model evaluation without training

diffusion_model

Two-stage training: VAE encoder followed by diffusion model training

fed_opt

Custom federated optimization with flexible aggregation strategies

The FLARE backend additionally ships a template directory under fl-apps/nvflare/ for each Client-API job type (standard, evaluation, diffusion_model, fed_opt); the template names match the JobType enum values above. The Flower backend ships its own standard and evaluation templates under fl-apps/flower/ — selected at the deploy layer by FL_BACKEND=flower.

Data Enrichment (flip.xnat)

flip.xnat uploads data-enrichment files — segmentation masks and other image-derived annotations — into a FLIP project’s XNAT, so that supervised apps find a label beside each pulled image. Labels that already exist in OMOP (a lab result, a coded report finding) do not need this: project them as a column of the cohort query instead.

Unlike the rest of this package, flip.xnat does not run in the FL client. It runs on the model developer’s workstation inside the Trust network (or as an XNAT Container Service job), authenticated as their own XNAT account; FL clients hold no XNAT credentials. It is the write-side counterpart to get_by_accession_number(), which reads the same scan resource.

A flip-xnat console script is installed with the package:

export XNAT_HOST=https://xnat.trust.example
export XNAT_USER=your-username
export XNAT_PASS=your-password

flip-xnat upload --flip-project-id <project-uuid> --manifest manifest.csv --dry-run

The manifest is a CSV of accession_id,file_path (plus an optional target_filename, which must be a bare filename). By default each uploaded file is named after the image already in the scan’s NIFTI resource, swapping the input_ prefix for label_, which is the pairing the apps rely on. Existing files are never replaced unless --overwrite is passed.

Every Trust in the project needs enriching — each Trust’s XNAT holds only its own studies — so repeat --credentials-file to cover the roster in one run:

flip-xnat upload --flip-project-id <project-uuid> --manifest manifest.csv \
  --credentials-file gstt.json --credentials-file kch.json

The same manifest goes to every Trust; an accession exists at exactly one site and the others report it as no matching scan. A run that resolves no destination anywhere exits non-zero, so an automated pipeline cannot mistake a wholly-skipped enrichment for a completed one; pass --allow-no-op when an empty run is genuinely expected. A roster where no Trust holds the project is the one case --allow-no-op does not cover: the image pull never ran there, so the run fails regardless.

The same operations are available as a Python API:

from flip.xnat import XnatClient, read_manifest, run_enrichment

clients = [XnatClient.from_config_file("gstt.json"), XnatClient.from_config_file("kch.json")]
report = run_enrichment(clients, read_manifest("manifest.csv"), flip_project_id="<project-uuid>")
print(report.render())
raise SystemExit(report.exit_code())

Run it only after the image pull and after DICOM-to-NIfTI conversion: the target filename is derived from the converted image, so running earlier skips every scan.

User Application Requirements

The job components dynamically import user-provided code from the job’s custom/ directory. On the platform that directory is assembled by the FL API, which merges the uploaded app files onto the matching fl-apps/nvflare/<template>/app template; in local SimEnv runs the tutorial’s job.py stages its app_files/ into the job’s custom/ directly.

File

Description

trainer.py

Training logic — a plain nvflare.client script

validator.py

Extra validation module where the job type requires one

evaluator.py

Evaluation logic — required by the evaluation job type

models.py

Model definitions — must export get_model() function

config.json

Job configuration — only job_type is required; platform keys such as LOCAL_ROUNDS are defaulted when absent, and app settings such as LEARNING_RATE are passed through untouched

transforms.py

Data transforms (optional)

Development Mode

To test FL applications locally before deploying to production:

  1. Set environment variables in .env.development:

    LOCAL_DEV=true
    DEV_IMAGES_DIR=../data/accession-resources
    DEV_DATAFRAME=../data/sample_get_dataframe.csv
  2. Place your application files in the tutorial’s app_files/ directory (e.g. fl-tutorials/nvflare/image_classification/xray_classification/app_files/). On the platform they are merged onto the matching fl-apps/nvflare/<template>/app/ template at submit time.

  3. Run one of the shipped tutorials against the FLARE simulator from the repository root:

    make -C fl-tutorials run-tutorial TUTORIAL=xray_classification
    # list every available tutorial with:
    make -C fl-tutorials list-tutorials

    Each tutorial’s make run delegates to make sim — its job.py driving a FLIP recipe on the FLARE simulator (SimEnv) from the flip-utils venv — configured per-tutorial via that tutorial’s .env.app.

Running Tests

Run unit tests for the flip package:

make unit-test
# or
uv run pytest -s -vv

Tests use pytest with coverage reporting and are located in tests/unit/.

Building the Docs Locally

flip-utils is documented as part of the FLIP documentation. From the repository root, run:

cd docs && make docs

The generated HTML site will be written to docs/build/html. To clean previous builds:

cd docs && make clean

How the API Reference is Generated

The API reference is built with sphinx-autoapi and points directly at the flip/ source tree. That keeps the reference pages aligned with the code without maintaining hand-written module stubs. See the API Reference section of the built documentation for complete coverage of all public classes and functions.

Metadata

Release files for flip-utils 0.13.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flip-utils 0.13.0
File Size Uploaded Provenance
flip_utils-0.13.0.tar.gz 151.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for flip-utils 0.13.0
File Interpreter ABI Platform
flip_utils-0.13.0-py3-none-any.whl Python 3 none any Details

Total release size: 358.4 kB

Release files / flip_utils-0.13.0.tar.gz

Download URL flip_utils-0.13.0.tar.gz
Size 151.5 kB
Tags Source
SHA-256 checksum
How to use checksums
a77c9802e485ea561f5398a371e2561d9c28ebfa8b9a7887c89ebcae5b101d4d
BLAKE2b-256 checksum
How to use checksums
3638dc05cab2404e2eae18852111f0d731072e095e2289786239261fc9daa850
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / flip_utils-0.13.0-py3-none-any.whl

Download URL flip_utils-0.13.0-py3-none-any.whl
Size 206.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ce681c22e13868b113e4f05d8b99eb1313c70365f36ab22e8ffdf419ca5d6ba5
BLAKE2b-256 checksum
How to use checksums
50f95be1a72e049e240f183bb8073bd0772f602fb6ea720df4a7e5b6525bc0de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for flip-utils 0.13.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page