@dataclass
class SplitDataset:
train: SplitPayload
test: SplitPayload
validation: Optional[SplitPayload] = None
def copy(self) -> "SplitDataset":
def copy_data(data):
if isinstance(data, tuple):
# Handle target copy safely (Series/Array/List)
y = data[1]
y_copy = (
y.copy() if hasattr(y, "copy") else (y.clone() if hasattr(y, "clone") else y)
)
X = data[0]
X_copy = (
X.copy() if hasattr(X, "copy") else (X.clone() if hasattr(X, "clone") else X)
)
return (X_copy, y_copy)
if hasattr(data, "copy"):
return data.copy()
if hasattr(data, "clone"):
return data.clone()
return data
return SplitDataset(
train=copy_data(self.train),
test=copy_data(self.test),
validation=(copy_data(self.validation) if self.validation is not None else None),
)