#!/usr/bin/env python

"""Run the HMM backward algorithm.
The input and output binary files
consist of double precision floating point numbers in
the format (e.g. endianness) native to the machine.
"""

import argparse

import numpy as np

from hmmus import hmmhelper
from hmmus import hmm


def main(args):
    np_distn, np_trans = hmmhelper.load_distn_and_trans(
            args.distribution, args.transitions)
    hmm.backward(
            np_distn, np_trans,
            args.likelihoods, args.scaling, args.backward)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--distribution',
            default='distribution.bin',
            help='initial distribution (input binary file)')
    parser.add_argument('--transitions',
            default='transitions.bin',
            help='transition matrix (input binary file)')
    parser.add_argument('--likelihoods',
            default='likelihoods.bin',
            help='likelihood vectors (input binary file)')
    parser.add_argument('--scaling',
            default='scaling.bin',
            help='scaling factors (input binary file)')
    parser.add_argument('--backward',
            default='backward.bin',
            help='backward vectors (output binary file)')
    main(parser.parse_args())
