## =========
Version 1.8-7

Changes in existing functions:
  - seqpcplot(): Suppressed unnecessary "output" argument. The
    'seqpcplot' object is automatically retrieved when using the
    assignment operator, e.g., p <- seqepcplot(...).

Bug fixes:
  - seqformat(): When converting from STS to TSE, an error was raised if the
    tevent matrix had empty strings (i.e. ""). Now, this is considered as no event.
  - seqpcplot(): Fixed error that appeared at the use of "_end" events.
  - seqpcplot(): An error occurred when plotting a state sequence object
    (of class stslist) with a numeric 'cnames' attribute.
    
Misc:
  - Required packages RColorBrewer and boot now listed as "imports" 
    in DESCRIPTION and using import in NAMESPACE.    

## =========
Version 1.8-6

Changes in existing functions:
  - seqformat(): new 'nr' argument to specify the missing state
    symbol in SPS input.
  - disstreeleaf(): new logical 'label' argument to specify
    whether the leaf membership should be labelled with
    the classification rules.

Bug fixes:
  - seqtreedisplay() and disstreedisplay(): GraphViz installer no longer
    adds GraphViz to the PATH environment variable. Therefore the two
    functions have been adapted to search for GraphViz. In case GraphViz
    would not be found, you can specify the GraphViz installation
    directory with the new 'gvpath' argument.
  - disstree() and seqtree(): removed the warning when R equals 0 or 1
    (no permutations).
  - seqformat(): fixed a problem with missing states when converting
    from SPS to STS (see Changes in function above.)
  - seqpcplot(): fixed issues with 'which' argument of 'plot.seqpcplot'.
  - seqpcplot(): fixed issues with arguments 'xlab' and 'title'.
  - seqpcplot(): replaced a warning message by an error message at
    failures in finding plot positions for sequences. The error
    message advices to modify the (currently hidden) 'maxit' argument.
    Additionally, automatically generated subtitles are now hidden
    when the argument 'title' is used.
  - as.character.seqelist(), print.seqelist(): fixed an issue with time
    display in event sequences which was in scientific notation for numbers
    with more than 2 digits. The function now uses the R format function and
    thus accounts for global formatting options such as options(digits=)
    and/or options(scipen=).
  - seqtrate(): fixed error with sequence objects having only two columns.

New functionalities:
  - disstree2dot() and disstree2dotp() gain a new argument called "title.outer".
    If title.outer=TRUE, the title is printed in the outer margins.

## =========
Version 1.8-5

Bug fixes:
  - seqefsub(): reported support did not properly account for weights.
  - seqtreedisplay(): corrected a bug when using representative sequences and
    a "dist" object was passed to the "dist.matrix" argument (reported by
    Emanuela Struffolino).
  - seqLLCS() and seqLLCP(): added a check on the argument. Both sequences
    should belong to state sequence objects with a common alphabet.
  - seqpcplot(): small change in default lower ylim.

Help pages:
  - help pages updated with author and keyword fields.

## =========
Version 1.8-4

Bug fixes:
  - seqrep(), dissrep(), seqrplot(): wrong (unweighted) "na" values were returned;
    also quality measures "MD" (mean distance to representative) and "V"
    (discrepancy) were not computed properly when more than one representative
    selected (since version 1.8-2).

User invisible changes:
  - Added an internal function to fix an issue with an internal C level
    function when called from other packages.

## =========
Version 1.8-3

Information pages:
  - Updated online help pages.
  - Updated list of references returned by citation("TraMineR").

New functionalities:
  - seqpcplot(): parallel coordinate plot for sequence data

Changes in existing functions:
  - seqdss(): adding long state labels to returned sequence object
  - seqplot(): new option type = "pc"
  - seqplot(), seqdplot(), seqiplot(), seqfplot(), seqmsplot(), seqrplot():
    if 'density' and/or 'angle' are used to produce shading lines
    instead of solid colors, the legend is plotted using the same
    parameters and thus corresponds to the colors/shades used in the plot.
  - seqplot(): if group argument is a factor, the plots are
    now ordered the same way as the factor levels.
  - seqplot(), plot.stslist(): if sortv is a factor, the
    sequences are now sorted according to the order of the factor levels.
  - seqmodst() and plot.stslist.modst(): changed name of
    attribute "occurences" of object returned by seqmodst to
    "occurrences". Made resulting changes in plot.stslsit.modst.

