class_docstr: Matern Kernel with parameter 3/2.
  
  This kernel is part of the Matern family of kernels, with parameter 3/2.
  
  ```none
    z = sqrt(3) * ||x - y|| / length_scale
    k(x, y) = amplitude ** 2 * (1 + z) * exp(-z)
  ```
  
  where the double-bars represent vector length (i.e. Euclidean, or L2 Norm).
  This kernel, acts over the space `S = R^(D1 x D2 .. x Dd)`.
class_docstr_tok: ["Matern","Kernel","with","parameter","3\/2",".","This","kernel","is","part","of","the","Matern","family","of","kernels",",","with","parameter","3\/2",".","``","`","none","z","=","sqrt","(","3",")","*","||x","-","y||","\/","length_scale","k","(","x",",","y",")","=","amplitude","*","*","2","*","(","1","+","z",")","*","exp","(","-z",")","``","`","where","the","double-bars","represent","vector","length","(","i.e",".","Euclidean",",","or","L2","Norm",")",".","This","kernel",",","acts","over","the","space","`","S","=","R^","(","D1","x","D2","..","x","Dd",")","`","."]
code: def _apply_with_distance(
      self, x1, x2, pairwise_square_distance, example_ndims=0
  ):
      # Where pairwise square distance is 0, gradients with respect to each of the
      # inputs should be 0 as well. Set square distances to be statically 0 to
      # ensure that gradients are 0 (and not infinity/NaN when the square root is
      # taken).
      zero_distance = tf.equal(pairwise_square_distance, 0.0)
      pairwise_sq = tf.where(
          zero_distance,
          tf.zeros([], dtype=pairwise_square_distance.dtype),
          pairwise_square_distance,
      )
      norm = tf.math.sqrt(pairwise_sq)
      norm = tf.where(
          zero_distance, tf.zeros([], dtype=norm.dtype), norm
      )
      np_dtype = dtype_util.as_numpy_dtype(norm.dtype)
      inverse_length_scale = self._inverse_length_scale_parameter()
      if inverse_length_scale is not None:
          inverse_length_scale = util.pad_shape_with_ones(
              inverse_length_scale, ndims=example_ndims
          )
          norm = norm * inverse_length_scale
      series_term = np.sqrt(3).astype(np_dtype) * norm
      log_result = tf.math.log1p(series_term) - series_term
  
      if self.amplitude is not None:
          amplitude = tf.convert_to_tensor(self.amplitude)
          amplitude = util.pad_shape_with_ones(amplitude, example_ndims)
          log_result = log_result + 2.0 * tf.math.log(amplitude)
      return tf.exp(log_result)
  
imports: import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.internal import assert_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import parameter_properties
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.math import bessel
  from tensorflow_probability.python.math.psd_kernels import positive_semidefinite_kernel
  from tensorflow_probability.python.math.psd_kernels.internal import util
label_desc: Use image node_id 2 for calling the MaternThreeHalves obj's underlying member method code with example usage: obj._apply_with_distance(x1, x2, pairwise_square_distance, example_ndims) and returns: tf