From aaf65977768cd9bb7c75d130a01d5b0932ec8935 Mon Sep 17 00:00:00 2001 From: "J.A. de Jong - Redu-Sone B.V., ASCEE V.O.F" Date: Thu, 17 Jun 2021 10:33:22 +0200 Subject: [PATCH] Bugfix for comparing of physical quantities --- lasp/device/lasp_device_common.py | 31 ++++++++++++------ lasp/lasp_common.py | 53 +++++++++++++++++-------------- 2 files changed, 52 insertions(+), 32 deletions(-) diff --git a/lasp/device/lasp_device_common.py b/lasp/device/lasp_device_common.py index 1ad2cec..cbc54eb 100644 --- a/lasp/device/lasp_device_common.py +++ b/lasp/device/lasp_device_common.py @@ -1,12 +1,13 @@ __all__ = ['DaqChannel'] -from ..lasp_common import Qty, SIQtys +import json, logging from dataclasses import dataclass, field -from dataclasses_json import dataclass_json from typing import List -import json +from dataclasses_json import dataclass_json +from ..lasp_common import Qty, SIQtys + @dataclass_json -@dataclass +@dataclass(eq=False) class DaqChannel: channel_enabled: bool channel_name: str = 'Unnamed channel' @@ -17,12 +18,12 @@ class DaqChannel: channel_metadata: str = '' def __post_init__(self): + # logging.debug(f'__post_init__({self.channel_name})') + self._qty = SIQtys.default() if len(self.channel_metadata) > 0: meta = json.loads(self.channel_metadata) - if '_qty' in meta: - self._qty = Qty.from_json(meta['_qty']) - else: - self._qty = SIQtys.default + if 'qty' in meta: + self._qty = Qty.from_json(meta['qty']) @property def qty(self): @@ -31,7 +32,7 @@ class DaqChannel: @qty.setter def qty(self, newqty): self._qty = newqty - self._store('_qty', newqty) + self._store('qty', newqty) def _store(self, name, val): if len(self.channel_metadata) > 0: @@ -42,3 +43,15 @@ class DaqChannel: meta[name] = val.to_json() self.channel_metadata = json.dumps(meta) + def __eq__(self, other): + """ + We overwrite the default equal-check as the floating point values + cannot be exactly checked due to conversion from/to JSON + """ + return (self.channel_enabled == other.channel_enabled and + self.channel_name == other.channel_name and + self.range_index == other.range_index and + self.ACCoupling_enabled == other.ACCoupling_enabled and + self.IEPE_enabled == other.IEPE_enabled and + self.channel_metadata == other.channel_metadata) + diff --git a/lasp/lasp_common.py b/lasp/lasp_common.py index 9b152ec..3ce3c3d 100644 --- a/lasp/lasp_common.py +++ b/lasp/lasp_common.py @@ -1,8 +1,5 @@ # -*- coding: utf-8 -*- -import os, platform -import shelve -import sys -import appdirs +import shelve, logging, sys, appdirs, os, platform import numpy as np from .wrappers import Window as wWindow @@ -59,21 +56,36 @@ class AvType(Enum): @dataclass_json -@dataclass +@dataclass(eq=False) class Qty: name: str unit_name: str unit_symb: str - level_unit: str - level_ref_name: str - level_ref_value: str + level_unit: object + # Contains a tuple of possible level names, including its reference value. + # For now, it is only able to compute for the first one. I.e.e we are not + # yet able to compute `dBPa's' + level_ref_name: object + level_ref_value: object def __str__(self): - return self.name + f' [{self.unit_symb}]' + return f'{self.name} [{self.unit_symb}]' + + def __eq__(self, other): + # logging.debug('eq()') + """ + Comparison breaks for the other objects, level unit, level ref name, + etc as these are tuples / a single string. + + """ + return (self.name == other.name and + self.unit_name == other.unit_name) -class SIQtys: + +@unique +class SIQtys(Enum): N = Qty(name='Number', unit_name='No unit / full scale', unit_symb='-', @@ -96,9 +108,6 @@ class SIQtys: level_ref_name=('1V',), level_ref_value=(1.0,), ) - types = (N, AP, V) - default = N - default_index = 0 @staticmethod def fillComboBox(cb): @@ -109,20 +118,18 @@ class SIQtys: cb: QComboBox to fill """ cb.clear() - for ty in SIQtys.types: - cb.addItem(f'{ty.unit_name}') - cb.setCurrentIndex(SIQtys.default_index) + for ty in SIQtys: + cb.addItem(f'{ty.value.unit_name}') + cb.setCurrentIndex(0) + + @staticmethod + def default(): + return SIQtys.N.value @staticmethod def getCurrent(cb): - return SIQtys.types[cb.currentIndex()] + return list(SIQtys)[cb.currentIndex()] - @staticmethod - def getIndex(qty): - for i, qtyi in enumerate(SIQtys.types): - if qtyi == qty: - return i - return -1 @dataclass class CalSetting: