def test_get_odd_count(self): dists = [ OuterDistance(10, 11, 1), OuterDistance(10, 11, 4), OuterDistance(12, 11, 2), OuterDistance(12, 11, 4), OuterDistance(1, 2, 2), ] self.assertEqual(3, len(get_outer_distance_standard_deviation(dists)))
def test_get_a_o_d_count(self): dists = [ OuterDistance(10, 11, 2), OuterDistance(10, 11, 4), OuterDistance(12, 11, 2), OuterDistance(12, 11, 4), OuterDistance(1, 2, 2), ] self.assertEqual(3 , len(get_average_outer_distance(dists)))
def test_get_dist(self): inputs = [ Input(10, 1, 3), Input(11, 2, 4), Input(12, 6, 8) ] self.assertEqual( get_outer_distance_sequence(inputs), [ OuterDistance(10, 11, -1), OuterDistance(11, 12, 2) ] )
def test_get_odsd(self): dists = [ OuterDistance(10, 11, 1), OuterDistance(10, 11, 4), OuterDistance(12, 11, 2), OuterDistance(12, 11, 4), OuterDistance(1, 2, 2), ] for odsd in get_outer_distance_standard_deviation(dists): self.assertIn(odsd, [ OuterDistance(10,11, math.sqrt((1.5**2 + 1.5**2) / 2.0)), OuterDistance(12,11, 1), OuterDistance(1,2, 0) ] )
def test_get_odd(self): dists = [ OuterDistance(10, 11, 1), OuterDistance(10, 11, 4), OuterDistance(12, 11, 2), OuterDistance(12, 11, 4), OuterDistance(1, 2, 2), ] for odd in get_outer_distance_dispersion(dists): self.assertIn(odd, [ OuterDistance(10,11, (1.5**2 + 1.5**2) / 2.0), OuterDistance(12,11, 1), OuterDistance(1,2, 0) ] )
def get_outer_distance_sequence(input_sequence): dist_seq = list() i = 1 while i < len(input_sequence): if input_sequence[i].key_press_time - input_sequence[ i - 1].key_release_time < MAX_PAUSE: dist_seq.append( OuterDistance( input_sequence[i - 1].key_code, input_sequence[i].key_code, input_sequence[i].key_press_time - input_sequence[i - 1].key_release_time)) i += 1 return dist_seq
def test_get_a(self): dists = [ OuterDistance(10, 11, 2), OuterDistance(10, 11, 4), OuterDistance(12, 11, 2), OuterDistance(12, 11, 4), OuterDistance(1, 2, 2), ] for item in get_average_outer_distance(dists): self.assertIn( item, [ OuterDistance(10,11,3), OuterDistance(12,11,3), OuterDistance(1,2,2) ] )
def get_average_outer_distance(outer_distance_sequence): dictionary = dict() for distance in outer_distance_sequence: #TODO избавиться от словаря с адовыми кортежами вместо ключей if (distance.key_code_from, distance.key_code_to) in dictionary.keys(): dictionary[(distance.key_code_from, distance.key_code_to)][0] += distance.distance dictionary[(distance.key_code_from, distance.key_code_to)][1] += 1 else: dictionary[(distance.key_code_from, distance.key_code_to)] = [distance.distance, 1] result = list() for key in dictionary.keys(): result.append( OuterDistance(key[0], key[1], dictionary[key][0] / float(dictionary[key][1]))) return result
def get_outer_distance_dispersion(outer_distance_sequence): average_distance = get_average_outer_distance(outer_distance_sequence) result = list() for ad in average_distance: i = 0 current_value = 0 current_count = 0 while i < len(outer_distance_sequence): if outer_distance_sequence[ i].key_code_from == ad.key_code_from and outer_distance_sequence[ i].key_code_to == ad.key_code_to: current_value += (outer_distance_sequence[i].distance - ad.distance)**2 current_count += 1 i += 1 result.append( OuterDistance(ad.key_code_from, ad.key_code_to, current_value / float(current_count))) return result