def model_output(var_name): return GraphNode('output_variable', OutputNode, out_type=None, inputs=None, properties={'io': 'from_model'}, args=odict(var_name=var_name))
def parameter(value, min, max, fixed=False, **kwargs): return GraphNode('parameter', ParameterNode, out_type='const', inputs=None, properties=kwargs, args=odict(value=value, min=min, max=max, fixed=fixed))
def const(value, **kwargs): return GraphNode('constant', ConstNode, out_type='const', inputs=None, properties=kwargs, args=odict(value=value))
def persist(var_name): return GraphNode('output_variable', OutputNode, out_type='save', inputs=[var_name], properties={'io': 'from_model'}, args=odict(var_name=var_name))
def write_to_flat_ncfile(path, nc_var, mode='a', freq='M'): return GraphNode('write_to_flat_ncfile', callable_to_funcspec(FlatFileWriterNode), out_type='ncfile', inputs=[nc_var], properties={'io': 'w'}, args=odict(path=path, nc_var=nc_var, mode=mode, freq=freq))
def spatial_from_multifile(pattern, dimension, dim_func, variable=None, preload=False): from .file_nodes import SpatialMultiFileNode return GraphNode('spatial_from_from_multifile',SpatialMultiFileNode,out_type='spatial',inputs=None,properties={'io': 'r'},\ args=odict(pattern=pattern,dimension=dimension,dim_func=dim_func,variable=variable,preload=preload))
def write_to_annual_ncfile(path,nc_var,mode='a',dtype=np.float64,chunksizes=None,ncparams=None): ''' save output to annually split netCDF4 files :param path: save path :param nc_var: name of variable :param mode: 'w' clobber or 'a' or 'r+' append :return: GraphNode ''' return GraphNode('write_to_annual_ncfile',callable_to_funcspec(SplitFileWriterNode),out_type='ncfile',inputs=[nc_var], properties={'io': 'w'},args=odict(path=path,nc_var=nc_var,mode=mode,dtype=dtype,chunksizes=chunksizes,ncparams=ncparams))
def write_to_ncfile(path, nc_var, mode='a'): ''' save output to a netCDF4 file :param path: save path :param nc_var: name of variable :param mode: 'w' clobber or 'a' or 'r+' append :return: GraphNode ''' return GraphNode('write_to_ncfile', callable_to_funcspec(FileWriterNode), out_type='ncfile', inputs=[nc_var], properties={'io': 'w'}, args=odict(path=path, nc_var=nc_var, mode=mode))
def expand_dict(data_dict,mask,fill_value=np.nan,as_ma=True): ''' Expand a dictionary of flattened arrays into spatial arrays <see get_expanded> ''' out_dict = odict() for k,v in data_dict.items(): try: if isinstance(v,np.ndarray): out_dict[k] = get_expanded(v,mask,fill_value,as_ma) elif isinstance(v,dict): out_dict[k] = expand_dict(v,mask,fill_value,as_ma) except Exception as e: logger.critical('Failed expansion of %s' % k) raise e return out_dict
def transform(tfunc, inputs, func_args=None): if isinstance(inputs, str): inputs = [inputs] if func_args is None: func_args = {} if callable(tfunc): tfunc = callable_to_funcspec(tfunc) elif isinstance(tfunc, str): module, name = tfunc.rsplit('.', 1) tfunc = dict(module=module, name=name) if not (isinstance(tfunc, dict) and 'name' in tfunc and 'module' in tfunc): raise Exception("Invalid transformation function") return GraphNode('transform', callable_to_funcspec(TransformNode), 'from_inputs', inputs, args=odict({ 'tfunc': tfunc, 'func_args': func_args }))
def static(data,dataspec,out_type,flat=True): return GraphNode('static',StaticDataNode,out_type=out_type,inputs=None,args=odict(data=data,dataspec=dataspec,flat=flat))
def spatial_from_file(filename,variable=None,preload=False,force_grid=None): from .file_nodes import SpatialFileNode return GraphNode('spatial_from_file',SpatialFileNode,out_type='spatial',inputs=None,properties={'io': 'r'},\ args=odict(filename=filename,variable=variable,preload=preload,force_grid=force_grid))
def init_state_from_array(data,extent): return GraphNode('init_state_from_array',callable_to_funcspec(InitStateFromArray),out_type='init',inputs=None,properties={'io': 'r'},\ args=odict(data=data,extent=extent))
def init_state_from_ncfile(path,pattern,nc_var,date=None): return GraphNode('init_state_from_ncfile',callable_to_funcspec(StateFileReaderNode),out_type='init',inputs=None,properties={'io': 'r'},\ args=odict(path=path,pattern=pattern,nc_var=nc_var,date=date))
def monthly_climatology(filename,variable,preload=True): return GraphNode('monthly_climatology',callable_to_funcspec(MonthlyClimatologyNode),out_type='forcing',inputs=None,properties={'io': 'r'},\ args=odict(filename=filename,variable=variable,preload=preload))
def forcing_gap_filler(nc_path,pattern,nc_var,climatology_file): return GraphNode('forcing_with_climatology',callable_to_funcspec(ForcingGapFiller),out_type='forcing',inputs=None,properties={'io': 'r'},\ args=odict(path=nc_path,pattern=pattern,nc_var=nc_var,filler_fn=climatology_file))
def parameter_from_json(filename,key,value=None,min_val=None,max_val=None,fixed=None): return GraphNode('parameter',JSONParameterNode,out_type='const',inputs=None,properties={},args=odict(filename=filename,key=key,min_val=min_val,max_val=max_val,fixed=fixed))
def forcing_from_ncfiles(path,pattern,nc_var,cache=False,map_func=None): if map_func is not None: map_func = callable_to_funcspec(map_func) return GraphNode('forcing_from_ncfiles',callable_to_funcspec(SplitFileReaderNode),out_type='forcing',inputs=None,properties={'io': 'r'},\ args=odict(path=path,pattern=pattern,nc_var=nc_var,cache=cache,map_func=map_func))
def forcing_from_dict(data_map,nc_var,dims): return GraphNode('forcing_from_dict',callable_to_funcspec(StaticForcing),out_type='forcing',inputs=None,properties={'io': 'r'},\ args=odict(data_map=data_map,nc_var=nc_var,dims=dims))
def const_from_hdf5(filename,variable,dims): return GraphNode('const_from_hdf5',ConstHDF5Node,out_type='const',inputs=None,properties={},\ args=odict(filename=filename,variable=variable,dims=dims))
def write_to_ncfile_snapshot(path,nc_var,mode='a',freq='M',dtype=np.float64,chunksizes=None,ncparams=None): return GraphNode('write_to_ncfile_snapshot',callable_to_funcspec(FlatFileWriterNode),out_type='ncfile',inputs=[nc_var], properties={'io': 'w'},args=odict(path=path,nc_var=nc_var,mode=mode,freq=freq,dtype=dtype,chunksizes=chunksizes,ncparams=ncparams))
def parameter(value,min_val,max_val,fixed=False,description='',**kwargs): return GraphNode('parameter',ParameterNode,out_type='const',inputs=None,properties=kwargs,args=odict(value=value,min_val=min_val,max_val=max_val,fixed=fixed,description=description))
def _hypso_from_hdf5(filename,variable,preload=False): return GraphNode('hypso_from_hdf5',_HypsoHDF5Node,out_type='spatial',inputs=None,properties={'io': 'r'},\ args=odict(filename=filename,variable=variable,preload=preload))
def forcing_from_modis_ncfiles(path,pattern,nc_var,cache=False): return GraphNode('forcing_from_modis_ncfiles',callable_to_funcspec(ModisForcingNode),out_type='forcing',inputs=None,properties={'io': 'r'},\ args=odict(path=path,pattern=pattern,nc_var=nc_var,preload=cache))
def climatology(filename,variable,preload=False): return GraphNode('climatology',ClimatologyNode,out_type='from_inputs',inputs=None,properties={'io': 'r'},\ args=odict(filename=filename,variable=variable,preload=preload))
def parameter_from_calibration_results(filename, key): return GraphNode('parameter',CalibrationResultsParameterNode,out_type='const', \ inputs=None, properties = {}, args = odict(filename=filename, key=key))
def const_array(value,dims): return GraphNode('constant',ConstArray,out_type='const',inputs=None,properties={},args=odict(value=value,dims=dims))
def mix(lhs,rhs,ratio): return transform(_mix,[lhs,rhs],odict(ratio=ratio))