from mlair.configuration.defaults import *


class TestGetDefaults:

    def test_get_defaults(self):
        defaults = get_defaults()
        assert isinstance(defaults, dict)
        assert all(map(lambda k: k in defaults.keys(), ["DEFAULT_STATIONS", "DEFAULT_BATCH_SIZE", "DEFAULT_PLOT_LIST"]))
        assert all(map(lambda x: x.startswith("DEFAULT"), defaults.keys()))


class TestAllDefaults:

    def test_training_parameters(self):
        assert DEFAULT_CREATE_NEW_MODEL is True
        assert DEFAULT_TRAIN_MODEL is True
        assert DEFAULT_FRACTION_OF_TRAINING == 0.8
        assert DEFAULT_EXTREME_VALUES is None
        assert DEFAULT_EXTREMES_ON_RIGHT_TAIL_ONLY is False
        assert DEFAULT_PERMUTE_DATA is False
        assert DEFAULT_BATCH_SIZE == int(256 * 2)
        assert DEFAULT_EPOCHS == 20

    def test_data_handler_parameters(self):
        assert DEFAULT_STATIONS == ['DEBW107', 'DEBY081', 'DEBW013', 'DEBW076', 'DEBW087']
        assert DEFAULT_VAR_ALL_DICT == {'o3': 'dma8eu', 'relhum': 'average_values', 'temp': 'maximum',
                                        'u': 'average_values',
                                        'v': 'average_values', 'no': 'dma8eu', 'no2': 'dma8eu',
                                        'cloudcover': 'average_values',
                                        'pblheight': 'maximum'}
        assert DEFAULT_NETWORK == "AIRBASE"
        assert DEFAULT_STATION_TYPE == "background"
        assert DEFAULT_VARIABLES == DEFAULT_VAR_ALL_DICT.keys()
        assert DEFAULT_START == "1997-01-01"
        assert DEFAULT_END == "2017-12-31"
        assert DEFAULT_WINDOW_HISTORY_SIZE == 13
        assert DEFAULT_OVERWRITE_LOCAL_DATA is False
        assert DEFAULT_TARGET_VAR == "o3"
        assert DEFAULT_TARGET_DIM == "variables"
        assert DEFAULT_WINDOW_LEAD_TIME == 3
        assert DEFAULT_DIMENSIONS == {"new_index": ["datetime", "Stations"]}
        assert DEFAULT_TIME_DIM == "datetime"
        assert DEFAULT_INTERPOLATION_METHOD == "linear"
        assert DEFAULT_INTERPOLATION_LIMIT == 1

    def test_subset_parameters(self):
        assert DEFAULT_TRAIN_START == "1997-01-01"
        assert DEFAULT_TRAIN_END == "2007-12-31"
        assert DEFAULT_TRAIN_MIN_LENGTH == 90
        assert DEFAULT_VAL_START == "2008-01-01"
        assert DEFAULT_VAL_END == "2009-12-31"
        assert DEFAULT_VAL_MIN_LENGTH == 90
        assert DEFAULT_TEST_START == "2010-01-01"
        assert DEFAULT_TEST_END == "2017-12-31"
        assert DEFAULT_TEST_MIN_LENGTH == 90
        assert DEFAULT_TRAIN_VAL_MIN_LENGTH == 180
        assert DEFAULT_USE_ALL_STATIONS_ON_ALL_DATA_SETS is True

    def test_hpc_parameters(self):
        assert DEFAULT_HPC_HOST_LIST == ["jw", "hdfmlc"]
        assert DEFAULT_HPC_LOGIN_LIST == ["ju", "hdfmll"]

    def test_postprocessing_parameters(self):
        assert DEFAULT_EVALUATE_BOOTSTRAPS is True
        assert DEFAULT_CREATE_NEW_BOOTSTRAPS is False
        assert DEFAULT_NUMBER_OF_BOOTSTRAPS == 20
        assert DEFAULT_PLOT_LIST == ["PlotMonthlySummary", "PlotStationMap", "PlotClimatologicalSkillScore",
                                     "PlotTimeSeries", "PlotCompetitiveSkillScore", "PlotBootstrapSkillScore",
                                     "PlotConditionalQuantiles", "PlotAvailability", "PlotAvailabilityHistogram",
                                     "PlotDataHistogram", "PlotPeriodogram", "PlotOversampling",
                                     "PlotOversamplingContingency"]