Metadata-Version: 2.4
Name: bitfount
Version: 13.0.0
Summary: Machine Learning and Federated Learning Library.
Keywords: federated learning,privacy,AI,machine learning
Author: Bitfount Ltd
License-Expression: Apache-2.0
License-File: LICENSE
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Intended Audience :: Healthcare Industry
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Operating System :: OS Independent
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
Classifier: Topic :: Scientific/Engineering :: Image Processing
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: System :: Distributed Computing
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Dist: aiohttp>=3.12.14
Requires-Dist: albumentations~=1.4.21
Requires-Dist: alembic~=1.13
Requires-Dist: apispec>=6.8.1
Requires-Dist: async-timeout~=4.0
Requires-Dist: attrs>=24.2,<25.5
Requires-Dist: cachetools>=5.3,<8.0
Requires-Dist: cryptography~=50.0
Requires-Dist: cronsim~=2.7
Requires-Dist: decorator~=5.2.1
Requires-Dist: deprecated~=1.2
Requires-Dist: desert~=2022.9.22
Requires-Dist: diskcache~=5.0
Requires-Dist: docstring-parser~=0.15
Requires-Dist: envyaml~=1.10.211231
Requires-Dist: filetype~=1.2.0
Requires-Dist: fastapi>=0.139.0,<1.0.0
Requires-Dist: fire~=0.5.0
Requires-Dist: fhirpy~=2.0.15
Requires-Dist: fhir-resources~=8.1.0
Requires-Dist: filelock~=3.20
Requires-Dist: gputil~=1.4.0
Requires-Dist: grpcio>=1.62.1,<1.76.0
Requires-Dist: httpx~=0.28.1
Requires-Dist: intermine~=1.13.0
Requires-Dist: marshmallow-polyfield~=5.11
Requires-Dist: marshmallow-union~=0.1.15
Requires-Dist: marshmallow>=3.23,<3.27
Requires-Dist: methodtools~=0.4.7
Requires-Dist: msgpack>=1.2.1,<1.3
Requires-Dist: natsort~=8.4.0
Requires-Dist: nibabel~=5.3.0
Requires-Dist: numpy~=1.26
Requires-Dist: packaging>=23.1,<26.0
Requires-Dist: pandas~=2.2.3
Requires-Dist: pandasql~=0.7.3
Requires-Dist: pgeocode~=0.4.0
Requires-Dist: iso3166~=2.1
Requires-Dist: pillow>=12.2,<13
Requires-Dist: prefect>=3.8.0,<4
Requires-Dist: psutil~=7.2.2
Requires-Dist: pyarrow~=23.0
Requires-Dist: pydantic~=2.12.5
Requires-Dist: pydash~=8.0.0
Requires-Dist: pydantic-settings>=2.9.0
Requires-Dist: pyjwt~=2.14.0
Requires-Dist: python-jose[cryptography]~=3.5.0
Requires-Dist: python-dateutil~=2.9.0
Requires-Dist: pyyaml~=6.0.0
Requires-Dist: requests~=2.34.2
Requires-Dist: scikit-image~=0.24.0
Requires-Dist: scikit-learn>=1.5.0,<1.7.0
Requires-Dist: semver~=3.0.4
Requires-Dist: sqlalchemy~=2.0.35
Requires-Dist: sqlvalidator~=0.0.20
Requires-Dist: sqlparse~=0.6.0
Requires-Dist: starlette>=1.0.1
Requires-Dist: statsmodels~=0.14.0
Requires-Dist: torchio~=0.18.91
Requires-Dist: types-decorator~=5.2.0.20251101
Requires-Dist: typing-extensions>=4.12.2
Requires-Dist: tzlocal~=5.3
Requires-Dist: uvicorn>=0.30,<0.50
Requires-Dist: pytorch-lightning~=2.5
Requires-Dist: tensorboard~=2.18
Requires-Dist: torch~=2.9.0
Requires-Dist: torch-optimizer~=0.3.0
Requires-Dist: torchmetrics~=1.6.0
Requires-Dist: torchvision~=0.24.0
Requires-Dist: opacus~=1.5.2
Requires-Dist: smartnoise-sql>=1.0.6,<1.0.10
Requires-Dist: transformers>=4.57.6,<5
Requires-Dist: opencv-python-headless>=4.10.0.84,<5.0.0
Requires-Dist: timm==1.0.24
Requires-Dist: huggingface-hub>=0.36.0,<1
Requires-Dist: onnx~=1.19
Requires-Dist: onnxruntime~=1.20.1
Requires-Dist: totalsegmentator>=2.12.0
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc>=1.28.0
Requires-Dist: datadog-api-client~=2.45.0
Requires-Dist: reportlab~=4.2
Requires-Dist: matplotlib~=3.8.4
Requires-Dist: pydicom~=3.0.2
Requires-Dist: python-gdcm~=3.0.24
Requires-Dist: scipy~=1.12.0
Requires-Dist: h5py~=3.12
Requires-Dist: jdcal~=1.4
Requires-Dist: more-itertools~=10.5.0
Requires-Dist: tabulate~=0.9.0
Requires-Dist: tifffile~=2024.9.20
Requires-Dist: imagecodecs-lite~=2022.9.26
Requires-Dist: construct~=2.10.70
Requires-Dist: click~=8.3.3
Requires-Dist: cloudpickle~=3.1
Requires-Dist: protobuf>=6.31.1
Requires-Dist: imagesize~=1.4.0
Requires-Dist: boto3~=1.40.38
Requires-Dist: boto3-stubs[s3]~=1.43.82
Requires-Dist: zstandard==0.25.0
Requires-Dist: anyascii>=0.3.3
Requires-Dist: babel~=2.18
Requires-Dist: asyncpg>=0.30.0
Requires-Dist: pg8000>=1.31.5
Requires-Dist: pymysql>=1.1.2
Requires-Dist: pyodbc>=5.3.0
Requires-Dist: oracledb>=3.4.1
Requires-Dist: monai>=1.5.1
Requires-Dist: peft>=0.7.0
Requires-Dist: coverage[toml] ; extra == 'test'
Requires-Dist: environs ; extra == 'test'
Requires-Dist: faker ; extra == 'test'
Requires-Dist: flask>=3.1.1 ; extra == 'test'
Requires-Dist: ipynb ; extra == 'test'
Requires-Dist: jinja2>=3.1.3 ; extra == 'test'
Requires-Dist: jupytext ; extra == 'test'
Requires-Dist: notebook ; extra == 'test'
Requires-Dist: pytest~=9.0 ; extra == 'test'
Requires-Dist: pytest-aiohttp>=1.0.5 ; extra == 'test'
Requires-Dist: pytest-asyncio>=1.3.0 ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'
Requires-Dist: pytest-custom-exit-code ; extra == 'test'
Requires-Dist: pytest-flakefinder ; extra == 'test'
Requires-Dist: pytest-flask ; extra == 'test'
Requires-Dist: pytest-httpx ; extra == 'test'
Requires-Dist: pytest-lazy-fixtures ; extra == 'test'
Requires-Dist: pytest-mock ; extra == 'test'
Requires-Dist: pytest-randomly ; extra == 'test'
Requires-Dist: pytest-timeout ; extra == 'test'
Requires-Dist: pytest-xdist[psutil] ; extra == 'test'
Requires-Dist: python-dotenv ; extra == 'test'
Requires-Dist: requests-toolbelt ; extra == 'test'
Requires-Dist: responses>=0.23.0 ; extra == 'test'
Requires-Dist: testbook ; extra == 'test'
Requires-Dist: testcontainers>=3.7.1 ; extra == 'test'
Requires-Dist: wandb ; extra == 'test'
Requires-Dist: apispec>=6.8.1 ; extra == 'test'
Requires-Dist: openapi-schema-validator>=0.6.3 ; extra == 'test'
Requires-Dist: openapi-spec-validator>=0.7.1 ; extra == 'test'
Requires-Dist: moto[server] ; extra == 'test'
Requires-Dist: ipykernel ; extra == 'tutorial'
Requires-Dist: ipywidgets ; extra == 'tutorial'
Requires-Dist: jupyter-contrib-nbextensions ; extra == 'tutorial'
Requires-Dist: jupytext ; extra == 'tutorial'
Requires-Dist: nbclient ; extra == 'tutorial'
Requires-Dist: nest-asyncio ; extra == 'tutorial'
Requires-Dist: notebook>=6.4.1 ; extra == 'tutorial'
Requires-Dist: tqdm ; extra == 'tutorial'
Requires-Python: >=3.12, <3.13
Project-URL: documentation, https://docs.bitfount.com/
Project-URL: homepage, https://bitfount.com
Project-URL: source code, https://github.com/bitfount/bitfount/
Project-URL: hub, https://hub.bitfount.com
Provides-Extra: test
Provides-Extra: tutorial
Description-Content-Type: text/markdown

