Пример #1
0
 def testAnalyzeIsHorizontalSequence(self):
     dna = [
         "------",
         "------",
         "------",
         "------",
         "------",
         "--TTTT"]
     obj = SimianAnalyzer()
     self.assertTrue(obj.analyze(dna))
Пример #2
0
 def testAnalyzeFalse(self):
     dna = [
         "------",
         "------",
         "------",
         "------",
         "------",
         "------"]
     obj = SimianAnalyzer()
     self.assertFalse(obj.analyze(dna))
Пример #3
0
 def testAnalyzeIsVerticalSequence(self):
     dna = [
         "------",
         "------",
         "-----T",
         "-----T",
         "-----T",
         "-----T"]
     obj = SimianAnalyzer()
     self.assertTrue(obj.analyze(dna))
Пример #4
0
 def testAnalyzeIsInvertedDiagonalSequence(self):
     dna = [
         "------",
         "------",
         "-----T",
         "----T-",
         "---T--",
         "--T---"]
     obj = SimianAnalyzer()
     self.assertTrue(obj.analyze(dna))
Пример #5
0
 def testIsDiagonalSequence(self):
     dna = [
         "------",
         "------",
         "T-----",
         "-T----",
         "--T---",
         "---T--"]
     obj = SimianAnalyzer()
     obj._SimianAnalyzer__simian_sequence_found = 0
     self.assertTrue(obj._SimianAnalyzer__isDiagonalSequence(dna))
Пример #6
0
 def testIsVerticalSequenceMultipleRows(self):
     dna = [
         "A-----",
         "A-----",
         "A----T",
         "A----T",
         "-----T",
         "-----T"]
     obj = SimianAnalyzer()
     obj._SimianAnalyzer__simian_sequence_found = 1
     self.assertTrue(obj._SimianAnalyzer__isVerticalSequence(dna))
Пример #7
0
 def testIsHorizontalSequenceMultipleRows(self):
     dna = [
         "--AAAA",
         "------",
         "------",
         "------",
         "------",
         "--TTTT"]
     obj = SimianAnalyzer()
     obj._SimianAnalyzer__simian_sequence_found = 1
     self.assertTrue(obj._SimianAnalyzer__isHorizontalSequence(dna))
Пример #8
0
 def testIsInvertedDiagonalSequenceMultipleRows(self):
     dna = [
         "---A--",
         "--A---",
         "-A---T",
         "A---T-",
         "---T--",
         "--T---"]
     obj = SimianAnalyzer()
     obj._SimianAnalyzer__simian_sequence_found = 1
     self.assertTrue(obj._SimianAnalyzer__isInvertedDiagonalSequence(dna))
Пример #9
0
 def testIsDiagonalSequenceMultipleSplitted(self):
     dna = [
         "T--------",
         "-T-------",
         "--T------",
         "---T-----",
         "---------",
         "-----A---",
         "------A--",
         "-------A-",
         "--------A"]
     obj = SimianAnalyzer()
     obj._SimianAnalyzer__simian_sequence_found = 0
     self.assertTrue(obj._SimianAnalyzer__isDiagonalSequence(dna))
Пример #10
0
 def testIsVerticalSequenceSkip(self):
     dna = [
         "---------",
         "---------",
         "--------T",
         "--------T",
         "--------T",
         "--------T",
         "--------T",
         "--------T",
         "--------T"]
     obj = SimianAnalyzer()
     obj._SimianAnalyzer__simian_sequence_found = 0
     self.assertFalse(obj._SimianAnalyzer__isVerticalSequence(dna))
Пример #11
0
 def testIsHorizontalSequenceMultipleSplitted(self):
     dna = [
         "---------",
         "---------",
         "---------",
         "---------",
         "---------",
         "---------",
         "---------",
         "---------",
         "TTTT-AAAA"]
     obj = SimianAnalyzer()
     obj._SimianAnalyzer__simian_sequence_found = 0
     self.assertTrue(obj._SimianAnalyzer__isHorizontalSequence(dna))
