From: Miroslav Šedivý <6774676+eumiro@users.noreply.github.com> Date: Wed, 5 Mar 2025 19:55:53 +0000 (+0100) Subject: Simplify int/float manipulation X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/6ff51712fe3800800d2d1e36a56794ae02b9fd91 Simplify int/float manipulation --- diff --git a/src/nominatim_api/search/db_search_builder.py b/src/nominatim_api/search/db_search_builder.py index 2c5d0d18..ddfddaa6 100644 --- a/src/nominatim_api/search/db_search_builder.py +++ b/src/nominatim_api/search/db_search_builder.py @@ -227,7 +227,7 @@ class SearchBuilder: # To catch remaining results, lookup by name and address # We only do this if there is a reasonable number of results expected. - exp_count = exp_count / (2**len(addr_tokens)) if addr_tokens else exp_count + exp_count /= 2**len(addr_tokens) if exp_count < 10000 and addr_count < 20000: penalty += 0.35 * max(1 if name_fulls else 0.1, 5 - len(name_partials) - len(addr_tokens)) diff --git a/src/nominatim_api/types.py b/src/nominatim_api/types.py index 66a3c553..e58df478 100644 --- a/src/nominatim_api/types.py +++ b/src/nominatim_api/types.py @@ -144,7 +144,7 @@ class Point(NamedTuple): except ValueError as exc: raise UsageError('Point parameter needs to be numbers.') from exc - if x < -180.0 or x > 180.0 or y < -90.0 or y > 90.0: + if not -180 <= x <= 180 or not -90 <= y <= 90.0: raise UsageError('Point coordinates invalid.') return Point(x, y) diff --git a/src/nominatim_api/v1/classtypes.py b/src/nominatim_api/v1/classtypes.py index 7198b412..c2fe1453 100644 --- a/src/nominatim_api/v1/classtypes.py +++ b/src/nominatim_api/v1/classtypes.py @@ -25,8 +25,8 @@ def get_label_tag(category: Tuple[str, str], extratags: Optional[Mapping[str, st elif rank < 26 and extratags and 'linked_place' in extratags: label = extratags['linked_place'] elif category == ('boundary', 'administrative'): - label = ADMIN_LABELS.get((country or '', int(rank/2)))\ - or ADMIN_LABELS.get(('', int(rank/2)))\ + label = ADMIN_LABELS.get((country or '', rank // 2))\ + or ADMIN_LABELS.get(('', rank // 2))\ or 'Administrative' elif category[1] == 'postal_code': label = 'postcode' diff --git a/src/nominatim_db/db/connection.py b/src/nominatim_db/db/connection.py index e960a3fa..cc843ab6 100644 --- a/src/nominatim_db/db/connection.py +++ b/src/nominatim_db/db/connection.py @@ -102,10 +102,10 @@ def server_version_tuple(conn: Connection) -> Tuple[int, int]: Converts correctly for pre-10 and post-10 PostgreSQL versions. """ version = conn.info.server_version - if version < 100000: - return (int(version / 10000), int((version % 10000) / 100)) - - return (int(version / 10000), version % 10000) + major, minor = divmod(version, 10000) + if major < 10: + minor //= 100 + return major, minor def postgis_version_tuple(conn: Connection) -> Tuple[int, int]: diff --git a/src/nominatim_db/indexer/progress.py b/src/nominatim_db/indexer/progress.py index 66c35f06..b99296e5 100644 --- a/src/nominatim_db/indexer/progress.py +++ b/src/nominatim_db/indexer/progress.py @@ -50,8 +50,8 @@ class ProgressLogger: places_per_sec = self.done_places / done_time eta = (self.total_places - self.done_places) / places_per_sec - LOG.warning("Done %d in %d @ %.3f per second - %s ETA (seconds): %.2f", - self.done_places, int(done_time), + LOG.warning("Done %d in %.0f @ %.3f per second - %s ETA (seconds): %.2f", + self.done_places, done_time, places_per_sec, self.name, eta) self.next_info += int(places_per_sec) * self.log_interval @@ -68,8 +68,8 @@ class ProgressLogger: diff_seconds = (rank_end_time - self.rank_start_time).total_seconds() places_per_sec = self.done_places / diff_seconds - LOG.warning("Done %d/%d in %d @ %.3f per second - FINISHED %s\n", - self.done_places, self.total_places, int(diff_seconds), + LOG.warning("Done %d/%d in %.0f @ %.3f per second - FINISHED %s\n", + self.done_places, self.total_places, diff_seconds, places_per_sec, self.name) return self.done_places diff --git a/src/nominatim_db/tools/tiger_data.py b/src/nominatim_db/tools/tiger_data.py index 85110ae5..7b865570 100644 --- a/src/nominatim_db/tools/tiger_data.py +++ b/src/nominatim_db/tools/tiger_data.py @@ -108,8 +108,7 @@ async def add_tiger_data(data_dir: str, config: Configuration, threads: int, async with QueryPool(dsn, place_threads, autocommit=True) as pool: with tokenizer.name_analyzer() as analyzer: - lines = 0 - for row in tar: + for lineno, row in enumerate(tar, 1): try: address = dict(street=row['street'], postcode=row['postcode']) args = ('SRID=4326;' + row['geometry'], @@ -124,10 +123,8 @@ async def add_tiger_data(data_dir: str, config: Configuration, threads: int, %s::INT, %s::TEXT, %s::JSONB, %s::TEXT)""", args) - lines += 1 - if lines == 1000: + if not lineno % 1000: print('.', end='', flush=True) - lines = 0 print('', flush=True) diff --git a/src/nominatim_db/utils/centroid.py b/src/nominatim_db/utils/centroid.py index a45d958b..02512336 100644 --- a/src/nominatim_db/utils/centroid.py +++ b/src/nominatim_db/utils/centroid.py @@ -30,8 +30,8 @@ class PointsCentroid: if self.count == 0: raise ValueError("No points available for centroid.") - return (float(self.sum_x/self.count)/10000000, - float(self.sum_y/self.count)/10000000) + return (self.sum_x / self.count / 10_000_000, + self.sum_y / self.count / 10_000_000) def __len__(self) -> int: return self.count @@ -40,8 +40,8 @@ class PointsCentroid: if isinstance(other, Collection) and len(other) == 2: if all(isinstance(p, (float, int)) for p in other): x, y = other - self.sum_x += int(x * 10000000) - self.sum_y += int(y * 10000000) + self.sum_x += int(x * 10_000_000) + self.sum_y += int(y * 10_000_000) self.count += 1 return self