예제 #1
0
def test_DistributionForecast():
    forecast = DistributionForecast(
        distribution=Uniform(
            low=torch.tensor([0.0, 0.0]), high=torch.tensor([1.0, 2.0])
        ),
        start_date=START_DATE,
    )

    def percentile(value):
        return f"p{int(round(value * 100)):02d}"

    for quantile in QUANTILES:
        test_cases = [quantile, str(quantile), percentile(quantile)]
        for quant_pred in map(forecast.quantile, test_cases):
            expected = quantile * np.array([1.0, 2.0])
            assert np.allclose(
                quant_pred, expected
            ), f"Expected {percentile(quantile)} quantile {quantile}. Obtained {quant_pred}."

    pred_length = 2
    assert forecast.prediction_length == pred_length
    assert len(forecast.index) == pred_length
    assert forecast.index[0] == START_DATE
예제 #2
0
def _(distr: torch.distributions.Distribution, *args,
      **kwargs) -> DistributionForecast:
    return DistributionForecast(distr, *args, **kwargs)
예제 #3
0
import pytest
import torch
from torch.distributions import Uniform

# First-party imports
from gluonts.model.forecast import SampleForecast
from gluonts.torch.model.forecast import DistributionForecast

QUANTILES = np.arange(1, 100) / 100
SAMPLES = np.arange(101).reshape(101, 1) / 100
START_DATE = pd.Period(pd.Timestamp(2017, 1, 1, 12), "1D")
FREQ = "1D"

FORECASTS = {
    "DistributionForecast": DistributionForecast(
        distribution=Uniform(low=torch.zeros(1), high=torch.ones(1)),
        start_date=START_DATE,
    ),
}


@pytest.mark.parametrize("name", FORECASTS.keys())
def test_Forecast(name):
    forecast = FORECASTS[name]

    def percentile(value):
        return f"p{int(round(value * 100)):02d}"

    num_samples, pred_length = SAMPLES.shape

    for quantile in QUANTILES:
        test_cases = [quantile, str(quantile), percentile(quantile)]
예제 #4
0
# First-party imports
from gluonts.model.forecast import SampleForecast
from gluonts.torch.model.forecast import DistributionForecast

QUANTILES = np.arange(1, 100) / 100
SAMPLES = np.arange(101).reshape(101, 1) / 100
START_DATE = pd.Timestamp(2017, 1, 1, 12)
FREQ = "1D"

FORECASTS = {
    "SampleForecast":
    SampleForecast(samples=SAMPLES, start_date=START_DATE, freq=FREQ),
    "DistributionForecast":
    DistributionForecast(
        distribution=Uniform(low=torch.zeros(1), high=torch.ones(1)),
        start_date=START_DATE,
        freq=FREQ,
    ),
}


@pytest.mark.parametrize("name", FORECASTS.keys())
def test_Forecast(name):
    forecast = FORECASTS[name]

    def percentile(value):
        return f"p{int(round(value * 100)):02d}"

    num_samples, pred_length = SAMPLES.shape

    for quantile in QUANTILES: