diff --git a/y2020/control_loops/python/accelerator.py b/y2020/control_loops/python/accelerator.py
index bb6871c..54ec9d3 100644
--- a/y2020/control_loops/python/accelerator.py
+++ b/y2020/control_loops/python/accelerator.py
@@ -20,20 +20,19 @@
 # Gear ratio to the final wheel.
 G = (30.0 / 40.0) * numpy.power(G_per_wheel, 3.0)
 # Overall flywheel inertia.
-J = J_wheel * (
-    1.0 + numpy.power(G_per_wheel, -2.0) + numpy.power(G_per_wheel, -4.0) + numpy.power(G_per_wheel, -6.0))
+J = J_wheel * (1.0 + numpy.power(G_per_wheel, -2.0) +
+               numpy.power(G_per_wheel, -4.0) + numpy.power(G_per_wheel, -6.0))
 
 # The position and velocity are measured for the final wheel.
-kAccelerator = flywheel.FlywheelParams(
-    name='Accelerator',
-    motor=control_loop.Falcon(),
-    G=G,
-    J=J * 1.3,
-    q_pos=0.01,
-    q_vel=40.0,
-    q_voltage=1.0,
-    r_pos=0.03,
-    controller_poles=[.89])
+kAccelerator = flywheel.FlywheelParams(name='Accelerator',
+                                       motor=control_loop.Falcon(),
+                                       G=G,
+                                       J=J * 1.3,
+                                       q_pos=0.01,
+                                       q_vel=40.0,
+                                       q_voltage=1.0,
+                                       r_pos=0.03,
+                                       controller_poles=[.89])
 
 
 def main(argv):
diff --git a/y2020/control_loops/python/control_panel.py b/y2020/control_loops/python/control_panel.py
index 7a5bdf9..6bda841 100644
--- a/y2020/control_loops/python/control_panel.py
+++ b/y2020/control_loops/python/control_panel.py
@@ -17,17 +17,16 @@
 except gflags.DuplicateFlagError:
     pass
 
-kControlPanel = angular_system.AngularSystemParams(
-    name='ControlPanel',
-    motor=control_loop.BAG(),
-    G=1.0,
-    J=0.000009,
-    q_pos=0.20,
-    q_vel=5.0,
-    kalman_q_pos=0.12,
-    kalman_q_vel=2.0,
-    kalman_q_voltage=4.0,
-    kalman_r_position=0.05)
+kControlPanel = angular_system.AngularSystemParams(name='ControlPanel',
+                                                   motor=control_loop.BAG(),
+                                                   G=1.0,
+                                                   J=0.000009,
+                                                   q_pos=0.20,
+                                                   q_vel=5.0,
+                                                   kalman_q_pos=0.12,
+                                                   kalman_q_vel=2.0,
+                                                   kalman_q_voltage=4.0,
+                                                   kalman_r_position=0.05)
 
 
 def main(argv):
@@ -42,7 +41,9 @@
             'Expected .h file name and .cc file name for the control_panel and integral control_panel.'
         )
     else:
-        namespaces = ['y2020', 'control_loops', 'superstructure', 'control_panel']
+        namespaces = [
+            'y2020', 'control_loops', 'superstructure', 'control_panel'
+        ]
         angular_system.WriteAngularSystem(kControlPanel, argv[1:3], argv[3:5],
                                           namespaces)
 
diff --git a/y2020/control_loops/python/finisher.py b/y2020/control_loops/python/finisher.py
index 8c33cc3..7e703fc 100644
--- a/y2020/control_loops/python/finisher.py
+++ b/y2020/control_loops/python/finisher.py
@@ -22,14 +22,17 @@
 J = 0.00507464
 J = 0.0035
 
+
 def AddResistance(motor, resistance):
     motor.resistance += resistance
     return motor
 
+
 def ScaleKv(motor, scale):
     motor.Kv *= scale
     return motor
 
+
 # The position and velocity are measured for the final wheel.
 kFinisher = flywheel.FlywheelParams(
     name='Finisher',
diff --git a/y2020/control_loops/python/flywheel.py b/y2020/control_loops/python/flywheel.py
index 6f41a17..9153bc6 100755
--- a/y2020/control_loops/python/flywheel.py
+++ b/y2020/control_loops/python/flywheel.py
@@ -7,6 +7,7 @@
 
 
 class FlywheelParams(object):
+
     def __init__(self,
                  name,
                  motor,
@@ -31,6 +32,7 @@
 
 
 class VelocityFlywheel(control_loop.HybridControlLoop):
+
     def __init__(self, params, name="Flywheel"):
         super(VelocityFlywheel, self).__init__(name=name)
         self.params = params
@@ -76,6 +78,7 @@
 
 
 class Flywheel(VelocityFlywheel):
+
     def __init__(self, params, name="Flywheel"):
         super(Flywheel, self).__init__(params, name=name)
 
@@ -112,6 +115,7 @@
 
 
 class IntegralFlywheel(Flywheel):
+
     def __init__(self, params, name="IntegralFlywheel"):
         super(IntegralFlywheel, self).__init__(params, name=name)
 
@@ -125,7 +129,6 @@
         self.B_continuous = numpy.matrix(numpy.zeros((3, 1)))
         self.B_continuous[0:2, 0] = self.B_continuous_unaugmented
 
-
         # states
         # [position, velocity, voltage_error]
         self.C_unaugmented = self.C
@@ -146,24 +149,26 @@
         q_vel = self.params.q_vel
         q_voltage = self.params.q_voltage
         self.Q_continuous = numpy.matrix([[(q_pos**2.0), 0.0, 0.0],
-                               [0.0, (q_vel**2.0), 0.0],
-                               [0.0, 0.0, (q_voltage**2.0)]])
+                                          [0.0, (q_vel**2.0), 0.0],
+                                          [0.0, 0.0, (q_voltage**2.0)]])
 
         r_pos = self.params.r_pos
         self.R_continuous = numpy.matrix([[(r_pos**2.0)]])
 
