Breakthrough-Energy / Breakthrough-Energy/PowerSimData
Add ability to instantiate a Scenario object via paths to relevant files
- 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.