asap_sketchlib 0.2.1

A high-performance sketching library for approximate stream processing
Documentation
# API: Hydra

Status: `Ready`

## Purpose

Hierarchical subpopulation sketching over semicolon-separated keys.

## Type/Struct

- `Hydra`
- `MultiHeadHydra`

## Constructors

```rust
fn default() -> Self
fn with_dimensions(r: usize, c: usize, sketch_type: HydraCounter) -> Self

// MultiHeadHydra
fn with_dimensions(r: usize, c: usize, dimensions: Vec<(String, HydraCounter)>) -> Self
```

## Insert/Update

```rust
fn update(&mut self, key: &str, value: &DataInput, count: Option<i32>)

// MultiHeadHydra
fn update(&mut self, key: &str, values: &[(&DataInput, &[&str])], count: Option<i32>)
```

## Query

```rust
fn query_key(&self, key: Vec<&str>, query: &HydraQuery) -> f64
fn query_frequency(&self, key: Vec<&str>, value: &DataInput) -> f64
fn query_quantile(&self, key: Vec<&str>, threshold: f64) -> f64

// MultiHeadHydra
fn query_key(&self, key: Vec<&str>, dimension: &str, query: &HydraQuery) -> f64
fn dimension_index(&self, dimension: &str) -> Option<usize>
```

## Merge

```rust
fn merge(&mut self, other: &Hydra) -> Result<(), String>
fn merge(&mut self, other: &MultiHeadHydra) -> Result<(), String>
```

## Serialization

```rust
fn serialize_to_bytes(&self) -> Result<Vec<u8>, RmpEncodeError>
fn deserialize_from_bytes(bytes: &[u8]) -> Result<Self, RmpDecodeError>
```

## Examples

```rust
use asap_sketchlib::{Hydra, DataInput};

let mut hydra = Hydra::default();
hydra.update("region=us;service=api", &DataInput::Str("err"), None);
let est = hydra.query_frequency(vec!["region=us"], &DataInput::Str("err"));
assert!(est >= 1.0);
```

## Caveats

- Canonical enum/query/input definitions are in [Common Input Types]./api_common_input.md.
- Query compatibility depends on `HydraCounter` variant.

## Status

Primary subpopulation framework with broad test coverage.