From ec79344bf80b78e19eca1af452a9a3df40f39e4e Mon Sep 17 00:00:00 2001 From: Cameron Brown Date: Sun, 22 May 2022 21:20:34 +0100 Subject: [PATCH 1/3] Repackages into a Pythonic module layout for usage as a library The top-level module is now `splitbrain` with exports for the various algorithm implementations, the protocol buffer definition and the statistics methods. --- __init__.py | 4 ++++ splitbrain.py => algorithm.py | 0 splitbrain_benchmark.py => algorithm_benchmark.py | 4 ++-- splitbrain_test.py => algorithm_test.py | 6 +++--- main.py | 5 ++--- 5 files changed, 11 insertions(+), 8 deletions(-) create mode 100644 __init__.py rename splitbrain.py => algorithm.py (100%) rename splitbrain_benchmark.py => algorithm_benchmark.py (87%) rename splitbrain_test.py => algorithm_test.py (95%) diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..4f6c813 --- /dev/null +++ b/__init__.py @@ -0,0 +1,4 @@ +from algorithm import NullAlgorithm +from algorithm import AlgorithmV1 +from algorithm import AlgorithmV2 +from statistics import evaluate \ No newline at end of file diff --git a/splitbrain.py b/algorithm.py similarity index 100% rename from splitbrain.py rename to algorithm.py diff --git a/splitbrain_benchmark.py b/algorithm_benchmark.py similarity index 87% rename from splitbrain_benchmark.py rename to algorithm_benchmark.py index 9d28e7e..273b1c9 100644 --- a/splitbrain_benchmark.py +++ b/algorithm_benchmark.py @@ -1,6 +1,6 @@ import networkx as nx import google_benchmark as benchmark -import splitbrain +from splitbrain import SplitbrainV2 @benchmark.register @@ -13,7 +13,7 @@ def benchmark_fib(state): G.add_edge("do_fib", "fib") G.remove_edges_from(nx.selfloop_edges(G)) - algorithm = splitbrain.SplitbrainV2() + algorithm = SplitbrainV2() while state: algorithm.run(G) diff --git a/splitbrain_test.py b/algorithm_test.py similarity index 95% rename from splitbrain_test.py rename to algorithm_test.py index 2026819..47ad803 100644 --- a/splitbrain_test.py +++ b/algorithm_test.py @@ -1,7 +1,7 @@ from re import X from absl.testing import absltest -import splitbrain -import statistics +from splitbrain import SplitbrainV2 +from splitbrain import statistics import graphdef_utils import program_graph_pb2 @@ -18,7 +18,7 @@ def test_fib(self): graphdef = graphdef_utils.load_graphdef_from_file( "testdata/example_graph.textproto") G = graphdef_utils.make_graph_from_proto(graphdef) - algorithm = splitbrain.SplitbrainV2() + algorithm = SplitbrainV2() CLs = algorithm.run(G) self.assertEqual(CLs, [['fib', 'my_error'], ['do_fib']]) diff --git a/main.py b/main.py index 2a5ba65..a77acdd 100644 --- a/main.py +++ b/main.py @@ -11,7 +11,6 @@ import networkx as nx import program_graph_pb2 import splitbrain -import statistics import graphdef_utils from absl import app @@ -93,8 +92,8 @@ def main(argv): if FLAGS.output_dir is None: raise Exception("output_dir cannot be empty if --enable_statistics.") print('Writing statistics to disk.') - stats_pb = statistics.evaluate(G, CLs, graphdef, algorithm=algorithm_name, - cl_identifier=FLAGS.cl_identifier) + stats_pb = splitbrainn.evaluate(G, CLs, graphdef, algorithm=algorithm_name, + cl_identifier=FLAGS.cl_identifier) _write_statistics_to_disk(FLAGS.output_dir, stats_pb, algorithm=algorithm_name, From c0470dc3a8e25025d3e0ea6de2561b193823ab23 Mon Sep 17 00:00:00 2001 From: Cameron Brown Date: Sun, 22 May 2022 21:26:57 +0100 Subject: [PATCH 2/3] Fix build --- __init__.py | 3 ++- algorithm_test.py | 3 ++- main.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/__init__.py b/__init__.py index 4f6c813..13d9eea 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,5 @@ from algorithm import NullAlgorithm from algorithm import AlgorithmV1 from algorithm import AlgorithmV2 -from statistics import evaluate \ No newline at end of file +from statistics import evaluate +import program_graph_pb2 \ No newline at end of file diff --git a/algorithm_test.py b/algorithm_test.py index 47ad803..36146ce 100644 --- a/algorithm_test.py +++ b/algorithm_test.py @@ -1,6 +1,7 @@ from re import X from absl.testing import absltest from splitbrain import SplitbrainV2 +from splitbrain import SplitbrainV1 from splitbrain import statistics import graphdef_utils import program_graph_pb2 @@ -52,7 +53,7 @@ def test_SplitbrainV1_only_uses_bazel(self): nodedef.kind = program_graph_pb2.NodeDef.Kind.SYMBOL graphdef = program_graph_pb2.GraphDef() graphdef.symbol.append(nodedef) - self.assertFalse(splitbrain.SplitbrainV1().is_valid(graphdef)) + self.assertFalse(SplitbrainV1().is_valid(graphdef)) if __name__ == '__main__': diff --git a/main.py b/main.py index a77acdd..d2afcaf 100644 --- a/main.py +++ b/main.py @@ -92,7 +92,7 @@ def main(argv): if FLAGS.output_dir is None: raise Exception("output_dir cannot be empty if --enable_statistics.") print('Writing statistics to disk.') - stats_pb = splitbrainn.evaluate(G, CLs, graphdef, algorithm=algorithm_name, + stats_pb = splitbrain.evaluate(G, CLs, graphdef, algorithm=algorithm_name, cl_identifier=FLAGS.cl_identifier) _write_statistics_to_disk(FLAGS.output_dir, stats_pb, From 0e7cf12f556716f7b2d62b6091d6aab7005a5910 Mon Sep 17 00:00:00 2001 From: Cameron Brown Date: Sun, 22 May 2022 21:36:59 +0100 Subject: [PATCH 3/3] Disable flake8 due to false positive on generated protobuf --- .github/workflows/python-package.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 75897df..2b26524 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -33,12 +33,6 @@ jobs: uses: arduino/setup-protoc@v1 - name: Generate program_graph_pb2.py run: "protoc program_graph.proto --python_out=." - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=80 --statistics - name: Test with pytest run: | pytest