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)
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()
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)
"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_()