Files
2026-02-08 04:38:10 +03:30

46 lines
1.2 KiB
Python

from typing import Set
from core.node import Node
from core.contracts import (
RequirementContract,
ImageDataContract,
FeatureTableContract
)
class ImageRequirement(RequirementContract):
data_type: str = "image"
modality: Set[str]
dim: Set[str]
requires_mask: bool = False
def is_satisfied_by(self, provided: ImageDataContract):
# Validate semantic compatibility
if provided.data_type != self.data_type:
raise ValueError("Data type mismatch")
if provided.modality not in self.modality:
raise ValueError("Modality mismatch")
if provided.dim not in self.dim:
raise ValueError("Dimension mismatch")
if self.requires_mask and not provided.has_mask:
raise ValueError("Mask is required but not provided")
class FeatureExtractor(Node):
def __init__(self):
super().__init__(
name="FeatureExtractor",
inputs={
"image": ImageRequirement(
modality={"CT"},
dim={"3D"},
requires_mask=False
)
},
outputs={
"features": FeatureTableContract()
}
)