| #!/usr/bin/env python3 | |
| # Copyright 2021 Xiaomi Corp. (authors: Fangjun Kuang) | |
| # | |
| # See ../../LICENSE for clarification regarding multiple authors | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| """ | |
| You can run this file in one of the two ways: | |
| (1) cd icefall; pytest test/test_decode.py | |
| (2) cd icefall; ./test/test_decode.py | |
| """ | |
| import k2 | |
| from icefall.decode import Nbest | |
| def test_nbest_from_lattice(): | |
| s = """ | |
| 0 1 1 10 0.1 | |
| 0 1 5 10 0.11 | |
| 0 1 2 20 0.2 | |
| 1 2 3 30 0.3 | |
| 1 2 4 40 0.4 | |
| 2 3 -1 -1 0.5 | |
| 3 | |
| """ | |
| lattice = k2.Fsa.from_str(s, acceptor=False) | |
| lattice = k2.Fsa.from_fsas([lattice, lattice]) | |
| nbest = Nbest.from_lattice( | |
| lattice=lattice, | |
| num_paths=10, | |
| use_double_scores=True, | |
| nbest_scale=0.5, | |
| ) | |
| # each lattice has only 4 distinct paths that have different word sequences: | |
| # 10->30 | |
| # 10->40 | |
| # 20->30 | |
| # 20->40 | |
| # | |
| # So there should be only 4 paths for each lattice in the Nbest object | |
| assert nbest.fsa.shape[0] == 4 * 2 | |
| assert nbest.shape.row_splits(1).tolist() == [0, 4, 8] | |
| nbest2 = nbest.intersect(lattice) | |
| tot_scores = nbest2.tot_scores() | |
| argmax = tot_scores.argmax() | |
| best_path = k2.index_fsa(nbest2.fsa, argmax) | |
| print(best_path[0]) | |