From 107b0c42527626ace8b965c9d194c96e193ae9b7 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 2 May 2023 11:41:28 +0530 Subject: [PATCH 1/7] Case Reader to parse numerical values with units. --- src/ansys/fluent/core/filereader/case_file.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ansys/fluent/core/filereader/case_file.py b/src/ansys/fluent/core/filereader/case_file.py index e867195bf9ab..6322c7549f47 100644 --- a/src/ansys/fluent/core/filereader/case_file.py +++ b/src/ansys/fluent/core/filereader/case_file.py @@ -68,7 +68,12 @@ def numeric_value(self): float Numeric value of the Fluent input parameter. """ - return float(self._component(0)) + try: + num_val = float(self._component(0)) + except ValueError: + num_val = float(self._component(0).split("[")[0]) + + return num_val def _component(self, idx: int): try: From a1d50a127b0a91f9a623612126bd9f8397cd75f9 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 2 May 2023 15:35:36 +0530 Subject: [PATCH 2/7] Updated logic. --- src/ansys/fluent/core/filereader/case_file.py | 9 ++------- tests/test_casereader.py | 7 +++++++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/ansys/fluent/core/filereader/case_file.py b/src/ansys/fluent/core/filereader/case_file.py index 6322c7549f47..281471d8f331 100644 --- a/src/ansys/fluent/core/filereader/case_file.py +++ b/src/ansys/fluent/core/filereader/case_file.py @@ -68,16 +68,11 @@ def numeric_value(self): float Numeric value of the Fluent input parameter. """ - try: - num_val = float(self._component(0)) - except ValueError: - num_val = float(self._component(0).split("[")[0]) - - return num_val + return float(self._component(0)) def _component(self, idx: int): try: - return self.value.split(maxsplit=1)[idx] + return self.value.split("[", maxsplit=1)[idx].strip() except IndexError: return "" diff --git a/tests/test_casereader.py b/tests/test_casereader.py index acb1e64092a8..54208241dfe4 100644 --- a/tests/test_casereader.py +++ b/tests/test_casereader.py @@ -224,6 +224,13 @@ def test_case_reader_input_parameter(): assert momentum.numeric_value == 12.4 assert momentum.value == "12.4 [kg m s^-1]" + velocity = InputParameter(raw_data=(("name", "v"), ("definition", "2[m / s]"))) + + assert velocity.name == "v" + assert velocity.units == "m / s" + assert velocity.numeric_value == 2 + assert velocity.value == "2[m / s]" + def test_lispy_for_multiline_string(): assert lispy.parse('(define x "abc\ndef")') == ["define", "x", '"abc\ndef"'] From a0719d1128f3b3cc8b268a7b28ee39f1661e9c96 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 2 May 2023 17:49:31 +0530 Subject: [PATCH 3/7] Update value. --- src/ansys/fluent/core/filereader/case_file.py | 8 +++++++- tests/test_casereader.py | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ansys/fluent/core/filereader/case_file.py b/src/ansys/fluent/core/filereader/case_file.py index 281471d8f331..5a449d25ec62 100644 --- a/src/ansys/fluent/core/filereader/case_file.py +++ b/src/ansys/fluent/core/filereader/case_file.py @@ -49,6 +49,12 @@ def __init__(self, raw_data): self.name = v.strip('"') elif k == "definition": self.value = v.strip('"') + if "[" in self.value: + sep_index = self.value.index("[") + if not self.value[sep_index - 1] == " ": + self.value = "".join( + (self.value[:sep_index], " ", self.value[sep_index:]) + ) @property def units(self) -> str: @@ -72,7 +78,7 @@ def numeric_value(self): def _component(self, idx: int): try: - return self.value.split("[", maxsplit=1)[idx].strip() + return self.value.split(maxsplit=1)[idx] except IndexError: return "" diff --git a/tests/test_casereader.py b/tests/test_casereader.py index 54208241dfe4..9abc60f56791 100644 --- a/tests/test_casereader.py +++ b/tests/test_casereader.py @@ -224,12 +224,12 @@ def test_case_reader_input_parameter(): assert momentum.numeric_value == 12.4 assert momentum.value == "12.4 [kg m s^-1]" - velocity = InputParameter(raw_data=(("name", "v"), ("definition", "2[m / s]"))) + velocity = InputParameter(raw_data=(("name", "v"), ("definition", "2[m/s]"))) assert velocity.name == "v" - assert velocity.units == "m / s" + assert velocity.units == "m/s" assert velocity.numeric_value == 2 - assert velocity.value == "2[m / s]" + assert velocity.value == "2 [m/s]" def test_lispy_for_multiline_string(): From a38721580245e7e3e8a03ab413a9871512e94a91 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 3 May 2023 15:35:02 +0530 Subject: [PATCH 4/7] endswith instead of suffixes. --- src/ansys/fluent/core/filereader/case_file.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ansys/fluent/core/filereader/case_file.py b/src/ansys/fluent/core/filereader/case_file.py index 5a449d25ec62..52aab1e6c1cc 100644 --- a/src/ansys/fluent/core/filereader/case_file.py +++ b/src/ansys/fluent/core/filereader/case_file.py @@ -190,16 +190,16 @@ def __init__(self, case_filepath: str = None, project_filepath: str = None): "Please provide a valid fluent project file path" ) try: - if "".join(Path(case_filepath).suffixes) == ".cas.h5": + if case_filepath.endswith(".cas.h5"): file = h5py.File(case_filepath) settings = file["settings"] rpvars = settings["Rampant Variables"][0] rp_vars_str = rpvars.decode() - elif Path(case_filepath).suffix == ".cas": + elif case_filepath.endswith(".cas"): with open(case_filepath, "rb") as file: rp_vars_str = file.read() rp_vars_str = _get_processed_string(rp_vars_str) - elif "".join(Path(case_filepath).suffixes) == ".cas.gz": + elif case_filepath.endswith(".cas.gz"): with gzip.open(case_filepath, "rb") as file: rp_vars_str = file.read() rp_vars_str = _get_processed_string(rp_vars_str) From cb766ad8123af4102fb97736248080e0f8d0bf93 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 3 May 2023 16:06:07 +0530 Subject: [PATCH 5/7] Update endswith -> Path-match --- src/ansys/fluent/core/filereader/case_file.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ansys/fluent/core/filereader/case_file.py b/src/ansys/fluent/core/filereader/case_file.py index 52aab1e6c1cc..b13aa6a24936 100644 --- a/src/ansys/fluent/core/filereader/case_file.py +++ b/src/ansys/fluent/core/filereader/case_file.py @@ -190,16 +190,16 @@ def __init__(self, case_filepath: str = None, project_filepath: str = None): "Please provide a valid fluent project file path" ) try: - if case_filepath.endswith(".cas.h5"): + if Path(case_filepath).match("*.cas.h5"): file = h5py.File(case_filepath) settings = file["settings"] rpvars = settings["Rampant Variables"][0] rp_vars_str = rpvars.decode() - elif case_filepath.endswith(".cas"): + elif Path(case_filepath).match("*.cas"): with open(case_filepath, "rb") as file: rp_vars_str = file.read() rp_vars_str = _get_processed_string(rp_vars_str) - elif case_filepath.endswith(".cas.gz"): + elif Path(case_filepath).match("*.cas.gz"): with gzip.open(case_filepath, "rb") as file: rp_vars_str = file.read() rp_vars_str = _get_processed_string(rp_vars_str) From 2729ce2c17d142068eb9a6e6a4170c86fa141b09 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 3 May 2023 17:03:38 +0530 Subject: [PATCH 6/7] Improve error handling. --- src/ansys/fluent/core/filereader/case_file.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/ansys/fluent/core/filereader/case_file.py b/src/ansys/fluent/core/filereader/case_file.py index b13aa6a24936..6d7aa827b791 100644 --- a/src/ansys/fluent/core/filereader/case_file.py +++ b/src/ansys/fluent/core/filereader/case_file.py @@ -189,6 +189,7 @@ def __init__(self, case_filepath: str = None, project_filepath: str = None): raise FileNotFoundError( "Please provide a valid fluent project file path" ) + try: if Path(case_filepath).match("*.cas.h5"): file = h5py.File(case_filepath) @@ -204,17 +205,19 @@ def __init__(self, case_filepath: str = None, project_filepath: str = None): rp_vars_str = file.read() rp_vars_str = _get_processed_string(rp_vars_str) else: - raise RuntimeError() + error_message = ( + "Could not read case file. " + "Only valid Case files (.h5, .cas, .cas.gz) can be read. " + ) + raise RuntimeError(error_message) except FileNotFoundError as e: - raise RuntimeError(f"The case file {case_filepath} cannot be found.") from e + raise FileNotFoundError( + f"The case file {case_filepath} cannot be found." + ) from e - except OSError: - error_message = ( - "Could not read case file. " - "Only valid Case files (.h5, .cas, .cas.gz) can be read. " - ) - raise RuntimeError(error_message) + except OSError as e: + raise OSError(f"Error while reading case file {case_filepath}") from e except BaseException as e: raise RuntimeError(f"Could not read case file {case_filepath}") from e From 28412100b1446db3d1b31c66c2e4944bbe2221b6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 3 May 2023 20:15:57 +0530 Subject: [PATCH 7/7] Update test with correct error type. --- tests/test_casereader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_casereader.py b/tests/test_casereader.py index 9abc60f56791..1ad411a88ce8 100644 --- a/tests/test_casereader.py +++ b/tests/test_casereader.py @@ -132,7 +132,7 @@ def test_processed_string(): def test_casereader_no_file(): - with pytest.raises(RuntimeError): + with pytest.raises(FileNotFoundError): call_casereader("no_file.cas.h5")