Metadata-Version: 2.1
Name: ox_vox_nns
Version: 0.1.0
Classifier: Programming Language :: Rust
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
License-File: LICENSE
Requires-Python: >=3.8
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM

# OxVoxNNS - Oxidised Voxelised Nearest Neighbour Search
A performant (for large numbers of query points) nearest neighbour search implemented in rust

# Usage
Basic usage:

```
from ox_vox_nns.ox_vox_nns import OxVoxNNS

indices, distances = ox_vox_nns.OxVoxNNS(
    search_points,
    max_dist,
    voxel_size,
).find_neighbours(
    query_points,
    num_neighbours
)
```

## TODO
### PyPI
- Investigate building release binaries and pushing with pipx (manual)
- Investigate automated with cibuildwheel

### Performance testing
- Create a function to generate test data, with the following parameters:
  - Number of search points
  - Range of point coordinate values (probably as a scalar, e.g. 15 => XYZ values in range [0, 15])
  - (Harder, do later) Distribution of points, i.e. some way of making the points less evenly spread (this can severely impact the performance of KDTrees)

Useful function: `np.random.random((num_points, 3))`

### Plotting
- Compare KDTree implementations - run the same nearest neighbour search using different libraries and plot results (x-axis: num points, y-axis: processing time)
  - scipy.spatial.KDTree (native python)
  - sklearn.neighbours.KDTree (C++)
  - open3d.core.nns.NearestNeighbourSearch (multithreaded C++)
  - OxVoxNNS (rust)

