Source code for dnachisel.builtin_specifications.SequenceLengthBounds
"""Implement SequenceLengthBounds."""
from ..Specification import Specification, SpecEvaluation
[docs]
class SequenceLengthBounds(Specification):
"""Checks that the sequence length is between bounds.
Quite an uncommon specification as it can't really be solved or optimized.
But practical as part of a list of constraints to verify.
Parameters
----------
min_length
Minimal allowed sequence length in nucleotides
max_length
Maximal allowed sequence length in nucleotides. None means no bound.
"""
best_possible_score = 0
def __init__(self, min_length=0, max_length=None, boost=1.0):
self.min_length = min_length
self.max_length = max_length
self.boost = boost
def evaluate(self, problem):
"""Return 0 if the sequence length is between the bounds, else -1"""
L, mini, maxi = len(problem.sequence), self.min_length, self.max_length
if maxi is None:
score = L >= mini
else:
score = mini <= L <= maxi
return SpecEvaluation(self, problem, score - 1)
def __repr__(self):
return "Length(%d < L < %d)" % (self.min_length, self.max_length)