diff --git a/.github/workflows/lint-format.yml b/.github/workflows/lint-format.yml
index 569dc1743..96151f101 100644
--- a/.github/workflows/lint-format.yml
+++ b/.github/workflows/lint-format.yml
@@ -37,7 +37,7 @@ jobs:
with:
python-version: 3.11
- name: Install wpiformat
- run: pip3 install wpiformat==2024.41
+ run: pip3 install wpiformat==2024.45
- name: Run
run: wpiformat
- name: Check output
diff --git a/devTools/calibrationUtils.py b/devTools/calibrationUtils.py
index 676382c57..340a7b982 100644
--- a/devTools/calibrationUtils.py
+++ b/devTools/calibrationUtils.py
@@ -1,11 +1,12 @@
import argparse
import base64
-from dataclasses import dataclass
import json
import os
+from dataclasses import dataclass
+
import cv2
-import numpy as np
import mrcal
+import numpy as np
from wpimath.geometry import Quaternion as _Quat
diff --git a/photon-lib/py/photonlibpy/__init__.py b/photon-lib/py/photonlibpy/__init__.py
index 6f6fea2ce..74e6dda70 100644
--- a/photon-lib/py/photonlibpy/__init__.py
+++ b/photon-lib/py/photonlibpy/__init__.py
@@ -15,7 +15,7 @@
## along with this program. If not, see .
###############################################################################
-from .packet import Packet # noqa
from .estimatedRobotPose import EstimatedRobotPose # noqa
-from .photonPoseEstimator import PhotonPoseEstimator, PoseStrategy # noqa
+from .packet import Packet # noqa
from .photonCamera import PhotonCamera # noqa
+from .photonPoseEstimator import PhotonPoseEstimator, PoseStrategy # noqa
diff --git a/photon-lib/py/photonlibpy/generated/MultiTargetPNPResultSerde.py b/photon-lib/py/photonlibpy/generated/MultiTargetPNPResultSerde.py
index 56705202d..84bea5502 100644
--- a/photon-lib/py/photonlibpy/generated/MultiTargetPNPResultSerde.py
+++ b/photon-lib/py/photonlibpy/generated/MultiTargetPNPResultSerde.py
@@ -20,8 +20,8 @@
## --> DO NOT MODIFY <--
###############################################################################
-from ..targeting import *
from ..packet import Packet
+from ..targeting import *
class MultiTargetPNPResultSerde:
diff --git a/photon-lib/py/photonlibpy/generated/PhotonPipelineMetadataSerde.py b/photon-lib/py/photonlibpy/generated/PhotonPipelineMetadataSerde.py
index 99a994186..be9ed5f2f 100644
--- a/photon-lib/py/photonlibpy/generated/PhotonPipelineMetadataSerde.py
+++ b/photon-lib/py/photonlibpy/generated/PhotonPipelineMetadataSerde.py
@@ -20,8 +20,8 @@
## --> DO NOT MODIFY <--
###############################################################################
-from ..targeting import *
from ..packet import Packet
+from ..targeting import *
class PhotonPipelineMetadataSerde:
diff --git a/photon-lib/py/photonlibpy/generated/PhotonPipelineResultSerde.py b/photon-lib/py/photonlibpy/generated/PhotonPipelineResultSerde.py
index a1c186595..45abf0b4d 100644
--- a/photon-lib/py/photonlibpy/generated/PhotonPipelineResultSerde.py
+++ b/photon-lib/py/photonlibpy/generated/PhotonPipelineResultSerde.py
@@ -20,8 +20,8 @@
## --> DO NOT MODIFY <--
###############################################################################
-from ..targeting import *
from ..packet import Packet
+from ..targeting import *
class PhotonPipelineResultSerde:
diff --git a/photon-lib/py/photonlibpy/generated/PhotonTrackedTargetSerde.py b/photon-lib/py/photonlibpy/generated/PhotonTrackedTargetSerde.py
index 2eea5a6ad..655147f08 100644
--- a/photon-lib/py/photonlibpy/generated/PhotonTrackedTargetSerde.py
+++ b/photon-lib/py/photonlibpy/generated/PhotonTrackedTargetSerde.py
@@ -20,8 +20,8 @@
## --> DO NOT MODIFY <--
###############################################################################
-from ..targeting import *
from ..packet import Packet
+from ..targeting import *
class PhotonTrackedTargetSerde:
diff --git a/photon-lib/py/photonlibpy/generated/PnpResultSerde.py b/photon-lib/py/photonlibpy/generated/PnpResultSerde.py
index 44cffc368..631257422 100644
--- a/photon-lib/py/photonlibpy/generated/PnpResultSerde.py
+++ b/photon-lib/py/photonlibpy/generated/PnpResultSerde.py
@@ -20,8 +20,8 @@
## --> DO NOT MODIFY <--
###############################################################################
-from ..targeting import *
from ..packet import Packet
+from ..targeting import *
class PnpResultSerde:
diff --git a/photon-lib/py/photonlibpy/generated/TargetCornerSerde.py b/photon-lib/py/photonlibpy/generated/TargetCornerSerde.py
index 0c57b42ee..6c60e0a23 100644
--- a/photon-lib/py/photonlibpy/generated/TargetCornerSerde.py
+++ b/photon-lib/py/photonlibpy/generated/TargetCornerSerde.py
@@ -20,8 +20,8 @@
## --> DO NOT MODIFY <--
###############################################################################
-from ..targeting import *
from ..packet import Packet
+from ..targeting import *
class TargetCornerSerde:
diff --git a/photon-lib/py/photonlibpy/generated/__init__.py b/photon-lib/py/photonlibpy/generated/__init__.py
index 7a8e89787..b9569d0c4 100644
--- a/photon-lib/py/photonlibpy/generated/__init__.py
+++ b/photon-lib/py/photonlibpy/generated/__init__.py
@@ -2,7 +2,6 @@
from .MultiTargetPNPResultSerde import MultiTargetPNPResultSerde # noqa
from .PhotonPipelineMetadataSerde import PhotonPipelineMetadataSerde # noqa
-from .PhotonPipelineMetadataSerde import PhotonPipelineMetadataSerde # noqa
from .PhotonPipelineResultSerde import PhotonPipelineResultSerde # noqa
from .PhotonTrackedTargetSerde import PhotonTrackedTargetSerde # noqa
from .PnpResultSerde import PnpResultSerde # noqa
diff --git a/photon-lib/py/photonlibpy/packet.py b/photon-lib/py/photonlibpy/packet.py
index 9a4e1fadd..0d3ecff53 100644
--- a/photon-lib/py/photonlibpy/packet.py
+++ b/photon-lib/py/photonlibpy/packet.py
@@ -17,8 +17,9 @@
import struct
from typing import Any, Optional, Type
-from wpimath.geometry import Transform3d, Translation3d, Rotation3d, Quaternion
+
import wpilib
+from wpimath.geometry import Quaternion, Rotation3d, Transform3d, Translation3d
class Packet:
diff --git a/photon-lib/py/photonlibpy/photonCamera.py b/photon-lib/py/photonlibpy/photonCamera.py
index 284a22eea..6b224de4c 100644
--- a/photon-lib/py/photonlibpy/photonCamera.py
+++ b/photon-lib/py/photonlibpy/photonCamera.py
@@ -17,15 +17,20 @@
from enum import Enum
from typing import List
+
import ntcore
-from wpilib import RobotController, Timer
-import wpilib
-from .packet import Packet
-from .targeting.photonPipelineResult import PhotonPipelineResult
-from .version import PHOTONVISION_VERSION, PHOTONLIB_VERSION # type: ignore[import-untyped]
# magical import to make serde stuff work
import photonlibpy.generated # noqa
+import wpilib
+from wpilib import RobotController, Timer
+
+from .packet import Packet
+from .targeting.photonPipelineResult import PhotonPipelineResult
+from .version import ( # type: ignore[import-untyped]
+ PHOTONLIB_VERSION,
+ PHOTONVISION_VERSION,
+)
class VisionLEDMode(Enum):
diff --git a/photon-lib/py/photonlibpy/photonPoseEstimator.py b/photon-lib/py/photonlibpy/photonPoseEstimator.py
index a5a99f5cd..201d1da2b 100644
--- a/photon-lib/py/photonlibpy/photonPoseEstimator.py
+++ b/photon-lib/py/photonlibpy/photonPoseEstimator.py
@@ -20,11 +20,11 @@ from typing import Optional
import wpilib
from robotpy_apriltag import AprilTagFieldLayout
-from wpimath.geometry import Transform3d, Pose3d, Pose2d
+from wpimath.geometry import Pose2d, Pose3d, Transform3d
-from .targeting.photonPipelineResult import PhotonPipelineResult
-from .photonCamera import PhotonCamera
from .estimatedRobotPose import EstimatedRobotPose
+from .photonCamera import PhotonCamera
+from .targeting.photonPipelineResult import PhotonPipelineResult
class PoseStrategy(enum.Enum):
diff --git a/photon-lib/py/photonlibpy/targeting/__init__.py b/photon-lib/py/photonlibpy/targeting/__init__.py
index 11360717e..49eb1d84f 100644
--- a/photon-lib/py/photonlibpy/targeting/__init__.py
+++ b/photon-lib/py/photonlibpy/targeting/__init__.py
@@ -1,6 +1,6 @@
# no one but us chickens
-from .TargetCorner import TargetCorner # noqa
from .multiTargetPNPResult import MultiTargetPNPResult, PnpResult # noqa
from .photonPipelineResult import PhotonPipelineMetadata, PhotonPipelineResult # noqa
from .photonTrackedTarget import PhotonTrackedTarget # noqa
+from .TargetCorner import TargetCorner # noqa
diff --git a/photon-lib/py/photonlibpy/targeting/multiTargetPNPResult.py b/photon-lib/py/photonlibpy/targeting/multiTargetPNPResult.py
index 93e1fe2a8..ad4233d62 100644
--- a/photon-lib/py/photonlibpy/targeting/multiTargetPNPResult.py
+++ b/photon-lib/py/photonlibpy/targeting/multiTargetPNPResult.py
@@ -1,5 +1,7 @@
from dataclasses import dataclass, field
+
from wpimath.geometry import Transform3d
+
from ..packet import Packet
diff --git a/photon-lib/py/photonlibpy/targeting/photonTrackedTarget.py b/photon-lib/py/photonlibpy/targeting/photonTrackedTarget.py
index d89482f62..16a4c3554 100644
--- a/photon-lib/py/photonlibpy/targeting/photonTrackedTarget.py
+++ b/photon-lib/py/photonlibpy/targeting/photonTrackedTarget.py
@@ -1,5 +1,7 @@
from dataclasses import dataclass, field
+
from wpimath.geometry import Transform3d
+
from ..packet import Packet
from .TargetCorner import TargetCorner
diff --git a/photon-lib/py/setup.py b/photon-lib/py/setup.py
index 39a183ea0..e3a28ea62 100644
--- a/photon-lib/py/setup.py
+++ b/photon-lib/py/setup.py
@@ -1,5 +1,7 @@
-from setuptools import setup, find_packages
-import subprocess, re
+import re
+import subprocess
+
+from setuptools import find_packages, setup
gitDescribeResult = (
subprocess.check_output(["git", "describe", "--tags", "--match=v*", "--always"])
diff --git a/photon-lib/py/test/photonPoseEstimator_test.py b/photon-lib/py/test/photonPoseEstimator_test.py
index 02be614ae..5f9787e43 100644
--- a/photon-lib/py/test/photonPoseEstimator_test.py
+++ b/photon-lib/py/test/photonPoseEstimator_test.py
@@ -15,14 +15,14 @@
## along with this program. If not, see .
###############################################################################
-from photonlibpy.targeting.multiTargetPNPResult import MultiTargetPNPResult, PnpResult
-from photonlibpy.targeting.photonPipelineResult import PhotonPipelineResult
from photonlibpy import PhotonPoseEstimator, PoseStrategy
from photonlibpy.targeting import (
+ PhotonPipelineMetadata,
PhotonTrackedTarget,
TargetCorner,
- PhotonPipelineMetadata,
)
+from photonlibpy.targeting.multiTargetPNPResult import MultiTargetPNPResult, PnpResult
+from photonlibpy.targeting.photonPipelineResult import PhotonPipelineResult
from robotpy_apriltag import AprilTag, AprilTagFieldLayout
from wpimath.geometry import Pose3d, Rotation3d, Transform3d, Translation3d
diff --git a/photon-lib/py/test/photonlibpy_test.py b/photon-lib/py/test/photonlibpy_test.py
index dddce605f..8835c9977 100644
--- a/photon-lib/py/test/photonlibpy_test.py
+++ b/photon-lib/py/test/photonlibpy_test.py
@@ -16,8 +16,9 @@
###############################################################################
from time import sleep
-from photonlibpy import PhotonCamera
+
import ntcore
+from photonlibpy import PhotonCamera
from photonlibpy.photonCamera import setVersionCheckEnabled
diff --git a/photonlib-python-examples/aimandrange/drivetrain.py b/photonlib-python-examples/aimandrange/drivetrain.py
index d411b7b8b..e0798d37a 100644
--- a/photonlib-python-examples/aimandrange/drivetrain.py
+++ b/photonlib-python-examples/aimandrange/drivetrain.py
@@ -24,11 +24,12 @@
import math
+
+import swervemodule
import wpilib
import wpilib.simulation
import wpimath.geometry
import wpimath.kinematics
-import swervemodule
kMaxSpeed = 3.0 # 3 meters per second
kMaxAngularSpeed = math.pi # 1/2 rotation per second
diff --git a/photonlib-python-examples/aimandrange/robot.py b/photonlib-python-examples/aimandrange/robot.py
index 9afa3b355..a91bcbbd4 100644
--- a/photonlib-python-examples/aimandrange/robot.py
+++ b/photonlib-python-examples/aimandrange/robot.py
@@ -24,9 +24,9 @@
###################################################################################
import math
-import wpilib
-import drivetrain
+import drivetrain
+import wpilib
from photonlibpy import PhotonCamera
VISION_TURN_kP = 0.01
diff --git a/photonlib-python-examples/aimandrange/swervemodule.py b/photonlib-python-examples/aimandrange/swervemodule.py
index 803a1f5f3..6cbba18d5 100644
--- a/photonlib-python-examples/aimandrange/swervemodule.py
+++ b/photonlib-python-examples/aimandrange/swervemodule.py
@@ -23,12 +23,13 @@
###################################################################################
import math
+
import wpilib
import wpilib.simulation
-import wpimath.kinematics
+import wpimath.controller
import wpimath.filter
import wpimath.geometry
-import wpimath.controller
+import wpimath.kinematics
import wpimath.trajectory
import wpimath.units
diff --git a/photonlib-python-examples/aimattarget/drivetrain.py b/photonlib-python-examples/aimattarget/drivetrain.py
index d411b7b8b..e0798d37a 100644
--- a/photonlib-python-examples/aimattarget/drivetrain.py
+++ b/photonlib-python-examples/aimattarget/drivetrain.py
@@ -24,11 +24,12 @@
import math
+
+import swervemodule
import wpilib
import wpilib.simulation
import wpimath.geometry
import wpimath.kinematics
-import swervemodule
kMaxSpeed = 3.0 # 3 meters per second
kMaxAngularSpeed = math.pi # 1/2 rotation per second
diff --git a/photonlib-python-examples/aimattarget/robot.py b/photonlib-python-examples/aimattarget/robot.py
index 3f66961c1..692ca7f16 100644
--- a/photonlib-python-examples/aimattarget/robot.py
+++ b/photonlib-python-examples/aimattarget/robot.py
@@ -24,9 +24,8 @@
###################################################################################
-import wpilib
import drivetrain
-
+import wpilib
from photonlibpy import PhotonCamera
VISION_TURN_kP = 0.01
diff --git a/photonlib-python-examples/aimattarget/swervemodule.py b/photonlib-python-examples/aimattarget/swervemodule.py
index 803a1f5f3..6cbba18d5 100644
--- a/photonlib-python-examples/aimattarget/swervemodule.py
+++ b/photonlib-python-examples/aimattarget/swervemodule.py
@@ -23,12 +23,13 @@
###################################################################################
import math
+
import wpilib
import wpilib.simulation
-import wpimath.kinematics
+import wpimath.controller
import wpimath.filter
import wpimath.geometry
-import wpimath.controller
+import wpimath.kinematics
import wpimath.trajectory
import wpimath.units
diff --git a/photonlib-python-examples/poseest/drivetrain.py b/photonlib-python-examples/poseest/drivetrain.py
index 4269061cc..0e892e5b5 100644
--- a/photonlib-python-examples/poseest/drivetrain.py
+++ b/photonlib-python-examples/poseest/drivetrain.py
@@ -24,12 +24,13 @@
import math
+
+import swervemodule
import wpilib
import wpilib.simulation
+import wpimath.estimator
import wpimath.geometry
import wpimath.kinematics
-import wpimath.estimator
-import swervemodule
kMaxSpeed = 3.0 # 3 meters per second
kMaxAngularSpeed = math.pi # 1/2 rotation per second
diff --git a/photonlib-python-examples/poseest/robot.py b/photonlib-python-examples/poseest/robot.py
index 5396c93ab..9d82d17a0 100644
--- a/photonlib-python-examples/poseest/robot.py
+++ b/photonlib-python-examples/poseest/robot.py
@@ -24,12 +24,11 @@
###################################################################################
+import drivetrain
import wpilib
import wpimath.geometry
-from robotpy_apriltag import AprilTagField, loadAprilTagLayoutField
-import drivetrain
-
from photonlibpy import PhotonCamera, PhotonPoseEstimator, PoseStrategy
+from robotpy_apriltag import AprilTagField, loadAprilTagLayoutField
kRobotToCam = wpimath.geometry.Transform3d(
wpimath.geometry.Translation3d(0.5, 0.0, 0.5),
diff --git a/photonlib-python-examples/poseest/swervemodule.py b/photonlib-python-examples/poseest/swervemodule.py
index 02b9987fa..b38e26aed 100644
--- a/photonlib-python-examples/poseest/swervemodule.py
+++ b/photonlib-python-examples/poseest/swervemodule.py
@@ -23,12 +23,13 @@
###################################################################################
import math
+
import wpilib
import wpilib.simulation
-import wpimath.kinematics
+import wpimath.controller
import wpimath.filter
import wpimath.geometry
-import wpimath.controller
+import wpimath.kinematics
import wpimath.trajectory
import wpimath.units
diff --git a/scripts/catnt.py b/scripts/catnt.py
index 8010e6841..8ab58c6c8 100644
--- a/scripts/catnt.py
+++ b/scripts/catnt.py
@@ -1,6 +1,7 @@
-from time import sleep
-import ntcore
import argparse
+from time import sleep
+
+import ntcore
from tabulate import tabulate