Skip to content

Commit 30e8c93

Browse files
committed
implicit sequences as columns
1 parent 11b172c commit 30e8c93

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

datascience.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ def __getitem__(self, label):
5353
def __setitem__(self, label, values):
5454
if not isinstance(values, np.ndarray):
5555
# Coerce a single value to a sequence
56-
if isinstance(values, str) or not isinstance(values, collections.abc.Sequence):
56+
if not _is_non_string_iterable(values):
5757
values = [values] * max(self.num_rows, 1)
58-
values = np.array(values)
58+
values = np.array(tuple(values))
5959
if hasattr(self, '_num_rows') & self.num_rows > 0:
6060
assert len(values) == self.num_rows, 'column length mismatch'
6161
else:
@@ -689,15 +689,15 @@ def _fill_with_zeroes(order, rows, zero=None):
689689
assert len(rows) > 0
690690
index = dict(rows)
691691
if zero is None:
692-
array = np.array(list(index.values()))
692+
array = np.array(tuple(index.values()))
693693
if len(array.shape) == 1:
694694
zero = array.dtype.type()
695695
return np.array([index.get(k, zero) for k in order])
696696

697697

698698
def _as_labels(column_label_or_labels):
699699
"""Return a list of labels for a label or labels."""
700-
if not isinstance(column_label_or_labels, collections.abc.Sequence):
700+
if not _is_non_string_iterable(column_label_or_labels):
701701
return [column_label_or_labels]
702702
else:
703703
return column_label_or_labels
@@ -718,3 +718,14 @@ def _collected_label(collect, label):
718718
return label + ' ' + collect.__name__
719719
else:
720720
return label
721+
722+
723+
def _is_non_string_iterable(value):
724+
"""Whether a value is iterable."""
725+
if isinstance(value, str):
726+
return False
727+
if hasattr(value, '__iter__'):
728+
return True
729+
if isinstance(value, collections.abc.Sequence):
730+
return True
731+
return False

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def run_tests(self):
3434
setup(
3535
name = 'datascience',
3636
py_modules = ['datascience'],
37-
version = '0.2.0',
37+
version = '0.2.1',
3838
install_requires = install_requires,
3939
tests_require = test_requires,
4040
cmdclass = {'test': PyTest},

tests/test_table.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,17 @@ def test_tuples(t, u):
277277
""")
278278

279279

280+
def test_keys_and_values():
281+
"""Tests that a table can be constructed from keys and values."""
282+
d = {1: 2, 3: 4}
283+
t = Table([d.keys(), d.values()], ['keys', 'values'])
284+
assert_equal(t, """\
285+
keys | values
286+
1 | 2
287+
3 | 4
288+
""")
289+
290+
280291
##########
281292
# Modify #
282293
##########

0 commit comments

Comments
 (0)