Added //external:python-gflags and //external:python-glog

Change-Id: Iebaf8f4fa8574eba0636cf4a2804afbf979a197c
diff --git a/WORKSPACE b/WORKSPACE
index 999c66a..43ee6e5 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -44,3 +44,28 @@
   sha256 = '9d92b513b627c4aaa93d4d8049b4c6b96a532b64df11b27fde4dead58347a9f6',
   url = 'http://frc971.org/Build-Dependencies/arm-frc-linux-gnueabi_4.9.3.tar.gz',
 )
+
+new_git_repository(
+  name = 'python-gflags-repo',
+  remote = 'https://github.com/gflags/python-gflags.git',
+  build_file = 'debian/gflags.BUILD',
+  commit = '41c4571864f0db5823e07715317e7388e94faabc',
+)
+
+bind(
+  name = 'python-gflags',
+  actual = '@python-gflags-repo//:gflags',
+)
+
+new_http_archive(
+  name = 'python-glog-repo',
+  build_file = 'debian/glog.BUILD',
+  sha256 = '953fd80122c48023d1148e6d1bda2763fcab59c8a81682bb298238a5935547b0',
+  url = 'https://pypi.python.org/packages/source/g/glog/glog-0.1.tar.gz',
+  strip_prefix = 'glog-0.1',
+)
+
+bind(
+  name = 'python-glog',
+  actual = '@python-glog-repo//:glog',
+)
diff --git a/debian/gflags.BUILD b/debian/gflags.BUILD
new file mode 100644
index 0000000..73037db
--- /dev/null
+++ b/debian/gflags.BUILD
@@ -0,0 +1,67 @@
+py_library(
+  name = 'gflags',
+  visibility = ['//visibility:public'],
+  srcs = [
+    'gflags_validators.py',
+    'gflags2man.py',
+    'gflags.py',
+  ],
+)
+
+py_library(
+  name = 'gflags_googletest',
+  srcs = [
+    'tests/gflags_googletest.py',
+  ],
+)
+
+py_test(
+  name = 'gflags_validators_test',
+  srcs = [
+    'tests/gflags_validators_test.py',
+  ],
+  deps = [
+    ':gflags',
+    ':gflags_googletest',
+  ],
+  size = 'small',
+)
+
+py_library(
+  name = 'flags_modules_for_testing',
+  srcs = [
+    'tests/flags_modules_for_testing/__init__.py',
+    'tests/flags_modules_for_testing/module_bar.py',
+    'tests/flags_modules_for_testing/module_baz.py',
+    'tests/flags_modules_for_testing/module_foo.py',
+  ],
+  deps = [
+    ':gflags',
+  ],
+)
+
+py_test(
+  name = 'gflags_unittest',
+  srcs = [
+    'tests/gflags_unittest.py',
+  ],
+  deps = [
+    ':flags_modules_for_testing',
+    ':gflags',
+    ':gflags_googletest',
+  ],
+  size = 'small',
+)
+
+py_test(
+  name = 'gflags_helpxml_test',
+  srcs = [
+    'tests/gflags_helpxml_test.py',
+  ],
+  deps = [
+    ':flags_modules_for_testing',
+    ':gflags',
+    ':gflags_googletest',
+  ],
+  size = 'small',
+)
diff --git a/y2014/control_loops/python/BUILD b/y2014/control_loops/python/BUILD
index 21406e3..f900152 100644
--- a/y2014/control_loops/python/BUILD
+++ b/y2014/control_loops/python/BUILD
@@ -6,6 +6,8 @@
     'drivetrain.py',
   ],
   deps = [
+    '//external:python-gflags',
+    '//external:python-glog',
     '//frc971/control_loops/python:controls',
   ],
 )
@@ -18,6 +20,8 @@
   ],
   deps = [
     '//frc971/control_loops/python:controls',
+    '//external:python-gflags',
+    '//external:python-glog',
   ],
 )
 