Bug fixes:
  - seqdef(): When selecting subsets of sequence objects using rownames
    instead of row indexes, the corresponding weights were not selected.
    Fixed by setting (row)names of weight vector as the sequence
    rownames. (Alexis Gabadinho)


## ==========
Version 1.8-2

Vignettes: Slightly modified JSS article vol. 40(4) added as a vignette
    on state sequence analysis.

Misc:
  - added 'ex2' data sets to test and illustrate the handling of weights,
        type help(ex2) for details.

New functionalities:
  - New faster interface between C code and R.
  - seqalign() and associated print and plot methods to see computation details
        about the alignment of two state sequences.

Changes in existing functions:
  - seqtree(), disstree(): speed improvements.
  - seqtm(): gives a warning when state names or state labels contain a comma.
  - seqdef(): changed the display of alphabet, state labels and long labels when
        creating a state sequence object.
  - seqistatd() and seqmeant(): added 'prop' argument to calculate
        proportions of time spent in
        each state instead of absolute values.
  - seqplot() and aliases: 'group' now also accepts as argument a list of
        variables/vectors and produces a plot for each combination of the
        values of the variables in the list.
  - dissrep(), seqrep(), seqrplot(): now accounts for weights when present.
  - seqtrate(), seqsubm(): added two arguments:
        - lag: compute transition rates from (t) to (t+lag), set to one by default
        - with.missing: If TRUE, compute transition rates to and from missing values.
  - seqtreedisplay(): now overwrites previous file if filename is not NULL.
        Tree quality measures displayed with R code.
  - checktriangleineq(): internal function to check triangle inequality is now
        in C, which allows checking much bigger distance matrices.
  - seqIplot(), seqiplot() and seqplot() with type "I" or "i": the 'sortv' argument now
        also accepts a sorting method, namely one of "from.start" or "from.end".
        See the help page ?plot.stslist for explanation.
  - seqeconstraint() and other 'seqe...' functions for event sequences: support
        of subsequences can now be determined by means of any of
        Joshi's 5 counting methods (see the ref manual page). The method should be
        specified with seqeconstraint().
  - seqeapplaysub(): when "method=NULL" is specified (now the default), the count method
        assigned to the event sequence object is used. With method="count"
        CDIST_O (number of distinct occurrences) is used as previously.
  - seqrep(): attribute 'Index' of the returned object is now a vector instead of
        an object of class 'dissrep'.

Bug fixes:
  - seqtreedisplay(): was changing current directory when an error occurred in
        the plotting function.
  - dissrep(), seqrep(): error when 'nrep' cannot be reached (reported by M. Studer)
  - seqefsub(): when using strsubseq argument, countMethod of seqeconstraint
        was not taken into account (Reported by Reto Buergin).
  - seqeconstraint(): added consistency checks to avoid misuses (Reported by Reto Buergin).
  - print.seqelist() and as.character.seqelist(): generated segfault when
        converting long event sequences to character (Reported by Pierre Molinier).
  - seqsubm(): Very small rounding errors (1e-16) were sometimes leading to non symmetric
        substitution cost matrix (Reported by Alexandre Pollien).

## ==========
Version 1.8-1

Misc:
  - updated references in the citation file and manual pages to point to the newly published article
    in the Journal of Statistical Software
  - other references update in the manual pages


## =========
Version 1.8

New functionalities:
  - seqtreedisplay(): drawing a sequence regression tree.
  - seqtree(): creating a sequence regression tree from a dissimilarity matrix.
  - seqrecode(): recoding state sequences objects (i.e., merging states).
  - weights are now supported by all dissimilarity analysis functions.
  - weights can be assigned to event sequence objects and are
      supported by all related functions.
  - seqdef(): 'xtstep' option added to set step between displayed tick-marks and
      labels on the x-axis of state sequence plots.
  - seqplot(): 'xtstep' option added to state sequence plots.

