v1.3.0 'Pure Pink'
Release Notes
A big step forward for GSTools. We now support geographical coordinates, directional variograms, auto-binning, arbitrary dimensions, normalizers and trends and much much more.
Installation
You can install GSTools with conda:
conda install -c conda-forge gstools
or with pip:
pip install gstools
Documentation
The documentation can be found at: https://gstools.readthedocs.io/
What's new?
Topics
Geographical Coordinates Support (#113)
- added boolean init parameter
latlonto indicate a geographic model. When given, spatial dimension is fixed todim=3,anisandangleswill be ignored, since anisotropy is not well-defined on a sphere. - add property
field_dimto indicate the dimension of the resulting field. Will be 2 iflatlon=True - added yadrenko variogram, covariance and correlation method, since the geographic models are derived from standard models in 3D by plugging in the chordal distance of two points on a sphere derived from there great-circle distance
zeta:vario_yadrenko: given byvariogram(2 * np.sin(zeta / 2))cov_yadrenko: given bycovariance(2 * np.sin(zeta / 2))cor_yadrenko: given bycorrelation(2 * np.sin(zeta / 2))
- added plotting routines for yadrenko methods described above
- the
isometrizeandanisometrizemethods will convertlatlontuples (given in degree) to points on the unit-sphere in 3D and vice versa - representation of geographical models don't display the
dim,anisandanglesparameters, butlatlon=True fit_variogramwill expect an estimated variogram with great-circle distances given in radians- Variogram estimation
latlonswitch implemented inestimate_varioroutine- will return a variogram estimated by the great-circle distance (haversine formula) given in radians
- Field
- added plotting routines for latlon fields
- no vector fields possible on latlon fields
- corretly handle pos tuple for latlon fields
Krige Unification (#97)
- Swiss Army Knife for kriging: The
Krigeclass now provides everything in one place - "Kriging the mean" is now possible with the switch
only_meanin the call routine Simple/Ordinary/Universal/ExtDrift/Detrendedare only shortcuts toKrigewith limited input parameter list- We now use the
covariancefunction to build up the kriging matrix (instead of variogram) - An
unbiasedswitch was added to enable simple kriging (where the unbiased condition is not given) - An
exactswitch was added to allow smother results, if anuggetis present in the model - An
cond_errparameter was added, where measurement error variances can be given for each conditional point - pseudo-inverse matrix is now used to solve the kriging system (can be disabled by the new switch
pseudo_inv), this is equal to solving the system with least-squares and prevents numerical errors - added options
fit_normalizerandfit_variogramto automatically fit normalizer and variogram to given data
Directional Variograms and Auto-binning (#87, #106, #131)
- new routine name
vario_estimateinstead ofvario_estimate_unstructured(old kept for legacy code) for simplicity - new routine name
vario_estimate_axisinstead ofvario_estimate_structured(old kept for legacy code) for simplicity - vario_estimate
- added simple automatic binning routine to determine bins from given data (one third of box diameter as max bin distance, sturges rule for number of bins)
- allow to pass multiple fields for joint variogram estimation (e.g. for daily precipitation) on same mesh
no_dataoption added to allow missing values- masked fields
- user can now pass a masked array (or a list of masked arrays) to deselect data points.
- in addition, a
maskkeyword was added to provide an external mask
- directional variograms
- diretional variograms can now be estimated
- either provide a list of direction vectors or angles for directions (spherical coordinates)
- can be controlled by given angle tolerance and (optional) bandwidth
- prepared for nD
- structured fields (pos tuple describes axes) can now be passed to estimate an isotropic or directional variogram
- distance calculation in cython routines in now independent of dimension
- vario_estimate_axis
- estimation along array axis now possible in arbitrary dimensions
no_dataoption added to allow missing values (sovles #83)- axis can be given by name (
"x","y","z") or axis number (0,1,2,3, ...)
Better Variogram fitting (#78, #145)
- fixing sill possible now
lossis now selectable for smoother handling of outliers- r2 score can now be returned to get an impression of the goodness of fitting
- weights can be passed
- instead of deselecting parameters, one can also give fix values for each parameter
- default init guess for
len_scaleis now mean of given bin-centers - default init guess for
varandnuggetis now mean of given variogram values
CovModel update (#109, #122, #157)
- add new
rescaleargument and attribute to theCovModelclass to be able to rescale thelen_scale(usefull for unit conversion or rescalinglen_scaleto coincide with theintegral_scalelike it's the case with the Gaussian model)
See: #90, GeoStat-Framework/PyKrige#119 - added new
len_rescaledattribute to theCovModelclass, which is the rescaledlen_scale:len_rescaled = len_scale / rescale - new method
default_rescaleto provide default rescale factor (can be overridden) - remove
doctestcalls - docstring updates in CovModel and derived models
- updated all models to use the
corroutine and make use of therescaleargument (See: #90) - TPL models got a separate base class to not repeat code
- added new models (See: #88):
HyperSpherical: (Replaces the oldIntersectionmodel) Derived from the intersection of hyper-spheres in arbitrary dimensions. Coincides with the linear model in 1D, the circular model in 2D and the classical spherical model in 3DSuperSpherical: like the HyperSpherical, but the shape parameter derived from dimension can be set by the user. Coincides with the HyperSpherical model by defaultJBessel: a hole model valid in all dimensions. The shape parameter controls the dimension it was derived from. Fornu=0.5this model coincides with the well knownwavehole model.TPLSimple: a simple truncated power law controlled by a shape parameternu. Coincides with the truncated linear model fornu=1Cubic: to be compatible with scikit-gstat in the future
- all arguments are now stored as float internally (#157)
- string representation of the
CovModelclass is now using a float precision (CovModel._prec=3) to truncate longish output - string representation of the
CovModelclass now only showsanisandanglesif model is anisotropic resp. rotated - dimension validity check: raise a warning, if given model is not valid in the desired dimension (See: #86)
Normalizer, Trend and Mean (#124)
- new
normalizesubmodule containing power-transforms for data to gain normality - Base-Class:
Normalizerproviding basic functionality including maximum likelihood fitting - added:
LogNormal,BoxCox,BoxCoxShift,YeoJohnson,ModulusandManly - normalizer, trend and mean can be passed to SRF, Krige and variogram estimation routines
- A trend can be a callable function, that represents a trend in input data. For example a linear decrease of temperature with height.
- The normalizer will be applied after the data was detrended, i.e. the trend was substracted from the data, in order to gain normality.
- The mean is now interpreted as the mean of the normalized data. The user could also provide a callable mean, but it is mostly meant to be constant.
Arbitrary dimensions (#112)
- allow arbitrary dimensions in all routines (CovModel, Krige, SRF, variogram)
- anisotropy and rotation following a generalization of tait-bryan angles
- CovModel provides
isometrizeandanisometrizeroutines to convert points
New Class for Conditioned Random Fields (#130)
- THIS BREAKS BACKWARD COMPATIBILITY
CondSRFreplaces the conditioning feature of the SRF class, which was cumbersome and limited to Ordinary and Simple krigingCondSRFbehaves similar to theSRFclass, but instead of a covariance model, it takes a kriging class as input. With this kriging class, all conditioning related settings are defined.
Enhancements
- Python 3.9 Support #107
- add routines to format struct. pos tuple by given
dimorshape - add routine to format struct. pos tuple by given
shape(variogram helper) - remove
field.toolssubpackage - support
meshio>=4.0and add as dependency - PyVista mesh support #59
- added
EARTH_RADIUSas constant providing earths radius in km (can be used to rescale models) - add routines
latlon2posandpos2latlonto convert lat-lon coordinates to points on unit-sphere and vice versa - a lot of new examples and tutorials
RandMethclass got a switch to select the sampling strategy- plotter for n-D fields added #141
- antialias for contour plots of 2D fields #141
- building from source is now configured with
pyproject.tomlto care about build dependencies, see #154
Changes
- drop support for Python 3.5 #146
- added a finit limit for shape-parameters in some CovModels #147
- drop usage of
pos2xyzandxyz2pos - remove structured option from generators (structured pos need to be converted first)
- explicitly assert dim=2,3 when generating vector fields
- simplify
pre_posroutine to save pos tuple and reformat it an unstructured tuple - simplify field shaping
- simplify plotting routines
- only the
"unstructured"keyword is recognized everywhere, everything else is interpreted as"structured"(e.g."rectilinear") - use GitHub-Actions instead of TravisCI
- parallel build now controlled by env-var
GSTOOLS_BUILD_PARALLEL=1, see #154 - install extra target for
[dev]dropped, can be reproduced bypip install gstools[test, doc], see #154