def __init__(self,
               loc,
               scale,
               skewness=None,
               tailweight=None,
               distribution=None,
               validate_args=False,
               allow_nan_stats=True,
               name="SinhArcsinh"):
    """Construct SinhArcsinh distribution on `(-inf, inf)`.

    Arguments `(loc, scale, skewness, tailweight)` must have broadcastable shape
    (indexing batch dimensions).  They must all have the same `dtype`.

    Args:
      loc: Floating-point `Tensor`.
      scale:  `Tensor` of same `dtype` as `loc`.
      skewness:  Skewness parameter.  Default is `0.0` (no skew).
      tailweight:  Tailweight parameter. Default is `1.0` (unchanged tailweight)
      distribution: `tf.Distribution`-like instance. Distribution that is
        transformed to produce this distribution.
        Default is `tfd.Normal(0., 1.)`.
        Must be a scalar-batch, scalar-event distribution.  Typically
        `distribution.reparameterization_type = FULLY_REPARAMETERIZED` or it is
        a function of non-trainable parameters. WARNING: If you backprop through
        a `SinhArcsinh` sample and `distribution` is not
        `FULLY_REPARAMETERIZED` yet is a function of trainable variables, then
        the gradient will be incorrect!
      validate_args: Python `bool`, default `False`. When `True` distribution
        parameters are checked for validity despite possibly degrading runtime
        performance. When `False` invalid inputs may silently render incorrect
        outputs.
      allow_nan_stats: Python `bool`, default `True`. When `True`,
        statistics (e.g., mean, mode, variance) use the value "`NaN`" to
        indicate the result is undefined. When `False`, an exception is raised
        if one or more of the statistic's batch members are undefined.
      name: Python `str` name prefixed to Ops created by this class.
    """
    parameters = dict(locals())

    with tf.name_scope(name) as name:
      dtype = dtype_util.common_dtype([loc, scale, skewness, tailweight],
                                      tf.float32)
      loc = tf.convert_to_tensor(value=loc, name="loc", dtype=dtype)
      scale = tf.convert_to_tensor(value=scale, name="scale", dtype=dtype)
      tailweight = 1. if tailweight is None else tailweight
      has_default_skewness = skewness is None
      skewness = 0. if skewness is None else skewness
      tailweight = tf.convert_to_tensor(
          value=tailweight, name="tailweight", dtype=dtype)
      skewness = tf.convert_to_tensor(
          value=skewness, name="skewness", dtype=dtype)

      batch_shape = distribution_util.get_broadcast_shape(
          loc, scale, tailweight, skewness)

      # Recall, with Z a random variable,
      #   Y := loc + C * F(Z),
      #   F(Z) := Sinh( (Arcsinh(Z) + skewness) * tailweight )
      #   F_0(Z) := Sinh( Arcsinh(Z) * tailweight )
      #   C := 2 * scale / F_0(2)
      if distribution is None:
        distribution = normal.Normal(
            loc=tf.zeros([], dtype=dtype),
            scale=tf.ones([], dtype=dtype),
            allow_nan_stats=allow_nan_stats)
      else:
        asserts = distribution_util.maybe_check_scalar_distribution(
            distribution, dtype, validate_args)
        if asserts:
          loc = distribution_util.with_dependencies(asserts, loc)

      # Make the SAS bijector, 'F'.
      f = sinh_arcsinh_bijector.SinhArcsinh(
          skewness=skewness, tailweight=tailweight)
      if has_default_skewness:
        f_noskew = f
      else:
        f_noskew = sinh_arcsinh_bijector.SinhArcsinh(
            skewness=dtype_util.as_numpy_dtype(skewness.dtype)(0),
            tailweight=tailweight)

      # Make the AffineScalar bijector, Z --> loc + scale * Z (2 / F_0(2))
      c = 2 * scale / f_noskew.forward(
          tf.convert_to_tensor(value=2, dtype=dtype))
      affine = affine_scalar_bijector.AffineScalar(
          shift=loc,
          scale=c,
          validate_args=validate_args)

      bijector = chain_bijector.Chain([affine, f])

      super(SinhArcsinh, self).__init__(
          distribution=distribution,
          bijector=bijector,
          batch_shape=batch_shape,
          validate_args=validate_args,
          name=name)
    self._parameters = parameters
    self._loc = loc
    self._scale = scale
    self._tailweight = tailweight
    self._skewness = skewness
