Source code for cellmil.cli.eval_external

import logging
import argparse
import sys
import traceback
from pathlib import Path
from cellmil.evaluation import ExternalValidator
from cellmil.interfaces.EvaluationExternalValidatorConfig import (
    EvaluationExternalValidatorConfig,
    FinalModel,
    AggregationMethod,
)

# Setup logging with enhanced format
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    handlers=[logging.StreamHandler()],
)
logger = logging.getLogger(__name__)

[docs]def eval_external(args: argparse.Namespace) -> None: """Perform external validation using a pre-trained model.""" try: config = EvaluationExternalValidatorConfig( metrics=args.metrics, output_dir=args.output_dir, models_dir=args.models_dir, final_model=args.final_model, aggregation_method=args.aggregation_method, dataset_dir=args.dataset_dir, root_dir=args.root_dir, dp_metadata_file=args.dp_metadata_file, ) validator = ExternalValidator(config) validator.validate() logger.info(f"External validation completed successfully using models at {args.models_dir}.") except Exception as e: # Get traceback information tb = traceback.format_exc() logger.error(f"Error during external validation: {e}\n{tb}") sys.exit(1)
[docs]def setup_parser() -> argparse.ArgumentParser: """Set up command line argument parser""" parser = argparse.ArgumentParser( description="Perform external validation using a pre-trained model" ) parser.add_argument( "--metrics", nargs='+', required=True, help="Metrics to generate evaluation reports for", ) parser.add_argument( "--output-dir", type=Path, required=True, default=Path("./external_validation_reports"), help="Directory to save evaluation reports", ) parser.add_argument( "--models-dir", type=Path, required=True, help="Directory containing pre-trained models for external validation", ) parser.add_argument( "--final-model", type=str, choices=FinalModel.values(), default=FinalModel.final, help="Whether to use the final model or an ensemble for validation", ) parser.add_argument( "--aggregation-method", type=str, choices=AggregationMethod.values(), default=AggregationMethod.mean, help="Method to aggregate predictions from multiple models in ensemble", ) parser.add_argument( "--dataset-dir", type=Path, required=True, help="Directory containing datasets for external validation", ) parser.add_argument( "--root-dir", type=Path, required=True, help="Root directory for caching datasets", ) parser.add_argument( "--dp-metadata-file", type=Path, required=True, help="Path to the metadata Excel file for datasets", ) return parser
[docs]def main(): parser = setup_parser() args = parser.parse_args() eval_external(args)
if __name__ == "__main__": main()