We are happy to announce the release of Vcsn 2.7!
As most of our efforts are currently on Vcsn 3, this is mostly a bug fix
release, with improvements in the documentation based on user feedback.
For more information see the detailed news below.
Release page:
https://vcsn.lrde.epita.fr/Vcsn2.7
Tarball:
https://www.lrde.epita.fr/dload/vcsn/2.7/vcsn-2.7.tar.xz
Home page:
https://vcsn.lrde.epita.fr
The various packages (Arch, Debian, Docker, MacPorts, etc.) will appear soon.
## New features
### Improved compatibility between single- and multitape expressions
The automatic promotion from single-tape to multitape is more general. For
instance (| separates tapes and @ denotes composition):
In [2]: c = vcsn.context('lat<lan, lan>, b')
In [3]: c.expression('a')
Out[3]: a|a
In [4]: c.expression('a*b* @ (ab)*')
Out[4]: (a|a)*(b|b)*@((a|a)(b|b))*
In [5]: c.expression('a*b* @ (ab)*').shortest(10)
Out[5]: \e|\e + ab|ab
### vcsn doc is a new tool
Run `vcsn doc automaton.determinize`, or `vcsn doc Automata`, etc. The
special shortcuts `vcsn doc` opens the Read-me-first notebook, and `vcsn doc
index` leads to Algorithms, the page that lists the existing documentation
of algorithms (`automata.determinize`, etc.).
### Compressed efsm files
Vcsn can read efsm files compressed with bzip2 and xz. In some extreme
cases, the xz-compressed efsm file was reduced to 5% of the original size.
The files for the sms2fr demo are now compressed with xz.
### vcsn score has several new options
The command `vcsn score` benchmarks Vcsn. Its output can be processed with
`vcsn score-compare` to see the trends in performances between versions.
Benchmarks are now numbered, to give a hint of the progress:
$ vcsn score
vcsn version: 2.6-085-g6dcae17ef
1/116 0.25s : a.is_proper() # a = "", 1000000x
2/116 0.11s : b.format("text") # b = [abc] -> B, 100000x
3/116 0.35s : b.expression(e) # e = [ab]{20000}, 1000x
...
115/116 0.75s : a.weight_series() # a = std(a{12000}+<1>[b-z]{12000}), c =
[a-z] -> Nmin, 200x
116/116 0.89s : a.weight_series() # a = std([a-z]{200}), c = [a-z] -> Z, 10x
The new option `-o`/`--output` allows to specify the output file name.
Better yet: option `-d`/`--dir` specifies the directory in which the score
file is saved; its name will be forged from `git describe`, something like
`v2.5-050-g01dbf326`. Such names are interpreted by `vcsn score-compare` to
relate the benches to the git commit title. Both features need that you run
these commands from a git repository of Vcsn.
Option `-j`/`--job` allows to run the benchmarks concurrently. This can be
very useful to "warm" vcsn (have it compile the needed algorithms), or to
get a nice approximation of the actual benches, however, sticking to a
single bench at a time is recommended to get faithful measurements.
Option `-l`/`--list` lists the benches without running them.
Option `-s`/`--sort` sorts the benchmarks before running them.
### Documentation
Several errors were fixed. The page `expression.compose.ipynb` is new.
### Examples of C++
The directories `tests/demo` and `tests/benchmarks` contain more examples
using the Vcsn C++ library.
## Bug fixes
### Incorrect order for 8bit characters
Calling `compare` on labels would lead to surprising results with 8bit
characters (seen as negative ints). This resulted in the incorrect display
of the expression `[\x01-\xfe]` as `[\x80-\xfe] + [\x01-\x7f]`.
Both are fixed, and 1 is less than 254 again.