Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion bact_math_utils/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def __call__(self, iterable):
class EnumerateUniqueJustSeen:
"""Return unique id's for the item and the item

Inspired by more_itertools.unique_lastseen.
Inspired by .

Follows :func:`enumerate` API

Expand Down Expand Up @@ -128,6 +128,14 @@ def enumerate_changed_value_tuple(seq: Sequence) -> list:
return data


def enumerate_same_value_tuple(seq: Sequence) -> list:
mstep = CountSame()
return [cnt for cnt, val in mstep(zip(*seq))]


def enumerate_same_value_pairs(val1: Sequence, val2: Sequence) -> list:
return enumerate_same_value_tuple((val1, val2))

def enumerate_changed_value_pairs(val1: Sequence, val2: Sequence) -> list:
"""Emit a new number every time one of the values changes

Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ build-backend = "poetry.core.masonry.api"

[tool.poetry]
name = "bact-math-utils"
version = "0.1.0"
version = "0.1.1"
description = "bact: math and non mathematical utils"
authors = ["Pierre Schnizer", "Teresia Olsson"]
authors = ["Pierre Schnizer"]
license = "GPL-3.0"
homepage = "https://github.com/hz-b/bact-math-utils"
documentation = "https://github.com/hz-b/bact-math-utils"
Expand Down
29 changes: 29 additions & 0 deletions tests/test_count_same.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import pytest
from bact_math_utils.misc import CountSame, enumerate_same_value_pairs


def test_count_same():
values = [42] * 3 + [23] + [42] * 2
step = CountSame()(values)
assert (0, 42) == next(step)
assert next(step) == (1, 42)
assert next(step) == (2, 42)

assert next(step) == (0, 23)

assert next(step) == (0, 42)
assert next(step) == (1, 42)


def test_enumerate_same_pairs():
r = enumerate_same_value_pairs(
[0, 0, 0, 1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 2, 2, 2]
)
assert r == [0, 1, 2] * 3

r = enumerate_same_value_pairs(
[42, 42, 355/113, 355/133, 2.78, 2.78],
["x", "x", "x", "y", "y", "y"]
)
assert r == [0, 1, 0, 0, 0, 1]
Loading