class_docstr: Serializable data structure for holding data for blocks --
  embeddings and necessary metadata for Retriever
class_docstr_tok: ["Serializable","data","structure","for","holding","data","for","blocks","--","embeddings","and","necessary","metadata","for","Retriever"]
docstr: Add data for set of blocks
  :param row_id: 1D array of unique int ids for the blocks
  :param block_embeds: 2D array of embeddings of the blocks
      In the case of retriever this will be [start_idx, end_idx, doc_idx]
docstr_tok: ["Add","data","for","set","of","blocks",":","param","row_id",":","1D","array","of","unique","int","ids","for","the","blocks",":","param","block_embeds",":","2D","array","of","embeddings","of","the","blocks","In","the","case","of","retriever","this","will","be","[","start_idx",",","end_idx",",","doc_idx","]"]
code: def add_block_data(self, row_id, block_embeds, allow_overwrite=False):
      """
      Add data for set of blocks
      :param row_id: 1D array of unique int ids for the blocks
      :param block_embeds: 2D array of embeddings of the blocks
          In the case of retriever this will be [start_idx, end_idx, doc_idx]
      """
      for idx, embed in zip(row_id, block_embeds):
          if not allow_overwrite and idx in self.embed_data:
              raise ValueError(
                  "Unexpectedly tried to overwrite block data"
              )
  
          self.embed_data[idx] = np.float16(embed)
  
imports: import itertools
  import os
  import pickle
  import shutil
  import numpy
  import torch
  from megatron import get_args
  from megatron.core import mpu
label_desc: Use image node_id 5 for calling the OpenRetreivalDataStore obj's underlying member method code with example usage: obj.add_block_data(row_id, block_embeds, allow_overwrite) without return types