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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
# Copyright 2001 Brad Chapman. All rights reserved.
#
# This file is part of the Biopython distribution and governed by your
# choice of the "Biopython License Agreement" or the "BSD 3-Clause License".
# Please see the LICENSE file that should have been included as part of this
# package.
"""Generic functions which are useful for working with HMMs.
This just collects general functions which you might like to use in
dealing with HMMs.
"""
import warnings
from Bio import BiopythonDeprecationWarning
warnings.warn(
"The 'Bio.HMM.Utilities' module is deprecated and will be "
"removed in a future release of Biopython. Consider using the "
"hmmlearn package instead.",
BiopythonDeprecationWarning,
)
def pretty_print_prediction(
emissions,
real_state,
predicted_state,
emission_title="Emissions",
real_title="Real State",
predicted_title="Predicted State",
line_width=75,
):
"""Print out a state sequence prediction in a nice manner.
Arguments:
- emissions -- The sequence of emissions of the sequence you are
dealing with.
- real_state -- The actual state path that generated the emissions.
- predicted_state -- A state path predicted by some kind of HMM model.
"""
# calculate the length of the titles and sequences
title_length = max(len(emission_title), len(real_title), len(predicted_title)) + 1
seq_length = line_width - title_length
# set up the titles so they'll print right
emission_title = emission_title.ljust(title_length)
real_title = real_title.ljust(title_length)
predicted_title = predicted_title.ljust(title_length)
cur_position = 0
# while we still have more than seq_length characters to print
while True:
if (cur_position + seq_length) < len(emissions):
extension = seq_length
else:
extension = len(emissions) - cur_position
print(f"{emission_title}{emissions[cur_position:cur_position + seq_length]}")
print(f"{real_title}{real_state[cur_position : cur_position + seq_length]}")
print(
"%s%s\n"
% (
predicted_title,
predicted_state[cur_position : cur_position + seq_length],
)
)
if len(emissions) < (cur_position + seq_length):
break
cur_position += seq_length
|