code: def test_trainable_preprocessing(self):
      label_file = os.path.join("testing_data", "label_reader.txt")
      if os.path.exists(label_file):
          os.remove(label_file)
      label_normaliser = DiscreteLabelNormalisationLayer(
          image_name="label",
          modalities=vars(LABEL_TASK).get("label"),
          model_filename=os.path.join(
              "testing_data", "label_reader.txt"
          ),
      )
      reader = ImageReader(["label"])
      with self.assertRaisesRegexp(AssertionError, ""):
          reader.add_preprocessing_layers(label_normaliser)
      reader.initialise(LABEL_DATA, LABEL_TASK, label_list)
      reader.add_preprocessing_layers(label_normaliser)
      reader.add_preprocessing_layers(
          [PadLayer(image_name=["label"], border=(10, 5, 5))]
      )
      idx, data, interp_order = reader(idx=0)
      unique_data = np.unique(data["label"])
      expected_v1 = np.array(
          [
              0.0,
              1.0,
              2.0,
              3.0,
              4.0,
              5.0,
              6.0,
              7.0,
              8.0,
              9.0,
              10.0,
              11.0,
              12.0,
              13.0,
              14.0,
              15.0,
              16.0,
              17.0,
              18.0,
              19.0,
              20.0,
              21.0,
              22.0,
              23.0,
              24.0,
              25.0,
              26.0,
              27.0,
              28.0,
              29.0,
              30.0,
              31.0,
              32.0,
              33.0,
              34.0,
              35.0,
              36.0,
              37.0,
              38.0,
              39.0,
              40.0,
              41.0,
              42.0,
              43.0,
              44.0,
              45.0,
              46.0,
              47.0,
              48.0,
              49.0,
              50.0,
              51.0,
              52.0,
              53.0,
              54.0,
              55.0,
              56.0,
              57.0,
              58.0,
              59.0,
              60.0,
              61.0,
              62.0,
              63.0,
              64.0,
              65.0,
              66.0,
              67.0,
              68.0,
              69.0,
              70.0,
              71.0,
              72.0,
              73.0,
              74.0,
              75.0,
              76.0,
              77.0,
              78.0,
              79.0,
              80.0,
              81.0,
              82.0,
              83.0,
              84.0,
              85.0,
              86.0,
              87.0,
              88.0,
              89.0,
              90.0,
              91.0,
              92.0,
              93.0,
              94.0,
              95.0,
              96.0,
              97.0,
              98.0,
              99.0,
              100.0,
              101.0,
              102.0,
              103.0,
              104.0,
              105.0,
              106.0,
              107.0,
              108.0,
              109.0,
              110.0,
              111.0,
              112.0,
              113.0,
              114.0,
              115.0,
              116.0,
              117.0,
              118.0,
              119.0,
              120.0,
              121.0,
              122.0,
              123.0,
              124.0,
              125.0,
              126.0,
              127.0,
              128.0,
              129.0,
              130.0,
              131.0,
              132.0,
              133.0,
              134.0,
              135.0,
              136.0,
              137.0,
              138.0,
              139.0,
              140.0,
              141.0,
              142.0,
              143.0,
              144.0,
              145.0,
              146.0,
              147.0,
              148.0,
              149.0,
              150.0,
              151.0,
              152.0,
              153.0,
              154.0,
              155.0,
              156.0,
              157.0,
          ],
          dtype=np.float32,
      )
      expected_v2 = np.array(
          [
              0.0,
              1.0,
              2.0,
              3.0,
              4.0,
              5.0,
              6.0,
              7.0,
              8.0,
              9.0,
              10.0,
              11.0,
              12.0,
              13.0,
              14.0,
              15.0,
              16.0,
              17.0,
              18.0,
              20.0,
              21.0,
              22.0,
              23.0,
              24.0,
              25.0,
              26.0,
              27.0,
              28.0,
              29.0,
              30.0,
              31.0,
              32.0,
              33.0,
              34.0,
              35.0,
              36.0,
              37.0,
              38.0,
              39.0,
              40.0,
              41.0,
              42.0,
              43.0,
              44.0,
              45.0,
              46.0,
              47.0,
              48.0,
              49.0,
              50.0,
              51.0,
              52.0,
              53.0,
              54.0,
              55.0,
              56.0,
              57.0,
              58.0,
              59.0,
              60.0,
              61.0,
              62.0,
              63.0,
              64.0,
              65.0,
              66.0,
              67.0,
              68.0,
              69.0,
              70.0,
              71.0,
              72.0,
              73.0,
              74.0,
              75.0,
              76.0,
              77.0,
              78.0,
              79.0,
              80.0,
              81.0,
              82.0,
              83.0,
              84.0,
              85.0,
              86.0,
              87.0,
              88.0,
              89.0,
              90.0,
              91.0,
              92.0,
              93.0,
              94.0,
              95.0,
              96.0,
              97.0,
              98.0,
              99.0,
              100.0,
              101.0,
              102.0,
              103.0,
              104.0,
              105.0,
              106.0,
              107.0,
              108.0,
              109.0,
              110.0,
              111.0,
              112.0,
              113.0,
              114.0,
              115.0,
              116.0,
              117.0,
              118.0,
              119.0,
              120.0,
              121.0,
              122.0,
              123.0,
              124.0,
              125.0,
              126.0,
              127.0,
              128.0,
              129.0,
              130.0,
              131.0,
              132.0,
              133.0,
              134.0,
              135.0,
              136.0,
              137.0,
              138.0,
              139.0,
              140.0,
              141.0,
              142.0,
              143.0,
              144.0,
              145.0,
              146.0,
              147.0,
              148.0,
              149.0,
              150.0,
              151.0,
              152.0,
              153.0,
              154.0,
              155.0,
              156.0,
              157.0,
          ],
          dtype=np.float32,
      )
      compatible_assert = np.all(unique_data == expected_v1) or np.all(
          unique_data == expected_v2
      )
      self.assertTrue(compatible_assert)
      self.assertAllClose(data["label"].shape, (103, 74, 93, 1, 1))
  
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 7 for calling the ImageReaderTest obj's underlying member method code with example usage: obj.test_trainable_preprocessing() without return types