@@ -1472,6 +1472,103 @@ end
14721472 )
14731473end
14741474
1475+ @testset " Test transform_single_time_series with conflicting Deterministic" begin
1476+ # Test 1: Transformation fails when Deterministic exists with same name, resolution, and features
1477+ sys1 = IS. SystemData ()
1478+ component1 = IS. TestComponent (" Component1" , 1 )
1479+ IS. add_component! (sys1, component1)
1480+
1481+ resolution = Dates. Hour (1 )
1482+ initial_time = Dates. DateTime (" 2020-01-01T00:00:00" )
1483+
1484+ # Add a Deterministic forecast with interval = 1 hour, horizon = 24 hours, 2 windows
1485+ horizon_count = 24
1486+ interval = Dates. Hour (1 )
1487+ other_time = initial_time + interval
1488+ name = " power"
1489+ forecast_data = SortedDict (
1490+ initial_time => ones (horizon_count),
1491+ other_time => ones (horizon_count) * 2 ,
1492+ )
1493+ forecast =
1494+ IS. Deterministic (; data = forecast_data, name = name, resolution = resolution)
1495+ IS. add_time_series! (sys1, component1, forecast)
1496+
1497+ # Add a SingleTimeSeries with the same name, resolution, and no features
1498+ dates = create_dates (" 2020-01-01T00:00:00" , resolution, " 2020-01-02T00:00:00" )
1499+ data = collect (1 : length (dates))
1500+ ta = TimeSeries. TimeArray (dates, data, [IS. get_name (component1)])
1501+ ts = IS. SingleTimeSeries (name, ta)
1502+ IS. add_time_series! (sys1, component1, ts)
1503+
1504+ # Attempt to transform - this should fail because there's already a Deterministic
1505+ # with the same name, resolution, and features
1506+ horizon = horizon_count * resolution
1507+ @test_throws IS. ConflictingInputsError IS. transform_single_time_series! (
1508+ sys1,
1509+ IS. DeterministicSingleTimeSeries,
1510+ horizon,
1511+ interval,
1512+ )
1513+
1514+ # Test 2: Transformation succeeds when features are different
1515+ sys2 = IS. SystemData ()
1516+ component2 = IS. TestComponent (" Component2" , 2 )
1517+ IS. add_component! (sys2, component2)
1518+
1519+ forecast2 =
1520+ IS. Deterministic (; data = forecast_data, name = name, resolution = resolution)
1521+ IS. add_time_series! (sys2, component2, forecast2)
1522+
1523+ ts_with_features = IS. SingleTimeSeries (name, ta)
1524+ IS. add_time_series! (sys2, component2, ts_with_features; scenario = " high" )
1525+
1526+ IS. transform_single_time_series! (
1527+ sys2,
1528+ IS. DeterministicSingleTimeSeries,
1529+ horizon,
1530+ interval,
1531+ )
1532+ @test IS. has_time_series (component2, IS. DeterministicSingleTimeSeries, name)
1533+ @test IS. has_time_series (component2, IS. Deterministic, name)
1534+ @test IS. has_time_series (component2, IS. SingleTimeSeries, name; scenario = " high" )
1535+
1536+ # Test 3: Transformation succeeds when resolution is different
1537+ sys3 = IS. SystemData ()
1538+ component3 = IS. TestComponent (" Component3" , 3 )
1539+ IS. add_component! (sys3, component3)
1540+
1541+ forecast3 =
1542+ IS. Deterministic (; data = forecast_data, name = name, resolution = resolution)
1543+ IS. add_time_series! (sys3, component3, forecast3)
1544+
1545+ # Add SingleTimeSeries with different resolution (30 minutes)
1546+ resolution_30min = Dates. Minute (30 )
1547+ dates_30min =
1548+ create_dates (" 2020-01-01T00:00:00" , resolution_30min, " 2020-01-02T00:00:00" )
1549+ data_30min = collect (1 : length (dates_30min))
1550+ ta_30min = TimeSeries. TimeArray (dates_30min, data_30min, [IS. get_name (component3)])
1551+ ts_different_resolution =
1552+ IS. SingleTimeSeries (name, ta_30min; resolution = resolution_30min)
1553+ IS. add_time_series! (sys3, component3, ts_different_resolution)
1554+
1555+ horizon_30min = 48 * resolution_30min # 24 hours
1556+ interval_30min = Dates. Minute (30 )
1557+ IS. transform_single_time_series! (
1558+ sys3,
1559+ IS. DeterministicSingleTimeSeries,
1560+ horizon_30min,
1561+ interval_30min,
1562+ )
1563+ @test IS. has_time_series (
1564+ component3,
1565+ IS. DeterministicSingleTimeSeries,
1566+ name;
1567+ resolution = resolution_30min,
1568+ )
1569+ @test IS. has_time_series (component3, IS. Deterministic, name; resolution = resolution)
1570+ end
1571+
14751572function _test_add_single_time_series_type (test_value, type_name)
14761573 sys = IS. SystemData ()
14771574 name = " Component1"
0 commit comments