# scisbi/base/workflow.pyimportabcfromtypingimportAny,Dict,Optional# Import necessary types# Import base classes for type hintingfrom.inferenceimportBaseInferenceAlgorithmfrom.simulatorimportBaseSimulatorfrom.summary_statisticimportBaseSummaryStatistic
[docs]classBaseWorkflow(abc.ABC):""" Abstract base class for defining and executing a complete SBI workflow. A workflow combines a simulator, prior, inference algorithm, summary statistic, etc. """def__init__(self,simulator:BaseSimulator,prior:Any,inference_algorithm:BaseInferenceAlgorithm,summary_statistic:Optional[BaseSummaryStatistic]=None,**kwargs:Any,):""" Intializes the workflow. Args: simulator (BaseSimulator): The simulator instance. prior (Any): The prior instance. inference_algorithm (BaseInferenceAlgorithm): The inference algorithm instance. summary_statistic (Optional[BaseSummaryStatistic]): The summary statistic instance. **kwargs: Workflow-specific configuration. """# Type checks (can be kept for runtime validation if desired)ifnotisinstance(simulator,BaseSimulator):raiseTypeError("simulator must be an instance of BaseSimulator")ifnotisinstance(prior,Any):raiseTypeError("prior must be an instance of Any")ifnotisinstance(inference_algorithm,BaseInferenceAlgorithm):raiseTypeError("inference_algorithm must be an instance of BaseInferenceAlgorithm")ifsummary_statisticisnotNoneandnotisinstance(summary_statistic,BaseSummaryStatistic):raiseTypeError("summary_statistic must be a BaseSummaryStatistic or None")self.simulator:BaseSimulator=simulatorself.prior:Any=priorself.inference_algorithm:BaseInferenceAlgorithm=inference_algorithmself.summary_statistic:Optional[BaseSummaryStatistic]=summary_statisticself.config:Dict[str,Any]=kwargs
[docs]@abc.abstractmethoddefrun(self,observed_data:Any,num_simulations:int,**kwargs:Any)->Any:""" Executes the complete SBI workflow. Args: observed_data (Any): The observed data. Format depends on the simulator output. Use Any. num_simulations (int): The number of simulations to run for inference. **kwargs: Additional parameters for running the workflow. Returns: Any: The estimated posterior distribution. """pass