code: def __init__(
      self,
      in_planes,
      planes,
      stride=1,
      stride_in_1x1=False,
      groups=1,
      base_width=64,
  ):
      width = int(planes * (base_width / 64.0)) * groups
      # NOTE: the original implementation places stride at the first convolution (self.conv1), control with stride_in_1x1
      self.conv1 = nn.Conv2d(
          in_planes,
          width,
          kernel_size=1,
          stride=stride if stride_in_1x1 else 1,
          bias=False,
      )
      self.bn1 = nn.BatchNorm2d(width)
      self.conv2 = nn.Conv2d(
          width,
          width,
          kernel_size=3,
          padding=1,
          stride=1 if stride_in_1x1 else stride,
          groups=groups,
          bias=False,
      )
      self.bn2 = nn.BatchNorm2d(width)
      self.conv3 = nn.Conv2d(
          width, self.expansion * planes, kernel_size=1, bias=False
      )
      self.bn3 = nn.BatchNorm2d(self.expansion * planes)
      self.downsample = []
      if stride != 1 or in_planes != self.expansion * planes:
          self.downsample = [
              nn.Conv2d(
                  in_planes,
                  self.expansion * planes,
                  kernel_size=1,
                  stride=stride,
                  bias=False,
              ),
              nn.BatchNorm2d(self.expansion * planes),
          ]
  
file_path: tinygrad/extra/models/resnet.py
imports: import tinygrad.nn
  from tinygrad.tensor import Tensor
  from tinygrad.nn.state import torch_load
  from tinygrad.helpers import fetch, get_child
label_desc: Use image node_id 1 to create a new Bottleneck object  with example: obj = Bottleneck(in_planes, planes, stride, stride_in_1x1, groups, base_width)