-        _, _, self.Q, self.R = controls.kalmd(
-            A_continuous=self.A_continuous,
-            B_continuous=self.B_continuous,
-            Q_continuous=self.Q_continuous,
-            R_continuous=self.R_continuous,
-            dt=self.dt)
+        _, _, self.Q, self.R = controls.kalmd(A_continuous=self.A_continuous,
+                                              B_continuous=self.B_continuous,
+                                              Q_continuous=self.Q_continuous,
+                                              R_continuous=self.R_continuous,
+                                              dt=self.dt)
 
         glog.debug('Q_discrete %s' % (str(self.Q)))
         glog.debug('R_discrete %s' % (str(self.R)))
 
-        self.KalmanGain, self.P_steady_state = controls.kalman(
-            A=self.A, B=self.B, C=self.C, Q=self.Q, R=self.R)
+        self.KalmanGain, self.P_steady_state = controls.kalman(A=self.A,
+                                                               B=self.B,
+                                                               C=self.C,
+                                                               Q=self.Q,
+                                                               R=self.R)
         self.L = self.A * self.KalmanGain
 
         self.K_unaugmented = self.K
@@ -283,34 +288,32 @@
         for index, param in enumerate(params):
             flywheels.append(Flywheel(param, name=param.name + str(index)))
             integral_flywheels.append(
-                IntegralFlywheel(
-                    param, name='Integral' + param.name + str(index)))
+                IntegralFlywheel(param,
+                                 name='Integral' + param.name + str(index)))
     else:
         name = params.name
         flywheels.append(Flywheel(params, params.name))
         integral_flywheels.append(
             IntegralFlywheel(params, name='Integral' + params.name))
 
