示例#1
0
def measurement_chain_with_equipment() -> MeasurementChain:
    """Get a default measurement chain with attached equipment."""
    source = SignalSource(
        "Current measurement",
        output_signal=Signal(signal_type="analog", units="V"),
        error=Error(Q_(1, "percent")),
    )
    ad_conversion = SignalTransformation(
        "AD conversion current measurement",
        error=Error(Q_(0, "percent")),
        func=MathematicalExpression(expression="a*x+b",
                                    parameters=dict(a=Q_(1, "1/V"),
                                                    b=Q_(1, ""))),
    )
    calibration = SignalTransformation(
        "Current measurement calibration",
        error=Error(Q_(1.2, "percent")),
        func=MathematicalExpression(expression="a*x+b",
                                    parameters=dict(a=Q_(1, "A"), b=Q_(1,
                                                                       "A"))),
    )
    eq_source = MeasurementEquipment(
        name="Source Equipment",
        sources=[source],
    )
    eq_ad_conversion = MeasurementEquipment(name="AD Equipment",
                                            transformations=[ad_conversion])
    eq_calibration = MeasurementEquipment(name="Calibration Equipment",
                                          transformations=[calibration])
    mc = MeasurementChain.from_equipment("Measurement chain", eq_source)
    mc.add_transformation_from_equipment(eq_ad_conversion)
    mc.add_transformation_from_equipment(eq_calibration)
    return mc
示例#2
0
def measurement_chain_without_equipment() -> MeasurementChain:
    """Get a default measurement chain without attached equipment."""
    mc = MeasurementChain(
        "Current measurement chain",
        SignalSource(
            "Current measurement",
            Signal("analog", "V"),
            Error(Q_(0.1, "percent")),
        ),
    )
    mc.add_transformation(
        SignalTransformation(
            name="AD conversion",
            error=Error(Q_(0.5, "percent")),
            type_transformation="AD",
        ))
    mc.add_transformation(
        SignalTransformation(
            name="Calibration",
            error=Error(Q_(1.5, "percent")),
            func=MathematicalExpression("a*x+b",
                                        parameters=dict(a=Q_(3, "A/V"),
                                                        b=Q_(2, "A"))),
        ))

    return mc
示例#3
0
    def _default_source_kwargs(kwargs: dict = None) -> dict:
        """Update a dict with default keyword arguments to create a `SignalSource`."""
        default_kwargs = dict(
            name="source", output_signal=Signal("analog", "V"), error=Error(0.01)
        )

        if kwargs is not None:
            default_kwargs.update(kwargs)

        return default_kwargs
示例#4
0
    def _default_add_transformation_kwargs(cls, kwargs: dict = None) -> dict:
        """Update a dict with default keyword arguments to call `add_transformation`."""
        default_kwargs = dict(
            transformation=cls._default_transformation(),
            error=Error(0.02),
            output_signal_type="digital",
            output_signal_unit="",
        )
        if kwargs is not None:
            default_kwargs.update(kwargs)

        return default_kwargs
示例#5
0
    def _default_transformation(kwargs: dict = None) -> SignalTransformation:
        """Return a default `SignalTransformation`.

        Use the kwargs parameter to modify the default values.

        """
        default_kwargs = dict(
            name="transformation",
            error=Error(0.1),
            func=MathematicalExpression("a*x", parameters={"a": Q_(1, "1/V")}),
            type_transformation="AD",
        )
        if kwargs is not None:
            default_kwargs.update(kwargs)

        return SignalTransformation(**default_kwargs)
示例#6
0
def test_meta_attr():
    e = Error(3.0)

    ts = pd.Timestamp("2020-01-01")
    setattr(ts, META_ATTR, {"name": "Timestamp"})

    setattr(e, META_ATTR, {"ts": ts})
    setattr(e, USER_ATTR, {"description": "user info"})

    tree = {"Error": e}

    data = _write_read_buffer(tree)

    e2 = data["Error"]

    assert e2 == e
    assert getattr(e2, META_ATTR) == getattr(e, META_ATTR)
    assert getattr(e2, USER_ATTR) == getattr(e, USER_ATTR)
    assert getattr(getattr(e2, META_ATTR)["ts"], META_ATTR) == getattr(ts, META_ATTR)
示例#7
0
def test_meta_attr():
    e = Error(3.0)

    ts = pd.DatetimeIndex(["2020", "2021"])
    setattr(ts, META_ATTR, {"name": "reference years"})

    setattr(e, META_ATTR, {"ts": ts})
    setattr(e, USER_ATTR, {"description": "user info"})

    tree = {"Error": e}

    data = write_read_buffer(tree)

    e2 = data["Error"]

    assert e2 == e
    assert compare_nested(getattr(e2, META_ATTR), getattr(e, META_ATTR))
    assert compare_nested(getattr(e2, USER_ATTR), getattr(e, USER_ATTR))
    assert compare_nested(getattr(getattr(e2, META_ATTR)["ts"], META_ATTR),
                          getattr(ts, META_ATTR))
示例#8
0
 def from_tree(cls, tree, ctx):
     obj = Error(**tree)
     return obj