What's Changed
**Performance Improvements: (tested locally)**
1. Faster KS stats (10%)
2. Slightly improve levenshtein and snowball stemming perf. (5-10%)
3. Faster query_radius_ptwise, faster query_nb_cnt, and other methods dependent on them. (5-15%)
**Fixes/Changes:**
1. Snowball now doesn't have parallel option. Stopwords and numbers will be stemmed to the empty string.
2. Hamming now should return Null when two strings cannot be compared.
3. Refactored existing graph functionalities
**Other:**
1. Restarted Python 3.8 support
2. Parallel execution will now respect Polars's context and thread pool size. If Polar's context is already parallel, they won't be parallel even when specified parallel = True. This forces user to only use parallel = True when they know the operation is expensive and they wish to only run this expression alone. In some cases, this improves parallel performance, because of less thread contention than previous parallel implementation. In other cases, this slightly slows things down, because parallel jobs are batched, and some thread will always have less work if batch sizes are not the same.
**Full Changelog**: https://github.com/abstractqqq/polars_ds_extension/compare/v0.3.0...v0.3.1