def get_swadeshness_by_nearest(self, word_matrix, k): """ Calculates the swadeshness of the k languages nearest to the language which is nearest to the point. Only the distances between that nearest language (the origin) and each of the others are taken into account. The parameter k must be positive integer. """ globe = Map() languages = globe.get_nearest(self.latitude, self.longitude, k + 1) if len(languages) == 0: return None, {}, 0 if len(languages) == 1: return languages[0], {}, 0 origin = languages[0] languages = languages[1:] d = {} global_d, local_d = [], [] for language in languages: distance_pair = word_matrix.get_distances(origin, language) if distance_pair is not None: d[language] = distance_pair global_d.append(distance_pair[0]) local_d.append(distance_pair[1]) p = get_correlation(global_d, local_d) return origin, d, p
def calculate_on_neighbourhoods(self, word_matrix, k): """ Calculates the swadeshness of each cell using the neighbourhood method. Cells with less than 6 relevant languages have swadeshness of 0. """ planet = Map() for cell in self.cells: try: languages = planet.get_nearest(cell[0], cell[1], k + 1) except MapError: cell.append(0) continue if len(languages) < 6: cell.append(0) continue origin = languages[0] languages = languages[1:] global_d, local_d = [], [] for language in languages: distance_pair = word_matrix.get_distances(origin, language) if distance_pair is not None: global_d.append(distance_pair[0]) local_d.append(distance_pair[1]) cell.append(get_correlation(global_d, local_d)) return self.cells
class MapTestCase(TestCase): fixtures = ['languages.json'] def setUp(self): self.map = Map() def test_get_nearest(self): iberia = self.map.get_nearest(40, 0, 3) self.assertEqual(iberia, ['es', 'eu', 'pt']) elbrus = self.map.get_nearest(43, 42, 8) self.assertEqual(elbrus, [ 'ab', 'os', 'ka', 'ady', 'ddo', 'ce', 'hy', 'dar' ]) @given( floats(min_value=-90.0, max_value=90.0), floats(min_value=-180.0, max_value=180.0), integers(min_value=1, max_value=42) ) def test_get_nearest_returns(self, latitude, longitude, k): try: lang = self.map.get_in_radius(latitude, longitude, k) except Exception as error: self.assertIsInstance(error, MapError) else: self.assertIs(type(lang), set) def test_get_single_nearest(self): iberia = self.map.get_single_nearest(40, 0, 500) self.assertEqual(iberia, 'es') elbrus = self.map.get_single_nearest(43, 42, 500) self.assertEqual(elbrus, 'ab') iceland = self.map.get_single_nearest(65, -22, 500) self.assertEqual(iceland, 'is') volga = self.map.get_single_nearest(55, 50, 500) self.assertEqual(volga, 'tt') andes = self.map.get_single_nearest(-15, -70, 500) self.assertEqual(andes, None) @given( floats(min_value=-90.0, max_value=90.0), floats(min_value=-180.0, max_value=180.0), integers(min_value=1, max_value=5000) ) def test_get_single_nearest_returns(self, latitude, longitude, radius): try: lang = self.map.get_single_nearest(latitude, longitude, radius) except Exception as error: self.assertIsInstance(error, MapError) else: try: self.assertIs(type(lang), str) except AssertionError: self.assertIsNone(lang) def test_get_in_radius(self): iceland = self.map.get_in_radius(65, -22, 1000) self.assertEqual(iceland, set(['is'])) volga = self.map.get_in_radius(55, 50, 1000) self.assertEqual(volga, set([ 'ba', 'cv', 'mdf', 'mhr', 'myv', 'tt', 'udm' ])) andes = self.map.get_in_radius(-15, -70, 1000) self.assertEqual(andes, set()) @given( floats(min_value=-90.0, max_value=90.0), floats(min_value=-180.0, max_value=180.0), integers(min_value=1, max_value=5000) ) def test_get_in_radius_returns(self, latitude, longitude, radius): try: lang = self.map.get_in_radius(latitude, longitude, radius) except Exception as error: self.assertIsInstance(error, MapError) else: self.assertIs(type(lang), set)