def METHOD_NAME(scheme: Scheme):
    dataset_group = scheme.model.get_dataset_groups()["default"]
    dataset_group.set_parameters(scheme.parameters)
    data_provider = DataProviderLinked(scheme, dataset_group)
    matrix_provider = MatrixProviderLinked(dataset_group, data_provider)
    estimation_provider = EstimationProviderLinked(dataset_group, data_provider, matrix_provider)
    matrix_provider.calculate()
    estimation_provider.estimate()
    full_penalty = estimation_provider.get_full_penalty()
    clp, residual = estimation_provider.get_result()
    dataset1_global_size = scheme.data["dataset1"].coords["global"].size
    dataset1_model_size = scheme.data["dataset1"].coords["model"].size
    dataset2_global_size = scheme.data["dataset2"].coords["global"].size
    dataset2_model_size = scheme.data["dataset2"].coords["model"].size
    assert (
        full_penalty.size
        == dataset1_global_size * dataset1_model_size + dataset2_global_size * dataset2_model_size
    )
    assert "dataset1" in clp
    assert clp["dataset1"].shape == (dataset1_global_size, 2)
    assert "dataset1" in residual
    assert residual["dataset1"].shape == scheme.data["dataset1"].data.shape
    assert "dataset2" in clp
    assert clp["dataset2"].shape == (dataset2_global_size, 2)
    assert "dataset2" in residual
    assert residual["dataset2"].shape == scheme.data["dataset2"].data.T.shape