code: def forward(self, net: Tensor) -> tensor_dict_type:
      if len(net.shape) > 2:
          net = net.contiguous().view(len(net), -1)
      encoded = self.encode(net)
      one_hot = encoded.one_hot
      embedding = encoded.embedding
      numerical = encoded.numerical
      # wide
      if one_hot is None and embedding is None:
          wide_inp = numerical
      else:
          if one_hot is None:
              wide_inp = embedding
          elif embedding is None:
              wide_inp = one_hot
          else:
              wide_inp = torch.cat([one_hot, embedding], dim=-1)
      wide_net = self.linear(wide_inp)
      # deep
      if embedding is None:
          deep_inp = numerical
      elif numerical is None:
          deep_inp = embedding
      else:
          deep_inp = torch.cat([numerical, embedding], dim=-1)
      deep_net = self.fcnn(deep_inp)
      # merge
      return wide_net + deep_net
  
file_path: carefree-learn/cflearn/models/ml/wnd.py
imports: import torch
  from torch import Tensor
  from typing import Dict
  from typing import List
  from typing import Optional
  from cftool.types import tensor_dict_type
  from .base import MLModel
  from .fcnn import FCNN
  from .linear import Linear
  from ...schema import MLEncoderSettings
  from ...schema import MLGlobalEncoderSettings
label_desc: Use image node_id 2 for calling the WideAndDeep obj's underlying member method code with example usage: obj.forward(net) and returns: unknown