def mirr_handler()

in financial_functions/lambda_handlers.py [0:0]


def mirr_handler(request, context):
    """
    Modified Internal Rate of Return calculation.
    :param request: Dict containing the parameters to pass to the formula.
    :param context: Lambda execution context
    :return: Dict with a 'result' entry containing the result of the calculation
    """
    logger.info("MIRR request: {}".format(request))

    validation_result = __validate_arguments('MIRR', request, schemas.mirr_schema)
    if not validation_result.get('isValid'):
        return {'error': validation_result.get('error')}
        
    # MIRR requires at least one positive and one negative value
    sorted_values = sorted(request.get('values'))
    values_length = len(request.get('values'))
    if sorted_values[0] > 0 or sorted_values[values_length - 1] <= 0:
        return {'error': "MIRR requires at least one positive and one negative value"}

    args = [request['values'], request['finance_rate'], request['reinvest_rate']]
    return __call_numpy('mirr', args)