diff --git a/colour_clf_io/elements.py b/colour_clf_io/elements.py index b05f2ca..b5139b1 100644 --- a/colour_clf_io/elements.py +++ b/colour_clf_io/elements.py @@ -8,7 +8,7 @@ from __future__ import annotations -import itertools +import sys import typing from dataclasses import dataclass @@ -51,6 +51,21 @@ "ExponentParams", ] +if sys.version_info >= (3, 12): + from itertools import batched +else: + from itertools import islice + + T = typing.TypeVar("T") + + def batched(iterable: typing.Iterable[T], n: int) -> typing.Iterator[tuple[T, ...]]: + if n < 1: + err = "n must be at least one" + raise ValueError(err) + it = iter(iterable) + while batch := tuple(islice(it, n)): + yield batch + @dataclass class Array(XMLParsable, XMLWritable): @@ -142,8 +157,7 @@ def to_xml(self) -> lxml.etree._Element: else: row_length = self.dim[-1] text = "\n".join( - " ".join(map(str, row)) - for row in itertools.batched(self.values, row_length) + " ".join(map(str, row)) for row in batched(self.values, row_length) ) xml.text = text return xml