From bb67d034e25d7d7de0408b5e1b239f7523cd383c Mon Sep 17 00:00:00 2001 From: Sasha Petrenko Date: Fri, 12 Jan 2024 13:14:43 -0600 Subject: [PATCH] Add test workflow, pytest script --- .github/workflows/Test.yml | 61 +++++++++++++++++++ ...main_dystonia_graph_and_ontology_method.py | 32 ++++++---- tests/test_experiments.py | 26 ++++++++ 3 files changed, 107 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/Test.yml create mode 100644 tests/test_experiments.py diff --git a/.github/workflows/Test.yml b/.github/workflows/Test.yml new file mode 100644 index 0000000..c55154a --- /dev/null +++ b/.github/workflows/Test.yml @@ -0,0 +1,61 @@ +name: Test + +# on: [push] +on: + push: + branches: [main] + tags: ["*"] + pull_request: +jobs: + build: + # runs-on: ubuntu-latest + name: Python ${{ matrix.python-version }} - ${{ matrix.os }} - ${{ matrix.arch }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + python-version: ["3.8", "3.9", "3.10", "3.11"] + os: + - ubuntu-latest + - macOS-latest + # - windows-latest + arch: + - x64 + # - x86 + # exclude: + # # Exclude 32-bit macOS + # - os: macOS-latest + # arch: x86 + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 pytest + pip install -r requirements.txt + # if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - 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=127 --statistics + - name: Test with pytest + run: | + # pytest + # python -m pytest + # coverage run -m pytest + python -m pytest --cov + - name: Generate coverage + run: | + coverage xml + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + # run: | + # curl -Os https://uploader.codecov.io/latest/linux/codecov + # chmod +x codecov + # ./codecov diff --git a/src/main_dystonia_graph_and_ontology_method.py b/src/main_dystonia_graph_and_ontology_method.py index 2426b5a..ea189ec 100644 --- a/src/main_dystonia_graph_and_ontology_method.py +++ b/src/main_dystonia_graph_and_ontology_method.py @@ -68,7 +68,7 @@ ######################################################## -def add_data_properties(g: nx.Graph): +def add_data_properties(g: Graph): # Define the namespaces ex = Namespace("http://example.org/") g.bind("ex", ex) @@ -136,7 +136,7 @@ def add_data_properties(g: nx.Graph): return (g) -def add_object_properties (g: nx.Graph): +def add_object_properties (g: Graph): ex = Namespace("http://example.org/") # Define an object property object_property_uri = ex['causes'] @@ -269,7 +269,7 @@ def plot_graph(G: nx.Graph): return -def add_data_properties_to_nodes(g: nx.Graph): +def add_data_properties_to_nodes(g: Graph, G: nx.Graph): # Define the namespaces ex = Namespace("http://example.org/") g.bind("ex", ex) @@ -335,7 +335,7 @@ def add_data_properties_to_nodes(g: nx.Graph): return g -def add_edges_to_RDF_graph(g: nx.Graph): +def add_edges_to_RDF_graph(g: Graph, G: nx.Graph): # Define the namespaces ex = Namespace("http://example.org/") g.bind("ex", ex) @@ -373,7 +373,7 @@ def add_edges_to_RDF_graph(g: nx.Graph): return(g) -def add_nodes_to_RDF_graph(g: nx.Graph): +def add_nodes_to_RDF_graph(g: Graph, G: nx.Graph): # Define the namespaces ex = Namespace("http://example.org/") g.bind("ex", ex) @@ -396,10 +396,7 @@ def add_nodes_to_RDF_graph(g: nx.Graph): return(g) -######################################################## -# Main Program Starts here # -######################################################## -if __name__ == "__main__": +def main(): # G is networkX graph # g is an RDF graph # Declare a NetworkX graph @@ -413,9 +410,9 @@ def add_nodes_to_RDF_graph(g: nx.Graph): g = Graph() g = add_object_properties(g) g = add_data_properties(g) - g = add_data_properties_to_nodes(g) - g = add_nodes_to_RDF_graph(g) - g = add_edges_to_RDF_graph(g) + g = add_data_properties_to_nodes(g, G) + g = add_nodes_to_RDF_graph(g, G) + g = add_edges_to_RDF_graph(g, G) # Serialize the updated RDF graph to an OWL file g.serialize(out_ontology, format="turtle") @@ -423,3 +420,14 @@ def add_nodes_to_RDF_graph(g: nx.Graph): print(f'- {out_graph_file} has been written to file as a GraphML file') print(f'- {out_graph_image} has been written to file as a PNG file') print(f'- {out_ontology} has been written to file as an ontology') + + return + + +######################################################## +# Main Program Starts here # +######################################################## + +if __name__ == "__main__": + + main() diff --git a/tests/test_experiments.py b/tests/test_experiments.py new file mode 100644 index 0000000..d00a3b7 --- /dev/null +++ b/tests/test_experiments.py @@ -0,0 +1,26 @@ +""" + test_cvi.py + +# Description +Runs each experiment within pytest to verify script functionality during CI. + +# Authors +- Sasha Petrenko +""" + +# ----------------------------------------------------------------------------- +# TESTS +# ----------------------------------------------------------------------------- + + +class TestExperiments: + """ + Pytest class containing experiment unit tests. + """ + + def test_graph_ontology(self): + """ + Tests the main function of `main_dystonia_graph_and_ontology_method.py`. + """ + from src.main_dystonia_graph_and_ontology_method import main + main()