class_docstr: Pareto distribution.
  
  The Pareto distribution is parameterized by a `scale` and a
  `concentration` parameter.
  
  #### Mathematical Details
  
  The probability density function (pdf) is,
  
  ```none
  pdf(x; alpha, scale, x >= scale) = alpha * scale ** alpha / x ** (alpha + 1)
  ```
  
  where `concentration = alpha`.
  
  Note that `scale` acts as a scaling parameter, since
  `Pareto(c, scale).pdf(x) == Pareto(c, 1.).pdf(x / scale)`.
  
  The support of the distribution is defined on `[scale, infinity)`.
class_docstr_tok: ["Pareto","distribution",".","The","Pareto","distribution","is","parameterized","by","a","`","scale","`","and","a","`","concentration","`","parameter",".","#","#","#","#","Mathematical","Details","The","probability","density","function","(","pdf",")","is",",","``","`","none","pdf","(","x",";","alpha",",","scale",",","x",">","=","scale",")","=","alpha","*","scale","*","*","alpha","\/","x","*","*","(","alpha","+","1",")","``","`","where","`","concentration","=","alpha","`",".","Note","that","`","scale","`","acts","as","a","scaling","parameter",",","since","`","Pareto","(","c",",","scale",")",".pdf","(","x",")","==","Pareto","(","c",",","1",".",")",".pdf","(","x","\/","scale",")","`",".","The","support","of","the","distribution","is","defined","on","`","[","scale",",","infinity",")","`","."]
docstr: Returns `f(x)` if x is in the support, and `alt` otherwise.
  
  Given `f` which is defined on the support of this distribution
  (e.g. x > scale), extend the function definition to the real line
  by defining `f(x) = alt` for `x < scale`.
  
  Args:
    x: Floating-point Tensor to evaluate `f` at.
    scale: Floating-point Tensor by which to verify `x` validity.
    f: Lambda that takes in a tensor and returns a tensor. This represents the
      function who we want to extend the domain of definition.
    alt: Python or numpy literal representing the value to use for extending
      the domain.
  
  Returns:
    Tensor representing an extension of `f(x)`.
docstr_tok: ["Returns","`","f","(","x",")","`","if","x","is","in","the","support",",","and","`","alt","`","otherwise",".","Given","`","f","`","which","is","defined","on","the","support","of","this","distribution","(","e.g",".","x",">","scale",")",",","extend","the","function","definition","to","the","real","line","by","defining","`","f","(","x",")","=","alt","`","for","`","x","<","scale","`",".","Args",":","x",":","Floating-point","Tensor","to","evaluate","`","f","`","at",".","scale",":","Floating-point","Tensor","by","which","to","verify","`","x","`","validity",".","f",":","Lambda","that","takes","in","a","tensor","and","returns","a","tensor",".","This","represents","the","function","who","we","want","to","extend","the","domain","of","definition",".","alt",":","Python","or","numpy","literal","representing","the","value","to","use","for","extending","the","domain",".","Returns",":","Tensor","representing","an","extension","of","`","f","(","x",")","`","."]
code: def _extend_support(self, x, scale, f, alt):
      """Returns `f(x)` if x is in the support, and `alt` otherwise.
  
      Given `f` which is defined on the support of this distribution
      (e.g. x > scale), extend the function definition to the real line
      by defining `f(x) = alt` for `x < scale`.
  
      Args:
        x: Floating-point Tensor to evaluate `f` at.
        scale: Floating-point Tensor by which to verify `x` validity.
        f: Lambda that takes in a tensor and returns a tensor. This represents the
          function who we want to extend the domain of definition.
        alt: Python or numpy literal representing the value to use for extending
          the domain.
  
      Returns:
        Tensor representing an extension of `f(x)`.
      """
      if self.validate_args:
          return f(x)
      scale = (
          tf.convert_to_tensor(self.scale) if scale is None else scale
      )
      is_invalid = x < scale
      # We need to do this to ensure gradients are sound.
      y = f(tf.where(is_invalid, scale, x))
      if alt == 0.0:
          alt = tf.zeros([], dtype=y.dtype)
      elif alt == 1.0:
          alt = tf.ones([], dtype=y.dtype)
      else:
          alt = dtype_util.as_numpy_dtype(self.dtype)(alt)
      return tf.where(is_invalid, alt, y)
  
imports: import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import chain
  from tensorflow_probability.python.bijectors import shift
  from tensorflow_probability.python.bijectors import softplus
  from tensorflow_probability.python.distributions import distribution
  from tensorflow_probability.python.distributions import kullback_leibler
  from tensorflow_probability.python.internal import assert_util
  from tensorflow_probability.python.internal import distribution_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import parameter_properties
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import reparameterization
  from tensorflow_probability.python.internal import samplers
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.util.deferred_tensor import DeferredTensor
label_desc: Use image node_id 15 for calling the Pareto obj's underlying member method code with example usage: obj._extend_support(x, scale, f, alt) and returns: tf, f