def METHOD_NAME(self, indices, max_positions=None):
    """
    Filter each sub-dataset independently, then update the round robin to work
    on the filtered sub-datasets.
    """
    def _deep_until_language_pair(dataset):
        if isinstance(dataset, LanguagePairDataset):
            return dataset
        if hasattr(dataset, "tgt_dataset"):
            return _deep_until_language_pair(dataset.tgt_dataset)
        if hasattr(dataset, "dataset"):
            return _deep_until_language_pair(dataset.dataset)
        raise Exception(f"Don't know how to unwrap this dataset: {dataset}")
    if not isinstance(max_positions, dict):
        max_positions = {k: max_positions for k in self.datasets.keys()}
    ignored_some = False
    for key, dataset in self.datasets.items():
        dataset = _deep_until_language_pair(dataset)
        self._ordered_indices[key], ignored = dataset.METHOD_NAME(
            self._ordered_indices[key], max_positions[key]
        )
        if len(ignored) > 0:
            ignored_some = True
            logger.warning(
                f"{len(ignored)} samples from {key} have invalid sizes and will be skipped, "
                f"max_positions={max_positions[key]}, first few sample ids={ignored[:10]}"
            )
    # Since we are modifying in place the _ordered_indices,
    # it's not possible anymore to return valid ignored indices.
    # Hopefully the extra debug information print above should be enough to debug.
    # Ideally we would receive ignore_invalid_inputs so that we could have
    # a proper error message.
    return (np.arange(len(self)), [0] if ignored_some else [])