Пример #12
0
 def testIsInvertedDiagonalSequenceSkip(self):
     dna = [
         "---------",
         "---------",
         "------T--",
         "-----T---",
         "----T----",
         "---T-----",
         "--T------",
         "-T-------",
         "T--------"]
     obj = SimianAnalyzer()
     obj._SimianAnalyzer__simian_sequence_found = 0
     self.assertFalse(obj._SimianAnalyzer__isInvertedDiagonalSequence(dna))
Пример #13
0
class Dna:
    def __init__(self):
        self.simian = SimianAnalyzer()
        self.dna_table = boto3.resource("dynamodb").Table("dna")
        self.stats_table = boto3.resource("dynamodb").Table("stats")

    @staticmethod
    def __generateId(dna: List[str]) -> str:
        return hashlib.md5("".join(dna).encode("utf-8")).hexdigest()

    @staticmethod
    def __calcRatio(simians: int, humans: int) -> Decimal:
        if not humans:
            return Decimal(0)
        return Decimal(simians / humans).quantize(Decimal("1.0"))

    async def __generateStats(self) -> dict:
        query = self.dna_table.scan(
            Select="COUNT", FilterExpression=Attr("is_simian").eq(True)) or {}
        simians = query.get("Count", 0)
        humans = query.get("ScannedCount", 0) - simians
        item = {
            '_id': "1",
            'simians': simians,
            'humans': humans,
            'ratio': self.__calcRatio(simians, humans)
        }
        self.stats_table.put_item(Item=item)
        return item

    def store(self, dna: List[str]) -> dict:
        Validator.check(dna)
        item = {
            '_id': self.__generateId(dna),
            'dna': dna,
            'is_simian': self.isSimian(dna)
        }
        self.dna_table.put_item(Item=item)
        asyncio.run(self.__generateStats())
        return item

    def isSimian(self, dna: List[str]) -> bool:
        return self.simian.analyze(dna)

    def stats(self) -> dict:
        stats = (self.stats_table.scan(Limit=1).get("Items", [{}]) or [{}])[0]
        return {
            'count_mutant_dna': str(stats.get("simians", 0)),
            'count_human_dna': str(stats.get("humans", 0)),
            'ratio': str(stats.get("ratio", 0))
        }
Пример #14
0
 def testGetSequenceByDecrColumns(self):
     dna = ["CTGAGA", "CTAACC", "TCACGT", "ATACTT", "CCTTGT", "TCTTTT"]
     row = 0
     col = 5
     expected = '{}{}{}{}'.format(dna[row][col], dna[row + 1][col - 1], dna[row + 2][col - 2], dna[row + 3][col - 3])
     self.assertEqual(expected, SimianAnalyzer._SimianAnalyzer__getSequenceByDecrColumns(dna, row, col))
Пример #15
0
 def testBySizeFalse(self):
     dna = ["CTGAGA"]
     self.assertFalse(SimianAnalyzer._SimianAnalyzer__bySize(dna))
Пример #16
0
 def testBySize(self):
     dna = ["CTGAGA", "CTAACC", "TCACGT", "ATACTT", "CCTTGT", "TCTTTT"]
     self.assertTrue(SimianAnalyzer._SimianAnalyzer__bySize(dna))
Пример #17
0
 def testAnalyzeFalseBySize(self):
     dna = ["CTGAGA"]
     obj = SimianAnalyzer()
     self.assertFalse(obj.analyze(dna))
Пример #18
0
 def testCheckSequenceFalse(self):
     obj = SimianAnalyzer()
     obj._SimianAnalyzer__simian_sequence_found = 10
     self.assertFalse(obj.checkSequence())
Пример #19
0
 def __init__(self):
     self.simian = SimianAnalyzer()
     self.dna_table = boto3.resource("dynamodb").Table("dna")
     self.stats_table = boto3.resource("dynamodb").Table("stats")
Пример #20
0
 def testIncrementSimianSequence(self):
     obj = SimianAnalyzer()
     self.assertEqual(0, obj._SimianAnalyzer__simian_sequence_found)
     self.assertEqual(1, obj._SimianAnalyzer__incrementSimianSequence())
     self.assertEqual(1, obj._SimianAnalyzer__simian_sequence_found)