From b58ac080b82802471ff1ae368e8ce60fca9a837b Mon Sep 17 00:00:00 2001 From: Erin Sheldon Date: Thu, 27 Mar 2025 12:51:24 -0400 Subject: [PATCH] BUG dict2arry deal with bool --- RELEASE_NOTES | 7 +++++++ esutil/__init__.py | 2 +- esutil/numpy_util.py | 10 ++++++---- esutil/tests/test_numpy_util.py | 26 ++++++++++++++++++++++++++ setup.py | 2 +- 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 7ced1de..32d04c0 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -1,3 +1,10 @@ +0.6.17 +------ + +Bug Fixes + + - Fixed bug with bools not converted in numpy_util.dict2arr + 0.6.16 ------ diff --git a/esutil/__init__.py b/esutil/__init__.py index 6ab6a55..aebcf56 100644 --- a/esutil/__init__.py +++ b/esutil/__init__.py @@ -83,7 +83,7 @@ class for gauss-legendre integration, which relies on the gauleg C++ extension. import sys -__version__ = "0.6.16" +__version__ = "0.6.17" def version(): return __version__ diff --git a/esutil/numpy_util.py b/esutil/numpy_util.py index c856bd6..e5e3cbf 100644 --- a/esutil/numpy_util.py +++ b/esutil/numpy_util.py @@ -1657,7 +1657,7 @@ def dict2array(d, sort=False, keys=None): if key not in d: raise KeyError("Requested key %s not in dictionary" % key) - if not isinstance(d[key], (int, float, str)): + if not isinstance(d[key], (int, float, str, bool)): try: strval = "%s" % d[key] val = eval(strval) @@ -1666,15 +1666,17 @@ def dict2array(d, sort=False, keys=None): else: val = d[key] - if isinstance(val, int): + if isinstance(val, bool): + dt = bool + elif isinstance(val, int): dt = int elif isinstance(val, float): dt = float elif isinstance(val, str): - dt = "S%s" % len(val) + dt = "U%s" % len(val) else: raise ValueError( - "Only support int, float, string currently, " + "Only support int, float, string, bool currently, " "found %s" % type(d[key]) ) diff --git a/esutil/tests/test_numpy_util.py b/esutil/tests/test_numpy_util.py index 2b50d77..6f5c1ec 100644 --- a/esutil/tests/test_numpy_util.py +++ b/esutil/tests/test_numpy_util.py @@ -135,3 +135,29 @@ def test_match_scalar(): a2 = 4 m1, m2 = eu.numpy_util.match(a2, a1) assert m1.size == 0 and m2.size == 0 + + +def test_dict2array(): + dct = { + 'float': 3.5, + 'bool': True, + 'int': 55, + 'str': 'stuff', + } + + arr = eu.numpy_util.dict2array(dct) + + assert set(dct.keys()) == set(arr.dtype.names) + + for d in arr.dtype.descr: + name = d[0] + if name == 'float': + assert d[1][1:] == 'f8' + elif name == 'bool': + assert d[1][1:] == 'b1' + elif name == 'int': + assert d[1][1:] == 'i8' + elif name == 'str': + assert d[1][1] == 'U' + + assert arr[name][0] == dct[name] diff --git a/setup.py b/setup.py index 94108d4..5bd328b 100644 --- a/setup.py +++ b/setup.py @@ -244,7 +244,7 @@ def build_extensions(self): setup( name="esutil", - version="0.6.16", + version="0.6.17", author="Erin Scott Sheldon", author_email="erin.sheldon@gmail.com", classifiers=classifiers,