def __init__ ( self , loc , scale , skewness = None , tailweight = None , distribution = None , validate_args = False , allow_nan_stats = True , name = "SinhArcsinh" ) : parameters = dict ( locals ( ) ) with tf . name_scope ( name ) as name : dtype = dtype_util . common_dtype ( [ loc , scale , skewness , tailweight ] , tf . float32 ) loc = tf . convert_to_tensor ( value = loc , name = "loc" , dtype = dtype ) scale = tf . convert_to_tensor ( value = scale , name = "scale" , dtype = dtype ) tailweight = 1. if tailweight is None else tailweight has_default_skewness = skewness is None skewness = 0. if skewness is None else skewness tailweight = tf . convert_to_tensor ( value = tailweight , name = "tailweight" , dtype = dtype ) skewness = tf . convert_to_tensor ( value = skewness , name = "skewness" , dtype = dtype ) batch_shape = distribution_util . get_broadcast_shape ( loc , scale , tailweight , skewness ) if distribution is None : distribution = normal . Normal ( loc = tf . zeros ( [ ] , dtype = dtype ) , scale = tf . ones ( [ ] , dtype = dtype ) , allow_nan_stats = allow_nan_stats ) else : asserts = distribution_util . maybe_check_scalar_distribution ( distribution , dtype , validate_args ) if asserts : loc = distribution_util . with_dependencies ( asserts , loc ) f = sinh_arcsinh_bijector . SinhArcsinh ( skewness = skewness , tailweight = tailweight ) if has_default_skewness : f_noskew = f else : f_noskew = sinh_arcsinh_bijector . SinhArcsinh ( skewness = dtype_util . as_numpy_dtype ( skewness . dtype ) ( 0 ) , tailweight = tailweight ) c = 2 * scale / f_noskew . forward ( tf . convert_to_tensor ( value = 2 , dtype = dtype ) ) affine = affine_scalar_bijector . AffineScalar ( shift = loc , scale = c , validate_args = validate_args ) bijector = chain_bijector . Chain ( [ affine , f ] ) super ( SinhArcsinh , self ) . __init__ ( distribution = distribution , bijector = bijector , batch_shape = batch_shape , validate_args = validate_args , name = name ) self . _parameters = parameters self . _loc = loc self . _scale = scale self . _tailweight = tailweight self . _skewness = skewness
Construct SinhArcsinh distribution on `(-inf, inf)`.

    Arguments `(loc, scale, skewness, tailweight)` must have broadcastable shape
    (indexing batch dimensions).  They must all have the same `dtype`.

    Args:
      loc: Floating-point `Tensor`.
      scale:  `Tensor` of same `dtype` as `loc`.
      skewness:  Skewness parameter.  Default is `0.0` (no skew).
      tailweight:  Tailweight parameter. Default is `1.0` (unchanged tailweight)
      distribution: `tf.Distribution`-like instance. Distribution that is
        transformed to produce this distribution.
        Default is `tfd.Normal(0., 1.)`.
        Must be a scalar-batch, scalar-event distribution.  Typically
        `distribution.reparameterization_type = FULLY_REPARAMETERIZED` or it is
        a function of non-trainable parameters. WARNING: If you backprop through
        a `SinhArcsinh` sample and `distribution` is not
        `FULLY_REPARAMETERIZED` yet is a function of trainable variables, then
        the gradient will be incorrect!
      validate_args: Python `bool`, default `False`. When `True` distribution
        parameters are checked for validity despite possibly degrading runtime
        performance. When `False` invalid inputs may silently render incorrect
        outputs.
      allow_nan_stats: Python `bool`, default `True`. When `True`,
        statistics (e.g., mean, mode, variance) use the value "`NaN`" to
        indicate the result is undefined. When `False`, an exception is raised
        if one or more of the statistic's batch members are undefined.
      name: Python `str` name prefixed to Ops created by this class.