From 4099402add9ddc6663906bb0ebb7f34b06855792 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2026 20:20:08 +0000 Subject: [PATCH 1/4] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/mirrors-clang-format: v22.1.5 → v22.1.8](https://github.com/pre-commit/mirrors-clang-format/compare/v22.1.5...v22.1.8) - [github.com/astral-sh/ruff-pre-commit: v0.15.1 → v0.16.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.1...v0.16.1) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f6ca76d53f..52d6a9a79c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -66,7 +66,7 @@ repos: # clang-format v13 # to run manually, use .github/workflows/clang-format/clang-format.sh - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v22.1.5 + rev: v22.1.8 hooks: - id: clang-format # By default, the clang-format hook configures: @@ -86,7 +86,7 @@ repos: name: pycln (python) - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.1 + rev: v0.16.1 hooks: - id: ruff-check From 11489c21e66318b502ff8ab3716967c84942a602 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2026 20:20:33 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/source/conf.py | 3 +- examples/10_streaming_read.py | 4 +-- examples/10_streaming_write.py | 1 + examples/11_particle_dataframe.py | 5 ++-- examples/12_span_write.py | 1 + examples/13_write_dynamic_configuration.py | 1 + examples/15_compression.py | 5 ++-- examples/2_read_serial.py | 26 ++++++++-------- examples/3_write_serial.py | 9 +++--- examples/3a_write_thetaMode_serial.py | 3 +- examples/3b_write_resizable_particles.py | 1 + examples/4_read_parallel.py | 13 ++++---- examples/5_write_parallel.py | 13 ++++---- examples/7_extended_write_serial.py | 1 + examples/9_particle_write_serial.py | 1 + new_version.py | 10 +++---- setup.py | 4 +-- share/openPMD/json_schema/check.py | 6 ++-- src/binding/python/openpmd_api/__init__.py | 14 ++++----- .../python/openpmd_api/pipe/__main__.py | 30 +++++++------------ test/python/coload_repro.py | 3 +- test/python/unittest/API/APITest.py | 5 +--- 22 files changed, 73 insertions(+), 86 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 9ef0dfc3e7..fe99eebc09 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # # This file is execfile()d with the current directory set to its # containing dir. @@ -16,8 +15,8 @@ import os import subprocess -from recommonmark.parser import CommonMarkParser import sphinx_rtd_theme +from recommonmark.parser import CommonMarkParser # import sys # sys.path.insert(0, os.path.abspath('.')) diff --git a/examples/10_streaming_read.py b/examples/10_streaming_read.py index 47d2385bfd..80730b4832 100755 --- a/examples/10_streaming_read.py +++ b/examples/10_streaming_read.py @@ -20,7 +20,7 @@ # Read all available iterations and print electron position data. for index, iteration in series.snapshots().items(): - print("Current iteration {}".format(index)) + print(f"Current iteration {index}") electronPositions = iteration.particles["e"]["position"] loadedChunks = [] shapes = [] @@ -42,7 +42,7 @@ for i in range(3): dim = dimensions[i] shape = shapes[i] - print("dim: {}".format(dim)) + print(f"dim: {dim}") chunk = loadedChunks[i] print(chunk) diff --git a/examples/10_streaming_write.py b/examples/10_streaming_write.py index fca11db71c..4800145d39 100755 --- a/examples/10_streaming_write.py +++ b/examples/10_streaming_write.py @@ -2,6 +2,7 @@ import sys import numpy as np + import openpmd_api as io # pass-through for ADIOS2 engine parameters diff --git a/examples/11_particle_dataframe.py b/examples/11_particle_dataframe.py index f1acfb63eb..0bab7cd965 100755 --- a/examples/11_particle_dataframe.py +++ b/examples/11_particle_dataframe.py @@ -10,6 +10,7 @@ import sys import numpy as np + import openpmd_api as io try: @@ -124,9 +125,7 @@ E.grid_unit_SI * 1.0e6 * (idx_max * E.grid_spacing + E.grid_global_offset) ) print( - "maximum intensity I={} at index={} z={}mu".format( - Intensity_max, idx_max, pos_max[2] - ) + f"maximum intensity I={Intensity_max} at index={idx_max} z={pos_max[2]}mu" ) s.close() diff --git a/examples/12_span_write.py b/examples/12_span_write.py index db99e0a556..841abdb547 100644 --- a/examples/12_span_write.py +++ b/examples/12_span_write.py @@ -1,4 +1,5 @@ import numpy as np + import openpmd_api as io diff --git a/examples/13_write_dynamic_configuration.py b/examples/13_write_dynamic_configuration.py index 968afb8d50..06efcc647c 100644 --- a/examples/13_write_dynamic_configuration.py +++ b/examples/13_write_dynamic_configuration.py @@ -1,5 +1,6 @@ #!/usr/bin/env python import numpy as np + import openpmd_api as io # This example demonstrates how to use JSON/TOML-based dynamic diff --git a/examples/15_compression.py b/examples/15_compression.py index 874b4cfb66..388d3492a3 100644 --- a/examples/15_compression.py +++ b/examples/15_compression.py @@ -20,6 +20,7 @@ # import numpy as np + import openpmd_api as opmd try: @@ -68,7 +69,7 @@ def write(filename, config): def main(): # We start with two examples for ADIOS2. - if "adios2" in opmd.variants and opmd.variants["adios2"]: + if opmd.variants.get("adios2"): simple_adios2_config = { # Backend can either be inferred from the filename ending, or # specified explicitly. In the latter case, the filename ending can @@ -189,7 +190,7 @@ def main(): # Filters are additionally distinguished by how tightly they integrate with # HDF5. The most tightly-integrated filter is Zlib, which has its own API # calls and hence also a special JSON/TOML configuration in openPMD: - if "hdf5" in opmd.variants and opmd.variants["hdf5"]: + if opmd.variants.get("hdf5"): hdf5_zlib_config = { "backend": "hdf5", "hdf5": { diff --git a/examples/2_read_serial.py b/examples/2_read_serial.py index 929fa9225d..50df263c95 100644 --- a/examples/2_read_serial.py +++ b/examples/2_read_serial.py @@ -17,35 +17,35 @@ ) print("Read a Series with openPMD standard version %s" % series.openPMD) - print("The Series contains {0} iterations:".format(len(series.snapshots()))) + print(f"The Series contains {len(series.snapshots())} iterations:") for i in series.snapshots(): - print("\t {0}".format(i)) - print("") + print(f"\t {i}") + print() # with defer_iteration_parsing, open() must be called explicitly i = series.snapshots()[100].open() - print("Iteration 100 contains {0} meshes:".format(len(i.meshes))) + print(f"Iteration 100 contains {len(i.meshes)} meshes:") for m in i.meshes: - print("\t {0}".format(m)) - print("") - print("Iteration 100 contains {0} particle species:".format(len(i.particles))) + print(f"\t {m}") + print() + print(f"Iteration 100 contains {len(i.particles)} particle species:") for ps in i.particles: - print("\t {0}".format(ps)) + print(f"\t {ps}") print("With records:") for r in i.particles[ps]: - print("\t {0}".format(r)) + print(f"\t {r}") # printing a scalar value electrons = i.particles["electrons"] charge = electrons["charge"] series.flush() - print("And the first electron particle has a charge {}".format(charge[0])) - print("") + print(f"And the first electron particle has a charge {charge[0]}") + print() E_x = i.meshes["E"]["x"] shape = E_x.shape - print("Field E.x has shape {0} and datatype {1}".format(shape, E_x.dtype)) + print(f"Field E.x has shape {shape} and datatype {E_x.dtype}") chunk_data = E_x[1:3, 1:3, 1:2] # print("Queued the loading of a single chunk from disk, " @@ -65,7 +65,7 @@ # The iteration can be closed in order to help free up resources. # The iteration's content will be flushed automatically. i.close() - print("Full E/x is of shape {0} and starts with:".format(all_data.shape)) + print(f"Full E/x is of shape {all_data.shape} and starts with:") print(all_data[0, 0, :5]) # The files in 'series' are still open until the series is closed, at which diff --git a/examples/3_write_serial.py b/examples/3_write_serial.py index 3a21da77e3..6684805511 100644 --- a/examples/3_write_serial.py +++ b/examples/3_write_serial.py @@ -8,6 +8,7 @@ """ import numpy as np + import openpmd_api as io if __name__ == "__main__": @@ -17,12 +18,12 @@ # matrix dataset to write with values 0...size*size-1 data = np.arange(size * size, dtype=np.double).reshape(3, 3) - print("Set up a 2D square array ({0}x{1}) that will be written".format(size, size)) + print(f"Set up a 2D square array ({size}x{size}) that will be written") # open file for writing series = io.Series("../samples/3_write_serial_py.h5", io.Access.create_linear) - print("Created an empty {0} Series".format(series.iteration_encoding)) + print(f"Created an empty {series.iteration_encoding} Series") print(len(series.iterations)) rho = series.snapshots()[1].meshes["rho"] @@ -30,9 +31,7 @@ dataset = io.Dataset(data.dtype, data.shape) print( - "Created a Dataset of size {0}x{1} and Datatype {2}".format( - dataset.extent[0], dataset.extent[1], dataset.dtype - ) + f"Created a Dataset of size {dataset.extent[0]}x{dataset.extent[1]} and Datatype {dataset.dtype}" ) rho.reset_dataset(dataset) diff --git a/examples/3a_write_thetaMode_serial.py b/examples/3a_write_thetaMode_serial.py index 9c203dae00..84f2e6d0ca 100644 --- a/examples/3a_write_thetaMode_serial.py +++ b/examples/3a_write_thetaMode_serial.py @@ -8,6 +8,7 @@ """ import numpy as np + import openpmd_api as io if __name__ == "__main__": @@ -30,7 +31,7 @@ num_fields, N_r, N_z ) - geometry_parameters = "m={0};imag=+".format(num_modes) + geometry_parameters = f"m={num_modes};imag=+" E = series.snapshots()[0].meshes["E"] E.geometry = io.Geometry.thetaMode diff --git a/examples/3b_write_resizable_particles.py b/examples/3b_write_resizable_particles.py index ff7623b6ca..95f21b30f9 100644 --- a/examples/3b_write_resizable_particles.py +++ b/examples/3b_write_resizable_particles.py @@ -8,6 +8,7 @@ """ import numpy as np + import openpmd_api as io if __name__ == "__main__": diff --git a/examples/4_read_parallel.py b/examples/4_read_parallel.py index 1f612c7d33..30e81e72ca 100644 --- a/examples/4_read_parallel.py +++ b/examples/4_read_parallel.py @@ -12,6 +12,7 @@ # on import: calls MPI_Init_thread() # exit hook: calls MPI_Finalize() from mpi4py import MPI + import openpmd_api as io if __name__ == "__main__": @@ -25,7 +26,7 @@ {"defer_iteration_parsing": True}, ) if 0 == comm.rank: - print("Read a series in parallel with {} MPI ranks".format(comm.size)) + print(f"Read a series in parallel with {comm.size} MPI ranks") # with defer_iteration_parsing, open() must be called explicitly # explicit use of open() is recommended for parallel applications @@ -51,18 +52,14 @@ for i in range(comm.size): if i == comm.rank: - print("Rank {} - Read chunk contains:".format(i)) + print(f"Rank {i} - Read chunk contains:") for row in range(chunk_extent[0]): for col in range(chunk_extent[1]): print( - "\t({}|{}|1)\t{:e}".format( - row + chunk_offset[0], - col + chunk_offset[1], - chunk_data[row, col, 0], - ), + f"\t({row + chunk_offset[0]}|{col + chunk_offset[1]}|1)\t{chunk_data[row, col, 0]:e}", end="", ) - print("") + print() # this barrier is not necessary but structures the example output comm.Barrier() diff --git a/examples/5_write_parallel.py b/examples/5_write_parallel.py index e588115f2a..6fe8dc9a2e 100644 --- a/examples/5_write_parallel.py +++ b/examples/5_write_parallel.py @@ -11,8 +11,9 @@ # https://mpi4py.readthedocs.io/en/stable/mpi4py.run.html # on import: calls MPI_Init_thread() # exit hook: calls MPI_Finalize() -from mpi4py import MPI import numpy as np +from mpi4py import MPI + import openpmd_api as io try: @@ -33,8 +34,8 @@ local_data = np.ones(10 * 300, dtype=np.double).reshape(10, 300) * local_value if 0 == comm.rank: print( - "Set up a 2D array with 10x300 elements per MPI rank ({}x) " - "that will be written to disk".format(comm.size) + f"Set up a 2D array with 10x300 elements per MPI rank ({comm.size}x) " + "that will be written to disk" ) # open file for writing @@ -46,7 +47,7 @@ comm, ) if 0 == comm.rank: - print("Created an empty series in parallel with {} MPI ranks".format(comm.size)) + print(f"Created an empty series in parallel with {comm.size} MPI ranks") # In parallel contexts, it's important to explicitly open iterations. # However, we use Access mode CREATE_LINEAR, so the Series creates @@ -65,9 +66,7 @@ if 0 == comm.rank: print( - "Prepared a Dataset of size {} and Datatype {}".format( - dataset.extent, dataset.dtype - ) + f"Prepared a Dataset of size {dataset.extent} and Datatype {dataset.dtype}" ) mymesh.reset_dataset(dataset) diff --git a/examples/7_extended_write_serial.py b/examples/7_extended_write_serial.py index a5192a82b5..3f69746c81 100755 --- a/examples/7_extended_write_serial.py +++ b/examples/7_extended_write_serial.py @@ -8,6 +8,7 @@ """ import numpy as np + from openpmd_api import Access, Dataset, Mesh_Record_Component, Series, Unit_Dimension SCALAR = Mesh_Record_Component.SCALAR diff --git a/examples/9_particle_write_serial.py b/examples/9_particle_write_serial.py index f100a0d2e5..c5e7873d81 100644 --- a/examples/9_particle_write_serial.py +++ b/examples/9_particle_write_serial.py @@ -10,6 +10,7 @@ from pathlib import Path import numpy as np + from openpmd_api import Access, Dataset, Series, Unit_Dimension if __name__ == "__main__": diff --git a/new_version.py b/new_version.py index 5f3c01e0ea..60d436f8a7 100755 --- a/new_version.py +++ b/new_version.py @@ -8,9 +8,9 @@ # This file is a maintainer tool to bump the versions inside openPMD-api's # source directory at all places where necessary. # -from pathlib import Path import re import sys +from pathlib import Path # Maintainer Inputs ########################################################### @@ -97,7 +97,7 @@ cmakelists_content = f.read() cmakelists_content = re.sub( r"^(project.*openPMD.*VERSION *)(.*)(\).*)$", - r"\g<1>{}\g<3>".format(VERSION_STR), + rf"\g<1>{VERSION_STR}\g<3>", cmakelists_content, flags=re.MULTILINE, ) @@ -165,8 +165,8 @@ def generic_replace(filename, previous, after): def replace(key, value): global version_hpp_content version_hpp_content = re.sub( - r"^(#define OPENPMDAPI_VERSION_{}) .*$".format(re.escape(key)), - r"\1 {}".format(value), + rf"^(#define OPENPMDAPI_VERSION_{re.escape(key)}) .*$", + rf"\1 {value}", version_hpp_content, flags=re.MULTILINE, ) @@ -174,7 +174,7 @@ def replace(key, value): replace("MAJOR", MAJOR) replace("MINOR", MINOR) replace("PATCH", PATCH) - replace("LABEL", '"{}"'.format(SUFFIX)) + replace("LABEL", f'"{SUFFIX}"') with open(version_hpp_path, "w", encoding="utf-8") as f: f.write(version_hpp_content) diff --git a/setup.py b/setup.py index 3e15455d8c..0f4ffa85fd 100644 --- a/setup.py +++ b/setup.py @@ -178,7 +178,7 @@ def build_extension(self, ext): else: continue if cmake_var: - extra_cmake_args.append("-D{0}={1}".format(cmake_var, v)) + extra_cmake_args.append(f"-D{cmake_var}={v}") # https://cmake.org/cmake/help/v3.0/command/if.html if openPMD_USE_MPI.upper() in ["1", "ON", "TRUE", "YES"]: @@ -188,7 +188,7 @@ def build_extension(self, ext): # Get the package requirements from the requirements.txt file with open("./requirements.txt") as f: - install_requires = [line.strip("\n") for line in f.readlines()] + install_requires = [line.strip("\n") for line in f] if openPMD_USE_MPI == "ON": install_requires.append("mpi4py>=2.1.0") diff --git a/share/openPMD/json_schema/check.py b/share/openPMD/json_schema/check.py index 4b3fa3779d..89933e2d53 100755 --- a/share/openPMD/json_schema/check.py +++ b/share/openPMD/json_schema/check.py @@ -3,8 +3,8 @@ import argparse import json import os -from pathlib import Path import sys +from pathlib import Path import jsonschema.validators from referencing import Registry, Resource @@ -76,7 +76,5 @@ def retrieve_from_filesystem(uri): registry=registry, ) print( - "File {} was validated successfully against schema {}.".format( - instance.name, args.schema_root - ) + f"File {instance.name} was validated successfully against schema {args.schema_root}." ) diff --git a/src/binding/python/openpmd_api/__init__.py b/src/binding/python/openpmd_api/__init__.py index 3d248f9683..d2a6d0cf4a 100644 --- a/src/binding/python/openpmd_api/__init__.py +++ b/src/binding/python/openpmd_api/__init__.py @@ -6,7 +6,7 @@ iterations_to_dataframe, particles_to_dataframe, ) -from .openpmd_api_cxx import * # noqa +from .openpmd_api_cxx import * __version__ = cxx.__version__ __doc__ = cxx.__doc__ @@ -14,11 +14,11 @@ # __author__ = cxx.__author__ # extend CXX classes with extra methods -ParticleSpecies.to_df = particles_to_dataframe # noqa -ParticleSpecies.to_dask = particles_to_daskdataframe # noqa -Record_Component.to_dask_array = record_component_to_daskarray # noqa -Series.to_df = iterations_to_dataframe # noqa -Series.to_cudf = iterations_to_cudf # noqa +ParticleSpecies.to_df = particles_to_dataframe +ParticleSpecies.to_dask = particles_to_daskdataframe +Record_Component.to_dask_array = record_component_to_daskarray +Series.to_df = iterations_to_dataframe +Series.to_cudf = iterations_to_cudf # TODO remove in future versions (deprecated) -Access_Type = Access # noqa +Access_Type = Access diff --git a/src/binding/python/openpmd_api/pipe/__main__.py b/src/binding/python/openpmd_api/pipe/__main__.py index df7a42bb12..e0c4c3f2e9 100644 --- a/src/binding/python/openpmd_api/pipe/__main__.py +++ b/src/binding/python/openpmd_api/pipe/__main__.py @@ -321,17 +321,17 @@ def run(self): print("Opened input and output") sys.stdout.flush() else: - print("Opening data source on rank {}.".format(self.comm.rank)) + print(f"Opening data source on rank {self.comm.rank}.") sys.stdout.flush() inseries = io.Series( self.infile, io.Access.read_linear, self.comm, self.inconfig ) - print("Opening data sink on rank {}.".format(self.comm.rank)) + print(f"Opening data sink on rank {self.comm.rank}.") sys.stdout.flush() outseries = io.Series( self.outfile, io.Access.create, self.comm, self.outconfig ) - print("Opened input and output on rank {}.".format(self.comm.rank)) + print(f"Opened input and output on rank {self.comm.rank}.") sys.stdout.flush() # In Linear read mode, global attributes are only present after calling # this method to access the first iteration @@ -397,23 +397,19 @@ def __copy(self, src, dest, current_path="/data/"): for in_iteration in src.read_iterations(): if self.comm.rank == 0: print( - "Iteration {0} contains {1} meshes:".format( - in_iteration.iteration_index, len(in_iteration.meshes) - ) + f"Iteration {in_iteration.iteration_index} contains {len(in_iteration.meshes)} meshes:" ) for m in in_iteration.meshes: - print("\t {0}".format(m)) - print("") + print(f"\t {m}") + print() print( - "Iteration {0} contains {1} particle species:".format( - in_iteration.iteration_index, len(in_iteration.particles) - ) + f"Iteration {in_iteration.iteration_index} contains {len(in_iteration.particles)} particle species:" ) for ps in in_iteration.particles: - print("\t {0}".format(ps)) + print(f"\t {ps}") print("With records:") for r in in_iteration.particles[ps]: - print("\t {0}".format(r)) + print(f"\t {r}") # With linear read mode, we can only load the source rank table # inside `read_iterations()` since it's a dataset. if src.has_rank_table_read: @@ -466,13 +462,7 @@ def __copy(self, src, dest, current_path="/data/"): for i in range(len(end)): end[i] += chunk.extent[i] print( - "{}\t{}/{}:\t{} -- {}".format( - current_path, - self.comm.rank, - self.comm.size, - chunk.offset, - end, - ) + f"{current_path}\t{self.comm.rank}/{self.comm.size}:\t{chunk.offset} -- {end}" ) span = dest.store_chunk(chunk.offset, chunk.extent) self.loads.append( diff --git a/test/python/coload_repro.py b/test/python/coload_repro.py index 87b9ac7fd4..8c159b2ea2 100644 --- a/test/python/coload_repro.py +++ b/test/python/coload_repro.py @@ -16,6 +16,7 @@ # # isort: skip_file -- the openpmd_api-before-h5py import order is deliberate. import numpy as np + import openpmd_api as io print( @@ -42,7 +43,7 @@ assert np.array_equal(back, data), back # load the SECOND, independently bundled HDF5 only now (openpmd_api is primary) -import h5py # noqa: E402 +import h5py print( f"[versions] h5py {h5py.__version__} HDF5 {h5py.version.hdf5_version}", flush=True diff --git a/test/python/unittest/API/APITest.py b/test/python/unittest/API/APITest.py index 124cf2882d..e8c8f3f9bd 100644 --- a/test/python/unittest/API/APITest.py +++ b/test/python/unittest/API/APITest.py @@ -40,12 +40,10 @@ class APITest(unittest.TestCase): @classmethod def setUpClass(cls): """Setting up the test class.""" - pass @classmethod def tearDownClass(cls): """Tearing down the test class.""" - pass def setUp(self): """Setting up a test.""" @@ -200,7 +198,7 @@ def attributeRoundTrip(self, file_ending): series.set_attribute("pyint", 13) series.set_attribute("pyfloat", 3.1416) series.set_attribute("pystring", "howdy!") - series.set_attribute("pystring2", str("howdy, too!")) + series.set_attribute("pystring2", "howdy, too!") series.set_attribute("pystring3", b"howdy, again!") series.set_attribute("pybool", False) @@ -2112,7 +2110,6 @@ def loadToTemporaryStore(self, r_E_x): # we keep a reference on the data until we are done flush()ing d = r_E_x[()] del d - return def writeFromTemporary(self, ext): name = "../samples/write_from_temporary_python." + ext From b7221ed320d889d7943cb3131cbff6f902a72576 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 3 Aug 2026 13:33:59 -0700 Subject: [PATCH 3/4] downgrade ruff-pre-commit --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 52d6a9a79c..17018db851 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -86,7 +86,7 @@ repos: name: pycln (python) - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.16.1 + rev: v0.15.1 hooks: - id: ruff-check From 3dac655917d954183d2b2cb4556d27489013258a Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 3 Aug 2026 13:35:13 -0700 Subject: [PATCH 4/4] up again --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 17018db851..52d6a9a79c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -86,7 +86,7 @@ repos: name: pycln (python) - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.1 + rev: v0.16.1 hooks: - id: ruff-check