class_docstr: Switch from one BNN to another based on a time point.
code: def distributions(self):
      assert self.time_series_xs is not None
      lo = jnp.min(self.time_series_xs)
      hi = jnp.max(self.time_series_xs)
      # We want change_slope_scale to be the average value of
      # time_series_xs[i+1] - time_series_xs[i]
      change_slope_scale = (hi - lo) / self.time_series_xs.size
  
      # this distribution puts a lower density at the endpoints, and a reasonably
      # flat distribution near the middle of the timeseries.
      bij = chain_lib.Chain(
          [shift_lib.Shift(lo), scale_lib.Scale(hi - lo)]
      )
      dist = transformed_distribution_lib.TransformedDistribution(
          distribution=beta_lib.Beta(1.5, 1.5), bijector=bij
      )
      return super().distributions() | {
          "change_point": dist,
          "change_slope": half_normal_lib.HalfNormal(
              scale=change_slope_scale
          ),
      }
  
imports: from typing import Optional
  from flax import linen
  import jax.numpy
  from tensorflow_probability.python.experimental.autobnn import bnn
  from tensorflow_probability.python.experimental.autobnn import likelihoods
  from tensorflow_probability.substrates.jax.bijectors import chain
  from tensorflow_probability.substrates.jax.bijectors import scale
  from tensorflow_probability.substrates.jax.bijectors import shift
  from tensorflow_probability.substrates.jax.distributions import beta
  from tensorflow_probability.substrates.jax.distributions import dirichlet
  from tensorflow_probability.substrates.jax.distributions import half_normal
  from tensorflow_probability.substrates.jax.distributions import normal
  from tensorflow_probability.substrates.jax.distributions import transformed_distribution
label_desc: Use image node_id 1 for calling the LearnableChangePoint obj's underlying member method code with example usage: obj.distributions() and returns: unknown