def test_generate_classification_crossval_report_glaucoma(
        test_output_dirs: OutputFolderForTests) -> None:
    """
    Test creation of the cross validation report if there are no metrics available for the test set.
    """
    config = GlaucomaPublic(number_of_cross_validation_splits=2)
    config.inference_on_test_set = False
    generate_crossval_notebook(
        config,
        metrics_file="Glaucoma_MetricsAcrossAllRuns.csv",
        temp_folder=test_output_dirs.root_dir)
def test_inference_required_single_runs() -> None:
    """
    Test the flags for running full inference on the test set, for models in single training runs.
    """
    model = GlaucomaPublic()
    assert not model.perform_cross_validation
    # Normal training run without cross validation: it should not matter if the model is a classification model or not
    assert model.is_inference_required(model_proc=ModelProcessing.DEFAULT,
                                       data_split=ModelExecutionMode.TEST)
    # If a flag is set explicitly, use that.
    model.inference_on_test_set = False
    assert not model.is_inference_required(model_proc=ModelProcessing.DEFAULT,
                                           data_split=ModelExecutionMode.TEST)
def test_inference_required_crossval_runs() -> None:
    """
    Test the flags for running full inference on the test set, for models that are trained in crossval mode.
    """
    classification_model = GlaucomaPublic()
    classification_model.number_of_cross_validation_splits = 2
    segmentation_model = SegmentationModelBase(should_validate=False)
    segmentation_model.number_of_cross_validation_splits = 2
    assert classification_model.perform_cross_validation
    assert segmentation_model.perform_cross_validation
    # Cross validation child runs for classification models need test set inference to ensure that the report works
    # correctly.
    assert classification_model.is_inference_required(
        model_proc=ModelProcessing.DEFAULT, data_split=ModelExecutionMode.TEST)
    # For models other than classification models, there is by default no inference on the test set.
    assert not segmentation_model.is_inference_required(
        model_proc=ModelProcessing.DEFAULT, data_split=ModelExecutionMode.TEST)
    classification_model.inference_on_test_set = False
    # If a flag is set explicitly, use that.
    assert not classification_model.is_inference_required(
        model_proc=ModelProcessing.DEFAULT, data_split=ModelExecutionMode.TEST)
def test_model_summary_on_classification1() -> None:
    model = create_model_with_temperature_scaling(GlaucomaPublic())
    ModelSummary(model).generate_summary(input_sizes=[(1, 6, 64, 60)])
def test_is_classification_model() -> None:
    assert is_classification_model(GlaucomaPublic())
    assert is_classification_model(ClassificationModelForTesting())
    assert not is_classification_model(BasicModel2Epochs())