def test_stream_dict_to_ds_created_from_df(self, pd): data = pd.DataFrame(dict(a=[10], b=[20], c=[30])).set_index('c') ds = ColumnDataSource(data) ds._document = "doc" notify_owners_stuff = {} def notify_owners_mock(*args, **kw): notify_owners_stuff['args'] = args notify_owners_stuff['kw'] = kw ds.data._notify_owners = notify_owners_mock stream_stuff = {} data_stream = ds.data._stream def stream_wrapper(*args, **kwargs): stream_stuff['args'] = args stream_stuff['kwargs'] = kwargs data_stream(*args, **kwargs) ds.data._stream = stream_wrapper ds._stream( dict(a=[11, 12], b=np.array([21, 22]), c=pd.Series([31, 32])), 7) assert len(stream_stuff['args']) == 5 expected_stream_args = ("doc", ds, dict(a=[11, 12], b=np.array([21, 22]), c=pd.Series([31, 32])), 7, None) for i, (arg, ex_arg) in enumerate( zip(stream_stuff['args'], expected_stream_args)): if i == 2: assert arg['a'] == ex_arg['a'] del arg['a'], ex_arg['a'] self._assert_equal_dicts_of_arrays(arg, ex_arg) else: assert arg == ex_arg assert stream_stuff['kwargs'] == {} assert len(notify_owners_stuff['args']) == 1 self._assert_equal_dicts_of_arrays( notify_owners_stuff['args'][0], dict(a=np.array([10]), b=np.array([20]), c=np.array([30]))) self._assert_equal_dicts_of_arrays( dict(ds.data), dict(a=np.array([10, 11, 12]), b=np.array([20, 21, 22]), c=np.array([30, 31, 32])))
def test_transform_series_force_list_true(pd): df = pd.Series([1, 3, 5, 6, 8]) out = bus.transform_series(df, force_list=True) assert isinstance(out, list) df = pd.Series([1, 3, 5, 6, 8], dtype=np.int32) out = bus.transform_series(df, force_list=True) assert isinstance(out, list) df = pd.Series([1.0, 3, 5, 6, 8]) out = bus.transform_series(df, force_list=True) assert isinstance(out, list) df = pd.Series(np.array([np.nan, np.inf, -np.inf, 0])) out = bus.transform_series(df, force_list=True) assert isinstance(out, list)
def test_nans_and_infs_pandas(self, pd): arr = pd.Series(np.array([np.nan, np.inf, -np.inf, 0])) serialized = self.serialize(arr) deserialized = self.deserialize(serialized) assert deserialized[0] == 'NaN' assert deserialized[1] == 'Infinity' assert deserialized[2] == '-Infinity' assert deserialized[3] == 0
def test_transform_series_force_list_default_with_buffers(pd): # default int seems to be int64, can't be converted to buffer! df = pd.Series([1, 3, 5, 6, 8]) out = bus.transform_series(df) assert isinstance(out, list) assert out == [1, 3, 5, 6, 8] df = pd.Series([1, 3, 5, 6, 8], dtype=np.int32) bufs = [] out = bus.transform_series(df, buffers=bufs) assert isinstance(out, dict) assert len(bufs) == 1 assert len(bufs[0]) == 2 assert bufs[0][1] == np.array(df).tobytes() assert 'shape' in out assert out['shape'] == df.shape assert 'dtype' in out assert out['dtype'] == df.dtype.name assert '__buffer__' in out df = pd.Series([1.0, 3, 5, 6, 8]) bufs = [] out = bus.transform_series(df, buffers=bufs) assert isinstance(out, dict) assert len(bufs) == 1 assert len(bufs[0]) == 2 assert bufs[0][1] == np.array(df).tobytes() assert 'shape' in out assert out['shape'] == df.shape assert 'dtype' in out assert out['dtype'] == df.dtype.name assert '__buffer__' in out df = pd.Series(np.array([np.nan, np.inf, -np.inf, 0])) bufs = [] out = bus.transform_series(df, buffers=bufs) assert isinstance(out, dict) assert len(bufs) == 1 assert len(bufs[0]) == 2 assert bufs[0][1] == np.array(df).tobytes() assert 'shape' in out assert out['shape'] == df.shape assert 'dtype' in out assert out['dtype'] == df.dtype.name assert '__buffer__' in out
def test_transform_series_force_list_default(pd): # default int seems to be int64, can't be encoded! df = pd.Series([1, 3, 5, 6, 8]) out = bus.transform_series(df) assert isinstance(out, list) assert out == [1, 3, 5, 6, 8] df = pd.Series([1, 3, 5, 6, 8], dtype=np.int32) out = bus.transform_series(df) assert isinstance(out, dict) df = pd.Series([1.0, 3, 5, 6, 8]) out = bus.transform_series(df) assert isinstance(out, dict) df = pd.Series(np.array([np.nan, np.inf, -np.inf, 0])) out = bus.transform_series(df) assert isinstance(out, dict)
def test_stream_series_to_ds_created_from_df(self, pd): data = pd.DataFrame(dict(a=[10], b=[20], c=[30])) ds = ColumnDataSource(data) ds._document = "doc" notify_owners_stuff = {} def notify_owners_mock(*args, **kw): notify_owners_stuff['args'] = args notify_owners_stuff['kw'] = kw ds.data._notify_owners = notify_owners_mock stream_stuff = {} data_stream = ds.data._stream def stream_wrapper(*args, **kwargs): stream_stuff['args'] = args stream_stuff['kwargs'] = kwargs data_stream(*args, **kwargs) ds.data._stream = stream_wrapper ds._stream(pd.Series([11, 21, 31], index=list('abc')), 7) assert len(stream_stuff['args']) == 5 expected_df = pd.DataFrame( dict(a=np.array([11]), b=np.array([21]), c=np.array([31]))) expected_stream_data = expected_df.to_dict('series') expected_stream_data['index'] = expected_df.index.values expected_args = ("doc", ds, expected_stream_data, 7, None) for i, (arg, ex_arg) in enumerate(zip(stream_stuff['args'], expected_args)): if i == 2: self._assert_equal_dicts_of_arrays(arg, ex_arg) else: assert arg == ex_arg assert stream_stuff['kwargs'] == {} assert len(notify_owners_stuff['args']) == 1 self._assert_equal_dicts_of_arrays( notify_owners_stuff['args'][0], dict(a=np.array([10]), b=np.array([20]), c=np.array([30]), index=np.array([0]))) self._assert_equal_dicts_of_arrays( dict(ds.data), dict(a=np.array([10, 11]), b=np.array([20, 21]), c=np.array([30, 31]), index=np.array([0, 0])))
def test_transform_column_source_data_with_buffers(pd, cols, dt1, dt2): d = dict(a=[1, 2, 3], b=np.array([4, 5, 6], dtype=dt1), c=pd.Series([7, 8, 9], dtype=dt2)) bufs = [] out = bus.transform_column_source_data(d, buffers=bufs, cols=cols) assert set(out) == (set(d) if cols is None else set(cols)) if 'a' in out: assert out['a'] == [1, 2, 3] for x in ['b', 'c']: dt = d[x].dtype if x in out: if dt in bus.BINARY_ARRAY_TYPES: assert isinstance(out[x], dict) assert 'shape' in out[x] assert out[x]['shape'] == d[x].shape assert 'dtype' in out[x] assert out[x]['dtype'] == d[x].dtype.name assert '__buffer__' in out[x] else: assert isinstance(out[x], list) assert out[x] == list(d[x])
def test__get_range_with_too_long_series(pd): with pytest.raises(ValueError): _get_range(pd.Series([20, 30, 40]))
def test__get_range_with_series(pd): r = _get_range(pd.Series([20, 30])) assert isinstance(r, Range1d) assert r.start == 20 assert r.end == 30
def test_transform_array_with_nans_to_list(pd, values): s = pd.Series([np.nan, values[0], values[1]]) out = bus.transform_array_to_list(s) assert isinstance(out, list) assert out == ['NaN', values[0], values[1]]
def test_transform_series_force_list_default_with_buffers(pd): # default int seems to be int64, can't be converted to buffer! df = pd.Series([1, 3, 5, 6, 8]) out = bus.transform_series(df) assert isinstance(out, list) assert out == [1, 3, 5, 6, 8] df = pd.Series([1, 3, 5, 6, 8], dtype=np.int32) bufs = [] out = bus.transform_series(df, buffers=bufs) assert isinstance(out, dict) assert len(bufs) == 1 assert len(bufs[0]) == 2 assert isinstance(bufs[0][0], dict) assert list(bufs[0][0]) == ["id"] assert bufs[0][1] == np.array(df).tobytes() assert 'shape' in out assert out['shape'] == df.shape assert 'dtype' in out assert out['dtype'] == df.dtype.name assert '__buffer__' in out df = pd.Series([1.0, 3, 5, 6, 8]) bufs = [] out = bus.transform_series(df, buffers=bufs) assert isinstance(out, dict) assert len(bufs) == 1 assert len(bufs[0]) == 2 assert isinstance(bufs[0][0], dict) assert list(bufs[0][0]) == ["id"] assert bufs[0][1] == np.array(df).tobytes() assert 'shape' in out assert out['shape'] == df.shape assert 'dtype' in out assert out['dtype'] == df.dtype.name assert '__buffer__' in out df = pd.Series(np.array([np.nan, np.inf, -np.inf, 0])) bufs = [] out = bus.transform_series(df, buffers=bufs) assert isinstance(out, dict) assert len(bufs) == 1 assert len(bufs[0]) == 2 assert isinstance(bufs[0][0], dict) assert list(bufs[0][0]) == ["id"] assert bufs[0][1] == np.array(df).tobytes() assert 'shape' in out assert out['shape'] == df.shape assert 'dtype' in out assert out['dtype'] == df.dtype.name assert '__buffer__' in out # PeriodIndex df = pd.period_range('1900-01-01', '2000-01-01', freq='A') bufs = [] out = bus.transform_series(df, buffers=bufs) assert isinstance(out, dict) assert len(bufs) == 1 assert len(bufs[0]) == 2 assert isinstance(bufs[0][0], dict) assert list(bufs[0][0]) == ["id"] assert bufs[0][1] == bus.convert_datetime_array( df.to_timestamp().values).tobytes() assert 'shape' in out assert out['shape'] == df.shape assert 'dtype' in out assert out['dtype'] == 'float64' assert '__buffer__' in out # DatetimeIndex df = pd.period_range('1900-01-01', '2000-01-01', freq='A').to_timestamp() bufs = [] out = bus.transform_series(df, buffers=bufs) assert isinstance(out, dict) assert len(bufs) == 1 assert len(bufs[0]) == 2 assert isinstance(bufs[0][0], dict) assert list(bufs[0][0]) == ["id"] assert bufs[0][1] == bus.convert_datetime_array(df.values).tobytes() assert 'shape' in out assert out['shape'] == df.shape assert 'dtype' in out assert out['dtype'] == 'float64' assert '__buffer__' in out # TimeDeltaIndex df = pd.to_timedelta(np.arange(5), unit='s') bufs = [] out = bus.transform_series(df, buffers=bufs) assert isinstance(out, dict) assert len(bufs) == 1 assert len(bufs[0]) == 2 assert isinstance(bufs[0][0], dict) assert list(bufs[0][0]) == ["id"] assert bufs[0][1] == bus.convert_datetime_array(df.values).tobytes() assert 'shape' in out assert out['shape'] == df.shape assert 'dtype' in out assert out['dtype'] == 'float64' assert '__buffer__' in out
def test_panda_series(self, pd): s = pd.Series([1, 3, 5, 6, 8]) assert self.encoder.default(s) == [1, 3, 5, 6, 8]
def test_with_pd_series(self, pd): s = pd.Series([0, 1, 2, 3, 4]) assert self.serialize(s) == '[0,1,2,3,4]'