Source code for warg.generators.numbers

#!/usr/bin/env python3
import random
from typing import Callable, Iterable, List, Optional, Tuple

from warg import Number

__all__ = ["n_uint_mix", "n_uint_mix_generator_builder", "n_uint_mix_generator"]


import logging

_logger = logging.getLogger(__name__)


[docs] def n_uint_mix(mix_max: Iterable[Number], mix_min: Optional[Iterable[Number]] = None) -> List[Number]: mix_max = list(mix_max) if mix_min is None: mix_min = [0] * len(mix_max) assert len(mix_min) == len(mix_max) for min_, max_ in zip(mix_min, mix_max): assert min_ <= max_ return [random.randrange(min_, max_) for min_, max_ in zip(mix_min, mix_max)]
[docs] def n_uint_mix_generator(*mix, mix_min: Optional[Iterable[Number]] = None) -> Tuple[Number, ...]: if len(mix) == 1: if isinstance(mix, Iterable): mix = mix[0] while 1: yield n_uint_mix(mix, mix_min=mix_min)
[docs] def n_uint_mix_generator_builder(*mix: Number, mix_min: Optional[Iterable[Number]] = None) -> Callable: """Compatability code..""" if len(mix) == 1: if isinstance(mix, Iterable): mix = mix[0] def no_arg_generator() -> Tuple[Number, ...]: while 1: yield n_uint_mix(mix, mix_min=mix_min) return no_arg_generator
if __name__ == "__main__": _logger.info([v for _, v in zip(range(9), iter(n_uint_mix_generator(255, 255)))]) print([v for _, v in zip(range(9), iter(n_uint_mix_generator(255, 255, mix_min=(200, 200))))])