code: def layer_op(
      self, random_source, training_image, conditioning, is_training
  ):
      shape_to_generate = training_image.shape.as_list()[1:]
      fake_image = self._generator(
          random_source, shape_to_generate, conditioning, is_training
      )
  
      fake_logits = self._discriminator(
          fake_image, conditioning, is_training
      )
      if self.clip:
          with tf.name_scope("clip_real_images"):
              training_image = tf.maximum(
                  -self.clip, tf.minimum(self.clip, training_image)
              )
      real_logits = self._discriminator(
          training_image, conditioning, is_training
      )
      return fake_image, real_logits, fake_logits
  
file_path: NiftyNet/niftynet/layer/gan_blocks.py
imports: from __future__ import absolute_import, print_function, division
  import tensorflow
  from niftynet.layer.base_layer import TrainableLayer
label_desc: Use image node_id 2 for calling the GANImageBlock obj's underlying member method code with example usage: obj.layer_op(random_source, training_image, conditioning, is_training) and returns: fake_image,  real_logits,  fake_logits