Ejemplo n.º 1
0
    def test_construction(self):

        u = None
        v = None
        with pytest.raises(ValueError):
            # mismatched data and dates length
            dates = []
            u = TimeSeriesProp(
                'u', 'm/s', [datetime.datetime.now(),
                             datetime.datetime.now()], [
                                 5,
                             ])

        u = TimeSeriesProp('u', 'm/s', [datetime.datetime.now()], [
            5,
        ])

        assert u is not None
        assert u.name == 'u'
        assert u.units == 'm/s'

        v = None
        with pytest.raises(ValueError):
            v = TimeSeriesProp('v', 'nm/hr', [datetime.datetime.now()], [
                5,
            ])

        assert v is None

        constant = TimeSeriesProp.constant('const', 'm/s', 5)
        assert constant.data[0] == 5
        assert all(constant.at(np.array((0, 0)), datetime.datetime.now()) == 5)
Ejemplo n.º 2
0
    def test_at(self):

        dates2 = np.array([
            dt.datetime(2000, 1, 1, 0),
            dt.datetime(2000, 1, 1, 2),
            dt.datetime(2000, 1, 1, 4),
            dt.datetime(2000, 1, 1, 6),
            dt.datetime(2000, 1, 1, 8),
        ])
        u_data = np.array([2., 4., 6., 8., 10.])
        u = TimeSeriesProp(name='u', units='m/s', time=dates2, data=u_data)

        corners = np.array(((1, 1), (2, 2)))
        t1 = dt.datetime(1999, 12, 31, 23)
        t2 = dt.datetime(2000, 1, 1, 0)
        t3 = dt.datetime(2000, 1, 1, 1)
        t4 = dt.datetime(2000, 1, 1, 8)
        t5 = dt.datetime(2000, 1, 1, 9)

        # No extrapolation. out of bounds time should fail
        with pytest.raises(ValueError):
            u.at(corners, t1)
        assert (u.at(corners, t2) == np.array([2])).all()
        assert (u.at(corners, t3) == np.array([3])).all()
        assert (u.at(corners, t4) == np.array([10])).all()
        with pytest.raises(ValueError):
            u.at(corners, t5)

        # turn extrapolation on
        assert (u.at(corners, t1, extrapolate=True) == np.array([2])).all()
        assert (u.at(corners, t5, extrapolate=True) == np.array([10])).all()
Ejemplo n.º 3
0
 def new_from_dict(cls, dict_):
     varnames = dict_['varnames']
     vs = []
     for i, varname in enumerate(varnames):
         vs.append(
             TimeSeriesProp(name=varname,
                            units=dict_['units'],
                            time=dict_['time'],
                            data=dict_['data'][i]))
     dict_.pop('data')
     dict_['variables'] = vs
     return super(VelocityTS, cls).new_from_dict(dict_)
Ejemplo n.º 4
0
    def test_unit_conversion(self):
        u = TimeSeriesProp('u', 'm/s', [datetime.datetime.now()], [
            5,
        ])

        t = u.in_units('km/hr')

        assert t.data is not u.data
        assert round(t.data[0], 2) == 18.0

        with pytest.raises(unit_conversion.NotSupportedUnitError):
            # mismatched data and dates length
            t = u.in_units('nm/hr')
Ejemplo n.º 5
0
    def test_construction(self):

        u = None
        v = None
        with pytest.raises(ValueError):
            # mismatched data and dates length
            u = TimeSeriesProp('u', 'm/s', dates, u_data)

        assert u is None

        u = TimeSeriesProp('u', 'm/s', dates2, u_data)

        assert u is not None
        assert u.name == 'u'
        assert u.units == 'm/s'
        print u.time == Time(dates2)
        assert u.time == Time(dates2)
        assert (u.data == u_data).all()

        v = None
        with pytest.raises(ValueError):
            v = TimeSeriesProp('v', 'nm/hr', dates2, v_data)

        assert v is None
Ejemplo n.º 6
0
 def __init__(self, angle=None, **kwargs):
     """
     :param angle: scalar field of cell rotation angles (for rotated/distorted grids)
     """
     if 'variables' in kwargs:
         variables = kwargs['variables']
         if len(variables) == 2:
             variables.append(TimeSeriesProp(name='constant w', data=[0.0], time=Time.constant_time(), units='m/s'))
         kwargs['variables'] = variables
     if angle is None:
         df = None
         if kwargs.get('dataset', None) is not None:
             df = kwargs['dataset']
         elif kwargs.get('grid_file', None) is not None:
             df = _get_dataset(kwargs['grid_file'])
         if df is not None and 'angle' in df.variables.keys():
             # Unrotated ROMS Grid!
             self.angle = GriddedProp(name='angle', units='radians', time=None, grid=kwargs['grid'], data=df['angle'])
         else:
             self.angle = None
     else:
         self.angle = angle
     super(VelocityGrid, self).__init__(**kwargs)
Ejemplo n.º 7
0
            )  # scale winds from 100-0% depending on ice coverage
            return vels
        else:
            return self.wind_var.at(points, time, units, extrapolate)


if __name__ == "__main__":
    import datetime as dt
    dates = np.array([
        dt.datetime(2000, 1, 1, 0),
        dt.datetime(2000, 1, 1, 2),
        dt.datetime(2000, 1, 1, 4)
    ])
    u_data = np.array([3, 4, 5])
    v_data = np.array([4, 3, 12])
    u = TimeSeriesProp('u', 'm/s', dates, u_data)
    v = TimeSeriesProp('v', 'm/s', dates, v_data)

    print u.at(np.array([(1, 1), (1, 2)]), dt.datetime(2000, 1, 1, 1))

    vprop = TSVectorProp('velocity', 'm/s', variables=[u, v])
    print vprop.at(np.array([(1, 1), (1, 2)]), dt.datetime(2000, 1, 1, 3))

    vel = VelocityTS('test_vel', variables=[u, v])
    print vel.at(np.array([(1, 1), (1, 2)]), dt.datetime(2000, 1, 1, 3))

    import pprint
    pp = pprint.PrettyPrinter(indent=4)
    pp.pprint(vel.serialize())
    pp.pprint(VelocityTS.deserialize(vel.serialize()))
Ejemplo n.º 8
0
def v():
    return TimeSeriesProp(name='v', units='m/s', time=dates2, data=v_data)
Ejemplo n.º 9
0
def u():
    return TimeSeriesProp(name='u', units='m/s', time=dates2, data=u_data)