code: def _matmul(self, rhs):
      # This _matmul is defined computes the kernel in chunks
      # It is only used when we are using kernel checkpointing
      # It won't be called if checkpointing is off
      x1 = self.x1
      x2 = self.x2
  
      split_size = beta_features.checkpoint_kernel.value()
      if not split_size:
          raise RuntimeError(
              "Should not have ended up in LazyEvaluatedKernelTensor._matmul without kernel checkpointing. "
              "This is probably a bug in GPyTorch."
          )
  
      with torch.no_grad(), settings.lazily_evaluate_kernels(False):
          sub_x1s = torch.split(x1, split_size, dim=-2)
          res = []
          for sub_x1 in sub_x1s:
              sub_kernel_matrix = to_linear_operator(
                  self.kernel(
                      sub_x1,
                      x2,
                      diag=False,
                      last_dim_is_batch=self.last_dim_is_batch,
                      **self.params,
                  )
              )
              res.append(sub_kernel_matrix._matmul(rhs))
  
          res = torch.cat(res, dim=-2)
          return res
  
imports: import functools
  from typing import Callable
  import torch
  from linear_operator import LinearOperator, to_linear_operator
  from linear_operator.utils.getitem import _noop_index
  from ..None import beta_features, settings
  from ..utils import deprecation
  from ..utils.memoize import cached
label_desc: Use image node_id 10 for calling the LazyEvaluatedKernelTensor obj's underlying member method code with example usage: obj._matmul(rhs) and returns: res