From 485405d21f6221e96f08cd3001187ed6d7b1360d Mon Sep 17 00:00:00 2001
From: lukas leufen <l.leufen@fz-juelich.de>
Date: Tue, 30 Jun 2020 17:41:30 +0200
Subject: [PATCH] src/ is renamed to mlair,

---
 .gitignore                                    |  2 +-
 {src => mlair}/__init__.py                    |  6 +--
 {src => mlair}/configuration/.gitignore       |  0
 {src => mlair}/configuration/__init__.py      |  0
 {src => mlair}/configuration/defaults.py      |  0
 {src => mlair}/configuration/path_config.py   | 52 ++++++++++---------
 {src => mlair}/data_handling/__init__.py      |  0
 {src => mlair}/data_handling/bootstraps.py    | 10 ++--
 .../data_handling/data_distributor.py         |  2 +-
 .../data_handling/data_generator.py           |  6 +--
 .../data_handling/data_preparation.py         |  6 +--
 {src => mlair}/helpers/__init__.py            |  0
 {src => mlair}/helpers/datastore.py           |  0
 {src => mlair}/helpers/helpers.py             |  0
 {src => mlair}/helpers/join.py                |  4 +-
 {src => mlair}/helpers/logger.py              |  0
 {src => mlair}/helpers/statistics.py          |  0
 {src => mlair}/helpers/testing.py             |  0
 {src => mlair}/helpers/time_tracking.py       |  0
 {src => mlair}/model_modules/__init__.py      |  0
 .../model_modules/advanced_paddings.py        |  0
 {src => mlair}/model_modules/flatten.py       |  0
 .../model_modules/inception_model.py          |  2 +-
 .../model_modules/keras_extensions.py         |  2 +-
 {src => mlair}/model_modules/linear_model.py  |  0
 {src => mlair}/model_modules/loss.py          |  0
 {src => mlair}/model_modules/model_class.py   | 24 ++++-----
 {src => mlair}/plotting/__init__.py           |  0
 .../plotting/postprocessing_plotting.py       |  6 +--
 {src => mlair}/plotting/tracker_plot.py       |  2 +-
 .../plotting/training_monitoring.py           |  2 +-
 {src => mlair}/run_modules/README.md          |  0
 mlair/run_modules/__init__.py                 |  7 +++
 .../run_modules/experiment_setup.py           | 10 ++--
 {src => mlair}/run_modules/model_setup.py     |  4 +-
 {src => mlair}/run_modules/partition_check.py |  2 +-
 {src => mlair}/run_modules/post_processing.py | 14 ++---
 {src => mlair}/run_modules/pre_processing.py  | 10 ++--
 {src => mlair}/run_modules/run_environment.py | 30 +++++++----
 {src => mlair}/run_modules/training.py        |  8 +--
 src/run.py => mlair/run_script.py             |  2 +-
 mlair/workflows/__init__.py                   |  2 +
 {src => mlair}/workflows/abstract_workflow.py |  2 +-
 {src => mlair}/workflows/default_workflow.py  |  6 +--
 run.py                                        |  2 +-
 run_HPC.py                                    |  2 +-
 run_hourly.py                                 |  2 +-
 run_zam347.py                                 | 14 ++---
 setup.py                                      |  7 ++-
 src/run_modules/__init__.py                   |  7 ---
 src/workflows/__init__.py                     |  2 -
 test/test_configuration/test_path_config.py   |  4 +-
 test/test_data_handling/test_bootstraps.py    |  4 +-
 .../test_data_distributor.py                  |  4 +-
 .../test_data_handling/test_data_generator.py |  6 +--
 .../test_data_preparation.py                  |  4 +-
 test/test_datastore.py                        |  4 +-
 test/test_helpers/test_helpers.py             |  6 +--
 test/test_join.py                             |  6 +--
 .../test_advanced_paddings.py                 |  2 +-
 test/test_model_modules/test_flatten_tail.py  |  2 +-
 .../test_inception_model.py                   |  6 +--
 .../test_keras_extensions.py                  |  4 +-
 test/test_model_modules/test_loss.py          |  2 +-
 test/test_model_modules/test_model_class.py   |  4 +-
 test/test_modules/test_experiment_setup.py    |  6 +--
 test/test_modules/test_model_setup.py         | 12 ++---
 test/test_modules/test_partition_check.py     |  8 +--
 test/test_modules/test_pre_processing.py      | 12 ++---
 test/test_modules/test_run_environment.py     |  4 +-
 test/test_modules/test_training.py            | 16 +++---
 test/test_plotting/test_tracker_plot.py       |  4 +-
 .../test_plotting/test_training_monitoring.py |  4 +-
 test/test_statistics.py                       |  2 +-
 74 files changed, 198 insertions(+), 187 deletions(-)
 rename {src => mlair}/__init__.py (79%)
 rename {src => mlair}/configuration/.gitignore (100%)
 rename {src => mlair}/configuration/__init__.py (100%)
 rename {src => mlair}/configuration/defaults.py (100%)
 rename {src => mlair}/configuration/path_config.py (68%)
 rename {src => mlair}/data_handling/__init__.py (100%)
 rename {src => mlair}/data_handling/bootstraps.py (98%)
 rename {src => mlair}/data_handling/data_distributor.py (98%)
 rename {src => mlair}/data_handling/data_generator.py (99%)
 rename {src => mlair}/data_handling/data_preparation.py (99%)
 rename {src => mlair}/helpers/__init__.py (100%)
 rename {src => mlair}/helpers/datastore.py (100%)
 rename {src => mlair}/helpers/helpers.py (100%)
 rename {src => mlair}/helpers/join.py (98%)
 rename {src => mlair}/helpers/logger.py (100%)
 rename {src => mlair}/helpers/statistics.py (100%)
 rename {src => mlair}/helpers/testing.py (100%)
 rename {src => mlair}/helpers/time_tracking.py (100%)
 rename {src => mlair}/model_modules/__init__.py (100%)
 rename {src => mlair}/model_modules/advanced_paddings.py (100%)
 rename {src => mlair}/model_modules/flatten.py (100%)
 rename {src => mlair}/model_modules/inception_model.py (99%)
 rename {src => mlair}/model_modules/keras_extensions.py (99%)
 rename {src => mlair}/model_modules/linear_model.py (100%)
 rename {src => mlair}/model_modules/loss.py (100%)
 rename {src => mlair}/model_modules/model_class.py (97%)
 rename {src => mlair}/plotting/__init__.py (100%)
 rename {src => mlair}/plotting/postprocessing_plotting.py (99%)
 rename {src => mlair}/plotting/tracker_plot.py (99%)
 rename {src => mlair}/plotting/training_monitoring.py (98%)
 rename {src => mlair}/run_modules/README.md (100%)
 create mode 100644 mlair/run_modules/__init__.py
 rename {src => mlair}/run_modules/experiment_setup.py (98%)
 rename {src => mlair}/run_modules/model_setup.py (97%)
 rename {src => mlair}/run_modules/partition_check.py (93%)
 rename {src => mlair}/run_modules/post_processing.py (98%)
 rename {src => mlair}/run_modules/pre_processing.py (98%)
 rename {src => mlair}/run_modules/run_environment.py (86%)
 rename {src => mlair}/run_modules/training.py (97%)
 rename src/run.py => mlair/run_script.py (97%)
 create mode 100644 mlair/workflows/__init__.py
 rename {src => mlair}/workflows/abstract_workflow.py (97%)
 rename {src => mlair}/workflows/default_workflow.py (94%)
 delete mode 100644 src/run_modules/__init__.py
 delete mode 100644 src/workflows/__init__.py

