code: def _get_param_hash(param):
      """Get the hash of a param dictionary.
  
      It first unflattens nested dicts, removes unused nested parameters, nests them again and then create a frozenset
      based on the resulting items (tuples).
      Note that the flattening and unflattening dict functions are idempotent.
  
      Parameters
      ----------
      param: dict
          Parameter configuration.
          Example::
              param_grid = {"k": 50, "eta": 2, "optimizer_params": {"lr": 0.1}}
  
      Returns
      -------
      hash : str
          Hash of the param dictionary.
      """
      # Remove parameters that are not used by particular configurations
      # For example, if the regularization is None, there is no need for the
      # regularization lambda
      flattened_params = _flatten_nested_keys(
          _unflatten_nested_keys(param)
      )
  
      return hash(frozenset(flattened_params.items()))
  
imports: import logging
  from collections.abc import Iterable
  from itertools import islice, product
  import numpy
  import pandas
  from tqdm import tqdm
  from ..evaluation import hits_at_n_score, mr_score, mrr_score
label_desc: Use image node_id 5 for calling a global function with example usage: _get_param_hash(param) and returns: hash