# Path: temci/utils/util.py
# def parse_timespan(time: str) -> float:
#     """
#     Parse a time span expression, see https://pypi.org/project/pytimeparse/
# 
#     Supports -1 to express an infinite time span
# 
#     :param time: time span expression, mixture of different time units is possible
#     :return: time span in seconds
#     """
#     try:
#         return float(time)
#     except ValueError:
#         return pytimeparse.parse(time) if time != "-1" else -1


import textwrap
import typing as t
import itertools, os, click, inspect
import yaml
from temci.utils.util import parse_timespan
                "hint": ["true", "false"]
            }
        }  # type: t.Dict[str, t.Any]
        """ Completion hints for supported shells for this type instance """

    def _instancecheck_impl(self, value, info: Info) -> InfoMsg:
        res = ExactEither(True, False).__instancecheck__(value, info)
        return info.errormsg_cond(bool(res), self, str(res))

    def __str__(self) -> str:
        return "Bool()"

    def _eq_impl(self, other: 'Bool') -> bool:
        return True


class ValidTimeSpan(Type, click.ParamType):
    """
    A string that is parseable as timespan by pytimeparse.
    E.g. "32m" or "2h 32m".
    """

    name = "valid_timespan"  # type: str
    """ click.ParamType name, that makes this class usable as a click type """

    def __init__(self):
        super().__init__()

    def _instancecheck_impl(self, value, info: Info) -> InfoMsg:
        res = Str().__instancecheck__(value, info)

# Path: temci/utils/util.py
# def parse_timespan(time: str) -> float:
#     """
#     Parse a time span expression, see https://pypi.org/project/pytimeparse/
# 
#     Supports -1 to express an infinite time span
# 
#     :param time: time span expression, mixture of different time units is possible
#     :return: time span in seconds
#     """
#     try:
#         return float(time)
#     except ValueError:
#         return pytimeparse.parse(time) if time != "-1" else -1


# Path: temci/utils/typecheck.py
import textwrap
import typing as t
import itertools, os, click, inspect
import yaml
from temci.utils.util import parse_timespan

                "hint": ["true", "false"]
            }
        }  # type: t.Dict[str, t.Any]
        """ Completion hints for supported shells for this type instance """

    def _instancecheck_impl(self, value, info: Info) -> InfoMsg:
        res = ExactEither(True, False).__instancecheck__(value, info)
        return info.errormsg_cond(bool(res), self, str(res))

    def __str__(self) -> str:
        return "Bool()"

    def _eq_impl(self, other: 'Bool') -> bool:
        return True


class ValidTimeSpan(Type, click.ParamType):
    """
    A string that is parseable as timespan by pytimeparse.
    E.g. "32m" or "2h 32m".
    """

    name = "valid_timespan"  # type: str
    """ click.ParamType name, that makes this class usable as a click type """

    def __init__(self):
        super().__init__()

    def _instancecheck_impl(self, value, info: Info) -> InfoMsg:
        res = Str().__instancecheck__(value, info)

        wrong = not bool(res) or parse_timespan(value) == None