diff --git a/.gitignore b/.gitignore
index e109cec7..9ac8bb76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -73,7 +73,7 @@ report.html
 
 # secret variables #
 ####################
-/src/configuration/join_settings.py
+/mlair/configuration/join_settings.py
 
 # ignore locally build documentation #
 ######################################
diff --git a/src/__init__.py b/mlair/__init__.py
similarity index 79%
rename from src/__init__.py
rename to mlair/__init__.py
index 5b7073ff..8ff82e6c 100644
--- a/src/__init__.py
+++ b/mlair/__init__.py
@@ -4,9 +4,9 @@ __version_info__ = {
     'micro': 0,
 }
 
-from src.run_modules import *
-from src.workflows import DefaultWorkflow, Workflow
-
+from mlair.run_modules import *
+from mlair.workflows import DefaultWorkflow, Workflow
+from mlair.run_script import run
 
 
 def get_version():
diff --git a/src/configuration/.gitignore b/mlair/configuration/.gitignore
similarity index 100%
rename from src/configuration/.gitignore
rename to mlair/configuration/.gitignore
diff --git a/src/configuration/__init__.py b/mlair/configuration/__init__.py
similarity index 100%
rename from src/configuration/__init__.py
rename to mlair/configuration/__init__.py
diff --git a/src/configuration/defaults.py b/mlair/configuration/defaults.py
similarity index 100%
rename from src/configuration/defaults.py
rename to mlair/configuration/defaults.py
diff --git a/src/configuration/path_config.py b/mlair/configuration/path_config.py
similarity index 68%
rename from src/configuration/path_config.py
rename to mlair/configuration/path_config.py
index 7af25875..48c4135e 100644
--- a/src/configuration/path_config.py
+++ b/mlair/configuration/path_config.py
@@ -6,7 +6,8 @@ import re
 import socket
 from typing import Tuple
 
-ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
+# ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
+ROOT_PATH = os.getcwd()
 
 
 def prepare_host(create_new=True, data_path=None, sampling="daily") -> str:
