class_docstr: Creates a funnel-shaped distribution.
  
  This distribution was first described in [1]. The distribution is constructed
  by transforming a N-D gaussian with scale [3, 1, ...] by scaling all but the
  first dimensions by `exp(x0 / 2)` where  `x0` is the value of the first
  dimension.
  
  ```none
  x[0] ~ Normal(loc=0, scale=3)
  for i in range(1, ndims):
    x[i] ~ Normal(loc=0, scale=exp(x[0] / 2))
  ```
  
  This distribution is notable for having a relatively narrow "neck" region
  which is challenging for HMC to explore. This distribution resembles the
  posteriors of centrally parameterized hierarchical models.
  
  #### References
  
  1. Neal, R. M. (2003). Slice sampling. Annals of Statistics, 31(3), 705-767.
code: def _unnormalized_log_prob(self, value):
      return self._funnel.log_prob(value)
  
file_path: probability/spinoffs/inference_gym/inference_gym/targets/neals_funnel.py
imports: import numpy
  import tensorflow.compat.v2
  import tensorflow_probability
  from tensorflow_probability.python.internal import prefer_static
  from inference_gym.targets import model
label_desc: Use image node_id 2 for calling the NealsFunnel obj's underlying member method code with example usage: obj._unnormalized_log_prob(value) and returns: self