<div align="center">
<img src="https://hub.bitfount.com/_auth/static/bitfount_logo_horizontal.png" width="600px">

**Federated learning and data analytics that just works**

---

</br>
<!-- Github workflow badges are case sensitive - the name must match the name of the workflow exactly -->

![Python versions](https://img.shields.io/pypi/pyversions/bitfount)
[![PyPI Latest Release](https://img.shields.io/pypi/v/bitfount.svg)](https://pypi.org/project/bitfount/)
[![PyPI Downloads](https://pepy.tech/badge/bitfount)](https://pepy.tech/project/bitfount)
![](https://github.com/bitfount/bitfount/workflows/CI/badge.svg?branch=develop)
![](https://github.com/bitfount/bitfount/workflows/tutorials/badge.svg?branch=develop)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
[![pyrefly type checked](https://img.shields.io/badge/pyrefly-checked-blue)](https://pyrefly.org/)
[![flake8](https://img.shields.io/badge/linter-flake8-success)](https://github.com/PyCQA/flake8)
[![license](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/bitfount/bitfount/blob/develop/LICENSE)

<!-- ![docs-coverage](interrogate.svg) -->

</div>

## Table of Contents

- [Using the Docker images](#using-the-docker-images)
- [Running the Python code](#running-the-python-code)
  - [Installation](#installation)
  - [Getting started (Tutorials)](#getting-started-tutorials)
  - [Federated training scripts](#federated-training-scripts)
- [License](#license)

## Using the Docker images

There is a docker image for running a pod (`ghcr.io/bitfount/pod:stable`).

Use the [Access Manager](https://am.hub.bitfount.com/datasets/create) to connect a dataset
and to configure the container. You do not need a `config.yaml` file.

## Running the Python code

### Installation

#### Where to get it

Binary installers for the latest released version are available at the [Python
Package Index (PyPI)](https://pypi.org/project/bitfount).

`pip install bitfount`

If you are planning on using the `bitfount` package with Jupyter Notebooks, we recommend you install the splinter package `bitfount[tutorials]` which will make sure you are running compatible jupyter dependencies.

`pip install 'bitfount[tutorials]'`

#### Installation from sources

To install `bitfount` from source you need to create a python virtual environment.

In the `bitfount` directory (same one where you found this file after cloning the git repo), execute:

```bash
uv sync
```

For MacOS you may also need to install `libomp`:

```bash
brew install libomp
```

### Getting started (Tutorials)

In order to run the tutorials, you also need to install the tutorial requirements:

```bash
uv sync --group tutorial
```

To get started using the Bitfount package in a federated setting, we recommend
that you start with our tutorials. Run `jupyter notebook`and open up the first
tutorial in the "Connecting Data & Creating Pods folder: `running_a_pod.ipynb`

### Federated training scripts

Some simple scripts have been provided to run a Pod or Modelling job from a config file.

> ⚠️ If you are running from a source install (such as from `git clone`) you will
> need to use <span style="white-space: nowrap">`python -m scripts.<script_name>`</span>
> rather than use `bitfount <script_name>` directly.

To run a pod:

`bitfount run_pod --path_to_config_yaml=<CONFIG_FILE>`

To run a modelling job:

`bitfount run_modeller --path_to_config_yaml=<CONFIG_FILE>`

## License

The license for this software is available in the `LICENSE` file.
This can be found in the Github Repository, as well as inside the Docker image.