@@ -23,35 +24,38 @@ def prepare_host(create_new=True, data_path=None, sampling="daily") -> str:
 
     :return: full path to data
     """
-    hostname = get_host()
-    user = getpass.getuser()
-    runner_regex = re.compile(r"runner-.*-project-2411-concurrent-\d+")
-    if hostname == "ZAM144":
-        path = f"/home/{user}/Data/toar_{sampling}/"
-    elif hostname == "zam347":
-        path = f"/home/{user}/Data/toar_{sampling}/"
-    elif hostname == "linux-aa9b":
-        path = f"/home/{user}/machinelearningtools/data/toar_{sampling}/"
-    elif (len(hostname) > 2) and (hostname[:2] == "jr"):
-        path = f"/p/project/cjjsc42/{user}/DATA/toar_{sampling}/"
-    elif (len(hostname) > 2) and (hostname[:2] in ['jw', 'ju'] or hostname[:5] in ['hdfml']):
-        path = f"/p/project/deepacf/intelliaq/{user}/DATA/toar_{sampling}/"
-    elif runner_regex.match(hostname) is not None:
-        path = f"/home/{user}/machinelearningtools/data/toar_{sampling}/"
-    else:
-        raise OSError(f"unknown host '{hostname}'")
-    if not os.path.exists(path):
+    if data_path is None:
+        hostname = get_host()
+        user = getpass.getuser()
+        runner_regex = re.compile(r"runner-.*-project-2411-concurrent-\d+")
+        if hostname == "ZAM144":
+            data_path = f"/home/{user}/Data/toar_{sampling}/"
+        elif hostname == "zam347":
+            data_path = f"/home/{user}/Data/toar_{sampling}/"
+        elif hostname == "linux-aa9bc":
+            data_path = f"/home/{user}/machinelearningtools/data/toar_{sampling}/"
+        elif (len(hostname) > 2) and (hostname[:2] == "jr"):
+            data_path = f"/p/project/cjjsc42/{user}/DATA/toar_{sampling}/"
+        elif (len(hostname) > 2) and (hostname[:2] in ['jw', 'ju'] or hostname[:5] in ['hdfml']):
+            data_path = f"/p/project/deepacf/intelliaq/{user}/DATA/toar_{sampling}/"
+        elif runner_regex.match(hostname) is not None:
+            data_path = f"/home/{user}/machinelearningtools/data/toar_{sampling}/"
+        else:
+            data_path = os.path.join(os.getcwd(), "data", sampling)
+            # raise OSError(f"unknown host '{hostname}'")
+
+    if not os.path.exists(data_path):
         try:
             if create_new:
-                check_path_and_create(path)
-                return path
+                check_path_and_create(data_path)
+                return data_path
             else:
                 raise PermissionError
         except PermissionError:
-            raise NotADirectoryError(f"path '{path}' does not exist for host '{hostname}'.")
+            raise NotADirectoryError(f"path '{data_path}' does not exist for host '{hostname}'.")
     else:
-        logging.debug(f"set path to: {path}")
-        return path
+        logging.debug(f"set path to: {data_path}")
+        return data_path
 
 
 def set_experiment_path(name: str, path: str = None) -> str:
diff --git a/src/data_handling/__init__.py b/mlair/data_handling/__init__.py
similarity index 100%
rename from src/data_handling/__init__.py
rename to mlair/data_handling/__init__.py
diff --git a/src/data_handling/bootstraps.py b/mlair/data_handling/bootstraps.py
similarity index 98%
rename from src/data_handling/bootstraps.py
rename to mlair/data_handling/bootstraps.py
index f5077590..4e72b2b8 100644
--- a/src/data_handling/bootstraps.py
+++ b/mlair/data_handling/bootstraps.py
@@ -22,8 +22,8 @@ import keras
 import numpy as np
 import xarray as xr
 
-from src import helpers
-from src.data_handling.data_generator import DataGenerator
+from mlair import helpers
+from mlair.data_handling.data_generator import DataGenerator
 
 
 class BootStrapGenerator(keras.utils.Sequence):
@@ -361,9 +361,9 @@ class BootStraps:
 
 if __name__ == "__main__":
 
-    from src.run_modules.experiment_setup import ExperimentSetup
-    from src.run_modules.run_environment import RunEnvironment
-    from src.run_modules.pre_processing import PreProcessing
+    from mlair.run_modules.experiment_setup import ExperimentSetup
+    from mlair.run_modules.run_environment import RunEnvironment
+    from mlair.run_modules.pre_processing import PreProcessing
 
     formatter = '%(asctime)s - %(levelname)s: %(message)s  [%(filename)s:%(funcName)s:%(lineno)s]'
     logging.basicConfig(format=formatter, level=logging.INFO)
diff --git a/src/data_handling/data_distributor.py b/mlair/data_handling/data_distributor.py
similarity index 98%
rename from src/data_handling/data_distributor.py
rename to mlair/data_handling/data_distributor.py
index 2600afcb..bba5f263 100644
--- a/src/data_handling/data_distributor.py
+++ b/mlair/data_handling/data_distributor.py
@@ -29,7 +29,7 @@ import math
 import keras
 import numpy as np
 
-from src.data_handling.data_generator import DataGenerator
+from mlair.data_handling.data_generator import DataGenerator
 
 
 class Distributor(keras.utils.Sequence):
diff --git a/src/data_handling/data_generator.py b/mlair/data_handling/data_generator.py
similarity index 99%
rename from src/data_handling/data_generator.py
rename to mlair/data_handling/data_generator.py
index 6747e82e..4c61454b 100644
--- a/src/data_handling/data_generator.py
+++ b/mlair/data_handling/data_generator.py
@@ -12,9 +12,9 @@ import dask.array as da
 import keras
 import xarray as xr
 
-from src import helpers
-from src.data_handling.data_preparation import DataPrep
-from src.helpers.join import EmptyQueryResult
+from mlair import helpers
+from mlair.data_handling.data_preparation import DataPrep
+from mlair.helpers.join import EmptyQueryResult
 
 number = Union[float, int]
 num_or_list = Union[number, List[number]]
diff --git a/src/data_handling/data_preparation.py b/mlair/data_handling/data_preparation.py
similarity index 99%
rename from src/data_handling/data_preparation.py
rename to mlair/data_handling/data_preparation.py
index fa7388e7..f500adec 100644
--- a/src/data_handling/data_preparation.py
+++ b/mlair/data_handling/data_preparation.py
@@ -13,9 +13,9 @@ import numpy as np
 import pandas as pd
 import xarray as xr
 
-from src.configuration import check_path_and_create
-from src import helpers
-from src.helpers import join, statistics
+from mlair.configuration import check_path_and_create
+from mlair import helpers
+from mlair.helpers import join, statistics
 
 # define a more general date type for type hinting
 date = Union[dt.date, dt.datetime]
diff --git a/src/helpers/__init__.py b/mlair/helpers/__init__.py
similarity index 100%
rename from src/helpers/__init__.py
rename to mlair/helpers/__init__.py
diff --git a/src/helpers/datastore.py b/mlair/helpers/datastore.py
similarity index 100%
rename from src/helpers/datastore.py
rename to mlair/helpers/datastore.py
diff --git a/src/helpers/helpers.py b/mlair/helpers/helpers.py
similarity index 100%
rename from src/helpers/helpers.py
rename to mlair/helpers/helpers.py
diff --git a/src/helpers/join.py b/mlair/helpers/join.py
similarity index 98%
rename from src/helpers/join.py
rename to mlair/helpers/join.py
index 7d9c3aad..a3c6876e 100644
--- a/src/helpers/join.py
+++ b/mlair/helpers/join.py
@@ -9,8 +9,8 @@ from typing import Iterator, Union, List, Dict
 import pandas as pd
 import requests
 
-from src import helpers
-from src.configuration.join_settings import join_settings
+from mlair import helpers
+from mlair.configuration.join_settings import join_settings
 
 # join_url_base = 'https://join.fz-juelich.de/services/rest/surfacedata/'
 str_or_none = Union[str, None]
diff --git a/src/helpers/logger.py b/mlair/helpers/logger.py
similarity index 100%
rename from src/helpers/logger.py
rename to mlair/helpers/logger.py
diff --git a/src/helpers/statistics.py b/mlair/helpers/statistics.py
similarity index 100%
rename from src/helpers/statistics.py
rename to mlair/helpers/statistics.py
diff --git a/src/helpers/testing.py b/mlair/helpers/testing.py
similarity index 100%
rename from src/helpers/testing.py
rename to mlair/helpers/testing.py
diff --git a/src/helpers/time_tracking.py b/mlair/helpers/time_tracking.py
similarity index 100%
rename from src/helpers/time_tracking.py
rename to mlair/helpers/time_tracking.py
diff --git a/src/model_modules/__init__.py b/mlair/model_modules/__init__.py
similarity index 100%
rename from src/model_modules/__init__.py
rename to mlair/model_modules/__init__.py
diff --git a/src/model_modules/advanced_paddings.py b/mlair/model_modules/advanced_paddings.py
similarity index 100%
rename from src/model_modules/advanced_paddings.py
rename to mlair/model_modules/advanced_paddings.py
diff --git a/src/model_modules/flatten.py b/mlair/model_modules/flatten.py
similarity index 100%
rename from src/model_modules/flatten.py
rename to mlair/model_modules/flatten.py
diff --git a/src/model_modules/inception_model.py b/mlair/model_modules/inception_model.py
similarity index 99%
rename from src/model_modules/inception_model.py
rename to mlair/model_modules/inception_model.py
index 74cd4d80..d7354c37 100644
--- a/src/model_modules/inception_model.py
+++ b/mlair/model_modules/inception_model.py
@@ -6,7 +6,7 @@ import logging
 import keras
 import keras.layers as layers
 
-from src.model_modules.advanced_paddings import PadUtils, ReflectionPadding2D, Padding2D
+from mlair.model_modules.advanced_paddings import PadUtils, ReflectionPadding2D, Padding2D
 
 
 class InceptionModelBase:
diff --git a/src/model_modules/keras_extensions.py b/mlair/model_modules/keras_extensions.py
similarity index 99%
rename from src/model_modules/keras_extensions.py
rename to mlair/model_modules/keras_extensions.py
index 47991381..33358e56 100644
--- a/src/model_modules/keras_extensions.py
+++ b/mlair/model_modules/keras_extensions.py
@@ -13,7 +13,7 @@ import numpy as np
 from keras import backend as K
 from keras.callbacks import History, ModelCheckpoint, Callback
 
-from src import helpers
+from mlair import helpers
 
 
 class HistoryAdvanced(History):
diff --git a/src/model_modules/linear_model.py b/mlair/model_modules/linear_model.py
similarity index 100%
rename from src/model_modules/linear_model.py
rename to mlair/model_modules/linear_model.py
diff --git a/src/model_modules/loss.py b/mlair/model_modules/loss.py
similarity index 100%
rename from src/model_modules/loss.py
rename to mlair/model_modules/loss.py
diff --git a/src/model_modules/model_class.py b/mlair/model_modules/model_class.py
similarity index 97%
rename from src/model_modules/model_class.py
rename to mlair/model_modules/model_class.py
index dab2e168..dbf7771e 100644
--- a/src/model_modules/model_class.py
+++ b/mlair/model_modules/model_class.py
@@ -108,7 +108,7 @@ True
 
 """
 
-import src.model_modules.keras_extensions
+import mlair.model_modules.keras_extensions
 
 __author__ = "Lukas Leufen, Felix Kleinert"
 # __date__ = '2019-12-12'
@@ -119,9 +119,9 @@ from typing import Any, Callable, Dict
 
 import keras
 import tensorflow as tf
-from src.model_modules.inception_model import InceptionModelBase
-from src.model_modules.flatten import flatten_tail
-from src.model_modules.advanced_paddings import PadUtils, Padding2D
+from mlair.model_modules.inception_model import InceptionModelBase
+from mlair.model_modules.flatten import flatten_tail
+from mlair.model_modules.advanced_paddings import PadUtils, Padding2D
 
 
 class AbstractModelClass(ABC):
@@ -392,8 +392,8 @@ class MyLittleModel(AbstractModelClass):
     def set_compile_options(self):
         self.initial_lr = 1e-2
         self.optimizer = keras.optimizers.SGD(lr=self.initial_lr, momentum=0.9)
-        self.lr_decay = src.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, drop=.94,
-                                                                             epochs_drop=10)
+        self.lr_decay = mlair.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, drop=.94,
+                                                                               epochs_drop=10)
         self.compile_options = {"loss": keras.losses.mean_squared_error, "metrics": ["mse", "mae"]}
 
 
@@ -468,8 +468,8 @@ class MyBranchedModel(AbstractModelClass):
     def set_compile_options(self):
         self.initial_lr = 1e-2
         self.optimizer = keras.optimizers.SGD(lr=self.initial_lr, momentum=0.9)
-        self.lr_decay = src.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, drop=.94,
-                                                                             epochs_drop=10)
+        self.lr_decay = mlair.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, drop=.94,
+                                                                               epochs_drop=10)
         self.compile_options = {"loss": [keras.losses.mean_absolute_error] + [keras.losses.mean_squared_error] + [
             keras.losses.mean_squared_error], "metrics": ["mse", "mae"]}
 
