buildNetwork() now scales to large, clonally expanded repertoires. The C++ engine was rewritten around candidate generation instead of all-pairs comparison, with no new dependencies and identical edge output for the default settings:
- Identical sequences collapse to one representative before any distance is computed, so clonal expansion no longer drives quadratic work.
- Length and V/J blocking act as an index. Only length-compatible representatives in the same block are compared.
- Levenshtein and Damerau use deletion-neighborhood (SymSpell) hashing for small edit distances, with Damerau indexed at radius
2k. Hamming uses pigeonhole segment indexing. Both fall back to length-blocked comparison outside their range. - Edges accumulate as integer node indices and gain their labels in R, which avoids building millions of barcode strings inside the parallel core.
Speedups range from roughly 2x on mixed repertoires with many V genes to about 70x when one block holds many unique sequences at a tight threshold.
- Added the
expandargument tobuildNetwork()."clique"(default) materializes every pairwise edge and reproduces the exact edge multiplicity that community-detection clustering expects."star"links identical sequences through a single hub and connects related groups hub to hub."star"produces far fewer edges and preserves connected components exactly, so it is a large memory win when the downstream step depends on connectivity.
- Fixed a banded Levenshtein error that dropped pairs whose only optimal alignment rides the band edge, including identical sequences at a tight normalized threshold. The boundary cell read the wrong diagonal value. The fix only recovers true edges and never removes valid ones.
- Made the normalized-threshold cutoff robust to floating-point rounding so a normalized distance exactly equal to the threshold is kept, matching the documented inclusive behavior.
- Fixed vignette build failure when IMGT network data is unavailable (e.g., on Bioconductor build servers)
- Fixed operator precedence bug in
inferCDR()reference validation check
getIMGT()now uses immReferent as a backend for downloading and caching IMGT reference sequences- Removed
frame,max.retries, andverboseparameters fromgetIMGT() - Added
refreshparameter togetIMGT()for controlling cache behavior - Removed
hash,httr, andrvestpackage dependencies (now handled by immReferent) - Replaced
.parseSpecies()with.mapSpecies()for immReferent species name compatibility
- improved error message for the
propertyEncoder()function when the suggestedPeptidespackage is not installed.
- Bioconductor devel branch update to match versions
The buildNetwork() function has been significantly enhanced to include:
-
Multiple distance metrics: Added support for five distance metrics via the
dist_typeparameter:"levenshtein"(default): Standard edit distance"hamming": Substitutions only (requires equal-length sequences)"damerau": Levenshtein with transpositions"nw": Needleman-Wunsch global alignment"sw": Smith-Waterman local alignment
-
Flexible normalization: New
normalizeparameter supports three modes:"none"(default): Raw distance values (backward compatible)"maxlen": Normalize by max(length(seq1), length(seq2))"length": Normalize by mean sequence length
- Ensure
buildNetwork()returns a symmetric distance matrix and drops nonstructural zeros
- Rebuilt
propertyEncoder()andonehotEncoder()to use C++ backend with encodeSequences.cpp - Rebuilt
buildNetwork()via C++ integration (fastEditEdges.cpp) - Motif quantification in
calculateMotif()use C++ (calculateMotif.cpp) - Reduce overall dependencies on external packages
- Improved speed of
generateSequences(),mutateSequences(),adjacencyMatrix(),tokenizeSequences(),geometricEncoder - Added group.by argument to
getIR() - Defunct
variationalSequences() - Removed keras3/tensorflow suggests/dependencies
- Removed baslisk environment, python no longer required
- Updated C++ backend to C++17
- Robust checks before running
getIMGT()for website functioning - Removing special unicode symbols
calculateEntropy()added to calculate the positional entropy along a biological sequence- Added basic diversity metrics (exported) to support
calculateEntropy() calculateFrequency()added to calculate the positional frequency along a biological sequencecalculateMotif()added to get motif quantification of sequencescalculateGeneUsage()added for single/paired gene enumeration- Added
scaleMatrix()for comprehensive scale/transformation functions - Added
summaryMatrix()for fast summarization of matrix values
- Fixed NT position issue with
inferCDR() - Fixed
generateSequence()range issue for single-length sequences - Fixed binary frequency issue in
positionalEncoder() - Fixed
buildNetwork()for relative thresholding returns relative value
- Updated unit tests and vignette check
- Converted package to basilisk from reticulate
- Update version for BioConductor release
getIMGT()checks for availability of IMGT website- Expanded Unit Tests
- Unit Tests and Vignette now evaluate for proper python installation overall
- Optional testthat
variationalSequences()evaluate presence of Keras
- Drop evaluation of
variationalSequences()example
- Vignette includes eval of keras installation for certain chunks
- Fix issue with optimizer call in
variationalSequences() - Move package to keras3
- Version Bump to be consistent with Bioconductor release
- Remove keras installation in vignette
- Removed lazydata loading
- Added @return to the data manual entries
- Update stop message for
propertyEncoder() - Removed set.seed from
variationalSequences() - Added runnable example for
variationalSequences() - Added better handling of no connection in
getIMGT() - Added max.retries to
getIMGT() - Updated testthat for new IMGT version
- Defining python version 3.10 for keras installation
- Added discrete check and install_keras() to vignette
- Added warning to
getIMGT()to mention IMGT license on first use - import magrittr instead of dplyr
- Fixed issue with license error
- Added example to
positionalEncoder() - Replaced discrete calling of "es =" in vignette
- Update readme to include keras based installation
- added set.seed() to vignette
- added introduction section to vignette with mention of other packages
- removed installation section from vignette (can't add BioC instructions until accepted)
- Fixed rendering issue with the vignette
- Subsampled example data and removed Omniscope example
- Updated testthat for
formatGenes()andinferCDR()for new example data - Reduced size of test data
- Minimized usage of sapply() and X:Y per BiocCheck suggestions
- Modified print() messages to messages()
- Add verbose parameter to turn on/off processing steps
- Added links for example data formats