"""Helper functions to validate input data and produce error messages."""
import imgaug as ia
[docs]def convert_iterable_to_string_of_types(iterable_var):
"""Convert an iterable of values to a string of their types.
Parameters
----------
iterable_var : iterable
An iterable of variables, e.g. a list of integers.
Returns
-------
str
String representation of the types in `iterable_var`. One per item
in `iterable_var`. Separated by commas.
"""
types = [str(type(var_i)) for var_i in iterable_var]
return ", ".join(types)
[docs]def is_iterable_of(iterable_var, classes):
"""Check whether `iterable_var` contains only instances of given classes.
Parameters
----------
iterable_var : iterable
An iterable of items that will be matched against `classes`.
classes : type or iterable of type
One or more classes that each item in `var` must be an instanceof.
If this is an iterable, a single match per item is enough.
Returns
-------
bool
Whether `var` only contains instances of `classes`.
If `var` was empty, ``True`` will be returned.
"""
if not ia.is_iterable(iterable_var):
return False
for var_i in iterable_var:
if not isinstance(var_i, classes):
return False
return True
[docs]def assert_is_iterable_of(iterable_var, classes):
"""Assert that `iterable_var` only contains instances of given classes.
Parameters
----------
iterable_var : iterable
See :func:`~imgaug.validation.is_iterable_of`.
classes : type or iterable of type
See :func:`~imgaug.validation.is_iterable_of`.
"""
valid = is_iterable_of(iterable_var, classes)
if not valid:
expected_types_str = (
", ".join([class_.__name__ for class_ in classes])
if not isinstance(classes, type)
else classes.__name__)
if not ia.is_iterable(iterable_var):
raise AssertionError(
"Expected an iterable of the following types: %s. "
"Got instead a single instance of: %s." % (
expected_types_str,
type(iterable_var).__name__)
)
raise AssertionError(
"Expected an iterable of the following types: %s. "
"Got an iterable of types: %s." % (
expected_types_str,
convert_iterable_to_string_of_types(iterable_var))
)