Beispiel #1
0
 def test_no_write_in_config(self):
     """
     Make sure the scope isn't continuously writing to config file,
     even in running mode.
     """
     # check whether something else is writing continuously to config file
     self.pyrpl.rp.scope.stop()
     async_sleep(1.0)
     old = self.pyrpl.c._save_counter
     async_sleep(1.0)
     new = self.pyrpl.c._save_counter
     assert (old == new), (old, new, "scope is not the reason")
     # next, check whether the scope does this
     for rolling_mode in (True, False):
         self.pyrpl.rp.scope.setup(duration=0.005,
                                   trigger_delay=0.,
                                   input1='in1',
                                   ch1_active=True,
                                   ch2_active=True,
                                   rolling_mode=True,
                                   trace_average=1,
                                   running_state="running_continuous")
         old = self.pyrpl.c._save_counter
         async_sleep(1.0)
         APP.processEvents()
         new = self.pyrpl.c._save_counter
         self.pyrpl.rp.scope.stop()
         assert(old==new), (old, new, "scope is the problem", rolling_mode)
 def test_no_write_in_config(self):
     """
     Make sure the spec an isn't continuously writing to config file,
     even in running mode.
     :return:
     """
     self.pyrpl.spectrumanalyzer.setup_attributes = dict(
         span=1e5, input="out1", running_state='running_continuous')
     old = self.pyrpl.c._save_counter
     for i in range(10):
         sleep(0.01)
         APP.processEvents()
     new = self.pyrpl.c._save_counter
     self.pyrpl.spectrumanalyzer.stop()
     assert (old == new), (old, new)
    def assert_spin_box(self, mod, widget, name, aw):
        print("Testing spinbox widget for %s.%s..." %(mod.name, name))
        # make sure the module is not reserved by some other module
        # (as this would disable the key press response)
        mod.free()
        APP.processEvents()
        # save original value for later
        original_m_value = getattr(mod, name)
        # set attribute in the middle between minimum and maximum
        maximum = aw.widget.maximum if np.isfinite(
                                aw.widget.maximum) else 10000000
        minimum = aw.widget.minimum if np.isfinite(
            aw.widget.minimum) else -10000000
        setattr(mod, name, (maximum + minimum)/2)
        APP.processEvents()
        w_value = aw.widget_value
        m_value = getattr(mod, name)
        norm = 1 if (m_value==0 or w_value==0) else m_value
        assert abs(w_value - m_value)/norm < 0.001, \
            (w_value, m_value, mod.name, name)

        # some widgets are disabled by default and must be skipped
        fullname = "%s.%s" % (mod.name, name)
        exclude = ['spectrumanalyzer.center']
        if fullname in exclude:
            # skip test for those
            print("Widget %s.%s was not enabled and cannot be tested..."
                  % (mod.name, name))
            return

        # go up
        QtTest.QTest.keyPress(aw, QtCore.Qt.Key_Up)
        async_sleep(self._TEST_SPINBOX_BUTTON_DOWN_TIME)
        QtTest.QTest.keyRelease(aw, QtCore.Qt.Key_Up)
        async_sleep(self._TEST_SPINBOX_BUTTON_DOWN_TIME)
        new_val = getattr(mod, name)
        assert(new_val > m_value), (new_val, m_value, mod.name, name)

        # go down
        QtTest.QTest.keyPress(aw, QtCore.Qt.Key_Down)
        async_sleep(self._TEST_SPINBOX_BUTTON_DOWN_TIME)
        QtTest.QTest.keyRelease(aw, QtCore.Qt.Key_Down)
        async_sleep(self._TEST_SPINBOX_BUTTON_DOWN_TIME)
        new_new_val = getattr(mod, name)
        assert (new_new_val < new_val), (new_new_val, new_val, mod.name, name)

        # reset original value from before test
        setattr(mod, name, original_m_value)
