diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index e9f030e8..85588687 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -8,5 +8,5 @@ on: jobs: codeql: - uses: pyiron/actions/.github/workflows/tests-and-coverage.yml@actions-3.3.3 + uses: pyiron/actions/.github/workflows/tests-and-coverage.yml@actions-4.0.1 secrets: inherit diff --git a/.github/workflows/dependabot-pr.yml b/.github/workflows/dependabot-pr.yml index e8d6cf83..5ca23da4 100644 --- a/.github/workflows/dependabot-pr.yml +++ b/.github/workflows/dependabot-pr.yml @@ -6,5 +6,5 @@ on: jobs: pyiron: - uses: pyiron/actions/.github/workflows/dependabot-pr.yml@actions-3.3.3 + uses: pyiron/actions/.github/workflows/dependabot-pr.yml@actions-4.0.1 secrets: inherit diff --git a/.github/workflows/pr-labeled.yml b/.github/workflows/pr-labeled.yml index df1bc0f2..3d47a3e8 100644 --- a/.github/workflows/pr-labeled.yml +++ b/.github/workflows/pr-labeled.yml @@ -8,5 +8,5 @@ on: jobs: pyiron: - uses: pyiron/actions/.github/workflows/pr-labeled.yml@actions-3.3.3 + uses: pyiron/actions/.github/workflows/pr-labeled.yml@actions-4.0.1 secrets: inherit diff --git a/.github/workflows/pr-target-opened.yml b/.github/workflows/pr-target-opened.yml index 0c75dd23..4e72db66 100644 --- a/.github/workflows/pr-target-opened.yml +++ b/.github/workflows/pr-target-opened.yml @@ -8,5 +8,5 @@ on: jobs: pyiron: - uses: pyiron/actions/.github/workflows/pr-target-opened.yml@actions-3.3.3 + uses: pyiron/actions/.github/workflows/pr-target-opened.yml@actions-4.0.1 secrets: inherit diff --git a/.github/workflows/preview-release.yml b/.github/workflows/preview-release.yml index 65db182e..8925cc64 100644 --- a/.github/workflows/preview-release.yml +++ b/.github/workflows/preview-release.yml @@ -10,7 +10,7 @@ on: jobs: pyiron: - uses: pyiron/actions/.github/workflows/pyproject-release.yml@actions-3.3.3 + uses: pyiron/actions/.github/workflows/pyproject-release.yml@actions-4.0.1 secrets: inherit with: runner: 'ubuntu-22.04' # with ubuntu > 22.04, pip is broken diff --git a/.github/workflows/push-pull.yml b/.github/workflows/push-pull.yml index b7c7d05a..013e2ffe 100644 --- a/.github/workflows/push-pull.yml +++ b/.github/workflows/push-pull.yml @@ -9,7 +9,7 @@ on: jobs: pyiron: - uses: pyiron/actions/.github/workflows/push-pull.yml@actions-3.3.3 + uses: pyiron/actions/.github/workflows/push-pull.yml@actions-4.0.1 with: runner: 'ubuntu-22.04' # with ubuntu > 22.04, pip is broken python-version-alt3: 'exclude' # No python 3.9 diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml index f01a6b2f..1f22c18e 100644 --- a/.github/workflows/weekly.yml +++ b/.github/workflows/weekly.yml @@ -8,5 +8,5 @@ on: jobs: codeql: - uses: pyiron/actions/.github/workflows/codeql.yml@actions-3.3.3 + uses: pyiron/actions/.github/workflows/codeql.yml@actions-4.0.1 secrets: inherit diff --git a/docs/conf.py b/docs/conf.py index 5e41d000..5c7a58d0 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,10 +12,11 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys +import importlib.util import os import shutil import subprocess + from sphinx.ext.apidoc import main # If extensions (or modules to document with autodoc) are in another directory, @@ -147,12 +148,13 @@ # raise ImportError("You need to install bootstrap: pip install sphinx_bootstrap_theme") # html_theme = 'default' -try: - import sphinx_rtd_theme +if importlib.util.find_spec("sphinx_rtd_theme") is not None: + # sphinx_rtd_theme is available html_theme = "sphinx_rtd_theme" -except ImportError: - html_theme = "default" +else: + # fallback theme + html_theme = "alabaster" # Theme options are theme-specific and customize the look and feel of a theme diff --git a/notebooks/example.ipynb b/notebooks/example.ipynb index 354ef477..c7c65afa 100644 --- a/notebooks/example.ipynb +++ b/notebooks/example.ipynb @@ -29,8 +29,8 @@ "source": [ "from pint import UnitRegistry\n", "\n", - "from semantikon.typing import u\n", - "from semantikon.converter import units" + "from semantikon.converter import units\n", + "from semantikon.typing import u" ] }, { diff --git a/semantikon/_version.py b/semantikon/_version.py index ade5636c..88d4a4de 100644 --- a/semantikon/_version.py +++ b/semantikon/_version.py @@ -11,12 +11,12 @@ """Git implementation of _version.py.""" import errno +import functools import os import re import subprocess import sys from typing import Any, Callable, Dict, List, Optional, Tuple -import functools def get_keywords() -> Dict[str, str]: diff --git a/semantikon/converter.py b/semantikon/converter.py index fbda938c..ab533307 100644 --- a/semantikon/converter.py +++ b/semantikon/converter.py @@ -2,17 +2,18 @@ # Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department # Distributed under the terms of "New BSD License", see the LICENSE file. -from pint import Quantity import inspect +import sys from functools import wraps +from typing import get_args, get_origin, get_type_hints + +from pint import Quantity from pint.registry_helpers import ( _apply_defaults, _parse_wrap_args, - _to_units_container, _replace_units, + _to_units_container, ) -from typing import get_origin, get_args, get_type_hints -import sys __author__ = "Sam Waseda" __copyright__ = ( diff --git a/semantikon/ontology.py b/semantikon/ontology.py index c64e83a3..7caa947b 100644 --- a/semantikon/ontology.py +++ b/semantikon/ontology.py @@ -1,11 +1,12 @@ -from typing import TypeAlias, Any import warnings - -from rdflib import Graph, Literal, RDF, RDFS, URIRef, OWL, PROV, Namespace, BNode, SH from dataclasses import is_dataclass -from semantikon.converter import meta_to_dict, get_function_dict -from semantikon.qudt import UnitsDict +from typing import Any, TypeAlias + from owlrl import DeductiveClosure, OWLRL_Semantics +from rdflib import OWL, PROV, RDF, RDFS, SH, BNode, Graph, Literal, Namespace, URIRef + +from semantikon.converter import get_function_dict, meta_to_dict +from semantikon.qudt import UnitsDict class SNS: @@ -267,7 +268,7 @@ def _validate_values_by_python(graph: Graph) -> list: if on_property and some_values_from: for cls in graph.subjects(OWL.equivalentClass, restrictions): for instance in graph.subjects(RDF.type, cls): - if not (instance, on_property, some_values_from) in graph: + if (instance, on_property, some_values_from) not in graph: missing_triples.append( (instance, on_property, some_values_from) ) diff --git a/semantikon/qudt.py b/semantikon/qudt.py index b5786ede..5077c5e2 100644 --- a/semantikon/qudt.py +++ b/semantikon/qudt.py @@ -1,9 +1,8 @@ import os -from rdflib import Graph, RDFS, URIRef -from pint import UnitRegistry -from pint.errors import UndefinedUnitError, OffsetUnitCalculusError, DimensionalityError -from tokenize import TokenError + import requests +from pint import UnitRegistry +from rdflib import RDFS, Graph, URIRef def _is_english_label(pred, obj): diff --git a/semantikon/typing.py b/semantikon/typing.py index 5fca4de6..d5162b24 100644 --- a/semantikon/typing.py +++ b/semantikon/typing.py @@ -1,4 +1,5 @@ from typing import Annotated, get_origin + from semantikon.converter import parse_metadata __author__ = "Sam Waseda" diff --git a/semantikon/visualize.py b/semantikon/visualize.py index eade2721..3cbc4948 100644 --- a/semantikon/visualize.py +++ b/semantikon/visualize.py @@ -1,7 +1,8 @@ -from rdflib import RDF, URIRef, Literal, BNode -from graphviz import Digraph from string import Template +from graphviz import Digraph +from rdflib import RDF, BNode, Literal, URIRef + from semantikon.ontology import SNS diff --git a/semantikon/workflow.py b/semantikon/workflow.py index 47dea025..8827b1dc 100644 --- a/semantikon/workflow.py +++ b/semantikon/workflow.py @@ -1,12 +1,13 @@ import ast -import networkx as nx -from networkx.algorithms.dag import topological_sort +import copy import inspect +import warnings from collections import deque from functools import cached_property -import warnings from hashlib import sha256 -import copy + +import networkx as nx +from networkx.algorithms.dag import topological_sort from semantikon.converter import parse_input_args, parse_output_args diff --git a/setup.py b/setup.py index fcbb31fa..d14fa5b4 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,5 @@ -from setuptools import setup - import versioneer +from setuptools import setup setup( version=versioneer.get_version(), diff --git a/tests/unit/test_dataclass.py b/tests/unit/test_dataclass.py index 7dd50520..69271dea 100644 --- a/tests/unit/test_dataclass.py +++ b/tests/unit/test_dataclass.py @@ -1,8 +1,9 @@ import unittest -from semantikon.typing import u -from typing import Annotated from dataclasses import dataclass -from semantikon.converter import semantikon_class, parse_metadata +from typing import Annotated + +from semantikon.converter import parse_metadata, semantikon_class +from semantikon.typing import u @semantikon_class diff --git a/tests/unit/test_ontology.py b/tests/unit/test_ontology.py index f73fb6a9..665f80b9 100644 --- a/tests/unit/test_ontology.py +++ b/tests/unit/test_ontology.py @@ -1,30 +1,23 @@ import unittest +from dataclasses import dataclass from textwrap import dedent -from rdflib import Graph, OWL, Namespace, URIRef, Literal, RDF, RDFS, SH, PROV -from owlrl import DeductiveClosure, OWLRL_Semantics -from pyshacl import validate + from graphviz import Digraph -from semantikon.typing import u -from semantikon.converter import ( - parse_input_args, - parse_output_args, - parse_metadata, - get_function_dict, -) +from pyshacl import validate +from rdflib import OWL, PROV, RDF, RDFS, SH, Literal, Namespace, URIRef + from semantikon.ontology import ( - get_knowledge_graph, + NS, SNS, - _inherit_properties, - validate_values, + _parse_cancel, dataclass_to_knowledge_graph, + get_knowledge_graph, serialize_data, - _parse_cancel, - NS, + validate_values, ) -from semantikon.workflow import workflow, separate_types, separate_functions +from semantikon.typing import u from semantikon.visualize import visualize -from dataclasses import dataclass - +from semantikon.workflow import workflow EX = Namespace("http://example.org/") @@ -537,7 +530,6 @@ def test_dataclass(self): (URIRef(f"{i_txt}.parameters.a.value"), RDF.value, Literal(2)), (URIRef(o_txt), SNS.hasValue, URIRef(f"{o_txt}.E.value")), ) - s = graph.serialize(format="turtle") for ii, triple in enumerate(triples): with self.subTest(i=ii): self.assertEqual( diff --git a/tests/unit/test_parsers.py b/tests/unit/test_parsers.py index 725b3aca..09b4b9ca 100644 --- a/tests/unit/test_parsers.py +++ b/tests/unit/test_parsers.py @@ -1,11 +1,18 @@ import unittest -from semantikon.typing import u +from typing import TYPE_CHECKING + from semantikon.converter import ( + get_function_dict, parse_input_args, - parse_output_args, parse_metadata, - get_function_dict, + parse_output_args, ) +from semantikon.typing import u + +if TYPE_CHECKING: + + class Atoms: + pass class TestParser(unittest.TestCase): @@ -114,6 +121,7 @@ def get_speed_multiple_args( return distance / time else: return distance / duration + input_args = parse_input_args(get_speed_multiple_args) for value, key in zip(input_args.values(), ["meter", "second", "second"]): self.assertEqual(value["units"], key) @@ -121,6 +129,7 @@ def get_speed_multiple_args( def test_future(self): def test_another_future(x: "Atoms", y: "u(float, units='second')") -> "Atoms": return x + input_args = parse_input_args(test_another_future) self.assertEqual(input_args["x"]["dtype"], "Atoms") self.assertIn("units", input_args["y"]) diff --git a/tests/unit/test_qudt.py b/tests/unit/test_qudt.py index fad9b88f..87b89d16 100644 --- a/tests/unit/test_qudt.py +++ b/tests/unit/test_qudt.py @@ -1,4 +1,5 @@ import unittest + from semantikon.qudt import UnitsDict diff --git a/tests/unit/test_tests.py b/tests/unit/test_tests.py index fcabe645..133f36db 100644 --- a/tests/unit/test_tests.py +++ b/tests/unit/test_tests.py @@ -1,4 +1,5 @@ import unittest + import semantikon diff --git a/tests/unit/test_units.py b/tests/unit/test_units.py index 98da3398..9ac6a6de 100644 --- a/tests/unit/test_units.py +++ b/tests/unit/test_units.py @@ -1,8 +1,10 @@ import unittest -from semantikon.typing import u -from semantikon.converter import units + from pint import UnitRegistry +from semantikon.converter import units +from semantikon.typing import u + @units def get_speed_multiple_outputs( diff --git a/tests/unit/test_workflow.py b/tests/unit/test_workflow.py index eb32ea68..2a6bfc82 100644 --- a/tests/unit/test_workflow.py +++ b/tests/unit/test_workflow.py @@ -1,18 +1,17 @@ import unittest + from semantikon.typing import u from semantikon.workflow import ( - analyze_function, - get_return_variables, _get_output_counts, - get_workflow_dict, - workflow, + analyze_function, find_parallel_execution_levels, get_node_dict, - separate_types, + get_return_variables, + get_workflow_dict, separate_functions, + separate_types, + workflow, ) -import numpy as np -import json def operation(x: float, y: float) -> tuple[float, float]: