***************************
**Breaking changes**:
- Removed `SlimTreeSequence` class entirely (it was previously deprecated).
All its methods are either available in `tskit.TreeSequence`
or are now called by `pyslim.fn(ts, ...)` instead of `ts.fn(...)`.
- TODO: Deprecated `util.unique_labels_by_group`.
- Moved some methods of `SlimTreeSequence` to pyslim:
* instead of `slim_ts.slim_time(t)` do `pyslim.slim_time(ts, t)`
* instead of `slim_ts.individuals_alive_at(t)` do `pyslim.individuals_alive_at(ts, t)`
* instead of `slim_ts.individuals_parents(t)` do `pyslim.individuals_parents(ts, t)`
* instead of `slim_ts.individuals_ages(t)` do `pyslim.individuals_ages(ts, t)`
- The methods `slim_ts.mutation_at( )` and `slim_ts.nucleotide_at( )`
are now methods of pyslim, whose first argument is the tree sequence.
- In SLiM v4 "generation" has been renamed to "tick", and so corresponding things
in pyslim have been renamed: top-level metadata now has `ts.metadata["SLiM"]["tick"]`
instead of `ts.metadata["SLiM"]["generation"]`
- Renamed `pyslim.annotate_defaults()` to `pyslim.annotate()`, with slight
changes in behavior: since msprime.sim_ancestry() now simulates individuals
by default, annotation does not set up individuals: if you have a tree
sequence without individuals (e.g., produced by msprime.simulate()) then you
need to set up those individuals yourself.
- To update a tree sequence produced by an old version of SLiM to the current one,
use `pyslim.update( )`. (However, note that reading it in to SLiM and
writing it out again might be even easier.)
- The method `pyslim.set_tree_sequence_metadata` now has arguments `tick` and `cycle`
instead of `generation`.
- Removed `pyslim.make_slim_provenance_dict`.
**Other notable changes**:
- Top-level metadata now has a `tick` attribute that is (for now) a synonym
for `generation`; the latter will be deprecated at some point in the future.
- Methods for getting time, population, and location information about individuals
are now in tskit:
* `SlimTreeSequence.individual_times` is now `TreeSequence.individuals_time()`
* `SlimTreeSequence.individual_populations` is now `TreeSequence.individuals_population()`
* `SlimTreeSequence.individual_locations` is now `TreeSequence.individuals_location()`
However, this will be invisible to the user. In each case note the the
location of the "s" has moved (to "individual*s* time" instead of "individual
time*s*"), but the original version remains an undocumented alias.
**New features**:
- Methods like `pyslim.individuals_alive_at( )` now deal with the new `stage="first"`.
********************