class_docstr: `FeatureScaled` kernel for continuous and categorical data.
  
  This kernel is an extension of `FeatureScaled` that handles categorical data
  (encoded as integers, not one-hot) in addition to continuous (float) data.
  `ContinuousAndCategoricalValues` structures, containing arrays of continuous
  and categorical data, are passed to the `apply`, `matrix` and `tensor`
  methods. The continuous inputs are scaled and then passed to the distance
  function, like in `FeatureScaled`. Categorical data is compared for equality,
  and features in the same category are assigned distance 0 and features in
  different categories are assigned distance 1. The scaling factors are then
  applied to the categorical distances.
  
  #### Examples
  
  Compute the kernel matrix on synthetic data.
  
  ```python
  import numpy as np
  
  continuous_dim = 3
  categorical_dim = 5
  
  # Define an ARD kernel that takes a structure of continuous and categorical
  # data as inputs, with randomly-sampled length scales. The `categorical`
  # field of `scale_diag` contains a float Tensor because it represents a
  # scaling multiplier for the categorical distance, not the categorical data
  # itself.
  base_kernel = tfpk.MaternFiveHalves()
  kernel = tfpks.FeatureScaledWithCategorical(
      base_kernel,
      scale_diag=tfpks.ContinuousAndCategoricalValues(
          continuous=np.random.uniform(size=[continuous_dim]),
          categorical=np.random.uniform(size=[categorical_dim])),
      validate_args=True)
  
  # Create `num_points` examples in the continuous/categorical feature space.
  num_points = 12
  num_categories = 10
  x1 = tfpks.ContinuousAndCategoricalValues(
      continuous=np.random.normal(size=(num_points, continuous_dim)),
      categorical=np.random.randint(
          num_categories, size=(num_points, categorical_dim)))
  x2 = tfpks.ContinuousAndCategoricalValues(
      continuous=np.random.normal(size=(num_points, continuous_dim)),
      categorical=np.random.randint(
          num_categories, size=(num_points, categorical_dim)))
  
  # Evaluate the kernel matrix for `x1` and `x2`.
  kernel.matrix(x1, x2)  # has shape `[num_points, num_points]`
  
  ```
code: def _parameter_properties(cls, dtype):
      from tensorflow_probability.python.bijectors import (
          joint_map,
      )  # pylint:disable=g-import-not-at-top
      from tensorflow_probability.python.bijectors import (
          softplus,
      )  # pylint:disable=g-import-not-at-top
  
      def _constraining_bijector_fn(low=None):
          softplus_bij = softplus.Softplus(low=low)
          return joint_map.JointMap(
              ContinuousAndCategoricalValues(softplus_bij, softplus_bij)
          )
  
      return dict(
          kernel=parameter_properties.BatchedComponentProperties(),
          scale_diag=parameter_properties.ParameterProperties(
              event_ndims=lambda self: self.feature_ndims,
              default_constraining_bijector_fn=(
                  lambda: _constraining_bijector_fn(
                      low=dtype_util.eps(dtype)
                  )
              ),
              is_preferred=False,
          ),
          inverse_scale_diag=parameter_properties.ParameterProperties(
              event_ndims=lambda self: self.feature_ndims,
              default_constraining_bijector_fn=_constraining_bijector_fn,
          ),
      )
  
imports: import collections
  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 nest_util
  from tensorflow_probability.python.internal import parameter_properties
  from tensorflow_probability.python.internal import tensor_util
  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 6 for calling the FeatureScaledWithCategorical obj's underlying member method code with example usage: obj._parameter_properties(cls, dtype) and returns: dict, joint_map