pykdtree


Namepykdtree JSON
Version 1.3.12 PyPI version JSON
download
home_pagehttps://github.com/storpipfugl/pykdtree
SummaryFast kd-tree implementation with OpenMP-enabled queries
upload_time2024-04-18 13:31:02
maintainerNone
docs_urlNone
authorEsben S. Nielsen
requires_python>=3.9
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. image:: https://github.com/storpipfugl/pykdtree/actions/workflows/deploy-wheels.yml/badge.svg?branch=master
    :target: https://github.com/storpipfugl/pykdtree/actions/workflows/deploy-wheels.yml

========
pykdtree
========

Objective
---------
pykdtree is a kd-tree implementation for fast nearest neighbour search in Python.
The aim is to be the fastest implementation around for common use cases (low dimensions and low number of neighbours) for both tree construction and queries.

The implementation is based on scipy.spatial.cKDTree and libANN by combining the best features from both and focus on implementation efficiency.

The interface is similar to that of scipy.spatial.cKDTree except only Euclidean distance measure is supported.

Queries are optionally multithreaded using OpenMP.

Installation
------------

Pykdtree can be installed via pip:

.. code-block:: bash

    pip install pykdtree
    
Or, if in a conda-based environment, with conda from the conda-forge channel:

.. code-block:: bash

    conda install -c conda-forge pykdtree
    
Note that by default these packages (the binary wheels on PyPI and the binary
package on conda-forge) are only built with OpenMP for linux platforms.
To attempt to build from source with OpenMP support do:

.. code-block:: bash

    export USE_OMP="probe"
    pip install --no-binary pykdtree pykdtree
    
This may not work on some systems that don't have OpenMP installed. See the below development
instructions for more guidance. Disabling OpenMP can be accomplished by setting `USE_OMP` to ``"0"``
in the above commands.

Development Installation
------------------------

If you wish to contribute to pykdtree then it is a good idea to install from source
so you can quickly see the effects of your changes.
By default pykdtree is built with OpenMP enabled queries on unix-like systems.
On linux this is done using libgomp. On OSX systems OpenMP is provided using the
clang compiler (conda environments use a separate compiler).

.. code-block:: bash

    $ cd <pykdtree_dir>
    $ pip install -e .

This installs pykdtree in an "editable" mode where changes to the Python files
are automatically reflected when running a new python interpreter instance
(ex. running a python script that uses pykdtree). It does not automatically rebuild
or recompile the `.mako` templates and `.pyx` Cython code in pykdtree. Editing
these files requires running the `pykdtree/render_template.py` script and then
rerunning the pip command above to recompile the Cython files.

If installation fails with undefined compiler flags or you want to use another OpenMP
implementation you may need to modify setup.py or specify additional pip command line
flags to match the library locations on your system.

Building without OpenMP support is controlled by the USE_OMP environment variable

.. code-block:: bash

    $ cd <pykdtree_dir>
    $ export USE_OMP=0
    $ pip install -e .

Note evironment variables are by default not exported when using sudo so in this case do

.. code-block:: bash

    $ USE_OMP=0 sudo -E pip install -e .


Control OpenMP usage
^^^^^^^^^^^^^^^^^^^^

The ``USE_OMP`` variable can be set to one of a couple different options. If
set to ``"probe"``, the installation process (``setup.py``) will attempt to
determine what variant of OpenMP is available based on the compiler being used,
the platform being run on, and the Python environment being run with. It will
then use the flags specified by one of the other ``USE_OMP`` modes. Note that
in the case of MacOS, it will also try to identify if OpenMP is available from
macports or homebrew and include the necessary include and library paths.

If set to ``"gcc"`` or ``"gomp"`` then compiler and linking flags will be set
appropriately for "GNU OpenMP" (gomp) library. If set to ``"clang"`` or 
``"omp"`` then the flags will be set to support the "omp" library. If set to
``"msvc"`` then flags will be set for the Microsoft Visual C++ compiler's
OpenMP variant. For backwards compatibility the previous ``"1"`` has the same
behavior as ``"probe"``. As mentioned above ``"0"`` can be used to disable
any detection of OpenMP or attempt to compile with it.

Usage
-----

The usage of pykdtree is similar to scipy.spatial.cKDTree so for now refer to its documentation

    >>> from pykdtree.kdtree import KDTree
    >>> kd_tree = KDTree(data_pts)
    >>> dist, idx = kd_tree.query(query_pts, k=8)

The number of threads to be used in OpenMP enabled queries can be controlled with the standard OpenMP environment variable OMP_NUM_THREADS.

