- 4-fold speedup in analyses of DNA data when
useScaling=TRUE(#1002).
- Add a
stop( )function to halt Rev script execution with a user-specified message (#1019). - Allow
rep( )to take input of typeProbability(#1035). - Allow specifying a fixed burnin fraction in convergence rules (#1048).
- DAG
- Fix a segfault when the model graph contains a cycle (#962).
- Make sure
Model::getOrderedStochasticNodesinserts parents before children (#1050).
- Likelihood evaluation
- Avoid -inf log likelihoods in
fnF81( )(#1002). - Avoid -inf / NaN log likelihoods in
mvBetaSimplex(#1002).
- Avoid -inf log likelihoods in
- MCMC
- Draw random numbers regardless of log likelihood difference to reduce test fragility (#1006).
- Make sure all MPI ranks finished writing to a trace file before convergence rules read it (#1029).
- Require the
frequencyargument of convergence rules to be strictly positive (#1044). - Make it simpler to
excludevector variables frommnModel(#1052).
- Interface
- Do not print asterisks ad infinitum when running
.burnin( )for zero generations (#1049). - Make sure help pages show the constructors, arguments, and domain types for all overloads of a given distribution (#1056).
- Do not print asterisks ad infinitum when running
- Misc
- Make sure
mnStochasticVariableandMcmc::checkpointwrite out the hidden state (allocation index) ofdnMixture(#987). - Fix reading of RNA datasets (#1018).
- Fix handling of extant samples when
rho=0and of purely extinct trees indnBDSTP(#1032). - Make sure the
.getStateDescriptions( )method preserves the first-seen state order (#1036). - Prevent
dnPhyloWhiteNoisefrom taking the log of an already log-transformed density (#1054). - Fix initialization issues with backbone-constrained nonclock analyses (#1056).
- Fix handling of parameter-specific timelines in
dnBDSTP(#1059).
- Make sure
- Refactor partial likelihood scaling (#1002).
- Remove pointer arithmetic (#1026).
- Expand documentation for
srGelmanRubin,srGeweke,srMinESS,srStationarity(#1048).
- Enable and improve support for the AVX instruction set (#1002).
- Add support for building and developing RevBayes using the Nix package manager (#1033).
- @sriram98v made their first contribution in #1033.
- @wnsplim made their first contribution in #1050.
- Remove the
tuneTargetargument from those moves that are not capable of being tuned (#947). - Remove
dnPhyloCTMCDollo(#997). - Temporarily disable the uniform partitioning distribution (
dnUPP) (#999).
- Slight speedup in analyses employing
dnPhyloCTMCwhenuseScaling=TRUE(#816). - Much faster merging of log files with
mcmc(..., combine="mixed")(#981).
- Model selection via leave-one-out cross-validation (#460).
- StairwayPlot method for inferring demographic histories from site frequency spectra (#460).
- State-dependent Brownian motion (BM) and Ornstein-Uhlenbeck (OU) processes (#904).
- Add functions for folding site frequency spectra and creating StairwayPlot vectors (#460).
- Add function for reading stochastic character maps (#904).
- Allow vector input to
ln( )andlog( )(#948). - Add an
.isRooted( )method toTree(#952). - Add
-pflag to print commands from-eexpression or script (#978). - Make stochastic mapping and ancestral state monitors work for all types of discrete characters (#994).
- Tree handling
- Fix handling of quoted labels and tree-level comments when reading Newick trees (#799).
- Treat unrooted trees as such when generating summaries (#932).
- Fix parsing of nested comments in Newick trees (#946).
- Make sure the
mrcaIndex( )function and.unroot( )method work on rooted nonclock trees (#952). - Refactor the
.reroot( )method ofTreeobjects (#966).
- Moves
- Fixes to
mvRateAgeProposalandmvRateAgeSubtreeProposal(#908, #940). - Make sure the
tuneTargetargument is honored when present (#947).
- Fixes to
- Checkpointing
- Prevent checkpoint file corruption by partial overwrites (#935).
- Prevent duplicated iterations when resuming from a checkpoint (#970).
- Add serialization support to
MatrixRealfor checkpoint use (#983).
- Crash / NaN
- Fix a segfault in the help2yml executable built with MPI (#937).
- Misc
- Fix issues with missing values in multisample BM and OU processes (#905).
- Fix handling of the
burninargument in posterior predictive simulations (#923). - Correct reasoning about return types for
max( ),median( ),min( ),sum( )(#938). - Check for mismatches in the number of states between an SSE model and underlying data (#974).
- Make sure
writeNexus( )keeps all state labels when concatenating character matrices (#975, #995). - Make sure we start the interactive loop when
-iis given even if there is an error (#977).
- Non-user-facing
- Clean up partial likelihood caching in
dnPhyloCTMC(#816). - Switch from C++17 to C++23, supporting those features that are available in GCC 12 (#927).
- Add assertion checks to
Tree::getNode( )(#972). - Fix hidden virtual functions (#976, #984).
- Fix various compiler warnings (#998).
- Clean up partial likelihood caching in
ConditionalPosteriorOrdinate,dnStairwayPlot,fnBSPInterval,fnFoldSFS,mvAdaptiveRJSwitch,mvRandomCategoryWalk(#460).- Expand documentation for
dnMultinomial,mvRandomGeometricWalk,mvRandomIntegerWalk,mvRandomNaturalWalk(#460). CharacterHistory,dnPhyloBrownianProcessStateDependent,dnPhyloCTMCDASiteIID,dnPhyloOrnsteinUhlenbeckStateDependent,mvCharacterHistory,readCharacterHistory(#904).mrcaIndex(#952).
- Fix continuous-integration (CI) tests on macOS where boost 1.90 is broken (#924).
- Update
build.shfor setting boost location with modern CMake (#925). - Make sure the CI test script fails when tutorial tests fail (#940).
- Allow tests that require TensorPhylo (#941).
- Make sure the CMake build script does not drop extra arguments if
-boost_rootis given (#951). - Fix compile cache misses (#959).
- Help database cleanup (#989).
- Make meson always build the help2yml executable (#990).
- @HaoqingDu made their first contribution in #905.
- Restructure the command-line interface following Rscript syntax (#803, #827).
- Change the name of the first argument of
TraceTree.getUniqueTrees( )fromcredibleTreeSetSizetominCladeProbability(#819). - Change the name of the first argument of
TraceTree.isTreeCovered( )fromci_sizetocredibleTreeSetSize(#819). - Remove the argument
num_taxafromTraceTree.computeEntropy( )(#819). - Remove
mvAddRemoveTip(#862).
- Allow executing Rev expressions from the command line (#803).
- Allow handling partial ambiguities involving a gap state (#838).
- Add function for writing alignments to Phylip format (#882).
- Add arguments to
dnPhyloCTMCto account for observational error (#901).
- Summary trees
- Prevent
.reroot( )from incorrectly reassigning node and branch annotations (#804). - Report 95% HPD intervals for the ages of sampled ancestors (#810).
- Fix majority-rule consensus trees with sampled ancestors (#859).
- Prevent
- MCMC
- Do not print confusing messages about tip age adjustments on initialization (#821).
- Allow specifying
tuningInterval = 0inmcmc.burnin( )(#843) andpowerPosterior.burnin( )(#878). - Make sure
mnModelextracts the right nodes from the model graph (#900).
- Moves
- Safely undo node time moves if there are no nodes for them to operate on (#829).
- Make sure tip time moves use the right node index in each MCMC run (#895).
- Crash / NaN
- Fix the block bootstrap when the number of samples is small (#842).
- Fix a segfault in FBD analyses with multiple parameter-specific timelines (#861).
- Misc
- Multiple fixes for
TraceTreemethods (#819). - Fix FBD analyses with a single parameter-specific timeline (#845).
- Allow subscripting arrays by any variable that can be typecast to
Natural(#856). - Fix printing
Simplexobjects in validation analyses (#876). - Fix the ODE solver used in
dnCDBDPanddnTVSSE(#883). - Remove null terminators from
.methods( )output (#886). - Ensure compiler-independent output in complex FBD analyses (#895).
- Fix
dnPhyloBrownian(#897). - Fix
dnGeometric(#907, #915).
- Multiple fixes for
- Expand documentation for
mvSlice(#614). - Expand documentation for
TraceTree(#819). args(#830, #851).dnPhyloCTMC- Add a description of the
codingargument (#832). - Expand the provided example to show how to simulate characters (#868).
- Formatting fixes (#867, #871).
- Add a description of the new
observationErrorProbabilityandobservationErrorFrequenciesarguments (#901).
- Add a description of the
mvFNPR(#839).- Minor fixes to
write(#852) anddnBeta(#900). - Corrections to
srGewekeand multispecies coalescent distributions (#871). - Add a description of the
burninMethodargument of convergence rules (#871). - Miscellaneous formatting fixes (#871).
- Do not require the
systemboost library inCMakeLists.txt(#831). - Increase the minimum CMake version from 3.5 to 3.10.2 (#834).
- Sync the Nexus Class Library (NCL) with the upstream repo (#837)
- GitHub Actions updates (#841, #892).
- Update meson build instructions (#857).
- Remove a duplicated test file to suppress a
git clonewarning (#873).
- @mcranium made their first contribution in #839.
- @curiosusJR made their first contribution in #873.
- Change the distribution name of the sampled-speciation birth-death model from
dnSBBDPtodnSSBDP(#714).
- Distributions
- Add a topologically constrained distribution for the state-dependent speciation and extinction process (#693).
- Allow nonzero
rhovalues in FBD analyses without extant tips (#788). - Make
dnGLHBDSPfaster and allow reporting stochastic mappings (#693).
- Methods / arguments
- Add an
.nbranches( )method toTree(#759). - Add a method for calculating the standard error of marginal likelihood estimates (#779).
- Add a nanoseconds option to
time( )(#796).
- Add an
- Interface
- Nicer printing of member method lists (#800).
- Misc
- Biogeography: allow regional features and non-existent regions (#693).
- Regression fixes
- Fix posterior predictive simulations that were broken in 1.3.0 (#778).
- Fix validation analyses that were broken in 1.3.0 (#814).
- Member procedures
- Fix
.getTopologyFrequency( )behavior for tree traces (#750). - Fix
.resolveMultifurcations( )behavior in edge cases (#771, #780).
- Fix
- Nexus I/O
- Make sure
writeNexus( )can handleBranchLengthTreevectors (#758). - Fix parsing of the
STATELABELSblock in Nexus files (#760). - Allow reading Nexus files with an
ASSUMPTIONSblock (#764).
- Make sure
- MPI / MC^3
- Fix segfault in MPI + MC^3 (#763).
- Fix logging and progress monitoring for
.runOneStone( )+ MPI (#782).
- Moves
- Fix argument name mismatch in
mvUpDownSlide(#766). - Fix
mvEllipticalSliceSamplingSimpleto not require strict equality of likelihoods (#773). - Reject tree moves if there are no nodes for them to operate on (#798, #802).
- Fix argument name mismatch in
- Misc
- Synchronize dirty flagging for nodes and transition probability matrices (#773).
- Fix caching to avoid crashes when using
dnReversibleJumpMixture(#773).
- Partial
- Avoid subscripting by
-1indnAutocorrelatedEvent(#773).
- Avoid subscripting by
- Basic data types:
Integer,Natural,Probability,Real(#714). - Birth-death models:
dnCBDSP,dnCDBDP,dnSSBDP(#714). - Marginal likelihood estimators:
pathSampler,steppingStoneSampler(#779). - Expand documentation for
TraceTree(#800).
- Update DLLs to allow running RevStudio on Windows (#751).
- Don't print operator summaries in coalescent tests, and only run 1 generation (#770).
- Enable testing with assertions to detect out-of-bounds indices in
std::vector(#773). - Don't skip remaining scripts in a test if one fails, and combine error message from multiple failing scripts in a test (#773).
- Allow specifying a required exit code to allow/require failure (#773).
- Fix check for missing output files (#773).
- Make test runner output clearer and more informative (#773).
- Replace
boost::filesystemwithstd::filesystem(#807).
- @prilau made their first contribution in #796.
- Change the name of the tuning argument of
mvUpDownSlidefromlambdatodelta. - Change the name of the first argument of
Tree.reroot( )fromcladetooutgroup. - In
powerPosterior( ), specifyingcats=Nsets up N analyses numbered 1--N, rather than N+1 analyses numbered 0--N.
- Interface
- Print convergence statistics during MCMC runs with stopping rules if
verbose=2(#645, #657, #739). - Better progress monitoring for power posterior analyses (#673).
- Print convergence statistics during MCMC runs with stopping rules if
- Methods / arguments
- Add member procedure for randomly resolving multifurcations (#641).
- Add an
nrunsargument toreadTrace( )(#736).
- Functions
- Add function for minimum branch length time-scaling (#641).
- Add trigonometric functions (#647, #648).
- Checkpointing
- Fix segfault when attempting to resume an MPI analysis (#646).
- Fix mismatch of chain states and chain heats when resuming an MC^3 analysis (#670).
- Don't skip iterations when logging a resumed MC^3 analysis (#727).
- MPI / MC^3
- Fix NaN heats in MC^3 (#661).
- Make sure MPI runs the specified number of independent replicates (#662).
- Model graph
- Only convert deterministic nodes to constant nodes if they really are constant (#678).
- Fix crash in user functions (#687).
- Make sure indexing by a deterministic variable creates a deterministic node (#719).
- Only type-convert variables based on value if they are constant (#721).
- Moves
- Fix
mvRateAgeBetaShift(#688). - Allow moves to propose out-of-range indices (#709).
- Allow moves with low probability ratio and high Jacobian/Hastings ratio (#728).
- Fix
- Member procedures
- Fix
.dropTip( )behavior for multifurcations (#640). - Fix
.getStateDescriptions( )behavior when subsetting by state space (#696). - Fix
.reroot( )behavior when specifying an outgroup by its name string (#742).
- Fix
- Misc
- Fix stochastic character mapping when there are excluded characters (#636).
- Fix handling of large integers on Windows (#708).
- Don't ignore negative clade constraints (#711).
- Allow for machine uncertainty in
dnEpisodicBirthDeathwith empirical sampling (#713). - Fix partial likelihood caching in
dnPhyloCTMC(#729). - Allow reading multiple trees from a string (
readTrees(text = ...)) (#735).
- Partial
- Prevent some instances of clamped values from being modified (#600).
Simplex(#606).- Moves
mvBetaSimplex,mvDirichletSimplex,mvElementSwapSimplex(#606).mvDPPValueBetaSimplex,mvDPPValueScaling,mvDPPValueSliding(#666).mvNNI,mvSPR,mvScale,mvScaleBactrian,mvSlide,mvSlideBactrian,mvTreeScale,mvUpDownScale,mvUpDownSlide(#683).
sin(#648, #683).- Substitution models
fnJC(#649).fnF81,fnGTR,fnHKY,fnK80,fnK81,fnT92,fnTrN(#653, #656).fnLG,fnWAG(#655).fnFreeK(#667).fnCovarion(#704).fnFreeBinary(#706).
exp(#653).- Complete and standardize documentation for
dnBernoulli,dnBeta,dnBimodalLognormal,dnBimodalNormal,dnBinomial,dnCategorical,dnCauchy,dnChisq,dnDirichlet,dnExponential,dnGamma(#663). dnUniformInteger,fnReadVCF,vectorFlatten(#667).- Expand documentation for
powerPosterior(#673). matrix,var(#681).floor,mnModel,reverse,sinh(#683).power,write(#690).- Analysis output types and I/O functions
readTrace(#702, #723, #736).readTreeTrace(#703, #722, #723, #736).Trace,TraceTree(#723).
- Discretization functions:
fnDiscretizeDistribution,fnDiscretizeGamma(#707).
- Update validation tests (#473).
- Fix continuous-integration builds by dropping openlibm (#644).
- Change build files to streamline updates to the help database (#659).
- Make tutorial tests more flexible (#674).
- Make sure the test runner can handle tutorial checkpoint tests (#676).
- Add integration tests for revised coalescent classes (#689).
- Change website submodule to pull from source rather than master (#692).
- @sigibrock made their first contribution in #648.
- @raymondcast18 made their first contribution in #649.
- @PhyloevoTi made their first contribution in #655.
- @ixchelgzlzr made their first contribution in #703.
- @basantakhakurel made their first contribution in #704.
- @Levi-Raskin made their first contribution in #711.
- Remove
underPriorargument tomcmc.run( )andmcmcmc.run( ). You can usemodel.ignoreAllData()instead. - Remove
dnLogexponential. You can usednExponential(l) |> tnLog()instead. - Remove
tree.makeBifurcating()in favor oftree.suppressOutdegreeOneNodes(). To resolve a trifurcation at the root you can usereroot(..., makeBifurcating=TRUE)instead.
- Allow fossil age sampling with an initial tree in
dnConstrainedTopology(#481). - Transformed distributions:
- Add shift/scale/exp/log/logit/invlogit-transformed distributions (e.g.
dnExp(1) |> tnShift(2)). (#466, #500) - Allow
C + dist,C - dist,dist - C, andC*distfor a constantCand distributiondist. (#617)
- Add shift/scale/exp/log/logit/invlogit-transformed distributions (e.g.
- Allow ignoring data from specific nodes with
model.ignoreData(seqData,morphData)(#628) - Extend
type( )to optionally show the full type-spec (#504).
- Multiple fixes for building, especially on Windows (#490, #491, #493, #494, #495, #496, #498).
- Checkpointing
- Fix FBD checkpointing bugs related to
dnBDSTP(#484) and fossil time moves (#502, #517). - Fix MC^3 checkpointing bug (#553).
- Fix FBD checkpointing bugs related to
- Types
- Fix type conversion to integer so that it employs deterministic nodes (#545).
- Make
RealPoscoherent between conversion and construction (#554). - Make
vectorFlattenwork on more types (#514).
- Crash / NaN
- Fix
dnMixtureof rate matrices and otherCloneableobjects (#501). - Fix
treeAssemblysometimes failing to initialize branch lengths (#509). - Fix crash if a file changes while we are
source( )-ing it (#510). - Fix segfault with
dnConstrainedTopology+dnUniformTimeTree(#513). - Fix a segfault in
Model::getOrderedStochasticNodes(#569).
- Fix
- MCMC: initialization
- Fix fossil age sampling with an initial tree in
dnBDSTP(#480). - Fix FBD initialization issues (#537, #561).
- Extend the starting tree simulator to account for origin/root age (#561).
- Fix fossil age sampling with an initial tree in
- MCMC
- Fix recalculation of likelihoods for Brownian motion distributions (#596).
- Fix recalculation of likelihoods with
mvRootTimeSlideUniform(#594). - Fix recalculation of likelihood with
treeAssembly(#549). - Fix Gelman-Rubin (PSRF) and stationarity stopping rules (#555).
- Don't move fossil tips outside their age ranges (#559).
- Fix operator summary for MC^3 when moves are tuned (#522).
- Debug:
- Log reason for -Inf and NaN probabilities (#592).
- Add options
debugMCMCandlogMCMCfor investigating likelihood recalculation bugs (#570, #575, #593). - More informative error message in
treeAssemblywhen number of branch lengths is wrong (#605).
- Misc
- Allow reading non-square matrices (#564).
- Allow checking
args.size()when no arguments are given. (#479). - Balance braces when printing
Matrix<Real>(#615).
dnPhyloCTMC( )(#487).fnDiscretizeBeta( )(#625).model( )(#538).time( )(#572, #574)--setOption/setOption()/getOption()(#583)- Clarify differences between
.clamp()and.setValue()(#599). - Stopping and convergence rules (#488).
mcmcandmcmcmc.run( )(#485, #488)..initializeFromCheckpoint( )(#505).movescheduleparameter and theweightparameter of moves (#506).
- Corrections to
dnBivariatePoisson(#539) andmcmcmc(#541).
- Refactor coalescent to allow heterochronous samples and more.
- Allow constructing substitution models as SiteMixtureModel objects.
- Imputation of missing entries in AverageDistanceMatrix
- Fix simulation of rate categories with variable coding.
- Fix operator[] in AverageDistanceMatrix
- Setting collapseSampledAncestors=true is now ignored -- use fnCollapseSA(tree).
- Temporarily disable FBD-Range models (#449).
- Refactor PhyloOrnsteinUhlenbeckREML (#426)
- Allow mnFile and mnModel to write JSON output if given format="json" (#377)
- Refactor dnBDSTP, dnFBDP, and dnPhylodynamicBDP (#386, #440)
- Compute average distance matrices more efficiently (#454).
- Compute ExponentialError probability densities more efficiently (#432, #434).
- Add member procedure to set node age (#380).
- Add member procedures to remove invariant and gap sites (#379, #392).
- Be less picky about initial tree ages matching ages from taxon files (#455).
- Make mvCollapseExpandFossilBranch complain if r=1 (no fossil sampling) (#440).
- Make power posterior analyses more flexible (#397).
- Stop BD simulations from hanging in situations with many constraints (#453).
- Stop moving fossil tip nodes in mvRootTimeSlideUniform (#447).
- Fix consensusTree (#441).
- Fix crash reading trees with bad indices (#403, #395).
- Fix ancestral state reconstruction with missing data (#396)
- Fix the uniform topology prior (#442).
- Fix vectorFlatten (#445, #389).
- Fix a memory leak in reversible jump mixtures (#430).
- Fix BDSTP segfault (#367)
- Fix updating phylogenetic likelihood when site mixture probability changes (#437).
- Fix interaction of multiple stopping rules (#458).
- Fix crash with tuning on mvScale (#452).
- Fix writing delimited character data (#362)
- Fix representation of sampled ancestors in tensorphylo functions (#369).
- Fix offset for the read tree trace function (#381).
- Fix Probability(-1) and Probability(2) (#410).
- Don't flatten arrays of stochastic variables in checkpoint files (#448).
- We now use a flag (-j) instead of a separate executable for Jupyter mode.
- Matrices can be added, subtracted, and negated.
- Allow computing SSE likelihoods using TensorPhylo
- Add pipe operator:
x |> f(y)now yieldsf(x,y). - ... and many bug fixes.
- Cache transition probability matrices.
- 4x faster tree summaries.
- Discrete character data sets take 5x less RAM, and are 5x faster to load.
-
Add Occurence Birth-Death Process.
-
Better mixing statistics for MC^3.
-
Automatically remove degree-2 root nodes when reading non-clock trees.
- Fix some problems with the BDSTP.
- Fix false claim of conflicting constraints. (#250, #288)
- Don't get stuck on MCMC with amino-acid models.
- Fix crash in unrooted NNI and SPR.
- Fix using file paths and directories on Windows.
- Restore dnFBDP synonym for dnBDSTP.
- Restore initialTree argument to dnFBDP .
- Fix check for number of rates in FBD-Range process.
- Fix crash when reading some trees with sampled ancestors. (#240)
- Prevent NumStates methods from overriding character exclusion. (#252)
- C++ standard switched to C++17.
- slice sampling (mvSlice) can now do geometric scaling.
- New codon models:
- Goldman-Yang (1994), Muse-Gaut (1994), FMutSel (Yang 2008)
- Create of Codon models using stackable blocks fndNdS, fnX3, fnMutSel, fnMutSelAA
- i.e. fnMutSel( fndNdS( fnX3( fnGTR(er, pi), omega ), F ) # GTR + X3 + dNdS + MutSel
- New dinucleotide models: fnX2, fnMutSel
- i.e. fnMutSel( fnX2( fnHKY(kappa, nuc_pi) ), F ) # HKY + X2 + MutSel
- New birth death models:
- Birth death sampling treatment process (Magee et al. 2020)
- Time-heterogeneous fossilized birth death range process
- optional weighting in fnAverageDistanceMatrix
- FBD range model uses individual fossil occurrence data
- site mixture allocations work with codon models
- automatic handling of whitespace delimited files
- fixed occasional crashes when using recovering a tree from a checkpoint file due to rounding. Checkpointing now records doubles without rounding
- fixed a bug when printing individual elements of average distance matrices and calculating their completeness
- Warning: this version includes changes to the Random Number Generator, meaning analysis output will be different from v1.1.0, even when run with the same seed.
- new PoMo rate matrices with selection
- fixed an error in the likelihood calculation for discrete characters when using ambiguous characters and partitioning standard data by state number
- fixed a bug causing unbounded likelihoods when using PhyloBrownianProcessREML with unrooted trees
- fixed a crash when using ordered rate matrices
- fixed a crash when printing the value of a rate matrix
- fixed a crash when using nested clade constraints
- fixed a crash when using DEC models
- fixed an issue with using simplex indexes in deterministic nodes
- fixed a bug allowing NodeTimeSlideUniform to move sampled ancestor nodes