class_docstr: This is a abstract context-aware recommender. All the context-aware model should implement this class.
  The base context-aware recommender class provide the basic embedding function of feature fields which also
  contains a first-order part of feature fields.
class_docstr_tok: ["This","is","a","abstract","context-aware","recommender",".","All","the","context-aware","model","should","implement","this","class",".","The","base","context-aware","recommender","class","provide","the","basic","embedding","function","of","feature","fields","which","also","contains","a","first-order","part","of","feature","fields","."]
docstr: Embed the whole feature columns in a double tower way.
  
  Args:
      interaction (Interaction): The input data collection.
  
  Returns:
      torch.FloatTensor: The embedding tensor of token sequence columns in the first part.
      torch.FloatTensor: The embedding tensor of float sequence columns in the first part.
      torch.FloatTensor: The embedding tensor of token sequence columns in the second part.
      torch.FloatTensor: The embedding tensor of float sequence columns in the second part.
docstr_tok: ["Embed","the","whole","feature","columns","in","a","double","tower","way",".","Args",":","interaction","(","Interaction",")",":","The","input","data","collection",".","Returns",":","torch.FloatTensor",":","The","embedding","tensor","of","token","sequence","columns","in","the","first","part",".","torch.FloatTensor",":","The","embedding","tensor","of","float","sequence","columns","in","the","first","part",".","torch.FloatTensor",":","The","embedding","tensor","of","token","sequence","columns","in","the","second","part",".","torch.FloatTensor",":","The","embedding","tensor","of","float","sequence","columns","in","the","second","part","."]
code: def double_tower_embed_input_fields(self, interaction):
      """Embed the whole feature columns in a double tower way.
  
      Args:
          interaction (Interaction): The input data collection.
  
      Returns:
          torch.FloatTensor: The embedding tensor of token sequence columns in the first part.
          torch.FloatTensor: The embedding tensor of float sequence columns in the first part.
          torch.FloatTensor: The embedding tensor of token sequence columns in the second part.
          torch.FloatTensor: The embedding tensor of float sequence columns in the second part.
  
      """
      if not self.double_tower:
          raise RuntimeError(
              "Please check your model hyper parameters and set 'double tower' as True"
          )
      sparse_embedding, dense_embedding = self.embed_input_fields(
          interaction
      )
      if dense_embedding is not None:
          first_dense_embedding, second_dense_embedding = torch.split(
              dense_embedding,
              [self.user_float_field_num, self.item_float_field_num],
              dim=1,
          )
      else:
          first_dense_embedding, second_dense_embedding = None, None
  
      if sparse_embedding is not None:
          sizes = [
              self.user_token_seq_field_num,
              self.item_token_seq_field_num,
              self.user_token_field_num,
              self.item_token_field_num,
          ]
          (
              first_token_seq_embedding,
              second_token_seq_embedding,
              first_token_embedding,
              second_token_embedding,
          ) = torch.split(sparse_embedding, sizes, dim=1)
          first_sparse_embedding = torch.cat(
              [first_token_seq_embedding, first_token_embedding], dim=1
          )
          second_sparse_embedding = torch.cat(
              [second_token_seq_embedding, second_token_embedding],
              dim=1,
          )
      else:
          first_sparse_embedding, second_sparse_embedding = None, None
  
      return (
          first_sparse_embedding,
          first_dense_embedding,
          second_sparse_embedding,
          second_dense_embedding,
      )
  
imports: from logging import getLogger
  import numpy
  import torch
  import torch.nn
  from recbole.model.layers import FMEmbedding, FMFirstOrderLinear, FLEmbedding
  from recbole.utils import ModelType, InputType, FeatureSource, FeatureType, set_color
label_desc: Use image node_id 6 for calling the ContextRecommender obj's underlying member method code with example usage: obj.double_tower_embed_input_fields(interaction) and returns: first_sparse_embedding,  first_dense_embedding,  second_sparse_embedding,  second_dense_embedding