forked from NREL/HOPP
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
LCA cambium related - added default cambium files, updated resource _…
…_init__, added cambium_data.py, updated pyproject.toml to include pytest-dependency, added test_cambium_resource.py, updated tests/hopp/utils.py with default cambium file
- Loading branch information
1 parent
14ec697
commit 179a9f5
Showing
11 changed files
with
52,978 additions
and
0 deletions.
There are no files selected for viewing
8,761 changes: 8,761 additions & 0 deletions
8,761
...tion/resource_files/cambium/Cambium23_MidCase100by2035_hourly_West_Connect_North_2025.csv
Large diffs are not rendered by default.
Oops, something went wrong.
8,761 changes: 8,761 additions & 0 deletions
8,761
...tion/resource_files/cambium/Cambium23_MidCase100by2035_hourly_West_Connect_North_2030.csv
Large diffs are not rendered by default.
Oops, something went wrong.
8,761 changes: 8,761 additions & 0 deletions
8,761
...tion/resource_files/cambium/Cambium23_MidCase100by2035_hourly_West_Connect_North_2035.csv
Large diffs are not rendered by default.
Oops, something went wrong.
8,761 changes: 8,761 additions & 0 deletions
8,761
...tion/resource_files/cambium/Cambium23_MidCase100by2035_hourly_West_Connect_North_2040.csv
Large diffs are not rendered by default.
Oops, something went wrong.
8,761 changes: 8,761 additions & 0 deletions
8,761
...tion/resource_files/cambium/Cambium23_MidCase100by2035_hourly_West_Connect_North_2045.csv
Large diffs are not rendered by default.
Oops, something went wrong.
8,761 changes: 8,761 additions & 0 deletions
8,761
...tion/resource_files/cambium/Cambium23_MidCase100by2035_hourly_West_Connect_North_2050.csv
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
import pytest | ||
import os | ||
import json | ||
import re | ||
import glob | ||
import pandas as pd | ||
import requests | ||
|
||
from hopp import ROOT_DIR | ||
from hopp.simulation.technologies.resource import CambiumData | ||
from hopp.simulation.technologies.resource.cambium_data import CAMBIUM_BASE_URL | ||
from tests.hopp.utils import DEFAULT_CAMBIUM_DATA_FILE | ||
|
||
# Obtain list of default cambium files | ||
DEFAULT_CAMBIUM_DATA_FILE_DIR = DEFAULT_CAMBIUM_DATA_FILE.parent | ||
DEFAULT_CAMBIUM_DATA_FILES_LIST = list(glob.glob(str(DEFAULT_CAMBIUM_DATA_FILE_DIR / "Cambium*.csv"))) | ||
DEFAULT_CAMBIUM_DATA_FILES_LIST.sort() | ||
|
||
# Set default input arguments for CambiumData class (lat/lon corresponds to Golden, CO campus, aligns with other resource tests / files) | ||
year = 2024 | ||
lat = 39.7555 | ||
lon = -105.2211 | ||
|
||
default_cambium_data_df = pd.read_csv(DEFAULT_CAMBIUM_DATA_FILE) | ||
|
||
# Test functionality of loading Cambium Data from existing resource files | ||
def test_cambium_load_from_file(): | ||
loaded_from_file_cambium = CambiumData(lat=lat, lon=lon, year=year, filepath=DEFAULT_CAMBIUM_DATA_FILE) | ||
loaded_from_file_cambium_resource_files = loaded_from_file_cambium.resource_files | ||
loaded_from_file_cambium_resource_files.sort() | ||
# Check if list of resource files saved as class object attribute is equivalent to list of default files | ||
assert loaded_from_file_cambium.resource_files == DEFAULT_CAMBIUM_DATA_FILES_LIST | ||
# Check total # of files loaded / saved == 6 (2025:2050:5) | ||
assert len(loaded_from_file_cambium.resource_files) == 6 | ||
assert len(loaded_from_file_cambium.cambium_years) == 6 | ||
|
||
# Test functionality of calling cambium API and saving to non-default file names by providing a filepath that does not exist | ||
def test_cambium_save_to_file(): | ||
test_cambium_data_filepath = DEFAULT_CAMBIUM_DATA_FILE_DIR / "test_Cambium_AnyScenario_hourly_AnyLocation_2025.csv" | ||
saved_to_file_cambium = CambiumData(lat=lat, lon=lon, year=year, filepath=test_cambium_data_filepath) | ||
# For each resource file saved as class object attribute, check the file exists / was saved | ||
for resource_file in saved_to_file_cambium.resource_files: | ||
assert os.path.isfile(resource_file) == True | ||
# Check total # of files downloaded / saved == 6 (2025:2050:5) | ||
assert len(saved_to_file_cambium.resource_files) == 6 | ||
assert len(saved_to_file_cambium.cambium_years) == 6 | ||
|
||
# Test consistency of data between cached default cambium data files and test_Cambium_... files created from test_cambium_save_to_file() | ||
def test_cambium_data_consistency(): | ||
test_resource_files = list(glob.glob(str(DEFAULT_CAMBIUM_DATA_FILE_DIR / "test_*.csv"))) | ||
test_resource_files.sort() | ||
test_2025_resource_file_df = pd.read_csv(test_resource_files[0]) | ||
test_2050_resource_file_df = pd.read_csv(test_resource_files[-1]) | ||
default_2025_cambium_data_file_df = pd.read_csv(DEFAULT_CAMBIUM_DATA_FILES_LIST[0]) | ||
default_2050_cambium_data_file_df = pd.read_csv(DEFAULT_CAMBIUM_DATA_FILES_LIST[-1]) | ||
# Check column names from respective dataframes are equivalent | ||
assert list(test_2025_resource_file_df.columns) == list(default_2025_cambium_data_file_df.columns) | ||
assert list(test_2050_resource_file_df.columns) == list(default_2050_cambium_data_file_df.columns) | ||
# Check column values are equivalent, sum all rows for each column and compare test vs default | ||
assert list(test_2025_resource_file_df.sum()) == list(default_2025_cambium_data_file_df.sum()) | ||
assert list(test_2050_resource_file_df.sum()) == list(default_2050_cambium_data_file_df.sum()) | ||
|
||
# Test Cambium API server health | ||
@pytest.mark.dependency(name="api_server_health") | ||
def test_cambium_api_server_health(): | ||
url = CAMBIUM_BASE_URL | ||
r = requests.get(url) | ||
assert r.status_code != 500 | ||
|
||
# Test Cambium API calls | ||
@pytest.mark.dependency(depends=["api_server_health"]) | ||
def test_cambium_api(): | ||
# Test base URL with no variables / arguments passed | ||
url = CAMBIUM_BASE_URL | ||
r = requests.get(url) | ||
response_dict = json.loads(r.text) | ||
assert r.status_code == 200 | ||
assert response_dict["status"] == "FAILED" | ||
assert response_dict["message"] == "Missing columns: ['project_uuid', 'scenario', 'location_type', 'time_type', 'year']" | ||
|
||
# Test a full URL call | ||
url = 'https://scenarioviewer.nrel.gov/api/get-data-cache/?project_uuid=0f92fe57-3365-428a-8fe8-0afc326b3b43&scenario=Mid-case with 100% decarbonization by 2035&location_type=GEA Regions 2023&latitude=39.755&longitude=-105.2211&year=2025&time_type=hourly&metric_col=lrmer_co2e' | ||
r = requests.get(url) | ||
response_dict = json.loads(r.text) | ||
assert r.status_code == 200 | ||
assert response_dict["status"] == "SUCCESS" | ||
assert response_dict["message"][0]["metric"] == 'LRMER: CO2e Combustion+Precombustion [kg/MWh]' | ||
|
||
# Test incorrect API URL | ||
url = (CAMBIUM_BASE_URL + "a") | ||
r = requests.get(url) | ||
assert r.status_code == 404 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters