automaton.strip

Remove all the decorations from an automaton, i.e., remove state names.

Examples

In [1]:
import vcsn
In [2]:
a = vcsn.B.expression('ab*').automaton()
a
Out[2]:
%3 I0 0 0 I0->0 F1 1 1 0->1 a 1->F1 1->1 b

Stripping a plain automaton, or stripping twice, is allowed.

In [3]:
a.strip()
Out[3]:
%3 I0 0 0 I0->0 F1 1 1 0->1 a 1->F1 1->1 b
In [4]:
a.strip().strip()
Out[4]:
%3 I0 0 0 I0->0 F1 1 1 0->1 a 1->F1 1->1 b

Operations like determinize introduce decorations:

In [5]:
a = vcsn.context('lal(ab), b').de_bruijn(1).determinize()
a
Out[5]:
%3 I0 0 0 I0->0 F2 F3 0->0 b 1 0, 1 0->1 a 2 0, 1, 2 1->2 a 3 0, 2 1->3 b 2->F2 2->2 a 2->3 b 3->F3 3->0 b 3->1 a
In [6]:
a.strip()
Out[6]:
%3 I0 0 0 I0->0 F2 F3 0->0 b 1 1 0->1 a 2 2 1->2 a 3 3 1->3 b 2->F2 2->2 a 2->3 b 3->F3 3->0 b 3->1 a
In [7]:
a.type()
Out[7]:
'determinized_automaton<mutable_automaton<context<letterset<char_letters>, b>>, vcsn::wet_kind_t::bitset, false>'
In [8]:
a.strip().type()
Out[8]:
'mutable_automaton<context<letterset<char_letters>, b>>'

The derived_term of an expression also uses decorations:

In [9]:
a = vcsn.Z.expression('<3>ab*c{3}').derived_term()
a
Out[9]:
%3 I0 0 ⟨3⟩(ab*c³) I0->0 F4 1 b*c³ 0->1 ⟨3⟩a 1->1 b 2 cc 1->2 c 3 c 2->3 c 4 ε 3->4 c 4->F4
In [10]:
a.strip()
Out[10]:
%3 I0 0 0 I0->0 F4 1 1 0->1 ⟨3⟩a 1->1 b 2 2 1->2 c 3 3 2->3 c 4 4 3->4 c 4->F4