Skip to content

Commit f18757b

Browse files
committed
work on replcate rows
1 parent e739190 commit f18757b

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

data_algebra/solutions.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ def replicate_rows_query(
482482
seq_column_name: str,
483483
join_temp_name: str,
484484
max_count: int,
485-
) -> Tuple(ViewRepresentation, Any):
485+
) -> Tuple[ViewRepresentation, Any]:
486486
"""
487487
Build query to replicate each row by count_column_name copies.
488488
@@ -522,7 +522,9 @@ def replicate_rows_query(
522522
ops = (
523523
d
524524
# specify which power table we want to join with
525-
.extend({power_key_colname: f'"p" %+% ({count_column_name}.log() / (2).log()).ceil()'})
525+
.extend({
526+
power_key_colname: f'"p" %+% ({count_column_name}.log() / (2).log()).ceil().as_int64()'
527+
})
526528
# get one row for each number less than or equal to power by under-specified join
527529
.natural_join(
528530
b=TableDescription(

tests/test_cdata_convenience.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
import re
23
import io
34

tests/test_expand_rows.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
2+
import data_algebra
3+
import data_algebra.test_util
4+
from data_algebra.data_ops import descr
5+
from data_algebra.solutions import replicate_rows_query
6+
7+
8+
def test_replicate_rows_query():
9+
# get a pandas namespace
10+
pd = data_algebra.default_data_model.pd
11+
d = pd.DataFrame({
12+
'key': ['a', 'b', 'c'],
13+
'n': [1, 2, 3],
14+
})
15+
d_descr = descr(d=d)
16+
ops, rt = replicate_rows_query(
17+
d_descr,
18+
count_column_name='n',
19+
seq_column_name='i',
20+
join_temp_name='rt',
21+
max_count=3,
22+
)
23+
res = ops.eval({'d': d, 'rt': rt})
24+
expect = pd.DataFrame({
25+
'key': ['a', 'b', 'b', 'c', 'c', 'c'],
26+
'n': [1, 2, 2, 3, 3, 3],
27+
'i': ['0', '0', '1', '0', '1', '2'],
28+
})
29+
assert data_algebra.test_util.equivalent_frames(res, expect)

0 commit comments

Comments
 (0)