From 76c779efaf9f9a53fb6b269a469737fe61ddb1d4 Mon Sep 17 00:00:00 2001 From: Kamil Monicz Date: Fri, 23 May 2025 06:43:30 +0200 Subject: [PATCH 1/2] Optimize naturalsize algorithm by using math.log --- src/humanize/filesize.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/humanize/filesize.py b/src/humanize/filesize.py index 30ba135..ee99dcf 100644 --- a/src/humanize/filesize.py +++ b/src/humanize/filesize.py @@ -2,6 +2,8 @@ from __future__ import annotations +from math import log + suffixes = { "decimal": ( " kB", @@ -83,11 +85,7 @@ def naturalsize( suffix = suffixes["decimal"] base = 1024 if (gnu or binary) else 1000 - if isinstance(value, str): - bytes_ = float(value) - else: - bytes_ = value - + bytes_ = float(value) abs_bytes = abs(bytes_) if abs_bytes == 1 and not gnu: @@ -96,10 +94,6 @@ def naturalsize( if abs_bytes < base: return f"{int(bytes_)}B" if gnu else f"{int(bytes_)} Bytes" - for i, s in enumerate(suffix, 2): - unit = base**i - if abs_bytes < unit: - break - - ret: str = format % (base * (bytes_ / unit)) + s + exp = int(min(log(abs_bytes, base), len(suffix))) + ret: str = format % (bytes_ / (base ** exp)) + suffix[exp - 1] return ret From a79dafa315af743ff9ec1050f0889fdbf18661bd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 May 2025 04:44:45 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/humanize/filesize.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/humanize/filesize.py b/src/humanize/filesize.py index ee99dcf..13e5edd 100644 --- a/src/humanize/filesize.py +++ b/src/humanize/filesize.py @@ -95,5 +95,5 @@ def naturalsize( return f"{int(bytes_)}B" if gnu else f"{int(bytes_)} Bytes" exp = int(min(log(abs_bytes, base), len(suffix))) - ret: str = format % (bytes_ / (base ** exp)) + suffix[exp - 1] + ret: str = format % (bytes_ / (base**exp)) + suffix[exp - 1] return ret