"""grdfill - Fill blank areas from a grid."""frompygmt.clibimportSessionfrompygmt.exceptionsimportGMTInvalidInputfrompygmt.helpersimport(GMTTempFile,build_arg_string,fmt_docstring,kwargs_to_strings,use_alias,)frompygmt.ioimportload_dataarray__doctest_skip__=["grdfill"]
[docs]@fmt_docstring@use_alias(A="mode",G="outgrid",N="no_data",R="region",V="verbose",)@kwargs_to_strings(R="sequence")defgrdfill(grid,**kwargs):r""" Fill blank areas from a grid file. Read a grid that presumably has unfilled holes that the user wants to fill in some fashion. Holes are identified by NaN values but this criteria can be changed via the ``no_data`` parameter. There are several different algorithms that can be used to replace the hole values. Full option list at :gmt-docs:`grdfill.html` {aliases} Parameters ---------- grid : str or xarray.DataArray The file name of the input grid or the grid loaded as a DataArray. outgrid : str or None The name of the output netCDF file with extension .nc to store the grid in. mode : str Specify the hole-filling algorithm to use. Choose from **c** for constant fill and append the constant value, **n** for nearest neighbor (and optionally append a search radius in pixels [default radius is :math:`r^2 = \sqrt{{ X^2 + Y^2 }}`, where (*X,Y*) are the node dimensions of the grid]), or **s** for bicubic spline (optionally append a *tension* parameter [Default is no tension]). no_data : int or float Set the node value used to identify a point as a member of a hole [Default is NaN]. {region} {verbose} Returns ------- ret: xarray.DataArray or None Return type depends on whether the ``outgrid`` parameter is set: - :class:`xarray.DataArray` if ``outgrid`` is not set - None if ``outgrid`` is set (grid output will be stored in file set by ``outgrid``) Example ------- >>> import pygmt >>> # Load a bathymetric grid with missing data >>> earth_relief_holes = pygmt.datasets.load_sample_data( ... name="earth_relief_holes" ... ) >>> # Perform grid filling operations on the sample grid >>> # Set all empty values to "20" >>> filled_grid = pygmt.grdfill(grid=earth_relief_holes, mode="c20") """ifkwargs.get("A")isNoneandkwargs.get("L")isNone:raiseGMTInvalidInput("At least parameter 'mode' or 'L' must be specified.")withGMTTempFile(suffix=".nc")astmpfile:withSession()aslib:file_context=lib.virtualfile_from_data(check_kind="raster",data=grid)withfile_contextasinfile:if(outgrid:=kwargs.get("G"))isNone:kwargs["G"]=outgrid=tmpfile.name# output to tmpfilelib.call_module(module="grdfill",args=build_arg_string(kwargs,infile=infile))returnload_dataarray(outgrid)ifoutgrid==tmpfile.nameelseNone