From 0b4f9504a86a42ad994b98f3ab2c7de1b630e070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Sun, 4 Feb 2024 15:37:59 +0100 Subject: [PATCH 1/6] Do not import pint when it is not needed --- pyiron_base/project/generic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyiron_base/project/generic.py b/pyiron_base/project/generic.py index a999eca5f..f31ee07bc 100644 --- a/pyiron_base/project/generic.py +++ b/pyiron_base/project/generic.py @@ -13,7 +13,6 @@ import stat from tqdm.auto import tqdm import pandas -import pint import math import numpy as np @@ -213,6 +212,7 @@ def size(self): """ Get the size of the project """ + import pint size = ( sum( [ @@ -225,7 +225,7 @@ def size(self): return self._size_conversion(size) @staticmethod - def _size_conversion(size: pint.Quantity): + def _size_conversion(size): sign_prefactor = 1 if size < 0: sign_prefactor = -1 From 54310a0d9c6a1d34e9821fddd3996cc21ee2f702 Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Sun, 4 Feb 2024 14:42:07 +0000 Subject: [PATCH 2/6] Format black --- pyiron_base/project/generic.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyiron_base/project/generic.py b/pyiron_base/project/generic.py index f31ee07bc..f11a17889 100644 --- a/pyiron_base/project/generic.py +++ b/pyiron_base/project/generic.py @@ -213,6 +213,7 @@ def size(self): Get the size of the project """ import pint + size = ( sum( [ From 84fce1a451048e6aeba1ee882326ad4bebad42e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Sun, 4 Feb 2024 15:43:26 +0100 Subject: [PATCH 3/6] Define size conversion as internal function --- pyiron_base/project/generic.py | 42 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/pyiron_base/project/generic.py b/pyiron_base/project/generic.py index f31ee07bc..dc24122e9 100644 --- a/pyiron_base/project/generic.py +++ b/pyiron_base/project/generic.py @@ -213,6 +213,26 @@ def size(self): Get the size of the project """ import pint + + def _size_conversion(size: pint.Quantity): + sign_prefactor = 1 + if size < 0: + sign_prefactor = -1 + size *= -1 + elif size == 0: + return size + + prefix_index = math.floor(math.log2(size) / 10) - 1 + prefix = ["Ki", "Mi", "Gi", "Ti", "Pi"] + + size *= sign_prefactor + if prefix_index < 0: + return size + elif prefix_index < 5: + return size.to(f"{prefix[prefix_index]}byte") + else: + return size.to(f"{prefix[-1]}byte") + size = ( sum( [ @@ -222,27 +242,7 @@ def size(self): ) * pint.UnitRegistry().byte ) - return self._size_conversion(size) - - @staticmethod - def _size_conversion(size): - sign_prefactor = 1 - if size < 0: - sign_prefactor = -1 - size *= -1 - elif size == 0: - return size - - prefix_index = math.floor(math.log2(size) / 10) - 1 - prefix = ["Ki", "Mi", "Gi", "Ti", "Pi"] - - size *= sign_prefactor - if prefix_index < 0: - return size - elif prefix_index < 5: - return size.to(f"{prefix[prefix_index]}byte") - else: - return size.to(f"{prefix[-1]}byte") + return _size_conversion(size) def copy(self): """ From 317151617f49cadd3c418c767fe53fe7c8e38739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Sun, 4 Feb 2024 15:48:24 +0100 Subject: [PATCH 4/6] Remove size_conversion test --- tests/project/test_project.py | 38 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/project/test_project.py b/tests/project/test_project.py index 119b08f96..7a3ffc87f 100644 --- a/tests/project/test_project.py +++ b/tests/project/test_project.py @@ -74,25 +74,25 @@ class TestProjectOperations(TestWithFilledProject): def test_size(self): self.assertTrue(self.project.size > 0) - def test__size_conversion(self): - conv_check = { - -2000: (-1.953125, "kibibyte"), - 0: (0, "byte"), - 50: (50, "byte"), - 2000: (1.953125, "kibibyte"), - 2**20: (1.0, "mebibyte"), - 2**30: (1.0, "gibibyte"), - 2**40: (1.0, "tebibyte"), - 2**50: (1.0, "pebibyte"), - 2**60: (1024.0, "pebibyte"), - } - - byte = pint.UnitRegistry().byte - for value in conv_check.keys(): - with self.subTest(value): - converted_size = self.project._size_conversion(value * byte) - self.assertEqual(converted_size.m, conv_check[value][0]) - self.assertEqual(str(converted_size.u), conv_check[value][1]) + # def test__size_conversion(self): + # conv_check = { + # -2000: (-1.953125, "kibibyte"), + # 0: (0, "byte"), + # 50: (50, "byte"), + # 2000: (1.953125, "kibibyte"), + # 2**20: (1.0, "mebibyte"), + # 2**30: (1.0, "gibibyte"), + # 2**40: (1.0, "tebibyte"), + # 2**50: (1.0, "pebibyte"), + # 2**60: (1024.0, "pebibyte"), + # } + # + # byte = pint.UnitRegistry().byte + # for value in conv_check.keys(): + # with self.subTest(value): + # converted_size = self.project._size_conversion(value * byte) + # self.assertEqual(converted_size.m, conv_check[value][0]) + # self.assertEqual(str(converted_size.u), conv_check[value][1]) def test_job_table(self): df = self.project.job_table() From 3789f7d36d8aa6db1592c9838b35b945135eb58e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 7 Feb 2024 09:42:07 +0100 Subject: [PATCH 5/6] Move functions to separate module --- pyiron_base/project/generic.py | 33 ++-------------------------- pyiron_base/project/size.py | 36 +++++++++++++++++++++++++++++++ tests/project/test_project.py | 39 +++++++++++++++++----------------- 3 files changed, 58 insertions(+), 50 deletions(-) create mode 100644 pyiron_base/project/size.py diff --git a/pyiron_base/project/generic.py b/pyiron_base/project/generic.py index dc24122e9..4247bc23c 100644 --- a/pyiron_base/project/generic.py +++ b/pyiron_base/project/generic.py @@ -212,37 +212,8 @@ def size(self): """ Get the size of the project """ - import pint - - def _size_conversion(size: pint.Quantity): - sign_prefactor = 1 - if size < 0: - sign_prefactor = -1 - size *= -1 - elif size == 0: - return size - - prefix_index = math.floor(math.log2(size) / 10) - 1 - prefix = ["Ki", "Mi", "Gi", "Ti", "Pi"] - - size *= sign_prefactor - if prefix_index < 0: - return size - elif prefix_index < 5: - return size.to(f"{prefix[prefix_index]}byte") - else: - return size.to(f"{prefix[-1]}byte") - - size = ( - sum( - [ - sum([os.path.getsize(os.path.join(path, f)) for f in files]) - for path, dirs, files in os.walk(self.path) - ] - ) - * pint.UnitRegistry().byte - ) - return _size_conversion(size) + from pyiron_base.project.size import get_folder_size + return get_folder_size(path=self.path) def copy(self): """ diff --git a/pyiron_base/project/size.py b/pyiron_base/project/size.py new file mode 100644 index 000000000..8d049e17c --- /dev/null +++ b/pyiron_base/project/size.py @@ -0,0 +1,36 @@ +import math +import os +import pint + + +def _size_conversion(size: pint.Quantity): + sign_prefactor = 1 + if size < 0: + sign_prefactor = -1 + size *= -1 + elif size == 0: + return size + + prefix_index = math.floor(math.log2(size) / 10) - 1 + prefix = ["Ki", "Mi", "Gi", "Ti", "Pi"] + + size *= sign_prefactor + if prefix_index < 0: + return size + elif prefix_index < 5: + return size.to(f"{prefix[prefix_index]}byte") + else: + return size.to(f"{prefix[-1]}byte") + + +def get_folder_size(path): + size = ( + sum( + [ + sum([os.path.getsize(os.path.join(path, f)) for f in files]) + for path, dirs, files in os.walk(path) + ] + ) + * pint.UnitRegistry().byte + ) + return _size_conversion(size) diff --git a/tests/project/test_project.py b/tests/project/test_project.py index 7a3ffc87f..6f681d6f6 100644 --- a/tests/project/test_project.py +++ b/tests/project/test_project.py @@ -9,6 +9,7 @@ import pint import pickle from pyiron_base.project.generic import Project +from pyiron_base.project.size import _size_conversion from pyiron_base._tests import ( PyironTestCase, TestWithProject, TestWithFilledProject, ToyJob ) @@ -74,25 +75,25 @@ class TestProjectOperations(TestWithFilledProject): def test_size(self): self.assertTrue(self.project.size > 0) - # def test__size_conversion(self): - # conv_check = { - # -2000: (-1.953125, "kibibyte"), - # 0: (0, "byte"), - # 50: (50, "byte"), - # 2000: (1.953125, "kibibyte"), - # 2**20: (1.0, "mebibyte"), - # 2**30: (1.0, "gibibyte"), - # 2**40: (1.0, "tebibyte"), - # 2**50: (1.0, "pebibyte"), - # 2**60: (1024.0, "pebibyte"), - # } - # - # byte = pint.UnitRegistry().byte - # for value in conv_check.keys(): - # with self.subTest(value): - # converted_size = self.project._size_conversion(value * byte) - # self.assertEqual(converted_size.m, conv_check[value][0]) - # self.assertEqual(str(converted_size.u), conv_check[value][1]) + def test__size_conversion(self): + conv_check = { + -2000: (-1.953125, "kibibyte"), + 0: (0, "byte"), + 50: (50, "byte"), + 2000: (1.953125, "kibibyte"), + 2**20: (1.0, "mebibyte"), + 2**30: (1.0, "gibibyte"), + 2**40: (1.0, "tebibyte"), + 2**50: (1.0, "pebibyte"), + 2**60: (1024.0, "pebibyte"), + } + + byte = pint.UnitRegistry().byte + for value in conv_check.keys(): + with self.subTest(value): + converted_size = _size_conversion(value * byte) + self.assertEqual(converted_size.m, conv_check[value][0]) + self.assertEqual(str(converted_size.u), conv_check[value][1]) def test_job_table(self): df = self.project.job_table() From f99ba0c61642b0124307df0d86e18ff87f4843a4 Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Wed, 7 Feb 2024 08:43:03 +0000 Subject: [PATCH 6/6] Format black --- pyiron_base/project/generic.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyiron_base/project/generic.py b/pyiron_base/project/generic.py index 4247bc23c..ad7a3729c 100644 --- a/pyiron_base/project/generic.py +++ b/pyiron_base/project/generic.py @@ -213,6 +213,7 @@ def size(self): Get the size of the project """ from pyiron_base.project.size import get_folder_size + return get_folder_size(path=self.path) def copy(self):