Skip to main content

BanditPAM: A state-of-the-art, high-performance k-medoids algorithm.

Project description

BanditPAM: Almost Linear-Time $k$-Medoids Clustering

Linux - build package and run tests Linux - build source distribution and wheels Mac ARM64 - build package and run tests Mac ARM64 - Run CMake Build and Tests Mac Intel - build package and run tests Mac Intel - Run CMake Build and Tests MacOS - build wheels pages-build-deployment R-CMD-check.yaml Run style checks

This repo contains a high-performance implementation of BanditPAM from BanditPAM: Almost Linear-Time k-Medoids Clustering and BanditPAM++: Faster k-medoids Clustering. The code can be called directly from Python, R, or C++.

If you use this software, please cite:

Mo Tiwari, Martin Jinye Zhang, James Mayclin, Sebastian Thrun, Chris Piech, Ilan Shomorony. "BanditPAM: Almost Linear Time k-medoids Clustering via Multi-Armed Bandits" Advances in Neural Information Processing Systems (NeurIPS) 2020.

Mo Tiwari, Ryan Kang*, Donghyun Lee*, Sebastian Thrun, Chris Piech, Ilan Shomorony, Martin Jinye Zhang. "BanditPAM++: Faster k-medoids Clustering" Advances in Neural Information Processing Systems (NeurIPS) 2023.

@inproceedings{tiwari2020banditpam,
  title={BanditPAM: Almost Linear Time $k$-medoids Clustering via Multi-Armed Bandits},
  author={Tiwari, Mo and Zhang, Martin J and Mayclin, James and Thrun, Sebastian and Piech, Chris and Shomorony, Ilan},
  booktitle={Advances in Neural Information Processing Systems},
  pages={368--374},
  year={2020}
}

@inproceedings{tiwari2023banditpam++,
  title={BanditPAM++: Faster $k$-medoids Clustering},
  author={Tiwari, Mo and Kang, Ryan and Lee, Donghyun and Thrun, Sebastian and Shomorony, Ilan and Zhang, Martin J},
  journal={Advances in Neural Information Processing Systems},
  volume={36},
  pages={73371--73382},
  year={2023}
}

Requirements

TL;DR run python -m pip install banditpam or install.packages(banditpam) and jump to the examples.

If you have any difficulties, please see the platform-specific guides and file a Github issue if you have additional trouble.

Further Reading

Python Quickstart

Install the repo and its dependencies:

This can be done either through PyPI (recommended)

/BanditPAM/: python -m pip install -r requirements.txt
/BanditPAM/: python -m pip install banditpam

OR through the source code via

/BanditPAM/: git submodule update --init --recursive
/BanditPAM/: cd headers/carma
/BanditPAM/: mkdir build && cd build && cmake -DCARMA_INSTALL_LIB=ON .. && sudo cmake --build . --config Release --target install
/BanditPAM/: cd ../../..
/BanditPAM/: python -m pip install -r requirements.txt
/BanditPAM/: sudo python -m pip install .

Example 1: Synthetic data from a Gaussian Mixture Model

from banditpam import KMedoids
import numpy as np
import matplotlib.pyplot as plt

# Generate data from a Gaussian Mixture Model with the given means:
np.random.seed(0)
n_per_cluster = 40
means = np.array([[0,0], [-5,5], [5,5]])
X = np.vstack([np.random.randn(n_per_cluster, 2) + mu for mu in means])

# Fit the data with BanditPAM:
kmed = KMedoids(n_medoids=3, algorithm="BanditPAM")
kmed.fit(X, 'L2')

print(kmed.average_loss)  # prints 1.2482391595840454
print(kmed.labels)  # prints cluster assignments [0] * 40 + [1] * 40 + [2] * 40

# Visualize the data and the medoids:
for p_idx, point in enumerate(X):
    if p_idx in map(int, kmed.medoids):
        plt.scatter(X[p_idx, 0], X[p_idx, 1], color='red', s = 40)
    else:
        plt.scatter(X[p_idx, 0], X[p_idx, 1], color='blue', s = 10)

plt.show()

png

Example 2: MNIST and its medoids visualized via t-SNE

# Start in the repository root directory, i.e. '/BanditPAM/'.
from banditpam import KMedoids
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE

# Load the 1000-point subset of MNIST and calculate its t-SNE embeddings for visualization:
X = pd.read_csv('data/MNIST_1k.csv', sep=' ', header=None).to_numpy()
X_tsne = TSNE(n_components=2).fit_transform(X)

