Skip to content

Commit b408e19

Browse files
committed
[TASK] count same + test
1 parent 50030b0 commit b408e19

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

bact_math_utils/misc.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def __call__(self, iterable):
5555
class EnumerateUniqueJustSeen:
5656
"""Return unique id's for the item and the item
5757
58-
Inspired by more_itertools.unique_lastseen.
58+
Inspired by .
5959
6060
Follows :func:`enumerate` API
6161
@@ -128,6 +128,14 @@ def enumerate_changed_value_tuple(seq: Sequence) -> list:
128128
return data
129129

130130

131+
def enumerate_same_value_tuple(seq: Sequence) -> list:
132+
mstep = CountSame()
133+
return [cnt for cnt, val in mstep(zip(*seq))]
134+
135+
136+
def enumerate_same_value_pairs(val1: Sequence, val2: Sequence) -> list:
137+
return enumerate_same_value_tuple((val1, val2))
138+
131139
def enumerate_changed_value_pairs(val1: Sequence, val2: Sequence) -> list:
132140
"""Emit a new number every time one of the values changes
133141

tests/test_count_same.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import pytest
2+
from bact_math_utils.misc import CountSame, enumerate_same_value_pairs
3+
4+
5+
def test_count_same():
6+
values = [42] * 3 + [23] + [42] * 2
7+
step = CountSame()(values)
8+
assert (0, 42) == next(step)
9+
assert next(step) == (1, 42)
10+
assert next(step) == (2, 42)
11+
12+
assert next(step) == (0, 23)
13+
14+
assert next(step) == (0, 42)
15+
assert next(step) == (1, 42)
16+
17+
18+
def test_enumerate_same_pairs():
19+
r = enumerate_same_value_pairs(
20+
[0, 0, 0, 1, 1, 1, 1, 1, 1],
21+
[0, 0, 0, 0, 0, 0, 2, 2, 2]
22+
)
23+
assert r == [0, 1, 2] * 3
24+
25+
r = enumerate_same_value_pairs(
26+
[42, 42, 355/113, 355/133, 2.78, 2.78],
27+
["x", "x", "x", "y", "y", "y"]
28+
)
29+
assert r == [0, 1, 0, 0, 0, 1]

0 commit comments

Comments
 (0)