Bug fixes:
  - seqformat(): fixed problems with fillblanks argument when converting from SPELL to STS.
  - seqdist() and seqdistmc(): method="HAM" did not account for the provided substitution
      cost matrix; it used 1 for all substitution costs (Reported by Florian Hertel).
  - seqdist(): fixed a (possible) memory leak.
  - seqdss(), seqdur(): fixed bad handling of missing values in several cases:
    - sequences finishing with missing values,
    - sequences made of only one distinct state and missing values.
  - seqiplot(), seqIplot(), seqfplot(): changed the automatic setting of the x-axis length,
      to ensure identical lengths of the x-axis when the maximal sequence length differs
      between groups (reported by M. Studer).
  - seqplot() and aliases: fixed error with 'xaxis' argument.
  - seqtransn(): the returned normalized number of transitions for
      sequences of length 1 was NaN (value of transn.norm=0/seqlength-1). Now set to 0.
  - seqici(): returns now correctly 0 instead of NaN for sequences of length 1.

Changes in existing functions:
  - seqient(): new option 'base' for choosing the base of the logarithm used
      to compute the entropy.
  - seqdist(): enhanced check of substitution cost matrix.
      - The function can now be cleanly interrupted by the user.
      - Timing information now uses the processor time (instead of the elapsed time).
  - seqformat() when converting from "SPELL":
      - new error message when a start time is lower than 1 and/or an end time is smaller than the start time.
      - warning message when start time of episode 1 is missing (sequence creation is skipped)
      - warning message when start/end time of an episode is missing (episode is skipped and filled with NA's)
  - disstree() and dissassoc() have been entirely redesigned; objects created
      with the old function are no longer supported.
  - seqdss() and seqdur(): the number of columns of the returned object is now set to the
      maximum DSS length rather than to the length of the original state sequence object.

Misc:
  - 'ex1' example data set: contains now an additional sequence 's7'
      with only missing values.



## ==========
Version 1.6-2

Bug fixes:
  - seqdef(): now checks whether all states encountered in the input data are present in an optional
      user provided alphabet ('state' argument)
  - seqefsub(): The support of a subsequence with a total support of 1 was set to 0 (hence, this only
    applies if the minimum support is 1.) This is now corrected (Reported by Anna Hera).
  - Corrected compilation problems under SOLARIS (Reported by Prof Brian Ripley).
  - seqformat(): when converting from SPELL to STS, the fillblank argument was not used.

## ==========
Version 1.6-1

New functionalities:
  - Added a startup message when loading the TraMineR library.

Changes in existing functions:
  - seqtab() and seqfplot(): tlim argument now allows to return any selected frequent sequences,
      in the same way as the tlim argument used in plot.stslist() and seqiplot() (Requested
      by G. Ritschard).
      For example, tlim=3:6 returns the third, fourth, fifth and sixth most frequent sequences
      in the set. Default for tlim is now 1:10 instead of 10.
  - seqsubsn(): added detection of missing state in the sequences and computation of subsequences
      number by adding missing state to the alphabet.
  - seqST(): added detection of missing state in the sequences and computation of turbulence
      by adding missing state to the alphabet (Requested by G. Ritschard).
  - seqrplot now accepts "half" matrices ("dist" objects) as produced by seqdist
      with the "full.matrix=FALSE" option (Requested by L. Lesnard).
  - seqiplot() and plot.stslist(): new "ytlab" option allowing to display sequence labels
      on the Y-axis in sequence index plots (if set to "id", the sequence ids are displayed).
      An additional "ylas" option sets the orientation of the labels (Requested by Andrew ?
      and P. Jeuniaux).
  - seqsubm():
    - When method="TRATE", the substitution costs are now based on the value of "cval":
      SC(i,j) = cval -P(i,j) -P(j,i) where P(i,j) is the transition rate from state i to j.
    - added a new "transition" argument to use only transition from "previous" or "next" state
      instead of the default "both" when "time.varying" is TRUE.
    - Now, by default "cval" equals 2, unless "transition" is set to "both" and
            "time.varying" is TRUE in which case "cval" equals 4.
  - plot.stslist.meant(), seqmtplot(), plot.stslist.freq(), seqfplot(), plot.stslist.modst(),
    seqmsplot(): added display of weighted n instead of n in axis label if weighted=TRUE
  - seqdplot(): disabled plot of a legend for missing state if 'with.missing=FALSE' (Requested by
    M. Studer and G. Ritschard).
  - seqplot(), plot.stslist(), plot.stslist.statd(), plot.stslist.modst(), plot.stslist.freq(),
    plot.stslist.meant(): when 'weighted=TRUE', weighted n displayed in the axis label rounded to
    2 digits (Requested by M. Studer).

Bug fixes:
  - plot.stslist.modst(), seqmsplot(): fixed bad display of missing states if 'with.missing=TRUE'
  - seqmeant(): added color for missing state to color palette when using 'with.missing=TRUE'.
  - dissrep(), seqrep(), seqrplot(): fixed bad coverage statistics when tsim set to other
      than default value of 0.10 (Reported by G. Ritschard).
  - seqdist(): Bad handling of missing values in DHD distance (wrong default substitution costs
      with missing values, set to one instead of four).
  - seqdist(): Fixed an error in seqdist when using refseq with missing values (Reported by an
      anonymous user).

## ==========
Version 1.6

New functionalities:
  - seqIplot() and seqplot(..., type="I"): sequence index plot displaying all sequences
    with no space (space=0) and no border (border=NA) by default.
  - stlab(): retrieving or setting the long state labels of a sequence object.
  - seqici(): computes the complexity index, a composite measure of sequence complexity.
  - seqtransn(): computes the number of transitions in a sequence.

Bug fixes:
  - seqrplot() and plot.stslist.rep(): missing states are now correctly
    plotted (reported by G. Ritschard).
  - dissrep() (called by seqrplot() and plot.stslist.rep()): when using coverage
    threshold, does no longer select one too many representative.
  - seqdplot() / plot.stslist.statd(): fixed bad coloring of missing states (reported by M. Studer).
  - seqstatd() and print.stslist.statd(): fixed error when printing seqstatd
    output and length of the longest short state label was >2. (reported by G. Ritschard).
  - seqdss(): (with default with.missing=FALSE value) DSS with identical
    successive states resulted when there were missing values between two identical states.
    For example, before: DSS of "A-A-*-A-*-A" was "A-A-A" and now "A".

Changes in existing functions:
  - summary.stslist(): added information in the output of the summary method
    for state sequence objects.
  - seqdist(), seqdistmc(), seqdss(), seqdur(),  seqient(), seqistatd(), seqmpos(),
    seqnum(), seqsubm():
    "with.miss" argument replaced by "with.missing" (obsolete "with.miss" argument
    still works for backward compatibility)
  - seqmeant(): added "with.missing" argument to account for missing states.
  - seqdef():
    - new warning when one or several sequences contain only missing values.
    - when no weights are provided:
      - "weights" attribute of the returned sequence object is now set to NULL
         instead to a vector of 1's;
      - the "[>] sum of weights" message is suppressed;
    - new "Version" attribute with the number of the TraMineR version
      used for creating the sequence object;
    - message "[>] missing values in input file" changed to
      "[>] found missing values ('...') in sequence data"
      and displayed only if missing values are found in the input data.
  - seqIplot(), seqiplot(), seqplot(..., type="I"), seqplot(..., type="i") and plot.stslist():
    - new "weighted" argument. If set to TRUE sequence bar widths are set
      proportional to weights.
  - seqiplot() and plot.stslist(): when sequence object contains less than
    10 sequences and tlim=NULL, only the actual sequences are plotted
    without additional "void sequences".
  - seqmodst(): added "weighted" and "with.missing" arguments.
  - seqtab() and seqstatd(): attribute nbseq of the returned object is now
    the sum of weights (if weighted=TRUE and the sequence object has weights)
    instead of the number of sequences.
  - seqfplot() / plot.stslist.freq() and seqdplot() / plot.stslist.statd():
    when weights are used, i.e. when the "weighted=TRUE" argument is passed
    and the sequence object has weights,
    - the "n=" in the y axis legend now gives the sum of weights instead of
      the number of sequences;
    - "weighted" is specified in the y axis legend;
  - seqfplot() and plot.stslist.freq(): more precise positioning of the 0 of the y axis;
  - seqrplot() and plot.stslist.rep():
    - new "stats" option. If set to FALSE, statistics are not plotted;
    - label of the yaxis changed.
  - dissrep(): name of the main argument changed from "dist.matrix" to "diss"
    as in other "diss..." functions.

## ==========
Version 1.4-1

Bug fixes:
  - seqecreate(): Problems with handling simultaneous events when
    creating event sequences with data not previously sorted on
    id, timestamp and event.
  - seqrep() with density criterion: neigborhood diameter is now
    correctly set to "trep*dmax" instead of "trep".

New functionalities:
  - dissrep(): extracts a set of representative objects using a
    dissimilarity matrix. This function is used by seqrep.

Changes in existing functions:
  -  seqrep():
     - much faster extraction of the representative set;
     - default criterion is now "density" instead of "frequency";
     - "trep" now sets a coverage threshold for the representative set
       rather than a size threshold for the candidate list;
     - in the output object, name of the attribute containing
       statistics for the representative set changed from "Quality"
       to "Statistics" and that of the attribute containing the
       overall quality measure changed from "rindex" to "Quality".
  -  seqplot(): now checks that the length of the vector given as
     "group" argument matches the number of sequences.
  -  plot.stslist(): now checks that the length of the vector given as
     "sortv" argument matches the number of sequences.
  -  seqformat(): dramatic speed improvement in conversion from SPELL data.

## ========
Version 1.4

New functionalities:
  - TraMineR.checkupdates(): check for TraMineR updates.
  - seqdistmc(): computes multichannel distances.
  - seqmeant(): computes mean duration in each state.
  - seqmodst(): returns the sequence of modal states.
  - seqmsplot(): for plotting the sequence of modal states. This
    function is a shortcut for seqplot with type="ms", see below.
  - seqrep(): extracts a set of representative sequences.
  - seqrplot(): for producing representative sequence plots. This function is
    a shortcut for seqplot with type="r", see below.
  - seqHtplot(): for producing Entropy Index plots. This function is
    a shortcut for seqplot with type="Ht", see below.
  - seqlogp(): Computing logarithm of sequence probabilities.
  - seqdef(): new 'weights=' option for providing a vector of weights.
  - seqstatd(), seqtrate(), seqlogp() and seqtab(): new option 'weighted=TRUE'
    for using the weights when computing the statistics.
  - seqtrate() and seqsubm(): new 'time.varying' argument for computing
    position dependant transition rates or costs.
  - seqdist(): two additional methods are now available for computing
    distances, namely "HAM" (Hamming distance) and "DHD" (Dynamic
    Hamming Distance).
  - output produced by the seqstatd(), seqtab(), seqmeant(), seqmodst() and
    seqrep() can now be plotted with their plot() dedicated methods (see
    new classes and methods below).

Important changes:
  - seqplot(): is now the generic function for plotting state sequence objects with
    'type' argument. Available types are "d" for state distribution plots,
    "f" for sequence frequency plots, "Ht" for entropy index plots,
    "i" for sequence index plots, "ms" for modal state sequence plots,
    "mt" for meant time plots, "r" for representative plots.
    This function replaces the previous generic plot.stslist() function.
  - plot.stslist(): now produces only a sequence index plot (see new classes and
    methods below).

Changes in existing functions:
  - seqfplot():
    - new 'yaxis' option: with yaxis="cum" (default) cumulated percentages
      are displayed, while with yaxis="pct" individual sequence percentages
      are shown.
    - pbarw=TRUE is now the default for the pbarw argument.
  - seqtab(): the 'format' argument that specifies the format of the sequences
    displayed as rownames is now set by default to the short SPS format,
    e.g. TR/9-EM/63.
  - seqiplot(): sequence indexes are now displayed by default on the y axis.
    This can be disabled with "yaxis=FALSE".

Fixed minor bugs in seqformat(): changes concern mainly the from="SPELL" and
    from="SPS" options.

New classes and methods:
  - new class 'stslist.statd' for objects produced by the seqstatd() function
    and methods for printing and plotting such objects.
  - new class 'stslist.freq' for objects produced by seqtab() function and
    methods for printing and plotting such objects.
  - new class 'stslist.meant' for objects produced by seqmeant() function
    and methods for printing and plotting such objects.
  - new class 'stslist.modst' for objects produced by seqmodst() function
    and methods for printing and plotting such objects.


## ==========
Version 1.2-1

Changes in function arguments:
  - seqdef(): new 'id' argument for setting the rownames of the sequence object.
  - disscenter(): new 'medoid.index' argument to get the indexes of all
    medoids (rather than only the first one).

Minor bugs fixed:
  - Plotting missing states with seqiplot() and seqfplot() functions.
  - Sum of transition rates with sequences of different lengths not equal to 1.

## ========
Version 1.2

Changes regarding plotting functions:
  - New generic function 'plot.stlist()' with option 'type=' for
    plotting state sequence objects of class 'ststlist' created by
    the 'seqdef()' function. Old functions 'seqdplot()', 'seqfplot()',
    'seqiplot()', 'seqmtplot()' work as in the previous version but by
    calling 'plot.stslist' with the appropriate 'type=' option
    (types are 'd','f','i' and 'mt'). However, the order of the
    functions' arguments may have changed and this may cause problems
    if the names of the arguments were not explicitly specified in your
    scripts (which is inadvisable anyway).

Changes in the dissimilarity and discrepancy analysis diss module:
  - dissreg() is renamed to dissmfac() for multi-factor dissimilarity analysis.
  - disstree(): great speed and memory improvements.

Speed and memory improvements:
  - seqformat(): conversion to TSE format is now much faster.
  - seqdur()
  - seqST()

Changes in the computation of distances between sequences:
  - seqdist() now checks if substitution costs respects the triangle inequality.
    When this is the case it ensures that the resulting dissimilarity matrix
    also respects the triangle inequality.
  - New options for selecting the distance normalization method.
  - New reversed LCP, i.e. longest common suffix method. (method="RLCP")

Various changes:
  - CITATION file added.
  - seqST() caused an error when run with more than 12 states: bug fixed.
  - Fixed other minor bugs.


## ========
Version 1.1

mvad example data set added

Name changes of the following functions
  - seqLLCP() instead of old seqLCP()
  - seqLLCS() instead of old seqLCS()

New diss module for analysing a dissimilarity matrix (such as the one returned by seqdist)
  - dissassoc(): Computes association with a factor
  - dissreg()  : Regression analysis of a dissimilarity matrix
  - disstree() : Tree analysis of a dissimilarity matrix
  - dissvar()  : Computes a pseudo-variance from a dissimilarity matrix.

Changes in the graphics functions (seqiplot, seqfplot, seqdplot, ...):
  - New 'group' option allowing to draw several plots for the levels
    of a factor within a single command
  - TraMineR now uses 'layout' for controlling the position of the
    plots and the legend in the graphic area. This is not compatible
    with par(mfrow=...). To use the standard 'par(mfrow=...)' method,
    one must set the 'use.layout=FALSE' option in the plot functions.
  - seqmtplot() : new function that plots the mean time spent in each state.
  - Option 'withborder=FALSE' is now obsolete and replaced by the standard 'border=NA' option.

Changes in Event Sequence Analysis (seqe module):
  - New plot for exhibiting discriminant subsequences (seqecmpgroup).
  - Overall syntax have been reviewed and is now much simpler.
  - seqefsub now allows to search for user specified subsequences (seqefsub).
  - Event subsequence lists now have specific plot and print method (seqefsub, seqecmpgroup)
  - seqecreate now accepts state sequence and performs automatic conversion (seqecreate)
  - Time constraints are now implemented separately and are stored with the results (seqeconstraint)

Changes in the seqformat() function:
  - New options for importing SPELL formatted data.
  - The STS internal and the output in STS, SPS or DSS formats are now by
    default in extended format (a matrix with one state per column) instead of
    compressed format (a character string).
    Use the compressed=TRUE option to get an output in the compressed format
    (sequences as character strings).
  - SPS1 and SPS2 formats are now replaced by the generic SPS format with
    options SPS.in and SPS.out for defining the separator and surrounding
    characters used for specifying the state/duration couples.

Other new functions:
  - seqgen()   : generates a random sequence.
