"""surface - Grids table data using adjustable tension continuous curvaturesplines."""frompygmt.clibimportSessionfrompygmt.helpersimport(GMTTempFile,build_arg_string,check_data_input_order,deprecate_parameter,fmt_docstring,kwargs_to_strings,use_alias,)frompygmt.ioimportload_dataarray
[docs]@fmt_docstring@deprecate_parameter("outfile","outgrid","v0.5.0",remove_version="v0.7.0")@check_data_input_order("v0.5.0",remove_version="v0.7.0")@use_alias(I="spacing",R="region",G="outgrid",V="verbose",a="aspatial",b="binary",d="nodata",e="find",f="coltypes",h="header",i="incols",r="registration",w="wrap",)@kwargs_to_strings(R="sequence")defsurface(data=None,x=None,y=None,z=None,**kwargs):r""" Grids table data using adjustable tension continuous curvature splines. Surface reads randomly-spaced (x,y,z) triples and produces gridded values z(x,y) by solving: .. math:: (1 - t)\nabla^2(z)+t\nabla(z) = 0 where :math:`t` is a tension factor between 0 and 1, and :math:`\nabla` indicates the Laplacian operator. Takes a matrix, xyz triples, or a file name as input. Must provide either ``data`` or ``x``, ``y``, and ``z``. Full option list at :gmt-docs:`surface.html` {aliases} Parameters ---------- data : str or {table-like} Pass in (x, y, z) or (longitude, latitude, elevation) values by providing a file name to an ASCII data table, a 2D {table-classes}. x/y/z : 1d arrays Arrays of x and y coordinates and values z of the data points. {I} {R} outgrid : str Optional. The file name for the output netcdf file with extension .nc to store the grid in. {V} {a} {b} {d} {e} {f} {h} {i} {r} {w} 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``) """withGMTTempFile(suffix=".nc")astmpfile:withSession()aslib:# Choose how data will be passed into the modulefile_context=lib.virtualfile_from_data(check_kind="vector",data=data,x=x,y=y,z=z,required_z=True)withfile_contextasinfile:if"G"notinkwargs:# if outgrid is unset, output to tmpfilekwargs.update({"G":tmpfile.name})outgrid=kwargs["G"]arg_str=" ".join([infile,build_arg_string(kwargs)])lib.call_module(module="surface",args=arg_str)returnload_dataarray(outgrid)ifoutgrid==tmpfile.nameelseNone