# `Similarity.Cosine`
[🔗](https://github.com/preciz/similarity/blob/v0.5.1/lib/similarity/cosine.ex#L1)

A struct that can be used to accumulate ids & attributes and calculate similarity between them.

# `add`

Puts a new id with attributes into `%Cosine{}.map` and returns `%Cosine{}` struct.

## Examples

    s = Similarity.Cosine.new
    s = s |> Similarity.Cosine.add("barna", [{"n_of_bacons", 3}, {"hair_color_r", 124}, {"hair_color_g", 188}, {"hair_color_b", 11}])

# `between`

Returns `Similarity.cosine_srol/2` similarity between two pairs of ids (id_a, id_b) in `%Cosine{}`.

Returns `0.0` when the entries have no attributes in common. Raises `ArgumentError`
when either ID is missing.

## Examples

    s = Similarity.Cosine.new
    s = s |> Similarity.Cosine.add("barna", [{"n_of_bacons", 3}, {"hair_color_r", 124}, {"hair_color_g", 188}, {"hair_color_b", 11}])
    s = s |> Similarity.Cosine.add("somebody", [{"n_of_bacons", 0}, {"hair_color_r", 222}, {"hair_color_g", 62}, {"hair_color_b", 11}])
    s |> Similarity.Cosine.between("barna", "somebody")

# `new`

Returns a new `%Cosine{}` struct to be first used with `add/3` function

# `stream`

Returns a stream of all unique pairs of similarities in `%Cosine{}.map`

## Examples

    s = Similarity.Cosine.new
    s = s |> Similarity.Cosine.add("barna", [{"n_of_bacons", 3}, {"hair_color_r", 124}, {"hair_color_g", 188}, {"hair_color_b", 11}])
    s = s |> Similarity.Cosine.add("somebody", [{"n_of_bacons", 0}, {"hair_color_r", 222}, {"hair_color_g", 62}, {"hair_color_b", 11}])
    Similarity.Cosine.stream(s)

---

*Consult [api-reference.md](api-reference.md) for complete listing*
