[docs]defget_input_arguments(kwargs,function,warn=True):"""Return subset of keyword arguments in kwargs dict that are valid parameters to a function or method. Parameters ---------- kwargs : dict (parameter names, values) function : function of class method Returns ------- input_kwargs : dict """np.set_printoptions(threshold=20)print('\narguments to {}:'.format(function.__qualname__))params=inspect.signature(function)input_kwargs={}not_arguments={}fork,vinkwargs.items():ifkinparams.parameters:input_kwargs[k]=vprint_item(k,v)else:not_arguments[k]=vifwarn:print('\nother arguments:')fork,vinnot_arguments.items():#print('{}: {}'.format(k, v))print_item(k,v)print('\n')returninput_kwargs
[docs]defload(filename):"""Load a configuration file."""ifstr(filename).endswith('.yml')orstr(filename).endswith('.yaml'):returnload_yaml(filename)elifstr(filename).endswith('.json'):returnload_json(filename)
[docs]defload_json(jsonfile):"""Convenience function to load a json file; replacing some escaped characters."""withopen(jsonfile)asf:returnjson.load(f)
[docs]defload_yaml(yml_file):"""Load yaml file into a dictionary."""withopen(yml_file)assrc:cfg=yaml.load(src,Loader=yaml.Loader)returncfg
[docs]defget_water_table(heads,nodata,valid_min=-1e-4,valid_max=3e4):""" Get a 2D array representing the water table elevation for each stress period in heads array. Parameters ---------- heads : 3 or 4-D np.ndarray Heads array. nodata : real HDRY value indicating dry cells. valid_min : float (optional) The lowest value regarded as valid, regardless of nodata value. By default, -1e4 valid_max : float (optional) The highest value regarded as valid, regardless of nodata value. By default, 3e4 Returns ------- wt : 2 or 3-D np.ndarray of water table elevations for each stress period. """heads=np.array(heads,ndmin=4)mask=(heads==nodata)|(heads<valid_min)|(heads>valid_max)k=(~mask).argmax(axis=1)per,i,j=np.indices(k.shape)wt=heads[per.ravel(),k.ravel(),i.ravel(),j.ravel()].reshape(k.shape)wt=np.squeeze(wt)mask=(wt==nodata)|(wt<valid_min)|(wt>valid_max)wt=np.ma.masked_array(wt,mask)returnwt
[docs]defget_flopy_package_fname(package):ifgetattr(package,'filename',None)isnotNone:returngetattr(package,'filename')elifgetattr(package,'file_name')isnotNone:file_name=getattr(package,'file_name',None)returnfile_name[0]elifgetattr(package,'fn_path',None)isnotNone:fn_path=getattr(package,'fn_path',None)returnPath(fn_path).nameelse:raiseAttributeError(f"Can't get filename for package:\n{package}")