SHiP-framework


NameSHiP-framework JSON
Version 0.1.2 PyPI version JSON
download
home_pageNone
SummaryCenter-based hierarchical clustering framework using 3 steps: compute a Similarity, build an Hierarchy, and lastly extract a clustering using a Partitioning method.
upload_time2025-10-23 16:23:41
maintainerNone
docs_urlNone
authorPascal Weber
requires_python>=3.9
licenseBSD-3-Clause License
keywords clustering hierarchical clustering hierarchical clustering framework agglomerative clustering similarity hierarchy partitioning ship framework ship python c++ pybind11
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Similarity-Hierarchical-Partitioning (SHiP) Clustering Framework
[![PyPI version](https://badge.fury.io/py/SHiP-framework.svg)](https://pypi.org/project/SHiP-framework/)
[![Tests](https://github.com/pasiweber/SHiP-framework/actions/workflows/publish_to_pypi.yml/badge.svg)](https://github.com/pasiweber/SHiP-framework/actions/workflows/publish_to_pypi.yml)
[![Docs](https://readthedocs.org/projects/SHiP-framework/badge/?version=latest)](https://SHiP-framework.readthedocs.io/en/)

This repository is the official implementation of the Similarity-Hierarchical-Partitioning (SHiP) clustering framework proposed in [Ultrametric Cluster Hierarchies: I Want `em All!](https://github.com/pasiweber/SHiP-framework/) This framework provides a comprehensive approach to clustering by leveraging similarity trees, $(k,z)$-hierarchies, and various partitioning objective functions. 

The whole project is implemented in C++ and Python bindings enable the usage within Python.


## Overview
The SHiP framework operates in three main stages:
[![SHiP framework overview](https://raw.githubusercontent.com/pasiweber/SHiP-framework/main/docs/ClusterFrameworkOverview.png)](https://github.com/pasiweber/SHiP-framework/)

1. **Similarity Tree Construction:** A similarity tree is built for the given dataset. This tree represents the relationships and proximities between data points. Note that the default constructed tree corresponds to the $k$-center hierarchy (Section 3 in the paper).
2. **$(k,z)$-Hierarchy Construction:** Using the similarity tree, a $(k,z)$-hierarchy can be constructed. These hierarchies correlate to common center based clustering methods, as e.g., $k$-median or $k$-means (Section 4).
3. **Partitioning:** Finally, the data is partitioned based on the constructed hierarchy and a user-selected partitioning objective function (Section 5).


## Features
- **Similarity Trees:** The package provides a set of similarity/ultrametric tree implementations:
  - `DCTree` [[1]](#references)
  - `HST` [[2]](#references)
  - `CoverTree` [[3]](#references)
  - `KDTree` [[3]](#references)
  - `MeanSplitKDTree` [[3]](#references)
  - `BallTree` [[3]](#references)
  - `MeanSplitBallTree` [[3]](#references)
  - `RPTree` [[3]](#references)
  - `MaxRPTree` [[3]](#references)
  - `UBTree` [[3]](#references)
  - `RTree` [[3]](#references)
  - `RStarTree` [[3]](#references)
  - `XTree` [[3]](#references)
  - `HilbertRTree` [[3]](#references)
  - `RPlusTree` [[3]](#references)
  - `RPlusPlusTree` [[3]](#references)
  - Or use `LoadTree` to load a precomputed tree


- **$(k,z)$-Hierarchies:** It supports all possible $(k,z)$-hierarchies, allowing flexibility in choosing the most suitable hierarchy for a given dataset.
  - $z = 0$ → $k$-center (actually in theory: $z = ∞$, but in this implementation we use 0 for $∞$)
  - $z = 1$ → $k$-median
  - $z = 2$ → $k$-means
  - ...

- **Partitioning Functions:** A wide range of partitioning functions are available, enabling users to select the most appropriate function based on their specific needs:
  - `K`
  - `Elbow`
  - `Threshold`
  - `ThresholdElbow`
  - `QCoverage`
  - `QCoverageElbow`
  - `QStem`
  - `QStemElbow`
  - `LcaNoiseElbow`
  - `LcaNoiseElbowNoTriangle`
  - `MedianOfElbows`
  - `MeanOfElbows`
  - `Stability`
  - `NormalizedStability`

- **Customization:** Users can customize the framework by selecting from the available similarity trees, $(k,z)$-
hierarchies, and partitioning functions.
  - E.g., `DCTree` with $k$-means ($z=2$)-hierarchy and the `Elbow` partitioning method.
    ```python
    from SHiP import SHiP

    # Build the `DCTree`
    ship = SHiP(data=data_points, treeType="DCTree")
    # Extract the clustering from the $k$-median hierarchy and the `Elbow` partitioning method
    labels = ship.fit_predict(hierarchy=2, partitioningMethod="Elbow")
    ```


## Installation
### Stable Version
The current stable version can be installed by the following command:<br/>
`pip install SHiP-framework` (coming soon)

Note that a gcc compiler is required for installation.
Therefore, in case of an installation error, make sure that:
- Windows: [Microsoft C++ Build Tools](https://visualstudio.microsoft.com/de/visual-cpp-build-tools/) is installed
- Linux/Mac: Python dev is installed (e.g., by running `apt-get install python-dev` - the exact command may differ depending on the linux distribution)

The error messages may look like this:
```
error: command 'gcc' failed: No such file or directory
Could not build wheels for SHiP-framework, which is required to install pyproject.toml-based projects
Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools
```


### Development Version
The current development version can be installed directly from git by executing:<br/>
`sudo pip install git+https://github.com/pasiweber/SHiP-framework.git`

Alternatively, clone the repository, go to the root directory and execute:<br/>
`pip install .`


## Code Example
```python
from SHiP import SHiP

ship = SHiP(data=data, treeType="DCTree")

# or to load a saved tree
ship = SHiP(data=data, treeType="LoadTree", config={"json_tree_filepath": "<file_path>"}) 
# or additionally specify the tree_type of the loaded tree by adding {"tree_type": "DCTree"}

ship.hierarchy = 0
ship.partitioningMethod = "K"
labels = ship.fit_predict()

# or in one line
labels = ship.fit_predict(hierarchy = 1, partitioningMethod = "Elbow")

# optional: save the current computed tree
json = ship.get_tree().to_json()
```


## Results
Our framework achieves the following performance:

Dataset | DC-0-Stab. | DC-1-MoE | DC-2-Elb. | CT-0-Stab. | CT-1-MoE | CT-2-Elb. | $k$-means | SCAR | Ward | AMD-DBSCAN | DPC |
|-|-|-|-|-|-|-|-|-|-|-|-|
| Boxes | 90.1 | **99.3** | _97.9_ | 2.6 | 42.1 ± 4.7 | 24.2 ± 1.6 | 93.5 ± 4.3 | 0.1 ± 0.1 | 95.8 | 63.9 | 25.9 |
| D31 | 79.7 | 42.7 | 82.9 | 46.5 ± 1.8 | 62.0 ± 5.4 | 67.7 ± 3.2 | **92.0 ± 2.7** | 41.7 ± 5.4 | **92.0** | _86.4_ | 18.5 |
| airway | 38.0 | **65.9** | 58.8 | 0.8 | 18.2 ± 2.4 | 12.0 ± 1.4 | 39.9 ± 2.0 | -0.9 ± 0.5 | 43.7 | 31.7 | _65.1_ |
| lactate | 41.0 | 41.0 | _67.5_ | 0.1 | 4.1 ± 0.6 | 1.7 ± 0.2 | 28.6 ± 1.1 | 1.5 ± 1.0 | 27.7 | **71.5** | 0.0 |
| HAR | 30.0 | 46.9 | **52.8** | 14.7 ± 8.8 | 14.2 ± 4.7 | 9.6 ± 2.2 | 46.0 ± 4.5 | 5.5 ± 3.2 | _49.1_ | 0.0 | 33.2 |
| letterrec. | 12.1 | _16.6_ | **17.9** | 5.8 ± 0.2 | 7.2 ± 0.6 | 6.2 ± 0.3 | 12.9 ± 0.6 | 0.4 ± 0.1 | 14.7 ± 0.9 | 7.9 | 0.0 |
| PenDigits | 66.4 | _73.1_ | **75.4** | 8.0 ± 0.8 | 12.0 ± 0.6 | 8.9 ± 0.5 | 55.3 ± 3.2 | 0.9 ± 0.3 | 55.2 | 55.6 | 28.8 ± 1.1 |
| COIL20 | **81.2** | _72.8_ | 72.6 | 46.4 ± 4.4 | 46.6 ± 2.1 | 47.7 ± 2.0 | 58.2 ± 2.8 | 33.5 ± 2.0 | 68.6 | 39.2 | 35.9 ± 0.1 |
| COIL100 | **80.1** | 66.8 | _70.0_ | 44.6 ± 4.2 | 46.6 ± 1.5 | 50.1 ± 1.2 | 56.1 ± 1.4 | 16.7 ± 0.8 | 61.4 | 14.2 | 0.2 |
| cmu_faces | 60.2 | 56.6 | **66.5** | 8.6 ± 3.1 | 37.1 ± 4.1 | 34.2 ± 2.1 | 53.2 ± 4.7 | 38.5 ± 2.9 | _61.6_ | 0.7 | 0.6 |
| OptDigits | 55.3 | **77.0** | **77.0** | 40.9 ± 3.5 | 20.9 ± 2.3 | 18.1 ± 2.4 | 61.3 ± 6.6 | 14.4 ± 4.1 | _74.6 ± 2.4_ | 63.2 | 0.0 |
| USPS | 33.7 | 29.3 | 29.3 | 12.0 ± 1.7 | 8.7 ± 1.0 | 11.2 ± 1.5 | _52.3 ± 1.7_ | 2.9 ± 0.9 | **63.9** | 0.0 | 21.0 |
| MNIST | 19.7 | 41.7 | _46.0_ | 11.1 ± 1.7 | 5.4 ± 0.6 | 5.4 ± 0.6 | 36.9 ± 1.0 | 1.3 ± 0.4 | **52.7** | 0.0 | - |

- `DC = DCTree`, `CT = CoverTree`
- `Stab. = Stability`, `MoE = MedianOfElbows`, `Elb. = Elbow`
- Competitors: [k-means](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html), [SCAR](https://github.com/SpectralClusteringAcceleratedRobust/SCAR), [Ward](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html), [AMD-DBSCAN](https://github.com/AlexandreWANG915/AMD-DBSCAN), [DPC](https://github.com/colinwke/dpca)


## License
The project is licensed under the BSD 3-Clause License (see [LICENSE.txt](https://github.com/pasiweber/SHiP-framework/blob/main/LICENSE.txt)).


## References
[1] [Connecting the Dots -- Density-Connectivity Distance unifies DBSCAN, k-Center and Spectral Clustering](https://epub.ub.uni-muenchen.de/123737/)
<br>
[2] [HST+: An Efficient Index for Embedding Arbitrary Metric Spaces](https://ieeexplore.ieee.org/document/9458703/)
([Github](https://github.com/yzengal/ICDE21-HST))
<br>
[3] [mlpack 4: a fast, header-only C++ machine learning library](https://joss.theoj.org/papers/10.21105/joss.05026) 
([Github](https://github.com/mlpack/mlpack))

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "SHiP-framework",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "clustering, hierarchical clustering, hierarchical clustering framework, agglomerative clustering, similarity, hierarchy, partitioning, SHiP framework, SHiP, Python, C++, pybind11",
    "author": "Pascal Weber",
    "author_email": "Pascal Weber <pasi.weber@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/c6/67/4d6002a8c7306ccf28f952093752f066ff293e1100d746baf254a28ee5f0/ship_framework-0.1.2.tar.gz",
    "platform": null,
    "description": "# Similarity-Hierarchical-Partitioning (SHiP) Clustering Framework\n[![PyPI version](https://badge.fury.io/py/SHiP-framework.svg)](https://pypi.org/project/SHiP-framework/)\n[![Tests](https://github.com/pasiweber/SHiP-framework/actions/workflows/publish_to_pypi.yml/badge.svg)](https://github.com/pasiweber/SHiP-framework/actions/workflows/publish_to_pypi.yml)\n[![Docs](https://readthedocs.org/projects/SHiP-framework/badge/?version=latest)](https://SHiP-framework.readthedocs.io/en/)\n\nThis repository is the official implementation of the Similarity-Hierarchical-Partitioning (SHiP) clustering framework proposed in [Ultrametric Cluster Hierarchies: I Want `em All!](https://github.com/pasiweber/SHiP-framework/) This framework provides a comprehensive approach to clustering by leveraging similarity trees, $(k,z)$-hierarchies, and various partitioning objective functions. \n\nThe whole project is implemented in C++ and Python bindings enable the usage within Python.\n\n\n## Overview\nThe SHiP framework operates in three main stages:\n[![SHiP framework overview](https://raw.githubusercontent.com/pasiweber/SHiP-framework/main/docs/ClusterFrameworkOverview.png)](https://github.com/pasiweber/SHiP-framework/)\n\n1. **Similarity Tree Construction:** A similarity tree is built for the given dataset. This tree represents the relationships and proximities between data points. Note that the default constructed tree corresponds to the $k$-center hierarchy (Section 3 in the paper).\n2. **$(k,z)$-Hierarchy Construction:** Using the similarity tree, a $(k,z)$-hierarchy can be constructed. These hierarchies correlate to common center based clustering methods, as e.g., $k$-median or $k$-means (Section 4).\n3. **Partitioning:** Finally, the data is partitioned based on the constructed hierarchy and a user-selected partitioning objective function (Section 5).\n\n\n## Features\n- **Similarity Trees:** The package provides a set of similarity/ultrametric tree implementations:\n  - `DCTree` [[1]](#references)\n  - `HST` [[2]](#references)\n  - `CoverTree` [[3]](#references)\n  - `KDTree` [[3]](#references)\n  - `MeanSplitKDTree` [[3]](#references)\n  - `BallTree` [[3]](#references)\n  - `MeanSplitBallTree` [[3]](#references)\n  - `RPTree` [[3]](#references)\n  - `MaxRPTree` [[3]](#references)\n  - `UBTree` [[3]](#references)\n  - `RTree` [[3]](#references)\n  - `RStarTree` [[3]](#references)\n  - `XTree` [[3]](#references)\n  - `HilbertRTree` [[3]](#references)\n  - `RPlusTree` [[3]](#references)\n  - `RPlusPlusTree` [[3]](#references)\n  - Or use `LoadTree` to load a precomputed tree\n\n\n- **$(k,z)$-Hierarchies:** It supports all possible $(k,z)$-hierarchies, allowing flexibility in choosing the most suitable hierarchy for a given dataset.\n  - $z = 0$ &rarr; $k$-center (actually in theory: $z = \u221e$, but in this implementation we use 0 for $\u221e$)\n  - $z = 1$ &rarr; $k$-median\n  - $z = 2$ &rarr; $k$-means\n  - ...\n\n- **Partitioning Functions:** A wide range of partitioning functions are available, enabling users to select the most appropriate function based on their specific needs:\n  - `K`\n  - `Elbow`\n  - `Threshold`\n  - `ThresholdElbow`\n  - `QCoverage`\n  - `QCoverageElbow`\n  - `QStem`\n  - `QStemElbow`\n  - `LcaNoiseElbow`\n  - `LcaNoiseElbowNoTriangle`\n  - `MedianOfElbows`\n  - `MeanOfElbows`\n  - `Stability`\n  - `NormalizedStability`\n\n- **Customization:** Users can customize the framework by selecting from the available similarity trees, $(k,z)$-\nhierarchies, and partitioning functions.\n  - E.g., `DCTree` with $k$-means ($z=2$)-hierarchy and the `Elbow` partitioning method.\n    ```python\n    from SHiP import SHiP\n\n    # Build the `DCTree`\n    ship = SHiP(data=data_points, treeType=\"DCTree\")\n    # Extract the clustering from the $k$-median hierarchy and the `Elbow` partitioning method\n    labels = ship.fit_predict(hierarchy=2, partitioningMethod=\"Elbow\")\n    ```\n\n\n## Installation\n### Stable Version\nThe current stable version can be installed by the following command:<br/>\n`pip install SHiP-framework` (coming soon)\n\nNote that a gcc compiler is required for installation.\nTherefore, in case of an installation error, make sure that:\n- Windows: [Microsoft C++ Build Tools](https://visualstudio.microsoft.com/de/visual-cpp-build-tools/) is installed\n- Linux/Mac: Python dev is installed (e.g., by running `apt-get install python-dev` - the exact command may differ depending on the linux distribution)\n\nThe error messages may look like this:\n```\nerror: command 'gcc' failed: No such file or directory\nCould not build wheels for SHiP-framework, which is required to install pyproject.toml-based projects\nMicrosoft Visual C++ 14.0 or greater is required. Get it with \"Microsoft C++ Build Tools\n```\n\n\n### Development Version\nThe current development version can be installed directly from git by executing:<br/>\n`sudo pip install git+https://github.com/pasiweber/SHiP-framework.git`\n\nAlternatively, clone the repository, go to the root directory and execute:<br/>\n`pip install .`\n\n\n## Code Example\n```python\nfrom SHiP import SHiP\n\nship = SHiP(data=data, treeType=\"DCTree\")\n\n# or to load a saved tree\nship = SHiP(data=data, treeType=\"LoadTree\", config={\"json_tree_filepath\": \"<file_path>\"}) \n# or additionally specify the tree_type of the loaded tree by adding {\"tree_type\": \"DCTree\"}\n\nship.hierarchy = 0\nship.partitioningMethod = \"K\"\nlabels = ship.fit_predict()\n\n# or in one line\nlabels = ship.fit_predict(hierarchy = 1, partitioningMethod = \"Elbow\")\n\n# optional: save the current computed tree\njson = ship.get_tree().to_json()\n```\n\n\n## Results\nOur framework achieves the following performance:\n\nDataset | DC-0-Stab. | DC-1-MoE | DC-2-Elb. | CT-0-Stab. | CT-1-MoE | CT-2-Elb. | $k$-means | SCAR | Ward | AMD-DBSCAN | DPC |\n|-|-|-|-|-|-|-|-|-|-|-|-|\n| Boxes | 90.1 | **99.3** | _97.9_ | 2.6 | 42.1 \u00b1 4.7 | 24.2 \u00b1 1.6 | 93.5 \u00b1 4.3 | 0.1 \u00b1 0.1 | 95.8 | 63.9 | 25.9 |\n| D31 | 79.7 | 42.7 | 82.9 | 46.5 \u00b1 1.8 | 62.0 \u00b1 5.4 | 67.7 \u00b1 3.2 | **92.0 \u00b1 2.7** | 41.7 \u00b1 5.4 | **92.0** | _86.4_ | 18.5 |\n| airway | 38.0 | **65.9** | 58.8 | 0.8 | 18.2 \u00b1 2.4 | 12.0 \u00b1 1.4 | 39.9 \u00b1 2.0 | -0.9 \u00b1 0.5 | 43.7 | 31.7 | _65.1_ |\n| lactate | 41.0 | 41.0 | _67.5_ | 0.1 | 4.1 \u00b1 0.6 | 1.7 \u00b1 0.2 | 28.6 \u00b1 1.1 | 1.5 \u00b1 1.0 | 27.7 | **71.5** | 0.0 |\n| HAR | 30.0 | 46.9 | **52.8** | 14.7 \u00b1 8.8 | 14.2 \u00b1 4.7 | 9.6 \u00b1 2.2 | 46.0 \u00b1 4.5 | 5.5 \u00b1 3.2 | _49.1_ | 0.0 | 33.2 |\n| letterrec. | 12.1 | _16.6_ | **17.9** | 5.8 \u00b1 0.2 | 7.2 \u00b1 0.6 | 6.2 \u00b1 0.3 | 12.9 \u00b1 0.6 | 0.4 \u00b1 0.1 | 14.7 \u00b1 0.9 | 7.9 | 0.0 |\n| PenDigits | 66.4 | _73.1_ | **75.4** | 8.0 \u00b1 0.8 | 12.0 \u00b1 0.6 | 8.9 \u00b1 0.5 | 55.3 \u00b1 3.2 | 0.9 \u00b1 0.3 | 55.2 | 55.6 | 28.8 \u00b1 1.1 |\n| COIL20 | **81.2** | _72.8_ | 72.6 | 46.4 \u00b1 4.4 | 46.6 \u00b1 2.1 | 47.7 \u00b1 2.0 | 58.2 \u00b1 2.8 | 33.5 \u00b1 2.0 | 68.6 | 39.2 | 35.9 \u00b1 0.1 |\n| COIL100 | **80.1** | 66.8 | _70.0_ | 44.6 \u00b1 4.2 | 46.6 \u00b1 1.5 | 50.1 \u00b1 1.2 | 56.1 \u00b1 1.4 | 16.7 \u00b1 0.8 | 61.4 | 14.2 | 0.2 |\n| cmu_faces | 60.2 | 56.6 | **66.5** | 8.6 \u00b1 3.1 | 37.1 \u00b1 4.1 | 34.2 \u00b1 2.1 | 53.2 \u00b1 4.7 | 38.5 \u00b1 2.9 | _61.6_ | 0.7 | 0.6 |\n| OptDigits | 55.3 | **77.0** | **77.0** | 40.9 \u00b1 3.5 | 20.9 \u00b1 2.3 | 18.1 \u00b1 2.4 | 61.3 \u00b1 6.6 | 14.4 \u00b1 4.1 | _74.6 \u00b1 2.4_ | 63.2 | 0.0 |\n| USPS | 33.7 | 29.3 | 29.3 | 12.0 \u00b1 1.7 | 8.7 \u00b1 1.0 | 11.2 \u00b1 1.5 | _52.3 \u00b1 1.7_ | 2.9 \u00b1 0.9 | **63.9** | 0.0 | 21.0 |\n| MNIST | 19.7 | 41.7 | _46.0_ | 11.1 \u00b1 1.7 | 5.4 \u00b1 0.6 | 5.4 \u00b1 0.6 | 36.9 \u00b1 1.0 | 1.3 \u00b1 0.4 | **52.7** | 0.0 | - |\n\n- `DC = DCTree`, `CT = CoverTree`\n- `Stab. = Stability`, `MoE = MedianOfElbows`, `Elb. = Elbow`\n- Competitors: [k-means](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html), [SCAR](https://github.com/SpectralClusteringAcceleratedRobust/SCAR), [Ward](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html), [AMD-DBSCAN](https://github.com/AlexandreWANG915/AMD-DBSCAN), [DPC](https://github.com/colinwke/dpca)\n\n\n## License\nThe project is licensed under the BSD 3-Clause License (see [LICENSE.txt](https://github.com/pasiweber/SHiP-framework/blob/main/LICENSE.txt)).\n\n\n## References\n[1] [Connecting the Dots -- Density-Connectivity Distance unifies DBSCAN, k-Center and Spectral Clustering](https://epub.ub.uni-muenchen.de/123737/)\n<br>\n[2] [HST+: An Efficient Index for Embedding Arbitrary Metric Spaces](https://ieeexplore.ieee.org/document/9458703/)\n([Github](https://github.com/yzengal/ICDE21-HST))\n<br>\n[3] [mlpack 4: a fast, header-only C++ machine learning library](https://joss.theoj.org/papers/10.21105/joss.05026) \n([Github](https://github.com/mlpack/mlpack))\n",
    "bugtrack_url": null,
    "license": "BSD-3-Clause License",
    "summary": "Center-based hierarchical clustering framework using 3 steps: compute a Similarity, build an Hierarchy, and lastly extract a clustering using a Partitioning method.",
    "version": "0.1.2",
    "project_urls": {
        "Documentation": "https://SHiP-framework.readthedocs.io/en/",
        "Homepage": "https://github.com/pasiweber/SHiP-framework",
        "Issues": "https://github.com/pasiweber/SHiP-framework/issues",
        "Repository": "https://github.com/pasiweber/SHiP-framework"
    },
    "split_keywords": [
        "clustering",
        " hierarchical clustering",
        " hierarchical clustering framework",
        " agglomerative clustering",
        " similarity",
        " hierarchy",
        " partitioning",
        " ship framework",
        " ship",
        " python",
        " c++",
        " pybind11"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "334bc3171736067113abfaaeebf651c4de7374097d8c1b57408651ff5fb0160a",
                "md5": "800aaa324d1c253c9002a3df11c3b48c",
                "sha256": "cce99da094d1012a9280bcf91c99bd1cfc468bc66833e0182c87dd5f4d887a50"
            },
            "downloads": -1,
            "filename": "ship_framework-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "800aaa324d1c253c9002a3df11c3b48c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 962835,
            "upload_time": "2025-10-23T16:23:29",
            "upload_time_iso_8601": "2025-10-23T16:23:29.635804Z",
            "url": "https://files.pythonhosted.org/packages/33/4b/c3171736067113abfaaeebf651c4de7374097d8c1b57408651ff5fb0160a/ship_framework-0.1.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "edd385bc3d4e87d40e7c48978bdc67351e07f832aa722d4b52b844476a19e775",
                "md5": "e3ce7b18c1e3cc1bae363368f7ea3cb7",
                "sha256": "022d173cabbeffb147cd687dd96129152e56229d636b15e53f3f10ef86f95377"
            },
            "downloads": -1,
            "filename": "ship_framework-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e3ce7b18c1e3cc1bae363368f7ea3cb7",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 963229,
            "upload_time": "2025-10-23T16:23:31",
            "upload_time_iso_8601": "2025-10-23T16:23:31.226996Z",
            "url": "https://files.pythonhosted.org/packages/ed/d3/85bc3d4e87d40e7c48978bdc67351e07f832aa722d4b52b844476a19e775/ship_framework-0.1.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b41fa5ce3e3748cec4413f97c1b11b439fc4703ab1bf892fbc81d87514f00aa7",
                "md5": "0969cb13c1982e0838479311084f142a",
                "sha256": "42ceb2929f87b67791a9758841a988762ddc0d659c2a7c840ce0456c193b05f6"
            },
            "downloads": -1,
            "filename": "ship_framework-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0969cb13c1982e0838479311084f142a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 967455,
            "upload_time": "2025-10-23T16:23:32",
            "upload_time_iso_8601": "2025-10-23T16:23:32.694224Z",
            "url": "https://files.pythonhosted.org/packages/b4/1f/a5ce3e3748cec4413f97c1b11b439fc4703ab1bf892fbc81d87514f00aa7/ship_framework-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "11108aac587f1dfa9cec0adf33c49418d16ffdfcb7c98770df63ea49c4886fd4",
                "md5": "154c497672b430003cb36337bfad9581",
                "sha256": "4b62ae8d8ffcc92d06ac21dce68c1ce70401849f2a265d548d6b746175fc757c"
            },
            "downloads": -1,
            "filename": "ship_framework-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "154c497672b430003cb36337bfad9581",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 967673,
            "upload_time": "2025-10-23T16:23:34",
            "upload_time_iso_8601": "2025-10-23T16:23:34.953830Z",
            "url": "https://files.pythonhosted.org/packages/11/10/8aac587f1dfa9cec0adf33c49418d16ffdfcb7c98770df63ea49c4886fd4/ship_framework-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9b4e3fcff1f6043a0130ea82e2dc6db2f017f694974867f89e0db31e8052b5e5",
                "md5": "e87d3ae68591c5af171e8bb93296e661",
                "sha256": "2509d2775316621dccf2d68e5c4ac394b07931f90ef2d43bbdcea15f28993542"
            },
            "downloads": -1,
            "filename": "ship_framework-0.1.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e87d3ae68591c5af171e8bb93296e661",
            "packagetype": "bdist_wheel",
            "python_version": "cp314",
            "requires_python": ">=3.9",
            "size": 968357,
            "upload_time": "2025-10-23T16:23:36",
            "upload_time_iso_8601": "2025-10-23T16:23:36.677013Z",
            "url": "https://files.pythonhosted.org/packages/9b/4e/3fcff1f6043a0130ea82e2dc6db2f017f694974867f89e0db31e8052b5e5/ship_framework-0.1.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d761c942980710ac8ee72c0aae4460dbf53d63cfe28de380a3fe86a7a77fa266",
                "md5": "23c84495acaca0b4b66764034e0a0455",
                "sha256": "22775cb2c4dcdc8634e62afac774b2a5a6a54c3a8470aa550a5f2f9f61b100bc"
            },
            "downloads": -1,
            "filename": "ship_framework-0.1.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "23c84495acaca0b4b66764034e0a0455",
            "packagetype": "bdist_wheel",
            "python_version": "cp314",
            "requires_python": ">=3.9",
            "size": 973668,
            "upload_time": "2025-10-23T16:23:38",
            "upload_time_iso_8601": "2025-10-23T16:23:38.085718Z",
            "url": "https://files.pythonhosted.org/packages/d7/61/c942980710ac8ee72c0aae4460dbf53d63cfe28de380a3fe86a7a77fa266/ship_framework-0.1.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d8e65c16be2802e1869d6ce30515df8305bb848f6f92ccc5156ffef55e0ff80a",
                "md5": "4d9a051f2dbba8f8a847c6e77ae171dd",
                "sha256": "f47c2115e0201485776487a10cb8bb95469b0842216e4f1676d8be8676e4f2c4"
            },
            "downloads": -1,
            "filename": "ship_framework-0.1.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4d9a051f2dbba8f8a847c6e77ae171dd",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 963001,
            "upload_time": "2025-10-23T16:23:39",
            "upload_time_iso_8601": "2025-10-23T16:23:39.353306Z",
            "url": "https://files.pythonhosted.org/packages/d8/e6/5c16be2802e1869d6ce30515df8305bb848f6f92ccc5156ffef55e0ff80a/ship_framework-0.1.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c6674d6002a8c7306ccf28f952093752f066ff293e1100d746baf254a28ee5f0",
                "md5": "d10a675c6b40d5711c5c12aa182c5ed0",
                "sha256": "3f5d7e870ebb010376a08202b82bfea203d869deda597ba594d0f171b79f80dc"
            },
            "downloads": -1,
            "filename": "ship_framework-0.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "d10a675c6b40d5711c5c12aa182c5ed0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 23589789,
            "upload_time": "2025-10-23T16:23:41",
            "upload_time_iso_8601": "2025-10-23T16:23:41.129055Z",
            "url": "https://files.pythonhosted.org/packages/c6/67/4d6002a8c7306ccf28f952093752f066ff293e1100d746baf254a28ee5f0/ship_framework-0.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-23 16:23:41",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pasiweber",
    "github_project": "SHiP-framework",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ship-framework"
}
        
Elapsed time: 3.37008s