def test_count_by_type_multiple_link(self):
        '''
        This test tests if count_by_type() can assemble linkage from water network.
        :return:
        '''
        grofile = '''Test gro file
5
    1ALA      N    1   0.000   0.000   0.000
    1ALA      H    2   0.100   0.000   0.000
    2SOL     OW    3   0.300   0.000   0.000
    2SOL    HW2    4   0.400   0.000   0.000
    4ALA      O    5   0.600   0.000   0.000
 1.0   1.0   1.0'''
        u = MDAnalysis.Universe(StringIO(grofile), format='gro')
        wb = WaterBridgeAnalysis(u, 'protein and (resid 1)',
                                 'protein and (resid 4)')
        # Build an dummy WaterBridgeAnalysis object for testing
        wb._timeseries = True
        wb.timesteps = [0]
        wb._water_network = [{
            ('SOL', 2):
            [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998),
              (1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
             {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998),
              (3, 2, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]
        }]
        result = [(0, 3, 'ALA', 1, 'O', 'ALA', 4, 'H', 1.0),
                  (0, 4, 'ALA', 1, 'O', 'ALA', 4, 'O', 1.0),
                  (1, 3, 'ALA', 1, 'H', 'ALA', 4, 'H', 1.0),
                  (1, 4, 'ALA', 1, 'H', 'ALA', 4, 'O', 1.0)]
        assert_equal(sorted(wb.count_by_type().tolist()), result)
    def test_count_by_type_multiple_link(self):
        '''
        This test tests if count_by_type() can assemble linkage from water network.
        :return:
        '''
        grofile = '''Test gro file
5
    1ALA      N    1   0.000   0.000   0.000
    1ALA      H    2   0.100   0.000   0.000
    2SOL     OW    3   0.300   0.000   0.000
    2SOL    HW2    4   0.400   0.000   0.000
    4ALA      O    5   0.600   0.000   0.000
 1.0   1.0   1.0'''
        u = MDAnalysis.Universe(StringIO(grofile), format='gro')
        wb = WaterBridgeAnalysis(u, 'protein and (resid 1)', 'protein and (resid 4)')
        # Build an dummy WaterBridgeAnalysis object for testing
        wb._timeseries = True
        wb.timesteps = [0]
        wb._water_network = [{('SOL', 2): [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998),
                                            (1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
                                           {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998),
                                            (3, 2, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]}]
        result = [(0, 3, 'ALA', 1, 'O', 'ALA', 4, 'H', 1.0),
                  (0, 4, 'ALA', 1, 'O', 'ALA', 4, 'O', 1.0),
                  (1, 3, 'ALA', 1, 'H', 'ALA', 4, 'H', 1.0),
                  (1, 4, 'ALA', 1, 'H', 'ALA', 4, 'O', 1.0)]
        assert_equal(sorted(wb.count_by_type().tolist()), result)
    def test_count_by_type_multiple_frame(self):
        '''
        This test tests if count_by_type() works in multiply situations.
        :return:
        '''
        grofile = '''Test gro file
5
    1ALA      N    1   0.000   0.000   0.000
    1ALA      H    2   0.100   0.000   0.000
    2SOL     OW    3   0.300   0.000   0.000
    2SOL    HW2    4   0.400   0.000   0.000
    4ALA      O    5   0.600   0.000   0.000
 1.0   1.0   1.0'''
        u = MDAnalysis.Universe(StringIO(grofile), format='gro')
        wb = WaterBridgeAnalysis(u, 'protein and (resid 1)', 'protein and (resid 4)')
        # Build an dummy WaterBridgeAnalysis object for testing
        wb._timeseries = True
        wb.timesteps = [0, 1, 2, 3, 4, 5]
        wb._water_network = [# a 2 * 2 water netwrok consists of all four links
                             {('SOL', 2): [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998),
                                            (1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
                                           {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998),
                                            (3, 2, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]},
                             # a repeat
                             {('SOL', 2): [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998),
                                            (1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
                                           {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998),
                                            (3, 2, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]},
                             # single link 1
                             {('SOL', 2): [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998)},
                                           {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998)}]},
                             # single link 2
                             {('SOL', 2): [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998)},
                                           {(3, 1, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]},
                             # single link 3
                             {('SOL', 2): [{(1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
                                           {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998)}]},
                             # single link 4
                             {('SOL', 2): [{(1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
                                           {(3, 2, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]}]
        result = [(0, 3, 'ALA', 1, 'O', 'ALA', 4, 'H', 0.5),
                  (0, 4, 'ALA', 1, 'O', 'ALA', 4, 'O', 0.5),
                  (1, 3, 'ALA', 1, 'H', 'ALA', 4, 'H', 0.5),
                  (1, 4, 'ALA', 1, 'H', 'ALA', 4, 'O', 0.5)]
        assert_equal(sorted(wb.count_by_type().tolist()), result)
    def test_count_by_type_multiple_frame(self):
        '''
        This test tests if count_by_type() works in multiply situations.
        :return:
        '''
        grofile = '''Test gro file
5
    1ALA      N    1   0.000   0.000   0.000
    1ALA      H    2   0.100   0.000   0.000
    2SOL     OW    3   0.300   0.000   0.000
    2SOL    HW2    4   0.400   0.000   0.000
    4ALA      O    5   0.600   0.000   0.000
 1.0   1.0   1.0'''
        u = MDAnalysis.Universe(StringIO(grofile), format='gro')
        wb = WaterBridgeAnalysis(u, 'protein and (resid 1)',
                                 'protein and (resid 4)')
        # Build an dummy WaterBridgeAnalysis object for testing
        wb._timeseries = True
        wb.timesteps = [0, 1, 2, 3, 4, 5]
        wb._water_network = [  # a 2 * 2 water netwrok consists of all four links
            {
                ('SOL', 2):
                [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998),
                  (1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
                 {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998),
                  (3, 2, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]
            },
            # a repeat
            {
                ('SOL', 2):
                [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998),
                  (1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
                 {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998),
                  (3, 2, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]
            },
            # single link 1
            {
                ('SOL', 2):
                [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998)},
                 {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998)}]
            },
            # single link 2
            {
                ('SOL', 2):
                [{(2, 0, ('SOL', 2, 'HW1'), ('ALA', 1, 'O'), 2.0, 179.99998)},
                 {(3, 1, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]
            },
            # single link 3
            {
                ('SOL', 2):
                [{(1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
                 {(3, 4, ('SOL', 2, 'HW2'), ('ALA', 4, 'O'), 2.0, 179.99998)}]
            },
            # single link 4
            {
                ('SOL', 2):
                [{(1, 2, ('ALA', 1, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)},
                 {(3, 2, ('ALA', 4, 'H'), ('SOL', 2, 'OW'), 2.0, 179.99998)}]
            }
        ]
        result = [(0, 3, 'ALA', 1, 'O', 'ALA', 4, 'H', 0.5),
                  (0, 4, 'ALA', 1, 'O', 'ALA', 4, 'O', 0.5),
                  (1, 3, 'ALA', 1, 'H', 'ALA', 4, 'H', 0.5),
                  (1, 4, 'ALA', 1, 'H', 'ALA', 4, 'O', 0.5)]
        assert_equal(sorted(wb.count_by_type().tolist()), result)