]> gitweb.michael.orlitzky.com - dunshire.git/log
dunshire.git
8 years agoAdd a cached method for games that returns the spectral norm of L.
Michael Orlitzky [Sat, 12 Nov 2016 12:34:25 +0000 (07:34 -0500)]
Add a cached method for games that returns the spectral norm of L.

8 years agoPrint a "pass" count during testing loops.
Michael Orlitzky [Fri, 11 Nov 2016 22:33:53 +0000 (17:33 -0500)]
Print a "pass" count during testing loops.

8 years agoBuild looping into the test suite and make doctests optional.
Michael Orlitzky [Fri, 11 Nov 2016 20:52:30 +0000 (15:52 -0500)]
Build looping into the test suite and make doctests optional.

8 years agoAdd two spaces to the tests to make pylint happy.
Michael Orlitzky [Fri, 11 Nov 2016 20:24:19 +0000 (15:24 -0500)]
Add two spaces to the tests to make pylint happy.

8 years agoAdd a ball_radius() method for cones and use it to compute starting points.
Michael Orlitzky [Fri, 11 Nov 2016 20:23:37 +0000 (15:23 -0500)]
Add a ball_radius() method for cones and use it to compute starting points.

8 years agoFix an example in the overview docs, and use ellipses in doctests.
Michael Orlitzky [Fri, 11 Nov 2016 20:18:03 +0000 (15:18 -0500)]
Fix an example in the overview docs, and use ellipses in doctests.

8 years agoUse "2" as a numerically-better factor in player[12]_start().
Michael Orlitzky [Fri, 11 Nov 2016 14:47:48 +0000 (09:47 -0500)]
Use "2" as a numerically-better factor in player[12]_start().

8 years agoAdd the player2_start() method and some tests for it.
Michael Orlitzky [Fri, 11 Nov 2016 14:39:59 +0000 (09:39 -0500)]
Add the player2_start() method and some tests for it.

8 years agoUse player1_start() as the primal starting point and fix some tests.
Michael Orlitzky [Fri, 11 Nov 2016 02:32:48 +0000 (21:32 -0500)]
Use player1_start() as the primal starting point and fix some tests.

8 years agoAdd the player1_start() method and two tests for it.
Michael Orlitzky [Fri, 11 Nov 2016 02:29:42 +0000 (21:29 -0500)]
Add the player1_start() method and two tests for it.

8 years agoMake the _C(), _A(), and _b() methods for games public.
Michael Orlitzky [Fri, 11 Nov 2016 02:26:31 +0000 (21:26 -0500)]
Make the _C(), _A(), and _b() methods for games public.

8 years agoReplace a few member variable references with method calls.
Michael Orlitzky [Fri, 11 Nov 2016 02:23:31 +0000 (21:23 -0500)]
Replace a few member variable references with method calls.

8 years agoAdd the specnorm() function to the matrices module.
Michael Orlitzky [Fri, 11 Nov 2016 01:23:24 +0000 (20:23 -0500)]
Add the specnorm() function to the matrices module.

8 years agoFigure out the base field automatically in condition_number().
Michael Orlitzky [Fri, 11 Nov 2016 01:22:55 +0000 (20:22 -0500)]
Figure out the base field automatically in condition_number().

8 years agoFix a mixup between e1 and e2 in the background documentation.
Michael Orlitzky [Fri, 11 Nov 2016 01:21:57 +0000 (20:21 -0500)]
Fix a mixup between e1 and e2 in the background documentation.

8 years agoAdd a "solutions don't change" test for the ice-cream cone too.
Michael Orlitzky [Thu, 10 Nov 2016 23:21:52 +0000 (18:21 -0500)]
Add a "solutions don't change" test for the ice-cream cone too.

8 years agoTest that we get the same solution if we solve the same game twice.
Michael Orlitzky [Thu, 10 Nov 2016 23:11:57 +0000 (18:11 -0500)]
Test that we get the same solution if we solve the same game twice.

8 years agoRemove the "VERBOSE" option, since you never want to change it.
Michael Orlitzky [Thu, 10 Nov 2016 22:55:40 +0000 (17:55 -0500)]
Remove the "VERBOSE" option, since you never want to change it.

8 years agoAdd a new failing test case.
Michael Orlitzky [Thu, 10 Nov 2016 22:55:12 +0000 (17:55 -0500)]
Add a new failing test case.

