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)
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()
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_)
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')
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
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)
) # 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()))
def v(): return TimeSeriesProp(name='v', units='m/s', time=dates2, data=v_data)
def u(): return TimeSeriesProp(name='u', units='m/s', time=dates2, data=u_data)