in src/fmeval/transforms/transform_pipeline.py [0:0]
def __init__(self, nested_transforms: List[NestedTransform]):
"""TransformPipeline initializer.
:param nested_transforms: A list of Transforms and/or TransformPipelines.
"""
require(
isinstance(nested_transforms, List),
"TransformPipeline initializer accepts a list containing Transforms or TransformPipelines, "
f"but received an object with type {type(nested_transforms)}.",
)
seen_keys = set()
transform_to_duplicate_keys = defaultdict(list)
self.transforms: List[Transform] = []
for nested_transform in nested_transforms:
if isinstance(nested_transform, Transform):
for key in nested_transform.output_keys:
if key in seen_keys:
transform_to_duplicate_keys[nested_transform].append(key)
else:
seen_keys.add(key)
self.transforms.append(nested_transform)
elif isinstance(nested_transform, TransformPipeline):
self.transforms += nested_transform.transforms
else:
raise EvalAlgorithmClientError(
f"nested_transform has type {type(nested_transform)}, "
"but either Transform or TransformPipeline is expected."
)
require(
len(transform_to_duplicate_keys.keys()) == 0,
"TransformPipeline contains Transforms with the same output keys as other Transforms. "
"Here are the problematic Transforms, paired with their offending keys: "
f"{str(dict(transform_to_duplicate_keys))}",
)