def normal_conjugates_known_scale_predictive(prior, scale, s, n):
if not isinstance(prior, normal.Normal):<EOL><INDENT>raise TypeError("<STR_LIT>")<EOL><DEDENT>if s.dtype != prior.dtype:<EOL><INDENT>raise TypeError(<EOL>"<STR_LIT>"<EOL>% (s.dtype, prior.dtype))<EOL><DEDENT>n = tf.cast(n, prior.dtype)<EOL>scale0_2 = tf.square(prior.scale)<EOL>scale_2 = tf.square(scale)<EOL>scalep_2 = <NUM_LIT:1.0>/(<NUM_LIT:1>/scale0_2 + n/scale_2)<EOL>return normal.Normal(<EOL>loc=(prior.loc / scale0_2 + s / scale_2) * scalep_2,<EOL>scale=tf.sqrt(scalep_2 + scale_2))<EOL>
Posterior predictive Normal distribution w. conjugate prior on the mean.

    This model assumes that `n` observations (with sum `s`) come from a
    Normal with unknown mean `loc` (described by the Normal `prior`)
    and known variance `scale**2`. The "known scale predictive"
    is the distribution of new observations, conditioned on the existing
    observations and our prior.

    Accepts a prior Normal distribution object, having parameters
    `loc0` and `scale0`, as well as known `scale` values of the predictive
    distribution(s) (also assumed Normal),
    and statistical estimates `s` (the sum(s) of the observations) and
    `n` (the number(s) of observations).

    Calculates the Normal distribution(s) `p(x | sigma**2)`:

    ```
    p(x | sigma**2) = int N(x | mu, sigma**2)N(mu | prior.loc, prior.scale**2) dmu
                    = N(x | prior.loc, 1 / (sigma**2 + prior.scale**2))
    ```

    Returns the predictive posterior distribution object, with parameters
    `(loc', scale'**2)`, where:

    ```
    sigma_n**2 = 1/(1/sigma0**2 + n/sigma**2),
    mu' = (mu0/sigma0**2 + s/sigma**2) * sigma_n**2.
    sigma'**2 = sigma_n**2 + sigma**2,
    ```

    Distribution parameters from `prior`, as well as `scale`, `s`, and `n`.
    will broadcast in the case of multidimensional sets of parameters.

    Args:
      prior: `Normal` object of type `dtype`:
        the prior distribution having parameters `(loc0, scale0)`.
      scale: tensor of type `dtype`, taking values `scale > 0`.
        The known stddev parameter(s).
      s: Tensor of type `dtype`. The sum(s) of observations.
      n: Tensor of type `int`. The number(s) of observations.

    Returns:
      A new Normal predictive distribution object.

    Raises:
      TypeError: if dtype of `s` does not match `dtype`, or `prior` is not a
        Normal object.