@@ -497,8 +497,8 @@ class MyTowerModel(AbstractModelClass):
         self.dropout_rate = 1e-2
         self.regularizer = keras.regularizers.l2(0.1)
         self.initial_lr = 1e-2
-        self.lr_decay = src.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, drop=.94,
-                                                                             epochs_drop=10)
+        self.lr_decay = mlair.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, drop=.94,
+                                                                               epochs_drop=10)
         self.activation = keras.layers.PReLU
 
         # apply to model
@@ -609,8 +609,8 @@ class MyPaperModel(AbstractModelClass):
         self.dropout_rate = .3
         self.regularizer = keras.regularizers.l2(0.001)
         self.initial_lr = 1e-3
-        self.lr_decay = src.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, drop=.94,
-                                                                             epochs_drop=10)
+        self.lr_decay = mlair.model_modules.keras_extensions.LearningRateDecay(base_lr=self.initial_lr, drop=.94,
+                                                                               epochs_drop=10)
         self.activation = keras.layers.ELU
         self.padding = "SymPad2D"
 
diff --git a/src/plotting/__init__.py b/mlair/plotting/__init__.py
similarity index 100%
rename from src/plotting/__init__.py
rename to mlair/plotting/__init__.py
diff --git a/src/plotting/postprocessing_plotting.py b/mlair/plotting/postprocessing_plotting.py
similarity index 99%
rename from src/plotting/postprocessing_plotting.py
rename to mlair/plotting/postprocessing_plotting.py
index 4b7f1521..cf969480 100644
--- a/src/plotting/postprocessing_plotting.py
+++ b/mlair/plotting/postprocessing_plotting.py
@@ -18,9 +18,9 @@ import seaborn as sns
 import xarray as xr
 from matplotlib.backends.backend_pdf import PdfPages
 
-from src import helpers
-from src.data_handling import DataGenerator
-from src.helpers import TimeTrackingWrapper
+from mlair import helpers
+from mlair.data_handling import DataGenerator
+from mlair.helpers import TimeTrackingWrapper
 
 logging.getLogger('matplotlib').setLevel(logging.WARNING)
 
diff --git a/src/plotting/tracker_plot.py b/mlair/plotting/tracker_plot.py
similarity index 99%
rename from src/plotting/tracker_plot.py
rename to mlair/plotting/tracker_plot.py
index 20db5d9d..406c32fe 100644
--- a/src/plotting/tracker_plot.py
+++ b/mlair/plotting/tracker_plot.py
@@ -4,7 +4,7 @@ import numpy as np
 import os
 from typing import Union, List, Optional, Dict
 
-from src.helpers import to_list
+from mlair.helpers import to_list
 
 from matplotlib import pyplot as plt, lines as mlines, ticker as ticker
 from matplotlib.patches import Rectangle
diff --git a/src/plotting/training_monitoring.py b/mlair/plotting/training_monitoring.py
similarity index 98%
rename from src/plotting/training_monitoring.py
rename to mlair/plotting/training_monitoring.py
index 473b966c..913c11dd 100644
--- a/src/plotting/training_monitoring.py
+++ b/mlair/plotting/training_monitoring.py
@@ -10,7 +10,7 @@ import matplotlib
 import matplotlib.pyplot as plt
 import pandas as pd
 
-from src.model_modules.keras_extensions import LearningRateDecay
+from mlair.model_modules.keras_extensions import LearningRateDecay
 
 matplotlib.use('Agg')
 history_object = Union[Dict, keras.callbacks.History]
diff --git a/src/run_modules/README.md b/mlair/run_modules/README.md
similarity index 100%
rename from src/run_modules/README.md
rename to mlair/run_modules/README.md
diff --git a/mlair/run_modules/__init__.py b/mlair/run_modules/__init__.py
new file mode 100644
index 00000000..ba38d3e9
--- /dev/null
+++ b/mlair/run_modules/__init__.py
@@ -0,0 +1,7 @@
+from mlair.run_modules.experiment_setup import ExperimentSetup
+from mlair.run_modules.model_setup import ModelSetup
+from mlair.run_modules.partition_check import PartitionCheck
+from mlair.run_modules.post_processing import PostProcessing
+from mlair.run_modules.pre_processing import PreProcessing
+from mlair.run_modules.run_environment import RunEnvironment
+from mlair.run_modules.training import Training
diff --git a/src/run_modules/experiment_setup.py b/mlair/run_modules/experiment_setup.py
similarity index 98%
rename from src/run_modules/experiment_setup.py
rename to mlair/run_modules/experiment_setup.py
index a93fe403..c40847ed 100644
--- a/src/run_modules/experiment_setup.py
+++ b/mlair/run_modules/experiment_setup.py
@@ -6,9 +6,9 @@ import logging
 import os
 from typing import Union, Dict, Any, List
 
-from src.configuration import path_config
-from src import helpers
-from src.configuration.defaults import DEFAULT_STATIONS, DEFAULT_VAR_ALL_DICT, DEFAULT_NETWORK, DEFAULT_STATION_TYPE, \
+from mlair.configuration import path_config
+from mlair import helpers
+from mlair.configuration.defaults import DEFAULT_STATIONS, DEFAULT_VAR_ALL_DICT, DEFAULT_NETWORK, DEFAULT_STATION_TYPE, \
     DEFAULT_START, DEFAULT_END, DEFAULT_WINDOW_HISTORY_SIZE, DEFAULT_OVERWRITE_LOCAL_DATA, DEFAULT_TRANSFORMATION, \
     DEFAULT_HPC_LOGIN_LIST, DEFAULT_HPC_HOST_LIST, DEFAULT_CREATE_NEW_MODEL, DEFAULT_TRAINABLE, \
     DEFAULT_FRACTION_OF_TRAINING, DEFAULT_EXTREME_VALUES, DEFAULT_EXTREMES_ON_RIGHT_TAIL_ONLY, DEFAULT_PERMUTE_DATA, \
@@ -18,8 +18,8 @@ from src.configuration.defaults import DEFAULT_STATIONS, DEFAULT_VAR_ALL_DICT, D
     DEFAULT_VAL_MIN_LENGTH, DEFAULT_TEST_START, DEFAULT_TEST_END, DEFAULT_TEST_MIN_LENGTH, DEFAULT_TRAIN_VAL_MIN_LENGTH, \
     DEFAULT_USE_ALL_STATIONS_ON_ALL_DATA_SETS, DEFAULT_EVALUATE_BOOTSTRAPS, DEFAULT_CREATE_NEW_BOOTSTRAPS, \
     DEFAULT_NUMBER_OF_BOOTSTRAPS, DEFAULT_PLOT_LIST
-from src.run_modules.run_environment import RunEnvironment
-from src.model_modules.model_class import MyLittleModel as VanillaModel
+from mlair.run_modules.run_environment import RunEnvironment
+from mlair.model_modules.model_class import MyLittleModel as VanillaModel
 
 
 class ExperimentSetup(RunEnvironment):
diff --git a/src/run_modules/model_setup.py b/mlair/run_modules/model_setup.py
similarity index 97%
rename from src/run_modules/model_setup.py
rename to mlair/run_modules/model_setup.py
index f9683b95..6c05a573 100644
--- a/src/run_modules/model_setup.py
+++ b/mlair/run_modules/model_setup.py
@@ -9,8 +9,8 @@ import os
 import keras
 import tensorflow as tf
 
-from src.model_modules.keras_extensions import HistoryAdvanced, CallbackHandler
-from src.run_modules.run_environment import RunEnvironment
+from mlair.model_modules.keras_extensions import HistoryAdvanced, CallbackHandler
+from mlair.run_modules.run_environment import RunEnvironment
 
 
 class ModelSetup(RunEnvironment):
diff --git a/src/run_modules/partition_check.py b/mlair/run_modules/partition_check.py
similarity index 93%
rename from src/run_modules/partition_check.py
rename to mlair/run_modules/partition_check.py
index 8f4c703e..c45f3500 100644
--- a/src/run_modules/partition_check.py
+++ b/mlair/run_modules/partition_check.py
@@ -1,7 +1,7 @@
 __author__ = "Felix Kleinert"
 __date__ = '2020-04-07'
 
-from src.run_modules.run_environment import RunEnvironment
+from mlair.run_modules.run_environment import RunEnvironment
 
 
 class PartitionCheck(RunEnvironment):
diff --git a/src/run_modules/post_processing.py b/mlair/run_modules/post_processing.py
similarity index 98%
rename from src/run_modules/post_processing.py
rename to mlair/run_modules/post_processing.py
index dedcda0a..f096d3b5 100644
--- a/src/run_modules/post_processing.py
+++ b/mlair/run_modules/post_processing.py
@@ -13,14 +13,14 @@ import numpy as np
 import pandas as pd
 import xarray as xr
 
-from src.data_handling import BootStraps, Distributor, DataGenerator, DataPrep
-from src.helpers.datastore import NameNotFoundInDataStore
-from src.helpers import TimeTracking, statistics
-from src.model_modules.linear_model import OrdinaryLeastSquaredModel
-from src.model_modules.model_class import AbstractModelClass
-from src.plotting.postprocessing_plotting import PlotMonthlySummary, PlotStationMap, PlotClimatologicalSkillScore, \
+from mlair.data_handling import BootStraps, Distributor, DataGenerator, DataPrep
+from mlair.helpers.datastore import NameNotFoundInDataStore
+from mlair.helpers import TimeTracking, statistics
+from mlair.model_modules.linear_model import OrdinaryLeastSquaredModel
+from mlair.model_modules.model_class import AbstractModelClass
+from mlair.plotting.postprocessing_plotting import PlotMonthlySummary, PlotStationMap, PlotClimatologicalSkillScore, \
     PlotCompetitiveSkillScore, PlotTimeSeries, PlotBootstrapSkillScore, PlotAvailability, PlotConditionalQuantiles
-from src.run_modules.run_environment import RunEnvironment
+from mlair.run_modules.run_environment import RunEnvironment
 
 
 class PostProcessing(RunEnvironment):
diff --git a/src/run_modules/pre_processing.py b/mlair/run_modules/pre_processing.py
similarity index 98%
rename from src/run_modules/pre_processing.py
rename to mlair/run_modules/pre_processing.py
index b4b36a20..c5955fc0 100644
--- a/src/run_modules/pre_processing.py
+++ b/mlair/run_modules/pre_processing.py
@@ -10,11 +10,11 @@ from typing import Tuple, Dict, List
 import numpy as np
 import pandas as pd
 
