code: def i_update(self, value, positions):
      if self.stride == 1:
          index = torch.LongTensor(positions)
          value = value.view(-1, 1).expand(-1, index.shape[1]).flatten()
          index = index.flatten()
          data = self.data
      else:
          index = torch.LongTensor(positions)
          data = self.data.view(-1, self.stride)
          value = (
              value.view(-1, self.stride)
              .unsqueeze(1)
              .expand(-1, index.shape[1], self.stride)
              .reshape(-1, self.stride)
          )
          index = index.flatten().unsqueeze(1).expand(-1, self.stride)
      if self.data.dtype != value.dtype:
          logger.warning(
              f"update value dtype {value.dtype} is not equal to data dtype {self.data.dtype}"
          )
          value = value.to(data.dtype)
      data.scatter_add_(0, index, value)
  
imports: import logging
  import typing
  from typing import List, Tuple
  import torch
  from ._value import HistogramValues
  from ..indexer import Shuffler
label_desc: Use image node_id 9 for calling the HistogramPlainValues obj's underlying member method code with example usage: obj.i_update(value, positions) without return types