Пример #1
0
    def check_event_objects_for_compatibility(cls, default_dim, obj_dim,
                                              method_dict):
        """Checks Events for compatibility and sets global method attributes

        Args:
            default_dim (dict): Dict representation of SpectralDimension in base method
            obj_dim (SpectralDimension): User-passed SpectralDimension object to check
            method_dict (dict): Dict representation of passed method
        """
        required = ["magnetic_flux_density", "rotor_frequency", "rotor_angle"]
        check_dim = SpectralDimension(**default_dim)
        for i, (ev_check,
                ev_obj) in enumerate(zip(check_dim.events, obj_dim.events)):

            default_obj = SpectralDimension(events=[{}]).events[0]
            obj_keys = ev_obj.dict(exclude={"property_units"}).keys()
            check_keys = default_dim["events"][i].keys()
            for k in obj_keys:  # iterate over event attributes
                fail = False
                if k in check_keys:
                    obj_attr, default_attr, check_attr = (getattr(
                        _, k) for _ in [ev_obj, default_obj, ev_check])
                    fail_1 = obj_attr != default_attr  # not default (user passed value)
                    fail_2 = obj_attr != check_attr  # passed attr does not match base
                    fail_3 = default_attr is not None
                    fail = fail_1 and fail_2 and fail_3
                    setattr(ev_obj, k, check_attr)
                elif k in required and k in method_dict:
                    # True if passed attr does not match global attr defined by method
                    fail = getattr(ev_obj, k) != method_dict[k]
                    # Set event attr to global method attr
                    setattr(ev_obj, k, method_dict[k])
                if fail:
                    raise ImmutableEventError(cls.__name__)
Пример #2
0
    def check_when_arg_is_object(cls, obj_dict):
        default_method = cls.update(**obj_dict)

        py_sp = default_method["spectral_dimensions"]
        obj_sp = obj_dict["spectral_dimensions"]

        for py, obj in zip(py_sp, obj_sp):

            if len(py["events"]) != len(obj.events):
                raise ImmutableEventError(cls.__name__)

            cls.check_event_objects_for_compatibility(py, obj, obj_dict)
Пример #3
0
    def check_method_compatibility(cls, py_dict):
        """Check for events attribute inside the spectral_dimensions. Events are not
        allowed for NamedMethods."""
        if not isinstance(py_dict["spectral_dimensions"][0], dict):
            return cls.check_when_arg_is_object(py_dict)

        default_method = cls.update(**py_dict)
        default_spectral_dimensions = default_method["spectral_dimensions"]
        for i, item in enumerate(py_dict["spectral_dimensions"]):
            if item["events"] == [{}]:
                item["events"] = default_spectral_dimensions[i]["events"]

            elif item["events"] != default_spectral_dimensions[i]["events"]:
                raise ImmutableEventError(cls.__name__)

        for k, v in default_method.items():
            if k not in py_dict:
                py_dict[k] = v
Пример #4
0
    def check_event_objects_for_compatibility(cls, py, obj, obj_dict):
        required = ["magnetic_flux_density", "rotor_frequency", "rotor_angle"]
        py_obj = SpectralDimension(**py)
        for i, (ev_py, ev_obj) in enumerate(zip(py_obj.events, obj.events)):

            default_obj = SpectralDimension(events=[{}]).events[0]
            obj_keys = ev_obj.dict(exclude={"property_units"}).keys()
            py_keys = py["events"][i].keys()
            for k in obj_keys:
                a = False
                if k in py_keys:
                    a1, a2, a3 = [getattr(_, k) for _ in [ev_obj, default_obj, ev_py]]
                    a = a1 != a2 and a1 != a3 and a2 is not None
                    setattr(ev_obj, k, a3)
                elif k in required and k in obj_dict:
                    a = getattr(ev_obj, k) != obj_dict[k]
                    setattr(ev_obj, k, obj_dict[k])
                if a:
                    raise ImmutableEventError(cls.__name__)
Пример #5
0
    def check_when_arg_is_object(cls, method_dict):
        default_method = cls.update(**method_dict)
        default_sp = default_method["spectral_dimensions"]
        obj_sp = method_dict["spectral_dimensions"]

        for i, (dflt_dim, obj_dim) in enumerate(zip(default_sp, obj_sp)):
            if len(dflt_dim["events"]) != len(
                    obj_dim.events) and obj_dim.events != []:
                raise ImmutableEventError(cls.__name__)

            if obj_dim.events == []:
                obj_sp[i] = obj_dim.json(units=False)
                if "events" not in obj_sp[i]:
                    obj_sp[i]["events"] = dflt_dim["events"]
                obj_sp[i] = SpectralDimension(**obj_sp[i])

            cls.check_event_objects_for_compatibility(dflt_dim, obj_dim,
                                                      method_dict)

        for k, v in default_method.items():
            if k not in method_dict:
                method_dict[k] = v
Пример #6
0
    def check_method_compatibility(cls, py_dict):
        """Check for events attribute inside the spectral_dimensions. Events are not
        allowed for NamedMethods."""
        sp_list = py_dict["spectral_dimensions"]
        check_SD = [isinstance(sp, SpectralDimension) for sp in sp_list]
        if all(check_SD):
            return cls.check_when_arg_is_object(py_dict)

        default_method = cls.update(**py_dict)
        default_sp_list = default_method["spectral_dimensions"]

        for i, item in enumerate(sp_list):
            # If no events in SpectralDimension, set to default events
            if "events" not in item or item["events"] == [
                {}
            ] or item["events"] == []:
                item["events"] = default_sp_list[i]["events"]

            elif item["events"] != default_sp_list[i]["events"]:
                raise ImmutableEventError(cls.__name__)

        for k, v in default_method.items():
            if k not in py_dict:
                py_dict[k] = v