code: def test_existing_csv(self):
      reader_for_csv = ImageReader(["image"])
      reader_for_csv.initialise(
          SINGLE_MOD_DATA, SINGLE_MOD_TASK, single_mod_list
      )
      reader = ImageReader(["image"])
      reader.initialise(EXISTING_DATA, SINGLE_MOD_TASK, existing_list)
      self.assertEqual(len(reader.output_list), 4)
      self.assertDictEqual(reader.spatial_ranks, {"image": 3})
      self.assertDictEqual(
          reader.shapes, {"image": (256, 168, 256, 1, 1)}
      )
      self.assertDictEqual(reader.tf_dtypes, {"image": tf.float32})
      self.assertEqual(reader.names, ("image",))
      self.assertDictEqual(reader.input_sources, {"image": ("lesion",)})
      self.assertEqual(reader.get_subject_id(1)[:4], "Fin_")
      self.assertTrue(isinstance(reader.get_subject(1), dict))
  
imports: from __future__ import absolute_import, print_function
  import os
  import numpy
  import tensorflow
  from niftynet.io.image_reader import ImageReader
  from niftynet.io.image_sets_partitioner import ImageSetsPartitioner
  from niftynet.layer.discrete_label_normalisation import DiscreteLabelNormalisationLayer
  from niftynet.layer.pad import PadLayer
  from niftynet.utilities.util_common import ParserNamespace
  from tests.reader_modular_test import generate_2d_images, SEG_THRESHOLD
  from tests.niftynet_testcase import NiftyNetTestCase
label_desc: Use image node_id 3 for calling the ImageReaderTest obj's underlying member method code with example usage: obj.test_existing_csv() without return types