The **leafsize** argument (number of data points per leaf) for the tree creation can be used to control the memory overhead of the kd-tree. pykdtree uses a default **leafsize=16**.
Increasing **leafsize** will reduce the memory overhead and construction time but increase query time.

pykdtree accepts data in double precision (numpy.float64) or single precision (numpy.float32) floating point. If data of another type is used an internal copy in double precision is made resulting in a memory overhead. If the kd-tree is constructed on single precision data the query points must be single precision as well.

Benchmarks
----------
Comparison with scipy.spatial.cKDTree and libANN. This benchmark is on geospatial 3D data with 10053632 data points and 4276224 query points. The results are indexed relative to the construction time of scipy.spatial.cKDTree. A leafsize of 10 (scipy.spatial.cKDTree default) is used.

Note: libANN is *not* thread safe. In this benchmark libANN is compiled with "-O3 -funroll-loops -ffast-math -fprefetch-loop-arrays" in order to achieve optimum performance.

==================  =====================  ======  ========  ==================
Operation           scipy.spatial.cKDTree  libANN  pykdtree  pykdtree 4 threads
------------------  ---------------------  ------  --------  ------------------

Construction                          100     304        96                  96

query 1 neighbour                    1267     294       223                  70

Total 1 neighbour                    1367     598       319                 166

query 8 neighbours                   2193     625       449                 143

Total 8 neighbours                   2293     929       545                 293
==================  =====================  ======  ========  ==================

Looking at the combined construction and query this gives the following performance improvement relative to scipy.spatial.cKDTree

==========  ======  ========  ==================
Neighbours  libANN  pykdtree  pykdtree 4 threads
----------  ------  --------  ------------------
1            129%      329%                723%

8            147%      320%                682%
==========  ======  ========  ==================

Note: mileage will vary with the dataset at hand and computer architecture.

Test
----
Run the unit tests using pytest

.. code-block:: bash

    $ cd <pykdtree_dir>
    $ pytest

Installing on AppVeyor
----------------------

Pykdtree requires the "stdint.h" header file which is not available on certain
versions of Windows or certain Windows compilers including those on the
continuous integration platform AppVeyor. To get around this the header file(s)
can be downloaded and placed in the correct "include" directory. This can
be done by adding the `anaconda/missing-headers.ps1` script to your repository
and running it the install step of `appveyor.yml`:

    # install missing headers that aren't included with MSVC 2008
    # https://github.com/omnia-md/conda-recipes/pull/524
    - "powershell ./appveyor/missing-headers.ps1"

