class_docstr: Manages the partitioning related controls.
  
  Handles data generation and informs the model about changes in partition.
class_docstr_tok: ["Manages","the","partitioning","related","controls",".","Handles","data","generation","and","informs","the","model","about","changes","in","partition","."]
docstr: Activities to be performed at the end of training.
  
  The manager persists the data (splits the entity partitions into individual embeddings).
code: def on_complete(self):
      """Activities to be performed at the end of training.
  
      The manager persists the data (splits the entity partitions into individual embeddings).
      """
      update_part_size = int(
          np.ceil(self.num_ents / self.partitioner_k)
      )
      for part_num in range(self.partitioner_k):
          with shelve.open(
              self.ent_map_fname, writeback=True
          ) as ent_partition:
              for i in range(
                  update_part_size * part_num,
                  min(update_part_size * (part_num + 1), self.num_ents),
              ):
                  ent_partition[str(i)] = ent_partition[str(i)][1][0]
  
      # create relation embeddings and optimizer hyperparams for all relations
      # relations are not partitioned
      with shelve.open(
          self.rel_map_fname, writeback=True
      ) as rel_partition:
          for i in range(self.num_rels):
              rel_partition[str(i)] = rel_partition[str(i)][1][0]
  
imports: import abc
  import glob
  import logging
  import os
  import shelve
  import shutil
  import tempfile
  from datetime import datetime
  import numpy
  import tensorflow
  from .graph_partitioner import PARTITION_ALGO_REGISTRY, AbstractGraphPartitioner
label_desc: Use image node_id 5 for calling the GeneralPartitionDataManager obj's underlying member method code with example usage: obj.on_complete() without return types