Add chunk
This commit is contained in:
parent
0e5608b3a0
commit
da89e5eb25
3 changed files with 50 additions and 0 deletions
|
|
@ -1,3 +1,4 @@
|
|||
from .chunk import chunk
|
||||
from .clean import clean
|
||||
from .config_file import ConfigFile, ParseError
|
||||
from .evaluate_ranking import evaluate_ranking
|
||||
|
|
|
|||
17
src/great_ai/utilities/chunk.py
Normal file
17
src/great_ai/utilities/chunk.py
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
from typing import Iterable, List, TypeVar
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
def chunk(values: Iterable[T], chunk_length: int) -> Iterable[T]:
|
||||
assert chunk_length >= 1
|
||||
|
||||
result: List[T] = []
|
||||
for v in values:
|
||||
result.append(v)
|
||||
if len(result) == chunk_length:
|
||||
yield result
|
||||
result = []
|
||||
|
||||
if len(result) > 0:
|
||||
yield result
|
||||
32
tests/utilities/test_chunk.py
Normal file
32
tests/utilities/test_chunk.py
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import unittest
|
||||
|
||||
import pytest
|
||||
|
||||
from src.great_ai.utilities import chunk
|
||||
|
||||
|
||||
class TestChunk(unittest.TestCase):
|
||||
def test_simple(self) -> None:
|
||||
i = [1, 2, 3, 4]
|
||||
|
||||
assert list(chunk(i, 1)) == [[1], [2], [3], [4]]
|
||||
assert list(chunk(i, 2)) == [[1, 2], [3, 4]]
|
||||
assert list(chunk(i, 3)) == [[1, 2, 3], [4]]
|
||||
assert list(chunk(i, 4)) == [[1, 2, 3, 4]]
|
||||
assert list(chunk(i, 5)) == [[1, 2, 3, 4]]
|
||||
assert list(chunk(i, 125)) == [[1, 2, 3, 4]]
|
||||
|
||||
def test_bad_argument(self) -> None:
|
||||
with pytest.raises(AssertionError):
|
||||
list(chunk([], -10))
|
||||
|
||||
with pytest.raises(AssertionError):
|
||||
list(chunk([], 0))
|
||||
|
||||
def test_generator(self) -> None:
|
||||
def my_generator():
|
||||
for i in range(1, 11):
|
||||
yield i
|
||||
|
||||
assert list(chunk(range(1, 11), 3)) == [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
|
||||
assert list(chunk(my_generator(), 3)) == [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
|
||||
Loading…
Add table
Add a link
Reference in a new issue