code: def forward(self, image, text):
      assert (
          image is not None or text is not None
      ), "text and image cannot both be None!"
  
      if image is None:
          return self.encode_text(text)
      elif text is None:
          return self.encode_image(image)
      image_features = self.encode_image(image)
      text_features = self.encode_text(text)
  
      image_features = image_features / image_features.norm(
          axis=-1, keepdim=True
      )
      text_features = text_features / text_features.norm(
          axis=-1, keepdim=True
      )
  
      return image_features, text_features, self.logit_scale.exp()
  
imports: from collections import OrderedDict
  from typing import Tuple
  from typing import Union
  import numpy
  import paddle
  import paddle.nn.functional
  from disco_diffusion_cnclip_vitb16.cn_clip.clip import _tokenizer
  from disco_diffusion_cnclip_vitb16.cn_clip.clip.configuration_bert import BertConfig
  from disco_diffusion_cnclip_vitb16.cn_clip.clip.modeling_bert import BertModel
  from paddle import nn
  from paddle.nn import MultiHeadAttention
label_desc: Use image node_id 5 for calling the CLIP obj's underlying member method code with example usage: obj.forward(image, text) and returns: image_features,  text_features,  self, self, self