Source code for cashflows.taxing

"""
After tax cashflow calculation.
===============================================================================


"""


from cashflows.gtimeseries import *
from cashflows.common import _vars2list


[docs]def after_tax_cashflow(cflo, tax_rate): """ The function `after_tax_cashflow` returns a new cashflow object for which the values are taxed. The specified tax rate is only appled to positive values in the cashflow. Negative values are reemplazed by a zero value. `cflo` and `tax_rate` must have the same length and time specification. Computes the after cashflow for a tax rate. Taxes are not computed for negative values in the cashflow. Args: cflo (TimeSeries): generic cashflow. tax_rate (TimeSeries): periodic income tax rate. Returns: TimeSeries objects with taxed values **Example*** >>> cflo = cashflow(const_value=[100] * 5, spec=(0, -100)) >>> tax_rate = interest_rate(const_value=[10] * 5) >>> after_tax_cashflow(cflo=cflo, tax_rate=tax_rate) # doctest: +NORMALIZE_WHITESPACE Time Series: Start = (0,) End = (4,) pyr = 1 Data = (0,) 0.00 (1,)-(4,) [4] 10.00 """ params = _vars2list([cflo, tax_rate]) cflo = params[0] tax_rate = params[1] retval = [] for xcflo, xtax_rate in zip(cflo, tax_rate): if not isinstance(xcflo, TimeSeries): raise TypeError("cashflow must be a TimeSeries") verify_eq_time_range(xcflo, xtax_rate) result = xcflo.copy() for time, _ in enumerate(xcflo): if result[time] > 0: result[time] *= xtax_rate[time] / 100 else: result[time] = 0 retval.append(result) if len(retval) == 1: return retval[0] return retval
if __name__ == "__main__": import doctest doctest.testmod()