Source code for chombopy.inputs

import re
import math


[docs]def read_inputs(inputs_file): """ Load up an inputs file and parse it into a dictionary """ params = {} # Read in the file with open(inputs_file, "r") as f: file_data = f.readlines() for line in file_data: # print(line) # Ignore lines that are commented out if line.startswith("#"): continue # Remove anything after a # line = re.sub(r"#[^\n]*[\n]", "", line) parts = re.findall(r"^([^=]*)=(.*)$", line) # parts = line.split('=') # if len(parts) > 1: if parts: match = parts[0] key = match[0].strip() val = match[1].strip() # Convert to float/int as appropriate if isint(val): val = int(val) elif isfloat(val): val = float(val) params[key] = val # print(params) return params
[docs]def write_inputs(location, params, ignore_list=None, do_sort=True): """ Write out a set of parameters to an inputs file """ output_file = "" key_list = list(params.keys()) if do_sort: key_list.sort() for key in key_list: if not ignore_list or key not in ignore_list: if isinstance(params[key], list): key_val = " ".join([str(a) for a in params[key]]) else: key_val = str(params[key]) output_file += "\n" + key + "=" + key_val with open(location, "w") as f: f.write(output_file)
[docs]def isfloat(value): """ Determine if value is a float """ try: float_val = float(value) if float_val == value or str(float_val) == value: return True else: return False except ValueError: return False
[docs]def isint(value): """ Determines if value is an integer """ try: int_val = int(value) if int_val == value or str(int_val) == value: return True else: return False except ValueError: return False
[docs]def string_to_array(string, conversion=None): """ Convert a string separated by spaces to an array, i.e. a b c -> [a,b,c] """ if isinstance(string, list): return string # Default: convert to list of ints if not conversion: conversion = int parts = string.split(" ") array = [conversion(i) for i in parts] return array
[docs]def array_to_string(array): """ Convert an array to a string with the elements separated by spaces i.e. [a,b,c] -> a b c """ str_array = [str(a) for a in array] string = " ".join(str_array) return string
[docs]def is_power_of_two(n): """ Determine if a number if a power of 2 """ test = math.log(n) / math.log(2) if round(test) == test: return True else: return False
[docs]def add_params(default_params, extra_params): """ Add params from extra_params to defaultParams """ for k, v in extra_params.items(): default_params[k] = v return default_params