def test_shape_validation2():
    m = utils.load_model('PhenoGrass')()
    uneven_data = predictor_vars.copy()
    # Drop a single timestep of evapotranspiration data
    uneven_data['evap'] = uneven_data['evap'][:-1]
    with pytest.raises(ValueError):
        m.fit(GCC, uneven_data, optimizer_params=quick_testing_params)
def test_shape_validation1():
    m = utils.load_model('PhenoGrass')()
    uneven_data = predictor_vars.copy()
    # Drop a single site of mean avg precip data
    uneven_data['MAP'] = uneven_data['MAP'][:-1]
    with pytest.raises(ValueError):
        m.fit(GCC, uneven_data, optimizer_params=quick_testing_params)
def test_shape_validation3():
    m = utils.load_model('PhenoGrass')()
    # Drop a single site of gcc data
    with pytest.raises(ValueError):
        m.fit(GCC[:, :-1],
              predictor_vars,
              optimizer_params=quick_testing_params)
def test_predictor_validation1():
    # Raise error when not all predictors are passed
    m = utils.load_model('PhenoGrass')()
    data_with_missing_var = predictor_vars.copy()
    _ = data_with_missing_var.pop('precip')
    with pytest.raises(ValueError):
        m.fit(GCC,
              data_with_missing_var,
              optimizer_params=quick_testing_params)
def test_predictor_validation2():
    # Raise error when unknown predictors are pass
    # CholerPR does not need everything
    m = utils.load_model('CholerPR1')()
    with pytest.raises(ValueError):
        m.fit(GCC, predictor_vars, optimizer_params=quick_testing_params)
]

GCC, predictor_vars = utils.load_test_data()

quick_testing_params = {
    'maxiter': 3,
    'popsize': 2,
    'mutation': (0.5, 1),
    'recombination': 0.25,
    'disp': False
}

# Setup a list of test cases where each one = (model_name, fitted_model object)
fitted_models = []
for name in core_model_names:
    m = utils.load_model(name)()
    models.validation.validate_model(m)
    this_model_data = {
        k: predictor_vars[k]
        for k in m._required_predictors.keys()
    }
    m.fit(GCC, this_model_data, optimizer_params=quick_testing_params)
    fitted_models.append(m)

model_test_cases = list(zip(core_model_names, fitted_models))

#######################################################################


@pytest.mark.parametrize('model_name, fitted_model', model_test_cases)
def test_state_variables_match1(model_name, fitted_model):