def do_asserts(self, repetitions, jobs_before, strict=True): table = self.data_listener.get_table() header = table.dtype.names # checking if all channels produced data for channel in self.channel_names: msg = 'data from channel %s were not acquired' % channel self.assertIn(channel, header, msg) # checking if data were acquired for ch_name in header: ch_data_len = len(table[ch_name]) if strict: msg = ('length of data for channel %s is %d and should be ' '%d' % (ch_name, ch_data_len, repetitions)) self.assertEqual(repetitions, ch_data_len, msg) else: msg = ('length of data for channel %s is %d and should <= ' '%d' % (ch_name, ch_data_len, repetitions)) self.assertGreaterEqual(repetitions, ch_data_len, msg) for value in table[ch_name]: if (isinstance(value, numpy.ndarray) or is_number(value) or is_pure_str(value)): break else: raise AssertionError('channel %s does not report any ' 'valid data') # checking if there are no pending jobs jobs_after = get_thread_pool().qsize msg = ('there are %d jobs pending to be done after the acquisition ' + '(before: %d)') % (jobs_after, jobs_before) self.assertEqual(jobs_before, jobs_after, msg)
def _preprocessParameters(self, parameters): if is_pure_str(parameters): inside_str = False pars = [] par = '' for c in parameters: if c == '"': if inside_str: inside_str = False pars.append(par) par = '' else: inside_str = True elif c == ' ': if inside_str: par += c else: pars.append(par) par = '' else: par += c if par: pars.append(par) return pars elif is_non_str_seq(parameters): return parameters
def _writeRecord(self, record): if self.filename is None: return _meas = self.fd[posixpath.join(self.entryname, 'measurement')] for dd in self.datadesc: if dd.name in record.data: data = record.data[dd.name] _ds = _meas[dd.label] if data is None: data = numpy.zeros(dd.shape, dtype=dd.dtype) # skip NaN if value reference is enabled if dd.value_ref_enabled and not is_pure_str(data): continue elif not hasattr(data, 'shape'): data = numpy.array([data], dtype=dd.dtype) elif dd.dtype != data.dtype.name: self.debug('%s casted to %s (was %s)', dd.label, dd.dtype, data.dtype.name) data = data.astype(dd.dtype) # resize the dataset and add the latest chunk if _ds.shape[0] <= record.recordno: _ds.resize(record.recordno + 1, axis=0) # write the slab of data _ds[record.recordno, ...] = data else: self.debug('missing data for label %r', dd.label) self.fd.flush()
def find_objects(self, param, type_class=All, subtype=All, pool=All): if is_pure_str(param): param = param, if type_class == MacroServer.All: type_name_list = self.get_data_type_names() else: if is_pure_str(type_class): type_name_list = type_class, else: type_name_list = type_class obj_set = set() param = ['^%s$' % x for x in param] re_objs = map(re.compile, param, len(param) * (re.IGNORECASE, )) re_subtype = re.compile(subtype, re.IGNORECASE) for type_name in type_name_list: type_class_name = type_name if type_class_name.endswith('*'): type_class_name = type_class_name[:-1] type_inst = self.get_data_type(type_class_name) if not type_inst.hasCapability(ParamType.ItemList): continue if self.is_macroserver_interface(type_class_name): for name, obj in type_inst.getObjDict(pool=pool).items(): for re_obj in re_objs: if re_obj.match(name) is not None: obj_type = ElementType[obj.get_type()] if subtype is MacroServer.All or re_subtype.match( obj_type): obj_set.add(obj) else: for name, obj in type_inst.getObjDict(pool=pool).items(): for re_obj in re_objs: if re_obj.match(name) is not None: obj_type = obj.getType() if (subtype is MacroServer.All or re_subtype.match(obj.getType())) and \ obj_type != "MotorGroup": obj_set.add(obj) return list(obj_set)
def find_objects(self, param, type_class=All, subtype=All, pool=All): if is_pure_str(param): param = param, if type_class == MacroServer.All: type_name_list = self.get_data_type_names() else: if is_pure_str(type_class): type_name_list = type_class, else: type_name_list = type_class obj_set = set() param = ['^%s$' % x for x in param] re_objs = map(re.compile, param, len(param) * (re.IGNORECASE,)) re_subtype = re.compile(subtype, re.IGNORECASE) for type_name in type_name_list: type_class_name = type_name if type_class_name.endswith('*'): type_class_name = type_class_name[:-1] type_inst = self.get_data_type(type_class_name) if not type_inst.hasCapability(ParamType.ItemList): continue if self.is_macroserver_interface(type_class_name): for name, obj in type_inst.getObjDict(pool=pool).items(): for re_obj in re_objs: if re_obj.match(name) is not None: obj_type = ElementType[obj.get_type()] if subtype is MacroServer.All or re_subtype.match(obj_type): obj_set.add(obj) else: for name, obj in type_inst.getObjDict(pool=pool).items(): for re_obj in re_objs: if re_obj.match(name) is not None: obj_type = obj.getType() if (subtype is MacroServer.All or re_subtype.match(obj.getType())) and \ obj_type != "MotorGroup": obj_set.add(obj) return list(obj_set)
def get_elements_with_interface(self, interface): ret = CaselessDict() if is_pure_str(interface): interface_str = interface interface = Interface[interface_str] else: interface_str = Interface[interface] if self.is_macroserver_interface(interface): ret.update(self._LOCAL_INTERFACES.get(interface)(self)) else: for pool in self.get_pools(): ret.update(pool.getElementsWithInterface(interface_str)) return ret
def test_value_ref_enabled(self): mg_name = str(uuid.uuid1()) channel_name = "_test_2d_1_1" argin = [mg_name, channel_name] self.pool.CreateMeasurementGroup(argin) try: mg = Device(mg_name) channel = Device(channel_name) mg.setValueRefEnabled(True, channel_name) _, values = mg.count(.1) for channel_name, value in values.items(): msg = "ValueRef (%s) for %s is not string" %\ (value, channel_name) self.assertTrue(is_pure_str(value), msg) finally: channel.cleanUp() mg.cleanUp() self.pool.DeleteElement(mg_name)
def is_macroserver_interface(self, interface): if is_pure_str(interface): interface = Interface[interface] return interface in self._LOCAL_INTERFACES