In addition to this, AppVeyor does not support OpenMP so this feature must be
turned off by adding the following to `appveyor.yml` in the
`environment` section:

    environment:
      global:
        # Don't build with openmp because it isn't supported in appveyor's compilers
        USE_OMP: "0"

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/storpipfugl/pykdtree",
    "name": "pykdtree",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": "Esben S. Nielsen",
    "author_email": "storpipfugl@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/35/ad/2a03094c9490077e48cfb7af19d9d49cf304c80fb6d68e67073964e9ac80/pykdtree-1.3.12.tar.gz",
    "platform": null,
    "description": ".. image:: https://github.com/storpipfugl/pykdtree/actions/workflows/deploy-wheels.yml/badge.svg?branch=master\n    :target: https://github.com/storpipfugl/pykdtree/actions/workflows/deploy-wheels.yml\n\n========\npykdtree\n========\n\nObjective\n---------\npykdtree is a kd-tree implementation for fast nearest neighbour search in Python.\nThe aim is to be the fastest implementation around for common use cases (low dimensions and low number of neighbours) for both tree construction and queries.\n\nThe implementation is based on scipy.spatial.cKDTree and libANN by combining the best features from both and focus on implementation efficiency.\n\nThe interface is similar to that of scipy.spatial.cKDTree except only Euclidean distance measure is supported.\n\nQueries are optionally multithreaded using OpenMP.\n\nInstallation\n------------\n\nPykdtree can be installed via pip:\n\n.. code-block:: bash\n\n    pip install pykdtree\n    \nOr, if in a conda-based environment, with conda from the conda-forge channel:\n\n.. code-block:: bash\n\n    conda install -c conda-forge pykdtree\n    \nNote that by default these packages (the binary wheels on PyPI and the binary\npackage on conda-forge) are only built with OpenMP for linux platforms.\nTo attempt to build from source with OpenMP support do:\n\n.. code-block:: bash\n\n    export USE_OMP=\"probe\"\n    pip install --no-binary pykdtree pykdtree\n    \nThis may not work on some systems that don't have OpenMP installed. See the below development\ninstructions for more guidance. Disabling OpenMP can be accomplished by setting `USE_OMP` to ``\"0\"``\nin the above commands.\n\nDevelopment Installation\n------------------------\n\nIf you wish to contribute to pykdtree then it is a good idea to install from source\nso you can quickly see the effects of your changes.\nBy default pykdtree is built with OpenMP enabled queries on unix-like systems.\nOn linux this is done using libgomp. On OSX systems OpenMP is provided using the\nclang compiler (conda environments use a separate compiler).\n\n.. code-block:: bash\n\n    $ cd <pykdtree_dir>\n    $ pip install -e .\n\nThis installs pykdtree in an \"editable\" mode where changes to the Python files\nare automatically reflected when running a new python interpreter instance\n(ex. running a python script that uses pykdtree). It does not automatically rebuild\nor recompile the `.mako` templates and `.pyx` Cython code in pykdtree. Editing\nthese files requires running the `pykdtree/render_template.py` script and then\nrerunning the pip command above to recompile the Cython files.\n\nIf installation fails with undefined compiler flags or you want to use another OpenMP\nimplementation you may need to modify setup.py or specify additional pip command line\nflags to match the library locations on your system.\n\nBuilding without OpenMP support is controlled by the USE_OMP environment variable\n\n.. code-block:: bash\n\n    $ cd <pykdtree_dir>\n    $ export USE_OMP=0\n    $ pip install -e .\n\nNote evironment variables are by default not exported when using sudo so in this case do\n\n.. code-block:: bash\n\n    $ USE_OMP=0 sudo -E pip install -e .\n\n\nControl OpenMP usage\n^^^^^^^^^^^^^^^^^^^^\n\nThe ``USE_OMP`` variable can be set to one of a couple different options. If\nset to ``\"probe\"``, the installation process (``setup.py``) will attempt to\ndetermine what variant of OpenMP is available based on the compiler being used,\nthe platform being run on, and the Python environment being run with. It will\nthen use the flags specified by one of the other ``USE_OMP`` modes. Note that\nin the case of MacOS, it will also try to identify if OpenMP is available from\nmacports or homebrew and include the necessary include and library paths.\n\nIf set to ``\"gcc\"`` or ``\"gomp\"`` then compiler and linking flags will be set\nappropriately for \"GNU OpenMP\" (gomp) library. If set to ``\"clang\"`` or \n``\"omp\"`` then the flags will be set to support the \"omp\" library. If set to\n``\"msvc\"`` then flags will be set for the Microsoft Visual C++ compiler's\nOpenMP variant. For backwards compatibility the previous ``\"1\"`` has the same\nbehavior as ``\"probe\"``. As mentioned above ``\"0\"`` can be used to disable\nany detection of OpenMP or attempt to compile with it.\n\nUsage\n-----\n\nThe usage of pykdtree is similar to scipy.spatial.cKDTree so for now refer to its documentation\n\n    >>> from pykdtree.kdtree import KDTree\n    >>> kd_tree = KDTree(data_pts)\n    >>> dist, idx = kd_tree.query(query_pts, k=8)\n\nThe number of threads to be used in OpenMP enabled queries can be controlled with the standard OpenMP environment variable OMP_NUM_THREADS.\n\nThe **leafsize** argument (number of data points per leaf) for the tree creation can be used to control the memory overhead of the kd-tree. pykdtree uses a default **leafsize=16**.\nIncreasing **leafsize** will reduce the memory overhead and construction time but increase query time.\n\npykdtree accepts data in double precision (numpy.float64) or single precision (numpy.float32) floating point. If data of another type is used an internal copy in double precision is made resulting in a memory overhead. If the kd-tree is constructed on single precision data the query points must be single precision as well.\n\nBenchmarks\n----------\nComparison with scipy.spatial.cKDTree and libANN. This benchmark is on geospatial 3D data with 10053632 data points and 4276224 query points. The results are indexed relative to the construction time of scipy.spatial.cKDTree. A leafsize of 10 (scipy.spatial.cKDTree default) is used.\n\nNote: libANN is *not* thread safe. In this benchmark libANN is compiled with \"-O3 -funroll-loops -ffast-math -fprefetch-loop-arrays\" in order to achieve optimum performance.\n\n==================  =====================  ======  ========  ==================\nOperation           scipy.spatial.cKDTree  libANN  pykdtree  pykdtree 4 threads\n------------------  ---------------------  ------  --------  ------------------\n\nConstruction                          100     304        96                  96\n\nquery 1 neighbour                    1267     294       223                  70\n\nTotal 1 neighbour                    1367     598       319                 166\n\nquery 8 neighbours                   2193     625       449                 143\n\nTotal 8 neighbours                   2293     929       545                 293\n==================  =====================  ======  ========  ==================\n\nLooking at the combined construction and query this gives the following performance improvement relative to scipy.spatial.cKDTree\n\n==========  ======  ========  ==================\nNeighbours  libANN  pykdtree  pykdtree 4 threads\n----------  ------  --------  ------------------\n1            129%      329%                723%\n\n8            147%      320%                682%\n==========  ======  ========  ==================\n\nNote: mileage will vary with the dataset at hand and computer architecture.\n\nTest\n----\nRun the unit tests using pytest\n\n.. code-block:: bash\n\n    $ cd <pykdtree_dir>\n    $ pytest\n\nInstalling on AppVeyor\n----------------------\n\nPykdtree requires the \"stdint.h\" header file which is not available on certain\nversions of Windows or certain Windows compilers including those on the\ncontinuous integration platform AppVeyor. To get around this the header file(s)\ncan be downloaded and placed in the correct \"include\" directory. This can\nbe done by adding the `anaconda/missing-headers.ps1` script to your repository\nand running it the install step of `appveyor.yml`:\n\n    # install missing headers that aren't included with MSVC 2008\n    # https://github.com/omnia-md/conda-recipes/pull/524\n    - \"powershell ./appveyor/missing-headers.ps1\"\n\nIn addition to this, AppVeyor does not support OpenMP so this feature must be\nturned off by adding the following to `appveyor.yml` in the\n`environment` section:\n\n    environment:\n      global:\n        # Don't build with openmp because it isn't supported in appveyor's compilers\n        USE_OMP: \"0\"\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Fast kd-tree implementation with OpenMP-enabled queries",
    "version": "1.3.12",
    "project_urls": {
        "Homepage": "https://github.com/storpipfugl/pykdtree"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "28c8e84c076cc2c30e427faf6439c8e22f87169dbb2d4f35c5941206f8daff9e",
                "md5": "90788c5117a168f2bb6d4432172abfc4",
                "sha256": "a072b845cc2983eb79fbfa9baeda4f4b3c3e6db0a54e1c89434d353246e66104"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "90788c5117a168f2bb6d4432172abfc4",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 69437,
            "upload_time": "2024-04-18T13:30:19",
            "upload_time_iso_8601": "2024-04-18T13:30:19.634992Z",
            "url": "https://files.pythonhosted.org/packages/28/c8/e84c076cc2c30e427faf6439c8e22f87169dbb2d4f35c5941206f8daff9e/pykdtree-1.3.12-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "85f9451fa5a93140590d07a3603cab5de42614efdc331d2c1b687d98d31e862a",
                "md5": "27f2997283506d3cef3dee21478affca",
                "sha256": "76d7f9ba21864701ac1206038abaf7613f35e96312731df770327e763ebb8d3a"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "27f2997283506d3cef3dee21478affca",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 63115,
            "upload_time": "2024-04-18T13:30:21",
            "upload_time_iso_8601": "2024-04-18T13:30:21.243459Z",
            "url": "https://files.pythonhosted.org/packages/85/f9/451fa5a93140590d07a3603cab5de42614efdc331d2c1b687d98d31e862a/pykdtree-1.3.12-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a49eb7e8a303c4cc0fa087007e03c5e588414215681828d4e9e556ac4c0be8db",
                "md5": "e92503cb3241ad9cc6166c3680adf232",
                "sha256": "431194955fd4f2be298a778643e36392bda9c43101dcb719146a050f3455d8cc"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "e92503cb3241ad9cc6166c3680adf232",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 331380,
            "upload_time": "2024-04-18T13:30:22",
            "upload_time_iso_8601": "2024-04-18T13:30:22.571494Z",
            "url": "https://files.pythonhosted.org/packages/a4/9e/b7e8a303c4cc0fa087007e03c5e588414215681828d4e9e556ac4c0be8db/pykdtree-1.3.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4f43ea31c8162106bac82f8baa7a22e81d937bf046d4b976fd5b0814b4972145",
                "md5": "b88063516eae64a94f2778ca830613d4",
                "sha256": "b7437e854b976c51fb1781392d148d6d9244945e1504e49bf490370464848260"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b88063516eae64a94f2778ca830613d4",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 343184,
            "upload_time": "2024-04-18T13:30:24",
            "upload_time_iso_8601": "2024-04-18T13:30:24.376362Z",
            "url": "https://files.pythonhosted.org/packages/4f/43/ea31c8162106bac82f8baa7a22e81d937bf046d4b976fd5b0814b4972145/pykdtree-1.3.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2d50f92686c8d0679e769f841810773a3a4dabfbd3e85e5462c7a5cf85acde8c",
                "md5": "259b98d6e973203c7b1b6df87972e839",
                "sha256": "046efd4607208d6edeedee3d67754c60118086c6ca6a83c33ee01ec70749ea51"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp310-cp310-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "259b98d6e973203c7b1b6df87972e839",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 357841,
            "upload_time": "2024-04-18T13:30:26",
            "upload_time_iso_8601": "2024-04-18T13:30:26.303467Z",
            "url": "https://files.pythonhosted.org/packages/2d/50/f92686c8d0679e769f841810773a3a4dabfbd3e85e5462c7a5cf85acde8c/pykdtree-1.3.12-cp310-cp310-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "73aa092444d8b1d5934cee8536965fb9f3c397954a764b010dfd31f653f8facb",
                "md5": "f7aa37bcc4406e08c0300f708c249db1",
                "sha256": "e3ef09d033e4af683b08cde01a4f3c96d4a96329aa6e3135095325befac28007"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f7aa37bcc4406e08c0300f708c249db1",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 58973,
            "upload_time": "2024-04-18T13:30:27",
            "upload_time_iso_8601": "2024-04-18T13:30:27.624664Z",
            "url": "https://files.pythonhosted.org/packages/73/aa/092444d8b1d5934cee8536965fb9f3c397954a764b010dfd31f653f8facb/pykdtree-1.3.12-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d4452149107805ae7ccfad6161629232d51961041577d249f9034b18c0c6dc57",
                "md5": "d832140c3237240149fc10d9e67bb0b9",
                "sha256": "3ebab60fa3dab12791fd04987aef53315b8acae196f45e6bad58a2086c1b3436"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp310-cp310-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "d832140c3237240149fc10d9e67bb0b9",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 49195,
            "upload_time": "2024-04-18T13:30:28",
            "upload_time_iso_8601": "2024-04-18T13:30:28.918979Z",
            "url": "https://files.pythonhosted.org/packages/d4/45/2149107805ae7ccfad6161629232d51961041577d249f9034b18c0c6dc57/pykdtree-1.3.12-cp310-cp310-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "36af20a84378d99ce02fc8226c344cdb6ef448072ace563529ef581d0c8933b2",
                "md5": "2c0984b62c4bb56ad089e693985ef2d8",
                "sha256": "83263e154871934423850d3b6eaaba6eb38463806d76313cbfa8798ecd7ca0a3"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2c0984b62c4bb56ad089e693985ef2d8",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 69475,
            "upload_time": "2024-04-18T13:30:30",
            "upload_time_iso_8601": "2024-04-18T13:30:30.077860Z",
            "url": "https://files.pythonhosted.org/packages/36/af/20a84378d99ce02fc8226c344cdb6ef448072ace563529ef581d0c8933b2/pykdtree-1.3.12-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "62634743cd598a6a44dcd3c4579a8c81c606897de0a07685feb127cdf46edfec",
                "md5": "9008672dc424db958041967db7e88e96",
                "sha256": "b8079f357d2358d4c20b2cb779d36add251626ebab1aaf2e03ce4e70355eff49"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "9008672dc424db958041967db7e88e96",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 63047,
            "upload_time": "2024-04-18T13:30:31",
            "upload_time_iso_8601": "2024-04-18T13:30:31.165483Z",
            "url": "https://files.pythonhosted.org/packages/62/63/4743cd598a6a44dcd3c4579a8c81c606897de0a07685feb127cdf46edfec/pykdtree-1.3.12-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7e898dff63ef9ca3e915238459b721dace2c25b0a80060acb216d06f06f911bd",
                "md5": "338417532b3d9611349975544dc25536",
                "sha256": "7771f1151e97080c3efb38e444ed6912dede203ca7e1d415f9b43f880cf92bcb"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "338417532b3d9611349975544dc25536",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 355079,
            "upload_time": "2024-04-18T13:30:33",
            "upload_time_iso_8601": "2024-04-18T13:30:33.044051Z",
            "url": "https://files.pythonhosted.org/packages/7e/89/8dff63ef9ca3e915238459b721dace2c25b0a80060acb216d06f06f911bd/pykdtree-1.3.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0c3d6d98090cb3b9feff160ebaeb37520f4b7590e03e41a67e9ea34360ab969f",
                "md5": "2ed0e252165f78f04d25ba6dfb8bb585",
                "sha256": "7882706b092b501dd4e74d7658d9ab06d1eac2f88e819877a52cd7441b21a806"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2ed0e252165f78f04d25ba6dfb8bb585",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 365659,
            "upload_time": "2024-04-18T13:30:34",
            "upload_time_iso_8601": "2024-04-18T13:30:34.960382Z",
            "url": "https://files.pythonhosted.org/packages/0c/3d/6d98090cb3b9feff160ebaeb37520f4b7590e03e41a67e9ea34360ab969f/pykdtree-1.3.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bbc8f52666320b9b5d7158c597319da355ff779efd97c58ad3fbdeb8176b1f9a",
                "md5": "feb46e7e50d6a777de78bbbcd4346d88",
                "sha256": "d5f64e2dcc603c436ec7fd00c975f38537930cf1097e6ae4d9a80e1e900de528"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp311-cp311-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "feb46e7e50d6a777de78bbbcd4346d88",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 371014,
            "upload_time": "2024-04-18T13:30:36",
            "upload_time_iso_8601": "2024-04-18T13:30:36.915668Z",
            "url": "https://files.pythonhosted.org/packages/bb/c8/f52666320b9b5d7158c597319da355ff779efd97c58ad3fbdeb8176b1f9a/pykdtree-1.3.12-cp311-cp311-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4ee4bcd94e77eae1c9f95394a7355064ea7308e4f99d5824f732d0e570a76849",
                "md5": "03794a4e3d57b3c8d01561e96aa50296",
                "sha256": "1b9473cc5c62f1a7e61f3cabe5d4098b9ec61a63040e1bbd74e5d4482c3603d9"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "03794a4e3d57b3c8d01561e96aa50296",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 58940,
            "upload_time": "2024-04-18T13:30:38",
            "upload_time_iso_8601": "2024-04-18T13:30:38.090703Z",
            "url": "https://files.pythonhosted.org/packages/4e/e4/bcd94e77eae1c9f95394a7355064ea7308e4f99d5824f732d0e570a76849/pykdtree-1.3.12-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0497bd9db567ae4c0e6a27df69176efc34abf68d7076ec0cd2edc128bfc6f8f1",
                "md5": "a1b205eff8eff2e956218867da700dab",
                "sha256": "199585ff5a41c5f383bef3a68cff5c651b342045a8c7409576e3b17fd8a57f4e"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp311-cp311-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "a1b205eff8eff2e956218867da700dab",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 49311,
            "upload_time": "2024-04-18T13:30:39",
            "upload_time_iso_8601": "2024-04-18T13:30:39.717382Z",
            "url": "https://files.pythonhosted.org/packages/04/97/bd9db567ae4c0e6a27df69176efc34abf68d7076ec0cd2edc128bfc6f8f1/pykdtree-1.3.12-cp311-cp311-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ce3446096c6c822926f0132883e6622755307df6318bcff8796e3beae282ab53",
                "md5": "cb8d0d47523f5c5d3dba57db7a22894e",
                "sha256": "1d20a8f54d29d255fad4bac26e80231067d9331bb9aacc2ee6743e4325b346fa"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp312-cp312-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cb8d0d47523f5c5d3dba57db7a22894e",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 66306,
            "upload_time": "2024-04-18T13:30:40",
            "upload_time_iso_8601": "2024-04-18T13:30:40.762094Z",
            "url": "https://files.pythonhosted.org/packages/ce/34/46096c6c822926f0132883e6622755307df6318bcff8796e3beae282ab53/pykdtree-1.3.12-cp312-cp312-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fd43d4381658a39f4f29edc615a48f3dd4ff9e3f45c7bb68519ea092560a78f0",
                "md5": "430055e1f047526e313303933ecef17f",
                "sha256": "f985d1b742452ff597fe9c9a0ea2c89cd85b298bcf3f6a565fa0d7ce66eb313f"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "430055e1f047526e313303933ecef17f",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 61472,
            "upload_time": "2024-04-18T13:30:42",
            "upload_time_iso_8601": "2024-04-18T13:30:42.474386Z",
            "url": "https://files.pythonhosted.org/packages/fd/43/d4381658a39f4f29edc615a48f3dd4ff9e3f45c7bb68519ea092560a78f0/pykdtree-1.3.12-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e4711738cb16b70006256023ae786d436ecb39fa952d0e694bf4d8f4b409a9ec",
                "md5": "8ad8e3ffd30ecd20023b5db2b38cdf3c",
                "sha256": "41020443270ef8aee5caf513d8a060126743a0aee19d33d35a6684fa2d37c13a"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "8ad8e3ffd30ecd20023b5db2b38cdf3c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 367985,
            "upload_time": "2024-04-18T13:30:43",
            "upload_time_iso_8601": "2024-04-18T13:30:43.859270Z",
            "url": "https://files.pythonhosted.org/packages/e4/71/1738cb16b70006256023ae786d436ecb39fa952d0e694bf4d8f4b409a9ec/pykdtree-1.3.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d3ed5f3f4ffc6dcb0ed677bb93a8faba0a226551dc543715ea2e12c11d753515",
                "md5": "88f925477f80a930919fb30e9fe58478",
                "sha256": "88f52541f094ada031cee6ab44864d25d41ede97dbdb78cf55f5e9919e366841"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "88f925477f80a930919fb30e9fe58478",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 376676,
            "upload_time": "2024-04-18T13:30:45",
            "upload_time_iso_8601": "2024-04-18T13:30:45.862661Z",
            "url": "https://files.pythonhosted.org/packages/d3/ed/5f3f4ffc6dcb0ed677bb93a8faba0a226551dc543715ea2e12c11d753515/pykdtree-1.3.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4864996cb116f13bc68b081bb089016a064abd0f075256b34a3a753900b259c6",
                "md5": "e7b90f1c3d7c459dcf939f8d8ab0f33d",
                "sha256": "3fd826f886bff82b4c25cdc61df5142e309a45421388de2922bd315995d7fe8f"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp312-cp312-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e7b90f1c3d7c459dcf939f8d8ab0f33d",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 383465,
            "upload_time": "2024-04-18T13:30:47",
            "upload_time_iso_8601": "2024-04-18T13:30:47.763489Z",
            "url": "https://files.pythonhosted.org/packages/48/64/996cb116f13bc68b081bb089016a064abd0f075256b34a3a753900b259c6/pykdtree-1.3.12-cp312-cp312-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fcc81cc5b670b40257f58b36d74833be829ab4b5a751f75fcaf6444fad869d86",
                "md5": "10d3802bb3de62c54f51d2ac81255bad",
                "sha256": "c79d6db009714c1b2092366c78c5ffc645cfe5b7103ed4f94eabba3833b70088"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "10d3802bb3de62c54f51d2ac81255bad",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 57434,
            "upload_time": "2024-04-18T13:30:49",
            "upload_time_iso_8601": "2024-04-18T13:30:49.556791Z",
            "url": "https://files.pythonhosted.org/packages/fc/c8/1cc5b670b40257f58b36d74833be829ab4b5a751f75fcaf6444fad869d86/pykdtree-1.3.12-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a31617f7acb968be0630e64232a54505547683c8cdbfbdb50467b48d186c2ecb",
                "md5": "3617b2a1ef70d1c1d393789dbd588bb6",
                "sha256": "67a87b1a4f9ea484a3269cb7f468e3993bc03bc984ce63215302280061e5b691"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp312-cp312-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "3617b2a1ef70d1c1d393789dbd588bb6",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 48297,
            "upload_time": "2024-04-18T13:30:50",
            "upload_time_iso_8601": "2024-04-18T13:30:50.697268Z",
            "url": "https://files.pythonhosted.org/packages/a3/16/17f7acb968be0630e64232a54505547683c8cdbfbdb50467b48d186c2ecb/pykdtree-1.3.12-cp312-cp312-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ac935e13a6c25665d96b4a3d5c3786fcdb1730dd7c261779dc19936188f20471",
                "md5": "9412bfc32c1a7e23611a27e1984bf7b8",
                "sha256": "8c72357382c37e8d9af7e6b0257340a4c37bc20c9034559af11527034ba3e7b2"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9412bfc32c1a7e23611a27e1984bf7b8",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 70075,
            "upload_time": "2024-04-18T13:30:52",
            "upload_time_iso_8601": "2024-04-18T13:30:52.221766Z",
            "url": "https://files.pythonhosted.org/packages/ac/93/5e13a6c25665d96b4a3d5c3786fcdb1730dd7c261779dc19936188f20471/pykdtree-1.3.12-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ee49b9f794f80bae54a99fcbe25f6894a39d239dd1b78ae54883d8ee56914bf3",
                "md5": "bd5d4c3623bc94dd5639d0adcc68c2ca",
                "sha256": "9ba445012613a5284bfb57e119019138b15b363d39246a618d2e9994505baa2e"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "bd5d4c3623bc94dd5639d0adcc68c2ca",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 63604,
            "upload_time": "2024-04-18T13:30:53",
            "upload_time_iso_8601": "2024-04-18T13:30:53.289464Z",
            "url": "https://files.pythonhosted.org/packages/ee/49/b9f794f80bae54a99fcbe25f6894a39d239dd1b78ae54883d8ee56914bf3/pykdtree-1.3.12-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9c6c95e152a4b35d59261358198b69ce68f5cf1118c91bb602846a8d2352128e",
                "md5": "70cc0209d68831b2760842b88e05008a",
                "sha256": "8dfe19bab0e7bf92e69657d5c03b3fabc89c2afed64ae394700d09e00b86b07f"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "70cc0209d68831b2760842b88e05008a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 334392,
            "upload_time": "2024-04-18T13:30:54",
            "upload_time_iso_8601": "2024-04-18T13:30:54.961479Z",
            "url": "https://files.pythonhosted.org/packages/9c/6c/95e152a4b35d59261358198b69ce68f5cf1118c91bb602846a8d2352128e/pykdtree-1.3.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ade94282e36d68d681eefe28b9c966a081af45ca7373628c07b08327f7bc2c46",
                "md5": "327de3e3f44655c2a08a85c76434c90f",
                "sha256": "ba7d8dbd5976a029b59d5c9893fe0448f9c452ca3b08aaf9be4d8262fbeab42f"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "327de3e3f44655c2a08a85c76434c90f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 346419,
            "upload_time": "2024-04-18T13:30:56",
            "upload_time_iso_8601": "2024-04-18T13:30:56.575679Z",
            "url": "https://files.pythonhosted.org/packages/ad/e9/4282e36d68d681eefe28b9c966a081af45ca7373628c07b08327f7bc2c46/pykdtree-1.3.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "613bf801a35aa1fce2139376a8404703a95621c10b04711ac8fdcf10b842dd59",
                "md5": "4d8982e261110f524216a4959a74c1f5",
                "sha256": "1e171cc813c54ff4cffce844230575334c7298aea0c78c1b33a533995608fce5"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp39-cp39-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4d8982e261110f524216a4959a74c1f5",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 360811,
            "upload_time": "2024-04-18T13:30:58",
            "upload_time_iso_8601": "2024-04-18T13:30:58.101173Z",
            "url": "https://files.pythonhosted.org/packages/61/3b/f801a35aa1fce2139376a8404703a95621c10b04711ac8fdcf10b842dd59/pykdtree-1.3.12-cp39-cp39-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "25cfea3a964b95cb12ecace25f281fd04dccb9e1063d43f4d8a9bbbcfc142572",
                "md5": "6d653b6704547ee8f95dacc7c700cf5a",
                "sha256": "b6cc13f4cc1a5ec967d47db088b6423a629127c43184e5857c631ccc64a8c590"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "6d653b6704547ee8f95dacc7c700cf5a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 59522,
            "upload_time": "2024-04-18T13:30:59",
            "upload_time_iso_8601": "2024-04-18T13:30:59.888249Z",
            "url": "https://files.pythonhosted.org/packages/25/cf/ea3a964b95cb12ecace25f281fd04dccb9e1063d43f4d8a9bbbcfc142572/pykdtree-1.3.12-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1012fa1f83399742148519a5277e383547941e9999acae8639b385cf6dd8963c",
                "md5": "93cd026c6eeb535f05cebda38313bbbf",
                "sha256": "2e23bdaff080affc415b614f2cb230616fc4c4095b56bbb614c56b67f11f3ed1"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12-cp39-cp39-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "93cd026c6eeb535f05cebda38313bbbf",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 49885,
            "upload_time": "2024-04-18T13:31:01",
            "upload_time_iso_8601": "2024-04-18T13:31:01.388517Z",
            "url": "https://files.pythonhosted.org/packages/10/12/fa1f83399742148519a5277e383547941e9999acae8639b385cf6dd8963c/pykdtree-1.3.12-cp39-cp39-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "35ad2a03094c9490077e48cfb7af19d9d49cf304c80fb6d68e67073964e9ac80",
                "md5": "9094988f1c30d42212ac0b406c200827",
                "sha256": "cc20b2a67c64056485a314d2c2b6dba354af7ee1c8fb8dae1be6f2936a374341"
            },
            "downloads": -1,
            "filename": "pykdtree-1.3.12.tar.gz",
            "has_sig": false,
            "md5_digest": "9094988f1c30d42212ac0b406c200827",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 25065,
            "upload_time": "2024-04-18T13:31:02",
            "upload_time_iso_8601": "2024-04-18T13:31:02.596972Z",
            "url": "https://files.pythonhosted.org/packages/35/ad/2a03094c9490077e48cfb7af19d9d49cf304c80fb6d68e67073964e9ac80/pykdtree-1.3.12.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-18 13:31:02",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "storpipfugl",
    "github_project": "pykdtree",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pykdtree"
}
        
Elapsed time: 0.27980s