diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2501cc9b..7ff9c1bc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,6 +21,8 @@ jobs: steps: - uses: actions/checkout@v2 + with: + fetch-depth: '0' - name: Set up Python 3.8 uses: actions/setup-python@v2 @@ -31,7 +33,7 @@ jobs: run: | python -m pip install --upgrade pip pip install black 'pylint<3' 'isort[colors]<6' - pip install --editable . + pip install -v --editable . - name: black check run: | @@ -39,7 +41,7 @@ jobs: - name: pylint check run: | - python -m pylint gstools/ + python -m pylint src/gstools/ - name: isort check run: | @@ -66,7 +68,7 @@ jobs: fetch-depth: '0' - name: Build wheels - uses: pypa/cibuildwheel@v2.3.1 + uses: pypa/cibuildwheel@v2.6.0 env: CIBW_ARCHS: ${{ matrix.cfg.arch }} with: @@ -83,7 +85,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] + python-version: ['3.7', '3.8', '3.9', '3.10'] steps: - uses: actions/checkout@v2 @@ -101,7 +103,7 @@ jobs: run: | python -m pip install --upgrade pip pip install build coveralls>=3.0.0 - pip install --editable .[test] + pip install -v --editable .[test] - name: Run tests env: diff --git a/.gitignore b/.gitignore index 1ff77bf2..a04623a1 100644 --- a/.gitignore +++ b/.gitignore @@ -112,7 +112,7 @@ info/ *.cpp # generated version file -gstools/_version.py +src/gstools/_version.py # generated docs docs/source/examples/ diff --git a/MANIFEST.in b/MANIFEST.in index 71c3bb1d..24184482 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,7 +1,4 @@ -prune * -graft tests -recursive-include gstools *.py *.pyx -recursive-exclude gstools *.c *.cpp -include LICENSE README.md pyproject.toml setup.py setup.cfg -exclude CHANGELOG.md CONTRIBUTING.md AUTHORS.md -global-exclude __pycache__ *.py[cod] .* +prune ** +recursive-include tests *.py +recursive-include src/gstools *.py *.pyx +include AUTHORS.md LICENSE README.md pyproject.toml setup.py diff --git a/README.md b/README.md index b58d48e9..2740aa9f 100644 --- a/README.md +++ b/README.md @@ -350,7 +350,7 @@ in memory for immediate 3D plotting in Python. - [hankel >= 1.0.0](https://github.com/steven-murray/hankel) - [emcee >= 3.0.0](https://github.com/dfm/emcee) - [pyevtk >= 1.1.1](https://github.com/pyscience-projects/pyevtk) -- [meshio >= 4.0.0](https://github.com/nschloe/meshio) +- [meshio >= 5.1.0](https://github.com/nschloe/meshio) ### Optional diff --git a/docs/source/index.rst b/docs/source/index.rst index 50696c8e..86ec0671 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -137,7 +137,7 @@ You can cite the Zenodo code publication of GSTools by: Sebastian Müller & Lennart Schüler. GeoStat-Framework/GSTools. Zenodo. https://doi.org/10.5281/zenodo.1313628 -If you want to cite a specific version, have a look at the `Zenodo site `__. +If you want to cite a specific version, have a look at the `Zenodo site `__. Tutorials and Examples @@ -417,7 +417,7 @@ Requirements - `hankel >= 1.0.0 `_ - `emcee >= 3.0.0 `_ - `pyevtk >= 1.1.1 `_ -- `meshio >= 4.0.0 `_ +- `meshio >= 5.1.0 `_ Optional diff --git a/pyproject.toml b/pyproject.toml index 488a001a..62cbbbf3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,15 +1,93 @@ [build-system] requires = [ - "setuptools>=42", + "setuptools>=62", "wheel", - "setuptools_scm[toml]>=3.5", + "setuptools_scm[toml]>=6.4", "oldest-supported-numpy", "Cython>=0.28.3,<3.0", + "extension-helpers", ] build-backend = "setuptools.build_meta" +[project] +requires-python = ">=3.7" +name = "gstools" +description = "GSTools: A geostatistical toolbox." +authors = [ + {name = "Sebastian Müller", email = "sebastian@geostat-framework.org"}, + {name = "Lennart Schüler", email = "lennart@geostat-framework.org"}, +] +maintainers = [ + {name = "Sebastian Müller", email = "sebastian@geostat-framework.org"}, + {name = "Lennart Schüler", email = "lennart@geostat-framework.org"}, +] +readme = "README.md" +license = {file = "LICENSE"} +dynamic = ["version"] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Intended Audience :: End Users/Desktop", + "Intended Audience :: Science/Research", + "Intended Audience :: Education", + "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", + "Natural Language :: English", + "Operating System :: Unix", + "Operating System :: Microsoft", + "Operating System :: MacOS", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: GIS", + "Topic :: Scientific/Engineering :: Hydrology", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics", + "Topic :: Utilities", +] +dependencies = [ + "emcee>=3.0.0", + "hankel>=1.0.0", + "meshio>=5.1.0", + "numpy>=1.14.5", + "pyevtk>=1.1.1", + "scipy>=1.1.0", +] + +[project.optional-dependencies] +doc = [ + "m2r2>=0.2.8", + "matplotlib>=3", + "meshzoo>=0.7", + "numpydoc>=1.1", + "pykrige>=1.5,<2", + "pyvista>=0.29", + "sphinx>=4", + "sphinx-gallery>=0.8", + "sphinx-rtd-theme>=1", + "sphinxcontrib-youtube>=1.1", +] +plotting = [ + "matplotlib>=3", + "pyvista>=0.29", +] +rust = ["gstools_core>=0.2.0,<1"] +test = ["pytest-cov>=3"] + +[project.urls] +Changelog = "https://github.com/GeoStat-Framework/GSTools/blob/main/CHANGELOG.md" +Conda-Forge = "https://anaconda.org/conda-forge/gstools" +Documentation = "https://gstools.readthedocs.io" +Homepage = "https://geostat-framework.org/#gstools" +Source = "https://github.com/GeoStat-Framework/GSTools" +Tracker = "https://github.com/GeoStat-Framework/GSTools/issues" + [tool.setuptools_scm] -write_to = "gstools/_version.py" +write_to = "src/gstools/_version.py" write_to_template = "__version__ = '{version}'" local_scheme = "no-local-version" fallback_version = "0.0.0.dev0" @@ -34,8 +112,8 @@ target-version = [ "*docs*", "*examples*", "*tests*", - "*/gstools/covmodel/plot.py", - "*/gstools/field/plot.py", + "*/src/gstools/covmodel/plot.py", + "*/src/gstools/field/plot.py", ] [tool.coverage.report] @@ -46,12 +124,15 @@ target-version = [ ] [tool.pylint] - [tool.pylint.master] + [tool.pylint.main] extension-pkg-whitelist = [ "numpy", "scipy", ] ignore = "_version.py" + load-plugins = [ + "pylint.extensions.no_self_use", + ] [tool.pylint.message_control] disable = [ @@ -72,8 +153,8 @@ target-version = [ [tool.cibuildwheel] # Switch to using build build-frontend = "build" -# Disable building PyPy wheels on all platforms, 32bit for py3.10 and musllinux builds -skip = "pp* cp310-win32 cp310-manylinux_i686 *-musllinux_*" +# Disable building PyPy wheels on all platforms, 32bit for py3.10 and musllinux builds, py3.6 +skip = ["cp36-*", "pp*", "cp310-win32", "cp310-manylinux_i686", "*-musllinux_*"] # Run the package tests using `pytest` test-extras = "test" test-command = "pytest -v {package}/tests" diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 8cb2d4d6..00000000 --- a/setup.cfg +++ /dev/null @@ -1,82 +0,0 @@ -[metadata] -name = gstools -description = GSTools: A geostatistical toolbox. -long_description = file: README.md -long_description_content_type = text/markdown -url = https://github.com/GeoStat-Framework/GSTools -author = Sebastian Müller, Lennart Schüler -author_email = info@geostat-framework.org -maintainer = Sebastian Müller, Lennart Schüler -maintainer_email = info@geostat-framework.org -license = LGPL-3.0 -license_file = LICENSE -platforms = any -classifiers = - Development Status :: 5 - Production/Stable - Intended Audience :: Developers - Intended Audience :: End Users/Desktop - Intended Audience :: Science/Research - Intended Audience :: Education - License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) - Natural Language :: English - Operating System :: Unix - Operating System :: Microsoft - Operating System :: MacOS - Programming Language :: Python - Programming Language :: Python :: 3 - Programming Language :: Python :: 3 :: Only - Programming Language :: Python :: 3.6 - Programming Language :: Python :: 3.7 - Programming Language :: Python :: 3.8 - Programming Language :: Python :: 3.9 - Programming Language :: Python :: 3.10 - Topic :: Scientific/Engineering - Topic :: Scientific/Engineering :: GIS - Topic :: Scientific/Engineering :: Hydrology - Topic :: Scientific/Engineering :: Mathematics - Topic :: Scientific/Engineering :: Physics - Topic :: Utilities -project_urls = - Homepage = https://geostat-framework.org/#gstools - Documentation = https://gstools.readthedocs.io - Source = https://github.com/GeoStat-Framework/GSTools - Tracker = https://github.com/GeoStat-Framework/GSTools/issues - Changelog = https://github.com/GeoStat-Framework/GSTools/blob/main/CHANGELOG.md - Conda-Forge = https://anaconda.org/conda-forge/gstools - -[options] -packages = find: -install_requires = - emcee>=3.0.0 - hankel>=1.0.0 - meshio>=4.0.0 - numpy>=1.14.5 - pyevtk>=1.1.1 - scipy>=1.1.0 -python_requires = >=3.6 -zip_safe = False - -[options.packages.find] -exclude = - tests* - docs* - -[options.extras_require] -doc = - m2r2>=0.2.8 - matplotlib>=3 - meshzoo>=0.7 - numpydoc>=1.1 - pykrige>=1.5,<2 - pyvista>=0.29 - sphinx>=4 - sphinx-gallery>=0.8 - sphinx-rtd-theme>=1 - sphinxcontrib-youtube>=1.1 -plotting = - matplotlib>=3 - pyvista>=0.32 -rust = - gstools_core>=0.2.0,<1 -test = - pytest-cov>=3 diff --git a/setup.py b/setup.py index 1bbc7faf..4dd06ad7 100644 --- a/setup.py +++ b/setup.py @@ -1,169 +1,28 @@ # -*- coding: utf-8 -*- """GSTools: A geostatistical toolbox.""" -import glob import os -import subprocess -import sys -import tempfile -from distutils.ccompiler import new_compiler -from distutils.errors import CompileError, LinkError -from distutils.sysconfig import customize_compiler import numpy as np from Cython.Build import cythonize +from extension_helpers import add_openmp_flags_if_available from setuptools import Extension, setup -HERE = os.path.abspath(os.path.dirname(__file__)) - - -# openmp finder ############################################################### -# This code is adapted for a large part from the scikit-learn openmp_helpers.py -# which can be found at: -# https://github.com/scikit-learn/scikit-learn/blob/0.24.0/sklearn/_build_utils - - -CCODE = """ -#include -#include -int main(void) { -#pragma omp parallel -printf("nthreads=%d\\n", omp_get_num_threads()); -return 0; -} -""" - - -def get_openmp_flag(compiler): - """Get the compiler dependent openmp flag.""" - if hasattr(compiler, "compiler"): - compiler = compiler.compiler[0] - else: - compiler = compiler.__class__.__name__ - - if sys.platform == "win32" and ("icc" in compiler or "icl" in compiler): - return ["/Qopenmp"] - if sys.platform == "win32": - return ["/openmp"] - if sys.platform == "darwin" and ("icc" in compiler or "icl" in compiler): - return ["-openmp"] - if sys.platform == "darwin" and "openmp" in os.getenv("CPPFLAGS", ""): - return [] - # Default flag for GCC and clang: - return ["-fopenmp"] - - -def check_openmp_support(): - """Check whether OpenMP test code can be compiled and run.""" - ccompiler = new_compiler() - customize_compiler(ccompiler) - - with tempfile.TemporaryDirectory() as tmp_dir: - try: - os.chdir(tmp_dir) - # Write test program - with open("test_openmp.c", "w") as cfile: - cfile.write(CCODE) - os.mkdir("objects") - # Compile, test program - openmp_flags = get_openmp_flag(ccompiler) - ccompiler.compile( - ["test_openmp.c"], - output_dir="objects", - extra_postargs=openmp_flags, - ) - # Link test program - extra_preargs = os.getenv("LDFLAGS", None) - if extra_preargs is not None: - extra_preargs = extra_preargs.split(" ") - else: - extra_preargs = [] - objects = glob.glob( - os.path.join("objects", "*" + ccompiler.obj_extension) - ) - ccompiler.link_executable( - objects, - "test_openmp", - extra_preargs=extra_preargs, - extra_postargs=openmp_flags, - ) - # Run test program - output = subprocess.check_output("./test_openmp") - output = output.decode(sys.stdout.encoding or "utf-8").splitlines() - # Check test program output - if "nthreads=" in output[0]: - nthreads = int(output[0].strip().split("=")[1]) - openmp_supported = len(output) == nthreads - else: - openmp_supported = False - openmp_flags = [] - except (CompileError, LinkError, subprocess.CalledProcessError): - openmp_supported = False - openmp_flags = [] - finally: - os.chdir(HERE) - return openmp_supported, openmp_flags - - -# openmp ###################################################################### - - -# you can set GSTOOLS_BUILD_PARALLEL=0 or GSTOOLS_BUILD_PARALLEL=1 -GS_PARALLEL = os.getenv("GSTOOLS_BUILD_PARALLEL") -USE_OPENMP = bool(int(GS_PARALLEL)) if GS_PARALLEL else False - -if USE_OPENMP: - # just check if wanted - CAN_USE_OPENMP, FLAGS = check_openmp_support() - if CAN_USE_OPENMP: - print("## GSTOOLS setup: OpenMP found.") - print("## OpenMP flags:", FLAGS) - else: - print("## GSTOOLS setup: OpenMP not found.") -else: - print("## GSTOOLS setup: OpenMP not wanted by the user.") - FLAGS = [] - - -# cython extensions ########################################################### - - -CY_MODULES = [] -CY_MODULES.append( - Extension( - "gstools.field.summator", - [os.path.join("gstools", "field", "summator.pyx")], - include_dirs=[np.get_include()], - extra_compile_args=FLAGS, - extra_link_args=FLAGS, - ) -) -CY_MODULES.append( - Extension( - "gstools.variogram.estimator", - [os.path.join("gstools", "variogram", "estimator.pyx")], - language="c++", - include_dirs=[np.get_include()], - extra_compile_args=FLAGS, - extra_link_args=FLAGS, - ) -) -CY_MODULES.append( +# cython extensions +CY_MODULES = [ Extension( - "gstools.krige.krigesum", - [os.path.join("gstools", "krige", "krigesum.pyx")], + name=f"gstools.{ext}", + sources=[os.path.join("src", "gstools", *ext.split(".")) + ".pyx"], include_dirs=[np.get_include()], - extra_compile_args=FLAGS, - extra_link_args=FLAGS, + define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")], ) -) -EXT_MODULES = cythonize(CY_MODULES) # annotate=True - -# embed signatures for sphinx -for ext_m in EXT_MODULES: - ext_m.cython_directives = {"embedsignature": True} - - -# setup ####################################################################### - + for ext in ["field.summator", "variogram.estimator", "krige.krigesum"] +] +# you can set GSTOOLS_BUILD_PARALLEL=0 or GSTOOLS_BUILD_PARALLEL=1 +if int(os.getenv("GSTOOLS_BUILD_PARALLEL", "0")): + added = [add_openmp_flags_if_available(mod) for mod in CY_MODULES] + print(f"## GSTools setup: OpenMP used: {any(added)}") +else: + print("## GSTools setup: OpenMP not wanted by the user.") -setup(ext_modules=EXT_MODULES, include_dirs=[np.get_include()]) +# setup - do not include package data to ignore .pyx files in wheels +setup(ext_modules=cythonize(CY_MODULES), include_package_data=False) diff --git a/gstools/__init__.py b/src/gstools/__init__.py similarity index 100% rename from gstools/__init__.py rename to src/gstools/__init__.py diff --git a/gstools/config.py b/src/gstools/config.py similarity index 100% rename from gstools/config.py rename to src/gstools/config.py diff --git a/gstools/covmodel/__init__.py b/src/gstools/covmodel/__init__.py similarity index 100% rename from gstools/covmodel/__init__.py rename to src/gstools/covmodel/__init__.py diff --git a/gstools/covmodel/base.py b/src/gstools/covmodel/base.py similarity index 100% rename from gstools/covmodel/base.py rename to src/gstools/covmodel/base.py diff --git a/gstools/covmodel/fit.py b/src/gstools/covmodel/fit.py similarity index 100% rename from gstools/covmodel/fit.py rename to src/gstools/covmodel/fit.py diff --git a/gstools/covmodel/models.py b/src/gstools/covmodel/models.py similarity index 100% rename from gstools/covmodel/models.py rename to src/gstools/covmodel/models.py diff --git a/gstools/covmodel/plot.py b/src/gstools/covmodel/plot.py similarity index 100% rename from gstools/covmodel/plot.py rename to src/gstools/covmodel/plot.py diff --git a/gstools/covmodel/tools.py b/src/gstools/covmodel/tools.py similarity index 100% rename from gstools/covmodel/tools.py rename to src/gstools/covmodel/tools.py diff --git a/gstools/covmodel/tpl_models.py b/src/gstools/covmodel/tpl_models.py similarity index 100% rename from gstools/covmodel/tpl_models.py rename to src/gstools/covmodel/tpl_models.py diff --git a/gstools/field/__init__.py b/src/gstools/field/__init__.py similarity index 100% rename from gstools/field/__init__.py rename to src/gstools/field/__init__.py diff --git a/gstools/field/base.py b/src/gstools/field/base.py similarity index 100% rename from gstools/field/base.py rename to src/gstools/field/base.py diff --git a/gstools/field/cond_srf.py b/src/gstools/field/cond_srf.py similarity index 100% rename from gstools/field/cond_srf.py rename to src/gstools/field/cond_srf.py diff --git a/gstools/field/generator.py b/src/gstools/field/generator.py similarity index 100% rename from gstools/field/generator.py rename to src/gstools/field/generator.py diff --git a/gstools/field/plot.py b/src/gstools/field/plot.py similarity index 100% rename from gstools/field/plot.py rename to src/gstools/field/plot.py diff --git a/gstools/field/srf.py b/src/gstools/field/srf.py similarity index 100% rename from gstools/field/srf.py rename to src/gstools/field/srf.py diff --git a/gstools/field/summator.pyx b/src/gstools/field/summator.pyx similarity index 100% rename from gstools/field/summator.pyx rename to src/gstools/field/summator.pyx diff --git a/gstools/field/tools.py b/src/gstools/field/tools.py similarity index 97% rename from gstools/field/tools.py rename to src/gstools/field/tools.py index ad954402..86f3fee1 100644 --- a/gstools/field/tools.py +++ b/src/gstools/field/tools.py @@ -22,9 +22,6 @@ __all__ = ["fmt_mean_norm_trend", "to_vtk_helper", "generate_on_mesh"] -MESHIO_VERSION = list(map(int, meshio.__version__.split(".")[:2])) - - def _fmt_func_val(f_cls, func_val): # pragma: no cover if func_val is None: return str(None) @@ -193,8 +190,7 @@ def generate_on_mesh( raise ValueError("Field.mesh: mesh dimension too low!") pnts = np.empty((0, mesh_dim), dtype=np.double) for cell in mesh.cells: - cell_points = cell[1] if MESHIO_VERSION < [5, 1] else cell.data - pnt = np.mean(mesh.points[cell_points], axis=1) + pnt = np.mean(mesh.points[cell.data], axis=1) offset.append(pnts.shape[0]) length.append(pnt.shape[0]) pnts = np.vstack((pnts, pnt)) diff --git a/gstools/field/upscaling.py b/src/gstools/field/upscaling.py similarity index 100% rename from gstools/field/upscaling.py rename to src/gstools/field/upscaling.py diff --git a/gstools/krige/__init__.py b/src/gstools/krige/__init__.py similarity index 100% rename from gstools/krige/__init__.py rename to src/gstools/krige/__init__.py diff --git a/gstools/krige/base.py b/src/gstools/krige/base.py similarity index 100% rename from gstools/krige/base.py rename to src/gstools/krige/base.py diff --git a/gstools/krige/krigesum.pyx b/src/gstools/krige/krigesum.pyx similarity index 100% rename from gstools/krige/krigesum.pyx rename to src/gstools/krige/krigesum.pyx diff --git a/gstools/krige/methods.py b/src/gstools/krige/methods.py similarity index 100% rename from gstools/krige/methods.py rename to src/gstools/krige/methods.py diff --git a/gstools/krige/tools.py b/src/gstools/krige/tools.py similarity index 100% rename from gstools/krige/tools.py rename to src/gstools/krige/tools.py diff --git a/gstools/normalizer/__init__.py b/src/gstools/normalizer/__init__.py similarity index 100% rename from gstools/normalizer/__init__.py rename to src/gstools/normalizer/__init__.py diff --git a/gstools/normalizer/base.py b/src/gstools/normalizer/base.py similarity index 100% rename from gstools/normalizer/base.py rename to src/gstools/normalizer/base.py diff --git a/gstools/normalizer/methods.py b/src/gstools/normalizer/methods.py similarity index 100% rename from gstools/normalizer/methods.py rename to src/gstools/normalizer/methods.py diff --git a/gstools/normalizer/tools.py b/src/gstools/normalizer/tools.py similarity index 100% rename from gstools/normalizer/tools.py rename to src/gstools/normalizer/tools.py diff --git a/gstools/random/__init__.py b/src/gstools/random/__init__.py similarity index 100% rename from gstools/random/__init__.py rename to src/gstools/random/__init__.py diff --git a/gstools/random/rng.py b/src/gstools/random/rng.py similarity index 100% rename from gstools/random/rng.py rename to src/gstools/random/rng.py diff --git a/gstools/random/tools.py b/src/gstools/random/tools.py similarity index 100% rename from gstools/random/tools.py rename to src/gstools/random/tools.py diff --git a/gstools/tools/__init__.py b/src/gstools/tools/__init__.py similarity index 100% rename from gstools/tools/__init__.py rename to src/gstools/tools/__init__.py diff --git a/gstools/tools/export.py b/src/gstools/tools/export.py similarity index 100% rename from gstools/tools/export.py rename to src/gstools/tools/export.py diff --git a/gstools/tools/geometric.py b/src/gstools/tools/geometric.py similarity index 100% rename from gstools/tools/geometric.py rename to src/gstools/tools/geometric.py diff --git a/gstools/tools/misc.py b/src/gstools/tools/misc.py similarity index 100% rename from gstools/tools/misc.py rename to src/gstools/tools/misc.py diff --git a/gstools/tools/special.py b/src/gstools/tools/special.py similarity index 100% rename from gstools/tools/special.py rename to src/gstools/tools/special.py diff --git a/gstools/transform/__init__.py b/src/gstools/transform/__init__.py similarity index 100% rename from gstools/transform/__init__.py rename to src/gstools/transform/__init__.py diff --git a/gstools/transform/array.py b/src/gstools/transform/array.py similarity index 100% rename from gstools/transform/array.py rename to src/gstools/transform/array.py diff --git a/gstools/transform/field.py b/src/gstools/transform/field.py similarity index 100% rename from gstools/transform/field.py rename to src/gstools/transform/field.py diff --git a/gstools/variogram/__init__.py b/src/gstools/variogram/__init__.py similarity index 100% rename from gstools/variogram/__init__.py rename to src/gstools/variogram/__init__.py diff --git a/gstools/variogram/binning.py b/src/gstools/variogram/binning.py similarity index 100% rename from gstools/variogram/binning.py rename to src/gstools/variogram/binning.py diff --git a/gstools/variogram/estimator.pyx b/src/gstools/variogram/estimator.pyx similarity index 100% rename from gstools/variogram/estimator.pyx rename to src/gstools/variogram/estimator.pyx diff --git a/gstools/variogram/variogram.py b/src/gstools/variogram/variogram.py similarity index 100% rename from gstools/variogram/variogram.py rename to src/gstools/variogram/variogram.py