8 years agoUse the DEBUG_FLOAT_FORMAT when printing exception details.
Michael Orlitzky [Thu, 10 Nov 2016 21:15:30 +0000 (16:15 -0500)]
Use the DEBUG_FLOAT_FORMAT when printing exception details.

8 years agoUse modifier=4 in the orthogonality tests.
Michael Orlitzky [Thu, 10 Nov 2016 21:08:36 +0000 (16:08 -0500)]
Use modifier=4 in the orthogonality tests.

8 years agoRemove another "unknown" TODO, since those don't seem to happen any more.
Michael Orlitzky [Wed, 9 Nov 2016 14:38:53 +0000 (09:38 -0500)]
Remove another "unknown" TODO, since those don't seem to happen any more.

8 years agoRemove two TODOs that were addressed with larger fudge factors in tests.
Michael Orlitzky [Wed, 9 Nov 2016 14:38:04 +0000 (09:38 -0500)]
Remove two TODOs that were addressed with larger fudge factors in tests.

8 years agoRemove the "unknown" solution TODO, our new heuristic seems to always work.
Michael Orlitzky [Wed, 9 Nov 2016 14:37:24 +0000 (09:37 -0500)]
Remove the "unknown" solution TODO, our new heuristic seems to always work.

8 years agoRemove the "math domain error" TODO, addressed by twiddling MAX_COND.
Michael Orlitzky [Wed, 9 Nov 2016 14:36:39 +0000 (09:36 -0500)]
Remove the "math domain error" TODO, addressed by twiddling MAX_COND.

8 years agoAdd another TODO.
Michael Orlitzky [Wed, 9 Nov 2016 14:36:01 +0000 (09:36 -0500)]
Add another TODO.

8 years agoRemove a fixed TODO.
Michael Orlitzky [Wed, 9 Nov 2016 14:35:23 +0000 (09:35 -0500)]
Remove a fixed TODO.

8 years agoFix docstring formatting of the solution() method.
Michael Orlitzky [Wed, 9 Nov 2016 14:34:41 +0000 (09:34 -0500)]
Fix docstring formatting of the solution() method.

8 years agoFix some pylint warnings.
Michael Orlitzky [Wed, 9 Nov 2016 14:31:44 +0000 (09:31 -0500)]
Fix some pylint warnings.

8 years agoReplace _try_solution() with something more reliable and update tests.
Michael Orlitzky [Wed, 9 Nov 2016 14:23:23 +0000 (09:23 -0500)]
Replace _try_solution() with something more reliable and update tests.

This huge change eliminates _try_solution() entirely. It turns out
that if we just solve with the default tolerance and then *test* what
we get back (regardless of the "status" field), we do better than the
two-phase _try_solution() approach. Well, we fail less, anyway.

The code for solution is now fairly simple. It solves the problem, and
if it isn't infeasible, checks the solution for sanity: the
primal/dual values are close (within 2*ABS_TOL) and the optimal points
are in the cone. If those two things are true, we return the solution
even if CVXOPT said "unknown". This fixes two test failures, which are
now included as doctests to ensure that they can be solved.

Moreover, the value of a game is now set to be the payoff at the
optimal points. Before, we simply took the primal optimal value from
CVXOPT. That was causing some test failures though, and either one is
just as good as the other and mathematically unjustified as yet. There
were existing tests to check the payoff at the optimal points, but they
became redundant and were removed.

Finally, all of the tests have been updated to use more conservative
modifiers, not based on the condition number of the game. Some failures
are still being ironed out, but they are rare.

Note: the _c(), _h(), etc. methods on the game are now overkill since
they are only used once, but they don't hurt I guess.

8 years agoLower MAX_COND down to 125 after witnessing a failure.
Michael Orlitzky [Wed, 9 Nov 2016 14:20:07 +0000 (09:20 -0500)]
Lower MAX_COND down to 125 after witnessing a failure.

8 years agoPut the MAX_COND at 150 for now... until it causes problems.
Michael Orlitzky [Tue, 8 Nov 2016 22:42:20 +0000 (17:42 -0500)]
Put the MAX_COND at 150 for now... until it causes problems.

8 years agoUpdate the project URL.
Michael Orlitzky [Tue, 8 Nov 2016 20:02:53 +0000 (15:02 -0500)]
Update the project URL.

