The shuffle product of automata computes the shuffling of their languages: all the possible interleavings.
std = lambda exp: vcsn.B.expression(exp).standard() a = std('abc') a
In the case of weighted automata, weights are "kept" with the letters.
c = vcsn.context('lal_char, seriesset<lal_char, z>') std = lambda exp: c.expression(exp).standard()
This operator is associative, and it is actually implemented as a variadic operator;
a.shuffle(b, c) is not exactly the same as
a.shuffle(b).shuffle(c): they are the same automata, but the former is labeled with 3-uples, not 2-tuples.
x = std('<x>a') y = std('<y>a') z = std('<z>a')