Changes in version 2.14.1.9001 - Add NNIMaxStep(): the largest clustering information distance attainable by a single nearest neighbour interchange on an n-leaf tree, derived analytically (normalized or not) rather than by sampling. - Use grDevices palettes to drop colorspace dependency. Changes in version 2.14.1 (2026-06-10) - TransferConsensus() is deprecated, moving to ConsTree::Transfer(). - Fixed: PhylogeneticInformationDistance() now calculates correct score for identical 4-leaf trees. - Improve KMeansPP() performance: O(k²n) → O(kn). Changes in version 2.14.0 (2026-05-09) New features - TransferConsensus() constructs a consensus tree that minimizes the sum of transfer distances to a set of input trees, using a greedy add-and-prune heuristic. - TransferDist() computes the transfer dissimilarity between phylogenetic trees, with scaled and unscaled variants. - LAP (Jonker–Volgenant linear assignment) and Mutual Clustering Information C++ implementations exposed via LinkingTo: TreeDist. Internals - Large-tree support: all distance functions now accept trees with up to 32 767 tips. Requires TreeTools ≥ 2.3.0. Performance - RobinsonFoulds() now uses a fast C++ batch path when comparing lists of trees, providing a ~20× speedup on typical inputs. Changes in version 2.13.0 New features - MCITree() selects the tree from a posterior sample with the highest total split information content — a Maximum Clade Information analogue of the Maximum Clade Credibility tree. Performance Pairwise distance computation has been optimized. Typical speedups over v2.12.0 for tree sets where many splits are shared: | Metric | 100 × 50 tips | 40 × 200 tips | |-----------------------------|--------------:|--------------:| | ClusteringInfoDistance | ~5× | ~12× | | MatchingSplitDistance | ~7× | ~11× | | InfoRobinsonFoulds | ~4× | ~5× | OpenMP parallelism - Pairwise distance functions now use OpenMP parallelism when supported and enabled with options(mc.cores = N), superseding StartParallel(). Kendall & Colijn distance - KCVector() reimplemented in C++, giving ~220× speedup per tree. - All-pairs and cross-pairs KendallColijn() Euclidean distances now computed in C++ (pair_diff_euclidean(), vec_diff_euclidean()). Changes in version 2.12.0 (2026-02-13) - Support larger trees in some functions by updating some functions to use 32-bit integers, per TreeTools v2.1.0. - AHMI() now returns negative values (previously zeroed in error). - Experimental support for a new method of SPR distance calculation: subject to change or removal. Changes in version 2.11.1 (2025-10-13) - Improve robustness of SpectralEigens() tests. Changes in version 2.11.0 (2025-09-28) - HierarchicalMutualInformation() calculates the information shared between pairs of hierarchical partition structures \doi{10.1103/PhysRevE.92.062825}. - Fix bug in calculation of MutualClusteringInfo(): the matching chosen was not always the global optimum, causing distances to be overestimated in some circumstances (#163). - Fix crash in robinson_foulds_all_pairs() and RobinsonFoulds(list). - Support larger trees in NNI distance calculations. Changes in version 2.10.1 (2025-08-25) - Compiler-safe vector initialization, resolving M1-SAN warnings. Changes in version 2.10.0 (2025-08-22) Note - this release introduced a bug in the computation of the mutual clustering information / clustering information distance. The globally optimal matching between splits was not always found. This was fixed in v2.11.0. - Ntropy() computes entropy from integer counts. - C++ optimizations and reformatting: - Faster tree distance calculation. - 2x speed-up of LAPJV for large matrices. - Require R4.0; discontinue tests against R4.0. Changes in version 2.9.2 (2025-01-11) - Fix crash when calculating NNI distance for large trees. Changes in version 2.9.1 (2024-09-07) - Avoid false positive in MKL testing environment. Changes in version 2.9.0 (2024-09-03) - VisualizeMatching() allows more control over output format, and returns the matching (#124). - DistanceFromMedian(Average = median) allows calculation of MAD. - SpectralEigens() returns correct eigenvalues (smallest was overlooked). - SpectralEigens() handles values of nEig larger than the input. - Anticipate new behaviour of unlist(use.names = TRUE) in R 4.5. Changes in version 2.8.0 (2024-07-26) - Islands() allows the identification of islands of trees. - Internal implementation of path and SPR distances, removing dependency on phangorn (and thus R 4.4). - Add progress bar within .MaxValue() Changes in version 2.7.1 - Documentation improvements. - Fix KCDiameter.multiPhylo() for multiple trees. Changes in version 2.7.0 (2023-10-25) - Fix calculation error in StrainCol(). - App: Display strain in 3D tree space viewer. - Support for distances between larger trees. - Support unrooted trees in VisualizeMatching() (#103). Changes in version 2.6.3 (2023-08-25) - Fix bug when comparing a "multiPhylo" object containing a single tree. - Documentation clarification: finding non-matching leaves. Changes in version 2.6.2 (2023-06-29) - Support non-square matrices in LAPJV(). Changes in version 2.6.1 (2023-05-01) - StopParallel() gains quietly argument to suppress unnecessary messages. - Use "PlotTools" package for spectrum legends. - Minor documentation tweaks. Changes in version 2.6.0 (2023-02-20) - Support comparison of trees with different tips. - Fix caching errors in MapDist() (#98). - Update tests for compatibility with ape 5.7. Changes in version 2.5.0 (2022-10-07) - New functions to measure cluster sizes (see ?"cluster-statistics"). - KMeansPP() conducts clustering using K-means++, replacing K-means in app. - New vignette on tree landscape analysis. Changes in version 2.4.1 (2022-07-20) - New vignette on how to compare tree sets. - PathVector() now treats trees with a root node as rooted. - Fix plot layout in treespace vignette. - Informative failure when not enough memory for consensus_info(). - Replace throw with stop in C++. Changes in version 2.4.0 (2022-03-23) - Correct calculation of trustworthiness and continuity metrics. - Depict strain in minimum spanning trees with StrainCol() and helper function MSTSegments(). - Update tests for consistency with "TreeTools" v1.7. - Use lighter Rcpp headers. Changes in version 2.3.0 (2022-01-03) - Support ConsensusInfo(p > 0.5). - Address hypervolume comparison in vignettes. - Support uniform manifold approximation and projection in app. Changes in version 2.2.0 (2021-09-13) - Speed improvements, using optimizations suggested by Alexis Stamatakis' Bioinformatics group. - Support for parallel computation via StartParallel(). - Progress bars. Changes in version 2.1.1 (2021-07-13) - Solaris compatibility. - Modest vignette improvements. - spic/scic abbreviation recognition. Changes in version 2.1.0 (2021-07-12) New features - ConsensusInfo() quickly calculates the splitwise information content of the consensus of a set of trees, after Smith (forthcoming). - SplitwiseInfo() and ClusteringInfo() gain a p parameter to reflect the reduced information content of splits with lower support values, and a sum parameter to allow return of individual split information content. - KCDiameter() approximates the diameter of the Kendall-Colijn metric. - Plot3() (experimental) provides pseudo-3D plotting. Renamed functions - Project()/ProjectionQuality() re-named to MapTrees()/MappingQuality(). - SpectralClustering() re-named to SpectralEigens(). Improvements - Add self-organizing map example to treespace vignette. - Allow the specification of custom vectors in the Kendall--Colijn metric. - Faster all-to-all tree distance calculation. Changes in version 2.0.3 (2021-01-31) - Diagnose and fix memory leaks, including over-long reported matchings. - Explicitly import shiny/shinyjs functions. Changes in version 2.0.0 (2021-01-20) - Project() launches 'shiny' app for projection and analysis of tree space. - ProjectionQuality() calculates trustworthiness and continuity of tree space mappings. - Faster calculation of Robinson–Foulds distance (using algorithm of Day (1985)) and clustering information distance. - New class ClusterTable to allow faster distance computation with Day (1985) algorithm. - Improve error messages in CalculateTreeDist(). - Improvements to vignettes. - Use package 'vdiffr' conditionally. Changes in version 1.2.1 (2020-09-17) - Import RdMacros package 'RdPack'. Changes in version 1.2.0 (2020-08-28) - TreeDistance() and related functions now return a dist object when computing all distances between all pairs of trees in a list. - Improve floating-point arithmetic in TreeDistance() functions. - TreeDistance() now returns a distance (as documented), rather than a similarity. - Fix rounding error in NNI 'Li' upper estimate, and improve NNI performance. - Reduce precision of LAPJV so rounding errors do not result in interminable run times. Changes in version 1.1.1 (2020-07-10) - Fix range errors when calculating tree distances. Changes in version 1.1.0 - Improvements to NNIDist() in light of Fack et al. (2002). - Add NNIDiameter(): approximate diameter of NNI distance. - Remove vignette 'Interpreting tree distances': duplicates https://ms609.github.io/TreeDistData/articles/09-expected-similarity.html. - Remove redundant data object oneOverlap. - Fix an issue when installing on R 3.x (require C++11 to ensure declaration of UINT_FAST16_MAX). - Fix memory-handling bug in lapjv(). Changes in version 1.0.0 (2020-06-30) - Initial release, building on some draft functions included in 'TreeSearch' 0.3.2.9005.