diff --git a/y2014/control_loops/python/drivetrain.py b/y2014/control_loops/python/drivetrain.py
index 8b17853..43d5a19 100755
--- a/y2014/control_loops/python/drivetrain.py
+++ b/y2014/control_loops/python/drivetrain.py
@@ -7,6 +7,12 @@
 import argparse
 from matplotlib import pylab
 
+import gflags
+import glog
+
+FLAGS = gflags.FLAGS
+
+gflags.DEFINE_bool('plot', False, 'If true, plot the loop response.')
 
 class CIM(control_loop.ControlLoop):
   def __init__(self):
@@ -142,9 +148,9 @@
                            [0.0, (1.0 / (12.0 ** 2.0))]])
     self.K = controls.dlqr(self.A, self.B, self.Q, self.R)
 
-    print "DT K", name
-    print self.K
-    print numpy.linalg.eig(self.A - self.B * self.K)[0]
+    glog.debug('DT K %s', name)
+    glog.debug(str(self.K))
+    glog.debug(str(numpy.linalg.eig(self.A - self.B * self.K)[0]))
 
     self.hlp = 0.3
     self.llp = 0.4
@@ -215,14 +221,7 @@
 
 
 def main(argv):
-  parser = argparse.ArgumentParser(description='Calculate drivetrain.')
-  parser.add_argument('--plot', action='store_true', default=False, help='If true, plot')
-  parser.add_argument('drivetrainh')
-  parser.add_argument('drivetraincc')
-  parser.add_argument('kalman_drivetrainh')
-  parser.add_argument('kalman_drivetraincc')
-
-  args = parser.parse_args(argv[1:])
+  argv = FLAGS(argv)
 
   # Simulate the response of the system to a step input.
   drivetrain = Drivetrain()
@@ -233,7 +232,7 @@
     simulated_left.append(drivetrain.X[0, 0])
     simulated_right.append(drivetrain.X[2, 0])
 
-  if args.plot:
+  if FLAGS.plot:
     pylab.plot(range(100), simulated_left)
     pylab.plot(range(100), simulated_right)
     pylab.show()
@@ -251,7 +250,7 @@
     close_loop_left.append(drivetrain.X[0, 0])
     close_loop_right.append(drivetrain.X[2, 0])
 
-  if args.plot:
+  if FLAGS.plot:
     pylab.plot(range(100), close_loop_left)
     pylab.plot(range(100), close_loop_right)
     pylab.show()
@@ -269,7 +268,7 @@
     close_loop_left.append(drivetrain.X[0, 0])
     close_loop_right.append(drivetrain.X[2, 0])
 
-  if args.plot:
+  if FLAGS.plot:
     pylab.plot(range(100), close_loop_left)
     pylab.plot(range(100), close_loop_right)
     pylab.show()
@@ -287,7 +286,7 @@
     close_loop_left.append(drivetrain.X[0, 0])
     close_loop_right.append(drivetrain.X[2, 0])
 
-  if args.plot:
+  if FLAGS.plot:
     pylab.plot(range(100), close_loop_left)
     pylab.plot(range(100), close_loop_right)
     pylab.show()
@@ -344,13 +343,13 @@
     dog_loop_writer.AddConstant(control_loop.Constant("kT", "%f",
           drivetrain_low_low.Kt))
 
-    dog_loop_writer.Write(args.drivetrainh, args.drivetraincc)
+    dog_loop_writer.Write(argv[1], argv[2])
 
     kf_loop_writer = control_loop.ControlLoopWriter(
         "KFDrivetrain", [kf_drivetrain_low_low, kf_drivetrain_low_high,
-                       kf_drivetrain_high_low, kf_drivetrain_high_high],
+                         kf_drivetrain_high_low, kf_drivetrain_high_high],
         namespaces = namespaces)
-    kf_loop_writer.Write(args.kalman_drivetrainh, args.kalman_drivetraincc)
+    kf_loop_writer.Write(argv[3], argv[4])
 
 if __name__ == '__main__':
   sys.exit(main(sys.argv))