class_docstr: Base class for BNNs that are made from other BNNs.
code: def set_likelihood_model(
      self, likelihood_model: likelihoods.LikelihoodModel
  ):
      super().set_likelihood_model(likelihood_model)
      # We need to set the likelihood models on the component
      # bnns so that they will know how many outputs they are
      # supposed to have.  BUT:  we also don't want to accidentally
      # create any additional variables, distributions or parameters
      # in them.  So we set them all to having a dummy likelihood
      # model that only knows how many outputs it has.
      dummy_ll_model = likelihoods.DummyLikelihoodModel(
          num_outs=likelihood_model.num_outputs()
      )
      for b in self.bnns:
          b.set_likelihood_model(dummy_ll_model)
  
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 2 for calling the BnnOperator obj's underlying member method code with example usage: obj.set_likelihood_model(likelihood_model) without return types