diff --git a/arcade/gl/backends/opengl/buffer.py b/arcade/gl/backends/opengl/buffer.py index 0fc7d40ef2..e3dfb60954 100644 --- a/arcade/gl/backends/opengl/buffer.py +++ b/arcade/gl/backends/opengl/buffer.py @@ -151,11 +151,9 @@ def read(self, size: int = -1, offset: int = 0) -> bytes: # Manually detect this so it doesn't raise a confusing INVALID_VALUE error if size + offset > self._size: raise ValueError( - ( - "Attempting to read outside the buffer. " - f"Buffer size: {self._size} " - f"Reading from {offset} to {size + offset}" - ) + "Attempting to read outside the buffer. " + f"Buffer size: {self._size} " + f"Reading from {offset} to {size + offset}" ) gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self._glo) diff --git a/arcade/gl/backends/opengl/compute_shader.py b/arcade/gl/backends/opengl/compute_shader.py index 67a1e8543c..f50ea59258 100644 --- a/arcade/gl/backends/opengl/compute_shader.py +++ b/arcade/gl/backends/opengl/compute_shader.py @@ -87,7 +87,7 @@ def __init__(self, ctx: Context, glsl_source: str) -> None: gl.glGetProgramiv(self._glo, gl.GL_INFO_LOG_LENGTH, length) log = c_buffer(length.value) gl.glGetProgramInfoLog(self._glo, len(log), None, log) - raise ShaderException("Program link error: {}".format(log.value.decode())) + raise ShaderException(f"Program link error: {log.value.decode()}") self._introspect_uniforms() self._introspect_uniform_blocks() diff --git a/arcade/gl/backends/opengl/context.py b/arcade/gl/backends/opengl/context.py index 24f34e47a3..d3b7fa8022 100644 --- a/arcade/gl/backends/opengl/context.py +++ b/arcade/gl/backends/opengl/context.py @@ -1,5 +1,5 @@ +from collections.abc import Iterable, Sequence from ctypes import c_char_p, c_float, c_int, cast -from typing import Dict, Iterable, List, Sequence, Tuple import pyglet from pyglet import gl @@ -66,7 +66,7 @@ def __init__( gl.glEnable(gl.GL_SCISSOR_TEST) @property - def gl_version(self) -> Tuple[int, int]: + def gl_version(self) -> tuple[int, int]: """ The OpenGL major and minor version as a tuple. @@ -136,7 +136,7 @@ def disable(self, *args): gl.glDisable(flag) @Context.blend_func.setter - def blend_func(self, value: Tuple[int, int] | Tuple[int, int, int, int]): + def blend_func(self, value: tuple[int, int] | tuple[int, int, int, int]): self._blend_func = value if len(value) == 2: gl.glBlendFunc(*value) @@ -225,8 +225,8 @@ def program( geometry_shader: str | None = None, tess_control_shader: str | None = None, tess_evaluation_shader: str | None = None, - common: List[str] | None = None, - defines: Dict[str, str] | None = None, + common: list[str] | None = None, + defines: dict[str, str] | None = None, varyings: Sequence[str] | None = None, varyings_capture_mode: str = "interleaved", ) -> OpenGLProgram: @@ -293,14 +293,14 @@ def compute_shader(self, *, source: str, common: Iterable[str] = ()) -> OpenGLCo def texture( self, - size: Tuple[int, int], + size: tuple[int, int], *, components: int = 4, dtype: str = "f1", data: BufferProtocol | None = None, wrap_x: PyGLenum | None = None, wrap_y: PyGLenum | None = None, - filter: Tuple[PyGLenum, PyGLenum] | None = None, + filter: tuple[PyGLenum, PyGLenum] | None = None, samples: int = 0, immutable: bool = False, internal_format: PyGLenum | None = None, @@ -326,14 +326,14 @@ def texture( ) def depth_texture( - self, size: Tuple[int, int], *, data: BufferProtocol | None = None + self, size: tuple[int, int], *, data: BufferProtocol | None = None ) -> OpenGLTexture2D: return OpenGLTexture2D(self, size, data=data, depth=True) def framebuffer( self, *, - color_attachments: OpenGLTexture2D | List[OpenGLTexture2D] | None = None, + color_attachments: OpenGLTexture2D | list[OpenGLTexture2D] | None = None, depth_attachment: OpenGLTexture2D | None = None, ) -> OpenGLFramebuffer: return OpenGLFramebuffer( @@ -387,14 +387,14 @@ def sampler(self, texture: OpenGLTexture2D) -> OpenGLSampler: def texture_array( self, - size: Tuple[int, int, int], + size: tuple[int, int, int], *, components: int = 4, dtype: str = "f1", data: BufferProtocol | None = None, wrap_x: PyGLenum | None = None, wrap_y: PyGLenum | None = None, - filter: Tuple[PyGLenum, PyGLenum] | None = None, + filter: tuple[PyGLenum, PyGLenum] | None = None, ) -> OpenGLTextureArray: return OpenGLTextureArray( self, diff --git a/arcade/gl/backends/opengl/framebuffer.py b/arcade/gl/backends/opengl/framebuffer.py index 419cd2f86f..1637f3d865 100644 --- a/arcade/gl/backends/opengl/framebuffer.py +++ b/arcade/gl/backends/opengl/framebuffer.py @@ -51,7 +51,7 @@ class OpenGLFramebuffer(Framebuffer): def __init__( self, - ctx: "Context", + ctx: Context, *, color_attachments: OpenGLTexture2D | list[OpenGLTexture2D], depth_attachment: OpenGLTexture2D | None = None, @@ -336,7 +336,7 @@ def _check_completeness() -> None: ) def __repr__(self): - return "".format(self._glo.value) + return f"" class OpenGLDefaultFrameBuffer(DefaultFrameBuffer, OpenGLFramebuffer): @@ -357,7 +357,7 @@ class OpenGLDefaultFrameBuffer(DefaultFrameBuffer, OpenGLFramebuffer): is_default = True """Is this the default framebuffer? (window buffer)""" - def __init__(self, ctx: "Context"): + def __init__(self, ctx: Context): super().__init__(ctx) value = c_int() diff --git a/arcade/gl/backends/opengl/glsl.py b/arcade/gl/backends/opengl/glsl.py index 2abcf7650f..6e6a7d2400 100644 --- a/arcade/gl/backends/opengl/glsl.py +++ b/arcade/gl/backends/opengl/glsl.py @@ -1,5 +1,6 @@ import re -from typing import TYPE_CHECKING, Iterable +from collections.abc import Iterable +from typing import TYPE_CHECKING from pyglet import gl @@ -124,12 +125,10 @@ def _find_glsl_version(self) -> int: source = "\n".join(f"{str(i + 1).zfill(3)}: {line} " for i, line in enumerate(self._lines)) raise ShaderException( - ( - "Cannot find #version in shader source. " - "Please provide at least a #version 330 statement in the beginning of the shader.\n" - f"---- [{SHADER_TYPE_NAMES[self._type]}] ---\n" - f"{source}" - ) + "Cannot find #version in shader source. " + "Please provide at least a #version 330 statement in the beginning of the shader.\n" + f"---- [{SHADER_TYPE_NAMES[self._type]}] ---\n" + f"{source}" ) @staticmethod @@ -151,7 +150,7 @@ def apply_defines(lines: list[str], defines: dict[str, str]) -> list[str]: if value is None: continue - lines[nr] = "#define {} {}".format(name, str(value)) + lines[nr] = f"#define {name} {str(value)}" except IndexError: pass diff --git a/arcade/gl/backends/opengl/program.py b/arcade/gl/backends/opengl/program.py index 61b08cfd93..76e2bc88a7 100644 --- a/arcade/gl/backends/opengl/program.py +++ b/arcade/gl/backends/opengl/program.py @@ -2,6 +2,7 @@ import typing import weakref +from collections.abc import Iterable from ctypes import ( POINTER, byref, @@ -13,7 +14,7 @@ create_string_buffer, pointer, ) -from typing import TYPE_CHECKING, Any, Iterable +from typing import TYPE_CHECKING, Any from pyglet import gl @@ -168,7 +169,7 @@ def __del__(self): self._ctx.objects.append(self) @property - def ctx(self) -> "Context": + def ctx(self) -> Context: """The context this program belongs to.""" return self._ctx @@ -542,7 +543,7 @@ def link(glo): gl.glGetProgramiv(glo, gl.GL_INFO_LOG_LENGTH, length) log = c_buffer(length.value) gl.glGetProgramInfoLog(glo, len(log), None, log) - raise ShaderException("Program link error: {}".format(log.value.decode())) + raise ShaderException(f"Program link error: {log.value.decode()}") def __repr__(self): - return "".format(self._glo) + return f"" diff --git a/arcade/gl/backends/opengl/texture.py b/arcade/gl/backends/opengl/texture.py index 13f668e91b..3070591a6f 100644 --- a/arcade/gl/backends/opengl/texture.py +++ b/arcade/gl/backends/opengl/texture.py @@ -291,12 +291,10 @@ def _texture_2d(self, data): ) except gl.GLException as ex: raise gl.GLException( - ( - f"Unable to create texture: {ex} : dtype={self._dtype} " - f"size={self.size} components={self._components} " - f"MAX_TEXTURE_SIZE = {self.ctx.info.MAX_TEXTURE_SIZE}" - f": {ex}" - ) + f"Unable to create texture: {ex} : dtype={self._dtype} " + f"size={self.size} components={self._components} " + f"MAX_TEXTURE_SIZE = {self.ctx.info.MAX_TEXTURE_SIZE}" + f": {ex}" ) @property @@ -647,7 +645,7 @@ def delete(self): self._glo.value = 0 @staticmethod - def delete_glo(ctx: "Context", glo: gl.GLuint): + def delete_glo(ctx: Context, glo: gl.GLuint): """ Destroy the texture. @@ -747,6 +745,8 @@ def get_handle(self, resident: bool = True) -> int: return handle def __repr__(self) -> str: - return "".format( - self._glo.value, self._width, self._height, self._components + return ( + f"" ) diff --git a/arcade/gl/backends/opengl/texture_array.py b/arcade/gl/backends/opengl/texture_array.py index 8b1456989d..89169ac7eb 100644 --- a/arcade/gl/backends/opengl/texture_array.py +++ b/arcade/gl/backends/opengl/texture_array.py @@ -301,12 +301,10 @@ def _texture_2d_array(self, data): ) except gl.GLException as ex: raise gl.GLException( - ( - f"Unable to create texture: {ex} : dtype={self._dtype} " - f"size={self.size} components={self._components} " - f"MAX_TEXTURE_SIZE = {self.ctx.info.MAX_TEXTURE_SIZE}" - f": {ex}" - ) + f"Unable to create texture: {ex} : dtype={self._dtype} " + f"size={self.size} components={self._components} " + f"MAX_TEXTURE_SIZE = {self.ctx.info.MAX_TEXTURE_SIZE}" + f": {ex}" ) @property @@ -591,7 +589,7 @@ def delete(self): self._glo.value = 0 @staticmethod - def delete_glo(ctx: "Context", glo: gl.GLuint): + def delete_glo(ctx: Context, glo: gl.GLuint): """ Destroy the texture. @@ -691,6 +689,8 @@ def get_handle(self, resident: bool = True) -> int: return handle def __repr__(self) -> str: - return "".format( - self._glo.value, self._width, self._layers, self._height, self._components + return ( + f"" ) diff --git a/arcade/gl/backends/opengl/uniform.py b/arcade/gl/backends/opengl/uniform.py index f664bc320d..11e201bdec 100644 --- a/arcade/gl/backends/opengl/uniform.py +++ b/arcade/gl/backends/opengl/uniform.py @@ -1,6 +1,6 @@ import struct +from collections.abc import Callable from ctypes import POINTER, c_double, c_float, c_int, c_uint, cast -from typing import Callable from pyglet import gl diff --git a/arcade/gl/backends/opengl/vertex_array.py b/arcade/gl/backends/opengl/vertex_array.py index 27293978e0..0e92cec82e 100644 --- a/arcade/gl/backends/opengl/vertex_array.py +++ b/arcade/gl/backends/opengl/vertex_array.py @@ -1,8 +1,9 @@ from __future__ import annotations import weakref +from collections.abc import Sequence from ctypes import byref, c_void_p -from typing import TYPE_CHECKING, Sequence +from typing import TYPE_CHECKING from pyglet import gl @@ -141,20 +142,16 @@ def _build( buff_descr, attr_descr = descr_attribs[prog_attr.name] except KeyError: raise ValueError( - ( - f"Program needs attribute '{prog_attr.name}', but is not present in buffer " - f"description. Buffer descriptions: {content}" - ) + f"Program needs attribute '{prog_attr.name}', but is not present in buffer " + f"description. Buffer descriptions: {content}" ) # Make sure components described in BufferDescription and in the shader match if prog_attr.components != attr_descr.components: raise ValueError( - ( - f"Program attribute '{prog_attr.name}' has {prog_attr.components} " - f"components while the buffer description has {attr_descr.components} " - " components. " - ) + f"Program attribute '{prog_attr.name}' has {prog_attr.components} " + f"components while the buffer description has {attr_descr.components} " + " components. " ) gl.glEnableVertexAttribArray(prog_attr.location) @@ -182,11 +179,9 @@ def _build( # Sanity check attribute types between shader and buffer description if attrib_type != prog_attr.gl_type: raise ValueError( - ( - f"Program attribute '{prog_attr.name}' has type " - f"{gl_name(prog_attr.gl_type)} " - f"while the buffer description has type {gl_name(attr_descr.gl_type)}. " - ) + f"Program attribute '{prog_attr.name}' has type " + f"{gl_name(prog_attr.gl_type)} " + f"while the buffer description has type {gl_name(attr_descr.gl_type)}. " ) if attrib_type in float_types: @@ -464,7 +459,7 @@ class OpenGLGeometry(Geometry): def __init__( self, - ctx: "Context", + ctx: Context, content: Sequence[BufferDescription] | None, index_buffer: Buffer | None = None, mode: int | None = None, diff --git a/arcade/gl/buffer.py b/arcade/gl/buffer.py index 294c3730b9..232563c5c5 100644 --- a/arcade/gl/buffer.py +++ b/arcade/gl/buffer.py @@ -53,7 +53,7 @@ def size(self) -> int: return self._size @property - def ctx(self) -> "Context": + def ctx(self) -> Context: """The context this resource belongs to.""" return self._ctx diff --git a/arcade/gl/context.py b/arcade/gl/context.py index ded2574d1a..f8c0216d5d 100644 --- a/arcade/gl/context.py +++ b/arcade/gl/context.py @@ -4,17 +4,11 @@ import weakref from abc import ABC, abstractmethod from collections import deque +from collections.abc import Iterable, Sequence from contextlib import contextmanager from typing import ( Any, - Deque, - Dict, - Iterable, - List, Literal, - Sequence, - Set, - Tuple, overload, ) @@ -227,9 +221,9 @@ def __init__( self.primitive_restart_index = self._primitive_restart_index # States - self._blend_func: Tuple[int, int] | Tuple[int, int, int, int] = self.BLEND_DEFAULT + self._blend_func: tuple[int, int] | tuple[int, int, int, int] = self.BLEND_DEFAULT self._point_size = 1.0 - self._flags: Set[int] = set() + self._flags: set[int] = set() self._wireframe = False # Options for cull_face self._cull_face_options = { @@ -248,7 +242,7 @@ def __init__( self.gc_mode = gc_mode #: Collected objects to gc when gc_mode is "context_gc". #: This can be used during debugging. - self.objects: Deque[Any] = deque() + self.objects: deque[Any] = deque() @abstractmethod def _create_default_framebuffer(self) -> DefaultFrameBuffer: @@ -505,7 +499,7 @@ def is_enabled(self, flag) -> bool: return flag in self._flags @property - def viewport(self) -> Tuple[int, int, int, int]: + def viewport(self) -> tuple[int, int, int, int]: """ Get or set the viewport for the currently active framebuffer. The viewport simply describes what pixels of the screen @@ -522,11 +516,11 @@ def viewport(self) -> Tuple[int, int, int, int]: return self.active_framebuffer.viewport @viewport.setter - def viewport(self, value: Tuple[int, int, int, int]): + def viewport(self, value: tuple[int, int, int, int]): self.active_framebuffer.viewport = value @property - def scissor(self) -> Tuple[int, int, int, int] | None: + def scissor(self) -> tuple[int, int, int, int] | None: """ Get or set the scissor box for the active framebuffer. This is a shortcut for :py:meth:`~arcade.gl.Framebuffer.scissor`. @@ -551,7 +545,7 @@ def scissor(self, value): self.fbo.scissor = value @property - def blend_func(self) -> Tuple[int, int] | Tuple[int, int, int, int]: + def blend_func(self) -> tuple[int, int] | tuple[int, int, int, int]: """ Get or set the blend function. This is tuple specifying how the color and @@ -600,7 +594,7 @@ def blend_func(self) -> Tuple[int, int] | Tuple[int, int, int, int]: @blend_func.setter @abstractmethod - def blend_func(self, value: Tuple[int, int] | Tuple[int, int, int, int]): + def blend_func(self, value: tuple[int, int] | tuple[int, int, int, int]): raise NotImplementedError("The enabled graphics backend does not support this method.") # def blend_equation(self) @@ -833,7 +827,7 @@ def buffer( def framebuffer( self, *, - color_attachments: Texture2D | List[Texture2D] | None = None, + color_attachments: Texture2D | list[Texture2D] | None = None, depth_attachment: Texture2D | None = None, ) -> Framebuffer: """Create a Framebuffer. @@ -849,7 +843,7 @@ def framebuffer( @abstractmethod def texture( self, - size: Tuple[int, int], + size: tuple[int, int], *, components: int = 4, dtype: str = "f1", @@ -937,7 +931,7 @@ def texture( @abstractmethod def texture_array( self, - size: Tuple[int, int, int], + size: tuple[int, int, int], *, components: int = 4, dtype: str = "f1", @@ -962,7 +956,7 @@ def texture_array( @abstractmethod def depth_texture( - self, size: Tuple[int, int], *, data: BufferProtocol | None = None + self, size: tuple[int, int], *, data: BufferProtocol | None = None ) -> Texture2D: """ Create a 2D depth texture. Can be used as a depth attachment @@ -1083,8 +1077,8 @@ def program( geometry_shader: str | None = None, tess_control_shader: str | None = None, tess_evaluation_shader: str | None = None, - common: List[str] | None = None, - defines: Dict[str, str] | None = None, + common: list[str] | None = None, + defines: dict[str, str] | None = None, varyings: Sequence[str] | None = None, varyings_capture_mode: str = "interleaved", ) -> Program: @@ -1354,7 +1348,7 @@ def __init__(self, ctx): self.MAX_TEXTURE_MAX_ANISOTROPY = self.get_float(enums.MAX_TEXTURE_MAX_ANISOTROPY, 1.0) """The highest supported anisotropy value. Usually 8.0 or 16.0.""" - self.MAX_VIEWPORT_DIMS: Tuple[int, int] = self.get_int_tuple(enums.MAX_VIEWPORT_DIMS, 2) + self.MAX_VIEWPORT_DIMS: tuple[int, int] = self.get_int_tuple(enums.MAX_VIEWPORT_DIMS, 2) """ The maximum support window or framebuffer viewport. This is usually the same as the maximum texture size @@ -1369,10 +1363,10 @@ def __init__(self, ctx): """ @overload - def get_int_tuple(self, enum, length: Literal[2]) -> Tuple[int, int]: ... + def get_int_tuple(self, enum, length: Literal[2]) -> tuple[int, int]: ... @overload - def get_int_tuple(self, enum, length: int) -> Tuple[int, ...]: ... + def get_int_tuple(self, enum, length: int) -> tuple[int, ...]: ... @abstractmethod def get_int_tuple(self, enum, length: int): diff --git a/arcade/gl/framebuffer.py b/arcade/gl/framebuffer.py index 65d109161c..2eeb62e978 100644 --- a/arcade/gl/framebuffer.py +++ b/arcade/gl/framebuffer.py @@ -1,8 +1,9 @@ from __future__ import annotations from abc import ABC, abstractmethod +from collections.abc import Generator from contextlib import contextmanager -from typing import TYPE_CHECKING, Generator +from typing import TYPE_CHECKING from arcade.types import RGBOrA255, RGBOrANormalized @@ -62,7 +63,7 @@ class Framebuffer(ABC): def __init__( self, - ctx: "Context", + ctx: Context, *, color_attachments: Texture2D | list[Texture2D], depth_attachment: Texture2D | None = None, @@ -139,7 +140,7 @@ def scissor(self, value): raise NotImplementedError("The enabled graphics backend does not support this method.") @property - def ctx(self) -> "Context": + def ctx(self) -> Context: """The context this object belongs to.""" return self._ctx @@ -343,7 +344,7 @@ class DefaultFrameBuffer(Framebuffer, ABC): is_default = True """Is this the default framebuffer? (window buffer)""" - def __init__(self, ctx: "Context"): + def __init__(self, ctx: Context): self._ctx = ctx # TODO: Can we query this? self._samples = 0 diff --git a/arcade/gl/program.py b/arcade/gl/program.py index 4eb56fe3bc..e735c23183 100644 --- a/arcade/gl/program.py +++ b/arcade/gl/program.py @@ -1,7 +1,8 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Any, Iterable +from collections.abc import Iterable +from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from arcade.gl import Context @@ -66,7 +67,7 @@ def __init__( self._ctx.stats.incr("program") @property - def ctx(self) -> "Context": + def ctx(self) -> Context: """The context this program belongs to.""" return self._ctx diff --git a/arcade/gl/provider.py b/arcade/gl/provider.py index c014be94c0..ce402ccbee 100644 --- a/arcade/gl/provider.py +++ b/arcade/gl/provider.py @@ -2,14 +2,14 @@ import importlib from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING if TYPE_CHECKING: from arcade.context import ArcadeContext from .context import Context, Info -_current_provider: Optional[BaseProvider] = None +_current_provider: BaseProvider | None = None def set_provider(provider_name: str): diff --git a/arcade/gl/sampler.py b/arcade/gl/sampler.py index 8e8259ad1f..64b1436fd8 100644 --- a/arcade/gl/sampler.py +++ b/arcade/gl/sampler.py @@ -17,7 +17,7 @@ class Sampler(ABC): def __init__( self, - ctx: "Context", + ctx: Context, texture: Texture2D, *, filter=None, # TODO: Typing, should be tuple[PyGLuint, PyGLuint] | None diff --git a/arcade/gl/types.py b/arcade/gl/types.py index ec63583b39..dda06fb5cf 100644 --- a/arcade/gl/types.py +++ b/arcade/gl/types.py @@ -1,12 +1,13 @@ import re -from typing import Iterable, Sequence, TypeAlias, Union +from collections.abc import Iterable, Sequence +from typing import TypeAlias from arcade.types import BufferProtocol from . import enums from .buffer import Buffer -BufferOrBufferProtocol = Union[BufferProtocol, Buffer] +BufferOrBufferProtocol = BufferProtocol | Buffer GLenumLike = int PyGLenum = int @@ -15,9 +16,7 @@ OpenGlFilter: TypeAlias = tuple[PyGLenum, PyGLenum] -BlendFunction: TypeAlias = Union[ - tuple[PyGLenum, PyGLenum], tuple[PyGLenum, PyGLenum, PyGLenum, PyGLenum] -] +BlendFunction: TypeAlias = tuple[PyGLenum, PyGLenum] | tuple[PyGLenum, PyGLenum, PyGLenum, PyGLenum] #: Depth compare functions compare_funcs: dict[str | None, int] = { @@ -296,7 +295,7 @@ def __init__( if not isinstance(buffer, Buffer): raise ValueError("buffer parameter must be an arcade.gl.Buffer") - if not isinstance(self.attributes, (list, tuple)): + if not isinstance(self.attributes, list | tuple): raise ValueError("Attributes must be a list or tuple") if self.normalized > set(self.attributes): diff --git a/arcade/gl/vertex_array.py b/arcade/gl/vertex_array.py index 5a8a764c97..9e87e14d3b 100644 --- a/arcade/gl/vertex_array.py +++ b/arcade/gl/vertex_array.py @@ -2,7 +2,8 @@ import weakref from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Sequence +from collections.abc import Sequence +from typing import TYPE_CHECKING from .buffer import Buffer from .program import Program @@ -273,7 +274,7 @@ def __init__( self._ctx.stats.incr("geometry") @property - def ctx(self) -> "Context": + def ctx(self) -> Context: """The context this geometry belongs to.""" return self._ctx @@ -495,11 +496,9 @@ def transform( if program._varyings_capture_mode == "interleaved": if not isinstance(buffer, Buffer): raise ValueError( - ( - "Buffer must be a single Buffer object " - "because the capture mode of the program is: " - f"{program.varyings_capture_mode}" - ) + "Buffer must be a single Buffer object " + "because the capture mode of the program is: " + f"{program.varyings_capture_mode}" ) vao.transform_interleaved( buffer, @@ -513,11 +512,9 @@ def transform( else: if not isinstance(buffer, list): raise ValueError( - ( - "buffer must be a list of Buffer object " - "because the capture mode of the program is: " - f"{program.varyings_capture_mode}" - ) + "buffer must be a list of Buffer object " + "because the capture mode of the program is: " + f"{program.varyings_capture_mode}" ) vao.transform_separate( buffer, diff --git a/benchmarks/spatial_hash/list_vs_set.py b/benchmarks/spatial_hash/list_vs_set.py index 2862d55197..d04ac2c860 100644 --- a/benchmarks/spatial_hash/list_vs_set.py +++ b/benchmarks/spatial_hash/list_vs_set.py @@ -24,12 +24,12 @@ def add_remove_list(): def copy_set(): for i in range(100): - bucket = copy.copy(sprite_set) + _ = copy.copy(sprite_set) def update_set(): for i in range(100): - s = set(sprite_set) + _ = set(sprite_set) # s.update(sprite_set) diff --git a/benchmarks/sprite/sprite_alt.py b/benchmarks/sprite/sprite_alt.py index 61d79dded6..35668a65a1 100644 --- a/benchmarks/sprite/sprite_alt.py +++ b/benchmarks/sprite/sprite_alt.py @@ -644,7 +644,7 @@ def rescale_relative_to_point(self, point: Point2, scale_by: AsFloat | Point2) - """ # abort if the multiplier wouldn't do anything - if isinstance(scale_by, (float, int)): + if isinstance(scale_by, float | int): if scale_by == 1.0: return factor_x = scale_by diff --git a/doc/conf.py b/doc/conf.py index 21558432d2..08b2fbc2af 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -24,7 +24,7 @@ sys.path.insert(0, str(REPO_LOCAL_ROOT)) sys.path.insert(0, str(ARCADE_MODULE)) -log.info(f"Inserted elements in system path: First two are now:") +log.info("Inserted elements in system path: First two are now:") for i in range(2): log.info(f" {i}: {sys.path[i]!r}") @@ -111,13 +111,13 @@ def run_util(filename, run_name="__main__", init_globals=None): kwargs = dict(run_name=run_name) if init_globals is not None: kwargs["init_globals"] = init_globals - log.info(f" init_globals={{") + log.info(" init_globals={") num_left = len(init_globals) for k, v in init_globals.items(): end = "," if num_left else "" log.info(f" {k!r} : {v!r}{end}") num_left -= num_left - log.info(f" }}") + log.info(" }") runpy.run_path(full_str, **kwargs) @@ -384,10 +384,8 @@ def inspect_docstring_for_member( doc = _obj.__init__.__doc__ if doc and isinstance(doc, str) and not doc.startswith("Initialize self"): raise ValueError( - ( f"Class {name} has a docstring on __init__. " "The class docstring should cover docs for the initializer:\n {_obj.__init__.__doc__}" - ) ) diff --git a/pyproject.toml b/pyproject.toml index b840af03f0..0c3f6e7bf7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -109,7 +109,7 @@ lint.select = [ # Whitespace linting must be re-enabled manually for ruff # see https://beta.ruff.rs/docs/configuration/#using-pyprojecttoml "W", - # "UP", wait for arcade.gl abstraction merge + "UP", ] [tool.ruff.format] diff --git a/tests/doc/check_examples_2.py b/tests/doc/check_examples_2.py index b974732ef1..f13e28f07f 100644 --- a/tests/doc/check_examples_2.py +++ b/tests/doc/check_examples_2.py @@ -20,7 +20,7 @@ def get_references_in_rsts(): if filename.endswith(".rst") and filename != "index.rst": python_example_filename_list.append(filename) txt = Path(mypath / filename).read_text() - reference = re.findall("\.\. _(.*):", txt) + reference = re.findall(r"\.\. _(.*):", txt) references.extend(reference) return references @@ -31,7 +31,7 @@ def main(): files_to_reference = get_references_in_rsts() for reference in files_to_reference: - if not reference in references_in_index: + if reference not in references_in_index: print(f"index.rst is missing any mention of '{reference}'") print( diff --git a/tests/manual_smoke/sprite_collision_inspector.py b/tests/manual_smoke/sprite_collision_inspector.py index b38b725c39..e9363a0c64 100644 --- a/tests/manual_smoke/sprite_collision_inspector.py +++ b/tests/manual_smoke/sprite_collision_inspector.py @@ -1,5 +1,6 @@ import builtins -from typing import TypeVar, Type, Generic, Any, Callable +from typing import TypeVar, Generic, Any +from collections.abc import Callable from pyglet.math import Vec2 @@ -27,7 +28,7 @@ def _tname(t: Any) -> str: class TypedTextInput(UIInputText, Generic[T]): def __init__( self, - parsed_type: Type[T], + parsed_type: type[T], *, to_str: Callable[[T], str] = repr, from_str: Callable[[str], T] | None = None, @@ -65,7 +66,7 @@ def __init__( **kwargs, ) self._error_color = error_color - self._parsed_type: Type[T] = parsed_type + self._parsed_type: type[T] = parsed_type self._to_str = to_str self._from_str = from_str or parsed_type self._parsed_value: T = self._from_str(self.text) diff --git a/tests/unit/cache/test_hit_box_cache.py b/tests/unit/cache/test_hit_box_cache.py index 76cb7a4cf9..cdb842a880 100644 --- a/tests/unit/cache/test_hit_box_cache.py +++ b/tests/unit/cache/test_hit_box_cache.py @@ -1,7 +1,6 @@ import pytest from arcade import load_texture from arcade.cache import HitBoxCache -from arcade import hitbox @pytest.fixture(scope="function") diff --git a/tests/unit/camera/test_camera2d.py b/tests/unit/camera/test_camera2d.py index 0760405075..80b46bff00 100644 --- a/tests/unit/camera/test_camera2d.py +++ b/tests/unit/camera/test_camera2d.py @@ -1,4 +1,3 @@ -from typing import Tuple from math import radians import pytest as pytest @@ -52,7 +51,7 @@ def same_near_far(request): def test_camera2d_from_camera_data_projection_xy_pairs_equal_raises_zeroprojectiondimension( window: Window, - bad_projection: Tuple[float, float, float, float], # Clarify type for PyCharm + bad_projection: tuple[float, float, float, float], # Clarify type for PyCharm camera_class, ): data = OrthographicProjectionData(*bad_projection, -100.0, 100.0) @@ -62,7 +61,7 @@ def test_camera2d_from_camera_data_projection_xy_pairs_equal_raises_zeroprojecti def test_camera2d_init_xy_pairs_equal_raises_zeroprojectiondimension( - window: Window, bad_projection: Tuple[float, float, float, float], camera_class + window: Window, bad_projection: tuple[float, float, float, float], camera_class ): with pytest.raises(ZeroProjectionDimension): _ = camera_class(projection=LRBT(*bad_projection)) diff --git a/tests/unit/color/test_color_type.py b/tests/unit/color/test_color_type.py index c92f66fe7d..9e3fd5ade4 100644 --- a/tests/unit/color/test_color_type.py +++ b/tests/unit/color/test_color_type.py @@ -1,7 +1,7 @@ import math from copy import deepcopy from itertools import product -from typing import Iterable, Callable, Tuple +from collections.abc import Iterable, Callable from unittest.mock import Mock import pytest @@ -94,7 +94,7 @@ def test_color_from_normalized(): # some helper callables at_least_one_bad = at_least_one_in(BAD_NORMALIZED) - def local_convert(i: Iterable[float]) -> Tuple[int]: + def local_convert(i: Iterable[float]) -> tuple[int]: """Local helper converter, normalized float to byte ints""" return tuple(math.floor(c * 255) for c in i) diff --git a/tests/unit/draw/test_point_rotation.py b/tests/unit/draw/test_point_rotation.py index 4b1c11744c..c3a89cd943 100644 --- a/tests/unit/draw/test_point_rotation.py +++ b/tests/unit/draw/test_point_rotation.py @@ -1,5 +1,3 @@ -import pytest -import arcade from arcade.math import rotate_point diff --git a/tests/unit/gl/backends/gl/test_gl_program.py b/tests/unit/gl/backends/gl/test_gl_program.py index 5a7971e2ce..101cbebb48 100644 --- a/tests/unit/gl/backends/gl/test_gl_program.py +++ b/tests/unit/gl/backends/gl/test_gl_program.py @@ -1,8 +1,7 @@ import struct import pytest -import arcade from pyglet import gl -from pyglet.math import Mat4, Mat3 +from pyglet.math import Mat4 from arcade.gl import ShaderException from arcade.gl.backends.opengl.uniform import UniformBlock from arcade.gl.backends.opengl.glsl import ShaderSource diff --git a/tests/unit/gui/__init__.py b/tests/unit/gui/__init__.py index 99f284eaf9..fafe83b406 100644 --- a/tests/unit/gui/__init__.py +++ b/tests/unit/gui/__init__.py @@ -9,7 +9,7 @@ class InteractionMixin: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.event_history: List[UIEvent] = [] + self.event_history: list[UIEvent] = [] def move_mouse(self, x: int | float, y: int | float): self.on_mouse_motion(x, y, 0, 0) @@ -55,7 +55,7 @@ def dispatch_ui_event(self, event): @contextmanager -def record_ui_events(widget, *names) -> List[UIEvent]: +def record_ui_events(widget, *names) -> list[UIEvent]: events = [] def record(event): diff --git a/tests/unit/gui/test_exp_restricted_input.py b/tests/unit/gui/test_exp_restricted_input.py index 768cac1a1b..bc373cd36c 100644 --- a/tests/unit/gui/test_exp_restricted_input.py +++ b/tests/unit/gui/test_exp_restricted_input.py @@ -1,4 +1,3 @@ -from arcade.gui.experimental import UIPasswordInput from arcade.gui.experimental.restricted_input import UIRestrictedInput, UIIntInput, UIRegexInput diff --git a/tests/unit/gui/test_interactions.py b/tests/unit/gui/test_interactions.py index a6cce78256..8fef7a6534 100644 --- a/tests/unit/gui/test_interactions.py +++ b/tests/unit/gui/test_interactions.py @@ -1,4 +1,3 @@ -from typing import List from unittest.mock import Mock import arcade @@ -45,7 +44,7 @@ def test_left_click_on_widget(ui): ui.click(widget1.center_x, widget1.center_y, button=arcade.MOUSE_BUTTON_LEFT) # THEN - records: List[UIEvent] + records: list[UIEvent] assert len(records) == 3 assert isinstance(records[0], UIMousePressEvent) assert isinstance(records[1], UIMouseReleaseEvent) @@ -72,7 +71,7 @@ def test_ignores_right_click_on_widget(ui): ui.click(widget1.center_x, widget1.center_y, button=arcade.MOUSE_BUTTON_RIGHT) # THEN - records: List[UIEvent] + records: list[UIEvent] assert len(records) == 2 assert isinstance(records[0], UIMousePressEvent) assert isinstance(records[1], UIMouseReleaseEvent) @@ -91,7 +90,7 @@ def test_click_on_widget_if_disabled(ui): ui.click(widget1.center_x, widget1.center_y) # THEN - records: List[UIEvent] + records: list[UIEvent] assert len(records) == 2 assert isinstance(records[0], UIMousePressEvent) assert isinstance(records[1], UIMouseReleaseEvent) @@ -113,11 +112,11 @@ def test_click_on_overlay_widget_consumes_events(ui): # THEN # events are consumed before they get to underlying widget - w1_records: List[UIEvent] + w1_records: list[UIEvent] assert len(w1_records) == 0 # events are dispatched on widget2 - w2_records: List[UIEvent] + w2_records: list[UIEvent] assert len(w2_records) == 1 click_event = w2_records[0] assert isinstance(click_event, UIOnClickEvent) @@ -140,11 +139,11 @@ def test_click_consumed_by_nested_widget(ui): # THEN # events are consumed before they get to underlying widget - w1_records: List[UIEvent] + w1_records: list[UIEvent] assert len(w1_records) == 0 # events are dispatched on widget2 - w2_records: List[UIEvent] + w2_records: list[UIEvent] assert len(w2_records) == 1 click_event = w2_records[0] assert isinstance(click_event, UIOnClickEvent) diff --git a/tests/unit/gui/test_layouting_box_ortho_algorithm.py b/tests/unit/gui/test_layouting_box_ortho_algorithm.py index 55727996c9..8d5e2aca55 100644 --- a/tests/unit/gui/test_layouting_box_ortho_algorithm.py +++ b/tests/unit/gui/test_layouting_box_ortho_algorithm.py @@ -1,4 +1,4 @@ -from arcade.gui.widgets.layout import _C, _box_axis_algorithm, _box_orthogonal_algorithm +from arcade.gui.widgets.layout import _C, _box_orthogonal_algorithm def test_simple_values(window): diff --git a/tests/unit/gui/test_layouting_gridlayout.py b/tests/unit/gui/test_layouting_gridlayout.py index 281f0b0bba..a3184db31d 100644 --- a/tests/unit/gui/test_layouting_gridlayout.py +++ b/tests/unit/gui/test_layouting_gridlayout.py @@ -1,7 +1,7 @@ from pyglet.math import Vec2 from arcade import LBWH -from arcade.gui import UIAnchorLayout, UIBoxLayout, UIDummy, UIManager +from arcade.gui import UIAnchorLayout, UIBoxLayout, UIDummy from arcade.gui.widgets.layout import UIGridLayout diff --git a/tests/unit/gui/test_property_dict.py b/tests/unit/gui/test_property_dict.py index 01026385ea..44fd2cd0b9 100644 --- a/tests/unit/gui/test_property_dict.py +++ b/tests/unit/gui/test_property_dict.py @@ -1,5 +1,4 @@ import gc -from typing import Dict from arcade.gui.property import bind, DictProperty, _ObservableDict from .test_property import Observer @@ -64,7 +63,7 @@ class MyDictHolder: def test_dict_property_clear(): class MyDictHolder: - data: Dict = DictProperty() + data: dict = DictProperty() obj = MyDictHolder() observer = Observer() @@ -77,7 +76,7 @@ class MyDictHolder: def test_dict_property_pop(): class MyDictHolder: - data: Dict = DictProperty() + data: dict = DictProperty() obj = MyDictHolder() obj.data["test"] = 5 @@ -92,7 +91,7 @@ class MyDictHolder: def test_dict_property_pop_item(): class MyDictHolder: - data: Dict = DictProperty() + data: dict = DictProperty() obj = MyDictHolder() obj.data["test"] = 5 @@ -107,7 +106,7 @@ class MyDictHolder: def test_dict_property_set_default(): class MyDictHolder: - data: Dict = DictProperty() + data: dict = DictProperty() obj = MyDictHolder() obj.data["test"] = 5 @@ -122,7 +121,7 @@ class MyDictHolder: def test_dict_property_update(): class MyDictHolder: - data: Dict = DictProperty() + data: dict = DictProperty() obj = MyDictHolder() obj.data["test"] = 5 diff --git a/tests/unit/gui/test_property_list.py b/tests/unit/gui/test_property_list.py index 5ec7ada102..b6d5ed5714 100644 --- a/tests/unit/gui/test_property_list.py +++ b/tests/unit/gui/test_property_list.py @@ -1,12 +1,11 @@ import gc -from typing import List from arcade.gui.property import bind, ListProperty, _ObservableList from .test_property import Observer class MyListHolder: - data: List = ListProperty() + data: list = ListProperty() def test_list_property_gc(): diff --git a/tests/unit/physics_engine/test_physics_engine.py b/tests/unit/physics_engine/test_physics_engine.py index 2bb0a084d5..e134decf99 100644 --- a/tests/unit/physics_engine/test_physics_engine.py +++ b/tests/unit/physics_engine/test_physics_engine.py @@ -1,5 +1,4 @@ import arcade -import os SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 diff --git a/tests/unit/rect/test_rect_instances.py b/tests/unit/rect/test_rect_instances.py index faed78c0ec..40be3fcb5c 100644 --- a/tests/unit/rect/test_rect_instances.py +++ b/tests/unit/rect/test_rect_instances.py @@ -1,6 +1,6 @@ -from typing import Callable, Any +from typing import Any +from collections.abc import Callable -import pytest from pyglet.math import Vec2 from arcade.types.rect import Rect, LBWH, LRBT, XYRR, XYWH @@ -96,7 +96,7 @@ def test_views(): class SubclassedRect(Rect): ... -ALL_ZEROES = tuple((0 for _ in Rect._fields)) +ALL_ZEROES = tuple(0 for _ in Rect._fields) def _formats_correctly(func: Callable[[Any], str], starts_with_format: str, instance: Any) -> bool: diff --git a/tests/unit/resources/test_handles.py b/tests/unit/resources/test_handles.py index 6fa242e328..66bd803942 100644 --- a/tests/unit/resources/test_handles.py +++ b/tests/unit/resources/test_handles.py @@ -1,6 +1,5 @@ from pathlib import Path import pytest -import arcade from arcade import resources MODULE_DIR = Path(__file__).parent.parent.resolve() diff --git a/tests/unit/shape_list/test_buffered_drawing.py b/tests/unit/shape_list/test_buffered_drawing.py index 715b95f258..9e42f5d082 100644 --- a/tests/unit/shape_list/test_buffered_drawing.py +++ b/tests/unit/shape_list/test_buffered_drawing.py @@ -5,7 +5,6 @@ from arcade.shape_list import ( ShapeElementList, create_line, - create_ellipse_outline, create_ellipse_filled, create_ellipse_filled_with_colors, create_rectangle_filled, diff --git a/tests/unit/sprite/test_sprite.py b/tests/unit/sprite/test_sprite.py index 2201a15629..970e0d8217 100644 --- a/tests/unit/sprite/test_sprite.py +++ b/tests/unit/sprite/test_sprite.py @@ -5,7 +5,6 @@ import pytest as pytest import arcade -from pyglet.math import Vec2 frame_counter = 0 SPRITE_TEXTURE_FEMALE_PERSON_IDLE = arcade.load_texture( diff --git a/tests/unit/sprite/test_sprite_animated_walking.py b/tests/unit/sprite/test_sprite_animated_walking.py index 46cf3ca92c..8ecf539e51 100644 --- a/tests/unit/sprite/test_sprite_animated_walking.py +++ b/tests/unit/sprite/test_sprite_animated_walking.py @@ -1,4 +1,3 @@ -import pytest import arcade COIN_SCALE = 0.5 diff --git a/tests/unit/sprite/test_sprite_texture_animation.py b/tests/unit/sprite/test_sprite_texture_animation.py index 7ed6b5a5ae..765150cd2a 100644 --- a/tests/unit/sprite/test_sprite_texture_animation.py +++ b/tests/unit/sprite/test_sprite_texture_animation.py @@ -1,4 +1,3 @@ -import math import pytest import arcade diff --git a/tests/unit/spritelist/test_spritelist.py b/tests/unit/spritelist/test_spritelist.py index b0f371eced..72bbc50d08 100644 --- a/tests/unit/spritelist/test_spritelist.py +++ b/tests/unit/spritelist/test_spritelist.py @@ -67,16 +67,14 @@ def test_it_can_extend_a_spritelist_from_a_list(): def test_it_can_extend_a_spritelist_from_a_generator_expression(): sprite_list = arcade.SpriteList() sprite_list.extend( - ( - arcade.SpriteSolidColor( - width=32, - height=32, - center_x=coord, - center_y=coord, - color=arcade.color.RED, - ) - for coord in range(5) + arcade.SpriteSolidColor( + width=32, + height=32, + center_x=coord, + center_y=coord, + color=arcade.color.RED, ) + for coord in range(5) ) for coord, sprite in enumerate(sprite_list): assert sprite.position == (coord, coord) diff --git a/tests/unit/test_clock.py b/tests/unit/test_clock.py index abed4d9a1e..eaae1abcc3 100644 --- a/tests/unit/test_clock.py +++ b/tests/unit/test_clock.py @@ -1,6 +1,6 @@ import pytest as pytest -from arcade.clock import Clock, FixedClock, GLOBAL_CLOCK, GLOBAL_FIXED_CLOCK +from arcade.clock import GLOBAL_CLOCK, GLOBAL_FIXED_CLOCK def test_clock(): diff --git a/tests/unit/test_math.py b/tests/unit/test_math.py index cd25515506..470754d772 100644 --- a/tests/unit/test_math.py +++ b/tests/unit/test_math.py @@ -5,7 +5,6 @@ python -m pytest tests/unit/test_utils.py """ -import arcade from pytest import approx from arcade.math import * from arcade.types import LBWH diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 6474fdd7f5..f45172e2a7 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -5,7 +5,8 @@ python -m pytest tests/unit/test_utils.py """ -from typing import Callable, Any +from typing import Any +from collections.abc import Callable from arcade import utils diff --git a/tests/unit/text/test_text.py b/tests/unit/text/test_text.py index 993fe75a94..8a0694becf 100644 --- a/tests/unit/text/test_text.py +++ b/tests/unit/text/test_text.py @@ -1,6 +1,3 @@ -from typing import List - -import pytest import arcade @@ -134,7 +131,7 @@ def test_text_instances(window): window.clear() current_x = 20 - text_list: List[arcade.Text] = [] + text_list: list[arcade.Text] = [] def new_text(*args, **kwargs) -> None: """ diff --git a/tests/unit/texture/test_texture_transform_render.py b/tests/unit/texture/test_texture_transform_render.py index bb5b6baf9b..c6603a494b 100644 --- a/tests/unit/texture/test_texture_transform_render.py +++ b/tests/unit/texture/test_texture_transform_render.py @@ -7,7 +7,6 @@ from pyglet.math import Mat4 from PIL import Image, ImageDraw from arcade.texture.transforms import ( - Transform, Rotate90Transform, Rotate180Transform, Rotate270Transform, diff --git a/tests/unit/window/test_view.py b/tests/unit/window/test_view.py index ac5ab72726..481d16341a 100644 --- a/tests/unit/window/test_view.py +++ b/tests/unit/window/test_view.py @@ -1,6 +1,6 @@ from unittest.mock import Mock -from arcade import Window, View, color, get_image +from arcade import View, color def test_on_show_view_called(window): diff --git a/util/doc_helpers/__init__.py b/util/doc_helpers/__init__.py index 069dcfbcc6..3281d0b28b 100644 --- a/util/doc_helpers/__init__.py +++ b/util/doc_helpers/__init__.py @@ -1,5 +1,5 @@ import re -from typing import Iterable +from collections.abc import Iterable from pathlib import Path from .vfs import VirtualFile, Vfs, F diff --git a/util/doc_helpers/real_filesystem.py b/util/doc_helpers/real_filesystem.py index f7efa1962a..ac2cc4537a 100644 --- a/util/doc_helpers/real_filesystem.py +++ b/util/doc_helpers/real_filesystem.py @@ -5,7 +5,8 @@ import shutil from pathlib import Path -from typing import Generator, TypeVar, Hashable, Iterable, Mapping, Sequence, Callable +from typing import TypeVar +from collections.abc import Generator, Hashable, Iterable, Mapping, Sequence, Callable import logging H = TypeVar("H", bound=Hashable) diff --git a/util/doc_helpers/vfs.py b/util/doc_helpers/vfs.py index 3f0b1f438f..448752b8bd 100644 --- a/util/doc_helpers/vfs.py +++ b/util/doc_helpers/vfs.py @@ -31,7 +31,8 @@ from contextlib import suppress, contextmanager from io import StringIO from pathlib import Path -from typing import Generator, Type, TypeVar, Generic +from typing import TypeVar, Generic +from collections.abc import Generator class VirtualFile: @@ -64,7 +65,7 @@ def close(self): def _write_to_disk(self): before = None with suppress(Exception): - with open(self.path, "r") as f: + with open(self.path) as f: before = f.read() content = self._content.getvalue() @@ -91,8 +92,8 @@ class Vfs(Generic[F]): 3. Once done, call vfs_instance.write() to sync to disk """ - def __init__(self, file_type: Type[F] = VirtualFile): - self.file_type: Type[F] = file_type + def __init__(self, file_type: type[F] = VirtualFile): + self.file_type: type[F] = file_type self.files: dict[Path, F] = dict() self.files_to_delete: set[Path] = set() @@ -126,7 +127,7 @@ def write(self) -> None: for file in self.files.values(): file._write_to_disk() for path in self.files_to_delete: - if not path in file_paths: + if path not in file_paths: print(f"Deleting {path}") path.unlink() diff --git a/util/sphinx_static_file_temp_fix.py b/util/sphinx_static_file_temp_fix.py index b728b9b485..1f1d9edfac 100644 --- a/util/sphinx_static_file_temp_fix.py +++ b/util/sphinx_static_file_temp_fix.py @@ -123,7 +123,7 @@ def main(): # indented so we can grep for Done force-syncing in the logs from sphinx import __version__ as sphinx_version - log.info(f" SYNC: Force-sync enable file found and build-dir exists") + log.info(" SYNC: Force-sync enable file found and build-dir exists") if sphinx_version >= "8.1.4": log.warning( " Sphinx >= 8.1.4 may patch broken _static copy\n" diff --git a/util/update_quick_index.py b/util/update_quick_index.py index e6729b1af1..81ba78285b 100644 --- a/util/update_quick_index.py +++ b/util/update_quick_index.py @@ -18,7 +18,7 @@ from pathlib import Path from textwrap import dedent -from typing import Generator +from collections.abc import Generator # Ensure we get utility & Arcade imports first sys.path.insert(0, str(Path(__file__).parent.resolve())) @@ -401,8 +401,8 @@ def generate_api_file(api_file_name: str, vfs: Vfs): api_file = vfs.open(full_api_file_name, "w") api_file.write(f".. _{api_file_name[:-4]}_api:\n") # api_file.write(f".. py:module:: arcade\n") - api_file.write(f".. py:currentmodule:: arcade\n") - api_file.write(f"\n") + api_file.write(".. py:currentmodule:: arcade\n") + api_file.write("\n") api_file.write(f"{title}\n") api_file.write(f"{underline}\n\n") @@ -466,7 +466,7 @@ def iter_declarations(kind: str) -> Generator[tuple[str, str], None, None]: # Write the entry to the file api_file.write(f".. autoclass:: {full_name}\n") - api_file.write(f" :members:\n") + api_file.write(" :members:\n") # api_file.write(f" :member-order: groupwise\n") # Apply special per-class addenda