code: def forward(self, *inputs, **kwargs):
      if self.channels_last:
          # generate channels_last_available list is possible
          # this won't affect inference latency much since it will only run 1 time
          if not self.channels_last_available:
              self.channels_last_available = (
                  generate_channels_last_available(inputs)
              )
  
          # change the data to suitable mem format
          converted_input_length = min(
              len(self.channels_last_available), len(inputs)
          )
          inputs = (
              tuple(
                  map(
                      lambda idx: apply_proper_channels_last(
                          self.channels_last_available[idx], inputs[idx]
                      ),
                      range(converted_input_length),
                  )
              )
              + inputs[converted_input_length:]
          )
  
      return self.model(*inputs, **kwargs)
  
file_path: BigDL/python/nano/src/bigdl/nano/deps/ipex/ipex_inference_model.py
imports: from bigdl.nano.utils.pytorch import generate_channels_last_available, apply_proper_channels_last, transform_state_dict_to_dtype, patch_attrs_from_model_to_object, jit_convert
  from bigdl.nano.pytorch.model import AcceleratedLightningModule
  from bigdl.nano.pytorch.context_manager import generate_context_manager
  from bigdl.nano.deps.ipex.ipex_api import ipex_optimize
  from bigdl.nano.utils.common import invalidInputError, compare_version
  import operator
  import torch
  import copy
label_desc: Use image node_id 3 for calling the PytorchIPEXJITModel obj's underlying member method code with example usage: obj.forward() and returns: self