class_docstr: Base class for BNNs that are made from other BNNs.
code: def log_prior(self, params):
      if "params" in params:
          params = params["params"]
      # params for bnns[i] are stored in params['bnns_{i}'].
      lp = bnn.log_prior_of_parameters(params, self.distributions())
      for i, b in enumerate(self.bnns):
          params_field = f"bnns_{i}"
          if params_field in params:
              lp += b.log_prior(params[params_field])
      return lp
  
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 3 for calling the BnnOperator obj's underlying member method code with example usage: obj.log_prior(params) and returns: lp