Skip to content

Commit

Permalink
🩹 Removed inheriting from 'FileLoadableProtocol'
Browse files Browse the repository at this point in the history
In python 3.9.7 (currently the only python 3.9 version on conda) there was a bug that ignores the __init__ method of classes that inherit from a Protocol.
Rather than restricting the usable python versions for typing sake, I will file an issue at mypy since the conformity with protocols should be picked up automatically.
  • Loading branch information
s-weigand committed Nov 25, 2021
1 parent f71a34b commit 38b0bd4
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 20 deletions.
3 changes: 1 addition & 2 deletions glotaran/model/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
from glotaran.parameter import Parameter
from glotaran.parameter import ParameterGroup
from glotaran.plugin_system.megacomplex_registration import get_megacomplex
from glotaran.typing.protocols import FileLoadableProtocol
from glotaran.utils.ipython import MarkdownStr

default_model_items = {
Expand All @@ -44,7 +43,7 @@
}


class Model(FileLoadableProtocol):
class Model:
"""A base class for global analysis models."""

loader = load_model
Expand Down
3 changes: 1 addition & 2 deletions glotaran/parameter/parameter_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
from glotaran.io import load_parameters
from glotaran.io import save_parameters
from glotaran.parameter.parameter import Parameter
from glotaran.typing.protocols import FileLoadableProtocol
from glotaran.utils.ipython import MarkdownStr

if TYPE_CHECKING:
Expand All @@ -31,7 +30,7 @@ def __init__(self, path, label): # noqa: D107
super().__init__(f"Cannot find parameter {'.'.join(path+[label])!r}")


class ParameterGroup(dict, FileLoadableProtocol):
class ParameterGroup(dict):
"""Represents are group of parameters.
Can contain other groups, creating a tree-like hierarchy.
Expand Down
3 changes: 1 addition & 2 deletions glotaran/parameter/parameter_history.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,12 @@
import pandas as pd

from glotaran.parameter.parameter_group import ParameterGroup
from glotaran.typing.protocols import FileLoadableProtocol

if TYPE_CHECKING:
from os import PathLike


class ParameterHistory(FileLoadableProtocol):
class ParameterHistory:
"""A class representing a history of parameters."""

def __init__(self): # noqa: D107
Expand Down
18 changes: 13 additions & 5 deletions glotaran/project/result.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,24 @@ class Result:
free_parameter_labels: list[str]
"""List of labels of the free parameters used in optimization."""

scheme: Scheme = file_loadable_field(Scheme)
scheme: Scheme = file_loadable_field(Scheme) # type:ignore[type-var]

initial_parameters: ParameterGroup = file_loadable_field(ParameterGroup)
initial_parameters: ParameterGroup = file_loadable_field( # type:ignore[type-var]
ParameterGroup
)

optimized_parameters: ParameterGroup = file_loadable_field(ParameterGroup)
optimized_parameters: ParameterGroup = file_loadable_field( # type:ignore[type-var]
ParameterGroup
)

parameter_history: ParameterHistory = file_loadable_field(ParameterHistory)
parameter_history: ParameterHistory = file_loadable_field( # type:ignore[type-var]
ParameterHistory
)
"""The parameter history."""

data: Mapping[str, xr.Dataset] = file_loadable_field(DatasetMapping, is_wrapper_class=True)
data: Mapping[str, xr.Dataset] = file_loadable_field( # type:ignore[type-var]
DatasetMapping, is_wrapper_class=True
)
"""The resulting data as a dictionary of :xarraydoc:`Dataset`.
Notes
Expand Down
11 changes: 6 additions & 5 deletions glotaran/project/scheme.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
from glotaran.project.dataclass_helpers import exclude_from_dict_field
from glotaran.project.dataclass_helpers import file_loadable_field
from glotaran.project.dataclass_helpers import init_file_loadable_fields
from glotaran.typing.protocols import FileLoadableProtocol
from glotaran.utils.io import DatasetMapping
from glotaran.utils.ipython import MarkdownStr

Expand All @@ -30,15 +29,17 @@


@dataclass
class Scheme(FileLoadableProtocol):
class Scheme:
"""A scheme is a collection of a model, parameters and a dataset.
A scheme also holds options for optimization.
"""

model: Model = file_loadable_field(Model)
parameters: ParameterGroup = file_loadable_field(ParameterGroup)
data: Mapping[str, xr.Dataset] = file_loadable_field(DatasetMapping, is_wrapper_class=True)
model: Model = file_loadable_field(Model) # type:ignore[type-var]
parameters: ParameterGroup = file_loadable_field(ParameterGroup) # type:ignore[type-var]
data: Mapping[str, xr.Dataset] = file_loadable_field(
DatasetMapping, is_wrapper_class=True
) # type:ignore[type-var]
clp_link_tolerance: float = 0.0
maximum_number_function_evaluations: int | None = None
non_negative_least_squares: bool | None = exclude_from_dict_field(None)
Expand Down
3 changes: 1 addition & 2 deletions glotaran/project/test/test_dataclass_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@
from glotaran.project.dataclass_helpers import file_loadable_field
from glotaran.project.dataclass_helpers import fromdict
from glotaran.project.dataclass_helpers import init_file_loadable_fields
from glotaran.typing.protocols import FileLoadableProtocol


@dataclass
class DummyFileLoadable(FileLoadableProtocol):
class DummyFileLoadable:
def __init__(self, val: str) -> None:
self.source_path = "dummy_file"
self.data = {"foo": val}
Expand Down
3 changes: 1 addition & 2 deletions glotaran/utils/io.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import xarray as xr

from glotaran.plugin_system.data_io_registration import load_dataset
from glotaran.typing.protocols import FileLoadableProtocol
from glotaran.typing.types import DatasetMappable

if TYPE_CHECKING:
Expand Down Expand Up @@ -69,7 +68,7 @@ def _load_datasets(dataset_mappable: DatasetMappable, index: int = 1) -> dict[st
return dataset_mapping


class DatasetMapping(MutableMapping, FileLoadableProtocol):
class DatasetMapping(MutableMapping):
"""Wrapper class for a mapping of datasets which can be used for a ``file_loadable_field``."""

def __init__(self, init_map: Mapping[str, xr.Dataset] = None) -> None:
Expand Down

0 comments on commit 38b0bd4

Please sign in to comment.