All notable changes to GSTools will be documented in this file.
1.6.0 - Periodic Peach - 2024-07
- add a new spatial random field generator called
Fourier
(#302)- create periodic spatial random fields with
Fourier
, by setting the period length with the keywordperiodic
- add examples to showcase how to use the new generator
- create periodic spatial random fields with
- fix some Cython issues (#354)
- update deprecated conditional compilation for OpenMP support
- fix changing between Cython and Rust backends
- improve documentation regarding parallelization
- fix deprecated license identifier, now Zenodo releases work again (#356)
- require gstools-core v1.0.0 at least (#361)
1.5.2 - Nifty Neon - 2024-05
- added global variable
config.NUM_THREADS
to select number of threads for parallel computation (#336) - speed up sampling with emcee by setting
vectorize=True
inEnsembleSampler
(#346) - prepare numpy 2 support (#340)
- at least numpy 2.0.0rc1 for building extensions (for Python 3.9 and above)
- check multiple numpy and scipy versions in CI
- fixed minimal versions for numpy
- use
np.asarray
everywhere withnp.atleast_(n)d
- fix long/longlong integer issue in cython on windows by always using 64bit integers
- build docs with latest sphinx version (#340)
- fixed zero division error in spectral density of Integral model (#347)
- minor pylint fixes for used-before-assignment issues (#350)
- require pyvista 0.40 at least (#340)
- require matplotlib 3.7 at least (#350)
- remove universal2 wheels for macos (we already provide separate intel and arm64 wheels) (#350)
1.5.1 - Nifty Neon - 2023-11
see #317
- added wheels for Python 3.12
- dropped support for Python 3.7 (EOL)
- linted Cython files with cython-lint
- use Cython 3 to build extensions
1.5.0 - Nifty Neon - 2023-06
- added
temporal
flag toCovModel
to explicitly specify spatio-temporal models #308- rotation between spatial and temporal dimension will be ignored
- added
spatial_dim
toCovModel
to explicitly set spatial dimension for spatio-temporal models- if not using
spatial_dim
, the provideddim
needs to include the possible temporal dimension spatial_dim
is always one less thanfield_dim
for spatio-temporal models
- if not using
- also works with
latlon=True
to have a spatio-temporal model with geographic coordinates - all plotting routines respect this
- the
Field
class now has atemporal
attribute which forwards the model attribute - automatic variogram fitting in kriging classes for
temporal=True
andlatlon=True
will raise an error
- added
geo_scale
toCovModel
to have a more consistent way to set the units of the model length scale for geographic coordinates #308- no need to use
rescale
for this anymore (was rather a hack) - added
gs.KM_SCALE
which is the same asgs.EARTH_RADIUS
for kilometer scaling - added
gs.DEGREE_SCALE
for great circle distance in degrees - added
gs.RADIAN_SCALE
for great circle distance in radians (default and previous behavior) - yadrenko variogram respects this and assumes the great circle distances is given in the respective unit
vario_estimate
also hasgeo_scale
now to control the units of the bins
- no need to use
vario_estimate
now forwards additional kwargs tostandard_bins
(bin_no
,max_dist
) #308- added
low
andhigh
arguments touniform
transformation #310
CovModel
s expect special arguments by keyword now #308- always use f-strings internally #283
- removed
verbose
attribute fromRandMeth
classes #309 - all arguments for
RandMeth
classes key-word-only now exceptmodel
#309 - rename "package" to "api" in doc structure #290
- latex equations were not rendered correctly in docs #290
1.4.1 - Sassy Sapphire - 2022-11
- API documentation is polished and fully auto-generated now #271
- fixed approximation of
Matern.spectrum
for bignu
#243 - GSTools had wrong version when installed from git archive #272
- Field.plot: solve long-standing mpl slider bug #273
1.4.0 - Sassy Sapphire - 2022-08
- added Youtube tutorial to documentation #239
- better support for custom generators #250 #259
- add
valid_value_types
class variable to all field classes #250 - PyKrige: fix passed variogram in case of latlon models #254
- add bounds checks for optional arguments of
CovModel
when resetting by class attribute #255 - minor coverage improvements #255
- documentation: readability improvements #257
- drop Python 3.6 support (setuptools>60 needs py>3.7) #241
- move
setup.cfg
content topyproject.toml
(PEP 621) #241 - move to
src/
based package structure (better testing, building and structure) #241 - use extension-helpers for openmp support in
setup.py
#241 - increase minimal version of meshio to v5.1 #241
- Pyvista v0.32 deprecation warning: use point_data instead of point_arrays #237
- remove deprecated scipy (v1.9) method pinv2 #247
- change float comparison in tests #248
- Cython: solve
-Wsometimes-uninitialized
warning #255
1.3.5 - Pure Pink - 2022-01
- remove caps for dependencies #229
- build linux wheels with manylinux2014 for all versions (CIBW v2.3.1) #227
1.3.4 - Pure Pink - 2021-11
- add GStools-Core as optional dependency #215
- provide wheels for Python 3.10 #211
- provide macOS wheels for Apple Silicon #211
- remove unnecessary
dim
argument in Cython code #216
1.3.3 - Pure Pink - 2021-08
See: #197
gstools.transform
:- add keywords
field
,store
,process
andkeep_mean
to all transformations to control storage and respectnormalizer
- added
apply_function
transformation - added
apply
as wrapper for all transformations - added
transform
method to allField
(sub)classes as interface totransform.apply
- added checks for normal fields to work smoothly with recently added
normalizer
submodule
- add keywords
Field
:- allow naming fields when generating and control storage with
store
keyword - all subclasses now have the
post_process
keyword (apply mean, normalizer, trend) - added subscription to access fields by name (
Field["field"]
) - added
set_pos
method to set position tuple - allow reusing present
pos
tuple - added
pos
,mesh_type
,field_names
,field_shape
,all_fields
properties
- allow naming fields when generating and control storage with
CondSRF
:- memory optimization by forwarding
pos
from underlyingkrige
instance - only recalculate kriging field if
pos
tuple changed (optimized ensemble generation)
- memory optimization by forwarding
- performance improvement by using
np.asarray
instead ofnp.array
where possible - updated examples to use new features
- added incomplete lower gamma function
inc_gamma_low
(for TPLGaussian spectral density) - filter
nan
values fromcond_val
array in all kriging routines #201
inc_gamma
was defined wrong for integers < 0
1.3.2 - Pure Pink - 2021-07
vario_estimate
was altering the input field under certain circumstances #180emcee
v3.1 now requiresnsteps
inrun_mcmc()
to be integer (called inRNG.sample_ln_pdf
) #184
1.3.1 - Pure Pink - 2021-06
- use
oldest-supported-numpy
to build cython extensions #165
1.3.0 - Pure Pink - 2021-04
Geographical Coordinates Support (#113)
- added boolean init parameter
latlon
to indicate a geographic model. When given, spatial dimension is fixed todim=3
,anis
andangles
will be ignored, since anisotropy is not well-defined on a sphere. - add property
field_dim
to 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
isometrize
andanisometrize
methods will convertlatlon
tuples (given in degree) to points on the unit-sphere in 3D and vice versa - representation of geographical models don't display the
dim
,anis
andangles
parameters, butlatlon=True
fit_variogram
will expect an estimated variogram with great-circle distances given in radians- Variogram estimation
latlon
switch implemented inestimate_vario
routine- 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
Krige
class now provides everything in one place - "Kriging the mean" is now possible with the switch
only_mean
in the call routine Simple
/Ordinary
/Universal
/ExtDrift
/Detrended
are only shortcuts toKrige
with limited input parameter list- We now use the
covariance
function to build up the kriging matrix (instead of variogram) - An
unbiased
switch was added to enable simple kriging (where the unbiased condition is not given) - An
exact
switch was added to allow smother results, if anugget
is present in the model - An
cond_err
parameter 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_normalizer
andfit_variogram
to automatically fit normalizer and variogram to given data
- new routine name
vario_estimate
instead ofvario_estimate_unstructured
(old kept for legacy code) for simplicity - new routine name
vario_estimate_axis
instead 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_data
option 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
mask
keyword 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_data
option added to allow missing values (sovles #83)- axis can be given by name (
"x"
,"y"
,"z"
) or axis number (0
,1
,2
,3
, ...)
- fixing sill possible now
loss
is 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_scale
is now mean of given bin-centers - default init guess for
var
andnugget
is now mean of given variogram values
- add new
rescale
argument and attribute to theCovModel
class to be able to rescale thelen_scale
(usefull for unit conversion or rescalinglen_scale
to coincide with theintegral_scale
like it's the case with the Gaussian model) See: #90, GeoStat-Framework/PyKrige#119 - added new
len_rescaled
attribute to theCovModel
class, which is the rescaledlen_scale
:len_rescaled = len_scale / rescale
- new method
default_rescale
to provide default rescale factor (can be overridden) - remove
doctest
calls - docstring updates in
CovModel
and derived models - updated all models to use the
cor
routine and make use of therescale
argument (See: #90) - TPL models got a separate base class to not repeat code
- added new models (See: #88):
HyperSpherical
: (Replaces the oldIntersection
model) 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.5
this model coincides with the well knownwave
hole model.TPLSimple
: a simple truncated power law controlled by a shape parameternu
. Coincides with the truncated linear model fornu=1
Cubic
: to be compatible with scikit-gstat in the future
- all arguments are now stored as float internally (#157)
- string representation of the
CovModel
class is now using a float precision (CovModel._prec=3
) to truncate longish output - string representation of the
CovModel
class now only showsanis
andangles
if 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
normalize
submodule containing power-transforms for data to gain normality - Base-Class:
Normalizer
providing basic functionality including maximum likelihood fitting - added:
LogNormal
,BoxCox
,BoxCoxShift
,YeoJohnson
,Modulus
andManly
- 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
providesisometrize
andanisometrize
routines to convert points
New Class for Conditioned Random Fields (#130)
- THIS BREAKS BACKWARD COMPATIBILITY
CondSRF
replaces the conditioning feature of the SRF class, which was cumbersome and limited to Ordinary and Simple krigingCondSRF
behaves similar to theSRF
class, but instead of a covariance model, it takes a kriging class as input. With this kriging class, all conditioning related settings are defined.
- Python 3.9 Support #107
- add routines to format struct. pos tuple by given
dim
orshape
- add routine to format struct. pos tuple by given
shape
(variogram helper) - remove
field.tools
subpackage - support
meshio>=4.0
and add as dependency - PyVista mesh support #59
- added
EARTH_RADIUS
as constant providing earths radius in km (can be used to rescale models) - add routines
latlon2pos
andpos2latlon
to convert lat-lon coordinates to points on unit-sphere and vice versa - a lot of new examples and tutorials
RandMeth
class 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.toml
to care about build dependencies, see #154
- drop support for Python 3.5 #146
- added a finit limit for shape-parameters in some
CovModel
s #147 - drop usage of
pos2xyz
andxyz2pos
- remove structured option from generators (structured pos need to be converted first)
- explicitly assert dim=2,3 when generating vector fields
- simplify
pre_pos
routine 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
- typo in keyword argument for vario_estimate_structured #80
- isotropic rotation of SRF was not possible #100
CovModel.opt_arg
now sorted #103CovModel.fit
: check if weights are given as a string (numpy comparison error) #111- several pylint fixes (#159)
1.2.1 - Volatile Violet - 2020-04-14
ModuleNotFoundError
is not present in py35- Fixing Cressie-Bug #76
- Adding analytical formula for integral scales of rational and stable model
- remove prange from IncomprRandMeth summators to prevent errors on Win and macOS
1.2.0 - Volatile Violet - 2020-03-20
- different variogram estimator functions can now be used #51
- the TPLGaussian and TPLExponential now have analytical spectra #67
- added property
is_isotropic
toCovModel
#67 - reworked the whole krige sub-module to provide multiple kriging methods #67
- Simple
- Ordinary
- Universal
- External Drift Kriging
- Detrended Kriging
- a new transformation function for discrete fields has been added #70
- reworked tutorial section in the documentation #63
- pyvista interface #29
- Python versions 2.7 and 3.4 are no longer supported #40 #43
CovModel
: in 3D the input of anisotropy is now treated slightly different: #67- single given anisotropy value [e] is converted to [1, e] (it was [e, e] before)
- two given length-scales [l_1, l_2] are converted to [l_1, l_2, l_2] (it was [l_1, l_2, l_1] before)
- a race condition in the structured variogram estimation has been fixed #51
1.1.1 - Reverberating Red - 2019-11-08
- added a changelog. See: commit fbea883
- deprecation warnings are now printed if Python versions 2.7 or 3.4 are used #40 #41
- define spectral_density instead of spectrum in covariance models since Cov-base derives spectrum. See: commit 00f2747
- better boundaries for
CovModel
parameters. See: #37
1.1.0 - Reverberating Red - 2019-10-01
- by using Cython for all the heavy computations, we could achieve quite some speed ups and reduce the memory consumption significantly #16
- parallel computation in Cython is now supported with the help of OpenMP and the performance increase is nearly linear with increasing cores #16
- new submodule
krige
providing simple (known mean) and ordinary (estimated mean) kriging working analogous to the srf class - interface to pykrige to use the gstools
CovModel
with the pykrige routines (GeoStat-Framework/PyKrige#124) - the srf class now provides a
plot
and avtk_export
routine - incompressible flow fields can now be generated #14
- new submodule providing several field transformations like: Zinn&Harvey, log-normal, bimodal, ... #13
- Python 3.4 and 3.7 wheel support #19
- field can now be generated directly on meshes from meshio and ogs5py, see: commit f4a3439
- the srf and kriging classes now store the last
pos
,mesh_type
andfield
values to keep them accessible, see: commit 29f7f1b - tutorials on all important features of GSTools have been written for you guys #20
- a new interface to pyvista is provided to export fields to python vtk representation, which can be used for plotting, exploring and exporting fields #29
- the license was changed from GPL to LGPL in order to promote the use of this library #25
- the rotation angles are now interpreted in positive direction (counter clock wise)
- the
force_moments
keyword was removed from the SRF call method, it is now in provided as a field transformation #13 - drop support of python implementations of the variogram estimators #18
- the
variogram_normed
method was removed from theCovModel
class due to redundance commit 25b1647 - the position vector of 1D fields does not have to be provided in a list-like object with length 1 commit a6f5be8
- several minor bugfixes
1.0.1 - Bouncy Blue - 2019-01-18
- fixed Numpy and Cython version during build process
1.0.0 - Bouncy Blue - 2019-01-16
- added a new covariance class, which allows the easy usage of arbitrary covariance models
- added many predefined covariance models, including truncated power law models
- added tutorials and examples, showing and explaining the main features of GSTools
- variogram models can be fitted to data
- prebuilt binaries for many Linux distributions, Mac OS and Windows, making the installation, especially of the Cython code, much easier
- the generated fields can now easily be exported to vtk files
- variance scaling is supported for coarser grids
- added pure Python versions of the variogram estimators, in case somebody has problems compiling Cython code
- the documentation is now a lot cleaner and easier to use
- the code is a lot cleaner and more consistent now
- unit tests are now automatically tested when new code is pushed
- test coverage of code is shown
- GeoStat Framework now has a website, visit us: https://geostat-framework.github.io/
- release is not downwards compatible with release v0.4.0
- SRF creation has been adapted for the
CovModel
- a tuple
pos
is now used instead ofx
,y
, andz
for the axes - renamed
estimate_unstructured
andestimate_structured
tovario_estimate_unstructured
andvario_estimate_structured
for less ambiguity
- several minor bugfixes
0.4.0 - Glorious Green - 2018-07-17
- import of cython functions put into a try-block
0.3.6 - Original Orange - 2018-07-17
First release of GSTools.