Source code for ladybug_comfort.collection.base

# coding=utf-8
"""Comfort data collection base object."""

from ladybug._datacollectionbase import BaseCollection
from ladybug.datatype.base import DataTypeBase


[docs]class ComfortCollection(object): """Base class for all thermal comfort collections. Properties: * comfort_model * calc_length * percent_neutral * percent_hot * percent_cold """ _model = None __slots__ = ('_calc_length', '_base_collection', '_input_collections') def __init__(self): self._calc_length = 0 self._base_collection = None self._input_collections = [] @property def comfort_model(self): """Return the name of the model to which the comfort datacollection belongs.""" return self._model @property def calc_length(self): """The number of values in the Data Collections of this object.""" return self._calc_length @property def percent_neutral(self): """The percent of time that the thermal_condition is neutral.""" raise NotImplementedError('percent_neutral has not yet been implemented for ' '{}.'.format(self.__class__.__name__)) @property def percent_cold(self): """The percent of time that the thermal_condition is cold.""" raise NotImplementedError('percent_cold has not yet been implemented for ' '{}.'.format(self.__class__.__name__)) @property def percent_hot(self): """The percent of time that the thermal_condition is hot.""" raise NotImplementedError('percent_hot has not yet been implemented for ' '{}.'.format(self.__class__.__name__)) def _check_datacoll(self, data_coll, dat_type, unit, name): """Check the data type and units of a Data Collection.""" assert isinstance(data_coll, BaseCollection), '{} must be a ' \ 'Data Collection. Got {}.'.format(name, type(data_coll)) assert isinstance(data_coll.header.data_type, dat_type) and \ data_coll.header.unit == unit, '{} must be {} in {}. ' \ 'Got {} in {}'.format(name, dat_type().name, unit, data_coll.header.data_type.name, data_coll.header.unit) def _check_input(self, data_coll, dat_type, unit, name): """Check the a Data Collection.""" if isinstance(data_coll, BaseCollection): self._check_datacoll(data_coll, dat_type, unit, name) self._input_collections.append(data_coll) return data_coll.values else: try: return [float(data_coll)] * self.calc_length except ValueError: raise TypeError('{} must be either a number or a Data Collection. ' 'Got {}'.format(name, type(data_coll))) def _get_coll(self, attr_name, value_list, dat_type, unit): if not hasattr(self, attr_name): if callable(value_list): value_list = value_list() # get values if passed a function if not isinstance(dat_type, DataTypeBase): dat_type = dat_type() # convert the class to an instance coll = self._base_collection.get_aligned_collection( value_list, dat_type, unit, mutable=False) if 'type' in coll.header.metadata: new_meta = coll.header.metadata.copy() new_meta.pop('type') coll.header.metadata = new_meta setattr(self, attr_name, coll) return getattr(self, attr_name)
[docs] def ToString(self): """Overwrite .NET ToString.""" return self.__repr__()
def __repr__(self): """Comfort model representation.""" return "{} ComfortCollection [{} values]".format( self.comfort_model, self._calc_length)