parameters: (
      log_f,
      log_p,
      sampling_dist_q,
      z=None,
      n=None,
      seed=None,
      name='expectation_importance_sampler_logspace')
docstring: r"""Importance sampling with a positive function, in log-space.
  
    With `p(z) := exp{log_p(z)}`, and `f(z) = exp{log_f(z)}`, this `Op`
    returns
  
    ```
    Log[ n^{-1} sum_{i=1}^n [ f(z_i) p(z_i) / q(z_i) ] ],  z_i ~ q,
    \approx Log[ E_q[ f(Z) p(Z) / q(Z) ] ]
    =       Log[E_p[f(Z)]]
    ```
  
    This integral is done in log-space with max-subtraction to better handle the
    often extreme values that `f(z) p(z) / q(z)` can take on.
  
    In contrast to `expectation_importance_sampler`, this `Op` returns values in
    log-space.
  
  
    User supplies either `Tensor` of samples `z`, or number of samples to draw `n`
  
    Args:
      log_f: Callable mapping samples from `sampling_dist_q` to `Tensors` with
        shape broadcastable to `q.batch_shape`.
        For example, `log_f` works "just like" `sampling_dist_q.log_prob`.
      log_p:  Callable mapping samples from `sampling_dist_q` to `Tensors` with
        shape broadcastable to `q.batch_shape`.
        For example, `log_p` works "just like" `q.log_prob`.
      sampling_dist_q:  The sampling distribution.
        `tf.contrib.distributions.Distribution`.
        `float64` `dtype` recommended.
        `log_p` and `q` should be supported on the same set.
      z:  `Tensor` of samples from `q`, produced by `q.sample` for some `n`.
      n:  Integer `Tensor`.  Number of samples to generate if `z` is not provided.
      seed:  Python integer to seed the random number generator.
      name:  A name to give this `Op`.
  
    Returns:
      Logarithm of the importance sampling estimate.  `Tensor` with `shape` equal
        to batch shape of `q`, and `dtype` = `q.dtype`.
docstring_summary: r"""Importance sampling with a positive function, in log-space.
docstring_tokens: r Importance sampling with a positive function in log - space .
function: def expectation_importance_sampler_logspace(
      log_f,
      log_p,
      sampling_dist_q,
      z=None,
      n=None,
      seed=None,
      name='expectation_importance_sampler_logspace'):
    r"""Importance sampling with a positive function, in log-space.
  
    With `p(z) := exp{log_p(z)}`, and `f(z) = exp{log_f(z)}`, this `Op`
    returns
  
    ```
    Log[ n^{-1} sum_{i=1}^n [ f(z_i) p(z_i) / q(z_i) ] ],  z_i ~ q,
    \approx Log[ E_q[ f(Z) p(Z) / q(Z) ] ]
    =       Log[E_p[f(Z)]]
    ```
  
    This integral is done in log-space with max-subtraction to better handle the
    often extreme values that `f(z) p(z) / q(z)` can take on.
  
    In contrast to `expectation_importance_sampler`, this `Op` returns values in
    log-space.
  
  
    User supplies either `Tensor` of samples `z`, or number of samples to draw `n`
  
    Args:
      log_f: Callable mapping samples from `sampling_dist_q` to `Tensors` with
        shape broadcastable to `q.batch_shape`.
        For example, `log_f` works "just like" `sampling_dist_q.log_prob`.
      log_p:  Callable mapping samples from `sampling_dist_q` to `Tensors` with
        shape broadcastable to `q.batch_shape`.
        For example, `log_p` works "just like" `q.log_prob`.
      sampling_dist_q:  The sampling distribution.
        `tf.contrib.distributions.Distribution`.
        `float64` `dtype` recommended.
        `log_p` and `q` should be supported on the same set.
      z:  `Tensor` of samples from `q`, produced by `q.sample` for some `n`.
      n:  Integer `Tensor`.  Number of samples to generate if `z` is not provided.
      seed:  Python integer to seed the random number generator.
      name:  A name to give this `Op`.
  
    Returns:
      Logarithm of the importance sampling estimate.  `Tensor` with `shape` equal
        to batch shape of `q`, and `dtype` = `q.dtype`.
    """
    q = sampling_dist_q
    with ops.name_scope(name, values=[z, n]):
      z = _get_samples(q, z, n, seed)
      log_values = log_f(z) + log_p(z) - q.log_prob(z)
      return _logspace_mean(log_values)
function_tokens: def expectation_importance_sampler_logspace ( log_f , log_p , sampling_dist_q , z = None , n = None , seed = None , name = 'expectation_importance_sampler_logspace' ) : q = sampling_dist_q with ops . name_scope ( name , values = [ z , n ] ) : z = _get_samples ( q , z , n , seed ) log_values = log_f ( z ) + log_p ( z ) - q . log_prob ( z ) return _logspace_mean ( log_values )