File indexing completed on 2026-08-12 08:24:57
0001 """
0002 ePIC software stack configurations. Narrows/extends StackLayerConfig, StackJobDefintion,
0003 and StackStageDefinition from the configurations module to be ePIC-specific.
0004
0005 Project: AID2E v0.0.0 - AI assisted Detector Design for EIC
0006 Homepage: https://aid2e.github.io/aid2e-framework
0007 Repository: https://github.com/aid2e/AID2E-framework.git
0008 """
0009
0010 from pydantic import Field, model_validator
0011 from typing import List, Optional
0012
0013 from aid2e.utilities.configurations.experimental_stack_config import (
0014 StackLayerConfig,
0015 StackJobDefinition,
0016 StackStageDefinition,
0017 StackBranchDefinition,
0018 StackWorkflowDefinition,
0019 StackWorkflowsConfiguration,
0020 )
0021
0022
0023 class EpicLayerConfig(StackLayerConfig):
0024 """Configuration of a layer of ePIC stack"""
0025 pass
0026
0027
0028 class EpicJobDefinition(StackJobDefinition):
0029 """
0030 Definition a job to run 1 or more ePIC stack
0031 layers. If no command provided, will set
0032 default based on specified evaluator_type.
0033 """
0034 layers: List[EpicLayerConfig] = Field(default_factory=list, description="Software stack layer configurations")
0035
0036
0037 class EpicStageDefinition(StackStageDefinition):
0038 """
0039 Definition of an ePIC stage in a workflow.
0040 Jobs are restricted to ePIC jobs.
0041 """
0042 jobs: List[EpicJobDefinition] = Field(default_factory = list, description="ePIC stack job definitions")
0043
0044
0045 class EpicBranchDefinition(StackBranchDefinition):
0046 """
0047 Definition of an ePIC branch in a workflow.
0048 Stages are restricted to ePIC stages.
0049 """
0050 stages: List[EpicStageDefinition] = Field(default_factory = list, description="ePIC stack branch definitions")
0051
0052
0053 class EpicWorkflowDefinition(StackWorkflowDefinition):
0054 """
0055 Definition of an ePIC workflow.
0056 """
0057 stack_type: Optional[str] = Field(default="epic", description="Experimental stack type for workflow-level geometry prep")
0058 branches: List[EpicBranchDefinition] = Field(default_factory=list, description="Software stack workflow branches (optional)")
0059
0060 def get_implicit_branch(self) -> StackBranchDefinition:
0061 """
0062 Get or create single implicit branch if branches list is empty.
0063 Overrides StackWorkflowDefinition.get_implicit_branch to return
0064 EpicBranchDefinition.
0065 """
0066 if self.branches:
0067 raise ValueError("Branches already defined; cannot use implicit branch")
0068 return EpicBranchDefinition(name="implicit")
0069
0070
0071 class EpicWorkflowsConfiguration(StackWorkflowsConfiguration):
0072 """
0073 Container for ePIC workflows.
0074 """
0075 workflows: List[EpicWorkflowDefinition] = Field(..., min_items=1, description="List of workflows")