File: s3tmat.py

package info (click to toggle)
sphinxtrain 5.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 32,572 kB
  • sloc: ansic: 94,052; perl: 8,939; python: 6,702; cpp: 2,044; makefile: 6
file content (54 lines) | stat: -rw-r--r-- 1,620 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# Copyright (c) 2006 Carnegie Mellon University
#
# You may copy and modify this freely under the same terms as
# Sphinx-III

"""Read/write Sphinx-III transition matrix files.

This module reads and writes the HMM transition matrix files used by
SphinxTrain, Sphinx-III, and PocketSphinx.
"""

__author__ = "David Huggins-Daines <dhdaines@gmail.com>"
__version__ = "$Revision$"

from .s3file import S3File, S3File_write
from numpy import shape


def open(filename, mode="rb"):
    if mode in ("r", "rb"):
        return S3TmatFile(filename)
    elif mode in ("w", "wb"):
        return S3TmatFile_write(filename)
    else:
        raise Exception("mode must be 'r', 'rb', 'w', or 'wb'")


class S3TmatFile(S3File):
    "Read Sphinx-III format transition matrix files"
    def __init__(self, filename, mode="rb"):
        super().__init__(filename=filename, mode=mode)
        self._params = self._load()

    def readgauheader(self):
        if self.fileattr["version"] != "1.0":
            raise Exception("Version mismatch: must be 1.0 but is "
                            + self.fileattr["version"])
    
    def _load(self):
        self.readgauheader()
        self.fh.seek(self.data_start, 0)
        return self.read3d()


class S3TmatFile_write(S3File_write):
    "Write Sphinx-III format transition matrix files"

    def writeall(self, stuff):
        n_tmat, n_state, spam = shape(stuff)
        if n_state + 1 != spam:
            raise Exception("n_state rows %d != n_state columns %d - 1"
                            % (n_state, spam))
        self.fh.seek(self.data_start, 0)
        self.write3d(stuff)