def xnpv()

in financial_functions/core.py [0:0]


def xnpv(rate, values=[], dates=[]):
    """
    Calculates the Net Present Value for a schedule of cash flows that is not necessarily periodic.
    """
    if len(values) != len(dates):
        raise ValueError('values and dates must be the same length')
    if sorted(dates) != dates:
        raise ValueError('dates must be in chronological order')
        
    first_date = dates[0]
    return sum([value / ((1 + rate) ** ((date - first_date).days/365.0)) for (value, date) in zip(values, dates)])