From a4d0322852f8e038e643345870a86609b947a3a4 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Tue, 11 Jun 2024 09:53:12 +0200 Subject: [PATCH 1/7] write nan when corrupted time step --- seissolxdmfwriter/seissolxdmfwriter/__init__.py | 2 +- .../seissolxdmfwriter/seissolxdmfwriter.py | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/seissolxdmfwriter/seissolxdmfwriter/__init__.py b/seissolxdmfwriter/seissolxdmfwriter/__init__.py index ea4cb05..2fc6317 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/__init__.py +++ b/seissolxdmfwriter/seissolxdmfwriter/__init__.py @@ -1,2 +1,2 @@ from .seissolxdmfwriter import * -__version__ = '0.4.0' +__version__ = '0.4.1' diff --git a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py index 23328b7..7473fd3 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py +++ b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py @@ -221,7 +221,13 @@ def read_non_temporal(sx, ar_name, filtered_cells): desc=ar_name, dynamic_ncols=False, ): - my_array = sx.ReadData(ar_name, idt)[filtered_cells] + try: + my_array = sx.ReadData(ar_name, idt)[filtered_cells] + except IndexError: + print( + f"time step {idt} of {ar_name} is corrupted, replacing with nans" + ) + my_array = np.full(nel, np.nan) if i == 0: h5f.create_dataset( f"/{ar_name}", @@ -231,9 +237,9 @@ def read_non_temporal(sx, ar_name, filtered_cells): ) if my_array.shape[0] == 0: print( - f"time step {idt} of {ar_name} is corrupted, replacing with 0s" + f"time step {idt} of {ar_name} is corrupted, replacing with nans" ) - myData = np.zeros(nel) + my_array = np.full(nel, np.nan) h5f[f"/{ar_name}"][i, :] = my_array[:] print(f"done writing {prefix}.h5") else: @@ -253,9 +259,9 @@ def read_non_temporal(sx, ar_name, filtered_cells): my_array = sx.ReadData(ar_name, idt)[filtered_cells] if my_array.shape[0] == 0: print( - f"time step {idt} of {ar_name} is corrupted, replacing with 0s" + f"time step {idt} of {ar_name} is corrupted, replacing with nans" ) - myData = np.zeros(nel) + my_array = np.full(nel, np.nan) if i == 0: mydtype = output_type(my_array, reduce_precision) my_array[:].astype(mydtype).tofile(fid) From e8649025e4aec713b8d08ebd102011d541b119e0 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Tue, 11 Jun 2024 09:55:51 +0200 Subject: [PATCH 2/7] more details on error --- seissolxdmf/seissolxdmf/__init__.py | 2 +- seissolxdmf/seissolxdmf/seissolxdmf.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/seissolxdmf/seissolxdmf/__init__.py b/seissolxdmf/seissolxdmf/__init__.py index e753673..23186d1 100644 --- a/seissolxdmf/seissolxdmf/__init__.py +++ b/seissolxdmf/seissolxdmf/__init__.py @@ -1,2 +1,2 @@ from .seissolxdmf import * -__version__ = '0.1.3' +__version__ = '0.1.4' diff --git a/seissolxdmf/seissolxdmf/seissolxdmf.py b/seissolxdmf/seissolxdmf/seissolxdmf.py index 76dba38..e0ac913 100644 --- a/seissolxdmf/seissolxdmf/seissolxdmf.py +++ b/seissolxdmf/seissolxdmf/seissolxdmf.py @@ -128,7 +128,7 @@ def get(prop): if path is not None: ref = tree.xpath(path)[0] return get(ref) - raise NameError("%s not found in dataset" % (dataName)) + raise NameError(f"{dataName} not found in dataset, available variables are {self.ReadAvailableDataFields()}") def ReadTopologyOrGeometry(self, attribute): """ Common function to read either connect or geometry """ From f8ad817264fb5330c4eea89bcb97aa5349468368 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Thu, 13 Jun 2024 21:37:53 +0200 Subject: [PATCH 3/7] setup.py to pyproject.toml, and fix bug in seissolxdmfwriter --- seissolxdmf/seissolxdmf/__init__.py | 11 ++++++- seissolxdmf/setup.py | 33 ------------------- .../seissolxdmfwriter/seissolxdmfwriter.py | 8 ++--- 3 files changed, 14 insertions(+), 38 deletions(-) delete mode 100644 seissolxdmf/setup.py diff --git a/seissolxdmf/seissolxdmf/__init__.py b/seissolxdmf/seissolxdmf/__init__.py index 23186d1..96698cb 100644 --- a/seissolxdmf/seissolxdmf/__init__.py +++ b/seissolxdmf/seissolxdmf/__init__.py @@ -1,2 +1,11 @@ from .seissolxdmf import * -__version__ = '0.1.4' +try: + from importlib.metadata import version, PackageNotFoundError +except ImportError: + from importlib_metadata import version, PackageNotFoundError + +try: + __version__ = version("seissolxdmf") +except PackageNotFoundError: + # If the package is not installed, don't add __version__ + pass diff --git a/seissolxdmf/setup.py b/seissolxdmf/setup.py deleted file mode 100644 index 6beff31..0000000 --- a/seissolxdmf/setup.py +++ /dev/null @@ -1,33 +0,0 @@ -import setuptools -import re - - -def get_property(prop, project): - # https://stackoverflow.com/questions/17791481/creating-a-version-attribute-for-python-packages-without-getting-into-troubl/41110107 - result = re.search( - r'{}\s*=\s*[\'"]([^\'"]*)[\'"]'.format(prop), open(project + "/__init__.py").read() - ) - return result.group(1) - - -with open("README.md", "r") as fh: - long_description = fh.read() - -project_name = "seissolxdmf" -setuptools.setup( - name=project_name, - version=get_property("__version__", project_name), - author="SeisSol Group", - description="A python reader for SeisSol xdmf output", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/SeisSol/Visualization/seissolxdmf", - packages=setuptools.find_packages(), - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: BSD License", - "Operating System :: OS Independent", - ], - python_requires=">=3.6", - install_requires=["numpy", "h5py"], -) diff --git a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py index 7473fd3..d983f16 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py +++ b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py @@ -50,13 +50,13 @@ def write_timeseries_xdmf( xdmf = """ - """ + + """ geometry_location = dataLocation(bn_prefix, "geometry", backend) connect_location = dataLocation(bn_prefix, "connect", backend) for i, ctime in enumerate(timeValues): xdmf += f""" - {connect_location} @@ -82,9 +82,9 @@ def write_timeseries_xdmf( """ xdmf += """ - - """ + """ xdmf += """ + """ From 6fa357505f043ed8855dc0acb0a52f20152f64e4 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Thu, 13 Jun 2024 21:47:09 +0200 Subject: [PATCH 4/7] do the same for seissolxdmfwriter --- seissolxdmfwriter/pyproject.toml | 26 +++++++++++++ .../seissolxdmfwriter/__init__.py | 11 +++++- seissolxdmfwriter/setup.py | 38 ------------------- 3 files changed, 36 insertions(+), 39 deletions(-) create mode 100644 seissolxdmfwriter/pyproject.toml delete mode 100644 seissolxdmfwriter/setup.py diff --git a/seissolxdmfwriter/pyproject.toml b/seissolxdmfwriter/pyproject.toml new file mode 100644 index 0000000..a36dfd2 --- /dev/null +++ b/seissolxdmfwriter/pyproject.toml @@ -0,0 +1,26 @@ +[build-system] +requires = ["setuptools", "setuptools-scm"] +build-backend = "setuptools.build_meta" + +[project] +name = "seissolxdmfwriter" +version = "0.4.2" +authors = [ + {name = "SeisSol Group"}, +] +description = "A python writer for SeisSol xdmf output" +readme = {file = "README.md", content-type = "text/markdown"} +requires-python = ">=3.6" +keywords = ["SeisSol"] +classifiers = [ + "Programming Language :: Python :: 3", + "Operating System :: OS Independent", +] +dependencies = [ + "numpy", "h5py", ,"seissolxdmf>=0.1.2", "tqdm" +] +[project.urls] +Repository = "https://github.com/SeisSol/Visualization/seissolxdmfwriter" + +[project.scripts] +seissol_output_extractor = "seissolxdmfwriter.seissol_output_extractor:main" diff --git a/seissolxdmfwriter/seissolxdmfwriter/__init__.py b/seissolxdmfwriter/seissolxdmfwriter/__init__.py index 2fc6317..f14c9ab 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/__init__.py +++ b/seissolxdmfwriter/seissolxdmfwriter/__init__.py @@ -1,2 +1,11 @@ from .seissolxdmfwriter import * -__version__ = '0.4.1' +try: + from importlib.metadata import version, PackageNotFoundError +except ImportError: + from importlib_metadata import version, PackageNotFoundError + +try: + __version__ = version("seissolxdmfwriter") +except PackageNotFoundError: + # If the package is not installed, don't add __version__ + pass diff --git a/seissolxdmfwriter/setup.py b/seissolxdmfwriter/setup.py deleted file mode 100644 index 28bfe89..0000000 --- a/seissolxdmfwriter/setup.py +++ /dev/null @@ -1,38 +0,0 @@ -import setuptools -import re - - -def get_property(prop, project): - # https://stackoverflow.com/questions/17791481/creating-a-version-attribute-for-python-packages-without-getting-into-troubl/41110107 - result = re.search( - r'{}\s*=\s*[\'"]([^\'"]*)[\'"]'.format(prop), open(project + "/__init__.py").read() - ) - return result.group(1) - - -with open("README.md", "r") as fh: - long_description = fh.read() - -project_name = "seissolxdmfwriter" -setuptools.setup( - name=project_name, - version=get_property("__version__", project_name), - author="SeisSol Group", - description="A python writer for SeisSol xdmf output", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/SeisSol/Visualization/seissolxdmfwriter", - packages=setuptools.find_packages(), - entry_points={ - 'console_scripts': [ - 'seissol_output_extractor = seissolxdmfwriter.seissol_output_extractor:main', - ], - }, - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: BSD License", - "Operating System :: OS Independent", - ], - python_requires=">=3.6", - install_requires=["numpy", "h5py","seissolxdmf>=0.1.2", "tqdm"], -) From ec10d26747c437bec410fb32fa73c50602684723 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Thu, 13 Jun 2024 21:48:51 +0200 Subject: [PATCH 5/7] bug fix --- seissolxdmfwriter/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seissolxdmfwriter/pyproject.toml b/seissolxdmfwriter/pyproject.toml index a36dfd2..619c95a 100644 --- a/seissolxdmfwriter/pyproject.toml +++ b/seissolxdmfwriter/pyproject.toml @@ -17,7 +17,7 @@ classifiers = [ "Operating System :: OS Independent", ] dependencies = [ - "numpy", "h5py", ,"seissolxdmf>=0.1.2", "tqdm" + "numpy", "h5py" ,"seissolxdmf>=0.1.2", "tqdm" ] [project.urls] Repository = "https://github.com/SeisSol/Visualization/seissolxdmfwriter" From 2b8bf202805aa5ad64d1ba5c80b8626e8f228174 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 14 Jun 2024 14:21:55 +0200 Subject: [PATCH 6/7] fix missing self --- seissolxdmf/seissolxdmf/seissolxdmf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seissolxdmf/seissolxdmf/seissolxdmf.py b/seissolxdmf/seissolxdmf/seissolxdmf.py index e0ac913..f180f83 100644 --- a/seissolxdmf/seissolxdmf/seissolxdmf.py +++ b/seissolxdmf/seissolxdmf/seissolxdmf.py @@ -282,5 +282,5 @@ def LoadData(self, dataName, nElements, idt=0, oneDtMem=False, firstElement=-1): idt = -1 if firstElement == -1: firstElement = 0 - myData = ReadDataChunk(dataName, firstElement, nElements, idt) + myData = self.ReadDataChunk(dataName, firstElement, nElements, idt) return [myData, data_prec] From 624e5b8517ca9911f6a7be7c89e9800652522848 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 14 Jun 2024 15:47:14 +0200 Subject: [PATCH 7/7] fix problem when writing mesh data --- seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py index d983f16..745ea67 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py +++ b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py @@ -277,8 +277,9 @@ def write_data( backend, compression_level, ): - time_indices = list(dictTime.values()) - if not time_indices: + if dictTime: + time_indices = list(dictTime.values()) + else: time_indices = [0] if backend == "hdf5": import h5py