code: def evaluate_forward(
          distribution,
          x_data,
          parameters=None,
          cache=None,
  ):
      
      assert len(x_data) == len(distribution), (
          "distribution %s is not of length %d" % (distribution, len(x_data)))
      assert hasattr(distribution, "_cdf"), (
          "distribution require the `_cdf` method to function.")
  
      cache = cache if cache is not None else {}
  
      parameters = load_parameters(
          distribution, "_cdf", parameters=parameters, cache=cache)
  
      # Store cache.
      cache[distribution] = x_data
  
      # Evaluate forward function.
      out = numpy.zeros(x_data.shape)
      out[:] = distribution._cdf(x_data, **parameters)
  
      return out
docs: Evaluate forward Rosenblatt transformation.
  
      Args:
          distribution (Dist):
              Distribution to evaluate.
          x_data (numpy.ndarray):
              Locations for where evaluate forward transformation at.
          parameters (:py:data:typing.Any):
              Collection of parameters to override the default ones in the
              distribution.
          cache (:py:data:typing.Any):
              A collection of previous calculations in case the same distribution
              turns up on more than one occasion.
  
      Returns:
          The cumulative distribution values of ``distribution`` at location
          ``x_data`` using parameters ``parameters``.