8 years agoAdd two small, well-conditioned games that fail solution as test cases.
Michael Orlitzky [Sun, 6 Nov 2016 13:31:54 +0000 (08:31 -0500)]
Add two small, well-conditioned games that fail solution as test cases.

8 years agoAdd a new DEBUG_FLOAT_FORMAT and use it when raising game exceptions.
Michael Orlitzky [Fri, 4 Nov 2016 23:24:24 +0000 (19:24 -0400)]
Add a new DEBUG_FLOAT_FORMAT and use it when raising game exceptions.

8 years agoAdd game accessor methods for its L, K, e1, e2, and dimension.
Michael Orlitzky [Fri, 4 Nov 2016 23:13:21 +0000 (19:13 -0400)]
Add game accessor methods for its L, K, e1, e2, and dimension.

8 years agoAdd a "checkloop" makefile target to run tests forever.
Michael Orlitzky [Fri, 4 Nov 2016 23:11:45 +0000 (19:11 -0400)]
Add a "checkloop" makefile target to run tests forever.

8 years agoFix a bug in my two-tolerance strategy and add a test case for it.
Michael Orlitzky [Fri, 4 Nov 2016 23:11:23 +0000 (19:11 -0400)]
Fix a bug in my two-tolerance strategy and add a test case for it.

8 years agoAllow longer modules in .pylintrc and ignore some new names.
Michael Orlitzky [Thu, 3 Nov 2016 22:59:53 +0000 (18:59 -0400)]
Allow longer modules in .pylintrc and ignore some new names.

8 years agoDon't pass a sole argument as a keyword.
Michael Orlitzky [Thu, 3 Nov 2016 21:02:51 +0000 (17:02 -0400)]
Don't pass a sole argument as a keyword.

8 years agoUse private methods for the rest of the CVXOPT vectors/matrices.
Michael Orlitzky [Thu, 3 Nov 2016 20:58:17 +0000 (16:58 -0400)]
Use private methods for the rest of the CVXOPT vectors/matrices.

We already had private methods for _zero(), _A(), and _G(). Now we
have them for the rest of the matrices and vectors as well. This
improves consistency, and maybe more importantly prevents people from
ever thinking it's safe to pass the same matrix to CVXOPT twice.

8 years agoAdd more docs for a few private methods and implement the do-over.
Michael Orlitzky [Thu, 3 Nov 2016 19:56:22 +0000 (15:56 -0400)]
Add more docs for a few private methods and implement the do-over.

Some examples and return type documentation were added for the
_zero(), _A(), and _G() methods of SymmetricLinearGame. The _zero()
method was also uncached, since attempting to cache _A() and _G()
revealed that CVXOPT clobbers them. The zero vector appears safe, but
let's play it safe.

This also implements a two-stage retry for the solution of a game. Our
default tolerance is now 1e-6, but when we're trying to solve a game,
we try it with 1e7 first. If we can solve it with the stricter
tolerance, then great. If not, we use the default.

8 years agoTake the condition number into account when evaluating test results.
Michael Orlitzky [Thu, 3 Nov 2016 18:29:21 +0000 (14:29 -0400)]
Take the condition number into account when evaluating test results.

This adds a ``modifier`` parameter to the assert_within_tol() method
used in the SymmetricLinearGame unit tests. The condition number of
the game is always passed in as the modifier, and that lets us allow a
larger tolerance for nasty matrices.

8 years agoPass ABS_TOL to CVXOPT when solving games.
Michael Orlitzky [Thu, 3 Nov 2016 12:08:31 +0000 (08:08 -0400)]
Pass ABS_TOL to CVXOPT when solving games.

Our ABS_TOL is less than the CVXOPT default, and it looks like using
ours reduces the number of "unknown" results that we get. So let's try
that for now.

8 years agoChange EPSILON to something more conservative in the test suite.
Michael Orlitzky [Thu, 3 Nov 2016 12:06:45 +0000 (08:06 -0400)]
Change EPSILON to something more conservative in the test suite.

The old value of EPSILON was more lenient, but the new one can
actually be justified. The tests are currently pretty reliable, but
some tolerance > EPSILON failures are still occurring so this will
probably need to be massaged some more.

8 years agoSet MAX_COND to 100 in the randomgen module to facilitate random testing.
Michael Orlitzky [Thu, 3 Nov 2016 12:06:18 +0000 (08:06 -0400)]
Set MAX_COND to 100 in the randomgen module to facilitate random testing.

