code: def test_model_pyfunc_save_load(basic_model, model_path):
      mlflow.sentence_transformers.save_model(basic_model, model_path)
      loaded_pyfunc = pyfunc.load_model(model_uri=model_path)
  
      sentence = "hello world and hello mlflow"
      sentences = [sentence, "goodbye my friends", "i am a sentence"]
      embedding_dim = basic_model.get_sentence_embedding_dimension()
  
      emb0 = loaded_pyfunc.predict(sentence)
      assert emb0.shape == (1, embedding_dim)
  
      emb1 = loaded_pyfunc.predict(sentences)
      emb2 = loaded_pyfunc.predict(pd.Series(sentences))
      emb3 = loaded_pyfunc.predict(pd.Series(sentences).to_numpy())
  
      for emb in [emb1, emb2, emb3]:
          assert emb.shape == (3, embedding_dim)
  
      np.testing.assert_array_equal(emb1, emb2)
      np.testing.assert_array_equal(emb1, emb3)
  
imports: import json
  import os
  from unittest import mock
  import numpy
  import pandas
  import pytest
  import yaml
  from pyspark.sql import SparkSession
  from pyspark.sql.types import ArrayType, DoubleType
  from sentence_transformers import SentenceTransformer
  import mlflow
  import mlflow.pyfunc.scoring_server
  import mlflow.sentence_transformers
  from mlflow import pyfunc
  from mlflow.exceptions import MlflowException
  from mlflow.models import Model, infer_signature
  from mlflow.models.utils import _read_example
  from mlflow.store.artifact.s3_artifact_repo import S3ArtifactRepository
  from mlflow.utils.environment import _mlflow_conda_env
  from tests.helper_functions import _assert_pip_requirements, _compare_logged_code_paths, _mlflow_major_version_string, assert_register_model_called_with_local_model_path, pyfunc_serve_and_score_model
label_desc: Use image node_id 17 for calling a global function with example usage: test_model_pyfunc_save_load(basic_model, model_path) without return types