code: def convergence_criteria_small_relative_norm_weights_change(
      tolerance=1e-5, norm_order=2
  ):
      """Returns Python `callable` which indicates fitting procedure has converged.
  
      Writing old, new `model_coefficients` as `w0`, `w1`, this function
      defines convergence as,
  
      ```python
      relative_euclidean_norm = (tf.norm(w0 - w1, ord=2, axis=-1) /
                                 (1. + tf.norm(w0, ord=2, axis=-1)))
      reduce_all(relative_euclidean_norm < tolerance)
      ```
  
      where `tf.norm(x, ord=2)` denotes the [Euclidean norm](
      https://en.wikipedia.org/wiki/Norm_(mathematics)#Euclidean_norm) of `x`.
  
      Args:
        tolerance: `float`-like `Tensor` indicating convergence, i.e., when
          max relative Euclidean norm weights difference < tolerance`.
          Default value: `1e-5`.
        norm_order: Order of the norm. Default value: `2` (i.e., "Euclidean norm".)
  
      Returns:
        convergence_criteria_fn: Python `callable` which returns `bool` `Tensor`
          indicated fitting procedure has converged. (See inner function
          specification for argument signature.)
          Default value: `1e-5`.
      """
  
      def convergence_criteria_fn(
          is_converged_previous,  # pylint: disable=unused-argument
          iter_,
          model_coefficients_previous,
          predicted_linear_response_previous,  # pylint: disable=unused-argument
          model_coefficients_next,
          predicted_linear_response_next,  # pylint: disable=unused-argument
          response,  # pylint: disable=unused-argument
          model,  # pylint: disable=unused-argument
          dispersion,
      ):  # pylint: disable=unused-argument
          """Returns `bool` `Tensor` indicating if fitting procedure has converged.
  
          Args:
            is_converged_previous: "old" convergence results.
            iter_: Iteration number.
            model_coefficients_previous: "old" `model_coefficients`.
            predicted_linear_response_previous: "old" `predicted_linear_response`.
            model_coefficients_next: "new" `model_coefficients`.
            predicted_linear_response_next: "new: `predicted_linear_response`.
            response: (Batch of) vector-shaped `Tensor` where each element represents
              a sample's observed response (to the corresponding row of features).
              Must have same `dtype` as `model_matrix`.
            model: `tfp.glm.ExponentialFamily`-like instance used to construct the
              negative log-likelihood loss, gradient, and expected Hessian (i.e., the
              Fisher information matrix).
            dispersion: `Tensor` representing `response` dispersion, i.e., as in:
              `p(y|theta) := exp((y theta - A(theta)) / dispersion)`. Must broadcast
              with rows of `model_matrix`.
              Default value: `None` (i.e., "no dispersion").
  
          Returns:
            is_converged: `bool` `Tensor`.
          """
          relative_euclidean_norm = tf.norm(
              tensor=model_coefficients_previous
              - model_coefficients_next,
              ord=norm_order,
              axis=-1,
          ) / (
              1.0
              + tf.norm(
                  tensor=model_coefficients_previous,
                  ord=norm_order,
                  axis=-1,
              )
          )
          return (iter_ > 0) & tf.reduce_all(
              relative_euclidean_norm < tolerance
          )
  
      return convergence_criteria_fn
  
file_path: probability/tensorflow_probability/python/glm/fisher_scoring.py
imports: import warnings
  import numpy
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.internal import distribution_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.math.linalg import sparse_or_dense_matvecmul
label_desc: Use image node_id 3 for calling a global function with example usage: convergence_criteria_small_relative_norm_weights_change(tolerance, norm_order) and returns: convergence_criteria_fn, unknown