class_docstr: The layer that takes the average over one of the dimensions.
  This dimension is either compressed to a point when original_size=False,
  or stays the same length with all elements equal to the average 
  when original_size=True.
  
  :param input_layers: The input layer and the number of its output. If no number
      is specified, the first output will be connected.
  :type input_layers: object, tuple(object, int)
  :param dimension: The dimension along which the average is taken.    
  :type dimension: str, {"batch_length", "batch_width", "list_size", 
      "height", "width", "depth", "channels"}
  :param original_size: Specifies if the blob should stay the same size, with the average 
      value broadcast along the pooling dimension.
  :type original_size: bool, default=False
  :param name: The layer name.
  :type name: str, default=None
  
  .. rubric:: Layer inputs:
  
  (1) a data blob of any size.
  
  .. rubric:: Layer outputs:
  
  (1) the result of pooling.
      The dimensions:
  
      - all stay the same if original_size is True
      - if original_size is False, the pooling dimension is 1 
        and other dimensions stay the same
class_docstr_tok: ["The","layer","that","takes","the","average","over","one","of","the","dimensions",".","This","dimension","is","either","compressed","to","a","point","when","original_size=False",",","or","stays","the","same","length","with","all","elements","equal","to","the","average","when","original_size=True",".",":","param","input_layers",":","The","input","layer","and","the","number","of","its","output",".","If","no","number","is","specified",",","the","first","output","will","be","connected",".",":","type","input_layers",":","object",",","tuple","(","object",",","int",")",":","param","dimension",":","The","dimension","along","which","the","average","is","taken",".",":","type","dimension",":","str",",","{","``","batch_length","''",",","``","batch_width","''",",","``","list_size","''",",","``","height","''",",","``","width","''",",","``","depth","''",",","``","channels","''","}",":","param","original_size",":","Specifies","if","the","blob","should","stay","the","same","size",",","with","the","average","value","broadcast","along","the","pooling","dimension",".",":","type","original_size",":","bool",",","default=False",":","param","name",":","The","layer","name",".",":","type","name",":","str",",","default=None","..","rubric",":",":","Layer","inputs",":","(","1",")","a","data","blob","of","any","size",".","..","rubric",":",":","Layer","outputs",":","(","1",")","the","result","of","pooling",".","The","dimensions",":","-","all","stay","the","same","if","original_size","is","True","-","if","original_size","is","False",",","the","pooling","dimension","is","1","and","other","dimensions","stay","the","same"]
code: def __init__(self, input_layers, dimension, original_size, name=None):
      if type(input_layers) is PythonWrapper.ProjectionPooling:
          super().__init__(input_layers)
          return
  
      layers, outputs = check_input_layers(input_layers, 1)
  
      dimension_index = self.dimensions.index(dimension)
  
      internal = PythonWrapper.ProjectionPooling(
          str(name),
          layers[0],
          outputs[0],
          int(dimension_index),
          bool(original_size),
      )
      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 ProjectionPooling object from inherited base classes: Layer with example: obj = ProjectionPooling(input_layers, dimension, original_size, name)