From f166df50cdb4ba27c40d8919cef5200f5b79df59 Mon Sep 17 00:00:00 2001 From: Ali Erdinc Koroglu Date: Wed, 29 Jul 2026 16:19:06 +0300 Subject: [PATCH] Update to 3.2.2 (rhbz#2483709) --- ...e439e2cc40d95a20bd829134096c12fc2286.patch | 137 ++++++++++++++++++ python-geopmpy.spec | 49 +++---- sources | 2 +- 3 files changed, 156 insertions(+), 32 deletions(-) create mode 100644 5396e439e2cc40d95a20bd829134096c12fc2286.patch diff --git a/5396e439e2cc40d95a20bd829134096c12fc2286.patch b/5396e439e2cc40d95a20bd829134096c12fc2286.patch new file mode 100644 index 0000000..110acda --- /dev/null +++ b/5396e439e2cc40d95a20bd829134096c12fc2286.patch @@ -0,0 +1,137 @@ +From 5396e439e2cc40d95a20bd829134096c12fc2286 Mon Sep 17 00:00:00 2001 +From: Brad Geltz +Date: Tue, 27 Jan 2026 12:27:12 -0800 +Subject: [PATCH] Update usage of DataFrame.to_hdf + +- Starting with Pandas v3.0.0 the most paremeters are + keyword-only. + +Signed-off-by: Brad Geltz +--- + geopmpy/geopmpy/io.py | 26 +++++++++++-------- + .../experiment/ffnet/gen_hdf_from_fsweep.py | 4 +-- + .../sst_evaluation/gen_plot_time.py | 8 +++--- + 3 files changed, 21 insertions(+), 17 deletions(-) + +diff --git a/geopmpy/geopmpy/io.py b/geopmpy/geopmpy/io.py +index b7ecc567a5..4fb7f7dfd9 100644 +--- a/geopmpy/geopmpy/io.py ++++ b/geopmpy/geopmpy/io.py +@@ -25,7 +25,7 @@ + if os.getenv('GEOPM_USE_UNSAFE_HDF5') is not None: + from pandas import read_hdf + else: +- def read_hdf(path, name): ++ def read_hdf(path, key=None, **kwargs): + if not os.path.exists(path): + raise IOError(f'Trace HDF5 file {path} not detected') + raise ImportWarning('Refusing to read HDF5 format files: file format could result in arbitrary code execution. To enable "export GEOPM_USE_UNSAFE_HDF5=1"') +@@ -111,7 +111,7 @@ def __init__(self, traces=None, dir_name='.', verbose=False, do_cache=True): + + do_load_raw = True + try: +- self._traces_df = read_hdf(trace_h5_name, 'trace') ++ self._traces_df = read_hdf(trace_h5_name, key='trace') + do_load_raw = False + if verbose: + sys.stdout.write(f'Loaded traces from {trace_h5_name}.\n') +@@ -125,7 +125,7 @@ def __init__(self, traces=None, dir_name='.', verbose=False, do_cache=True): + try: + if verbose: + sys.stdout.write('Generating HDF5 files... ') +- self._traces_df.to_hdf(trace_h5_name, 'trace') ++ self._traces_df.to_hdf(trace_h5_name, key='trace') + except ImportError as error: + sys.stderr.write(f'Warning: geopmpy.io: Unable to write HDF5 file: {error}\n') + +@@ -878,16 +878,16 @@ def load_reports(self, reports, dir_name, dir_cache, verbose, do_cache): + sys.stdout.write('Attempting to read {}...\n'.format(self._report_h5_name)) + # load dataframes from cache + try: +- self._reports_df = read_hdf(self._report_h5_name, 'report') ++ self._reports_df = read_hdf(self._report_h5_name, key='report') + except KeyError: + pass # No regions in cached report +- self._app_reports_df = read_hdf(self._report_h5_name, 'app_report') ++ self._app_reports_df = read_hdf(self._report_h5_name, key='app_report') + try: +- self._unmarked_reports_df = read_hdf(self._report_h5_name, 'unmarked_report') ++ self._unmarked_reports_df = read_hdf(self._report_h5_name, key='unmarked_report') + except KeyError: + pass + try: +- self._epoch_reports_df = read_hdf(self._report_h5_name, 'epoch_report') ++ self._epoch_reports_df = read_hdf(self._report_h5_name, key='epoch_report') + except KeyError: + pass + if verbose: +@@ -902,19 +902,23 @@ def load_reports(self, reports, dir_name, dir_cache, verbose, do_cache): + + # Cache report dataframe + cache_created = False ++ did_fixup_metadata = False + while not cache_created: + try: + if verbose: + sys.stdout.write('Generating HDF5 files... ') +- self._app_reports_df.to_hdf(self._report_h5_name, 'app_report', format='table') ++ self._app_reports_df.to_hdf(self._report_h5_name, key='app_report', format='table') + if len(self._reports_df) > 0: +- self._reports_df.to_hdf(self._report_h5_name, 'report', format='table', append=True) ++ self._reports_df.to_hdf(self._report_h5_name, key='report', format='table', append=True) + if len(self._unmarked_reports_df) > 0: +- self._unmarked_reports_df.to_hdf(self._report_h5_name, 'unmarked_report', format='table', append=True) ++ self._unmarked_reports_df.to_hdf(self._report_h5_name, key='unmarked_report', format='table', append=True) + if len(self._epoch_reports_df) > 0: +- self._epoch_reports_df.to_hdf(self._report_h5_name, 'epoch_report', format='table', append=True) ++ self._epoch_reports_df.to_hdf(self._report_h5_name, key='epoch_report', format='table', append=True) + cache_created = True + except TypeError as error: ++ if did_fixup_metadata: ++ raise ++ did_fixup_metadata = True + fm = RawReportCollection.fixup_metadata + if verbose: + sys.stdout.write('Applying workaround for strings in HDF5 files... ') +diff --git a/integration/experiment/ffnet/gen_hdf_from_fsweep.py b/integration/experiment/ffnet/gen_hdf_from_fsweep.py +index 770d30bd6b..4817af6321 100755 +--- a/integration/experiment/ffnet/gen_hdf_from_fsweep.py ++++ b/integration/experiment/ffnet/gen_hdf_from_fsweep.py +@@ -148,7 +148,7 @@ + + pd \ + .concat(reports_dfs, ignore_index=True) \ +- .to_hdf(f"{output_prefix}_stats.h5", "stats", mode='w') ++ .to_hdf(f"{output_prefix}_stats.h5", key="stats", mode='w') + + #Creating trace hdf for training neural net, annotated with region hashes or + #generated region names when hashes are not available +@@ -158,7 +158,7 @@ + + pd \ + .concat(trace_dfs, ignore_index=True) \ +- .to_hdf(f"{output_prefix}_traces.h5", "traces", mode='w') ++ .to_hdf(f"{output_prefix}_traces.h5", key="traces", mode='w') + + + if __name__ == "__main__": +diff --git a/integration/experiment/sst_evaluation/gen_plot_time.py b/integration/experiment/sst_evaluation/gen_plot_time.py +index a75ca48f0c..ea0ee479aa 100755 +--- a/integration/experiment/sst_evaluation/gen_plot_time.py ++++ b/integration/experiment/sst_evaluation/gen_plot_time.py +@@ -267,11 +267,11 @@ def reports_and_traces_to_dataframes(report_paths): + except OSError: + # Write the preprocessed data to a cached file + df, frequency_df, epoch_df, core_frequencies_by_time_df = reports_and_traces_to_dataframes(args.report_paths) +- df.to_hdf(os.path.join(args.analysis_dir, 'cache.hdf'), 'df', 'w') +- frequency_df.to_hdf(os.path.join(args.analysis_dir, 'cache.hdf'), 'frequency_df', 'a') +- epoch_df.to_hdf(os.path.join(args.analysis_dir, 'cache.hdf'), 'epoch_df', 'a') ++ df.to_hdf(os.path.join(args.analysis_dir, 'cache.hdf'), key='df', mode='w') ++ frequency_df.to_hdf(os.path.join(args.analysis_dir, 'cache.hdf'), key='frequency_df', mode='a') ++ epoch_df.to_hdf(os.path.join(args.analysis_dir, 'cache.hdf'), key='epoch_df', mode='a') + core_frequencies_by_time_df.to_hdf(os.path.join(args.analysis_dir, 'cache.hdf'), +- 'core_frequencies_by_time_df', 'a') ++ key='core_frequencies_by_time_df', mode='a') + + df['Application'] = df['Application'].str.rsplit('_', 1).str[-1] + epoch_df['Application'] = epoch_df['Application'].str.rsplit('_', 1).str[-1] diff --git a/python-geopmpy.spec b/python-geopmpy.spec index d34a836..d127834 100644 --- a/python-geopmpy.spec +++ b/python-geopmpy.spec @@ -9,7 +9,7 @@ optimize system hardware settings to achieve energy efficiency and/or performance objectives.} Name: python-%{prj_name} -Version: 3.2.1 +Version: 3.2.2 Release: %autorelease Summary: Python bindings for libgeopm @@ -17,26 +17,16 @@ License: BSD-3-Clause URL: https://geopm.github.io Source0: https://github.com/geopm/geopm/archive/v%{version}/geopm-%{version}.tar.gz +# Update usage of DataFrame.to_hdf +# https://github.com/geopm/geopm/commit/5396e439e2cc40d95a20bd829134096c12fc2286 +Patch0: 5396e439e2cc40d95a20bd829134096c12fc2286.patch + ExclusiveArch: x86_64 BuildRequires: gcc -BuildRequires: python3-cffi BuildRequires: python3-devel -BuildRequires: python3-setuptools -BuildRequires: python3-setuptools_scm -BuildRequires: python3-geopmdpy >= 3.2.1 -BuildRequires: python3-cycler -BuildRequires: python3-pandas -BuildRequires: python3-natsort -BuildRequires: python3-tables -BuildRequires: python3-pyyaml -BuildRequires: libgeopm-devel >= 3.2.1 -BuildRequires: libgeopmd-devel >= 3.2.1 -Requires: python3-cycler -Requires: python3-natsort -Requires: python3-pandas -Requires: python3-tables -Requires: python3-pyyaml +BuildRequires: libgeopm-devel >= 3.2.2 +BuildRequires: libgeopmd-devel >= 3.2.2 Requires: geopmd %description @@ -50,32 +40,29 @@ Summary: %{summary} %prep %autosetup -p1 -n geopm-%{version} +echo %{version} > %{prj_name}/%{prj_name}/VERSION -pushd %{prj_name} -echo %{version} > %{prj_name}/VERSION -popd +%generate_buildrequires +cd %{prj_name} +%pyproject_buildrequires %build -pushd %{prj_name} -%py3_build -popd +cd %{prj_name} +%pyproject_wheel %install -pushd %{prj_name} -%py3_install -popd +cd %{prj_name} +%pyproject_install +%pyproject_save_files %{prj_name} %check -pushd %{prj_name} +cd %{prj_name} %{python3} -m unittest discover -s test -p 'Test*.py' -v -popd -%files -n python3-%{prj_name} +%files -n python3-%{prj_name} -f %{pyproject_files} %license LICENSE-BSD-3-Clause %doc README.md %{python3_sitearch}/_libgeopm_py_cffi.abi3.so -%{python3_sitearch}/%{prj_name} -%{python3_sitearch}/%{prj_name}-*.egg-info %{_bindir}/geopmlaunch %changelog diff --git a/sources b/sources index 38359cc..01816e4 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (geopm-3.2.1.tar.gz) = faaaf9b48391bb94468a13b9f9292f10845089d7141ec07dccc9f812cd0c33319963b46365c4afe057f2cdb909c63cfdfa0d51459ebec02b000d0b3f5c39d487 +SHA512 (geopm-3.2.2.tar.gz) = f4e9d1abc5920cee0a790be89c0dab76fc3bff57276b65106dad963c117c8709945ae72bd93091b247a199d6867f743906ec558174f8743fc7b8906d614f9300