diff --git a/.github/workflows/documentation-build.yml b/.github/workflows/documentation-build.yml index fc7d56b9..286fc0d2 100644 --- a/.github/workflows/documentation-build.yml +++ b/.github/workflows/documentation-build.yml @@ -29,6 +29,9 @@ jobs: - name: Upgrade pip run: | python -m pip install --upgrade pip + - name: Force upgrade of sphinx-rtd-theme to build documentation, not compatible with docutils 0.20.1 + run: | + pip install --upgrade --force-reinstall sphinx-rtd-theme - name: Set up Python uses: actions/setup-python@v5 with: diff --git a/Examples/fitting/plot_constraints.py b/Examples/fitting/plot_constraints.py index 8f3167a6..70d2db5e 100644 --- a/Examples/fitting/plot_constraints.py +++ b/Examples/fitting/plot_constraints.py @@ -4,7 +4,7 @@ This example shows the usages of the different constraints. """ -from easyscience.Fitting import Constraints +from easyscience.fitting import Constraints from easyscience.Objects.ObjectClasses import Parameter p1 = Parameter('p1', 1) @@ -15,7 +15,7 @@ p1.value = value print(f'Set Value: {value}, Parameter Value: {p1}') -#%% +# %% # To include embedded rST, use a line of >= 20 ``#``'s or ``#%%`` between your # rST and your code. This separates your example # into distinct text and code blocks. You can continue writing code below the diff --git a/docs/src/conf.py b/docs/src/conf.py index 8a125880..ba7824b7 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -95,7 +95,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = 'en' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. diff --git a/docs/src/getting-started/installation.rst b/docs/src/getting-started/installation.rst index 3e9e065c..048f2cd4 100644 --- a/docs/src/getting-started/installation.rst +++ b/docs/src/getting-started/installation.rst @@ -14,7 +14,7 @@ The easiest way of obtaining EasyScience and using it in your project is via pip $ pip install EasyScience Install as an EasyScience developer --------------------------------- +----------------------------------- You can obtain the latest development source from our `Github repository `_.: diff --git a/docs/src/reference/base.rst b/docs/src/reference/base.rst index 93480674..59e9de32 100644 --- a/docs/src/reference/base.rst +++ b/docs/src/reference/base.rst @@ -5,13 +5,13 @@ Parameters and Objects Descriptors =========== -.. autoclass:: easyscience.Objects.Base.Descriptor +.. autoclass:: easyscience.Objects.Variable.Descriptor :members: Parameters ========== -.. autoclass:: easyscience.Objects.Base.Parameter +.. autoclass:: easyscience.Objects.Variable.Parameter :members: :inherited-members: @@ -22,11 +22,11 @@ Super Classes and Collections Super Classes ============= -.. autoclass:: easyscience.Objects.Base.BasedBase +.. autoclass:: easyscience.Objects.ObjectClasses.BasedBase :members: :inherited-members: -.. autoclass:: easyscience.Objects.Base.BaseObj +.. autoclass:: easyscience.Objects.ObjectClasses.BaseObj :members: +_add_component :inherited-members: diff --git a/examples_old/example1.py b/examples_old/example1.py index 18ca3b52..342f9931 100644 --- a/examples_old/example1.py +++ b/examples_old/example1.py @@ -3,7 +3,7 @@ import numpy as np -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example1_dream.py b/examples_old/example1_dream.py index bc80a125..74e90835 100644 --- a/examples_old/example1_dream.py +++ b/examples_old/example1_dream.py @@ -3,7 +3,7 @@ import numpy as np -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example2.py b/examples_old/example2.py index db1228b6..3e0f4a7f 100644 --- a/examples_old/example2.py +++ b/examples_old/example2.py @@ -3,7 +3,7 @@ import numpy as np -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example3.py b/examples_old/example3.py index 51916122..d01a861e 100644 --- a/examples_old/example3.py +++ b/examples_old/example3.py @@ -5,7 +5,7 @@ import numpy as np -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example4.py b/examples_old/example4.py index 90bc59be..376d4486 100644 --- a/examples_old/example4.py +++ b/examples_old/example4.py @@ -10,7 +10,7 @@ import numpy as np from easyscience import global_object -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.core import ComponentSerializer from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example5_broken.py b/examples_old/example5_broken.py index 6a1e5413..dd5fa5e0 100644 --- a/examples_old/example5_broken.py +++ b/examples_old/example5_broken.py @@ -9,7 +9,7 @@ import numpy as np from easyscience import global_object -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.Base import BaseObj from easyscience.Objects.Base import Parameter from easyscience.Objects.core import ComponentSerializer diff --git a/examples_old/example_dataset2.py b/examples_old/example_dataset2.py index e0667a19..f2d415f9 100644 --- a/examples_old/example_dataset2.py +++ b/examples_old/example_dataset2.py @@ -5,7 +5,7 @@ import numpy as np from easyscience.Datasets.xarray import xr -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example_dataset2pt2.py b/examples_old/example_dataset2pt2.py index 20d5950d..83c9cbe0 100644 --- a/examples_old/example_dataset2pt2.py +++ b/examples_old/example_dataset2pt2.py @@ -5,7 +5,7 @@ import numpy as np from easyscience.Datasets.xarray import xr -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example_dataset2pt2_broken.py b/examples_old/example_dataset2pt2_broken.py index ecce0408..9c44f0a5 100644 --- a/examples_old/example_dataset2pt2_broken.py +++ b/examples_old/example_dataset2pt2_broken.py @@ -5,7 +5,7 @@ import numpy as np from easyscience.Datasets.xarray import xr -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.Base import BaseObj from easyscience.Objects.Base import Parameter diff --git a/examples_old/example_dataset3.py b/examples_old/example_dataset3.py index ec1420d1..fb8bf7f0 100644 --- a/examples_old/example_dataset3.py +++ b/examples_old/example_dataset3.py @@ -7,7 +7,7 @@ import numpy as np from easyscience.Datasets.xarray import xr -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example_dataset3pt2.py b/examples_old/example_dataset3pt2.py index a21ff8ed..ac2c9666 100644 --- a/examples_old/example_dataset3pt2.py +++ b/examples_old/example_dataset3pt2.py @@ -5,7 +5,7 @@ import numpy as np from easyscience.Datasets.xarray import xr -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example_dataset4.py b/examples_old/example_dataset4.py index a1465017..9e4c41cb 100644 --- a/examples_old/example_dataset4.py +++ b/examples_old/example_dataset4.py @@ -5,7 +5,7 @@ import numpy as np from easyscience.Datasets.xarray import xr -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/examples_old/example_dataset4_2.py b/examples_old/example_dataset4_2.py index 63ecfe40..375e5a11 100644 --- a/examples_old/example_dataset4_2.py +++ b/examples_old/example_dataset4_2.py @@ -5,7 +5,7 @@ import numpy as np from easyscience.Datasets.xarray import xr -from easyscience.Fitting import Fitter +from easyscience.fitting import Fitter from easyscience.Objects.ObjectClasses import BaseObj from easyscience.Objects.ObjectClasses import Parameter diff --git a/src/easyscience/Datasets/xarray.py b/src/easyscience/Datasets/xarray.py index 1b52ea8d..0fbe4755 100644 --- a/src/easyscience/Datasets/xarray.py +++ b/src/easyscience/Datasets/xarray.py @@ -281,14 +281,13 @@ def sigma_generator( :param variable_label: Name of the DataArray to perform the calculation on :type variable_label: str - :param sigma_func: Function to generate the sigmas. Must be of the form f(x) and return an array of the same - shape as the input. DEFAULT: sqrt(|data|) + :param sigma_func: Function to generate the sigmas. Must be of the form f(x) and return an array of the same shape as the input. Default sqrt(\|x\|) :type sigma_func: Callable :param label_prefix: What prefix should be used to designate a sigma DataArray from a data DataArray :type label_prefix: str :return: None :rtype: None - """ + """ # noqa: E501 sigma_values = sigma_func(self._obj[variable_label]) self.sigma_attach(variable_label, sigma_values, label_prefix) diff --git a/src/easyscience/Objects/Groups.py b/src/easyscience/Objects/Groups.py index 504688e6..eaec36b5 100644 --- a/src/easyscience/Objects/Groups.py +++ b/src/easyscience/Objects/Groups.py @@ -22,9 +22,9 @@ from easyscience.Objects.ObjectClasses import Descriptor if TYPE_CHECKING: - from easyscience.Utils.typing import B - from easyscience.Utils.typing import V - from easyscience.Utils.typing import iF + from easyscience.Objects.Inferface import iF + from easyscience.Objects.ObjectClasses import B + from easyscience.Objects.Variable import V class BaseCollection(BasedBase, MutableSequence): diff --git a/src/easyscience/Objects/ObjectClasses.py b/src/easyscience/Objects/ObjectClasses.py index 037f0a49..52ebdc90 100644 --- a/src/easyscience/Objects/ObjectClasses.py +++ b/src/easyscience/Objects/ObjectClasses.py @@ -28,9 +28,9 @@ from .Variable import Parameter if TYPE_CHECKING: - from easyscience.Utils.typing import C - from easyscience.Utils.typing import V - from easyscience.Utils.typing import iF + from easyscience.fitting.Constraints import C + from easyscience.Objects.Inferface import iF + from easyscience.Objects.Variable import V class BasedBase(ComponentSerializer): diff --git a/src/easyscience/Objects/Variable.py b/src/easyscience/Objects/Variable.py index 65e7b0ab..2cf0ed6d 100644 --- a/src/easyscience/Objects/Variable.py +++ b/src/easyscience/Objects/Variable.py @@ -37,7 +37,7 @@ from easyscience.Utils.Exceptions import CoreSetException if TYPE_CHECKING: - from easyscience.Utils.typing import C + from easyscience.fitting.Constraints import C Q_ = ureg.Quantity M_ = ureg.Measurement diff --git a/src/easyscience/Objects/virtual.py b/src/easyscience/Objects/virtual.py index 12562f60..b33d8406 100644 --- a/src/easyscience/Objects/virtual.py +++ b/src/easyscience/Objects/virtual.py @@ -18,7 +18,7 @@ from easyscience.fitting.Constraints import ObjConstraint if TYPE_CHECKING: - from easyscience.Utils.typing import BV + from easyscience.Objects.ObjectClasses import BV def raise_(ex): @@ -48,7 +48,7 @@ def realizer(obj: BV): args = [] if klass in ec_var.__dict__.values(): # is_variable check kwargs = obj.encode_data() - kwargs["unique_name"] = None + kwargs['unique_name'] = None return klass(**kwargs) else: kwargs = {name: realizer(item) for name, item in obj._kwargs.items()} @@ -97,9 +97,7 @@ def component_realizer(obj: BV, component: str, recursive: bool = True): key = value.unique_name if getattr(value, '__old_class__', value.__class__) in ec_var.__dict__.values(): continue - component._global_object.map.prune_vertex_from_edge( - component, component._kwargs[key] - ) + component._global_object.map.prune_vertex_from_edge(component, component._kwargs[key]) component._global_object.map.add_edge(component, old_component._kwargs[key]) component._kwargs[key] = old_component._kwargs[key] done_mapping = False @@ -142,12 +140,12 @@ def virtualizer(obj: BV) -> BV: # The supplied class klass = getattr(obj, '__old_class__', obj.__class__) virtual_options = { - "_is_virtual": True, - "is_virtual": property(fget=lambda self: self._is_virtual), - "_derived_from": property(fget=lambda self: obj.unique_name), - "__non_virtual_class__": klass, - "realize": realizer, - "relalize_component": component_realizer, + '_is_virtual': True, + 'is_virtual': property(fget=lambda self: self._is_virtual), + '_derived_from': property(fget=lambda self: obj.unique_name), + '__non_virtual_class__': klass, + 'realize': realizer, + 'relalize_component': component_realizer, } import easyscience.Objects.Variable as ec_var diff --git a/src/easyscience/Utils/classTools.py b/src/easyscience/Utils/classTools.py index 6e29eae7..5c09711f 100644 --- a/src/easyscience/Utils/classTools.py +++ b/src/easyscience/Utils/classTools.py @@ -4,8 +4,8 @@ from __future__ import annotations -__author__ = "github.com/wardsimon" -__version__ = "0.1.0" +__author__ = 'github.com/wardsimon' +__version__ = '0.1.0' from typing import TYPE_CHECKING from typing import List @@ -15,15 +15,15 @@ from easyscience.global_object.hugger.property import LoggedProperty if TYPE_CHECKING: - from easyscience.Utils.typing import BV - from easyscience.Utils.typing import B + from easyscience.Objects.ObjectClasses import BV + from easyscience.Objects.ObjectClasses import B def addLoggedProp(inst: BV, name: str, *args, **kwargs) -> None: cls = type(inst) - annotations = getattr(cls, "__annotations__", False) - if not hasattr(cls, "__perinstance"): - cls = type(cls.__name__, (cls,), {"__module__": inst.__module__}) + annotations = getattr(cls, '__annotations__', False) + if not hasattr(cls, '__perinstance'): + cls = type(cls.__name__, (cls,), {'__module__': inst.__module__}) cls.__perinstance = True if annotations: cls.__annotations__ = annotations @@ -34,9 +34,9 @@ def addLoggedProp(inst: BV, name: str, *args, **kwargs) -> None: def addProp(inst: BV, name: str, *args, **kwargs) -> None: cls = type(inst) - annotations = getattr(cls, "__annotations__", False) - if not hasattr(cls, "__perinstance"): - cls = type(cls.__name__, (cls,), {"__module__": __name__}) + annotations = getattr(cls, '__annotations__', False) + if not hasattr(cls, '__perinstance'): + cls = type(cls.__name__, (cls,), {'__module__': __name__}) cls.__perinstance = True if annotations: cls.__annotations__ = annotations @@ -48,8 +48,8 @@ def addProp(inst: BV, name: str, *args, **kwargs) -> None: def removeProp(inst: BV, name: str) -> None: cls = type(inst) - if not hasattr(cls, "__perinstance"): - cls = type(cls.__name__, (cls,), {"__module__": __name__}) + if not hasattr(cls, '__perinstance'): + cls = type(cls.__name__, (cls,), {'__module__': __name__}) cls.__perinstance = True inst.__old_class__ = inst.__class__ inst.__class__ = cls @@ -65,8 +65,8 @@ def generatePath(model_obj: B, skip_first: bool = False) -> Tuple[List[int], Lis for par in pars: elem = par.unique_name route = global_object.map.reverse_route(elem, model_id) - objs = [getattr(global_object.map.get_item_by_key(r), "name") for r in route] + objs = [getattr(global_object.map.get_item_by_key(r), 'name') for r in route] objs.reverse() - names.append(".".join(objs[start_idx:])) + names.append('.'.join(objs[start_idx:])) ids.append(elem.int) return ids, names diff --git a/src/easyscience/Utils/io/template.py b/src/easyscience/Utils/io/template.py index 04975a00..e5e6bbb0 100644 --- a/src/easyscience/Utils/io/template.py +++ b/src/easyscience/Utils/io/template.py @@ -27,7 +27,7 @@ import numpy as np if TYPE_CHECKING: - from easyscience.Utils.typing import BV + from easyscience.Objects.ObjectClasses import BV _e = json.JSONEncoder() diff --git a/src/easyscience/Utils/io/xml.py b/src/easyscience/Utils/io/xml.py index 224de856..7179b259 100644 --- a/src/easyscience/Utils/io/xml.py +++ b/src/easyscience/Utils/io/xml.py @@ -4,8 +4,8 @@ from __future__ import annotations -__author__ = "github.com/wardsimon" -__version__ = "0.0.1" +__author__ = 'github.com/wardsimon' +__version__ = '0.0.1' import sys import xml.etree.ElementTree as ET @@ -22,7 +22,7 @@ from easyscience.Utils.io.template import BaseEncoderDecoder if TYPE_CHECKING: - from easyscience.Utils.typing import BV + from easyscience.Objects.ObjectClasses import BV can_intent = (sys.version_info.major > 2) & (sys.version_info.minor > 8) @@ -64,16 +64,16 @@ def encode( obj_dict = obj else: obj_dict = encoder().encode(obj, skip=skip, full_encode=True, **kwargs) - block = ET.Element("data") + block = ET.Element('data') self._check_class(block, None, obj_dict, skip=skip) - header = "" + header = '' if use_header: header = '?xml version="1.0" encoding="UTF-8"?' if not fast and can_intent: ET.indent(block) if use_header: - header += "\n" - return header + ET.tostring(block, encoding="unicode") + header += '\n' + return header + ET.tostring(block, encoding='unicode') @classmethod def decode(cls, data: str) -> BV: @@ -97,8 +97,8 @@ def _element_to_dict(element, out_dict): """ label = element.tag - if label[0] == "_": - label = "@" + label[2:] + if label[0] == '_': + label = '@' + label[2:] if len(element) == 0: out_dict[label] = XMLSerializer.string_to_variable(element.text) else: @@ -123,25 +123,23 @@ def string_to_variable(in_string: str): return in_string in_string = in_string.strip() if "'" in in_string: - in_string = in_string.replace("'", "") + in_string = in_string.replace("'", '') if '"' in in_string: - in_string = in_string.replace('"', "") + in_string = in_string.replace('"', '') try: value = float(in_string) except ValueError: - if in_string == "True": + if in_string == 'True': value = True - elif in_string == "False": + elif in_string == 'False': value = False - elif in_string == "None": + elif in_string == 'None': value = None else: value = in_string return value - def _check_class( - self, element, key: str, value: Any, skip: Optional[List[str]] = None - ): + def _check_class(self, element, key: str, value: Any, skip: Optional[List[str]] = None): """ Add a value to an element or create a new element based on input type. """ @@ -151,8 +149,8 @@ def _check_class( if k in skip: continue kk = k - if k[0] == "@": - kk = "__" + kk[1:] + if k[0] == '@': + kk = '__' + kk[1:] if not isinstance(v, list): s = ET.SubElement(element, kk) self._check_class(s, kk, v, skip=skip) @@ -167,11 +165,11 @@ def _check_class( s = ET.SubElement(element, key) self._check_class(s, None, i, skip=skip) elif value is None: - element.text = "None" + element.text = 'None' elif issubclass(T_, Number): element.text = str(value) elif issubclass(T_, np.ndarray): element.text = str(value.tolist()) else: - print(f"Cannot encode {T_} to XML") + print(f'Cannot encode {T_} to XML') raise NotImplementedError diff --git a/src/easyscience/Utils/typing.py b/src/easyscience/Utils/typing.py deleted file mode 100644 index 7a9a0aae..00000000 --- a/src/easyscience/Utils/typing.py +++ /dev/null @@ -1,14 +0,0 @@ -# SPDX-FileCopyrightText: 2023 EasyScience contributors -# SPDX-License-Identifier: BSD-3-Clause -# © 2021-2023 Contributors to the EasyScience project