As was discussed in the [SciPy integration thread](https://github.com/scipy/scipy/issues/19454), Python libraries use double-precision floating-point numbers by default.
So, in this release, I've extended the spatial distance functions in the underlying [SimSIMD](https://github.com/ashvardanian/simsimd) - `Cos`, `L2sq`, `IP` with support for `double` arguments with specialized implementations on AVX-512-capable x86 CPUs and SVE-capable Arm CPUs.
Benchmarking SimSIMD vs. SciPy on Intel Sapphire Rapids CPU
- Vector dimensions: 1536
- Vectors count: 1000
- Hardware capabilities: serial, x86_avx2, x86_avx512, x86_avx2fp16, x86_avx512fp16, x86_avx512vpopcntdq, x86_avx512vnni
- NumPy BLAS dependency: openblas64
- NumPy LAPACK dependency: dep140640983012528
Between 2 Vectors, Batch Size: 1
| Datatype | Method | Ops/s | SimSIMD Ops/s | SimSIMD Improvement |
| :------- | :-------------------- | -------------------: | -------------------: | ------------------: |
| `f64` | `scipy.cosine` | 63,612 | 572,605 | 9.00 x |
| `f64` | `scipy.sqeuclidean` | 238,547 | 915,596 | 3.84 x |
| `f64` | `numpy.inner` | 449,499 | 986,522 | 2.19 x |
Between 2 Vectors, Batch Size: 1,000
| Datatype | Method | Ops/s | SimSIMD Ops/s | SimSIMD Improvement |
| :------- | :-------------------- | -------------------: | -------------------: | ------------------: |
| `f64` | `scipy.cosine` | 68,962 | 1,457,172 | 21.13 x |
| `f64` | `scipy.sqeuclidean` | 247,727 | 1,535,547 | 6.20 x |
| `f64` | `numpy.inner` | 463,509 | 1,512,004 | 3.26 x |
Benchmarking SimSIMD vs. SciPy on AWS Graviton 3
- Vector dimensions: 1536
- Vectors count: 1000
- Hardware capabilities: serial, arm_neon, arm_sve
- NumPy BLAS dependency: openblas64
- NumPy LAPACK dependency: openblas64
Between 2 Vectors, Batch Size: 1
| Datatype | Method | Ops/s | SimSIMD Ops/s | SimSIMD Improvement |
| :------- | :-------------------- | -------------------: | -------------------: | ------------------: |
| `f64` | `scipy.cosine` | 40,729 | 725,382 | 17.81 x |
| `f64` | `scipy.sqeuclidean` | 160,812 | 728,114 | 4.53 x |
| `f64` | `numpy.inner` | 473,443 | 767,374 | 1.62 x |
| `f64` | `scipy.jensenshannon` | 15,684 | 38,528 | 2.46 x |
| `f64` | `scipy.kl_div` | 49,983 | 61,811 | 1.24 x |
Between 2 Vectors, Batch Size: 1,000
| Datatype | Method | Ops/s | SimSIMD Ops/s | SimSIMD Improvement |
| :------- | :-------------------- | -------------------: | -------------------: | ------------------: |
| `f64` | `scipy.cosine` | 41,130 | 1,460,850 | 35.52 x |
| `f64` | `scipy.sqeuclidean` | 162,147 | 1,486,255 | 9.17 x |
| `f64` | `numpy.inner` | 473,856 | 1,580,136 | 3.33 x |
Hashes
* docs.tar.gz : `def474428a4d67076e68dfd16b660a53bf51fad12af7e4c6ee77e1555b220b8f`
* usearch-v2.8.14.tar.gz : `6ae186618120b6c710ff3ed1bf31e9a58610e7b837bccdeae79000247c2b24a3`
* usearch-v2.8.14.zip : `a1da6b34bc23111926b16be9d36a7403988405a00c833417b27b8ccd9c70227f`
* usearch_linux_amd_2.8.14.deb : `ae4995f9504a9ab90921e3091a5aa6af432de647f1a6c835ee5cb2622dd2f8a3`
* usearch_linux_arm_2.8.14.deb : `dafcee294630b7c17adaed9aebb668d4cbfc5fe269f35f66b10bf458d66d899d`
* usearch_macOS_arm64_2.8.14.zip : `65e0a8d0259400e35de692c9afb3406d6bd4db5dd2f46632676890c41ba1537c`
* usearch_macOS_x86_64_2.8.14.zip : `1fa9a6e6983f5b6fe5dd2b82ce566262dcbd1d1e8671ec39b9d01ceddc3b80dd`
* usearch_wasm_linux_arm64_2.8.14.tar.gz : `edb5846ab0b38b1095b12f2b8ca771748394911bf6efd74df6d5ba66f36328d9`
* usearch_wasm_linux_x86_64_2.8.14.tar.gz : `84e4162db1dc83157f7a4032278c9cfc01a68ac59c4b1af1b5fc35e43905c515`
* usearch_wasm_macos_arm64_2.8.14.zip : `8c966ef2f5e425cf82f472bd4b74f0e7cd7fa39b860dd9f25f488370afc035fe`
* usearch_wasm_macos_x86_64_2.8.14.zip : `7e48cc5d0e34b586f36b86671c8410b2b2deca31962beb0ccf6230546ac42621`
* usearch_wasm_windows_x64_2.8.14.tar.gz : `02b1382c68fe8ef52d55da639a38ad15c7449d579230ef5ae78465776fd689fa`
* usearch_wasm_windows_x86_2.8.14.tar.gz : `cf922953ca61c8f9101fac33a2aa06d70fd09ef8b8c73d64a6623f73dcfe09cc`
* usearch_windows_x64_2.8.14.tar : `8a74a122fafae229f65df8de5a6e264eb16a7e5eba691629d6439b0b54ea8b74`
* usearch_windows_x86_2.8.14.tar : `96c6625fc2ca723cc44e864a75f5c72dc3ab9aeb5fe5f0f80ba32783121f6766`