"""ngram.py

Functions:
to_ngrams  Convert a list of tokens into a list of ngrams.
count      Count the ngrams in a list of tokens.

"""
from Bio import listfns

def to_ngrams(n, tokens):
    """to_ngrams(n, tokens) -> list of n-grams"""
    if n < 0 or n > 10:
        raise ValueError, "n of %d out of range" % n
    if n == 1:
        return tokens
    ngrams = []
    for i in range(len(tokens)-(n-1)):
        ngrams.append(tuple(tokens[i:i+n]))
    return ngrams

def count(n, tokens):
    """count(n, tokens) -> dictionary of ngram -> count"""
    ngrams = to_ngrams(n, tokens)
    return listfns.count(ngrams)
