Source code for glyph.utils.argparse

"""Collection of helper functions for arparse."""

import argparse
import logging
import os
import sys
import functools

import numpy as np

logger = logging.getLogger(__name__)


[docs]def positive_int(string): """Check whether string is an integer greater than 0.""" try: value = int(string, base=10) except ValueError: raise argparse.ArgumentTypeError("invalid int value: '{}'".format(string)) if value < 1: raise argparse.ArgumentTypeError("int value hast to be greater then 0: '{}'".format(string)) return value
[docs]def non_negative_int(string): """Check whether string is an integer greater than -1.""" try: value = int(string, base=10) except ValueError: raise argparse.ArgumentTypeError("invalid int value: '{}'".format(string)) if value < 0: raise argparse.ArgumentTypeError( "int value hast to be either 0 or greater then 0: '{}'".format(string) ) return value
[docs]def unit_interval(string): """Check whether string is a float in the interval [0.0, 1.0].""" try: value = float(string) except ValueError: raise argparse.ArgumentTypeError("invalid float value: '{}'".format(string)) if value < 0.0 or value > 1.0: raise argparse.ArgumentTypeError("float value hast to be in unit interval [0,1]: '{}'".format(string)) return value
[docs]def ntuple(n, to_type=float): """Check whether string is an n-tuple.""" def evaluate(string): try: value = tuple(to_type(val) for val in string.split(",")) if len(value) != n: raise ValueError except ValueError: raise argparse.ArgumentTypeError("Must be a {}-tuple of type {}".format(n, to_type)) return value return evaluate
[docs]def readable_file(string): """Check weather file is readable""" path = os.path.abspath(string) try: with open(path, "r"): pass except IOError: raise argparse.ArgumentTypeError("Must be a readable file path {}".format(path)) return path
[docs]def readable_yaml_file(string): """Check weather file is a .yaml file and readable""" path = os.path.abspath(string) if not path.endswith(".yaml") and not path.endswith(".yml"): raise argparse.ArgumentTypeError("Must be a .yaml file {}".format(path)) return readable_file(string)
[docs]def np_infinity_int(string): if string == str(np.infty): return np.infty else: try: value = int(string, base=10) except ValueError: raise argparse.ArgumentTypeError("invalid int value: '{}'".format(string)) return value