Files
obitools4/autodoc/docmd/pkg/obidist/dist_matrix_test.md
T
Eric Coissac 8c7017a99d ⬆️ version bump to v4.5
- Update obioptions.Version from "Release 4.4.29" to "/v/ Release v5"
- Update version.txt from 4.29 → .30
(automated by Makefile)
2026-04-13 13:34:53 +02:00

29 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# `obidist` Package: Semantic Feature Overview
The `obidist` Go package provides two core data structures for managing **distance** and **similarity matrices**, with built-in guarantees suitable for scientific computing (e.g., clustering, phylogenetics). Key features include:
- **`DistMatrix`**: A symmetric `n×n` matrix representing pairwise distances, where:
- Diagonal entries are *always* `0.0` (self-distance).
- Off-diagonals obey symmetry: `dist(i, j) == dist(j, i)`.
- Automatic enforcement via dedicated `Set()`/`Get()` methods.
- **`SimilarityMatrix`**: A symmetric matrix where:
- Diagonal entries are *always* `1.0`.
- Off-diagonals represent similarity scores (e.g., between `0` and `1`, though not enforced).
- Symmetry is similarly guaranteed.
Both matrix types support:
- **Optional labels**: Associate human-readable identifiers (e.g., sample names) with rows/columns.
- **Safe bounds checking**: Panics on out-of-range access (tested via `defer/recover`).
- **Deep copy support**: Ensures isolation between original and copied instances.
- **Utility methods**:
- `MinDistance()` / `MaxDistance()`: Return extremal values and their indices.
- `GetRow(i)`: Retrieve a full row as a slice (symmetric copy).
- `ToFullMatrix()`: Export the matrix as an immutable 2D slice.
Edge cases are rigorously handled:
- Empty (`n=0`) and singleton (`n=1`) matrices return `(0.0, -1, -1)` for min/max.
- Label mutations do not affect internal state via defensive copying.
All behaviors are validated through comprehensive unit tests, emphasizing correctness and robustness.