# Fit the data with BanditPAM:
kmed = KMedoids(n_medoids=10, algorithm="BanditPAM")
kmed.fit(X, 'L2')

# Visualize the data and the medoids via t-SNE:
for p_idx, point in enumerate(X):
    if p_idx in map(int, kmed.medoids):
        plt.scatter(X_tsne[p_idx, 0], X_tsne[p_idx, 1], color='red', s = 40)
    else:
        plt.scatter(X_tsne[p_idx, 0], X_tsne[p_idx, 1], color='blue', s = 5)

plt.show()

R Examples

Please see here.

Documentation

Documentation for BanditPAM can be found on read the docs.

Building the C++ executable from source

Please note that it is NOT necessary to build the C++ executable from source to use the Python code above. However, if you would like to use the C++ executable directly, follow the instructions below.

Option 1: Building with Docker

We highly recommend building using Docker. One can download and install Docker by following instructions at the Docker install page. Once you have Docker installed and the Docker Daemon is running, run the following commands:

/BanditPAM/scripts/docker$ chmod +x env_setup.sh
/BanditPAM/scripts/docker$ ./env_setup.sh
/BanditPAM/scripts/docker$ ./run_docker.sh

which will start a Docker instance with the necessary dependencies. Then:

/BanditPAM$ mkdir build && cd build
/BanditPAM/build$ cmake .. && make

This will create an executable named BanditPAM in BanditPAM/build/src.

Option 2: Installing requirements and building directly

Building this repository requires four external requirements:

  • CMake >= 3.17
  • Armadillo >= 10.5.3
  • OpenMP >= 2.5 (OpenMP is supported by default on most Linux platforms, and can be downloaded through homebrew on MacOS)
  • CARMA >= 0.6.2

If installing these requirements from source, one can generally use the following procedure to install each requirement from the library's root folder (with armadillo used as an example here):

/armadillo$ mkdir build && cd build
/armadillo/build$ cmake .. && make && sudo make install

Note that CARMA has different installation instructions; see its instructions.

Platform-specific installation guides

Further installation information for MacOS, Linux, and Windows is available in the docs folder. Ensure all the requirements above are installed and then run:

/BanditPAM$ mkdir build && cd build
/BanditPAM/build$ cmake .. && make

This will create an executable named BanditPAM in BanditPAM/build/src.

C++ Usage

Once the executable has been built, it can be invoked with:

/BanditPAM/build/src/BanditPAM -f [path/to/input.csv] -k [number of clusters]
  • -f is mandatory and specifies the path to the dataset
  • -k is mandatory and specifies the number of clusters with which to fit the data

For example, if you ran ./env_setup.sh and downloaded the MNIST dataset, you could run:

/BanditPAM/build/src/BanditPAM -f ../data/MNIST_1k.csv -k 10

The expected output in the command line will be:

Medoids: 694,168,306,714,324,959,527,251,800,737

Implementing a custom distance metric

One of the advantages of $k$-medoids is that it works with arbitrary distance metrics; in fact, your "metric" need not even be a real metric -- it can be negative, asymmetric, and/or not satisfy the triangle inequality or homogeneity. Any pairwise dissimilarity function works with $k$-medoids.

This also allows for clustering of "exotic" objects like trees, graphs, natural language, and more -- settings where running $k$-means wouldn't even make sense. We talk about one such setting in the full paper.

The package currently supports a number of distance metrics, including all $L_p$ losses and cosine distance.

If you're willing to write a little C++, you only need to add a few lines to kmedoids_algorithm.cpp and kmedoids_algorithm.hpp to implement your distance metric / pairwise dissimilarity!

Then, be sure to re-install the repository with a python -m pip install . (note the trailing .).

The maintainers of this repository are working on permitting arbitrary dissimilarity metrics that users write in Python, as well; see #4.

Testing

To run the full suite of tests, run in the root directory:

/BanditPAM$ python -m unittest discover -s tests

Alternatively, to run a "smaller" set of tests, from the main repo folder run python tests/test_smaller.py or python tests/test_larger.py to run a set of longer, more intensive tests.

Credits

Mo Tiwari wrote the original Python implementation of BanditPAM and many features of the C++ implementation. Mo and Adarsh Kumarappan now maintain the implementations.

James Mayclin developed the initial C++ implementation of BanditPAM.