-from src.data_handling import DataGenerator
-from src.helpers import TimeTracking
-from src.configuration import path_config
-from src.helpers.join import EmptyQueryResult
-from src.run_modules.run_environment import RunEnvironment
+from mlair.data_handling import DataGenerator
+from mlair.helpers import TimeTracking
+from mlair.configuration import path_config
+from mlair.helpers.join import EmptyQueryResult
+from mlair.run_modules.run_environment import RunEnvironment
 
 DEFAULT_ARGS_LIST = ["data_path", "network", "stations", "variables", "interpolate_dim", "target_dim", "target_var"]
 DEFAULT_KWARGS_LIST = ["limit_nan_fill", "window_history_size", "window_lead_time", "statistics_per_var", "min_length",
diff --git a/src/run_modules/run_environment.py b/mlair/run_modules/run_environment.py
similarity index 86%
rename from src/run_modules/run_environment.py
rename to mlair/run_modules/run_environment.py
index 45d0a4a0..ecb55282 100644
--- a/src/run_modules/run_environment.py
+++ b/mlair/run_modules/run_environment.py
@@ -9,11 +9,11 @@ import os
 import shutil
 import time
 
-from src.helpers.datastore import DataStoreByScope as DataStoreObject
-from src.helpers.datastore import NameNotFoundInDataStore
-from src.helpers import Logger
-from src.helpers import TimeTracking
-from src.plotting.tracker_plot import TrackPlot
+from mlair.helpers.datastore import DataStoreByScope as DataStoreObject
+from mlair.helpers.datastore import NameNotFoundInDataStore
+from mlair.helpers import Logger
+from mlair.helpers import TimeTracking
+from mlair.plotting.tracker_plot import TrackPlot
 
 
 class RunEnvironment(object):
@@ -88,12 +88,16 @@ class RunEnvironment(object):
 
     # set data store and logger (both are mutable!)
     del_by_exit = False
-    data_store = DataStoreObject()
-    logger = Logger()
+    data_store = None
+    logger = None
     tracker_list = []
 
     def __init__(self):
         """Start time tracking automatically and logs as info."""
+        if RunEnvironment.data_store is None:
+            RunEnvironment.data_store = DataStoreObject()
+        if RunEnvironment.logger is None:
+            RunEnvironment.logger = Logger()
         self.time = TimeTracking()
         logging.info(f"{self.__class__.__name__} started")
         # atexit.register(self.__del__)
@@ -117,7 +121,7 @@ class RunEnvironment(object):
                 try:
                     self.__plot_tracking()
                     self.__save_tracking()
-                    self.__copy_log_file()
+                    self.__move_log_file()
                 except FileNotFoundError:
                     pass
                 self.data_store.clear_data_store()
@@ -132,11 +136,15 @@ class RunEnvironment(object):
             logging.error(exc_val, exc_info=(exc_type, exc_val, exc_tb))
         self.__del__()
 
-    def __copy_log_file(self):
+    def __move_log_file(self):
         try:
             new_file = self.__find_file_pattern("logging_%03i.log")
-            logging.info(f"Copy log file to {new_file}")
-            shutil.copyfile(self.logger.log_file, new_file)
+            logging.info(f"Move log file to {new_file}")
+            shutil.move(self.logger.log_file, new_file)
+            try:
+                os.rmdir(os.path.dirname(self.logger.log_file))
+            except (OSError, FileNotFoundError):
+                pass
         except (NameNotFoundInDataStore, FileNotFoundError):
             pass
 
diff --git a/src/run_modules/training.py b/mlair/run_modules/training.py
similarity index 97%
rename from src/run_modules/training.py
rename to mlair/run_modules/training.py
index 1a0d7beb..0c516c57 100644
--- a/src/run_modules/training.py
+++ b/mlair/run_modules/training.py
@@ -11,10 +11,10 @@ from typing import Union
 import keras
 from keras.callbacks import Callback, History
 
-from src.data_handling import Distributor
-from src.model_modules.keras_extensions import CallbackHandler
-from src.plotting.training_monitoring import PlotModelHistory, PlotModelLearningRate
-from src.run_modules.run_environment import RunEnvironment
+from mlair.data_handling import Distributor
+from mlair.model_modules.keras_extensions import CallbackHandler
+from mlair.plotting.training_monitoring import PlotModelHistory, PlotModelLearningRate
+from mlair.run_modules.run_environment import RunEnvironment
 
 
 class Training(RunEnvironment):
diff --git a/src/run.py b/mlair/run_script.py
similarity index 97%
rename from src/run.py
rename to mlair/run_script.py
index 1494be0a..2d1f6aee 100644
--- a/src/run.py
+++ b/mlair/run_script.py
@@ -1,7 +1,7 @@
 __author__ = "Lukas Leufen"
 __date__ = '2020-06-29'
 
-from src.workflows import DefaultWorkflow
+from mlair.workflows import DefaultWorkflow
 import inspect
 
 
diff --git a/mlair/workflows/__init__.py b/mlair/workflows/__init__.py
new file mode 100644
index 00000000..27c060f1
--- /dev/null
+++ b/mlair/workflows/__init__.py
@@ -0,0 +1,2 @@
+from mlair.workflows.abstract_workflow import Workflow
+from mlair.workflows.default_workflow import DefaultWorkflow, DefaultWorkflowHPC
\ No newline at end of file
diff --git a/src/workflows/abstract_workflow.py b/mlair/workflows/abstract_workflow.py
similarity index 97%
rename from src/workflows/abstract_workflow.py
rename to mlair/workflows/abstract_workflow.py
index 5d4e62c8..f187ff11 100644
--- a/src/workflows/abstract_workflow.py
+++ b/mlair/workflows/abstract_workflow.py
@@ -5,7 +5,7 @@ __date__ = '2020-06-26'
 
 from collections import OrderedDict
 
-from src import RunEnvironment
+from mlair import RunEnvironment
 
 
 class Workflow:
diff --git a/src/workflows/default_workflow.py b/mlair/workflows/default_workflow.py
similarity index 94%
rename from src/workflows/default_workflow.py
rename to mlair/workflows/default_workflow.py
index 6a60c6ae..c1a9c749 100644
--- a/src/workflows/default_workflow.py
+++ b/mlair/workflows/default_workflow.py
@@ -4,9 +4,9 @@ __author__ = "Lukas Leufen"
 __date__ = '2020-06-26'
 
 import inspect
-from src.helpers import remove_items
-from src.run_modules import ExperimentSetup, PreProcessing, PartitionCheck, ModelSetup, Training, PostProcessing
-from src.workflows.abstract_workflow import Workflow
+from mlair.helpers import remove_items
+from mlair.run_modules import ExperimentSetup, PreProcessing, PartitionCheck, ModelSetup, Training, PostProcessing
+from mlair.workflows.abstract_workflow import Workflow
 
 
 class DefaultWorkflow(Workflow):
diff --git a/run.py b/run.py
index a9d81906..15f30a7e 100644
--- a/run.py
+++ b/run.py
@@ -2,7 +2,7 @@ __author__ = "Lukas Leufen"
 __date__ = '2020-06-29'
 
 import argparse
-from src.workflows import DefaultWorkflow
+from mlair.workflows import DefaultWorkflow
 
 
 def main(parser_args):
diff --git a/run_HPC.py b/run_HPC.py
index fc2ead40..d6dbb4dc 100644
--- a/run_HPC.py
+++ b/run_HPC.py
@@ -2,7 +2,7 @@ __author__ = "Lukas Leufen"
 __date__ = '2020-06-29'
 
 import argparse
-from src.workflows import DefaultWorkflowHPC
+from mlair.workflows import DefaultWorkflowHPC
 
 
 def main(parser_args):
diff --git a/run_hourly.py b/run_hourly.py
index 682988f6..b831cf1e 100644
--- a/run_hourly.py
+++ b/run_hourly.py
@@ -3,7 +3,7 @@ __date__ = '2019-11-14'
 
 import argparse
 
-from src.workflows import DefaultWorkflow
+from mlair.workflows import DefaultWorkflow
 
 
 def main(parser_args):
diff --git a/run_zam347.py b/run_zam347.py
index 2d351a89..9027bec8 100644
--- a/run_zam347.py
+++ b/run_zam347.py
@@ -5,13 +5,13 @@ import argparse
 import json
 import logging
 
-from src.run_modules.experiment_setup import ExperimentSetup
-from src.run_modules.model_setup import ModelSetup
-from src.run_modules.post_processing import PostProcessing
-from src.run_modules.pre_processing import PreProcessing
-from src.run_modules.run_environment import RunEnvironment
-from src.run_modules.training import Training
-from src.workflows import DefaultWorkflowHPC
+from mlair.run_modules.experiment_setup import ExperimentSetup
+from mlair.run_modules.model_setup import ModelSetup
+from mlair.run_modules.post_processing import PostProcessing
+from mlair.run_modules.pre_processing import PreProcessing
+from mlair.run_modules.run_environment import RunEnvironment
+from mlair.run_modules.training import Training
+from mlair.workflows import DefaultWorkflowHPC
 
 
 def load_stations():
diff --git a/setup.py b/setup.py
index 8e08e921..f708febb 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 
 import setuptools
 
-from src import __version__, __author__, __email__
+from mlair import __version__, __author__, __email__
 
 
 with open("README.md", "r") as fh:
@@ -9,7 +9,7 @@ with open("README.md", "r") as fh:
 
 
 setuptools.setup(
-    name="mlt",
+    name="mlair",
     version=__version__,
     author=__author__,
     author_email=__email__,
@@ -17,8 +17,7 @@ setuptools.setup(
     long_description=long_description,
     long_description_content_type="text/markdown",
     url="https://gitlab.version.fz-juelich.de/toar/machinelearningtools",
-    package_dir={'': 'src'},
-    packages=setuptools.find_packages(where="src"),
+    packages=setuptools.find_packages(),
     classifiers=[
         "Programming Language :: Python :: 3",
         "License :: OSI Approved :: MIT License",  #  to be adjusted
diff --git a/src/run_modules/__init__.py b/src/run_modules/__init__.py
deleted file mode 100644
index 0c70ae42..00000000
--- a/src/run_modules/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from src.run_modules.experiment_setup import ExperimentSetup
-from src.run_modules.model_setup import ModelSetup
-from src.run_modules.partition_check import PartitionCheck
-from src.run_modules.post_processing import PostProcessing
-from src.run_modules.pre_processing import PreProcessing
-from src.run_modules.run_environment import RunEnvironment
-from src.run_modules.training import Training
diff --git a/src/workflows/__init__.py b/src/workflows/__init__.py
deleted file mode 100644
index 57e514cd..00000000
--- a/src/workflows/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from src.workflows.abstract_workflow import Workflow
-from src.workflows.default_workflow import DefaultWorkflow, DefaultWorkflowHPC
\ No newline at end of file
diff --git a/test/test_configuration/test_path_config.py b/test/test_configuration/test_path_config.py
index acb43676..320261b8 100644
--- a/test/test_configuration/test_path_config.py
+++ b/test/test_configuration/test_path_config.py
@@ -4,9 +4,9 @@ import os
 import mock
 import pytest
 
-from src.configuration import prepare_host, set_experiment_name, set_bootstrap_path, check_path_and_create, \
+from mlair.configuration import prepare_host, set_experiment_name, set_bootstrap_path, check_path_and_create, \
     set_experiment_path, ROOT_PATH
-from src.helpers import PyTestRegex
+from mlair.helpers import PyTestRegex
 
 
 class TestPrepareHost:
diff --git a/test/test_data_handling/test_bootstraps.py b/test/test_data_handling/test_bootstraps.py
index 3d32a090..36d55ccc 100644
--- a/test/test_data_handling/test_bootstraps.py
+++ b/test/test_data_handling/test_bootstraps.py
@@ -7,8 +7,8 @@ import numpy as np
 import pytest
 import xarray as xr
 
-from src.data_handling.bootstraps import BootStraps, CreateShuffledData, BootStrapGenerator
-from src.data_handling.data_generator import DataGenerator
+from mlair.data_handling.bootstraps import BootStraps, CreateShuffledData, BootStrapGenerator
+from mlair.data_handling.data_generator import DataGenerator
 
 
 @pytest.fixture
diff --git a/test/test_data_handling/test_data_distributor.py b/test/test_data_handling/test_data_distributor.py
index 9e2242fe..a1fe2f66 100644
--- a/test/test_data_handling/test_data_distributor.py
+++ b/test/test_data_handling/test_data_distributor.py
@@ -5,8 +5,8 @@ import keras
 import numpy as np
 import pytest
 
-from src.data_handling.data_distributor import Distributor
-from src.data_handling.data_generator import DataGenerator
+from mlair.data_handling.data_distributor import Distributor
+from mlair.data_handling.data_generator import DataGenerator
 from test.test_modules.test_training import my_test_model
 
 
diff --git a/test/test_data_handling/test_data_generator.py b/test/test_data_handling/test_data_generator.py
index 754728ba..579b34f6 100644
--- a/test/test_data_handling/test_data_generator.py
+++ b/test/test_data_handling/test_data_generator.py
@@ -6,9 +6,9 @@ import numpy as np
 import pytest
 import xarray as xr
 
-from src.data_handling.data_generator import DataGenerator
-from src.data_handling.data_preparation import DataPrep
-from src.helpers.join import EmptyQueryResult
+from mlair.data_handling.data_generator import DataGenerator
+from mlair.data_handling.data_preparation import DataPrep
+from mlair.helpers.join import EmptyQueryResult
 
 
 class TestDataGenerator:
diff --git a/test/test_data_handling/test_data_preparation.py b/test/test_data_handling/test_data_preparation.py
index a8ca555c..4106e4a7 100644
--- a/test/test_data_handling/test_data_preparation.py
+++ b/test/test_data_handling/test_data_preparation.py
@@ -8,8 +8,8 @@ import pandas as pd
 import pytest
 import xarray as xr
 
-from src.data_handling.data_preparation import DataPrep
-from src.helpers.join import EmptyQueryResult
+from mlair.data_handling.data_preparation import DataPrep
+from mlair.helpers.join import EmptyQueryResult
 
 
 class TestDataPrep:
diff --git a/test/test_datastore.py b/test/test_datastore.py
index 9aca1eef..662c90bf 100644
--- a/test/test_datastore.py
+++ b/test/test_datastore.py
@@ -3,8 +3,8 @@ __date__ = '2019-11-22'
 
 import pytest
 
-from src.helpers.datastore import AbstractDataStore, DataStoreByVariable, DataStoreByScope, CorrectScope
-from src.helpers.datastore import NameNotFoundInDataStore, NameNotFoundInScope, EmptyScope
+from mlair.helpers.datastore import AbstractDataStore, DataStoreByVariable, DataStoreByScope, CorrectScope
+from mlair.helpers.datastore import NameNotFoundInDataStore, NameNotFoundInScope, EmptyScope
 
 
 class TestAbstractDataStore:
diff --git a/test/test_helpers/test_helpers.py b/test/test_helpers/test_helpers.py
index 28a8bf6e..d2067fcc 100644
--- a/test/test_helpers/test_helpers.py
+++ b/test/test_helpers/test_helpers.py
@@ -9,9 +9,9 @@ import time
 import mock
 import pytest
 
-from src.helpers import to_list, dict_to_xarray, float_round, remove_items
-from src.helpers import PyTestRegex
-from src.helpers import Logger, TimeTracking
+from mlair.helpers import to_list, dict_to_xarray, float_round, remove_items
+from mlair.helpers import PyTestRegex
+from mlair.helpers import Logger, TimeTracking
 
 
 class TestToList:
diff --git a/test/test_join.py b/test/test_join.py
index 5adc013c..79172333 100644
--- a/test/test_join.py
+++ b/test/test_join.py
@@ -2,9 +2,9 @@ from typing import Iterable
 
 import pytest
 
-from src.helpers.join import *
-from src.helpers.join import _save_to_pandas, _correct_stat_name, _lower_list
-from src.configuration.join_settings import join_settings
+from mlair.helpers.join import *
+from mlair.helpers.join import _save_to_pandas, _correct_stat_name, _lower_list
+from mlair.configuration.join_settings import join_settings
 
 
 class TestJoinUrlBase:
diff --git a/test/test_model_modules/test_advanced_paddings.py b/test/test_model_modules/test_advanced_paddings.py
index 8c7cae91..8ca81c42 100644
--- a/test/test_model_modules/test_advanced_paddings.py
+++ b/test/test_model_modules/test_advanced_paddings.py
@@ -1,7 +1,7 @@
 import keras
 import pytest
 
-from src.model_modules.advanced_paddings import *
+from mlair.model_modules.advanced_paddings import *
 
 
 class TestPadUtils:
diff --git a/test/test_model_modules/test_flatten_tail.py b/test/test_model_modules/test_flatten_tail.py
index 0de138ec..623d51c0 100644
--- a/test/test_model_modules/test_flatten_tail.py
+++ b/test/test_model_modules/test_flatten_tail.py
@@ -1,6 +1,6 @@
 import keras
 import pytest
-from src.model_modules.flatten import flatten_tail, get_activation
+from mlair.model_modules.flatten import flatten_tail, get_activation
 
 
 class TestGetActivation:
diff --git a/test/test_model_modules/test_inception_model.py b/test/test_model_modules/test_inception_model.py
index ca0126a4..2dfc2c9c 100644
--- a/test/test_model_modules/test_inception_model.py
+++ b/test/test_model_modules/test_inception_model.py
@@ -1,9 +1,9 @@
 import keras
 import pytest
 
-from src.helpers import PyTestRegex
-from src.model_modules.advanced_paddings import ReflectionPadding2D, SymmetricPadding2D
-from src.model_modules.inception_model import InceptionModelBase
+from mlair.helpers import PyTestRegex
+from mlair.model_modules.advanced_paddings import ReflectionPadding2D, SymmetricPadding2D
+from mlair.model_modules.inception_model import InceptionModelBase
 
 
 class TestInceptionModelBase:
diff --git a/test/test_model_modules/test_keras_extensions.py b/test/test_model_modules/test_keras_extensions.py
index 56c60ec4..78559ee0 100644
--- a/test/test_model_modules/test_keras_extensions.py
+++ b/test/test_model_modules/test_keras_extensions.py
@@ -4,8 +4,8 @@ import keras
 import mock
 import pytest
 
-from src.model_modules.loss import l_p_loss
-from src.model_modules.keras_extensions import *
+from mlair.model_modules.loss import l_p_loss
+from mlair.model_modules.keras_extensions import *
 
 
 class TestHistoryAdvanced:
diff --git a/test/test_model_modules/test_loss.py b/test/test_model_modules/test_loss.py
index c47f3f18..e54e0b00 100644
--- a/test/test_model_modules/test_loss.py
+++ b/test/test_model_modules/test_loss.py
@@ -1,7 +1,7 @@
 import keras
 import numpy as np
 
-from src.model_modules.loss import l_p_loss
+from mlair.model_modules.loss import l_p_loss
 
 
 class TestLoss:
diff --git a/test/test_model_modules/test_model_class.py b/test/test_model_modules/test_model_class.py
index 0ee2eb7e..6025516b 100644
--- a/test/test_model_modules/test_model_class.py
+++ b/test/test_model_modules/test_model_class.py
@@ -1,8 +1,8 @@
 import keras
 import pytest
 
-from src.model_modules.model_class import AbstractModelClass
-from src.model_modules.model_class import MyPaperModel
+from mlair.model_modules.model_class import AbstractModelClass
+from mlair.model_modules.model_class import MyPaperModel
 
 
 class Paddings:
diff --git a/test/test_modules/test_experiment_setup.py b/test/test_modules/test_experiment_setup.py
index 5b7d517e..b63409b8 100644
--- a/test/test_modules/test_experiment_setup.py
+++ b/test/test_modules/test_experiment_setup.py
@@ -4,9 +4,9 @@ import os
 
 import pytest
 
-from src.helpers import TimeTracking
-from src.configuration.path_config import prepare_host
-from src.run_modules.experiment_setup import ExperimentSetup
+from mlair.helpers import TimeTracking
+from mlair.configuration.path_config import prepare_host
+from mlair.run_modules.experiment_setup import ExperimentSetup
 
 
 class TestExperimentSetup:
diff --git a/test/test_modules/test_model_setup.py b/test/test_modules/test_model_setup.py
index 60d140f8..b61e52d2 100644
--- a/test/test_modules/test_model_setup.py
+++ b/test/test_modules/test_model_setup.py
@@ -2,12 +2,12 @@ import os
 
 import pytest
 
-from src.data_handling.data_generator import DataGenerator
-from src.helpers.datastore import EmptyScope
-from src.model_modules.keras_extensions import CallbackHandler
-from src.model_modules.model_class import AbstractModelClass, MyLittleModel
-from src.run_modules.model_setup import ModelSetup
-from src.run_modules.run_environment import RunEnvironment
+from mlair.data_handling.data_generator import DataGenerator
+from mlair.helpers.datastore import EmptyScope
+from mlair.model_modules.keras_extensions import CallbackHandler
+from mlair.model_modules.model_class import AbstractModelClass, MyLittleModel
+from mlair.run_modules.model_setup import ModelSetup
+from mlair.run_modules.run_environment import RunEnvironment
 
 
 class TestModelSetup:
diff --git a/test/test_modules/test_partition_check.py b/test/test_modules/test_partition_check.py
index b04e01d1..1e576a8c 100644
--- a/test/test_modules/test_partition_check.py
+++ b/test/test_modules/test_partition_check.py
@@ -2,10 +2,10 @@ import logging
 
 import pytest
 import mock
-from src.run_modules.experiment_setup import ExperimentSetup
-from src.run_modules.partition_check import PartitionCheck
-from src.run_modules.run_environment import RunEnvironment
-from src.configuration import get_host
+from mlair.run_modules.experiment_setup import ExperimentSetup
+from mlair.run_modules.partition_check import PartitionCheck
+from mlair.run_modules.run_environment import RunEnvironment
+from mlair.configuration import get_host
 
 
 class TestPartitionCheck:
diff --git a/test/test_modules/test_pre_processing.py b/test/test_modules/test_pre_processing.py
index 29811fb0..93f322f1 100644
--- a/test/test_modules/test_pre_processing.py
+++ b/test/test_modules/test_pre_processing.py
@@ -2,12 +2,12 @@ import logging
 
 import pytest
 
-from src.data_handling.data_generator import DataGenerator
-from src.helpers.datastore import NameNotFoundInScope
-from src.helpers import PyTestRegex
-from src.run_modules.experiment_setup import ExperimentSetup
-from src.run_modules.pre_processing import PreProcessing, DEFAULT_ARGS_LIST, DEFAULT_KWARGS_LIST
-from src.run_modules.run_environment import RunEnvironment
+from mlair.data_handling.data_generator import DataGenerator
+from mlair.helpers.datastore import NameNotFoundInScope
+from mlair.helpers import PyTestRegex
+from mlair.run_modules.experiment_setup import ExperimentSetup
+from mlair.run_modules.pre_processing import PreProcessing, DEFAULT_ARGS_LIST, DEFAULT_KWARGS_LIST
+from mlair.run_modules.run_environment import RunEnvironment
 
 
 class TestPreProcessing:
diff --git a/test/test_modules/test_run_environment.py b/test/test_modules/test_run_environment.py
index 59bb8535..aa385e32 100644
--- a/test/test_modules/test_run_environment.py
+++ b/test/test_modules/test_run_environment.py
@@ -1,7 +1,7 @@
 import logging
 
-from src.helpers import TimeTracking, PyTestRegex
-from src.run_modules.run_environment import RunEnvironment
+from mlair.helpers import TimeTracking, PyTestRegex
+from mlair.run_modules.run_environment import RunEnvironment
 
 
 class TestRunEnvironment:
diff --git a/test/test_modules/test_training.py b/test/test_modules/test_training.py
index eb5dfe5a..292bf7e7 100644
--- a/test/test_modules/test_training.py
+++ b/test/test_modules/test_training.py
@@ -9,14 +9,14 @@ import mock
 import pytest
 from keras.callbacks import History
 
-from src.data_handling.data_distributor import Distributor
-from src.data_handling.data_generator import DataGenerator
-from src.helpers import PyTestRegex
-from src.model_modules.flatten import flatten_tail
-from src.model_modules.inception_model import InceptionModelBase
-from src.model_modules.keras_extensions import LearningRateDecay, HistoryAdvanced, CallbackHandler
-from src.run_modules.run_environment import RunEnvironment
-from src.run_modules.training import Training
+from mlair.data_handling.data_distributor import Distributor
+from mlair.data_handling.data_generator import DataGenerator
+from mlair.helpers import PyTestRegex
+from mlair.model_modules.flatten import flatten_tail
+from mlair.model_modules.inception_model import InceptionModelBase
+from mlair.model_modules.keras_extensions import LearningRateDecay, HistoryAdvanced, CallbackHandler
+from mlair.run_modules.run_environment import RunEnvironment
+from mlair.run_modules.training import Training
 
 
 def my_test_model(activation, window_history_size, channels, dropout_rate, add_minor_branch=False):
diff --git a/test/test_plotting/test_tracker_plot.py b/test/test_plotting/test_tracker_plot.py
index 9a92360a..19687965 100644
--- a/test/test_plotting/test_tracker_plot.py
+++ b/test/test_plotting/test_tracker_plot.py
@@ -7,8 +7,8 @@ import shutil
 from matplotlib import pyplot as plt
 import numpy as np
 
-from src.plotting.tracker_plot import TrackObject, TrackChain, TrackPlot
-from src.helpers import PyTestAllEqual
+from mlair.plotting.tracker_plot import TrackObject, TrackChain, TrackPlot
+from mlair.helpers import PyTestAllEqual
 
 
 class TestTrackObject:
diff --git a/test/test_plotting/test_training_monitoring.py b/test/test_plotting/test_training_monitoring.py
index 6e5e0abb..18009bc1 100644
--- a/test/test_plotting/test_training_monitoring.py
+++ b/test/test_plotting/test_training_monitoring.py
@@ -3,8 +3,8 @@ import os
 import keras
 import pytest
 
-from src.model_modules.keras_extensions import LearningRateDecay
-from src.plotting.training_monitoring import PlotModelLearningRate, PlotModelHistory
+from mlair.model_modules.keras_extensions import LearningRateDecay
+from mlair.plotting.training_monitoring import PlotModelLearningRate, PlotModelHistory
 
 
 @pytest.fixture
diff --git a/test/test_statistics.py b/test/test_statistics.py
index 3da7a478..d4a72674 100644
--- a/test/test_statistics.py
+++ b/test/test_statistics.py
@@ -3,7 +3,7 @@ import pandas as pd
 import pytest
 import xarray as xr
 
-from src.helpers.statistics import standardise, standardise_inverse, standardise_apply, centre, centre_inverse, centre_apply, \
+from mlair.helpers.statistics import standardise, standardise_inverse, standardise_apply, centre, centre_inverse, centre_apply, \
     apply_inverse_transformation
 
 lazy = pytest.lazy_fixture
-- 
GitLab