code: def test_calc_default_image_properties_grayscale(
      mnist_visiondata_train,
  ):
      images = next(iter(mnist_visiondata_train.batch_loader))["images"]
      results = calc_default_image_properties(images)
      assert_that(results["Mean Red Relative Intensity"][0], is_(None))
      assert_that(sum(results["Brightness"]), close_to(2069.19, 0.01))
  
imports: from hamcrest import assert_that, calling, close_to, contains_exactly, equal_to, is_, raises
  from deepchecks.core.errors import DeepchecksValueError
  from deepchecks.vision import Suite
  from deepchecks.vision.checks import ImagePropertyOutliers
  from deepchecks.vision.utils.image_properties import calc_default_image_properties, default_image_properties, texture_level
  from deepchecks.vision.utils.label_prediction_properties import DEFAULT_CLASSIFICATION_LABEL_PROPERTIES, DEFAULT_CLASSIFICATION_PREDICTION_PROPERTIES, DEFAULT_OBJECT_DETECTION_LABEL_PROPERTIES, DEFAULT_OBJECT_DETECTION_PREDICTION_PROPERTIES, DEFAULT_SEMANTIC_SEGMENTATION_LABEL_PROPERTIES, DEFAULT_SEMANTIC_SEGMENTATION_PREDICTION_PROPERTIES
  from deepchecks.vision.utils.vision_properties import calc_vision_properties, validate_properties
label_desc: Use image node_id 3 for calling a global function with example usage: test_calc_default_image_properties_grayscale(mnist_visiondata_train) without return types