Beispiel #1
0
def test_scale_and_offset_raw_value_iterable_for_set_cache(values,
                                                           offsets,
                                                           scales):
    p = Parameter(name='test_scale_and_offset_raw_value', set_cmd=None)

    # test that scale and offset does not change the default behaviour
    p.cache.set(values)
    assert p.raw_value == values

    # test setting scale and offset does not change anything
    p.scale = scales
    p.offset = offsets
    assert p.raw_value == values

    np_values = np.array(values)
    np_offsets = np.array(offsets)
    np_scales = np.array(scales)
    np_get_latest_values = np.array(p.get_latest())
    # Without a call to ``get``, ``get_latest`` will just return old
    # cached values without applying the set scale and offset
    np.testing.assert_allclose(np_get_latest_values, np_values)
    np_get_values = np.array(p.get())
    # Now that ``get`` is called, the returned values are the result of
    # application of the scale and offset. Obviously, calling
    # ``get_latest`` now will also return the values with the applied
    # scale and offset
    np.testing.assert_allclose(np_get_values,
                               (np_values - np_offsets) / np_scales)
    np_get_latest_values_after_get = np.array(p.get_latest())
    np.testing.assert_allclose(np_get_latest_values_after_get,
                               (np_values - np_offsets) / np_scales)

    # test ``cache.set`` for scalar values
    if not isinstance(values, Iterable):
        p.cache.set(values)
        np.testing.assert_allclose(np.array(p.raw_value),
                                   np_values * np_scales + np_offsets)
        # No set/get cmd performed

        # testing conversion back and forth
        p.cache.set(values)
        np_get_latest_values = np.array(p.get_latest())
        # No set/get cmd performed
        np.testing.assert_allclose(np_get_latest_values, np_values)

    # adding statistics
    if isinstance(offsets, Iterable):
        event('Offset is array')
    if isinstance(scales, Iterable):
        event('Scale is array')
    if isinstance(values, Iterable):
        event('Value is array')
    if isinstance(scales, Iterable) and isinstance(offsets, Iterable):
        event('Scale is array and also offset')
    if isinstance(scales, Iterable) and not isinstance(offsets, Iterable):
        event('Scale is array but not offset')
Beispiel #2
0
    def test_get_latest(self):
        # Create a gettable parameter
        local_parameter = Parameter('test_param', set_cmd=None, get_cmd=None)
        before_set = datetime.now()
        local_parameter.set(1)
        after_set = datetime.now()

        # Check we return last set value, with the correct timestamp
        self.assertEqual(local_parameter.get_latest(), 1)
        self.assertTrue(before_set <= local_parameter.get_latest.get_timestamp() <= after_set)

        # Check that updating the value updates the timestamp
        local_parameter.set(2)
        self.assertEqual(local_parameter.get_latest(), 2)
        self.assertGreaterEqual(local_parameter.get_latest.get_timestamp(), after_set)
def test_param_cmd_with_parsing():

    mem = ParameterMemory()

    p = Parameter('p_int',
                  get_cmd=mem.get,
                  get_parser=int,
                  set_cmd=mem.set,
                  set_parser=mem.parse_set_p)

    p(5)
    assert mem.get() == '5'
    assert p() == 5

    p.cache.set(7)
    assert p.get_latest() == 7
    # Nothing has been passed to the "instrument" at ``cache.set``
    # call, hence the following assertions should hold
    assert mem.get() == '5'
    assert p() == 5
    assert p.get_latest() == 5
Beispiel #4
0
def test_get_latest():
    time_resolution = time.get_clock_info('time').resolution
    sleep_delta = 2 * time_resolution

    # Create a gettable parameter
    local_parameter = Parameter('test_param', set_cmd=None, get_cmd=None)
    before_set = datetime.now()
    time.sleep(sleep_delta)
    local_parameter.set(1)
    time.sleep(sleep_delta)
    after_set = datetime.now()

    # Check we return last set value, with the correct timestamp
    assert local_parameter.get_latest() == 1
    assert before_set < local_parameter.get_latest.get_timestamp() < after_set

    # Check that updating the value updates the timestamp
    time.sleep(sleep_delta)
    local_parameter.set(2)
    assert local_parameter.get_latest() == 2
    assert local_parameter.get_latest.get_timestamp() > after_set
Beispiel #5
0
def test_val_mapping_with_parsers():
    # We store value external to cache
    # to allow testing of interaction with cache
    mem = ParameterMemory()

    # # set_parser with val_mapping
    # Parameter('p', set_cmd=mem.set, get_cmd=mem.get,
    #           val_mapping={'off': 0, 'on': 1},
    #           set_parser=mem.parse_set_p)

    # get_parser with val_mapping
    p = Parameter('p',
                  set_cmd=mem.set_p_prefixed,
                  get_cmd=mem.get,
                  get_parser=mem.strip_prefix,
                  val_mapping={
                      'off': 0,
                      'on': 1
                  },
                  vals=vals.Enum('off', 'on'))

    p('off')
    assert mem.get() == 'PVAL: 0'
    # this is slight strange. Since it uses a custom set_cmd
    # rather than a set_parser the raw_value does not match
    # what is actually sent to the instrument
    assert p.cache.raw_value == 0
    assert p() == 'off'

    mem.set('PVAL: 1')
    assert p() == 'on'

    p.cache.set('off')
    assert p.get_latest() == 'off'
    # Nothing has been passed to the "instrument" at ``cache.set``
    # call, hence the following assertions should hold
    assert mem.get() == 'PVAL: 1'
    assert p() == 'on'
    assert p.get_latest() == 'on'
    assert p.cache.get() == 'on'
