def test_vector2_to_from_dict(): """Test the initalization of Vector2D objects and basic properties.""" vec = Vector2D(0, 2) vec_dict = vec.to_dict() new_vec = Vector2D.from_dict(vec_dict) assert isinstance(new_vec, Vector2D) assert new_vec.to_dict() == vec_dict pt = Point2D(0, 2) pt_dict = pt.to_dict() new_pt = Point2D.from_dict(pt_dict) assert isinstance(new_pt, Point2D) assert new_pt.to_dict() == pt_dict
def from_dict(cls, data): """ Create PsychrometricChart from a dictionary Args: data: A python dictionary in the following format .. code-block:: python { 'type': 'PsychrometricChart', 'temperature': {}, # data collection or value for temperature [C] 'relative_humidity': {}, # data collection or value for humidity [%] 'average_pressure': 101325, # average atmospheric pressure [Pa] 'legend_parameters': {}, # legend parameters dictionary 'base_point': {}, # Point2D dictionary 'x_dim': 1.0, # value for X dimension per degree 'y_dim': 1500.0, # value for Y dimension for unity humidity ratio 'min_temperature': -20.0, # value for minimum temperature 'max_temperature': 50.0, # value for maximum temperature 'max_humidity_ratio': 0.03, # value for maximum humidity ratio 'use_ip': False, # boolean for whether to use IP values } """ # process the optional inputs p = data['average_pressure'] if 'average_pressure' in data else 101325 lp = LegendParameters.from_dict(data['legend_parameters']) \ if 'legend_parameters' in data else None bpt = Point2D.from_dict(data['base_point']) if 'base_point' in data \ else Point2D() xd = data['x_dim'] if 'x_dim' in data else 1 yd = data['y_dim'] if 'y_dim' in data else 1500 tmin = data['min_temperature'] if 'min_temperature' in data else -20 tmax = data['max_temperature'] if 'max_temperature' in data else 50 hrmax = data[ 'max_humidity_ratio'] if 'max_humidity_ratio' in data else 0.03 ip = data['use_ip'] if 'use_ip' in data else False # process the data collections class_mapper = { 'DailyCollection': DailyCollection, 'HourlyContinuousCollection': HourlyContinuousCollection, 'HourlyDiscontinuousCollection': HourlyDiscontinuousCollection } t_data, rh_data = data['temperature'], data['relative_humidity'] temp = class_mapper[t_data['type']].from_dict(t_data) \ if isinstance(t_data, dict) else t_data rh = class_mapper[rh_data['type']].from_dict(rh_data) \ if isinstance(rh_data, dict) else rh_data return cls(temp, rh, p, lp, bpt, xd, yd, tmin, tmax, hrmax, ip)