Breakthrough-Energy / Breakthrough-Energy/PowerSimData

Add ability to instantiate a Scenario object via paths to relevant files

Open
#438 0 comments 0 reactions 3 assignees Assigned to @rouille View on GitHub
feature request
Dominant language
Python
Stars
63
Forks
48
PR merge metrics
No merged PRs in 30d

Description

### Motivation/Description

As discussed over Slack, a Scenario in Analyze state is mostly read-only (with the exception of being able to delete the Scenario), providing access to:
- scenario metadata that's retrieved from the ScenarioList
- a Grid object that's parsed from a .mat file
- input profiles
- output time series
- a change table

Instantiating a Scenario in Analyze state currently relies on using the ScenarioList on the 'compute server' to grab the metadata, locate the grid.mat file, locate the output files, and calculate the input profiles from the base profiles and the change table. However, if we can instantiate a Scenario object in an alternate way that still provides the user with access to all of the relevant data, then we can pass this Scenario object to the many analysis and plotting functions in PostREISE without depending on an external machine that has a ScenarioList and organizes the input/output files in a particular way. This could allow alternate organization of the input/output files to suit a user's needs, e.g. all files for one scenario in the same folder rather than named in a particular way in a `raw` folder, a `data/input` folder, a `data/output` folder.

### One design idea

We could create a new `AnalyzeFromFilepaths` class, as a child class of the existing `Analyze` class (so that all of our existing checks on `isinstance(foo, Analyze)` still pass. This new class would overwrite all existing `get_x()` methods.

Similarly, we could create a new `ScenarioFromFilepaths` class as a child class of the existing `Scenario` class. We could instantiate this new `ScenarioFromFilepaths` class in the following pattern:
```python
class Scenario:
...
@staticmethod
def from_filepaths(
*,
grid_model,
interconnect,
grid_filepath,
pg_filepath,
pf_filepath,
lmp_filepath,
congu_filepath,
congl_filepath,
averaged_cong_filepath,
dcline_pf_filepath=None,
storage_pg_filepath=None,
storage_e_filepath=None,
load_shed_filepath=None,
demand_filepath=None,
hydro_filepath=None,
solar_filepath=None,
wind_filepath=None,
base_demand_filepath=None,
base_hydro_filepath=None,
base_solar_filepath=None,
base_wind_filepath=None,
ct=None,
)
```

Then, a Scenario which behaves virtually-identically identically to the current Scenario in Analyze state (with the exception of being able to access certain ScenarioList entries) could be instantiated with:
- All required inputs, plus
- either:
- paths to scaled/appended input profiles, or
- paths to base input profiles, plus a change table

with the call signature `scenario = Scenario.from_filepaths(**kwargs)`.

This could also provide the base for functions which could be given one or more folders (e.g. `outputs_folder`, `inputs_folder` or `base_profiles_folder` + `ct`) and would determine the filepaths automatically and return a `ScenarioFromFilepaths`.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.