class_docstr: One-Class Bottleneck Embedding module.
  
  Args:
      block (Bottleneck): Expansion value is extracted from this block.
      layers (int): Numbers of OCE layers to create after multiscale feature fusion.
      groups (int, optional): Number of blocked connections from input channels to output channels.
          Defaults to 1.
      width_per_group (int, optional): Number of layers in each intermediate convolution layer. Defaults to 64.
      norm_layer (Callable[..., nn.Module] | None, optional): Batch norm layer to use. Defaults to None.
class_docstr_tok: ["One-Class","Bottleneck","Embedding","module",".","Args",":","block","(","Bottleneck",")",":","Expansion","value","is","extracted","from","this","block",".","layers","(","int",")",":","Numbers","of","OCE","layers","to","create","after","multiscale","feature","fusion",".","groups","(","int",",","optional",")",":","Number","of","blocked","connections","from","input","channels","to","output","channels",".","Defaults","to","1.","width_per_group","(","int",",","optional",")",":","Number","of","layers","in","each","intermediate","convolution","layer",".","Defaults","to","64.","norm_layer","(","Callable","[","...",",","nn.Module","]","|","None",",","optional",")",":","Batch","norm","layer","to","use",".","Defaults","to","None","."]
code: def _make_layer(
      self,
      block: type[Bottleneck | BasicBlock],
      planes: int,
      blocks: int,
      stride: int = 1,
      dilate: bool = False,
  ) -> nn.Sequential:
      norm_layer = self._norm_layer
      downsample = None
      previous_dilation = self.dilation
      if dilate:
          self.dilation *= stride
          stride = 1
      if stride != 1 or self.inplanes != planes * block.expansion:
          downsample = nn.Sequential(
              conv1x1(
                  self.inplanes * 3, planes * block.expansion, stride
              ),
              norm_layer(planes * block.expansion),
          )
  
      layers = []
      layers.append(
          block(
              self.inplanes * 3,
              planes,
              stride,
              downsample,
              self.groups,
              self.base_width,
              previous_dilation,
              norm_layer,
          )
      )
      self.inplanes = planes * block.expansion
      for _ in range(1, blocks):
          layers.append(
              block(
                  self.inplanes,
                  planes,
                  groups=self.groups,
                  base_width=self.base_width,
                  dilation=self.dilation,
                  norm_layer=norm_layer,
              )
          )
  
      return nn.Sequential(*layers)
  
file_path: anomalib/src/anomalib/models/reverse_distillation/components/bottleneck.py
imports: from __future__ import annotations
  from typing import Callable
  import torch
  from torch import Tensor, nn
  from torchvision.models.resnet import BasicBlock, Bottleneck
label_desc: Use image node_id 2 for calling the OCBE obj's underlying member method code with example usage: obj._make_layer(block, planes, blocks, stride, dilate) and returns: nn