code: def test_bn_linear(self):
      BS, K = 2, 1
      eps = 0
      X = Tensor([1, 0]).reshape(BS, K, 1, 1)
      Y = Tensor([-1, 0]).reshape(BS, K, 1, 1)
  
      class LinTiny:
          def __init__(self):
              self.l1 = Conv2d(K, K, 1, bias=False)
              self.bn1 = BatchNorm2d(
                  K, affine=False, track_running_stats=False, eps=eps
              )
  
          def __call__(self, x):
              return self.bn1(self.l1(x))
  
      class LinTorch(nn.Module):
          def __init__(self):
              super().__init__()
              self.l1 = nn.Conv2d(K, K, 1, bias=False)
              self.bn1 = nn.BatchNorm2d(
                  K, affine=False, track_running_stats=False, eps=eps
              )
  
          def forward(self, x):
              return self.bn1(self.l1(x))
  
      model_torch = LinTorch()
      with torch.no_grad():
          model_torch.l1.weight[:] = 1.0
      compare_tiny_torch(LinTiny(), model_torch, X, Y)
  
file_path: tinygrad/test/models/test_end2end.py
imports: import torch
  from torch import nn
  import unittest
  import numpy
  from tinygrad.nn.state import get_parameters, get_state_dict
  from tinygrad.nn import optim, Linear, Conv2d, BatchNorm2d
  from tinygrad.tensor import Tensor
  from extra.datasets import fetch_mnist
  from tinygrad.helpers import CI
label_desc: Use image node_id 6 for calling the TestEnd2End obj's underlying member method code with example usage: obj.test_bn_linear() and returns: self, self