From e08effe6dde7033f7668cdf88cd7e4847b694ed1 Mon Sep 17 00:00:00 2001 From: "Mindermann, Kennedy" Date: Wed, 27 May 2026 10:36:24 -0600 Subject: [PATCH 1/8] remove extra scripts from documentation_tools and add workflow to auto update sources_documentation.md --- .github/workflows/update-sources-docs.yaml | 48 ++++ docs/source/documentation_tools/README.md | 15 -- .../documentation_tools/generate_markdown.bat | 1 - .../documentation_tools/generate_markdown.py | 13 +- .../documentation_tools/generate_markdown.sh | 2 - .../generate_new_sources.py | 248 ------------------ .../generate_sources_md_file.bat | 7 - .../generate_sources_md_file.sh | 8 - 8 files changed, 60 insertions(+), 282 deletions(-) create mode 100644 .github/workflows/update-sources-docs.yaml delete mode 100644 docs/source/documentation_tools/README.md delete mode 100644 docs/source/documentation_tools/generate_markdown.bat delete mode 100644 docs/source/documentation_tools/generate_markdown.sh delete mode 100644 docs/source/documentation_tools/generate_new_sources.py delete mode 100644 docs/source/documentation_tools/generate_sources_md_file.bat delete mode 100644 docs/source/documentation_tools/generate_sources_md_file.sh diff --git a/.github/workflows/update-sources-docs.yaml b/.github/workflows/update-sources-docs.yaml new file mode 100644 index 00000000..e0ca879e --- /dev/null +++ b/.github/workflows/update-sources-docs.yaml @@ -0,0 +1,48 @@ +# This workflow will install and set up conda and gams, run ReEDS, and run tests +name: Update sources documentation + +on: + pull_request: + paths: + - 'docs/sources.csv' + - 'docs/source/documentation_tools/generate_markdown.py' + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + update-sources-docs: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + fetch-depth: 1 + # for PRs, we need to check out the actual PR branch so we can push back to it + ref: ${{ github.event.pull_request.head.ref }} + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Python 3.12 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.12" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install argparse + + - name: Generate & commit sources_documentation.md + run: | + python docs/source/documentation_tools/generate_markdown.py + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add docs/source/sources_documentation.md + git diff --cached --quiet && echo "No changes to commit" || \ + git commit -m "docs: regenerate sources_documentation.md [skip ci]" && git push \ No newline at end of file diff --git a/docs/source/documentation_tools/README.md b/docs/source/documentation_tools/README.md deleted file mode 100644 index e3c98732..00000000 --- a/docs/source/documentation_tools/README.md +++ /dev/null @@ -1,15 +0,0 @@ -### How to Use Sources Documentation - -1. Before running the .bat script, please ensure the sources.csv file is closed. If open, the script will be unable to replace the file and will throw an error. -2. Run **generate_sources_md_file.bat** script (for Mac and Linux users **generate_sources_md_file.sh**)located within the documentation_tools folder (ReEDS/docs/source/documentation_tools). You will need navigate to that directory prior to running. -3. This will run the first script **generate_new_sources.py**. generating a new **sources.csv** file at the top directory of the repository, please note,the existing sources.csv in your Repository root will be renamed to sources_{timestamp}.csv format. This can be deleted manually if no longer required; or can be held on to if required for comparison. Tree change files are generated in the documentations_tools folder to indicate files not included in the prior sources file (**sources_files_added.csv**), files removed from the prior sources file (**sources_files_deleted.csv**), and files not included in the sources file because they aren't committed (**sources_untracked_files.csv**). These change files should not be committed and can be deleted when no longer needed. -4. Once this has finished running, please proceed to update relevant fields in the *sources.csv* file -5. Once relevant fields have been updated, please save sources.csv and close it. -6. Run **generate_markdown.bat** (for Mac and Linux users **generate_markdown.sh**)located within the documentation_tools folder. This will generate a README file *sources_documentation.md* with all the Source files and their details for the Repository by running the script **generate_markdown.py**. The markdown file will be generated in the ReEDS/docs/source/ location. -7. Commit and push the updated **sources.csv** and **sources_documentation.md** files. ---- - -#### How to Update Relevant Fields in sources.csv -1. Once prompted by the .bat script, open **sources.csv** (found at the Repository root). -2. Using the Added Files List, **sources_files_added.csv** (found within the documentation_tools folder) which displays all the input files added by the user, enter relevant details in corresponding columns of **sources.csv**. Fields that do not apply can be left blank. Do not add new columns to sources.csv without also updating the scripts to support the expanded fields. -3. Save the sources.csv and close the file. diff --git a/docs/source/documentation_tools/generate_markdown.bat b/docs/source/documentation_tools/generate_markdown.bat deleted file mode 100644 index 4941604d..00000000 --- a/docs/source/documentation_tools/generate_markdown.bat +++ /dev/null @@ -1 +0,0 @@ -python generate_markdown.py \ No newline at end of file diff --git a/docs/source/documentation_tools/generate_markdown.py b/docs/source/documentation_tools/generate_markdown.py index 8bbcf9ab..809dd776 100644 --- a/docs/source/documentation_tools/generate_markdown.py +++ b/docs/source/documentation_tools/generate_markdown.py @@ -1,6 +1,17 @@ #!/usr/bin/env python # coding: utf-8 +# Note: this script does not need to be run manually, +# sources_documentation.md is updated automatically as part of the update-sources-docs.yaml workflow + +# How to use this script to get an updated sources_documentation.md file: +# 1. update docs/sources.csv +# 2. from the docs/source/documentation_tools folder, run: python generate_markdown.py +# optional args: +# -g/--githubURL Base URL prepended to file links in markdown. +# -r/--reedsPath Path used to find sources.csv and write output. + + # In[1]: import os @@ -10,7 +21,7 @@ def slugify(text: str) -> str: """ - Convert a string to a stable anchor id for markdow. + Convert a string to a stable anchor id for markdown. Lowercase, replace spaces and slashes with hyphens, remove special characters except hyphens, and collapse multiple hyphens into one. Args: diff --git a/docs/source/documentation_tools/generate_markdown.sh b/docs/source/documentation_tools/generate_markdown.sh deleted file mode 100644 index f7f7fb2d..00000000 --- a/docs/source/documentation_tools/generate_markdown.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -python generate_markdown.py \ No newline at end of file diff --git a/docs/source/documentation_tools/generate_new_sources.py b/docs/source/documentation_tools/generate_new_sources.py deleted file mode 100644 index b2552cf9..00000000 --- a/docs/source/documentation_tools/generate_new_sources.py +++ /dev/null @@ -1,248 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -# In[1]: - - -#author: akarmaka -#This file processes the existing sources.csv file from the repo to check for any changes -# and generates a new version of sources.csv containing details about each input and script files - -import os -import csv -import pandas as pd -from datetime import datetime -import re - -timestamp = datetime.now().strftime("%Y%m%d%H%M") - - -# Description holder file -desc_holder = 'sources.csv' -desc_holder = desc_holder.replace("\\","/") - - -#Setting correct path to main ReEDS folder -current_path = os.getcwd() -reeds_path = os.path.dirname(os.path.dirname(os.path.dirname(current_path))) -reeds_path = reeds_path.replace("\\","/") -#current_path = current_path.replace("/postprocessing/documentation_tools","") - - -#dir_path = current_path.replace("\\","/") -#Descriptor file path -desc_file_path = os.path.join(reeds_path, desc_holder).replace("\\","/") - - - -#file extensions dictionary to filter for -extensions = ['.csv', '.h5', '.xlsx', 'csv.gz'] #['.csv', '.py', 'csv.gz', '.gms', '.h5', '.r'] - -#folders to be excluded for source.csv population -omit_folders = ['.git', '.github', 'runs'] - -#Temp files to be ignored -ignore_files = ['sources_interim', 'sources_{timestamp}', 'sources_files_added', 'sources_files_deleted', 'sources_untracked_files', 'local_sources_files_added'] -timestamp_pattern = re.compile(r'^sources_\d{12}$') - - - -descriptions = {} -indices = {} -citations = {} -dollar_year = {} -filetypes = {} -units = {} - - -#Use for reading sources.csv if re-running the script! -with open(desc_file_path, "r") as csv_file: - read = csv.DictReader(csv_file) - for row in read: - file_loc = row["FileName_new"] - ext = row["FileExtension"] - rel_path = row["RelativeFilePath"] - #full_path = row["FullFilePath"] - description = row["Description_new"] - index = row["Indices"] - dollar_yr = row["DollarYear"] - citation = row["Citation"] - filetype = row["Filetype"] - unit = row["Units"] - - descriptions[rel_path] = description - indices[rel_path] = index - citations[rel_path] = citation - dollar_year[rel_path] = dollar_yr - filetypes[rel_path] = filetype - units[rel_path] = unit - - - -#Saving the latest sources.csv for the interim -interim_sources_csv = "sources_interim.csv" -interim_sources_csv_path = os.path.join(reeds_path, interim_sources_csv).replace("\\","/") - - -#Open csv file to store new sources.csv data -with open(interim_sources_csv_path, "w", newline="") as csv_file: - writer = csv.writer(csv_file) - - #Specifying headers - writer.writerow(["RelativeFilePath", "RelativeFolderPath", "FileName_new", "FileExtension", "Description_new", "Indices", "DollarYear", "Citation", "Filetype", "Units"]) - - data = [] - #To navigate entire directory and subdirectories within it - for root, dirs, files in os.walk(reeds_path, topdown=True): - - dirs[:] = [d for d in dirs if d not in omit_folders] - - files.sort(key=str.casefold) - - for file_name in files: - - #Store file paths - file_path = os.path.join(root, file_name) - file_path = file_path.replace("\\", "/") - - #Store relative paths - relative_path = os.path.relpath(file_path, reeds_path) - relative_path = "\\"+ relative_path - relative_path = relative_path.replace("\\", "/") - - rel_folder_path = os.path.dirname(relative_path).replace("\\", "/") - - #Store file names and their respective extensions - file_name, file_ext = os.path.splitext(file_name) - - if file_name in ignore_files or timestamp_pattern.match(file_name): - continue - - #Filter files based on extensions present in our dictionary - if file_ext in extensions: - - description = descriptions.get(relative_path, '') - index = indices.get(relative_path, '') - - citation = citations.get(relative_path, '') - dollar_yr = dollar_year.get(relative_path, '') - filetype = filetypes.get(relative_path, '') - unit = units.get(relative_path, '') - - data.append({"RelativeFilePath" : relative_path, "RelativeFolderPath": rel_folder_path, "FileName_new": file_name, "FileExtension": file_ext, "Description_new": description, "Index": index, "DollarYear": dollar_yr, "Citation": citation, "Filetype": filetype, "Units": unit}) - - sorted_data = sorted(data, key=lambda x: x["RelativeFilePath"].casefold()) - - for row in sorted_data: - relative_file_path = row["RelativeFilePath"] - relative_folder_path = row["RelativeFolderPath"] - file_name = row["FileName_new"] - file_ext = row["FileExtension"] - description = row["Description_new"] - index = row["Index"] - dollar_yr = row["DollarYear"] - citation = row["Citation"] - filetype = row["Filetype"] - unit = row["Units"] - - writer.writerow([relative_file_path, relative_folder_path, file_name, file_ext, description, index, dollar_yr, citation, filetype, unit]) - - - -#Function to compare the 2 csv files to generate an added and deleted files list -def compare_sources_csv(old_csv_file, new_csv_file): #, tracking_file): - with open(old_csv_file, 'r') as file: - old_csv = csv.DictReader(file) - old_files = [row['RelativeFilePath'] for row in old_csv] - - with open(new_csv_file, 'r') as file: - new_csv = csv.DictReader(file) - new_files = [row['RelativeFilePath'] for row in new_csv] - - - added_files = set(new_files) - set(old_files) - # tracked_and_added_files = added_files.intersection(tracked_files) - - - deleted_files = set(old_files) - set(new_files) - # tracked_and_deleted_files = set(deleted_files) - set(tracked_files) - - with open('local_sources_files_added.csv', 'w', newline='') as file: - writer = csv.writer(file) - writer.writerow(['RelativeFilePath']) - writer.writerows([[file_path] for file_path in added_files]) - - with open('sources_files_deleted.csv', 'w', newline='') as file: - writer = csv.writer(file) - writer.writerow(['RelativeFilePath']) - writer.writerows([[file_path] for file_path in deleted_files]) - -#Call the compare function which compares local versions of old vs new sources.csv -compare_sources_csv(desc_file_path, interim_sources_csv_path) - - -#Read the tracked files list which contains all the files committed to the branch -tracked_file = "tracked_files_list.txt" -tracked_file_path = os.path.join(reeds_path, tracked_file).replace("\\","/") - -df_tracked_file_list = pd.read_csv(tracked_file_path, header=None, names=['RelativeFilePath']) -df_tracked_file_list['RelativeFilePath'] = df_tracked_file_list['RelativeFilePath'].str.replace('\\', '/', regex=False) -df_tracked_file_list['RelativeFilePath'] = "/" + df_tracked_file_list['RelativeFilePath'] - -df_sources_added_file = pd.read_csv("local_sources_files_added.csv", header=0) - -#Function to compare local version of files added and the files committed -def compare_commited_files(tracked_sources_added, tracked_list): - - #Comparison to generate added and tracked files (tracked = committed) - df_added_tracked_files = pd.merge(tracked_sources_added, tracked_list, on='RelativeFilePath', how='inner') - df_added_tracked_files.to_csv('sources_files_added.csv', sep=',', encoding='utf-8', index=False) - - #Comparison to generate untracked files - df_untracked_files = tracked_sources_added[~tracked_sources_added['RelativeFilePath'].isin(tracked_list['RelativeFilePath'])] - df_untracked_files.to_csv('sources_untracked_files.csv', sep=',', encoding='utf-8', index=False) - - -#Call function to compare local vs committed versions of files -compare_commited_files(df_sources_added_file, df_tracked_file_list) - - - -#Function to rename files -def rename_file(reeds_path, old_sources_csv, new_sources_csv): - old_file_path = os.path.join(reeds_path, old_sources_csv).replace("\\", "/") - - new_file_path = os.path.join(reeds_path, new_sources_csv).replace("\\", "/") - - os.rename(old_file_path, new_file_path) - - - -#Old sources csv is the original sources.csv file -old_sources_csv = "sources.csv" -#Adding a timestamp for log purposes and to compare with the latest sources.csv if needed -new_sources_csv = f"sources_{timestamp}.csv" - -#Renaming original sources to sources file with a timestamp; to be kept for comparison if needed -rename_file(reeds_path, old_sources_csv, new_sources_csv) - -#Renaming latest sources.csv to take the place of the original sources.csv -rename_file(reeds_path, interim_sources_csv, old_sources_csv) - - -#Removing the tracked files list generated by git comamnd -os.remove(tracked_file_path) - - - - -print("Added & Deleted Files list generated") - -print("New Sources File list generated") - - -# In[ ]: - - - - diff --git a/docs/source/documentation_tools/generate_sources_md_file.bat b/docs/source/documentation_tools/generate_sources_md_file.bat deleted file mode 100644 index 5245fe80..00000000 --- a/docs/source/documentation_tools/generate_sources_md_file.bat +++ /dev/null @@ -1,7 +0,0 @@ -FOR /F "tokens=*" %%g IN ('git rev-parse --abbrev-ref HEAD') do (SET VAR=%%g) -cd .. -cd .. -cd .. -git ls-tree -r %VAR% --name-only > tracked_files_list.txt -cd docs\source\documentation_tools -python generate_new_sources.py \ No newline at end of file diff --git a/docs/source/documentation_tools/generate_sources_md_file.sh b/docs/source/documentation_tools/generate_sources_md_file.sh deleted file mode 100644 index 2df4b886..00000000 --- a/docs/source/documentation_tools/generate_sources_md_file.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -branch=$(git rev-parse --abbrev-ref HEAD) -cd .. -cd .. -cd .. -git ls-tree -r $branch --name-only > tracked_files_list.txt -cd docs/source/documentation_tools -python generate_new_sources.py \ No newline at end of file From 5b2811b2263f3e8098a7873d7a2b86afdfac45a7 Mon Sep 17 00:00:00 2001 From: "Mindermann, Kennedy" Date: Wed, 27 May 2026 10:48:54 -0600 Subject: [PATCH 2/8] pass reeds path to generate_markdown.py --- .github/workflows/update-sources-docs.yaml | 2 +- docs/source/documentation_tools/generate_markdown.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update-sources-docs.yaml b/.github/workflows/update-sources-docs.yaml index e0ca879e..5f18e24f 100644 --- a/.github/workflows/update-sources-docs.yaml +++ b/.github/workflows/update-sources-docs.yaml @@ -40,7 +40,7 @@ jobs: - name: Generate & commit sources_documentation.md run: | - python docs/source/documentation_tools/generate_markdown.py + python docs/source/documentation_tools/generate_markdown.py -r ${{ github.workspace }} git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add docs/source/sources_documentation.md diff --git a/docs/source/documentation_tools/generate_markdown.py b/docs/source/documentation_tools/generate_markdown.py index 809dd776..4eb9e185 100644 --- a/docs/source/documentation_tools/generate_markdown.py +++ b/docs/source/documentation_tools/generate_markdown.py @@ -191,8 +191,9 @@ def main(): reeds_path = os.path.dirname(os.path.dirname(os.path.dirname(current_path))) reeds_path = reeds_path.replace("\\","/") + reeds_docs_path = os.path.join(reeds_path, "docs") - desc_file_path = os.path.join(reeds_path, desc_holder).replace("\\","/") + desc_file_path = os.path.join(reeds_docs_path, desc_holder).replace("\\","/") #Dataframe to store the newly generated sources.csv data @@ -231,7 +232,7 @@ def main(): #Generate separate readme for ReEDS 2.0 Sources files main_readme_file = "sources_documentation.md" - main_readme_file_path = os.path.join(reeds_path, main_readme_file).replace("\\","/") + main_readme_file_path = os.path.join(reeds_docs_path, main_readme_file).replace("\\","/") #Open markdown file for entries with open(main_readme_file_path, "w") as main_file: From b10fcece50c9e493c65e8f9edeae4172d98a1e6c Mon Sep 17 00:00:00 2001 From: "Mindermann, Kennedy" Date: Wed, 27 May 2026 11:01:53 -0600 Subject: [PATCH 3/8] update path to sources_documentation.md --- .github/workflows/update-sources-docs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-sources-docs.yaml b/.github/workflows/update-sources-docs.yaml index 5f18e24f..fc40304b 100644 --- a/.github/workflows/update-sources-docs.yaml +++ b/.github/workflows/update-sources-docs.yaml @@ -43,6 +43,6 @@ jobs: python docs/source/documentation_tools/generate_markdown.py -r ${{ github.workspace }} git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" - git add docs/source/sources_documentation.md + git add docs/sources_documentation.md git diff --cached --quiet && echo "No changes to commit" || \ git commit -m "docs: regenerate sources_documentation.md [skip ci]" && git push \ No newline at end of file From 4f74f1452e285c8754f725054ca3d0e6d2899e2e Mon Sep 17 00:00:00 2001 From: "Mindermann, Kennedy" Date: Wed, 27 May 2026 11:10:13 -0600 Subject: [PATCH 4/8] change workflow permissions --- .github/workflows/update-sources-docs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-sources-docs.yaml b/.github/workflows/update-sources-docs.yaml index fc40304b..8e3b5dba 100644 --- a/.github/workflows/update-sources-docs.yaml +++ b/.github/workflows/update-sources-docs.yaml @@ -14,7 +14,7 @@ concurrency: cancel-in-progress: true permissions: - contents: read + contents: write jobs: update-sources-docs: From 3efab6289f555bf608035f6a1933ed037e13acb3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 May 2026 17:11:05 +0000 Subject: [PATCH 5/8] docs: regenerate sources_documentation.md [skip ci] --- docs/sources_documentation.md | 74 +++++++---------------------------- 1 file changed, 15 insertions(+), 59 deletions(-) diff --git a/docs/sources_documentation.md b/docs/sources_documentation.md index 53254f2e..a5a2811c 100644 --- a/docs/sources_documentation.md +++ b/docs/sources_documentation.md @@ -63,6 +63,7 @@ - [userinput](#inputs-userinput) - [valuestreams](#inputs-valuestreams) - [waterclimate](#inputs-waterclimate) + - [zones](#inputs-zones) - [postprocessing](#postprocessing) - [air_quality](#postprocessing-air-quality) - [rcm_data](#postprocessing-air-quality-rcm-data) @@ -98,9 +99,6 @@ - **Dollar year:** 2004 --- -- [cases_county.csv](/cases_county.csv) ---- - - [cases_examples.csv](/cases_examples.csv) --- @@ -689,9 +687,6 @@ - [hierarchy_agg69.csv](/inputs/hierarchy_agg69.csv) --- - - [hierarchy_offshore.csv](/inputs/zones/hierarchy_offshore.csv) ---- - - [remote_files.csv](/inputs/remote_files.csv) --- @@ -827,13 +822,9 @@ --- - ##### inputs/climate/GFDL-ESM2M_RCP4p5_WM - - [HDDCDD.csv](/inputs/climate/GFDL-ESM2M_RCP4p5_WM/HDDCDD.csv) ---- - - [hydadjann.csv](/inputs/climate/GFDL-ESM2M_RCP4p5_WM/hydadjann.csv) - **Description:** Climate-impact capacity factor multipliers for annual dispatchable hydropower for the GFDL-ESM2M_RCP4p5_WM climate scenario - **Indices:** r,t @@ -873,9 +864,6 @@ ##### inputs/climate/HadGEM2-ES_RCP2p6 - - [HDDCDD.csv](/inputs/climate/HadGEM2-ES_RCP2p6/HDDCDD.csv) ---- - - [UnappWaterMult.csv](/inputs/climate/HadGEM2-ES_RCP2p6/UnappWaterMult.csv) - **Description:** Climate-impact water availability multipliers for annual/monthly unappropriated fresh surface water for the HadGEM2-ES_RCP2p6 climate scenario - **Indices:** wst,r,month,t @@ -901,9 +889,6 @@ ##### inputs/climate/HadGEM2-ES_rcp45_AT - - [HDDCDD.csv](/inputs/climate/HadGEM2-ES_rcp45_AT/HDDCDD.csv) ---- - - [hydadjann.csv](/inputs/climate/HadGEM2-ES_rcp45_AT/hydadjann.csv) - **Description:** Climate-impact capacity factor multipliers for annual dispatchable hydropower for the HadGEM2-ES_rcp45_AT climate scenario - **Indices:** r,t @@ -943,9 +928,6 @@ ##### inputs/climate/HadGEM2-ES_RCP4p5 - - [HDDCDD.csv](/inputs/climate/HadGEM2-ES_RCP4p5/HDDCDD.csv) ---- - - [UnappWaterMult.csv](/inputs/climate/HadGEM2-ES_RCP4p5/UnappWaterMult.csv) - **Description:** Climate-impact water availability multipliers for annual/monthly unappropriated fresh surface water for the HadGEM2-ES_RCP4p5 climate scenario - **Indices:** wst,r,month,t @@ -971,9 +953,6 @@ ##### inputs/climate/HadGEM2-ES_rcp85_AT - - [HDDCDD.csv](/inputs/climate/HadGEM2-ES_rcp85_AT/HDDCDD.csv) ---- - - [hydadjann.csv](/inputs/climate/HadGEM2-ES_rcp85_AT/hydadjann.csv) - **Description:** Climate-impact capacity factor multipliers for annual dispatchable hydropower for the HadGEM2-ES_rcp85_AT climate scenario - **Indices:** r,t @@ -1013,9 +992,6 @@ ##### inputs/climate/HadGEM2-ES_RCP8p5 - - [HDDCDD.csv](/inputs/climate/HadGEM2-ES_RCP8p5/HDDCDD.csv) ---- - - [UnappWaterMult.csv](/inputs/climate/HadGEM2-ES_RCP8p5/UnappWaterMult.csv) - **Description:** Climate-impact water availability multipliers for annual/monthly unappropriated fresh surface water for the HadGEM2-ES_RCP8p5 climate scenario - **Indices:** wst,r,month,t @@ -1041,9 +1017,6 @@ ##### inputs/climate/IPSL-CM5A-LR_RCP8p5_WM - - [HDDCDD.csv](/inputs/climate/IPSL-CM5A-LR_RCP8p5_WM/HDDCDD.csv) ---- - - [hydadjann.csv](/inputs/climate/IPSL-CM5A-LR_RCP8p5_WM/hydadjann.csv) - **Description:** Climate-impact capacity factor multipliers for annual dispatchable hydropower for the IPSL-CM5A-LR_RCP8p5_WM climate scenario - **Indices:** r,t @@ -1204,7 +1177,7 @@ - [dr_shed_avail_scalar.csv](/inputs/demand_response/dr_shed_avail_scalar.csv) --- - - [dr_shed_capacity_scalar_demo_data_IEF_January_2025.csv](/inputs/demand_response/dr_shed_capacity_scalar_demo_data_IEF_January_2025.csv) + - [dr_shed_capacity_scalar_demo_data_January_2025.csv](/inputs/demand_response/dr_shed_capacity_scalar_demo_data_January_2025.csv) --- - [dr_shed_hourly.h5](/inputs/demand_response/dr_shed_hourly.h5) @@ -2925,12 +2898,13 @@ - [cap_existing_psh.csv](/inputs/storage/cap_existing_psh.csv) - **Description:** County-wide PSH operational capacity, pump capacity, and max energy, based on plant-level data from https://www.hydropower.org/hydropower-pumped-storage-tool - **Units:** MW/MWh + --- - [PSH_supply_curves_durations.csv](/inputs/storage/PSH_supply_curves_durations.csv) --- - - [storinmaxfrac.csv](/inputs/storage/storinmaxfrac.csv) + - [storage_duration.csv](/inputs/storage/storage_duration.csv) --- @@ -3339,34 +3313,6 @@ - **Indices:** r,rr --- - - [transmission_capacity_init_AC_ba_NARIS2024.csv](/inputs/transmission/transmission_capacity_init_AC_ba_NARIS2024.csv) - - **Description:** Initial AC transmission capacity from the NARIS 2024 system at the BA resolution - 'NARIS2024' is a better starting point for future-oriented studies, but it becomes increasingly inaccurate for years earlier than 2024 ---- - - - [transmission_capacity_init_AC_ba_REFS2009.csv](/inputs/transmission/transmission_capacity_init_AC_ba_REFS2009.csv) - - **Description:** Initial AC transmission capacity from the 2009 transmission system for ReEDS at the BA resolution - 'REFS2009' does not include direction-dependent capacities or differentiated capacities for energy and PRM trading but it better represents historical additions between 2010-2024 ---- - - - [transmission_capacity_init_AC_county_NARIS2024.csv](/inputs/transmission/transmission_capacity_init_AC_county_NARIS2024.csv) - - **Description:** Initial AC transmission capacity modified from the NARIS 2024 file to eliminate most supply (with county transmission) demand mismatches for the 2024 solve year ---- - - - [transmission_capacity_init_AC_county_NARIS2024_base.csv](/inputs/transmission/transmission_capacity_init_AC_county_NARIS2024_base.csv) - - **Description:** Initial AC transmission capacity from the NARIS 2024 system at the county resolution ---- - - - [transmission_capacity_init_AC_transgrp_NARIS2024.csv](/inputs/transmission/transmission_capacity_init_AC_transgrp_NARIS2024.csv) - - **Description:** Initial AC transmission capacity from the NARIS 2024 system at the transgrp resolution ---- - - - [transmission_capacity_init_nonAC_ba.csv](/inputs/transmission/transmission_capacity_init_nonAC_ba.csv) - - **Description:** Initial non-AC transmission capacity at the BA resolution ---- - - - [transmission_capacity_init_nonAC_county.csv](/inputs/transmission/transmission_capacity_init_nonAC_county.csv) - - **Description:** Initial non-AC transmission capacity at the county resolution ---- - - [transmission_cost_ac_500kv_ba.h5](/inputs/transmission/transmission_cost_ac_500kv_ba.h5) - **Description:** Transmission costs for new 500 kV AC at BA resolution --- @@ -3536,6 +3482,13 @@ --- + +#### inputs/zones + + - [hierarchy_offshore.csv](/inputs/zones/hierarchy_offshore.csv) +--- + + ### postprocessing @@ -3763,12 +3716,15 @@ ##### postprocessing/retail_rate_module/inputs - [Electric O & M Expenses-IOU-1993-2019.csv](/postprocessing/retail_rate_module/inputs/Electric%20O%20&%20M%20Expenses-IOU-1993-2019.csv) + - **Description:** values taken from FERC Form 1 -- see https://docs.nlr.gov/docs/fy22osti/78224.pdf sections 2.2.2 and 2.2.3 --- - [Electric Operating Revenues-IOU-1993-2019.csv](/postprocessing/retail_rate_module/inputs/Electric%20Operating%20Revenues-IOU-1993-2019.csv) + - **Description:** values taken from FERC Form 1 -- see https://docs.nlr.gov/docs/fy22osti/78224.pdf sections 2.2.2 and 2.2.3 --- - [Electric Plant in Service-IOU-1993-2019.csv](/postprocessing/retail_rate_module/inputs/Electric%20Plant%20in%20Service-IOU-1993-2019.csv) + - **Description:** values taken from FERC Form 1 -- see https://docs.nlr.gov/docs/fy22osti/78224.pdf sections 2.2.2 and 2.2.3 --- - [f861_cust_counts.csv](/postprocessing/retail_rate_module/inputs/f861_cust_counts.csv) @@ -3975,7 +3931,6 @@ - **File Type:** Switches file - **Description:** Contains the configuration settings for the ReEDS run(s). - **Dollar year:** 2004 - - **Citation:** [https://github.nrel.gov/ReEDS/ReEDS-2.0/blob/38e6610a8c6a92291804598c95c11b707bf187b9/cases.csv](https://github.nrel.gov/ReEDS/ReEDS-2.0/blob/38e6610a8c6a92291804598c95c11b707bf187b9/cases.csv) --- - [cases_examples.csv](/cases_examples.csv) @@ -4005,3 +3960,4 @@ - [sources.csv](/sources.csv) - **Description:** CSV file containing a list of all input files (csv, h5, csv.gz) --- + From 1bb1f9687c6a9ecb75a5f5fcb29465cb3e020e4c Mon Sep 17 00:00:00 2001 From: "Mindermann, Kennedy" Date: Wed, 27 May 2026 11:20:45 -0600 Subject: [PATCH 6/8] update workflow to address linting errors --- .github/workflows/update-sources-docs.yaml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update-sources-docs.yaml b/.github/workflows/update-sources-docs.yaml index 8e3b5dba..ccb3dd7b 100644 --- a/.github/workflows/update-sources-docs.yaml +++ b/.github/workflows/update-sources-docs.yaml @@ -14,12 +14,16 @@ concurrency: cancel-in-progress: true permissions: - contents: write + contents: read jobs: update-sources-docs: + name: update sources-documentation.md runs-on: ubuntu-latest - + permissions: + contents: write # needs write permissions to push updated sources_documentation.md back to the PR branch + env: + REEDS_PATH: ${{ github.workspace }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: @@ -40,7 +44,7 @@ jobs: - name: Generate & commit sources_documentation.md run: | - python docs/source/documentation_tools/generate_markdown.py -r ${{ github.workspace }} + python docs/source/documentation_tools/generate_markdown.py -r "$REEDS_PATH" git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add docs/sources_documentation.md From e4b70f5376dddf5c92cb26d6bfd3e7cd1d79afb7 Mon Sep 17 00:00:00 2001 From: "Mindermann, Kennedy" Date: Wed, 27 May 2026 11:23:32 -0600 Subject: [PATCH 7/8] update workflow to have persist-credentials set to false --- .github/workflows/update-sources-docs.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/update-sources-docs.yaml b/.github/workflows/update-sources-docs.yaml index ccb3dd7b..a73693c7 100644 --- a/.github/workflows/update-sources-docs.yaml +++ b/.github/workflows/update-sources-docs.yaml @@ -31,6 +31,7 @@ jobs: # for PRs, we need to check out the actual PR branch so we can push back to it ref: ${{ github.event.pull_request.head.ref }} token: ${{ secrets.GITHUB_TOKEN }} + persist-credentials: false - name: Set up Python 3.12 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 From 70aa206d2f2a3cdbe7f8a7b3da044184e45ca8be Mon Sep 17 00:00:00 2001 From: "Mindermann, Kennedy" Date: Wed, 27 May 2026 11:38:46 -0600 Subject: [PATCH 8/8] update workflow --- .github/workflows/update-sources-docs.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/update-sources-docs.yaml b/.github/workflows/update-sources-docs.yaml index a73693c7..c993a72f 100644 --- a/.github/workflows/update-sources-docs.yaml +++ b/.github/workflows/update-sources-docs.yaml @@ -30,8 +30,6 @@ jobs: fetch-depth: 1 # for PRs, we need to check out the actual PR branch so we can push back to it ref: ${{ github.event.pull_request.head.ref }} - token: ${{ secrets.GITHUB_TOKEN }} - persist-credentials: false - name: Set up Python 3.12 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 @@ -47,7 +45,7 @@ jobs: run: | python docs/source/documentation_tools/generate_markdown.py -r "$REEDS_PATH" git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git add docs/sources_documentation.md git diff --cached --quiet && echo "No changes to commit" || \ git commit -m "docs: regenerate sources_documentation.md [skip ci]" && git push \ No newline at end of file