├── .github ├── CODEOWNERS └── workflows │ ├── webservices.yml │ └── automerge.yml ├── .gitignore ├── .ci_support ├── README └── linux_.yaml ├── azure-pipelines.yml ├── .circleci └── config.yml ├── conda-forge.yml ├── .gitattributes ├── .azure-pipelines └── azure-pipelines-linux.yml ├── recipe ├── LICENSE └── meta.yaml ├── LICENSE.txt ├── .scripts ├── build_steps.sh └── run_docker_build.sh └── README.md /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @lmcinnes -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | 3 | build_artifacts 4 | -------------------------------------------------------------------------------- /.ci_support/README: -------------------------------------------------------------------------------- 1 | This file is automatically generated by conda-smithy. To change any matrix elements, you should change conda-smithy's input conda_build_config.yaml and re-render the recipe, rather than editing these files directly. -------------------------------------------------------------------------------- /azure-pipelines.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | jobs: 6 | - template: ./.azure-pipelines/azure-pipelines-linux.yml -------------------------------------------------------------------------------- /.ci_support/linux_.yaml: -------------------------------------------------------------------------------- 1 | channel_sources: 2 | - conda-forge,defaults 3 | channel_targets: 4 | - conda-forge main 5 | docker_image: 6 | - condaforge/linux-anvil-comp7 7 | pin_run_as_build: 8 | python: 9 | min_pin: x.x 10 | max_pin: x.x 11 | python: 12 | - 3.6.* *_cpython 13 | -------------------------------------------------------------------------------- /.github/workflows/webservices.yml: -------------------------------------------------------------------------------- 1 | on: repository_dispatch 2 | 3 | jobs: 4 | webservices: 5 | runs-on: ubuntu-latest 6 | name: webservices 7 | steps: 8 | - name: webservices 9 | id: webservices 10 | uses: conda-forge/webservices-dispatch-action@master 11 | with: 12 | github_token: ${{ secrets.GITHUB_TOKEN }} 13 | -------------------------------------------------------------------------------- /.github/workflows/automerge.yml: -------------------------------------------------------------------------------- 1 | on: 2 | status: {} 3 | check_suite: 4 | types: 5 | - completed 6 | 7 | jobs: 8 | automerge-action: 9 | runs-on: ubuntu-latest 10 | name: automerge 11 | steps: 12 | - name: checkout 13 | uses: actions/checkout@v2 14 | - name: automerge-action 15 | id: automerge-action 16 | uses: conda-forge/automerge-action@master 17 | with: 18 | github_token: ${{ secrets.GITHUB_TOKEN }} 19 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | version: 2 6 | 7 | jobs: 8 | build: 9 | working_directory: ~/test 10 | machine: true 11 | steps: 12 | - run: 13 | # The Circle-CI build should not be active, but if this is not true for some reason, do a fast finish. 14 | command: exit 0 15 | 16 | workflows: 17 | version: 2 18 | build_and_test: 19 | jobs: 20 | - build: 21 | filters: 22 | branches: 23 | ignore: 24 | - /.*/ 25 | -------------------------------------------------------------------------------- /conda-forge.yml: -------------------------------------------------------------------------------- 1 | travis: 2 | secure: 3 | BINSTAR_TOKEN: CmHril4lkj4MKnhaW8Q+jg5kfVRZHFGNZm9F8HXJtphINRCQDt6sish78Q3ADzvR0GfOK7eQvbs8IqvIhlS1zRixzeRrY27B2nXpxELd0oLzCFaLnM5aKlFJaP8XnJ889F6C6u9PwAVjWuT2uIi+57WozgRl5tYlJz3rP/NQmqouKyJUsGQ4s5z3E5xbMJpJkqsb+UESRGMhAMkzKFXkzhHfdC6HHHuqk9TpwtKxZXK5+h0BWuCwDTq9p+/GZ7gl9HoGEq3l0EyqKtrpaGkv+dohbkKwuSECu8iwmyA0a6deTrJu0x/cdkxE6rfJnpO/zG9pkprr2LqQIgqD2aRLF+3Aqhpn4kbTzWwCrrOEwv7PTmqTWAYgb5akfYlpHzGELnna9XDwNwE0k8dBNUy2F77UWLVnN1Sqo+C1bZk6hdfI+mvtEhESj/15vaCY7wNI1WsOLc56UKwnDOElwQzbNOdJp/Uv/Lso3sBylGcxwOSe0U5FYH08RXfgleKewAvcb8A+CmQpYIRm5iQOA7dPmkH44rbGoa1JVJcAICkcbwYSaVxXu3r5h9tbqXGly/30DV22NeWk9SXLTzofiZ83YlkZs1JItLm+EfrjlUKXAOAN2R8ooxLiiGrOF6kV8O2dGl+FYnLk4D3SaKsiXs0FQvhKbtlKUR9v1IUK6GrZ3xo= 4 | appveyor: 5 | secure: 6 | BINSTAR_TOKEN: tumuXLL8PU75WMnRDemRy02ruEq2RpNxeK3dz0MjFssnosPm2v4EFjfNB4PTotA1 7 | conda_forge_output_validation: true 8 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.patch binary 4 | *.diff binary 5 | meta.yaml text eol=lf 6 | build.sh text eol=lf 7 | bld.bat text eol=crlf 8 | 9 | # github helper pieces to make some files not show up in diffs automatically 10 | .azure-pipelines/* linguist-generated=true 11 | .circleci/* linguist-generated=true 12 | .drone/* linguist-generated=true 13 | .drone.yml linguist-generated=true 14 | .github/* linguist-generated=true 15 | .travis/* linguist-generated=true 16 | .appveyor.yml linguist-generated=true 17 | .gitattributes linguist-generated=true 18 | .gitignore linguist-generated=true 19 | .travis.yml linguist-generated=true 20 | .scripts/* linguist-generated=true 21 | LICENSE.txt linguist-generated=true 22 | README.md linguist-generated=true 23 | azure-pipelines.yml linguist-generated=true 24 | build-locally.py linguist-generated=true 25 | shippable.yml linguist-generated=true 26 | -------------------------------------------------------------------------------- /.azure-pipelines/azure-pipelines-linux.yml: -------------------------------------------------------------------------------- 1 | # This file was generated automatically from conda-smithy. To update this configuration, 2 | # update the conda-forge.yml and/or the recipe/meta.yaml. 3 | # -*- mode: yaml -*- 4 | 5 | jobs: 6 | - job: linux 7 | pool: 8 | vmImage: ubuntu-16.04 9 | strategy: 10 | matrix: 11 | linux_: 12 | CONFIG: linux_ 13 | UPLOAD_PACKAGES: 'True' 14 | DOCKER_IMAGE: condaforge/linux-anvil-comp7 15 | maxParallel: 8 16 | timeoutInMinutes: 360 17 | 18 | steps: 19 | # configure qemu binfmt-misc running. This allows us to run docker containers 20 | # embedded qemu-static 21 | - script: | 22 | docker run --rm --privileged multiarch/qemu-user-static:register --reset --credential yes 23 | ls /proc/sys/fs/binfmt_misc/ 24 | condition: not(startsWith(variables['CONFIG'], 'linux_64')) 25 | displayName: Configure binfmt_misc 26 | 27 | - script: | 28 | export CI=azure 29 | export GIT_BRANCH=$BUILD_SOURCEBRANCHNAME 30 | .scripts/run_docker_build.sh 31 | displayName: Run docker build 32 | env: 33 | BINSTAR_TOKEN: $(BINSTAR_TOKEN) 34 | FEEDSTOCK_TOKEN: $(FEEDSTOCK_TOKEN) 35 | STAGING_BINSTAR_TOKEN: $(STAGING_BINSTAR_TOKEN) -------------------------------------------------------------------------------- /recipe/LICENSE: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright (c) 2018, Leland McInnes 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | BSD 3-clause license 2 | Copyright (c) 2015-2019, conda-forge 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 8 | 9 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 10 | 11 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 12 | 13 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 14 | -------------------------------------------------------------------------------- /recipe/meta.yaml: -------------------------------------------------------------------------------- 1 | {% set name = "pynndescent" %} 2 | {% set version = "0.4.8" %} 3 | 4 | package: 5 | name: {{ name|lower }} 6 | version: {{ version }} 7 | 8 | source: 9 | url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz 10 | sha256: 63a0b4d2b592f3849ef96065d88fbcb2ec9d5ca403f28373371b141729732152 11 | 12 | build: 13 | number: 1 14 | noarch: python 15 | script: {{ PYTHON }} -m pip install . -vv 16 | 17 | requirements: 18 | host: 19 | - python >=3.6 20 | - setuptools 21 | - pip 22 | run: 23 | - python >=3.6 24 | - setuptools 25 | - numpy >=1.13 26 | - numba >=0.46 27 | - llvmlite >=0.30 28 | - scikit-learn >=0.19 29 | - scipy >=1.0 30 | 31 | test: 32 | requires: 33 | - python 34 | - setuptools 35 | commands: 36 | - python -c "import pkg_resources; pkg_resources.require('pynndescent')" 37 | imports: 38 | - pynndescent 39 | 40 | about: 41 | home: http://github.com/lmcinnes/pynndescent 42 | license: BSD-2-Clause 43 | license_family: BSD 44 | license_file: {{ environ["RECIPE_DIR"] }}/LICENSE 45 | summary: Simple fast approximate nearest neighbor search 46 | 47 | description: | 48 | A Python nearest neighbor descent for approximate nearest neighbors. 49 | This is a relatively straightforward python implementation of 50 | Nearest Neighbor Descent for k-neighbor-graph construction and 51 | approximate nearest neighbor search. 52 | dev_url: https://github.com/lmcinnes/pynndescent 53 | 54 | extra: 55 | recipe-maintainers: 56 | - lmcinnes 57 | -------------------------------------------------------------------------------- /.scripts/build_steps.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # PLEASE NOTE: This script has been automatically generated by conda-smithy. Any changes here 4 | # will be lost next time ``conda smithy rerender`` is run. If you would like to make permanent 5 | # changes to this script, consider a proposal to conda-smithy so that other feedstocks can also 6 | # benefit from the improvement. 7 | 8 | set -xeuo pipefail 9 | export PYTHONUNBUFFERED=1 10 | export FEEDSTOCK_ROOT="${FEEDSTOCK_ROOT:-/home/conda/feedstock_root}" 11 | export RECIPE_ROOT="${RECIPE_ROOT:-/home/conda/recipe_root}" 12 | export CI_SUPPORT="${FEEDSTOCK_ROOT}/.ci_support" 13 | export CONFIG_FILE="${CI_SUPPORT}/${CONFIG}.yaml" 14 | 15 | cat >~/.condarc </dev/null && pwd )" 11 | PROVIDER_DIR="$(basename $THISDIR)" 12 | 13 | FEEDSTOCK_ROOT=$(cd "$(dirname "$0")/.."; pwd;) 14 | RECIPE_ROOT="${FEEDSTOCK_ROOT}/recipe" 15 | 16 | docker info 17 | 18 | # In order for the conda-build process in the container to write to the mounted 19 | # volumes, we need to run with the same id as the host machine, which is 20 | # normally the owner of the mounted volumes, or at least has write permission 21 | export HOST_USER_ID=$(id -u) 22 | # Check if docker-machine is being used (normally on OSX) and get the uid from 23 | # the VM 24 | if hash docker-machine 2> /dev/null && docker-machine active > /dev/null; then 25 | export HOST_USER_ID=$(docker-machine ssh $(docker-machine active) id -u) 26 | fi 27 | 28 | ARTIFACTS="$FEEDSTOCK_ROOT/build_artifacts" 29 | 30 | if [ -z "$CONFIG" ]; then 31 | set +x 32 | FILES=`ls .ci_support/linux_*` 33 | CONFIGS="" 34 | for file in $FILES; do 35 | CONFIGS="${CONFIGS}'${file:12:-5}' or "; 36 | done 37 | echo "Need to set CONFIG env variable. Value can be one of ${CONFIGS:0:-4}" 38 | exit 1 39 | fi 40 | 41 | if [ -z "${DOCKER_IMAGE}" ]; then 42 | SHYAML_INSTALLED="$(shyaml -h || echo NO)" 43 | if [ "${SHYAML_INSTALLED}" == "NO" ]; then 44 | echo "WARNING: DOCKER_IMAGE variable not set and shyaml not installed. Falling back to condaforge/linux-anvil-comp7" 45 | DOCKER_IMAGE="condaforge/linux-anvil-comp7" 46 | else 47 | DOCKER_IMAGE="$(cat "${FEEDSTOCK_ROOT}/.ci_support/${CONFIG}.yaml" | shyaml get-value docker_image.0 condaforge/linux-anvil-comp7 )" 48 | fi 49 | fi 50 | 51 | mkdir -p "$ARTIFACTS" 52 | DONE_CANARY="$ARTIFACTS/conda-forge-build-done-${CONFIG}" 53 | rm -f "$DONE_CANARY" 54 | 55 | # Allow people to specify extra default arguments to `docker run` (e.g. `--rm`) 56 | DOCKER_RUN_ARGS="${CONDA_FORGE_DOCKER_RUN_ARGS}" 57 | if [ -z "${CI}" ]; then 58 | DOCKER_RUN_ARGS="-it ${DOCKER_RUN_ARGS}" 59 | fi 60 | 61 | export UPLOAD_PACKAGES="${UPLOAD_PACKAGES:-True}" 62 | docker run ${DOCKER_RUN_ARGS} \ 63 | -v "${RECIPE_ROOT}":/home/conda/recipe_root:rw,z \ 64 | -v "${FEEDSTOCK_ROOT}":/home/conda/feedstock_root:rw,z \ 65 | -e CONFIG \ 66 | -e BINSTAR_TOKEN \ 67 | -e HOST_USER_ID \ 68 | -e UPLOAD_PACKAGES \ 69 | -e GIT_BRANCH \ 70 | -e UPLOAD_ON_BRANCH \ 71 | -e CI \ 72 | -e FEEDSTOCK_TOKEN \ 73 | -e STAGING_BINSTAR_TOKEN \ 74 | $DOCKER_IMAGE \ 75 | bash \ 76 | /home/conda/feedstock_root/${PROVIDER_DIR}/build_steps.sh 77 | 78 | # verify that the end of the script was reached 79 | test -f "$DONE_CANARY" -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | About pynndescent 2 | ================= 3 | 4 | Home: http://github.com/lmcinnes/pynndescent 5 | 6 | Package license: BSD-2-Clause 7 | 8 | Feedstock license: BSD 3-Clause 9 | 10 | Summary: Simple fast approximate nearest neighbor search 11 | 12 | A Python nearest neighbor descent for approximate nearest neighbors. 13 | This is a relatively straightforward python implementation of 14 | Nearest Neighbor Descent for k-neighbor-graph construction and 15 | approximate nearest neighbor search. 16 | 17 | 18 | Current build status 19 | ==================== 20 | 21 | 22 | 23 | 28 | 29 |
All platforms: 24 | 25 | 26 | 27 |
30 | 31 | Current release info 32 | ==================== 33 | 34 | | Name | Downloads | Version | Platforms | 35 | | --- | --- | --- | --- | 36 | | [![Conda Recipe](https://img.shields.io/badge/recipe-pynndescent-green.svg)](https://anaconda.org/conda-forge/pynndescent) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/pynndescent.svg)](https://anaconda.org/conda-forge/pynndescent) | [![Conda Version](https://img.shields.io/conda/vn/conda-forge/pynndescent.svg)](https://anaconda.org/conda-forge/pynndescent) | [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/pynndescent.svg)](https://anaconda.org/conda-forge/pynndescent) | 37 | 38 | Installing pynndescent 39 | ====================== 40 | 41 | Installing `pynndescent` from the `conda-forge` channel can be achieved by adding `conda-forge` to your channels with: 42 | 43 | ``` 44 | conda config --add channels conda-forge 45 | ``` 46 | 47 | Once the `conda-forge` channel has been enabled, `pynndescent` can be installed with: 48 | 49 | ``` 50 | conda install pynndescent 51 | ``` 52 | 53 | It is possible to list all of the versions of `pynndescent` available on your platform with: 54 | 55 | ``` 56 | conda search pynndescent --channel conda-forge 57 | ``` 58 | 59 | 60 | About conda-forge 61 | ================= 62 | 63 | [![Powered by NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](http://numfocus.org) 64 | 65 | conda-forge is a community-led conda channel of installable packages. 66 | In order to provide high-quality builds, the process has been automated into the 67 | conda-forge GitHub organization. The conda-forge organization contains one repository 68 | for each of the installable packages. Such a repository is known as a *feedstock*. 69 | 70 | A feedstock is made up of a conda recipe (the instructions on what and how to build 71 | the package) and the necessary configurations for automatic building using freely 72 | available continuous integration services. Thanks to the awesome service provided by 73 | [CircleCI](https://circleci.com/), [AppVeyor](https://www.appveyor.com/) 74 | and [TravisCI](https://travis-ci.com/) it is possible to build and upload installable 75 | packages to the [conda-forge](https://anaconda.org/conda-forge) 76 | [Anaconda-Cloud](https://anaconda.org/) channel for Linux, Windows and OSX respectively. 77 | 78 | To manage the continuous integration and simplify feedstock maintenance 79 | [conda-smithy](https://github.com/conda-forge/conda-smithy) has been developed. 80 | Using the ``conda-forge.yml`` within this repository, it is possible to re-render all of 81 | this feedstock's supporting files (e.g. the CI configuration files) with ``conda smithy rerender``. 82 | 83 | For more information please check the [conda-forge documentation](https://conda-forge.org/docs/). 84 | 85 | Terminology 86 | =========== 87 | 88 | **feedstock** - the conda recipe (raw material), supporting scripts and CI configuration. 89 | 90 | **conda-smithy** - the tool which helps orchestrate the feedstock. 91 | Its primary use is in the construction of the CI ``.yml`` files 92 | and simplify the management of *many* feedstocks. 93 | 94 | **conda-forge** - the place where the feedstock and smithy live and work to 95 | produce the finished article (built conda distributions) 96 | 97 | 98 | Updating pynndescent-feedstock 99 | ============================== 100 | 101 | If you would like to improve the pynndescent recipe or build a new 102 | package version, please fork this repository and submit a PR. Upon submission, 103 | your changes will be run on the appropriate platforms to give the reviewer an 104 | opportunity to confirm that the changes result in a successful build. Once 105 | merged, the recipe will be re-built and uploaded automatically to the 106 | `conda-forge` channel, whereupon the built conda packages will be available for 107 | everybody to install and use from the `conda-forge` channel. 108 | Note that all branches in the conda-forge/pynndescent-feedstock are 109 | immediately built and any created packages are uploaded, so PRs should be based 110 | on branches in forks and branches in the main repository should only be used to 111 | build distinct package versions. 112 | 113 | In order to produce a uniquely identifiable distribution: 114 | * If the version of a package **is not** being increased, please add or increase 115 | the [``build/number``](https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#build-number-and-string). 116 | * If the version of a package **is** being increased, please remember to return 117 | the [``build/number``](https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#build-number-and-string) 118 | back to 0. 119 | 120 | Feedstock Maintainers 121 | ===================== 122 | 123 | * [@lmcinnes](https://github.com/lmcinnes/) 124 | 125 | --------------------------------------------------------------------------------