diff --git a/db/csvs_test_examples/temporal/10_1_w_timepoints_as_horizons/horizon_params.csv b/db/csvs_test_examples/temporal/10_1_w_timepoints_as_horizons/horizon_params.csv index f03e36cf6..ad4f29f35 100644 --- a/db/csvs_test_examples/temporal/10_1_w_timepoints_as_horizons/horizon_params.csv +++ b/db/csvs_test_examples/temporal/10_1_w_timepoints_as_horizons/horizon_params.csv @@ -1,4 +1,4 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -1,timepoint,20200101,circular -1,timepoint,20200102,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +timepoint,20200101,circular +timepoint,20200102,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/10_1_w_timepoints_as_horizons/horizon_timepoints.csv b/db/csvs_test_examples/temporal/10_1_w_timepoints_as_horizons/horizon_timepoints.csv index ecdbc6880..79bb72e1f 100644 --- a/db/csvs_test_examples/temporal/10_1_w_timepoints_as_horizons/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/10_1_w_timepoints_as_horizons/horizon_timepoints.csv @@ -1,4 +1,4 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -1,1,timepoint,20200101,20200101,20200101 -1,1,timepoint,20200102,20200102,20200102 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +1,timepoint,20200101,20200101,0,20200101,0 +1,timepoint,20200102,20200102,0,20200102,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/11_1horizon_1period/horizon_params.csv b/db/csvs_test_examples/temporal/11_1horizon_1period/horizon_params.csv index eff5ef2b0..c8a0e703a 100644 --- a/db/csvs_test_examples/temporal/11_1horizon_1period/horizon_params.csv +++ b/db/csvs_test_examples/temporal/11_1horizon_1period/horizon_params.csv @@ -1,2 +1,2 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/11_1horizon_1period/horizon_timepoints.csv b/db/csvs_test_examples/temporal/11_1horizon_1period/horizon_timepoints.csv index 9a9e71718..ff8e67491 100644 --- a/db/csvs_test_examples/temporal/11_1horizon_1period/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/11_1horizon_1period/horizon_timepoints.csv @@ -1,2 +1,2 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/12_1horizon_2periods_superperiods/horizon_params.csv b/db/csvs_test_examples/temporal/12_1horizon_2periods_superperiods/horizon_params.csv index 28876b13c..f4006c17a 100644 --- a/db/csvs_test_examples/temporal/12_1horizon_2periods_superperiods/horizon_params.csv +++ b/db/csvs_test_examples/temporal/12_1horizon_2periods_superperiods/horizon_params.csv @@ -1,3 +1,3 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -1,day,203001,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,203001,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/12_1horizon_2periods_superperiods/horizon_timepoints.csv b/db/csvs_test_examples/temporal/12_1horizon_2periods_superperiods/horizon_timepoints.csv index 6c895c8b2..6ce8acfc3 100644 --- a/db/csvs_test_examples/temporal/12_1horizon_2periods_superperiods/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/12_1horizon_2periods_superperiods/horizon_timepoints.csv @@ -1,3 +1,3 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -1,1,day,203001,20300101,20300102 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +1,day,203001,20300101,0,20300102,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/13_1horizon_2periods_single_superperiod/horizon_params.csv b/db/csvs_test_examples/temporal/13_1horizon_2periods_single_superperiod/horizon_params.csv index 28876b13c..f4006c17a 100644 --- a/db/csvs_test_examples/temporal/13_1horizon_2periods_single_superperiod/horizon_params.csv +++ b/db/csvs_test_examples/temporal/13_1horizon_2periods_single_superperiod/horizon_params.csv @@ -1,3 +1,3 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -1,day,203001,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,203001,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/13_1horizon_2periods_single_superperiod/horizon_timepoints.csv b/db/csvs_test_examples/temporal/13_1horizon_2periods_single_superperiod/horizon_timepoints.csv index 6c895c8b2..6ce8acfc3 100644 --- a/db/csvs_test_examples/temporal/13_1horizon_2periods_single_superperiod/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/13_1horizon_2periods_single_superperiod/horizon_timepoints.csv @@ -1,3 +1,3 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -1,1,day,203001,20300101,20300102 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +1,day,203001,20300101,0,20300102,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/14_1horizon_2periods_10yrs_w_superperiods/horizon_params.csv b/db/csvs_test_examples/temporal/14_1horizon_2periods_10yrs_w_superperiods/horizon_params.csv index ef9f85b80..3d6ff4e0f 100644 --- a/db/csvs_test_examples/temporal/14_1horizon_2periods_10yrs_w_superperiods/horizon_params.csv +++ b/db/csvs_test_examples/temporal/14_1horizon_2periods_10yrs_w_superperiods/horizon_params.csv @@ -1,9 +1,9 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -1,day,203001,circular -1,year,2020,circular -1,year,2030,circular -1,halfyear,20201,circular -1,halfyear,20202,circular -1,halfyear,20301,circular -1,halfyear,20302,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,203001,circular +year,2020,circular +year,2030,circular +halfyear,20201,circular +halfyear,20202,circular +halfyear,20301,circular +halfyear,20302,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/14_1horizon_2periods_10yrs_w_superperiods/horizon_timepoints.csv b/db/csvs_test_examples/temporal/14_1horizon_2periods_10yrs_w_superperiods/horizon_timepoints.csv index c525b55c8..48a3e5c46 100644 --- a/db/csvs_test_examples/temporal/14_1horizon_2periods_10yrs_w_superperiods/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/14_1horizon_2periods_10yrs_w_superperiods/horizon_timepoints.csv @@ -1,9 +1,9 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -1,1,day,203001,20300101,20300102 -1,1,year,2020,20200101,20200102 -1,1,year,2030,20300101,20300102 -1,1,halfyear,20201,20200101,20200101 -1,1,halfyear,20202,20200102,20200102 -1,1,halfyear,20301,20300101,20300101 -1,1,halfyear,20302,20300102,20300102 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +1,day,203001,20300101,0,20300102,0 +1,year,2020,20200101,0,20200102,0 +1,year,2030,20300101,0,20300102,0 +1,halfyear,20201,20200101,0,20200101,0 +1,halfyear,20202,20200102,0,20200102,0 +1,halfyear,20301,20300101,0,20300101,0 +1,halfyear,20302,20300102,0,20300102,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/15_1horizon_1period_3subproblems_spinup_lookahead/horizon_params.csv b/db/csvs_test_examples/temporal/15_1horizon_1period_3subproblems_spinup_lookahead/horizon_params.csv index eccb63ef9..34d701941 100644 --- a/db/csvs_test_examples/temporal/15_1horizon_1period_3subproblems_spinup_lookahead/horizon_params.csv +++ b/db/csvs_test_examples/temporal/15_1horizon_1period_3subproblems_spinup_lookahead/horizon_params.csv @@ -1,4 +1,4 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -2,day,202002,circular -3,day,202003,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,202002,circular +day,202003,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/15_1horizon_1period_3subproblems_spinup_lookahead/horizon_timepoints.csv b/db/csvs_test_examples/temporal/15_1horizon_1period_3subproblems_spinup_lookahead/horizon_timepoints.csv index 4930e19a4..0a4c055c5 100644 --- a/db/csvs_test_examples/temporal/15_1horizon_1period_3subproblems_spinup_lookahead/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/15_1horizon_1period_3subproblems_spinup_lookahead/horizon_timepoints.csv @@ -1,4 +1,4 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200201 -2,1,day,202002,20200102,20200301 -3,1,day,202003,20200202,20200302 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200201,1 +1,day,202002,20200102,1,20200301,1 +1,day,202003,20200202,1,20200302,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/1_1horizon_1period/horizon_params.csv b/db/csvs_test_examples/temporal/1_1horizon_1period/horizon_params.csv index eff5ef2b0..c8a0e703a 100644 --- a/db/csvs_test_examples/temporal/1_1horizon_1period/horizon_params.csv +++ b/db/csvs_test_examples/temporal/1_1horizon_1period/horizon_params.csv @@ -1,2 +1,2 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/1_1horizon_1period/horizon_timepoints.csv b/db/csvs_test_examples/temporal/1_1horizon_1period/horizon_timepoints.csv index 9a9e71718..ff8e67491 100644 --- a/db/csvs_test_examples/temporal/1_1horizon_1period/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/1_1horizon_1period/horizon_timepoints.csv @@ -1,2 +1,2 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/2_2horizons_1period/horizon_params.csv b/db/csvs_test_examples/temporal/2_2horizons_1period/horizon_params.csv index 2574afcb4..dba336c9d 100644 --- a/db/csvs_test_examples/temporal/2_2horizons_1period/horizon_params.csv +++ b/db/csvs_test_examples/temporal/2_2horizons_1period/horizon_params.csv @@ -1,4 +1,4 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -1,day,202002,circular -1,year,2020,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,202002,circular +year,2020,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/2_2horizons_1period/horizon_timepoints.csv b/db/csvs_test_examples/temporal/2_2horizons_1period/horizon_timepoints.csv index d3aa0b89e..47fd156a9 100644 --- a/db/csvs_test_examples/temporal/2_2horizons_1period/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/2_2horizons_1period/horizon_timepoints.csv @@ -1,4 +1,4 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -1,1,day,202002,20200201,20200202 -1,1,year,2020,20200101,20200202 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +1,day,202002,20200201,0,20200202,0 +1,year,2020,20200101,0,20200202,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/3_1horizon_2periods/horizon_params.csv b/db/csvs_test_examples/temporal/3_1horizon_2periods/horizon_params.csv index 28876b13c..f4006c17a 100644 --- a/db/csvs_test_examples/temporal/3_1horizon_2periods/horizon_params.csv +++ b/db/csvs_test_examples/temporal/3_1horizon_2periods/horizon_params.csv @@ -1,3 +1,3 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -1,day,203001,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,203001,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/3_1horizon_2periods/horizon_timepoints.csv b/db/csvs_test_examples/temporal/3_1horizon_2periods/horizon_timepoints.csv index 6c895c8b2..6ce8acfc3 100644 --- a/db/csvs_test_examples/temporal/3_1horizon_2periods/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/3_1horizon_2periods/horizon_timepoints.csv @@ -1,3 +1,3 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -1,1,day,203001,20300101,20300102 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +1,day,203001,20300101,0,20300102,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/4_1horizon_1period_3subproblems/horizon_params.csv b/db/csvs_test_examples/temporal/4_1horizon_1period_3subproblems/horizon_params.csv index eccb63ef9..34d701941 100644 --- a/db/csvs_test_examples/temporal/4_1horizon_1period_3subproblems/horizon_params.csv +++ b/db/csvs_test_examples/temporal/4_1horizon_1period_3subproblems/horizon_params.csv @@ -1,4 +1,4 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -2,day,202002,circular -3,day,202003,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,202002,circular +day,202003,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/4_1horizon_1period_3subproblems/horizon_timepoints.csv b/db/csvs_test_examples/temporal/4_1horizon_1period_3subproblems/horizon_timepoints.csv index efaf38be8..42e3df110 100644 --- a/db/csvs_test_examples/temporal/4_1horizon_1period_3subproblems/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/4_1horizon_1period_3subproblems/horizon_timepoints.csv @@ -1,4 +1,4 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -2,1,day,202002,20200201,20200202 -3,1,day,202003,20200301,20200302 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +1,day,202002,20200201,0,20200202,0 +1,day,202003,20200301,0,20200302,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/5_1horizon_1period_3subproblems_3stages/horizon_params.csv b/db/csvs_test_examples/temporal/5_1horizon_1period_3subproblems_3stages/horizon_params.csv index eccb63ef9..34d701941 100644 --- a/db/csvs_test_examples/temporal/5_1horizon_1period_3subproblems_3stages/horizon_params.csv +++ b/db/csvs_test_examples/temporal/5_1horizon_1period_3subproblems_3stages/horizon_params.csv @@ -1,4 +1,4 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -2,day,202002,circular -3,day,202003,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,202002,circular +day,202003,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/5_1horizon_1period_3subproblems_3stages/horizon_timepoints.csv b/db/csvs_test_examples/temporal/5_1horizon_1period_3subproblems_3stages/horizon_timepoints.csv index 6fb5ad0bb..97cc3ac5e 100644 --- a/db/csvs_test_examples/temporal/5_1horizon_1period_3subproblems_3stages/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/5_1horizon_1period_3subproblems_3stages/horizon_timepoints.csv @@ -1,10 +1,10 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -1,2,day,202001,20200101,20200102 -1,3,day,202001,20200101,20200102 -2,1,day,202002,20200201,20200202 -2,2,day,202002,20200201,20200202 -2,3,day,202002,20200201,20200202 -3,1,day,202003,20200301,20200302 -3,2,day,202003,20200301,20200302 -3,3,day,202003,20200301,20200302 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +2,day,202001,20200101,0,20200102,0 +3,day,202001,20200101,0,20200102,0 +1,day,202002,20200201,0,20200202,0 +2,day,202002,20200201,0,20200202,0 +3,day,202002,20200201,0,20200202,0 +1,day,202003,20200301,0,20200302,0 +2,day,202003,20200301,0,20200302,0 +3,day,202003,20200301,0,20200302,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/6_1horizon_2periods_10yrs/horizon_params.csv b/db/csvs_test_examples/temporal/6_1horizon_2periods_10yrs/horizon_params.csv index ef9f85b80..3d6ff4e0f 100644 --- a/db/csvs_test_examples/temporal/6_1horizon_2periods_10yrs/horizon_params.csv +++ b/db/csvs_test_examples/temporal/6_1horizon_2periods_10yrs/horizon_params.csv @@ -1,9 +1,9 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -1,day,203001,circular -1,year,2020,circular -1,year,2030,circular -1,halfyear,20201,circular -1,halfyear,20202,circular -1,halfyear,20301,circular -1,halfyear,20302,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,203001,circular +year,2020,circular +year,2030,circular +halfyear,20201,circular +halfyear,20202,circular +halfyear,20301,circular +halfyear,20302,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/6_1horizon_2periods_10yrs/horizon_timepoints.csv b/db/csvs_test_examples/temporal/6_1horizon_2periods_10yrs/horizon_timepoints.csv index c525b55c8..48a3e5c46 100644 --- a/db/csvs_test_examples/temporal/6_1horizon_2periods_10yrs/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/6_1horizon_2periods_10yrs/horizon_timepoints.csv @@ -1,9 +1,9 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -1,1,day,203001,20300101,20300102 -1,1,year,2020,20200101,20200102 -1,1,year,2030,20300101,20300102 -1,1,halfyear,20201,20200101,20200101 -1,1,halfyear,20202,20200102,20200102 -1,1,halfyear,20301,20300101,20300101 -1,1,halfyear,20302,20300102,20300102 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +1,day,203001,20300101,0,20300102,0 +1,year,2020,20200101,0,20200102,0 +1,year,2030,20300101,0,20300102,0 +1,halfyear,20201,20200101,0,20200101,0 +1,halfyear,20202,20200102,0,20200102,0 +1,halfyear,20301,20300101,0,20300101,0 +1,halfyear,20302,20300102,0,20300102,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/7_1horizon_12timepoints/horizon_params.csv b/db/csvs_test_examples/temporal/7_1horizon_12timepoints/horizon_params.csv index db113b50d..79ef8bc40 100644 --- a/db/csvs_test_examples/temporal/7_1horizon_12timepoints/horizon_params.csv +++ b/db/csvs_test_examples/temporal/7_1horizon_12timepoints/horizon_params.csv @@ -1,3 +1,3 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -1,evn_tmp_test,1,circular \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +evn_tmp_test,1,circular \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/7_1horizon_12timepoints/horizon_timepoints.csv b/db/csvs_test_examples/temporal/7_1horizon_12timepoints/horizon_timepoints.csv index 30d936cba..87c751571 100644 --- a/db/csvs_test_examples/temporal/7_1horizon_12timepoints/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/7_1horizon_12timepoints/horizon_timepoints.csv @@ -1,8 +1,8 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200112 -1,1,evn_tmp_test,1,20200102,20200102 -1,1,evn_tmp_test,1,20200104,20200104 -1,1,evn_tmp_test,1,20200106,20200106 -1,1,evn_tmp_test,1,20200108,20200108 -1,1,evn_tmp_test,1,20200110,20200110 -1,1,evn_tmp_test,1,20200112,20200112 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200112,0 +1,evn_tmp_test,1,20200102,0,20200102,0 +1,evn_tmp_test,1,20200104,0,20200104,0 +1,evn_tmp_test,1,20200106,0,20200106,0 +1,evn_tmp_test,1,20200108,0,20200108,0 +1,evn_tmp_test,1,20200110,0,20200110,0 +1,evn_tmp_test,1,20200112,0,20200112,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/horizon_params.csv b/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/horizon_params.csv index f76dfb8cc..1d352c8e8 100644 --- a/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/horizon_params.csv +++ b/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/horizon_params.csv @@ -1,4 +1,4 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -2,day,202002,linked -3,day,202003,linked \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,202002,linked +day,202003,linked \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/horizon_timepoints.csv b/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/horizon_timepoints.csv index efaf38be8..42e3df110 100644 --- a/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/horizon_timepoints.csv @@ -1,4 +1,4 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -2,1,day,202002,20200201,20200202 -3,1,day,202003,20200301,20200302 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +1,day,202002,20200201,0,20200202,0 +1,day,202003,20200301,0,20200302,0 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/period_params.csv b/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/period_params.csv index 269624919..ee91f9c48 100644 --- a/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/period_params.csv +++ b/db/csvs_test_examples/temporal/8_1horizon_1period_3subproblems_linked/period_params.csv @@ -1,2 +1,2 @@ -period,discount_factor,period_start_year,period_end_year +period,discount_factor,period_start_year,period_end_year 2020,1,2020,2021 \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/9_1horizon_1period_3subproblems_3stages_linked/horizon_params.csv b/db/csvs_test_examples/temporal/9_1horizon_1period_3subproblems_3stages_linked/horizon_params.csv index f76dfb8cc..1d352c8e8 100644 --- a/db/csvs_test_examples/temporal/9_1horizon_1period_3subproblems_3stages_linked/horizon_params.csv +++ b/db/csvs_test_examples/temporal/9_1horizon_1period_3subproblems_3stages_linked/horizon_params.csv @@ -1,4 +1,4 @@ -subproblem_id,balancing_type_horizon,horizon,boundary -1,day,202001,circular -2,day,202002,linked -3,day,202003,linked \ No newline at end of file +balancing_type_horizon,horizon,boundary +day,202001,circular +day,202002,linked +day,202003,linked \ No newline at end of file diff --git a/db/csvs_test_examples/temporal/9_1horizon_1period_3subproblems_3stages_linked/horizon_timepoints.csv b/db/csvs_test_examples/temporal/9_1horizon_1period_3subproblems_3stages_linked/horizon_timepoints.csv index 6fb5ad0bb..97cc3ac5e 100644 --- a/db/csvs_test_examples/temporal/9_1horizon_1period_3subproblems_3stages_linked/horizon_timepoints.csv +++ b/db/csvs_test_examples/temporal/9_1horizon_1period_3subproblems_3stages_linked/horizon_timepoints.csv @@ -1,10 +1,10 @@ -subproblem_id,stage_id,balancing_type_horizon,horizon,tmp_start,tmp_end -1,1,day,202001,20200101,20200102 -1,2,day,202001,20200101,20200102 -1,3,day,202001,20200101,20200102 -2,1,day,202002,20200201,20200202 -2,2,day,202002,20200201,20200202 -2,3,day,202002,20200201,20200202 -3,1,day,202003,20200301,20200302 -3,2,day,202003,20200301,20200302 -3,3,day,202003,20200301,20200302 \ No newline at end of file +stage_id,balancing_type_horizon,horizon,tmp_start,tmp_start_spinup_or_lookahead,tmp_end,tmp_end_spinup_or_lookahead +1,day,202001,20200101,0,20200102,0 +2,day,202001,20200101,0,20200102,0 +3,day,202001,20200101,0,20200102,0 +1,day,202002,20200201,0,20200202,0 +2,day,202002,20200201,0,20200202,0 +3,day,202002,20200201,0,20200202,0 +1,day,202003,20200301,0,20200302,0 +2,day,202003,20200301,0,20200302,0 +3,day,202003,20200301,0,20200302,0 \ No newline at end of file diff --git a/db/db_schema.sql b/db/db_schema.sql index 718217dda..30efbbd9e 100644 --- a/db/db_schema.sql +++ b/db/db_schema.sql @@ -1,6 +1,6 @@ -- noinspection SqlNoDataSourceInspectionForFile --- Copyright 2016-2023 Blue Marble Analytics LLC. +-- Copyright 2016-2024 Blue Marble Analytics LLC. -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. @@ -222,7 +222,7 @@ CREATE TABLE subscenarios_temporal description VARCHAR(128) ); --- Subproblems (for production cost modeling) +-- Subproblems DROP TABLE IF EXISTS inputs_temporal_subproblems; CREATE TABLE inputs_temporal_subproblems ( @@ -233,7 +233,7 @@ CREATE TABLE inputs_temporal_subproblems (temporal_scenario_id) ); --- Stages (within subproblems; for production cost modeling) +-- Stages (within subproblems) DROP TABLE IF EXISTS inputs_temporal_subproblems_stages; CREATE TABLE inputs_temporal_subproblems_stages ( @@ -291,8 +291,9 @@ CREATE TABLE inputs_temporal_superperiods -- (subproblem_id + 1) BUT ONLY IF the first horizon of the next subproblem has -- a 'linked' boundary -- The spinup_or_lookahead is not NULL, as we rely on 0s downstream --- TODO: unique key on timepoint/spinup_or_lookahead, as some functionality --- requires unique timepoint IDs +-- There is a unique key on timepoint/spinup_or_lookahead, as some functionality +-- requires unique timepoint IDs, but we want to allow for the same +-- timepoint IDs to be duplicated if they are spinup/lookahead timepoints DROP TABLE IF EXISTS inputs_temporal; CREATE TABLE inputs_temporal ( @@ -310,6 +311,7 @@ CREATE TABLE inputs_temporal hour_of_day FLOAT, -- FLOAT to accommodate subhourly timepoints timestamp DATETIME, PRIMARY KEY (temporal_scenario_id, subproblem_id, stage_id, timepoint), + UNIQUE (temporal_scenario_id, stage_id, timepoint, spinup_or_lookahead), FOREIGN KEY (temporal_scenario_id) REFERENCES subscenarios_temporal (temporal_scenario_id), -- Make sure period exists in this temporal_scenario_id @@ -328,16 +330,15 @@ CREATE TABLE inputs_temporal -- subproblem can be a week and have days as horizons and another one -- can be a week and have the week as horizon), but will have to be same for -- each stage of a subproblem +-- Balancing_type-horizons within DROP TABLE IF EXISTS inputs_temporal_horizons; CREATE TABLE inputs_temporal_horizons ( temporal_scenario_id INTEGER, - subproblem_id INTEGER, balancing_type_horizon VARCHAR(32), horizon INTEGER, boundary VARCHAR(16), - PRIMARY KEY (temporal_scenario_id, subproblem_id, balancing_type_horizon, - horizon), + PRIMARY KEY (temporal_scenario_id, balancing_type_horizon, horizon), FOREIGN KEY (temporal_scenario_id) REFERENCES subscenarios_temporal (temporal_scenario_id), -- Make sure boundary type is correct @@ -352,26 +353,32 @@ CREATE TABLE inputs_temporal_horizons DROP TABLE IF EXISTS inputs_temporal_horizon_timepoints_start_end; CREATE TABLE inputs_temporal_horizon_timepoints_start_end ( - temporal_scenario_id INTEGER, - subproblem_id INTEGER, - stage_id INTEGER, - balancing_type_horizon VARCHAR(32), - horizon INTEGER, - tmp_start INTEGER, - tmp_end INTEGER, - PRIMARY KEY (temporal_scenario_id, subproblem_id, stage_id, - balancing_type_horizon, horizon, tmp_start, tmp_end), + temporal_scenario_id INTEGER, + stage_id INTEGER, + balancing_type_horizon VARCHAR(32), + horizon INTEGER, + tmp_start INTEGER, + tmp_start_spinup_or_lookahead INTEGER NOT NULL DEFAULT 0, + tmp_end INTEGER, + tmp_end_spinup_or_lookahead INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY (temporal_scenario_id, stage_id, balancing_type_horizon, + horizon, tmp_start, tmp_start_spinup_or_lookahead, + tmp_end, tmp_end_spinup_or_lookahead), FOREIGN KEY (temporal_scenario_id) REFERENCES subscenarios_temporal (temporal_scenario_id), + -- Make sure we have the right balancing_type-horizons + FOREIGN KEY (temporal_scenario_id, balancing_type_horizon, horizon) + REFERENCES inputs_temporal_horizons (temporal_scenario_id, + balancing_type_horizon, horizon), -- Make sure the start and end timepoints exist in the main timepoints table - FOREIGN KEY (temporal_scenario_id, subproblem_id, stage_id, tmp_start) - REFERENCES inputs_temporal (temporal_scenario_id, subproblem_id, - stage_id, - timepoint), - FOREIGN KEY (temporal_scenario_id, subproblem_id, stage_id, tmp_end) - REFERENCES inputs_temporal (temporal_scenario_id, subproblem_id, - stage_id, - timepoint) + FOREIGN KEY (temporal_scenario_id, stage_id, tmp_start, + tmp_start_spinup_or_lookahead) + REFERENCES inputs_temporal (temporal_scenario_id, stage_id, timepoint, + spinup_or_lookahead), + FOREIGN KEY (temporal_scenario_id, stage_id, tmp_end, + tmp_end_spinup_or_lookahead) + REFERENCES inputs_temporal (temporal_scenario_id, stage_id, timepoint, + spinup_or_lookahead) ); -- This table is what GridPath uses to get inputs @@ -393,10 +400,8 @@ CREATE TABLE inputs_temporal_horizon_timepoints REFERENCES inputs_temporal (temporal_scenario_id, subproblem_id, stage_id, timepoint), -- Make sure horizons exist in this temporal_scenario_id and subproblem_id - FOREIGN KEY (temporal_scenario_id, subproblem_id, balancing_type_horizon, - horizon) + FOREIGN KEY (temporal_scenario_id, balancing_type_horizon, horizon) REFERENCES inputs_temporal_horizons (temporal_scenario_id, - subproblem_id, balancing_type_horizon, horizon) ); @@ -773,8 +778,8 @@ DROP TABLE IF EXISTS subscenarios_system_carbon_credits_prices; CREATE TABLE subscenarios_system_carbon_credits_prices ( carbon_credits_price_scenario_id INTEGER PRIMARY KEY AUTOINCREMENT, - name VARCHAR(32), - description VARCHAR(128) + name VARCHAR(32), + description VARCHAR(128) ); DROP TABLE IF EXISTS inputs_system_carbon_credits_prices; @@ -1577,21 +1582,21 @@ CREATE TABLE inputs_project_hydro_operational_chars DROP TABLE IF EXISTS subscenarios_project_stor_exog_state_of_charge; CREATE TABLE subscenarios_project_stor_exog_state_of_charge ( - project VARCHAR(64), + project VARCHAR(64), stor_exog_state_of_charge_scenario_id INTEGER, - name VARCHAR(32), - description VARCHAR(128), + name VARCHAR(32), + description VARCHAR(128), PRIMARY KEY (project, stor_exog_state_of_charge_scenario_id) ); DROP TABLE IF EXISTS inputs_project_stor_exog_state_of_charge; CREATE TABLE inputs_project_stor_exog_state_of_charge ( - project VARCHAR(64), + project VARCHAR(64), stor_exog_state_of_charge_scenario_id INTEGER, - stage_id INTEGER, - timepoint INTEGER, - exog_state_of_charge_mwh FLOAT, + stage_id INTEGER, + timepoint INTEGER, + exog_state_of_charge_mwh FLOAT, PRIMARY KEY (project, stor_exog_state_of_charge_scenario_id, stage_id, timepoint), FOREIGN KEY (project, stor_exog_state_of_charge_scenario_id) REFERENCES @@ -3857,7 +3862,7 @@ CREATE TABLE scenarios (carbon_tax_zones_carbon_credits_zones_scenario_id), FOREIGN KEY (carbon_credits_price_scenario_id) REFERENCES subscenarios_system_carbon_credits_prices - (carbon_credits_price_scenario_id), + (carbon_credits_price_scenario_id), FOREIGN KEY (fuel_burn_limit_ba_scenario_id) REFERENCES subscenarios_geography_fuel_burn_limit_balancing_areas (fuel_burn_limit_ba_scenario_id), @@ -3920,7 +3925,7 @@ CREATE TABLE scenarios (project_carbon_credits_zone_scenario_id), FOREIGN KEY (project_carbon_credits_scenario_id) REFERENCES subscenarios_project_carbon_credits - (project_carbon_credits_scenario_id), + (project_carbon_credits_scenario_id), FOREIGN KEY (project_fuel_burn_limit_ba_scenario_id) REFERENCES subscenarios_project_fuel_burn_limit_balancing_areas (project_fuel_burn_limit_ba_scenario_id), @@ -4960,20 +4965,21 @@ CREATE TABLE results_system_performance_standard DROP TABLE IF EXISTS results_system_carbon_credits; CREATE TABLE results_system_carbon_credits ( - scenario_id INTEGER, - carbon_credits_zone VARCHAR(64), - period INTEGER, - subproblem_id INTEGER, - stage_id INTEGER, - discount_factor FLOAT, - number_years_represented FLOAT, - project_generated_credits FLOAT, - carbon_cap_zone_purchases FLOAT, - carbon_tax_zone_purchases FLOAT, - performance_standard_zone_purchases FLOAT, - sell_credits FLOAT, - available_carbon_credits FLOAT, - PRIMARY KEY (scenario_id, carbon_credits_zone, subproblem_id, stage_id, period) + scenario_id INTEGER, + carbon_credits_zone VARCHAR(64), + period INTEGER, + subproblem_id INTEGER, + stage_id INTEGER, + discount_factor FLOAT, + number_years_represented FLOAT, + project_generated_credits FLOAT, + carbon_cap_zone_purchases FLOAT, + carbon_tax_zone_purchases FLOAT, + performance_standard_zone_purchases FLOAT, + sell_credits FLOAT, + available_carbon_credits FLOAT, + PRIMARY KEY (scenario_id, carbon_credits_zone, subproblem_id, stage_id, + period) ); -- Energy target balance @@ -5597,7 +5603,6 @@ FROM ( DROP VIEW IF EXISTS periods_horizons; CREATE VIEW periods_horizons AS SELECT DISTINCT temporal_scenario_id, - subproblem_id, stage_id, balancing_type_horizon, period, @@ -5605,41 +5610,7 @@ SELECT DISTINCT temporal_scenario_id, FROM inputs_temporal INNER JOIN inputs_temporal_horizon_timepoints - USING (temporal_scenario_id, subproblem_id, stage_id, timepoint) -; - - --- This view shows the possible operational horizons for each project based --- based on its operational periods (see project_operational_periods), its --- balancing type, and the periods-horizons mapping for that balancing type --- (see periods_horizons). It also includes the operational type and the --- hydro_operational_chars_scenario_id, since these are useful to slice out --- operational types of interest (namely hydro) and join the hydro inputs, --- which are indexed by project-horizon. -DROP VIEW IF EXISTS project_operational_horizons; -CREATE VIEW project_operational_horizons AS -SELECT project_portfolio_scenario_id, - project_operational_chars_scenario_id, - project_specified_capacity_scenario_id, - project_new_cost_scenario_id, - temporal_scenario_id, - operational_type, - hydro_operational_chars_scenario_id, - subproblem_id, - stage_id, - project, - horizon --- Get all projects in the portfolio (with their opchars) -FROM project_portfolio_opchars --- Add all the periods horizons for the matching balancing type - LEFT OUTER JOIN - periods_horizons - ON (project_portfolio_opchars.balancing_type_project - = periods_horizons.balancing_type_horizon) --- Only select horizons from the actual operational periods - INNER JOIN - project_operational_periods - USING (temporal_scenario_id, project, period) + USING (temporal_scenario_id, stage_id, timepoint) ; diff --git a/db/utilities/custom_functions.py b/db/utilities/custom_functions.py index 61a34152f..9c22f0e92 100644 --- a/db/utilities/custom_functions.py +++ b/db/utilities/custom_functions.py @@ -1,4 +1,4 @@ -# Copyright 2016-2023 Blue Marble Analytics LLC. +# Copyright 2016-2024 Blue Marble Analytics LLC. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -54,58 +54,73 @@ def temporal(conn, subscenario_id): ) # TIMEPOINT HORIZONS - sid_stg_bt_hr_sql = """ - SELECT subproblem_id, stage_id, balancing_type_horizon, horizon - FROM inputs_temporal_horizons - JOIN inputs_temporal_subproblems_stages - USING (temporal_scenario_id, subproblem_id) - WHERE temporal_scenario_id = ? + subproblem_stages = c.execute( + f""" + SELECT subproblem_id, stage_id + FROM inputs_temporal_subproblems_stages + WHERE temporal_scenario_id = {subscenario_id} """ - sid_stg_bt_hr = c.execute(sid_stg_bt_hr_sql, (subscenario_id,)).fetchall() + ).fetchall() - hor_tmps_tuples_list = list() - for sid, stage, bt, hr in sid_stg_bt_hr: - tmp_start_tmp_end = c.execute( - """SELECT tmp_start, tmp_end + # For each subproblem-stage, figure out how the timepoints are organized + # into horizons + for subproblem, stage in subproblem_stages: + # Find the relevant balancing_type-horizons for this subproblem, stage + bt_hr_sql = f""" + SELECT balancing_type_horizon, horizon, tmp_start, tmp_end FROM inputs_temporal_horizon_timepoints_start_end - WHERE temporal_scenario_id = ? - AND subproblem_id = ? - AND stage_id = ? - AND balancing_type_horizon = ? - AND horizon = ?""", - (subscenario_id, sid, stage, bt, hr), - ).fetchall() + WHERE temporal_scenario_id = {subscenario_id} + AND stage_id = {stage} + AND (tmp_start, tmp_start_spinup_or_lookahead) in ( + SELECT timepoint, spinup_or_lookahead + FROM inputs_temporal + WHERE temporal_scenario_id = {subscenario_id} + AND subproblem_id = {subproblem} + AND stage_id = {stage} + ) + AND (tmp_end, tmp_end_spinup_or_lookahead) in ( + SELECT timepoint, spinup_or_lookahead + FROM inputs_temporal + WHERE temporal_scenario_id = {subscenario_id} + AND subproblem_id = {subproblem} + AND stage_id = {stage} + ) + ; + """ + + bt_hr = c.execute(bt_hr_sql, ()).fetchall() + + hor_tmps_tuples_list = list() - tmps = [] - for tmp_start, tmp_end in tmp_start_tmp_end: - tmps += [ - tmp + for bt, hr, tmp_start, tmp_end in bt_hr: + sid_tmps = [ + tmp[0] for tmp in c.execute( - """ + f""" SELECT timepoint FROM inputs_temporal - WHERE temporal_scenario_id = ? - AND subproblem_id = ? - AND stage_id = ? - AND timepoint >= ? - AND timepoint <= ? - """, - (subscenario_id, sid, stage, tmp_start, tmp_end), + WHERE temporal_scenario_id = {subscenario_id} + AND subproblem_id = {subproblem} + AND stage_id = {stage} + AND timepoint >= {tmp_start} + AND timepoint <= {tmp_end} + ; + """ ).fetchall() ] - for tmp_tuple in tmps: - tmp = tmp_tuple[0] + for tmp in sid_tmps: + hor_tmps_tuples_list.append( + (subscenario_id, subproblem, stage, tmp, bt, hr) + ) - hor_tmps_tuples_list.append((subscenario_id, sid, stage, tmp, bt, hr)) + horizon_timepoints_sql = """ + INSERT INTO inputs_temporal_horizon_timepoints + (temporal_scenario_id, subproblem_id, stage_id, timepoint, + balancing_type_horizon, horizon) + VALUES (?, ?, ?, ?, ?, ?); + """ - horizon_timepoints_sql = """ - INSERT INTO inputs_temporal_horizon_timepoints - (temporal_scenario_id, subproblem_id, stage_id, timepoint, - balancing_type_horizon, horizon) - VALUES (?, ?, ?, ?, ?, ?); - """ - - spin_on_database_lock( - conn=conn, cursor=c, sql=horizon_timepoints_sql, data=hor_tmps_tuples_list - ) + spin_on_database_lock( + conn=conn, cursor=c, sql=horizon_timepoints_sql, data=hor_tmps_tuples_list + ) diff --git a/examples/multi_stage_prod_cost_linked_subproblems/linked_subproblems_map.csv b/examples/multi_stage_prod_cost_linked_subproblems/linked_subproblems_map.csv index 42c029a2b..eabdc1422 100644 --- a/examples/multi_stage_prod_cost_linked_subproblems/linked_subproblems_map.csv +++ b/examples/multi_stage_prod_cost_linked_subproblems/linked_subproblems_map.csv @@ -1,13 +1,13 @@ subproblem,stage,timepoint,subproblem_to_link,linked_timepoint,number_of_hours_in_timepoint 1,1,20200101,2,-1,1 1,1,20200102,2,0,1 -1,2,20200101,2,-1,1 -1,2,20200102,2,0,1 -1,3,20200101,2,-1,1 -1,3,20200102,2,0,1 2,1,20200201,3,-1,1 2,1,20200202,3,0,1 +1,2,20200101,2,-1,1 +1,2,20200102,2,0,1 2,2,20200201,3,-1,1 2,2,20200202,3,0,1 +1,3,20200101,2,-1,1 +1,3,20200102,2,0,1 2,3,20200201,3,-1,1 2,3,20200202,3,0,1 diff --git a/gridpath/project/operations/operational_types/common_functions.py b/gridpath/project/operations/operational_types/common_functions.py index ef05b1b50..378e1f18f 100644 --- a/gridpath/project/operations/operational_types/common_functions.py +++ b/gridpath/project/operations/operational_types/common_functions.py @@ -1,4 +1,4 @@ -# Copyright 2016-2023 Blue Marble Analytics LLC. +# Copyright 2016-2024 Blue Marble Analytics LLC. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -687,44 +687,39 @@ def get_hydro_inputs_from_database( c = conn.cursor() - # NOTE: There can be cases where a resource is both in specified capacity - # table and in new build table, but depending on capacity type you'd only - # use one of them, so filtering with OR is not 100% correct. - - sql = """ - SELECT project, horizon, average_power_fraction, min_power_fraction, + sql = f""" + SELECT project, prj_tbl.horizon, average_power_fraction, min_power_fraction, max_power_fraction - -- Select only projects, horizons from the relevant portfolio, - -- relevant opchar scenario id, operational type, and temporal scenario id - FROM - (SELECT project, horizon, hydro_operational_chars_scenario_id - FROM project_operational_horizons - WHERE project_portfolio_scenario_id = {} - AND project_operational_chars_scenario_id = {} - AND operational_type = '{}' - AND temporal_scenario_id = {} - AND (project_specified_capacity_scenario_id = {} - OR project_new_cost_scenario_id = {}) - AND subproblem_id = {} - AND stage_id = {} - ) as projects_periods_horizon_tbl - -- Now that we have the relevant projects and horizons, get the - -- respective hydro opchars (and no others) from - -- inputs_project_hydro_operational_chars - LEFT OUTER JOIN - inputs_project_hydro_operational_chars - USING (hydro_operational_chars_scenario_id, project, horizon) - ; - """.format( - subscenarios.PROJECT_PORTFOLIO_SCENARIO_ID, - subscenarios.PROJECT_OPERATIONAL_CHARS_SCENARIO_ID, - op_type, - subscenarios.TEMPORAL_SCENARIO_ID, - subscenarios.PROJECT_SPECIFIED_CAPACITY_SCENARIO_ID, - subscenarios.PROJECT_NEW_COST_SCENARIO_ID, - subproblem, - stage, + FROM ( + SELECT project, balancing_type_project, horizon, average_power_fraction, + min_power_fraction, max_power_fraction + FROM inputs_project_hydro_operational_chars + WHERE project in ( + SELECT project + FROM inputs_project_portfolios + WHERE project_portfolio_scenario_id = {subscenarios.PROJECT_PORTFOLIO_SCENARIO_ID} + ) + -- Get the right opchar + AND (project, hydro_operational_chars_scenario_id) in ( + SELECT project, hydro_operational_chars_scenario_id + FROM inputs_project_operational_chars + WHERE project_operational_chars_scenario_id + = {subscenarios.PROJECT_OPERATIONAL_CHARS_SCENARIO_ID} + ) + ) as prj_tbl + JOIN ( + SELECT DISTINCT balancing_type_horizon, horizon + FROM inputs_temporal_horizon_timepoints + WHERE temporal_scenario_id = {subscenarios.TEMPORAL_SCENARIO_ID} + AND subproblem_id = {subproblem} + AND stage_id = {stage} + ) as hrz_tbl + ON ( + balancing_type_project = balancing_type_horizon + AND prj_tbl.horizon = hrz_tbl.horizon ) + ; + """ hydro_chars = c.execute(sql) diff --git a/gridpath/temporal/operations/horizons.py b/gridpath/temporal/operations/horizons.py index 9dd941783..f958d2725 100644 --- a/gridpath/temporal/operations/horizons.py +++ b/gridpath/temporal/operations/horizons.py @@ -391,26 +391,28 @@ def get_inputs_from_database(scenario_id, subscenarios, subproblem, stage, conn) stage = 1 if stage == "" else stage c1 = conn.cursor() horizons = c1.execute( - """SELECT horizon, balancing_type_horizon, boundary + f"""SELECT horizon, balancing_type_horizon, boundary FROM inputs_temporal_horizons - WHERE temporal_scenario_id = {} - AND subproblem_id = {} - ORDER BY balancing_type_horizon, horizon; - """.format( - subscenarios.TEMPORAL_SCENARIO_ID, subproblem, stage + WHERE temporal_scenario_id = {subscenarios.TEMPORAL_SCENARIO_ID} + AND (balancing_type_horizon, horizon) in ( + SELECT DISTINCT balancing_type_horizon, horizon + FROM inputs_temporal_horizon_timepoints + WHERE temporal_scenario_id = {subscenarios.TEMPORAL_SCENARIO_ID} + AND subproblem_id = {subproblem} + AND stage_id = {stage} ) + ORDER BY balancing_type_horizon, horizon; + """ ) c2 = conn.cursor() horizon_timepoints = c2.execute( - """SELECT horizon, balancing_type_horizon, timepoint + f"""SELECT horizon, balancing_type_horizon, timepoint FROM inputs_temporal_horizon_timepoints - WHERE temporal_scenario_id = {} - AND subproblem_id = {} - AND stage_id = {} - ORDER BY balancing_type_horizon, timepoint;""".format( - subscenarios.TEMPORAL_SCENARIO_ID, subproblem, stage - ) + WHERE temporal_scenario_id = {subscenarios.TEMPORAL_SCENARIO_ID} + AND subproblem_id = {subproblem} + AND stage_id = {stage} + ORDER BY balancing_type_horizon, timepoint;""" ) return horizons, horizon_timepoints @@ -495,7 +497,6 @@ def validate_inputs(scenario_id, subscenarios, subproblem, stage, conn): SELECT balancing_type_horizon, period, horizon FROM periods_horizons WHERE temporal_scenario_id = {} - AND subproblem_id = {} and stage_id = {} """.format( subscenarios.TEMPORAL_SCENARIO_ID, subproblem, stage