Beispiel #4
0
 def data_changing(self):
     async_sleep(0.1)
     APP.processEvents()
     if self.r.scope.data_avg is not None:
         data = self.r.scope.data_avg[0]
     else:
         data = None
     async_sleep(0.75)
     for i in range(1000):
         APP.processEvents()
     async_sleep(0.1)
     if self.r.scope.data_avg is not None:
         res = self.r.scope.data_avg[0]
     else:
         res = None
     if data is None:
         return res is not None
     return ((data != res)[~np.isnan(data)]).any()
Beispiel #5
0
 def test_save_curve_old(self):
     self.r.scope.setup(duration=0.01,
                        trigger_source='immediately',
                        trigger_delay=0.,
                        rolling_mode=True,
                        input1='in1',
                        ch1_active=True,
                        ch2_active=True)
     self.r.scope.single()
     time.sleep(0.1)
     APP.processEvents()
     curve1, curve2 = self.r.scope.save_curve()
     attr = self.r.scope.setup_attributes
     for curve in (curve1, curve2):
         intersect = set(curve.params.keys()) & set(attr)
         assert len(intersect) >= 5  # make sure some parameters are saved
         p1 = dict((k, curve.params[k]) for k in intersect)
         p2 = dict((k, attr[k]) for k in intersect)
         assert p1 == p2   # make sure those parameters are equal to the
         # setup_attributes of the scope
     self.curves += [curve1, curve2]  # for later deletion
    def assert_validate_and_normalize(self, mod):
        self.results = []

        def check_fpga_value_equals_signal_value(attr_name, list_value):
            print(
                "check_fpga_value_equals_signal_value(%s.%s, %s) was called!" %
                (mod.name, attr_name, list_value))
            # add an entry to results
            self.results.append(
                ("%s.%s" % (mod.name, attr_name), list_value[0],
                 getattr(mod, attr_name)))

        mod._signal_launcher.update_attribute_by_name.connect(
            check_fpga_value_equals_signal_value)
        attr_names, attr_vals = scramble_values(mod)
        APP.processEvents()
        mod._signal_launcher.update_attribute_by_name.disconnect(
            check_fpga_value_equals_signal_value)
        # check that enough results have been received
        assert len(attr_names) <= len(self.results), \
            "%d attr_names > %d results"%(len(attr_names), len(self.results))
        # check that all values that were modified have returned at least one result
        resultnames = [name for (name, _, __) in self.results]
        for attr_name in attr_names:
            fullname = "%s.%s" % (mod.name, attr_name)
            assert fullname in resultnames, "%s not in resultnames" % fullname
        # check that the returned values are in agreement with our expectation
        exceptions = [
            'scope._reset_writestate_machine',  # always False
            'asg0._offset_masked',  # TODO: migrate bit mask from #317
            'asg1._offset_masked',  # set_value to validate_and_normalize #317
            'asg0.offset',  # TODO: fix offset as named in issue #317
            'asg1.offset',  # TODO: fix offset as named in issue #317
        ]
        for (name, list_value, attr_value) in self.results:
            if not name in exceptions:
                assert (list_value == attr_value), (name, list_value,
                                                    attr_value)
Beispiel #7
0
"config_file_name"
"""
import sys
from pyrpl import APP, Pyrpl  # no local import here because of pyinstller error

if __name__ == '__main__':
    if len(sys.argv) > 3:
        print("usage: python run_pyrpl.py [[config]=config_file_name] "
              "[source=config_file_template] [hostname=hostname/ip]")
    kwargs = dict()
    for i, arg in enumerate(sys.argv):
        print (i, arg)
        if i == 0:
            continue
        try:
            k, v = arg.split('=', 1)
        except ValueError:
            k, v = arg, ""
        if v == "":
            if i == 1:
                kwargs["config"] = k
        else:
            kwargs[k] = v
    #APP = QtWidgets.QApplication.instance()
    #if APP is None:
    #    APP = QtWidgets.QApplication(sys.argv)

    print("Calling Pyrpl(**%s)"%str(kwargs))
    PYRPL = Pyrpl(**kwargs)
    APP.exec_()