docstr: x is expected to have shape (B, C, H, W)
code: def forward(self, x):
      """
      x is expected to have shape (B, C, H, W)
      """
      _assert(
          x.shape[-2] % 2 == 0,
          "BlockAggregation requires even input spatial dims",
      )
      _assert(
          x.shape[-1] % 2 == 0,
          "BlockAggregation requires even input spatial dims",
      )
      x = self.conv(x)
      # Layer norm done over channel dim only
      x = self.norm(x.permute(0, 2, 3, 1)).permute(0, 3, 1, 2)
      x = self.pool(x)
      return x
  
imports: import collections.abc
  import logging
  import math
  from functools import partial
  import torch
  import torch.nn.functional
  from torch import nn
  from timm.data import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD
  from timm.layers import PatchEmbed, Mlp, DropPath, create_classifier, trunc_normal_, _assert
  from timm.layers import create_conv2d, create_pool2d, to_ntuple, use_fused_attn, LayerNorm
  from ._builder import build_model_with_cfg
  from ._features_fx import register_notrace_function
  from ._manipulate import checkpoint_seq, named_apply
  from ._registry import register_model, generate_default_cfgs, register_model_deprecations
label_desc: Use image node_id 2 for calling the ConvPool obj's underlying member method code with example usage: obj.forward(x) and returns: x