(forecast: Forecast, target: Target)
return 200 * np.abs(forecast - target) / (target + forecast)
sMAPE loss as defined in "Appendix A" of
    http://www.forecastingprinciples.com/files/pdf/Makridakia-The%20M3%20Competition.pdf

    :param forecast: Forecast values. Shape: batch, time
    :param target: Target values. Shape: batch, time
    :return: Same shape array with error calculated for each time step
sMAPE loss as defined in "Appendix A" of
    http://www.forecastingprinciples.com/files/pdf/Makridakia-The%20M3%20Competition.pdf
sMAPE loss as defined in Appendix A of http : // www . forecastingprinciples . com / files / pdf / Makridakia - The%20M3%20Competition . pdf
def smape_1(forecast: Forecast, target: Target) -> np.ndarray:
    """
    sMAPE loss as defined in "Appendix A" of
    http://www.forecastingprinciples.com/files/pdf/Makridakia-The%20M3%20Competition.pdf

    :param forecast: Forecast values. Shape: batch, time
    :param target: Target values. Shape: batch, time
    :return: Same shape array with error calculated for each time step
    """
    return 200 * np.abs(forecast - target) / (target + forecast)
def smape_1 ( forecast : Forecast , target : Target ) -> np . ndarray : return 200 * np . abs ( forecast - target ) / ( target + forecast )