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
Example #2
0
    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)