def __post_init__(self):
        """Python dataclass method that is used to modify attributes after initialization. See
        https://docs.python.org/3/library/dataclasses.html#post-init-processing for more details.
        """
        if torch.distributed.is_initialized():
            gb_rank = torch.distributed.get_rank()
            # vp_rank = get_virtual_pipeline_model_parallel_rank()
            vp_rank = 0
            if gb_rank == 0 and (vp_rank == 0 or vp_rank is None):
                assert (
                    self.is_built_on_rank()
                ), "is_built_on_rank must return True when global rank = 0 and vp rank = 0"

        if self.blend_per_split is not None and any(self.blend_per_split):
            assert self.blend is None, "blend and blend_per_split are incompatible"
            assert len(self.blend_per_split) == len(
                Split
            ), f"blend_per_split must contain {len(Split)} blends"
            if self.split is not None:
                self.split = None
                log_single_rank(logger, logging.WARNING, f"Let split = {self.split}")
        else:
            assert self.blend is not None, "one of either blend or blend_per_split must be provided"
            assert self.split is not None, "both blend and split must be provided"
            self.split_vector = _parse_and_normalize_split(self.split)
            self.split_matrix = convert_split_vector_to_split_matrix(self.split_vector)
            log_single_rank(logger, logging.INFO, f"Let split_vector = {self.split_vector}")
Python dataclass method that is used to modify attributes after initialization. See
        https://docs.python.org/3/library/dataclasses.html#post-init-processing for more details.
        
finetune/core/datasets/blended_megatron_dataset_config.py