From 633f19cafeadfa1a44210651ec9ef4025fd5d50c Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Fri, 12 May 2023 13:02:32 +0800 Subject: [PATCH 01/11] Add docs for compose --- .../fsa_algo/code/compose1.py | 30 +++++ .../python_tutorials/fsa_algo/fsa_algo.rst | 49 ++++++- .../fsa_algo/images/a_fsa_compose.svg | 61 +++++++++ .../fsa_algo/images/b_fsa_compose.svg | 115 ++++++++++++++++ .../fsa_algo/images/c_fsa_compose.svg | 127 ++++++++++++++++++ 5 files changed, 381 insertions(+), 1 deletion(-) create mode 100644 docs/source/python_tutorials/fsa_algo/code/compose1.py create mode 100644 docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg create mode 100644 docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg create mode 100644 docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg diff --git a/docs/source/python_tutorials/fsa_algo/code/compose1.py b/docs/source/python_tutorials/fsa_algo/code/compose1.py new file mode 100644 index 000000000..c99b08f99 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/code/compose1.py @@ -0,0 +1,30 @@ +import k2 +s1 = ''' +0 1 2 20 0.1 +0 0 1 10 0.2 +1 1 3 30 0.3 +1 2 -1 -1 0.4 +2 +''' + +s2 = ''' +0 1 10 1 0.1 +0 1 10 2 0.2 +0 1 20 3 0.3 +1 2 10 1 0.3 +1 2 20 2 0.2 +1 2 30 3 0.1 +2 3 20 1 0.2 +2 3 30 2 0.1 +2 3 30 3 0.3 +3 4 -1 -1 0.4 +4 +''' + +a_fsa = k2.Fsa.from_str(s1, acceptor=False) +b_fsa = k2.Fsa.from_str(s2, acceptor=False) +c_fsa = k2.compose(a_fsa, b_fsa) + +a_fsa.draw('a_fsa_compose.svg', title='a_fsa') +b_fsa.draw('b_fsa_compose.svg', title='b_fsa') +c_fsa.draw('c_fsa_compose.svg', title='c_fsa') diff --git a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst index 7ca3344bd..20f659eab 100644 --- a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst +++ b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst @@ -202,7 +202,54 @@ using :func:`k2.add_epsilon_self_loops` with .. NOTE:: - - :func:`k2.intersect` supports **ONLY** CPU + - :func:`k2.intersect` works **ONLY** on CPU when ``treat_epsilons_specially=True`` + When ``treat_epsilons_specially=False`` and both a_fsa and b_fsa are on GPU, then this function works on GPU; + in this case, the two input FSAs do not need to be arc sorted. + - autograd is also supported. + - Its input can be either a single FSA or a FsaVec. + - The input FSAs have to be arc sorted. + +compose +~~~~~~~~~ + +The composition is a straightforward generalization of the intersection from acceptors to transducers. +The following is an example of :func:`k2.compose`. + +.. literalinclude:: ./code/compose1.py + :caption: Example code for :func:`k2.compose` + :language: python + :lines: 2- + +The outputs are shown below + +.. figure:: images/a_fsa_compose.svg + :alt: a_fsa + :align: center + :figwidth: 600px + +.. figure:: images/b_fsa_compose.svg + :alt: b_fsa + :align: center + :figwidth: 600px + +.. figure:: images/c_fsa_compose.svg + :alt: c_fsa + :align: center + :figwidth: 600px + +:func:`k2.compose` also has an optional argument ``treat_epsilons_specially``. +Its default value is `True`. If it is set to `False`, then the label `0` +is treated as a normal label. + +:func:`k2.add_epsilon_self_loops` also can be used to add epsilon self loops +to an FSA when ``treat_epsilons_specially`` is `False` but you +want to treat them specially. + +.. NOTE:: + + - :func:`k2.intersect` works **ONLY** on CPU when ``treat_epsilons_specially=True`` + When ``treat_epsilons_specially=False`` and both a_fsa and b_fsa are on GPU, then this function works on GPU; + in this case, the two input FSAs do not need to be arc sorted. - autograd is also supported. - Its input can be either a single FSA or a FsaVec. - The input FSAs have to be arc sorted. diff --git a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg new file mode 100644 index 000000000..08dbe72f9 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg @@ -0,0 +1,61 @@ + + + + + + +WFST + +a_fsa + + +0 + +0 + + + +0->0 + + +1:10/0.2 + + + +1 + +1 + + + +0->1 + + +2:20/0.1 + + + +1->1 + + +3:30/0.3 + + + +2 + + +2 + + + +1->2 + + +-1:-1/0.4 + + + diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg new file mode 100644 index 000000000..0ef7d09d7 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg @@ -0,0 +1,115 @@ + + + + + + +WFST + +b_fsa + + +0 + +0 + + + +1 + +1 + + + +0->1 + + +10:1/0.1 + + + +0->1 + + +10:2/0.2 + + + +0->1 + + +20:3/0.3 + + + +2 + +2 + + + +1->2 + + +10:1/0.3 + + + +1->2 + + +20:2/0.2 + + + +1->2 + + +30:3/0.1 + + + +3 + +3 + + + +2->3 + + +20:1/0.2 + + + +2->3 + + +30:2/0.1 + + + +2->3 + + +30:3/0.3 + + + +4 + + +4 + + + +3->4 + + +-1:-1/0.4 + + + diff --git a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg new file mode 100644 index 000000000..02b38c84c --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg @@ -0,0 +1,127 @@ + + + + + + +WFST + +c_fsa + + +0 + +0 + + + +1 + +1 + + + +0->1 + + +1:1/0.3 + + + +0->1 + + +1:2/0.4 + + + +2 + +2 + + + +0->2 + + +2:3/0.4 + + + +3 + +3 + + + +1->3 + + +1:1/0.5 + + + +4 + +4 + + + +1->4 + + +2:2/0.3 + + + +2->4 + + +3:3/0.4 + + + +5 + +5 + + + +3->5 + + +2:1/0.3 + + + +4->5 + + +3:2/0.4 + + + +4->5 + + +3:3/0.6 + + + +6 + + +6 + + + +5->6 + + +-1:-1/0.8 + + + From b8be89eff04e1496c1f3d3e308f351ae20adb1e9 Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Fri, 12 May 2023 13:18:51 +0800 Subject: [PATCH 02/11] update --- docs/source/python_tutorials/fsa_algo/fsa_algo.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst index 20f659eab..8548c7983 100644 --- a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst +++ b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst @@ -210,7 +210,7 @@ using :func:`k2.add_epsilon_self_loops` with - The input FSAs have to be arc sorted. compose -~~~~~~~~~ +~~~~~~~ The composition is a straightforward generalization of the intersection from acceptors to transducers. The following is an example of :func:`k2.compose`. From 934a4f35b7ac1a146b42f0130cfbf3af1c838c84 Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Fri, 12 May 2023 14:41:33 +0800 Subject: [PATCH 03/11] update --- docs/source/python_tutorials/fsa_algo/fsa_algo.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst index 8548c7983..8a231f5ce 100644 --- a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst +++ b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst @@ -247,7 +247,7 @@ want to treat them specially. .. NOTE:: - - :func:`k2.intersect` works **ONLY** on CPU when ``treat_epsilons_specially=True`` + - :func:`k2.compose` works **ONLY** on CPU when ``treat_epsilons_specially=True`` When ``treat_epsilons_specially=False`` and both a_fsa and b_fsa are on GPU, then this function works on GPU; in this case, the two input FSAs do not need to be arc sorted. - autograd is also supported. From 1d793fd0391455b05a092c65f36e1259ae727045 Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Fri, 12 May 2023 14:48:53 +0800 Subject: [PATCH 04/11] update --- docs/source/python_tutorials/fsa_algo/fsa_algo.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst index 8a231f5ce..8eef88a5c 100644 --- a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst +++ b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst @@ -202,12 +202,12 @@ using :func:`k2.add_epsilon_self_loops` with .. NOTE:: - - :func:`k2.intersect` works **ONLY** on CPU when ``treat_epsilons_specially=True`` + - :func:`k2.intersect` works **ONLY** on CPU when ``treat_epsilons_specially=True``. When ``treat_epsilons_specially=False`` and both a_fsa and b_fsa are on GPU, then this function works on GPU; in this case, the two input FSAs do not need to be arc sorted. - autograd is also supported. - Its input can be either a single FSA or a FsaVec. - - The input FSAs have to be arc sorted. + - The input FSAs have to be arc sorted when ``treat_epsilons_specially=True``. compose ~~~~~~~ @@ -247,12 +247,12 @@ want to treat them specially. .. NOTE:: - - :func:`k2.compose` works **ONLY** on CPU when ``treat_epsilons_specially=True`` + - :func:`k2.compose` works **ONLY** on CPU when ``treat_epsilons_specially=True``. When ``treat_epsilons_specially=False`` and both a_fsa and b_fsa are on GPU, then this function works on GPU; in this case, the two input FSAs do not need to be arc sorted. - autograd is also supported. - Its input can be either a single FSA or a FsaVec. - - The input FSAs have to be arc sorted. + - The input FSAs have to be arc sorted when ``treat_epsilons_specially=True``. connect ~~~~~~~ From c93b95fb5bea03a24454cc5b556aa3babe26e993 Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Fri, 12 May 2023 16:26:15 +0800 Subject: [PATCH 05/11] Update --- .../fsa_algo/code/compose2.py | 22 ++++ .../python_tutorials/fsa_algo/fsa_algo.rst | 60 ++++++++- .../fsa_algo/images/a_fsa_compose2.svg | 75 ++++++++++++ .../fsa_algo/images/b_fsa_compose2.svg | 115 ++++++++++++++++++ .../fsa_algo/images/c_fsa_compose2.svg | 14 +++ 5 files changed, 282 insertions(+), 4 deletions(-) create mode 100644 docs/source/python_tutorials/fsa_algo/code/compose2.py create mode 100644 docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg create mode 100644 docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg create mode 100644 docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg diff --git a/docs/source/python_tutorials/fsa_algo/code/compose2.py b/docs/source/python_tutorials/fsa_algo/code/compose2.py new file mode 100644 index 000000000..852b3b8e2 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/code/compose2.py @@ -0,0 +1,22 @@ +import k2 +s = ''' +0 1 10 1 0.1 +0 1 10 2 0.2 +0 1 20 3 0.3 +1 2 10 1 0.3 +1 2 20 2 0.2 +1 2 30 3 0.1 +2 3 20 1 0.2 +2 3 30 2 0.1 +2 3 30 3 0.3 +3 4 -1 -1 0.4 +4 +''' + +a_fsa = k2.ctc_topo(max_token=1) +b_fsa = k2.Fsa.from_str(s, acceptor=False) +c_fsa = k2.compose(a_fsa, b_fsa, treat_epsilons_specially=False) + +a_fsa.draw('a_fsa_compose2.svg', title='a_fsa') +b_fsa.draw('b_fsa_compose2.svg', title='b_fsa') +c_fsa.draw('c_fsa_compose2.svg', title='c_fsa') diff --git a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst index 8eef88a5c..6a71bd0df 100644 --- a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst +++ b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst @@ -237,13 +237,65 @@ The outputs are shown below :align: center :figwidth: 600px -:func:`k2.compose` also has an optional argument ``treat_epsilons_specially``. +:func:`k2.compose` has an optional argument ``treat_epsilons_specially``. Its default value is `True`. If it is set to `False`, then the label `0` -is treated as a normal label. +is treated as a normal label. The following is an example setting +``treat_epsilons_specially`` to `False`. + +.. literalinclude:: ./code/compose2.py + :caption: Example code for :func:`k2.compose` with ``treat_epsilons_specially=False`` + :language: python + :lines: 2- + +The outputs are shown below + +.. figure:: images/a_fsa_compose2.svg + :alt: a_fsa + :align: center + :figwidth: 600px -:func:`k2.add_epsilon_self_loops` also can be used to add epsilon self loops +.. figure:: images/b_fsa_compose2.svg + :alt: b_fsa + :align: center + :figwidth: 600px + +.. figure:: images/c_fsa_compose2.svg + :alt: c_fsa + :align: center + :figwidth: 600px + + Note that ``c_fsa`` contains a single path + when ``treat_epsilons_specially`` is `False`. + +:func:`k2.add_epsilon_self_loops` can be used to add epsilon self loops to an FSA when ``treat_epsilons_specially`` is `False` but you -want to treat them specially. +want to treat them specially. The following is an example +using :func:`k2.add_epsilon_self_loops` with +``treat_epsilons_specially == False``. + +.. literalinclude:: ./code/compose3.py + :caption: :func:`k2.intersect` with ``treat_epsilons_specially=False`` and :func:`k2.add_epsilon_self_loops` + :language: python + :lines: 2- + +.. figure:: images/a_fsa_compose3.svg + :alt: a_fsa + :align: center + :figwidth: 600px + +.. figure:: images/b_fsa_compose3.svg + :alt: b_fsa + :align: center + :figwidth: 600px + +.. figure:: images/c_fsa_compose3.svg + :alt: c_fsa + :align: center + :figwidth: 600px + + Note that ``c_fsa`` contains two paths + even if ``treat_epsilons_specially`` is `False` + since we have added epsilon self loops to `b_fsa`. .. NOTE:: diff --git a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg new file mode 100644 index 000000000..ffdbb5c4a --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg @@ -0,0 +1,75 @@ + + + + + + +WFST + +a_fsa + + +0 + +0 + + + +0->0 + + +0:0/0 + + + +1 + +1 + + + +0->1 + + +1:1/0 + + + +2 + + +2 + + + +0->2 + + +-1:-1/0 + + + +1->0 + + +0:0/0 + + + +1->1 + + +1:0/0 + + + +1->2 + + +-1:-1/0 + + + diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg new file mode 100644 index 000000000..0ef7d09d7 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg @@ -0,0 +1,115 @@ + + + + + + +WFST + +b_fsa + + +0 + +0 + + + +1 + +1 + + + +0->1 + + +10:1/0.1 + + + +0->1 + + +10:2/0.2 + + + +0->1 + + +20:3/0.3 + + + +2 + +2 + + + +1->2 + + +10:1/0.3 + + + +1->2 + + +20:2/0.2 + + + +1->2 + + +30:3/0.1 + + + +3 + +3 + + + +2->3 + + +20:1/0.2 + + + +2->3 + + +30:2/0.1 + + + +2->3 + + +30:3/0.3 + + + +4 + + +4 + + + +3->4 + + +-1:-1/0.4 + + + diff --git a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg new file mode 100644 index 000000000..10585b641 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg @@ -0,0 +1,14 @@ + + + + + + +WFST + +c_fsa + + From f9d5c7c8dfe6d23f1080d537fc0256a985ae8b46 Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Fri, 12 May 2023 16:55:08 +0800 Subject: [PATCH 06/11] update --- .../fsa_algo/code/compose3.py | 31 ++++ .../fsa_algo/images/a_fsa_compose3.svg | 61 +++++++ .../fsa_algo/images/b_fsa_compose3.svg | 143 +++++++++++++++ .../fsa_algo/images/c_fsa_compose3.svg | 169 ++++++++++++++++++ 4 files changed, 404 insertions(+) create mode 100644 docs/source/python_tutorials/fsa_algo/code/compose3.py create mode 100644 docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg create mode 100644 docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg create mode 100644 docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg diff --git a/docs/source/python_tutorials/fsa_algo/code/compose3.py b/docs/source/python_tutorials/fsa_algo/code/compose3.py new file mode 100644 index 000000000..6ea2b45c2 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/code/compose3.py @@ -0,0 +1,31 @@ +import k2 +s1 = ''' +0 1 2 20 0.1 +0 0 1 10 0.2 +1 1 3 30 0.3 +1 2 -1 -1 0.4 +2 +''' + +s2 = ''' +0 1 10 1 0.1 +0 1 10 2 0.2 +0 1 20 3 0.3 +1 2 10 1 0.3 +1 2 20 2 0.2 +1 2 30 3 0.1 +2 3 20 1 0.2 +2 3 30 2 0.1 +2 3 30 3 0.3 +3 4 -1 -1 0.4 +4 +''' + +a_fsa = k2.Fsa.from_str(s1, acceptor=False) +b_fsa = k2.Fsa.from_str(s2, acceptor=False) +b_fsa = k2.add_epsilon_self_loops(b_fsa) +c_fsa = k2.compose(a_fsa, b_fsa) + +a_fsa.draw('a_fsa_compose3.svg', title='a_fsa') +b_fsa.draw('b_fsa_compose3.svg', title='b_fsa') +c_fsa.draw('c_fsa_compose3.svg', title='c_fsa') diff --git a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg new file mode 100644 index 000000000..08dbe72f9 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg @@ -0,0 +1,61 @@ + + + + + + +WFST + +a_fsa + + +0 + +0 + + + +0->0 + + +1:10/0.2 + + + +1 + +1 + + + +0->1 + + +2:20/0.1 + + + +1->1 + + +3:30/0.3 + + + +2 + + +2 + + + +1->2 + + +-1:-1/0.4 + + + diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg new file mode 100644 index 000000000..f7a196c69 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg @@ -0,0 +1,143 @@ + + + + + + +WFST + +b_fsa + + +0 + +0 + + + +0->0 + + +0:0/0 + + + +1 + +1 + + + +0->1 + + +10:1/0.1 + + + +0->1 + + +10:2/0.2 + + + +0->1 + + +20:3/0.3 + + + +1->1 + + +0:0/0 + + + +2 + +2 + + + +1->2 + + +10:1/0.3 + + + +1->2 + + +20:2/0.2 + + + +1->2 + + +30:3/0.1 + + + +2->2 + + +0:0/0 + + + +3 + +3 + + + +2->3 + + +20:1/0.2 + + + +2->3 + + +30:2/0.1 + + + +2->3 + + +30:3/0.3 + + + +3->3 + + +0:0/0 + + + +4 + + +4 + + + +3->4 + + +-1:-1/0.4 + + + diff --git a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg new file mode 100644 index 000000000..cf0f643c0 --- /dev/null +++ b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg @@ -0,0 +1,169 @@ + + + + + + +WFST + +c_fsa + + +0 + +0 + + + +0->0 + + +0:0/0 + + + +1 + +1 + + + +0->1 + + +1:1/0.3 + + + +0->1 + + +1:2/0.4 + + + +2 + +2 + + + +0->2 + + +2:3/0.4 + + + +1->1 + + +0:0/0 + + + +3 + +3 + + + +1->3 + + +1:1/0.5 + + + +4 + +4 + + + +1->4 + + +2:2/0.3 + + + +2->2 + + +0:0/0 + + + +2->4 + + +3:3/0.4 + + + +3->3 + + +0:0/0 + + + +5 + +5 + + + +3->5 + + +2:1/0.3 + + + +4->4 + + +0:0/0 + + + +4->5 + + +3:2/0.4 + + + +4->5 + + +3:3/0.6 + + + +5->5 + + +0:0/0 + + + +6 + + +6 + + + +5->6 + + +-1:-1/0.8 + + + From 14f4da84e27f47e0d2ce7dbbca1905206c3bbf59 Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Fri, 12 May 2023 17:12:25 +0800 Subject: [PATCH 07/11] update --- .../fsa_algo/code/compose2.py | 20 +-- .../python_tutorials/fsa_algo/fsa_algo.rst | 2 +- .../fsa_algo/images/b_fsa_compose2.svg | 92 +++++------ .../fsa_algo/images/c_fsa_compose2.svg | 143 +++++++++++++++++- 4 files changed, 195 insertions(+), 62 deletions(-) diff --git a/docs/source/python_tutorials/fsa_algo/code/compose2.py b/docs/source/python_tutorials/fsa_algo/code/compose2.py index 852b3b8e2..c15beafba 100644 --- a/docs/source/python_tutorials/fsa_algo/code/compose2.py +++ b/docs/source/python_tutorials/fsa_algo/code/compose2.py @@ -1,15 +1,15 @@ import k2 s = ''' -0 1 10 1 0.1 -0 1 10 2 0.2 -0 1 20 3 0.3 -1 2 10 1 0.3 -1 2 20 2 0.2 -1 2 30 3 0.1 -2 3 20 1 0.2 -2 3 30 2 0.1 -2 3 30 3 0.3 -3 4 -1 -1 0.4 +0 1 0 0 0.5 +0 1 1 1 0.2 +0 1 2 2 0.3 +1 2 0 0 0.2 +1 2 1 1 0.3 +1 2 2 2 0.5 +2 3 0 0 0.2 +2 3 1 1 0.5 +2 3 2 2 0.3 +3 4 -1 -1 1 4 ''' diff --git a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst index 6a71bd0df..63e5094f2 100644 --- a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst +++ b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst @@ -262,7 +262,7 @@ The outputs are shown below .. figure:: images/c_fsa_compose2.svg :alt: c_fsa :align: center - :figwidth: 600px + :figwidth: 1000px Note that ``c_fsa`` contains a single path when ``treat_epsilons_specially`` is `False`. diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg index 0ef7d09d7..414228593 100644 --- a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg @@ -4,112 +4,112 @@ - - + + WFST - -b_fsa + +b_fsa 0 - -0 + +0 1 - -1 + +1 0->1 - - -10:1/0.1 + + +0:0/0.5 0->1 - - -10:2/0.2 + + +1:1/0.2 0->1 - - -20:3/0.3 + + +2:2/0.3 2 - -2 + +2 1->2 - - -10:1/0.3 + + +0:0/0.2 1->2 - - -20:2/0.2 + + +1:1/0.3 1->2 - - -30:3/0.1 + + +2:2/0.5 3 - -3 + +3 2->3 - - -20:1/0.2 + + +0:0/0.2 2->3 - - -30:2/0.1 + + +1:1/0.5 2->3 - - -30:3/0.3 + + +2:2/0.3 4 - - -4 + + +4 3->4 - - --1:-1/0.4 + + +-1:-1/1 diff --git a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg index 10585b641..609d3cfe2 100644 --- a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg +++ b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg @@ -4,11 +4,144 @@ - - + + WFST - -c_fsa + +c_fsa + + +0 + +0 + + + +1 + +1 + + + +0->1 + + +0:0/0.5 + + + +2 + +2 + + + +0->2 + + +1:1/0.2 + + + +3 + +3 + + + +1->3 + + +0:0/0.2 + + + +4 + +4 + + + +1->4 + + +1:1/0.3 + + + +2->3 + + +0:0/0.2 + + + +2->4 + + +1:0/0.2 + + + +5 + +5 + + + +3->5 + + +0:0/0.2 + + + +6 + +6 + + + +3->6 + + +1:1/0.5 + + + +4->5 + + +0:0/0.2 + + + +4->6 + + +1:0/0.2 + + + +7 + + +7 + + + +5->7 + + +-1:-1/1 + + + +6->7 + + +-1:-1/1 + From 1600c6e2f1d717eb30c644eb55671d66a1fb3d43 Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Fri, 12 May 2023 17:14:42 +0800 Subject: [PATCH 08/11] update --- docs/source/python_tutorials/fsa_algo/fsa_algo.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst index 63e5094f2..6a71bd0df 100644 --- a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst +++ b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst @@ -262,7 +262,7 @@ The outputs are shown below .. figure:: images/c_fsa_compose2.svg :alt: c_fsa :align: center - :figwidth: 1000px + :figwidth: 600px Note that ``c_fsa`` contains a single path when ``treat_epsilons_specially`` is `False`. From 4839e5567698f54637908a06b287a5d497b12fec Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Sun, 14 May 2023 17:16:44 +0800 Subject: [PATCH 09/11] update --- .../fsa_algo/code/compose1.py | 25 +-- .../fsa_algo/code/compose2.py | 21 +-- .../fsa_algo/code/compose3.py | 29 +-- .../fsa_algo/images/a_fsa_compose.svg | 65 ++++--- .../fsa_algo/images/a_fsa_compose2.svg | 81 ++++---- .../fsa_algo/images/a_fsa_compose3.svg | 70 ++++--- .../fsa_algo/images/b_fsa_compose.svg | 162 ++++++++-------- .../fsa_algo/images/b_fsa_compose2.svg | 162 ++++++++-------- .../fsa_algo/images/b_fsa_compose3.svg | 168 ++++++++--------- .../fsa_algo/images/c_fsa_compose.svg | 146 +++++++------- .../fsa_algo/images/c_fsa_compose2.svg | 139 +++----------- .../fsa_algo/images/c_fsa_compose3.svg | 178 +++++++----------- 12 files changed, 534 insertions(+), 712 deletions(-) diff --git a/docs/source/python_tutorials/fsa_algo/code/compose1.py b/docs/source/python_tutorials/fsa_algo/code/compose1.py index c99b08f99..9fcc67908 100644 --- a/docs/source/python_tutorials/fsa_algo/code/compose1.py +++ b/docs/source/python_tutorials/fsa_algo/code/compose1.py @@ -1,28 +1,13 @@ import k2 s1 = ''' -0 1 2 20 0.1 -0 0 1 10 0.2 -1 1 3 30 0.3 -1 2 -1 -1 0.4 -2 -''' - -s2 = ''' -0 1 10 1 0.1 -0 1 10 2 0.2 -0 1 20 3 0.3 -1 2 10 1 0.3 -1 2 20 2 0.2 -1 2 30 3 0.1 -2 3 20 1 0.2 -2 3 30 2 0.1 -2 3 30 3 0.3 -3 4 -1 -1 0.4 -4 +0 1 1 1 0 +1 2 2 2 0 +2 3 -1 -1 0 +3 ''' a_fsa = k2.Fsa.from_str(s1, acceptor=False) -b_fsa = k2.Fsa.from_str(s2, acceptor=False) +b_fsa = k2.ctc_topo(max_token=2, modified=False) c_fsa = k2.compose(a_fsa, b_fsa) a_fsa.draw('a_fsa_compose.svg', title='a_fsa') diff --git a/docs/source/python_tutorials/fsa_algo/code/compose2.py b/docs/source/python_tutorials/fsa_algo/code/compose2.py index c15beafba..ca1db0457 100644 --- a/docs/source/python_tutorials/fsa_algo/code/compose2.py +++ b/docs/source/python_tutorials/fsa_algo/code/compose2.py @@ -1,20 +1,13 @@ import k2 -s = ''' -0 1 0 0 0.5 -0 1 1 1 0.2 -0 1 2 2 0.3 -1 2 0 0 0.2 -1 2 1 1 0.3 -1 2 2 2 0.5 -2 3 0 0 0.2 -2 3 1 1 0.5 -2 3 2 2 0.3 -3 4 -1 -1 1 -4 +s1 = ''' +0 1 1 1 0 +1 2 2 2 0 +2 3 -1 -1 0 +3 ''' -a_fsa = k2.ctc_topo(max_token=1) -b_fsa = k2.Fsa.from_str(s, acceptor=False) +a_fsa = k2.Fsa.from_str(s1, acceptor=False) +b_fsa = k2.ctc_topo(max_token=2, modified=False) c_fsa = k2.compose(a_fsa, b_fsa, treat_epsilons_specially=False) a_fsa.draw('a_fsa_compose2.svg', title='a_fsa') diff --git a/docs/source/python_tutorials/fsa_algo/code/compose3.py b/docs/source/python_tutorials/fsa_algo/code/compose3.py index 6ea2b45c2..ec481b9ca 100644 --- a/docs/source/python_tutorials/fsa_algo/code/compose3.py +++ b/docs/source/python_tutorials/fsa_algo/code/compose3.py @@ -1,30 +1,15 @@ import k2 s1 = ''' -0 1 2 20 0.1 -0 0 1 10 0.2 -1 1 3 30 0.3 -1 2 -1 -1 0.4 -2 -''' - -s2 = ''' -0 1 10 1 0.1 -0 1 10 2 0.2 -0 1 20 3 0.3 -1 2 10 1 0.3 -1 2 20 2 0.2 -1 2 30 3 0.1 -2 3 20 1 0.2 -2 3 30 2 0.1 -2 3 30 3 0.3 -3 4 -1 -1 0.4 -4 +0 1 1 1 0 +1 2 2 2 0 +2 3 -1 -1 0 +3 ''' a_fsa = k2.Fsa.from_str(s1, acceptor=False) -b_fsa = k2.Fsa.from_str(s2, acceptor=False) -b_fsa = k2.add_epsilon_self_loops(b_fsa) -c_fsa = k2.compose(a_fsa, b_fsa) +a_fsa = k2.add_epsilon_self_loops(a_fsa) +b_fsa = k2.ctc_topo(max_token=2, modified=False) +c_fsa = k2.compose(a_fsa, b_fsa, treat_epsilons_specially=False) a_fsa.draw('a_fsa_compose3.svg', title='a_fsa') b_fsa.draw('b_fsa_compose3.svg', title='b_fsa') diff --git a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg index 08dbe72f9..9ba2c857e 100644 --- a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg +++ b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg @@ -4,58 +4,57 @@ - - + + WFST - -a_fsa + +a_fsa 0 - -0 - - - -0->0 - - -1:10/0.2 + +0 1 - -1 + +1 0->1 - - -2:20/0.1 - - - -1->1 - - -3:30/0.3 + + +1:1/0 2 - - -2 + +2 - + 1->2 - - --1:-1/0.4 + + +2:2/0 + + + +3 + + +3 + + + +2->3 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg index ffdbb5c4a..9ba2c857e 100644 --- a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg +++ b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg @@ -4,72 +4,57 @@ - - + + WFST - -a_fsa + +a_fsa 0 - -0 - - - -0->0 - - -0:0/0 + +0 1 - -1 + +1 - + 0->1 - - -1:1/0 + + +1:1/0 2 - - -2 - - - -0->2 - - --1:-1/0 - - - -1->0 - - -0:0/0 - - - -1->1 - - -1:0/0 + +2 - + 1->2 - - --1:-1/0 + + +2:2/0 + + + +3 + + +3 + + + +2->3 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg index 08dbe72f9..bc8c82057 100644 --- a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg +++ b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg @@ -4,58 +4,78 @@ - + WFST - -a_fsa + +a_fsa 0 - -0 + +0 - + 0->0 - - -1:10/0.2 + + +0:0/0 1 - -1 + +1 - + 0->1 - - -2:20/0.1 + + +1:1/0 1->1 - - -3:30/0.3 + + +0:0/0 2 - - -2 + +2 1->2 - - --1:-1/0.4 + + +2:2/0 + + + +2->2 + + +0:0/0 + + + +3 + + +3 + + + +2->3 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg index 0ef7d09d7..1cb622730 100644 --- a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg @@ -4,112 +4,120 @@ - - + + WFST - -b_fsa + +b_fsa 0 - -0 + +0 + + + +0->0 + + +0:0/0 1 - -1 - - - -0->1 - - -10:1/0.1 + +1 0->1 - - -10:2/0.2 - - - -0->1 - - -20:3/0.3 + + +1:1/0 2 - -2 + +2 - + + +0->2 + + +2:2/0 + + + +3 + + +3 + + -1->2 - - -10:1/0.3 +0->3 + + +-1:-1/0 - + -1->2 - - -20:2/0.2 +1->0 + + +0:0/0 - + -1->2 - - -30:3/0.1 - - - -3 - -3 +1->1 + + +1:0/0 - + -2->3 - - -20:1/0.2 +1->2 + + +2:2/0 - + -2->3 - - -30:2/0.1 +1->3 + + +-1:-1/0 - + -2->3 - - -30:3/0.3 - - - -4 - - -4 - - +2->0 + + +0:0/0 + + -3->4 - - --1:-1/0.4 +2->1 + + +1:1/0 + + + +2->2 + + +2:0/0 + + + +2->3 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg index 414228593..1cb622730 100644 --- a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg @@ -4,112 +4,120 @@ - - + + WFST - -b_fsa + +b_fsa 0 - -0 + +0 + + + +0->0 + + +0:0/0 1 - -1 - - - -0->1 - - -0:0/0.5 + +1 0->1 - - -1:1/0.2 - - - -0->1 - - -2:2/0.3 + + +1:1/0 2 - -2 + +2 - + + +0->2 + + +2:2/0 + + + +3 + + +3 + + -1->2 - - -0:0/0.2 +0->3 + + +-1:-1/0 - + -1->2 - - -1:1/0.3 +1->0 + + +0:0/0 - + -1->2 - - -2:2/0.5 - - - -3 - -3 +1->1 + + +1:0/0 - + -2->3 - - -0:0/0.2 +1->2 + + +2:2/0 - + -2->3 - - -1:1/0.5 +1->3 + + +-1:-1/0 - + -2->3 - - -2:2/0.3 - - - -4 - - -4 - - +2->0 + + +0:0/0 + + -3->4 - - --1:-1/1 +2->1 + + +1:1/0 + + + +2->2 + + +2:0/0 + + + +2->3 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg index f7a196c69..1cb622730 100644 --- a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg @@ -4,140 +4,120 @@ - - + + WFST - -b_fsa + +b_fsa 0 - -0 + +0 0->0 - - -0:0/0 + + +0:0/0 1 - -1 + +1 0->1 - - -10:1/0.1 + + +1:1/0 - + + +2 + +2 + + -0->1 - - -10:2/0.2 +0->2 + + +2:2/0 - + + +3 + + +3 + + -0->1 - - -20:3/0.3 +0->3 + + +-1:-1/0 - + -1->1 - - -0:0/0 - - - -2 - -2 +1->0 + + +0:0/0 - + -1->2 - - -10:1/0.3 +1->1 + + +1:0/0 1->2 - - -20:2/0.2 + + +2:2/0 - + -1->2 - - -30:3/0.1 +1->3 + + +-1:-1/0 - + -2->2 - - -0:0/0 - - - -3 - -3 +2->0 + + +0:0/0 - + -2->3 - - -20:1/0.2 +2->1 + + +1:1/0 - + -2->3 - - -30:2/0.1 +2->2 + + +2:0/0 2->3 - - -30:3/0.3 - - - -3->3 - - -0:0/0 - - - -4 - - -4 - - - -3->4 - - --1:-1/0.4 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg index 02b38c84c..341ec543f 100644 --- a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg +++ b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg @@ -4,124 +4,118 @@ - - + + WFST - -c_fsa + +c_fsa 0 - -0 + +0 + + + +0->0 + + +0:0/0 1 - -1 - - - -0->1 - - -1:1/0.3 + +1 0->1 - - -1:2/0.4 + + +1:1/0 2 - -2 + +2 - + -0->2 - - -2:3/0.4 +1->2 + + +0:0/0 3 - -3 + +3 1->3 - - -1:1/0.5 + + +2:2/0 + + + +2->2 + + +0:0/0 + + + +2->3 + + +2:2/0 4 - -4 - - - -1->4 - - -2:2/0.3 + +4 - - -2->4 - - -3:3/0.4 + + +3->4 + + +0:0/0 5 - -5 + + +5 - + 3->5 - - -2:1/0.3 + + +-1:-1/0 - - -4->5 - - -3:2/0.4 + + +4->4 + + +0:0/0 - -4->5 - - -3:3/0.6 - - - -6 - - -6 - - -5->6 - - --1:-1/0.8 +4->5 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg index 609d3cfe2..3b227bcd0 100644 --- a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg +++ b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose2.svg @@ -4,144 +4,57 @@ - - + + WFST - -c_fsa + +c_fsa 0 - -0 + +0 1 - -1 + +1 0->1 - - -0:0/0.5 + + +1:1/0 2 - -2 + +2 - + -0->2 - - -1:1/0.2 +1->2 + + +2:2/0 3 - -3 - - - -1->3 - - -0:0/0.2 - - - -4 - -4 - - - -1->4 - - -1:1/0.3 + + +3 - + 2->3 - - -0:0/0.2 - - - -2->4 - - -1:0/0.2 - - - -5 - -5 - - - -3->5 - - -0:0/0.2 - - - -6 - -6 - - - -3->6 - - -1:1/0.5 - - - -4->5 - - -0:0/0.2 - - - -4->6 - - -1:0/0.2 - - - -7 - - -7 - - - -5->7 - - --1:-1/1 - - - -6->7 - - --1:-1/1 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg index cf0f643c0..341ec543f 100644 --- a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg +++ b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg @@ -4,166 +4,118 @@ - - + + WFST - -c_fsa + +c_fsa 0 - -0 + +0 0->0 - - -0:0/0 + + +0:0/0 1 - -1 + +1 0->1 - - -1:1/0.3 - - - -0->1 - - -1:2/0.4 + + +1:1/0 2 - -2 + +2 - - -0->2 - - -2:3/0.4 - - - -1->1 - - -0:0/0 + + +1->2 + + +0:0/0 3 - -3 + +3 - + 1->3 - - -1:1/0.5 + + +2:2/0 + + + +2->2 + + +0:0/0 + + + +2->3 + + +2:2/0 4 - -4 + +4 - + -1->4 - - -2:2/0.3 - - - -2->2 - - -0:0/0 - - - -2->4 - - -3:3/0.4 - - - -3->3 - - -0:0/0 +3->4 + + +0:0/0 5 - -5 + + +5 - + 3->5 - - -2:1/0.3 + + +-1:-1/0 - + 4->4 - - -0:0/0 + + +0:0/0 - -4->5 - - -3:2/0.4 - - - + 4->5 - - -3:3/0.6 - - - -5->5 - - -0:0/0 - - - -6 - - -6 - - - -5->6 - - --1:-1/0.8 + + +-1:-1/0 From 2be528506d5f2eecc560e260bcd64246b0597472 Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Sun, 14 May 2023 17:23:35 +0800 Subject: [PATCH 10/11] update --- docs/source/python_tutorials/fsa_algo/fsa_algo.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst index 6a71bd0df..4e33818b9 100644 --- a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst +++ b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst @@ -293,9 +293,9 @@ using :func:`k2.add_epsilon_self_loops` with :align: center :figwidth: 600px - Note that ``c_fsa`` contains two paths + Note that ``c_fsa`` contains more than one paths even if ``treat_epsilons_specially`` is `False` - since we have added epsilon self loops to `b_fsa`. + since we have added epsilon self loops to `a_fsa`. .. NOTE:: From 88b094ccddadbceedc5c63a6939da02e8ef726a2 Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Sun, 14 May 2023 18:00:15 +0800 Subject: [PATCH 11/11] update --- .../fsa_algo/code/compose1.py | 6 +- .../fsa_algo/code/compose2.py | 6 +- .../fsa_algo/code/compose3.py | 8 +- .../python_tutorials/fsa_algo/fsa_algo.rst | 2 +- .../fsa_algo/images/a_fsa_compose.svg | 119 ++++++++++++---- .../fsa_algo/images/a_fsa_compose2.svg | 119 ++++++++++++---- .../fsa_algo/images/a_fsa_compose3.svg | 128 ++++++++++++------ .../fsa_algo/images/b_fsa_compose.svg | 119 ++++------------ .../fsa_algo/images/b_fsa_compose2.svg | 119 ++++------------ .../fsa_algo/images/b_fsa_compose3.svg | 128 ++++++------------ .../fsa_algo/images/c_fsa_compose.svg | 28 +++- .../fsa_algo/images/c_fsa_compose3.svg | 28 +++- 12 files changed, 419 insertions(+), 391 deletions(-) diff --git a/docs/source/python_tutorials/fsa_algo/code/compose1.py b/docs/source/python_tutorials/fsa_algo/code/compose1.py index 9fcc67908..ec25da974 100644 --- a/docs/source/python_tutorials/fsa_algo/code/compose1.py +++ b/docs/source/python_tutorials/fsa_algo/code/compose1.py @@ -1,13 +1,13 @@ import k2 -s1 = ''' +s = ''' 0 1 1 1 0 1 2 2 2 0 2 3 -1 -1 0 3 ''' -a_fsa = k2.Fsa.from_str(s1, acceptor=False) -b_fsa = k2.ctc_topo(max_token=2, modified=False) +a_fsa = k2.ctc_topo(max_token=2, modified=False) +b_fsa = k2.Fsa.from_str(s, acceptor=False) c_fsa = k2.compose(a_fsa, b_fsa) a_fsa.draw('a_fsa_compose.svg', title='a_fsa') diff --git a/docs/source/python_tutorials/fsa_algo/code/compose2.py b/docs/source/python_tutorials/fsa_algo/code/compose2.py index ca1db0457..637422358 100644 --- a/docs/source/python_tutorials/fsa_algo/code/compose2.py +++ b/docs/source/python_tutorials/fsa_algo/code/compose2.py @@ -1,13 +1,13 @@ import k2 -s1 = ''' +s = ''' 0 1 1 1 0 1 2 2 2 0 2 3 -1 -1 0 3 ''' -a_fsa = k2.Fsa.from_str(s1, acceptor=False) -b_fsa = k2.ctc_topo(max_token=2, modified=False) +a_fsa = k2.ctc_topo(max_token=2, modified=False) +b_fsa = k2.Fsa.from_str(s, acceptor=False) c_fsa = k2.compose(a_fsa, b_fsa, treat_epsilons_specially=False) a_fsa.draw('a_fsa_compose2.svg', title='a_fsa') diff --git a/docs/source/python_tutorials/fsa_algo/code/compose3.py b/docs/source/python_tutorials/fsa_algo/code/compose3.py index ec481b9ca..941620b7d 100644 --- a/docs/source/python_tutorials/fsa_algo/code/compose3.py +++ b/docs/source/python_tutorials/fsa_algo/code/compose3.py @@ -1,14 +1,14 @@ import k2 -s1 = ''' +s = ''' 0 1 1 1 0 1 2 2 2 0 2 3 -1 -1 0 3 ''' -a_fsa = k2.Fsa.from_str(s1, acceptor=False) -a_fsa = k2.add_epsilon_self_loops(a_fsa) -b_fsa = k2.ctc_topo(max_token=2, modified=False) +a_fsa = k2.ctc_topo(max_token=2, modified=False) +b_fsa = k2.Fsa.from_str(s, acceptor=False) +b_fsa = k2.add_epsilon_self_loops(b_fsa) c_fsa = k2.compose(a_fsa, b_fsa, treat_epsilons_specially=False) a_fsa.draw('a_fsa_compose3.svg', title='a_fsa') diff --git a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst index 4e33818b9..aa7d2268a 100644 --- a/docs/source/python_tutorials/fsa_algo/fsa_algo.rst +++ b/docs/source/python_tutorials/fsa_algo/fsa_algo.rst @@ -295,7 +295,7 @@ using :func:`k2.add_epsilon_self_loops` with Note that ``c_fsa`` contains more than one paths even if ``treat_epsilons_specially`` is `False` - since we have added epsilon self loops to `a_fsa`. + since we have added epsilon self loops to `b_fsa`. .. NOTE:: diff --git a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg index 9ba2c857e..2d5ef9a8e 100644 --- a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg +++ b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose.svg @@ -4,57 +4,120 @@ - - + + WFST - -a_fsa + +a_fsa 0 - -0 + +0 + + + +0->0 + + +0:0/0 1 - -1 + +1 - + 0->1 - - -1:1/0 + + +1:1/0 2 - -2 + +2 - - -1->2 - - -2:2/0 + + +0->2 + + +2:2/0 3 - - -3 + + +3 + + + +0->3 + + +-1:-1/0 + + + +1->0 + + +0:0/0 + + + +1->1 + + +1:0/0 + + + +1->2 + + +2:2/0 + + + +1->3 + + +-1:-1/0 + + + +2->0 + + +0:0/0 + + + +2->1 + + +1:1/0 + + + +2->2 + + +2:0/0 - + 2->3 - - --1:-1/0 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg index 9ba2c857e..2d5ef9a8e 100644 --- a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg +++ b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose2.svg @@ -4,57 +4,120 @@ - - + + WFST - -a_fsa + +a_fsa 0 - -0 + +0 + + + +0->0 + + +0:0/0 1 - -1 + +1 - + 0->1 - - -1:1/0 + + +1:1/0 2 - -2 + +2 - - -1->2 - - -2:2/0 + + +0->2 + + +2:2/0 3 - - -3 + + +3 + + + +0->3 + + +-1:-1/0 + + + +1->0 + + +0:0/0 + + + +1->1 + + +1:0/0 + + + +1->2 + + +2:2/0 + + + +1->3 + + +-1:-1/0 + + + +2->0 + + +0:0/0 + + + +2->1 + + +1:1/0 + + + +2->2 + + +2:0/0 - + 2->3 - - --1:-1/0 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg index bc8c82057..2d5ef9a8e 100644 --- a/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg +++ b/docs/source/python_tutorials/fsa_algo/images/a_fsa_compose3.svg @@ -4,78 +4,120 @@ - - + + WFST - -a_fsa + +a_fsa 0 - -0 + +0 0->0 - - -0:0/0 + + +0:0/0 1 - -1 + +1 0->1 - - -1:1/0 - - - -1->1 - - -0:0/0 + + +1:1/0 2 - -2 + +2 - + + +0->2 + + +2:2/0 + + + +3 + + +3 + + +0->3 + + +-1:-1/0 + + + +1->0 + + +0:0/0 + + + +1->1 + + +1:0/0 + + + 1->2 - - -2:2/0 + + +2:2/0 + + + +1->3 + + +-1:-1/0 + + + +2->0 + + +0:0/0 + + + +2->1 + + +1:1/0 - + 2->2 - - -0:0/0 - - - -3 - - -3 + + +2:0/0 - + 2->3 - - --1:-1/0 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg index 1cb622730..6367ee6ad 100644 --- a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose.svg @@ -4,120 +4,57 @@ - - + + WFST - -b_fsa + +b_fsa 0 - -0 - - - -0->0 - - -0:0/0 + +0 1 - -1 + +1 - + 0->1 - - -1:1/0 + + +1:1/0 2 - -2 + +2 - - -0->2 - - -2:2/0 + + +1->2 + + +2:2/0 3 - - -3 - - - -0->3 - - --1:-1/0 - - - -1->0 - - -0:0/0 - - - -1->1 - - -1:0/0 - - - -1->2 - - -2:2/0 - - - -1->3 - - --1:-1/0 - - - -2->0 - - -0:0/0 - - - -2->1 - - -1:1/0 - - - -2->2 - - -2:0/0 + + +3 - + 2->3 - - --1:-1/0 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg index 1cb622730..6367ee6ad 100644 --- a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose2.svg @@ -4,120 +4,57 @@ - - + + WFST - -b_fsa + +b_fsa 0 - -0 - - - -0->0 - - -0:0/0 + +0 1 - -1 + +1 - + 0->1 - - -1:1/0 + + +1:1/0 2 - -2 + +2 - - -0->2 - - -2:2/0 + + +1->2 + + +2:2/0 3 - - -3 - - - -0->3 - - --1:-1/0 - - - -1->0 - - -0:0/0 - - - -1->1 - - -1:0/0 - - - -1->2 - - -2:2/0 - - - -1->3 - - --1:-1/0 - - - -2->0 - - -0:0/0 - - - -2->1 - - -1:1/0 - - - -2->2 - - -2:0/0 + + +3 - + 2->3 - - --1:-1/0 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg index 1cb622730..10e2b95bb 100644 --- a/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg +++ b/docs/source/python_tutorials/fsa_algo/images/b_fsa_compose3.svg @@ -4,120 +4,78 @@ - - + + WFST - -b_fsa + +b_fsa 0 - -0 + +0 0->0 - - -0:0/0 + + +0:0/0 1 - -1 + +1 0->1 - - -1:1/0 + + +1:1/0 + + + +1->1 + + +0:0/0 2 - -2 - - - -0->2 - - -2:2/0 - - - -3 - - -3 - - - -0->3 - - --1:-1/0 - - - -1->0 - - -0:0/0 - - - -1->1 - - -1:0/0 + +2 - + 1->2 - - -2:2/0 - - - -1->3 - - --1:-1/0 - - - -2->0 - - -0:0/0 - - - -2->1 - - -1:1/0 + + +2:2/0 - + 2->2 - - -2:0/0 + + +0:0/0 + + + +3 + + +3 - + 2->3 - - --1:-1/0 + + +-1:-1/0 diff --git a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg index 341ec543f..37da69198 100644 --- a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg +++ b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose.svg @@ -36,6 +36,13 @@ 1:1/0 + + +1->1 + + +1:0/0 + 2 @@ -56,26 +63,33 @@ 3 - + 1->3 2:2/0 - + 2->2 0:0/0 - + 2->3 2:2/0 + + +3->3 + + +2:0/0 + 4 @@ -83,7 +97,7 @@ 4 - + 3->4 @@ -97,21 +111,21 @@ 5 - + 3->5 -1:-1/0 - + 4->4 0:0/0 - + 4->5 diff --git a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg index 341ec543f..37da69198 100644 --- a/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg +++ b/docs/source/python_tutorials/fsa_algo/images/c_fsa_compose3.svg @@ -36,6 +36,13 @@ 1:1/0 + + +1->1 + + +1:0/0 + 2 @@ -56,26 +63,33 @@ 3 - + 1->3 2:2/0 - + 2->2 0:0/0 - + 2->3 2:2/0 + + +3->3 + + +2:0/0 + 4 @@ -83,7 +97,7 @@ 4 - + 3->4 @@ -97,21 +111,21 @@ 5 - + 3->5 -1:-1/0 - + 4->4 0:0/0 - + 4->5