class_docstr: The layer that updates certain objects in data:
  
  - :math:`data[indices[i]] = updates[i]`
  
  where `indices[...]` is an integer vector of `IndexDims` elements
  containing coordinates in the first `IndexDims` dimensions of the `data` blob
  
  :param input_layers: The input layers to be connected. 
      The integer in each tuple specifies the number of the output.
      If not set, the first output will be used.
  :type input_layers: list of object, tuple(object, int)
  :param name: The layer name.
  :type name: str, default=None
  
  .. rubric:: Layer inputs:
  
  The layer must have 3 inputs.
  
  1. Data. Set of objects of any type. The product of its first `IndexDims`
  dimensions is `ObjectCount`. The product of the rest of the dimensions
  is `ObjectSize`.
  
  2. Indices. Blob of integer data type. The number of channels of this blob
  is `IndexDims`. The total size must be `UpdateCount * IndexDims`.
  
  3. Updates. Blob of the same data type as the first. The total size of the
  blob is `UpdateCount * ObjectSize`.
  
  .. rubric:: Layer outputs:
  
  A blob of the same data type and size as first input.
class_docstr_tok: ["The","layer","that","updates","certain","objects","in","data",":","-",":","math",":","`","data","[","indices","[","i","]","]","=","updates","[","i","]","`","where","`","indices","[","...","]","`","is","an","integer","vector","of","`","IndexDims","`","elements","containing","coordinates","in","the","first","`","IndexDims","`","dimensions","of","the","`","data","`","blob",":","param","input_layers",":","The","input","layers","to","be","connected",".","The","integer","in","each","tuple","specifies","the","number","of","the","output",".","If","not","set",",","the","first","output","will","be","used",".",":","type","input_layers",":","list","of","object",",","tuple","(","object",",","int",")",":","param","name",":","The","layer","name",".",":","type","name",":","str",",","default=None","..","rubric",":",":","Layer","inputs",":","The","layer","must","have","3","inputs",".","1",".","Data",".","Set","of","objects","of","any","type",".","The","product","of","its","first","`","IndexDims","`","dimensions","is","`","ObjectCount","`",".","The","product","of","the","rest","of","the","dimensions","is","`","ObjectSize","`",".","2",".","Indices",".","Blob","of","integer","data","type",".","The","number","of","channels","of","this","blob","is","`","IndexDims","`",".","The","total","size","must","be","`","UpdateCount","*","IndexDims","`",".","3",".","Updates",".","Blob","of","the","same","data","type","as","the","first",".","The","total","size","of","the","blob","is","`","UpdateCount","*","ObjectSize","`",".","..","rubric",":",":","Layer","outputs",":","A","blob","of","the","same","data","type","and","size","as","first","input","."]
code: def __init__(self, input_layers, name=None):
      if type(input_layers) is PythonWrapper.ScatterND:
          super().__init__(input_layers)
          return
  
      layers, outputs = check_input_layers(input_layers, 3)
  
      internal = PythonWrapper.ScatterND(
          str(name),
          layers[0],
          int(outputs[0]),
          layers[1],
          int(outputs[1]),
          layers[2],
          int(outputs[2]),
      )
      super().__init__(internal)
  
imports: import neoml.PythonWrapper
  from .Dnn import Layer
  from neoml.Utils import check_input_layers
label_desc: Use image node_id 1 to create a new ScatterND object from inherited base classes: Layer with example: obj = ScatterND(input_layers, name)