Major Changes
- Updates the DCEGM tools to address the flaws identified in [issue 1062](https://github.com/econ-ark/HARK/issues/1062). PR: [1100](https://github.com/econ-ark/HARK/pull/1100).
- Updates `IndexDstn`, introducing the option to use an existing RNG instead of creating a new one, and creating and storing all the conditional distributions at initialization. [1104](https://github.com/econ-ark/HARK/pull/1104)
- `make_shock_history` and `read_shocks == True` now store and use the random draws that determine newborn's initial states [1101](https://github.com/econ-ark/HARK/pull/1101).
- `FrameModel` and `FrameSet` classes introduced for more modular construction of framed models. `FrameAgentType` dedicated to simulation. [1117](https://github.com/econ-ark/HARK/pull/1117)
- General control transitions based on decision rules in `FrameAgentType`. [1117](https://github.com/econ-ark/HARK/pull/1117)
- Adds `distr_of_function` tool to calculate the distribution of a function of a discrete random variable. [1144](https://github.com/econ-ark/HARK/pull/1144)
- Changes the `DiscreteDistribution` class to allow for arbitrary array-valued random variables. [1146](https://github.com/econ-ark/HARK/pull/1146)
- Adds `IndShockRiskyAssetConsumerType` as agent which can invest savings all in safe asset, all in risky asset, a fixed share in risky asset, or optimize its portfolio. [1107](https://github.com/econ-ark/HARK/issues/1107)
- Updates all HARK models to allow for age-varying interest rates. [1150](https://github.com/econ-ark/HARK/pull/1150)
- Adds `DiscreteDistribution.expected` method which expects vectorized functions and is faster than `HARK.distribution.calc_expectation`. [1156](https://github.com/econ-ark/HARK/pull/1156)
- Adds `DiscreteDistributionXRA` class which extends `DiscreteDistribution` to allow for underlying data to be stored in a `xarray.DataArray` object. [1156](https://github.com/econ-ark/HARK/pull/1156)
- Adds keyword argument `labels` to `expected()` when using `DiscreteDistributionXRA` to allow for expressive functions that use labeled xarrays. [1156](https://github.com/econ-ark/HARK/pull/1156)
- Adds a wrapper for [`interpolation.py`](https://github.com/EconForge/interpolation.py) for fast multilinear interpolation. [#1151](https://github.com/econ-ark/HARK/pull/1151)
- Adds support for the calculation of dreivatives in the `interpolation.py` wrappers. [1157](https://github.com/econ-ark/HARK/pull/1157)
- Adds class `DecayInterp` to `econforgeinterp.py`. It implements interpolators that "decay" to some limiting function when extrapolating. [1165](https://github.com/econ-ark/HARK/pull/1165)
- Add methods to non stochastically simulate an economy by computing transition matrices. Functions to compute transition matrices and ergodic distribution have been added [1155](https://github.com/econ-ark/HARK/pull/1155).
- Fixes a bug that causes `t_age` and `t_cycle` to get out of sync when reading pre-computed mortality. [1181](https://github.com/econ-ark/HARK/pull/1181)
- Adds Methods to calculate Heterogenous Agent Jacobian matrices. [1185](https://github.com/econ-ark/HARK/pull/1185)
- Enhances `combine_indep_dstns` to work with labeled distributions (`DiscreteDistributionLabeled`). [1191](htttps://github.com/econ-ark/HARK/pull/1191)
- Updates the `numpy` random generator from `RandomState` to `Generator`. [1193](https://github.com/econ-ark/HARK/pull/1193)
- Turns the income and income+return distributions into `DiscreteDistributionLabeled` objects. [1189](https://github.com/econ-ark/HARK/pull/1189)
- Creates `UtilityFuncCRRA` which is an object oriented utility function with a coefficient of constant relative risk aversion and includes derivatives and inverses. Also creates `UtilityFuncCobbDouglas`, `UtilityFuncCobbDouglasCRRA`, and `UtilityFuncConstElastSubs`. [1168](https://github.com/econ-ark/HARK/pull/1168)
- Reorganizes `HARK.distribution`. All distributions now inherit all features from `scipy.stats`. New `ContinuousFrozenDistribution` and `DiscreteFrozenDistribution` to use `scipy.stats` distributions not yet implemented in HARK. New `Distribution.discretize(N, method = "***")` replaces `Distribution.approx(N)`. New `DiscreteDistribution.limit` attribute describes continuous origin and discretization method. [1197](https://github.com/econ-ark/HARK/pull/1197).
- Creates new class of _labeled_ models under `ConsLabeledModel` that use xarray for more expressive modeling of underlying mathematical and economics variables. [1177](https://github.com/econ-ark/HARK/pull/1177)
Minor Changes
- Updates the lognormal-income-process constructor from `ConsIndShockModel.py` to use `IndexDistribution`. [1024](https://github.com/econ-ark/HARK/pull/1024), [#1115](https://github.com/econ-ark/HARK/pull/1115)
- Allows for age-varying unemployment probabilities and replacement incomes with the lognormal income process constructor. [1112](https://github.com/econ-ark/HARK/pull/1112)
- Option to have newborn IndShockConsumerType agents with a transitory income shock in the first period. Default is false, meaning they only have a permanent income shock in period 1 and permanent AND transitory in the following ones. [1126](https://github.com/econ-ark/HARK/pull/1126)
- Adds `benchmark` utility to profile the performance of `HARK` solvers. [1131](https://github.com/econ-ark/HARK/pull/1131)
- Fixes scaling bug in Normal equiprobable approximation method. [1139](https://github.com/econ-ark/HARK/pull/1139)
- Removes the extra-dimension that was returned by `calc_expectations` in some instances. [1149](https://github.com/econ-ark/HARK/pull/1149)
- Adds `HARK.distribution.expected` alias for `DiscreteDistribution.expected`. [1156](https://github.com/econ-ark/HARK/pull/1156)
- Renames attributes in `DiscreteDistribution`: `X` to `atoms` and `pmf` to `pmv`. [1164](https://github.com/econ-ark/HARK/pull/1164), [#1051](https://github.com/econ-ark/HARK/pull/1151), [#1159](https://github.com/econ-ark/HARK/pull/1159).
- Remove or replace automated tests that depend on brittle simulation results. [1148](https://github.com/econ-ark/HARK/pull/1148)
- Updates asset grid constructor from `ConsIndShockModel.py` to allow for linearly-spaced grids when `aXtraNestFac == -1`. [1172](https://github.com/econ-ark/HARK/pull/1172)
- Renames `DiscreteDistributionXRA` to `DiscreteDistributionLabeled` and updates methods [1170](https://github.com/econ-ark/HARK/pull/1170)
- Renames `HARK.numba` to `HARK.numba_tools` [1183](https://github.com/econ-ark/HARK/pull/1183)
- Adds the RNG seed as a property of `DiscreteDistributionLabeled` [1184](https://github.com/econ-ark/HARK/pull/1184)
- Updates the `approx` method of `HARK.distributions.Uniform` to include the endpoints of the distribution with infinitesimally small (zero) probability mass. [1180](https://github.com/econ-ark/HARK/pull/1180)
- Refactors tests to incorporate custom precision `HARK_PRECISION = 4`. [1193](https://github.com/econ-ark/HARK/pull/1193)
- Cast `DiscreteDistribution.pmv` attribute as a `np.ndarray`. [1199](https://github.com/econ-ark/HARK/pull/1199)
- Update structure of dynamic interest rate. [1221](https://github.com/econ-ark/HARK/pull/1221)