Advertisement
EWTD

k_nw_tests

Dec 25th, 2023
1,030
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.06 KB | None | 0 0
  1. import datetime
  2. import src.nw as align
  3.  
  4. def test_nw_1():
  5.     """Identical sequences, match=5, mismatch=-4, gap=-10, range=1
  6.        results should be equal, but banded algorithm should be faster
  7.    """
  8.     seq1 = 'ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT'
  9.     seq2 = 'ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT'
  10.     start = datetime.datetime.now()
  11.     result1 = align.needleman_wunsch(seq1,
  12.                                      seq2,
  13.                                      score=lambda x, y: 5 if x == y else -4,
  14.                                      gap_penalty=-10)
  15.     elapsed_time1 = datetime.datetime.now() - start
  16.     start = datetime.datetime.now()
  17.     result2 = align.needleman_wunsch_k(seq1,
  18.                                      seq2,
  19.                                      score=lambda x, y: 5 if x == y else -4,
  20.                                      gap_penalty=-10,
  21.                                      visible_range=1)
  22.     elapsed_time2 = datetime.datetime.now() - start
  23.     assert elapsed_time1 > elapsed_time2
  24.     assert result1 == result2
  25.  
  26. def test_nw_2():
  27.     """4 gaps, match=5, mismatch=-4, gap=-10
  28.        in first case with visible_range = 1, gives suboptimal solution
  29.        in second case with visible_range = 2, gives correct solution
  30.    """
  31.     seq1 = 'ACTGGTCAACTGGTCAACTGGTCAACTGGTCA'
  32.     seq2 = 'TTACTGGTCAACTGGTCAACTTCAACTGGTCA'
  33.     score_1, aligned_seq1_1, aligned_seq2_1 = align.needleman_wunsch_k(seq1,
  34.                                                                seq2,
  35.                                                                score=lambda x, y: 5 if x == y else -4,
  36.                                                                gap_penalty=-10,
  37.                                                                visible_range=1)
  38.     score_2, aligned_seq1_2, aligned_seq2_2 = align.needleman_wunsch_k(seq1,
  39.                                                                  seq2,
  40.                                                                  score=lambda x, y: 5 if x == y else -4,
  41.                                                                  gap_penalty=-10,
  42.                                                                  visible_range=2)
  43.     assert score_1 < score_2
  44.     assert aligned_seq1_1 != aligned_seq1_2
  45.     assert aligned_seq2_1 != aligned_seq2_2
  46.  
  47. def test_nw_3():
  48.     """Full mismatch, match=5, mismatch=-4, gap=-10, visible_range=2"""
  49.     seq1 = 'AAAAAA'
  50.     seq2 = 'CCCCCC'
  51.     score, aligned_seq1, aligned_seq2 = align.needleman_wunsch_k(seq1,
  52.                                                                seq2,
  53.                                                                score=lambda x, y: 5 if x == y else -4,
  54.                                                                gap_penalty=-10,
  55.                                                                visible_range=2)
  56.     assert score == -4*len(seq1)
  57.     assert aligned_seq1 == 'AAAAAA'
  58.     assert aligned_seq2 == 'CCCCCC'
  59.  
  60.  
  61. test_nw_1()
  62. test_nw_2()
  63. test_nw_3()
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement