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):
self.min_length = min_length
self.max_length = max_length
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)