class_docstr: The cleanup splitter first randomly splits the triples and then cleans up.
  
  In the cleanup process, triples are moved into the train part until all entities occur at least once in train.
  
  The splitter supports two variants of cleanup, cf. ``cleaner_resolver``.
class_docstr_tok: ["The","cleanup","splitter","first","randomly","splits","the","triples","and","then","cleans","up",".","In","the","cleanup","process",",","triples","are","moved","into","the","train","part","until","all","entities","occur","at","least","once","in","train",".","The","splitter","supports","two","variants","of","cleanup",",","cf",".","``","cleaner_resolver","``","."]
code: def split_absolute_size(
      self,
      mapped_triples: MappedTriples,
      sizes: Sequence[int],
      random_state: torch.Generator,
  ) -> Sequence[MappedTriples]:  # noqa: D102
      triples_groups = _split_triples(
          mapped_triples,
          sizes=sizes,
          random_state=random_state,
      )
      # Make sure that the first element has all the right stuff in it
      logger.debug("cleaning up groups")
      triples_groups = self.cleaner(
          triples_groups, random_state=random_state
      )
      logger.debug("done cleaning up groups")
      return triples_groups
  
imports: import logging
  import typing
  from abc import abstractmethod
  from typing import Collection, Optional, Sequence, Set, Tuple, Type, Union
  import numpy
  import pandas
  import torch
  from class_resolver.api import ClassResolver, HintOrType
  from ..constants import COLUMN_LABELS
  from ..typing import LABEL_HEAD, LABEL_RELATION, LABEL_TAIL, MappedTriples, Target, TorchRandomHint
  from ..utils import ensure_torch_random_state
label_desc: Use image node_id 2 for calling the CleanupSplitter obj's underlying member method code with example usage: obj.split_absolute_size(mapped_triples, sizes, random_state) and returns: triples_groups