class_docstr: Class to represent a dataset of rays.
  
  Args:
      cameras: scene cameras: PinholeCamera
      min_depth: sampled rays minimal depth from cameras: float
      max_depth: sampled rays maximal depth from cameras: float
      ndc: convert ray parameters to normalized device coordinates: bool
      device: device for ray tensors: Union[str, torch.device]
      dtype: type of ray tensors: torch.dtype
code: def _check_dimensions(self, imgs: ImageTensors) -> None:
      if len(imgs) != self._cameras.batch_size:
          raise ValueError(
              f"Number of images {len(imgs)} does not match number of cameras {self._cameras.batch_size}"
          )
      if not all(img.shape[0] == 3 for img in imgs):
          raise ValueError("Not all input images have 3 channels")
      for i, (img, height, width) in enumerate(
          zip(imgs, self._cameras.height, self._cameras.width)
      ):
          if img.shape[1:] != (height, width):
              raise ValueError(
                  f"Image index {i} dimensions {(img.shape[1], img.shape[2])} are inconsistent with equivalent "
                  f"camera dimensions {(height.item(), width.item())}"
              )
  
imports: from typing import TYPE_CHECKING, List, Optional, Sequence, Tuple, Union
  import torch
  from torch.utils.data import BatchSampler, DataLoader, Dataset, RandomSampler, SequentialSampler
  from typing_extensions import TypeGuard
  from kornia.core import Device, Tensor, stack
  from kornia.geometry.camera import PinholeCamera
  from kornia.io import ImageLoadType, load_image
  from kornia.nerf.core import Images, ImageTensors
  from kornia.nerf.samplers import RandomRaySampler, RaySampler, UniformRaySampler
label_desc: Use image node_id 7 for calling the RayDataset obj's underlying member method code with example usage: obj._check_dimensions(imgs) without return types