def parse_arg_type(arg):
    """
    Parses the type of an argument based on its string value.
    Only checks ints, floats, and bools, defaults to string.
     For instance, "4.0" will convert to a float(4.0)
    :param arg: The argument value
    :return: The value converted to the proper type.
    """
    if type(arg) != str:
        return arg
    else:
        # check int
        try:
            return int(arg)
        except ValueError:
            pass
        # check float
        try:
            return float(arg)
        except ValueError:
            pass
        # check bool
        if arg.lower() == "true":
            return True
        elif arg.lower() == "false":
            return False
        # return any other string
        return arg