[![Build Status](https://github.com/jan-meissner/optimal1dclustering/workflows/build/badge.svg)](https://github.com/jan-meissner/optimal1dclustering/actions)
optimal1dclustering
========
Add *k*-medians and add a minimum cluster size parameter to https://github.com/dstein64/kmeans1d.
A Python library with an implementation of *k*-means and *k*-medians clustering on 1D data, based on the algorithm
from Xiaolin (1991), as presented by Gronlund et al. (2017, Section 2.2).
The algorithm implemented in this library can also find the optimal clustering when clusters are required to have a
minimum cluster size. It still finds the optimal clustering as the cost function is still monge concave.
Globally optimal clustering is NP-hard for multi-dimensional data. Lloyd's algorithm is a
popular approach for finding a locally optimal solution. For 1-dimensional data, there are polynomial
time algorithms. The algorithm implemented here is an *O(kn + n log n)* dynamic programming algorithm
for finding the globally optimal *k* clusters for *n* 1D data points.
The code is written in C++, and wrapped with Python.
Requirements
------------
*optimal1dclustering* supports Python 3.x.
Installation
------------
[optimal1dclustering](https://pypi.python.org/pypi/optimal1dclustering) is available on PyPI, the Python Package Index.
```sh
$ pip3 install optimal1dclustering
```
Example Usage
-------------
```python
import optimal1dclustering
x = [4.0, 4.1, 4.2, -50, 200.2, 200.4, 200.9, 80, 100, 102]
k = 4 # Number of clusters
min_cluster_size = 2 # The minimum number of elements in each cluster
mode = 2 # 2 for k-means; 1 for k-medians
clusters, centroids = optimal1dclustering.cluster(x, k, min_cluster_size = min_cluster_size, mode = mode)
print(clusters) # [0, 1, 1, 0, 3, 3, 3, 2, 2, 2]
print(centroids) # [-23.0, 4.15, 94.0, 200.5]
```
Tests
-----
Tests are in [tests/](https://github.com/jan-meissner/optimal1dclustering/blob/master/tests).
```sh
# Run tests
$ python3 -m unittest discover tests -v
```
Development
-----------
The underlying C++ code can be built in-place, outside the context of `pip`. This requires Python
development tools for building Python modules (e.g., the `python3-dev` package on Ubuntu). `gcc`,
`clang`, and `MSVC` have been tested.
```
$ python3 setup.py build_ext --inplace
```
The [packages](https://github.com/jan-meissner/optimal1dclustering/blob/master/.github/workflows/packages.yml)
GitHub action can be manually triggered (`Actions` > `packages` > `Run workflow`) to build wheels
and a source distribution.
License
-------
The code in this repository has an [MIT License](https://en.wikipedia.org/wiki/MIT_License).
See [LICENSE](https://github.com/jan-meissner/optimal1dclustering/blob/master/LICENSE).
References
----------
[1] Wu, Xiaolin. "Optimal Quantization by Matrix Searching." Journal of Algorithms 12, no. 4
(December 1, 1991): 663
[2] Gronlund, Allan, Kasper Green Larsen, Alexander Mathiasen, Jesper Sindahl Nielsen, Stefan Schneider,
and Mingzhou Song. "Fast Exact K-Means, k-Medians and Bregman Divergence Clustering in 1D."
ArXiv:1701.07204 [Cs], January 25, 2017. http://arxiv.org/abs/1701.07204.
Raw data
{
"_id": null,
"home_page": null,
"name": "optimal1dclustering",
"maintainer": "Jan Mei\u00dfner",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "philipp.meissner@rwth-aachen.de",
"keywords": "k-means, k-median, machine learning, optimization",
"author": "Jan Mei\u00dfner, Daniel Steinberg",
"author_email": "philipp.meissner@rwth-aachen.de, ds@dannyadam.com",
"download_url": "https://files.pythonhosted.org/packages/13/70/f6948bcb96d1085bf305e4107faabbeb1758e400a7f7b5398fa19233d7d6/optimal1dclustering-1.0.2.tar.gz",
"platform": null,
"description": "[![Build Status](https://github.com/jan-meissner/optimal1dclustering/workflows/build/badge.svg)](https://github.com/jan-meissner/optimal1dclustering/actions)\n\noptimal1dclustering\n========\nAdd *k*-medians and add a minimum cluster size parameter to https://github.com/dstein64/kmeans1d.\n\nA Python library with an implementation of *k*-means and *k*-medians clustering on 1D data, based on the algorithm\nfrom Xiaolin (1991), as presented by Gronlund et al. (2017, Section 2.2).\n\nThe algorithm implemented in this library can also find the optimal clustering when clusters are required to have a \nminimum cluster size. It still finds the optimal clustering as the cost function is still monge concave.\n\nGlobally optimal clustering is NP-hard for multi-dimensional data. Lloyd's algorithm is a\npopular approach for finding a locally optimal solution. For 1-dimensional data, there are polynomial\ntime algorithms. The algorithm implemented here is an *O(kn + n log n)* dynamic programming algorithm\nfor finding the globally optimal *k* clusters for *n* 1D data points.\n\nThe code is written in C++, and wrapped with Python.\n\nRequirements\n------------\n\n*optimal1dclustering* supports Python 3.x.\n\nInstallation\n------------\n\n[optimal1dclustering](https://pypi.python.org/pypi/optimal1dclustering) is available on PyPI, the Python Package Index.\n\n```sh\n$ pip3 install optimal1dclustering\n```\n\nExample Usage\n-------------\n\n```python\nimport optimal1dclustering\n\nx = [4.0, 4.1, 4.2, -50, 200.2, 200.4, 200.9, 80, 100, 102]\nk = 4 # Number of clusters\nmin_cluster_size = 2 # The minimum number of elements in each cluster\nmode = 2 # 2 for k-means; 1 for k-medians\n\nclusters, centroids = optimal1dclustering.cluster(x, k, min_cluster_size = min_cluster_size, mode = mode)\n\nprint(clusters) # [0, 1, 1, 0, 3, 3, 3, 2, 2, 2]\nprint(centroids) # [-23.0, 4.15, 94.0, 200.5]\n```\n\nTests\n-----\n\nTests are in [tests/](https://github.com/jan-meissner/optimal1dclustering/blob/master/tests).\n\n```sh\n# Run tests\n$ python3 -m unittest discover tests -v\n```\n\nDevelopment\n-----------\n\nThe underlying C++ code can be built in-place, outside the context of `pip`. This requires Python\ndevelopment tools for building Python modules (e.g., the `python3-dev` package on Ubuntu). `gcc`,\n`clang`, and `MSVC` have been tested.\n\n```\n$ python3 setup.py build_ext --inplace\n```\n\nThe [packages](https://github.com/jan-meissner/optimal1dclustering/blob/master/.github/workflows/packages.yml)\nGitHub action can be manually triggered (`Actions` > `packages` > `Run workflow`) to build wheels\nand a source distribution.\n\nLicense\n-------\n\nThe code in this repository has an [MIT License](https://en.wikipedia.org/wiki/MIT_License).\n\nSee [LICENSE](https://github.com/jan-meissner/optimal1dclustering/blob/master/LICENSE).\n\nReferences\n----------\n\n[1] Wu, Xiaolin. \"Optimal Quantization by Matrix Searching.\" Journal of Algorithms 12, no. 4\n(December 1, 1991): 663\n\n[2] Gronlund, Allan, Kasper Green Larsen, Alexander Mathiasen, Jesper Sindahl Nielsen, Stefan Schneider,\nand Mingzhou Song. \"Fast Exact K-Means, k-Medians and Bregman Divergence Clustering in 1D.\"\nArXiv:1701.07204 [Cs], January 25, 2017. http://arxiv.org/abs/1701.07204.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A Python package for Optimal 1D Clustering",
"version": "1.0.2",
"project_urls": null,
"split_keywords": [
"k-means",
" k-median",
" machine learning",
" optimization"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f18a86a09f402c8a45b4667ed8d48d0dd5008c7e5c621e1801e498a27324bf70",
"md5": "ef892974e3e4e4acdc18fc5c5379dfcc",
"sha256": "732e6a3e623e433aab5e4e431327c4303fbf5d29c84512f9d219bf47481d4ced"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp310-cp310-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "ef892974e3e4e4acdc18fc5c5379dfcc",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 30876,
"upload_time": "2024-06-12T04:13:17",
"upload_time_iso_8601": "2024-06-12T04:13:17.713730Z",
"url": "https://files.pythonhosted.org/packages/f1/8a/86a09f402c8a45b4667ed8d48d0dd5008c7e5c621e1801e498a27324bf70/optimal1dclustering-1.0.2-cp310-cp310-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "95e9e36d436ef367e1b08f2858fe7fc7832ff0d9a5a8b6c163d445fc95ad6ae4",
"md5": "f717864e3ed493b2caa1fda6a339911e",
"sha256": "3df7fc60a2fdd37d4326360008ccbd90b515d8543f054df558f04425007d3d2c"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f717864e3ed493b2caa1fda6a339911e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 136063,
"upload_time": "2024-06-12T04:13:19",
"upload_time_iso_8601": "2024-06-12T04:13:19.151264Z",
"url": "https://files.pythonhosted.org/packages/95/e9/e36d436ef367e1b08f2858fe7fc7832ff0d9a5a8b6c163d445fc95ad6ae4/optimal1dclustering-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "87cae11d9d3bbae32ccde0903aa0980651256a9563e3e182a9a64b6556bcf280",
"md5": "d5789e5b1f5b99d872c75b9fe16606b0",
"sha256": "d3274841cb1c76091c1ca1b2d417317032de541fc24c26ca3ce0496c9785f2c3"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "d5789e5b1f5b99d872c75b9fe16606b0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.6",
"size": 19968,
"upload_time": "2024-06-12T04:13:20",
"upload_time_iso_8601": "2024-06-12T04:13:20.567732Z",
"url": "https://files.pythonhosted.org/packages/87/ca/e11d9d3bbae32ccde0903aa0980651256a9563e3e182a9a64b6556bcf280/optimal1dclustering-1.0.2-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "59945970b4b2f7b4b0d6fa1b42080a2f3cad34ae3d9447019741f0cfcd0a2397",
"md5": "921c6642cca4ae86f6ec6f2ae907ee3c",
"sha256": "14a4e7d676bb9febb3d5002241f3c1a6c3d04e0910a1772cc0b53614451329e2"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp311-cp311-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "921c6642cca4ae86f6ec6f2ae907ee3c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 30880,
"upload_time": "2024-06-12T04:13:21",
"upload_time_iso_8601": "2024-06-12T04:13:21.537701Z",
"url": "https://files.pythonhosted.org/packages/59/94/5970b4b2f7b4b0d6fa1b42080a2f3cad34ae3d9447019741f0cfcd0a2397/optimal1dclustering-1.0.2-cp311-cp311-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e85ff0c4b30a2f9fce94e2e1c6572ad6bedad52ee2464891e56a1f6d9f646047",
"md5": "f9ac220ce104ef5e3066315fa4cbb0fd",
"sha256": "bd35d43d645b3146323821935a6108ecd10f9fd31882e1c2c8f1309a22368e23"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f9ac220ce104ef5e3066315fa4cbb0fd",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 136784,
"upload_time": "2024-06-12T04:13:22",
"upload_time_iso_8601": "2024-06-12T04:13:22.776750Z",
"url": "https://files.pythonhosted.org/packages/e8/5f/f0c4b30a2f9fce94e2e1c6572ad6bedad52ee2464891e56a1f6d9f646047/optimal1dclustering-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "26c8e842d76cc168d8fb3d8461382368526dacfb7a6b6d017801ab6da6c16404",
"md5": "a5b5c548a8c9bf45ca173b7e88c054b7",
"sha256": "ae581796ff7543a4166da294c955a013069a204f3ba288bfe93fbd6b63af7dcf"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "a5b5c548a8c9bf45ca173b7e88c054b7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.6",
"size": 19971,
"upload_time": "2024-06-12T04:13:24",
"upload_time_iso_8601": "2024-06-12T04:13:24.114110Z",
"url": "https://files.pythonhosted.org/packages/26/c8/e842d76cc168d8fb3d8461382368526dacfb7a6b6d017801ab6da6c16404/optimal1dclustering-1.0.2-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e5e33856dcc603fc08770c36c2314c071fe4f5a928869916469d0fcba2671dfb",
"md5": "3073d5deb0cbcddec91191c0b56d031e",
"sha256": "63ce94f120a9f9523b96635c86c8c489e89362ccf3c0fc02452c896776a91da0"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp312-cp312-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "3073d5deb0cbcddec91191c0b56d031e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 30877,
"upload_time": "2024-06-12T04:13:25",
"upload_time_iso_8601": "2024-06-12T04:13:25.186858Z",
"url": "https://files.pythonhosted.org/packages/e5/e3/3856dcc603fc08770c36c2314c071fe4f5a928869916469d0fcba2671dfb/optimal1dclustering-1.0.2-cp312-cp312-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9391d189bde19e970e89eb77f6d3e9392c21c91704ac91707eeaa36c4b1ce2e0",
"md5": "89be713b3117003f9a50b7a0aea4ba06",
"sha256": "7bcefe38eaafdd174564594e2f40225708e7821509d6e63396f7c06ea561e116"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "89be713b3117003f9a50b7a0aea4ba06",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 136523,
"upload_time": "2024-06-12T04:13:26",
"upload_time_iso_8601": "2024-06-12T04:13:26.416447Z",
"url": "https://files.pythonhosted.org/packages/93/91/d189bde19e970e89eb77f6d3e9392c21c91704ac91707eeaa36c4b1ce2e0/optimal1dclustering-1.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d8a897264883ae51ce0492833c24e167110a1726f92eafa7f72663bef3dc63a2",
"md5": "6bff0e12ef6ec9a877d32929be338297",
"sha256": "5aece70e9277dc3091af8037798ea9e709cf3695cf24ed31ae2534fd39220ff7"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "6bff0e12ef6ec9a877d32929be338297",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.6",
"size": 19972,
"upload_time": "2024-06-12T04:13:28",
"upload_time_iso_8601": "2024-06-12T04:13:28.221499Z",
"url": "https://files.pythonhosted.org/packages/d8/a8/97264883ae51ce0492833c24e167110a1726f92eafa7f72663bef3dc63a2/optimal1dclustering-1.0.2-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c9fea0189218e36c3118d5e066afe4eb93bbfe3e242b982fd30acd55a8475bde",
"md5": "f3ab93d330fe64976a8200bd9b4a5416",
"sha256": "3bba541a504a235f6559e602831b3126f81997f3679e186c4353a787e5ac29b5"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f3ab93d330fe64976a8200bd9b4a5416",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.6",
"size": 136177,
"upload_time": "2024-06-12T04:13:29",
"upload_time_iso_8601": "2024-06-12T04:13:29.533090Z",
"url": "https://files.pythonhosted.org/packages/c9/fe/a0189218e36c3118d5e066afe4eb93bbfe3e242b982fd30acd55a8475bde/optimal1dclustering-1.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6912de862d1587b07f8853688913eda629053fa8e0f23d6d7a20d065dd18596e",
"md5": "f3acf854d35336d0a4e812131bcf80db",
"sha256": "26aaaaed03f403323c09631348df500bebb68f7ee19d293dbbbcbf8b68abfe7c"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp36-cp36m-win_amd64.whl",
"has_sig": false,
"md5_digest": "f3acf854d35336d0a4e812131bcf80db",
"packagetype": "bdist_wheel",
"python_version": "cp36",
"requires_python": ">=3.6",
"size": 20125,
"upload_time": "2024-06-12T04:13:30",
"upload_time_iso_8601": "2024-06-12T04:13:30.873601Z",
"url": "https://files.pythonhosted.org/packages/69/12/de862d1587b07f8853688913eda629053fa8e0f23d6d7a20d065dd18596e/optimal1dclustering-1.0.2-cp36-cp36m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8d6ee6475a524649cbdee4c09f82f966c62ed766fc83391b3cc4a0efee27b693",
"md5": "5b84a7d30e17684e6a34ba36a1d5e54e",
"sha256": "63b5a04c330ed18a70d9fbc8cab3333f985d5faf6e25e028db331e83a6bf60c0"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "5b84a7d30e17684e6a34ba36a1d5e54e",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 137084,
"upload_time": "2024-06-12T04:13:32",
"upload_time_iso_8601": "2024-06-12T04:13:32.262823Z",
"url": "https://files.pythonhosted.org/packages/8d/6e/e6475a524649cbdee4c09f82f966c62ed766fc83391b3cc4a0efee27b693/optimal1dclustering-1.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7bfe992d01428f2779997343be68c5b057c918b056185d5df4063948b29ef6e2",
"md5": "139af352c376e1f5a780342983705d49",
"sha256": "26455a743380d180439b0f215fcc2127f988cb57215212d5150b096351461eab"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "139af352c376e1f5a780342983705d49",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.6",
"size": 19969,
"upload_time": "2024-06-12T04:13:33",
"upload_time_iso_8601": "2024-06-12T04:13:33.677077Z",
"url": "https://files.pythonhosted.org/packages/7b/fe/992d01428f2779997343be68c5b057c918b056185d5df4063948b29ef6e2/optimal1dclustering-1.0.2-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f3e695acb3a68f3531aea8f511d9be039d62f81ebc281e539400b9e87252df62",
"md5": "8e1e47421aff841310a63f9afbdb67ed",
"sha256": "cd9024d0f390a0f4a94ea24c1c3ad7ce0d8e2ad339a4e8dc675804c8350765e5"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp38-cp38-macosx_11_0_universal2.whl",
"has_sig": false,
"md5_digest": "8e1e47421aff841310a63f9afbdb67ed",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 30861,
"upload_time": "2024-06-12T04:13:34",
"upload_time_iso_8601": "2024-06-12T04:13:34.695939Z",
"url": "https://files.pythonhosted.org/packages/f3/e6/95acb3a68f3531aea8f511d9be039d62f81ebc281e539400b9e87252df62/optimal1dclustering-1.0.2-cp38-cp38-macosx_11_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5b6a0e9c7acf308834a85921565bbde39abca2f8ab6e72225c926fe30525f320",
"md5": "aba02eda1fb30bd6dac99259dd416d4f",
"sha256": "5495e83a71a3abf68c202afcdbd9c6ac8d55ca9a9e42d9f9baa4bc47bdc3c7f3"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "aba02eda1fb30bd6dac99259dd416d4f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 136056,
"upload_time": "2024-06-12T04:13:35",
"upload_time_iso_8601": "2024-06-12T04:13:35.556483Z",
"url": "https://files.pythonhosted.org/packages/5b/6a/0e9c7acf308834a85921565bbde39abca2f8ab6e72225c926fe30525f320/optimal1dclustering-1.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e1220e3cfacd13b6b260bfe0db05719b394b55f297c074c9d83cac7c6586581c",
"md5": "b21f4f2a55e40ccfad695113bb7c63dd",
"sha256": "327aca87b2d12c5dd40906dbf225c7735cd16e45f5bc85fd12cf154eb47a2796"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "b21f4f2a55e40ccfad695113bb7c63dd",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.6",
"size": 19968,
"upload_time": "2024-06-12T04:13:36",
"upload_time_iso_8601": "2024-06-12T04:13:36.830666Z",
"url": "https://files.pythonhosted.org/packages/e1/22/0e3cfacd13b6b260bfe0db05719b394b55f297c074c9d83cac7c6586581c/optimal1dclustering-1.0.2-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ae992fcad1d3d25b897067dc3173c7f8af1e772db7ec6b998cdc7c362a4375d3",
"md5": "db5d4c4a5106c5118c5379c02293ab2f",
"sha256": "b8c7a7ad9df52f4d540b9fb2627a9b380c03aab534b04f59664d46cfc4b328b3"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp39-cp39-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "db5d4c4a5106c5118c5379c02293ab2f",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 30873,
"upload_time": "2024-06-12T04:13:37",
"upload_time_iso_8601": "2024-06-12T04:13:37.847374Z",
"url": "https://files.pythonhosted.org/packages/ae/99/2fcad1d3d25b897067dc3173c7f8af1e772db7ec6b998cdc7c362a4375d3/optimal1dclustering-1.0.2-cp39-cp39-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f0ee02175fc043cc037754d86b7d2bbfaff5e06fe6bc191b685d6895f22f2e7a",
"md5": "1f0fbe75820ea0c9b82ef98510e085d1",
"sha256": "de475b17a76f5a9155b5da7bb04a92da07f68e9ccf10008fe797ea6b74cb092e"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1f0fbe75820ea0c9b82ef98510e085d1",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 135914,
"upload_time": "2024-06-12T04:13:39",
"upload_time_iso_8601": "2024-06-12T04:13:39.130735Z",
"url": "https://files.pythonhosted.org/packages/f0/ee/02175fc043cc037754d86b7d2bbfaff5e06fe6bc191b685d6895f22f2e7a/optimal1dclustering-1.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "eff132db9d536a1f734d411d1cd7af8e952dfcb42beb9086b830a6c2ed75db24",
"md5": "fe0035f23bd91e1cc4567e40b218dc24",
"sha256": "867ca7481d74ac3bc7ef84acb9ba73fc54624e8ba23d257a3d8b8a86398db823"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "fe0035f23bd91e1cc4567e40b218dc24",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.6",
"size": 19966,
"upload_time": "2024-06-12T04:13:40",
"upload_time_iso_8601": "2024-06-12T04:13:40.158160Z",
"url": "https://files.pythonhosted.org/packages/ef/f1/32db9d536a1f734d411d1cd7af8e952dfcb42beb9086b830a6c2ed75db24/optimal1dclustering-1.0.2-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1370f6948bcb96d1085bf305e4107faabbeb1758e400a7f7b5398fa19233d7d6",
"md5": "118f1f6796ce66c894cddc7564919b5b",
"sha256": "bf0f8e57d33d183a6fe1f7ed44a9c1022c9ee598b958d24144ed66f363d58dab"
},
"downloads": -1,
"filename": "optimal1dclustering-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "118f1f6796ce66c894cddc7564919b5b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 10392,
"upload_time": "2024-06-12T04:13:41",
"upload_time_iso_8601": "2024-06-12T04:13:41.232469Z",
"url": "https://files.pythonhosted.org/packages/13/70/f6948bcb96d1085bf305e4107faabbeb1758e400a7f7b5398fa19233d7d6/optimal1dclustering-1.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-12 04:13:41",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "optimal1dclustering"
}