Source code for fdi.dataset.numericparameter

# -*- coding: utf-8 -*-

from .metadata import Parameter
from .quantifiable import Quantifiable
from .datatypes import Vector, Vector2D, Vector3D, Quaternion

from collections.abc import Sequence
from collections import OrderedDict
from copy import copy
import logging
# create logger
logger = logging.getLogger(__name__)
# logger.debug('level %d' %  (logger.getEffectiveLevel()))


[docs]class NumericParameter(Parameter, Quantifiable): """ A Parameter that has a number as the value, a unit, and a typecode. """
[docs] def __init__(self, value=None, description='UNKNOWN', typ_='', default=None, unit=None, valid=None, typecode=None, **kwds): """ Set up a parameter whose value is a or a list of numbers. typ_: type of the parameter value. """ # collect args-turned-local-variables. args = copy(locals()) args.pop('__class__', None) args.pop('kwds', None) args.pop('self', None) args.update(kwds) super().__init__( value=value, description=description, typ_=typ_, default=default, unit=unit, valid=valid, typecode=typecode) # Must overwrite the self._all_attrs set by supera() self._all_attrs = args
def __getstate__(self): """ Can be encoded with serializableEncoder """ return OrderedDict(description=self.description, type=self._type, default=self._default, value=self._value, valid=self._valid, unit=self._unit, typecode=self._typecode)
[docs] def setValue(self, value): """ accept any type that a Vector does. """ if value is not None and issubclass(value.__class__, Sequence): if self.type in ('vector', 'vector2d', 'vector3d', 'quaternion'): d = list(value) len_d = len(d) if len_d == 2: value = Vector2D(d) elif len_d == 3: value = Vector3D(d) elif len_d == 4 and getattr(self, '_type', None) == 'quaternion': value = Quaternion(d) else: value = Vector(d) super().setValue(value)
[docs] def setDefault(self, default): """ accept any type that a Vector does. 'Accept sequence of only 0 to 4 elements for NumericParameter and Vectors.') """ if default is not None and issubclass(default.__class__, Sequence): # MUST NOT depend on self.type being existing if getattr(self, '_type', None) in ('vector', 'vector2d', 'vector3d', 'quaternion'): d = list(default) len_d = len(d) if len_d == 2: default = Vector2D(d) elif len_d == 3: default = Vector3D(d) elif len_d == 4 and getattr(self, '_type', None) == 'quaternion': default = Quaternion(d) else: pass # raise ValueError( # 'Sequence of only 0 to 4 elements for NumericParameter and Vectors.') super().setDefault(default)
[docs]class BooleanParameter(Parameter): """ A Parameter that has a boolean as the value. """
[docs] def __init__(self, value=None, description='UNKNOWN', default=None, valid=None, **kwds): """ Set up a parameter whose value is a boolean """ typ_ = kwds.pop('typ_', 'boolean') # collect args-turned-local-variables. args = copy(locals()) args.pop('__class__', None) args.pop('kwds', None) args.pop('self', None) args.update(kwds) super().__init__( value=value, description=description, typ_=typ_, default=default, valid=valid) # Must overwrite the self._all_attrs set by supera() self._all_attrs = args
def __getstate__(self): """ Can be encoded with serializableEncoder """ return OrderedDict(description=self.description, type=getattr(self, '_type', ''), default=getattr(self, '_default', ''), value=getattr(self, '_value', ''), valid=getattr(self, '_valid', ''),)
[docs] def setValue(self, value): """ accept any type that `bool` does. """ b = None if value is None else bool(value) super().setValue(b)
[docs] def setDefault(self, default): """ accept any type that `bool` Vector does. """ b = None if default is None else bool(default) super().setDefault(b)