8 years agoChange the default tolerance to 1e-6 to reduce unknown solutions.
Michael Orlitzky [Thu, 3 Nov 2016 12:04:42 +0000 (08:04 -0400)]
Change the default tolerance to 1e-6 to reduce unknown solutions.

8 years agoEnsure that e1,e2 are far enough inside K in random_orthant_game().
Michael Orlitzky [Tue, 1 Nov 2016 23:09:39 +0000 (19:09 -0400)]
Ensure that e1,e2 are far enough inside K in random_orthant_game().

8 years agoAdd more doctest examples to the randomgen module.
Michael Orlitzky [Tue, 1 Nov 2016 22:58:18 +0000 (18:58 -0400)]
Add more doctest examples to the randomgen module.

8 years agoUse "..." for floating point output in doctests.
Michael Orlitzky [Tue, 1 Nov 2016 22:49:56 +0000 (18:49 -0400)]
Use "..." for floating point output in doctests.

8 years agoFix typo in last commit.
Michael Orlitzky [Tue, 1 Nov 2016 22:47:22 +0000 (18:47 -0400)]
Fix typo in last commit.

8 years agoEnable doctest ELLIPSIS in a few modules.
Michael Orlitzky [Tue, 1 Nov 2016 22:45:58 +0000 (18:45 -0400)]
Enable doctest ELLIPSIS in a few modules.

8 years agoEnable docs for the new test modules and clean them up.
Michael Orlitzky [Tue, 1 Nov 2016 22:25:23 +0000 (18:25 -0400)]
Enable docs for the new test modules and clean them up.

8 years agoRemove one TODO for a failing test that was caused by a typo (fixed earlier).
Michael Orlitzky [Tue, 1 Nov 2016 22:03:35 +0000 (18:03 -0400)]
Remove one TODO for a failing test that was caused by a typo (fixed earlier).

8 years agoRemove the TODO for the dunshire.matrices tests.
Michael Orlitzky [Tue, 1 Nov 2016 22:03:08 +0000 (18:03 -0400)]
Remove the TODO for the dunshire.matrices tests.

8 years agoRename a test that I mistakenly renamed earlier.
Michael Orlitzky [Tue, 1 Nov 2016 22:02:30 +0000 (18:02 -0400)]
Rename a test that I mistakenly renamed earlier.

8 years agoImprove the two no-clobber tests with deepcopy().
Michael Orlitzky [Tue, 1 Nov 2016 22:01:51 +0000 (18:01 -0400)]
Improve the two no-clobber tests with deepcopy().

8 years agoComment my new method-rgx in .pylintrc.
Michael Orlitzky [Tue, 1 Nov 2016 21:55:27 +0000 (17:55 -0400)]
Comment my new method-rgx in .pylintrc.

8 years agoClean up and document some of the new test code.
Michael Orlitzky [Tue, 1 Nov 2016 21:54:31 +0000 (17:54 -0400)]
Clean up and document some of the new test code.

8 years agoAdd a new unit test suite for the dunshire.matrices module.
Michael Orlitzky [Tue, 1 Nov 2016 18:36:54 +0000 (14:36 -0400)]
Add a new unit test suite for the dunshire.matrices module.

8 years agoEnable and fix doctests for the new randomgen module.
Michael Orlitzky [Tue, 1 Nov 2016 17:20:05 +0000 (13:20 -0400)]
Enable and fix doctests for the new randomgen module.

8 years agoFactor out the random test generation code into a new module.
Michael Orlitzky [Tue, 1 Nov 2016 17:15:28 +0000 (13:15 -0400)]
Factor out the random test generation code into a new module.

8 years agoMake the SymmetricLinearGame.condition() method public.
Michael Orlitzky [Tue, 1 Nov 2016 17:14:50 +0000 (13:14 -0400)]
Make the SymmetricLinearGame.condition() method public.

8 years agoFix a pylint warning in the matrices module.
Michael Orlitzky [Tue, 1 Nov 2016 17:11:56 +0000 (13:11 -0400)]
Fix a pylint warning in the matrices module.

8 years agoFix a pylint warning for a top-level variable name in test/__main__.py.
Michael Orlitzky [Tue, 1 Nov 2016 17:07:08 +0000 (13:07 -0400)]
Fix a pylint warning for a top-level variable name in test/__main__.py.

8 years agoUse a shebang for the main test executable.
Michael Orlitzky [Tue, 1 Nov 2016 16:27:56 +0000 (12:27 -0400)]
Use a shebang for the main test executable.

This replaces the "python test/" call with "./test/__main__py". It
may seem like a pointless change, but the former will always use
whatever "python" points to, and the latter will use the contents of
the shebang in "__main__.py". Distributions can fix the shebang on
that one file to ensure that the test suite is run with the proper
version of python.

8 years agoRemove some debug print() statements and fix a copy-paste-o in the tests.
Michael Orlitzky [Tue, 1 Nov 2016 12:57:29 +0000 (08:57 -0400)]
Remove some debug print() statements and fix a copy-paste-o in the tests.

8 years agoAdd another failing test TODO, and one about a payoff() method.
Michael Orlitzky [Tue, 1 Nov 2016 12:57:05 +0000 (08:57 -0400)]
Add another failing test TODO, and one about a payoff() method.

8 years agoAdd another testing TODO.
Michael Orlitzky [Tue, 1 Nov 2016 01:50:02 +0000 (21:50 -0400)]
Add another testing TODO.

8 years agoOverhaul the tests to get more predictable behavior.
Michael Orlitzky [Tue, 1 Nov 2016 00:15:50 +0000 (20:15 -0400)]
Overhaul the tests to get more predictable behavior.

The most important change to the SymmetricLinearGame tests is that we
now check the condition numbers of the generated games. That prevents
most of the numerical trouble experienced before, and solves a few
open TODO items.

A RANDOM_MAX constant was introduced, and incorporated into the fudge
factor for the absolute tolerance used in tests. That contributes to
fixing the open TODO items as well.