The original BanditPAM paper was published by Mo Tiwari, Martin Jinye Zhang, James Mayclin, Sebastian Thrun, Chris Piech, and Ilan Shomorony.

We would like to thank Jerry Quinn, David Durst, Geet Sethi, and Max Horton for helpful guidance regarding the C++ implementation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

banditpam-6.0.2.tar.gz (190.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

banditpam-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl (11.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

banditpam-6.0.2-cp313-cp313-musllinux_1_2_i686.whl (11.1 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

banditpam-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

banditpam-6.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (13.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

banditpam-6.0.2-cp313-cp313-macosx_15_0_x86_64.whl (305.5 kB view details)

Uploaded CPython 3.13macOS 15.0+ x86-64

banditpam-6.0.2-cp313-cp313-macosx_15_0_universal2.whl (12.3 MB view details)

Uploaded CPython 3.13macOS 15.0+ universal2 (ARM64, x86-64)

banditpam-6.0.2-cp313-cp313-macosx_15_0_arm64.whl (12.1 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

banditpam-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl (11.1 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

banditpam-6.0.2-cp312-cp312-musllinux_1_2_i686.whl (11.1 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

banditpam-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

banditpam-6.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (13.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

banditpam-6.0.2-cp312-cp312-macosx_15_0_x86_64.whl (305.5 kB view details)

Uploaded CPython 3.12macOS 15.0+ x86-64

banditpam-6.0.2-cp312-cp312-macosx_15_0_universal2.whl (12.3 MB view details)

Uploaded CPython 3.12macOS 15.0+ universal2 (ARM64, x86-64)

banditpam-6.0.2-cp312-cp312-macosx_15_0_arm64.whl (12.1 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

banditpam-6.0.2-cp311-cp311-musllinux_1_2_x86_64.whl (11.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

banditpam-6.0.2-cp311-cp311-musllinux_1_2_i686.whl (11.1 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

banditpam-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

banditpam-6.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (13.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

banditpam-6.0.2-cp311-cp311-macosx_15_0_x86_64.whl (304.0 kB view details)

Uploaded CPython 3.11macOS 15.0+ x86-64

banditpam-6.0.2-cp311-cp311-macosx_15_0_universal2.whl (12.3 MB view details)

Uploaded CPython 3.11macOS 15.0+ universal2 (ARM64, x86-64)

banditpam-6.0.2-cp311-cp311-macosx_15_0_arm64.whl (12.1 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

banditpam-6.0.2-cp310-cp310-musllinux_1_2_x86_64.whl (10.9 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

banditpam-6.0.2-cp310-cp310-musllinux_1_2_i686.whl (11.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

banditpam-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

banditpam-6.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (12.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

banditpam-6.0.2-cp310-cp310-macosx_15_0_x86_64.whl (302.5 kB view details)

Uploaded CPython 3.10macOS 15.0+ x86-64

banditpam-6.0.2-cp310-cp310-macosx_15_0_universal2.whl (12.3 MB view details)

Uploaded CPython 3.10macOS 15.0+ universal2 (ARM64, x86-64)

banditpam-6.0.2-cp310-cp310-macosx_15_0_arm64.whl (12.1 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

Details for the file banditpam-6.0.2.tar.gz.

File metadata

  • Download URL: banditpam-6.0.2.tar.gz
  • Upload date:
  • Size: 190.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for banditpam-6.0.2.tar.gz
Algorithm Hash digest
SHA256 97aed9021c63632b41ee6b0c07571d7b5e53f136209775192d37c85ec81fb3f5
MD5 b89a4a6f317de587ee07502da1e85a04
BLAKE2b-256 70dceb71e65d760cccd0df414d1df0b0b2839dfa8a7909634495f9104e70aa5a

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 16062425accfa05649daf47881abe1d419efba0f93479592e120c5b851fd5bb7
MD5 0a1fa23d5a418ad393b4a57c9fa7b9a8
BLAKE2b-256 36fa0ef2b6c74b2f5a2ccfdc2271db33e7289c59b1f71dfc51b93e0a63a42c03

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 24cc0c158dd34c93b18ee965860be02d58fccb168bfdc2b6ab839931a645e9f8
MD5 c160bd39731c2c399547bc3ee7aa0433
BLAKE2b-256 184220bec3972708266600ed924af9378fe483131a002c908eafb05fb9506e50

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a19bd78cc94cf621d53078a0c4238fc745d608cc29d9da62083bc0e0af2e021d
MD5 2f3f610b1ea306c2723b8b491b9a66f7
BLAKE2b-256 546a13058bd5583fc2d8241a2bdd06132beaf3f4db923fee5df8cdd18639f63c

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9752b8cf547b960df27e10e6fa2b5fa586ca62f4ade9adf3b4c40a1d5743d0ca
MD5 21174de9a29993596c81499d7a5e91c6
BLAKE2b-256 d8cfd3c22e53aed508c53e8ec1b16fc297305a6fd56bf584862eb2d91f934524

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp313-cp313-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp313-cp313-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 dc784fbbe9a51d94f46cb43c75afae0c7b450999c3658a31069db07860fda5c7
MD5 4174fdf0d5ca67457c606fcb3eadbb67
BLAKE2b-256 14c1c7bc2558dcf1dcb0022fb9da24de635421905a8059909f78e312f7fe8732

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp313-cp313-macosx_15_0_universal2.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp313-cp313-macosx_15_0_universal2.whl
Algorithm Hash digest
SHA256 fbcb77ffbae610dcad569262256e69bca48a66909ab3a8e9ac295c7b838af500
MD5 b184adbf2234f1e296f017ca4d134791
BLAKE2b-256 26c805b439d860580ee21f418549074ab7b34bc17fb18b88422b93edccc00a0d

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 78245ebf3cde86aaf01de1a1e7a01f68dbaa8244700931307368a91b54c237c4
MD5 8187cb0767a1b7b7d8d0a6149093dc9e
BLAKE2b-256 6e9a3c81c4ce2713fa936a59224bd306d7f8500b48a31dd58f6b1baeeb1b0d72

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 44729a97d52dcef8a0efe26387885016aac95610ea1443808199b6d6b551a136
MD5 4acbc65ffa0985a5180865772d698a2f
BLAKE2b-256 4c37f2174e34c9c3ac57a35534727ee3ca2dec1e36407dda92e55b6aea740fbd

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 9ee4e66a619d2485deade303a7bb67d241607cc57014df4c575a5954b0b7d4ee
MD5 b0f04087d6a54d8a5e2dfe0f3be6a3d3
BLAKE2b-256 76f75f23595eec2fb79dbf0b277cf9ab5727ced4e3943876d602539e0993c074

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aaf04741bc2ece5b25a013fdfcc59874ccbac5e72a9fa25e156ad8877e0c63cf
MD5 cd76a2089f42e5e8ac2a736273781286
BLAKE2b-256 6325e45eb7fb90255a6553796d51927f3fe335131d97bbfa87b03931aedae152

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 bb065edae8bd2daf205860f037fe00f007a819549efeb6f9724f23190bcf4fb9
MD5 e63cd9fde3b583211ad888c80eda5974
BLAKE2b-256 d51d790973c1d72107ac09d9c5ad71dae62f634ff4c3202ea06d91c3c6425ff5

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp312-cp312-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp312-cp312-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 26b057b7a80c097870dd1537aad3135ae2175467e44084630c74d1fa6ede8e11
MD5 78bc823659f24445b54d44d479d97456
BLAKE2b-256 f6b759f78f835ac3b98992142613b1cfe6f4dd264d6e3cdc6e2aa0768763f312

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp312-cp312-macosx_15_0_universal2.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp312-cp312-macosx_15_0_universal2.whl
Algorithm Hash digest
SHA256 54b417176061a13648f232f20610a146768e3c6404940dc02ec70b4070247e85
MD5 c2bbc48794f0acadc6118b54fc08c120
BLAKE2b-256 6f57a6697fb384068af49ae42f6b95b32c2a2b30893b409ce21f5f8d5b2d3336

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 dbb4fdb933d56ae4539077970a5a86e65befbfe0cbbdff9010c8f5ba6f85a1b6
MD5 389131244c21f10424a507098c324f3f
BLAKE2b-256 0a9872df6d1a2ecd7dd5c452151fa3d5c4c8d52d4e8903963abb1d070e2ea77a

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5b64fb8be1efe82feea285baa6e27fbd513279a73cc93dd37ec6c61b792db2ff
MD5 d1b5066d3103a53854f66eeb12464cb5
BLAKE2b-256 40a3786f5f8588f187eec99beb9a0d38ac6d28613da93591aa8599d59f319a75

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 8e3430c3becb2306aad81a7e165d461b43d33c654879e24ee8f67eef815151c7
MD5 e7ac20f42c2de311383649ebad51ad8d
BLAKE2b-256 8566c175575b106d4e79a3514db6f6867f02130d00b413d857315572be4a716b

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 00ad511cf52aca7d050c286cc75218fe990c20f69ee44b661a4fa76578696243
MD5 37b998d72efa1b32df12d05e398f25d5
BLAKE2b-256 fcab84c8a0c1619bb50de29ac903dccb6289312b528311b2a6e9a9a6e6201ba0

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 b7518e2512cc18de7ee04c708c48118ab7bb044dd7dc16b844fc89d5aef0be84
MD5 095536b1c229a8b3fe599af3aab0f68b
BLAKE2b-256 4d13477b05718e3e3332fbc582ae0a23f9f97e5c1b79591721b1779476120d0b

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp311-cp311-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp311-cp311-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 e577c4d48001cd51ede75e7370213234fb365f5df55a0ae700f95d90c85d2ee4
MD5 abaed2602049d4c0f286ecb7165bb098
BLAKE2b-256 8c97b54bee5bc2c51b30f752dfb9414db56fc67ba7f5a98220598b9632458e86

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp311-cp311-macosx_15_0_universal2.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp311-cp311-macosx_15_0_universal2.whl
Algorithm Hash digest
SHA256 2ded803a03cc181adb62d508a690f268c28d09011893283e98cfde2c56804752
MD5 ea1addbc732a46765e1a1bcf4486b97c
BLAKE2b-256 a3bb1b54ab8553fa6f580a18bbdfa05cc67100625c16e6a8e9a0e7ff957daf1d

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 266fecf12e6a5589673577eb8378e7d2352b42025a596f512a3c5262ca6425fd
MD5 db70918af44994258d519c0554dc5c7c
BLAKE2b-256 9d0516bfd9d02aa9e975ce783eb5059da15dbc68ef5e0e1151325ca0365dce33

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 14b52d8319cc1c14ed5f57a3e6fa90376cbd6e1a57f9fa0a481f0039a006fe7c
MD5 505536fb9bd64e634fc495b50a01b613
BLAKE2b-256 448c7fe37d55b533a0eca730c947e3c7774f7f5829d1f35ba27ab40cadcd5e94

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 91004d0688f7dd9cca9e72ba83a3be34b8bcd513b6e9c7fb4bd34582f5a09f5f
MD5 1b99b517cfc82244c481ce67f3e374ba
BLAKE2b-256 9612d7e689c1bd59e97371b915aac0404f63d503b3cf85b4e6a3ceeeac7a4048

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f2f03403a9bff273beadb61f772b362157fee4cd1afbe45bfb42cb4e6625fa01
MD5 166ebfcf1ff961a9bf126b21abe68ec8
BLAKE2b-256 356d77132d5e2a5a7cc2416e1be55f44848e33b6f982d151ebb431d8ce3ee044

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d4e813a13b507e7961f1bf8ed41e151cceb80c3e9cab99383db5757850f90be4
MD5 eb8d745d21c2b7d2ae856a0cd7e391ef
BLAKE2b-256 2bcdc2d49a681f6c7fce3d533b5227e69b61c82f2678cbd16c1fce5e082f80c8

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp310-cp310-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp310-cp310-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 953f31556cd88d6df81456de55ec3297cc843d25ee0c30b90bcb14db07d48019
MD5 a4230cff9d9637f1de518f9d5d5960e9
BLAKE2b-256 9e23b08e0f7b923a58863245b4c98bce14ee378abf9aafbedc85bd79766d4cea

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp310-cp310-macosx_15_0_universal2.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp310-cp310-macosx_15_0_universal2.whl
Algorithm Hash digest
SHA256 87af98d167146c1b93b9ca82bed725c55fb6219c963520b616fb6ebe25196630
MD5 07b26e56c0b705547edebe7f8fbd7a7e
BLAKE2b-256 d964bbcacc1d42e88a1ad72e8e7df7c7ee24b9a24e4712ec43159c79008d7225

See more details on using hashes here.

File details

Details for the file banditpam-6.0.2-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for banditpam-6.0.2-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 406ebbfa3644fe7b3d0759248709d54c65adaeff90baeaef0f700feedb67d499
MD5 c3135989ff9fb80aa98f898c9039f8b1
BLAKE2b-256 2b08a28447f6b54f1dcac352518eb055c21bd2fc393bfbcc9240455b6f3d3ca6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page