Source code for cashflows.inflation

"""
Constant dollar transformations
===============================================================================

Overview
-------------------------------------------------------------------------------


The function ``const2curr`` computes the equivalent generic cashflow in current
dollars from a generic cashflow in constant dollars of the date given by
``base_date``. ``inflation`` is the inflation rate per compounding period.
``curr2const`` computes the inverse transformation.


Functions in this module
-------------------------------------------------------------------------------



"""
import pandas as pd

# cashflows.
from cashflows.timeseries import *
from cashflows.rate import *
from cashflows.common import *


[docs]def const2curr(cflo, inflation, base_date=0): """Converts a cashflow of constant dollars to current dollars of the time `base_date`. Args: cflo (pandas.Series): Generic cashflow. inflation (pandas.Series): Inflation rate per compounding period. base_date (int, str): base date. Returns: A cashflow in current money (pandas.Series) **Examples.** >>> cflo=cashflow(const_value=[100] * 5, start='2000', freq='A') >>> inflation=interest_rate(const_value=[10, 10, 20, 20, 20], start='2000', freq='A') >>> const2curr(cflo=cflo, inflation=inflation) # doctest: +NORMALIZE_WHITESPACE 2000 100.00 2001 110.00 2002 132.00 2003 158.40 2004 190.08 Freq: A-DEC, dtype: float64 >>> const2curr(cflo=cflo, inflation=inflation, base_date=0) # doctest: +NORMALIZE_WHITESPACE 2000 100.00 2001 110.00 2002 132.00 2003 158.40 2004 190.08 Freq: A-DEC, dtype: float64 >>> const2curr(cflo=cflo, inflation=inflation, base_date='2000') # doctest: +NORMALIZE_WHITESPACE 2000 100.00 2001 110.00 2002 132.00 2003 158.40 2004 190.08 Freq: A-DEC, dtype: float64 >>> const2curr(cflo=cflo, inflation=inflation, base_date=4) # doctest: +NORMALIZE_WHITESPACE 2000 52.609428 2001 57.870370 2002 69.444444 2003 83.333333 2004 100.000000 Freq: A-DEC, dtype: float64 >>> const2curr(cflo=cflo, inflation=inflation, base_date='2004') # doctest: +NORMALIZE_WHITESPACE 2000 52.609428 2001 57.870370 2002 69.444444 2003 83.333333 2004 100.000000 Freq: A-DEC, dtype: float64 """ if not isinstance(cflo, pd.Series): raise TypeError("cflo must be a TimeSeries object") if not isinstance(inflation, pd.Series): raise TypeError("inflation must be a TimeSeries object") verify_period_range([cflo, inflation]) factor = to_compound_factor(prate=inflation, base_date=base_date) result = cflo.copy() for time, _ in enumerate(result): result[time] *= factor[time] return result
[docs]def curr2const(cflo, inflation, base_date=0): """Converts a cashflow of current dollars to constant dollars of the date `base_date`. Args: cflo (pandas.Series): Generic cashflow. inflation_rate (float, pandas.Series): Inflation rate per compounding period. base_date (int): base time.. Returns: A cashflow in constant dollars >>> cflo = cashflow(const_value=[100] * 5, start='2015', freq='A') >>> inflation = interest_rate(const_value=[10, 10, 20, 20, 20], start='2015', freq='A') >>> curr2const(cflo=cflo, inflation=inflation) # doctest: +NORMALIZE_WHITESPACE 2015 100.000000 2016 90.909091 2017 75.757576 2018 63.131313 2019 52.609428 Freq: A-DEC, dtype: float64 >>> curr2const(cflo=cflo, inflation=inflation, base_date=4) # doctest: +NORMALIZE_WHITESPACE 2015 190.08 2016 172.80 2017 144.00 2018 120.00 2019 100.00 Freq: A-DEC, dtype: float64 >>> curr2const(cflo=cflo, inflation=inflation, base_date='2017') # doctest: +NORMALIZE_WHITESPACE 2015 132.000000 2016 120.000000 2017 100.000000 2018 83.333333 2019 69.444444 Freq: A-DEC, dtype: float64 """ if not isinstance(cflo, pd.Series): raise TypeError("cflo must be a TimeSeries object") if not isinstance(inflation, pd.Series): raise TypeError("inflation must be a TimeSeries object") verify_period_range([cflo, inflation]) factor = to_discount_factor(prate=inflation, base_date=base_date) result = cflo.copy() for time, _ in enumerate(result): result[time] *= factor[time] return result
if __name__ == "__main__": import doctest doctest.testmod()