# USearch

> Search, attention and sparse algebra behind one C ABI, in RAM, VRAM or on NVMe

## Modalities

Rather than one index taking an arbitrary distance function, each modality carries the measures its domain actually needs, with SIMD kernels dispatched by the machine's capabilities.
Every binding exposes the dense modality today; the others follow as their engines land.

| Modality   | Header                       | Measures                                                |
| :--------- | :--------------------------- | :------------------------------------------------------ |
| Dense      | `usearch/dense_index.h`      | Inner, Angular, Euclidean, Hamming, Jaccard             |
| Sequence   | `usearch/sequence_index.h`   | Levenshtein, Needleman-Wunsch, Smith-Waterman           |
| Matrix     | `usearch/matrix_index.h`     | Chamfer, Hausdorff, Gromov-Wasserstein, Kabsch, Umeyama |
| Geospatial | `usearch/geospatial_index.h` | Karney geodesics, trajectory and boundary similarity    |

## Verbs

Every entry point is named `usearch_<modality>_<verb>`, so one verb reads the same across the four headers and every binding spells it after the C name.
Executors, keys and errors are shared across modalities and live in `usearch/types.h`.

<!-- sync:verbs -->

| Modalities | Verbs |
| :--- | :--- |
| All four | `init_ram` · `init_vram` · `load_ram` · `load_vram` · `load_ram_buffer` · `load_vram_buffer` · `view_ram` · `view_nvme` · `free` · `reserve` · `clear` · `insert` · `refine` · `health` · `search` · `count` · `get` · `absorb` · `split` · `refinement_init` · `refinement_next` · `refinement_finish` · `cursor_init` · `cursor_next` · `cursor_free` · `sample` · `save` · `save_buffer` · `metadata_read` · `metadata_read_buffer` · `describe` |
| All but geospatial | `metric_name` · `metric_from_name` |
| Dense only | `compact` · `search_stream_init` · `search_stream_next` · `search_stream_free` · `multiply` · `attend` · `maxsim` |
| Geospatial only | `within` |

<!-- /sync:verbs -->
