**Organization and Functionality:**
- Everything has been migrated to the namespace `km` for better encapsulation (Fixes 135)
- We now allow for <100 datapoints by setting the `batchSize` to `min(dataset_size, 100)` (Fixes 158)
- We now return `int`s for the medoid indices instead of `float`s, including a list of a single `int` if `k=1` (Fixes 152)
- We reformatted the functions in each `.cpp` file to appear in the same order they appear in the corresponding `.hpp`
- The code has been refactored for better organization
- The code in `setup.py` is now encapsulated (Fixes 131)
- The check for LLVM clang is now back in `setup.py` (Fixes 79)
- Attempting to set the build or swap confidences when not using the BanditPAM algorithm results in an error
**Tests:**
- The code's accuracy is now automatically checked by running test cases via Github actions (Fixes 52)
- An error is now thrown if an empty dataset is passed
- We now use FastPAM1 instead of PAM for the tests, which significantly speeds them up
- We added additional functionality to the tests to error quickly on failures
- The code is now tested on Python3.9 via Github actions (Fixes 46)
**Style:**
- We have changed variable names to `camelCase` for C++ variables (Fixes 140)
- The code is now automatically checked for style compliance via Github actions
- The python code now contains typehints
- `const` qualifiers have been added where possible
**Documentation:**
- We now publicly host the documentation on ReadTheDocs, via an integration with Sphinx (Fixes 165, Fixes 124)
- We have updated the `README` with links to the ReadTheDocs and SAIL blog post
- We have deleted duplicate docstrings in the `.cpp` files, moved all docstrings to the `.hpp` files, updated the docstrings, and added the necessary `throws` and `returns` (Fixes 127)
**Full Changelog**: https://github.com/ThrunGroup/BanditPAM/compare/v1.0.5...v2.0.0