The test code itself is pretty ugly now, but it can be fixed once they
all pass reliably (there's still a Lyapunov-like test failing).

8 years agoSet options.ABS_TOL to 1e-7; we should adjust it elsewhere if needed.
Michael Orlitzky [Tue, 1 Nov 2016 00:11:26 +0000 (20:11 -0400)]
Set options.ABS_TOL to 1e-7; we should adjust it elsewhere if needed.

8 years agoAdd a fudge factor of two when checking "unknown" conelp results.
Michael Orlitzky [Tue, 1 Nov 2016 00:10:51 +0000 (20:10 -0400)]
Add a fudge factor of two when checking "unknown" conelp results.

8 years agoAdd two more TODOs, one minor, and one bad test failure.
Michael Orlitzky [Tue, 1 Nov 2016 00:10:24 +0000 (20:10 -0400)]
Add two more TODOs, one minor, and one bad test failure.

8 years agoHalve the definition of the condition number of a game.
Michael Orlitzky [Sun, 30 Oct 2016 22:51:57 +0000 (18:51 -0400)]
Halve the definition of the condition number of a game.

8 years agoAdd a TODO to avoid comparing floats in doctests.
Michael Orlitzky [Sun, 30 Oct 2016 22:44:33 +0000 (18:44 -0400)]
Add a TODO to avoid comparing floats in doctests.

8 years agoAdd the condition number of the game to its string representation.
Michael Orlitzky [Sun, 30 Oct 2016 21:24:30 +0000 (17:24 -0400)]
Add the condition number of the game to its string representation.

8 years agoAdd a PoorScalingException for the "math domain errors" that haunt me.
Michael Orlitzky [Sun, 30 Oct 2016 20:40:58 +0000 (16:40 -0400)]
Add a PoorScalingException for the "math domain errors" that haunt me.

8 years agoDocument a missing parameter for GameUnsolvableExceptions.
Michael Orlitzky [Sun, 30 Oct 2016 20:40:32 +0000 (16:40 -0400)]
Document a missing parameter for GameUnsolvableExceptions.

8 years agoAdd the condition_number() function to the matrices module.
Michael Orlitzky [Sun, 30 Oct 2016 20:27:45 +0000 (16:27 -0400)]
Add the condition_number() function to the matrices module.

8 years agoAdd a "typecode" parameter to the identity() matrix function.
Michael Orlitzky [Sun, 30 Oct 2016 20:27:12 +0000 (16:27 -0400)]
Add a "typecode" parameter to the identity() matrix function.

8 years agoAdd yet another TODO for failing tests.
Michael Orlitzky [Sun, 30 Oct 2016 19:19:56 +0000 (15:19 -0400)]
Add yet another TODO for failing tests.

8 years agoExit with a non-zero code when the test suite fails.
Michael Orlitzky [Sun, 30 Oct 2016 17:39:08 +0000 (13:39 -0400)]
Exit with a non-zero code when the test suite fails.

8 years agoAdd two more TODOs concerning failing tests.
Michael Orlitzky [Sun, 30 Oct 2016 17:38:31 +0000 (13:38 -0400)]
Add two more TODOs concerning failing tests.

8 years agoClean up a few pylint warnings and make "doc" a phony target.
Michael Orlitzky [Wed, 26 Oct 2016 18:31:34 +0000 (14:31 -0400)]
Clean up a few pylint warnings and make "doc" a phony target.

8 years agoUpdate Sphinx with the new directory structure.
Michael Orlitzky [Wed, 26 Oct 2016 18:16:20 +0000 (14:16 -0400)]
Update Sphinx with the new directory structure.

8 years agoAdd setup.py and reorganize everything to make its "test" command happy.
Michael Orlitzky [Wed, 26 Oct 2016 18:05:20 +0000 (14:05 -0400)]
Add setup.py and reorganize everything to make its "test" command happy.

8 years agoRemove a unicode hyphen from a reference.
Michael Orlitzky [Wed, 26 Oct 2016 18:05:00 +0000 (14:05 -0400)]
Remove a unicode hyphen from a reference.

8 years agoAdd the AGPL3 license.
Michael Orlitzky [Wed, 26 Oct 2016 17:07:59 +0000 (13:07 -0400)]
Add the AGPL3 license.

8 years agoPylint cleanup for tests.
Michael Orlitzky [Sun, 16 Oct 2016 04:51:24 +0000 (00:51 -0400)]
Pylint cleanup for tests.

8 years agoRemove two more defunct TODO items.
Michael Orlitzky [Sun, 16 Oct 2016 04:43:43 +0000 (00:43 -0400)]
Remove two more defunct TODO items.

8 years agoPrint the game data along with every GameUnsolvableException.
Michael Orlitzky [Sun, 16 Oct 2016 04:42:48 +0000 (00:42 -0400)]
Print the game data along with every GameUnsolvableException.

8 years agoRename "xi" and "gamma" to "p" and "q" to avoid name clashes with CVXOPT.
Michael Orlitzky [Sun, 16 Oct 2016 04:24:05 +0000 (00:24 -0400)]
Rename "xi" and "gamma" to "p" and "q" to avoid name clashes with CVXOPT.

8 years agoRemove a few completed TODO items.
Michael Orlitzky [Sun, 16 Oct 2016 01:49:12 +0000 (21:49 -0400)]
Remove a few completed TODO items.

8 years agoSeparate and organize the various documentation sections.
Michael Orlitzky [Sun, 16 Oct 2016 01:48:16 +0000 (21:48 -0400)]
Separate and organize the various documentation sections.

8 years agoReorganize the test source code and doc building.
Michael Orlitzky [Sun, 16 Oct 2016 01:12:16 +0000 (21:12 -0400)]
Reorganize the test source code and doc building.

8 years agoMove unit test code into its own file (unders test/ instead of src/).
Michael Orlitzky [Sat, 15 Oct 2016 23:49:48 +0000 (19:49 -0400)]
Move unit test code into its own file (unders test/ instead of src/).

8 years agoAdd another TODO.
Michael Orlitzky [Sat, 15 Oct 2016 22:55:09 +0000 (18:55 -0400)]
Add another TODO.

8 years agoSwitch to Mathjax for the docs and finish the "Background" section.
Michael Orlitzky [Sat, 15 Oct 2016 22:53:59 +0000 (18:53 -0400)]
Switch to Mathjax for the docs and finish the "Background" section.

8 years agoRemove a completed TODO.
Michael Orlitzky [Sat, 15 Oct 2016 21:54:12 +0000 (17:54 -0400)]
Remove a completed TODO.

8 years agoEnable doctesting of ReST docs with `make doctest`.
Michael Orlitzky [Sat, 15 Oct 2016 21:53:48 +0000 (17:53 -0400)]
Enable doctesting of ReST docs with `make doctest`.