-    loop_writer = control_loop.ControlLoopWriter(
-        name, flywheels, namespaces=namespace)
+    loop_writer = control_loop.ControlLoopWriter(name,
+                                                 flywheels,
+                                                 namespaces=namespace)
     loop_writer.AddConstant(
-        control_loop.Constant('kOutputRatio', '%f',
-                              flywheels[0].G))
+        control_loop.Constant('kOutputRatio', '%f', flywheels[0].G))
     loop_writer.AddConstant(
         control_loop.Constant('kFreeSpeed', '%f',
                               flywheels[0].motor.free_speed))
     loop_writer.AddConstant(
-        control_loop.Constant(
-            'kBemf',
-            '%f',
-            flywheels[0].motor.Kv * flywheels[0].G,
-            comment="// Radians/sec / volt"))
+        control_loop.Constant('kBemf',
+                              '%f',
+                              flywheels[0].motor.Kv * flywheels[0].G,
+                              comment="// Radians/sec / volt"))
     loop_writer.AddConstant(
-        control_loop.Constant(
-            'kResistance',
-            '%f',
-            flywheels[0].motor.resistance,
-            comment="// Ohms"))
+        control_loop.Constant('kResistance',
+                              '%f',
+                              flywheels[0].motor.resistance,
+                              comment="// Ohms"))
     loop_writer.Write(plant_files[0], plant_files[1])
 
     integral_loop_writer = control_loop.ControlLoopWriter(
diff --git a/y2020/control_loops/python/hood.py b/y2020/control_loops/python/hood.py
index eacb7fd..8125f8b 100644
--- a/y2020/control_loops/python/hood.py
+++ b/y2020/control_loops/python/hood.py
@@ -29,17 +29,17 @@
 
 radians_per_turn_of_motor = 12.0 / 60.0 * radians_per_turn
 
-kHood = angular_system.AngularSystemParams(
-    name='Hood',
-    motor=control_loop.BAG(),
-    G=radians_per_turn_of_motor / (2.0 * numpy.pi),
-    J=0.1,
-    q_pos=0.15,
-    q_vel=10.0,
-    kalman_q_pos=0.12,
-    kalman_q_vel=10.0,
-    kalman_q_voltage=30.0,
-    kalman_r_position=0.02)
+kHood = angular_system.AngularSystemParams(name='Hood',
+                                           motor=control_loop.BAG(),
+                                           G=radians_per_turn_of_motor /
+                                           (2.0 * numpy.pi),
+                                           J=0.1,
+                                           q_pos=0.15,
+                                           q_vel=10.0,
+                                           kalman_q_pos=0.12,
+                                           kalman_q_vel=10.0,
+                                           kalman_q_voltage=30.0,
+                                           kalman_r_position=0.02)
 
 
 def main(argv):
diff --git a/y2020/control_loops/python/intake.py b/y2020/control_loops/python/intake.py
index 1035070..87896dd 100644
--- a/y2020/control_loops/python/intake.py
+++ b/y2020/control_loops/python/intake.py
@@ -17,17 +17,17 @@
 except gflags.DuplicateFlagError:
     pass
 
-kIntake = angular_system.AngularSystemParams(
-    name='Intake',
-    motor=control_loop.BAG(),
-    G=(12.0 / 24.0) * (1.0 / 5.0) * (1.0 / 5.0) * (16.0 / 32.0),
-    J=8 * 0.139 * 0.139,
-    q_pos=0.40,
-    q_vel=20.0,
-    kalman_q_pos=0.12,
-    kalman_q_vel=2.0,
-    kalman_q_voltage=4.0,
-    kalman_r_position=0.05)
+kIntake = angular_system.AngularSystemParams(name='Intake',
+                                             motor=control_loop.BAG(),
+                                             G=(12.0 / 24.0) * (1.0 / 5.0) *
+                                             (1.0 / 5.0) * (16.0 / 32.0),
+                                             J=8 * 0.139 * 0.139,
+                                             q_pos=0.40,
+                                             q_vel=20.0,
+                                             kalman_q_pos=0.12,
+                                             kalman_q_vel=2.0,
+                                             kalman_q_voltage=4.0,
+                                             kalman_r_position=0.05)
 
 
 def main(argv):
diff --git a/y2020/control_loops/python/polydrivetrain.py b/y2020/control_loops/python/polydrivetrain.py
index dad06b0..dbd5268 100644
--- a/y2020/control_loops/python/polydrivetrain.py
+++ b/y2020/control_loops/python/polydrivetrain.py
@@ -12,20 +12,22 @@
 FLAGS = gflags.FLAGS
 
 try:
-  gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
+    gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 except gflags.DuplicateFlagError:
-  pass
+    pass
+
 
 def main(argv):
-  if FLAGS.plot:
-    polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
-  elif len(argv) != 7:
-    glog.fatal('Expected .h file name and .cc file name')
-  else:
-    polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7], 'y2020',
-                                       drivetrain.kDrivetrain)
+    if FLAGS.plot:
+        polydrivetrain.PlotPolyDrivetrainMotions(drivetrain.kDrivetrain)
+    elif len(argv) != 7:
+        glog.fatal('Expected .h file name and .cc file name')
+    else:
+        polydrivetrain.WritePolyDrivetrain(argv[1:3], argv[3:5], argv[5:7],
+                                           'y2020', drivetrain.kDrivetrain)
+
 
 if __name__ == '__main__':
-  argv = FLAGS(sys.argv)
-  glog.init()
-  sys.exit(main(argv))
+    argv = FLAGS(sys.argv)
+    glog.init()
+    sys.exit(main(argv))
diff --git a/y2020/control_loops/python/turret.py b/y2020/control_loops/python/turret.py
index 6f15057..5f77f84 100644
--- a/y2020/control_loops/python/turret.py
+++ b/y2020/control_loops/python/turret.py
@@ -18,17 +18,18 @@
 except gflags.DuplicateFlagError:
     pass
 
-kTurret = angular_system.AngularSystemParams(
-    name='Turret',
-    motor=control_loop.MiniCIM(),
-    G=(26.0 / 150.0) * (14.0 / 60.0) * (20.0 / 60.0),
-    J=0.20,
-    q_pos=0.30,
-    q_vel=4.5,
-    kalman_q_pos=0.12,
-    kalman_q_vel=10.0,
-    kalman_q_voltage=20.0,
-    kalman_r_position=0.05)
+kTurret = angular_system.AngularSystemParams(name='Turret',
+                                             motor=control_loop.MiniCIM(),
+                                             G=(26.0 / 150.0) * (14.0 / 60.0) *
+                                             (20.0 / 60.0),
+                                             J=0.20,
+                                             q_pos=0.30,
+                                             q_vel=4.5,
+                                             kalman_q_pos=0.12,
+                                             kalman_q_vel=10.0,
+                                             kalman_q_voltage=20.0,
+                                             kalman_r_position=0.05)
+
 
 def main(argv):
     if FLAGS.plot:
@@ -38,13 +39,11 @@
 
     # Write the generated constants out to a file.
     if len(argv) != 5:
-        glog.fatal(
-            'Expected .h file name and .cc file name for the turret.'
-        )
+        glog.fatal('Expected .h file name and .cc file name for the turret.')
     else:
         namespaces = ['y2020', 'control_loops', 'superstructure', 'turret']
-        angular_system.WriteAngularSystem([kTurret],
-                                          argv[1:3], argv[3:5], namespaces)
+        angular_system.WriteAngularSystem([kTurret], argv[1:3], argv[3:5],
+                                          namespaces)
 
 
 if __name__ == '__main__':
