"""
Functions for IO and type conversions
"""
import argparse
import json
import click
import ast
import numpy as np
import random
import string
[docs]def str2bool(v):
"""
Parameters
----------
v
Returns
-------
"""
if isinstance(v, bool):
return v
if v.lower() in ('yes', 'true', 't', 'y', '1'):
return True
elif v.lower() in ('no', 'false', 'f', 'n', '0'):
return False
else:
raise argparse.ArgumentTypeError('Boolean value expected.')
[docs]def randomString(stringLength=8):
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(stringLength))
[docs]def list2str(input_list):
output_str = ""
for l in input_list:
output_str += str(l)
output_str += "-"
return output_str
[docs]class ConvertStrToList(click.Option):
[docs] def type_cast_value(self, ctx, value):
try:
value = str(value)
assert value.count('[') == 1 and value.count(']') == 1
list_as_str = value.replace('"', "'").split('[')[1].split(']')[0]
list_of_items = [item.strip().strip("'") for item in list_as_str.split(',')]
return list_of_items
except Exception:
raise click.BadParameter(value)
[docs]class PythonLiteralOption(click.Option):
[docs] def type_cast_value(self, ctx, value):
try:
return ast.literal_eval(value)
except:
raise click.BadParameter(value)
[docs]class NpEncoder(json.JSONEncoder):
[docs] def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
else:
return super(NpEncoder, self).default(obj)
[docs]class NpDecoder(json.JSONDecoder):
[docs] def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
else:
return super(NpDecoder, self).default(obj)