code: def test_model_single_tensor_input(
      use_signature, single_tensor_input_model, model_path, data
  ):
      x, _ = data
      model, signature = single_tensor_input_model
      expected = model.predict(x)
  
      signature = signature if use_signature else None
      mlflow.tensorflow.save_model(
          model, path=model_path, signature=signature
      )
  
      # Loading Keras model via PyFunc
      model_loaded = mlflow.pyfunc.load_model(model_path)
  
      actual = model_loaded.predict(x)
      if signature is None:
          assert type(actual) == pd.DataFrame
          np.testing.assert_allclose(actual.values, expected, rtol=1e-5)
      else:
          assert type(actual) == np.ndarray
          np.testing.assert_allclose(actual, expected, rtol=1e-5)
  
      # Calling predict with a np array should return a np array
      actual = model_loaded.predict(x.values)
      assert type(actual) == np.ndarray
      np.testing.assert_allclose(actual, expected, rtol=1e-5)
  
imports: import json
  import os
  import numpy
  import pandas
  import pytest
  import tensorflow
  from packaging.version import Version
  from pyspark.sql.functions import struct
  from sklearn import datasets
  from tensorflow.keras.layers import Concatenate, Dense, Input, Lambda
  from tensorflow.keras.models import Model, Sequential
  from tensorflow.keras.optimizers import SGD
  import mlflow
  import mlflow.pyfunc.scoring_server
  from mlflow.models import ModelSignature
  from mlflow.pyfunc import spark_udf
  from mlflow.types.schema import Schema, TensorSpec
  from tests.helper_functions import _is_available_on_pypi, expect_status_code, pyfunc_serve_and_score_model
label_desc: Use image node_id 8 for calling a global function with example usage: test_model_single_tensor_input(use_signature, single_tensor_input_model, model_path, data) without return types