Nearest Neighbor Detection for Bioconductor
Project description
Python bindings to knncolle
Overview
The knncolle Python package implements Python bindings to the C++ library of the same name for nearest neighbor (NN) searches. Downstream packages can re-use the NN search algorithms in knncolle, either via Python or by directly calling C++ through shared pointers. This is inspired by the BiocNeighbors Bioconductor package, which does the same thing for R packages.
Quick start
Install it:
pip install knncolle
And run the desired search:
# Mocking up data with 20 dimensions, 1000 observations
import numpy
y = numpy.random.rand(1000, 20)
# Building a search index with vantage point trees:
import knncolle
params = knncolle.VptreeParameters()
idx = knncolle.build_index(params, y)
# Performing the search:
res = knncolle.find_knn(idx, num_neighbors=10)
res.index # each row is an observation, each column is a neighbor
## array([[881, 74, 959, ..., 917, 385, 522],
## [586, 8, 874, ..., 895, 52, 591],
## [290, 215, 298, ..., 148, 627, 443],
## ...,
## [773, 44, 669, ..., 775, 287, 819],
## [658, 847, 691, ..., 630, 861, 434],
## [796, 158, 11, ..., 606, 815, 882]],
## shape=(1000, 10), dtype=uint32)
res.distance # distances to the neighbors in 'index'
## array([[1.12512471, 1.12792771, 1.15229055, ..., 1.21499808, 1.2176659 ,
## 1.23952456],
## [0.9988856 , 1.03782045, 1.08870223, ..., 1.16899062, 1.17007634,
## 1.17147675],
## [1.2471501 , 1.26328659, 1.2643019 , ..., 1.32229768, 1.32679721,
## 1.33451926],
## ...,
## [1.05765983, 1.08981287, 1.11295647, ..., 1.18395012, 1.1976068 ,
## 1.21577234],
## [0.96758957, 1.02363497, 1.05326212, ..., 1.21518925, 1.22847612,
## 1.24106054],
## [1.17846147, 1.22299985, 1.2248128 , ..., 1.35088373, 1.39274142,
## 1.40207528]], shape=(1000, 10))
Check out the reference documentation for details.
Switching algorithms
We can easily switch to a different NN search algorithm by supplying a different params object.
For example, we could use the Approximate Nearest Neighbors Oh Yeah (Annoy) algorithm:
an_params = knncolle.AnnoyParameters()
an_idx = knncolle.build_index(an_params, y)
We can also tweak the search parameters in our Parameters object during or after its construction.
For example, with the hierarchical navigable small worlds (HNSW) algorithm:
h_params = knncolle.HnswParameters(num_links=20, distance="Manhattan")
h_params.ef_construction = 150
h_idx = knncolle.build_index(h_params, y)
Currently, we support Annoy, HNSW, vantage point trees, k-means k-nearest neighbors, and an exhaustive brute-force search. More algorithms can be added by extending knncolle as described below without any change to end-user code.
Other searches
Given a separate query dataset of the same dimensionality, we can find the nearest neighbors in the prebuilt NN search index:
q = numpy.random.rand(50, 20)
qres = knncolle.query_knn(idx, q, num_neighbors=10)
qres.index.shape # each row is an observation in 'q'
## (50, 10)
qres.distance.shape
## (50, 10)
qres.index[0,:]
## array([712, 947, 924, 506, 640, 228, 424, 662, 299, 473], dtype=uint32)
qres.distance[0,:]
## array([0.9846863 , 0.99493741, 1.01642662, 1.02303339, 1.02915264,
## 1.05241022, 1.0690309 , 1.09889404, 1.1327715 , 1.14832321])
We can ask find_knn() to report variable numbers of neighbors for each observation:
variable_k = (numpy.random.rand(y.shape[0]) * 10).astype(numpy.uint32)
var_res = knncolle.find_knn(idx, num_neighbors=variable_k)
len(var_res.index)
## 1000
len(var_res.distance)
## 1000
variable_k[0]
## np.uint32(7)
var_res.index[0]
## array([881, 74, 959, 135, 148, 946, 276], dtype=uint32)
var_res.distance[0]
## array([1.12512471, 1.12792771, 1.15229055, 1.16210922, 1.19067866,
## 1.19773984, 1.21375003])
We can find all observations within a distance threshold of each observation via find_neighbors().
The related query_neighbors() function handles querying of observations in a separate dataset.
Both functions also accept a variable threshold for each observation.
range_res = knncolle.find_neighbors(idx, threshold=1.2)
len(range_res.index)
## 1000
len(range_res.distance)
## 1000
range_res.index[0]
## array([881, 74, 959, 135, 148, 946], dtype=uint32)
range_res.distance[0]
## array([1.12512471, 1.12792771, 1.15229055, 1.16210922, 1.19067866,
## 1.19773984])
Use with C++
The raison d'être of the knncolle Python package is to facilitate the re-use of the neighbor search algorithms by C++ code in other Python packages. The idea is that downstream packages will link against the knncolle C++ interface so that they can re-use the search indices created by the knncolle Python package. This allows developers to (i) save time by avoiding the need to re-compile all desired algorithms and (ii) support more algorithms in extensions to the knncolle framework. To do so:
- Add
knncolle.includes()andassorthead.includes()to the compiler's include path for the package. This can be done throughinclude_dirs=of theExtension()definition insetup.pyor by adding atarget_include_directories()in CMake, depending on the build system. - Call
knncolle.build_index()to construct aGenericIndexinstance. This exposes a shared pointer to the C++-allocated index via itsptrproperty. - Pass
ptrto C++ code as auintptr_treferencing aknncolle::Prebuilt. which can be interrogated as described in the knncolle documentation.
So, for example, the C++ code in our downstream package might look like this:
#include "knncolle_py.h"
int do_something(uintptr_t ptr) {
const auto& prebuilt = knncolle_py::cast_prebuilt(ptr)->ptr;
// Do something with the search index interface.
return 1;
}
PYBIND11_MODULE(lib_downstream, m) {
m.def("do_something", &do_something);
}
Which can then be called from Python:
from . import lib_downstream as lib
from knncolle import GenericIndex
def do_something(idx: GenericIndex):
return lib.do_something(idx.ptr)
In some scenarios, it may be more convenient to construct the search index inside C++,
e.g., if the dataset to be searched is not available before the call to the C++ function.
This can be accommodated by accepting a uintptr_t to a knncolle::Builder in the C++ code:
#include "knncolle_py.h"
int do_something_mk2(uintptr_t ptr) {
const auto& builder = knncolle_py::cast_builder(ptr)->ptr;
// The builder is a algorithm-specific factory that accepts a matrix and
// returns a search index for that algorithm. Presumably we construct a
// new search index inside this function and use it.
return 1;
}
PYBIND11_MODULE(lib_downstream, m) {
m.def("do_something_mk2", &do_something_mk2);
}
A pointer to the knncolle::Builder can be created by the define_builder() function in Python, and then passed to the C++ code:
from . import lib_downstream as lib
from knncolle import define_builder, Parameters
def do_something(param: Parameters):
builder, cls = define_builder(param)
return lib.do_something_mk2(builder.ptr)
Check out the included header for more definitions.
Extending to more algorithms
Via define_builder()
The best way to extend knncolle is to do so in C++. This involves writing subclasses of the interfaces in the knncolle library. Once this is done, it is a simple matter of writing the following Python bindings:
- Implement a
SomeNewParametersclass that inherits fromParameters. - Implement a
SomeNewIndexclass that inherits fromGenericIndex. This should accept a singleptrin its constructor and have aptrproperty that returns the same value. - Register a
define_builder()method that dispatches onSomeNewParameters. This should call into C++ and return a tuple containing aBuilderobject and theSomeNewIndexconstructor.
No new methods are required for find_knn(), build_index(), etc. as the default method will work automatically if a define_builder() method is available.
This approach also allows the new method to be used in C++ code of downstream packages.
Without define_builder()
If it is not possible to implement the search algorithm in C++, we can still extend knncolle in Python. Each extension package should:
- Implement a
SomeNewParametersclass that inherits fromParameters. - Implement a
SomeNewIndexclass that inherits fromIndex. This can have an arbitrary structure, i.e., it does not need to have aptrproperty. - Register a
build_index()method that dispatches onSomeNewParameters. This should return an instance ofSomeNewIndex. - Register a method for any number of these generics:
find_knn(),find_distance(),find_neighbors(),query_knn(),query_distance(),query_neighbors(). These methods should dispatch onSomeNewParametersand return the appropriate result object.
This approach will not support re-use by C++ code in other Python packages.
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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file knncolle-0.2.0.tar.gz.
File metadata
- Download URL: knncolle-0.2.0.tar.gz
- Upload date:
- Size: 41.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1103ce00353ea2aa8e8b7d5116420b53f624a8b3ba1093fa4018a4bb121b752c
|
|
| MD5 |
14db7e36168abb652ec2855b7eba03fc
|
|
| BLAKE2b-256 |
dd670c30fa135880da9315c11713cb917bb13b8d0c7b693c5600e1660ae186cb
|
File details
Details for the file knncolle-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7bd8494f420b58cd46b08f434da5c6cfbd840cc1cd07b11ee1017b894746f338
|
|
| MD5 |
9821351b1b02dc78adc0da4ebdcc5067
|
|
| BLAKE2b-256 |
0c861f9bac534d0397f1bc6159f41d0abdf2a648eb8cade8434a621a93517130
|
File details
Details for the file knncolle-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 230.6 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a15a3b30a7eb120c50c5240339e1ba597a06b1502d5862bd52c24fcd3422c84
|
|
| MD5 |
9009fbcb3b23c452d44c8441a9f51f06
|
|
| BLAKE2b-256 |
5d945d9d3a0e1cef9d0c2f427b15fe3951f587de87beaad9cfe16590d43c2812
|
File details
Details for the file knncolle-0.2.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 175.8 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1aa18639109b765a5b7e6f8ca3ff392f6b2d9aae36c89354470ace8c327f203d
|
|
| MD5 |
c708df0dd05e8ee7db2e4b2079603889
|
|
| BLAKE2b-256 |
75d34215fdb12d28b7c4ff553081d3571e585f688659f56c5b895e5328dd8a34
|
File details
Details for the file knncolle-0.2.0-cp313-cp313-macosx_10_13_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp313-cp313-macosx_10_13_x86_64.whl
- Upload date:
- Size: 204.8 kB
- Tags: CPython 3.13, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9a5c963d71eb4cbfcf5266acb50e6b4f65591aa5e189f1d771b8cfc23668241
|
|
| MD5 |
13e2a8b66afa3a8b894fee061b8a35c8
|
|
| BLAKE2b-256 |
c6a389cb054b8c8ac4d2270689375514f95fe76e2c5700266e8ad29e5a7a9788
|
File details
Details for the file knncolle-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e08279f17a0cbb4b2f4cf9605b7d56288f2ef5eabc1d77670e4dcf165ac5f5d
|
|
| MD5 |
2b05db1ae032f0418f9035c9edf24187
|
|
| BLAKE2b-256 |
19fc3c3a031dfbe045a487b706f7f7bb440250b6640b75c1eb264f1ab240fe57
|
File details
Details for the file knncolle-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 229.7 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c71f6ab0db40175c398771c4ab8ccca84848981f051a4581636f0fec3ab3acd
|
|
| MD5 |
05d15830a7200ab72c8211a6c45e79c8
|
|
| BLAKE2b-256 |
d40a6faeb25eeb5cd8de87a39431fb394431eb7ac8651f87cf4fe8af32d1ae0c
|
File details
Details for the file knncolle-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 175.7 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4e8c495be3b4ec48d7b9ebb0d52841748df128606b416555812c91183b3507d
|
|
| MD5 |
aca7ed3505733862e2beb848a63dd1ef
|
|
| BLAKE2b-256 |
eb3e11cb91e55c1a3062f2cabd30d143f3b8f8dc1acf3d8cf35b776e9466cc95
|
File details
Details for the file knncolle-0.2.0-cp312-cp312-macosx_10_13_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp312-cp312-macosx_10_13_x86_64.whl
- Upload date:
- Size: 204.7 kB
- Tags: CPython 3.12, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e0047b68ededd305ac6f5628c814a52c06113eba79f4822d7d48803fe7de233
|
|
| MD5 |
7e52e8f314aeaa60759086c53fad7f70
|
|
| BLAKE2b-256 |
810d8be6e57358a6ff39398bf2f9ec9ceb3c9812e6e79743e927f9a153b10ce4
|
File details
Details for the file knncolle-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7e117e48bffc29f3d1d3bae5fbec3d16cdf6d6b370726a3c8bcc6329ccc7a7d
|
|
| MD5 |
4369e2a035a102db330fa41a70533fc0
|
|
| BLAKE2b-256 |
83b505d0c6aa34d512514d8d6b5877eeaa03f8e195ed332f64184b8835f66ddd
|
File details
Details for the file knncolle-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 231.1 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2bb5623b43a2fc7e43f896979cf20e448893c8a73036986ca713911dacced7f
|
|
| MD5 |
2ec4133386b06a58a9b59a540cdeb2b3
|
|
| BLAKE2b-256 |
1679a73a7ad4abebcafef43b0da96b4b60f2adab049577de660cbb53ccf684ef
|
File details
Details for the file knncolle-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 176.4 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c624efe066576f7258eedb2c166d173a3825ebcb3e8f90c3e811e41911fe813
|
|
| MD5 |
abc96d0537e39910b5c9378e60b98e13
|
|
| BLAKE2b-256 |
855e1c2266598502b413c17353e588ab51453b24bf1dc37a9579df71ad8e44b7
|
File details
Details for the file knncolle-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 205.5 kB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24123e8fff8ddc195b9b2ea516c80c9794038d2928d01d085381ec31d6f4df46
|
|
| MD5 |
b5b895acaa98fa33e901fe1ca6d0d75a
|
|
| BLAKE2b-256 |
49796cacb6d37ece2c7e20e0c6ae71889ced1d5bd6449470fb1c4633995c050e
|
File details
Details for the file knncolle-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa5b9970051d3aaff3be7cf2c9183145c09836d653611f5c9219750938d83bd0
|
|
| MD5 |
9ad08df245ba93787acd45f82fc2e443
|
|
| BLAKE2b-256 |
5e0a35963fac23967c6844a3f65eb9f2fba2a36a066b1adc3315f42aab71e6d8
|
File details
Details for the file knncolle-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 229.8 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
759baa31bdff603005368712a3ee963b2c9034ea0c4a160887db72dde0a60a56
|
|
| MD5 |
6fda3fdf73ae0376864ba3fc3821daac
|
|
| BLAKE2b-256 |
54e9ab00f700679428b688a61a01ad2c5aebbd0e75e6f1a1adb00b068538f244
|
File details
Details for the file knncolle-0.2.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 175.1 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a29a7f10730c487ca32f4cb313ca66c37a44c652be7e9207a6746fa6dbbc491
|
|
| MD5 |
ea80d1352a09ebfe05a33ff0c7d6bd52
|
|
| BLAKE2b-256 |
81b48039567bfec9d12a7e0fc082829aa3a9fd991ac537b98a0c2c5a33aa2ec5
|
File details
Details for the file knncolle-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 204.1 kB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c214d34bd85e37c0c2667043f93f43da0f2690f408cdba3f3ee1885ce3e4501e
|
|
| MD5 |
71a3d985796fff37f3e1e297c8b1f5cb
|
|
| BLAKE2b-256 |
f2cdf40b7892b09b6fb40ecf435bcd8e82bfc176892aef5cab2f7da0fd6bac97
|
File details
Details for the file knncolle-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.9, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1aef59155edfa51a2a1fd0415b55f072beb2f1b2900315f6a2aa93bbd1e5324
|
|
| MD5 |
4f35809ba1310b28ad34183d9bc22566
|
|
| BLAKE2b-256 |
c06daac1f2625d02ff8b81e376a236648a7b57b5afa78908e91262e2d5cd1384
|
File details
Details for the file knncolle-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 230.1 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
902402b55d1c96ddfbc56fdb84d1730f4da7bec2ffdd3e4f05204573bb44a1b7
|
|
| MD5 |
a9a87069b0503028da13ba60b3546842
|
|
| BLAKE2b-256 |
8572986314329afc90d3a8cb158949f65f5d74467e021cb4a59a26275d98230f
|
File details
Details for the file knncolle-0.2.0-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 175.2 kB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f197f050ffd55c71c29a3fde7afa36108bb4e7d29899b0133dc701c62b9f81e0
|
|
| MD5 |
48dccc8087e0c985911238d801f41619
|
|
| BLAKE2b-256 |
5571fb201316ad4be8174a1d8e561e086c6be9f4e8975896a186425e59eeaeac
|
File details
Details for the file knncolle-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl.
File metadata
- Download URL: knncolle-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl
- Upload date:
- Size: 204.2 kB
- Tags: CPython 3.9, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9512a55f6556b65edaa40a3e1dfbab0cf0cd66351050e1514a709ce56295c4db
|
|
| MD5 |
c6336c950e247f448bf173c0210f7942
|
|
| BLAKE2b-256 |
b8846002f30cfc1cabbc1202625465deee20d5413767de3ae8c4a0651dd9e3d5
|