--- a +++ b/ants/internal.py @@ -0,0 +1,76 @@ +import ants +from ants import lib + +short_ptype_map = {"unsigned char": "UC", + "unsigned int": "UI", + "float": "F", + "double": "D"} + +def infer_dtype(dtype): + # supported dtypes: uint8, uint32, float32, float64 + exchange_map = { + 'bool': 'uint8', + 'int8': 'uint32', + 'int16': 'uint32', + 'int32': 'uint32', + 'int64': 'uint32', + 'uint16': 'uint32', + 'uint64': 'uint32', + 'float16': 'float32' + } + new_dtype = exchange_map.get(str(dtype), dtype) + return new_dtype + +def short_ptype(pixeltype): + return short_ptype_map[pixeltype] + +def get_lib_fn(string): + return getattr(lib, string) + +def get_pointer_string(image): + return lib.ptrstr(image.pointer) + +def process_arguments(args): + p_args = [] + if isinstance(args, dict): + for argname, argval in args.items(): + + # -MULTINAME- is used to support multiple items with the same key + if "-MULTINAME-" in argname: + argname = argname[: argname.find("-MULTINAME-")] + + if argval is not None: + if len(argname) > 1: + p_args.append("--%s" % argname) + else: + p_args.append("-%s" % argname) + + if ants.is_image(argval): + p_args.append(get_pointer_string(argval)) + elif isinstance(argval, list): + for av in argval: + if ants.is_image(av): + av = get_pointer_string(av) + elif str(arg) == "True": + av = str(1) + elif str(arg) == "False": + av = str(0) + p_args.append(av) + else: + p_args.append(str(argval)) + + elif isinstance(args, list): + for arg in args: + if ants.is_image(arg): + pointer_string = get_pointer_string(arg) + p_arg = pointer_string + elif arg is None: + pass + elif str(arg) == "True": + p_arg = str(1) + elif str(arg) == "False": + p_arg = str(0) + else: + p_arg = str(arg) + p_args.append(p_arg) + return p_args