# Source code for quantecon.lae

r"""
Computes a sequence of marginal densities for a continuous state space
Markov chain :math:X_t where the transition probabilities can be represented
as densities. The estimate of the marginal density of :math:X_t is

.. math::

\frac{1}{n} \sum_{i=0}^n p(X_{t-1}^i, y)

This is a density in :math:y.

References
----------

https://lectures.quantecon.org/py/stationary_densities.html

"""
from textwrap import dedent
import numpy as np

[docs]class LAE:
"""
An instance is a representation of a look ahead estimator associated
with a given stochastic kernel p and a vector of observations X.

Parameters
----------
p : function
The stochastic kernel.  A function p(x, y) that is vectorized in
both x and y
X : array_like(float)
A vector containing observations

Attributes
----------
p, X : see Parameters

Examples
--------
>>> psi = LAE(p, X)
>>> y = np.linspace(0, 1, 100)
>>> psi(y)  # Evaluate look ahead estimate at grid of points y

"""

def __init__(self, p, X):
X = X.flatten()  # So we know what we're dealing with
n = len(X)
self.p, self.X = p, X.reshape((n, 1))

def __repr__(self):
return self.__str__()

def __str__(self):
m = """\
- number of observations : {n}
"""
return dedent(m.format(n=self.X.size))

def __call__(self, y):
"""
A vectorized function that returns the value of the look ahead
estimate at the values in the array y.

Parameters
----------
y : array_like(float)
A vector of points at which we wish to evaluate the look-