code: def test_param_spec_from_dict_backward_compatibility():
      spec = ParamSpec("str_param", DataType.string, "str_a", None)
      spec_json = json.dumps(
          {
              "name": "str_param",
              "dtype": "string",
              "default": "str_a",
              "shape": None,
          }
      )
      assert ParamSpec.from_json_dict(**json.loads(spec_json)) == spec
  
imports: import datetime
  import json
  import math
  import re
  import numpy
  import pandas
  import pyspark
  import pyspark.sql.types
  import pytest
  from scipy.sparse import csc_matrix, csr_matrix
  from mlflow.exceptions import MlflowException
  from mlflow.models.utils import _enforce_tensor_spec
  from mlflow.pyfunc import _parse_spark_datatype
  from mlflow.types import DataType
  from mlflow.types.schema import Array, ColSpec, Object, ParamSchema, ParamSpec, Property, Schema, TensorSpec
  from mlflow.types.utils import _get_tensor_shape, _infer_colspec_type, _infer_param_schema, _infer_schema, _validate_input_dictionary_contains_only_strings_and_lists_of_strings
label_desc: Use image node_id 31 for calling a global function with example usage: test_param_spec_from_dict_backward_compatibility() without return types