Beispiel #6
0
def test_val_mapping_basic():
    # We store value external to cache
    # to allow testing of interaction with cache
    mem = ParameterMemory()

    p = Parameter('p',
                  set_cmd=mem.set,
                  get_cmd=mem.get,
                  val_mapping={
                      'off': 0,
                      'on': 1
                  },
                  vals=vals.Enum('off', 'on'))

    p('off')
    assert p.cache.raw_value == 0
    assert mem.get() == 0
    assert p() == 'off'

    mem.set(1)
    assert p() == 'on'

    # implicit mapping to ints
    mem.set('0')
    assert p() == 'off'

    # unrecognized response
    mem.set(2)
    with pytest.raises(KeyError):
        p()

    mem.set(1)

    p.cache.set('off')
    assert p.get_latest() == 'off'
    # Nothing has been passed to the "instrument" at ``cache.set``
    # call, hence the following assertions should hold
    assert mem.get() == 1
    assert p() == 'on'
    assert p.get_latest() == 'on'
Beispiel #7
0
def test_gettable():
    mem = ParameterMemory()
    p = Parameter('p', get_cmd=mem.get)
    mem.set(21)

    assert p() == 21
    assert p.get() == 21

    with pytest.raises(NotImplementedError):
        p(10)

    assert hasattr(p, 'get')
    assert p.gettable
    assert not hasattr(p, 'set')
    assert not p.settable

    p.cache.set(7)
    assert p.get_latest() == 7
    # Nothing has been passed to the "instrument" at ``cache.set``
    # call, hence the following assertions should hold
    assert mem.get() == 21
    assert p() == 21
    assert p.get_latest() == 21
Beispiel #8
0
def test_get_latest_no_get():
    """
    Test that get_latest on a parameter that does not have get is handled
    correctly.
    """
    local_parameter = Parameter('test_param', set_cmd=None, get_cmd=False)
    # The parameter does not have a get method.
    with pytest.raises(AttributeError):
        local_parameter.get()
    # get_latest will fail as get cannot be called and no cache
    # is available
    with pytest.raises(RuntimeError):
        local_parameter.get_latest()
    value = 1
    local_parameter.set(value)
    assert local_parameter.get_latest() == value

    local_parameter2 = Parameter('test_param2',
                                 set_cmd=None,
                                 get_cmd=False,
                                 initial_value=value)
    with pytest.raises(AttributeError):
        local_parameter2.get()
    assert local_parameter2.get_latest() == value
Beispiel #9
0
    def test_get_latest(self):
        time_resolution = time.get_clock_info('time').resolution
        sleep_delta = 2 * time_resolution

        # Create a gettable parameter
        local_parameter = Parameter('test_param', set_cmd=None, get_cmd=None)
        before_set = datetime.now()
        time.sleep(sleep_delta)
        local_parameter.set(1)
        time.sleep(sleep_delta)
        after_set = datetime.now()

        # Check we return last set value, with the correct timestamp
        self.assertEqual(local_parameter.get_latest(), 1)
        self.assertTrue(
            before_set < local_parameter.get_latest.get_timestamp() < after_set
        )

        # Check that updating the value updates the timestamp
        time.sleep(sleep_delta)
        local_parameter.set(2)
        self.assertEqual(local_parameter.get_latest(), 2)
        self.assertGreater(local_parameter.get_latest.get_timestamp(),
                           after_set)
Beispiel #10
0
def test_get_latest_raw_value():
    # To have a simple distinction between raw value and value of the
    # parameter lets create a parameter with an offset
    p = Parameter('p', set_cmd=None, get_cmd=None, offset=42)
    assert p.get_latest.get_timestamp() is None

    # Initially, the parameter's raw value is None
    assert p.get_latest.get_raw_value() is None

    # After setting the parameter to some value, the
    # ``.get_latest.get_raw_value()`` call should return the new raw value
    # of the parameter
    p(3)
    assert p.get_latest.get_timestamp() is not None
    assert p.get_latest.get() == 3
    assert p.get_latest() == 3
    assert p.get_latest.get_raw_value() == 3 + 42
Beispiel #11
0
def test_settable():
    mem = ParameterMemory()

    p = Parameter('p', set_cmd=mem.set, get_cmd=False)

    p(10)
    assert mem.get() == 10
    with pytest.raises(NotImplementedError):
        p()

    assert hasattr(p, 'set')
    assert p.settable
    assert not hasattr(p, 'get')
    assert not p.gettable

    # For settable-only parameters, using ``cache.set`` may not make
    # sense, nevertheless, it works
    p.cache.set(7)
    assert p.get_latest() == 7