From 333aa4d3db751143930fd32a10bd352af6a67ef4 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Tue, 14 Jan 2025 16:07:14 -0800
Subject: [PATCH 01/29] Add resource accessor tool

---
 docs/Tools/Framework.md |   8 +
 docs/Tools/Mapping.md   |   8 +
 runtime/Makefile.mk     |   1 +
 runtime/resource.csv    |  40 +++++
 source/globals.h        |  10 +-
 tools/Makefile.mk       |   1 +
 tools/framework.py      |  31 +++-
 tools/resource.py       | 326 ++++++++++++++++++++++++++++++++++++++++
 8 files changed, 417 insertions(+), 8 deletions(-)
 create mode 100644 runtime/resource.csv
 create mode 100644 tools/resource.py

diff --git a/docs/Tools/Framework.md b/docs/Tools/Framework.md
index 5675da66b..e3f62ff74 100644
--- a/docs/Tools/Framework.md
+++ b/docs/Tools/Framework.md
@@ -55,6 +55,12 @@ if __name__ == "__main__":
 
 
 
+# Classes
+
+## ApplicationError
+
+Application exception
+
 # Functions
 
 ## `complex_unit() -> None`
@@ -106,6 +112,8 @@ Arguments:
 
 * `bin`: enable direct call to gridlabd binary (bypasses shell and faster)
 
+* `output_to`: run postprocessor on output to stdout
+
 * `kwargs`: options to pass to `subpocess.run`
 
 Returns:
diff --git a/docs/Tools/Mapping.md b/docs/Tools/Mapping.md
index 69b4cdd54..14604b842 100644
--- a/docs/Tools/Mapping.md
+++ b/docs/Tools/Mapping.md
@@ -58,6 +58,12 @@ See also:
 
 # Classes
 
+## ApplicationError
+
+Application exception
+
+---
+
 ## Map
 
 Mapping class
@@ -244,6 +250,8 @@ Arguments:
 
 * `bin`: enable direct call to gridlabd binary (bypasses shell and faster)
 
+* `output_to`: run postprocessor on output to stdout
+
 * `kwargs`: options to pass to `subpocess.run`
 
 Returns:
diff --git a/runtime/Makefile.mk b/runtime/Makefile.mk
index 2013ada4b..54371f84e 100644
--- a/runtime/Makefile.mk
+++ b/runtime/Makefile.mk
@@ -32,6 +32,7 @@ dist_pkgdata_DATA += runtime/regulator_b.png
 dist_pkgdata_DATA += runtime/regulator_g.png
 dist_pkgdata_DATA += runtime/regulator_k.png
 dist_pkgdata_DATA += runtime/regulator_r.png
+dist_pkgdata_DATA += runtime/resource.csv
 dist_pkgdata_DATA += runtime/switch_b.png
 dist_pkgdata_DATA += runtime/switch_g.png
 dist_pkgdata_DATA += runtime/switch_k.png
diff --git a/runtime/resource.csv b/runtime/resource.csv
new file mode 100644
index 000000000..c7e1cbaad
--- /dev/null
+++ b/runtime/resource.csv
@@ -0,0 +1,40 @@
+resource,protocol,port,hostname,index,content,deprecation,comment
+localhost,http,6267-6279,127.0.0.1,,,,Server mode support (see https://docs.gridlabd.us/)
+buildings,https,443,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,,/{country}/{state}_{county}.csv.gz,,Compiled AutoBEM4 building data
+code,https,443,github.com,,/{organization}/gridlabd/releases/tag/{version},,Github release code repository
+code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{branch},,Github development code repository
+develop.code,https,443,develop.code.gridlabd.us
+develop.source,https,443,develop.source.gridlabd.us
+dmg,https,443,dmg.gridlabd.us
+docker,https,443,docker.gridlabd.us
+docs-dev,https,443,docs-dev.gridlabd.us
+docs,https,443,docs.gridlabd.us
+elevation,https,443,elevation.gridlabd.us
+examples,https,443,examples.gridlabd.us
+geodata-dev,https,443,geodata-dev.gridlabd.us
+geodata,https,443,geodata.gridlabd.us
+gridchat,https,443,gridchat.gridlabd.us
+gridlabd,https,443,gridlabd.us
+help,https,443,help.gridlabd.us
+icons,https,443,icons.gridlabd.us
+install-dev,https,443,install-dev.gridlabd.us
+issues,https,443,issues.gridlabd.us
+library,https,443,library.gridlabd.us
+master.code,https,443,master.code.gridlabd.us
+master.source,https,443,master.source.gridlabd.us
+models,https,443,models.gridlabd.us
+news,https,443,news.gridlabd.us
+openfido,https,443,openfido.gridlabd.us
+source,https,443,source.gridlabd.us
+status-dev,https,443,status-dev.gridlabd.us
+status,https,443,status.gridalbd.us
+tariff,https,443,tariff.gridlabd.us
+template,https,443,template.gridlabd.us
+test,https,443,test.gridlabd.us
+training,https,443,training.gridlabd.us
+tutorials-dev,https,443,tutorials-dev.gridlabd.us
+tutorials,https,443,tutorials.gridlabd.us
+version,https,443,version.gridlabd.us
+weather,https,443,raw.githubusercontent.com,/{organization}/gridlabd-weather/master/{country}/.index,/{organization}/gridlabd-weather/master/{country}/{index},,TMY3 weather data repository
+www-dev,https,443,www-dev.gridlabd.us
+www,https,443,www.gridlabd.us
\ No newline at end of file
diff --git a/source/globals.h b/source/globals.h
index 7b7e2bb48..d0089472e 100644
--- a/source/globals.h
+++ b/source/globals.h
@@ -692,10 +692,16 @@ GLOBAL int32 global_loader_linenum INIT(0);
 GLOBAL char8 global_country INIT("US");
 
 /* Variable: global_region */
-GLOBAL char32 global_region INIT("CA");
+GLOBAL char32 global_region INIT("");
+
+/* Variable: global_locality */
+GLOBAL char32 global_locality INIT("");
+
+/* Variable: global_city */
+GLOBAL char32 global_city INIT("");
 
 /* Variable: global_organization */
-GLOBAL char1024 global_organization INIT("SLAC");
+GLOBAL char1024 global_organization INIT("arras-energy");
 
 /* Variable: global_json_complex_format */
 #define JCF_STRING  0x0000
diff --git a/tools/Makefile.mk b/tools/Makefile.mk
index fa0861487..6311857c4 100644
--- a/tools/Makefile.mk
+++ b/tools/Makefile.mk
@@ -35,6 +35,7 @@ dist_pkgdata_DATA += tools/noaa_forecast.py
 dist_pkgdata_DATA += tools/nsrdb_weather.py
 dist_pkgdata_DATA += tools/pole_analysis.py
 dist_pkgdata_DATA += tools/read_dlp.py
+dist_pkgdata_DATA += tools/resource.py
 dist_pkgdata_DATA += tools/rest_client.py
 dist_pkgdata_DATA += tools/rest_server.py
 dist_pkgdata_DATA += tools/rest_server_config.py
diff --git a/tools/framework.py b/tools/framework.py
index d3b63b842..2e0f910d9 100644
--- a/tools/framework.py
+++ b/tools/framework.py
@@ -58,6 +58,7 @@ def main(argv):
 import math
 import subprocess
 import unitcalc
+import geocoder
 from typing import TypeVar
 import inspect
 import traceback
@@ -78,9 +79,14 @@ def main(argv):
 E_INVALID = 2 # invalid argument/file
 E_MISSING = 3 # missing argument/file
 E_BADVALUE = 4 # bad value
+E_NOTFOUND = 5 # value not found
+E_FAILED = 6 # operation failed
 E_INTERRUPT = 8 # interrupted
 E_EXCEPTION = 9 # exception raised
 
+class ApplicationError(Exception):
+    """Application exception"""
+
 def read_stdargs(argv:list[str]) -> list[str]:
     """Read framework options
 
@@ -145,7 +151,7 @@ def output(*msg:list,**kwargs):
 
 def exception(exc:[TypeVar('Exception')|str]):
     if isinstance(exc,str):
-        exc = MapError(exc)
+        exc = ApplicationError(exc)
     raise exc
 
 def error(*msg:list,code:[int|None]=None,**kwargs):
@@ -155,7 +161,7 @@ def error(*msg:list,code:[int|None]=None,**kwargs):
         else:
             print(f"ERROR [{EXENAME}]: {' '.join([str(x) for x in msg])}",file=sys.stderr,**kwargs)
     if DEBUG:
-        raise MappingError(msg)
+        raise ApplicationError(*msg)
     if not code is None:
         sys.exit(code)
 
@@ -171,7 +177,11 @@ def debug(*msg:list,**kwargs):
     if DEBUG:
         print(f"DEBUG [{EXENAME}]: {' '.join([str(x) for x in msg])}",file=sys.stderr,**kwargs)
 
-def gridlabd(*args:list[str], bin=True, **kwargs) -> TypeVar('subprocess.CompletedProcess')|None:
+def gridlabd(*args:list[str], 
+    bin=True, 
+    output_to=None,
+    **kwargs,
+    ) -> TypeVar('subprocess.CompletedProcess')|None:
     """Simple gridlabd runner
 
     Arguments:
@@ -180,6 +190,8 @@ def gridlabd(*args:list[str], bin=True, **kwargs) -> TypeVar('subprocess.Complet
 
     * `bin`: enable direct call to gridlabd binary (bypasses shell and faster)
 
+    * `output_to`: run postprocessor on output to stdout
+
     * `kwargs`: options to pass to `subpocess.run`
 
     Returns:
@@ -197,10 +209,17 @@ def gridlabd(*args:list[str], bin=True, **kwargs) -> TypeVar('subprocess.Complet
         cmd = ["gridlabd.bin" if bin and "GLD_BIN" in os.environ else "gridlabd"] + list(args)
         debug(f"Running {cmd} with options {kwargs}")
         result = subprocess.run(cmd,**kwargs)
-        return result
+        return output_to(result.stdout.decode("utf-8")) if output_to else result
     except:
         return None
 
+LOCATION = None
+def location(refresh=False):
+    global LOCATION
+    if refresh or LOCATION is None:
+        LOCATION = geocoder.ip('me').geojson['features'][0]['properties']
+    return LOCATION
+
 def open_glm(file:str,
         tmp:str=None,
         init:bool=False,
@@ -239,7 +258,7 @@ def open_glm(file:str,
                 output(msg,file=sys.stderr)
     if result.returncode != 0:
         if exception:
-            raise RuntimeError("GLM conversion to JSON failed")
+            raise ApplicationError("GLM conversion to JSON failed")
         return None,result
     return open(outfile,"r"),result
 
@@ -337,4 +356,4 @@ def complex_unit(x:str,
 
 if __name__ == "__main__":
 
-    raise NotImplementedError("cannot run framework as a script")
+    raise ApplicationError("cannot run framework as a script")
diff --git a/tools/resource.py b/tools/resource.py
new file mode 100644
index 000000000..7827b8324
--- /dev/null
+++ b/tools/resource.py
@@ -0,0 +1,326 @@
+"""Online resource accessor
+
+Syntax: gridlabd resource [OPTIONS ...]
+
+Options:
+
+    --content=RESOURCE,INDEX: download RESOURCE located at INDEX
+
+    --debug: enable traceback on exceptions
+
+    -h|--help|help: get this help
+
+    --format=[raw|csv|json]: output format
+
+    --index=RESOURCE: get index for RESOURCE
+
+    --list[=FORMAT[,OPTIONS[,...]]: list the available resources
+
+    --quiet: suppress error output
+
+    --properties=RESOURCE
+
+    --silent: support all output exception results
+
+    --verbose: enable verbose output
+
+    --warning: disable warning output
+
+Description:
+
+The online resource accessor delivers online resources to GridLAB-D applications.
+
+Valid formats include `json` and `csv` (the default is 'raw').
+
+Examples:
+
+The following command list the properties on the online weather resources
+
+    gridlabd resource --properties=weather
+
+The following command lists the online weather resource index
+
+    gridlabd resource --index=weather
+
+The following command retrieves the online weather data for the specified location
+
+    gridlabd resource --content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3
+"""
+
+import sys
+import os
+import io
+import json
+import pandas as pd
+import framework as app
+import subprocess
+import requests
+
+pd.options.display.max_columns = None
+pd.options.display.max_colwidth = None
+pd.options.display.width = None
+
+class ResourceError(app.ApplicationError):
+    """Resource exception"""
+
+class Resource:
+    """Resource class"""
+    def __init__(self,file=None):
+        """Construct resource object
+
+        Arguments:
+
+        * `file`: resource file (default is $GLD_ETC/resource.csv)
+        """
+        # default file is from GLD_ETC
+        if not file and "GLD_ETC" in os.environ:
+            file = os.path.join(os.environ["GLD_ETC"],"resource.csv")
+            if not os.path.exists(file):
+                file = None
+
+        # load data
+        self.data = pd.read_csv(file,
+            index_col=0,
+            na_filter=False,
+            )
+
+        # get globals from gridlabd
+        self.globals = app.gridlabd("--globals=json",
+            output_to=lambda x:{y:z['value'] for y,z in json.loads(x).items()},
+            )
+        location = app.location()
+        if location:
+            self.globals.update(**location)
+        else:
+            app.warning("unable to get location from app")
+        self.globals["repository"] = "gridlabd"
+        self.globals["branch"] = self.globals["version.branch"]
+        self.request = None
+
+    def _download(self,protocol,hostname,port,path,output_to=lambda x:x):
+        url = f"{protocol}://{hostname}:{port}{path}"
+        req = requests.get(url)
+        self.request = req
+        self.request.url = url
+        if req.status_code == 200:
+            return output_to(req.content.decode("utf-8"))
+        else:
+            return None
+
+    def properties(self,passthru='*',**kwargs):
+        """Get resource properties
+
+        """
+        result = {"resource":kwargs["name"]}
+        for key,value in dict(zip(self.data.columns,self.data.loc[kwargs['name']].tolist())).items():
+            try:
+                result[key] = value.format(**kwargs,**self.globals) if type(value) is str else value
+            except KeyError:
+                e_value = str(sys.exc_info()[1]).strip("'")
+                if e_value in passthru or passthru == '*':
+                    args = {str(e_value):f"{{{e_value}}}"}
+                    return self.properties(**args,**kwargs)
+                raise
+        return result
+
+    def index(self,**kwargs):
+        """Get resource index (if any)
+
+        """
+        spec = self.properties(passthru=['index'],**kwargs)
+        return self._download(spec['protocol'],spec['hostname'],spec['port'],spec['index'],
+            output_to=lambda x:x.strip().split("\n"))
+
+    def content(self,**kwargs):
+        """Get resource content
+
+        """
+        spec = self.properties(**kwargs)
+        return self._download(spec['protocol'],spec['hostname'],spec['port'],spec['content'])
+
+def main(argv):
+
+    if len(argv) == 1:
+
+        print("\n".join([x for x in __doc__.split("\n") if x.startswith("Syntax: ")]))
+        return app.E_SYNTAX
+
+    args = app.read_stdargs(argv)
+    
+    resources = Resource()
+
+    def output_raw(data,**kwargs):
+        print(data,**kwargs)
+
+    def output_csv(data,**kwargs):
+        if isinstance(data,list):
+            print("\n".join(data))
+        elif isinstance(data,dict):
+            print("\n".join([f"{x},{y}" for x,y in data.items()]))
+        else:
+            raise ResourceError(f"unable to output '{type(data)}' as CSV")
+
+    def output_json(data,**kwargs):
+        print(json.dumps(data,**kwargs))
+
+    outputter = output_raw
+    outputter_options = {}
+
+    for key,value in args:
+
+        if key in ["-h","--help","help"]:
+
+            print(__doc__,file=sys.stdout)
+            return app.E_OK
+        
+        elif key in ["--format"]:
+
+            if len(value) == 0:
+
+                app.error("missing format")
+                return app.E_MISSING
+
+            
+            elif value[0] == "csv":
+
+                if len(value) > 1:
+                    app.error(f"invalid format options '{','.join(value[1:])}'")
+                    return app.E_INVALID
+                outputter = output_csv
+
+            elif value[0] == "json":
+
+                options = {x:y for x,y in [z.split(":",1) for z in value[1:]]} if len(value) > 1 else {}
+                _bool = lambda x: x=="true" if x in ["true","false"] else None,
+                for x,y in {
+                    "indent": int,
+                    "skipkeys": _bool,
+                    "ensure_ascii": _bool,
+                    "check_circular": _bool,
+                    "allow_nan": _bool,
+                    "sort_keys": _bool,
+                }.items():
+                    try:
+                        options[x] = y(options[x])
+                    except:
+                        pass
+                outputter = output_json
+                outputter_options = options
+
+            else:
+
+                app.error(f"invalid output format '{value[0]}'")
+                return app.E_INVALID
+
+        elif key in ["--list"]:
+
+            outputter(resources.data.index.tolist(),**outputter_options)
+            return app.E_OK
+
+        elif key in ["--properties"]:
+
+            options = value[1:] if len(value) > 1 else []
+            value = value[0] if len(value) > 0 else None
+            if len(options) > 0:
+                raise ResourceError(f"invalid option '{options[0]}")
+                return E_INVALID
+            if value:
+                if not value in resources.data.index:
+                    app.error(f"'{item}' is not a valid resource name")
+                    return app.E_NOTFOUND
+                data = resources.properties(name=value)
+            else:
+                data = resources.data.columns.tolist()
+            outputter(data,**outputter_options)
+            return app.E_OK
+
+        elif key in ["--index"]:
+            if not value:
+                app.error("missing resource name")
+                return E_MISSING
+            for item in value: # TODO only one allowed
+                if not item in resources.data.index:
+                    app.error(f"'{item}' is not a valid resource name")
+                    return app.E_NOTFOUND
+                outputter(resources.index(name=item),**outputter_options)
+            return app.E_OK
+        
+        elif key in ["--content"]:
+            
+            if len(value) == 0:
+                app.error("missing resource name")
+                return app.E_MISSING
+            index = resources.index(name=value[0])
+
+            if len(value) == 1:
+                app.error("missing index value")
+                return app.E_MISSING
+            source = value[1]
+
+            options = value[2:] if len(value) > 1 else {}
+
+            if not source in index:
+                app.error(f"'{source}' is not found in '{value[0]}' index ")
+                return app.E_NOTFOUND
+
+            result = resources.content(name=value[0],index=source)
+            if result:
+                outputter(result,**outputter_options)
+            else:
+                app.error(f"{resources.request.url}: {resources.request.content.decode('utf-8')}")
+                return E_FAILED
+            return app.E_OK
+
+        else:
+            app.error(f"'{key}={value}' is invalid")
+            return app.E_INVALID
+
+
+
+    return app.E_OK
+
+if __name__ == "__main__":
+
+    # local development test
+    if sys.argv[0] == "":
+
+        # sys.argv.extend(["--list"])
+        # sys.argv.extend(["--format=csv","--list"])
+        # sys.argv.extend(["--format=json","--list"])
+        # sys.argv.extend(["--format=json,indent:4","--list"])
+
+        # sys.argv.extend(["--index"]) # should be an error
+        # sys.argv.extend(["--index=weather"])
+        # sys.argv.extend(["--format=json","--index=weather"])
+        # sys.argv.extend(["--format=json,indent:4","--index=weather"])
+
+        # sys.argv.extend(["--properties"])
+        # sys.argv.extend(["--properties=weather"])
+        # sys.argv.extend(["--debug","--format=json,indent:4","--properties=weather"])
+
+        # sys.argv.extend(["--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
+        # sys.argv.extend(["--format=csv","--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
+        # sys.argv.extend(["--format=json","--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
+
+        pass
+
+    try:
+
+        rc = main(sys.argv)
+        exit(rc)
+
+    except KeyboardInterrupt:
+
+        exit(app.E_INTERRUPT)
+
+    except Exception as exc:
+
+        if app.DEBUG:
+            raise exc
+
+        if not app.QUIET:
+            e_type,e_value,e_trace = sys.exc_info()
+            tb = app.traceback.TracebackException(e_type,e_value,e_trace).stack[1]
+            print(f"EXCEPTION [{app.EXEFILE}@{tb.lineno}]: ({e_type.__name__}) {e_value}",file=sys.stderr)
+
+        exit(app.E_EXCEPTION)

From 1b4da18371e5e62b13fa669777a2b52164c0aca1 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Tue, 14 Jan 2025 18:30:33 -0800
Subject: [PATCH 02/29] Add checks for resources without index or content

---
 docs/Tools/Makefile.mk |  1 +
 docs/Tools/Resource.md | 88 ++++++++++++++++++++++++++++++++++++++++++
 tools/resource.py      | 43 ++++++++++++++-------
 3 files changed, 119 insertions(+), 13 deletions(-)
 create mode 100644 docs/Tools/Resource.md

diff --git a/docs/Tools/Makefile.mk b/docs/Tools/Makefile.mk
index 705d73fac..d33ed776a 100644
--- a/docs/Tools/Makefile.mk
+++ b/docs/Tools/Makefile.mk
@@ -3,4 +3,5 @@ DOCS_UTILITIES += docs/Tools/Network.md
 DOCS_UTILITIES += docs/Tools/Edit.md
 DOCS_UTILITIES += docs/Tools/Mapping.md
 DOCS_UTILITIES += docs/Tools/Moutils.md
+DOCS_UTILITIES += docs/Tools/Resource.md
 DOCS_UTILITIES += docs/Tools/Unitcalc.md
diff --git a/docs/Tools/Resource.md b/docs/Tools/Resource.md
new file mode 100644
index 000000000..22d4a4844
--- /dev/null
+++ b/docs/Tools/Resource.md
@@ -0,0 +1,88 @@
+[[/Tools/Resource]] -- Online resource accessor
+
+Syntax: `gridlabd resource [OPTIONS ...]`
+
+Options:
+
+* `--content=RESOURCE,INDEX`: download RESOURCE located at INDEX
+
+* `--debug`: enable traceback on exceptions
+
+* `-h|--help|help`: get this help
+
+* `--format=[raw|csv|json]`: output format
+
+* `--index=RESOURCE`: get index for RESOURCE
+
+* `--list[=FORMAT[,OPTIONS[,...]]`: list the available resources
+
+* `--quiet`: suppress error output
+
+* `--properties=RESOURCE`: get a list of resource properties
+
+* `--silent`: support all output exception results
+
+* `--verbose`: enable verbose output
+
+* `--warning`: disable warning output
+
+Description:
+
+The online resource accessor delivers online resources to GridLAB-D applications.
+
+Valid formats include `json` and `csv` (the default is 'raw').
+
+Examples:
+
+The following command list the properties on the online weather resources
+
+    gridlabd resource --properties=weather
+
+The following command lists the online weather resource index
+
+    gridlabd resource --index=weather
+
+The following command retrieves the online weather data for the specified location
+
+    gridlabd resource --content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3
+
+
+
+# Classes
+
+## Resource
+
+Resource class
+
+### `Resource()`
+
+Construct resource object
+
+Arguments:
+
+* `file`: resource file (default is $GLD_ETC/resource.csv)
+
+
+### `Resource.content() -> None`
+
+Get resource content
+
+
+
+### `Resource.index() -> None`
+
+Get resource index (if any)
+
+
+
+### `Resource.properties() -> None`
+
+Get resource properties
+
+
+
+---
+
+## ResourceError
+
+Resource exception
diff --git a/tools/resource.py b/tools/resource.py
index 7827b8324..151a69643 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -1,30 +1,30 @@
 """Online resource accessor
 
-Syntax: gridlabd resource [OPTIONS ...]
+Syntax: `gridlabd resource [OPTIONS ...]`
 
 Options:
 
-    --content=RESOURCE,INDEX: download RESOURCE located at INDEX
+* `--content=RESOURCE,INDEX`: download RESOURCE located at INDEX
 
-    --debug: enable traceback on exceptions
+* `--debug`: enable traceback on exceptions
 
-    -h|--help|help: get this help
+* `-h|--help|help`: get this help
 
-    --format=[raw|csv|json]: output format
+* `--format=[raw|csv|json]`: output format
 
-    --index=RESOURCE: get index for RESOURCE
+* `--index=RESOURCE`: get index for RESOURCE
 
-    --list[=FORMAT[,OPTIONS[,...]]: list the available resources
+* `--list[=FORMAT[,OPTIONS[,...]]`: list the available resources
 
-    --quiet: suppress error output
+* `--quiet`: suppress error output
 
-    --properties=RESOURCE
+* `--properties=RESOURCE`: get a list of resource properties
 
-    --silent: support all output exception results
+* `--silent`: support all output exception results
 
-    --verbose: enable verbose output
+* `--verbose`: enable verbose output
 
-    --warning: disable warning output
+* `--warning`: disable warning output
 
 Description:
 
@@ -111,6 +111,8 @@ def properties(self,passthru='*',**kwargs):
         """Get resource properties
 
         """
+        if not kwargs["name"] in self.data.index:
+            raise ResourceError(f"'{kwargs['name']}' not found")
         result = {"resource":kwargs["name"]}
         for key,value in dict(zip(self.data.columns,self.data.loc[kwargs['name']].tolist())).items():
             try:
@@ -128,6 +130,11 @@ def index(self,**kwargs):
 
         """
         spec = self.properties(passthru=['index'],**kwargs)
+
+        if not spec['index']:
+
+            raise ResourceError(f"{spec['resource']} has no index")
+
         return self._download(spec['protocol'],spec['hostname'],spec['port'],spec['index'],
             output_to=lambda x:x.strip().split("\n"))
 
@@ -136,6 +143,11 @@ def content(self,**kwargs):
 
         """
         spec = self.properties(**kwargs)
+
+        if not spec['content']:
+
+            raise ResourceError(f"{spec['resource']} has not content")
+
         return self._download(spec['protocol'],spec['hostname'],spec['port'],spec['content'])
 
 def main(argv):
@@ -282,7 +294,8 @@ def output_json(data,**kwargs):
 if __name__ == "__main__":
 
     # local development test
-    if sys.argv[0] == "":
+    # TODO: remove this block when done developint
+    if not sys.argv[0]:
 
         # sys.argv.extend(["--list"])
         # sys.argv.extend(["--format=csv","--list"])
@@ -302,6 +315,10 @@ def output_json(data,**kwargs):
         # sys.argv.extend(["--format=csv","--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
         # sys.argv.extend(["--format=json","--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
 
+        # sys.argv.extend(["--index=localhost"]) # should be an error
+        # sys.argv.extend(["--content=localhost"]) # should be an error
+        # sys.argv.extend(["--content=junk"]) # should be an error
+
         pass
 
     try:

From 25c34f5497b8159a818ec145fa0a7298af5b5b10 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Tue, 14 Jan 2025 18:41:40 -0800
Subject: [PATCH 03/29] Add test_resource.glm

---
 tools/autotest/test_resource.glm |   11 +
 tools/autotest/test_resource.txt | 2042 ++++++++++++++++++++++++++++++
 2 files changed, 2053 insertions(+)
 create mode 100644 tools/autotest/test_resource.glm
 create mode 100644 tools/autotest/test_resource.txt

diff --git a/tools/autotest/test_resource.glm b/tools/autotest/test_resource.glm
new file mode 100644
index 000000000..72a9fb1c5
--- /dev/null
+++ b/tools/autotest/test_resource.glm
@@ -0,0 +1,11 @@
+#system gridlabd resource --format=csv --index=weather > test_resource.txt
+
+#begin python
+from resource import Resource
+import json
+print(json.dumps(Resource().index(name='weather'),indent=4),file=open('test_resource.txt','a'))
+#end
+
+#ifexist "../test_resource.txt"
+#on_exit 0 diff ../test_resource.txt test_resource.txt > gridlabd.diff
+#endif
diff --git a/tools/autotest/test_resource.txt b/tools/autotest/test_resource.txt
new file mode 100644
index 000000000..8c9a615e0
--- /dev/null
+++ b/tools/autotest/test_resource.txt
@@ -0,0 +1,2042 @@
+AK-Adak_Nas.tmy3
+AK-Ambler.tmy3
+AK-Anaktuvuk_Pass.tmy3
+AK-Anchorage_Elmendorf.tmy3
+AK-Anchorage_Intl_Ap.tmy3
+AK-Anchorage_Merrill_Field.tmy3
+AK-Aniak_Airport.tmy3
+AK-Annette_Island_Ap.tmy3
+AK-Anvik.tmy3
+AK-Barrow_W_Postw_Rogers_Arpt_Nsa_Arm.tmy3
+AK-Bethel_Airport.tmy3
+AK-Bettles_Field.tmy3
+AK-Big_Delta_Allen_Aaf.tmy3
+AK-Big_River_Lake.tmy3
+AK-Birchwood.tmy3
+AK-Chulitna.tmy3
+AK-Cold_Bay_Arpt.tmy3
+AK-Cordova.tmy3
+AK-Deadhorse.tmy3
+AK-Dillingham_Amos.tmy3
+AK-Dutch_Harbor.tmy3
+AK-Emmonak.tmy3
+AK-Fairbanks_Eielson_A.tmy3
+AK-Fairbanks_Intl_Arpt.tmy3
+AK-Fort_Yukon.tmy3
+AK-Gambell.tmy3
+AK-Gulkana_Intermediate_Field.tmy3
+AK-Gustavus.tmy3
+AK-Hayes_River.tmy3
+AK-Healy_River_Airport.tmy3
+AK-Homer_Arpt.tmy3
+AK-Hoonah.tmy3
+AK-Hooper_Bay.tmy3
+AK-Huslia.tmy3
+AK-Hydaburg_Seaplane.tmy3
+AK-Iliamna_Arpt.tmy3
+AK-Juneau_Intl_Arpt.tmy3
+AK-Kake_Seaplane_Base.tmy3
+AK-Kenai_Municipal_Ap.tmy3
+AK-Ketchikan_Intl_Ap.tmy3
+AK-King_Salmon_Arpt.tmy3
+AK-Kodiak_Airport.tmy3
+AK-Kotzebue_Ralph_Wein_Memorial.tmy3
+AK-Lake_Hood_Seaplane.tmy3
+AK-Mcgrath_Arpt.tmy3
+AK-Mekoryuk.tmy3
+AK-Middleton_Island_Aut.tmy3
+AK-Minchumina.tmy3
+AK-Nenana_Municipal_Ap.tmy3
+AK-Nome_Municipal_Arpt.tmy3
+AK-Northway_Airport.tmy3
+AK-Palmer_Municipal.tmy3
+AK-Petersburg.tmy3
+AK-Point_Hope_Awos.tmy3
+AK-Port_Heiden.tmy3
+AK-Saint_Marys_Awos.tmy3
+AK-Sand_Point.tmy3
+AK-Savoonga.tmy3
+AK-Selawik.tmy3
+AK-Seward.tmy3
+AK-Shemya_Afb.tmy3
+AK-Shishmaref_Awos.tmy3
+AK-Sitka_Japonski_Ap.tmy3
+AK-Skagway_Airport.tmy3
+AK-Sleetmute.tmy3
+AK-Soldotna.tmy3
+AK-St_Paul_Island_Arpt.tmy3
+AK-Talkeetna_State_Arpt.tmy3
+AK-Tanana_Ralph_M_Calhoun_Mem_Ap.tmy3
+AK-Togiac_Village_Awos.tmy3
+AK-Unalakleet_Field.tmy3
+AK-Valdez_Pioneer_Fiel.tmy3
+AK-Valdez_Wso.tmy3
+AK-Whittier.tmy3
+AK-Wrangell.tmy3
+AK-Yakutat_State_Arpt.tmy3
+AL-Anniston_Metropolitan_Ap.tmy3
+AL-Auburnopelika_Apt.tmy3
+AL-Birmingham_Municipal_Ap.tmy3
+AL-Cairns_Field_Fort_Rucker.tmy3
+AL-Dothan_Municipal_Ap.tmy3
+AL-Gadsen_Muni_Awos.tmy3
+AL-Huntsville_Intl_Jones_Field.tmy3
+AL-Maxwell_Afb.tmy3
+AL-Mobile_Downtown_Ap.tmy3
+AL-Mobile_Regional_Ap.tmy3
+AL-Montgomery_Dannelly_Field.tmy3
+AL-Muscle_Shoals_Regional_Ap.tmy3
+AL-Troy_Af.tmy3
+AL-Tuscaloosa_Municipal_Ap.tmy3
+AR-Batesville_Awos.tmy3
+AR-Bentonville_Awos.tmy3
+AR-El_Dorado_Goodwin_Field.tmy3
+AR-Fayetteville_Drake_Field.tmy3
+AR-Flippin_Awos.tmy3
+AR-Fort_Smith_Regional_Ap.tmy3
+AR-Harrison_Faa_Ap.tmy3
+AR-Jonesboro_Muni.tmy3
+AR-Little_Rock_Adams_Field.tmy3
+AR-Little_Rock_Afb.tmy3
+AR-Memorial_Fld.tmy3
+AR-Pine_Bluff_Faa_Ap.tmy3
+AR-Rogers_Awos.tmy3
+AR-Siloam_Springawos.tmy3
+AR-Springdale_Muni.tmy3
+AR-Stuttgart_Awos.tmy3
+AR-Texarkana_Webb_Field.tmy3
+AR-Walnut_Ridge_Awos.tmy3
+AZ-Casa_Granda_Awos.tmy3
+AZ-Davis_Monthan_Afb.tmy3
+AZ-Deer_Valley_Phoenix.tmy3
+AZ-Douglas_Bisbeedouglas_Intl_A.tmy3
+AZ-Flagstaff_Pulliam_Arpt.tmy3
+AZ-Grand_Canyon_Natl_P.tmy3
+AZ-Kingman_Amos.tmy3
+AZ-Luke_Afb.tmy3
+AZ-Page_Muni_Amos.tmy3
+AZ-Phoenix_Sky_Harbor_Intl_Ap.tmy3
+AZ-Prescott_Love_Field.tmy3
+AZ-Safford_Amos.tmy3
+AZ-Scottsdale_Muni.tmy3
+AZ-Show_Low_Municipal.tmy3
+AZ-Tucson_International_Ap.tmy3
+AZ-Winslow_Municipal_Ap.tmy3
+AZ-Yuma_Intl_Arpt.tmy3
+AZ-Yuma_Mcas.tmy3
+CA-Alturas.tmy3
+CA-Arcata_Airport.tmy3
+CA-Bakersfield_Meadows_Field.tmy3
+CA-Beale_Afb.tmy3
+CA-Bishop_Airport.tmy3
+CA-Blue_Canyon_Ap.tmy3
+CA-Blythe_Riverside_Co_Arpt.tmy3
+CA-Burbankglendalepassadena_Ap.tmy3
+CA-Camarillo_Awos.tmy3
+CA-Camp_Pendleton_Mcas.tmy3
+CA-Carlsbad_Palomar.tmy3
+CA-China_Lake_Naf.tmy3
+CA-Chino_Airport.tmy3
+CA-Chula_Vista_Brown_Field_Naas.tmy3
+CA-Concord_Concordbuchanan_Fiel.tmy3
+CA-Crescent_City_Faa_Ai.tmy3
+CA-Daggett_Barstowdaggett_Ap.tmy3
+CA-Edwards_Afb.tmy3
+CA-Fresno_Yosemite_Intl_Ap.tmy3
+CA-Fullerton_Municipal.tmy3
+CA-Hayward_Air_Term.tmy3
+CA-Imperial.tmy3
+CA-Jack_Northrop_Fld_H.tmy3
+CA-Lancaster_Gen_Wm_Fox_Field.tmy3
+CA-Lemoore_Reeves_Nas.tmy3
+CA-Livermore_Municipal.tmy3
+CA-Lompoc_Awos.tmy3
+CA-Long_Beach_Daugherty_Fld.tmy3
+CA-Los_Angeles_Intl_Arpt.tmy3
+CA-March_Afb.tmy3
+CA-Merced_Macready_Fld.tmy3
+CA-Modesto_Citycounty_Ap.tmy3
+CA-Montague_Siskiyou_County_Ap.tmy3
+CA-Monterey_Naf.tmy3
+CA-Mountain_View_Moffett_Fld_Nas.tmy3
+CA-Napa_Co_Airport.tmy3
+CA-Needles_Airport.tmy3
+CA-Oakland_Metropolitan_Arpt.tmy3
+CA-Oxnard_Airport.tmy3
+CA-Palm_Springs_Intl.tmy3
+CA-Palm_Springs_Thermal_Ap.tmy3
+CA-Palmdale_Airport.tmy3
+CA-Paso_Robles_Municipal_Arpt.tmy3
+CA-Point_Mugu_Nf.tmy3
+CA-Porterville_Awos.tmy3
+CA-Red_Bluff_Municipal_Arpt.tmy3
+CA-Redding_Municipal_Arpt.tmy3
+CA-Riverside_Muni.tmy3
+CA-Sacramento_Executive_Arpt.tmy3
+CA-Sacramento_Metropolitan_Ap.tmy3
+CA-Salinas_Municipal_Ap.tmy3
+CA-San_Diego_Lindbergh_Field.tmy3
+CA-San_Diego_Miramar_Nas.tmy3
+CA-San_Diego_Montgomer.tmy3
+CA-San_Diego_North_Island_Nas.tmy3
+CA-San_Francisco_Intl_Ap.tmy3
+CA-San_Jose_Intl_Ap.tmy3
+CA-San_Luis_Co_Rgnl.tmy3
+CA-Sandberg.tmy3
+CA-Santa_Ana_John_Wayne_Ap.tmy3
+CA-Santa_Barbara_Municipal_Ap.tmy3
+CA-Santa_Maria_Public_Arpt.tmy3
+CA-Santa_Monica_Muni.tmy3
+CA-Santa_Rosa_Awos.tmy3
+CA-South_Lake_Tahoe.tmy3
+CA-Stockton_Metropolitan_Arpt.tmy3
+CA-Travis_Field_Afb.tmy3
+CA-Truckeetahoe.tmy3
+CA-Twentynine_Palms.tmy3
+CA-Ukiah_Municipal_Ap.tmy3
+CA-Van_Nuys_Airport.tmy3
+CA-Visalia_Muni_Awos.tmy3
+CA-Yuba_Co.tmy3
+CO-Akron_Washington_Co_Ap.tmy3
+CO-Alamosa_San_Luis_Valley_Rgnl.tmy3
+CO-Aspen_Pitkin_Co_Sar.tmy3
+CO-Aurora_Buckley_Field_Angb.tmy3
+CO-Broomfield_Jeffco_Boulder_Surfrad.tmy3
+CO-Colorado_Springs_Muni_Ap.tmy3
+CO-Cortez_Montezuma_Co.tmy3
+CO-Craigmoffat.tmy3
+CO-Denver_Centennial_Golden_Nrel.tmy3
+CO-Denver_Intl_Ap.tmy3
+CO-Durango_La_Plata_Co.tmy3
+CO-Eagle_County_Ap.tmy3
+CO-Fort_Collins_Awos.tmy3
+CO-Grand_Junction_Walker_Field.tmy3
+CO-Greeley_Weld_Awos.tmy3
+CO-Gunnison_Co_Awos.tmy3
+CO-Hayden_Yampa_Awos.tmy3
+CO-La_Junta_Municipal_Ap.tmy3
+CO-Lamar_Municipal.tmy3
+CO-Leadville_Lake_Co.tmy3
+CO-Limon.tmy3
+CO-Montrose_Co_Arpt.tmy3
+CO-Pueblo_Memorial_Ap.tmy3
+CO-Rifle_Garfield_Rgnl.tmy3
+CO-Trinidad_Las_Animas_County_Ap.tmy3
+CT-Bridgeport_Sikorsky_Memorial.tmy3
+CT-Danbury_Municipal.tmy3
+CT-Groton_New_London_Ap.tmy3
+CT-Hartford_Bradley_Intl_Ap.tmy3
+CT-Hartford_Brainard_Fd.tmy3
+CT-New_Haven_Tweed_Airport.tmy3
+CT-Oxford_Awos.tmy3
+DE-Dover_Afb.tmy3
+DE-Wilmington_New_Castle_Cnty_Ap.tmy3
+FL-Crestview_Bob_Sikes_Ap.tmy3
+FL-Daytona_Beach_Intl_Ap.tmy3
+FL-Fort_Lauderdale.tmy3
+FL-Fort_Lauderdale_Hollywood_Int.tmy3
+FL-Fort_Myers_Page_Field.tmy3
+FL-Gainesville_Regional_Ap.tmy3
+FL-Homestead_Afb.tmy3
+FL-Jacksonville_Craig.tmy3
+FL-Jacksonville_Intl_Arpt.tmy3
+FL-Jacksonville_Nas.tmy3
+FL-Key_West_Intl_Arpt.tmy3
+FL-Key_West_Nas.tmy3
+FL-Lakeland_Linder_Rgn.tmy3
+FL-Macdill_Afb.tmy3
+FL-Marathon_Airport.tmy3
+FL-Mayport_Ns.tmy3
+FL-Melbourne_Regional_Ap.tmy3
+FL-Miami_Intl_Ap.tmy3
+FL-Miami_Kendalltamia.tmy3
+FL-Miami_Opa_Locka.tmy3
+FL-Naples_Municipal.tmy3
+FL-Nasa_Shuttle_Fclty.tmy3
+FL-Ocala_Muni_Awos.tmy3
+FL-Orlando_Executive_Ap.tmy3
+FL-Orlando_Intl_Arpt.tmy3
+FL-Orlando_Sanford_Airport.tmy3
+FL-Panama_City_Bay_Co.tmy3
+FL-Pensacola_Forest_Sherman_Nas.tmy3
+FL-Pensacola_Regional_Ap.tmy3
+FL-Sarasota_Bradenton.tmy3
+FL-Southwest_Florida_I.tmy3
+FL-St_Lucie_Co_Intl.tmy3
+FL-St_Petersburg_Albert_Whitted.tmy3
+FL-St_Petersburg_Clear.tmy3
+FL-Tallahassee_Regional_Ap_Isis.tmy3
+FL-Tampa_International_Ap.tmy3
+FL-Tyndall_Afb.tmy3
+FL-Valparaiso_Elgin_Afb.tmy3
+FL-Valparaiso_Hurlburt.tmy3
+FL-Vero_Beach_Municipal_Arpt.tmy3
+FL-West_Palm_Beach_Intl_Arpt.tmy3
+FL-Whiting_Field_Naas.tmy3
+GA-Albany_Dougherty_County_Ap.tmy3
+GA-Alma_Bacon_County_Ap.tmy3
+GA-Athens_Ben_Epps_Ap.tmy3
+GA-Atlanta_Hartsfield_Intl_Ap.tmy3
+GA-Augusta_Bush_Field.tmy3
+GA-Brunswick_Golden_Is.tmy3
+GA-Brunswick_Malcolm_Mckinnon_Ap.tmy3
+GA-Columbus_Metropolitan_Arpt.tmy3
+GA-Dekalb_Peachtree.tmy3
+GA-Fort_Benning_Lawson.tmy3
+GA-Fulton_Co_Arpt_Brow.tmy3
+GA-Hunter_Aaf.tmy3
+GA-Macon_Middle_Ga_Regional_Ap.tmy3
+GA-Marietta_Dobbins_Afb.tmy3
+GA-Moody_Afb_Valdosta.tmy3
+GA-Rome_R_B_Russell_Ap.tmy3
+GA-Savannah_Intl_Ap.tmy3
+GA-Valdosta_Wb_Airport.tmy3
+GA-Warner_Robins_Afb.tmy3
+GU-Andersen_Afb.tmy3
+GU-Guam_Wfo.tmy3
+HI-Barbers_Point_Nas.tmy3
+HI-Hilo_International_Ap.tmy3
+HI-Honolulu_Intl_Arpt.tmy3
+HI-Kahului_Airport.tmy3
+HI-Kaneohe_Bay_Mcas.tmy3
+HI-Kapalua.tmy3
+HI-Kona_Intl_At_Keahol.tmy3
+HI-Lanai.tmy3
+HI-Lihue_Airport.tmy3
+HI-Molokai_Amos.tmy3
+IA-Algona.tmy3
+IA-Atlantic.tmy3
+IA-Boone_Muni.tmy3
+IA-Burlington_Municipal_Ap.tmy3
+IA-Carroll.tmy3
+IA-Cedar_Rapids_Municipal_Ap.tmy3
+IA-Chariton.tmy3
+IA-Charles_City.tmy3
+IA-Clarinda.tmy3
+IA-Clinton_Muni_Awos.tmy3
+IA-Council_Bluffs.tmy3
+IA-Creston.tmy3
+IA-Decorah.tmy3
+IA-Denison.tmy3
+IA-Des_Moines_Intl_Ap.tmy3
+IA-Dubuque_Regional_Ap.tmy3
+IA-Estherville_Muni.tmy3
+IA-Fair_Field.tmy3
+IA-Fort_Dodge_Awos.tmy3
+IA-Fort_Madison.tmy3
+IA-Keokuk_Muni.tmy3
+IA-Knoxville.tmy3
+IA-Le_Mars.tmy3
+IA-Mason_City_Municipal_Arpt.tmy3
+IA-Monticello_Muni.tmy3
+IA-Muscatine.tmy3
+IA-Newton_Muni.tmy3
+IA-Oelwen.tmy3
+IA-Orange_City.tmy3
+IA-Ottumwa_Industrial_Ap.tmy3
+IA-Red_Oak.tmy3
+IA-Sheldon.tmy3
+IA-Shenandoah_Muni.tmy3
+IA-Sioux_City_Sioux_Gateway_Ap.tmy3
+IA-Spencer.tmy3
+IA-Storm_Lake.tmy3
+IA-Washington.tmy3
+IA-Waterloo_Municipal_Ap.tmy3
+IA-Webster_City.tmy3
+ID-Boise_Air_Terminal_Uo.tmy3
+ID-Burley_Municipal_Arpt.tmy3
+ID-Caldwell_Awos.tmy3
+ID-Coeur_Daleneawos.tmy3
+ID-Hailey_Friedman_Mem.tmy3
+ID-Idaho_Falls_Fanning_Field.tmy3
+ID-Joslin_Fld_Magic_Va_Twin_Falls_Uo.tmy3
+ID-Lewiston_Nez_Perce_Cnty_Ap.tmy3
+ID-Malad_City.tmy3
+ID-Mountain_Home_Afb.tmy3
+ID-Pocatello_Regional_Ap.tmy3
+ID-Salmon_Lemhi_Awos.tmy3
+ID-Soda_Springs_Tigert.tmy3
+IL-Aurora_Municipal.tmy3
+IL-Belleville_Scott_Afb.tmy3
+IL-Cahokia_St_Louis.tmy3
+IL-Central_Illinois_Rg.tmy3
+IL-Chicago_Midway_Ap.tmy3
+IL-Chicago_Ohare_Intl_Ap.tmy3
+IL-Chicago_Waukegan.tmy3
+IL-Decatur.tmy3
+IL-Marion_Regional.tmy3
+IL-Moline_Quad_City_Intl_Ap.tmy3
+IL-Mount_Vernon_Awos.tmy3
+IL-Peoria_Greater_Peoria_Ap.tmy3
+IL-Quincy_Muni_Baldwin_Fld.tmy3
+IL-Rockford_Greater_Rockford_Ap.tmy3
+IL-Southern_Illinois.tmy3
+IL-Springfield_Capital_Ap.tmy3
+IL-Sterling_Rockfalls.tmy3
+IL-Univ_Of_Illinois_Wi_Bondville_Surfrad.tmy3
+IL-W_Chicago_Du_Page.tmy3
+IN-Delaware_Co_Johnson.tmy3
+IN-Evansville_Regional_Ap.tmy3
+IN-Fort_Wayne_Intl_Ap.tmy3
+IN-Grissom_Arb.tmy3
+IN-Huntingburg.tmy3
+IN-Indianapolis_Intl_Ap.tmy3
+IN-Lafayette_Purdue_Univ_Ap.tmy3
+IN-Monroe_Co.tmy3
+IN-South_Bend_Michiana_Rgnl_Ap.tmy3
+IN-Terre_Haute_Hulman_Regional_A.tmy3
+KS-Chanute_Martin_Johnson_Ap.tmy3
+KS-Concordia_Blosser_Muni_Ap.tmy3
+KS-Dodge_City_Regional_Ap.tmy3
+KS-Emporia_Municipal_Ap.tmy3
+KS-Fort_Riley_Marshall_Aaf.tmy3
+KS-Garden_City_Municipal_Ap.tmy3
+KS-Goodland_Renner_Field.tmy3
+KS-Great_Bend_Awos.tmy3
+KS-Hays_Muni_Awos.tmy3
+KS-Hill_City_Municipal_Ap.tmy3
+KS-Hutchinson_Municipal_Ap.tmy3
+KS-Liberal_Muni.tmy3
+KS-Manhattan_Rgnl.tmy3
+KS-Mcconnell_Afb.tmy3
+KS-Newton_Awos.tmy3
+KS-Olathe_Johnson_Co.tmy3
+KS-Olathe_Johnson_Co_Industrial.tmy3
+KS-Russell_Municipal_Ap.tmy3
+KS-Salina_Municipal_Ap.tmy3
+KS-Topeka_Forbes_Field.tmy3
+KS-Topeka_Municipal_Ap.tmy3
+KS-Wichita_Col_Jabara.tmy3
+KS-Wichita_Midcontinent_Ap.tmy3
+KY-Bowling_Green_Warren_Co_Ap.tmy3
+KY-Cincinnati_Northern_Ky_Ap.tmy3
+KY-Fort_Campbell_Aaf.tmy3
+KY-Fort_Knox_Godman_Aaf.tmy3
+KY-Henderson_City.tmy3
+KY-Jackson_Julian_Carroll_Ap.tmy3
+KY-Lexington_Bluegrass_Ap.tmy3
+KY-Londoncorbin_Ap.tmy3
+KY-Louisville_Bowman_Field.tmy3
+KY-Louisville_Standiford_Field.tmy3
+KY-Paducah_Barkley_Regional_Ap.tmy3
+KY-Somersetawos.tmy3
+LA-Alexandria_Esler_Regional_Ap.tmy3
+LA-Barksdale_Afb.tmy3
+LA-Baton_Rouge_Ryan_Arpt.tmy3
+LA-England_Afb.tmy3
+LA-Fort_Polk_Aaf.tmy3
+LA-Houmaterrebonne.tmy3
+LA-Lafayette_Regional_Ap.tmy3
+LA-Lake_Charles_Regional_Arpt.tmy3
+LA-Lake_Charles_Wb_Airp.tmy3
+LA-Monroe_Regional_Ap.tmy3
+LA-New_Iberia_Naas.tmy3
+LA-New_Orleans_Alvin_Callender_F.tmy3
+LA-New_Orleans_Intl_Arpt.tmy3
+LA-New_Orleans_Lakefront_Ap.tmy3
+LA-Patterson_Memorial.tmy3
+LA-Shreveport_Downtown.tmy3
+LA-Shreveport_Regional_Arpt.tmy3
+MA-Barnstable_Muni_Boa.tmy3
+MA-Beverly_Muni.tmy3
+MA-Boston_Logan_Intl_Arpt.tmy3
+MA-Chicopee_Falls_Westo.tmy3
+MA-Lawrence_Muni.tmy3
+MA-Marthas_Vineyard.tmy3
+MA-Nantucket_Memorial_Ap.tmy3
+MA-New_Bedford_Rgnl.tmy3
+MA-North_Adams.tmy3
+MA-Norwood_Memorial.tmy3
+MA-Otis_Angb.tmy3
+MA-Plymouth_Municipal.tmy3
+MA-Provincetown_Awos.tmy3
+MA-Westfield_Barnes_Muni_Ap.tmy3
+MA-Worchester_Regional_Arpt.tmy3
+MD-Andrews_Afb.tmy3
+MD-Baltimore_Bltwashngtn_Intl.tmy3
+MD-Hagerstown_Rgnl_Ric.tmy3
+MD-Patuxent_River_Nas.tmy3
+MD-Salisbury_Wicomico_Co_Ap.tmy3
+ME-Auburnlewiston.tmy3
+ME-Augusta_Airport.tmy3
+ME-Bangor_International_Ap.tmy3
+ME-Bar_Harbor_Awos.tmy3
+ME-Caribou_Municipal_Arpt.tmy3
+ME-Houlton_Intl_Arpt.tmy3
+ME-Millinocket_Municipal_Ap.tmy3
+ME-Naval_Air_Station.tmy3
+ME-Northern_Aroostook.tmy3
+ME-Portland_Intl_Jetport.tmy3
+ME-Presque_Isle_Municip.tmy3
+ME-Rockland_Knoxawos.tmy3
+ME-Sanford_Muni_Awos.tmy3
+ME-Waterville_Awos.tmy3
+ME-Wiscasset.tmy3
+MI-Alpena_County_Regional_Ap.tmy3
+MI-Ann_Arbor_Municipal.tmy3
+MI-Battle_Creek_Kellogg_Ap.tmy3
+MI-Benton_Harbor_Ross.tmy3
+MI-Cadillac_Wexford_Co_Ap.tmy3
+MI-Chippewa_Co_Intl.tmy3
+MI-Detroit_City_Airport.tmy3
+MI-Detroit_Metropolitan_Arpt.tmy3
+MI-Detroit_Willow_Run_Ap.tmy3
+MI-Escanaba_Awos.tmy3
+MI-Flint_Bishop_Intl_Arpt.tmy3
+MI-Grand_Rapids_Kent_County_Int.tmy3
+MI-Hancock_Houghton_Co_Ap.tmy3
+MI-Houghton_Lake_Roscommon_Co_Ar.tmy3
+MI-Howell.tmy3
+MI-Iron_Mountain_Ford.tmy3
+MI-Ironwood_Awos.tmy3
+MI-Jackson_Reynolds_Field.tmy3
+MI-Kalamazoo_Battle_Cr.tmy3
+MI-Lansing_Capital_City_Arpt.tmy3
+MI-Manistee_Awos.tmy3
+MI-Menominee_Awos.tmy3
+MI-Mount_Clemens_Selfridge_Fld.tmy3
+MI-Muskegon_County_Arpt.tmy3
+MI-Oakland_Co_Intl.tmy3
+MI-Oscoda_Wurtsmith_Afb.tmy3
+MI-Pellston_Emmet_County_Ap.tmy3
+MI-Saginaw_Tri_City_Intl_Ap.tmy3
+MI-Sault_Ste_Marie_Sanderson_Fie.tmy3
+MI-Stclair_County_Int.tmy3
+MI-Traverse_City_Cherry_Capital.tmy3
+MN-Aitkin_Ndbawos.tmy3
+MN-Albert_Lea_Awos.tmy3
+MN-Alexandria_Municipal_Ap.tmy3
+MN-Austin_Muni.tmy3
+MN-Baudette_International_Ap.tmy3
+MN-Bemidji_Municipal.tmy3
+MN-Benson_Muni.tmy3
+MN-Brainerd_Wieland.tmy3
+MN-Cambridge_Muni.tmy3
+MN-Cloquet_Awos.tmy3
+MN-Crane_Lake_Awos.tmy3
+MN-Crookston_Muni_Fld.tmy3
+MN-Detroit_Lakesawos.tmy3
+MN-Duluth_International_Arpt.tmy3
+MN-Ely_Muni.tmy3
+MN-Eveleth_Muni_Awos.tmy3
+MN-Fairmont_Muniawos.tmy3
+MN-Faribault_Muni_Awos.tmy3
+MN-Fergus_Fallsawos.tmy3
+MN-Flying_Cloud.tmy3
+MN-Fosstonawos.tmy3
+MN-Glenwood_Asos.tmy3
+MN-Grand_Rapidsawos.tmy3
+MN-Hallock.tmy3
+MN-Hibbing_Chisholmhibbing_Ap.tmy3
+MN-Hutchinson_Awos.tmy3
+MN-International_Falls_Intl_Ap.tmy3
+MN-Litchfield_Muni.tmy3
+MN-Little_Falls_Awos.tmy3
+MN-Mankatoawos.tmy3
+MN-Marshall_Ryanawos.tmy3
+MN-Minneapolis_Crystal.tmy3
+MN-Minneapolisst_Paul_Intl_Arp.tmy3
+MN-Mora_Muni_Awos.tmy3
+MN-Morris_Muni_Awos.tmy3
+MN-New_Ulm_Muni_Awos.tmy3
+MN-Orr.tmy3
+MN-Owatonna_Awos.tmy3
+MN-Park_Rapids_Municipal_Ap.tmy3
+MN-Pipestone_Awos.tmy3
+MN-Red_Wing.tmy3
+MN-Redwood_Falls_Muni.tmy3
+MN-Rochester_International_Arpt.tmy3
+MN-Roseau_Muni_Awos.tmy3
+MN-Silver_Bay.tmy3
+MN-South_St_Paul_Muni.tmy3
+MN-St_Cloud_Regional_Arpt.tmy3
+MN-St_Paul_Downtown_Ap.tmy3
+MN-Thief_Riverawos.tmy3
+MN-Two_Harbors.tmy3
+MN-Wheaton_Ndb_Awos.tmy3
+MN-Willmar.tmy3
+MN-Winona_Muni_Awos.tmy3
+MN-Worthington_Awos.tmy3
+MO-Cape_Girardeau_Municipal_Ap.tmy3
+MO-Columbia_Regional_Airport.tmy3
+MO-Farmington.tmy3
+MO-Ft_Lnrd_Wd_Aaf.tmy3
+MO-Jefferson_City_Mem.tmy3
+MO-Joplin_Municipal_Ap.tmy3
+MO-Kaiser_Mem_Awos.tmy3
+MO-Kansas_City_Downtown_Ap.tmy3
+MO-Kansas_City_Intl_Arpt.tmy3
+MO-Kirksville_Regional_Ap.tmy3
+MO-Poplar_Bluffamos.tmy3
+MO-Springfield_Regional_Arpt.tmy3
+MO-St_Joseph_Rosecrans_Memorial.tmy3
+MO-St_Louis_Lambert_Intl_Arpt.tmy3
+MO-St_Louis_Spirit_Of_St_Louis_A.tmy3
+MO-Vichy_Rolla_Natl_Arpt.tmy3
+MO-Whiteman_Afb.tmy3
+MS-Columbus_Afb.tmy3
+MS-Golden_Triawos.tmy3
+MS-Greenville_Municipal.tmy3
+MS-Greenwood_Leflore_Arpt.tmy3
+MS-Gulfport_Biloxi_Int.tmy3
+MS-Hattiesburg_Laurel.tmy3
+MS-Jackson_International_Ap.tmy3
+MS-Keesler_Afb.tmy3
+MS-Mccomb_Pike_County_Ap.tmy3
+MS-Meridian_Key_Field.tmy3
+MS-Meridian_Naas.tmy3
+MS-Natchez_Hardyawos.tmy3
+MS-Tupelo_C_D_Lemons_Arpt.tmy3
+MT-Billings_Logan_Intl_Arpt.tmy3
+MT-Bozeman_Gallatin_Field.tmy3
+MT-Butte_Bert_Mooney_Arpt.tmy3
+MT-Cut_Bank_Muni_Ap.tmy3
+MT-Glasgow_Intl_Arpt.tmy3
+MT-Glendiveawos.tmy3
+MT-Great_Falls_Intl_Arpt.tmy3
+MT-Havre_Citycounty_Ap.tmy3
+MT-Helena_Regional_Airport.tmy3
+MT-Kalispell_Glacier_Pk_Intl_Ar.tmy3
+MT-Lewistown_Municipal_Arpt.tmy3
+MT-Livingston_Mission_Field.tmy3
+MT-Miles_City_Municipal_Arpt.tmy3
+MT-Missoula_International_Ap.tmy3
+MT-Sidneyrichland.tmy3
+MT-Wolf_Point_Intl_Fort_Peck_Surfrad.tmy3
+NC-Asheville_Regional_Arpt.tmy3
+NC-Cape_Hatteras_Nws_Bldg.tmy3
+NC-Charlotte_Douglas_Intl_Arpt.tmy3
+NC-Cherry_Point_Mcas.tmy3
+NC-Dare_Co_Rgnl.tmy3
+NC-Elizabeth_City_Coast_Guard_Ai_Nrel.tmy3
+NC-Fayetteville_Pope_Afb.tmy3
+NC-Fayetteville_Rgnl_G.tmy3
+NC-Fort_Bragg_Simmons_Aaf.tmy3
+NC-Goldsboro_Seymour_Johnson_Afb.tmy3
+NC-Greensboro_Piedmont_Triad_Int.tmy3
+NC-Hickory_Regional_Ap.tmy3
+NC-Jacksonville_Awos.tmy3
+NC-Kinston_Stallings_Afb.tmy3
+NC-New_Bern_Craven_Co_Regl_Ap.tmy3
+NC-New_River_Mcaf.tmy3
+NC-Pitt_Greenville_Arp.tmy3
+NC-Raleigh_Durham_International.tmy3
+NC-Rocky_Mount_Wilson.tmy3
+NC-Southern_Pines_Awos.tmy3
+NC-Wilmington_International_Arpt.tmy3
+NC-Winstonsalem_Reynolds_Ap.tmy3
+ND-Bismarck_Municipal_Arpt_Isis.tmy3
+ND-Devils_Lakeawos.tmy3
+ND-Dickinson_Municipal_Ap.tmy3
+ND-Fargo_Hector_International_Ap.tmy3
+ND-Grand_Forks_Af.tmy3
+ND-Grand_Forks_International_Ap.tmy3
+ND-Jamestown_Municipal_Arpt.tmy3
+ND-Minot_Afb.tmy3
+ND-Minot_Faa_Ap.tmy3
+ND-Williston_Sloulin_Intl_Ap.tmy3
+NE-Ainsworth_Municipal.tmy3
+NE-Alliance_Municipal.tmy3
+NE-Beatrice_Municipal.tmy3
+NE-Bellevue_Offutt_Afb.tmy3
+NE-Brewster_Field_Arpt.tmy3
+NE-Broken_Bow_Muni.tmy3
+NE-Chadron_Municipal_Ap.tmy3
+NE-Columbus_Muni.tmy3
+NE-Falls_City_Brenner.tmy3
+NE-Fremont_Muni_Arpt.tmy3
+NE-Grand_Island_Central_Ne_Regio.tmy3
+NE-Hastings_Municipal.tmy3
+NE-Imperial_Faa_Ap.tmy3
+NE-Kearney_Muni_Awos.tmy3
+NE-Lincoln_Municipal_Arpt.tmy3
+NE-Mccook_Municipal.tmy3
+NE-Norfolk_Karl_Stefan_Mem_Arpt.tmy3
+NE-North_Platte_Regional_Ap.tmy3
+NE-Omaha_Eppley_Airfield.tmy3
+NE-Omaha_Wsfo.tmy3
+NE-Oneill_Baker_Field.tmy3
+NE-Ord_Sharp_Field.tmy3
+NE-Scottsbluff_W_B_Heilig_Field.tmy3
+NE-Sidney_Municipal_Ap.tmy3
+NE-Tekamah_Asos.tmy3
+NE-Valentine_Miller_Field.tmy3
+NH-Berlin_Municipal.tmy3
+NH-Concord_Municipal_Arpt.tmy3
+NH-Dillant_Hopkins.tmy3
+NH-Laconia_Muni_Awos.tmy3
+NH-Lebanon_Municipal.tmy3
+NH-Manchester_Airport.tmy3
+NH-Mount_Washington.tmy3
+NH-Pease_Intl_Tradepor.tmy3
+NJ-Atlantic_City_Intl_Ap.tmy3
+NJ-Belmar_Asc.tmy3
+NJ-Caldwell_Essex_Co.tmy3
+NJ-Cape_May_Co.tmy3
+NJ-Mcguire_Afb.tmy3
+NJ-Millville_Municipal_Ap.tmy3
+NJ-Newark_International_Arpt.tmy3
+NJ-Teterboro_Airport.tmy3
+NJ-Trenton_Mercer_County_Ap.tmy3
+NM-Albuquerque_Intl_Arpt_Isis.tmy3
+NM-Carlsbad_Cavern_City_Air_Term.tmy3
+NM-Clayton_Municipal_Airpark.tmy3
+NM-Clovis_Cannon_Afb.tmy3
+NM-Clovis_Muni_Awos.tmy3
+NM-Deming_Muni.tmy3
+NM-Farmington_Four_Corners_Regl.tmy3
+NM-Gallup_Sen_Clarke_Fld.tmy3
+NM-Holloman_Afb.tmy3
+NM-Las_Cruces_Intl.tmy3
+NM-Las_Vegas_Municipal_Arpt.tmy3
+NM-Roswell_Industrial_Air_Park.tmy3
+NM-Sata_Fe_County_Municipal_Ap.tmy3
+NM-Sierra_Blanca_Rgnl.tmy3
+NM-Taos_Muni_Aptawos.tmy3
+NM-Truth_Or_Consequences_Muni_Ap.tmy3
+NM-Tucumcari_Faa_Ap.tmy3
+NV-Elko_Municipal_Arpt.tmy3
+NV-Ely_Yelland_Field.tmy3
+NV-Fallon_Naas.tmy3
+NV-Las_Vegas_Mccarran_Intl_Ap.tmy3
+NV-Lovelock_Derby_Field.tmy3
+NV-Mercury_Desert_Rock_Ap_Surfrad.tmy3
+NV-Nellis_Afb.tmy3
+NV-Reno_Tahoe_International_Ap.tmy3
+NV-Tonopah_Airport.tmy3
+NV-Winnemucca_Municipal_Arpt.tmy3
+NY-Adirondack_Rgnl.tmy3
+NY-Albany_County_Ap.tmy3
+NY-Binghamton_Edwin_A_Link_Field.tmy3
+NY-Buffalo_Niagara_Intl_Ap.tmy3
+NY-Elmira_Corning_Regional_Ap.tmy3
+NY-Fort_Drum_Wheelers.tmy3
+NY-Glens_Falls_Ap.tmy3
+NY-Islip_Long_Isl_Macarthur_Ap.tmy3
+NY-Jamestown_Awos.tmy3
+NY-Massena_Ap.tmy3
+NY-Monticelloawos.tmy3
+NY-New_York_Central_Prk_Obs_Belv.tmy3
+NY-New_York_J_F_Kennedy_Intl_Ar.tmy3
+NY-New_York_Laguardia_Arpt.tmy3
+NY-Niagara_Falls_Af.tmy3
+NY-Poughkeepsie_Dutchess_Co_Ap.tmy3
+NY-Republic.tmy3
+NY-Rochester_Greater_Rochester_I.tmy3
+NY-Stewart_Field.tmy3
+NY-Syracuse_Hancock_Intl_Arpt.tmy3
+NY-Utica_Oneida_County_Ap.tmy3
+NY-Watertown_Ap.tmy3
+NY-Westhampton_Gabreski_Ap.tmy3
+NY-White_Plains_Westchester_Co_A.tmy3
+OH-Akron_Akroncanton_Reg_Ap.tmy3
+OH-Burke_Lakefront.tmy3
+OH-Cincinnati_Municipal_Ap_Lunki.tmy3
+OH-Cleveland_Hopkins_Intl_Ap.tmy3
+OH-Columbus_Port_Columbus_Intl_A.tmy3
+OH-Dayton_International_Airport.tmy3
+OH-Dayton_Wright_Patterson_Afb.tmy3
+OH-Findlay_Airport.tmy3
+OH-Mansfield_Lahm_Municipal_Arpt.tmy3
+OH-Ohio_State_Universi.tmy3
+OH-Toledo_Express_Airport.tmy3
+OH-Youngstown_Regional_Airport.tmy3
+OH-Zanesville_Municipal_Ap.tmy3
+OK-Altus_Afb.tmy3
+OK-Bartlesville_Philli.tmy3
+OK-Clintonsherman.tmy3
+OK-Fort_Sill_Post_Field_Af.tmy3
+OK-Gage_Airport.tmy3
+OK-Hobart_Municipal_Ap.tmy3
+OK-Lawton_Municipal.tmy3
+OK-Mcalester_Municipal_Ap.tmy3
+OK-Oklahoma_City_Tinker_Afb.tmy3
+OK-Oklahoma_City_Wiley.tmy3
+OK-Oklahoma_City_Will_Rogers_Wor.tmy3
+OK-Ponca_City_Municipal_Ap_Sgp_Arm.tmy3
+OK-Stillwater_Rgnl.tmy3
+OK-Tulsa_International_Airport.tmy3
+OK-Vance_Afb.tmy3
+OR-Astoria_Regional_Airport.tmy3
+OR-Aurora_State.tmy3
+OR-Baker_Municipal_Ap.tmy3
+OR-Burns_Municipal_Arpt_Uo.tmy3
+OR-Corvallis_Muni.tmy3
+OR-Eugene_Mahlon_Sweet_Arpt_Uo.tmy3
+OR-Klamath_Falls_Intl_Ap_Uo.tmy3
+OR-La_Grande_Muni_Ap.tmy3
+OR-Lakeview_Awos.tmy3
+OR-Medford_Rogue_Valley_Intl_Ap_Ashland_Uo.tmy3
+OR-North_Bend_Muni_Airport.tmy3
+OR-Pendleton_E_Or_Regional_Ap.tmy3
+OR-Portland_Hillsboro.tmy3
+OR-Portland_International_Ap.tmy3
+OR-Portland_Troutdale.tmy3
+OR-Redmond_Roberts_Field.tmy3
+OR-Roseburg_Regional_Ap.tmy3
+OR-Salem_Mcnary_Field.tmy3
+OR-Sexton_Summit.tmy3
+PA-Allentown_Lehigh_Valley_Intl.tmy3
+PA-Altoona_Blair_Co_Arpt.tmy3
+PA-Bradford_Regional_Ap.tmy3
+PA-Butler_Co_Awos.tmy3
+PA-Dubois_Faa_Ap.tmy3
+PA-Erie_International_Ap.tmy3
+PA-Franklin.tmy3
+PA-Harrisburg_Capital_City_Arpt.tmy3
+PA-Johnstown_Cambria_County_Ap.tmy3
+PA-Lancaster.tmy3
+PA-Middletown_Harrisburg_Intl_Ap.tmy3
+PA-Philadelphia_International_Ap.tmy3
+PA-Philadelphia_Ne_Philadelphia.tmy3
+PA-Pittsburgh_Allegheny_Co_Ap.tmy3
+PA-Pittsburgh_International_Ap.tmy3
+PA-Reading_Spaatz_Field.tmy3
+PA-State_College_Penn_State_Surfrad.tmy3
+PA-Washington_Awos.tmy3
+PA-Wilkesbarre_Scranton_Intl_Ap.tmy3
+PA-Williamsport_Regional_Ap.tmy3
+PA-Willow_Grove_Nas.tmy3
+PR-Aquadilla_Borinquen.tmy3
+PR-Eugenio_Maria_De_Ho.tmy3
+PR-Mercedita.tmy3
+PR-Roosevelt_Roads.tmy3
+PR-San_Juan_Intl_Arpt.tmy3
+PR-San_Juan_L_M_Marin_Intl_Ap.tmy3
+RI-Block_Island_State_Arpt.tmy3
+RI-Pawtucket_Awos.tmy3
+RI-Providence_T_F_Green_State_Ar.tmy3
+SC-Anderson_County_Ap.tmy3
+SC-Beaufort_Mcas.tmy3
+SC-Charleston_Intl_Arpt.tmy3
+SC-Columbia_Metro_Arpt.tmy3
+SC-Florence_Regional_Ap.tmy3
+SC-Greenville_Downtown_Ap.tmy3
+SC-Greer_Greenvlspartanbrg_Ap.tmy3
+SC-Myrtle_Beach_Afb.tmy3
+SC-North_Myrtle_Beach_Grand_Stra.tmy3
+SC-Sumter_Shaw_Afb.tmy3
+SD-Aberdeen_Regional_Arpt.tmy3
+SD-Brookings_Awos.tmy3
+SD-Chan_Gurney_Muni.tmy3
+SD-Ellsworth_Afb.tmy3
+SD-Huron_Regional_Arpt.tmy3
+SD-Mitchell_Awos.tmy3
+SD-Mobridge.tmy3
+SD-Pierre_Municipal_Ap.tmy3
+SD-Rapid_City_Regional_Arpt.tmy3
+SD-Sioux_Falls_Foss_Field.tmy3
+SD-Watertown_Municipal_Ap.tmy3
+TN-Bristol_Tri_City_Airport.tmy3
+TN-Chattanooga_Lovell_Field_Ap.tmy3
+TN-Crossville_Memorial_Ap.tmy3
+TN-Dyersburg_Municipal_Ap.tmy3
+TN-Jackson_Mckellarsipes_Regl_A.tmy3
+TN-Knoxville_Mcghee_Tyson_Ap.tmy3
+TN-Memphis_International_Ap.tmy3
+TN-Nashville_International_Ap.tmy3
+TX-Abilene_Dyess_Afb.tmy3
+TX-Abilene_Regional_Ap_Ut.tmy3
+TX-Alice_Intl_Ap.tmy3
+TX-Amarillo_International_Ap_Canyon_Ut.tmy3
+TX-Austin_Mueller_Municipal_Ap_Ut.tmy3
+TX-Brownsville_S_Padre_Isl_Intl.tmy3
+TX-Camp_Mabry.tmy3
+TX-Childress_Municipal_Ap.tmy3
+TX-College_Station_Easterwood_Fl.tmy3
+TX-Corpus_Christi_Intl_Arpt_Ut.tmy3
+TX-Corpus_Christi_Nas.tmy3
+TX-Cotulla_Faa_Ap.tmy3
+TX-Cox_Fld.tmy3
+TX-Dalhart_Municipal_Ap.tmy3
+TX-Dallas_Addison_Arpt.tmy3
+TX-Dallas_Love_Field.tmy3
+TX-Dallas_Redbird_Arpt.tmy3
+TX-Dallasfort_Worth_Intl_Ap.tmy3
+TX-Del_Rio_Laughlin_Afb.tmy3
+TX-Del_Rio_Ut.tmy3
+TX-Draughon_Miller_Cen.tmy3
+TX-El_Paso_International_Ap_Ut.tmy3
+TX-Fort_Hood.tmy3
+TX-Fort_Worth_Alliance.tmy3
+TX-Fort_Worth_Meacham.tmy3
+TX-Fort_Worth_Nas.tmy3
+TX-Galveston_Scholes.tmy3
+TX-Georgetown_Awos.tmy3
+TX-Greenville_Majors.tmy3
+TX-Harlingen_Rio_Grande_Valley_I.tmy3
+TX-Hondo_Municipal_Ap.tmy3
+TX-Houston_Bush_Intercontinental.tmy3
+TX-Houston_Dw_Hooks.tmy3
+TX-Houston_Ellington_Afb_Clear_Lake_Ut.tmy3
+TX-Houston_William_P_Hobby_Ap.tmy3
+TX-Killeen_Muni_Awos.tmy3
+TX-Kingsville.tmy3
+TX-Laredo_Intl_Ap_Ut.tmy3
+TX-Longview_Gregg_County_Ap_Overton_Ut.tmy3
+TX-Lubbock_International_Ap.tmy3
+TX-Lufkin_Angelina_Co.tmy3
+TX-Marfa_Ap.tmy3
+TX-Mc_Gregor_Awos.tmy3
+TX-Mcallen_Miller_Intl_Ap_Edinburg_Ut.tmy3
+TX-Midland_International_Ap.tmy3
+TX-Mineral_Wells_Municipal_Ap.tmy3
+TX-Nacogdoches_Awos.tmy3
+TX-Palacios_Municipal_Ap.tmy3
+TX-Port_Arthur_Jefferson_County.tmy3
+TX-Randolph_Afb.tmy3
+TX-Robert_Gray_Aaf.tmy3
+TX-Rockport_Aransas_Co.tmy3
+TX-San_Angelo_Mathis_Field.tmy3
+TX-San_Antonio_Intl_Ap.tmy3
+TX-San_Antonio_Kelly_Field_Afb.tmy3
+TX-San_Antonio_Stinson.tmy3
+TX-Tyler_Pounds_Fld.tmy3
+TX-Victoria_Regional_Ap.tmy3
+TX-Waco_Regional_Ap.tmy3
+TX-Wichita_Falls_Municipal_Arpt.tmy3
+TX-Wink_Winkler_County_Ap.tmy3
+UT-Blanding.tmy3
+UT-Bryce_Cnyn_Faa_Ap.tmy3
+UT-Cedar_City_Municipal_Ap.tmy3
+UT-Delta.tmy3
+UT-Hanksville.tmy3
+UT-Moab_Canyonlands_Uo.tmy3
+UT-Ogden_Hill_Afb.tmy3
+UT-Ogden_Hinkley_Airport.tmy3
+UT-Provo_Muni_Awos.tmy3
+UT-Saint_George_Awos.tmy3
+UT-Salt_Lake_City_Intl_Arpt_Isis.tmy3
+UT-Vernal.tmy3
+UT-Wendover_Usaf_Auxiliary_Field.tmy3
+VA-Abington.tmy3
+VA-Charlottesville_Faa.tmy3
+VA-Danville_Faa_Ap.tmy3
+VA-Davison_Aaf.tmy3
+VA-Dinwiddie_Co.tmy3
+VA-Farmville.tmy3
+VA-Franklin_Naas.tmy3
+VA-Hillsville.tmy3
+VA-Hot_Springs_Ingalls.tmy3
+VA-Langley_Afb.tmy3
+VA-Leesburg_Godfrey.tmy3
+VA-Lynchburg_Regional_Arpt.tmy3
+VA-Manassas_Muniawos.tmy3
+VA-Marion_Wytheville.tmy3
+VA-Martinsville.tmy3
+VA-Melfa_Accomack_Arpt.tmy3
+VA-Newport_News.tmy3
+VA-Norfolk_International_Ap.tmy3
+VA-Norfolk_Nas.tmy3
+VA-Oceana_Nas.tmy3
+VA-Pulaski.tmy3
+VA-Quantico_Mcas.tmy3
+VA-Richmond_International_Ap.tmy3
+VA-Roanoke_Regional_Ap.tmy3
+VA-Shannon_Arpt.tmy3
+VA-Staunton_Shenandoah.tmy3
+VA-Virginia_Tech_Arpt.tmy3
+VA-Washington_Dc_Dulles_Intl_Ar_Sterling_Isis.tmy3
+VA-Washington_Dc_Reagan_Ap.tmy3
+VA-Winchester_Rgnl.tmy3
+VA-Wise_Lonesome_Pine.tmy3
+VI-Charlotte_Amalie_Harry_S_Trum.tmy3
+VT-Burlington_International_Ap.tmy3
+VT-Montpelier_Ap.tmy3
+VT-Rutland_State.tmy3
+VT-Springfield_Hartnes.tmy3
+WA-Bellingham_Intl_Ap.tmy3
+WA-Bremerton_National.tmy3
+WA-Ephrata_Ap_Fcwos.tmy3
+WA-Fairchild_Afb.tmy3
+WA-Felts_Fld.tmy3
+WA-Gray_Aaf.tmy3
+WA-Hanford.tmy3
+WA-Hoquiam_Ap.tmy3
+WA-Kelso_Wb_Ap.tmy3
+WA-Moses_Lake_Grant_County_Ap.tmy3
+WA-Olympia_Airport.tmy3
+WA-Pasco.tmy3
+WA-Pullman_Moscow_Rgnl.tmy3
+WA-Quillayute_State_Airport.tmy3
+WA-Renton_Muni.tmy3
+WA-Seattle_Boeing_Field_Isis.tmy3
+WA-Seattle_Seattletacoma_Intl_A.tmy3
+WA-Snohomish_Co.tmy3
+WA-Spokane_International_Ap_Cheney_Uo.tmy3
+WA-Stampede_Pass.tmy3
+WA-Tacoma_Mcchord_Afb.tmy3
+WA-Tacoma_Narrows.tmy3
+WA-The_Dalles_Municipal_Arpt.tmy3
+WA-Toledowinlock_Mem.tmy3
+WA-Walla_Walla_City_County_Ap.tmy3
+WA-Wenatchee_Pangborn.tmy3
+WA-Whidbey_Island_Nas.tmy3
+WA-William_R_Fairchild.tmy3
+WA-Yakima_Air_Terminal.tmy3
+WI-Antigo_Langawos.tmy3
+WI-Appleton_Outagamie.tmy3
+WI-Eau_Claire_County_Ap.tmy3
+WI-Green_Bay_Austin_Straubel_Int.tmy3
+WI-Janesville_Rock_Co.tmy3
+WI-La_Crosse_Municipal_Arpt.tmy3
+WI-Lone_Rock_Faa_Ap.tmy3
+WI-Madison_Dane_Co_Regional_Arpt_Isis.tmy3
+WI-Manitowac_Muni_Awos.tmy3
+WI-Marshfield_Muni.tmy3
+WI-Milwaukee_Mitchell_Intl_Ap.tmy3
+WI-Minocqua_Woodruff.tmy3
+WI-Mosinee_Central_Wi.tmy3
+WI-Phillips_Price_Co.tmy3
+WI-Rhinelander_Oneida.tmy3
+WI-Rice_Lake_Municipal.tmy3
+WI-Sturgeon_Bay.tmy3
+WI-Watertown.tmy3
+WI-Wausau_Municipal_Arpt.tmy3
+WI-Wittman_Rgnl.tmy3
+WV-Beckley_Raleigh_Co_Mem_Ap.tmy3
+WV-Bluefield_Mercer_Co_Nrel.tmy3
+WV-Charleston_Yeager_Arpt.tmy3
+WV-Elkins_Elkinsrandolph_Co_Arp.tmy3
+WV-Harrison_Marion_Rgn.tmy3
+WV-Huntington_Tristate_Arpt.tmy3
+WV-Lewisburg_Greenbrie.tmy3
+WV-Martinsburg_Eastern_Wv_Reg_Ap.tmy3
+WV-Morgantown_Hart_Field.tmy3
+WV-Parkersburg_Wood_County_Ap.tmy3
+WV-Wheeling_Ohio_County_Ap.tmy3
+WY-Casper_Natrona_Co_Intl_Ap.tmy3
+WY-Cheyenne_Municipal_Arpt.tmy3
+WY-Cody_Muni_Awos.tmy3
+WY-Evanston_Burns_Fld.tmy3
+WY-Gillette_Gillettec.tmy3
+WY-Jackson_Hole.tmy3
+WY-Lander_Hunt_Field.tmy3
+WY-Laramie_General_Brees_Field.tmy3
+WY-Rawlins_Municipal_Ap.tmy3
+WY-Riverton_Municipl_Ap.tmy3
+WY-Rock_Springs_Arpt_Green_River_Uo.tmy3
+WY-Sheridan_County_Arpt.tmy3
+WY-Worland_Municipal.tmy3
+[
+    "AK-Adak_Nas.tmy3",
+    "AK-Ambler.tmy3",
+    "AK-Anaktuvuk_Pass.tmy3",
+    "AK-Anchorage_Elmendorf.tmy3",
+    "AK-Anchorage_Intl_Ap.tmy3",
+    "AK-Anchorage_Merrill_Field.tmy3",
+    "AK-Aniak_Airport.tmy3",
+    "AK-Annette_Island_Ap.tmy3",
+    "AK-Anvik.tmy3",
+    "AK-Barrow_W_Postw_Rogers_Arpt_Nsa_Arm.tmy3",
+    "AK-Bethel_Airport.tmy3",
+    "AK-Bettles_Field.tmy3",
+    "AK-Big_Delta_Allen_Aaf.tmy3",
+    "AK-Big_River_Lake.tmy3",
+    "AK-Birchwood.tmy3",
+    "AK-Chulitna.tmy3",
+    "AK-Cold_Bay_Arpt.tmy3",
+    "AK-Cordova.tmy3",
+    "AK-Deadhorse.tmy3",
+    "AK-Dillingham_Amos.tmy3",
+    "AK-Dutch_Harbor.tmy3",
+    "AK-Emmonak.tmy3",
+    "AK-Fairbanks_Eielson_A.tmy3",
+    "AK-Fairbanks_Intl_Arpt.tmy3",
+    "AK-Fort_Yukon.tmy3",
+    "AK-Gambell.tmy3",
+    "AK-Gulkana_Intermediate_Field.tmy3",
+    "AK-Gustavus.tmy3",
+    "AK-Hayes_River.tmy3",
+    "AK-Healy_River_Airport.tmy3",
+    "AK-Homer_Arpt.tmy3",
+    "AK-Hoonah.tmy3",
+    "AK-Hooper_Bay.tmy3",
+    "AK-Huslia.tmy3",
+    "AK-Hydaburg_Seaplane.tmy3",
+    "AK-Iliamna_Arpt.tmy3",
+    "AK-Juneau_Intl_Arpt.tmy3",
+    "AK-Kake_Seaplane_Base.tmy3",
+    "AK-Kenai_Municipal_Ap.tmy3",
+    "AK-Ketchikan_Intl_Ap.tmy3",
+    "AK-King_Salmon_Arpt.tmy3",
+    "AK-Kodiak_Airport.tmy3",
+    "AK-Kotzebue_Ralph_Wein_Memorial.tmy3",
+    "AK-Lake_Hood_Seaplane.tmy3",
+    "AK-Mcgrath_Arpt.tmy3",
+    "AK-Mekoryuk.tmy3",
+    "AK-Middleton_Island_Aut.tmy3",
+    "AK-Minchumina.tmy3",
+    "AK-Nenana_Municipal_Ap.tmy3",
+    "AK-Nome_Municipal_Arpt.tmy3",
+    "AK-Northway_Airport.tmy3",
+    "AK-Palmer_Municipal.tmy3",
+    "AK-Petersburg.tmy3",
+    "AK-Point_Hope_Awos.tmy3",
+    "AK-Port_Heiden.tmy3",
+    "AK-Saint_Marys_Awos.tmy3",
+    "AK-Sand_Point.tmy3",
+    "AK-Savoonga.tmy3",
+    "AK-Selawik.tmy3",
+    "AK-Seward.tmy3",
+    "AK-Shemya_Afb.tmy3",
+    "AK-Shishmaref_Awos.tmy3",
+    "AK-Sitka_Japonski_Ap.tmy3",
+    "AK-Skagway_Airport.tmy3",
+    "AK-Sleetmute.tmy3",
+    "AK-Soldotna.tmy3",
+    "AK-St_Paul_Island_Arpt.tmy3",
+    "AK-Talkeetna_State_Arpt.tmy3",
+    "AK-Tanana_Ralph_M_Calhoun_Mem_Ap.tmy3",
+    "AK-Togiac_Village_Awos.tmy3",
+    "AK-Unalakleet_Field.tmy3",
+    "AK-Valdez_Pioneer_Fiel.tmy3",
+    "AK-Valdez_Wso.tmy3",
+    "AK-Whittier.tmy3",
+    "AK-Wrangell.tmy3",
+    "AK-Yakutat_State_Arpt.tmy3",
+    "AL-Anniston_Metropolitan_Ap.tmy3",
+    "AL-Auburnopelika_Apt.tmy3",
+    "AL-Birmingham_Municipal_Ap.tmy3",
+    "AL-Cairns_Field_Fort_Rucker.tmy3",
+    "AL-Dothan_Municipal_Ap.tmy3",
+    "AL-Gadsen_Muni_Awos.tmy3",
+    "AL-Huntsville_Intl_Jones_Field.tmy3",
+    "AL-Maxwell_Afb.tmy3",
+    "AL-Mobile_Downtown_Ap.tmy3",
+    "AL-Mobile_Regional_Ap.tmy3",
+    "AL-Montgomery_Dannelly_Field.tmy3",
+    "AL-Muscle_Shoals_Regional_Ap.tmy3",
+    "AL-Troy_Af.tmy3",
+    "AL-Tuscaloosa_Municipal_Ap.tmy3",
+    "AR-Batesville_Awos.tmy3",
+    "AR-Bentonville_Awos.tmy3",
+    "AR-El_Dorado_Goodwin_Field.tmy3",
+    "AR-Fayetteville_Drake_Field.tmy3",
+    "AR-Flippin_Awos.tmy3",
+    "AR-Fort_Smith_Regional_Ap.tmy3",
+    "AR-Harrison_Faa_Ap.tmy3",
+    "AR-Jonesboro_Muni.tmy3",
+    "AR-Little_Rock_Adams_Field.tmy3",
+    "AR-Little_Rock_Afb.tmy3",
+    "AR-Memorial_Fld.tmy3",
+    "AR-Pine_Bluff_Faa_Ap.tmy3",
+    "AR-Rogers_Awos.tmy3",
+    "AR-Siloam_Springawos.tmy3",
+    "AR-Springdale_Muni.tmy3",
+    "AR-Stuttgart_Awos.tmy3",
+    "AR-Texarkana_Webb_Field.tmy3",
+    "AR-Walnut_Ridge_Awos.tmy3",
+    "AZ-Casa_Granda_Awos.tmy3",
+    "AZ-Davis_Monthan_Afb.tmy3",
+    "AZ-Deer_Valley_Phoenix.tmy3",
+    "AZ-Douglas_Bisbeedouglas_Intl_A.tmy3",
+    "AZ-Flagstaff_Pulliam_Arpt.tmy3",
+    "AZ-Grand_Canyon_Natl_P.tmy3",
+    "AZ-Kingman_Amos.tmy3",
+    "AZ-Luke_Afb.tmy3",
+    "AZ-Page_Muni_Amos.tmy3",
+    "AZ-Phoenix_Sky_Harbor_Intl_Ap.tmy3",
+    "AZ-Prescott_Love_Field.tmy3",
+    "AZ-Safford_Amos.tmy3",
+    "AZ-Scottsdale_Muni.tmy3",
+    "AZ-Show_Low_Municipal.tmy3",
+    "AZ-Tucson_International_Ap.tmy3",
+    "AZ-Winslow_Municipal_Ap.tmy3",
+    "AZ-Yuma_Intl_Arpt.tmy3",
+    "AZ-Yuma_Mcas.tmy3",
+    "CA-Alturas.tmy3",
+    "CA-Arcata_Airport.tmy3",
+    "CA-Bakersfield_Meadows_Field.tmy3",
+    "CA-Beale_Afb.tmy3",
+    "CA-Bishop_Airport.tmy3",
+    "CA-Blue_Canyon_Ap.tmy3",
+    "CA-Blythe_Riverside_Co_Arpt.tmy3",
+    "CA-Burbankglendalepassadena_Ap.tmy3",
+    "CA-Camarillo_Awos.tmy3",
+    "CA-Camp_Pendleton_Mcas.tmy3",
+    "CA-Carlsbad_Palomar.tmy3",
+    "CA-China_Lake_Naf.tmy3",
+    "CA-Chino_Airport.tmy3",
+    "CA-Chula_Vista_Brown_Field_Naas.tmy3",
+    "CA-Concord_Concordbuchanan_Fiel.tmy3",
+    "CA-Crescent_City_Faa_Ai.tmy3",
+    "CA-Daggett_Barstowdaggett_Ap.tmy3",
+    "CA-Edwards_Afb.tmy3",
+    "CA-Fresno_Yosemite_Intl_Ap.tmy3",
+    "CA-Fullerton_Municipal.tmy3",
+    "CA-Hayward_Air_Term.tmy3",
+    "CA-Imperial.tmy3",
+    "CA-Jack_Northrop_Fld_H.tmy3",
+    "CA-Lancaster_Gen_Wm_Fox_Field.tmy3",
+    "CA-Lemoore_Reeves_Nas.tmy3",
+    "CA-Livermore_Municipal.tmy3",
+    "CA-Lompoc_Awos.tmy3",
+    "CA-Long_Beach_Daugherty_Fld.tmy3",
+    "CA-Los_Angeles_Intl_Arpt.tmy3",
+    "CA-March_Afb.tmy3",
+    "CA-Merced_Macready_Fld.tmy3",
+    "CA-Modesto_Citycounty_Ap.tmy3",
+    "CA-Montague_Siskiyou_County_Ap.tmy3",
+    "CA-Monterey_Naf.tmy3",
+    "CA-Mountain_View_Moffett_Fld_Nas.tmy3",
+    "CA-Napa_Co_Airport.tmy3",
+    "CA-Needles_Airport.tmy3",
+    "CA-Oakland_Metropolitan_Arpt.tmy3",
+    "CA-Oxnard_Airport.tmy3",
+    "CA-Palm_Springs_Intl.tmy3",
+    "CA-Palm_Springs_Thermal_Ap.tmy3",
+    "CA-Palmdale_Airport.tmy3",
+    "CA-Paso_Robles_Municipal_Arpt.tmy3",
+    "CA-Point_Mugu_Nf.tmy3",
+    "CA-Porterville_Awos.tmy3",
+    "CA-Red_Bluff_Municipal_Arpt.tmy3",
+    "CA-Redding_Municipal_Arpt.tmy3",
+    "CA-Riverside_Muni.tmy3",
+    "CA-Sacramento_Executive_Arpt.tmy3",
+    "CA-Sacramento_Metropolitan_Ap.tmy3",
+    "CA-Salinas_Municipal_Ap.tmy3",
+    "CA-San_Diego_Lindbergh_Field.tmy3",
+    "CA-San_Diego_Miramar_Nas.tmy3",
+    "CA-San_Diego_Montgomer.tmy3",
+    "CA-San_Diego_North_Island_Nas.tmy3",
+    "CA-San_Francisco_Intl_Ap.tmy3",
+    "CA-San_Jose_Intl_Ap.tmy3",
+    "CA-San_Luis_Co_Rgnl.tmy3",
+    "CA-Sandberg.tmy3",
+    "CA-Santa_Ana_John_Wayne_Ap.tmy3",
+    "CA-Santa_Barbara_Municipal_Ap.tmy3",
+    "CA-Santa_Maria_Public_Arpt.tmy3",
+    "CA-Santa_Monica_Muni.tmy3",
+    "CA-Santa_Rosa_Awos.tmy3",
+    "CA-South_Lake_Tahoe.tmy3",
+    "CA-Stockton_Metropolitan_Arpt.tmy3",
+    "CA-Travis_Field_Afb.tmy3",
+    "CA-Truckeetahoe.tmy3",
+    "CA-Twentynine_Palms.tmy3",
+    "CA-Ukiah_Municipal_Ap.tmy3",
+    "CA-Van_Nuys_Airport.tmy3",
+    "CA-Visalia_Muni_Awos.tmy3",
+    "CA-Yuba_Co.tmy3",
+    "CO-Akron_Washington_Co_Ap.tmy3",
+    "CO-Alamosa_San_Luis_Valley_Rgnl.tmy3",
+    "CO-Aspen_Pitkin_Co_Sar.tmy3",
+    "CO-Aurora_Buckley_Field_Angb.tmy3",
+    "CO-Broomfield_Jeffco_Boulder_Surfrad.tmy3",
+    "CO-Colorado_Springs_Muni_Ap.tmy3",
+    "CO-Cortez_Montezuma_Co.tmy3",
+    "CO-Craigmoffat.tmy3",
+    "CO-Denver_Centennial_Golden_Nrel.tmy3",
+    "CO-Denver_Intl_Ap.tmy3",
+    "CO-Durango_La_Plata_Co.tmy3",
+    "CO-Eagle_County_Ap.tmy3",
+    "CO-Fort_Collins_Awos.tmy3",
+    "CO-Grand_Junction_Walker_Field.tmy3",
+    "CO-Greeley_Weld_Awos.tmy3",
+    "CO-Gunnison_Co_Awos.tmy3",
+    "CO-Hayden_Yampa_Awos.tmy3",
+    "CO-La_Junta_Municipal_Ap.tmy3",
+    "CO-Lamar_Municipal.tmy3",
+    "CO-Leadville_Lake_Co.tmy3",
+    "CO-Limon.tmy3",
+    "CO-Montrose_Co_Arpt.tmy3",
+    "CO-Pueblo_Memorial_Ap.tmy3",
+    "CO-Rifle_Garfield_Rgnl.tmy3",
+    "CO-Trinidad_Las_Animas_County_Ap.tmy3",
+    "CT-Bridgeport_Sikorsky_Memorial.tmy3",
+    "CT-Danbury_Municipal.tmy3",
+    "CT-Groton_New_London_Ap.tmy3",
+    "CT-Hartford_Bradley_Intl_Ap.tmy3",
+    "CT-Hartford_Brainard_Fd.tmy3",
+    "CT-New_Haven_Tweed_Airport.tmy3",
+    "CT-Oxford_Awos.tmy3",
+    "DE-Dover_Afb.tmy3",
+    "DE-Wilmington_New_Castle_Cnty_Ap.tmy3",
+    "FL-Crestview_Bob_Sikes_Ap.tmy3",
+    "FL-Daytona_Beach_Intl_Ap.tmy3",
+    "FL-Fort_Lauderdale.tmy3",
+    "FL-Fort_Lauderdale_Hollywood_Int.tmy3",
+    "FL-Fort_Myers_Page_Field.tmy3",
+    "FL-Gainesville_Regional_Ap.tmy3",
+    "FL-Homestead_Afb.tmy3",
+    "FL-Jacksonville_Craig.tmy3",
+    "FL-Jacksonville_Intl_Arpt.tmy3",
+    "FL-Jacksonville_Nas.tmy3",
+    "FL-Key_West_Intl_Arpt.tmy3",
+    "FL-Key_West_Nas.tmy3",
+    "FL-Lakeland_Linder_Rgn.tmy3",
+    "FL-Macdill_Afb.tmy3",
+    "FL-Marathon_Airport.tmy3",
+    "FL-Mayport_Ns.tmy3",
+    "FL-Melbourne_Regional_Ap.tmy3",
+    "FL-Miami_Intl_Ap.tmy3",
+    "FL-Miami_Kendalltamia.tmy3",
+    "FL-Miami_Opa_Locka.tmy3",
+    "FL-Naples_Municipal.tmy3",
+    "FL-Nasa_Shuttle_Fclty.tmy3",
+    "FL-Ocala_Muni_Awos.tmy3",
+    "FL-Orlando_Executive_Ap.tmy3",
+    "FL-Orlando_Intl_Arpt.tmy3",
+    "FL-Orlando_Sanford_Airport.tmy3",
+    "FL-Panama_City_Bay_Co.tmy3",
+    "FL-Pensacola_Forest_Sherman_Nas.tmy3",
+    "FL-Pensacola_Regional_Ap.tmy3",
+    "FL-Sarasota_Bradenton.tmy3",
+    "FL-Southwest_Florida_I.tmy3",
+    "FL-St_Lucie_Co_Intl.tmy3",
+    "FL-St_Petersburg_Albert_Whitted.tmy3",
+    "FL-St_Petersburg_Clear.tmy3",
+    "FL-Tallahassee_Regional_Ap_Isis.tmy3",
+    "FL-Tampa_International_Ap.tmy3",
+    "FL-Tyndall_Afb.tmy3",
+    "FL-Valparaiso_Elgin_Afb.tmy3",
+    "FL-Valparaiso_Hurlburt.tmy3",
+    "FL-Vero_Beach_Municipal_Arpt.tmy3",
+    "FL-West_Palm_Beach_Intl_Arpt.tmy3",
+    "FL-Whiting_Field_Naas.tmy3",
+    "GA-Albany_Dougherty_County_Ap.tmy3",
+    "GA-Alma_Bacon_County_Ap.tmy3",
+    "GA-Athens_Ben_Epps_Ap.tmy3",
+    "GA-Atlanta_Hartsfield_Intl_Ap.tmy3",
+    "GA-Augusta_Bush_Field.tmy3",
+    "GA-Brunswick_Golden_Is.tmy3",
+    "GA-Brunswick_Malcolm_Mckinnon_Ap.tmy3",
+    "GA-Columbus_Metropolitan_Arpt.tmy3",
+    "GA-Dekalb_Peachtree.tmy3",
+    "GA-Fort_Benning_Lawson.tmy3",
+    "GA-Fulton_Co_Arpt_Brow.tmy3",
+    "GA-Hunter_Aaf.tmy3",
+    "GA-Macon_Middle_Ga_Regional_Ap.tmy3",
+    "GA-Marietta_Dobbins_Afb.tmy3",
+    "GA-Moody_Afb_Valdosta.tmy3",
+    "GA-Rome_R_B_Russell_Ap.tmy3",
+    "GA-Savannah_Intl_Ap.tmy3",
+    "GA-Valdosta_Wb_Airport.tmy3",
+    "GA-Warner_Robins_Afb.tmy3",
+    "GU-Andersen_Afb.tmy3",
+    "GU-Guam_Wfo.tmy3",
+    "HI-Barbers_Point_Nas.tmy3",
+    "HI-Hilo_International_Ap.tmy3",
+    "HI-Honolulu_Intl_Arpt.tmy3",
+    "HI-Kahului_Airport.tmy3",
+    "HI-Kaneohe_Bay_Mcas.tmy3",
+    "HI-Kapalua.tmy3",
+    "HI-Kona_Intl_At_Keahol.tmy3",
+    "HI-Lanai.tmy3",
+    "HI-Lihue_Airport.tmy3",
+    "HI-Molokai_Amos.tmy3",
+    "IA-Algona.tmy3",
+    "IA-Atlantic.tmy3",
+    "IA-Boone_Muni.tmy3",
+    "IA-Burlington_Municipal_Ap.tmy3",
+    "IA-Carroll.tmy3",
+    "IA-Cedar_Rapids_Municipal_Ap.tmy3",
+    "IA-Chariton.tmy3",
+    "IA-Charles_City.tmy3",
+    "IA-Clarinda.tmy3",
+    "IA-Clinton_Muni_Awos.tmy3",
+    "IA-Council_Bluffs.tmy3",
+    "IA-Creston.tmy3",
+    "IA-Decorah.tmy3",
+    "IA-Denison.tmy3",
+    "IA-Des_Moines_Intl_Ap.tmy3",
+    "IA-Dubuque_Regional_Ap.tmy3",
+    "IA-Estherville_Muni.tmy3",
+    "IA-Fair_Field.tmy3",
+    "IA-Fort_Dodge_Awos.tmy3",
+    "IA-Fort_Madison.tmy3",
+    "IA-Keokuk_Muni.tmy3",
+    "IA-Knoxville.tmy3",
+    "IA-Le_Mars.tmy3",
+    "IA-Mason_City_Municipal_Arpt.tmy3",
+    "IA-Monticello_Muni.tmy3",
+    "IA-Muscatine.tmy3",
+    "IA-Newton_Muni.tmy3",
+    "IA-Oelwen.tmy3",
+    "IA-Orange_City.tmy3",
+    "IA-Ottumwa_Industrial_Ap.tmy3",
+    "IA-Red_Oak.tmy3",
+    "IA-Sheldon.tmy3",
+    "IA-Shenandoah_Muni.tmy3",
+    "IA-Sioux_City_Sioux_Gateway_Ap.tmy3",
+    "IA-Spencer.tmy3",
+    "IA-Storm_Lake.tmy3",
+    "IA-Washington.tmy3",
+    "IA-Waterloo_Municipal_Ap.tmy3",
+    "IA-Webster_City.tmy3",
+    "ID-Boise_Air_Terminal_Uo.tmy3",
+    "ID-Burley_Municipal_Arpt.tmy3",
+    "ID-Caldwell_Awos.tmy3",
+    "ID-Coeur_Daleneawos.tmy3",
+    "ID-Hailey_Friedman_Mem.tmy3",
+    "ID-Idaho_Falls_Fanning_Field.tmy3",
+    "ID-Joslin_Fld_Magic_Va_Twin_Falls_Uo.tmy3",
+    "ID-Lewiston_Nez_Perce_Cnty_Ap.tmy3",
+    "ID-Malad_City.tmy3",
+    "ID-Mountain_Home_Afb.tmy3",
+    "ID-Pocatello_Regional_Ap.tmy3",
+    "ID-Salmon_Lemhi_Awos.tmy3",
+    "ID-Soda_Springs_Tigert.tmy3",
+    "IL-Aurora_Municipal.tmy3",
+    "IL-Belleville_Scott_Afb.tmy3",
+    "IL-Cahokia_St_Louis.tmy3",
+    "IL-Central_Illinois_Rg.tmy3",
+    "IL-Chicago_Midway_Ap.tmy3",
+    "IL-Chicago_Ohare_Intl_Ap.tmy3",
+    "IL-Chicago_Waukegan.tmy3",
+    "IL-Decatur.tmy3",
+    "IL-Marion_Regional.tmy3",
+    "IL-Moline_Quad_City_Intl_Ap.tmy3",
+    "IL-Mount_Vernon_Awos.tmy3",
+    "IL-Peoria_Greater_Peoria_Ap.tmy3",
+    "IL-Quincy_Muni_Baldwin_Fld.tmy3",
+    "IL-Rockford_Greater_Rockford_Ap.tmy3",
+    "IL-Southern_Illinois.tmy3",
+    "IL-Springfield_Capital_Ap.tmy3",
+    "IL-Sterling_Rockfalls.tmy3",
+    "IL-Univ_Of_Illinois_Wi_Bondville_Surfrad.tmy3",
+    "IL-W_Chicago_Du_Page.tmy3",
+    "IN-Delaware_Co_Johnson.tmy3",
+    "IN-Evansville_Regional_Ap.tmy3",
+    "IN-Fort_Wayne_Intl_Ap.tmy3",
+    "IN-Grissom_Arb.tmy3",
+    "IN-Huntingburg.tmy3",
+    "IN-Indianapolis_Intl_Ap.tmy3",
+    "IN-Lafayette_Purdue_Univ_Ap.tmy3",
+    "IN-Monroe_Co.tmy3",
+    "IN-South_Bend_Michiana_Rgnl_Ap.tmy3",
+    "IN-Terre_Haute_Hulman_Regional_A.tmy3",
+    "KS-Chanute_Martin_Johnson_Ap.tmy3",
+    "KS-Concordia_Blosser_Muni_Ap.tmy3",
+    "KS-Dodge_City_Regional_Ap.tmy3",
+    "KS-Emporia_Municipal_Ap.tmy3",
+    "KS-Fort_Riley_Marshall_Aaf.tmy3",
+    "KS-Garden_City_Municipal_Ap.tmy3",
+    "KS-Goodland_Renner_Field.tmy3",
+    "KS-Great_Bend_Awos.tmy3",
+    "KS-Hays_Muni_Awos.tmy3",
+    "KS-Hill_City_Municipal_Ap.tmy3",
+    "KS-Hutchinson_Municipal_Ap.tmy3",
+    "KS-Liberal_Muni.tmy3",
+    "KS-Manhattan_Rgnl.tmy3",
+    "KS-Mcconnell_Afb.tmy3",
+    "KS-Newton_Awos.tmy3",
+    "KS-Olathe_Johnson_Co.tmy3",
+    "KS-Olathe_Johnson_Co_Industrial.tmy3",
+    "KS-Russell_Municipal_Ap.tmy3",
+    "KS-Salina_Municipal_Ap.tmy3",
+    "KS-Topeka_Forbes_Field.tmy3",
+    "KS-Topeka_Municipal_Ap.tmy3",
+    "KS-Wichita_Col_Jabara.tmy3",
+    "KS-Wichita_Midcontinent_Ap.tmy3",
+    "KY-Bowling_Green_Warren_Co_Ap.tmy3",
+    "KY-Cincinnati_Northern_Ky_Ap.tmy3",
+    "KY-Fort_Campbell_Aaf.tmy3",
+    "KY-Fort_Knox_Godman_Aaf.tmy3",
+    "KY-Henderson_City.tmy3",
+    "KY-Jackson_Julian_Carroll_Ap.tmy3",
+    "KY-Lexington_Bluegrass_Ap.tmy3",
+    "KY-Londoncorbin_Ap.tmy3",
+    "KY-Louisville_Bowman_Field.tmy3",
+    "KY-Louisville_Standiford_Field.tmy3",
+    "KY-Paducah_Barkley_Regional_Ap.tmy3",
+    "KY-Somersetawos.tmy3",
+    "LA-Alexandria_Esler_Regional_Ap.tmy3",
+    "LA-Barksdale_Afb.tmy3",
+    "LA-Baton_Rouge_Ryan_Arpt.tmy3",
+    "LA-England_Afb.tmy3",
+    "LA-Fort_Polk_Aaf.tmy3",
+    "LA-Houmaterrebonne.tmy3",
+    "LA-Lafayette_Regional_Ap.tmy3",
+    "LA-Lake_Charles_Regional_Arpt.tmy3",
+    "LA-Lake_Charles_Wb_Airp.tmy3",
+    "LA-Monroe_Regional_Ap.tmy3",
+    "LA-New_Iberia_Naas.tmy3",
+    "LA-New_Orleans_Alvin_Callender_F.tmy3",
+    "LA-New_Orleans_Intl_Arpt.tmy3",
+    "LA-New_Orleans_Lakefront_Ap.tmy3",
+    "LA-Patterson_Memorial.tmy3",
+    "LA-Shreveport_Downtown.tmy3",
+    "LA-Shreveport_Regional_Arpt.tmy3",
+    "MA-Barnstable_Muni_Boa.tmy3",
+    "MA-Beverly_Muni.tmy3",
+    "MA-Boston_Logan_Intl_Arpt.tmy3",
+    "MA-Chicopee_Falls_Westo.tmy3",
+    "MA-Lawrence_Muni.tmy3",
+    "MA-Marthas_Vineyard.tmy3",
+    "MA-Nantucket_Memorial_Ap.tmy3",
+    "MA-New_Bedford_Rgnl.tmy3",
+    "MA-North_Adams.tmy3",
+    "MA-Norwood_Memorial.tmy3",
+    "MA-Otis_Angb.tmy3",
+    "MA-Plymouth_Municipal.tmy3",
+    "MA-Provincetown_Awos.tmy3",
+    "MA-Westfield_Barnes_Muni_Ap.tmy3",
+    "MA-Worchester_Regional_Arpt.tmy3",
+    "MD-Andrews_Afb.tmy3",
+    "MD-Baltimore_Bltwashngtn_Intl.tmy3",
+    "MD-Hagerstown_Rgnl_Ric.tmy3",
+    "MD-Patuxent_River_Nas.tmy3",
+    "MD-Salisbury_Wicomico_Co_Ap.tmy3",
+    "ME-Auburnlewiston.tmy3",
+    "ME-Augusta_Airport.tmy3",
+    "ME-Bangor_International_Ap.tmy3",
+    "ME-Bar_Harbor_Awos.tmy3",
+    "ME-Caribou_Municipal_Arpt.tmy3",
+    "ME-Houlton_Intl_Arpt.tmy3",
+    "ME-Millinocket_Municipal_Ap.tmy3",
+    "ME-Naval_Air_Station.tmy3",
+    "ME-Northern_Aroostook.tmy3",
+    "ME-Portland_Intl_Jetport.tmy3",
+    "ME-Presque_Isle_Municip.tmy3",
+    "ME-Rockland_Knoxawos.tmy3",
+    "ME-Sanford_Muni_Awos.tmy3",
+    "ME-Waterville_Awos.tmy3",
+    "ME-Wiscasset.tmy3",
+    "MI-Alpena_County_Regional_Ap.tmy3",
+    "MI-Ann_Arbor_Municipal.tmy3",
+    "MI-Battle_Creek_Kellogg_Ap.tmy3",
+    "MI-Benton_Harbor_Ross.tmy3",
+    "MI-Cadillac_Wexford_Co_Ap.tmy3",
+    "MI-Chippewa_Co_Intl.tmy3",
+    "MI-Detroit_City_Airport.tmy3",
+    "MI-Detroit_Metropolitan_Arpt.tmy3",
+    "MI-Detroit_Willow_Run_Ap.tmy3",
+    "MI-Escanaba_Awos.tmy3",
+    "MI-Flint_Bishop_Intl_Arpt.tmy3",
+    "MI-Grand_Rapids_Kent_County_Int.tmy3",
+    "MI-Hancock_Houghton_Co_Ap.tmy3",
+    "MI-Houghton_Lake_Roscommon_Co_Ar.tmy3",
+    "MI-Howell.tmy3",
+    "MI-Iron_Mountain_Ford.tmy3",
+    "MI-Ironwood_Awos.tmy3",
+    "MI-Jackson_Reynolds_Field.tmy3",
+    "MI-Kalamazoo_Battle_Cr.tmy3",
+    "MI-Lansing_Capital_City_Arpt.tmy3",
+    "MI-Manistee_Awos.tmy3",
+    "MI-Menominee_Awos.tmy3",
+    "MI-Mount_Clemens_Selfridge_Fld.tmy3",
+    "MI-Muskegon_County_Arpt.tmy3",
+    "MI-Oakland_Co_Intl.tmy3",
+    "MI-Oscoda_Wurtsmith_Afb.tmy3",
+    "MI-Pellston_Emmet_County_Ap.tmy3",
+    "MI-Saginaw_Tri_City_Intl_Ap.tmy3",
+    "MI-Sault_Ste_Marie_Sanderson_Fie.tmy3",
+    "MI-Stclair_County_Int.tmy3",
+    "MI-Traverse_City_Cherry_Capital.tmy3",
+    "MN-Aitkin_Ndbawos.tmy3",
+    "MN-Albert_Lea_Awos.tmy3",
+    "MN-Alexandria_Municipal_Ap.tmy3",
+    "MN-Austin_Muni.tmy3",
+    "MN-Baudette_International_Ap.tmy3",
+    "MN-Bemidji_Municipal.tmy3",
+    "MN-Benson_Muni.tmy3",
+    "MN-Brainerd_Wieland.tmy3",
+    "MN-Cambridge_Muni.tmy3",
+    "MN-Cloquet_Awos.tmy3",
+    "MN-Crane_Lake_Awos.tmy3",
+    "MN-Crookston_Muni_Fld.tmy3",
+    "MN-Detroit_Lakesawos.tmy3",
+    "MN-Duluth_International_Arpt.tmy3",
+    "MN-Ely_Muni.tmy3",
+    "MN-Eveleth_Muni_Awos.tmy3",
+    "MN-Fairmont_Muniawos.tmy3",
+    "MN-Faribault_Muni_Awos.tmy3",
+    "MN-Fergus_Fallsawos.tmy3",
+    "MN-Flying_Cloud.tmy3",
+    "MN-Fosstonawos.tmy3",
+    "MN-Glenwood_Asos.tmy3",
+    "MN-Grand_Rapidsawos.tmy3",
+    "MN-Hallock.tmy3",
+    "MN-Hibbing_Chisholmhibbing_Ap.tmy3",
+    "MN-Hutchinson_Awos.tmy3",
+    "MN-International_Falls_Intl_Ap.tmy3",
+    "MN-Litchfield_Muni.tmy3",
+    "MN-Little_Falls_Awos.tmy3",
+    "MN-Mankatoawos.tmy3",
+    "MN-Marshall_Ryanawos.tmy3",
+    "MN-Minneapolis_Crystal.tmy3",
+    "MN-Minneapolisst_Paul_Intl_Arp.tmy3",
+    "MN-Mora_Muni_Awos.tmy3",
+    "MN-Morris_Muni_Awos.tmy3",
+    "MN-New_Ulm_Muni_Awos.tmy3",
+    "MN-Orr.tmy3",
+    "MN-Owatonna_Awos.tmy3",
+    "MN-Park_Rapids_Municipal_Ap.tmy3",
+    "MN-Pipestone_Awos.tmy3",
+    "MN-Red_Wing.tmy3",
+    "MN-Redwood_Falls_Muni.tmy3",
+    "MN-Rochester_International_Arpt.tmy3",
+    "MN-Roseau_Muni_Awos.tmy3",
+    "MN-Silver_Bay.tmy3",
+    "MN-South_St_Paul_Muni.tmy3",
+    "MN-St_Cloud_Regional_Arpt.tmy3",
+    "MN-St_Paul_Downtown_Ap.tmy3",
+    "MN-Thief_Riverawos.tmy3",
+    "MN-Two_Harbors.tmy3",
+    "MN-Wheaton_Ndb_Awos.tmy3",
+    "MN-Willmar.tmy3",
+    "MN-Winona_Muni_Awos.tmy3",
+    "MN-Worthington_Awos.tmy3",
+    "MO-Cape_Girardeau_Municipal_Ap.tmy3",
+    "MO-Columbia_Regional_Airport.tmy3",
+    "MO-Farmington.tmy3",
+    "MO-Ft_Lnrd_Wd_Aaf.tmy3",
+    "MO-Jefferson_City_Mem.tmy3",
+    "MO-Joplin_Municipal_Ap.tmy3",
+    "MO-Kaiser_Mem_Awos.tmy3",
+    "MO-Kansas_City_Downtown_Ap.tmy3",
+    "MO-Kansas_City_Intl_Arpt.tmy3",
+    "MO-Kirksville_Regional_Ap.tmy3",
+    "MO-Poplar_Bluffamos.tmy3",
+    "MO-Springfield_Regional_Arpt.tmy3",
+    "MO-St_Joseph_Rosecrans_Memorial.tmy3",
+    "MO-St_Louis_Lambert_Intl_Arpt.tmy3",
+    "MO-St_Louis_Spirit_Of_St_Louis_A.tmy3",
+    "MO-Vichy_Rolla_Natl_Arpt.tmy3",
+    "MO-Whiteman_Afb.tmy3",
+    "MS-Columbus_Afb.tmy3",
+    "MS-Golden_Triawos.tmy3",
+    "MS-Greenville_Municipal.tmy3",
+    "MS-Greenwood_Leflore_Arpt.tmy3",
+    "MS-Gulfport_Biloxi_Int.tmy3",
+    "MS-Hattiesburg_Laurel.tmy3",
+    "MS-Jackson_International_Ap.tmy3",
+    "MS-Keesler_Afb.tmy3",
+    "MS-Mccomb_Pike_County_Ap.tmy3",
+    "MS-Meridian_Key_Field.tmy3",
+    "MS-Meridian_Naas.tmy3",
+    "MS-Natchez_Hardyawos.tmy3",
+    "MS-Tupelo_C_D_Lemons_Arpt.tmy3",
+    "MT-Billings_Logan_Intl_Arpt.tmy3",
+    "MT-Bozeman_Gallatin_Field.tmy3",
+    "MT-Butte_Bert_Mooney_Arpt.tmy3",
+    "MT-Cut_Bank_Muni_Ap.tmy3",
+    "MT-Glasgow_Intl_Arpt.tmy3",
+    "MT-Glendiveawos.tmy3",
+    "MT-Great_Falls_Intl_Arpt.tmy3",
+    "MT-Havre_Citycounty_Ap.tmy3",
+    "MT-Helena_Regional_Airport.tmy3",
+    "MT-Kalispell_Glacier_Pk_Intl_Ar.tmy3",
+    "MT-Lewistown_Municipal_Arpt.tmy3",
+    "MT-Livingston_Mission_Field.tmy3",
+    "MT-Miles_City_Municipal_Arpt.tmy3",
+    "MT-Missoula_International_Ap.tmy3",
+    "MT-Sidneyrichland.tmy3",
+    "MT-Wolf_Point_Intl_Fort_Peck_Surfrad.tmy3",
+    "NC-Asheville_Regional_Arpt.tmy3",
+    "NC-Cape_Hatteras_Nws_Bldg.tmy3",
+    "NC-Charlotte_Douglas_Intl_Arpt.tmy3",
+    "NC-Cherry_Point_Mcas.tmy3",
+    "NC-Dare_Co_Rgnl.tmy3",
+    "NC-Elizabeth_City_Coast_Guard_Ai_Nrel.tmy3",
+    "NC-Fayetteville_Pope_Afb.tmy3",
+    "NC-Fayetteville_Rgnl_G.tmy3",
+    "NC-Fort_Bragg_Simmons_Aaf.tmy3",
+    "NC-Goldsboro_Seymour_Johnson_Afb.tmy3",
+    "NC-Greensboro_Piedmont_Triad_Int.tmy3",
+    "NC-Hickory_Regional_Ap.tmy3",
+    "NC-Jacksonville_Awos.tmy3",
+    "NC-Kinston_Stallings_Afb.tmy3",
+    "NC-New_Bern_Craven_Co_Regl_Ap.tmy3",
+    "NC-New_River_Mcaf.tmy3",
+    "NC-Pitt_Greenville_Arp.tmy3",
+    "NC-Raleigh_Durham_International.tmy3",
+    "NC-Rocky_Mount_Wilson.tmy3",
+    "NC-Southern_Pines_Awos.tmy3",
+    "NC-Wilmington_International_Arpt.tmy3",
+    "NC-Winstonsalem_Reynolds_Ap.tmy3",
+    "ND-Bismarck_Municipal_Arpt_Isis.tmy3",
+    "ND-Devils_Lakeawos.tmy3",
+    "ND-Dickinson_Municipal_Ap.tmy3",
+    "ND-Fargo_Hector_International_Ap.tmy3",
+    "ND-Grand_Forks_Af.tmy3",
+    "ND-Grand_Forks_International_Ap.tmy3",
+    "ND-Jamestown_Municipal_Arpt.tmy3",
+    "ND-Minot_Afb.tmy3",
+    "ND-Minot_Faa_Ap.tmy3",
+    "ND-Williston_Sloulin_Intl_Ap.tmy3",
+    "NE-Ainsworth_Municipal.tmy3",
+    "NE-Alliance_Municipal.tmy3",
+    "NE-Beatrice_Municipal.tmy3",
+    "NE-Bellevue_Offutt_Afb.tmy3",
+    "NE-Brewster_Field_Arpt.tmy3",
+    "NE-Broken_Bow_Muni.tmy3",
+    "NE-Chadron_Municipal_Ap.tmy3",
+    "NE-Columbus_Muni.tmy3",
+    "NE-Falls_City_Brenner.tmy3",
+    "NE-Fremont_Muni_Arpt.tmy3",
+    "NE-Grand_Island_Central_Ne_Regio.tmy3",
+    "NE-Hastings_Municipal.tmy3",
+    "NE-Imperial_Faa_Ap.tmy3",
+    "NE-Kearney_Muni_Awos.tmy3",
+    "NE-Lincoln_Municipal_Arpt.tmy3",
+    "NE-Mccook_Municipal.tmy3",
+    "NE-Norfolk_Karl_Stefan_Mem_Arpt.tmy3",
+    "NE-North_Platte_Regional_Ap.tmy3",
+    "NE-Omaha_Eppley_Airfield.tmy3",
+    "NE-Omaha_Wsfo.tmy3",
+    "NE-Oneill_Baker_Field.tmy3",
+    "NE-Ord_Sharp_Field.tmy3",
+    "NE-Scottsbluff_W_B_Heilig_Field.tmy3",
+    "NE-Sidney_Municipal_Ap.tmy3",
+    "NE-Tekamah_Asos.tmy3",
+    "NE-Valentine_Miller_Field.tmy3",
+    "NH-Berlin_Municipal.tmy3",
+    "NH-Concord_Municipal_Arpt.tmy3",
+    "NH-Dillant_Hopkins.tmy3",
+    "NH-Laconia_Muni_Awos.tmy3",
+    "NH-Lebanon_Municipal.tmy3",
+    "NH-Manchester_Airport.tmy3",
+    "NH-Mount_Washington.tmy3",
+    "NH-Pease_Intl_Tradepor.tmy3",
+    "NJ-Atlantic_City_Intl_Ap.tmy3",
+    "NJ-Belmar_Asc.tmy3",
+    "NJ-Caldwell_Essex_Co.tmy3",
+    "NJ-Cape_May_Co.tmy3",
+    "NJ-Mcguire_Afb.tmy3",
+    "NJ-Millville_Municipal_Ap.tmy3",
+    "NJ-Newark_International_Arpt.tmy3",
+    "NJ-Teterboro_Airport.tmy3",
+    "NJ-Trenton_Mercer_County_Ap.tmy3",
+    "NM-Albuquerque_Intl_Arpt_Isis.tmy3",
+    "NM-Carlsbad_Cavern_City_Air_Term.tmy3",
+    "NM-Clayton_Municipal_Airpark.tmy3",
+    "NM-Clovis_Cannon_Afb.tmy3",
+    "NM-Clovis_Muni_Awos.tmy3",
+    "NM-Deming_Muni.tmy3",
+    "NM-Farmington_Four_Corners_Regl.tmy3",
+    "NM-Gallup_Sen_Clarke_Fld.tmy3",
+    "NM-Holloman_Afb.tmy3",
+    "NM-Las_Cruces_Intl.tmy3",
+    "NM-Las_Vegas_Municipal_Arpt.tmy3",
+    "NM-Roswell_Industrial_Air_Park.tmy3",
+    "NM-Sata_Fe_County_Municipal_Ap.tmy3",
+    "NM-Sierra_Blanca_Rgnl.tmy3",
+    "NM-Taos_Muni_Aptawos.tmy3",
+    "NM-Truth_Or_Consequences_Muni_Ap.tmy3",
+    "NM-Tucumcari_Faa_Ap.tmy3",
+    "NV-Elko_Municipal_Arpt.tmy3",
+    "NV-Ely_Yelland_Field.tmy3",
+    "NV-Fallon_Naas.tmy3",
+    "NV-Las_Vegas_Mccarran_Intl_Ap.tmy3",
+    "NV-Lovelock_Derby_Field.tmy3",
+    "NV-Mercury_Desert_Rock_Ap_Surfrad.tmy3",
+    "NV-Nellis_Afb.tmy3",
+    "NV-Reno_Tahoe_International_Ap.tmy3",
+    "NV-Tonopah_Airport.tmy3",
+    "NV-Winnemucca_Municipal_Arpt.tmy3",
+    "NY-Adirondack_Rgnl.tmy3",
+    "NY-Albany_County_Ap.tmy3",
+    "NY-Binghamton_Edwin_A_Link_Field.tmy3",
+    "NY-Buffalo_Niagara_Intl_Ap.tmy3",
+    "NY-Elmira_Corning_Regional_Ap.tmy3",
+    "NY-Fort_Drum_Wheelers.tmy3",
+    "NY-Glens_Falls_Ap.tmy3",
+    "NY-Islip_Long_Isl_Macarthur_Ap.tmy3",
+    "NY-Jamestown_Awos.tmy3",
+    "NY-Massena_Ap.tmy3",
+    "NY-Monticelloawos.tmy3",
+    "NY-New_York_Central_Prk_Obs_Belv.tmy3",
+    "NY-New_York_J_F_Kennedy_Intl_Ar.tmy3",
+    "NY-New_York_Laguardia_Arpt.tmy3",
+    "NY-Niagara_Falls_Af.tmy3",
+    "NY-Poughkeepsie_Dutchess_Co_Ap.tmy3",
+    "NY-Republic.tmy3",
+    "NY-Rochester_Greater_Rochester_I.tmy3",
+    "NY-Stewart_Field.tmy3",
+    "NY-Syracuse_Hancock_Intl_Arpt.tmy3",
+    "NY-Utica_Oneida_County_Ap.tmy3",
+    "NY-Watertown_Ap.tmy3",
+    "NY-Westhampton_Gabreski_Ap.tmy3",
+    "NY-White_Plains_Westchester_Co_A.tmy3",
+    "OH-Akron_Akroncanton_Reg_Ap.tmy3",
+    "OH-Burke_Lakefront.tmy3",
+    "OH-Cincinnati_Municipal_Ap_Lunki.tmy3",
+    "OH-Cleveland_Hopkins_Intl_Ap.tmy3",
+    "OH-Columbus_Port_Columbus_Intl_A.tmy3",
+    "OH-Dayton_International_Airport.tmy3",
+    "OH-Dayton_Wright_Patterson_Afb.tmy3",
+    "OH-Findlay_Airport.tmy3",
+    "OH-Mansfield_Lahm_Municipal_Arpt.tmy3",
+    "OH-Ohio_State_Universi.tmy3",
+    "OH-Toledo_Express_Airport.tmy3",
+    "OH-Youngstown_Regional_Airport.tmy3",
+    "OH-Zanesville_Municipal_Ap.tmy3",
+    "OK-Altus_Afb.tmy3",
+    "OK-Bartlesville_Philli.tmy3",
+    "OK-Clintonsherman.tmy3",
+    "OK-Fort_Sill_Post_Field_Af.tmy3",
+    "OK-Gage_Airport.tmy3",
+    "OK-Hobart_Municipal_Ap.tmy3",
+    "OK-Lawton_Municipal.tmy3",
+    "OK-Mcalester_Municipal_Ap.tmy3",
+    "OK-Oklahoma_City_Tinker_Afb.tmy3",
+    "OK-Oklahoma_City_Wiley.tmy3",
+    "OK-Oklahoma_City_Will_Rogers_Wor.tmy3",
+    "OK-Ponca_City_Municipal_Ap_Sgp_Arm.tmy3",
+    "OK-Stillwater_Rgnl.tmy3",
+    "OK-Tulsa_International_Airport.tmy3",
+    "OK-Vance_Afb.tmy3",
+    "OR-Astoria_Regional_Airport.tmy3",
+    "OR-Aurora_State.tmy3",
+    "OR-Baker_Municipal_Ap.tmy3",
+    "OR-Burns_Municipal_Arpt_Uo.tmy3",
+    "OR-Corvallis_Muni.tmy3",
+    "OR-Eugene_Mahlon_Sweet_Arpt_Uo.tmy3",
+    "OR-Klamath_Falls_Intl_Ap_Uo.tmy3",
+    "OR-La_Grande_Muni_Ap.tmy3",
+    "OR-Lakeview_Awos.tmy3",
+    "OR-Medford_Rogue_Valley_Intl_Ap_Ashland_Uo.tmy3",
+    "OR-North_Bend_Muni_Airport.tmy3",
+    "OR-Pendleton_E_Or_Regional_Ap.tmy3",
+    "OR-Portland_Hillsboro.tmy3",
+    "OR-Portland_International_Ap.tmy3",
+    "OR-Portland_Troutdale.tmy3",
+    "OR-Redmond_Roberts_Field.tmy3",
+    "OR-Roseburg_Regional_Ap.tmy3",
+    "OR-Salem_Mcnary_Field.tmy3",
+    "OR-Sexton_Summit.tmy3",
+    "PA-Allentown_Lehigh_Valley_Intl.tmy3",
+    "PA-Altoona_Blair_Co_Arpt.tmy3",
+    "PA-Bradford_Regional_Ap.tmy3",
+    "PA-Butler_Co_Awos.tmy3",
+    "PA-Dubois_Faa_Ap.tmy3",
+    "PA-Erie_International_Ap.tmy3",
+    "PA-Franklin.tmy3",
+    "PA-Harrisburg_Capital_City_Arpt.tmy3",
+    "PA-Johnstown_Cambria_County_Ap.tmy3",
+    "PA-Lancaster.tmy3",
+    "PA-Middletown_Harrisburg_Intl_Ap.tmy3",
+    "PA-Philadelphia_International_Ap.tmy3",
+    "PA-Philadelphia_Ne_Philadelphia.tmy3",
+    "PA-Pittsburgh_Allegheny_Co_Ap.tmy3",
+    "PA-Pittsburgh_International_Ap.tmy3",
+    "PA-Reading_Spaatz_Field.tmy3",
+    "PA-State_College_Penn_State_Surfrad.tmy3",
+    "PA-Washington_Awos.tmy3",
+    "PA-Wilkesbarre_Scranton_Intl_Ap.tmy3",
+    "PA-Williamsport_Regional_Ap.tmy3",
+    "PA-Willow_Grove_Nas.tmy3",
+    "PR-Aquadilla_Borinquen.tmy3",
+    "PR-Eugenio_Maria_De_Ho.tmy3",
+    "PR-Mercedita.tmy3",
+    "PR-Roosevelt_Roads.tmy3",
+    "PR-San_Juan_Intl_Arpt.tmy3",
+    "PR-San_Juan_L_M_Marin_Intl_Ap.tmy3",
+    "RI-Block_Island_State_Arpt.tmy3",
+    "RI-Pawtucket_Awos.tmy3",
+    "RI-Providence_T_F_Green_State_Ar.tmy3",
+    "SC-Anderson_County_Ap.tmy3",
+    "SC-Beaufort_Mcas.tmy3",
+    "SC-Charleston_Intl_Arpt.tmy3",
+    "SC-Columbia_Metro_Arpt.tmy3",
+    "SC-Florence_Regional_Ap.tmy3",
+    "SC-Greenville_Downtown_Ap.tmy3",
+    "SC-Greer_Greenvlspartanbrg_Ap.tmy3",
+    "SC-Myrtle_Beach_Afb.tmy3",
+    "SC-North_Myrtle_Beach_Grand_Stra.tmy3",
+    "SC-Sumter_Shaw_Afb.tmy3",
+    "SD-Aberdeen_Regional_Arpt.tmy3",
+    "SD-Brookings_Awos.tmy3",
+    "SD-Chan_Gurney_Muni.tmy3",
+    "SD-Ellsworth_Afb.tmy3",
+    "SD-Huron_Regional_Arpt.tmy3",
+    "SD-Mitchell_Awos.tmy3",
+    "SD-Mobridge.tmy3",
+    "SD-Pierre_Municipal_Ap.tmy3",
+    "SD-Rapid_City_Regional_Arpt.tmy3",
+    "SD-Sioux_Falls_Foss_Field.tmy3",
+    "SD-Watertown_Municipal_Ap.tmy3",
+    "TN-Bristol_Tri_City_Airport.tmy3",
+    "TN-Chattanooga_Lovell_Field_Ap.tmy3",
+    "TN-Crossville_Memorial_Ap.tmy3",
+    "TN-Dyersburg_Municipal_Ap.tmy3",
+    "TN-Jackson_Mckellarsipes_Regl_A.tmy3",
+    "TN-Knoxville_Mcghee_Tyson_Ap.tmy3",
+    "TN-Memphis_International_Ap.tmy3",
+    "TN-Nashville_International_Ap.tmy3",
+    "TX-Abilene_Dyess_Afb.tmy3",
+    "TX-Abilene_Regional_Ap_Ut.tmy3",
+    "TX-Alice_Intl_Ap.tmy3",
+    "TX-Amarillo_International_Ap_Canyon_Ut.tmy3",
+    "TX-Austin_Mueller_Municipal_Ap_Ut.tmy3",
+    "TX-Brownsville_S_Padre_Isl_Intl.tmy3",
+    "TX-Camp_Mabry.tmy3",
+    "TX-Childress_Municipal_Ap.tmy3",
+    "TX-College_Station_Easterwood_Fl.tmy3",
+    "TX-Corpus_Christi_Intl_Arpt_Ut.tmy3",
+    "TX-Corpus_Christi_Nas.tmy3",
+    "TX-Cotulla_Faa_Ap.tmy3",
+    "TX-Cox_Fld.tmy3",
+    "TX-Dalhart_Municipal_Ap.tmy3",
+    "TX-Dallas_Addison_Arpt.tmy3",
+    "TX-Dallas_Love_Field.tmy3",
+    "TX-Dallas_Redbird_Arpt.tmy3",
+    "TX-Dallasfort_Worth_Intl_Ap.tmy3",
+    "TX-Del_Rio_Laughlin_Afb.tmy3",
+    "TX-Del_Rio_Ut.tmy3",
+    "TX-Draughon_Miller_Cen.tmy3",
+    "TX-El_Paso_International_Ap_Ut.tmy3",
+    "TX-Fort_Hood.tmy3",
+    "TX-Fort_Worth_Alliance.tmy3",
+    "TX-Fort_Worth_Meacham.tmy3",
+    "TX-Fort_Worth_Nas.tmy3",
+    "TX-Galveston_Scholes.tmy3",
+    "TX-Georgetown_Awos.tmy3",
+    "TX-Greenville_Majors.tmy3",
+    "TX-Harlingen_Rio_Grande_Valley_I.tmy3",
+    "TX-Hondo_Municipal_Ap.tmy3",
+    "TX-Houston_Bush_Intercontinental.tmy3",
+    "TX-Houston_Dw_Hooks.tmy3",
+    "TX-Houston_Ellington_Afb_Clear_Lake_Ut.tmy3",
+    "TX-Houston_William_P_Hobby_Ap.tmy3",
+    "TX-Killeen_Muni_Awos.tmy3",
+    "TX-Kingsville.tmy3",
+    "TX-Laredo_Intl_Ap_Ut.tmy3",
+    "TX-Longview_Gregg_County_Ap_Overton_Ut.tmy3",
+    "TX-Lubbock_International_Ap.tmy3",
+    "TX-Lufkin_Angelina_Co.tmy3",
+    "TX-Marfa_Ap.tmy3",
+    "TX-Mc_Gregor_Awos.tmy3",
+    "TX-Mcallen_Miller_Intl_Ap_Edinburg_Ut.tmy3",
+    "TX-Midland_International_Ap.tmy3",
+    "TX-Mineral_Wells_Municipal_Ap.tmy3",
+    "TX-Nacogdoches_Awos.tmy3",
+    "TX-Palacios_Municipal_Ap.tmy3",
+    "TX-Port_Arthur_Jefferson_County.tmy3",
+    "TX-Randolph_Afb.tmy3",
+    "TX-Robert_Gray_Aaf.tmy3",
+    "TX-Rockport_Aransas_Co.tmy3",
+    "TX-San_Angelo_Mathis_Field.tmy3",
+    "TX-San_Antonio_Intl_Ap.tmy3",
+    "TX-San_Antonio_Kelly_Field_Afb.tmy3",
+    "TX-San_Antonio_Stinson.tmy3",
+    "TX-Tyler_Pounds_Fld.tmy3",
+    "TX-Victoria_Regional_Ap.tmy3",
+    "TX-Waco_Regional_Ap.tmy3",
+    "TX-Wichita_Falls_Municipal_Arpt.tmy3",
+    "TX-Wink_Winkler_County_Ap.tmy3",
+    "UT-Blanding.tmy3",
+    "UT-Bryce_Cnyn_Faa_Ap.tmy3",
+    "UT-Cedar_City_Municipal_Ap.tmy3",
+    "UT-Delta.tmy3",
+    "UT-Hanksville.tmy3",
+    "UT-Moab_Canyonlands_Uo.tmy3",
+    "UT-Ogden_Hill_Afb.tmy3",
+    "UT-Ogden_Hinkley_Airport.tmy3",
+    "UT-Provo_Muni_Awos.tmy3",
+    "UT-Saint_George_Awos.tmy3",
+    "UT-Salt_Lake_City_Intl_Arpt_Isis.tmy3",
+    "UT-Vernal.tmy3",
+    "UT-Wendover_Usaf_Auxiliary_Field.tmy3",
+    "VA-Abington.tmy3",
+    "VA-Charlottesville_Faa.tmy3",
+    "VA-Danville_Faa_Ap.tmy3",
+    "VA-Davison_Aaf.tmy3",
+    "VA-Dinwiddie_Co.tmy3",
+    "VA-Farmville.tmy3",
+    "VA-Franklin_Naas.tmy3",
+    "VA-Hillsville.tmy3",
+    "VA-Hot_Springs_Ingalls.tmy3",
+    "VA-Langley_Afb.tmy3",
+    "VA-Leesburg_Godfrey.tmy3",
+    "VA-Lynchburg_Regional_Arpt.tmy3",
+    "VA-Manassas_Muniawos.tmy3",
+    "VA-Marion_Wytheville.tmy3",
+    "VA-Martinsville.tmy3",
+    "VA-Melfa_Accomack_Arpt.tmy3",
+    "VA-Newport_News.tmy3",
+    "VA-Norfolk_International_Ap.tmy3",
+    "VA-Norfolk_Nas.tmy3",
+    "VA-Oceana_Nas.tmy3",
+    "VA-Pulaski.tmy3",
+    "VA-Quantico_Mcas.tmy3",
+    "VA-Richmond_International_Ap.tmy3",
+    "VA-Roanoke_Regional_Ap.tmy3",
+    "VA-Shannon_Arpt.tmy3",
+    "VA-Staunton_Shenandoah.tmy3",
+    "VA-Virginia_Tech_Arpt.tmy3",
+    "VA-Washington_Dc_Dulles_Intl_Ar_Sterling_Isis.tmy3",
+    "VA-Washington_Dc_Reagan_Ap.tmy3",
+    "VA-Winchester_Rgnl.tmy3",
+    "VA-Wise_Lonesome_Pine.tmy3",
+    "VI-Charlotte_Amalie_Harry_S_Trum.tmy3",
+    "VT-Burlington_International_Ap.tmy3",
+    "VT-Montpelier_Ap.tmy3",
+    "VT-Rutland_State.tmy3",
+    "VT-Springfield_Hartnes.tmy3",
+    "WA-Bellingham_Intl_Ap.tmy3",
+    "WA-Bremerton_National.tmy3",
+    "WA-Ephrata_Ap_Fcwos.tmy3",
+    "WA-Fairchild_Afb.tmy3",
+    "WA-Felts_Fld.tmy3",
+    "WA-Gray_Aaf.tmy3",
+    "WA-Hanford.tmy3",
+    "WA-Hoquiam_Ap.tmy3",
+    "WA-Kelso_Wb_Ap.tmy3",
+    "WA-Moses_Lake_Grant_County_Ap.tmy3",
+    "WA-Olympia_Airport.tmy3",
+    "WA-Pasco.tmy3",
+    "WA-Pullman_Moscow_Rgnl.tmy3",
+    "WA-Quillayute_State_Airport.tmy3",
+    "WA-Renton_Muni.tmy3",
+    "WA-Seattle_Boeing_Field_Isis.tmy3",
+    "WA-Seattle_Seattletacoma_Intl_A.tmy3",
+    "WA-Snohomish_Co.tmy3",
+    "WA-Spokane_International_Ap_Cheney_Uo.tmy3",
+    "WA-Stampede_Pass.tmy3",
+    "WA-Tacoma_Mcchord_Afb.tmy3",
+    "WA-Tacoma_Narrows.tmy3",
+    "WA-The_Dalles_Municipal_Arpt.tmy3",
+    "WA-Toledowinlock_Mem.tmy3",
+    "WA-Walla_Walla_City_County_Ap.tmy3",
+    "WA-Wenatchee_Pangborn.tmy3",
+    "WA-Whidbey_Island_Nas.tmy3",
+    "WA-William_R_Fairchild.tmy3",
+    "WA-Yakima_Air_Terminal.tmy3",
+    "WI-Antigo_Langawos.tmy3",
+    "WI-Appleton_Outagamie.tmy3",
+    "WI-Eau_Claire_County_Ap.tmy3",
+    "WI-Green_Bay_Austin_Straubel_Int.tmy3",
+    "WI-Janesville_Rock_Co.tmy3",
+    "WI-La_Crosse_Municipal_Arpt.tmy3",
+    "WI-Lone_Rock_Faa_Ap.tmy3",
+    "WI-Madison_Dane_Co_Regional_Arpt_Isis.tmy3",
+    "WI-Manitowac_Muni_Awos.tmy3",
+    "WI-Marshfield_Muni.tmy3",
+    "WI-Milwaukee_Mitchell_Intl_Ap.tmy3",
+    "WI-Minocqua_Woodruff.tmy3",
+    "WI-Mosinee_Central_Wi.tmy3",
+    "WI-Phillips_Price_Co.tmy3",
+    "WI-Rhinelander_Oneida.tmy3",
+    "WI-Rice_Lake_Municipal.tmy3",
+    "WI-Sturgeon_Bay.tmy3",
+    "WI-Watertown.tmy3",
+    "WI-Wausau_Municipal_Arpt.tmy3",
+    "WI-Wittman_Rgnl.tmy3",
+    "WV-Beckley_Raleigh_Co_Mem_Ap.tmy3",
+    "WV-Bluefield_Mercer_Co_Nrel.tmy3",
+    "WV-Charleston_Yeager_Arpt.tmy3",
+    "WV-Elkins_Elkinsrandolph_Co_Arp.tmy3",
+    "WV-Harrison_Marion_Rgn.tmy3",
+    "WV-Huntington_Tristate_Arpt.tmy3",
+    "WV-Lewisburg_Greenbrie.tmy3",
+    "WV-Martinsburg_Eastern_Wv_Reg_Ap.tmy3",
+    "WV-Morgantown_Hart_Field.tmy3",
+    "WV-Parkersburg_Wood_County_Ap.tmy3",
+    "WV-Wheeling_Ohio_County_Ap.tmy3",
+    "WY-Casper_Natrona_Co_Intl_Ap.tmy3",
+    "WY-Cheyenne_Municipal_Arpt.tmy3",
+    "WY-Cody_Muni_Awos.tmy3",
+    "WY-Evanston_Burns_Fld.tmy3",
+    "WY-Gillette_Gillettec.tmy3",
+    "WY-Jackson_Hole.tmy3",
+    "WY-Lander_Hunt_Field.tmy3",
+    "WY-Laramie_General_Brees_Field.tmy3",
+    "WY-Rawlins_Municipal_Ap.tmy3",
+    "WY-Riverton_Municipl_Ap.tmy3",
+    "WY-Rock_Springs_Arpt_Green_River_Uo.tmy3",
+    "WY-Sheridan_County_Arpt.tmy3",
+    "WY-Worland_Municipal.tmy3"
+]

From 00cc2d09f7e1bba9117599131163df969bb3e954 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Tue, 14 Jan 2025 18:41:43 -0800
Subject: [PATCH 04/29] Update test_eia_recs.glm

---
 tools/autotest/test_eia_recs.glm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/autotest/test_eia_recs.glm b/tools/autotest/test_eia_recs.glm
index 012536ceb..c1d3a05cd 100644
--- a/tools/autotest/test_eia_recs.glm
+++ b/tools/autotest/test_eia_recs.glm
@@ -11,7 +11,7 @@
 // load the RECS data and calculate the floor area statistics
 #begin python
 import eia_recs, numpy
-fips = eia_recs.Microdata.get_division("${region}")
+fips = eia_recs.Microdata.get_division("CA")
 codes = eia_recs.Microdata.get_codes(**fips)
 recs = eia_recs.Microdata()
 data = recs[recs["DIVISION"]==codes["division"]]

From 16adefb3f5b34644f0f8fefb86edc053a7b7170d Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Tue, 14 Jan 2025 19:18:20 -0800
Subject: [PATCH 05/29] Update test_template_option.glm

---
 source/autotest/test_template_option.glm | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/source/autotest/test_template_option.glm b/source/autotest/test_template_option.glm
index d79a8b253..0c8804e7b 100644
--- a/source/autotest/test_template_option.glm
+++ b/source/autotest/test_template_option.glm
@@ -1,3 +1,5 @@
+#set region=CA
+#set organization=SLAC
 #template get ica_analysis
 #system ls -l ${GLD_ETC}/template/${country}
 #option template ica_analysis

From 33d4959519f4d75f9923b91356812f623a3bbff5 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 15 Jan 2025 07:30:42 -0800
Subject: [PATCH 06/29] Update resource.py

Signed-off-by: David P. Chassin <david.chassin@me.com>
---
 tools/resource.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/resource.py b/tools/resource.py
index 151a69643..f6a9d001a 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -20,7 +20,7 @@
 
 * `--properties=RESOURCE`: get a list of resource properties
 
-* `--silent`: support all output exception results
+* `--silent`: suppress all output exception results
 
 * `--verbose`: enable verbose output
 

From 964043d2af63833542cbb11e9c23d65aab56a5d4 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Sat, 18 Jan 2025 10:58:40 -0600
Subject: [PATCH 07/29] Added support for buildings resources

---
 docs/Tools/Resource.md |   2 +-
 runtime/resource.csv   |  78 +++++++++----------
 tools/resource.py      | 165 ++++++++++++++++++++++++++++++++---------
 3 files changed, 168 insertions(+), 77 deletions(-)

diff --git a/docs/Tools/Resource.md b/docs/Tools/Resource.md
index 22d4a4844..00235a4a3 100644
--- a/docs/Tools/Resource.md
+++ b/docs/Tools/Resource.md
@@ -20,7 +20,7 @@ Options:
 
 * `--properties=RESOURCE`: get a list of resource properties
 
-* `--silent`: support all output exception results
+* `--silent`: suppress all output exception results
 
 * `--verbose`: enable verbose output
 
diff --git a/runtime/resource.csv b/runtime/resource.csv
index c7e1cbaad..6009bef2e 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -1,40 +1,40 @@
-resource,protocol,port,hostname,index,content,deprecation,comment
+resource,protocol,port,hostname,index,content,mimetype,deprecation,comment
 localhost,http,6267-6279,127.0.0.1,,,,Server mode support (see https://docs.gridlabd.us/)
-buildings,https,443,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,,/{country}/{state}_{county}.csv.gz,,Compiled AutoBEM4 building data
-code,https,443,github.com,,/{organization}/gridlabd/releases/tag/{version},,Github release code repository
-code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{branch},,Github development code repository
-develop.code,https,443,develop.code.gridlabd.us
-develop.source,https,443,develop.source.gridlabd.us
-dmg,https,443,dmg.gridlabd.us
-docker,https,443,docker.gridlabd.us
-docs-dev,https,443,docs-dev.gridlabd.us
-docs,https,443,docs.gridlabd.us
-elevation,https,443,elevation.gridlabd.us
-examples,https,443,examples.gridlabd.us
-geodata-dev,https,443,geodata-dev.gridlabd.us
-geodata,https,443,geodata.gridlabd.us
-gridchat,https,443,gridchat.gridlabd.us
-gridlabd,https,443,gridlabd.us
-help,https,443,help.gridlabd.us
-icons,https,443,icons.gridlabd.us
-install-dev,https,443,install-dev.gridlabd.us
-issues,https,443,issues.gridlabd.us
-library,https,443,library.gridlabd.us
-master.code,https,443,master.code.gridlabd.us
-master.source,https,443,master.source.gridlabd.us
-models,https,443,models.gridlabd.us
-news,https,443,news.gridlabd.us
-openfido,https,443,openfido.gridlabd.us
-source,https,443,source.gridlabd.us
-status-dev,https,443,status-dev.gridlabd.us
-status,https,443,status.gridalbd.us
-tariff,https,443,tariff.gridlabd.us
-template,https,443,template.gridlabd.us
-test,https,443,test.gridlabd.us
-training,https,443,training.gridlabd.us
-tutorials-dev,https,443,tutorials-dev.gridlabd.us
-tutorials,https,443,tutorials.gridlabd.us
-version,https,443,version.gridlabd.us
-weather,https,443,raw.githubusercontent.com,/{organization}/gridlabd-weather/master/{country}/.index,/{organization}/gridlabd-weather/master/{country}/{index},,TMY3 weather data repository
-www-dev,https,443,www-dev.gridlabd.us
-www,https,443,www.gridlabd.us
\ No newline at end of file
+buildings,http,80,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,/index,/{index},,,Compiled AutoBEM4 building data
+#code,https,443,github.com,,/{organization}/gridlabd/releases/tag/{version},,Github release code repository
+#code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{branch},,Github development code repository
+#develop.code,https,443,develop.code.gridlabd.us
+#develop.source,https,443,develop.source.gridlabd.us
+#dmg,https,443,dmg.gridlabd.us
+#docker,https,443,docker.gridlabd.us
+#docs-dev,https,443,docs-dev.gridlabd.us
+#docs,https,443,docs.gridlabd.us
+#elevation,https,443,elevation.gridlabd.us
+#examples,https,443,examples.gridlabd.us
+#geodata-dev,https,443,geodata-dev.gridlabd.us
+#geodata,https,443,geodata.gridlabd.us
+#gridchat,https,443,gridchat.gridlabd.us
+#gridlabd,https,443,gridlabd.us
+#help,https,443,help.gridlabd.us
+#icons,https,443,icons.gridlabd.us
+#install-dev,https,443,install-dev.gridlabd.us
+#issues,https,443,issues.gridlabd.us
+#library,https,443,library.gridlabd.us
+#master.code,https,443,master.code.gridlabd.us
+#master.source,https,443,master.source.gridlabd.us
+#models,https,443,models.gridlabd.us
+#news,https,443,news.gridlabd.us
+#openfido,https,443,openfido.gridlabd.us
+#source,https,443,source.gridlabd.us
+#status-dev,https,443,status-dev.gridlabd.us
+#status,https,443,status.gridalbd.us
+#tariff,https,443,tariff.gridlabd.us
+#template,https,443,template.gridlabd.us
+#test,https,443,test.gridlabd.us
+#training,https,443,training.gridlabd.us
+#tutorials-dev,https,443,tutorials-dev.gridlabd.us
+#tutorials,https,443,tutorials.gridlabd.us
+#version,https,443,version.gridlabd.us
+weather,https,443,raw.githubusercontent.com,/{organization}/gridlabd-weather/master/index,/{organization}/gridlabd-weather/master/{index},,,TMY3 weather data repository
+#www-dev,https,443,www-dev.gridlabd.us
+#www,https,443,www.gridlabd.us
\ No newline at end of file
diff --git a/tools/resource.py b/tools/resource.py
index f6a9d001a..55e424486 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -65,6 +65,9 @@ class ResourceError(app.ApplicationError):
 
 class Resource:
     """Resource class"""
+
+    TIMEOUT = 5
+
     def __init__(self,file=None):
         """Construct resource object
 
@@ -72,8 +75,11 @@ def __init__(self,file=None):
 
         * `file`: resource file (default is $GLD_ETC/resource.csv)
         """
+
         # default file is from GLD_ETC
-        if not file and "GLD_ETC" in os.environ:
+        if os.path.exists("../runtime/resource.csv"):
+            file = "../runtime/resource.csv"
+        elif not file and "GLD_ETC" in os.environ:
             file = os.path.join(os.environ["GLD_ETC"],"resource.csv")
             if not os.path.exists(file):
                 file = None
@@ -82,7 +88,9 @@ def __init__(self,file=None):
         self.data = pd.read_csv(file,
             index_col=0,
             na_filter=False,
-            )
+            comment="#",
+            ).to_dict('index')
+        # print(self.data)
 
         # get globals from gridlabd
         self.globals = app.gridlabd("--globals=json",
@@ -97,24 +105,47 @@ def __init__(self,file=None):
         self.globals["branch"] = self.globals["version.branch"]
         self.request = None
 
-    def _download(self,protocol,hostname,port,path,output_to=lambda x:x):
-        url = f"{protocol}://{hostname}:{port}{path}"
-        req = requests.get(url)
+    def _download(self,
+            protocol,port,hostname,content,
+            output_to=lambda x:x,headers={},
+            **kwargs):
+        url = f"{protocol}://{hostname}:{port}{content}"
+        print(url)
+        try:
+            req = requests.get(url,headers=headers,timeout=self.TIMEOUT)
+            req.raise_for_status()
+        except Exception as err:
+            raise err from err
         self.request = req
         self.request.url = url
-        if req.status_code == 200:
-            return output_to(req.content.decode("utf-8"))
-        else:
-            return None
+        app.debug(f"downloading '{url}' with headers={req.request.headers}")
+        return output_to(req.content.decode("utf-8"))
+
+    def _headers(self,
+            protocol,port,hostname,content,
+            output_to=lambda x:x,headers={},
+            **kwargs):
+        url = f"{protocol}://{hostname}:{port}{content}"
+        print(url)
+        try:
+            req = requests.head(url,headers=headers,timeout=self.TIMEOUT)
+            req.raise_for_status()
+        except Exception as err:
+            raise err from err
+        self.request = req
+        self.request.url = url
+        app.debug(f"downloading '{url}' with headers={req.request.headers}")
+        return output_to(req.headers)
 
     def properties(self,passthru='*',**kwargs):
         """Get resource properties
 
         """
-        if not kwargs["name"] in self.data.index:
-            raise ResourceError(f"'{kwargs['name']}' not found")
-        result = {"resource":kwargs["name"]}
-        for key,value in dict(zip(self.data.columns,self.data.loc[kwargs['name']].tolist())).items():
+        name = kwargs['name']
+        if not name in self.data:
+            raise ResourceError(f"'{name}' not found")
+        result = {"resource":name}
+        for key,value in self.data[name].items():
             try:
                 result[key] = value.format(**kwargs,**self.globals) if type(value) is str else value
             except KeyError:
@@ -129,26 +160,59 @@ def index(self,**kwargs):
         """Get resource index (if any)
 
         """
-        spec = self.properties(passthru=['index'],**kwargs)
+        if not 'passthru' in kwargs:
+            kwargs['passthru'] = '*'
+        spec = self.properties(**kwargs)
 
         if not spec['index']:
 
             raise ResourceError(f"{spec['resource']} has no index")
 
-        return self._download(spec['protocol'],spec['hostname'],spec['port'],spec['index'],
-            output_to=lambda x:x.strip().split("\n"))
+        spec['content'] = spec['index']
+        del spec['index']
+
+        return self._download(
+            headers={'Accept':'text/plain'},
+            output_to=lambda x:x.strip().split("\n"),
+            **spec)
+
+    def headers(self,**kwargs):
+        """Get resource header
+
+        """
+        if not 'passthru' in kwargs:
+            kwargs['passthru'] = '*'
+        spec = self.properties(**kwargs)
+
+        if not spec['content']:
+
+            raise ResourceError(f"{spec['resource']} has no content")
+
+        return self._headers(
+            headers = {
+                'Accept': spec['mimetype'] if spec['mimetype'] else '*/*',
+                'Connection': 'close',
+                },
+            **spec)
 
     def content(self,**kwargs):
         """Get resource content
 
         """
+        if not 'passthru' in kwargs:
+            kwargs['passthru'] = '*'
         spec = self.properties(**kwargs)
 
         if not spec['content']:
 
             raise ResourceError(f"{spec['resource']} has not content")
 
-        return self._download(spec['protocol'],spec['hostname'],spec['port'],spec['content'])
+        return self._download(
+            headers = {
+                'Accept': spec['mimetype'] if spec['mimetype'] else '*/*',
+                'Connection': 'close',
+                },
+            **spec)
 
 def main(argv):
 
@@ -169,11 +233,18 @@ def output_csv(data,**kwargs):
             print("\n".join(data))
         elif isinstance(data,dict):
             print("\n".join([f"{x},{y}" for x,y in data.items()]))
+        elif isinstance(data,str):
+            data = pd.read_csv(io.StringIO(data),dtype=str)
+            print(data.to_csv())
         else:
             raise ResourceError(f"unable to output '{type(data)}' as CSV")
 
     def output_json(data,**kwargs):
-        print(json.dumps(data,**kwargs))
+        if isinstance(data,str):
+            data = pd.read_csv(io.StringIO(data),dtype=str)
+            print(data.to_json(indent=2))
+        else:
+            print(json.dumps(data,**kwargs))
 
     outputter = output_raw
     outputter_options = {}
@@ -293,33 +364,53 @@ def output_json(data,**kwargs):
 
 if __name__ == "__main__":
 
-    # local development test
-    # TODO: remove this block when done developint
+    # local development tests
+    # TODO: comment this block entire when done developing
     if not sys.argv[0]:
 
+        #
+        # Test library functions (comprehensive scan of all contents)
+        #
+        TESTLIST = [] # None => all resources
+        resource = Resource()
+        for name in resource.data if TESTLIST is None else TESTLIST:
+            print(f"*** {name} ***")
+            print("Properties:")
+            for key,value in resource.properties(name=name).items():
+                print(f"  {key}: {repr(value)}")
+            try:
+                index = resource.index(name=name)
+                if index:
+                    for item in index:
+                        content = resource.headers(name=name,index=item)
+                        print(f"{name}/{item}... {content['content-length']} bytes",flush=True)
+            except ResourceError as err:
+                print(f"{name}... {err}")
+
+
+        #
+        # Test command line options (e.g., one at a time)
+        #
+
+        # options = ["--debug","--format=csv"]
+        # options = ["--debug","--format=json,indent:4"]
         # sys.argv.extend(["--list"])
-        # sys.argv.extend(["--format=csv","--list"])
-        # sys.argv.extend(["--format=json","--list"])
-        # sys.argv.extend(["--format=json,indent:4","--list"])
+        # sys.argv.extend([*options,"--list"])
 
-        # sys.argv.extend(["--index"]) # should be an error
-        # sys.argv.extend(["--index=weather"])
-        # sys.argv.extend(["--format=json","--index=weather"])
-        # sys.argv.extend(["--format=json,indent:4","--index=weather"])
+        # sys.argv.extend([*options,"--index"]) # should be an error
+        # sys.argv.extend([*options,"--index=weather"])
 
-        # sys.argv.extend(["--properties"])
-        # sys.argv.extend(["--properties=weather"])
-        # sys.argv.extend(["--debug","--format=json,indent:4","--properties=weather"])
+        # sys.argv.extend([*options,"--properties"])
+        # sys.argv.extend([*options,"--properties=weather"])
 
-        # sys.argv.extend(["--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
-        # sys.argv.extend(["--format=csv","--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
-        # sys.argv.extend(["--format=json","--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
+        # sys.argv.extend([*options,"--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
 
-        # sys.argv.extend(["--index=localhost"]) # should be an error
-        # sys.argv.extend(["--content=localhost"]) # should be an error
-        # sys.argv.extend(["--content=junk"]) # should be an error
+        # sys.argv.extend([*options,"--index=localhost"]) # should be an error
+        # sys.argv.extend([*options,"--content=localhost"]) # should be an error
+        # sys.argv.extend([*options,"--content=junk"]) # should be an error
 
-        pass
+        print("Tests completed")
+        quit(0)
 
     try:
 

From c4d09540c0a95ccd8ae3775dba7e17ea2d6455dd Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Sun, 19 Jan 2025 09:17:18 -0600
Subject: [PATCH 08/29] Add elevation resource

---
 runtime/resource.csv | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/runtime/resource.csv b/runtime/resource.csv
index 6009bef2e..b2a57e137 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -9,7 +9,7 @@ buildings,http,80,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,/inde
 #docker,https,443,docker.gridlabd.us
 #docs-dev,https,443,docs-dev.gridlabd.us
 #docs,https,443,docs.gridlabd.us
-#elevation,https,443,elevation.gridlabd.us
+elevation,https,443,s3.us-west-1.amazonaws.com,/elevation.gridlabd.us/index,/elevation.gridlabd.us{index},image/tiff,,Ground elevation data
 #examples,https,443,examples.gridlabd.us
 #geodata-dev,https,443,geodata-dev.gridlabd.us
 #geodata,https,443,geodata.gridlabd.us

From bf55b485e348d724407a7cce5e07d2b38121745b Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Sun, 19 Jan 2025 09:17:21 -0600
Subject: [PATCH 09/29] Update resource.py

---
 tools/resource.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/resource.py b/tools/resource.py
index 55e424486..c88ca9d33 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -371,7 +371,7 @@ def output_json(data,**kwargs):
         #
         # Test library functions (comprehensive scan of all contents)
         #
-        TESTLIST = [] # None => all resources
+        TESTLIST = [] # None => all resources, empty list => skip test
         resource = Resource()
         for name in resource.data if TESTLIST is None else TESTLIST:
             print(f"*** {name} ***")

From 59d30b4ec4c6d3c8d0a53e2ddb6b233b66916833 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Sun, 19 Jan 2025 11:38:16 -0600
Subject: [PATCH 10/29] Update autotests

---
 docs/Tools/Resource.md           |  587 ++++++++-
 runtime/resource.csv             |    2 +-
 tools/autotest/test_location.txt |    2 +-
 tools/autotest/test_resource.glm |   12 +-
 tools/autotest/test_resource.txt | 2077 +-----------------------------
 tools/resource.py                |  117 +-
 6 files changed, 708 insertions(+), 2089 deletions(-)

diff --git a/docs/Tools/Resource.md b/docs/Tools/Resource.md
index 00235a4a3..a5cca1cd8 100644
--- a/docs/Tools/Resource.md
+++ b/docs/Tools/Resource.md
@@ -22,6 +22,8 @@ Options:
 
 * `--silent`: suppress all output exception results
 
+* `--test[=PATTERN]`: test resources matching pattern (default is '.*')
+
 * `--verbose`: enable verbose output
 
 * `--warning`: disable warning output
@@ -50,6 +52,229 @@ The following command retrieves the online weather data for the specified locati
 
 # Classes
 
+## Annotated
+
+Add context specific metadata to a type.
+
+Example: Annotated[int, runtime_check.Unsigned] indicates to the
+hypothetical runtime_check module that this type is an unsigned int.
+Every other consumer of this type can ignore this metadata and treat
+this type as int.
+
+The first argument to Annotated must be a valid type.
+
+Details:
+
+- It's an error to call `Annotated` with less than two arguments.
+- Nested Annotated are flattened::
+
+Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3]
+
+- Instantiating an annotated type is equivalent to instantiating the
+underlying type::
+
+Annotated[C, Ann1](5) == C(5)
+
+- Annotated can be used as a generic type alias::
+
+Optimized = Annotated[T, runtime.Optimize()]
+Optimized[int] == Annotated[int, runtime.Optimize()]
+
+OptimizedList = Annotated[List[T], runtime.Optimize()]
+OptimizedList[int] == Annotated[List[int], runtime.Optimize()]
+
+
+---
+
+## BinaryIO
+
+Typed version of the return of open() in binary mode.
+
+---
+
+## ForwardRef
+
+Internal wrapper to hold a forward reference.
+
+---
+
+## Generic
+
+Abstract base class for generic types.
+
+A generic type is typically declared by inheriting from
+this class parameterized with one or more type variables.
+For example, a generic mapping type might be defined as::
+
+class Mapping(Generic[KT, VT]):
+def __getitem__(self, key: KT) -> VT:
+...
+# Etc.
+
+This class can then be used as follows::
+
+def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT:
+try:
+return mapping[key]
+except KeyError:
+return default
+
+
+---
+
+## IO
+
+Generic base class for TextIO and BinaryIO.
+
+This is an abstract, generic version of the return of open().
+
+NOTE: This does not distinguish between the different possible
+classes (text vs. binary, read vs. write vs. read/write,
+append-only, unbuffered).  The TextIO and BinaryIO subclasses
+below capture the distinctions between text vs. binary, which is
+pervasive in the interface; however we currently do not offer a
+way to track the other distinctions in the type system.
+
+
+---
+
+## NewType
+
+NewType creates simple unique types with almost zero
+runtime overhead. NewType(name, tp) is considered a subtype of tp
+by static type checkers. At runtime, NewType(name, tp) returns
+a dummy callable that simply returns its argument. Usage::
+
+UserId = NewType('UserId', int)
+
+def name_by_id(user_id: UserId) -> str:
+...
+
+UserId('user')          # Fails type check
+
+name_by_id(42)          # Fails type check
+name_by_id(UserId(42))  # OK
+
+num = UserId(5) + 1     # type: int
+
+
+---
+
+## ParamSpec
+
+Parameter specification variable.
+
+Usage::
+
+P = ParamSpec('P')
+
+Parameter specification variables exist primarily for the benefit of static
+type checkers.  They are used to forward the parameter types of one
+callable to another callable, a pattern commonly found in higher order
+functions and decorators.  They are only valid when used in ``Concatenate``,
+or as the first argument to ``Callable``, or as parameters for user-defined
+Generics.  See class Generic for more information on generic types.  An
+example for annotating a decorator::
+
+T = TypeVar('T')
+P = ParamSpec('P')
+
+def add_logging(f: Callable[P, T]) -> Callable[P, T]:
+'''A type-safe decorator to add logging to a function.'''
+def inner(*args: P.args, **kwargs: P.kwargs) -> T:
+logging.info(f'{f.__name__} was called')
+return f(*args, **kwargs)
+return inner
+
+@add_logging
+def add_two(x: float, y: float) -> float:
+'''Add two numbers together.'''
+return x + y
+
+Parameter specification variables defined with covariant=True or
+contravariant=True can be used to declare covariant or contravariant
+generic types.  These keyword arguments are valid, but their actual semantics
+are yet to be decided.  See PEP 612 for details.
+
+Parameter specification variables can be introspected. e.g.:
+
+P.__name__ == 'P'
+P.__bound__ == None
+P.__covariant__ == False
+P.__contravariant__ == False
+
+Note that only parameter specification variables defined in global scope can
+be pickled.
+
+
+---
+
+## ParamSpecArgs
+
+The args for a ParamSpec object.
+
+Given a ParamSpec object P, P.args is an instance of ParamSpecArgs.
+
+ParamSpecArgs objects have a reference back to their ParamSpec:
+
+P.args.__origin__ is P
+
+This type is meant for runtime introspection and has no special meaning to
+static type checkers.
+
+
+---
+
+## ParamSpecKwargs
+
+The kwargs for a ParamSpec object.
+
+Given a ParamSpec object P, P.kwargs is an instance of ParamSpecKwargs.
+
+ParamSpecKwargs objects have a reference back to their ParamSpec:
+
+P.kwargs.__origin__ is P
+
+This type is meant for runtime introspection and has no special meaning to
+static type checkers.
+
+
+---
+
+## Protocol
+
+Base class for protocol classes.
+
+Protocol classes are defined as::
+
+class Proto(Protocol):
+def meth(self) -> int:
+...
+
+Such classes are primarily used with static type checkers that recognize
+structural subtyping (static duck-typing), for example::
+
+class C:
+def meth(self) -> int:
+return 0
+
+def func(x: Proto) -> int:
+return x.meth()
+
+func(C())  # Passes static type check
+
+See PEP 544 for details. Protocol classes decorated with
+@typing.runtime_checkable act as simple-minded runtime protocols that check
+only the presence of given attributes, ignoring their type signatures.
+Protocol classes can be generic, they are defined as::
+
+class GenProto(Protocol[T]):
+def meth(self) -> T:
+...
+
+
+---
+
 ## Resource
 
 Resource class
@@ -63,19 +288,39 @@ Arguments:
 * `file`: resource file (default is $GLD_ETC/resource.csv)
 
 
-### `Resource.content() -> None`
+### `Resource.content(kwargs:dict) -> str`
 
 Get resource content
 
+Arguments:
+
+* `**kwargs`: options (see `properties()`)
+
+Returns:
+
+* Resource contents
+
+
+### `Resource.headers(kwargs:dict) -> Union`
 
+Get resource header
 
-### `Resource.index() -> None`
+
+
+### `Resource.index(kwargs:dict) -> Union`
 
 Get resource index (if any)
 
 
 
-### `Resource.properties() -> None`
+### `Resource.list(pattern:str) -> list`
+
+Get a list of available resources
+
+Argument
+
+
+### `Resource.properties(passthru:str, kwargs:dict) -> dict`
 
 Get resource properties
 
@@ -86,3 +331,339 @@ Get resource properties
 ## ResourceError
 
 Resource exception
+
+---
+
+## SupportsAbs
+
+An ABC with one abstract method __abs__ that is covariant in its return type.
+
+---
+
+## SupportsBytes
+
+An ABC with one abstract method __bytes__.
+
+---
+
+## SupportsComplex
+
+An ABC with one abstract method __complex__.
+
+---
+
+## SupportsFloat
+
+An ABC with one abstract method __float__.
+
+---
+
+## SupportsIndex
+
+An ABC with one abstract method __index__.
+
+---
+
+## SupportsInt
+
+An ABC with one abstract method __int__.
+
+---
+
+## SupportsRound
+
+An ABC with one abstract method __round__ that is covariant in its return type.
+
+---
+
+## str
+
+str(object='') -> str
+str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+Create a new string object from the given object. If encoding or
+errors is specified, then the object must expose a data buffer
+that will be decoded using the given encoding and error handler.
+Otherwise, returns the result of object.__str__() (if defined)
+or repr(object).
+encoding defaults to sys.getdefaultencoding().
+errors defaults to 'strict'.
+
+---
+
+## TextIO
+
+Typed version of the return of open() in text mode.
+
+# Functions
+
+## `NamedTuple() -> None`
+
+Typed version of namedtuple.
+
+Usage in Python versions >= 3.6::
+
+class Employee(NamedTuple):
+name: str
+id: int
+
+This is equivalent to::
+
+Employee = collections.namedtuple('Employee', ['name', 'id'])
+
+The resulting class has an extra __annotations__ attribute, giving a
+dict that maps field names to types.  (The field names are also in
+the _fields attribute, which is part of the namedtuple API.)
+Alternative equivalent keyword syntax is also accepted::
+
+Employee = NamedTuple('Employee', name=str, id=int)
+
+In Python versions <= 3.5 use::
+
+Employee = NamedTuple('Employee', [('name', str), ('id', int)])
+
+
+---
+
+## `TypedDict() -> None`
+
+A simple typed namespace. At runtime it is equivalent to a plain dict.
+
+TypedDict creates a dictionary type that expects all of its
+instances to have a certain set of keys, where each key is
+associated with a value of a consistent type. This expectation
+is not checked at runtime but is only enforced by type checkers.
+Usage::
+
+class Point2D(TypedDict):
+x: int
+y: int
+label: str
+
+a: Point2D = {'x': 1, 'y': 2, 'label': 'good'}  # OK
+b: Point2D = {'z': 3, 'label': 'bad'}           # Fails type check
+
+assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
+
+The type info can be accessed via the Point2D.__annotations__ dict, and
+the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.
+TypedDict supports two additional equivalent forms::
+
+Point2D = TypedDict('Point2D', x=int, y=int, label=str)
+Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})
+
+By default, all keys must be present in a TypedDict. It is possible
+to override this by specifying totality.
+Usage::
+
+class point2D(TypedDict, total=False):
+x: int
+y: int
+
+This means that a point2D TypedDict can have any of the keys omitted.A type
+checker is only expected to support a literal False or True as the value of
+the total argument. True is the default, and makes all items defined in the
+class body be required.
+
+The class syntax is only supported in Python 3.6+, while two other
+syntax forms work for Python 2.7 and 3.2+
+
+
+---
+
+## `cast() -> None`
+
+Cast a value to a type.
+
+This returns the value unchanged.  To the type checker this
+signals that the return value has the designated type, but at
+runtime we intentionally don't check anything (we want this
+to be as fast as possible).
+
+
+---
+
+## `final() -> None`
+
+A decorator to indicate final methods and final classes.
+
+Use this decorator to indicate to type checkers that the decorated
+method cannot be overridden, and decorated class cannot be subclassed.
+For example:
+
+class Base:
+@final
+def done(self) -> None:
+...
+class Sub(Base):
+def done(self) -> None:  # Error reported by type checker
+...
+
+@final
+class Leaf:
+...
+class Other(Leaf):  # Error reported by type checker
+...
+
+There is no runtime checking of these properties.
+
+
+---
+
+## `get_args() -> None`
+
+Get type arguments with all substitutions performed.
+
+For unions, basic simplifications used by Union constructor are performed.
+Examples::
+get_args(Dict[str, int]) == (str, int)
+get_args(int) == ()
+get_args(Union[int, Union[T, int], str][int]) == (int, str)
+get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
+get_args(Callable[[], T][int]) == ([], int)
+
+
+---
+
+## `get_origin() -> None`
+
+Get the unsubscripted version of a type.
+
+This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar
+and Annotated. Return None for unsupported types. Examples::
+
+get_origin(Literal[42]) is Literal
+get_origin(int) is None
+get_origin(ClassVar[int]) is ClassVar
+get_origin(Generic) is Generic
+get_origin(Generic[T]) is Generic
+get_origin(Union[T, int]) is Union
+get_origin(List[Tuple[T, T]][int]) == list
+get_origin(P.args) is P
+
+
+---
+
+## `get_type_hints() -> None`
+
+Return type hints for an object.
+
+This is often the same as obj.__annotations__, but it handles
+forward references encoded as string literals, adds Optional[t] if a
+default value equal to None is set and recursively replaces all
+'Annotated[T, ...]' with 'T' (unless 'include_extras=True').
+
+The argument may be a module, class, method, or function. The annotations
+are returned as a dictionary. For classes, annotations include also
+inherited members.
+
+TypeError is raised if the argument is not of a type that can contain
+annotations, and an empty dictionary is returned if no annotations are
+present.
+
+BEWARE -- the behavior of globalns and localns is counterintuitive
+(unless you are familiar with how eval() and exec() work).  The
+search order is locals first, then globals.
+
+- If no dict arguments are passed, an attempt is made to use the
+globals from obj (or the respective module's globals for classes),
+and these are also used as the locals.  If the object does not appear
+to have globals, an empty dictionary is used.  For classes, the search
+order is globals first then locals.
+
+- If one dict argument is passed, it is used for both globals and
+locals.
+
+- If two dict arguments are passed, they specify globals and
+locals, respectively.
+
+
+---
+
+## `is_typeddict() -> None`
+
+Check if an annotation is a TypedDict class
+
+For example::
+class Film(TypedDict):
+title: str
+year: int
+
+is_typeddict(Film)  # => True
+is_typeddict(Union[list, str])  # => False
+
+
+---
+
+## `no_type_check() -> None`
+
+Decorator to indicate that annotations are not type hints.
+
+The argument must be a class or function; if it is a class, it
+applies recursively to all methods and classes defined in that class
+(but not to methods defined in its superclasses or subclasses).
+
+This mutates the function(s) or class(es) in place.
+
+
+---
+
+## `no_type_check_decorator() -> None`
+
+Decorator to give another decorator the @no_type_check effect.
+
+This wraps the decorator with something that wraps the decorated
+function in @no_type_check.
+
+
+---
+
+## `overload() -> None`
+
+Decorator for overloaded functions/methods.
+
+In a stub file, place two or more stub definitions for the same
+function in a row, each decorated with @overload.  For example:
+
+@overload
+def utf8(value: None) -> None: ...
+@overload
+def utf8(value: bytes) -> bytes: ...
+@overload
+def utf8(value: str) -> bytes: ...
+
+In a non-stub file (i.e. a regular .py file), do the same but
+follow it with an implementation.  The implementation should *not*
+be decorated with @overload.  For example:
+
+@overload
+def utf8(value: None) -> None: ...
+@overload
+def utf8(value: bytes) -> bytes: ...
+@overload
+def utf8(value: str) -> bytes: ...
+def utf8(value):
+# implementation goes here
+
+
+---
+
+## `runtime_checkable() -> None`
+
+Mark a protocol class as a runtime protocol.
+
+Such protocol can be used with isinstance() and issubclass().
+Raise TypeError if applied to a non-protocol class.
+This allows a simple-minded structural check very similar to
+one trick ponies in collections.abc such as Iterable.
+For example::
+
+@runtime_checkable
+class Closable(Protocol):
+def close(self): ...
+
+assert isinstance(open('/some/file'), Closable)
+
+Warning: this will check only the presence of the required methods,
+not their type signatures!
+
diff --git a/runtime/resource.csv b/runtime/resource.csv
index b2a57e137..635cd0e44 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -9,7 +9,7 @@ buildings,http,80,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,/inde
 #docker,https,443,docker.gridlabd.us
 #docs-dev,https,443,docs-dev.gridlabd.us
 #docs,https,443,docs.gridlabd.us
-elevation,https,443,s3.us-west-1.amazonaws.com,/elevation.gridlabd.us/index,/elevation.gridlabd.us{index},image/tiff,,Ground elevation data
+elevation,https,443,s3.us-west-1.amazonaws.com,/elevation.gridlabd.us/index,/elevation.gridlabd.us/{index},image/tiff,,Ground elevation data
 #examples,https,443,examples.gridlabd.us
 #geodata-dev,https,443,geodata-dev.gridlabd.us
 #geodata,https,443,geodata.gridlabd.us
diff --git a/tools/autotest/test_location.txt b/tools/autotest/test_location.txt
index c4198f0b9..ef5e3fc33 100644
--- a/tools/autotest/test_location.txt
+++ b/tools/autotest/test_location.txt
@@ -1 +1 @@
-{'latitude': '', 'longitude': '', 'city': '', 'zipcode': '', 'county': '', 'state': '', 'region': 'CA', 'country': 'US'}
+{'latitude': '', 'longitude': '', 'city': '', 'zipcode': '', 'county': '', 'state': '', 'region': '', 'country': 'US'}
diff --git a/tools/autotest/test_resource.glm b/tools/autotest/test_resource.glm
index 72a9fb1c5..47908430d 100644
--- a/tools/autotest/test_resource.glm
+++ b/tools/autotest/test_resource.glm
@@ -1,11 +1,17 @@
-#system gridlabd resource --format=csv --index=weather > test_resource.txt
-
+// get resource indexes
 #begin python
 from resource import Resource
 import json
-print(json.dumps(Resource().index(name='weather'),indent=4),file=open('test_resource.txt','a'))
+with open('test_resource.txt','w') as fh:
+    for resource in Resource().list("buildings"):
+        try:
+            print(json.dumps(Resource().index(name=resource),indent=4),file=fh)
+        except Exception as err:
+            print(err,file=fh)
 #end
 
+#system gridlabd resource --test=buildings >> test_resource.txt
+
 #ifexist "../test_resource.txt"
 #on_exit 0 diff ../test_resource.txt test_resource.txt > gridlabd.diff
 #endif
diff --git a/tools/autotest/test_resource.txt b/tools/autotest/test_resource.txt
index 8c9a615e0..f48d4df7b 100644
--- a/tools/autotest/test_resource.txt
+++ b/tools/autotest/test_resource.txt
@@ -1,2042 +1,39 @@
-AK-Adak_Nas.tmy3
-AK-Ambler.tmy3
-AK-Anaktuvuk_Pass.tmy3
-AK-Anchorage_Elmendorf.tmy3
-AK-Anchorage_Intl_Ap.tmy3
-AK-Anchorage_Merrill_Field.tmy3
-AK-Aniak_Airport.tmy3
-AK-Annette_Island_Ap.tmy3
-AK-Anvik.tmy3
-AK-Barrow_W_Postw_Rogers_Arpt_Nsa_Arm.tmy3
-AK-Bethel_Airport.tmy3
-AK-Bettles_Field.tmy3
-AK-Big_Delta_Allen_Aaf.tmy3
-AK-Big_River_Lake.tmy3
-AK-Birchwood.tmy3
-AK-Chulitna.tmy3
-AK-Cold_Bay_Arpt.tmy3
-AK-Cordova.tmy3
-AK-Deadhorse.tmy3
-AK-Dillingham_Amos.tmy3
-AK-Dutch_Harbor.tmy3
-AK-Emmonak.tmy3
-AK-Fairbanks_Eielson_A.tmy3
-AK-Fairbanks_Intl_Arpt.tmy3
-AK-Fort_Yukon.tmy3
-AK-Gambell.tmy3
-AK-Gulkana_Intermediate_Field.tmy3
-AK-Gustavus.tmy3
-AK-Hayes_River.tmy3
-AK-Healy_River_Airport.tmy3
-AK-Homer_Arpt.tmy3
-AK-Hoonah.tmy3
-AK-Hooper_Bay.tmy3
-AK-Huslia.tmy3
-AK-Hydaburg_Seaplane.tmy3
-AK-Iliamna_Arpt.tmy3
-AK-Juneau_Intl_Arpt.tmy3
-AK-Kake_Seaplane_Base.tmy3
-AK-Kenai_Municipal_Ap.tmy3
-AK-Ketchikan_Intl_Ap.tmy3
-AK-King_Salmon_Arpt.tmy3
-AK-Kodiak_Airport.tmy3
-AK-Kotzebue_Ralph_Wein_Memorial.tmy3
-AK-Lake_Hood_Seaplane.tmy3
-AK-Mcgrath_Arpt.tmy3
-AK-Mekoryuk.tmy3
-AK-Middleton_Island_Aut.tmy3
-AK-Minchumina.tmy3
-AK-Nenana_Municipal_Ap.tmy3
-AK-Nome_Municipal_Arpt.tmy3
-AK-Northway_Airport.tmy3
-AK-Palmer_Municipal.tmy3
-AK-Petersburg.tmy3
-AK-Point_Hope_Awos.tmy3
-AK-Port_Heiden.tmy3
-AK-Saint_Marys_Awos.tmy3
-AK-Sand_Point.tmy3
-AK-Savoonga.tmy3
-AK-Selawik.tmy3
-AK-Seward.tmy3
-AK-Shemya_Afb.tmy3
-AK-Shishmaref_Awos.tmy3
-AK-Sitka_Japonski_Ap.tmy3
-AK-Skagway_Airport.tmy3
-AK-Sleetmute.tmy3
-AK-Soldotna.tmy3
-AK-St_Paul_Island_Arpt.tmy3
-AK-Talkeetna_State_Arpt.tmy3
-AK-Tanana_Ralph_M_Calhoun_Mem_Ap.tmy3
-AK-Togiac_Village_Awos.tmy3
-AK-Unalakleet_Field.tmy3
-AK-Valdez_Pioneer_Fiel.tmy3
-AK-Valdez_Wso.tmy3
-AK-Whittier.tmy3
-AK-Wrangell.tmy3
-AK-Yakutat_State_Arpt.tmy3
-AL-Anniston_Metropolitan_Ap.tmy3
-AL-Auburnopelika_Apt.tmy3
-AL-Birmingham_Municipal_Ap.tmy3
-AL-Cairns_Field_Fort_Rucker.tmy3
-AL-Dothan_Municipal_Ap.tmy3
-AL-Gadsen_Muni_Awos.tmy3
-AL-Huntsville_Intl_Jones_Field.tmy3
-AL-Maxwell_Afb.tmy3
-AL-Mobile_Downtown_Ap.tmy3
-AL-Mobile_Regional_Ap.tmy3
-AL-Montgomery_Dannelly_Field.tmy3
-AL-Muscle_Shoals_Regional_Ap.tmy3
-AL-Troy_Af.tmy3
-AL-Tuscaloosa_Municipal_Ap.tmy3
-AR-Batesville_Awos.tmy3
-AR-Bentonville_Awos.tmy3
-AR-El_Dorado_Goodwin_Field.tmy3
-AR-Fayetteville_Drake_Field.tmy3
-AR-Flippin_Awos.tmy3
-AR-Fort_Smith_Regional_Ap.tmy3
-AR-Harrison_Faa_Ap.tmy3
-AR-Jonesboro_Muni.tmy3
-AR-Little_Rock_Adams_Field.tmy3
-AR-Little_Rock_Afb.tmy3
-AR-Memorial_Fld.tmy3
-AR-Pine_Bluff_Faa_Ap.tmy3
-AR-Rogers_Awos.tmy3
-AR-Siloam_Springawos.tmy3
-AR-Springdale_Muni.tmy3
-AR-Stuttgart_Awos.tmy3
-AR-Texarkana_Webb_Field.tmy3
-AR-Walnut_Ridge_Awos.tmy3
-AZ-Casa_Granda_Awos.tmy3
-AZ-Davis_Monthan_Afb.tmy3
-AZ-Deer_Valley_Phoenix.tmy3
-AZ-Douglas_Bisbeedouglas_Intl_A.tmy3
-AZ-Flagstaff_Pulliam_Arpt.tmy3
-AZ-Grand_Canyon_Natl_P.tmy3
-AZ-Kingman_Amos.tmy3
-AZ-Luke_Afb.tmy3
-AZ-Page_Muni_Amos.tmy3
-AZ-Phoenix_Sky_Harbor_Intl_Ap.tmy3
-AZ-Prescott_Love_Field.tmy3
-AZ-Safford_Amos.tmy3
-AZ-Scottsdale_Muni.tmy3
-AZ-Show_Low_Municipal.tmy3
-AZ-Tucson_International_Ap.tmy3
-AZ-Winslow_Municipal_Ap.tmy3
-AZ-Yuma_Intl_Arpt.tmy3
-AZ-Yuma_Mcas.tmy3
-CA-Alturas.tmy3
-CA-Arcata_Airport.tmy3
-CA-Bakersfield_Meadows_Field.tmy3
-CA-Beale_Afb.tmy3
-CA-Bishop_Airport.tmy3
-CA-Blue_Canyon_Ap.tmy3
-CA-Blythe_Riverside_Co_Arpt.tmy3
-CA-Burbankglendalepassadena_Ap.tmy3
-CA-Camarillo_Awos.tmy3
-CA-Camp_Pendleton_Mcas.tmy3
-CA-Carlsbad_Palomar.tmy3
-CA-China_Lake_Naf.tmy3
-CA-Chino_Airport.tmy3
-CA-Chula_Vista_Brown_Field_Naas.tmy3
-CA-Concord_Concordbuchanan_Fiel.tmy3
-CA-Crescent_City_Faa_Ai.tmy3
-CA-Daggett_Barstowdaggett_Ap.tmy3
-CA-Edwards_Afb.tmy3
-CA-Fresno_Yosemite_Intl_Ap.tmy3
-CA-Fullerton_Municipal.tmy3
-CA-Hayward_Air_Term.tmy3
-CA-Imperial.tmy3
-CA-Jack_Northrop_Fld_H.tmy3
-CA-Lancaster_Gen_Wm_Fox_Field.tmy3
-CA-Lemoore_Reeves_Nas.tmy3
-CA-Livermore_Municipal.tmy3
-CA-Lompoc_Awos.tmy3
-CA-Long_Beach_Daugherty_Fld.tmy3
-CA-Los_Angeles_Intl_Arpt.tmy3
-CA-March_Afb.tmy3
-CA-Merced_Macready_Fld.tmy3
-CA-Modesto_Citycounty_Ap.tmy3
-CA-Montague_Siskiyou_County_Ap.tmy3
-CA-Monterey_Naf.tmy3
-CA-Mountain_View_Moffett_Fld_Nas.tmy3
-CA-Napa_Co_Airport.tmy3
-CA-Needles_Airport.tmy3
-CA-Oakland_Metropolitan_Arpt.tmy3
-CA-Oxnard_Airport.tmy3
-CA-Palm_Springs_Intl.tmy3
-CA-Palm_Springs_Thermal_Ap.tmy3
-CA-Palmdale_Airport.tmy3
-CA-Paso_Robles_Municipal_Arpt.tmy3
-CA-Point_Mugu_Nf.tmy3
-CA-Porterville_Awos.tmy3
-CA-Red_Bluff_Municipal_Arpt.tmy3
-CA-Redding_Municipal_Arpt.tmy3
-CA-Riverside_Muni.tmy3
-CA-Sacramento_Executive_Arpt.tmy3
-CA-Sacramento_Metropolitan_Ap.tmy3
-CA-Salinas_Municipal_Ap.tmy3
-CA-San_Diego_Lindbergh_Field.tmy3
-CA-San_Diego_Miramar_Nas.tmy3
-CA-San_Diego_Montgomer.tmy3
-CA-San_Diego_North_Island_Nas.tmy3
-CA-San_Francisco_Intl_Ap.tmy3
-CA-San_Jose_Intl_Ap.tmy3
-CA-San_Luis_Co_Rgnl.tmy3
-CA-Sandberg.tmy3
-CA-Santa_Ana_John_Wayne_Ap.tmy3
-CA-Santa_Barbara_Municipal_Ap.tmy3
-CA-Santa_Maria_Public_Arpt.tmy3
-CA-Santa_Monica_Muni.tmy3
-CA-Santa_Rosa_Awos.tmy3
-CA-South_Lake_Tahoe.tmy3
-CA-Stockton_Metropolitan_Arpt.tmy3
-CA-Travis_Field_Afb.tmy3
-CA-Truckeetahoe.tmy3
-CA-Twentynine_Palms.tmy3
-CA-Ukiah_Municipal_Ap.tmy3
-CA-Van_Nuys_Airport.tmy3
-CA-Visalia_Muni_Awos.tmy3
-CA-Yuba_Co.tmy3
-CO-Akron_Washington_Co_Ap.tmy3
-CO-Alamosa_San_Luis_Valley_Rgnl.tmy3
-CO-Aspen_Pitkin_Co_Sar.tmy3
-CO-Aurora_Buckley_Field_Angb.tmy3
-CO-Broomfield_Jeffco_Boulder_Surfrad.tmy3
-CO-Colorado_Springs_Muni_Ap.tmy3
-CO-Cortez_Montezuma_Co.tmy3
-CO-Craigmoffat.tmy3
-CO-Denver_Centennial_Golden_Nrel.tmy3
-CO-Denver_Intl_Ap.tmy3
-CO-Durango_La_Plata_Co.tmy3
-CO-Eagle_County_Ap.tmy3
-CO-Fort_Collins_Awos.tmy3
-CO-Grand_Junction_Walker_Field.tmy3
-CO-Greeley_Weld_Awos.tmy3
-CO-Gunnison_Co_Awos.tmy3
-CO-Hayden_Yampa_Awos.tmy3
-CO-La_Junta_Municipal_Ap.tmy3
-CO-Lamar_Municipal.tmy3
-CO-Leadville_Lake_Co.tmy3
-CO-Limon.tmy3
-CO-Montrose_Co_Arpt.tmy3
-CO-Pueblo_Memorial_Ap.tmy3
-CO-Rifle_Garfield_Rgnl.tmy3
-CO-Trinidad_Las_Animas_County_Ap.tmy3
-CT-Bridgeport_Sikorsky_Memorial.tmy3
-CT-Danbury_Municipal.tmy3
-CT-Groton_New_London_Ap.tmy3
-CT-Hartford_Bradley_Intl_Ap.tmy3
-CT-Hartford_Brainard_Fd.tmy3
-CT-New_Haven_Tweed_Airport.tmy3
-CT-Oxford_Awos.tmy3
-DE-Dover_Afb.tmy3
-DE-Wilmington_New_Castle_Cnty_Ap.tmy3
-FL-Crestview_Bob_Sikes_Ap.tmy3
-FL-Daytona_Beach_Intl_Ap.tmy3
-FL-Fort_Lauderdale.tmy3
-FL-Fort_Lauderdale_Hollywood_Int.tmy3
-FL-Fort_Myers_Page_Field.tmy3
-FL-Gainesville_Regional_Ap.tmy3
-FL-Homestead_Afb.tmy3
-FL-Jacksonville_Craig.tmy3
-FL-Jacksonville_Intl_Arpt.tmy3
-FL-Jacksonville_Nas.tmy3
-FL-Key_West_Intl_Arpt.tmy3
-FL-Key_West_Nas.tmy3
-FL-Lakeland_Linder_Rgn.tmy3
-FL-Macdill_Afb.tmy3
-FL-Marathon_Airport.tmy3
-FL-Mayport_Ns.tmy3
-FL-Melbourne_Regional_Ap.tmy3
-FL-Miami_Intl_Ap.tmy3
-FL-Miami_Kendalltamia.tmy3
-FL-Miami_Opa_Locka.tmy3
-FL-Naples_Municipal.tmy3
-FL-Nasa_Shuttle_Fclty.tmy3
-FL-Ocala_Muni_Awos.tmy3
-FL-Orlando_Executive_Ap.tmy3
-FL-Orlando_Intl_Arpt.tmy3
-FL-Orlando_Sanford_Airport.tmy3
-FL-Panama_City_Bay_Co.tmy3
-FL-Pensacola_Forest_Sherman_Nas.tmy3
-FL-Pensacola_Regional_Ap.tmy3
-FL-Sarasota_Bradenton.tmy3
-FL-Southwest_Florida_I.tmy3
-FL-St_Lucie_Co_Intl.tmy3
-FL-St_Petersburg_Albert_Whitted.tmy3
-FL-St_Petersburg_Clear.tmy3
-FL-Tallahassee_Regional_Ap_Isis.tmy3
-FL-Tampa_International_Ap.tmy3
-FL-Tyndall_Afb.tmy3
-FL-Valparaiso_Elgin_Afb.tmy3
-FL-Valparaiso_Hurlburt.tmy3
-FL-Vero_Beach_Municipal_Arpt.tmy3
-FL-West_Palm_Beach_Intl_Arpt.tmy3
-FL-Whiting_Field_Naas.tmy3
-GA-Albany_Dougherty_County_Ap.tmy3
-GA-Alma_Bacon_County_Ap.tmy3
-GA-Athens_Ben_Epps_Ap.tmy3
-GA-Atlanta_Hartsfield_Intl_Ap.tmy3
-GA-Augusta_Bush_Field.tmy3
-GA-Brunswick_Golden_Is.tmy3
-GA-Brunswick_Malcolm_Mckinnon_Ap.tmy3
-GA-Columbus_Metropolitan_Arpt.tmy3
-GA-Dekalb_Peachtree.tmy3
-GA-Fort_Benning_Lawson.tmy3
-GA-Fulton_Co_Arpt_Brow.tmy3
-GA-Hunter_Aaf.tmy3
-GA-Macon_Middle_Ga_Regional_Ap.tmy3
-GA-Marietta_Dobbins_Afb.tmy3
-GA-Moody_Afb_Valdosta.tmy3
-GA-Rome_R_B_Russell_Ap.tmy3
-GA-Savannah_Intl_Ap.tmy3
-GA-Valdosta_Wb_Airport.tmy3
-GA-Warner_Robins_Afb.tmy3
-GU-Andersen_Afb.tmy3
-GU-Guam_Wfo.tmy3
-HI-Barbers_Point_Nas.tmy3
-HI-Hilo_International_Ap.tmy3
-HI-Honolulu_Intl_Arpt.tmy3
-HI-Kahului_Airport.tmy3
-HI-Kaneohe_Bay_Mcas.tmy3
-HI-Kapalua.tmy3
-HI-Kona_Intl_At_Keahol.tmy3
-HI-Lanai.tmy3
-HI-Lihue_Airport.tmy3
-HI-Molokai_Amos.tmy3
-IA-Algona.tmy3
-IA-Atlantic.tmy3
-IA-Boone_Muni.tmy3
-IA-Burlington_Municipal_Ap.tmy3
-IA-Carroll.tmy3
-IA-Cedar_Rapids_Municipal_Ap.tmy3
-IA-Chariton.tmy3
-IA-Charles_City.tmy3
-IA-Clarinda.tmy3
-IA-Clinton_Muni_Awos.tmy3
-IA-Council_Bluffs.tmy3
-IA-Creston.tmy3
-IA-Decorah.tmy3
-IA-Denison.tmy3
-IA-Des_Moines_Intl_Ap.tmy3
-IA-Dubuque_Regional_Ap.tmy3
-IA-Estherville_Muni.tmy3
-IA-Fair_Field.tmy3
-IA-Fort_Dodge_Awos.tmy3
-IA-Fort_Madison.tmy3
-IA-Keokuk_Muni.tmy3
-IA-Knoxville.tmy3
-IA-Le_Mars.tmy3
-IA-Mason_City_Municipal_Arpt.tmy3
-IA-Monticello_Muni.tmy3
-IA-Muscatine.tmy3
-IA-Newton_Muni.tmy3
-IA-Oelwen.tmy3
-IA-Orange_City.tmy3
-IA-Ottumwa_Industrial_Ap.tmy3
-IA-Red_Oak.tmy3
-IA-Sheldon.tmy3
-IA-Shenandoah_Muni.tmy3
-IA-Sioux_City_Sioux_Gateway_Ap.tmy3
-IA-Spencer.tmy3
-IA-Storm_Lake.tmy3
-IA-Washington.tmy3
-IA-Waterloo_Municipal_Ap.tmy3
-IA-Webster_City.tmy3
-ID-Boise_Air_Terminal_Uo.tmy3
-ID-Burley_Municipal_Arpt.tmy3
-ID-Caldwell_Awos.tmy3
-ID-Coeur_Daleneawos.tmy3
-ID-Hailey_Friedman_Mem.tmy3
-ID-Idaho_Falls_Fanning_Field.tmy3
-ID-Joslin_Fld_Magic_Va_Twin_Falls_Uo.tmy3
-ID-Lewiston_Nez_Perce_Cnty_Ap.tmy3
-ID-Malad_City.tmy3
-ID-Mountain_Home_Afb.tmy3
-ID-Pocatello_Regional_Ap.tmy3
-ID-Salmon_Lemhi_Awos.tmy3
-ID-Soda_Springs_Tigert.tmy3
-IL-Aurora_Municipal.tmy3
-IL-Belleville_Scott_Afb.tmy3
-IL-Cahokia_St_Louis.tmy3
-IL-Central_Illinois_Rg.tmy3
-IL-Chicago_Midway_Ap.tmy3
-IL-Chicago_Ohare_Intl_Ap.tmy3
-IL-Chicago_Waukegan.tmy3
-IL-Decatur.tmy3
-IL-Marion_Regional.tmy3
-IL-Moline_Quad_City_Intl_Ap.tmy3
-IL-Mount_Vernon_Awos.tmy3
-IL-Peoria_Greater_Peoria_Ap.tmy3
-IL-Quincy_Muni_Baldwin_Fld.tmy3
-IL-Rockford_Greater_Rockford_Ap.tmy3
-IL-Southern_Illinois.tmy3
-IL-Springfield_Capital_Ap.tmy3
-IL-Sterling_Rockfalls.tmy3
-IL-Univ_Of_Illinois_Wi_Bondville_Surfrad.tmy3
-IL-W_Chicago_Du_Page.tmy3
-IN-Delaware_Co_Johnson.tmy3
-IN-Evansville_Regional_Ap.tmy3
-IN-Fort_Wayne_Intl_Ap.tmy3
-IN-Grissom_Arb.tmy3
-IN-Huntingburg.tmy3
-IN-Indianapolis_Intl_Ap.tmy3
-IN-Lafayette_Purdue_Univ_Ap.tmy3
-IN-Monroe_Co.tmy3
-IN-South_Bend_Michiana_Rgnl_Ap.tmy3
-IN-Terre_Haute_Hulman_Regional_A.tmy3
-KS-Chanute_Martin_Johnson_Ap.tmy3
-KS-Concordia_Blosser_Muni_Ap.tmy3
-KS-Dodge_City_Regional_Ap.tmy3
-KS-Emporia_Municipal_Ap.tmy3
-KS-Fort_Riley_Marshall_Aaf.tmy3
-KS-Garden_City_Municipal_Ap.tmy3
-KS-Goodland_Renner_Field.tmy3
-KS-Great_Bend_Awos.tmy3
-KS-Hays_Muni_Awos.tmy3
-KS-Hill_City_Municipal_Ap.tmy3
-KS-Hutchinson_Municipal_Ap.tmy3
-KS-Liberal_Muni.tmy3
-KS-Manhattan_Rgnl.tmy3
-KS-Mcconnell_Afb.tmy3
-KS-Newton_Awos.tmy3
-KS-Olathe_Johnson_Co.tmy3
-KS-Olathe_Johnson_Co_Industrial.tmy3
-KS-Russell_Municipal_Ap.tmy3
-KS-Salina_Municipal_Ap.tmy3
-KS-Topeka_Forbes_Field.tmy3
-KS-Topeka_Municipal_Ap.tmy3
-KS-Wichita_Col_Jabara.tmy3
-KS-Wichita_Midcontinent_Ap.tmy3
-KY-Bowling_Green_Warren_Co_Ap.tmy3
-KY-Cincinnati_Northern_Ky_Ap.tmy3
-KY-Fort_Campbell_Aaf.tmy3
-KY-Fort_Knox_Godman_Aaf.tmy3
-KY-Henderson_City.tmy3
-KY-Jackson_Julian_Carroll_Ap.tmy3
-KY-Lexington_Bluegrass_Ap.tmy3
-KY-Londoncorbin_Ap.tmy3
-KY-Louisville_Bowman_Field.tmy3
-KY-Louisville_Standiford_Field.tmy3
-KY-Paducah_Barkley_Regional_Ap.tmy3
-KY-Somersetawos.tmy3
-LA-Alexandria_Esler_Regional_Ap.tmy3
-LA-Barksdale_Afb.tmy3
-LA-Baton_Rouge_Ryan_Arpt.tmy3
-LA-England_Afb.tmy3
-LA-Fort_Polk_Aaf.tmy3
-LA-Houmaterrebonne.tmy3
-LA-Lafayette_Regional_Ap.tmy3
-LA-Lake_Charles_Regional_Arpt.tmy3
-LA-Lake_Charles_Wb_Airp.tmy3
-LA-Monroe_Regional_Ap.tmy3
-LA-New_Iberia_Naas.tmy3
-LA-New_Orleans_Alvin_Callender_F.tmy3
-LA-New_Orleans_Intl_Arpt.tmy3
-LA-New_Orleans_Lakefront_Ap.tmy3
-LA-Patterson_Memorial.tmy3
-LA-Shreveport_Downtown.tmy3
-LA-Shreveport_Regional_Arpt.tmy3
-MA-Barnstable_Muni_Boa.tmy3
-MA-Beverly_Muni.tmy3
-MA-Boston_Logan_Intl_Arpt.tmy3
-MA-Chicopee_Falls_Westo.tmy3
-MA-Lawrence_Muni.tmy3
-MA-Marthas_Vineyard.tmy3
-MA-Nantucket_Memorial_Ap.tmy3
-MA-New_Bedford_Rgnl.tmy3
-MA-North_Adams.tmy3
-MA-Norwood_Memorial.tmy3
-MA-Otis_Angb.tmy3
-MA-Plymouth_Municipal.tmy3
-MA-Provincetown_Awos.tmy3
-MA-Westfield_Barnes_Muni_Ap.tmy3
-MA-Worchester_Regional_Arpt.tmy3
-MD-Andrews_Afb.tmy3
-MD-Baltimore_Bltwashngtn_Intl.tmy3
-MD-Hagerstown_Rgnl_Ric.tmy3
-MD-Patuxent_River_Nas.tmy3
-MD-Salisbury_Wicomico_Co_Ap.tmy3
-ME-Auburnlewiston.tmy3
-ME-Augusta_Airport.tmy3
-ME-Bangor_International_Ap.tmy3
-ME-Bar_Harbor_Awos.tmy3
-ME-Caribou_Municipal_Arpt.tmy3
-ME-Houlton_Intl_Arpt.tmy3
-ME-Millinocket_Municipal_Ap.tmy3
-ME-Naval_Air_Station.tmy3
-ME-Northern_Aroostook.tmy3
-ME-Portland_Intl_Jetport.tmy3
-ME-Presque_Isle_Municip.tmy3
-ME-Rockland_Knoxawos.tmy3
-ME-Sanford_Muni_Awos.tmy3
-ME-Waterville_Awos.tmy3
-ME-Wiscasset.tmy3
-MI-Alpena_County_Regional_Ap.tmy3
-MI-Ann_Arbor_Municipal.tmy3
-MI-Battle_Creek_Kellogg_Ap.tmy3
-MI-Benton_Harbor_Ross.tmy3
-MI-Cadillac_Wexford_Co_Ap.tmy3
-MI-Chippewa_Co_Intl.tmy3
-MI-Detroit_City_Airport.tmy3
-MI-Detroit_Metropolitan_Arpt.tmy3
-MI-Detroit_Willow_Run_Ap.tmy3
-MI-Escanaba_Awos.tmy3
-MI-Flint_Bishop_Intl_Arpt.tmy3
-MI-Grand_Rapids_Kent_County_Int.tmy3
-MI-Hancock_Houghton_Co_Ap.tmy3
-MI-Houghton_Lake_Roscommon_Co_Ar.tmy3
-MI-Howell.tmy3
-MI-Iron_Mountain_Ford.tmy3
-MI-Ironwood_Awos.tmy3
-MI-Jackson_Reynolds_Field.tmy3
-MI-Kalamazoo_Battle_Cr.tmy3
-MI-Lansing_Capital_City_Arpt.tmy3
-MI-Manistee_Awos.tmy3
-MI-Menominee_Awos.tmy3
-MI-Mount_Clemens_Selfridge_Fld.tmy3
-MI-Muskegon_County_Arpt.tmy3
-MI-Oakland_Co_Intl.tmy3
-MI-Oscoda_Wurtsmith_Afb.tmy3
-MI-Pellston_Emmet_County_Ap.tmy3
-MI-Saginaw_Tri_City_Intl_Ap.tmy3
-MI-Sault_Ste_Marie_Sanderson_Fie.tmy3
-MI-Stclair_County_Int.tmy3
-MI-Traverse_City_Cherry_Capital.tmy3
-MN-Aitkin_Ndbawos.tmy3
-MN-Albert_Lea_Awos.tmy3
-MN-Alexandria_Municipal_Ap.tmy3
-MN-Austin_Muni.tmy3
-MN-Baudette_International_Ap.tmy3
-MN-Bemidji_Municipal.tmy3
-MN-Benson_Muni.tmy3
-MN-Brainerd_Wieland.tmy3
-MN-Cambridge_Muni.tmy3
-MN-Cloquet_Awos.tmy3
-MN-Crane_Lake_Awos.tmy3
-MN-Crookston_Muni_Fld.tmy3
-MN-Detroit_Lakesawos.tmy3
-MN-Duluth_International_Arpt.tmy3
-MN-Ely_Muni.tmy3
-MN-Eveleth_Muni_Awos.tmy3
-MN-Fairmont_Muniawos.tmy3
-MN-Faribault_Muni_Awos.tmy3
-MN-Fergus_Fallsawos.tmy3
-MN-Flying_Cloud.tmy3
-MN-Fosstonawos.tmy3
-MN-Glenwood_Asos.tmy3
-MN-Grand_Rapidsawos.tmy3
-MN-Hallock.tmy3
-MN-Hibbing_Chisholmhibbing_Ap.tmy3
-MN-Hutchinson_Awos.tmy3
-MN-International_Falls_Intl_Ap.tmy3
-MN-Litchfield_Muni.tmy3
-MN-Little_Falls_Awos.tmy3
-MN-Mankatoawos.tmy3
-MN-Marshall_Ryanawos.tmy3
-MN-Minneapolis_Crystal.tmy3
-MN-Minneapolisst_Paul_Intl_Arp.tmy3
-MN-Mora_Muni_Awos.tmy3
-MN-Morris_Muni_Awos.tmy3
-MN-New_Ulm_Muni_Awos.tmy3
-MN-Orr.tmy3
-MN-Owatonna_Awos.tmy3
-MN-Park_Rapids_Municipal_Ap.tmy3
-MN-Pipestone_Awos.tmy3
-MN-Red_Wing.tmy3
-MN-Redwood_Falls_Muni.tmy3
-MN-Rochester_International_Arpt.tmy3
-MN-Roseau_Muni_Awos.tmy3
-MN-Silver_Bay.tmy3
-MN-South_St_Paul_Muni.tmy3
-MN-St_Cloud_Regional_Arpt.tmy3
-MN-St_Paul_Downtown_Ap.tmy3
-MN-Thief_Riverawos.tmy3
-MN-Two_Harbors.tmy3
-MN-Wheaton_Ndb_Awos.tmy3
-MN-Willmar.tmy3
-MN-Winona_Muni_Awos.tmy3
-MN-Worthington_Awos.tmy3
-MO-Cape_Girardeau_Municipal_Ap.tmy3
-MO-Columbia_Regional_Airport.tmy3
-MO-Farmington.tmy3
-MO-Ft_Lnrd_Wd_Aaf.tmy3
-MO-Jefferson_City_Mem.tmy3
-MO-Joplin_Municipal_Ap.tmy3
-MO-Kaiser_Mem_Awos.tmy3
-MO-Kansas_City_Downtown_Ap.tmy3
-MO-Kansas_City_Intl_Arpt.tmy3
-MO-Kirksville_Regional_Ap.tmy3
-MO-Poplar_Bluffamos.tmy3
-MO-Springfield_Regional_Arpt.tmy3
-MO-St_Joseph_Rosecrans_Memorial.tmy3
-MO-St_Louis_Lambert_Intl_Arpt.tmy3
-MO-St_Louis_Spirit_Of_St_Louis_A.tmy3
-MO-Vichy_Rolla_Natl_Arpt.tmy3
-MO-Whiteman_Afb.tmy3
-MS-Columbus_Afb.tmy3
-MS-Golden_Triawos.tmy3
-MS-Greenville_Municipal.tmy3
-MS-Greenwood_Leflore_Arpt.tmy3
-MS-Gulfport_Biloxi_Int.tmy3
-MS-Hattiesburg_Laurel.tmy3
-MS-Jackson_International_Ap.tmy3
-MS-Keesler_Afb.tmy3
-MS-Mccomb_Pike_County_Ap.tmy3
-MS-Meridian_Key_Field.tmy3
-MS-Meridian_Naas.tmy3
-MS-Natchez_Hardyawos.tmy3
-MS-Tupelo_C_D_Lemons_Arpt.tmy3
-MT-Billings_Logan_Intl_Arpt.tmy3
-MT-Bozeman_Gallatin_Field.tmy3
-MT-Butte_Bert_Mooney_Arpt.tmy3
-MT-Cut_Bank_Muni_Ap.tmy3
-MT-Glasgow_Intl_Arpt.tmy3
-MT-Glendiveawos.tmy3
-MT-Great_Falls_Intl_Arpt.tmy3
-MT-Havre_Citycounty_Ap.tmy3
-MT-Helena_Regional_Airport.tmy3
-MT-Kalispell_Glacier_Pk_Intl_Ar.tmy3
-MT-Lewistown_Municipal_Arpt.tmy3
-MT-Livingston_Mission_Field.tmy3
-MT-Miles_City_Municipal_Arpt.tmy3
-MT-Missoula_International_Ap.tmy3
-MT-Sidneyrichland.tmy3
-MT-Wolf_Point_Intl_Fort_Peck_Surfrad.tmy3
-NC-Asheville_Regional_Arpt.tmy3
-NC-Cape_Hatteras_Nws_Bldg.tmy3
-NC-Charlotte_Douglas_Intl_Arpt.tmy3
-NC-Cherry_Point_Mcas.tmy3
-NC-Dare_Co_Rgnl.tmy3
-NC-Elizabeth_City_Coast_Guard_Ai_Nrel.tmy3
-NC-Fayetteville_Pope_Afb.tmy3
-NC-Fayetteville_Rgnl_G.tmy3
-NC-Fort_Bragg_Simmons_Aaf.tmy3
-NC-Goldsboro_Seymour_Johnson_Afb.tmy3
-NC-Greensboro_Piedmont_Triad_Int.tmy3
-NC-Hickory_Regional_Ap.tmy3
-NC-Jacksonville_Awos.tmy3
-NC-Kinston_Stallings_Afb.tmy3
-NC-New_Bern_Craven_Co_Regl_Ap.tmy3
-NC-New_River_Mcaf.tmy3
-NC-Pitt_Greenville_Arp.tmy3
-NC-Raleigh_Durham_International.tmy3
-NC-Rocky_Mount_Wilson.tmy3
-NC-Southern_Pines_Awos.tmy3
-NC-Wilmington_International_Arpt.tmy3
-NC-Winstonsalem_Reynolds_Ap.tmy3
-ND-Bismarck_Municipal_Arpt_Isis.tmy3
-ND-Devils_Lakeawos.tmy3
-ND-Dickinson_Municipal_Ap.tmy3
-ND-Fargo_Hector_International_Ap.tmy3
-ND-Grand_Forks_Af.tmy3
-ND-Grand_Forks_International_Ap.tmy3
-ND-Jamestown_Municipal_Arpt.tmy3
-ND-Minot_Afb.tmy3
-ND-Minot_Faa_Ap.tmy3
-ND-Williston_Sloulin_Intl_Ap.tmy3
-NE-Ainsworth_Municipal.tmy3
-NE-Alliance_Municipal.tmy3
-NE-Beatrice_Municipal.tmy3
-NE-Bellevue_Offutt_Afb.tmy3
-NE-Brewster_Field_Arpt.tmy3
-NE-Broken_Bow_Muni.tmy3
-NE-Chadron_Municipal_Ap.tmy3
-NE-Columbus_Muni.tmy3
-NE-Falls_City_Brenner.tmy3
-NE-Fremont_Muni_Arpt.tmy3
-NE-Grand_Island_Central_Ne_Regio.tmy3
-NE-Hastings_Municipal.tmy3
-NE-Imperial_Faa_Ap.tmy3
-NE-Kearney_Muni_Awos.tmy3
-NE-Lincoln_Municipal_Arpt.tmy3
-NE-Mccook_Municipal.tmy3
-NE-Norfolk_Karl_Stefan_Mem_Arpt.tmy3
-NE-North_Platte_Regional_Ap.tmy3
-NE-Omaha_Eppley_Airfield.tmy3
-NE-Omaha_Wsfo.tmy3
-NE-Oneill_Baker_Field.tmy3
-NE-Ord_Sharp_Field.tmy3
-NE-Scottsbluff_W_B_Heilig_Field.tmy3
-NE-Sidney_Municipal_Ap.tmy3
-NE-Tekamah_Asos.tmy3
-NE-Valentine_Miller_Field.tmy3
-NH-Berlin_Municipal.tmy3
-NH-Concord_Municipal_Arpt.tmy3
-NH-Dillant_Hopkins.tmy3
-NH-Laconia_Muni_Awos.tmy3
-NH-Lebanon_Municipal.tmy3
-NH-Manchester_Airport.tmy3
-NH-Mount_Washington.tmy3
-NH-Pease_Intl_Tradepor.tmy3
-NJ-Atlantic_City_Intl_Ap.tmy3
-NJ-Belmar_Asc.tmy3
-NJ-Caldwell_Essex_Co.tmy3
-NJ-Cape_May_Co.tmy3
-NJ-Mcguire_Afb.tmy3
-NJ-Millville_Municipal_Ap.tmy3
-NJ-Newark_International_Arpt.tmy3
-NJ-Teterboro_Airport.tmy3
-NJ-Trenton_Mercer_County_Ap.tmy3
-NM-Albuquerque_Intl_Arpt_Isis.tmy3
-NM-Carlsbad_Cavern_City_Air_Term.tmy3
-NM-Clayton_Municipal_Airpark.tmy3
-NM-Clovis_Cannon_Afb.tmy3
-NM-Clovis_Muni_Awos.tmy3
-NM-Deming_Muni.tmy3
-NM-Farmington_Four_Corners_Regl.tmy3
-NM-Gallup_Sen_Clarke_Fld.tmy3
-NM-Holloman_Afb.tmy3
-NM-Las_Cruces_Intl.tmy3
-NM-Las_Vegas_Municipal_Arpt.tmy3
-NM-Roswell_Industrial_Air_Park.tmy3
-NM-Sata_Fe_County_Municipal_Ap.tmy3
-NM-Sierra_Blanca_Rgnl.tmy3
-NM-Taos_Muni_Aptawos.tmy3
-NM-Truth_Or_Consequences_Muni_Ap.tmy3
-NM-Tucumcari_Faa_Ap.tmy3
-NV-Elko_Municipal_Arpt.tmy3
-NV-Ely_Yelland_Field.tmy3
-NV-Fallon_Naas.tmy3
-NV-Las_Vegas_Mccarran_Intl_Ap.tmy3
-NV-Lovelock_Derby_Field.tmy3
-NV-Mercury_Desert_Rock_Ap_Surfrad.tmy3
-NV-Nellis_Afb.tmy3
-NV-Reno_Tahoe_International_Ap.tmy3
-NV-Tonopah_Airport.tmy3
-NV-Winnemucca_Municipal_Arpt.tmy3
-NY-Adirondack_Rgnl.tmy3
-NY-Albany_County_Ap.tmy3
-NY-Binghamton_Edwin_A_Link_Field.tmy3
-NY-Buffalo_Niagara_Intl_Ap.tmy3
-NY-Elmira_Corning_Regional_Ap.tmy3
-NY-Fort_Drum_Wheelers.tmy3
-NY-Glens_Falls_Ap.tmy3
-NY-Islip_Long_Isl_Macarthur_Ap.tmy3
-NY-Jamestown_Awos.tmy3
-NY-Massena_Ap.tmy3
-NY-Monticelloawos.tmy3
-NY-New_York_Central_Prk_Obs_Belv.tmy3
-NY-New_York_J_F_Kennedy_Intl_Ar.tmy3
-NY-New_York_Laguardia_Arpt.tmy3
-NY-Niagara_Falls_Af.tmy3
-NY-Poughkeepsie_Dutchess_Co_Ap.tmy3
-NY-Republic.tmy3
-NY-Rochester_Greater_Rochester_I.tmy3
-NY-Stewart_Field.tmy3
-NY-Syracuse_Hancock_Intl_Arpt.tmy3
-NY-Utica_Oneida_County_Ap.tmy3
-NY-Watertown_Ap.tmy3
-NY-Westhampton_Gabreski_Ap.tmy3
-NY-White_Plains_Westchester_Co_A.tmy3
-OH-Akron_Akroncanton_Reg_Ap.tmy3
-OH-Burke_Lakefront.tmy3
-OH-Cincinnati_Municipal_Ap_Lunki.tmy3
-OH-Cleveland_Hopkins_Intl_Ap.tmy3
-OH-Columbus_Port_Columbus_Intl_A.tmy3
-OH-Dayton_International_Airport.tmy3
-OH-Dayton_Wright_Patterson_Afb.tmy3
-OH-Findlay_Airport.tmy3
-OH-Mansfield_Lahm_Municipal_Arpt.tmy3
-OH-Ohio_State_Universi.tmy3
-OH-Toledo_Express_Airport.tmy3
-OH-Youngstown_Regional_Airport.tmy3
-OH-Zanesville_Municipal_Ap.tmy3
-OK-Altus_Afb.tmy3
-OK-Bartlesville_Philli.tmy3
-OK-Clintonsherman.tmy3
-OK-Fort_Sill_Post_Field_Af.tmy3
-OK-Gage_Airport.tmy3
-OK-Hobart_Municipal_Ap.tmy3
-OK-Lawton_Municipal.tmy3
-OK-Mcalester_Municipal_Ap.tmy3
-OK-Oklahoma_City_Tinker_Afb.tmy3
-OK-Oklahoma_City_Wiley.tmy3
-OK-Oklahoma_City_Will_Rogers_Wor.tmy3
-OK-Ponca_City_Municipal_Ap_Sgp_Arm.tmy3
-OK-Stillwater_Rgnl.tmy3
-OK-Tulsa_International_Airport.tmy3
-OK-Vance_Afb.tmy3
-OR-Astoria_Regional_Airport.tmy3
-OR-Aurora_State.tmy3
-OR-Baker_Municipal_Ap.tmy3
-OR-Burns_Municipal_Arpt_Uo.tmy3
-OR-Corvallis_Muni.tmy3
-OR-Eugene_Mahlon_Sweet_Arpt_Uo.tmy3
-OR-Klamath_Falls_Intl_Ap_Uo.tmy3
-OR-La_Grande_Muni_Ap.tmy3
-OR-Lakeview_Awos.tmy3
-OR-Medford_Rogue_Valley_Intl_Ap_Ashland_Uo.tmy3
-OR-North_Bend_Muni_Airport.tmy3
-OR-Pendleton_E_Or_Regional_Ap.tmy3
-OR-Portland_Hillsboro.tmy3
-OR-Portland_International_Ap.tmy3
-OR-Portland_Troutdale.tmy3
-OR-Redmond_Roberts_Field.tmy3
-OR-Roseburg_Regional_Ap.tmy3
-OR-Salem_Mcnary_Field.tmy3
-OR-Sexton_Summit.tmy3
-PA-Allentown_Lehigh_Valley_Intl.tmy3
-PA-Altoona_Blair_Co_Arpt.tmy3
-PA-Bradford_Regional_Ap.tmy3
-PA-Butler_Co_Awos.tmy3
-PA-Dubois_Faa_Ap.tmy3
-PA-Erie_International_Ap.tmy3
-PA-Franklin.tmy3
-PA-Harrisburg_Capital_City_Arpt.tmy3
-PA-Johnstown_Cambria_County_Ap.tmy3
-PA-Lancaster.tmy3
-PA-Middletown_Harrisburg_Intl_Ap.tmy3
-PA-Philadelphia_International_Ap.tmy3
-PA-Philadelphia_Ne_Philadelphia.tmy3
-PA-Pittsburgh_Allegheny_Co_Ap.tmy3
-PA-Pittsburgh_International_Ap.tmy3
-PA-Reading_Spaatz_Field.tmy3
-PA-State_College_Penn_State_Surfrad.tmy3
-PA-Washington_Awos.tmy3
-PA-Wilkesbarre_Scranton_Intl_Ap.tmy3
-PA-Williamsport_Regional_Ap.tmy3
-PA-Willow_Grove_Nas.tmy3
-PR-Aquadilla_Borinquen.tmy3
-PR-Eugenio_Maria_De_Ho.tmy3
-PR-Mercedita.tmy3
-PR-Roosevelt_Roads.tmy3
-PR-San_Juan_Intl_Arpt.tmy3
-PR-San_Juan_L_M_Marin_Intl_Ap.tmy3
-RI-Block_Island_State_Arpt.tmy3
-RI-Pawtucket_Awos.tmy3
-RI-Providence_T_F_Green_State_Ar.tmy3
-SC-Anderson_County_Ap.tmy3
-SC-Beaufort_Mcas.tmy3
-SC-Charleston_Intl_Arpt.tmy3
-SC-Columbia_Metro_Arpt.tmy3
-SC-Florence_Regional_Ap.tmy3
-SC-Greenville_Downtown_Ap.tmy3
-SC-Greer_Greenvlspartanbrg_Ap.tmy3
-SC-Myrtle_Beach_Afb.tmy3
-SC-North_Myrtle_Beach_Grand_Stra.tmy3
-SC-Sumter_Shaw_Afb.tmy3
-SD-Aberdeen_Regional_Arpt.tmy3
-SD-Brookings_Awos.tmy3
-SD-Chan_Gurney_Muni.tmy3
-SD-Ellsworth_Afb.tmy3
-SD-Huron_Regional_Arpt.tmy3
-SD-Mitchell_Awos.tmy3
-SD-Mobridge.tmy3
-SD-Pierre_Municipal_Ap.tmy3
-SD-Rapid_City_Regional_Arpt.tmy3
-SD-Sioux_Falls_Foss_Field.tmy3
-SD-Watertown_Municipal_Ap.tmy3
-TN-Bristol_Tri_City_Airport.tmy3
-TN-Chattanooga_Lovell_Field_Ap.tmy3
-TN-Crossville_Memorial_Ap.tmy3
-TN-Dyersburg_Municipal_Ap.tmy3
-TN-Jackson_Mckellarsipes_Regl_A.tmy3
-TN-Knoxville_Mcghee_Tyson_Ap.tmy3
-TN-Memphis_International_Ap.tmy3
-TN-Nashville_International_Ap.tmy3
-TX-Abilene_Dyess_Afb.tmy3
-TX-Abilene_Regional_Ap_Ut.tmy3
-TX-Alice_Intl_Ap.tmy3
-TX-Amarillo_International_Ap_Canyon_Ut.tmy3
-TX-Austin_Mueller_Municipal_Ap_Ut.tmy3
-TX-Brownsville_S_Padre_Isl_Intl.tmy3
-TX-Camp_Mabry.tmy3
-TX-Childress_Municipal_Ap.tmy3
-TX-College_Station_Easterwood_Fl.tmy3
-TX-Corpus_Christi_Intl_Arpt_Ut.tmy3
-TX-Corpus_Christi_Nas.tmy3
-TX-Cotulla_Faa_Ap.tmy3
-TX-Cox_Fld.tmy3
-TX-Dalhart_Municipal_Ap.tmy3
-TX-Dallas_Addison_Arpt.tmy3
-TX-Dallas_Love_Field.tmy3
-TX-Dallas_Redbird_Arpt.tmy3
-TX-Dallasfort_Worth_Intl_Ap.tmy3
-TX-Del_Rio_Laughlin_Afb.tmy3
-TX-Del_Rio_Ut.tmy3
-TX-Draughon_Miller_Cen.tmy3
-TX-El_Paso_International_Ap_Ut.tmy3
-TX-Fort_Hood.tmy3
-TX-Fort_Worth_Alliance.tmy3
-TX-Fort_Worth_Meacham.tmy3
-TX-Fort_Worth_Nas.tmy3
-TX-Galveston_Scholes.tmy3
-TX-Georgetown_Awos.tmy3
-TX-Greenville_Majors.tmy3
-TX-Harlingen_Rio_Grande_Valley_I.tmy3
-TX-Hondo_Municipal_Ap.tmy3
-TX-Houston_Bush_Intercontinental.tmy3
-TX-Houston_Dw_Hooks.tmy3
-TX-Houston_Ellington_Afb_Clear_Lake_Ut.tmy3
-TX-Houston_William_P_Hobby_Ap.tmy3
-TX-Killeen_Muni_Awos.tmy3
-TX-Kingsville.tmy3
-TX-Laredo_Intl_Ap_Ut.tmy3
-TX-Longview_Gregg_County_Ap_Overton_Ut.tmy3
-TX-Lubbock_International_Ap.tmy3
-TX-Lufkin_Angelina_Co.tmy3
-TX-Marfa_Ap.tmy3
-TX-Mc_Gregor_Awos.tmy3
-TX-Mcallen_Miller_Intl_Ap_Edinburg_Ut.tmy3
-TX-Midland_International_Ap.tmy3
-TX-Mineral_Wells_Municipal_Ap.tmy3
-TX-Nacogdoches_Awos.tmy3
-TX-Palacios_Municipal_Ap.tmy3
-TX-Port_Arthur_Jefferson_County.tmy3
-TX-Randolph_Afb.tmy3
-TX-Robert_Gray_Aaf.tmy3
-TX-Rockport_Aransas_Co.tmy3
-TX-San_Angelo_Mathis_Field.tmy3
-TX-San_Antonio_Intl_Ap.tmy3
-TX-San_Antonio_Kelly_Field_Afb.tmy3
-TX-San_Antonio_Stinson.tmy3
-TX-Tyler_Pounds_Fld.tmy3
-TX-Victoria_Regional_Ap.tmy3
-TX-Waco_Regional_Ap.tmy3
-TX-Wichita_Falls_Municipal_Arpt.tmy3
-TX-Wink_Winkler_County_Ap.tmy3
-UT-Blanding.tmy3
-UT-Bryce_Cnyn_Faa_Ap.tmy3
-UT-Cedar_City_Municipal_Ap.tmy3
-UT-Delta.tmy3
-UT-Hanksville.tmy3
-UT-Moab_Canyonlands_Uo.tmy3
-UT-Ogden_Hill_Afb.tmy3
-UT-Ogden_Hinkley_Airport.tmy3
-UT-Provo_Muni_Awos.tmy3
-UT-Saint_George_Awos.tmy3
-UT-Salt_Lake_City_Intl_Arpt_Isis.tmy3
-UT-Vernal.tmy3
-UT-Wendover_Usaf_Auxiliary_Field.tmy3
-VA-Abington.tmy3
-VA-Charlottesville_Faa.tmy3
-VA-Danville_Faa_Ap.tmy3
-VA-Davison_Aaf.tmy3
-VA-Dinwiddie_Co.tmy3
-VA-Farmville.tmy3
-VA-Franklin_Naas.tmy3
-VA-Hillsville.tmy3
-VA-Hot_Springs_Ingalls.tmy3
-VA-Langley_Afb.tmy3
-VA-Leesburg_Godfrey.tmy3
-VA-Lynchburg_Regional_Arpt.tmy3
-VA-Manassas_Muniawos.tmy3
-VA-Marion_Wytheville.tmy3
-VA-Martinsville.tmy3
-VA-Melfa_Accomack_Arpt.tmy3
-VA-Newport_News.tmy3
-VA-Norfolk_International_Ap.tmy3
-VA-Norfolk_Nas.tmy3
-VA-Oceana_Nas.tmy3
-VA-Pulaski.tmy3
-VA-Quantico_Mcas.tmy3
-VA-Richmond_International_Ap.tmy3
-VA-Roanoke_Regional_Ap.tmy3
-VA-Shannon_Arpt.tmy3
-VA-Staunton_Shenandoah.tmy3
-VA-Virginia_Tech_Arpt.tmy3
-VA-Washington_Dc_Dulles_Intl_Ar_Sterling_Isis.tmy3
-VA-Washington_Dc_Reagan_Ap.tmy3
-VA-Winchester_Rgnl.tmy3
-VA-Wise_Lonesome_Pine.tmy3
-VI-Charlotte_Amalie_Harry_S_Trum.tmy3
-VT-Burlington_International_Ap.tmy3
-VT-Montpelier_Ap.tmy3
-VT-Rutland_State.tmy3
-VT-Springfield_Hartnes.tmy3
-WA-Bellingham_Intl_Ap.tmy3
-WA-Bremerton_National.tmy3
-WA-Ephrata_Ap_Fcwos.tmy3
-WA-Fairchild_Afb.tmy3
-WA-Felts_Fld.tmy3
-WA-Gray_Aaf.tmy3
-WA-Hanford.tmy3
-WA-Hoquiam_Ap.tmy3
-WA-Kelso_Wb_Ap.tmy3
-WA-Moses_Lake_Grant_County_Ap.tmy3
-WA-Olympia_Airport.tmy3
-WA-Pasco.tmy3
-WA-Pullman_Moscow_Rgnl.tmy3
-WA-Quillayute_State_Airport.tmy3
-WA-Renton_Muni.tmy3
-WA-Seattle_Boeing_Field_Isis.tmy3
-WA-Seattle_Seattletacoma_Intl_A.tmy3
-WA-Snohomish_Co.tmy3
-WA-Spokane_International_Ap_Cheney_Uo.tmy3
-WA-Stampede_Pass.tmy3
-WA-Tacoma_Mcchord_Afb.tmy3
-WA-Tacoma_Narrows.tmy3
-WA-The_Dalles_Municipal_Arpt.tmy3
-WA-Toledowinlock_Mem.tmy3
-WA-Walla_Walla_City_County_Ap.tmy3
-WA-Wenatchee_Pangborn.tmy3
-WA-Whidbey_Island_Nas.tmy3
-WA-William_R_Fairchild.tmy3
-WA-Yakima_Air_Terminal.tmy3
-WI-Antigo_Langawos.tmy3
-WI-Appleton_Outagamie.tmy3
-WI-Eau_Claire_County_Ap.tmy3
-WI-Green_Bay_Austin_Straubel_Int.tmy3
-WI-Janesville_Rock_Co.tmy3
-WI-La_Crosse_Municipal_Arpt.tmy3
-WI-Lone_Rock_Faa_Ap.tmy3
-WI-Madison_Dane_Co_Regional_Arpt_Isis.tmy3
-WI-Manitowac_Muni_Awos.tmy3
-WI-Marshfield_Muni.tmy3
-WI-Milwaukee_Mitchell_Intl_Ap.tmy3
-WI-Minocqua_Woodruff.tmy3
-WI-Mosinee_Central_Wi.tmy3
-WI-Phillips_Price_Co.tmy3
-WI-Rhinelander_Oneida.tmy3
-WI-Rice_Lake_Municipal.tmy3
-WI-Sturgeon_Bay.tmy3
-WI-Watertown.tmy3
-WI-Wausau_Municipal_Arpt.tmy3
-WI-Wittman_Rgnl.tmy3
-WV-Beckley_Raleigh_Co_Mem_Ap.tmy3
-WV-Bluefield_Mercer_Co_Nrel.tmy3
-WV-Charleston_Yeager_Arpt.tmy3
-WV-Elkins_Elkinsrandolph_Co_Arp.tmy3
-WV-Harrison_Marion_Rgn.tmy3
-WV-Huntington_Tristate_Arpt.tmy3
-WV-Lewisburg_Greenbrie.tmy3
-WV-Martinsburg_Eastern_Wv_Reg_Ap.tmy3
-WV-Morgantown_Hart_Field.tmy3
-WV-Parkersburg_Wood_County_Ap.tmy3
-WV-Wheeling_Ohio_County_Ap.tmy3
-WY-Casper_Natrona_Co_Intl_Ap.tmy3
-WY-Cheyenne_Municipal_Arpt.tmy3
-WY-Cody_Muni_Awos.tmy3
-WY-Evanston_Burns_Fld.tmy3
-WY-Gillette_Gillettec.tmy3
-WY-Jackson_Hole.tmy3
-WY-Lander_Hunt_Field.tmy3
-WY-Laramie_General_Brees_Field.tmy3
-WY-Rawlins_Municipal_Ap.tmy3
-WY-Riverton_Municipl_Ap.tmy3
-WY-Rock_Springs_Arpt_Green_River_Uo.tmy3
-WY-Sheridan_County_Arpt.tmy3
-WY-Worland_Municipal.tmy3
 [
-    "AK-Adak_Nas.tmy3",
-    "AK-Ambler.tmy3",
-    "AK-Anaktuvuk_Pass.tmy3",
-    "AK-Anchorage_Elmendorf.tmy3",
-    "AK-Anchorage_Intl_Ap.tmy3",
-    "AK-Anchorage_Merrill_Field.tmy3",
-    "AK-Aniak_Airport.tmy3",
-    "AK-Annette_Island_Ap.tmy3",
-    "AK-Anvik.tmy3",
-    "AK-Barrow_W_Postw_Rogers_Arpt_Nsa_Arm.tmy3",
-    "AK-Bethel_Airport.tmy3",
-    "AK-Bettles_Field.tmy3",
-    "AK-Big_Delta_Allen_Aaf.tmy3",
-    "AK-Big_River_Lake.tmy3",
-    "AK-Birchwood.tmy3",
-    "AK-Chulitna.tmy3",
-    "AK-Cold_Bay_Arpt.tmy3",
-    "AK-Cordova.tmy3",
-    "AK-Deadhorse.tmy3",
-    "AK-Dillingham_Amos.tmy3",
-    "AK-Dutch_Harbor.tmy3",
-    "AK-Emmonak.tmy3",
-    "AK-Fairbanks_Eielson_A.tmy3",
-    "AK-Fairbanks_Intl_Arpt.tmy3",
-    "AK-Fort_Yukon.tmy3",
-    "AK-Gambell.tmy3",
-    "AK-Gulkana_Intermediate_Field.tmy3",
-    "AK-Gustavus.tmy3",
-    "AK-Hayes_River.tmy3",
-    "AK-Healy_River_Airport.tmy3",
-    "AK-Homer_Arpt.tmy3",
-    "AK-Hoonah.tmy3",
-    "AK-Hooper_Bay.tmy3",
-    "AK-Huslia.tmy3",
-    "AK-Hydaburg_Seaplane.tmy3",
-    "AK-Iliamna_Arpt.tmy3",
-    "AK-Juneau_Intl_Arpt.tmy3",
-    "AK-Kake_Seaplane_Base.tmy3",
-    "AK-Kenai_Municipal_Ap.tmy3",
-    "AK-Ketchikan_Intl_Ap.tmy3",
-    "AK-King_Salmon_Arpt.tmy3",
-    "AK-Kodiak_Airport.tmy3",
-    "AK-Kotzebue_Ralph_Wein_Memorial.tmy3",
-    "AK-Lake_Hood_Seaplane.tmy3",
-    "AK-Mcgrath_Arpt.tmy3",
-    "AK-Mekoryuk.tmy3",
-    "AK-Middleton_Island_Aut.tmy3",
-    "AK-Minchumina.tmy3",
-    "AK-Nenana_Municipal_Ap.tmy3",
-    "AK-Nome_Municipal_Arpt.tmy3",
-    "AK-Northway_Airport.tmy3",
-    "AK-Palmer_Municipal.tmy3",
-    "AK-Petersburg.tmy3",
-    "AK-Point_Hope_Awos.tmy3",
-    "AK-Port_Heiden.tmy3",
-    "AK-Saint_Marys_Awos.tmy3",
-    "AK-Sand_Point.tmy3",
-    "AK-Savoonga.tmy3",
-    "AK-Selawik.tmy3",
-    "AK-Seward.tmy3",
-    "AK-Shemya_Afb.tmy3",
-    "AK-Shishmaref_Awos.tmy3",
-    "AK-Sitka_Japonski_Ap.tmy3",
-    "AK-Skagway_Airport.tmy3",
-    "AK-Sleetmute.tmy3",
-    "AK-Soldotna.tmy3",
-    "AK-St_Paul_Island_Arpt.tmy3",
-    "AK-Talkeetna_State_Arpt.tmy3",
-    "AK-Tanana_Ralph_M_Calhoun_Mem_Ap.tmy3",
-    "AK-Togiac_Village_Awos.tmy3",
-    "AK-Unalakleet_Field.tmy3",
-    "AK-Valdez_Pioneer_Fiel.tmy3",
-    "AK-Valdez_Wso.tmy3",
-    "AK-Whittier.tmy3",
-    "AK-Wrangell.tmy3",
-    "AK-Yakutat_State_Arpt.tmy3",
-    "AL-Anniston_Metropolitan_Ap.tmy3",
-    "AL-Auburnopelika_Apt.tmy3",
-    "AL-Birmingham_Municipal_Ap.tmy3",
-    "AL-Cairns_Field_Fort_Rucker.tmy3",
-    "AL-Dothan_Municipal_Ap.tmy3",
-    "AL-Gadsen_Muni_Awos.tmy3",
-    "AL-Huntsville_Intl_Jones_Field.tmy3",
-    "AL-Maxwell_Afb.tmy3",
-    "AL-Mobile_Downtown_Ap.tmy3",
-    "AL-Mobile_Regional_Ap.tmy3",
-    "AL-Montgomery_Dannelly_Field.tmy3",
-    "AL-Muscle_Shoals_Regional_Ap.tmy3",
-    "AL-Troy_Af.tmy3",
-    "AL-Tuscaloosa_Municipal_Ap.tmy3",
-    "AR-Batesville_Awos.tmy3",
-    "AR-Bentonville_Awos.tmy3",
-    "AR-El_Dorado_Goodwin_Field.tmy3",
-    "AR-Fayetteville_Drake_Field.tmy3",
-    "AR-Flippin_Awos.tmy3",
-    "AR-Fort_Smith_Regional_Ap.tmy3",
-    "AR-Harrison_Faa_Ap.tmy3",
-    "AR-Jonesboro_Muni.tmy3",
-    "AR-Little_Rock_Adams_Field.tmy3",
-    "AR-Little_Rock_Afb.tmy3",
-    "AR-Memorial_Fld.tmy3",
-    "AR-Pine_Bluff_Faa_Ap.tmy3",
-    "AR-Rogers_Awos.tmy3",
-    "AR-Siloam_Springawos.tmy3",
-    "AR-Springdale_Muni.tmy3",
-    "AR-Stuttgart_Awos.tmy3",
-    "AR-Texarkana_Webb_Field.tmy3",
-    "AR-Walnut_Ridge_Awos.tmy3",
-    "AZ-Casa_Granda_Awos.tmy3",
-    "AZ-Davis_Monthan_Afb.tmy3",
-    "AZ-Deer_Valley_Phoenix.tmy3",
-    "AZ-Douglas_Bisbeedouglas_Intl_A.tmy3",
-    "AZ-Flagstaff_Pulliam_Arpt.tmy3",
-    "AZ-Grand_Canyon_Natl_P.tmy3",
-    "AZ-Kingman_Amos.tmy3",
-    "AZ-Luke_Afb.tmy3",
-    "AZ-Page_Muni_Amos.tmy3",
-    "AZ-Phoenix_Sky_Harbor_Intl_Ap.tmy3",
-    "AZ-Prescott_Love_Field.tmy3",
-    "AZ-Safford_Amos.tmy3",
-    "AZ-Scottsdale_Muni.tmy3",
-    "AZ-Show_Low_Municipal.tmy3",
-    "AZ-Tucson_International_Ap.tmy3",
-    "AZ-Winslow_Municipal_Ap.tmy3",
-    "AZ-Yuma_Intl_Arpt.tmy3",
-    "AZ-Yuma_Mcas.tmy3",
-    "CA-Alturas.tmy3",
-    "CA-Arcata_Airport.tmy3",
-    "CA-Bakersfield_Meadows_Field.tmy3",
-    "CA-Beale_Afb.tmy3",
-    "CA-Bishop_Airport.tmy3",
-    "CA-Blue_Canyon_Ap.tmy3",
-    "CA-Blythe_Riverside_Co_Arpt.tmy3",
-    "CA-Burbankglendalepassadena_Ap.tmy3",
-    "CA-Camarillo_Awos.tmy3",
-    "CA-Camp_Pendleton_Mcas.tmy3",
-    "CA-Carlsbad_Palomar.tmy3",
-    "CA-China_Lake_Naf.tmy3",
-    "CA-Chino_Airport.tmy3",
-    "CA-Chula_Vista_Brown_Field_Naas.tmy3",
-    "CA-Concord_Concordbuchanan_Fiel.tmy3",
-    "CA-Crescent_City_Faa_Ai.tmy3",
-    "CA-Daggett_Barstowdaggett_Ap.tmy3",
-    "CA-Edwards_Afb.tmy3",
-    "CA-Fresno_Yosemite_Intl_Ap.tmy3",
-    "CA-Fullerton_Municipal.tmy3",
-    "CA-Hayward_Air_Term.tmy3",
-    "CA-Imperial.tmy3",
-    "CA-Jack_Northrop_Fld_H.tmy3",
-    "CA-Lancaster_Gen_Wm_Fox_Field.tmy3",
-    "CA-Lemoore_Reeves_Nas.tmy3",
-    "CA-Livermore_Municipal.tmy3",
-    "CA-Lompoc_Awos.tmy3",
-    "CA-Long_Beach_Daugherty_Fld.tmy3",
-    "CA-Los_Angeles_Intl_Arpt.tmy3",
-    "CA-March_Afb.tmy3",
-    "CA-Merced_Macready_Fld.tmy3",
-    "CA-Modesto_Citycounty_Ap.tmy3",
-    "CA-Montague_Siskiyou_County_Ap.tmy3",
-    "CA-Monterey_Naf.tmy3",
-    "CA-Mountain_View_Moffett_Fld_Nas.tmy3",
-    "CA-Napa_Co_Airport.tmy3",
-    "CA-Needles_Airport.tmy3",
-    "CA-Oakland_Metropolitan_Arpt.tmy3",
-    "CA-Oxnard_Airport.tmy3",
-    "CA-Palm_Springs_Intl.tmy3",
-    "CA-Palm_Springs_Thermal_Ap.tmy3",
-    "CA-Palmdale_Airport.tmy3",
-    "CA-Paso_Robles_Municipal_Arpt.tmy3",
-    "CA-Point_Mugu_Nf.tmy3",
-    "CA-Porterville_Awos.tmy3",
-    "CA-Red_Bluff_Municipal_Arpt.tmy3",
-    "CA-Redding_Municipal_Arpt.tmy3",
-    "CA-Riverside_Muni.tmy3",
-    "CA-Sacramento_Executive_Arpt.tmy3",
-    "CA-Sacramento_Metropolitan_Ap.tmy3",
-    "CA-Salinas_Municipal_Ap.tmy3",
-    "CA-San_Diego_Lindbergh_Field.tmy3",
-    "CA-San_Diego_Miramar_Nas.tmy3",
-    "CA-San_Diego_Montgomer.tmy3",
-    "CA-San_Diego_North_Island_Nas.tmy3",
-    "CA-San_Francisco_Intl_Ap.tmy3",
-    "CA-San_Jose_Intl_Ap.tmy3",
-    "CA-San_Luis_Co_Rgnl.tmy3",
-    "CA-Sandberg.tmy3",
-    "CA-Santa_Ana_John_Wayne_Ap.tmy3",
-    "CA-Santa_Barbara_Municipal_Ap.tmy3",
-    "CA-Santa_Maria_Public_Arpt.tmy3",
-    "CA-Santa_Monica_Muni.tmy3",
-    "CA-Santa_Rosa_Awos.tmy3",
-    "CA-South_Lake_Tahoe.tmy3",
-    "CA-Stockton_Metropolitan_Arpt.tmy3",
-    "CA-Travis_Field_Afb.tmy3",
-    "CA-Truckeetahoe.tmy3",
-    "CA-Twentynine_Palms.tmy3",
-    "CA-Ukiah_Municipal_Ap.tmy3",
-    "CA-Van_Nuys_Airport.tmy3",
-    "CA-Visalia_Muni_Awos.tmy3",
-    "CA-Yuba_Co.tmy3",
-    "CO-Akron_Washington_Co_Ap.tmy3",
-    "CO-Alamosa_San_Luis_Valley_Rgnl.tmy3",
-    "CO-Aspen_Pitkin_Co_Sar.tmy3",
-    "CO-Aurora_Buckley_Field_Angb.tmy3",
-    "CO-Broomfield_Jeffco_Boulder_Surfrad.tmy3",
-    "CO-Colorado_Springs_Muni_Ap.tmy3",
-    "CO-Cortez_Montezuma_Co.tmy3",
-    "CO-Craigmoffat.tmy3",
-    "CO-Denver_Centennial_Golden_Nrel.tmy3",
-    "CO-Denver_Intl_Ap.tmy3",
-    "CO-Durango_La_Plata_Co.tmy3",
-    "CO-Eagle_County_Ap.tmy3",
-    "CO-Fort_Collins_Awos.tmy3",
-    "CO-Grand_Junction_Walker_Field.tmy3",
-    "CO-Greeley_Weld_Awos.tmy3",
-    "CO-Gunnison_Co_Awos.tmy3",
-    "CO-Hayden_Yampa_Awos.tmy3",
-    "CO-La_Junta_Municipal_Ap.tmy3",
-    "CO-Lamar_Municipal.tmy3",
-    "CO-Leadville_Lake_Co.tmy3",
-    "CO-Limon.tmy3",
-    "CO-Montrose_Co_Arpt.tmy3",
-    "CO-Pueblo_Memorial_Ap.tmy3",
-    "CO-Rifle_Garfield_Rgnl.tmy3",
-    "CO-Trinidad_Las_Animas_County_Ap.tmy3",
-    "CT-Bridgeport_Sikorsky_Memorial.tmy3",
-    "CT-Danbury_Municipal.tmy3",
-    "CT-Groton_New_London_Ap.tmy3",
-    "CT-Hartford_Bradley_Intl_Ap.tmy3",
-    "CT-Hartford_Brainard_Fd.tmy3",
-    "CT-New_Haven_Tweed_Airport.tmy3",
-    "CT-Oxford_Awos.tmy3",
-    "DE-Dover_Afb.tmy3",
-    "DE-Wilmington_New_Castle_Cnty_Ap.tmy3",
-    "FL-Crestview_Bob_Sikes_Ap.tmy3",
-    "FL-Daytona_Beach_Intl_Ap.tmy3",
-    "FL-Fort_Lauderdale.tmy3",
-    "FL-Fort_Lauderdale_Hollywood_Int.tmy3",
-    "FL-Fort_Myers_Page_Field.tmy3",
-    "FL-Gainesville_Regional_Ap.tmy3",
-    "FL-Homestead_Afb.tmy3",
-    "FL-Jacksonville_Craig.tmy3",
-    "FL-Jacksonville_Intl_Arpt.tmy3",
-    "FL-Jacksonville_Nas.tmy3",
-    "FL-Key_West_Intl_Arpt.tmy3",
-    "FL-Key_West_Nas.tmy3",
-    "FL-Lakeland_Linder_Rgn.tmy3",
-    "FL-Macdill_Afb.tmy3",
-    "FL-Marathon_Airport.tmy3",
-    "FL-Mayport_Ns.tmy3",
-    "FL-Melbourne_Regional_Ap.tmy3",
-    "FL-Miami_Intl_Ap.tmy3",
-    "FL-Miami_Kendalltamia.tmy3",
-    "FL-Miami_Opa_Locka.tmy3",
-    "FL-Naples_Municipal.tmy3",
-    "FL-Nasa_Shuttle_Fclty.tmy3",
-    "FL-Ocala_Muni_Awos.tmy3",
-    "FL-Orlando_Executive_Ap.tmy3",
-    "FL-Orlando_Intl_Arpt.tmy3",
-    "FL-Orlando_Sanford_Airport.tmy3",
-    "FL-Panama_City_Bay_Co.tmy3",
-    "FL-Pensacola_Forest_Sherman_Nas.tmy3",
-    "FL-Pensacola_Regional_Ap.tmy3",
-    "FL-Sarasota_Bradenton.tmy3",
-    "FL-Southwest_Florida_I.tmy3",
-    "FL-St_Lucie_Co_Intl.tmy3",
-    "FL-St_Petersburg_Albert_Whitted.tmy3",
-    "FL-St_Petersburg_Clear.tmy3",
-    "FL-Tallahassee_Regional_Ap_Isis.tmy3",
-    "FL-Tampa_International_Ap.tmy3",
-    "FL-Tyndall_Afb.tmy3",
-    "FL-Valparaiso_Elgin_Afb.tmy3",
-    "FL-Valparaiso_Hurlburt.tmy3",
-    "FL-Vero_Beach_Municipal_Arpt.tmy3",
-    "FL-West_Palm_Beach_Intl_Arpt.tmy3",
-    "FL-Whiting_Field_Naas.tmy3",
-    "GA-Albany_Dougherty_County_Ap.tmy3",
-    "GA-Alma_Bacon_County_Ap.tmy3",
-    "GA-Athens_Ben_Epps_Ap.tmy3",
-    "GA-Atlanta_Hartsfield_Intl_Ap.tmy3",
-    "GA-Augusta_Bush_Field.tmy3",
-    "GA-Brunswick_Golden_Is.tmy3",
-    "GA-Brunswick_Malcolm_Mckinnon_Ap.tmy3",
-    "GA-Columbus_Metropolitan_Arpt.tmy3",
-    "GA-Dekalb_Peachtree.tmy3",
-    "GA-Fort_Benning_Lawson.tmy3",
-    "GA-Fulton_Co_Arpt_Brow.tmy3",
-    "GA-Hunter_Aaf.tmy3",
-    "GA-Macon_Middle_Ga_Regional_Ap.tmy3",
-    "GA-Marietta_Dobbins_Afb.tmy3",
-    "GA-Moody_Afb_Valdosta.tmy3",
-    "GA-Rome_R_B_Russell_Ap.tmy3",
-    "GA-Savannah_Intl_Ap.tmy3",
-    "GA-Valdosta_Wb_Airport.tmy3",
-    "GA-Warner_Robins_Afb.tmy3",
-    "GU-Andersen_Afb.tmy3",
-    "GU-Guam_Wfo.tmy3",
-    "HI-Barbers_Point_Nas.tmy3",
-    "HI-Hilo_International_Ap.tmy3",
-    "HI-Honolulu_Intl_Arpt.tmy3",
-    "HI-Kahului_Airport.tmy3",
-    "HI-Kaneohe_Bay_Mcas.tmy3",
-    "HI-Kapalua.tmy3",
-    "HI-Kona_Intl_At_Keahol.tmy3",
-    "HI-Lanai.tmy3",
-    "HI-Lihue_Airport.tmy3",
-    "HI-Molokai_Amos.tmy3",
-    "IA-Algona.tmy3",
-    "IA-Atlantic.tmy3",
-    "IA-Boone_Muni.tmy3",
-    "IA-Burlington_Municipal_Ap.tmy3",
-    "IA-Carroll.tmy3",
-    "IA-Cedar_Rapids_Municipal_Ap.tmy3",
-    "IA-Chariton.tmy3",
-    "IA-Charles_City.tmy3",
-    "IA-Clarinda.tmy3",
-    "IA-Clinton_Muni_Awos.tmy3",
-    "IA-Council_Bluffs.tmy3",
-    "IA-Creston.tmy3",
-    "IA-Decorah.tmy3",
-    "IA-Denison.tmy3",
-    "IA-Des_Moines_Intl_Ap.tmy3",
-    "IA-Dubuque_Regional_Ap.tmy3",
-    "IA-Estherville_Muni.tmy3",
-    "IA-Fair_Field.tmy3",
-    "IA-Fort_Dodge_Awos.tmy3",
-    "IA-Fort_Madison.tmy3",
-    "IA-Keokuk_Muni.tmy3",
-    "IA-Knoxville.tmy3",
-    "IA-Le_Mars.tmy3",
-    "IA-Mason_City_Municipal_Arpt.tmy3",
-    "IA-Monticello_Muni.tmy3",
-    "IA-Muscatine.tmy3",
-    "IA-Newton_Muni.tmy3",
-    "IA-Oelwen.tmy3",
-    "IA-Orange_City.tmy3",
-    "IA-Ottumwa_Industrial_Ap.tmy3",
-    "IA-Red_Oak.tmy3",
-    "IA-Sheldon.tmy3",
-    "IA-Shenandoah_Muni.tmy3",
-    "IA-Sioux_City_Sioux_Gateway_Ap.tmy3",
-    "IA-Spencer.tmy3",
-    "IA-Storm_Lake.tmy3",
-    "IA-Washington.tmy3",
-    "IA-Waterloo_Municipal_Ap.tmy3",
-    "IA-Webster_City.tmy3",
-    "ID-Boise_Air_Terminal_Uo.tmy3",
-    "ID-Burley_Municipal_Arpt.tmy3",
-    "ID-Caldwell_Awos.tmy3",
-    "ID-Coeur_Daleneawos.tmy3",
-    "ID-Hailey_Friedman_Mem.tmy3",
-    "ID-Idaho_Falls_Fanning_Field.tmy3",
-    "ID-Joslin_Fld_Magic_Va_Twin_Falls_Uo.tmy3",
-    "ID-Lewiston_Nez_Perce_Cnty_Ap.tmy3",
-    "ID-Malad_City.tmy3",
-    "ID-Mountain_Home_Afb.tmy3",
-    "ID-Pocatello_Regional_Ap.tmy3",
-    "ID-Salmon_Lemhi_Awos.tmy3",
-    "ID-Soda_Springs_Tigert.tmy3",
-    "IL-Aurora_Municipal.tmy3",
-    "IL-Belleville_Scott_Afb.tmy3",
-    "IL-Cahokia_St_Louis.tmy3",
-    "IL-Central_Illinois_Rg.tmy3",
-    "IL-Chicago_Midway_Ap.tmy3",
-    "IL-Chicago_Ohare_Intl_Ap.tmy3",
-    "IL-Chicago_Waukegan.tmy3",
-    "IL-Decatur.tmy3",
-    "IL-Marion_Regional.tmy3",
-    "IL-Moline_Quad_City_Intl_Ap.tmy3",
-    "IL-Mount_Vernon_Awos.tmy3",
-    "IL-Peoria_Greater_Peoria_Ap.tmy3",
-    "IL-Quincy_Muni_Baldwin_Fld.tmy3",
-    "IL-Rockford_Greater_Rockford_Ap.tmy3",
-    "IL-Southern_Illinois.tmy3",
-    "IL-Springfield_Capital_Ap.tmy3",
-    "IL-Sterling_Rockfalls.tmy3",
-    "IL-Univ_Of_Illinois_Wi_Bondville_Surfrad.tmy3",
-    "IL-W_Chicago_Du_Page.tmy3",
-    "IN-Delaware_Co_Johnson.tmy3",
-    "IN-Evansville_Regional_Ap.tmy3",
-    "IN-Fort_Wayne_Intl_Ap.tmy3",
-    "IN-Grissom_Arb.tmy3",
-    "IN-Huntingburg.tmy3",
-    "IN-Indianapolis_Intl_Ap.tmy3",
-    "IN-Lafayette_Purdue_Univ_Ap.tmy3",
-    "IN-Monroe_Co.tmy3",
-    "IN-South_Bend_Michiana_Rgnl_Ap.tmy3",
-    "IN-Terre_Haute_Hulman_Regional_A.tmy3",
-    "KS-Chanute_Martin_Johnson_Ap.tmy3",
-    "KS-Concordia_Blosser_Muni_Ap.tmy3",
-    "KS-Dodge_City_Regional_Ap.tmy3",
-    "KS-Emporia_Municipal_Ap.tmy3",
-    "KS-Fort_Riley_Marshall_Aaf.tmy3",
-    "KS-Garden_City_Municipal_Ap.tmy3",
-    "KS-Goodland_Renner_Field.tmy3",
-    "KS-Great_Bend_Awos.tmy3",
-    "KS-Hays_Muni_Awos.tmy3",
-    "KS-Hill_City_Municipal_Ap.tmy3",
-    "KS-Hutchinson_Municipal_Ap.tmy3",
-    "KS-Liberal_Muni.tmy3",
-    "KS-Manhattan_Rgnl.tmy3",
-    "KS-Mcconnell_Afb.tmy3",
-    "KS-Newton_Awos.tmy3",
-    "KS-Olathe_Johnson_Co.tmy3",
-    "KS-Olathe_Johnson_Co_Industrial.tmy3",
-    "KS-Russell_Municipal_Ap.tmy3",
-    "KS-Salina_Municipal_Ap.tmy3",
-    "KS-Topeka_Forbes_Field.tmy3",
-    "KS-Topeka_Municipal_Ap.tmy3",
-    "KS-Wichita_Col_Jabara.tmy3",
-    "KS-Wichita_Midcontinent_Ap.tmy3",
-    "KY-Bowling_Green_Warren_Co_Ap.tmy3",
-    "KY-Cincinnati_Northern_Ky_Ap.tmy3",
-    "KY-Fort_Campbell_Aaf.tmy3",
-    "KY-Fort_Knox_Godman_Aaf.tmy3",
-    "KY-Henderson_City.tmy3",
-    "KY-Jackson_Julian_Carroll_Ap.tmy3",
-    "KY-Lexington_Bluegrass_Ap.tmy3",
-    "KY-Londoncorbin_Ap.tmy3",
-    "KY-Louisville_Bowman_Field.tmy3",
-    "KY-Louisville_Standiford_Field.tmy3",
-    "KY-Paducah_Barkley_Regional_Ap.tmy3",
-    "KY-Somersetawos.tmy3",
-    "LA-Alexandria_Esler_Regional_Ap.tmy3",
-    "LA-Barksdale_Afb.tmy3",
-    "LA-Baton_Rouge_Ryan_Arpt.tmy3",
-    "LA-England_Afb.tmy3",
-    "LA-Fort_Polk_Aaf.tmy3",
-    "LA-Houmaterrebonne.tmy3",
-    "LA-Lafayette_Regional_Ap.tmy3",
-    "LA-Lake_Charles_Regional_Arpt.tmy3",
-    "LA-Lake_Charles_Wb_Airp.tmy3",
-    "LA-Monroe_Regional_Ap.tmy3",
-    "LA-New_Iberia_Naas.tmy3",
-    "LA-New_Orleans_Alvin_Callender_F.tmy3",
-    "LA-New_Orleans_Intl_Arpt.tmy3",
-    "LA-New_Orleans_Lakefront_Ap.tmy3",
-    "LA-Patterson_Memorial.tmy3",
-    "LA-Shreveport_Downtown.tmy3",
-    "LA-Shreveport_Regional_Arpt.tmy3",
-    "MA-Barnstable_Muni_Boa.tmy3",
-    "MA-Beverly_Muni.tmy3",
-    "MA-Boston_Logan_Intl_Arpt.tmy3",
-    "MA-Chicopee_Falls_Westo.tmy3",
-    "MA-Lawrence_Muni.tmy3",
-    "MA-Marthas_Vineyard.tmy3",
-    "MA-Nantucket_Memorial_Ap.tmy3",
-    "MA-New_Bedford_Rgnl.tmy3",
-    "MA-North_Adams.tmy3",
-    "MA-Norwood_Memorial.tmy3",
-    "MA-Otis_Angb.tmy3",
-    "MA-Plymouth_Municipal.tmy3",
-    "MA-Provincetown_Awos.tmy3",
-    "MA-Westfield_Barnes_Muni_Ap.tmy3",
-    "MA-Worchester_Regional_Arpt.tmy3",
-    "MD-Andrews_Afb.tmy3",
-    "MD-Baltimore_Bltwashngtn_Intl.tmy3",
-    "MD-Hagerstown_Rgnl_Ric.tmy3",
-    "MD-Patuxent_River_Nas.tmy3",
-    "MD-Salisbury_Wicomico_Co_Ap.tmy3",
-    "ME-Auburnlewiston.tmy3",
-    "ME-Augusta_Airport.tmy3",
-    "ME-Bangor_International_Ap.tmy3",
-    "ME-Bar_Harbor_Awos.tmy3",
-    "ME-Caribou_Municipal_Arpt.tmy3",
-    "ME-Houlton_Intl_Arpt.tmy3",
-    "ME-Millinocket_Municipal_Ap.tmy3",
-    "ME-Naval_Air_Station.tmy3",
-    "ME-Northern_Aroostook.tmy3",
-    "ME-Portland_Intl_Jetport.tmy3",
-    "ME-Presque_Isle_Municip.tmy3",
-    "ME-Rockland_Knoxawos.tmy3",
-    "ME-Sanford_Muni_Awos.tmy3",
-    "ME-Waterville_Awos.tmy3",
-    "ME-Wiscasset.tmy3",
-    "MI-Alpena_County_Regional_Ap.tmy3",
-    "MI-Ann_Arbor_Municipal.tmy3",
-    "MI-Battle_Creek_Kellogg_Ap.tmy3",
-    "MI-Benton_Harbor_Ross.tmy3",
-    "MI-Cadillac_Wexford_Co_Ap.tmy3",
-    "MI-Chippewa_Co_Intl.tmy3",
-    "MI-Detroit_City_Airport.tmy3",
-    "MI-Detroit_Metropolitan_Arpt.tmy3",
-    "MI-Detroit_Willow_Run_Ap.tmy3",
-    "MI-Escanaba_Awos.tmy3",
-    "MI-Flint_Bishop_Intl_Arpt.tmy3",
-    "MI-Grand_Rapids_Kent_County_Int.tmy3",
-    "MI-Hancock_Houghton_Co_Ap.tmy3",
-    "MI-Houghton_Lake_Roscommon_Co_Ar.tmy3",
-    "MI-Howell.tmy3",
-    "MI-Iron_Mountain_Ford.tmy3",
-    "MI-Ironwood_Awos.tmy3",
-    "MI-Jackson_Reynolds_Field.tmy3",
-    "MI-Kalamazoo_Battle_Cr.tmy3",
-    "MI-Lansing_Capital_City_Arpt.tmy3",
-    "MI-Manistee_Awos.tmy3",
-    "MI-Menominee_Awos.tmy3",
-    "MI-Mount_Clemens_Selfridge_Fld.tmy3",
-    "MI-Muskegon_County_Arpt.tmy3",
-    "MI-Oakland_Co_Intl.tmy3",
-    "MI-Oscoda_Wurtsmith_Afb.tmy3",
-    "MI-Pellston_Emmet_County_Ap.tmy3",
-    "MI-Saginaw_Tri_City_Intl_Ap.tmy3",
-    "MI-Sault_Ste_Marie_Sanderson_Fie.tmy3",
-    "MI-Stclair_County_Int.tmy3",
-    "MI-Traverse_City_Cherry_Capital.tmy3",
-    "MN-Aitkin_Ndbawos.tmy3",
-    "MN-Albert_Lea_Awos.tmy3",
-    "MN-Alexandria_Municipal_Ap.tmy3",
-    "MN-Austin_Muni.tmy3",
-    "MN-Baudette_International_Ap.tmy3",
-    "MN-Bemidji_Municipal.tmy3",
-    "MN-Benson_Muni.tmy3",
-    "MN-Brainerd_Wieland.tmy3",
-    "MN-Cambridge_Muni.tmy3",
-    "MN-Cloquet_Awos.tmy3",
-    "MN-Crane_Lake_Awos.tmy3",
-    "MN-Crookston_Muni_Fld.tmy3",
-    "MN-Detroit_Lakesawos.tmy3",
-    "MN-Duluth_International_Arpt.tmy3",
-    "MN-Ely_Muni.tmy3",
-    "MN-Eveleth_Muni_Awos.tmy3",
-    "MN-Fairmont_Muniawos.tmy3",
-    "MN-Faribault_Muni_Awos.tmy3",
-    "MN-Fergus_Fallsawos.tmy3",
-    "MN-Flying_Cloud.tmy3",
-    "MN-Fosstonawos.tmy3",
-    "MN-Glenwood_Asos.tmy3",
-    "MN-Grand_Rapidsawos.tmy3",
-    "MN-Hallock.tmy3",
-    "MN-Hibbing_Chisholmhibbing_Ap.tmy3",
-    "MN-Hutchinson_Awos.tmy3",
-    "MN-International_Falls_Intl_Ap.tmy3",
-    "MN-Litchfield_Muni.tmy3",
-    "MN-Little_Falls_Awos.tmy3",
-    "MN-Mankatoawos.tmy3",
-    "MN-Marshall_Ryanawos.tmy3",
-    "MN-Minneapolis_Crystal.tmy3",
-    "MN-Minneapolisst_Paul_Intl_Arp.tmy3",
-    "MN-Mora_Muni_Awos.tmy3",
-    "MN-Morris_Muni_Awos.tmy3",
-    "MN-New_Ulm_Muni_Awos.tmy3",
-    "MN-Orr.tmy3",
-    "MN-Owatonna_Awos.tmy3",
-    "MN-Park_Rapids_Municipal_Ap.tmy3",
-    "MN-Pipestone_Awos.tmy3",
-    "MN-Red_Wing.tmy3",
-    "MN-Redwood_Falls_Muni.tmy3",
-    "MN-Rochester_International_Arpt.tmy3",
-    "MN-Roseau_Muni_Awos.tmy3",
-    "MN-Silver_Bay.tmy3",
-    "MN-South_St_Paul_Muni.tmy3",
-    "MN-St_Cloud_Regional_Arpt.tmy3",
-    "MN-St_Paul_Downtown_Ap.tmy3",
-    "MN-Thief_Riverawos.tmy3",
-    "MN-Two_Harbors.tmy3",
-    "MN-Wheaton_Ndb_Awos.tmy3",
-    "MN-Willmar.tmy3",
-    "MN-Winona_Muni_Awos.tmy3",
-    "MN-Worthington_Awos.tmy3",
-    "MO-Cape_Girardeau_Municipal_Ap.tmy3",
-    "MO-Columbia_Regional_Airport.tmy3",
-    "MO-Farmington.tmy3",
-    "MO-Ft_Lnrd_Wd_Aaf.tmy3",
-    "MO-Jefferson_City_Mem.tmy3",
-    "MO-Joplin_Municipal_Ap.tmy3",
-    "MO-Kaiser_Mem_Awos.tmy3",
-    "MO-Kansas_City_Downtown_Ap.tmy3",
-    "MO-Kansas_City_Intl_Arpt.tmy3",
-    "MO-Kirksville_Regional_Ap.tmy3",
-    "MO-Poplar_Bluffamos.tmy3",
-    "MO-Springfield_Regional_Arpt.tmy3",
-    "MO-St_Joseph_Rosecrans_Memorial.tmy3",
-    "MO-St_Louis_Lambert_Intl_Arpt.tmy3",
-    "MO-St_Louis_Spirit_Of_St_Louis_A.tmy3",
-    "MO-Vichy_Rolla_Natl_Arpt.tmy3",
-    "MO-Whiteman_Afb.tmy3",
-    "MS-Columbus_Afb.tmy3",
-    "MS-Golden_Triawos.tmy3",
-    "MS-Greenville_Municipal.tmy3",
-    "MS-Greenwood_Leflore_Arpt.tmy3",
-    "MS-Gulfport_Biloxi_Int.tmy3",
-    "MS-Hattiesburg_Laurel.tmy3",
-    "MS-Jackson_International_Ap.tmy3",
-    "MS-Keesler_Afb.tmy3",
-    "MS-Mccomb_Pike_County_Ap.tmy3",
-    "MS-Meridian_Key_Field.tmy3",
-    "MS-Meridian_Naas.tmy3",
-    "MS-Natchez_Hardyawos.tmy3",
-    "MS-Tupelo_C_D_Lemons_Arpt.tmy3",
-    "MT-Billings_Logan_Intl_Arpt.tmy3",
-    "MT-Bozeman_Gallatin_Field.tmy3",
-    "MT-Butte_Bert_Mooney_Arpt.tmy3",
-    "MT-Cut_Bank_Muni_Ap.tmy3",
-    "MT-Glasgow_Intl_Arpt.tmy3",
-    "MT-Glendiveawos.tmy3",
-    "MT-Great_Falls_Intl_Arpt.tmy3",
-    "MT-Havre_Citycounty_Ap.tmy3",
-    "MT-Helena_Regional_Airport.tmy3",
-    "MT-Kalispell_Glacier_Pk_Intl_Ar.tmy3",
-    "MT-Lewistown_Municipal_Arpt.tmy3",
-    "MT-Livingston_Mission_Field.tmy3",
-    "MT-Miles_City_Municipal_Arpt.tmy3",
-    "MT-Missoula_International_Ap.tmy3",
-    "MT-Sidneyrichland.tmy3",
-    "MT-Wolf_Point_Intl_Fort_Peck_Surfrad.tmy3",
-    "NC-Asheville_Regional_Arpt.tmy3",
-    "NC-Cape_Hatteras_Nws_Bldg.tmy3",
-    "NC-Charlotte_Douglas_Intl_Arpt.tmy3",
-    "NC-Cherry_Point_Mcas.tmy3",
-    "NC-Dare_Co_Rgnl.tmy3",
-    "NC-Elizabeth_City_Coast_Guard_Ai_Nrel.tmy3",
-    "NC-Fayetteville_Pope_Afb.tmy3",
-    "NC-Fayetteville_Rgnl_G.tmy3",
-    "NC-Fort_Bragg_Simmons_Aaf.tmy3",
-    "NC-Goldsboro_Seymour_Johnson_Afb.tmy3",
-    "NC-Greensboro_Piedmont_Triad_Int.tmy3",
-    "NC-Hickory_Regional_Ap.tmy3",
-    "NC-Jacksonville_Awos.tmy3",
-    "NC-Kinston_Stallings_Afb.tmy3",
-    "NC-New_Bern_Craven_Co_Regl_Ap.tmy3",
-    "NC-New_River_Mcaf.tmy3",
-    "NC-Pitt_Greenville_Arp.tmy3",
-    "NC-Raleigh_Durham_International.tmy3",
-    "NC-Rocky_Mount_Wilson.tmy3",
-    "NC-Southern_Pines_Awos.tmy3",
-    "NC-Wilmington_International_Arpt.tmy3",
-    "NC-Winstonsalem_Reynolds_Ap.tmy3",
-    "ND-Bismarck_Municipal_Arpt_Isis.tmy3",
-    "ND-Devils_Lakeawos.tmy3",
-    "ND-Dickinson_Municipal_Ap.tmy3",
-    "ND-Fargo_Hector_International_Ap.tmy3",
-    "ND-Grand_Forks_Af.tmy3",
-    "ND-Grand_Forks_International_Ap.tmy3",
-    "ND-Jamestown_Municipal_Arpt.tmy3",
-    "ND-Minot_Afb.tmy3",
-    "ND-Minot_Faa_Ap.tmy3",
-    "ND-Williston_Sloulin_Intl_Ap.tmy3",
-    "NE-Ainsworth_Municipal.tmy3",
-    "NE-Alliance_Municipal.tmy3",
-    "NE-Beatrice_Municipal.tmy3",
-    "NE-Bellevue_Offutt_Afb.tmy3",
-    "NE-Brewster_Field_Arpt.tmy3",
-    "NE-Broken_Bow_Muni.tmy3",
-    "NE-Chadron_Municipal_Ap.tmy3",
-    "NE-Columbus_Muni.tmy3",
-    "NE-Falls_City_Brenner.tmy3",
-    "NE-Fremont_Muni_Arpt.tmy3",
-    "NE-Grand_Island_Central_Ne_Regio.tmy3",
-    "NE-Hastings_Municipal.tmy3",
-    "NE-Imperial_Faa_Ap.tmy3",
-    "NE-Kearney_Muni_Awos.tmy3",
-    "NE-Lincoln_Municipal_Arpt.tmy3",
-    "NE-Mccook_Municipal.tmy3",
-    "NE-Norfolk_Karl_Stefan_Mem_Arpt.tmy3",
-    "NE-North_Platte_Regional_Ap.tmy3",
-    "NE-Omaha_Eppley_Airfield.tmy3",
-    "NE-Omaha_Wsfo.tmy3",
-    "NE-Oneill_Baker_Field.tmy3",
-    "NE-Ord_Sharp_Field.tmy3",
-    "NE-Scottsbluff_W_B_Heilig_Field.tmy3",
-    "NE-Sidney_Municipal_Ap.tmy3",
-    "NE-Tekamah_Asos.tmy3",
-    "NE-Valentine_Miller_Field.tmy3",
-    "NH-Berlin_Municipal.tmy3",
-    "NH-Concord_Municipal_Arpt.tmy3",
-    "NH-Dillant_Hopkins.tmy3",
-    "NH-Laconia_Muni_Awos.tmy3",
-    "NH-Lebanon_Municipal.tmy3",
-    "NH-Manchester_Airport.tmy3",
-    "NH-Mount_Washington.tmy3",
-    "NH-Pease_Intl_Tradepor.tmy3",
-    "NJ-Atlantic_City_Intl_Ap.tmy3",
-    "NJ-Belmar_Asc.tmy3",
-    "NJ-Caldwell_Essex_Co.tmy3",
-    "NJ-Cape_May_Co.tmy3",
-    "NJ-Mcguire_Afb.tmy3",
-    "NJ-Millville_Municipal_Ap.tmy3",
-    "NJ-Newark_International_Arpt.tmy3",
-    "NJ-Teterboro_Airport.tmy3",
-    "NJ-Trenton_Mercer_County_Ap.tmy3",
-    "NM-Albuquerque_Intl_Arpt_Isis.tmy3",
-    "NM-Carlsbad_Cavern_City_Air_Term.tmy3",
-    "NM-Clayton_Municipal_Airpark.tmy3",
-    "NM-Clovis_Cannon_Afb.tmy3",
-    "NM-Clovis_Muni_Awos.tmy3",
-    "NM-Deming_Muni.tmy3",
-    "NM-Farmington_Four_Corners_Regl.tmy3",
-    "NM-Gallup_Sen_Clarke_Fld.tmy3",
-    "NM-Holloman_Afb.tmy3",
-    "NM-Las_Cruces_Intl.tmy3",
-    "NM-Las_Vegas_Municipal_Arpt.tmy3",
-    "NM-Roswell_Industrial_Air_Park.tmy3",
-    "NM-Sata_Fe_County_Municipal_Ap.tmy3",
-    "NM-Sierra_Blanca_Rgnl.tmy3",
-    "NM-Taos_Muni_Aptawos.tmy3",
-    "NM-Truth_Or_Consequences_Muni_Ap.tmy3",
-    "NM-Tucumcari_Faa_Ap.tmy3",
-    "NV-Elko_Municipal_Arpt.tmy3",
-    "NV-Ely_Yelland_Field.tmy3",
-    "NV-Fallon_Naas.tmy3",
-    "NV-Las_Vegas_Mccarran_Intl_Ap.tmy3",
-    "NV-Lovelock_Derby_Field.tmy3",
-    "NV-Mercury_Desert_Rock_Ap_Surfrad.tmy3",
-    "NV-Nellis_Afb.tmy3",
-    "NV-Reno_Tahoe_International_Ap.tmy3",
-    "NV-Tonopah_Airport.tmy3",
-    "NV-Winnemucca_Municipal_Arpt.tmy3",
-    "NY-Adirondack_Rgnl.tmy3",
-    "NY-Albany_County_Ap.tmy3",
-    "NY-Binghamton_Edwin_A_Link_Field.tmy3",
-    "NY-Buffalo_Niagara_Intl_Ap.tmy3",
-    "NY-Elmira_Corning_Regional_Ap.tmy3",
-    "NY-Fort_Drum_Wheelers.tmy3",
-    "NY-Glens_Falls_Ap.tmy3",
-    "NY-Islip_Long_Isl_Macarthur_Ap.tmy3",
-    "NY-Jamestown_Awos.tmy3",
-    "NY-Massena_Ap.tmy3",
-    "NY-Monticelloawos.tmy3",
-    "NY-New_York_Central_Prk_Obs_Belv.tmy3",
-    "NY-New_York_J_F_Kennedy_Intl_Ar.tmy3",
-    "NY-New_York_Laguardia_Arpt.tmy3",
-    "NY-Niagara_Falls_Af.tmy3",
-    "NY-Poughkeepsie_Dutchess_Co_Ap.tmy3",
-    "NY-Republic.tmy3",
-    "NY-Rochester_Greater_Rochester_I.tmy3",
-    "NY-Stewart_Field.tmy3",
-    "NY-Syracuse_Hancock_Intl_Arpt.tmy3",
-    "NY-Utica_Oneida_County_Ap.tmy3",
-    "NY-Watertown_Ap.tmy3",
-    "NY-Westhampton_Gabreski_Ap.tmy3",
-    "NY-White_Plains_Westchester_Co_A.tmy3",
-    "OH-Akron_Akroncanton_Reg_Ap.tmy3",
-    "OH-Burke_Lakefront.tmy3",
-    "OH-Cincinnati_Municipal_Ap_Lunki.tmy3",
-    "OH-Cleveland_Hopkins_Intl_Ap.tmy3",
-    "OH-Columbus_Port_Columbus_Intl_A.tmy3",
-    "OH-Dayton_International_Airport.tmy3",
-    "OH-Dayton_Wright_Patterson_Afb.tmy3",
-    "OH-Findlay_Airport.tmy3",
-    "OH-Mansfield_Lahm_Municipal_Arpt.tmy3",
-    "OH-Ohio_State_Universi.tmy3",
-    "OH-Toledo_Express_Airport.tmy3",
-    "OH-Youngstown_Regional_Airport.tmy3",
-    "OH-Zanesville_Municipal_Ap.tmy3",
-    "OK-Altus_Afb.tmy3",
-    "OK-Bartlesville_Philli.tmy3",
-    "OK-Clintonsherman.tmy3",
-    "OK-Fort_Sill_Post_Field_Af.tmy3",
-    "OK-Gage_Airport.tmy3",
-    "OK-Hobart_Municipal_Ap.tmy3",
-    "OK-Lawton_Municipal.tmy3",
-    "OK-Mcalester_Municipal_Ap.tmy3",
-    "OK-Oklahoma_City_Tinker_Afb.tmy3",
-    "OK-Oklahoma_City_Wiley.tmy3",
-    "OK-Oklahoma_City_Will_Rogers_Wor.tmy3",
-    "OK-Ponca_City_Municipal_Ap_Sgp_Arm.tmy3",
-    "OK-Stillwater_Rgnl.tmy3",
-    "OK-Tulsa_International_Airport.tmy3",
-    "OK-Vance_Afb.tmy3",
-    "OR-Astoria_Regional_Airport.tmy3",
-    "OR-Aurora_State.tmy3",
-    "OR-Baker_Municipal_Ap.tmy3",
-    "OR-Burns_Municipal_Arpt_Uo.tmy3",
-    "OR-Corvallis_Muni.tmy3",
-    "OR-Eugene_Mahlon_Sweet_Arpt_Uo.tmy3",
-    "OR-Klamath_Falls_Intl_Ap_Uo.tmy3",
-    "OR-La_Grande_Muni_Ap.tmy3",
-    "OR-Lakeview_Awos.tmy3",
-    "OR-Medford_Rogue_Valley_Intl_Ap_Ashland_Uo.tmy3",
-    "OR-North_Bend_Muni_Airport.tmy3",
-    "OR-Pendleton_E_Or_Regional_Ap.tmy3",
-    "OR-Portland_Hillsboro.tmy3",
-    "OR-Portland_International_Ap.tmy3",
-    "OR-Portland_Troutdale.tmy3",
-    "OR-Redmond_Roberts_Field.tmy3",
-    "OR-Roseburg_Regional_Ap.tmy3",
-    "OR-Salem_Mcnary_Field.tmy3",
-    "OR-Sexton_Summit.tmy3",
-    "PA-Allentown_Lehigh_Valley_Intl.tmy3",
-    "PA-Altoona_Blair_Co_Arpt.tmy3",
-    "PA-Bradford_Regional_Ap.tmy3",
-    "PA-Butler_Co_Awos.tmy3",
-    "PA-Dubois_Faa_Ap.tmy3",
-    "PA-Erie_International_Ap.tmy3",
-    "PA-Franklin.tmy3",
-    "PA-Harrisburg_Capital_City_Arpt.tmy3",
-    "PA-Johnstown_Cambria_County_Ap.tmy3",
-    "PA-Lancaster.tmy3",
-    "PA-Middletown_Harrisburg_Intl_Ap.tmy3",
-    "PA-Philadelphia_International_Ap.tmy3",
-    "PA-Philadelphia_Ne_Philadelphia.tmy3",
-    "PA-Pittsburgh_Allegheny_Co_Ap.tmy3",
-    "PA-Pittsburgh_International_Ap.tmy3",
-    "PA-Reading_Spaatz_Field.tmy3",
-    "PA-State_College_Penn_State_Surfrad.tmy3",
-    "PA-Washington_Awos.tmy3",
-    "PA-Wilkesbarre_Scranton_Intl_Ap.tmy3",
-    "PA-Williamsport_Regional_Ap.tmy3",
-    "PA-Willow_Grove_Nas.tmy3",
-    "PR-Aquadilla_Borinquen.tmy3",
-    "PR-Eugenio_Maria_De_Ho.tmy3",
-    "PR-Mercedita.tmy3",
-    "PR-Roosevelt_Roads.tmy3",
-    "PR-San_Juan_Intl_Arpt.tmy3",
-    "PR-San_Juan_L_M_Marin_Intl_Ap.tmy3",
-    "RI-Block_Island_State_Arpt.tmy3",
-    "RI-Pawtucket_Awos.tmy3",
-    "RI-Providence_T_F_Green_State_Ar.tmy3",
-    "SC-Anderson_County_Ap.tmy3",
-    "SC-Beaufort_Mcas.tmy3",
-    "SC-Charleston_Intl_Arpt.tmy3",
-    "SC-Columbia_Metro_Arpt.tmy3",
-    "SC-Florence_Regional_Ap.tmy3",
-    "SC-Greenville_Downtown_Ap.tmy3",
-    "SC-Greer_Greenvlspartanbrg_Ap.tmy3",
-    "SC-Myrtle_Beach_Afb.tmy3",
-    "SC-North_Myrtle_Beach_Grand_Stra.tmy3",
-    "SC-Sumter_Shaw_Afb.tmy3",
-    "SD-Aberdeen_Regional_Arpt.tmy3",
-    "SD-Brookings_Awos.tmy3",
-    "SD-Chan_Gurney_Muni.tmy3",
-    "SD-Ellsworth_Afb.tmy3",
-    "SD-Huron_Regional_Arpt.tmy3",
-    "SD-Mitchell_Awos.tmy3",
-    "SD-Mobridge.tmy3",
-    "SD-Pierre_Municipal_Ap.tmy3",
-    "SD-Rapid_City_Regional_Arpt.tmy3",
-    "SD-Sioux_Falls_Foss_Field.tmy3",
-    "SD-Watertown_Municipal_Ap.tmy3",
-    "TN-Bristol_Tri_City_Airport.tmy3",
-    "TN-Chattanooga_Lovell_Field_Ap.tmy3",
-    "TN-Crossville_Memorial_Ap.tmy3",
-    "TN-Dyersburg_Municipal_Ap.tmy3",
-    "TN-Jackson_Mckellarsipes_Regl_A.tmy3",
-    "TN-Knoxville_Mcghee_Tyson_Ap.tmy3",
-    "TN-Memphis_International_Ap.tmy3",
-    "TN-Nashville_International_Ap.tmy3",
-    "TX-Abilene_Dyess_Afb.tmy3",
-    "TX-Abilene_Regional_Ap_Ut.tmy3",
-    "TX-Alice_Intl_Ap.tmy3",
-    "TX-Amarillo_International_Ap_Canyon_Ut.tmy3",
-    "TX-Austin_Mueller_Municipal_Ap_Ut.tmy3",
-    "TX-Brownsville_S_Padre_Isl_Intl.tmy3",
-    "TX-Camp_Mabry.tmy3",
-    "TX-Childress_Municipal_Ap.tmy3",
-    "TX-College_Station_Easterwood_Fl.tmy3",
-    "TX-Corpus_Christi_Intl_Arpt_Ut.tmy3",
-    "TX-Corpus_Christi_Nas.tmy3",
-    "TX-Cotulla_Faa_Ap.tmy3",
-    "TX-Cox_Fld.tmy3",
-    "TX-Dalhart_Municipal_Ap.tmy3",
-    "TX-Dallas_Addison_Arpt.tmy3",
-    "TX-Dallas_Love_Field.tmy3",
-    "TX-Dallas_Redbird_Arpt.tmy3",
-    "TX-Dallasfort_Worth_Intl_Ap.tmy3",
-    "TX-Del_Rio_Laughlin_Afb.tmy3",
-    "TX-Del_Rio_Ut.tmy3",
-    "TX-Draughon_Miller_Cen.tmy3",
-    "TX-El_Paso_International_Ap_Ut.tmy3",
-    "TX-Fort_Hood.tmy3",
-    "TX-Fort_Worth_Alliance.tmy3",
-    "TX-Fort_Worth_Meacham.tmy3",
-    "TX-Fort_Worth_Nas.tmy3",
-    "TX-Galveston_Scholes.tmy3",
-    "TX-Georgetown_Awos.tmy3",
-    "TX-Greenville_Majors.tmy3",
-    "TX-Harlingen_Rio_Grande_Valley_I.tmy3",
-    "TX-Hondo_Municipal_Ap.tmy3",
-    "TX-Houston_Bush_Intercontinental.tmy3",
-    "TX-Houston_Dw_Hooks.tmy3",
-    "TX-Houston_Ellington_Afb_Clear_Lake_Ut.tmy3",
-    "TX-Houston_William_P_Hobby_Ap.tmy3",
-    "TX-Killeen_Muni_Awos.tmy3",
-    "TX-Kingsville.tmy3",
-    "TX-Laredo_Intl_Ap_Ut.tmy3",
-    "TX-Longview_Gregg_County_Ap_Overton_Ut.tmy3",
-    "TX-Lubbock_International_Ap.tmy3",
-    "TX-Lufkin_Angelina_Co.tmy3",
-    "TX-Marfa_Ap.tmy3",
-    "TX-Mc_Gregor_Awos.tmy3",
-    "TX-Mcallen_Miller_Intl_Ap_Edinburg_Ut.tmy3",
-    "TX-Midland_International_Ap.tmy3",
-    "TX-Mineral_Wells_Municipal_Ap.tmy3",
-    "TX-Nacogdoches_Awos.tmy3",
-    "TX-Palacios_Municipal_Ap.tmy3",
-    "TX-Port_Arthur_Jefferson_County.tmy3",
-    "TX-Randolph_Afb.tmy3",
-    "TX-Robert_Gray_Aaf.tmy3",
-    "TX-Rockport_Aransas_Co.tmy3",
-    "TX-San_Angelo_Mathis_Field.tmy3",
-    "TX-San_Antonio_Intl_Ap.tmy3",
-    "TX-San_Antonio_Kelly_Field_Afb.tmy3",
-    "TX-San_Antonio_Stinson.tmy3",
-    "TX-Tyler_Pounds_Fld.tmy3",
-    "TX-Victoria_Regional_Ap.tmy3",
-    "TX-Waco_Regional_Ap.tmy3",
-    "TX-Wichita_Falls_Municipal_Arpt.tmy3",
-    "TX-Wink_Winkler_County_Ap.tmy3",
-    "UT-Blanding.tmy3",
-    "UT-Bryce_Cnyn_Faa_Ap.tmy3",
-    "UT-Cedar_City_Municipal_Ap.tmy3",
-    "UT-Delta.tmy3",
-    "UT-Hanksville.tmy3",
-    "UT-Moab_Canyonlands_Uo.tmy3",
-    "UT-Ogden_Hill_Afb.tmy3",
-    "UT-Ogden_Hinkley_Airport.tmy3",
-    "UT-Provo_Muni_Awos.tmy3",
-    "UT-Saint_George_Awos.tmy3",
-    "UT-Salt_Lake_City_Intl_Arpt_Isis.tmy3",
-    "UT-Vernal.tmy3",
-    "UT-Wendover_Usaf_Auxiliary_Field.tmy3",
-    "VA-Abington.tmy3",
-    "VA-Charlottesville_Faa.tmy3",
-    "VA-Danville_Faa_Ap.tmy3",
-    "VA-Davison_Aaf.tmy3",
-    "VA-Dinwiddie_Co.tmy3",
-    "VA-Farmville.tmy3",
-    "VA-Franklin_Naas.tmy3",
-    "VA-Hillsville.tmy3",
-    "VA-Hot_Springs_Ingalls.tmy3",
-    "VA-Langley_Afb.tmy3",
-    "VA-Leesburg_Godfrey.tmy3",
-    "VA-Lynchburg_Regional_Arpt.tmy3",
-    "VA-Manassas_Muniawos.tmy3",
-    "VA-Marion_Wytheville.tmy3",
-    "VA-Martinsville.tmy3",
-    "VA-Melfa_Accomack_Arpt.tmy3",
-    "VA-Newport_News.tmy3",
-    "VA-Norfolk_International_Ap.tmy3",
-    "VA-Norfolk_Nas.tmy3",
-    "VA-Oceana_Nas.tmy3",
-    "VA-Pulaski.tmy3",
-    "VA-Quantico_Mcas.tmy3",
-    "VA-Richmond_International_Ap.tmy3",
-    "VA-Roanoke_Regional_Ap.tmy3",
-    "VA-Shannon_Arpt.tmy3",
-    "VA-Staunton_Shenandoah.tmy3",
-    "VA-Virginia_Tech_Arpt.tmy3",
-    "VA-Washington_Dc_Dulles_Intl_Ar_Sterling_Isis.tmy3",
-    "VA-Washington_Dc_Reagan_Ap.tmy3",
-    "VA-Winchester_Rgnl.tmy3",
-    "VA-Wise_Lonesome_Pine.tmy3",
-    "VI-Charlotte_Amalie_Harry_S_Trum.tmy3",
-    "VT-Burlington_International_Ap.tmy3",
-    "VT-Montpelier_Ap.tmy3",
-    "VT-Rutland_State.tmy3",
-    "VT-Springfield_Hartnes.tmy3",
-    "WA-Bellingham_Intl_Ap.tmy3",
-    "WA-Bremerton_National.tmy3",
-    "WA-Ephrata_Ap_Fcwos.tmy3",
-    "WA-Fairchild_Afb.tmy3",
-    "WA-Felts_Fld.tmy3",
-    "WA-Gray_Aaf.tmy3",
-    "WA-Hanford.tmy3",
-    "WA-Hoquiam_Ap.tmy3",
-    "WA-Kelso_Wb_Ap.tmy3",
-    "WA-Moses_Lake_Grant_County_Ap.tmy3",
-    "WA-Olympia_Airport.tmy3",
-    "WA-Pasco.tmy3",
-    "WA-Pullman_Moscow_Rgnl.tmy3",
-    "WA-Quillayute_State_Airport.tmy3",
-    "WA-Renton_Muni.tmy3",
-    "WA-Seattle_Boeing_Field_Isis.tmy3",
-    "WA-Seattle_Seattletacoma_Intl_A.tmy3",
-    "WA-Snohomish_Co.tmy3",
-    "WA-Spokane_International_Ap_Cheney_Uo.tmy3",
-    "WA-Stampede_Pass.tmy3",
-    "WA-Tacoma_Mcchord_Afb.tmy3",
-    "WA-Tacoma_Narrows.tmy3",
-    "WA-The_Dalles_Municipal_Arpt.tmy3",
-    "WA-Toledowinlock_Mem.tmy3",
-    "WA-Walla_Walla_City_County_Ap.tmy3",
-    "WA-Wenatchee_Pangborn.tmy3",
-    "WA-Whidbey_Island_Nas.tmy3",
-    "WA-William_R_Fairchild.tmy3",
-    "WA-Yakima_Air_Terminal.tmy3",
-    "WI-Antigo_Langawos.tmy3",
-    "WI-Appleton_Outagamie.tmy3",
-    "WI-Eau_Claire_County_Ap.tmy3",
-    "WI-Green_Bay_Austin_Straubel_Int.tmy3",
-    "WI-Janesville_Rock_Co.tmy3",
-    "WI-La_Crosse_Municipal_Arpt.tmy3",
-    "WI-Lone_Rock_Faa_Ap.tmy3",
-    "WI-Madison_Dane_Co_Regional_Arpt_Isis.tmy3",
-    "WI-Manitowac_Muni_Awos.tmy3",
-    "WI-Marshfield_Muni.tmy3",
-    "WI-Milwaukee_Mitchell_Intl_Ap.tmy3",
-    "WI-Minocqua_Woodruff.tmy3",
-    "WI-Mosinee_Central_Wi.tmy3",
-    "WI-Phillips_Price_Co.tmy3",
-    "WI-Rhinelander_Oneida.tmy3",
-    "WI-Rice_Lake_Municipal.tmy3",
-    "WI-Sturgeon_Bay.tmy3",
-    "WI-Watertown.tmy3",
-    "WI-Wausau_Municipal_Arpt.tmy3",
-    "WI-Wittman_Rgnl.tmy3",
-    "WV-Beckley_Raleigh_Co_Mem_Ap.tmy3",
-    "WV-Bluefield_Mercer_Co_Nrel.tmy3",
-    "WV-Charleston_Yeager_Arpt.tmy3",
-    "WV-Elkins_Elkinsrandolph_Co_Arp.tmy3",
-    "WV-Harrison_Marion_Rgn.tmy3",
-    "WV-Huntington_Tristate_Arpt.tmy3",
-    "WV-Lewisburg_Greenbrie.tmy3",
-    "WV-Martinsburg_Eastern_Wv_Reg_Ap.tmy3",
-    "WV-Morgantown_Hart_Field.tmy3",
-    "WV-Parkersburg_Wood_County_Ap.tmy3",
-    "WV-Wheeling_Ohio_County_Ap.tmy3",
-    "WY-Casper_Natrona_Co_Intl_Ap.tmy3",
-    "WY-Cheyenne_Municipal_Arpt.tmy3",
-    "WY-Cody_Muni_Awos.tmy3",
-    "WY-Evanston_Burns_Fld.tmy3",
-    "WY-Gillette_Gillettec.tmy3",
-    "WY-Jackson_Hole.tmy3",
-    "WY-Lander_Hunt_Field.tmy3",
-    "WY-Laramie_General_Brees_Field.tmy3",
-    "WY-Rawlins_Municipal_Ap.tmy3",
-    "WY-Riverton_Municipl_Ap.tmy3",
-    "WY-Rock_Springs_Arpt_Green_River_Uo.tmy3",
-    "WY-Sheridan_County_Arpt.tmy3",
-    "WY-Worland_Municipal.tmy3"
+    "US/CA_Alameda.csv.gz",
+    "US/CA_Contra_Costa.csv.gz",
+    "US/CA_Los_Angeles.csv.gz",
+    "US/CA_Orange.csv.gz",
+    "US/CA_Riverside.csv.gz",
+    "US/CA_San_Bernardino.csv.gz",
+    "US/CA_San_Diego.csv.gz",
+    "US/CA_San_Francisco.csv.gz",
+    "US/CA_San_Mateo.csv.gz",
+    "US/CA_Santa_Clara.csv.gz",
+    "US/ME_Androscoggin.csv.gz",
+    "US/ME_Aroostook.csv.gz",
+    "US/ME_Cumberland.csv.gz",
+    "US/ME_Franklin.csv.gz",
+    "US/ME_Hancock.csv.gz",
+    "US/ME_Kennebec.csv.gz",
+    "US/ME_Knox.csv.gz",
+    "US/ME_Lincoln.csv.gz",
+    "US/ME_Oxford.csv.gz",
+    "US/ME_Penobscot.csv.gz",
+    "US/ME_Piscataquis.csv.gz",
+    "US/ME_Sagadahoc.csv.gz",
+    "US/ME_Somerset.csv.gz",
+    "US/ME_Waldo.csv.gz",
+    "US/ME_Washington.csv.gz",
+    "US/ME_York.csv.gz",
+    "US/NH_Belknap.csv.gz",
+    "US/NH_Carroll.csv.gz",
+    "US/NH_Cheshire.csv.gz",
+    "US/NH_Coos.csv.gz",
+    "US/NH_Grafton.csv.gz",
+    "US/NH_Hillsborough.csv.gz",
+    "US/NH_Merrimack.csv.gz",
+    "US/NH_Rockingham.csv.gz",
+    "US/NH_Strafford.csv.gz",
+    "US/NH_Sullivan.csv.gz",
+    "US/TN_Hamilton.csv.gz"
 ]
diff --git a/tools/resource.py b/tools/resource.py
index c88ca9d33..53c5350bb 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -22,6 +22,8 @@
 
 * `--silent`: suppress all output exception results
 
+* `--test[=PATTERN]`: test resources matching pattern (default is '.*')
+
 * `--verbose`: enable verbose output
 
 * `--warning`: disable warning output
@@ -51,10 +53,12 @@
 import os
 import io
 import json
+import re
 import pandas as pd
 import framework as app
 import subprocess
 import requests
+from typing import *
 
 pd.options.display.max_columns = None
 pd.options.display.max_colwidth = None
@@ -90,7 +94,6 @@ def __init__(self,file=None):
             na_filter=False,
             comment="#",
             ).to_dict('index')
-        # print(self.data)
 
         # get globals from gridlabd
         self.globals = app.gridlabd("--globals=json",
@@ -110,7 +113,6 @@ def _download(self,
             output_to=lambda x:x,headers={},
             **kwargs):
         url = f"{protocol}://{hostname}:{port}{content}"
-        print(url)
         try:
             req = requests.get(url,headers=headers,timeout=self.TIMEOUT)
             req.raise_for_status()
@@ -126,7 +128,6 @@ def _headers(self,
             output_to=lambda x:x,headers={},
             **kwargs):
         url = f"{protocol}://{hostname}:{port}{content}"
-        print(url)
         try:
             req = requests.head(url,headers=headers,timeout=self.TIMEOUT)
             req.raise_for_status()
@@ -137,12 +138,19 @@ def _headers(self,
         app.debug(f"downloading '{url}' with headers={req.request.headers}")
         return output_to(req.headers)
 
-    def properties(self,passthru='*',**kwargs):
+    def list(self,pattern:str='.*') -> list[str]:
+        """Get a list of available resources
+
+        Argument
+        """
+        return sorted([x for x in self.data if re.match(pattern,x)])
+
+    def properties(self,passthru:str='*',**kwargs:dict) -> dict:
         """Get resource properties
 
         """
         name = kwargs['name']
-        if not name in self.data:
+        if not name in self.list():
             raise ResourceError(f"'{name}' not found")
         result = {"resource":name}
         for key,value in self.data[name].items():
@@ -156,7 +164,7 @@ def properties(self,passthru='*',**kwargs):
                 raise
         return result
 
-    def index(self,**kwargs):
+    def index(self,**kwargs:dict) -> Union[str,list,dict]:
         """Get resource index (if any)
 
         """
@@ -176,7 +184,7 @@ def index(self,**kwargs):
             output_to=lambda x:x.strip().split("\n"),
             **spec)
 
-    def headers(self,**kwargs):
+    def headers(self,**kwargs:dict) -> Union[str,list,dict]:
         """Get resource header
 
         """
@@ -195,9 +203,16 @@ def headers(self,**kwargs):
                 },
             **spec)
 
-    def content(self,**kwargs):
+    def content(self,**kwargs:dict) -> str:
         """Get resource content
 
+        Arguments:
+
+        * `**kwargs`: options (see `properties()`)
+
+        Returns:
+
+        * Resource contents
         """
         if not 'passthru' in kwargs:
             kwargs['passthru'] = '*'
@@ -218,7 +233,7 @@ def main(argv):
 
     if len(argv) == 1:
 
-        print("\n".join([x for x in __doc__.split("\n") if x.startswith("Syntax: ")]))
+        print("\n".join([x for x in __doc__.split("\n") if x.startswith("Syntax: ")]),file=sys.stderr)
         return app.E_SYNTAX
 
     args = app.read_stdargs(argv)
@@ -235,7 +250,7 @@ def output_csv(data,**kwargs):
             print("\n".join([f"{x},{y}" for x,y in data.items()]))
         elif isinstance(data,str):
             data = pd.read_csv(io.StringIO(data),dtype=str)
-            print(data.to_csv())
+            print(data.to_csv(**kwargs))
         else:
             raise ResourceError(f"unable to output '{type(data)}' as CSV")
 
@@ -253,7 +268,7 @@ def output_json(data,**kwargs):
 
         if key in ["-h","--help","help"]:
 
-            print(__doc__,file=sys.stdout)
+            print(__doc__)
             return app.E_OK
         
         elif key in ["--format"]:
@@ -297,7 +312,7 @@ def output_json(data,**kwargs):
 
         elif key in ["--list"]:
 
-            outputter(resources.data.index.tolist(),**outputter_options)
+            outputter(resources.list(*value),**outputter_options)
             return app.E_OK
 
         elif key in ["--properties"]:
@@ -322,7 +337,7 @@ def output_json(data,**kwargs):
                 app.error("missing resource name")
                 return E_MISSING
             for item in value: # TODO only one allowed
-                if not item in resources.data.index:
+                if not item in resources.data:
                     app.error(f"'{item}' is not a valid resource name")
                     return app.E_NOTFOUND
                 outputter(resources.index(name=item),**outputter_options)
@@ -354,6 +369,12 @@ def output_json(data,**kwargs):
                 return E_FAILED
             return app.E_OK
 
+        elif key in ["--test"]:
+            for pattern in value if value else ['.*']:
+                rc = test(pattern)
+                if re != app.E_OK:
+                    return rc
+
         else:
             app.error(f"'{key}={value}' is invalid")
             return app.E_INVALID
@@ -362,6 +383,32 @@ def output_json(data,**kwargs):
 
     return app.E_OK
 
+def test(pattern='.*'):
+    resource = Resource()
+    tested = 0
+    failed = 0
+    checked = 0
+    for name in resource.list(pattern):
+        print(f"*** Testing resource '{name}' ***",file=sys.stderr)
+        print("Properties:",file=sys.stderr)
+        for key,value in resource.properties(name=name).items():
+            print(f"  {key}: {repr(value)}",file=sys.stderr)
+        try:
+            index = resource.index(name=name)
+            if index:
+                for item in index:
+                    tested += 1
+                    content = resource.headers(name=name,index=item)
+                    size = content['content-length']
+                    checked += int(size.split()[0])
+                    print(f"{name}/{item}... {size} bytes",flush=True,file=sys.stderr)
+        except ResourceError as err:
+            failed += 1
+            print(f"FAILED: {name}... {err}",file=sys.stderr)
+
+    print(f"Tested {tested} resources ({checked/1e6:.1f} MB) with {failed} failures",file=sys.stderr)
+    return app.E_OK if failed == 0 else app.E_FAILED
+
 if __name__ == "__main__":
 
     # local development tests
@@ -371,46 +418,34 @@ def output_json(data,**kwargs):
         #
         # Test library functions (comprehensive scan of all contents)
         #
-        TESTLIST = [] # None => all resources, empty list => skip test
-        resource = Resource()
-        for name in resource.data if TESTLIST is None else TESTLIST:
-            print(f"*** {name} ***")
-            print("Properties:")
-            for key,value in resource.properties(name=name).items():
-                print(f"  {key}: {repr(value)}")
-            try:
-                index = resource.index(name=name)
-                if index:
-                    for item in index:
-                        content = resource.headers(name=name,index=item)
-                        print(f"{name}/{item}... {content['content-length']} bytes",flush=True)
-            except ResourceError as err:
-                print(f"{name}... {err}")
+        # sys.argv = [__file__,"--test"]
+        sys.argv = [__file__,"--test=building"]
 
 
         #
         # Test command line options (e.g., one at a time)
         #
 
+        options = ["--format=csv"]
         # options = ["--debug","--format=csv"]
         # options = ["--debug","--format=json,indent:4"]
-        # sys.argv.extend(["--list"])
-        # sys.argv.extend([*options,"--list"])
-
-        # sys.argv.extend([*options,"--index"]) # should be an error
-        # sys.argv.extend([*options,"--index=weather"])
+        
+        # sys.argv = [__file__,*options,"--list"]
+        # sys.argv = [__file__,*options,"--list=[a-l]"]
 
-        # sys.argv.extend([*options,"--properties"])
-        # sys.argv.extend([*options,"--properties=weather"])
+        # sys.argv = [__file__,*options,"--index"] # should be an error
+        # sys.argv = [__file__,*options,"--index=buildings"]
+        # sys.argv = [__file__,*options,"--index=elevation"]
+        # sys.argv = [__file__,*options,"--index=weather"]
 
-        # sys.argv.extend([*options,"--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"])
+        # sys.argv = [__file__,*options,"--properties"]
+        # sys.argv = [__file__,*options,"--properties=weather"]
 
-        # sys.argv.extend([*options,"--index=localhost"]) # should be an error
-        # sys.argv.extend([*options,"--content=localhost"]) # should be an error
-        # sys.argv.extend([*options,"--content=junk"]) # should be an error
+        # sys.argv = [__file__,*options,"--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"]
 
-        print("Tests completed")
-        quit(0)
+        # sys.argv = [__file__,*options,"--index=localhost"] # should be an error
+        # sys.argv = [__file__,*options,"--content=localhost"] # should be an error
+        # sys.argv = [__file__,*options,"--content=junk"] # should be an error
 
     try:
 

From b129e36872776264d3b50bbcd3f796cc014f45e6 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Sun, 19 Jan 2025 14:30:14 -0600
Subject: [PATCH 11/29] Update resource.csv

---
 runtime/resource.csv | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/runtime/resource.csv b/runtime/resource.csv
index 635cd0e44..2132c2a89 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -10,7 +10,7 @@ buildings,http,80,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,/inde
 #docs-dev,https,443,docs-dev.gridlabd.us
 #docs,https,443,docs.gridlabd.us
 elevation,https,443,s3.us-west-1.amazonaws.com,/elevation.gridlabd.us/index,/elevation.gridlabd.us/{index},image/tiff,,Ground elevation data
-#examples,https,443,examples.gridlabd.us
+examples,https,443,raw.githubusercontent.com,/{organization}/gridlabd-examples/master/index,/{organization}/gridlabd-examples/master/{index},,,GridLAB-D model examples with supporting files
 #geodata-dev,https,443,geodata-dev.gridlabd.us
 #geodata,https,443,geodata.gridlabd.us
 #gridchat,https,443,gridchat.gridlabd.us

From 20ee29067f6853b11bea0f298969909a0fb374f2 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Sun, 19 Jan 2025 14:30:26 -0600
Subject: [PATCH 12/29] Add resource mimetypes

---
 tools/resource.py | 43 ++++++++++++++++++++++++++++++++++++-------
 1 file changed, 36 insertions(+), 7 deletions(-)

diff --git a/tools/resource.py b/tools/resource.py
index 53c5350bb..31faacb0e 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -59,6 +59,8 @@
 import subprocess
 import requests
 from typing import *
+from PIL import Image
+import numpy as np
 
 pd.options.display.max_columns = None
 pd.options.display.max_colwidth = None
@@ -72,6 +74,20 @@ class Resource:
 
     TIMEOUT = 5
 
+    mimetypes = {
+        ".csv.gz" : lambda x: pd.read_csv(io.BytesIO(x.content),compression="gzip",low_memory=False),
+        ".csv" : lambda x: pd.read_csv(io.StringIO(x.content.decode("utf-8")),low_memory=False),
+        ".json" : lambda x: json.load(io.StringIO(x.content.decode("utf-8"))),
+        ".tif" : lambda x: np.array(Image.open(io.BytesIO(x.content))),
+        ".tmy3" : lambda x: pd.read_csv(io.StringIO(x.content.decode("utf-8")),
+                low_memory=False,
+                skiprows=1,
+                header=[0],
+                index_col=[0],
+                parse_dates=[[0,1]],
+                ),
+    }
+
     def __init__(self,file=None):
         """Construct resource object
 
@@ -121,6 +137,9 @@ def _download(self,
         self.request = req
         self.request.url = url
         app.debug(f"downloading '{url}' with headers={req.request.headers}")
+        for mimetype,process in self.mimetypes.items():
+            if content.endswith(mimetype):
+                return process(req)
         return output_to(req.content.decode("utf-8"))
 
     def _headers(self,
@@ -362,7 +381,7 @@ def output_json(data,**kwargs):
                 return app.E_NOTFOUND
 
             result = resources.content(name=value[0],index=source)
-            if result:
+            if not result is None:
                 outputter(result,**outputter_options)
             else:
                 app.error(f"{resources.request.url}: {resources.request.content.decode('utf-8')}")
@@ -419,16 +438,19 @@ def test(pattern='.*'):
         # Test library functions (comprehensive scan of all contents)
         #
         # sys.argv = [__file__,"--test"]
-        sys.argv = [__file__,"--test=building"]
-
+        # sys.argv = [__file__,"--test=buildings"]
+        # sys.argv = [__file__,"--test=elevation"]
+        # sys.argv = [__file__,"--test=examples"]
+        # sys.argv = [__file__,"--test=weather"]
 
         #
         # Test command line options (e.g., one at a time)
         #
 
-        options = ["--format=csv"]
-        # options = ["--debug","--format=csv"]
-        # options = ["--debug","--format=json,indent:4"]
+        options = []
+        # options.extend(["--debug"])
+        # options.extend(["--format=csv"])
+        # options.extend(["--format=json,indent:4"])
         
         # sys.argv = [__file__,*options,"--list"]
         # sys.argv = [__file__,*options,"--list=[a-l]"]
@@ -436,12 +458,19 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--index"] # should be an error
         # sys.argv = [__file__,*options,"--index=buildings"]
         # sys.argv = [__file__,*options,"--index=elevation"]
+        # sys.argv = [__file__,*options,"--index=examples"]
         # sys.argv = [__file__,*options,"--index=weather"]
 
         # sys.argv = [__file__,*options,"--properties"]
+        # sys.argv = [__file__,*options,"--properties=buildings"]
+        # sys.argv = [__file__,*options,"--properties=elevation"]
+        # sys.argv = [__file__,*options,"--properties=examples"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
-        # sys.argv = [__file__,*options,"--content=weather,WA-Seattle_Seattletacoma_Intl_A.tmy3,csv"]
+        # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
+        # sys.argv = [__file__,*options,"--content=elevation,10m/31N_112W.tif"]
+        # sys.argv = [__file__,*options,"--content=examples,geodata/IEEE-123.json"]
+        # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
 
         # sys.argv = [__file__,*options,"--index=localhost"] # should be an error
         # sys.argv = [__file__,*options,"--content=localhost"] # should be an error

From 76f29764b03f8f49ae54faa858bdf5f6f4784f77 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Mon, 20 Jan 2025 08:48:44 -0600
Subject: [PATCH 13/29] Update resource.py

---
 tools/resource.py | 35 ++++++++++++++++++++++++++---------
 1 file changed, 26 insertions(+), 9 deletions(-)

diff --git a/tools/resource.py b/tools/resource.py
index 31faacb0e..0c3d0e37c 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -73,6 +73,7 @@ class Resource:
     """Resource class"""
 
     TIMEOUT = 5
+    PROPERTIES = []
 
     mimetypes = {
         ".csv.gz" : lambda x: pd.read_csv(io.BytesIO(x.content),compression="gzip",low_memory=False),
@@ -109,7 +110,9 @@ def __init__(self,file=None):
             index_col=0,
             na_filter=False,
             comment="#",
-            ).to_dict('index')
+            )
+        self.PROPERTIES = list(self.data.columns)
+        self.data = self.data.to_dict('index')
 
         # get globals from gridlabd
         self.globals = app.gridlabd("--globals=json",
@@ -260,7 +263,10 @@ def main(argv):
     resources = Resource()
 
     def output_raw(data,**kwargs):
-        print(data,**kwargs)
+        if isinstance(data,np.ndarray):
+            print(data.tolist(),**kwargs)
+        else:
+            print(data,**kwargs)
 
     def output_csv(data,**kwargs):
         if isinstance(data,list):
@@ -270,6 +276,10 @@ def output_csv(data,**kwargs):
         elif isinstance(data,str):
             data = pd.read_csv(io.StringIO(data),dtype=str)
             print(data.to_csv(**kwargs))
+        elif isinstance(data,pd.DataFrame):
+            print(data.to_csv(**kwargs))
+        elif isinstance(data,np.ndarray):
+            print(np.savetxt("/dev/stdout",data,**kwargs))
         else:
             raise ResourceError(f"unable to output '{type(data)}' as CSV")
 
@@ -277,6 +287,10 @@ def output_json(data,**kwargs):
         if isinstance(data,str):
             data = pd.read_csv(io.StringIO(data),dtype=str)
             print(data.to_json(indent=2))
+        elif isinstance(data,pd.DataFrame):
+            print(data.to_json(**kwargs))
+        elif isinstance(data,np.ndarray):
+            print(json.dumps(data.tolist(),**kwargs))
         else:
             print(json.dumps(data,**kwargs))
 
@@ -300,9 +314,10 @@ def output_json(data,**kwargs):
             
             elif value[0] == "csv":
 
-                if len(value) > 1:
-                    app.error(f"invalid format options '{','.join(value[1:])}'")
-                    return app.E_INVALID
+                # if len(value) > 1:
+                #     app.error(f"invalid format options '{','.join(value[1:])}'")
+                #     return app.E_INVALID
+                outputter_options = {x:y for x,y in [z.split(":",1) for z in value[1:]]} if len(value) > 1 else {}
                 outputter = output_csv
 
             elif value[0] == "json":
@@ -342,12 +357,12 @@ def output_json(data,**kwargs):
                 raise ResourceError(f"invalid option '{options[0]}")
                 return E_INVALID
             if value:
-                if not value in resources.data.index:
+                if not value in list(resources.data):
                     app.error(f"'{item}' is not a valid resource name")
                     return app.E_NOTFOUND
                 data = resources.properties(name=value)
             else:
-                data = resources.data.columns.tolist()
+                data = resources.PROPERTIES
             outputter(data,**outputter_options)
             return app.E_OK
 
@@ -450,12 +465,13 @@ def test(pattern='.*'):
         options = []
         # options.extend(["--debug"])
         # options.extend(["--format=csv"])
+        # options.extend(["--format=csv,fmt:.0f"])
         # options.extend(["--format=json,indent:4"])
+        # options.extend(["--format=json,indent:4,orient:index"])
         
         # sys.argv = [__file__,*options,"--list"]
         # sys.argv = [__file__,*options,"--list=[a-l]"]
 
-        # sys.argv = [__file__,*options,"--index"] # should be an error
         # sys.argv = [__file__,*options,"--index=buildings"]
         # sys.argv = [__file__,*options,"--index=elevation"]
         # sys.argv = [__file__,*options,"--index=examples"]
@@ -472,6 +488,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--content=examples,geodata/IEEE-123.json"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
 
+        # sys.argv = [__file__,*options,"--index"] # should be an error
         # sys.argv = [__file__,*options,"--index=localhost"] # should be an error
         # sys.argv = [__file__,*options,"--content=localhost"] # should be an error
         # sys.argv = [__file__,*options,"--content=junk"] # should be an error
@@ -492,7 +509,7 @@ def test(pattern='.*'):
 
         if not app.QUIET:
             e_type,e_value,e_trace = sys.exc_info()
-            tb = app.traceback.TracebackException(e_type,e_value,e_trace).stack[1]
+            tb = app.traceback.TracebackException(e_type,e_value,e_trace).stack[-1]
             print(f"EXCEPTION [{app.EXEFILE}@{tb.lineno}]: ({e_type.__name__}) {e_value}",file=sys.stderr)
 
         exit(app.E_EXCEPTION)

From 1e9f20bb24b93d5cacde87493491ea3c1affba81 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Mon, 20 Jan 2025 13:17:38 -0600
Subject: [PATCH 14/29] Add support for code resource

---
 Makefile.am          |    2 +
 index                | 4176 ++++++++++++++++++++++++++++++++++++++++++
 runtime/resource.csv |    4 +-
 tools/resource.py    |    1 +
 4 files changed, 4181 insertions(+), 2 deletions(-)
 create mode 100644 index

diff --git a/Makefile.am b/Makefile.am
index 96c9ede3f..d9f6db2c2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -307,6 +307,8 @@ $(prefix)/src:
 	@chmod -R 775 $(prefix)/src
 
 index: weather library template
+	@echo Updating file index...
+	@git ls-files | grep -v '^\.' > index
 
 html-local: module-html developer-html troubleshooting-html
 	@mkdir -p $(prefix)/share/doc/developer
diff --git a/index b/index
new file mode 100644
index 000000000..ede780b04
--- /dev/null
+++ b/index
@@ -0,0 +1,4176 @@
+COPYRIGHT
+LICENSE
+Makefile.am
+README.md
+aminclude.mk
+autotest/README.md
+autotest/autotest/R1-12.27-4_reg_output.csv
+autotest/autotest/data/VT-Burlington_International_Ap.tmy3
+autotest/autotest/model_save.glm
+autotest/autotest/test_R1-12.47-1.glm
+autotest/autotest/test_R1-12.47-1_NR.glm
+autotest/autotest/test_R1-12.47-2.glm
+autotest/autotest/test_R1-12.47-2_NR.glm
+autotest/autotest/test_R1-12.47-3.glm
+autotest/autotest/test_R1-12.47-3_NR.glm
+autotest/autotest/test_R1-12.47-4.glm
+autotest/autotest/test_R1-12.47-4_NR.glm
+autotest/autotest/test_R1-25.00-1.glm
+autotest/autotest/test_R1-25.00-1_NR.glm
+autotest/autotest/test_R2-12.47-1.glm
+autotest/autotest/test_R2-12.47-1_NR.glm
+autotest/autotest/test_R2-12.47-2.glm
+autotest/autotest/test_R2-12.47-2_NR.glm
+autotest/autotest/test_R2-12.47-3.glm
+autotest/autotest/test_R2-12.47-3_NR.glm
+autotest/autotest/test_R2-25.00-1.glm
+autotest/autotest/test_R2-25.00-1_NR.glm
+autotest/autotest/test_R2-35.00-1.glm
+autotest/autotest/test_R2-35.00-1_NR.glm
+autotest/autotest/test_R3-12.47-1.glm
+autotest/autotest/test_R3-12.47-1_NR.glm
+autotest/autotest/test_R3-12.47-2.glm
+autotest/autotest/test_R3-12.47-2_NR.glm
+autotest/autotest/test_R3-12.47-3.glm
+autotest/autotest/test_R3-12.47-3_NR.glm
+autotest/autotest/test_R4-12.47-1.glm
+autotest/autotest/test_R4-12.47-1_NR.glm
+autotest/autotest/test_R4-12.47-2.glm
+autotest/autotest/test_R4-12.47-2_NR.glm
+autotest/autotest/test_R4-25.00-1.glm
+autotest/autotest/test_R4-25.00-1_NR.glm
+autotest/autotest/test_R5-12.47-1.glm
+autotest/autotest/test_R5-12.47-1_NR.glm
+autotest/autotest/test_R5-12.47-2.glm
+autotest/autotest/test_R5-12.47-2_NR.glm
+autotest/autotest/test_R5-12.47-3.glm
+autotest/autotest/test_R5-12.47-3_NR.glm
+autotest/autotest/test_R5-12.47-4.glm
+autotest/autotest/test_R5-12.47-4_NR.glm
+autotest/autotest/test_R5-12.47-5.glm
+autotest/autotest/test_R5-12.47-5_NR.glm
+autotest/autotest/test_R5-25.00-1.glm
+autotest/autotest/test_R5-25.00-1_NR.glm
+autotest/autotest/test_R5-35.00-1.glm
+autotest/autotest/test_R5-35.00-1_NR.glm
+autotest/autotest/test_model_save_opt.glm
+build-aux/.gitignore
+build-aux/README.md
+build-aux/clean_dirs.sh
+build-aux/python3.sh
+build-aux/version.sh
+build.sh
+cloud/Makefile.mk
+cloud/README.md
+cloud/servers/version.gridlabd.us/README.md
+cloud/servers/version.gridlabd.us/access_log.conf
+cloud/servers/version.gridlabd.us/aws_requirements.txt
+cloud/servers/version.gridlabd.us/crontab.root
+cloud/servers/version.gridlabd.us/index.html
+cloud/servers/version.gridlabd.us/install.sh
+cloud/servers/version.gridlabd.us/robots.txt
+cloud/servers/version.gridlabd.us/update.py
+cloud/servers/version.gridlabd.us/update.sh
+cloud/websites/code.gridlabd.us/index.html
+cloud/websites/docs.gridlabd.us/_config.js
+cloud/websites/docs.gridlabd.us/_contents.html
+cloud/websites/docs.gridlabd.us/_defaults.js
+cloud/websites/docs.gridlabd.us/_page.html
+cloud/websites/docs.gridlabd.us/_theme.css
+cloud/websites/docs.gridlabd.us/_topbar.html
+cloud/websites/docs.gridlabd.us/index.html
+cloud/websites/docs.gridlabd.us/logo.png
+cloud/websites/geodata.gridlabd.us/census/income_CA.csv
+cloud/websites/geodata.gridlabd.us/census/states.zip
+cloud/websites/geodata.gridlabd.us/census/zipcodes.py
+cloud/websites/geodata.gridlabd.us/census/zipcodes9.csv
+cloud/websites/geodata.gridlabd.us/index.html
+cloud/websites/geodata.gridlabd.us/update_elevation.py
+cloud/websites/geodata.gridlabd.us/update_utility.py
+cloud/websites/geodata.gridlabd.us/vegetation/index.html
+cloud/websites/geodata.gridlabd.us/vegetation/update_vegetation.py
+cloud/websites/geodata.gridlabd.us/vegetation/update_vegetation_xfh.py
+cloud/websites/install.gridlabd.us/.gitignore
+cloud/websites/install.gridlabd.us/README.md
+cloud/websites/install.gridlabd.us/build-image.sh
+cloud/websites/install.gridlabd.us/index.html
+cloud/websites/install.gridlabd.us/install.sh
+cloud/websites/install.gridlabd.us/snippets.txt
+cloud/websites/install.gridlabd.us/validate.sh
+cloud/websites/status.gridlabd.us/active.html
+cloud/websites/status.gridlabd.us/index.html
+cloud/websites/status.gridlabd.us/issues-open.html
+cloud/websites/status.gridlabd.us/pulls-closed.html
+cloud/websites/status.gridlabd.us/pulls-open.html
+cloud/websites/tutorials.gridlabd.us/index.html
+cloud/websites/tutorials.gridlabd.us/library.csv
+cloud/websites/tutorials.gridlabd.us/style.css
+cloud/websites/version.gridlabd.us/README.md
+cloud/websites/version.gridlabd.us/index.html
+cloud/websites/version.gridlabd.us/lambda/app.py
+cloud/websites/version.gridlabd.us/lambda/requirements.txt
+cloud/websites/version.gridlabd.us/robots.txt
+cloud/websites/version.gridlabd.us/terraform/main.tf
+cloud/websites/www.gridlabd.us/index.html
+configure.ac
+converters/.gitignore
+converters/Makefile.mk
+converters/README.md
+converters/autotest/.gitignore
+converters/autotest/IEEE-123-cyme.mdb
+converters/autotest/IEEE-123.glm
+converters/autotest/IEEE-123.tmy3
+converters/autotest/IEEE-13-cyme-modify.glm
+converters/autotest/IEEE-13-cyme-network.glm
+converters/autotest/IEEE-13-cyme-object.glm
+converters/autotest/IEEE-13-cyme-xy-coordinates.csv
+converters/autotest/IEEE-13-cyme.mdb
+converters/autotest/IEEE-13.glm
+converters/autotest/table2glm_input.csv
+converters/autotest/table2glm_input_noclass.csv
+converters/autotest/table2glm_input_noname.csv
+converters/autotest/test_config.csv
+converters/autotest/test_config.glm
+converters/autotest/test_config_opt.glm
+converters/autotest/test_csvgeodata2kml.csv
+converters/autotest/test_csvgeodata2kml.glm
+converters/autotest/test_csvgeodata2kml.kml
+converters/autotest/test_json2csv_profile.glm
+converters/autotest/test_json2html.glm
+converters/autotest/test_json2png_profile.glm
+converters/autotest/test_library.csv
+converters/autotest/test_library.glm
+converters/autotest/test_library_opt.glm
+converters/autotest/test_markdown.glm
+converters/autotest/test_mdb2glm_xy_coordinates_opt.glm
+converters/autotest/test_mdbtable2glm.glm
+converters/autotest/test_mdbtable2glmobject.glm
+converters/autotest/test_mdbtable2glmplayer.csv
+converters/autotest/test_mdbtable2glmplayer.glm
+converters/autotest/test_modify.csv
+converters/autotest/test_modify.glm
+converters/autotest/test_modify_opt.glm
+converters/autotest/test_noaa_weather.glm
+converters/autotest/test_object.csv
+converters/autotest/test_object.glm
+converters/autotest/test_object_opt.glm
+converters/autotest/test_onpoint_weather.glm
+converters/autotest/test_table2glm.glm
+converters/autotest/test_table2glm_err.glm
+converters/autotest/test_table2glm_noclass.glm
+converters/autotest/test_table2glm_noname.glm
+converters/autotest/test_visualcrossing_weather.glm
+converters/autotest/test_weather.csv
+converters/autotest/test_weather.glm
+converters/autotest/test_wecc240.glm
+converters/autotest/test_xls-spida2csv-geodata.csv
+converters/autotest/test_xls-spida2csv-geodata.glm
+converters/autotest/test_xls-spida2csv-geodata.xls
+converters/autotest/test_xls-spida2csv-network.csv
+converters/autotest/test_xls-spida2csv-network.glm
+converters/autotest/weather_recorder.csv
+converters/autotest/wecc240.glm
+converters/autotest/wecc240.raw
+converters/csv-ami2glm-ceus.py
+converters/csv-ami2glm-player.py
+converters/csv-ami2glm-rbsa.py
+converters/csv-ceus2glm-ceus.py
+converters/csv-config2glm-config.py
+converters/csv-dataframe2glm-modify.py
+converters/csv-geodata2kml.py
+converters/csv-ica2glm-ica.py
+converters/csv-modify2glm-modify.py
+converters/csv-noaa-weather2glm-weather.py
+converters/csv-onpoint-weather2glm-weather.py
+converters/csv-scada2glm-ceus.py
+converters/csv-scada2glm-rbsa.py
+converters/csv-schneider2glm-player.py
+converters/csv-table2glm-library.py
+converters/csv-table2glm-object.py
+converters/csv-visualcrossing-weather2glm-weather.py
+converters/csv2glm.py
+converters/cyme.py
+converters/glm2omd.py
+converters/gz2glm.py
+converters/json2csv-pandas.py
+converters/json2csv-profile.py
+converters/json2csv.py
+converters/json2glm.py
+converters/json2html.py
+converters/json2html_config.py
+converters/json2md.py
+converters/json2png-oneline.py
+converters/json2png.py
+converters/json2txt.py
+converters/json2zip.py
+converters/mdb-cyme2glm.py
+converters/mdb-table2glm-object.py
+converters/mdb-table2glm-player.py
+converters/mdb2glm.py
+converters/omd2glm.py
+converters/py2glm.py
+converters/raw2glm.py
+converters/tmy32glm.py
+converters/txt-cyme2glm.py
+converters/txt2glm.py
+converters/xls-spida2csv-geodata.py
+converters/xls2csv.py
+converters/xlsx-spida2csv-geodata.py
+converters/xlsx-workbook2csv-table.py
+converters/xlsx2csv.py
+converters/zip2glm.py
+docker/Dockerfile
+docker/Dockerfile.lambda
+docker/README.md
+docker/build.sh
+docker/gridlabd.sh
+docker/hooks/build
+docker/packer/Dockerfile.dev.ul
+docker/packer/Dockerfile.prod.ul
+docker/packer/prod.pkr.hcl
+docker/packer/templateDevelop.pkr.hcl
+docs/About Us.md
+docs/Cloud/AWS.md
+docs/Cloud/CircleCI.md
+docs/Cloud/GithubActions.md
+docs/Cloud/README.md
+docs/Command/Automatic export conversion.md
+docs/Command/Automatic import conversion.md
+docs/Command/Avlbalance.md
+docs/Command/Bothstdout.md
+docs/Command/Build-info.md
+docs/Command/Check.md
+docs/Command/Check_version.md
+docs/Command/Cite.md
+docs/Command/Clearmap.md
+docs/Command/Compile.md
+docs/Command/Copyright.md
+docs/Command/Daemon.md
+docs/Command/Debug.md
+docs/Command/Debugger.md
+docs/Command/Define.md
+docs/Command/Depends.md
+docs/Command/Dsttest.md
+docs/Command/Dumpall.md
+docs/Command/Endusetest.md
+docs/Command/Environment.md
+docs/Command/Example.md
+docs/Command/Formats.md
+docs/Command/Globaldump.md
+docs/Command/Globals.md
+docs/Command/Help.md
+docs/Command/Id.md
+docs/Command/Info.md
+docs/Command/Initialize.md
+docs/Command/JSON input.md
+docs/Command/JSON output.md
+docs/Command/Job.md
+docs/Command/Kml.md
+docs/Command/Libinfo.md
+docs/Command/Library.md
+docs/Command/License.md
+docs/Command/Loadshape.md
+docs/Command/Loadshapetest.md
+docs/Command/Locktest.md
+docs/Command/Mclassdef.md
+docs/Command/Modhelp.md
+docs/Command/Modlist.md
+docs/Command/Modtest.md
+docs/Command/Mt_profile.md
+docs/Command/Nprocs.md
+docs/Command/Origin.md
+docs/Command/Output.md
+docs/Command/Pause.md
+docs/Command/Pclear.md
+docs/Command/Pcontrol.md
+docs/Command/Pidfile.md
+docs/Command/Pkill.md
+docs/Command/Plist.md
+docs/Command/Printenv.md
+docs/Command/Profile.md
+docs/Command/Pstatus.md
+docs/Command/Python input.md
+docs/Command/Quiet.md
+docs/Command/README.md
+docs/Command/Randtest.md
+docs/Command/Redirect.md
+docs/Command/Relax.md
+docs/Command/Remote.md
+docs/Command/Rusage.md
+docs/Command/Sanitize.md
+docs/Command/Scheduletest.md
+docs/Command/Server.md
+docs/Command/Server_inaddr.md
+docs/Command/Server_portnum.md
+docs/Command/Setup.md
+docs/Command/Slave.md
+docs/Command/Slavenode.md
+docs/Command/Stream.md
+docs/Command/Sublime_syntax.md
+docs/Command/Template.md
+docs/Command/Test.md
+docs/Command/Testall.md
+docs/Command/Threadcount.md
+docs/Command/Unitstest.md
+docs/Command/Validate.md
+docs/Command/Verbose.md
+docs/Command/Version.md
+docs/Command/Warn.md
+docs/Command/Workdir.md
+docs/Command/Xmlencoding.md
+docs/Command/Xmlstrict.md
+docs/Command/Xsd.md
+docs/Command/Xsl.md
+docs/Converters/Import/Ami_data.md
+docs/Converters/Import/Ceus_data.md
+docs/Converters/Import/Config_data.md
+docs/Converters/Import/Csv_files.md
+docs/Converters/Import/Ica_data.md
+docs/Converters/Import/Mdb_files.md
+docs/Converters/Import/Modify_data.md
+docs/Converters/Import/Noaa_weather.md
+docs/Converters/Import/Onpoint_weather.md
+docs/Converters/Import/Psse_models.md
+docs/Converters/Import/PyPower_cases.md
+docs/Converters/Import/Rbsa_data.md
+docs/Converters/Import/SpidaCalc.md
+docs/Converters/Import/Table_data.md
+docs/Converters/Import/Tmy3_files.md
+docs/Converters/Import/Visualcrossing_weather.md
+docs/Converters/Import/Xls_files.md
+docs/Converters/Import/Zip_files.md
+docs/Converters/Output/Csv_files.md
+docs/Converters/Output/Html_files.md
+docs/Converters/Output/Markdown_docs.md
+docs/Converters/Output/Png_images.md
+docs/Converters/Output/Zip_archive.md
+docs/Converters/README.md
+docs/Developer/Class/Create.md
+docs/Developer/Class/Method.md
+docs/Developer/Install.md
+docs/Developer/Module/Create.md
+docs/Developer/Validation.md
+docs/Developers.md
+docs/Documentation.md
+docs/Features.md
+docs/GLM/Directive/Class.md
+docs/GLM/Directive/Clock.md
+docs/GLM/Directive/Dump.md
+docs/GLM/Directive/Extern.md
+docs/GLM/Directive/Filter.md
+docs/GLM/Directive/Global.md
+docs/GLM/Directive/Loader.md
+docs/GLM/Directive/Modify.md
+docs/GLM/Directive/Module.md
+docs/GLM/Directive/Object.md
+docs/GLM/Directive/Schedule.md
+docs/GLM/Directive/Script.md
+docs/GLM/General/Collection.md
+docs/GLM/General/Expansion.md
+docs/GLM/General/Functional.md
+docs/GLM/General/Inherit.md
+docs/GLM/General/Json.md
+docs/GLM/General/Random values.md
+docs/GLM/General/Range.md
+docs/GLM/Global/Expansion.md
+docs/GLM/Global/Filename.md
+docs/GLM/Global/Filepath.md
+docs/GLM/Global/Filetype.md
+docs/GLM/Global/Find.md
+docs/GLM/Global/Findfile.md
+docs/GLM/Global/Geocode.md
+docs/GLM/Global/Now.md
+docs/GLM/Global/Python.md
+docs/GLM/Global/Range.md
+docs/GLM/Global/Shell.md
+docs/GLM/Global/Tmpfile.md
+docs/GLM/Macro/Begin.md
+docs/GLM/Macro/Curl.md
+docs/GLM/Macro/Debug.md
+docs/GLM/Macro/Define.md
+docs/GLM/Macro/Error.md
+docs/GLM/Macro/Exec.md
+docs/GLM/Macro/For.md
+docs/GLM/Macro/Gridlabd.md
+docs/GLM/Macro/If.md
+docs/GLM/Macro/Ifdef.md
+docs/GLM/Macro/Ifexist.md
+docs/GLM/Macro/Ifmissing.md
+docs/GLM/Macro/Ifndef.md
+docs/GLM/Macro/Include.md
+docs/GLM/Macro/Input.md
+docs/GLM/Macro/Insert.md
+docs/GLM/Macro/On_exit.md
+docs/GLM/Macro/Option.md
+docs/GLM/Macro/Output.md
+docs/GLM/Macro/Print.md
+docs/GLM/Macro/Set.md
+docs/GLM/Macro/Setenv.md
+docs/GLM/Macro/Sleep.md
+docs/GLM/Macro/Start.md
+docs/GLM/Macro/Subcommand.md
+docs/GLM/Macro/System.md
+docs/GLM/Macro/Verbose.md
+docs/GLM/Macro/Version.md
+docs/GLM/Macro/Wait.md
+docs/GLM/Macro/Warning.md
+docs/GLM/Macro/Wget.md
+docs/GLM/Macro/Write.md
+docs/GLM/Object/Events.md
+docs/GLM/Property/Python.md
+docs/GLM/Property/Randomvar.md
+docs/GLM/Property/String.md
+docs/GLM/Property/Timestamp.md
+docs/Getting Started.md
+docs/Global/Allow_reinclude.md
+docs/Global/Autoclean.md
+docs/Global/Autostart_gui.md
+docs/Global/Bigranks.md
+docs/Global/Browser.md
+docs/Global/Check_version.md
+docs/Global/Checkpoint_file.md
+docs/Global/Checkpoint_interval.md
+docs/Global/Checkpoint_keepall.md
+docs/Global/Checkpoint_seqnum.md
+docs/Global/Checkpoint_type.md
+docs/Global/Client_allowed.md
+docs/Global/Clock.md
+docs/Global/Command_line.md
+docs/Global/Compileonly.md
+docs/Global/Complex_format.md
+docs/Global/Complex_output_format.md
+docs/Global/Converter load options.md
+docs/Global/Converter save options.md
+docs/Global/Country.md
+docs/Global/Curl_options.md
+docs/Global/Daemon_configfile.md
+docs/Global/Dateformat.md
+docs/Global/Debug.md
+docs/Global/Debugger.md
+docs/Global/Delta_current_clock.md
+docs/Global/Deltaclock.md
+docs/Global/Deltamode_allowed.md
+docs/Global/Deltamode_forced_always.md
+docs/Global/Deltamode_forced_extra_timesteps.md
+docs/Global/Deltamode_iteration_limit.md
+docs/Global/Deltamode_maximumtime.md
+docs/Global/Deltamode_timestep.md
+docs/Global/Deltamode_updateorder.md
+docs/Global/Double_format.md
+docs/Global/Dumpall.md
+docs/Global/Dumpfile.md
+docs/Global/Enter_realtime.md
+docs/Global/Environment.md
+docs/Global/Execdir.md
+docs/Global/Exename.md
+docs/Global/Exit_code.md
+docs/Global/Filename.md
+docs/Global/Filesave_options.md
+docs/Global/Force_compile.md
+docs/Global/Gdb.md
+docs/Global/Gdb_window.md
+docs/Global/Github.md
+docs/Global/Gitraw.md
+docs/Global/Glm_save_options.md
+docs/Global/Hostaddr.md
+docs/Global/Hostname.md
+docs/Global/Ignore_errors.md
+docs/Global/Include.md
+docs/Global/Infourl.md
+docs/Global/Init_max_defer.md
+docs/Global/Init_sequence.md
+docs/Global/Initializeonly.md
+docs/Global/Inline_block_size.md
+docs/Global/Iteration_limit.md
+docs/Global/Json_complex_format.md
+docs/Global/Keep_progress.md
+docs/Global/Kmlfile.md
+docs/Global/Kmlhost.md
+docs/Global/Literal_if.md
+docs/Global/Mainloop_state.md
+docs/Global/Master.md
+docs/Global/Master_port.md
+docs/Global/Maximum_runtime.md
+docs/Global/Maximum_synctime.md
+docs/Global/Minimum_timestep.md
+docs/Global/Modelname.md
+docs/Global/Module_compiler_flags.md
+docs/Global/Mt_analysis.md
+docs/Global/Multirun_conn.md
+docs/Global/Multirun_mode.md
+docs/Global/No_deprecate.md
+docs/Global/Nolocks.md
+docs/Global/Object_format.md
+docs/Global/Object_scan.md
+docs/Global/Object_tree_balance.md
+docs/Global/Organization.md
+docs/Global/Output_message_context.md
+docs/Global/Pauseat.md
+docs/Global/Pauseatexit.md
+docs/Global/Permissive_access.md
+docs/Global/Platform.md
+docs/Global/Profiler.md
+docs/Global/Progress.md
+docs/Global/Pythonpath.md
+docs/Global/Quiet.md
+docs/Global/Random_number_generator.md
+docs/Global/Randomseed.md
+docs/Global/Randomstate.md
+docs/Global/Realtime_metric.md
+docs/Global/Region.md
+docs/Global/Relax_naming_rules.md
+docs/Global/Relax_undefined_if.md
+docs/Global/Return_code.md
+docs/Global/Run_powerworld.md
+docs/Global/Run_realtime.md
+docs/Global/Runchecks.md
+docs/Global/Rusage_data.md
+docs/Global/Rusage_file.md
+docs/Global/Rusage_rate.md
+docs/Global/Sanitize.md
+docs/Global/Sanitize_index.md
+docs/Global/Sanitize_offset.md
+docs/Global/Sanitize_prefix.md
+docs/Global/Savefile.md
+docs/Global/Server_portnum.md
+docs/Global/Server_quit_on_close.md
+docs/Global/Show_progress.md
+docs/Global/Signal_timeout.md
+docs/Global/Simulation_mode.md
+docs/Global/Skipsafe.md
+docs/Global/Slave_id.md
+docs/Global/Slave_port.md
+docs/Global/Starttime.md
+docs/Global/Stoptime.md
+docs/Global/Streaming_io.md
+docs/Global/Strictnames.md
+docs/Global/Suppress_repeat_messages.md
+docs/Global/Svnroot.md
+docs/Global/Technology_readiness_level.md
+docs/Global/Test.md
+docs/Global/Testoutputfile.md
+docs/Global/Threadcount.md
+docs/Global/Timezone_locale.md
+docs/Global/Tmp.md
+docs/Global/Trace.md
+docs/Global/Urlbase.md
+docs/Global/Validate.md
+docs/Global/Validto_context.md
+docs/Global/Verbose.md
+docs/Global/Version_branch.md
+docs/Global/Version_build.md
+docs/Global/Version_major.md
+docs/Global/Version_minor.md
+docs/Global/Version_patch.md
+docs/Global/Warn.md
+docs/Global/Website.md
+docs/Global/Wget_options.md
+docs/Global/Workdir.md
+docs/Global/Xml_encoding.md
+docs/Home.md
+docs/Install/Amazon_EC2.md
+docs/Install/Docker.md
+docs/Install/Gridlabd_rc.md
+docs/Install/Windows.md
+docs/Install/macOS.md
+docs/Makefile.mk
+docs/Module/Assert.md
+docs/Module/Assert/Assert.md
+docs/Module/Assert/Complex_assert.md
+docs/Module/Assert/Double_assert.md
+docs/Module/Assert/Enum_assert.md
+docs/Module/Assert/Global/Message_flags.md
+docs/Module/Assert/Int_assert.md
+docs/Module/Behavior.md
+docs/Module/Behavior/Random.md
+docs/Module/Behavior/System.md
+docs/Module/Climate.md
+docs/Module/Climate/Climate.md
+docs/Module/Climate/Csv_reader.md
+docs/Module/Climate/Global/Library_path.md
+docs/Module/Climate/Global/Message_flags.md
+docs/Module/Climate/Weather.md
+docs/Module/Commercial.md
+docs/Module/Commercial/CEUS.md
+docs/Module/Commercial/Global/Message_flags.md
+docs/Module/Commercial/Global/Warn_control.md
+docs/Module/Commercial/Global/Warn_high_temp.md
+docs/Module/Commercial/Global/Warn_low_temp.md
+docs/Module/Commercial/Multizone.md
+docs/Module/Commercial/Office.md
+docs/Module/Commercial/Parking.md
+docs/Module/Generators.md
+docs/Module/Generators/Battery.md
+docs/Module/Generators/Central_dg_control.md
+docs/Module/Generators/Controller_dg.md
+docs/Module/Generators/Dc_dc_converter.md
+docs/Module/Generators/Diesel_dg.md
+docs/Module/Generators/Energy_storage.md
+docs/Module/Generators/Global/Deltamode_timestep.md
+docs/Module/Generators/Global/Enable_subsecond_models.md
+docs/Module/Generators/Global/Message_flags.md
+docs/Module/Generators/Inverter.md
+docs/Module/Generators/Inverter/volt_var_curve.jpg
+docs/Module/Generators/Microturbine.md
+docs/Module/Generators/Power_electronics.md
+docs/Module/Generators/Rectifier.md
+docs/Module/Generators/Solar.md
+docs/Module/Generators/Windturb_dg.md
+docs/Module/Industrial.md
+docs/Module/Industrial/Industrial.md
+docs/Module/Industrial/NAICS Data.md
+docs/Module/Influxdb.md
+docs/Module/Influxdb/Database.md
+docs/Module/Influxdb/Recorder.md
+docs/Module/Market.md
+docs/Module/Market/Auction.md
+docs/Module/Market/Controller.md
+docs/Module/Market/Generator_controller.md
+docs/Module/Market/Global/Bid_offset.md
+docs/Module/Market/Global/Message_flags.md
+docs/Module/Market/Passive_controller.md
+docs/Module/Market/Stub_bidder.md
+docs/Module/Market/Stubauction.md
+docs/Module/Market/Supervisory_control.md
+docs/Module/Mysql/Collector.md
+docs/Module/Mysql/Database.md
+docs/Module/Mysql/Import and Export.md
+docs/Module/Mysql/Player.md
+docs/Module/Mysql/Recorder.md
+docs/Module/Optimize.md
+docs/Module/Optimize/Cvx.md
+docs/Module/Optimize/Simple.md
+docs/Module/Powerflow.md
+docs/Module/Powerflow/Advanced_loads.md
+docs/Module/Powerflow/Agricultural.md
+docs/Module/Powerflow/Billdump.md
+docs/Module/Powerflow/Building.md
+docs/Module/Powerflow/Capacitor.md
+docs/Module/Powerflow/Currdump.md
+docs/Module/Powerflow/Ductbank.md
+docs/Module/Powerflow/Emissions.md
+docs/Module/Powerflow/Fault_check.md
+docs/Module/Powerflow/Frequency_gen.md
+docs/Module/Powerflow/Fuse.md
+docs/Module/Powerflow/Global/All_powerflow_delta.md
+docs/Module/Powerflow/Global/Convergence_error_handling.md
+docs/Module/Powerflow/Global/Current_frequency.md
+docs/Module/Powerflow/Global/Default_maximum_power_error.md
+docs/Module/Powerflow/Global/Default_maximum_voltage_error.md
+docs/Module/Powerflow/Global/Default_resistance.md
+docs/Module/Powerflow/Global/Deltamode_timestep.md
+docs/Module/Powerflow/Global/Enable_frequency_dependence.md
+docs/Module/Powerflow/Global/Enable_inrush.md
+docs/Module/Powerflow/Global/Enable_mesh_fault_current.md
+docs/Module/Powerflow/Global/Enable_subsecond_models.md
+docs/Module/Powerflow/Global/Fault_impedance.md
+docs/Module/Powerflow/Global/Geographic_degree.md
+docs/Module/Powerflow/Global/Ground_impedance.md
+docs/Module/Powerflow/Global/Line_capacitance.md
+docs/Module/Powerflow/Global/Line_limits.md
+docs/Module/Powerflow/Global/Low_voltage_impedance_level.md
+docs/Module/Powerflow/Global/Lu_solver.md
+docs/Module/Powerflow/Global/Market_price_name.md
+docs/Module/Powerflow/Global/Master_frequency_update.md
+docs/Module/Powerflow/Global/Maximum_voltage_error.md
+docs/Module/Powerflow/Global/Message_flags.md
+docs/Module/Powerflow/Global/Nominal_frequency.md
+docs/Module/Powerflow/Global/Nr_admit_change.md
+docs/Module/Powerflow/Global/Nr_deltamode_iteration_limit.md
+docs/Module/Powerflow/Global/Nr_iteration_limit.md
+docs/Module/Powerflow/Global/Nr_matrix_file.md
+docs/Module/Powerflow/Global/Nr_matrix_output_interval.md
+docs/Module/Powerflow/Global/Nr_matrix_output_references.md
+docs/Module/Powerflow/Global/Nr_superlu_procs.md
+docs/Module/Powerflow/Global/Primary_voltage_ratio.md
+docs/Module/Powerflow/Global/Require_voltage_control.md
+docs/Module/Powerflow/Global/Show_matrix_values.md
+docs/Module/Powerflow/Global/Solver_dump_enable.md
+docs/Module/Powerflow/Global/Solver_headers.md
+docs/Module/Powerflow/Global/Solver_method.md
+docs/Module/Powerflow/Global/Solver_ml_config.md
+docs/Module/Powerflow/Global/Solver_profile_csv.md
+docs/Module/Powerflow/Global/Solver_profile_enable.md
+docs/Module/Powerflow/Global/Solver_profile_filename.md
+docs/Module/Powerflow/Global/Solver_profile_headers_included.md
+docs/Module/Powerflow/Global/Violation_active.md
+docs/Module/Powerflow/Global/Violation_count.md
+docs/Module/Powerflow/Global/Violation_record.md
+docs/Module/Powerflow/Global/Violation_watchset.md
+docs/Module/Powerflow/Global/Warning_overfrequency.md
+docs/Module/Powerflow/Global/Warning_overvoltage.md
+docs/Module/Powerflow/Global/Warning_underfrequency.md
+docs/Module/Powerflow/Global/Warning_undervoltage.md
+docs/Module/Powerflow/Global/Warning_voltageangle.md
+docs/Module/Powerflow/Impedance_dump.md
+docs/Module/Powerflow/Industrial.md
+docs/Module/Powerflow/Line.md
+docs/Module/Powerflow/Line_configuration.md
+docs/Module/Powerflow/Line_spacing.md
+docs/Module/Powerflow/Link.md
+docs/Module/Powerflow/Load.md
+docs/Module/Powerflow/Load_tracker.md
+docs/Module/Powerflow/Meter.md
+docs/Module/Powerflow/Motor.md
+docs/Module/Powerflow/Node.md
+docs/Module/Powerflow/Overhead_line.md
+docs/Module/Powerflow/Overhead_line_conductor.md
+docs/Module/Powerflow/Pole.md
+docs/Module/Powerflow/Pole_configuration.md
+docs/Module/Powerflow/Pole_mount.md
+docs/Module/Powerflow/Power_metrics.md
+docs/Module/Powerflow/Powerflow_library.md
+docs/Module/Powerflow/Powerflow_object.md
+docs/Module/Powerflow/Pqload.md
+docs/Module/Powerflow/Public_service.md
+docs/Module/Powerflow/Recloser.md
+docs/Module/Powerflow/Regulator.md
+docs/Module/Powerflow/Regulator_configuration.md
+docs/Module/Powerflow/Restoration.md
+docs/Module/Powerflow/Sectionalizer.md
+docs/Module/Powerflow/Series_reactor.md
+docs/Module/Powerflow/Solver configuration.md
+docs/Module/Powerflow/Solvers/Python_solver.md
+docs/Module/Powerflow/Substation.md
+docs/Module/Powerflow/Switch.md
+docs/Module/Powerflow/Switch_coordinator.md
+docs/Module/Powerflow/Transformer.md
+docs/Module/Powerflow/Transformer_configuration.md
+docs/Module/Powerflow/Triplex_line.md
+docs/Module/Powerflow/Triplex_line_conductor.md
+docs/Module/Powerflow/Triplex_line_configuration.md
+docs/Module/Powerflow/Triplex_load.md
+docs/Module/Powerflow/Triplex_meter.md
+docs/Module/Powerflow/Triplex_node.md
+docs/Module/Powerflow/Underground_line.md
+docs/Module/Powerflow/Underground_line_conductor.md
+docs/Module/Powerflow/Vfd.md
+docs/Module/Powerflow/Volt_var_control.md
+docs/Module/Powerflow/Voltdump.md
+docs/Module/Pypower.md
+docs/Module/Pypower/Geodata.md
+docs/Module/Pypower/Load.md
+docs/Module/Pypower/Powerline.md
+docs/Module/Pypower/Powerplant.md
+docs/Module/Pypower/Relay.md
+docs/Module/Pypower/Scada.md
+docs/Module/Pypower/Transformer.md
+docs/Module/Pypower/Weather.md
+docs/Module/Python.md
+docs/Module/Python/Property.md
+docs/Module/Python/Tutorial.md
+docs/Module/Python/Tutorial_figure_1.png
+docs/Module/Python/Tutorial_figure_2.png
+docs/Module/Python/Tutorial_figure_3.png
+docs/Module/Python/Tutorial_figure_4.png
+docs/Module/Random.md
+docs/Module/Reliability.md
+docs/Module/Reliability/Cost.md
+docs/Module/Reliability/Eventgen.md
+docs/Module/Reliability/Global/Deltamode_timestep.md
+docs/Module/Reliability/Global/Enable_subsecond_models.md
+docs/Module/Reliability/Global/Maximum_event_length.md
+docs/Module/Reliability/Global/Message_Flags.md
+docs/Module/Reliability/Global/Report_event_log.md
+docs/Module/Reliability/Metrics.md
+docs/Module/Residential.md
+docs/Module/Residential/Appliance.md
+docs/Module/Residential/Clotheswasher.md
+docs/Module/Residential/Dishwasher.md
+docs/Module/Residential/Dryer.md
+docs/Module/Residential/Evcharger.md
+docs/Module/Residential/Evcharger_Det.md
+docs/Module/Residential/Freezer.md
+docs/Module/Residential/Global/All_house_delta.md
+docs/Module/Residential/Global/Ansi_voltage_check.md
+docs/Module/Residential/Global/Aux_cutin_temperature.md
+docs/Module/Residential/Global/Curtailment_active.md
+docs/Module/Residential/Global/Curtailment_enduses.md
+docs/Module/Residential/Global/Default_etp_iterations.md
+docs/Module/Residential/Global/Default_humidity.md
+docs/Module/Residential/Global/Default_line_current.md
+docs/Module/Residential/Global/Default_line_voltage.md
+docs/Module/Residential/Global/Default_outdoor_temperature.md
+docs/Module/Residential/Global/Default_solar.md
+docs/Module/Residential/Global/Deltamode_timestep.md
+docs/Module/Residential/Global/Enable_subsecond_models.md
+docs/Module/Residential/Global/House_high_temperature_warning.md
+docs/Module/Residential/Global/House_low_temperature_warning.md
+docs/Module/Residential/Global/Implicit_enduse_source.md
+docs/Module/Residential/Global/Implicit_enduses.md
+docs/Module/Residential/Global/Message_flags.md
+docs/Module/Residential/Global/Paneldump.md
+docs/Module/Residential/Global/Paneldump_filename.md
+docs/Module/Residential/Global/Paneldump_interval.md
+docs/Module/Residential/Global/Paneldump_resolution.md
+docs/Module/Residential/Global/Sump_humidity_factor.md
+docs/Module/Residential/Global/Sump_rainfall_factor.md
+docs/Module/Residential/Global/Sump_snowmelt_factor.md
+docs/Module/Residential/Global/System_dwell_time.md
+docs/Module/Residential/Global/Thermostat_control_warning.md
+docs/Module/Residential/House.md
+docs/Module/Residential/House_Fuse.md
+docs/Module/Residential/Lights.md
+docs/Module/Residential/Microwave.md
+docs/Module/Residential/Occupantload.md
+docs/Module/Residential/Plugload.md
+docs/Module/Residential/RBSA.md
+docs/Module/Residential/Range.md
+docs/Module/Residential/Refrigerator.md
+docs/Module/Residential/Residential_enduse.md
+docs/Module/Residential/Thermal_storage.md
+docs/Module/Residential/Waterheater.md
+docs/Module/Residential/Zipload.md
+docs/Module/Resilience/Cost.md
+docs/Module/Resilience/Impact.md
+docs/Module/Resilience/Metrics.md
+docs/Module/Resilience/Outage.md
+docs/Module/Revenue/Billing.md
+docs/Module/Revenue/Tariff.md
+docs/Module/Tape.md
+docs/Module/Tape/Collector.md
+docs/Module/Tape/Global/Csv_data_only.md
+docs/Module/Tape/Global/Csv_header_type.md
+docs/Module/Tape/Global/Csv_keep_clean.md
+docs/Module/Tape/Global/Delta_mode_needed.md
+docs/Module/Tape/Global/Flush_interval.md
+docs/Module/Tape/Global/Gnuplot_path.md
+docs/Module/Tape/Group_recorder.md
+docs/Module/Tape/Histogram.md
+docs/Module/Tape/Metrics_collector.md
+docs/Module/Tape/Metrics_collector_writer.md
+docs/Module/Tape/Multi_recorder.md
+docs/Module/Tape/Multiplayer.md
+docs/Module/Tape/Player.md
+docs/Module/Tape/Recorder.md
+docs/Module/Tape/Shaper.md
+docs/Module/Tape/Violation_recorder.md
+docs/News.md
+docs/README.md
+docs/Resources.md
+docs/Server/Apps.md
+docs/Server/Control.md
+docs/Server/Find.md
+docs/Server/Modify.md
+docs/Server/Output.md
+docs/Server/REST API.md
+docs/Server/Read.md
+docs/Server/Runtime.md
+docs/Sponsors.md
+docs/Subcommand/Aws.md
+docs/Subcommand/Building.md
+docs/Subcommand/Check.md
+docs/Subcommand/Compare.md
+docs/Subcommand/Contributors.md
+docs/Subcommand/Convert.md
+docs/Subcommand/Docker.md
+docs/Subcommand/Docs.md
+docs/Subcommand/Gdb.md
+docs/Subcommand/Geodata.md
+docs/Subcommand/Git.md
+docs/Subcommand/Help.md
+docs/Subcommand/Insights.md
+docs/Subcommand/Job.md
+docs/Subcommand/Json-get.md
+docs/Subcommand/Library.md
+docs/Subcommand/Lldb.md
+docs/Subcommand/Loaddata.md
+docs/Subcommand/Manual.md
+docs/Subcommand/Matrix/Absolute.md
+docs/Subcommand/Matrix/Add.md
+docs/Subcommand/Matrix/Angle.md
+docs/Subcommand/Matrix/Arange.md
+docs/Subcommand/Matrix/Arccos.md
+docs/Subcommand/Matrix/Arccosh.md
+docs/Subcommand/Matrix/Arcsin.md
+docs/Subcommand/Matrix/Arcsinh.md
+docs/Subcommand/Matrix/Arctan.md
+docs/Subcommand/Matrix/Arctan2.md
+docs/Subcommand/Matrix/Arctanh.md
+docs/Subcommand/Matrix/Around.md
+docs/Subcommand/Matrix/Cbrt.md
+docs/Subcommand/Matrix/Ceil.md
+docs/Subcommand/Matrix/Clip.md
+docs/Subcommand/Matrix/Conj.md
+docs/Subcommand/Matrix/Conjugate.md
+docs/Subcommand/Matrix/Convolve.md
+docs/Subcommand/Matrix/Copy.md
+docs/Subcommand/Matrix/Copysign.md
+docs/Subcommand/Matrix/Cos.md
+docs/Subcommand/Matrix/Cosh.md
+docs/Subcommand/Matrix/Cross.md
+docs/Subcommand/Matrix/Cumprod.md
+docs/Subcommand/Matrix/Cumsum.md
+docs/Subcommand/Matrix/Deg2Rad.md
+docs/Subcommand/Matrix/Degrees.md
+docs/Subcommand/Matrix/Diff.md
+docs/Subcommand/Matrix/Divide.md
+docs/Subcommand/Matrix/Divmod.md
+docs/Subcommand/Matrix/Dot.md
+docs/Subcommand/Matrix/Exp.md
+docs/Subcommand/Matrix/Exp2.md
+docs/Subcommand/Matrix/Expm1.md
+docs/Subcommand/Matrix/Eye.md
+docs/Subcommand/Matrix/Fabs.md
+docs/Subcommand/Matrix/Fix.md
+docs/Subcommand/Matrix/Float_Power.md
+docs/Subcommand/Matrix/Floor.md
+docs/Subcommand/Matrix/Floor_Divide.md
+docs/Subcommand/Matrix/Fmax.md
+docs/Subcommand/Matrix/Fmin.md
+docs/Subcommand/Matrix/Fmod.md
+docs/Subcommand/Matrix/Frexp.md
+docs/Subcommand/Matrix/Gcd.md
+docs/Subcommand/Matrix/Gradient.md
+docs/Subcommand/Matrix/Heaviside.md
+docs/Subcommand/Matrix/Hstack.md
+docs/Subcommand/Matrix/Hypot.md
+docs/Subcommand/Matrix/I0.md
+docs/Subcommand/Matrix/Identity.md
+docs/Subcommand/Matrix/Imag.md
+docs/Subcommand/Matrix/Interp.md
+docs/Subcommand/Matrix/Lcm.md
+docs/Subcommand/Matrix/Ldexp.md
+docs/Subcommand/Matrix/Linalg/Cholesky.md
+docs/Subcommand/Matrix/Linalg/Cond.md
+docs/Subcommand/Matrix/Linalg/Det.md
+docs/Subcommand/Matrix/Linalg/Eig.md
+docs/Subcommand/Matrix/Linalg/Eigh.md
+docs/Subcommand/Matrix/Linalg/Eigvals.md
+docs/Subcommand/Matrix/Linalg/Eigvalsh.md
+docs/Subcommand/Matrix/Linalg/Inv.md
+docs/Subcommand/Matrix/Linalg/Lstsq.md
+docs/Subcommand/Matrix/Linalg/Matrix_Rank.md
+docs/Subcommand/Matrix/Linalg/Norm.md
+docs/Subcommand/Matrix/Linalg/Pinv.md
+docs/Subcommand/Matrix/Linalg/Qr.md
+docs/Subcommand/Matrix/Linalg/Slogdet.md
+docs/Subcommand/Matrix/Linalg/Solve.md
+docs/Subcommand/Matrix/Linalg/Svd.md
+docs/Subcommand/Matrix/Log.md
+docs/Subcommand/Matrix/Log10.md
+docs/Subcommand/Matrix/Log1P.md
+docs/Subcommand/Matrix/Log2.md
+docs/Subcommand/Matrix/Logaddexp.md
+docs/Subcommand/Matrix/Logaddexp2.md
+docs/Subcommand/Matrix/Matlib/Rand.md
+docs/Subcommand/Matrix/Matlib/Randn.md
+docs/Subcommand/Matrix/Matlib/Repmat.md
+docs/Subcommand/Matrix/Matrix/All.md
+docs/Subcommand/Matrix/Matrix/Any.md
+docs/Subcommand/Matrix/Matrix/Argmax.md
+docs/Subcommand/Matrix/Matrix/Argmin.md
+docs/Subcommand/Matrix/Matrix/Argpartition.md
+docs/Subcommand/Matrix/Matrix/Argsort.md
+docs/Subcommand/Matrix/Matrix/Astype.md
+docs/Subcommand/Matrix/Matrix/Byteswap.md
+docs/Subcommand/Matrix/Matrix/Choose.md
+docs/Subcommand/Matrix/Matrix/Clip.md
+docs/Subcommand/Matrix/Matrix/Compress.md
+docs/Subcommand/Matrix/Matrix/Conj.md
+docs/Subcommand/Matrix/Matrix/Conjugate.md
+docs/Subcommand/Matrix/Matrix/Cumprod.md
+docs/Subcommand/Matrix/Matrix/Cumsum.md
+docs/Subcommand/Matrix/Matrix/Diagonal.md
+docs/Subcommand/Matrix/Matrix/Dot.md
+docs/Subcommand/Matrix/Matrix/Fill.md
+docs/Subcommand/Matrix/Matrix/Flatten.md
+docs/Subcommand/Matrix/Matrix/Getfield.md
+docs/Subcommand/Matrix/Matrix/Geth.md
+docs/Subcommand/Matrix/Matrix/Geti.md
+docs/Subcommand/Matrix/Matrix/Gett.md
+docs/Subcommand/Matrix/Matrix/Item.md
+docs/Subcommand/Matrix/Matrix/Itemset.md
+docs/Subcommand/Matrix/Matrix/Max.md
+docs/Subcommand/Matrix/Matrix/Mean.md
+docs/Subcommand/Matrix/Matrix/Min.md
+docs/Subcommand/Matrix/Matrix/Nonzero.md
+docs/Subcommand/Matrix/Matrix/Partition.md
+docs/Subcommand/Matrix/Matrix/Prod.md
+docs/Subcommand/Matrix/Matrix/Ptp.md
+docs/Subcommand/Matrix/Matrix/Put.md
+docs/Subcommand/Matrix/Matrix/Ravel.md
+docs/Subcommand/Matrix/Matrix/Repeat.md
+docs/Subcommand/Matrix/Matrix/Reshape.md
+docs/Subcommand/Matrix/Matrix/Resize.md
+docs/Subcommand/Matrix/Matrix/Round.md
+docs/Subcommand/Matrix/Matrix/Searchsorted.md
+docs/Subcommand/Matrix/Matrix/Setfield.md
+docs/Subcommand/Matrix/Matrix/Sort.md
+docs/Subcommand/Matrix/Matrix/Squeeze.md
+docs/Subcommand/Matrix/Matrix/Std.md
+docs/Subcommand/Matrix/Matrix/Sum.md
+docs/Subcommand/Matrix/Matrix/Swapaxes.md
+docs/Subcommand/Matrix/Matrix/Take.md
+docs/Subcommand/Matrix/Matrix/Trace.md
+docs/Subcommand/Matrix/Matrix/Transpose.md
+docs/Subcommand/Matrix/Matrix/Var.md
+docs/Subcommand/Matrix/Maximum.md
+docs/Subcommand/Matrix/Minimum.md
+docs/Subcommand/Matrix/Mod.md
+docs/Subcommand/Matrix/Modf.md
+docs/Subcommand/Matrix/Multiply.md
+docs/Subcommand/Matrix/Nancumprod.md
+docs/Subcommand/Matrix/Nancumsum.md
+docs/Subcommand/Matrix/Nanprod.md
+docs/Subcommand/Matrix/Nansum.md
+docs/Subcommand/Matrix/Negative.md
+docs/Subcommand/Matrix/Nextafter.md
+docs/Subcommand/Matrix/Ones.md
+docs/Subcommand/Matrix/Positive.md
+docs/Subcommand/Matrix/Power.md
+docs/Subcommand/Matrix/Prod.md
+docs/Subcommand/Matrix/Rad2Deg.md
+docs/Subcommand/Matrix/Radians.md
+docs/Subcommand/Matrix/Random/Choice.md
+docs/Subcommand/Matrix/Random/Normal.md
+docs/Subcommand/Matrix/Random/Rand.md
+docs/Subcommand/Matrix/Random/Randint.md
+docs/Subcommand/Matrix/Random/Randn.md
+docs/Subcommand/Matrix/Random/Random.md
+docs/Subcommand/Matrix/Random/Random_Sample.md
+docs/Subcommand/Matrix/Random/Ranf.md
+docs/Subcommand/Matrix/Random/Sample.md
+docs/Subcommand/Matrix/Real.md
+docs/Subcommand/Matrix/Real_If_Close.md
+docs/Subcommand/Matrix/Reciprocal.md
+docs/Subcommand/Matrix/Remainder.md
+docs/Subcommand/Matrix/Rint.md
+docs/Subcommand/Matrix/Round_.md
+docs/Subcommand/Matrix/Savetxt.md
+docs/Subcommand/Matrix/Sign.md
+docs/Subcommand/Matrix/Signbit.md
+docs/Subcommand/Matrix/Sin.md
+docs/Subcommand/Matrix/Sinc.md
+docs/Subcommand/Matrix/Sinh.md
+docs/Subcommand/Matrix/Spacing.md
+docs/Subcommand/Matrix/Sqrt.md
+docs/Subcommand/Matrix/Square.md
+docs/Subcommand/Matrix/Subtract.md
+docs/Subcommand/Matrix/Sum.md
+docs/Subcommand/Matrix/Tan.md
+docs/Subcommand/Matrix/Tanh.md
+docs/Subcommand/Matrix/Trace.md
+docs/Subcommand/Matrix/Transpose.md
+docs/Subcommand/Matrix/Trapz.md
+docs/Subcommand/Matrix/True_Divide.md
+docs/Subcommand/Matrix/Trunc.md
+docs/Subcommand/Matrix/Unwrap.md
+docs/Subcommand/Matrix/Vstack.md
+docs/Subcommand/Matrix/Zeros.md
+docs/Subcommand/Openfido.md
+docs/Subcommand/Plot.md
+docs/Subcommand/Python.md
+docs/Subcommand/Require.md
+docs/Subcommand/Shell.md
+docs/Subcommand/Template.md
+docs/Subcommand/Timezone.md
+docs/Subcommand/Trace.md
+docs/Subcommand/Valgrind.md
+docs/Subcommand/Validate.md
+docs/Subcommand/Version.md
+docs/Subcommand/Weather.md
+docs/Tips and tricks/Saving_randomseed.md
+docs/Tools/Create_filter.md
+docs/Tools/Create_player.md
+docs/Tools/Create_poles.md
+docs/Tools/Edit.md
+docs/Tools/Fire_danger.md
+docs/Tools/Fire_report.md
+docs/Tools/Framework.md
+docs/Tools/Glutils.md
+docs/Tools/Location.md
+docs/Tools/Makefile.mk
+docs/Tools/Mapping.md
+docs/Tools/Market_data.md
+docs/Tools/Market_model.md
+docs/Tools/Metar2glm.md
+docs/Tools/Meteostat_weather.md
+docs/Tools/Moutils.md
+docs/Tools/Network.md
+docs/Tools/Noaa_forecast.md
+docs/Tools/Nsrdb_weather.md
+docs/Tools/Resource.md
+docs/Tools/Rest_client.md
+docs/Tools/Rest_server.md
+docs/Tools/Unitcalc.md
+docs/Tutorials/Geodata.md
+docs/Tutorials/Python shadow class tutorial.ipynb
+docs/Tutorials/Python tutorial (events).ipynb
+docs/Tutorials/Python tutorial (module).ipynb
+docs/Tutorials/Theory.md
+docs/Tutorials/Using_EIA_RECS_data.md
+docs/Tutorials/developer/accessor.py
+docs/Tutorials/developer/example.glm
+docs/Tutorials/developer/session7_1.glm
+docs/Tutorials/developer/session7_2.glm
+docs/Tutorials/developer/session7_2.py
+docs/Tutorials/developer/session8.ipynb
+docs/Tutorials/models/CA-San_Francisco_Intl_Ap.glm
+docs/Tutorials/models/gridlabd.conf
+docs/Tutorials/models/house_0.glm
+docs/Tutorials/models/house_0_temperature.csv
+docs/Tutorials/models/house_0_temperature.png
+docs/Tutorials/models/house_1.glm
+docs/Tutorials/models/meter_0.glm
+docs/Tutorials/models/meter_0_energy.csv
+docs/Tutorials/models/meter_0_energy.png
+docs/Tutorials/models/meter_1.glm
+docs/Tutorials/models/model_0.glm
+docs/Tutorials/models/model_1.glm
+docs/Tutorials/models/model_100.glm
+docs/Tutorials/models/record_0.glm
+docs/Tutorials/models/record_1.glm
+docs/Tutorials/models/test.glm
+docs/Tutorials/models/thermostat.py
+docs/Use cases/Hosting capacity.md
+docs/Use cases/Machine learning powerflow/Buechler et al, Machine Learning-Based Power Flow Solver, 2020.pdf
+docs/Use cases/Machine learning powerflow/Introduction.md
+docs/Use cases/Machine learning powerflow/Powell et al, Fast Solutions in Power System Simulation, submitted to HICSS, 15-June-2019.pdf
+docs/Use cases/README.md
+docs/Use cases/Resilience.md
+docs/Use cases/Tariff Design.md
+docs/User manual/0 - Cover/0 - Front matter.md
+docs/User manual/0 - Cover/1 - Contents.md
+docs/User manual/0 - Cover/2 - Preface.md
+docs/User manual/1 - Introduction/1 - Getting Started.md
+docs/User manual/1 - Introduction/2 - Theory of Operation.md
+docs/User manual/1 - Introduction/3 - Creating GLM Files.md
+docs/User manual/1 - Introduction/4 - Data Collection.md
+docs/User manual/1 - Introduction/5 - Programming in GridLAB-D.md
+docs/User manual/1 - Introduction/6 - Extending GridLAB-D.md
+docs/User manual/2 - Designing GridLAB-D Models/1 - Introduction.md
+docs/User manual/2 - Designing GridLAB-D Models/2 - Modules.md
+docs/User manual/2 - Designing GridLAB-D Models/3 - Classes.md
+docs/User manual/2 - Designing GridLAB-D Models/4 - Event Handlers.md
+docs/User manual/2 - Designing GridLAB-D Models/5 - Template.md
+docs/User manual/2 - Designing GridLAB-D Models/6 - Documentation.md
+docs/User manual/3 - Managing GridLAB-D Systems/1 - Workstation Setup.md
+docs/User manual/3 - Managing GridLAB-D Systems/2 - GridLAB-D Servers.md
+docs/User manual/3 - Managing GridLAB-D Systems/3 - GridLAB-D Cloud Operations.md
+docs/User manual/A - Use cases/1 - Hosting Capacity Analysis.md
+docs/User manual/A - Use cases/2 - Resilience Analysis.md
+docs/User manual/A - Use cases/3 - Tariff Design Analysis.md
+docs/User manual/A - Use cases/4 - Electrification Impact Analysis.md
+docs/User manual/B - Modules/1 - Climate.md
+docs/User manual/B - Modules/2 - Power systems.md
+docs/User manual/B - Modules/3 - Generators.md
+docs/User manual/B - Modules/4 - Loads.md
+docs/User manual/B - Modules/5 - Reliability.md
+docs/User manual/B - Modules/6 - Revenue.md
+docs/User manual/B - Modules/7 - Resilience.md
+docs/_footer.md
+docs/_header.md
+docs/cec-logo.png
+docs/doe-logo.png
+docs/gismo-logo.png
+docs/gridlabd.tex
+docs/makemd.py
+docs/slac-logo.png
+docs/stanford-logo.png
+docs/update_html.py
+docs/update_pdf.sh
+documents/.gitignore
+documents/Powell et al, Fast Solutions in Power Systems Simulation through Coupling with a Data Driven Power Flow Model for Voltage Estimation (2019).pdf
+documents/gridlabd.glm
+documents/index.html
+doxygen/README.md
+doxygen/footer.html
+doxygen/gridlabd.conf
+geodata/Makefile.mk
+geodata/README.md
+geodata/autotest/test_datasets.glm
+geodata/autotest/unittest.sh
+geodata/geodata_address.py
+geodata/geodata_census.py
+geodata/geodata_distance.py
+geodata/geodata_elevation.py
+geodata/geodata_firerisk.py
+geodata/geodata_powerline.py
+geodata/geodata_powerline_cabletypes.csv
+geodata/geodata_utility.py
+geodata/geodata_vegetation.py
+geodata/geodata_weather.py
+gridlabd.spec.in
+image/.gitignore
+image/README.md
+image/create.sh
+install.sh
+install/README.md
+install/ubuntu_20.sh
+install/ubuntu_22.sh
+m4/.gitignore
+m4/README.md
+m4/ax_lib_superlu.m4
+m4/ax_lib_xerces.m4
+m4/ax_prog_doxygen.m4
+m4/ax_pthread.m4
+m4/ax_with_curses.m4
+m4/gcc_ct_features.m4
+m4/gld_builtins.m4
+m4/gld_flag_parse.m4
+m4/gld_get_nprocs.m4
+module/Makefile.mk
+module/assert/Makefile.mk
+module/assert/assert.cpp
+module/assert/assert.h
+module/assert/autotest/test_assert.glm
+module/assert/autotest/test_assert_group.glm
+module/assert/autotest/test_assert_hold.glm
+module/assert/autotest/test_assert_hold_err.glm
+module/assert/autotest/test_assert_start_err.glm
+module/assert/autotest/test_complex_assert.glm
+module/assert/autotest/test_complex_assert_angle_err.glm
+module/assert/autotest/test_complex_assert_imaginary_err.glm
+module/assert/autotest/test_complex_assert_magnitude_err.glm
+module/assert/autotest/test_complex_assert_real_err.glm
+module/assert/autotest/test_double_assert.glm
+module/assert/autotest/test_double_assert_err.glm
+module/assert/autotest/test_enum_assert.glm
+module/assert/autotest/test_enum_assert_err.glm
+module/assert/autotest/test_int_assert.glm
+module/assert/complex_assert.cpp
+module/assert/complex_assert.h
+module/assert/double_assert.cpp
+module/assert/double_assert.h
+module/assert/enum_assert.cpp
+module/assert/enum_assert.h
+module/assert/init.cpp
+module/assert/int_assert.cpp
+module/assert/int_assert.h
+module/assert/main.cpp
+module/behavior/Makefile.mk
+module/behavior/autotest/test_connection.glm
+module/behavior/autotest/test_device.glm
+module/behavior/autotest/test_random.glm
+module/behavior/autotest/test_random_CLAMP.csv
+module/behavior/autotest/test_random_NONE.csv
+module/behavior/autotest/test_random_RETRY.csv
+module/behavior/autotest/test_system.glm
+module/behavior/behavior.cpp
+module/behavior/behavior.h
+module/behavior/random.cpp
+module/behavior/random.h
+module/behavior/system.cpp
+module/behavior/system.h
+module/climate/Makefile.mk
+module/climate/autotest/cloud_insolation.player
+module/climate/autotest/cloud_insolation_tmy3.player
+module/climate/autotest/test_WA-Yakima-tmy3.glm
+module/climate/autotest/test_cloud_tmy3_opt.glm
+module/climate/autotest/test_csvreader_dst.glm
+module/climate/autotest/test_csvreader_exercise_5_1_2.glm
+module/climate/autotest/test_singleHouseSolarInverter.glm
+module/climate/autotest/test_solar_opt.glm
+module/climate/autotest/weather.csv
+module/climate/autotest/weather_dst.csv
+module/climate/climate.cpp
+module/climate/climate.h
+module/climate/csv_reader.cpp
+module/climate/csv_reader.h
+module/climate/init.cpp
+module/climate/main.cpp
+module/climate/solar_angles.cpp
+module/climate/solar_angles.h
+module/climate/weather.cpp
+module/climate/weather.h
+module/climate/weather_reader.cpp
+module/climate/weather_reader.h
+module/commercial/Makefile.mk
+module/commercial/autotest/FCZ01_AOFF.csv
+module/commercial/autotest/FCZ01_AWHS.csv
+module/commercial/autotest/FCZ01_COLL.csv
+module/commercial/autotest/FCZ01_GROC.csv
+module/commercial/autotest/FCZ01_HLTH.csv
+module/commercial/autotest/FCZ01_LODG.csv
+module/commercial/autotest/FCZ01_LOFF.csv
+module/commercial/autotest/FCZ01_MISC.csv
+module/commercial/autotest/FCZ01_REFW.csv
+module/commercial/autotest/FCZ01_REST.csv
+module/commercial/autotest/FCZ01_RETL.csv
+module/commercial/autotest/FCZ01_SCHL.csv
+module/commercial/autotest/FCZ01_SOFF.csv
+module/commercial/autotest/energy_f.player
+module/commercial/autotest/energy_pf.player
+module/commercial/autotest/generic_demand.glt
+module/commercial/autotest/generic_demand_pf.glt
+module/commercial/autotest/load_f.player
+module/commercial/autotest/load_heatgain.player
+module/commercial/autotest/load_pf.player
+module/commercial/autotest/office_assert.player
+module/commercial/autotest/office_energy.player
+module/commercial/autotest/office_hvac_ECON_assert.player
+module/commercial/autotest/office_hvac_energy.player
+module/commercial/autotest/office_interior_temp.player
+module/commercial/autotest/test_ceus.glm
+module/commercial/autotest/test_ceus_gasheat.glm
+module/commercial/autotest/test_ceus_saveplots.py
+module/commercial/autotest/test_commercial_HVAC_load_pf_opt.glm
+module/commercial/autotest/test_commercial_Qi.glm
+module/commercial/autotest/test_commercial_const_air_temp.glm
+module/commercial/autotest/test_commercial_cooling_cop_sanity_err.glm
+module/commercial/autotest/test_commercial_energy_opt.glm
+module/commercial/autotest/test_commercial_exterior_ua_sanity_err.glm
+module/commercial/autotest/test_commercial_floor_area_sanity_err.glm
+module/commercial/autotest/test_commercial_floor_height_sanity_err.glm
+module/commercial/autotest/test_commercial_heating_cop_sanity_err.glm
+module/commercial/autotest/test_commercial_hvac_AUX_load_opt.glm
+module/commercial/autotest/test_commercial_hvac_COOL_load_opt.glm
+module/commercial/autotest/test_commercial_hvac_ECON_load_opt.glm
+module/commercial/autotest/test_commercial_hvac_HEAT_load_opt.glm
+module/commercial/autotest/test_commercial_hvac_OFF_load_opt.glm
+module/commercial/autotest/test_commercial_hvac_VENT_load_opt.glm
+module/commercial/autotest/test_commercial_hvac_air_temp.glm
+module/commercial/autotest/test_commercial_hvac_air_temp2.glm
+module/commercial/autotest/test_commercial_hvac_energy_opt.glm
+module/commercial/autotest/test_commercial_hvac_heat_cap_sanity_err.glm
+module/commercial/autotest/test_commercial_interior_mass_sanity_err.glm
+module/commercial/autotest/test_commercial_interior_ua_sanity_err.glm
+module/commercial/autotest/test_commercial_lights_energy_f.glm
+module/commercial/autotest/test_commercial_lights_energy_pf_opt.glm
+module/commercial/autotest/test_commercial_lights_heatgains_opt.glm
+module/commercial/autotest/test_commercial_lights_load_f.glm
+module/commercial/autotest/test_commercial_lights_load_pf.glm
+module/commercial/autotest/test_commercial_mass_temperature_opt.glm
+module/commercial/autotest/test_commercial_plugs_energy_f.glm
+module/commercial/autotest/test_commercial_plugs_energy_pf_opt.glm
+module/commercial/autotest/test_commercial_plugs_heatgains.glm
+module/commercial/autotest/test_commercial_plugs_load_f.glm
+module/commercial/autotest/test_commercial_plugs_load_pf.glm
+module/commercial/autotest/test_commercial_temp_deadband_sanity_err.glm
+module/commercial/autotest/test_commercial_temp_setpoints_sanity_err.glm
+module/commercial/autotest/test_commercial_total_load_opt.glm
+module/commercial/autotest/test_parking.csv
+module/commercial/autotest/test_parking.glm
+module/commercial/autotest/test_parking_meter.csv
+module/commercial/ceus.cpp
+module/commercial/ceus.h
+module/commercial/commercial.h
+module/commercial/docs/Parking.ipynb
+module/commercial/hvac.cpp
+module/commercial/hvac.h
+module/commercial/init.cpp
+module/commercial/main.cpp
+module/commercial/multizone.cpp
+module/commercial/multizone.h
+module/commercial/office.cpp
+module/commercial/office.h
+module/commercial/parking.cpp
+module/commercial/parking.h
+module/commercial/solvers.cpp
+module/commercial/solvers.h
+module/connection/Makefile.mk
+module/connection/autotest/test_fncs_msg_client.glm
+module/connection/autotest/test_json_client.glm
+module/connection/autotest/test_json_server.glm
+module/connection/autotest/test_native_client.glm
+module/connection/autotest/test_native_server.glm
+module/connection/autotest/test_xml_client.glm
+module/connection/autotest/test_xml_server.glm
+module/connection/cache.cpp
+module/connection/cache.h
+module/connection/client.cpp
+module/connection/client.h
+module/connection/connection.cpp
+module/connection/connection.h
+module/connection/fncs_msg.cpp
+module/connection/fncs_msg.h
+module/connection/init.cpp
+module/connection/jsmn.c
+module/connection/jsmn.h
+module/connection/json.cpp
+module/connection/json.h
+module/connection/json_link/__init__.py
+module/connection/json_link/bin/__init__.py
+module/connection/json_link/bin/json_link_tester.py
+module/connection/json_link/doc/html/_modules/index.html
+module/connection/json_link/doc/html/_modules/json_link/bin/json_link_tester.html
+module/connection/json_link/doc/html/_modules/json_link/faults/fault_inject.html
+module/connection/json_link/doc/html/_modules/json_link/json_link.html
+module/connection/json_link/doc/html/_modules/json_link/json_link/json_link.html
+module/connection/json_link/doc/html/_modules/json_link/json_link/raw_xchg.html
+module/connection/json_link/doc/html/_modules/json_link/test/fault_inject.html
+module/connection/json_link/doc/html/_modules/json_link/test/json_link_tester.html
+module/connection/json_link/doc/html/_modules/json_link/xchg/raw_xchg.html
+module/connection/json_link/doc/html/_sources/index.txt
+module/connection/json_link/doc/html/_sources/json_link.bin.txt
+module/connection/json_link/doc/html/_sources/json_link.faults.txt
+module/connection/json_link/doc/html/_sources/json_link.json_link.txt
+module/connection/json_link/doc/html/_sources/json_link.test.txt
+module/connection/json_link/doc/html/_sources/json_link.txt
+module/connection/json_link/doc/html/_sources/json_link.xchg.txt
+module/connection/json_link/doc/html/_sources/modules.txt
+module/connection/json_link/doc/html/_static/ajax-loader.gif
+module/connection/json_link/doc/html/_static/basic.css
+module/connection/json_link/doc/html/_static/comment-bright.png
+module/connection/json_link/doc/html/_static/comment-close.png
+module/connection/json_link/doc/html/_static/comment.png
+module/connection/json_link/doc/html/_static/contents.png
+module/connection/json_link/doc/html/_static/default.css
+module/connection/json_link/doc/html/_static/doctools.js
+module/connection/json_link/doc/html/_static/down-pressed.png
+module/connection/json_link/doc/html/_static/down.png
+module/connection/json_link/doc/html/_static/file.png
+module/connection/json_link/doc/html/_static/jquery.js
+module/connection/json_link/doc/html/_static/minus.png
+module/connection/json_link/doc/html/_static/navigation.png
+module/connection/json_link/doc/html/_static/plus.png
+module/connection/json_link/doc/html/_static/pygments.css
+module/connection/json_link/doc/html/_static/searchtools.js
+module/connection/json_link/doc/html/_static/sidebar.js
+module/connection/json_link/doc/html/_static/sphinxdoc.css
+module/connection/json_link/doc/html/_static/underscore.js
+module/connection/json_link/doc/html/_static/up-pressed.png
+module/connection/json_link/doc/html/_static/up.png
+module/connection/json_link/doc/html/_static/websupport.js
+module/connection/json_link/doc/html/genindex.html
+module/connection/json_link/doc/html/index.html
+module/connection/json_link/doc/html/json_link.bin.html
+module/connection/json_link/doc/html/json_link.faults.html
+module/connection/json_link/doc/html/json_link.html
+module/connection/json_link/doc/html/json_link.json_link.html
+module/connection/json_link/doc/html/json_link.test.html
+module/connection/json_link/doc/html/json_link.xchg.html
+module/connection/json_link/doc/html/modules.html
+module/connection/json_link/doc/html/objects.inv
+module/connection/json_link/doc/html/py-modindex.html
+module/connection/json_link/doc/html/search.html
+module/connection/json_link/doc/html/searchindex.js
+module/connection/json_link/doc/make.bat
+module/connection/json_link/doc/source/conf.py
+module/connection/json_link/doc/source/index.rst
+module/connection/json_link/doc/source/json_link.bin.rst
+module/connection/json_link/doc/source/json_link.faults.rst
+module/connection/json_link/doc/source/json_link.rst
+module/connection/json_link/doc/source/json_link.test.rst
+module/connection/json_link/doc/source/json_link.xchg.rst
+module/connection/json_link/faults/__init__.py
+module/connection/json_link/faults/fault_inject.py
+module/connection/json_link/json_link.py
+module/connection/json_link/test/__init__.py
+module/connection/json_link/test/test_json_link.py
+module/connection/json_link/xchg/__init__.py
+module/connection/json_link/xchg/raw_xchg.py
+module/connection/json_link_demo.py
+module/connection/main.cpp
+module/connection/message.h
+module/connection/native.cpp
+module/connection/native.h
+module/connection/server.cpp
+module/connection/server.h
+module/connection/socket.cpp
+module/connection/socket.h
+module/connection/tcp.cpp
+module/connection/tcp.h
+module/connection/transport.cpp
+module/connection/transport.h
+module/connection/udp.cpp
+module/connection/udp.h
+module/connection/validate.no
+module/connection/varmap.cpp
+module/connection/varmap.h
+module/connection/xml.cpp
+module/connection/xml.h
+module/generators/Makefile.mk
+module/generators/autotest/CDGCLoad.player
+module/generators/autotest/MPINV_OUT1.player
+module/generators/autotest/Standard_Weather.csv
+module/generators/autotest/VSI_droop_VA.csv
+module/generators/autotest/VSI_droop_frequency.csv
+module/generators/autotest/VSI_isochronous_VA.csv
+module/generators/autotest/VSI_isochronous_droop_VA.csv
+module/generators/autotest/Yakima_Insolation.player
+module/generators/autotest/Yakima_ambient_temperature.player
+module/generators/autotest/Yakima_wind_speed.player
+module/generators/autotest/cdgc_test_meter_power_assert.player
+module/generators/autotest/constantPFmeterPower_multi_efficiency.player
+module/generators/autotest/constantPFmeterPower_static_efficiency.player
+module/generators/autotest/constantPQ_PV.csv
+module/generators/autotest/constantPQ_PV_VA.csv
+module/generators/autotest/constantPQ_battery_VA.csv
+module/generators/autotest/constantPQ_diesel_dg.csv
+module/generators/autotest/constantPQ_diesel_dg_speed.csv
+module/generators/autotest/constantPQmeterPower_multi_efficiency.player
+module/generators/autotest/constantPQmeterPower_static_efficiency.player
+module/generators/autotest/constantP_PV_VA.csv
+module/generators/autotest/constantP_battery_VA.csv
+module/generators/autotest/constantP_diesel_dg_speed.csv
+module/generators/autotest/constantQ_PV.csv
+module/generators/autotest/constantQ_PV_VA.csv
+module/generators/autotest/constantQ_battery_VA.csv
+module/generators/autotest/constantQ_diesel_dg_speed.csv
+module/generators/autotest/data_Bus1_voltageA.csv
+module/generators/autotest/data_G1SpeedAssert.csv
+module/generators/autotest/data_PID_inverter_current_A.csv
+module/generators/autotest/data_PID_inverter_current_B.csv
+module/generators/autotest/data_PID_inverter_current_C.csv
+module/generators/autotest/data_PI_inverter_current_A.csv
+module/generators/autotest/data_PI_inverter_current_B.csv
+module/generators/autotest/data_PI_inverter_current_C.csv
+module/generators/autotest/data_error_Bus1_voltageA.csv
+module/generators/autotest/data_error_G1SpeedAssert.csv
+module/generators/autotest/data_inv_voltage_player_A_test.csv
+module/generators/autotest/data_inv_voltage_player_B_test.csv
+module/generators/autotest/data_inv_voltage_player_C_test.csv
+module/generators/autotest/default_solar_Insolation.player
+module/generators/autotest/default_solar_VA_out.player
+module/generators/autotest/diesel_brake_hp.player
+module/generators/autotest/diesel_deltamode_load_player_A.csv
+module/generators/autotest/diesel_deltamode_load_player_A_1Gen.player
+module/generators/autotest/diesel_deltamode_load_player_A_1Gen_2.player
+module/generators/autotest/diesel_deltamode_load_player_A_1Gen_3.player
+module/generators/autotest/diesel_deltamode_load_player_B.csv
+module/generators/autotest/diesel_deltamode_load_player_B_1Gen.player
+module/generators/autotest/diesel_deltamode_load_player_B_1Gen_2.player
+module/generators/autotest/diesel_deltamode_load_player_B_1Gen_3.player
+module/generators/autotest/diesel_deltamode_load_player_C.csv
+module/generators/autotest/diesel_deltamode_load_player_C_1Gen.player
+module/generators/autotest/diesel_deltamode_load_player_C_1Gen_2.player
+module/generators/autotest/diesel_deltamode_load_player_C_1Gen_3.player
+module/generators/autotest/fixed_20_S_VA_out.player
+module/generators/autotest/fixed_45_E_VA_out.player
+module/generators/autotest/fixed_45_N_VA_out.player
+module/generators/autotest/fixed_45_S_Insolation.player
+module/generators/autotest/fixed_45_S_VA_out.player
+module/generators/autotest/fixed_45_S_shading_Insolation_15min.player
+module/generators/autotest/fixed_45_S_shading_VA_out_15min.player
+module/generators/autotest/fixed_45_W_VA_out.player
+module/generators/autotest/fixed_90_S_Insolation.player
+module/generators/autotest/fixed_90_S_VA_out.player
+module/generators/autotest/fqm_constant_pq_power.player
+module/generators/autotest/fqm_constant_pq_soc.player
+module/generators/autotest/fqm_constant_pq_status.player
+module/generators/autotest/fqm_group_lf_batt633_power.player
+module/generators/autotest/fqm_group_lf_batt684_power.player
+module/generators/autotest/fqm_group_lf_load.player
+module/generators/autotest/fqm_group_lf_status.player
+module/generators/autotest/fqm_pf_reg_load.player
+module/generators/autotest/fqm_pf_reg_power.player
+module/generators/autotest/fqm_pf_reg_status.player
+module/generators/autotest/inv_loadflow_battery_soc_out.player
+module/generators/autotest/inv_loadflow_meter_measured_power_imag.player
+module/generators/autotest/inv_loadflow_meter_measured_power_real.player
+module/generators/autotest/inverter_VA_out_default_solar.player
+module/generators/autotest/mltpt_efficiency_inverter_VA_out.player
+module/generators/autotest/solar_Vout.player
+module/generators/autotest/solar_playerval_VA_Out.player
+module/generators/autotest/substationSwitch_diesel_dg_speed.csv
+module/generators/autotest/test_2droop_VSI_err.glm
+module/generators/autotest/test_4quad_inv_modes_PF_PQ_default_efficiency.glm
+module/generators/autotest/test_4quad_inv_modes_PF_PQ_multipoint_efficiency.glm
+module/generators/autotest/test_PMSG_windturb.glm
+module/generators/autotest/test_Vout_PV.glm
+module/generators/autotest/test_Vout_PV_solar_no_Parent.glm
+module/generators/autotest/test_central_dg_control.glm
+module/generators/autotest/test_diesel_dg.glm
+module/generators/autotest/test_fqm_constant_pq.glm
+module/generators/autotest/test_fqm_group_lf.glm
+module/generators/autotest/test_fqm_pf_reg.glm
+module/generators/autotest/test_generators_inverter_volt_var.glm
+module/generators/autotest/test_generators_inverter_volt_var_voltageA.player
+module/generators/autotest/test_generators_inverter_volt_var_voltageB.player
+module/generators/autotest/test_generators_inverter_volt_var_voltageC.player
+module/generators/autotest/test_generators_inverter_vv_output_A.player
+module/generators/autotest/test_generators_inverter_vv_output_B.player
+module/generators/autotest/test_generators_inverter_vv_output_C.player
+module/generators/autotest/test_inverter_loadfollow_FBS.glm
+module/generators/autotest/test_inverter_loadfollow_NR.glm
+module/generators/autotest/test_multipoint_inverter.glm
+module/generators/autotest/test_solar_climate_default_playerval.glm
+module/generators/autotest/test_solar_orientation.glm
+module/generators/autotest/test_solar_output_efficiency.glm
+module/generators/autotest/test_solar_parent_err.glm
+module/generators/autotest/test_solar_shading.glm
+module/generators/autotest/test_solar_tilt.glm
+module/generators/autotest/test_windturbine_FBS.glm
+module/generators/autotest/test_windturbine_NR.glm
+module/generators/autotest/trigger.player
+module/generators/autotest/windpower_assert.player
+module/generators/battery.cpp
+module/generators/battery.h
+module/generators/central_dg_control.cpp
+module/generators/central_dg_control.h
+module/generators/controller_dg.cpp
+module/generators/controller_dg.h
+module/generators/dc_dc_converter.cpp
+module/generators/dc_dc_converter.h
+module/generators/diesel_dg.cpp
+module/generators/diesel_dg.h
+module/generators/energy_storage.cpp
+module/generators/energy_storage.h
+module/generators/generators.h
+module/generators/init.cpp
+module/generators/inverter.cpp
+module/generators/inverter.h
+module/generators/main.cpp
+module/generators/microturbine.cpp
+module/generators/microturbine.h
+module/generators/power_electronics.cpp
+module/generators/power_electronics.h
+module/generators/rectifier.cpp
+module/generators/rectifier.h
+module/generators/solar.cpp
+module/generators/solar.h
+module/generators/windturb_dg.cpp
+module/generators/windturb_dg.h
+module/industrial/Makefile.mk
+module/industrial/autotest/test_industrial.csv
+module/industrial/autotest/test_industrial.glm
+module/industrial/autotest/test_industrial_variable.csv
+module/industrial/autotest/test_industrial_variable.glm
+module/industrial/data/MECS2014_Table_11-1.xlsx
+module/industrial/data/MECS2014_Table_5-1.xlsx
+module/industrial/data/MECS2014_Table_9-1.xlsx
+module/industrial/data/config.py
+module/industrial/data/mecs.py
+module/industrial/data/mecs_data.csv
+module/industrial/data/nerc_data.csv
+module/industrial/industrial.cpp
+module/industrial/industrial.h
+module/industrial/init.cpp
+module/industrial/naics_data_file.csv
+module/influxdb/Makefile.mk
+module/influxdb/autotest/test_local_database.glm
+module/influxdb/collector.cpp
+module/influxdb/collector.h
+module/influxdb/database.cpp
+module/influxdb/database.h
+module/influxdb/influxdb.cpp
+module/influxdb/influxdb.h
+module/influxdb/jsondata.h
+module/influxdb/player.cpp
+module/influxdb/player.h
+module/influxdb/recorder.cpp
+module/influxdb/recorder.h
+module/influxdb/validate.no
+module/market/Makefile.mk
+module/market/auction.cpp
+module/market/auction.h
+module/market/autotest/ColumbusWeather2009_Correct.csv
+module/market/autotest/Elasticity_Multiplier_Critical_With_Two_TierCPP.player
+module/market/autotest/Elasticity_Multiplier_NonCritical_With_Three_TierCPP.player
+module/market/autotest/Elasticity_Multiplier_NonCritical_With_Two_TierCPP.player
+module/market/autotest/Elasticity_Multiplier_Three_Tier_Price.player
+module/market/autotest/Elasticity_Multiplier_Two_Tier_Price.player
+module/market/autotest/Price_Changing.player
+module/market/autotest/Price_Static.player
+module/market/autotest/TOU_Pricing.player
+module/market/autotest/TOU_Pricing_2Tier_OnlyCritical.glm
+module/market/autotest/TOU_Pricing_2Tier_OnlyCritical.player
+module/market/autotest/TOU_Pricing_2Tier_OnlyHigh.player
+module/market/autotest/TOU_Pricing_3Tier.player
+module/market/autotest/appliance_schedules.glm
+module/market/autotest/dutycycle_CPP_player.player
+module/market/autotest/dutycycle_TOU_player.player
+module/market/autotest/lastP_static.player
+module/market/autotest/negative_price_bids.player
+module/market/autotest/negative_quantity_bids.player
+module/market/autotest/repeated_bids.player
+module/market/autotest/test_Zip_Load_Elasticity_Model_Critical_Three_Tier_Price.glm
+module/market/autotest/test_Zip_Load_Elasticity_Model_Critical_Two_Tier_Price.glm
+module/market/autotest/test_Zip_Load_Elasticity_Model_NonCritical_With_Three_TierCPP.glm
+module/market/autotest/test_Zip_Load_Elasticity_Model_NonCritical_With_Two_TierCPP.glm
+module/market/autotest/test_controller_override.glm
+module/market/autotest/test_controller_override_is_COOL_on.player
+module/market/autotest/test_controller_override_value.player
+module/market/autotest/test_dutycycle_CPP.glm
+module/market/autotest/test_dutycycle_TOU.glm
+module/market/autotest/test_market_auction_advanced_1.glm
+module/market/autotest/test_market_auction_clearing_3.glm
+module/market/autotest/test_market_auction_clearing_6_morebuyers.glm
+module/market/autotest/test_market_auction_clearing_6_moresellers.glm
+module/market/autotest/test_market_auction_timing_1.glm
+module/market/autotest/test_market_auction_timing_2.glm
+module/market/autotest/test_market_auction_timing_4.glm
+module/market/autotest/test_market_auction_timing_5.glm
+module/market/autotest/test_market_exercise_4_4_1.glm
+module/market/autotest/test_market_passive_controller_RAMP_mode_matching_period.glm
+module/market/autotest/test_market_passive_controller_RAMP_mode_nonmatching_period.glm
+module/market/autotest/test_market_quantity_conversion.glm
+module/market/autotest/test_markets_auction_buyer_rebid.glm
+module/market/autotest/test_markets_auction_buyer_seller_alt.glm
+module/market/autotest/test_markets_auction_buyers_first.glm
+module/market/autotest/test_markets_auction_cases_4_and_5.glm
+module/market/autotest/test_markets_auction_large_balanced_exact.glm
+module/market/autotest/test_markets_auction_large_unbalanced_bid_resubmissions.glm
+module/market/autotest/test_markets_auction_large_unbalanced_exact.glm
+module/market/autotest/test_markets_auction_large_unbalanced_failure.glm
+module/market/autotest/test_markets_auction_large_unbalanced_marginal_buyer.glm
+module/market/autotest/test_markets_auction_large_unbalanced_marginal_price.glm
+module/market/autotest/test_markets_auction_large_unbalanced_marginal_seller.glm
+module/market/autotest/test_markets_auction_large_unbalanced_no_buyers_null.glm
+module/market/autotest/test_markets_auction_large_unbalanced_no_sellers_null.glm
+module/market/autotest/test_markets_auction_large_unbalanced_null.glm
+module/market/autotest/test_markets_auction_negative_all_quantities.glm
+module/market/autotest/test_markets_auction_negative_buyer_and_seller_price.glm
+module/market/autotest/test_markets_auction_negative_buyer_price.glm
+module/market/autotest/test_markets_auction_negative_buyer_quantity.glm
+module/market/autotest/test_markets_auction_negative_price_bids.glm
+module/market/autotest/test_markets_auction_negative_quantity_bids.glm
+module/market/autotest/test_markets_auction_negative_seller_price.glm
+module/market/autotest/test_markets_auction_negative_seller_quantity.glm
+module/market/autotest/test_markets_auction_no_buyers.glm
+module/market/autotest/test_markets_auction_no_sellers.glm
+module/market/autotest/test_markets_auction_null_market.glm
+module/market/autotest/test_markets_auction_repeated_bids.glm
+module/market/autotest/test_markets_auction_seller_buyer_alt.glm
+module/market/autotest/test_markets_auction_seller_rebid.glm
+module/market/autotest/test_markets_auction_sellers_first.glm
+module/market/autotest/test_markets_auction_simultaneous.glm
+module/market/autotest/test_markets_auction_unresponsive_buyer_failure.glm
+module/market/autotest/test_markets_controller_cooling_deadband_matching_period.glm
+module/market/autotest/test_markets_controller_cooling_inelastic_double.glm
+module/market/autotest/test_markets_controller_cooling_inelastic_matching_period.glm
+module/market/autotest/test_markets_controller_cooling_inelastic_nonmatching_periods.glm
+module/market/autotest/test_markets_controller_heating_deadband_matching_period.glm
+module/market/autotest/test_markets_controller_heating_inelastic_double.glm
+module/market/autotest/test_markets_controller_heating_inelastic_matching_period.glm
+module/market/autotest/test_markets_controller_heating_inelastic_nonmatching_period.glm
+module/market/autotest/test_markets_stubauction_opt.glm
+module/market/autotest/test_opt_markets_auction_large_balanced_marginal_buyer.glm
+module/market/autotest/test_opt_markets_auction_large_balanced_marginal_price.glm
+module/market/autotest/test_opt_markets_auction_large_balanced_marginal_seller.glm
+module/market/autotest/test_skew_DST_fall.glm
+module/market/autotest/test_skew_DST_spring.glm
+module/market/autotest/test_skew_leap_years.glm
+module/market/autotest/test_skew_year_transitions.glm
+module/market/autotest/test_stubauction.glm
+module/market/autotest/test_unitless_bid_quantity_err.glm
+module/market/bid.cpp
+module/market/bid.h
+module/market/collect.cpp
+module/market/collect.h
+module/market/controller.cpp
+module/market/controller.h
+module/market/controller2.cpp
+module/market/controller2.h
+module/market/curve.cpp
+module/market/curve.h
+module/market/double_controller.cpp
+module/market/double_controller.h
+module/market/generator_controller.cpp
+module/market/generator_controller.h
+module/market/init.cpp
+module/market/main.cpp
+module/market/market.h
+module/market/passive_controller.cpp
+module/market/passive_controller.h
+module/market/stub_bidder.cpp
+module/market/stub_bidder.h
+module/market/stubauction.cpp
+module/market/stubauction.h
+module/market/supervisory_control.cpp
+module/market/supervisory_control.h
+module/mysql/Makefile.mk
+module/mysql/autotest/test_mysql_collector.glm
+module/mysql/autotest/test_mysql_player.csv
+module/mysql/autotest/test_mysql_player.glm
+module/mysql/autotest/test_mysql_player_init.sql
+module/mysql/autotest/test_mysql_recorder.glm
+module/mysql/autotest/test_mysql_recorder_init.sql
+module/mysql/autotest/test_mysql_recorder_sync.sql
+module/mysql/autotest/test_mysql_recorder_term.sql
+module/mysql/collector.cpp
+module/mysql/collector.h
+module/mysql/database.cpp
+module/mysql/database.h
+module/mysql/init.cpp
+module/mysql/main.cpp
+module/mysql/mysql.vcproj
+module/mysql/player.cpp
+module/mysql/player.h
+module/mysql/recorder.cpp
+module/mysql/recorder.h
+module/mysql/validate.no
+module/optimize/Makefile.mk
+module/optimize/autotest/.gitignore
+module/optimize/autotest/test_case118_opf.glm
+module/optimize/autotest/test_case118_opf.txt
+module/optimize/autotest/test_case118_opt.py
+module/optimize/autotest/test_case14_opf.glm
+module/optimize/autotest/test_case14_opf.txt
+module/optimize/autotest/test_case14_opt.py
+module/optimize/autotest/test_case30_opf.glm
+module/optimize/autotest/test_case30_opf.txt
+module/optimize/autotest/test_case30_opt.py
+module/optimize/autotest/test_case39_opf.glm
+module/optimize/autotest/test_case39_opf.txt
+module/optimize/autotest/test_case39_opt.py
+module/optimize/autotest/test_case57_opf.glm
+module/optimize/autotest/test_case57_opf.txt
+module/optimize/autotest/test_case57_opt.py
+module/optimize/autotest/test_cvx.glm
+module/optimize/autotest/test_cvx.txt
+module/optimize/autotest/test_extremum_opt.glm
+module/optimize/autotest/test_maximum_err.glm
+module/optimize/autotest/test_minimum.glm
+module/optimize/autotest/test_opf.glm
+module/optimize/cvx.cpp
+module/optimize/cvx.h
+module/optimize/examples/.gitignore
+module/optimize/examples/case14.py
+module/optimize/examples/example1.glm
+module/optimize/examples/example2.glm
+module/optimize/examples/example3.glm
+module/optimize/examples/example3.txt
+module/optimize/main.cpp
+module/optimize/optimize.h
+module/optimize/particle_swarm_optimization.cpp
+module/optimize/particle_swarm_optimization.h
+module/optimize/simple.cpp
+module/optimize/simple.h
+module/powerflow/.gitignore
+module/powerflow/Makefile.mk
+module/powerflow/OHLConductors.glm
+module/powerflow/agricultural.cpp
+module/powerflow/agricultural.h
+module/powerflow/autotest/.gitignore
+module/powerflow/autotest/IEEE_13_node_impedance_dump.glm
+module/powerflow/autotest/PSV.player
+module/powerflow/autotest/SPIM_frequency.player
+module/powerflow/autotest/SPIM_override.player
+module/powerflow/autotest/SPIM_power_assert.player
+module/powerflow/autotest/SPIM_reconnect_assert.player
+module/powerflow/autotest/SPIM_status_assert.player
+module/powerflow/autotest/SPIM_trip_assert.player
+module/powerflow/autotest/SPIM_voltage.player
+module/powerflow/autotest/SPIM_wr_assert.player
+module/powerflow/autotest/billing_power.player
+module/powerflow/autotest/cap_current_A_indiv_volt.player
+module/powerflow/autotest/cap_current_B_indiv_volt.player
+module/powerflow/autotest/cap_current_C_indiv_volt.player
+module/powerflow/autotest/cap_manual_switch.player
+module/powerflow/autotest/cap_volt_A_BANK_VAR_dwell.player
+module/powerflow/autotest/cap_volt_A_bank_dwell.player
+module/powerflow/autotest/cap_volt_A_indiv_VAR.player
+module/powerflow/autotest/cap_volt_A_indiv_VAR_B_NR.player
+module/powerflow/autotest/cap_volt_A_indiv_VAR_NR.player
+module/powerflow/autotest/cap_volt_A_indiv_VAR_dwell.player
+module/powerflow/autotest/cap_volt_A_indiv_VAR_dwell_NR.player
+module/powerflow/autotest/cap_volt_A_indiv_VOLTVAR.player
+module/powerflow/autotest/cap_volt_A_indiv_VOLTVAR_NR.player
+module/powerflow/autotest/cap_volt_A_indiv_VOLTVAR_dwell.player
+module/powerflow/autotest/cap_volt_A_indiv_dwell.player
+module/powerflow/autotest/cap_volt_A_indiv_dwell_NR.player
+module/powerflow/autotest/cap_volt_A_indiv_volt.player
+module/powerflow/autotest/cap_volt_A_indiv_volt_NR.player
+module/powerflow/autotest/cap_volt_A_indiv_volt_NR_Y.player
+module/powerflow/autotest/cap_volt_A_manual_ts.player
+module/powerflow/autotest/cap_volt_B_BANK_VAR_dwell.player
+module/powerflow/autotest/cap_volt_B_bank_dwell.player
+module/powerflow/autotest/cap_volt_B_indiv_VAR.player
+module/powerflow/autotest/cap_volt_B_indiv_VAR_B_NR.player
+module/powerflow/autotest/cap_volt_B_indiv_VAR_NR.player
+module/powerflow/autotest/cap_volt_B_indiv_VAR_dwell.player
+module/powerflow/autotest/cap_volt_B_indiv_VAR_dwell_NR.player
+module/powerflow/autotest/cap_volt_B_indiv_VOLTVAR.player
+module/powerflow/autotest/cap_volt_B_indiv_VOLTVAR_NR.player
+module/powerflow/autotest/cap_volt_B_indiv_VOLTVAR_dwell.player
+module/powerflow/autotest/cap_volt_B_indiv_dwell.player
+module/powerflow/autotest/cap_volt_B_indiv_dwell_NR.player
+module/powerflow/autotest/cap_volt_B_indiv_volt.player
+module/powerflow/autotest/cap_volt_B_indiv_volt_NR.player
+module/powerflow/autotest/cap_volt_B_indiv_volt_NR_Y.player
+module/powerflow/autotest/cap_volt_B_manual_ts.player
+module/powerflow/autotest/cap_volt_C_BANK_VAR_dwell.player
+module/powerflow/autotest/cap_volt_C_bank_dwell.player
+module/powerflow/autotest/cap_volt_C_indiv_VAR.player
+module/powerflow/autotest/cap_volt_C_indiv_VAR_B_NR.player
+module/powerflow/autotest/cap_volt_C_indiv_VAR_NR.player
+module/powerflow/autotest/cap_volt_C_indiv_VAR_dwell.player
+module/powerflow/autotest/cap_volt_C_indiv_VAR_dwell_NR.player
+module/powerflow/autotest/cap_volt_C_indiv_VOLTVAR.player
+module/powerflow/autotest/cap_volt_C_indiv_VOLTVAR_NR.player
+module/powerflow/autotest/cap_volt_C_indiv_VOLTVAR_dwell.player
+module/powerflow/autotest/cap_volt_C_indiv_dwell.player
+module/powerflow/autotest/cap_volt_C_indiv_dwell_NR.player
+module/powerflow/autotest/cap_volt_C_indiv_volt.player
+module/powerflow/autotest/cap_volt_C_indiv_volt_NR.player
+module/powerflow/autotest/cap_volt_C_indiv_volt_NR_Y.player
+module/powerflow/autotest/cap_volt_C_manual_ts.player
+module/powerflow/autotest/center_tapped_basic_energy.player
+module/powerflow/autotest/center_tapped_complex_energy.player
+module/powerflow/autotest/controller_1_armed.player
+module/powerflow/autotest/controller_1_method.player
+module/powerflow/autotest/controller_1_status.player
+module/powerflow/autotest/data_SPIM_Vset.player
+module/powerflow/autotest/data_SPIM_triplex_measured_phaseA.csv
+module/powerflow/autotest/data_SPIM_triplex_measured_phaseB.csv
+module/powerflow/autotest/data_SPIM_triplex_measured_phaseC.csv
+module/powerflow/autotest/data_SPIM_triplex_motor_A_speed.csv
+module/powerflow/autotest/data_SPIM_triplex_motor_B_speed.csv
+module/powerflow/autotest/data_SPIM_triplex_motor_C_speed.csv
+module/powerflow/autotest/data_ZIP_test_base_power.csv
+module/powerflow/autotest/data_assert_swing_pq_voltage_A.csv
+module/powerflow/autotest/data_assert_swing_pq_voltage_B.csv
+module/powerflow/autotest/data_assert_swing_pq_voltage_C.csv
+module/powerflow/autotest/data_cap_service.csv
+module/powerflow/autotest/data_cap_service_test_power_measure.csv
+module/powerflow/autotest/data_configurations_34_node.glm
+module/powerflow/autotest/data_configurations_37_node.glm
+module/powerflow/autotest/data_configurations_delta_123node.glm
+module/powerflow/autotest/data_delta_load_voltage_A.csv
+module/powerflow/autotest/data_delta_load_voltage_B.csv
+module/powerflow/autotest/data_delta_load_voltage_C.csv
+module/powerflow/autotest/data_delta_player_load_A.csv
+module/powerflow/autotest/data_delta_player_load_B.csv
+module/powerflow/autotest/data_delta_player_load_C.csv
+module/powerflow/autotest/data_delta_powermeas_assert.csv
+module/powerflow/autotest/data_delta_triplex_load_power.csv
+module/powerflow/autotest/data_delta_triplex_load_voltage_1.csv
+module/powerflow/autotest/data_delta_triplex_load_voltage_12.csv
+module/powerflow/autotest/data_delta_triplex_load_voltage_2.csv
+module/powerflow/autotest/data_delta_triplex_player.csv
+module/powerflow/autotest/data_inrush_LineFlowCurrentOut_A.csv
+module/powerflow/autotest/data_inrush_LineFlowCurrentOut_B.csv
+module/powerflow/autotest/data_inrush_LineFlowCurrentOut_C.csv
+module/powerflow/autotest/data_inrush_Voltage_node2_A.csv
+module/powerflow/autotest/data_inrush_Voltage_node2_B.csv
+module/powerflow/autotest/data_inrush_Voltage_node2_C.csv
+module/powerflow/autotest/data_link_status_player_1.player
+module/powerflow/autotest/data_link_status_player_2.player
+module/powerflow/autotest/data_link_status_player_3.player
+module/powerflow/autotest/data_multi_island_big_load_step_increase.csv
+module/powerflow/autotest/data_multi_island_broken_island_repair.csv
+module/powerflow/autotest/data_multi_island_separate_fail_volt_A.csv
+module/powerflow/autotest/data_multi_island_separate_fail_volt_B.csv
+module/powerflow/autotest/data_multi_island_separate_fail_volt_C.csv
+module/powerflow/autotest/data_multi_load4B_phaseA.csv
+module/powerflow/autotest/data_multi_load4B_phaseB.csv
+module/powerflow/autotest/data_multi_load4B_phaseC.csv
+module/powerflow/autotest/data_multi_load4C_phaseA.csv
+module/powerflow/autotest/data_multi_load4C_phaseB.csv
+module/powerflow/autotest/data_multi_load4C_phaseC.csv
+module/powerflow/autotest/data_multi_load4_phaseA.csv
+module/powerflow/autotest/data_multi_load4_phaseB.csv
+module/powerflow/autotest/data_multi_load4_phaseC.csv
+module/powerflow/autotest/data_swing_pq_voltage_player_A.csv
+module/powerflow/autotest/data_swing_pq_voltage_player_B.csv
+module/powerflow/autotest/data_swing_pq_voltage_player_C.csv
+module/powerflow/autotest/data_triplex_parent_test_housebus.csv
+module/powerflow/autotest/data_triplex_parent_test_parentbus.csv
+module/powerflow/autotest/data_triplex_parent_test_swingbus.csv
+module/powerflow/autotest/data_vfd_currRecorderA.csv
+module/powerflow/autotest/data_vfd_currRecorderB.csv
+module/powerflow/autotest/data_vfd_currRecorderC.csv
+module/powerflow/autotest/data_vfd_in_rec_curr_A.csv
+module/powerflow/autotest/data_vfd_in_rec_curr_B.csv
+module/powerflow/autotest/data_vfd_in_rec_curr_C.csv
+module/powerflow/autotest/data_vfd_in_rec_pow_A.csv
+module/powerflow/autotest/data_vfd_in_rec_pow_B.csv
+module/powerflow/autotest/data_vfd_in_rec_pow_C.csv
+module/powerflow/autotest/data_vfd_load_volt_out_volt_A.csv
+module/powerflow/autotest/data_vfd_load_volt_out_volt_B.csv
+module/powerflow/autotest/data_vfd_load_volt_out_volt_C.csv
+module/powerflow/autotest/data_vfd_out_rec_curr_A.csv
+module/powerflow/autotest/data_vfd_out_rec_curr_B.csv
+module/powerflow/autotest/data_vfd_out_rec_curr_C.csv
+module/powerflow/autotest/data_vfd_out_rec_pow_A.csv
+module/powerflow/autotest/data_vfd_out_rec_pow_B.csv
+module/powerflow/autotest/data_vfd_out_rec_pow_C.csv
+module/powerflow/autotest/data_vfd_powRecorderA.csv
+module/powerflow/autotest/data_vfd_powRecorderB.csv
+module/powerflow/autotest/data_vfd_powRecorderC.csv
+module/powerflow/autotest/data_vfd_speedPlayer_delta.player
+module/powerflow/autotest/data_zip_measload_phaseA.csv
+module/powerflow/autotest/data_zip_measload_phaseB.csv
+module/powerflow/autotest/data_zip_measload_phaseC.csv
+module/powerflow/autotest/dist_volt_A_Aref.player
+module/powerflow/autotest/dist_volt_B_Aref.player
+module/powerflow/autotest/dist_volt_C_Aref.player
+module/powerflow/autotest/dutycycle_player.player
+module/powerflow/autotest/feeder_schedules.glm
+module/powerflow/autotest/flat.player
+module/powerflow/autotest/fuse_assert_status_B.player
+module/powerflow/autotest/fuse_assert_status_C.player
+module/powerflow/autotest/fuse_load_B.player
+module/powerflow/autotest/fuse_ph_A_status.player
+module/powerflow/autotest/fuse_ph_B_status.player
+module/powerflow/autotest/fuse_ph_C_status.player
+module/powerflow/autotest/linearLoadIncrease.player
+module/powerflow/autotest/load_tracker_setpoint.player
+module/powerflow/autotest/loader_fastA.player
+module/powerflow/autotest/loader_fastA_NR.player
+module/powerflow/autotest/loader_fastA_induct.player
+module/powerflow/autotest/loader_fastB.player
+module/powerflow/autotest/loader_fastB_NR.player
+module/powerflow/autotest/loader_fastB_induct.player
+module/powerflow/autotest/loader_fastC.player
+module/powerflow/autotest/loader_fastC_NR.player
+module/powerflow/autotest/loader_fastC_induct.player
+module/powerflow/autotest/meter_reactive_energy_delta.player
+module/powerflow/autotest/meter_real_energy_delta.player
+module/powerflow/autotest/regulator_load_phA.player
+module/powerflow/autotest/regulator_load_phB.player
+module/powerflow/autotest/regulator_load_phC.player
+module/powerflow/autotest/regulator_manual_YY_assert_A.player
+module/powerflow/autotest/regulator_manual_YY_assert_A_TypeB.player
+module/powerflow/autotest/regulator_manual_YY_assert_B.player
+module/powerflow/autotest/regulator_manual_YY_assert_B_TypeB.player
+module/powerflow/autotest/regulator_manual_YY_assert_C.player
+module/powerflow/autotest/regulator_manual_YY_assert_C_TypeB.player
+module/powerflow/autotest/regulator_manual_YY_tap_A.player
+module/powerflow/autotest/regulator_manual_YY_tap_B.player
+module/powerflow/autotest/regulator_manual_YY_tap_C.player
+module/powerflow/autotest/solver_ml.conf
+module/powerflow/autotest/solver_ml_check.py
+module/powerflow/autotest/solver_mle.conf
+module/powerflow/autotest/solver_py.conf
+module/powerflow/autotest/solver_py.py
+module/powerflow/autotest/stub_bill_price.player
+module/powerflow/autotest/stub_nofee_bill_value.player
+module/powerflow/autotest/test_IEEE-123_FBS.glm
+module/powerflow/autotest/test_IEEE123_zero_voltages_FBS.glm
+module/powerflow/autotest/test_IEEE123_zero_voltages_NR.glm
+module/powerflow/autotest/test_IEEE_13_FBS.glm
+module/powerflow/autotest/test_IEEE_13_FBS_AMI.glm
+module/powerflow/autotest/test_IEEE_13_FBS_AMI_24hr.glm
+module/powerflow/autotest/test_IEEE_13_FBS_AMI_24hr_Mod_Res.glm
+module/powerflow/autotest/test_IEEE_13_FBS_AMI_LinearLoadChange.glm
+module/powerflow/autotest/test_IEEE_13_FBS_AMI_LinearLoadChangeTrim.glm
+module/powerflow/autotest/test_IEEE_13_FBS_AMI_StepParameterChange.glm
+module/powerflow/autotest/test_IEEE_13_FBS_AMI_StepPropertyChange.glm
+module/powerflow/autotest/test_IEEE_13_FBS_AMI_StepPropertyChange2.glm
+module/powerflow/autotest/test_IEEE_13_FBS_degradation.glm
+module/powerflow/autotest/test_IEEE_13_ML.glm
+module/powerflow/autotest/test_IEEE_13_MLE.glm
+module/powerflow/autotest/test_IEEE_13_NR.glm
+module/powerflow/autotest/test_IEEE_13_PY.glm
+module/powerflow/autotest/test_IEEE_13_pole_opt.glm
+module/powerflow/autotest/test_IEEE_13_pole_output.csv
+module/powerflow/autotest/test_IEEE_13_pole_wind.player
+module/powerflow/autotest/test_IEEE_34_FBS.glm
+module/powerflow/autotest/test_IEEE_34_NR.glm
+module/powerflow/autotest/test_IEEE_37_FBS.glm
+module/powerflow/autotest/test_IEEE_37_NR.glm
+module/powerflow/autotest/test_NR_matrix_dump.glm
+module/powerflow/autotest/test_SPIM_err.glm
+module/powerflow/autotest/test_SPIM_triplex_err.glm
+module/powerflow/autotest/test_Simple_Switch_Fault_InRush_err.glm
+module/powerflow/autotest/test_ZIPLoad_ZeroBase_FBS.glm
+module/powerflow/autotest/test_ZIPLoad_ZeroBase_NR.glm
+module/powerflow/autotest/test_agricultural.csv
+module/powerflow/autotest/test_agricultural.glm
+module/powerflow/autotest/test_balanced_stepdown_D-D.glm
+module/powerflow/autotest/test_balanced_stepdown_D-D_NR.glm
+module/powerflow/autotest/test_balanced_stepdown_D-grY.glm
+module/powerflow/autotest/test_balanced_stepdown_D-grY_NR.glm
+module/powerflow/autotest/test_balanced_stepdown_D-grY_phA.glm
+module/powerflow/autotest/test_balanced_stepdown_D-grY_phAB.glm
+module/powerflow/autotest/test_balanced_stepdown_D-grY_phB.glm
+module/powerflow/autotest/test_balanced_stepdown_D-grY_phC.glm
+module/powerflow/autotest/test_balanced_stepdown_D_D_phA.glm
+module/powerflow/autotest/test_balanced_stepdown_D_D_phAB.glm
+module/powerflow/autotest/test_balanced_stepdown_D_D_phB.glm
+module/powerflow/autotest/test_balanced_stepdown_D_D_phC.glm
+module/powerflow/autotest/test_balanced_stepdown_grY-grY.glm
+module/powerflow/autotest/test_balanced_stepdown_grY-grY_NR.glm
+module/powerflow/autotest/test_balanced_stepdown_grY-grY_phA.glm
+module/powerflow/autotest/test_balanced_stepdown_grY-grY_phAB.glm
+module/powerflow/autotest/test_balanced_stepdown_grY-grY_phB.glm
+module/powerflow/autotest/test_balanced_stepdown_grY-grY_phC.glm
+module/powerflow/autotest/test_balanced_stepup_D-D.glm
+module/powerflow/autotest/test_balanced_stepup_D-D_NR.glm
+module/powerflow/autotest/test_balanced_stepup_D-D_phA.glm
+module/powerflow/autotest/test_balanced_stepup_D-D_phAB.glm
+module/powerflow/autotest/test_balanced_stepup_D-D_phB.glm
+module/powerflow/autotest/test_balanced_stepup_D-D_phC.glm
+module/powerflow/autotest/test_balanced_stepup_D-grY.glm
+module/powerflow/autotest/test_balanced_stepup_D-grY_NR.glm
+module/powerflow/autotest/test_balanced_stepup_D-grY_phA.glm
+module/powerflow/autotest/test_balanced_stepup_D-grY_phAB.glm
+module/powerflow/autotest/test_balanced_stepup_D-grY_phB.glm
+module/powerflow/autotest/test_balanced_stepup_D-grY_phC.glm
+module/powerflow/autotest/test_balanced_stepup_grY-grY.glm
+module/powerflow/autotest/test_balanced_stepup_grY-grY_NR.glm
+module/powerflow/autotest/test_balanced_stepup_grY-grY_phA.glm
+module/powerflow/autotest/test_balanced_stepup_grY-grY_phAB.glm
+module/powerflow/autotest/test_balanced_stepup_grY-grY_phB.glm
+module/powerflow/autotest/test_balanced_stepup_grY-grY_phC.glm
+module/powerflow/autotest/test_building_1.csv
+module/powerflow/autotest/test_building_1.glm
+module/powerflow/autotest/test_building_10.csv
+module/powerflow/autotest/test_building_10.glm
+module/powerflow/autotest/test_building_loadshapes.csv
+module/powerflow/autotest/test_building_tmy.csv
+module/powerflow/autotest/test_building_tmy.glm
+module/powerflow/autotest/test_c_matrix_line_capacitance_balanced.glm
+module/powerflow/autotest/test_c_matrix_line_capacitance_balanced_NR.glm
+module/powerflow/autotest/test_capacitor_CURRENT_ABC_indiv.glm
+module/powerflow/autotest/test_capacitor_CURRENT_ABC_indiv_NR.glm
+module/powerflow/autotest/test_capacitor_VAR_ABC_BANK_B.glm
+module/powerflow/autotest/test_capacitor_VAR_ABC_BANK_B_NR.glm
+module/powerflow/autotest/test_capacitor_VAR_ABC_indiv.glm
+module/powerflow/autotest/test_capacitor_VAR_ABC_indiv_NR.glm
+module/powerflow/autotest/test_capacitor_VAR_ABC_indiv_Y.glm
+module/powerflow/autotest/test_capacitor_VAR_ABC_indiv_Y_NR.glm
+module/powerflow/autotest/test_capacitor_VAR_ABC_indiv_dwell.glm
+module/powerflow/autotest/test_capacitor_VAR_ABC_indiv_dwell_NR.glm
+module/powerflow/autotest/test_capacitor_VAR_VOLT_ABC_indiv.glm
+module/powerflow/autotest/test_capacitor_VAR_VOLT_ABC_indiv_NR.glm
+module/powerflow/autotest/test_capacitor_VAR_VOLT_ABC_indiv_dwell.glm
+module/powerflow/autotest/test_capacitor_VAR_VOLT_ABC_indiv_dwell_NR.glm
+module/powerflow/autotest/test_capacitor_counters.glm
+module/powerflow/autotest/test_capacitor_manual_ABC_bank_time_series.glm
+module/powerflow/autotest/test_capacitor_manual_ABC_bank_time_series_NR.glm
+module/powerflow/autotest/test_capacitor_manual_ABC_time_series.glm
+module/powerflow/autotest/test_capacitor_manual_ABC_time_series_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABBCD.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABBCD_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABBCD_Y.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABBCD_Y_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABBCD_service.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABCAD.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABCAD_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABCAD_Y.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABCAD_Y_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABD.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABD_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABD_Y.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABD_Y_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABN.glm
+module/powerflow/autotest/test_capacitor_manual_single_ABN_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_AN.glm
+module/powerflow/autotest/test_capacitor_manual_single_AN_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_All_D.glm
+module/powerflow/autotest/test_capacitor_manual_single_All_D_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_All_D_Y.glm
+module/powerflow/autotest/test_capacitor_manual_single_All_D_Y_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_All_N.glm
+module/powerflow/autotest/test_capacitor_manual_single_All_N_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCCAD.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCCAD_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCCAD_Y.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCCAD_Y_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCD.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCD_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCD_Y.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCD_Y_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCN.glm
+module/powerflow/autotest/test_capacitor_manual_single_BCN_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_BN.glm
+module/powerflow/autotest/test_capacitor_manual_single_BN_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_CAD.glm
+module/powerflow/autotest/test_capacitor_manual_single_CAD_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_CAD_Y.glm
+module/powerflow/autotest/test_capacitor_manual_single_CAD_Y_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_CAN.glm
+module/powerflow/autotest/test_capacitor_manual_single_CAN_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_CN.glm
+module/powerflow/autotest/test_capacitor_manual_single_CN_NR.glm
+module/powerflow/autotest/test_capacitor_manual_single_allOff.glm
+module/powerflow/autotest/test_capacitor_manual_single_allOff_NR.glm
+module/powerflow/autotest/test_capacitor_volt_ABC_BANK_A.glm
+module/powerflow/autotest/test_capacitor_volt_ABC_BANK_A_NR.glm
+module/powerflow/autotest/test_capacitor_volt_ABC_indiv.glm
+module/powerflow/autotest/test_capacitor_volt_ABC_indiv_NR.glm
+module/powerflow/autotest/test_capacitor_volt_ABC_indiv_Y.glm
+module/powerflow/autotest/test_capacitor_volt_ABC_indiv_Y_NR.glm
+module/powerflow/autotest/test_capacitor_volt_ABC_indiv_dwell.glm
+module/powerflow/autotest/test_capacitor_volt_ABC_indiv_dwell_NR.glm
+module/powerflow/autotest/test_capacitor_volt_single_ABBCD_service.glm
+module/powerflow/autotest/test_center_tapped_basic.glm
+module/powerflow/autotest/test_center_tapped_basic_NR.glm
+module/powerflow/autotest/test_center_tapped_complex.glm
+module/powerflow/autotest/test_center_tapped_complex_NR.glm
+module/powerflow/autotest/test_child_line_out_of_order.glm
+module/powerflow/autotest/test_combination_loads_FBS.glm
+module/powerflow/autotest/test_combination_loads_NR.glm
+module/powerflow/autotest/test_constant_current_angle_parents_FBS.glm
+module/powerflow/autotest/test_constant_current_angle_parents_NR.glm
+module/powerflow/autotest/test_delta_IEEE_123node_cap_service_err.glm
+module/powerflow/autotest/test_delta_IEEE_123node_test_err.glm
+module/powerflow/autotest/test_different_load_parent_Delta_NR.glm
+module/powerflow/autotest/test_different_load_parent_Wye_NR.glm
+module/powerflow/autotest/test_disconnected_node.glm
+module/powerflow/autotest/test_ductbank.glm
+module/powerflow/autotest/test_ductbank_1of6.glm
+module/powerflow/autotest/test_ductbank_2of6.glm
+module/powerflow/autotest/test_duplicate_NR_err.glm
+module/powerflow/autotest/test_dutycycle.glm
+module/powerflow/autotest/test_fuse.glm
+module/powerflow/autotest/test_fuse_switched_out_of_service.glm
+module/powerflow/autotest/test_house_tmy.csv
+module/powerflow/autotest/test_house_tmy.glm
+module/powerflow/autotest/test_industrial.csv
+module/powerflow/autotest/test_industrial.glm
+module/powerflow/autotest/test_line_sensor.glm
+module/powerflow/autotest/test_link_overcurrent.csv
+module/powerflow/autotest/test_link_overcurrent.glm
+module/powerflow/autotest/test_link_same_from_and_to_FBS_err.glm
+module/powerflow/autotest/test_link_same_from_and_to_NR_err.glm
+module/powerflow/autotest/test_link_status.glm
+module/powerflow/autotest/test_load_tracker.glm
+module/powerflow/autotest/test_load_tracker_NR.glm
+module/powerflow/autotest/test_load_tracker_damped.glm
+module/powerflow/autotest/test_load_tracker_damped_NR.glm
+module/powerflow/autotest/test_load_tracker_double.glm
+module/powerflow/autotest/test_load_tracker_double_NR.glm
+module/powerflow/autotest/test_meter_delta.glm
+module/powerflow/autotest/test_multi_island.glm
+module/powerflow/autotest/test_multi_island_SWING_PQ.glm
+module/powerflow/autotest/test_multi_island_SWING_PQ_Indep_Islands.glm
+module/powerflow/autotest/test_multi_island_after_order.glm
+module/powerflow/autotest/test_multi_island_indep_node.glm
+module/powerflow/autotest/test_multi_island_zero_voltages.glm
+module/powerflow/autotest/test_node_phaseS_check_FBS_err.glm
+module/powerflow/autotest/test_node_phaseS_check_NR_err.glm
+module/powerflow/autotest/test_node_voltage_fluctuation.csv
+module/powerflow/autotest/test_node_voltage_fluctuation.glm
+module/powerflow/autotest/test_node_voltage_violation.csv
+module/powerflow/autotest/test_node_voltage_violation.glm
+module/powerflow/autotest/test_nonzero_initial_meter_reading.glm
+module/powerflow/autotest/test_opt_reg_linedropcomp2_YY_A_NR.glm
+module/powerflow/autotest/test_opt_reg_linedropcomp2_YY_A_NR_ts.glm
+module/powerflow/autotest/test_opt_reg_linedropcomp2_YY_B_NR.glm
+module/powerflow/autotest/test_opt_reg_linedropcomp2_YY_B_NR_ts.glm
+module/powerflow/autotest/test_opt_regulator_linedropcomp_YY_A_NR.glm
+module/powerflow/autotest/test_opt_regulator_linedropcomp_YY_A_NR_ts.glm
+module/powerflow/autotest/test_opt_regulator_linedropcomp_YY_B_NR.glm
+module/powerflow/autotest/test_opt_regulator_linedropcomp_YY_B_NR_ts.glm
+module/powerflow/autotest/test_pole.csv
+module/powerflow/autotest/test_pole.glm
+module/powerflow/autotest/test_pole_NR.glm
+module/powerflow/autotest/test_pole_err.glm
+module/powerflow/autotest/test_pole_mount.glm
+module/powerflow/autotest/test_powerflow_NR_network.glm
+module/powerflow/autotest/test_powerflow_exercise_4_1_3.glm
+module/powerflow/autotest/test_powerflow_reg_bank_rev_flow_control_current_pos_tap_pos.player
+module/powerflow/autotest/test_powerflow_reg_bank_rev_flow_control_neutral_tap_pos.player
+module/powerflow/autotest/test_powerflow_reg_bank_reverse_flow_control_current_pos.glm
+module/powerflow/autotest/test_powerflow_reg_bank_reverse_flow_control_neutral.glm
+module/powerflow/autotest/test_powerflow_reg_counters.glm
+module/powerflow/autotest/test_powerflow_reg_ind_rev_flow_control_current_pos_tap_pos_A.player
+module/powerflow/autotest/test_powerflow_reg_ind_rev_flow_control_current_pos_tap_pos_B.player
+module/powerflow/autotest/test_powerflow_reg_ind_rev_flow_control_current_pos_tap_pos_C.player
+module/powerflow/autotest/test_powerflow_reg_ind_rev_flow_control_neutral_tap_pos_A.player
+module/powerflow/autotest/test_powerflow_reg_ind_rev_flow_control_neutral_tap_pos_B.player
+module/powerflow/autotest/test_powerflow_reg_ind_rev_flow_control_neutral_tap_pos_C.player
+module/powerflow/autotest/test_powerflow_reg_ind_reverse_flow_control_current_pos.glm
+module/powerflow/autotest/test_powerflow_reg_ind_reverse_flow_control_neutral.glm
+module/powerflow/autotest/test_powerflow_reg_rev_flow_control_neutral_ind_A.player
+module/powerflow/autotest/test_powerflow_reg_rev_flow_control_neutral_ind_B.player
+module/powerflow/autotest/test_powerflow_reg_rev_flow_control_neutral_ind_C.player
+module/powerflow/autotest/test_powerflow_transformer_thermal_model.glm
+module/powerflow/autotest/test_powerflow_triplex_load.glm
+module/powerflow/autotest/test_public_service.csv
+module/powerflow/autotest/test_public_service.glm
+module/powerflow/autotest/test_reg.player
+module/powerflow/autotest/test_regulator_linedropcomp2_YY_A.glm
+module/powerflow/autotest/test_regulator_linedropcomp2_YY_A_ts.glm
+module/powerflow/autotest/test_regulator_linedropcomp2_YY_B.glm
+module/powerflow/autotest/test_regulator_linedropcomp2_YY_B_ts.glm
+module/powerflow/autotest/test_regulator_linedropcomp_YY_A.glm
+module/powerflow/autotest/test_regulator_linedropcomp_YY_A_ts.glm
+module/powerflow/autotest/test_regulator_linedropcomp_YY_B.glm
+module/powerflow/autotest/test_regulator_linedropcomp_YY_B_ts.glm
+module/powerflow/autotest/test_regulator_manual_YY_A.glm
+module/powerflow/autotest/test_regulator_manual_YY_A_1ph.glm
+module/powerflow/autotest/test_regulator_manual_YY_A_1ph_NR.glm
+module/powerflow/autotest/test_regulator_manual_YY_A_2ph.glm
+module/powerflow/autotest/test_regulator_manual_YY_A_2ph_NR.glm
+module/powerflow/autotest/test_regulator_manual_YY_A_NR.glm
+module/powerflow/autotest/test_regulator_manual_YY_B.glm
+module/powerflow/autotest/test_regulator_manual_YY_B_NR.glm
+module/powerflow/autotest/test_regulator_outputvolt_YY_A.glm
+module/powerflow/autotest/test_regulator_outputvolt_YY_A_NR.glm
+module/powerflow/autotest/test_regulator_outputvolt_YY_A_NR_ts.glm
+module/powerflow/autotest/test_regulator_outputvolt_YY_A_ts.glm
+module/powerflow/autotest/test_regulator_outputvolt_YY_B.glm
+module/powerflow/autotest/test_regulator_outputvolt_YY_B_NR.glm
+module/powerflow/autotest/test_regulator_outputvolt_YY_B_NR_ts.glm
+module/powerflow/autotest/test_regulator_outputvolt_YY_B_ts.glm
+module/powerflow/autotest/test_regulator_remotesense_YY_A.glm
+module/powerflow/autotest/test_regulator_remotesense_YY_A_NR.glm
+module/powerflow/autotest/test_regulator_remotesense_YY_A_NR_ts.glm
+module/powerflow/autotest/test_regulator_remotesense_YY_A_ts.glm
+module/powerflow/autotest/test_regulator_remotesense_YY_B.glm
+module/powerflow/autotest/test_regulator_remotesense_YY_B_NR.glm
+module/powerflow/autotest/test_regulator_remotesense_YY_B_NR_ts.glm
+module/powerflow/autotest/test_regulator_remotesense_YY_B_ts.glm
+module/powerflow/autotest/test_reversed_lines_NR.glm
+module/powerflow/autotest/test_substation_PSV_driven.glm
+module/powerflow/autotest/test_substation_normal_node.glm
+module/powerflow/autotest/test_substation_swing_node.glm
+module/powerflow/autotest/test_supernode.glm
+module/powerflow/autotest/test_switch.glm
+module/powerflow/autotest/test_switch_banked.glm
+module/powerflow/autotest/test_switch_coordinator.csv
+module/powerflow/autotest/test_switch_coordinator.glm
+module/powerflow/autotest/test_switch_coordinator_method.glm
+module/powerflow/autotest/test_switch_radial_open_no_hanging.glm
+module/powerflow/autotest/test_switch_single_node_hanging.glm
+module/powerflow/autotest/test_transformer_losses_FBS.glm
+module/powerflow/autotest/test_transformer_losses_NR.glm
+module/powerflow/autotest/test_transformer_not_SPCT_err.glm
+module/powerflow/autotest/test_triplex_billing_stub.glm
+module/powerflow/autotest/test_triplex_billing_tiered_fee.glm
+module/powerflow/autotest/test_triplex_billing_tiered_nofee.glm
+module/powerflow/autotest/test_triplex_billing_uniform_fee.glm
+module/powerflow/autotest/test_triplex_billing_uniform_nofee.glm
+module/powerflow/autotest/test_triplex_invalid_conductor_FBS_err.glm
+module/powerflow/autotest/test_triplex_invalid_conductor_NR_err.glm
+module/powerflow/autotest/test_triplex_meter_parent_accum_FBS.glm
+module/powerflow/autotest/test_triplex_meter_parent_accum_NR.glm
+module/powerflow/autotest/test_unbalanced_stepdown_D-D.glm
+module/powerflow/autotest/test_unbalanced_stepdown_D-D_NR.glm
+module/powerflow/autotest/test_unbalanced_stepdown_D-grY.glm
+module/powerflow/autotest/test_unbalanced_stepdown_D-grY_NR.glm
+module/powerflow/autotest/test_unbalanced_stepdown_grY-grY.glm
+module/powerflow/autotest/test_unbalanced_stepdown_grY-grY_NR.glm
+module/powerflow/autotest/test_unbalanced_stepup_D-D.glm
+module/powerflow/autotest/test_unbalanced_stepup_D-D_NR.glm
+module/powerflow/autotest/test_unbalanced_stepup_D-grY.glm
+module/powerflow/autotest/test_unbalanced_stepup_D-grY_NR.glm
+module/powerflow/autotest/test_unbalanced_stepup_grY-grY.glm
+module/powerflow/autotest/test_unbalanced_stepup_grY-grY_NR.glm
+module/powerflow/autotest/test_unbalanced_unity_grY-grY.glm
+module/powerflow/autotest/test_unbalanced_unity_grY-grY_NR.glm
+module/powerflow/autotest/test_underground_TapeShielded_cond.glm
+module/powerflow/autotest/test_vfd_delta_opt.glm
+module/powerflow/autotest/test_violation_record.glm
+module/powerflow/autotest/test_zero_OHL_conductor_NR_err.glm
+module/powerflow/autotest/test_zero_TPL_conductor_NR_err.glm
+module/powerflow/autotest/test_zero_UGL_conductor_NR_err.glm
+module/powerflow/autotest/triplex_meter_reactive_energy_delta.player
+module/powerflow/autotest/triplex_meter_real_energy_delta.player
+module/powerflow/billdump.cpp
+module/powerflow/billdump.h
+module/powerflow/building.cpp
+module/powerflow/building.h
+module/powerflow/building_loadshapes.csv
+module/powerflow/capacitor.cpp
+module/powerflow/capacitor.h
+module/powerflow/check_powerflow.py
+module/powerflow/currdump.cpp
+module/powerflow/currdump.h
+module/powerflow/data/.gitignore
+module/powerflow/data/CEUS/README.md
+module/powerflow/data/CEUS/grocery.xls
+module/powerflow/data/CEUS/health.xls
+module/powerflow/data/CEUS/large_office.xls
+module/powerflow/data/CEUS/lodging.xls
+module/powerflow/data/CEUS/restaurant.xls
+module/powerflow/data/CEUS/retail.xls
+module/powerflow/data/CEUS/school.xls
+module/powerflow/data/CEUS/small_office.xls
+module/powerflow/data/README.md
+module/powerflow/data/ResStock/up00-ca-mobile_home.csv
+module/powerflow/data/ResStock/up00-ca-multi-family_with_2_-_4_units.csv
+module/powerflow/data/ResStock/up00-ca-multi-family_with_5plus_units.csv
+module/powerflow/data/ResStock/up00-ca-single-family_attached.csv
+module/powerflow/data/ResStock/up00-ca-single-family_detached.csv
+module/powerflow/data/building_defaults.csv
+module/powerflow/data/building_defaults.png
+module/powerflow/data/building_defaults.py
+module/powerflow/data/building_enduses.csv
+module/powerflow/data/building_enduses.png
+module/powerflow/data/building_enduses.py
+module/powerflow/data/building_loadshapes.csv
+module/powerflow/data/building_loadshapes.png
+module/powerflow/data/building_loadshapes.py
+module/powerflow/data/building_occupancy.csv
+module/powerflow/data/building_occupancy.png
+module/powerflow/data/building_occupancy.py
+module/powerflow/data/ductbank_configurations.csv
+module/powerflow/data/extract_ceusdata.py
+module/powerflow/data/extract_resstock.py
+module/powerflow/data/inverter_settings.csv
+module/powerflow/data/resstock_loadshapes.csv
+module/powerflow/data/update_loadshapes.py
+module/powerflow/docs/Building model.ipynb
+module/powerflow/docs/Building validation.ipynb
+module/powerflow/docs/Ductbank model reduction.ipynb
+module/powerflow/docs/Ductbank model.ipynb
+module/powerflow/docs/Enduse load composition.ipynb
+module/powerflow/docs/Industrial load model.ipynb
+module/powerflow/docs/Pole Failure Modeling.pdf
+module/powerflow/docs/box3x2.png
+module/powerflow/docs/ductbank.py
+module/powerflow/docs/pole_loading.pdf
+module/powerflow/docs/pole_service_life.pdf
+module/powerflow/docs/pole_top_degradation.pdf
+module/powerflow/ductbank.cpp
+module/powerflow/ductbank.h
+module/powerflow/emissions.cpp
+module/powerflow/emissions.h
+module/powerflow/fault_check.cpp
+module/powerflow/fault_check.h
+module/powerflow/frequency_gen.cpp
+module/powerflow/frequency_gen.h
+module/powerflow/fuse.cpp
+module/powerflow/fuse.h
+module/powerflow/impedance_dump.cpp
+module/powerflow/impedance_dump.h
+module/powerflow/industrial.cpp
+module/powerflow/industrial.h
+module/powerflow/init.cpp
+module/powerflow/line.cpp
+module/powerflow/line.h
+module/powerflow/line_configuration.cpp
+module/powerflow/line_configuration.h
+module/powerflow/line_sensor.cpp
+module/powerflow/line_sensor.h
+module/powerflow/line_spacing.cpp
+module/powerflow/line_spacing.h
+module/powerflow/link.cpp
+module/powerflow/link.h
+module/powerflow/load.cpp
+module/powerflow/load.h
+module/powerflow/load_tracker.cpp
+module/powerflow/load_tracker.h
+module/powerflow/main.cpp
+module/powerflow/meter.cpp
+module/powerflow/meter.h
+module/powerflow/motor.cpp
+module/powerflow/motor.h
+module/powerflow/node.cpp
+module/powerflow/node.h
+module/powerflow/overhead_line.cpp
+module/powerflow/overhead_line.h
+module/powerflow/overhead_line_conductor.cpp
+module/powerflow/overhead_line_conductor.h
+module/powerflow/pole.cpp
+module/powerflow/pole.h
+module/powerflow/pole_configuration.cpp
+module/powerflow/pole_configuration.h
+module/powerflow/pole_mount.cpp
+module/powerflow/pole_mount.h
+module/powerflow/power_metrics.cpp
+module/powerflow/power_metrics.h
+module/powerflow/powerflow.cpp
+module/powerflow/powerflow.h
+module/powerflow/powerflow.vcproj
+module/powerflow/powerflow_library.cpp
+module/powerflow/powerflow_library.h
+module/powerflow/powerflow_object.cpp
+module/powerflow/powerflow_object.h
+module/powerflow/pqload.cpp
+module/powerflow/pqload.h
+module/powerflow/public_service.cpp
+module/powerflow/public_service.h
+module/powerflow/recloser.cpp
+module/powerflow/recloser.h
+module/powerflow/regulator.cpp
+module/powerflow/regulator.h
+module/powerflow/regulator_configuration.cpp
+module/powerflow/regulator_configuration.h
+module/powerflow/restoration.cpp
+module/powerflow/restoration.h
+module/powerflow/sectionalizer.cpp
+module/powerflow/sectionalizer.h
+module/powerflow/series_reactor.cpp
+module/powerflow/series_reactor.h
+module/powerflow/solver_ml_branchdump.h
+module/powerflow/solver_nr.cpp
+module/powerflow/solver_nr.h
+module/powerflow/solver_py.conf
+module/powerflow/solver_py.cpp
+module/powerflow/solver_py.h
+module/powerflow/substation.cpp
+module/powerflow/substation.h
+module/powerflow/switch_coordinator.cpp
+module/powerflow/switch_coordinator.h
+module/powerflow/switch_object.cpp
+module/powerflow/switch_object.h
+module/powerflow/transformer.cpp
+module/powerflow/transformer.h
+module/powerflow/transformer_configuration.cpp
+module/powerflow/transformer_configuration.h
+module/powerflow/triplex_line.cpp
+module/powerflow/triplex_line.h
+module/powerflow/triplex_line_conductor.cpp
+module/powerflow/triplex_line_conductor.h
+module/powerflow/triplex_line_configuration.cpp
+module/powerflow/triplex_line_configuration.h
+module/powerflow/triplex_load.cpp
+module/powerflow/triplex_load.h
+module/powerflow/triplex_meter.cpp
+module/powerflow/triplex_meter.h
+module/powerflow/triplex_node.cpp
+module/powerflow/triplex_node.h
+module/powerflow/underground_line.cpp
+module/powerflow/underground_line.h
+module/powerflow/underground_line_conductor.cpp
+module/powerflow/underground_line_conductor.h
+module/powerflow/vfd.cpp
+module/powerflow/vfd.h
+module/powerflow/volt_var_control.cpp
+module/powerflow/volt_var_control.h
+module/powerflow/voltdump.cpp
+module/powerflow/voltdump.h
+module/powernet/Makefile.mk
+module/powernet/agent.cpp
+module/powernet/agent.h
+module/powernet/autotest/test_agent_method.glm
+module/powernet/house.cpp
+module/powernet/house.h
+module/powernet/main.cpp
+module/powernet/message.cpp
+module/powernet/message.h
+module/powernet/powernet.h
+module/powernet/validate.no
+module/pypower/Makefile.mk
+module/pypower/README.md
+module/pypower/autotest/.gitignore
+module/pypower/autotest/case.glm
+module/pypower/autotest/case118.py
+module/pypower/autotest/case14.py
+module/pypower/autotest/case14e.py
+module/pypower/autotest/case30.py
+module/pypower/autotest/case39.py
+module/pypower/autotest/case57.py
+module/pypower/autotest/check_case.py
+module/pypower/autotest/controllers.py
+module/pypower/autotest/test_case118.glm
+module/pypower/autotest/test_case14.glm
+module/pypower/autotest/test_case14_controller.glm
+module/pypower/autotest/test_case14_err.glm
+module/pypower/autotest/test_case14_geodata.glm
+module/pypower/autotest/test_case14_geodata_P.csv
+module/pypower/autotest/test_case14_geodata_load_2_record.csv
+module/pypower/autotest/test_case14_load.glm
+module/pypower/autotest/test_case14_load_pp_bus_2.csv
+module/pypower/autotest/test_case14_opf.glm
+module/pypower/autotest/test_case14_powerline.glm
+module/pypower/autotest/test_case14_powerplant.glm
+module/pypower/autotest/test_case14_powerplant_pp_bus_2_record.csv
+module/pypower/autotest/test_case14_sensitivity.csv
+module/pypower/autotest/test_case14_sensitivity.glm
+module/pypower/autotest/test_case14_sensitivity_pp_bus_1_record.csv
+module/pypower/autotest/test_case14_storage.glm
+module/pypower/autotest/test_case14_storage_record.csv
+module/pypower/autotest/test_case14_ts.glm
+module/pypower/autotest/test_case14_weather.csv
+module/pypower/autotest/test_case14_weather.glm
+module/pypower/autotest/test_case14_weather_pp_bus_1_record.csv
+module/pypower/autotest/test_case30.glm
+module/pypower/autotest/test_case39.glm
+module/pypower/autotest/test_case57.glm
+module/pypower/branch.cpp
+module/pypower/branch.h
+module/pypower/bus.cpp
+module/pypower/bus.h
+module/pypower/gen.cpp
+module/pypower/gen.h
+module/pypower/gencost.cpp
+module/pypower/gencost.h
+module/pypower/geodata.cpp
+module/pypower/geodata.h
+module/pypower/load.cpp
+module/pypower/load.h
+module/pypower/powerline.cpp
+module/pypower/powerline.h
+module/pypower/powerplant.cpp
+module/pypower/powerplant.h
+module/pypower/pypower.cpp
+module/pypower/pypower.h
+module/pypower/pypower_solver.py
+module/pypower/relay.cpp
+module/pypower/relay.h
+module/pypower/scada.cpp
+module/pypower/scada.h
+module/pypower/transformer.cpp
+module/pypower/transformer.h
+module/pypower/weather.cpp
+module/pypower/weather.h
+module/reliability/Makefile.mk
+module/reliability/autotest/data_deltamode_deterministic_eventgen.player
+module/reliability/autotest/data_deltamode_random_eventgen.player
+module/reliability/autotest/deterministic_CAIDI.csv
+module/reliability/autotest/deterministic_CAIDI_int.csv
+module/reliability/autotest/deterministic_MAIFI.csv
+module/reliability/autotest/deterministic_MAIFI_int.csv
+module/reliability/autotest/deterministic_SAIDI.csv
+module/reliability/autotest/deterministic_SAIDI_int.csv
+module/reliability/autotest/deterministic_SAIFI.csv
+module/reliability/autotest/deterministic_SAIFI_int.csv
+module/reliability/autotest/deterministic_minTS_CAIDI.csv
+module/reliability/autotest/deterministic_minTS_CAIDI_int.csv
+module/reliability/autotest/deterministic_minTS_MAIFI.csv
+module/reliability/autotest/deterministic_minTS_MAIFI_int.csv
+module/reliability/autotest/deterministic_minTS_SAIDI.csv
+module/reliability/autotest/deterministic_minTS_SAIDI_int.csv
+module/reliability/autotest/deterministic_minTS_SAIFI.csv
+module/reliability/autotest/deterministic_minTS_SAIFI_int.csv
+module/reliability/autotest/deterministic_minTS_measured_A.csv
+module/reliability/autotest/deterministic_powerA.csv
+module/reliability/autotest/fault_bus_A_within.player
+module/reliability/autotest/fault_bus_B_within.player
+module/reliability/autotest/fault_bus_C_within.player
+module/reliability/autotest/fault_bus_fault_current_A.player
+module/reliability/autotest/fault_bus_fault_current_B.player
+module/reliability/autotest/fault_bus_fault_current_C.player
+module/reliability/autotest/fuse_limit_manipulate.player
+module/reliability/autotest/random_CAIDI.csv
+module/reliability/autotest/random_CAIDI_int.csv
+module/reliability/autotest/random_MAIFI.csv
+module/reliability/autotest/random_MAIFI_int.csv
+module/reliability/autotest/random_SAIDI.csv
+module/reliability/autotest/random_SAIDI_int.csv
+module/reliability/autotest/random_SAIFI.csv
+module/reliability/autotest/random_SAIFI_int.csv
+module/reliability/autotest/random_minTS_CAIDI.csv
+module/reliability/autotest/random_minTS_CAIDI_int.csv
+module/reliability/autotest/random_minTS_MAIFI.csv
+module/reliability/autotest/random_minTS_MAIFI_Int.csv
+module/reliability/autotest/random_minTS_SAIDI.csv
+module/reliability/autotest/random_minTS_SAIDI_Int.csv
+module/reliability/autotest/random_minTS_SAIFI.csv
+module/reliability/autotest/random_minTS_SAIFI_Int.csv
+module/reliability/autotest/swing_bus_A_within.player
+module/reliability/autotest/swing_bus_B_within.player
+module/reliability/autotest/swing_bus_C_within.player
+module/reliability/autotest/swing_bus_fault_current_A.player
+module/reliability/autotest/swing_bus_fault_current_B.player
+module/reliability/autotest/swing_bus_fault_current_C.player
+module/reliability/autotest/test_cost.glm
+module/reliability/autotest/test_cost_outage.csv
+module/reliability/autotest/test_deltamode_deterministic_err.glm
+module/reliability/autotest/test_deltamode_eventgen_overrun_err.glm
+module/reliability/autotest/test_deltamode_random_err.glm
+module/reliability/autotest/test_deterministic.glm
+module/reliability/autotest/test_deterministic_minTS.glm
+module/reliability/autotest/test_eventgen_random.glm
+module/reliability/autotest/test_eventgen_random_minTS.glm
+module/reliability/autotest/test_fault_current_4_node.glm
+module/reliability/cost.cpp
+module/reliability/cost.h
+module/reliability/eventgen.cpp
+module/reliability/eventgen.h
+module/reliability/init.cpp
+module/reliability/main.cpp
+module/reliability/metrics.cpp
+module/reliability/metrics.h
+module/reliability/reliability.h
+module/residential/Makefile.mk
+module/residential/appliance.cpp
+module/residential/appliance.h
+module/residential/autotest/Dishwasher.glm
+module/residential/autotest/Dryer.glm
+module/residential/autotest/Range.glm
+module/residential/autotest/Refrigerator.glm
+module/residential/autotest/appliance_schedules.glm
+module/residential/autotest/clotheswasher.glm
+module/residential/autotest/clotheswasher_out.player
+module/residential/autotest/clotheswasher_output.player
+module/residential/autotest/data_EV_det_output_m1.player
+module/residential/autotest/data_EV_det_output_m1_default.player
+module/residential/autotest/data_Vtrigger_house.player
+module/residential/autotest/data_min_new_EV_det_output_m1.player
+module/residential/autotest/data_sample_NHTS.csv
+module/residential/autotest/dishwasher_output.player
+module/residential/autotest/dr_mode_normal.player
+module/residential/autotest/dryer_output.player
+module/residential/autotest/generic_demand.glt
+module/residential/autotest/generic_fail_demand(range0-1).glt
+module/residential/autotest/lights_power.m
+module/residential/autotest/plot_paneldump.py
+module/residential/autotest/plugload_demand_range_bounds.player
+module/residential/autotest/plugload_enduse_load.player
+module/residential/autotest/plugload_energy_meter.player
+module/residential/autotest/plugload_internal_gains.player
+module/residential/autotest/plugload_internal_gains_hf.player
+module/residential/autotest/range_output.player
+module/residential/autotest/refrigerator_out.player
+module/residential/autotest/setpoint_schedule.glm
+module/residential/autotest/test_HVAC_balance.glm
+module/residential/autotest/test_HVAC_common_cool.glm
+module/residential/autotest/test_HVAC_common_heat.glm
+module/residential/autotest/test_HVAC_peak_cool.glm
+module/residential/autotest/test_HVAC_peak_heat.glm
+module/residential/autotest/test_Refrigerator_opt.glm
+module/residential/autotest/test_appliance_opt.glm
+module/residential/autotest/test_clotheswasher_explicit_energy_swd_opt.glm
+module/residential/autotest/test_clotheswasher_explicit_energy_swy_opt.glm
+module/residential/autotest/test_clotheswasher_explicit_energy_wwd_opt.glm
+module/residential/autotest/test_clotheswasher_explicit_energy_wwy_opt.glm
+module/residential/autotest/test_clotheswasher_implicit.glm
+module/residential/autotest/test_clotheswasher_opt.glm
+module/residential/autotest/test_curtailment.csv
+module/residential/autotest/test_curtailment.glm
+module/residential/autotest/test_deltamode_single_house.glm
+module/residential/autotest/test_dishwasher_explicit_power1_opt.glm
+module/residential/autotest/test_dishwasher_explicit_power2_opt.glm
+module/residential/autotest/test_dishwasher_implicit.glm
+module/residential/autotest/test_dishwasher_opt.glm
+module/residential/autotest/test_dryer.glm
+module/residential/autotest/test_dryer_explicit_energy_swd_opt.glm
+module/residential/autotest/test_dryer_explicit_energy_swy_opt.glm
+module/residential/autotest/test_dryer_explicit_energy_wwd_opt.glm
+module/residential/autotest/test_dryer_explicit_energy_wwy_opt.glm
+module/residential/autotest/test_dryer_implicit.glm
+module/residential/autotest/test_evcharger_det_m1.glm
+module/residential/autotest/test_evcharger_det_m1_default.glm
+module/residential/autotest/test_evcharger_det_m1_minTS.glm
+module/residential/autotest/test_freezer_deadband_opt.glm
+module/residential/autotest/test_freezer_implicit_opt.glm
+module/residential/autotest/test_generic_limit_demand(range0-1).glt
+module/residential/autotest/test_generic_limit_demand.player
+module/residential/autotest/test_house_paneldump_energy.glm
+module/residential/autotest/test_house_paneldump_power.glm
+module/residential/autotest/test_implicit_eia2015_loads.glm
+module/residential/autotest/test_implicit_gasenduses.glm
+module/residential/autotest/test_lights_exp.glm
+module/residential/autotest/test_lights_explicit_power1.glm
+module/residential/autotest/test_lights_explicit_power1.player
+module/residential/autotest/test_lights_explicit_power2.glm
+module/residential/autotest/test_lights_explicit_power2.player
+module/residential/autotest/test_lights_explicit_power3.glm
+module/residential/autotest/test_lights_explicit_power3.player
+module/residential/autotest/test_lights_explicit_power4.glm
+module/residential/autotest/test_lights_explicit_power4.player
+module/residential/autotest/test_lights_imp.csv
+module/residential/autotest/test_lights_imp.glm
+module/residential/autotest/test_lights_implicit_power1.glm
+module/residential/autotest/test_lights_implicit_power2.glm
+module/residential/autotest/test_lights_implicit_power3.glm
+module/residential/autotest/test_lights_implicit_power4.glm
+module/residential/autotest/test_lights_standalone.glm
+module/residential/autotest/test_loadshape_dump.csv
+module/residential/autotest/test_loadshape_dump.glm
+module/residential/autotest/test_microwave_cycle_length_limits_err.glm
+module/residential/autotest/test_microwave_demand_limits_opt.glm
+module/residential/autotest/test_microwave_energy.glt
+module/residential/autotest/test_microwave_energy.m
+module/residential/autotest/test_microwave_energy.player
+module/residential/autotest/test_microwave_energy_accumulation.glm
+module/residential/autotest/test_microwave_energy_accumulation.m
+module/residential/autotest/test_microwave_energy_accumulation.player
+module/residential/autotest/test_microwave_energy_opt.glm
+module/residential/autotest/test_microwave_explicit_swd_opt.glm
+module/residential/autotest/test_microwave_explicit_swy_opt.glm
+module/residential/autotest/test_microwave_explicit_wwd_opt.glm
+module/residential/autotest/test_microwave_explicit_wwy_opt.glm
+module/residential/autotest/test_microwave_implicit.glm
+module/residential/autotest/test_microwave_implicit_swd_opt.glm
+module/residential/autotest/test_microwave_implicit_swy_opt.glm
+module/residential/autotest/test_microwave_implicit_wwd_opt.glm
+module/residential/autotest/test_microwave_implicit_wwy_opt.glm
+module/residential/autotest/test_microwave_internal_gains_0.player
+module/residential/autotest/test_microwave_internal_gains_1.player
+module/residential/autotest/test_microwave_internal_gains_opt.glm
+module/residential/autotest/test_microwave_standby_power_limits.player
+module/residential/autotest/test_microwave_standby_power_limits_opt.glm
+module/residential/autotest/test_occupantload_enduse_load0.glm
+module/residential/autotest/test_plugload_demand_range_bounds_opt.glm
+module/residential/autotest/test_plugload_enduse_load.glm
+module/residential/autotest/test_plugload_enduse_load_swd.player
+module/residential/autotest/test_plugload_enduse_load_swy.player
+module/residential/autotest/test_plugload_enduse_load_wwy.player
+module/residential/autotest/test_plugload_energy_meter_opt.glm
+module/residential/autotest/test_plugload_energy_swd.player
+module/residential/autotest/test_plugload_energy_swy.player
+module/residential/autotest/test_plugload_energy_wwd.player
+module/residential/autotest/test_plugload_energy_wwy.player
+module/residential/autotest/test_plugload_explicit_swd.glm
+module/residential/autotest/test_plugload_explicit_swy.glm
+module/residential/autotest/test_plugload_explicit_wwd_opt.glm
+module/residential/autotest/test_plugload_explicit_wwy.glm
+module/residential/autotest/test_plugload_heatgain_swd.player
+module/residential/autotest/test_plugload_heatgain_swy.player
+module/residential/autotest/test_plugload_heatgain_wwd.player
+module/residential/autotest/test_plugload_heatgain_wwy.player
+module/residential/autotest/test_plugload_implicit_swd_opt.glm
+module/residential/autotest/test_plugload_implicit_swy_opt.glm
+module/residential/autotest/test_plugload_implicit_wwd_opt.glm
+module/residential/autotest/test_plugload_implicit_wwy_opt.glm
+module/residential/autotest/test_plugload_internal_gains_hf.glm
+module/residential/autotest/test_plugload_internal_gains_opt.glm
+module/residential/autotest/test_range_explicit_energy1_opt.glm
+module/residential/autotest/test_range_explicit_energy2_opt.glm
+module/residential/autotest/test_range_explicit_energy3_opt.glm
+module/residential/autotest/test_range_explicit_energy4_opt.glm
+module/residential/autotest/test_range_implicit_opt.glm
+module/residential/autotest/test_range_opt.glm
+module/residential/autotest/test_range_power.player
+module/residential/autotest/test_range_power_opt.glm
+module/residential/autotest/test_rbsa.csv
+module/residential/autotest/test_rbsa.glm
+module/residential/autotest/test_rbsa_meter.csv
+module/residential/autotest/test_refrigerator_implicit.glm
+module/residential/autotest/test_residential_exercise_5_2_1.glm
+module/residential/autotest/test_residentialenduse_standalone.glm
+module/residential/autotest/test_residentialenduse_standalone_err.glm
+module/residential/autotest/test_solargains.glm
+module/residential/autotest/test_sump_builtin.csv
+module/residential/autotest/test_sump_builtin.glm
+module/residential/autotest/test_sump_builtin_paneldump.csv
+module/residential/autotest/test_sump_implicit.csv
+module/residential/autotest/test_sump_implicit.glm
+module/residential/autotest/test_sump_implicit_paneldump.csv
+module/residential/autotest/test_thermal_storage_SOC.player
+module/residential/autotest/test_thermal_storage_autotest.glm
+module/residential/autotest/test_thermal_storage_energy.player
+module/residential/autotest/test_waterheater_explicit_1.csv
+module/residential/autotest/test_waterheater_explicit_1.glm
+module/residential/autotest/test_waterheater_explicit_2.glm
+module/residential/autotest/test_waterheater_explicit_2_height.csv
+module/residential/autotest/test_waterheater_explicit_2_temperature.csv
+module/residential/autotest/test_waterheater_implicit.glm
+module/residential/autotest/test_zipload_pow_en_hg.glm
+module/residential/autotest/water_schedule.glm
+module/residential/autotest/waterheater_demand_waveform_sawtooth1.player
+module/residential/autotest/waterheater_demand_waveform_sawtooth2.player
+module/residential/autotest/waterheater_demand_waveform_sine.player
+module/residential/autotest/waterheater_demand_waveform_square.player
+module/residential/check_residential.py
+module/residential/clotheswasher.cpp
+module/residential/clotheswasher.h
+module/residential/data/evcharger/home-work.csv
+module/residential/data/evcharger/home-work.xls
+module/residential/dishwasher.cpp
+module/residential/dishwasher.h
+module/residential/docs/evcharger.ppt
+module/residential/docs/evcharger/Slide1.PNG
+module/residential/docs/evcharger/Slide2.PNG
+module/residential/dryer.cpp
+module/residential/dryer.h
+module/residential/eia2015.h
+module/residential/elcap1990.h
+module/residential/elcap2010.h
+module/residential/evcharger.cpp
+module/residential/evcharger.h
+module/residential/evcharger_det.cpp
+module/residential/evcharger_det.h
+module/residential/freezer.cpp
+module/residential/freezer.h
+module/residential/house_e.cpp
+module/residential/house_e.h
+module/residential/init.cpp
+module/residential/lights.cpp
+module/residential/lights.h
+module/residential/main.cpp
+module/residential/microwave.cpp
+module/residential/microwave.h
+module/residential/occupantload.cpp
+module/residential/occupantload.h
+module/residential/plugload.cpp
+module/residential/plugload.h
+module/residential/range.cpp
+module/residential/range.h
+module/residential/rbsa.cpp
+module/residential/rbsa.h
+module/residential/rbsa2014.h
+module/residential/rbsa2014_discrete.h
+module/residential/refrigerator.cpp
+module/residential/refrigerator.h
+module/residential/residential.h
+module/residential/residential_enduse.cpp
+module/residential/residential_enduse.h
+module/residential/solvers.cpp
+module/residential/solvers.h
+module/residential/thermal_storage.cpp
+module/residential/thermal_storage.h
+module/residential/waterheater.cpp
+module/residential/waterheater.h
+module/residential/zipload.cpp
+module/residential/zipload.h
+module/resilience/Makefile.mk
+module/resilience/autotest/.gitignore
+module/resilience/autotest/test_IEEE123_link_outages.glm
+module/resilience/autotest/test_IEEE123_link_outages.py
+module/resilience/autotest/test_metrics.glm
+module/resilience/autotest/test_metrics_cost_data.csv
+module/resilience/autotest/test_metrics_meter.csv
+module/resilience/autotest/test_metrics_meter_violation_detected.csv
+module/resilience/autotest/test_metrics_report.csv
+module/resilience/cost.cpp
+module/resilience/cost.h
+module/resilience/docs/.gitignore
+module/resilience/docs/230kV_example.csv
+module/resilience/docs/230kV_example_canopycover.csv
+module/resilience/docs/230kV_example_elevation.tif
+module/resilience/docs/MarinCounty-Vegetation-CanopyCover-2020-Summer-00010m.tif
+module/resilience/docs/Pole Vulnerability calculations.ipynb
+module/resilience/docs/Powerline vegetation impact example.ipynb
+module/resilience/docs/SanMateoCounty-Vegetation-CanopyCover-2020-Summer-00010m.tif
+module/resilience/docs/SantaCruzCounty-Vegetation-CanopyCover-2020-Summer-00010m.tif
+module/resilience/docs/TMY3-SF.csv
+module/resilience/docs/Vegetation Impact Analysis.pdf
+module/resilience/docs/Vegetation impact analysis.py
+module/resilience/docs/Vegetation impact validation.xlsx
+module/resilience/docs/elevation
+module/resilience/docs/elevation.py
+module/resilience/docs/pole_figure.png
+module/resilience/docs/vegetation.py
+module/resilience/impact.cpp
+module/resilience/impact.h
+module/resilience/main.cpp
+module/resilience/metrics.cpp
+module/resilience/metrics.h
+module/resilience/outage.cpp
+module/resilience/outage.h
+module/resilience/resilience.h
+module/revenue/Makefile.mk
+module/revenue/autotest/Tiered_rates_validation.xlsx
+module/revenue/autotest/billing.csv
+module/revenue/autotest/house.glm
+module/revenue/autotest/pgande/Res_Inclu_TOU_200301-200331.xlsx
+module/revenue/autotest/pgande/Res_Inclu_TOU_200501-200531-4.xlsx
+module/revenue/autotest/pgande/Res_Inclu_TOU_200601-200930.xlsx
+module/revenue/autotest/pgande/Res_Inclu_TOU_Current-7.xlsx
+module/revenue/autotest/pgande/pgande_res_tiered_200601.glm
+module/revenue/autotest/pgande/pgande_res_tiered_201001.glm
+module/revenue/autotest/pgande/pgande_residential_options.pdf
+module/revenue/autotest/pgande/pgande_residential_tariffs.pdf
+module/revenue/autotest/pgande_pcia_vintage.csv
+module/revenue/autotest/pgande_res_200301.glm
+module/revenue/autotest/pgande_res_201001.glm
+module/revenue/autotest/pgande_res_tou_200501.glm
+module/revenue/autotest/sce/ELECTRIC_SCHEDULES_D-CARE.pdf
+module/revenue/autotest/sce/ELECTRIC_SCHEDULES_D.pdf
+module/revenue/autotest/sce/ELECTRIC_SCHEDULES_TOU-D-T.pdf
+module/revenue/autotest/sce/ELECTRIC_SCHEDULES_TOU-D.pdf
+module/revenue/autotest/sce/pgande_residential_tariffs.pdf
+module/revenue/autotest/sce/sce_res_200101.glm
+module/revenue/autotest/sce/sce_res_200601.glm
+module/revenue/autotest/sce/sce_res_201001.glm
+module/revenue/autotest/sce/sce_res_tiered_200110.glm
+module/revenue/autotest/sce_res_201001.glm
+module/revenue/autotest/sdgande/1-1-20 Schedule TOU-DR Total Rates Table.pdf
+module/revenue/autotest/sdgande/2-1-20 Schedule DR Total Rates Table.pdf
+module/revenue/autotest/sdgande/2-1-20 Schedule TOU-DR Total Rates Table.pdf
+module/revenue/autotest/sdgande/4-1-20 Schedule DR Total Rates Table.pdf
+module/revenue/autotest/sdgande/4-1-20 Schedule TOU-DR Total Rates Table.pdf
+module/revenue/autotest/sdgande/6-1-20 Schedule DR Total Rates Table_0.pdf
+module/revenue/autotest/sdgande/sdgande_res_201001.glm
+module/revenue/autotest/sdgande/sdgande_res_tou_200901.glm
+module/revenue/autotest/sdgande_res_200601.glm
+module/revenue/autotest/test_billing.py
+module/revenue/autotest/test_pgande_billing.glm
+module/revenue/autotest/test_pgande_billing_bill_1.csv
+module/revenue/billing.cpp
+module/revenue/billing.h
+module/revenue/main.cpp
+module/revenue/revenue.h
+module/revenue/tariff.cpp
+module/revenue/tariff.h
+module/tape/Makefile.mk
+module/tape/autotest/data_configurations_delta_123node.glm
+module/tape/autotest/data_delta_player_load_A.csv
+module/tape/autotest/data_delta_player_load_A_check.csv
+module/tape/autotest/data_loadchange.csv
+module/tape/autotest/exercise_2_1_1.player
+module/tape/autotest/recorder_flush_test2.csv
+module/tape/autotest/test_collector_exercise_2_4_2.glm
+module/tape/autotest/test_collector_multiple_properties.glm
+module/tape/autotest/test_collector_triplex_meter.glm
+module/tape/autotest/test_delta_player_first_delta_timestep_err.glm
+module/tape/autotest/test_deltamode_player_endtime_err.glm
+module/tape/autotest/test_histogram_basic.glm
+module/tape/autotest/test_histogram_count_int.glm
+module/tape/autotest/test_histogram_enum.glm
+module/tape/autotest/test_histogram_set.glm
+module/tape/autotest/test_multi_recorder_multiple_properties.glm
+module/tape/autotest/test_multi_recorder_multiple_properties_long.glm
+module/tape/autotest/test_multiplayer.csv
+module/tape/autotest/test_multiplayer.glm
+module/tape/autotest/test_multiplayer_record_1.csv
+module/tape/autotest/test_multiplayer_record_2.csv
+module/tape/autotest/test_multirecorder_global.glm
+module/tape/autotest/test_player_buffer.glm
+module/tape/autotest/test_player_buffer.player
+module/tape/autotest/test_player_exercise_2_1_2.glm
+module/tape/autotest/test_player_header.csv
+module/tape/autotest/test_player_header.glm
+module/tape/autotest/test_player_header_output.csv
+module/tape/autotest/test_recorder_epoch.glm
+module/tape/autotest/test_recorder_exercise_2_2_2.glm
+module/tape/autotest/test_recorder_flush.csv
+module/tape/autotest/test_recorder_flush_0.csv
+module/tape/autotest/test_recorder_flush_0.glm
+module/tape/autotest/test_recorder_flush_1_err.glm
+module/tape/autotest/test_recorder_flush_300.csv
+module/tape/autotest/test_recorder_flush_300.glm
+module/tape/autotest/test_recorder_flush_sync.py
+module/tape/autotest/test_recorder_global.glm
+module/tape/autotest/test_recorder_interval_err.glm
+module/tape/autotest/test_recorder_multiple_properties.glm
+module/tape/autotest/test_recorder_strftime_format.glm
+module/tape/autotest/test_tape_whitespace.glm
+module/tape/autotest/water_and_setpoint_schedule_v3.glm
+module/tape/collector.cpp
+module/tape/file.cpp
+module/tape/file.h
+module/tape/group_recorder.cpp
+module/tape/group_recorder.h
+module/tape/histogram.cpp
+module/tape/histogram.h
+module/tape/loadshape.cpp
+module/tape/loadshape.h
+module/tape/main.cpp
+module/tape/memory.cpp
+module/tape/memory.h
+module/tape/metrics_collector.cpp
+module/tape/metrics_collector.h
+module/tape/metrics_collector_writer.cpp
+module/tape/metrics_collector_writer.h
+module/tape/multi_recorder.cpp
+module/tape/multiplayer.cpp
+module/tape/multiplayer.h
+module/tape/player.cpp
+module/tape/recorder.cpp
+module/tape/schedule.cpp
+module/tape/schedule.h
+module/tape/shaper.cpp
+module/tape/tape.cpp
+module/tape/tape.h
+module/tape/violation_recorder.cpp
+module/tape/violation_recorder.h
+module/tape_file/Makefile.mk
+module/tape_file/ReadMe.txt
+module/tape_file/tape_file.cpp
+module/tape_file/tape_file.h
+module/tape_memory/tape_memory.cpp
+module/tape_memory/tape_memory.h
+module/tape_plot/Makefile.mk
+module/tape_plot/ReadMe.txt
+module/tape_plot/tape_plot.cpp
+module/tape_plot/tape_plot.h
+module/tariff/Makefile.mk
+module/tariff/autotest/Res_Inclu_TOU_Current.xlsx
+module/tariff/main.cpp
+module/transactive/Makefile.mk
+module/transactive/agent.cpp
+module/transactive/agent.h
+module/transactive/autotest/test_agent_method.glm
+module/transactive/doc/transactive.tex
+module/transactive/house.cpp
+module/transactive/house.h
+module/transactive/main.cpp
+module/transactive/transactive.h
+module/transactive/validate.no
+python/.gitignore
+python/Makefile.mk
+python/README.md
+python/autotest/test_external_callback.glm
+python/autotest/test_external_callback.py
+python/autotest/test_fast_accessor.glm
+python/autotest/test_fast_accessor.py
+python/config_external.h
+python/examples/example_1/handlers.py
+python/examples/example_1/model.glm
+python/examples/example_2/handlers.py
+python/examples/example_2/main.py
+python/examples/example_2/model.glm
+python/examples/example_3/main.py
+python/examples/example_3/model.glm
+python/examples/example_3/x.csv
+python/examples/example_4/test_memory.glm
+python/examples/example_4/test_memory.py
+python/examples/example_4/test_memory_module.py
+python/external/nreca/AddLoadShapes.py
+python/external/nreca/AddTapeObjects.py
+python/external/nreca/CommercialLoads.py
+python/external/nreca/Config_Parameter_Limits.py
+python/external/nreca/Configuration.py
+python/external/nreca/IEEE13Basic.glm
+python/external/nreca/Milsoft_GridLAB_D_Feeder_Generation.py
+python/external/nreca/OMFmain.py
+python/external/nreca/ResidentialLoads.py
+python/external/nreca/Sid_New/Sid_PNNL_Solar.py
+python/external/nreca/Sid_New/Sid_Test_for_calling_functions.py
+python/external/nreca/Sid_New/Sid_add_glm_object_dictionary.py
+python/external/nreca/Solar_Technology.py
+python/external/nreca/TechnologyParameters.py
+python/external/nreca/add_glm_object_dictionary.py
+python/external/nreca/add_thermal_storage.py
+python/external/nreca/calibrateFeeder.py
+python/external/nreca/chooseAction.py
+python/external/nreca/convert_cyme_model.py
+python/external/nreca/feeder.py
+python/external/nreca/feeder_parse_mod.py
+python/external/nreca/gleanMetrics.py
+python/external/nreca/makeGLM.py
+python/external/nreca/makeWSM.py
+python/external/nreca/next_choice_action.py
+python/external/nreca/processSCADA.py
+python/external/nreca/takeAction.py
+python/external/pnnl/Inverter_Function_File.py
+python/external/pnnl/Inverter_Monte_Carlo.py
+python/external/pnnl/Inverter_add_glm_object_dictionary.py
+python/external/pnnl/Sid_Batch_File_Gen.py
+python/external/pnnl/Sid_PNNL_Solar.py
+python/external/pnnl/Sid_Test_for_calling_functions.py
+python/external/pnnl/Sid_add_glm_object_dictionary.py
+python/external/stanford/__init__.py
+python/external/stanford/account.py
+python/external/stanford/config.py
+python/external/stanford/converter.py
+python/external/stanford/element/__init__.py
+python/external/stanford/element/elementBase.py
+python/external/stanford/element/powerflow/__init__.py
+python/external/stanford/element/powerflow/billdump.py
+python/external/stanford/element/powerflow/currdump.py
+python/external/stanford/element/powerflow/emissions.py
+python/external/stanford/element/powerflow/fault_check.py
+python/external/stanford/element/powerflow/frequency_gen.py
+python/external/stanford/element/powerflow/line_configuration.py
+python/external/stanford/element/powerflow/line_spacing.py
+python/external/stanford/element/powerflow/overhead_line_conductor.py
+python/external/stanford/element/powerflow/power_metrics.py
+python/external/stanford/element/powerflow/powerflow_library.py
+python/external/stanford/element/powerflow/powerflow_object.py
+python/external/stanford/element/powerflow/regulator_configuration.py
+python/external/stanford/element/powerflow/restoration.py
+python/external/stanford/element/powerflow/transformer_configuration.py
+python/external/stanford/element/powerflow/triplex_line_conductor.py
+python/external/stanford/element/powerflow/triplex_line_configuration.py
+python/external/stanford/element/powerflow/underground_line_conductor.py
+python/external/stanford/element/powerflow/volt_var_control.py
+python/external/stanford/element/powerflow/voltdump.py
+python/external/stanford/element/wholesale/__init__.py
+python/external/stanford/element/wholesale/areas.py
+python/external/stanford/element/wholesale/baseMVA.py
+python/external/stanford/element/wholesale/branch.py
+python/external/stanford/element/wholesale/bus.py
+python/external/stanford/element/wholesale/gen.py
+python/external/stanford/element/wholesale/gen_cost.py
+python/external/stanford/elementbase.py
+python/external/stanford/model.py
+python/external/stanford/project.py
+python/external/stanford/result.py
+python/external/stanford/script.py
+python/external/stanford/simulation.py
+python/extras/.gitignore
+python/extras/buildmodel.py
+python/extras/csv_merge/csv_merge.py
+python/extras/dataframe.py
+python/extras/doc/make.bat
+python/extras/doc/network_tree.ipynb
+python/extras/doc/source/GettingStarted.rst
+python/extras/doc/source/conf.py
+python/extras/doc/source/index.rst
+python/extras/doc/source/reference/gridspice.account.rst
+python/extras/doc/source/reference/gridspice.model.rst
+python/extras/doc/source/reference/gridspice.project.rst
+python/extras/doc/source/reference/gridspice.rst
+python/extras/doc/source/reference/gridspice.simulation.rst
+python/extras/doc/source/reference/index.rst
+python/extras/doc/source/rest.rst
+python/extras/example/house.glm
+python/extras/example/power.csv
+python/extras/example/tstat_commit.py
+python/extras/example/tstat_init.py
+python/extras/example/weather.csv
+python/extras/glm.py
+python/extras/gridlabd.py
+python/extras/gridlabd_library.py
+python/extras/gridlabd_library_config.py
+python/extras/gridlabd_library_config_default.py
+python/extras/modelscript.py
+python/extras/runsimulation.py
+python/extras/validate_json.py
+python/extras/volt_dump/meter_record.py
+python/extras/volt_dump/voltdump.py
+python/gridlabd_python.py
+python/pstatus.py
+python/pyproject.toml
+python/python.cpp
+python/python_gridlabd.py
+python/requirements.csv
+python/requirements.py
+python/setup.py
+python/validate.py
+requirements.txt
+runtime/Makefile.mk
+runtime/README.md
+runtime/about.htm
+runtime/capacitor_b.png
+runtime/capacitor_g.png
+runtime/capacitor_k.png
+runtime/capacitor_r.png
+runtime/debugger.conf
+runtime/eula.htm
+runtime/favicon.ico
+runtime/feeder.py
+runtime/file_dialog.htm
+runtime/gnuplot.conf
+runtime/gridlabd.cnf
+runtime/gridlabd.conf
+runtime/gridlabd.css
+runtime/gridlabd.h
+runtime/gridlabd.htm
+runtime/gridlabd.jpg
+runtime/gridlabd.js
+runtime/gridlabd.rc
+runtime/gridlabd.syn
+runtime/gridlabd_py.py
+runtime/kml_icons.pptx
+runtime/load_b.png
+runtime/load_g.png
+runtime/load_k.png
+runtime/load_r.png
+runtime/main.htm
+runtime/meter_g.png
+runtime/mingw.conf
+runtime/node_b.png
+runtime/node_g.png
+runtime/node_k.png
+runtime/node_r.png
+runtime/regulator_b.png
+runtime/regulator_g.png
+runtime/regulator_k.png
+runtime/regulator_r.png
+runtime/resource.csv
+runtime/switch_b.png
+runtime/switch_g.png
+runtime/switch_k.png
+runtime/switch_r.png
+runtime/transformer_b.png
+runtime/transformer_g.png
+runtime/transformer_k.png
+runtime/transformer_r.png
+runtime/triplex_meter_b.png
+runtime/triplex_meter_g.png
+runtime/triplex_meter_k.png
+runtime/triplex_meter_r.png
+runtime/tzinfo.txt
+runtime/unitfile.txt
+setup.sh
+setup/Darwin.sh
+setup/Linux.sh
+setup/README.md
+setup/darwin_20.sh
+setup/darwin_21.sh
+setup/darwin_22.sh
+setup/darwin_23.sh
+setup/ubuntu_20.sh
+setup/ubuntu_22.sh
+setup/ubuntu_24-x86_64.sh
+source/.gitignore
+source/Comments.txt
+source/GUI.MACOSX
+source/Languages.txt
+source/Makefile.mk
+source/Project.txt
+source/README.md
+source/aggregate.cpp
+source/aggregate.h
+source/autotest/.gitignore
+source/autotest/ceus.csv
+source/autotest/check_correlation.py
+source/autotest/check_dotted_name.py
+source/autotest/check_json.py
+source/autotest/config.csv
+source/autotest/deferred1.glm
+source/autotest/deferred2.glm
+source/autotest/diff_randomseed
+source/autotest/example.glm
+source/autotest/example.py
+source/autotest/hello.c
+source/autotest/ica_test.csv
+source/autotest/loader_variables_include.glm
+source/autotest/modify.csv
+source/autotest/plotxy.py
+source/autotest/save_randomseed
+source/autotest/save_randomstate
+source/autotest/t_mass.csv
+source/autotest/test_aws_help.glm
+source/autotest/test_bare_class.glm
+source/autotest/test_c_include.glm
+source/autotest/test_ceus_converter.glm
+source/autotest/test_class_event_handler.glm
+source/autotest/test_class_event_handler.py
+source/autotest/test_clock_json.glm
+source/autotest/test_clock_json.py
+source/autotest/test_compare_1.json
+source/autotest/test_compare_2.json
+source/autotest/test_compare_3.json
+source/autotest/test_compare_help.glm
+source/autotest/test_compare_json.glm
+source/autotest/test_compare_json_err.glm
+source/autotest/test_compileonly.glm
+source/autotest/test_complex_format.glm
+source/autotest/test_config.glm
+source/autotest/test_config_prefix.glm
+source/autotest/test_config_relax.glm
+source/autotest/test_core_4blocks_schedule.glm
+source/autotest/test_core_4blocks_schedule.player
+source/autotest/test_core_5blocks_schedule_err.glm
+source/autotest/test_core_63_schedule.glm
+source/autotest/test_core_63_schedule.player
+source/autotest/test_core_64_schedule_err.glm
+source/autotest/test_core_player_schedule_1.glm
+source/autotest/test_core_player_schedule_1.player
+source/autotest/test_core_player_schedule_2.player
+source/autotest/test_core_schedules_boolean_err.glm
+source/autotest/test_core_schedules_nonzero_err.glm
+source/autotest/test_core_schedules_positive_err.glm
+source/autotest/test_deferred_init_memory.glm
+source/autotest/test_deferred_name_resolution.glm
+source/autotest/test_deltamode_err.glm
+source/autotest/test_deltamode_house_player.csv
+source/autotest/test_dotted_name.glm
+source/autotest/test_double_array.glm
+source/autotest/test_dump.glm
+source/autotest/test_duplication_function_err.glm
+source/autotest/test_exec_mainloop.glm
+source/autotest/test_external_null_source.glm
+source/autotest/test_filter_constraint.csv
+source/autotest/test_filter_constraint.glm
+source/autotest/test_filter_delay.glm
+source/autotest/test_filter_second.glm
+source/autotest/test_findfile.glm
+source/autotest/test_for.glm
+source/autotest/test_geocode.glm
+source/autotest/test_git_help.glm
+source/autotest/test_global_python.glm
+source/autotest/test_global_shell.glm
+source/autotest/test_global_unit_convert.glm
+source/autotest/test_global_var_expansion.glm
+source/autotest/test_groupid.glm
+source/autotest/test_groupid_noclass.glm
+source/autotest/test_guid.glm
+source/autotest/test_help.glm
+source/autotest/test_ica_converter.glm
+source/autotest/test_if_condition.glm
+source/autotest/test_if_condition_err.glm
+source/autotest/test_if_seq.glm
+source/autotest/test_include_subcommand.glm
+source/autotest/test_include_subcommand.txt
+source/autotest/test_inherit.glm
+source/autotest/test_inline_global_replacement.glm
+source/autotest/test_inline_plc.glm
+source/autotest/test_inline_python.glm
+source/autotest/test_iso_datetime.glm
+source/autotest/test_iso_datetime.py
+source/autotest/test_iso_datetime_macro.glm
+source/autotest/test_json-get_help.glm
+source/autotest/test_json.glm
+source/autotest/test_json_block.glm
+source/autotest/test_json_conversion.glm
+source/autotest/test_json_escape_string.glm
+source/autotest/test_json_onexit.glm
+source/autotest/test_kml_output.glm
+source/autotest/test_latlon.glm
+source/autotest/test_library_help.glm
+source/autotest/test_library_include.glm
+source/autotest/test_library_index.glm
+source/autotest/test_library_option_opt.glm
+source/autotest/test_loader_variables.glm
+source/autotest/test_loaderhook_goodbye_err.glm
+source/autotest/test_loaderhook_hello.glm
+source/autotest/test_loaderhook_initfailed_err.glm
+source/autotest/test_loaderhook_noinit.glm
+source/autotest/test_loaderhook_notfound_err.glm
+source/autotest/test_loaderhook_notparser_err.glm
+source/autotest/test_loadshape_analog.glm
+source/autotest/test_loadshape_exercise_2_3_3.csv
+source/autotest/test_loadshape_exercise_2_3_3_opt.glm
+source/autotest/test_locale.glm
+source/autotest/test_manual_help.glm
+source/autotest/test_modify.glm
+source/autotest/test_notz.glm
+source/autotest/test_now.glm
+source/autotest/test_object_message_flags.glm
+source/autotest/test_on_exit_0_err.glm
+source/autotest/test_on_exit_1.glm
+source/autotest/test_on_exit_5.glm
+source/autotest/test_on_exit_err.glm
+source/autotest/test_onexit_command.glm
+source/autotest/test_opt_alternate_syntax.glm
+source/autotest/test_opt_commit.glm
+source/autotest/test_opt_core_pc_and_fn.glm
+source/autotest/test_opt_core_runtime_class.glm
+source/autotest/test_opt_runtime_exercise_3_1_1.glm
+source/autotest/test_output_save.glm
+source/autotest/test_parameter_expansion.glm
+source/autotest/test_pathparser.glm
+source/autotest/test_python_help.glm
+source/autotest/test_python_property.glm
+source/autotest/test_python_property.py
+source/autotest/test_quoted_if_test.glm
+source/autotest/test_quoted_value.glm
+source/autotest/test_random.glm
+source/autotest/test_random_correlation.glm
+source/autotest/test_range.glm
+source/autotest/test_require.glm
+source/autotest/test_require_err.glm
+source/autotest/test_require_pandas.glm
+source/autotest/test_require_pwlf.glm
+source/autotest/test_require_pytz.glm
+source/autotest/test_run.glm
+source/autotest/test_rusage.glm
+source/autotest/test_schedule_skew.glm
+source/autotest/test_schedule_skew_1.player
+source/autotest/test_schedule_skew_2.player
+source/autotest/test_schedule_types.glm
+source/autotest/test_schedule_xform.glm
+source/autotest/test_schedule_xform_external.glm
+source/autotest/test_script.glm
+source/autotest/test_script_err.glm
+source/autotest/test_script_event.glm
+source/autotest/test_script_oncommit.glm
+source/autotest/test_script_onfinalize.glm
+source/autotest/test_script_onpostsync.glm
+source/autotest/test_script_onprecommit.glm
+source/autotest/test_script_onpresync.glm
+source/autotest/test_script_onsync.glm
+source/autotest/test_seq.glm
+source/autotest/test_simple_schedule.glm
+source/autotest/test_statefull_randomization.glm
+source/autotest/test_stoptime_err.glm
+source/autotest/test_stream_out.glm
+source/autotest/test_string.glm
+source/autotest/test_string_err.glm
+source/autotest/test_struct.glm
+source/autotest/test_struct.player
+source/autotest/test_subcommand_pipe.glm
+source/autotest/test_subcommand_pipe_err.glm
+source/autotest/test_subcommand_template.glm
+source/autotest/test_subcommand_weather.csv
+source/autotest/test_subcommand_weather.glm
+source/autotest/test_subcommand_weather_err.glm
+source/autotest/test_template_index.glm
+source/autotest/test_template_option.glm
+source/autotest/test_timestamp_err.glm
+source/autotest/test_validate_help.glm
+source/autotest/test_version_macro.glm
+source/autotest/test_version_macro_err.glm
+source/autotest/test_wait.glm
+source/autotest/test_wait_err.glm
+source/autotest/test_weather_help.glm
+source/autotest/test_wget.glm
+source/class.cpp
+source/class.h
+source/cmdarg.cpp
+source/cmdarg.h
+source/cmex.c
+source/cmex.h
+source/compare.cpp
+source/compare.h
+source/complex.h
+source/console.h
+source/convert.cpp
+source/convert.h
+source/core.vcproj
+source/curl.cpp
+source/curl.h
+source/daemon.cpp
+source/daemon.h
+source/debug.cpp
+source/debug.h
+source/deltamode.cpp
+source/deltamode.h
+source/docs/Loadshapes.ipynb
+source/enduse.cpp
+source/enduse.h
+source/environment.cpp
+source/environment.h
+source/exception.cpp
+source/exception.h
+source/exec.cpp
+source/exec.h
+source/find.cpp
+source/find.h
+source/gld_sock.h
+source/gldcore.h
+source/globals.cpp
+source/globals.h
+source/gridlabd-2_0.xsl
+source/gridlabd.h
+source/gridlabd.htm
+source/gridlabd.in
+source/gridlabd.m4sh
+source/gui.cpp
+source/gui.h
+source/gui/tab_b.gif
+source/gui/tab_l.gif
+source/gui/tab_r.gif
+source/html/Comments.txt
+source/html/Languages.txt
+source/html/Project.txt
+source/http_client.cpp
+source/http_client.h
+source/index.cpp
+source/index.h
+source/instance.cpp
+source/instance.h
+source/instance_cnx.cpp
+source/instance_cnx.h
+source/instance_slave.cpp
+source/instance_slave.h
+source/interpolate.cpp
+source/interpolate.h
+source/job.cpp
+source/job.h
+source/json.cpp
+source/json.h
+source/kill.cpp
+source/kill.h
+source/kill/kill.cpp
+source/kill/kill.vcproj
+source/kill/stdafx.cpp
+source/kill/stdafx.h
+source/kml.cpp
+source/kml.h
+source/legal.cpp
+source/legal.h
+source/link.cpp
+source/link.h
+source/link/engine/Makefile.mk
+source/link/engine/autotest/test_engine.glm
+source/link/engine/autotest/test_engine.link
+source/link/engine/autotest/validate.no
+source/link/engine/engine.cpp
+source/link/engine/engine.h
+source/link/engine/engine.vcproj
+source/link/engine/glengine/absconnection.cpp
+source/link/engine/glengine/absconnection.h
+source/link/engine/glengine/example.cpp
+source/link/engine/glengine/glengine.cpp
+source/link/engine/glengine/glengine.h
+source/link/engine/glengine/glengine.vcproj
+source/link/engine/glengine/glproperty.cpp
+source/link/engine/glengine/glproperty.h
+source/link/engine/glengine/test/test_engine.glm
+source/link/engine/glengine/test/test_engine.link
+source/link/engine/glengine/udpconnection.cpp
+source/link/engine/glengine/udpconnection.h
+source/link/engine/udpconnection.cpp
+source/link/matlab/MATLAB_specific_win32.vsprops
+source/link/matlab/MATLAB_specific_x64.vsprops
+source/link/matlab/Makefile.mk
+source/link/matlab/autotest/matlab_avi.link
+source/link/matlab/autotest/matlab_plot.link
+source/link/matlab/autotest/test_avi.glm
+source/link/matlab/autotest/test_plot.glm
+source/link/matlab/matlab.cpp
+source/link/matlab/matlab.ncb
+source/link/matlab/matlab.vcproj
+source/linkage.cpp
+source/linkage.h
+source/list.cpp
+source/list.h
+source/load.cpp
+source/load.h
+source/loadshape.cpp
+source/loadshape.h
+source/local.cpp
+source/local.h
+source/lock.cpp
+source/lock.h
+source/main.cpp
+source/main.h
+source/match.cpp
+source/match.h
+source/matlab.cpp
+source/matlab.h
+source/module.cpp
+source/module.h
+source/object.cpp
+source/object.h
+source/output.cpp
+source/output.h
+source/platform.h
+source/property.cpp
+source/property.h
+source/python_embed.cpp
+source/python_embed.h
+source/python_property.cpp
+source/python_property.h
+source/random.cpp
+source/random.h
+source/realtime.cpp
+source/realtime.h
+source/sanitize.cpp
+source/sanitize.h
+source/save.cpp
+source/save.h
+source/schedule.cpp
+source/schedule.h
+source/server.cpp
+source/server.h
+source/setup.cpp
+source/setup.h
+source/solvers/Makefile.mk
+source/solvers/etp.cpp
+source/solvers/main.cpp
+source/solvers/modified_euler.cpp
+source/solvers/newton_method.cpp
+source/stream.cpp
+source/stream.h
+source/stream_type.h
+source/test.cpp
+source/test.h
+source/threadpool.cpp
+source/threadpool.h
+source/timestamp.cpp
+source/timestamp.h
+source/tmpfile.cpp
+source/tmpfile.h
+source/transform.cpp
+source/transform.h
+source/ufile.cpp
+source/ufile.h
+source/unit.cpp
+source/unit.h
+source/validate.cpp
+source/validate.h
+source/version.cpp
+source/version.h
+source/versions.txt
+source/xcore.cpp
+source/xcore.h
+subcommands/Makefile.mk
+subcommands/README.md
+subcommands/autotest/13.glm
+subcommands/autotest/check_model.glm
+subcommands/autotest/check_model.py
+subcommands/autotest/geodata_example.glm
+subcommands/autotest/geodata_example.sh
+subcommands/autotest/gridlabd-config.glm
+subcommands/autotest/gridlabd-job.csv
+subcommands/autotest/job-clock.glm
+subcommands/autotest/path_example.csv
+subcommands/autotest/test_contributors.glm
+subcommands/autotest/test_geodata.glm
+subcommands/autotest/test_geodata.txt
+subcommands/autotest/test_geodata_address.glm
+subcommands/autotest/test_geodata_elevation.glm
+subcommands/autotest/test_geodata_utility.glm
+subcommands/autotest/test_job.glm
+subcommands/autotest/test_job_modfile.glm
+subcommands/autotest/test_job_modfile_err.glm
+subcommands/autotest/test_loaddata_comstock.csv
+subcommands/autotest/test_loaddata_comstock.glm
+subcommands/autotest/test_loaddata_glm.glm
+subcommands/autotest/test_loaddata_glm_out.csv
+subcommands/autotest/test_loaddata_resstock.csv
+subcommands/autotest/test_loaddata_resstock.glm
+subcommands/autotest/test_matrix.glm
+subcommands/autotest/test_matrix_linalg.glm
+subcommands/autotest/test_matrix_matlib.glm
+subcommands/autotest/test_matrix_matrix.glm
+subcommands/autotest/test_matrix_random.glm
+subcommands/autotest/test_model.glm
+subcommands/autotest/test_openfido_opt.glm
+subcommands/autotest/test_plot.glm
+subcommands/autotest/test_plot.png
+subcommands/autotest/test_subcommand_check.glm
+subcommands/autotest/test_subcommand_check_err.glm
+subcommands/autotest/test_timezone.glm
+subcommands/gridlabd-assert
+subcommands/gridlabd-aws
+subcommands/gridlabd-building
+subcommands/gridlabd-check
+subcommands/gridlabd-compare
+subcommands/gridlabd-contributors
+subcommands/gridlabd-convert
+subcommands/gridlabd-docs
+subcommands/gridlabd-example
+subcommands/gridlabd-geodata
+subcommands/gridlabd-git
+subcommands/gridlabd-help
+subcommands/gridlabd-job
+subcommands/gridlabd-json-get
+subcommands/gridlabd-library
+subcommands/gridlabd-loaddata
+subcommands/gridlabd-lock
+subcommands/gridlabd-manual
+subcommands/gridlabd-marimo
+subcommands/gridlabd-matrix
+subcommands/gridlabd-model
+subcommands/gridlabd-openfido
+subcommands/gridlabd-pandas
+subcommands/gridlabd-plot
+subcommands/gridlabd-python
+subcommands/gridlabd-require
+subcommands/gridlabd-requirements
+subcommands/gridlabd-server
+subcommands/gridlabd-source
+subcommands/gridlabd-template
+subcommands/gridlabd-timezone
+subcommands/gridlabd-trace
+subcommands/gridlabd-validate
+subcommands/gridlabd-version
+subcommands/gridlabd-weather
+third_party/.gitignore
+third_party/CBLAS/Makefile.mk
+third_party/CBLAS/caxpy.c
+third_party/CBLAS/ccopy.c
+third_party/CBLAS/cdotc.c
+third_party/CBLAS/cgemv.c
+third_party/CBLAS/cgerc.c
+third_party/CBLAS/chemv.c
+third_party/CBLAS/cher2.c
+third_party/CBLAS/cscal.c
+third_party/CBLAS/ctrsv.c
+third_party/CBLAS/dasum.c
+third_party/CBLAS/daxpy.c
+third_party/CBLAS/dcabs1.c
+third_party/CBLAS/dcopy.c
+third_party/CBLAS/ddot.c
+third_party/CBLAS/dgemv.c
+third_party/CBLAS/dger.c
+third_party/CBLAS/dnrm2.c
+third_party/CBLAS/drot.c
+third_party/CBLAS/dscal.c
+third_party/CBLAS/dsymv.c
+third_party/CBLAS/dsyr2.c
+third_party/CBLAS/dtrsv.c
+third_party/CBLAS/dzasum.c
+third_party/CBLAS/dznrm2.c
+third_party/CBLAS/f2c.h
+third_party/CBLAS/icamax.c
+third_party/CBLAS/idamax.c
+third_party/CBLAS/isamax.c
+third_party/CBLAS/izamax.c
+third_party/CBLAS/sasum.c
+third_party/CBLAS/saxpy.c
+third_party/CBLAS/scasum.c
+third_party/CBLAS/scnrm2.c
+third_party/CBLAS/scopy.c
+third_party/CBLAS/sdot.c
+third_party/CBLAS/sgemv.c
+third_party/CBLAS/sger.c
+third_party/CBLAS/slu_Cnames.h
+third_party/CBLAS/snrm2.c
+third_party/CBLAS/srot.c
+third_party/CBLAS/sscal.c
+third_party/CBLAS/ssymv.c
+third_party/CBLAS/ssyr2.c
+third_party/CBLAS/strsv.c
+third_party/CBLAS/superlu_f2c.h
+third_party/CBLAS/zaxpy.c
+third_party/CBLAS/zcopy.c
+third_party/CBLAS/zdotc.c
+third_party/CBLAS/zgemv.c
+third_party/CBLAS/zgerc.c
+third_party/CBLAS/zhemv.c
+third_party/CBLAS/zher2.c
+third_party/CBLAS/zscal.c
+third_party/CBLAS/ztrsv.c
+third_party/Makefile.mk
+third_party/README.md
+third_party/jama125/jama_cholesky.h
+third_party/jama125/jama_eig.h
+third_party/jama125/jama_lu.h
+third_party/jama125/jama_qr.h
+third_party/jama125/jama_svd.h
+third_party/jsonCpp/Makefile.mk
+third_party/jsonCpp/json/json-forwards.h
+third_party/jsonCpp/json/json.h
+third_party/jsonCpp/jsoncpp.cpp
+third_party/superLU_MT/LICENSE.txt
+third_party/superLU_MT/Makefile.mk
+third_party/superLU_MT/Makefile_combined.mk
+third_party/superLU_MT/await.c
+third_party/superLU_MT/cgscon.c
+third_party/superLU_MT/cgsequ.c
+third_party/superLU_MT/cgsrfs.c
+third_party/superLU_MT/cgstrs.c
+third_party/superLU_MT/clacon.c
+third_party/superLU_MT/clangs.c
+third_party/superLU_MT/claqgs.c
+third_party/superLU_MT/cmatgen.c
+third_party/superLU_MT/cmyblas2.c
+third_party/superLU_MT/colamd.c
+third_party/superLU_MT/colamd.h
+third_party/superLU_MT/cpivotgrowth.c
+third_party/superLU_MT/creadhb.c
+third_party/superLU_MT/creadmt.c
+third_party/superLU_MT/csp_blas2.c
+third_party/superLU_MT/csp_blas3.c
+third_party/superLU_MT/dclock.c
+third_party/superLU_MT/dcomplex.c
+third_party/superLU_MT/dgscon.c
+third_party/superLU_MT/dgsequ.c
+third_party/superLU_MT/dgsrfs.c
+third_party/superLU_MT/dgstrs.c
+third_party/superLU_MT/dlacon.c
+third_party/superLU_MT/dlamch.c
+third_party/superLU_MT/dlangs.c
+third_party/superLU_MT/dlaqgs.c
+third_party/superLU_MT/dmatgen.c
+third_party/superLU_MT/dmyblas2.c
+third_party/superLU_MT/dpivotgrowth.c
+third_party/superLU_MT/dreadhb.c
+third_party/superLU_MT/dreadmt.c
+third_party/superLU_MT/dsp_blas2.c
+third_party/superLU_MT/dsp_blas3.c
+third_party/superLU_MT/dzsum1.c
+third_party/superLU_MT/get_perm_c.c
+third_party/superLU_MT/heap_relax_snode.c
+third_party/superLU_MT/icmax1.c
+third_party/superLU_MT/izmax1.c
+third_party/superLU_MT/lsame.c
+third_party/superLU_MT/memory_leak.c
+third_party/superLU_MT/mmd.c
+third_party/superLU_MT/pcgssv.c
+third_party/superLU_MT/pcgssvx.c
+third_party/superLU_MT/pcgstrf.c
+third_party/superLU_MT/pcgstrf_bmod1D.c
+third_party/superLU_MT/pcgstrf_bmod1D_mv2.c
+third_party/superLU_MT/pcgstrf_bmod2D.c
+third_party/superLU_MT/pcgstrf_bmod2D_mv2.c
+third_party/superLU_MT/pcgstrf_column_bmod.c
+third_party/superLU_MT/pcgstrf_column_dfs.c
+third_party/superLU_MT/pcgstrf_copy_to_ucol.c
+third_party/superLU_MT/pcgstrf_factor_snode.c
+third_party/superLU_MT/pcgstrf_init.c
+third_party/superLU_MT/pcgstrf_mark_busy_descends.c
+third_party/superLU_MT/pcgstrf_panel_bmod.c
+third_party/superLU_MT/pcgstrf_panel_dfs.c
+third_party/superLU_MT/pcgstrf_pivotL.c
+third_party/superLU_MT/pcgstrf_pruneL.c
+third_party/superLU_MT/pcgstrf_relax_snode.c
+third_party/superLU_MT/pcgstrf_scheduler.c
+third_party/superLU_MT/pcgstrf_snode_bmod.c
+third_party/superLU_MT/pcgstrf_snode_dfs.c
+third_party/superLU_MT/pcgstrf_thread.c
+third_party/superLU_MT/pcgstrf_thread_finalize.c
+third_party/superLU_MT/pcgstrf_thread_init.c
+third_party/superLU_MT/pcmemory.c
+third_party/superLU_MT/pcsp_defs.h
+third_party/superLU_MT/pcutil.c
+third_party/superLU_MT/pdgssv.c
+third_party/superLU_MT/pdgssvx.c
+third_party/superLU_MT/pdgstrf.c
+third_party/superLU_MT/pdgstrf_bmod1D.c
+third_party/superLU_MT/pdgstrf_bmod1D_mv2.c
+third_party/superLU_MT/pdgstrf_bmod2D.c
+third_party/superLU_MT/pdgstrf_bmod2D_mv2.c
+third_party/superLU_MT/pdgstrf_column_bmod.c
+third_party/superLU_MT/pdgstrf_column_dfs.c
+third_party/superLU_MT/pdgstrf_copy_to_ucol.c
+third_party/superLU_MT/pdgstrf_factor_snode.c
+third_party/superLU_MT/pdgstrf_init.c
+third_party/superLU_MT/pdgstrf_mark_busy_descends.c
+third_party/superLU_MT/pdgstrf_panel_bmod.c
+third_party/superLU_MT/pdgstrf_panel_dfs.c
+third_party/superLU_MT/pdgstrf_pivotL.c
+third_party/superLU_MT/pdgstrf_pruneL.c
+third_party/superLU_MT/pdgstrf_relax_snode.c
+third_party/superLU_MT/pdgstrf_scheduler.c
+third_party/superLU_MT/pdgstrf_snode_bmod.c
+third_party/superLU_MT/pdgstrf_snode_dfs.c
+third_party/superLU_MT/pdgstrf_thread.c
+third_party/superLU_MT/pdgstrf_thread_finalize.c
+third_party/superLU_MT/pdgstrf_thread_init.c
+third_party/superLU_MT/pdmemory.c
+third_party/superLU_MT/pdsp_defs.h
+third_party/superLU_MT/pdutil.c
+third_party/superLU_MT/pmemory.c
+third_party/superLU_MT/psgssv.c
+third_party/superLU_MT/psgssvx.c
+third_party/superLU_MT/psgstrf.c
+third_party/superLU_MT/psgstrf_bmod1D.c
+third_party/superLU_MT/psgstrf_bmod1D_mv2.c
+third_party/superLU_MT/psgstrf_bmod2D.c
+third_party/superLU_MT/psgstrf_bmod2D_mv2.c
+third_party/superLU_MT/psgstrf_column_bmod.c
+third_party/superLU_MT/psgstrf_column_dfs.c
+third_party/superLU_MT/psgstrf_copy_to_ucol.c
+third_party/superLU_MT/psgstrf_factor_snode.c
+third_party/superLU_MT/psgstrf_init.c
+third_party/superLU_MT/psgstrf_mark_busy_descends.c
+third_party/superLU_MT/psgstrf_panel_bmod.c
+third_party/superLU_MT/psgstrf_panel_dfs.c
+third_party/superLU_MT/psgstrf_pivotL.c
+third_party/superLU_MT/psgstrf_pruneL.c
+third_party/superLU_MT/psgstrf_relax_snode.c
+third_party/superLU_MT/psgstrf_scheduler.c
+third_party/superLU_MT/psgstrf_snode_bmod.c
+third_party/superLU_MT/psgstrf_snode_dfs.c
+third_party/superLU_MT/psgstrf_thread.c
+third_party/superLU_MT/psgstrf_thread_finalize.c
+third_party/superLU_MT/psgstrf_thread_init.c
+third_party/superLU_MT/psmemory.c
+third_party/superLU_MT/pssp_defs.h
+third_party/superLU_MT/psutil.c
+third_party/superLU_MT/pxgstrf_finalize.c
+third_party/superLU_MT/pxgstrf_mark_busy_descends.c
+third_party/superLU_MT/pxgstrf_pruneL.c
+third_party/superLU_MT/pxgstrf_relax_snode.c
+third_party/superLU_MT/pxgstrf_scheduler.c
+third_party/superLU_MT/pxgstrf_super_bnd_dfs.c
+third_party/superLU_MT/pxgstrf_synch.c
+third_party/superLU_MT/pxgstrf_synch.h
+third_party/superLU_MT/pzgssv.c
+third_party/superLU_MT/pzgssvx.c
+third_party/superLU_MT/pzgstrf.c
+third_party/superLU_MT/pzgstrf_bmod1D.c
+third_party/superLU_MT/pzgstrf_bmod1D_mv2.c
+third_party/superLU_MT/pzgstrf_bmod2D.c
+third_party/superLU_MT/pzgstrf_bmod2D_mv2.c
+third_party/superLU_MT/pzgstrf_column_bmod.c
+third_party/superLU_MT/pzgstrf_column_dfs.c
+third_party/superLU_MT/pzgstrf_copy_to_ucol.c
+third_party/superLU_MT/pzgstrf_factor_snode.c
+third_party/superLU_MT/pzgstrf_init.c
+third_party/superLU_MT/pzgstrf_mark_busy_descends.c
+third_party/superLU_MT/pzgstrf_panel_bmod.c
+third_party/superLU_MT/pzgstrf_panel_dfs.c
+third_party/superLU_MT/pzgstrf_pivotL.c
+third_party/superLU_MT/pzgstrf_pruneL.c
+third_party/superLU_MT/pzgstrf_relax_snode.c
+third_party/superLU_MT/pzgstrf_scheduler.c
+third_party/superLU_MT/pzgstrf_snode_bmod.c
+third_party/superLU_MT/pzgstrf_snode_dfs.c
+third_party/superLU_MT/pzgstrf_thread.c
+third_party/superLU_MT/pzgstrf_thread_finalize.c
+third_party/superLU_MT/pzgstrf_thread_init.c
+third_party/superLU_MT/pzmemory.c
+third_party/superLU_MT/pzsp_defs.h
+third_party/superLU_MT/pzutil.c
+third_party/superLU_MT/qrnzcnt.c
+third_party/superLU_MT/scomplex.c
+third_party/superLU_MT/scsum1.c
+third_party/superLU_MT/sgscon.c
+third_party/superLU_MT/sgsequ.c
+third_party/superLU_MT/sgsrfs.c
+third_party/superLU_MT/sgstrs.c
+third_party/superLU_MT/slacon.c
+third_party/superLU_MT/slamch.c
+third_party/superLU_MT/slangs.c
+third_party/superLU_MT/slaqgs.c
+third_party/superLU_MT/slu_dcomplex.h
+third_party/superLU_MT/slu_mt_Cnames.h
+third_party/superLU_MT/slu_mt_machines.h
+third_party/superLU_MT/slu_mt_util.h
+third_party/superLU_MT/slu_scomplex.h
+third_party/superLU_MT/smatgen.c
+third_party/superLU_MT/smyblas2.c
+third_party/superLU_MT/sp_coletree.c
+third_party/superLU_MT/sp_colorder.c
+third_party/superLU_MT/sp_ienv.c
+third_party/superLU_MT/spivotgrowth.c
+third_party/superLU_MT/sreadhb.c
+third_party/superLU_MT/sreadmt.c
+third_party/superLU_MT/ssp_blas2.c
+third_party/superLU_MT/ssp_blas3.c
+third_party/superLU_MT/superlu_timer.c
+third_party/superLU_MT/supermatrix.h
+third_party/superLU_MT/util.c
+third_party/superLU_MT/xerbla.c
+third_party/superLU_MT/zgscon.c
+third_party/superLU_MT/zgsequ.c
+third_party/superLU_MT/zgsrfs.c
+third_party/superLU_MT/zgstrs.c
+third_party/superLU_MT/zlacon.c
+third_party/superLU_MT/zlangs.c
+third_party/superLU_MT/zlaqgs.c
+third_party/superLU_MT/zmatgen.c
+third_party/superLU_MT/zmyblas2.c
+third_party/superLU_MT/zpivotgrowth.c
+third_party/superLU_MT/zreadhb.c
+third_party/superLU_MT/zreadmt.c
+third_party/superLU_MT/zsp_blas2.c
+third_party/superLU_MT/zsp_blas3.c
+third_party/superlu_3.1.tar.gz
+third_party/tnt_126/tnt.h
+third_party/tnt_126/tnt_array1d.h
+third_party/tnt_126/tnt_array1d_utils.h
+third_party/tnt_126/tnt_array2d.h
+third_party/tnt_126/tnt_array2d_utils.h
+third_party/tnt_126/tnt_array3d.h
+third_party/tnt_126/tnt_array3d_utils.h
+third_party/tnt_126/tnt_cmat.h
+third_party/tnt_126/tnt_fortran_array1d.h
+third_party/tnt_126/tnt_fortran_array1d_utils.h
+third_party/tnt_126/tnt_fortran_array2d.h
+third_party/tnt_126/tnt_fortran_array2d_utils.h
+third_party/tnt_126/tnt_fortran_array3d.h
+third_party/tnt_126/tnt_fortran_array3d_utils.h
+third_party/tnt_126/tnt_i_refvec.h
+third_party/tnt_126/tnt_math_utils.h
+third_party/tnt_126/tnt_sparse_matrix_csr.h
+third_party/tnt_126/tnt_stopwatch.h
+third_party/tnt_126/tnt_subscript.h
+third_party/tnt_126/tnt_vec.h
+third_party/tnt_126/tnt_version.h
+tools/Makefile.mk
+tools/README.md
+tools/autotest/.gitignore
+tools/autotest/IEEE-123.tmy3
+tools/autotest/case14.json
+tools/autotest/case14.py
+tools/autotest/case14.txt
+tools/autotest/check-meters.py
+tools/autotest/ieee13-meters.glm
+tools/autotest/ieee13.glm
+tools/autotest/link-to-notnode-meters.glm
+tools/autotest/link-to-notnode.glm
+tools/autotest/links-to-meter-meters.glm
+tools/autotest/links-to-meter-to-child-meters.glm
+tools/autotest/links-to-meter-to-child.glm
+tools/autotest/links-to-meter.glm
+tools/autotest/links-to-node.glm
+tools/autotest/links-to-triplexmeter-meters.glm
+tools/autotest/links-to-triplexmeter-to-child-meters.glm
+tools/autotest/links-to-triplexmeter-to-child.glm
+tools/autotest/links-to-triplexmeter.glm
+tools/autotest/meters-withloads-meters.glm
+tools/autotest/meters-withloads.glm
+tools/autotest/nodes-withloads-meters.glm
+tools/autotest/nodes-withloads.glm
+tools/autotest/notnodes-withloads-meters.glm
+tools/autotest/notnodes-withloads.glm
+tools/autotest/rbsa_single_family_2011.mdb
+tools/autotest/solver_nr_profile.csv
+tools/autotest/test_create_filter.glm
+tools/autotest/test_create_filter_opt.glm
+tools/autotest/test_create_meters.glm
+tools/autotest/test_create_player.csv
+tools/autotest/test_create_player.glm
+tools/autotest/test_create_player_out.csv
+tools/autotest/test_create_poles.csv
+tools/autotest/test_create_poles.glm
+tools/autotest/test_create_poles_mounts.csv
+tools/autotest/test_create_poles_opt.glm
+tools/autotest/test_create_schedule.csv
+tools/autotest/test_create_schedule.glm
+tools/autotest/test_create_schedule_opt.csv
+tools/autotest/test_dlp.csv
+tools/autotest/test_dlp.dlp
+tools/autotest/test_dlp.glm
+tools/autotest/test_edit.glm
+tools/autotest/test_eia_recs.glm
+tools/autotest/test_eia_recs.py
+tools/autotest/test_fire_danger.glm
+tools/autotest/test_fire_danger.tif
+tools/autotest/test_fire_report.csv
+tools/autotest/test_fire_report.glm
+tools/autotest/test_fit_filter.glm
+tools/autotest/test_fit_filter_opt.glm
+tools/autotest/test_fit_filter_power.csv
+tools/autotest/test_fit_filter_weather.csv
+tools/autotest/test_group.glm
+tools/autotest/test_group_assets_opt.glm
+tools/autotest/test_group_modify_opt.glm
+tools/autotest/test_group_network_opt.glm
+tools/autotest/test_isone.glm
+tools/autotest/test_isone_record.csv
+tools/autotest/test_location.glm
+tools/autotest/test_location.txt
+tools/autotest/test_mapping.glm
+tools/autotest/test_mapping.png
+tools/autotest/test_mapping_opt.glm
+tools/autotest/test_mapping_opt.json
+tools/autotest/test_market_data.csv
+tools/autotest/test_market_data.glm
+tools/autotest/test_market_data_opt.glm
+tools/autotest/test_market_data_out.csv
+tools/autotest/test_market_model.csv
+tools/autotest/test_market_model.glm
+tools/autotest/test_market_model_opt.glm
+tools/autotest/test_meteostat.csv
+tools/autotest/test_meteostat.glm
+tools/autotest/test_moutils.glm
+tools/autotest/test_moutils.json
+tools/autotest/test_moutils.png
+tools/autotest/test_network.glm
+tools/autotest/test_noaa_forecast.csv
+tools/autotest/test_noaa_forecast.glm
+tools/autotest/test_noaa_forecast_opt.glm
+tools/autotest/test_pole_analysis.glm
+tools/autotest/test_pole_analysis_opt.csv
+tools/autotest/test_pole_analysis_opt.glm
+tools/autotest/test_resource.glm
+tools/autotest/test_resource.txt
+tools/autotest/test_rest_server.glm
+tools/autotest/test_rest_server.sh
+tools/autotest/test_rest_server_opt.glm
+tools/autotest/test_server.glm
+tools/autotest/test_unitcalc.glm
+tools/autotest/test_unitcalc.txt
+tools/create_childs.py
+tools/create_ductbank.py
+tools/create_filter.py
+tools/create_metered_loads.py
+tools/create_meters.py
+tools/create_player.py
+tools/create_poles.py
+tools/create_schedule.py
+tools/edit.py
+tools/eia_recs.py
+tools/example/isone_data.glm
+tools/example/load_model.glm
+tools/example/load_model_config.py
+tools/example/nsrdb_weather.glm
+tools/extract.py
+tools/find_location.py
+tools/fire_danger.py
+tools/fire_report.py
+tools/fit_filter.py
+tools/framework.py
+tools/gldserver.py
+tools/gridlabd-editor.png
+tools/gridlabd-editor.py
+tools/gridlabd_model.py
+tools/gridlabd_runner.py
+tools/group.py
+tools/insights.py
+tools/install.py
+tools/isone.py
+tools/location.py
+tools/mapinfo.py
+tools/mapping.py
+tools/mapping_config.py
+tools/market_data.py
+tools/market_model.py
+tools/mdb_info.py
+tools/metar2glm.py
+tools/meteostat_weather.py
+tools/moutils.py
+tools/network.py
+tools/noaa_forecast.py
+tools/nsrdb_weather.py
+tools/pole_analysis.py
+tools/read_dlp.py
+tools/resource.py
+tools/rest_client.py
+tools/rest_server.py
+tools/rest_server_config.py
+tools/test_api.py
+tools/ucar_weather.py
+tools/unitcalc.py
+tutorials/Geodata/example.glm
+tutorials/Geodata/example_1.glm
+tutorials/Geodata/example_2.glm
+tutorials/Geodata/example_3.glm
+tutorials/Geodata/example_4.glm
+tutorials/Geodata/example_5.glm
+tutorials/Geodata/example_6.glm
+tutorials/Geodata/geodata.conf
+tutorials/Geodata/geodata_powerline_cabletypes.csv
+tutorials/Geodata/path_example.csv
+tutorials/Geodata/poles.csv
+tutorials/Geodata/positions.csv
+tutorials/Geodata/tutorial.ipynb
+tutorials/README.md
+tutorials/Theory/average_1.glm
+tutorials/Theory/average_1.py
+tutorials/Theory/average_2.glm
+tutorials/Theory/average_2.py
+tutorials/Theory/lotka_volterra.m
+tutorials/Theory/lotka_volterra.py
+tutorials/Theory/tree.glm
+tutorials/Theory/tree.py
+tutorials/Theory/tutorial.ipynb
+tutorials/Using_EIA_RECS_data/eia_recs_floorarea.glm
+tutorials/Using_EIA_RECS_data/eia_recs_floorarea.py
+tutorials/Using_EIA_RECS_data/eia_recs_floorarea_insulation.glm
+tutorials/Using_EIA_RECS_data/eia_recs_floorarea_insulation.py
+tutorials/Using_EIA_RECS_data/eia_recs_floorarea_temperature.glm
+tutorials/Using_EIA_RECS_data/eia_recs_floorarea_temperature.py
+tutorials/Using_EIA_RECS_data/tutorial.ipynb
+utilities/Makefile
+utilities/Makefile.mk
+utilities/README.md
+utilities/add_class.d/CLASSNAME.cpp
+utilities/add_class.d/CLASSNAME.h
+utilities/add_module.d/MODULENAME.h
+utilities/add_module.d/Makefile.mk
+utilities/add_module.d/init.cpp
+utilities/add_module.d/main.cpp
+utilities/build_number
+utilities/cleanwc
+utilities/regen_toc
+utilities/save_validation_errors
+utilities/troubleshooting.awk
+utilities/troubleshooting.css
+utilities/update_origin
diff --git a/runtime/resource.csv b/runtime/resource.csv
index 2132c2a89..460aa471d 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -1,8 +1,8 @@
 resource,protocol,port,hostname,index,content,mimetype,deprecation,comment
 localhost,http,6267-6279,127.0.0.1,,,,Server mode support (see https://docs.gridlabd.us/)
 buildings,http,80,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,/index,/{index},,,Compiled AutoBEM4 building data
-#code,https,443,github.com,,/{organization}/gridlabd/releases/tag/{version},,Github release code repository
-#code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{branch},,Github development code repository
+code,https,443,rawgithubusercontent.com,/{organization}/gridlabd/refs/head/{branch}/index,/{organization}/gridlabd/refs/head/{branch}/{index},Github release code repository
+#code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{branch},,,Github development code repository
 #develop.code,https,443,develop.code.gridlabd.us
 #develop.source,https,443,develop.source.gridlabd.us
 #dmg,https,443,dmg.gridlabd.us
diff --git a/tools/resource.py b/tools/resource.py
index 0c3d0e37c..a3e041433 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -473,6 +473,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--list=[a-l]"]
 
         # sys.argv = [__file__,*options,"--index=buildings"]
+        sys.argv = [__file__,*options,"--index=code"]
         # sys.argv = [__file__,*options,"--index=elevation"]
         # sys.argv = [__file__,*options,"--index=examples"]
         # sys.argv = [__file__,*options,"--index=weather"]

From 290cf770d0c1f7d52b792e481e7b0569977fa2d9 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Mon, 20 Jan 2025 14:18:17 -0600
Subject: [PATCH 15/29] Update index

---
 index | 22 +---------------------
 1 file changed, 1 insertion(+), 21 deletions(-)

diff --git a/index b/index
index ede780b04..6d218880b 100644
--- a/index
+++ b/index
@@ -54,7 +54,6 @@ autotest/autotest/test_R5-25.00-1_NR.glm
 autotest/autotest/test_R5-35.00-1.glm
 autotest/autotest/test_R5-35.00-1_NR.glm
 autotest/autotest/test_model_save_opt.glm
-build-aux/.gitignore
 build-aux/README.md
 build-aux/clean_dirs.sh
 build-aux/python3.sh
@@ -90,7 +89,6 @@ cloud/websites/geodata.gridlabd.us/update_utility.py
 cloud/websites/geodata.gridlabd.us/vegetation/index.html
 cloud/websites/geodata.gridlabd.us/vegetation/update_vegetation.py
 cloud/websites/geodata.gridlabd.us/vegetation/update_vegetation_xfh.py
-cloud/websites/install.gridlabd.us/.gitignore
 cloud/websites/install.gridlabd.us/README.md
 cloud/websites/install.gridlabd.us/build-image.sh
 cloud/websites/install.gridlabd.us/index.html
@@ -113,10 +111,8 @@ cloud/websites/version.gridlabd.us/robots.txt
 cloud/websites/version.gridlabd.us/terraform/main.tf
 cloud/websites/www.gridlabd.us/index.html
 configure.ac
-converters/.gitignore
 converters/Makefile.mk
 converters/README.md
-converters/autotest/.gitignore
 converters/autotest/IEEE-123-cyme.mdb
 converters/autotest/IEEE-123.glm
 converters/autotest/IEEE-123.tmy3
@@ -1170,7 +1166,6 @@ docs/slac-logo.png
 docs/stanford-logo.png
 docs/update_html.py
 docs/update_pdf.sh
-documents/.gitignore
 documents/Powell et al, Fast Solutions in Power Systems Simulation through Coupling with a Data Driven Power Flow Model for Voltage Estimation (2019).pdf
 documents/gridlabd.glm
 documents/index.html
@@ -1192,14 +1187,13 @@ geodata/geodata_utility.py
 geodata/geodata_vegetation.py
 geodata/geodata_weather.py
 gridlabd.spec.in
-image/.gitignore
 image/README.md
 image/create.sh
+index
 install.sh
 install/README.md
 install/ubuntu_20.sh
 install/ubuntu_22.sh
-m4/.gitignore
 m4/README.md
 m4/ax_lib_superlu.m4
 m4/ax_lib_xerces.m4
@@ -1783,7 +1777,6 @@ module/mysql/recorder.cpp
 module/mysql/recorder.h
 module/mysql/validate.no
 module/optimize/Makefile.mk
-module/optimize/autotest/.gitignore
 module/optimize/autotest/test_case118_opf.glm
 module/optimize/autotest/test_case118_opf.txt
 module/optimize/autotest/test_case118_opt.py
@@ -1807,7 +1800,6 @@ module/optimize/autotest/test_minimum.glm
 module/optimize/autotest/test_opf.glm
 module/optimize/cvx.cpp
 module/optimize/cvx.h
-module/optimize/examples/.gitignore
 module/optimize/examples/case14.py
 module/optimize/examples/example1.glm
 module/optimize/examples/example2.glm
@@ -1819,12 +1811,10 @@ module/optimize/particle_swarm_optimization.cpp
 module/optimize/particle_swarm_optimization.h
 module/optimize/simple.cpp
 module/optimize/simple.h
-module/powerflow/.gitignore
 module/powerflow/Makefile.mk
 module/powerflow/OHLConductors.glm
 module/powerflow/agricultural.cpp
 module/powerflow/agricultural.h
-module/powerflow/autotest/.gitignore
 module/powerflow/autotest/IEEE_13_node_impedance_dump.glm
 module/powerflow/autotest/PSV.player
 module/powerflow/autotest/SPIM_frequency.player
@@ -2344,7 +2334,6 @@ module/powerflow/capacitor.h
 module/powerflow/check_powerflow.py
 module/powerflow/currdump.cpp
 module/powerflow/currdump.h
-module/powerflow/data/.gitignore
 module/powerflow/data/CEUS/README.md
 module/powerflow/data/CEUS/grocery.xls
 module/powerflow/data/CEUS/health.xls
@@ -2512,7 +2501,6 @@ module/powernet/powernet.h
 module/powernet/validate.no
 module/pypower/Makefile.mk
 module/pypower/README.md
-module/pypower/autotest/.gitignore
 module/pypower/autotest/case.glm
 module/pypower/autotest/case118.py
 module/pypower/autotest/case14.py
@@ -2867,7 +2855,6 @@ module/residential/waterheater.h
 module/residential/zipload.cpp
 module/residential/zipload.h
 module/resilience/Makefile.mk
-module/resilience/autotest/.gitignore
 module/resilience/autotest/test_IEEE123_link_outages.glm
 module/resilience/autotest/test_IEEE123_link_outages.py
 module/resilience/autotest/test_metrics.glm
@@ -2877,7 +2864,6 @@ module/resilience/autotest/test_metrics_meter_violation_detected.csv
 module/resilience/autotest/test_metrics_report.csv
 module/resilience/cost.cpp
 module/resilience/cost.h
-module/resilience/docs/.gitignore
 module/resilience/docs/230kV_example.csv
 module/resilience/docs/230kV_example_canopycover.csv
 module/resilience/docs/230kV_example_elevation.tif
@@ -3041,7 +3027,6 @@ module/transactive/house.h
 module/transactive/main.cpp
 module/transactive/transactive.h
 module/transactive/validate.no
-python/.gitignore
 python/Makefile.mk
 python/README.md
 python/autotest/test_external_callback.glm
@@ -3133,7 +3118,6 @@ python/external/stanford/project.py
 python/external/stanford/result.py
 python/external/stanford/script.py
 python/external/stanford/simulation.py
-python/extras/.gitignore
 python/extras/buildmodel.py
 python/extras/csv_merge/csv_merge.py
 python/extras/dataframe.py
@@ -3239,7 +3223,6 @@ setup/darwin_23.sh
 setup/ubuntu_20.sh
 setup/ubuntu_22.sh
 setup/ubuntu_24-x86_64.sh
-source/.gitignore
 source/Comments.txt
 source/GUI.MACOSX
 source/Languages.txt
@@ -3248,7 +3231,6 @@ source/Project.txt
 source/README.md
 source/aggregate.cpp
 source/aggregate.h
-source/autotest/.gitignore
 source/autotest/ceus.csv
 source/autotest/check_correlation.py
 source/autotest/check_dotted_name.py
@@ -3687,7 +3669,6 @@ subcommands/gridlabd-trace
 subcommands/gridlabd-validate
 subcommands/gridlabd-version
 subcommands/gridlabd-weather
-third_party/.gitignore
 third_party/CBLAS/Makefile.mk
 third_party/CBLAS/caxpy.c
 third_party/CBLAS/ccopy.c
@@ -3984,7 +3965,6 @@ third_party/tnt_126/tnt_vec.h
 third_party/tnt_126/tnt_version.h
 tools/Makefile.mk
 tools/README.md
-tools/autotest/.gitignore
 tools/autotest/IEEE-123.tmy3
 tools/autotest/case14.json
 tools/autotest/case14.py

From 2868fe240e201ae3a75b0f408384137910af790a Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Mon, 20 Jan 2025 14:42:45 -0600
Subject: [PATCH 16/29] Add support for code resources

---
 Makefile.am            |  2 +-
 runtime/resource.csv   |  4 ++--
 source/globals.cpp     | 20 +++++++++++---------
 source/globals.h       |  6 ++++++
 tools/resource.py      |  5 +++--
 utilities/build_number |  4 +++-
 6 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index d9f6db2c2..af397e759 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -308,7 +308,7 @@ $(prefix)/src:
 
 index: weather library template
 	@echo Updating file index...
-	@git ls-files | grep -v '^\.' > index
+	@git ls-files | grep -v '^\.' | grep -v '/\.' > index
 
 html-local: module-html developer-html troubleshooting-html
 	@mkdir -p $(prefix)/share/doc/developer
diff --git a/runtime/resource.csv b/runtime/resource.csv
index 460aa471d..4d805fcc5 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -1,8 +1,8 @@
 resource,protocol,port,hostname,index,content,mimetype,deprecation,comment
 localhost,http,6267-6279,127.0.0.1,,,,Server mode support (see https://docs.gridlabd.us/)
 buildings,http,80,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,/index,/{index},,,Compiled AutoBEM4 building data
-code,https,443,rawgithubusercontent.com,/{organization}/gridlabd/refs/head/{branch}/index,/{organization}/gridlabd/refs/head/{branch}/{index},Github release code repository
-#code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{branch},,,Github development code repository
+code,https,443,raw.githubusercontent.com,/{origin}/refs/heads/{gitbranch}/index,/{origin}/refs/heads/{gitbranch}/{index},Github release code repository
+#code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{gitbranch},,,Github development code repository
 #develop.code,https,443,develop.code.gridlabd.us
 #develop.source,https,443,develop.source.gridlabd.us
 #dmg,https,443,dmg.gridlabd.us
diff --git a/source/globals.cpp b/source/globals.cpp
index bd976486b..4ed367c92 100644
--- a/source/globals.cpp
+++ b/source/globals.cpp
@@ -522,15 +522,17 @@ DEPRECATED static struct s_varmap {
 	{"rusage_file",PT_char1024,&global_rusage_file,PA_PUBLIC,"file in which resource usage data is collected"},
 	{"rusage_rate",PT_int64,&global_rusage_rate,PA_PUBLIC,"rate at which resource usage data is collected (in seconds)"},
 	{"rusage",PT_char1024,&global_rusage_data,PA_PUBLIC,"rusage data"},
-    {"echo", PT_bool, &global_echo, PA_PUBLIC, "echo subcommands"},
-    {"filename",PT_char1024, &global_loader_filename, PA_REFERENCE, "current filename processed by loader"},
-    // {"linenum",PT_int32, &global_loader_linenum, PA_REFERENCE,"current line number processed by loaded"},
-    {"country", PT_char8, &global_country,PA_PUBLIC,"country code"},
-    {"region", PT_char32, &global_region,PA_PUBLIC,"region code"},
-    {"organization",PT_char32, &global_organization,PA_PUBLIC,"organization name"},
-    {"profile_output_format",PT_set,&global_profile_output_format,PA_PUBLIC,"profiler output data format"},
-    {"maximum_runtime",PT_int64,&global_maximum_runtime,PA_PUBLIC,"maximum wall clock runtime allowed"},
-    {"flush_output",PT_int32,&global_flush_output,PA_PUBLIC,"flush output buffers continuously"},
+	{"echo", PT_bool, &global_echo, PA_PUBLIC, "echo subcommands"},
+	{"filename",PT_char1024, &global_loader_filename, PA_REFERENCE, "current filename processed by loader"},
+	// {"linenum",PT_int32, &global_loader_linenum, PA_REFERENCE,"current line number processed by loaded"},
+	{"country", PT_char8, &global_country,PA_PUBLIC,"country code"},
+	{"region", PT_char32, &global_region,PA_PUBLIC,"region code"},
+	{"organization",PT_char32, &global_organization,PA_PUBLIC,"organization name"},
+	{"profile_output_format",PT_set,&global_profile_output_format,PA_PUBLIC,"profiler output data format"},
+	{"maximum_runtime",PT_int64,&global_maximum_runtime,PA_PUBLIC,"maximum wall clock runtime allowed"},
+	{"flush_output",PT_int32,&global_flush_output,PA_PUBLIC,"flush output buffers continuously"},
+	{"origin",PT_char1024,&global_origin,PA_REFERENCE,"origin of source code"},
+	{"gitbranch",PT_char1024,&global_gitbranch,PA_REFERENCE,"branch of source code at origin"},
 	/* add new global variables here */
 };
 
diff --git a/source/globals.h b/source/globals.h
index d0089472e..b21a15a82 100644
--- a/source/globals.h
+++ b/source/globals.h
@@ -703,6 +703,12 @@ GLOBAL char32 global_city INIT("");
 /* Variable: global_organization */
 GLOBAL char1024 global_organization INIT("arras-energy");
 
+/* Variable: global_origin */
+GLOBAL char1024 global_origin INIT(BUILD_ORIGIN);
+
+/* Variable: global_gitbranch */
+GLOBAL char1024 global_gitbranch INIT(BUILD_BRANCH);
+
 /* Variable: global_json_complex_format */
 #define JCF_STRING  0x0000
 #define JCF_LIST    0x0001
diff --git a/tools/resource.py b/tools/resource.py
index a3e041433..becb5b643 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -463,7 +463,7 @@ def test(pattern='.*'):
         #
 
         options = []
-        # options.extend(["--debug"])
+        options.extend(["--debug"])
         # options.extend(["--format=csv"])
         # options.extend(["--format=csv,fmt:.0f"])
         # options.extend(["--format=json,indent:4"])
@@ -473,7 +473,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--list=[a-l]"]
 
         # sys.argv = [__file__,*options,"--index=buildings"]
-        sys.argv = [__file__,*options,"--index=code"]
+        # sys.argv = [__file__,*options,"--index=code"]
         # sys.argv = [__file__,*options,"--index=elevation"]
         # sys.argv = [__file__,*options,"--index=examples"]
         # sys.argv = [__file__,*options,"--index=weather"]
@@ -485,6 +485,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=weather"]
 
         # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
+        sys.argv = [__file__,*options,"--content=code,COPYRIGHT"]
         # sys.argv = [__file__,*options,"--content=elevation,10m/31N_112W.tif"]
         # sys.argv = [__file__,*options,"--content=examples,geodata/IEEE-123.json"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
diff --git a/utilities/build_number b/utilities/build_number
index b66ee7a0f..8a0a4ea35 100755
--- a/utilities/build_number
+++ b/utilities/build_number
@@ -23,6 +23,7 @@ if [ -d $TOP/.git ]; then
 		echo "#define REV_YEAR $(date '+%Y')" >> $FIL
 		echo "#define BUILD_NAME \"$(git remote | head -n 1)\"" >> $FIL
 		echo "#define BUILD_URL \"$(git remote -v | head -n 1 | cut -f1 -d' ' | cut -f2 | sed -e 's/\.git//')\"" >> $FIL
+		echo "#define BUILD_ORIGIN \"$(git remote -v | head -n 1 | cut -f1 -d' ' | cut -f2 | sed -e 's/\.git//' | cut -f4- -d/)\"" >> $FIL
 		echo "#define BUILD_BRANCH \"$(git rev-parse --abbrev-ref HEAD | tr -d '\n' )\"" >> $FIL
 		echo "#define BUILD_SYSTEM \"$(uname -s)\"" >> $FIL
 		echo "#define BUILD_RELEASE \"$(uname -sr)\"" >> $FIL
@@ -52,7 +53,8 @@ else
 		echo "#define BRANCH \"<unknown>\"" >> $FIL
 		echo "#define REV_YEAR $(date '+%Y')" >> $FIL
 		echo "#define BUILD_NAME \"download\"" >> $FIL
-		echo "#define BUILD_URL \"http://gridlabd.org/\"" >> $FIL
+		echo "#define BUILD_URL \"http://source.gridlabd.us/\"" >> $FIL
+		echo "#define BUILD_ORIGIN \"arras-energy/gridlabd\"" >> $FIL
 		echo "#define BUILD_BRANCH \"<unknown>\"" >> $FIL
 		echo "#define BUILD_SYSTEM \"$(uname -s)\"" >> $FIL
 		echo "#define BUILD_RELEASE \"$(uname -sr)\"" >> $FIL

From 085bfba4824cf98946bc38d38e38e92b69245918 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Mon, 20 Jan 2025 14:49:01 -0600
Subject: [PATCH 17/29] Update resource.py

---
 tools/resource.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/resource.py b/tools/resource.py
index becb5b643..21786ec5f 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -463,7 +463,7 @@ def test(pattern='.*'):
         #
 
         options = []
-        options.extend(["--debug"])
+        # options.extend(["--debug"])
         # options.extend(["--format=csv"])
         # options.extend(["--format=csv,fmt:.0f"])
         # options.extend(["--format=json,indent:4"])
@@ -484,8 +484,8 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=examples"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
-        # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
-        sys.argv = [__file__,*options,"--content=code,COPYRIGHT"]
+        sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
+        # sys.argv = [__file__,*options,"--content=code,COPYRIGHT"]
         # sys.argv = [__file__,*options,"--content=elevation,10m/31N_112W.tif"]
         # sys.argv = [__file__,*options,"--content=examples,geodata/IEEE-123.json"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]

From 4a0e96403ef824cecf93b9bfe3e6971d9a409321 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Mon, 20 Jan 2025 14:49:19 -0600
Subject: [PATCH 18/29] Update resource.py

---
 tools/resource.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/resource.py b/tools/resource.py
index 21786ec5f..f9ab87425 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -484,7 +484,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=examples"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
-        sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
+        # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
         # sys.argv = [__file__,*options,"--content=code,COPYRIGHT"]
         # sys.argv = [__file__,*options,"--content=elevation,10m/31N_112W.tif"]
         # sys.argv = [__file__,*options,"--content=examples,geodata/IEEE-123.json"]

From f8bb5d8253eabb9b3c04b601590a18722bf363a4 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Mon, 20 Jan 2025 15:45:27 -0600
Subject: [PATCH 19/29] WIP

---
 runtime/resource.csv             |  6 +---
 tools/autotest/test_resource.glm |  2 +-
 tools/autotest/test_resource.txt | 49 ++++++++++++++++++++++++++++++++
 tools/resource.py                |  5 +++-
 4 files changed, 55 insertions(+), 7 deletions(-)

diff --git a/runtime/resource.csv b/runtime/resource.csv
index 4d805fcc5..9b2b9012a 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -2,11 +2,7 @@ resource,protocol,port,hostname,index,content,mimetype,deprecation,comment
 localhost,http,6267-6279,127.0.0.1,,,,Server mode support (see https://docs.gridlabd.us/)
 buildings,http,80,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,/index,/{index},,,Compiled AutoBEM4 building data
 code,https,443,raw.githubusercontent.com,/{origin}/refs/heads/{gitbranch}/index,/{origin}/refs/heads/{gitbranch}/{index},Github release code repository
-#code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{gitbranch},,,Github development code repository
-#develop.code,https,443,develop.code.gridlabd.us
-#develop.source,https,443,develop.source.gridlabd.us
-#dmg,https,443,dmg.gridlabd.us
-#docker,https,443,docker.gridlabd.us
+#docker,https,443,hub.docker.com,/v2/repositories/lfenergy/arras/tags/?page_size=1000,/v2/repositories/lfenergy/arras/{index},*/*,,Dockerhub list of repositories
 #docs-dev,https,443,docs-dev.gridlabd.us
 #docs,https,443,docs.gridlabd.us
 elevation,https,443,s3.us-west-1.amazonaws.com,/elevation.gridlabd.us/index,/elevation.gridlabd.us/{index},image/tiff,,Ground elevation data
diff --git a/tools/autotest/test_resource.glm b/tools/autotest/test_resource.glm
index 47908430d..30b19565f 100644
--- a/tools/autotest/test_resource.glm
+++ b/tools/autotest/test_resource.glm
@@ -10,7 +10,7 @@ with open('test_resource.txt','w') as fh:
             print(err,file=fh)
 #end
 
-#system gridlabd resource --test=buildings >> test_resource.txt
+#system gridlabd resource --test=buildings 1>>test_resource.txt 2>&1
 
 #ifexist "../test_resource.txt"
 #on_exit 0 diff ../test_resource.txt test_resource.txt > gridlabd.diff
diff --git a/tools/autotest/test_resource.txt b/tools/autotest/test_resource.txt
index f48d4df7b..359b98738 100644
--- a/tools/autotest/test_resource.txt
+++ b/tools/autotest/test_resource.txt
@@ -37,3 +37,52 @@
     "US/NH_Sullivan.csv.gz",
     "US/TN_Hamilton.csv.gz"
 ]
+*** Testing resource 'buildings' ***
+Properties:
+  resource: 'buildings'
+  protocol: 'http'
+  port: '80'
+  hostname: 'buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com'
+  index: '/index'
+  content: '/{index}'
+  mimetype: ''
+  deprecation: ''
+  comment: 'Compiled AutoBEM4 building data'
+buildings/US/CA_Alameda.csv.gz... 18632521 bytes
+buildings/US/CA_Contra_Costa.csv.gz... 15657475 bytes
+buildings/US/CA_Los_Angeles.csv.gz... 119942371 bytes
+buildings/US/CA_Orange.csv.gz... 35373139 bytes
+buildings/US/CA_Riverside.csv.gz... 35813122 bytes
+buildings/US/CA_San_Bernardino.csv.gz... 32401374 bytes
+buildings/US/CA_San_Diego.csv.gz... 40106258 bytes
+buildings/US/CA_San_Francisco.csv.gz... 9616400 bytes
+buildings/US/CA_San_Mateo.csv.gz... 9042463 bytes
+buildings/US/CA_Santa_Clara.csv.gz... 20501437 bytes
+buildings/US/ME_Androscoggin.csv.gz... 2435518 bytes
+buildings/US/ME_Aroostook.csv.gz... 2882124 bytes
+buildings/US/ME_Cumberland.csv.gz... 6800068 bytes
+buildings/US/ME_Franklin.csv.gz... 1261789 bytes
+buildings/US/ME_Hancock.csv.gz... 2577025 bytes
+buildings/US/ME_Kennebec.csv.gz... 3678406 bytes
+buildings/US/ME_Knox.csv.gz... 1606996 bytes
+buildings/US/ME_Lincoln.csv.gz... 1634632 bytes
+buildings/US/ME_Oxford.csv.gz... 2024315 bytes
+buildings/US/ME_Penobscot.csv.gz... 4441180 bytes
+buildings/US/ME_Piscataquis.csv.gz... 1030636 bytes
+buildings/US/ME_Sagadahoc.csv.gz... 1172538 bytes
+buildings/US/ME_Somerset.csv.gz... 2163186 bytes
+buildings/US/ME_Waldo.csv.gz... 1635656 bytes
+buildings/US/ME_Washington.csv.gz... 1670936 bytes
+buildings/US/ME_York.csv.gz... 5920601 bytes
+buildings/US/NH_Belknap.csv.gz... 2112766 bytes
+buildings/US/NH_Carroll.csv.gz... 2268762 bytes
+buildings/US/NH_Cheshire.csv.gz... 1918629 bytes
+buildings/US/NH_Coos.csv.gz... 986734 bytes
+buildings/US/NH_Grafton.csv.gz... 2107669 bytes
+buildings/US/NH_Hillsborough.csv.gz... 6474492 bytes
+buildings/US/NH_Merrimack.csv.gz... 3239426 bytes
+buildings/US/NH_Rockingham.csv.gz... 6095088 bytes
+buildings/US/NH_Strafford.csv.gz... 2249422 bytes
+buildings/US/NH_Sullivan.csv.gz... 1206218 bytes
+buildings/US/TN_Hamilton.csv.gz... 6563451 bytes
+Tested 37 resources (415.2 MB) with 0 failures
diff --git a/tools/resource.py b/tools/resource.py
index f9ab87425..4dd48c177 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -133,6 +133,7 @@ def _download(self,
             **kwargs):
         url = f"{protocol}://{hostname}:{port}{content}"
         try:
+            app.verbose(f"requests.get(url={repr(url)},headers={headers},timeout={self.TIMEOUT})")
             req = requests.get(url,headers=headers,timeout=self.TIMEOUT)
             req.raise_for_status()
         except Exception as err:
@@ -151,6 +152,7 @@ def _headers(self,
             **kwargs):
         url = f"{protocol}://{hostname}:{port}{content}"
         try:
+            app.verbose(f"requests.head(url={repr(url)},headers={headers},timeout={self.TIMEOUT})")
             req = requests.head(url,headers=headers,timeout=self.TIMEOUT)
             req.raise_for_status()
         except Exception as err:
@@ -463,7 +465,8 @@ def test(pattern='.*'):
         #
 
         options = []
-        # options.extend(["--debug"])
+        options.extend(["--debug"])
+        options.extend(["--verbose"])
         # options.extend(["--format=csv"])
         # options.extend(["--format=csv,fmt:.0f"])
         # options.extend(["--format=json,indent:4"])

From 1177d1c36161f6716a9b61c20a17a7f0f302a0d1 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 22 Jan 2025 09:38:02 -0600
Subject: [PATCH 20/29] WIP

---
 docs/Tools/Resource.md | 553 +----------------------------------------
 docs/makemd.py         |   4 +-
 runtime/resource.csv   |   4 +
 tools/resource.py      |  32 ++-
 4 files changed, 44 insertions(+), 549 deletions(-)

diff --git a/docs/Tools/Resource.md b/docs/Tools/Resource.md
index a5cca1cd8..2b631e3d9 100644
--- a/docs/Tools/Resource.md
+++ b/docs/Tools/Resource.md
@@ -52,229 +52,6 @@ The following command retrieves the online weather data for the specified locati
 
 # Classes
 
-## Annotated
-
-Add context specific metadata to a type.
-
-Example: Annotated[int, runtime_check.Unsigned] indicates to the
-hypothetical runtime_check module that this type is an unsigned int.
-Every other consumer of this type can ignore this metadata and treat
-this type as int.
-
-The first argument to Annotated must be a valid type.
-
-Details:
-
-- It's an error to call `Annotated` with less than two arguments.
-- Nested Annotated are flattened::
-
-Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3]
-
-- Instantiating an annotated type is equivalent to instantiating the
-underlying type::
-
-Annotated[C, Ann1](5) == C(5)
-
-- Annotated can be used as a generic type alias::
-
-Optimized = Annotated[T, runtime.Optimize()]
-Optimized[int] == Annotated[int, runtime.Optimize()]
-
-OptimizedList = Annotated[List[T], runtime.Optimize()]
-OptimizedList[int] == Annotated[List[int], runtime.Optimize()]
-
-
----
-
-## BinaryIO
-
-Typed version of the return of open() in binary mode.
-
----
-
-## ForwardRef
-
-Internal wrapper to hold a forward reference.
-
----
-
-## Generic
-
-Abstract base class for generic types.
-
-A generic type is typically declared by inheriting from
-this class parameterized with one or more type variables.
-For example, a generic mapping type might be defined as::
-
-class Mapping(Generic[KT, VT]):
-def __getitem__(self, key: KT) -> VT:
-...
-# Etc.
-
-This class can then be used as follows::
-
-def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT:
-try:
-return mapping[key]
-except KeyError:
-return default
-
-
----
-
-## IO
-
-Generic base class for TextIO and BinaryIO.
-
-This is an abstract, generic version of the return of open().
-
-NOTE: This does not distinguish between the different possible
-classes (text vs. binary, read vs. write vs. read/write,
-append-only, unbuffered).  The TextIO and BinaryIO subclasses
-below capture the distinctions between text vs. binary, which is
-pervasive in the interface; however we currently do not offer a
-way to track the other distinctions in the type system.
-
-
----
-
-## NewType
-
-NewType creates simple unique types with almost zero
-runtime overhead. NewType(name, tp) is considered a subtype of tp
-by static type checkers. At runtime, NewType(name, tp) returns
-a dummy callable that simply returns its argument. Usage::
-
-UserId = NewType('UserId', int)
-
-def name_by_id(user_id: UserId) -> str:
-...
-
-UserId('user')          # Fails type check
-
-name_by_id(42)          # Fails type check
-name_by_id(UserId(42))  # OK
-
-num = UserId(5) + 1     # type: int
-
-
----
-
-## ParamSpec
-
-Parameter specification variable.
-
-Usage::
-
-P = ParamSpec('P')
-
-Parameter specification variables exist primarily for the benefit of static
-type checkers.  They are used to forward the parameter types of one
-callable to another callable, a pattern commonly found in higher order
-functions and decorators.  They are only valid when used in ``Concatenate``,
-or as the first argument to ``Callable``, or as parameters for user-defined
-Generics.  See class Generic for more information on generic types.  An
-example for annotating a decorator::
-
-T = TypeVar('T')
-P = ParamSpec('P')
-
-def add_logging(f: Callable[P, T]) -> Callable[P, T]:
-'''A type-safe decorator to add logging to a function.'''
-def inner(*args: P.args, **kwargs: P.kwargs) -> T:
-logging.info(f'{f.__name__} was called')
-return f(*args, **kwargs)
-return inner
-
-@add_logging
-def add_two(x: float, y: float) -> float:
-'''Add two numbers together.'''
-return x + y
-
-Parameter specification variables defined with covariant=True or
-contravariant=True can be used to declare covariant or contravariant
-generic types.  These keyword arguments are valid, but their actual semantics
-are yet to be decided.  See PEP 612 for details.
-
-Parameter specification variables can be introspected. e.g.:
-
-P.__name__ == 'P'
-P.__bound__ == None
-P.__covariant__ == False
-P.__contravariant__ == False
-
-Note that only parameter specification variables defined in global scope can
-be pickled.
-
-
----
-
-## ParamSpecArgs
-
-The args for a ParamSpec object.
-
-Given a ParamSpec object P, P.args is an instance of ParamSpecArgs.
-
-ParamSpecArgs objects have a reference back to their ParamSpec:
-
-P.args.__origin__ is P
-
-This type is meant for runtime introspection and has no special meaning to
-static type checkers.
-
-
----
-
-## ParamSpecKwargs
-
-The kwargs for a ParamSpec object.
-
-Given a ParamSpec object P, P.kwargs is an instance of ParamSpecKwargs.
-
-ParamSpecKwargs objects have a reference back to their ParamSpec:
-
-P.kwargs.__origin__ is P
-
-This type is meant for runtime introspection and has no special meaning to
-static type checkers.
-
-
----
-
-## Protocol
-
-Base class for protocol classes.
-
-Protocol classes are defined as::
-
-class Proto(Protocol):
-def meth(self) -> int:
-...
-
-Such classes are primarily used with static type checkers that recognize
-structural subtyping (static duck-typing), for example::
-
-class C:
-def meth(self) -> int:
-return 0
-
-def func(x: Proto) -> int:
-return x.meth()
-
-func(C())  # Passes static type check
-
-See PEP 544 for details. Protocol classes decorated with
-@typing.runtime_checkable act as simple-minded runtime protocols that check
-only the presence of given attributes, ignoring their type signatures.
-Protocol classes can be generic, they are defined as::
-
-class GenProto(Protocol[T]):
-def meth(self) -> T:
-...
-
-
----
-
 ## Resource
 
 Resource class
@@ -332,338 +109,32 @@ Get resource properties
 
 Resource exception
 
----
-
-## SupportsAbs
-
-An ABC with one abstract method __abs__ that is covariant in its return type.
-
----
-
-## SupportsBytes
-
-An ABC with one abstract method __bytes__.
-
----
-
-## SupportsComplex
-
-An ABC with one abstract method __complex__.
-
----
-
-## SupportsFloat
-
-An ABC with one abstract method __float__.
-
----
-
-## SupportsIndex
-
-An ABC with one abstract method __index__.
-
----
-
-## SupportsInt
-
-An ABC with one abstract method __int__.
-
----
-
-## SupportsRound
-
-An ABC with one abstract method __round__ that is covariant in its return type.
-
----
-
-## str
-
-str(object='') -> str
-str(bytes_or_buffer[, encoding[, errors]]) -> str
-
-Create a new string object from the given object. If encoding or
-errors is specified, then the object must expose a data buffer
-that will be decoded using the given encoding and error handler.
-Otherwise, returns the result of object.__str__() (if defined)
-or repr(object).
-encoding defaults to sys.getdefaultencoding().
-errors defaults to 'strict'.
-
----
-
-## TextIO
-
-Typed version of the return of open() in text mode.
-
 # Functions
 
-## `NamedTuple() -> None`
-
-Typed version of namedtuple.
-
-Usage in Python versions >= 3.6::
-
-class Employee(NamedTuple):
-name: str
-id: int
-
-This is equivalent to::
-
-Employee = collections.namedtuple('Employee', ['name', 'id'])
-
-The resulting class has an extra __annotations__ attribute, giving a
-dict that maps field names to types.  (The field names are also in
-the _fields attribute, which is part of the namedtuple API.)
-Alternative equivalent keyword syntax is also accepted::
-
-Employee = NamedTuple('Employee', name=str, id=int)
-
-In Python versions <= 3.5 use::
-
-Employee = NamedTuple('Employee', [('name', str), ('id', int)])
-
-
----
-
-## `TypedDict() -> None`
-
-A simple typed namespace. At runtime it is equivalent to a plain dict.
-
-TypedDict creates a dictionary type that expects all of its
-instances to have a certain set of keys, where each key is
-associated with a value of a consistent type. This expectation
-is not checked at runtime but is only enforced by type checkers.
-Usage::
-
-class Point2D(TypedDict):
-x: int
-y: int
-label: str
-
-a: Point2D = {'x': 1, 'y': 2, 'label': 'good'}  # OK
-b: Point2D = {'z': 3, 'label': 'bad'}           # Fails type check
-
-assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
-
-The type info can be accessed via the Point2D.__annotations__ dict, and
-the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.
-TypedDict supports two additional equivalent forms::
-
-Point2D = TypedDict('Point2D', x=int, y=int, label=str)
-Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})
-
-By default, all keys must be present in a TypedDict. It is possible
-to override this by specifying totality.
-Usage::
-
-class point2D(TypedDict, total=False):
-x: int
-y: int
-
-This means that a point2D TypedDict can have any of the keys omitted.A type
-checker is only expected to support a literal False or True as the value of
-the total argument. True is the default, and makes all items defined in the
-class body be required.
-
-The class syntax is only supported in Python 3.6+, while two other
-syntax forms work for Python 2.7 and 3.2+
-
-
----
-
-## `cast() -> None`
-
-Cast a value to a type.
-
-This returns the value unchanged.  To the type checker this
-signals that the return value has the designated type, but at
-runtime we intentionally don't check anything (we want this
-to be as fast as possible).
-
-
----
-
-## `final() -> None`
-
-A decorator to indicate final methods and final classes.
-
-Use this decorator to indicate to type checkers that the decorated
-method cannot be overridden, and decorated class cannot be subclassed.
-For example:
+## `main() -> int`
 
-class Base:
-@final
-def done(self) -> None:
-...
-class Sub(Base):
-def done(self) -> None:  # Error reported by type checker
-...
+Resource tool main routine
 
-@final
-class Leaf:
-...
-class Other(Leaf):  # Error reported by type checker
-...
-
-There is no runtime checking of these properties.
-
-
----
-
-## `get_args() -> None`
-
-Get type arguments with all substitutions performed.
-
-For unions, basic simplifications used by Union constructor are performed.
-Examples::
-get_args(Dict[str, int]) == (str, int)
-get_args(int) == ()
-get_args(Union[int, Union[T, int], str][int]) == (int, str)
-get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
-get_args(Callable[[], T][int]) == ([], int)
-
-
----
-
-## `get_origin() -> None`
-
-Get the unsubscripted version of a type.
-
-This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar
-and Annotated. Return None for unsupported types. Examples::
-
-get_origin(Literal[42]) is Literal
-get_origin(int) is None
-get_origin(ClassVar[int]) is ClassVar
-get_origin(Generic) is Generic
-get_origin(Generic[T]) is Generic
-get_origin(Union[T, int]) is Union
-get_origin(List[Tuple[T, T]][int]) == list
-get_origin(P.args) is P
-
-
----
-
-## `get_type_hints() -> None`
-
-Return type hints for an object.
-
-This is often the same as obj.__annotations__, but it handles
-forward references encoded as string literals, adds Optional[t] if a
-default value equal to None is set and recursively replaces all
-'Annotated[T, ...]' with 'T' (unless 'include_extras=True').
-
-The argument may be a module, class, method, or function. The annotations
-are returned as a dictionary. For classes, annotations include also
-inherited members.
-
-TypeError is raised if the argument is not of a type that can contain
-annotations, and an empty dictionary is returned if no annotations are
-present.
-
-BEWARE -- the behavior of globalns and localns is counterintuitive
-(unless you are familiar with how eval() and exec() work).  The
-search order is locals first, then globals.
-
-- If no dict arguments are passed, an attempt is made to use the
-globals from obj (or the respective module's globals for classes),
-and these are also used as the locals.  If the object does not appear
-to have globals, an empty dictionary is used.  For classes, the search
-order is globals first then locals.
-
-- If one dict argument is passed, it is used for both globals and
-locals.
-
-- If two dict arguments are passed, they specify globals and
-locals, respectively.
-
-
----
-
-## `is_typeddict() -> None`
-
-Check if an annotation is a TypedDict class
-
-For example::
-class Film(TypedDict):
-title: str
-year: int
-
-is_typeddict(Film)  # => True
-is_typeddict(Union[list, str])  # => False
-
-
----
-
-## `no_type_check() -> None`
-
-Decorator to indicate that annotations are not type hints.
-
-The argument must be a class or function; if it is a class, it
-applies recursively to all methods and classes defined in that class
-(but not to methods defined in its superclasses or subclasses).
-
-This mutates the function(s) or class(es) in place.
-
-
----
-
-## `no_type_check_decorator() -> None`
-
-Decorator to give another decorator the @no_type_check effect.
-
-This wraps the decorator with something that wraps the decorated
-function in @no_type_check.
-
-
----
-
-## `overload() -> None`
-
-Decorator for overloaded functions/methods.
-
-In a stub file, place two or more stub definitions for the same
-function in a row, each decorated with @overload.  For example:
+Arguments:
 
-@overload
-def utf8(value: None) -> None: ...
-@overload
-def utf8(value: bytes) -> bytes: ...
-@overload
-def utf8(value: str) -> bytes: ...
+* `argv`: command line arguments
 
-In a non-stub file (i.e. a regular .py file), do the same but
-follow it with an implementation.  The implementation should *not*
-be decorated with @overload.  For example:
+Returns:
 
-@overload
-def utf8(value: None) -> None: ...
-@overload
-def utf8(value: bytes) -> bytes: ...
-@overload
-def utf8(value: str) -> bytes: ...
-def utf8(value):
-# implementation goes here
+* Exit code
 
 
 ---
 
-## `runtime_checkable() -> None`
+## `test() -> None`
 
-Mark a protocol class as a runtime protocol.
+Run tests on resources that match the specified pattern
 
-Such protocol can be used with isinstance() and issubclass().
-Raise TypeError if applied to a non-protocol class.
-This allows a simple-minded structural check very similar to
-one trick ponies in collections.abc such as Iterable.
-For example::
+Arguments:
 
-@runtime_checkable
-class Closable(Protocol):
-def close(self): ...
+* `pattern`: the resource name as a regular expression
 
-assert isinstance(open('/some/file'), Closable)
+Returns:
 
-Warning: this will check only the presence of the required methods,
-not their type signatures!
+* Exit code: E_OK on success, E_FAILED on failure
 
diff --git a/docs/makemd.py b/docs/makemd.py
index 5ef49f3d9..1b1eca704 100644
--- a/docs/makemd.py
+++ b/docs/makemd.py
@@ -19,7 +19,7 @@
 E_SYNTAX = 3
 E_EXCEPTION = 9
 
-IGNORE = ['TypeVar']
+IGNORE = ['TypeVar','Union']
 
 class MakemdError(Exception):
     def __init__(self,msg,exitcode=None):
@@ -48,7 +48,7 @@ def __init__(self,msg,exitcode=None):
         # output classes
         first = True
         for item in [getattr(module,x) for x in dir(module) if inspect.isclass(getattr(module,x))]:
-            if not item.__doc__ or item.__name__ in IGNORE:
+            if not item.__doc__ or item.__name__ in IGNORE or isinstance(item,type(os)):
                 continue
             if first:
                 print("\n# Classes",file=md)
diff --git a/runtime/resource.csv b/runtime/resource.csv
index 9b2b9012a..38647a7d7 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -2,6 +2,10 @@ resource,protocol,port,hostname,index,content,mimetype,deprecation,comment
 localhost,http,6267-6279,127.0.0.1,,,,Server mode support (see https://docs.gridlabd.us/)
 buildings,http,80,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,/index,/{index},,,Compiled AutoBEM4 building data
 code,https,443,raw.githubusercontent.com,/{origin}/refs/heads/{gitbranch}/index,/{origin}/refs/heads/{gitbranch}/{index},Github release code repository
+#code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{gitbranch},,,Github development code repository
+#develop.code,https,443,develop.code.gridlabd.us
+#develop.source,https,443,develop.source.gridlabd.us
+#dmg,https,443,dmg.gridlabd.us
 #docker,https,443,hub.docker.com,/v2/repositories/lfenergy/arras/tags/?page_size=1000,/v2/repositories/lfenergy/arras/{index},*/*,,Dockerhub list of repositories
 #docs-dev,https,443,docs-dev.gridlabd.us
 #docs,https,443,docs.gridlabd.us
diff --git a/tools/resource.py b/tools/resource.py
index 4dd48c177..3ad8da411 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -58,8 +58,8 @@
 import framework as app
 import subprocess
 import requests
-from typing import *
-from PIL import Image
+from typing import TypeVar, Union
+import PIL
 import numpy as np
 
 pd.options.display.max_columns = None
@@ -79,7 +79,7 @@ class Resource:
         ".csv.gz" : lambda x: pd.read_csv(io.BytesIO(x.content),compression="gzip",low_memory=False),
         ".csv" : lambda x: pd.read_csv(io.StringIO(x.content.decode("utf-8")),low_memory=False),
         ".json" : lambda x: json.load(io.StringIO(x.content.decode("utf-8"))),
-        ".tif" : lambda x: np.array(Image.open(io.BytesIO(x.content))),
+        ".tif" : lambda x: np.array(PIL.Image.open(io.BytesIO(x.content))),
         ".tmy3" : lambda x: pd.read_csv(io.StringIO(x.content.decode("utf-8")),
                 low_memory=False,
                 skiprows=1,
@@ -253,8 +253,17 @@ def content(self,**kwargs:dict) -> str:
                 },
             **spec)
 
-def main(argv):
+def main(argv:list) -> int:
+    """Resource tool main routine
 
+    Arguments:
+
+    * `argv`: command line arguments
+
+    Returns:
+
+    * Exit code
+    """
     if len(argv) == 1:
 
         print("\n".join([x for x in __doc__.split("\n") if x.startswith("Syntax: ")]),file=sys.stderr)
@@ -420,6 +429,16 @@ def output_json(data,**kwargs):
     return app.E_OK
 
 def test(pattern='.*'):
+    """Run tests on resources that match the specified pattern
+
+    Arguments:
+
+    * `pattern`: the resource name as a regular expression
+
+    Returns:
+
+    * Exit code: E_OK on success, E_FAILED on failure
+    """
     resource = Resource()
     tested = 0
     failed = 0
@@ -465,8 +484,8 @@ def test(pattern='.*'):
         #
 
         options = []
-        options.extend(["--debug"])
-        options.extend(["--verbose"])
+        # options.extend(["--debug"])
+        # options.extend(["--verbose"])
         # options.extend(["--format=csv"])
         # options.extend(["--format=csv,fmt:.0f"])
         # options.extend(["--format=json,indent:4"])
@@ -483,6 +502,7 @@ def test(pattern='.*'):
 
         # sys.argv = [__file__,*options,"--properties"]
         # sys.argv = [__file__,*options,"--properties=buildings"]
+        # sys.argv = [__file__,*options,"--properties=code"]
         # sys.argv = [__file__,*options,"--properties=elevation"]
         # sys.argv = [__file__,*options,"--properties=examples"]
         # sys.argv = [__file__,*options,"--properties=weather"]

From bc9bdb0524982a8c057ff357df2797ea09db6fc9 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 22 Jan 2025 15:19:51 -0600
Subject: [PATCH 21/29] Add geodata resource

---
 runtime/resource.csv | 4 ++--
 tools/resource.py    | 3 +++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/runtime/resource.csv b/runtime/resource.csv
index 38647a7d7..702ec39e3 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -11,8 +11,8 @@ code,https,443,raw.githubusercontent.com,/{origin}/refs/heads/{gitbranch}/index,
 #docs,https,443,docs.gridlabd.us
 elevation,https,443,s3.us-west-1.amazonaws.com,/elevation.gridlabd.us/index,/elevation.gridlabd.us/{index},image/tiff,,Ground elevation data
 examples,https,443,raw.githubusercontent.com,/{organization}/gridlabd-examples/master/index,/{organization}/gridlabd-examples/master/{index},,,GridLAB-D model examples with supporting files
-#geodata-dev,https,443,geodata-dev.gridlabd.us
-#geodata,https,443,geodata.gridlabd.us
+#geodata-dev,https,443,geodata.gridlabd.us
+geodata,https,443,s3.us-west-1.amazonaws.com,/geodata.gridlabd.us/index,/geodata.gridlabd.us/{index},*/*,,Geodata
 #gridchat,https,443,gridchat.gridlabd.us
 #gridlabd,https,443,gridlabd.us
 #help,https,443,help.gridlabd.us
diff --git a/tools/resource.py b/tools/resource.py
index 3ad8da411..5560ccdca 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -498,6 +498,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--index=code"]
         # sys.argv = [__file__,*options,"--index=elevation"]
         # sys.argv = [__file__,*options,"--index=examples"]
+        # sys.argv = [__file__,*options,"--index=geodata"]
         # sys.argv = [__file__,*options,"--index=weather"]
 
         # sys.argv = [__file__,*options,"--properties"]
@@ -505,12 +506,14 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=code"]
         # sys.argv = [__file__,*options,"--properties=elevation"]
         # sys.argv = [__file__,*options,"--properties=examples"]
+        # sys.argv = [__file__,*options,"--properties=geodata"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
         # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
         # sys.argv = [__file__,*options,"--content=code,COPYRIGHT"]
         # sys.argv = [__file__,*options,"--content=elevation,10m/31N_112W.tif"]
         # sys.argv = [__file__,*options,"--content=examples,geodata/IEEE-123.json"]
+        # sys.argv = [__file__,*options,"--content=geodata,census/income_CA.csv"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
 
         # sys.argv = [__file__,*options,"--index"] # should be an error

From 8ae5ea6b7337aeade8981a2adbf38630bcefb75a Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 22 Jan 2025 15:48:31 -0600
Subject: [PATCH 22/29] Add icons resource

---
 runtime/resource.csv | 64 ++++++++++++++++++++++----------------------
 tools/resource.py    | 10 +++++--
 2 files changed, 40 insertions(+), 34 deletions(-)

diff --git a/runtime/resource.csv b/runtime/resource.csv
index 702ec39e3..48cb039ab 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -2,39 +2,39 @@ resource,protocol,port,hostname,index,content,mimetype,deprecation,comment
 localhost,http,6267-6279,127.0.0.1,,,,Server mode support (see https://docs.gridlabd.us/)
 buildings,http,80,buildings.gridlabd.us.s3-website-us-west-1.amazonaws.com,/index,/{index},,,Compiled AutoBEM4 building data
 code,https,443,raw.githubusercontent.com,/{origin}/refs/heads/{gitbranch}/index,/{origin}/refs/heads/{gitbranch}/{index},Github release code repository
-#code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{gitbranch},,,Github development code repository
-#develop.code,https,443,develop.code.gridlabd.us
-#develop.source,https,443,develop.source.gridlabd.us
-#dmg,https,443,dmg.gridlabd.us
-#docker,https,443,hub.docker.com,/v2/repositories/lfenergy/arras/tags/?page_size=1000,/v2/repositories/lfenergy/arras/{index},*/*,,Dockerhub list of repositories
-#docs-dev,https,443,docs-dev.gridlabd.us
-#docs,https,443,docs.gridlabd.us
+# code-dev,https,443,github.com,,/{organization}/gridlabd/tree/{gitbranch},,,Github development code repository
+# develop.code,https,443,develop.code.gridlabd.us
+# develop.source,https,443,develop.source.gridlabd.us
+# dmg,https,443,dmg.gridlabd.us
+# docker,https,443,hub.docker.com,/v2/repositories/lfenergy/arras/tags/?page_size=1000,/v2/repositories/lfenergy/arras/{index},*/*,,Dockerhub list of repositories
+# docs-dev,https,443,docs-dev.gridlabd.us
+# docs,https,443,docs.gridlabd.us
 elevation,https,443,s3.us-west-1.amazonaws.com,/elevation.gridlabd.us/index,/elevation.gridlabd.us/{index},image/tiff,,Ground elevation data
 examples,https,443,raw.githubusercontent.com,/{organization}/gridlabd-examples/master/index,/{organization}/gridlabd-examples/master/{index},,,GridLAB-D model examples with supporting files
-#geodata-dev,https,443,geodata.gridlabd.us
+# geodata-dev,https,443,geodata.gridlabd.us
 geodata,https,443,s3.us-west-1.amazonaws.com,/geodata.gridlabd.us/index,/geodata.gridlabd.us/{index},*/*,,Geodata
-#gridchat,https,443,gridchat.gridlabd.us
-#gridlabd,https,443,gridlabd.us
-#help,https,443,help.gridlabd.us
-#icons,https,443,icons.gridlabd.us
-#install-dev,https,443,install-dev.gridlabd.us
-#issues,https,443,issues.gridlabd.us
-#library,https,443,library.gridlabd.us
-#master.code,https,443,master.code.gridlabd.us
-#master.source,https,443,master.source.gridlabd.us
-#models,https,443,models.gridlabd.us
-#news,https,443,news.gridlabd.us
-#openfido,https,443,openfido.gridlabd.us
-#source,https,443,source.gridlabd.us
-#status-dev,https,443,status-dev.gridlabd.us
-#status,https,443,status.gridalbd.us
-#tariff,https,443,tariff.gridlabd.us
-#template,https,443,template.gridlabd.us
-#test,https,443,test.gridlabd.us
-#training,https,443,training.gridlabd.us
-#tutorials-dev,https,443,tutorials-dev.gridlabd.us
-#tutorials,https,443,tutorials.gridlabd.us
-#version,https,443,version.gridlabd.us
+# gridchat,https,443,gridchat.gridlabd.us
+# gridlabd,https,443,gridlabd.us
+# help,https,443,help.gridlabd.us
+icons,https,443,s3.us-west-1.amazonaws.com,/icons.gridlabd.us/index,/icons.gridlabd.us/{index},image/png,,GridLAB-D object icon library
+# install-dev,https,443,install-dev.gridlabd.us
+# issues,https,443,issues.gridlabd.us
+# library,https,443,library.gridlabd.us
+# master.code,https,443,master.code.gridlabd.us
+# master.source,https,443,master.source.gridlabd.us
+# models,https,443,models.gridlabd.us
+# news,https,443,news.gridlabd.us
+# openfido,https,443,openfido.gridlabd.us
+# source,https,443,source.gridlabd.us
+# status-dev,https,443,status-dev.gridlabd.us
+# status,https,443,status.gridalbd.us
+# tariff,https,443,tariff.gridlabd.us
+# template,https,443,template.gridlabd.us
+# test,https,443,test.gridlabd.us
+# training,https,443,training.gridlabd.us
+# tutorials-dev,https,443,tutorials-dev.gridlabd.us
+# tutorials,https,443,tutorials.gridlabd.us
+# version,https,443,version.gridlabd.us
 weather,https,443,raw.githubusercontent.com,/{organization}/gridlabd-weather/master/index,/{organization}/gridlabd-weather/master/{index},,,TMY3 weather data repository
-#www-dev,https,443,www-dev.gridlabd.us
-#www,https,443,www.gridlabd.us
\ No newline at end of file
+# www-dev,https,443,www-dev.gridlabd.us
+# www,https,443,www.gridlabd.us
\ No newline at end of file
diff --git a/tools/resource.py b/tools/resource.py
index 5560ccdca..dfe83818e 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -59,7 +59,7 @@
 import subprocess
 import requests
 from typing import TypeVar, Union
-import PIL
+from PIL import Image
 import numpy as np
 
 pd.options.display.max_columns = None
@@ -79,7 +79,8 @@ class Resource:
         ".csv.gz" : lambda x: pd.read_csv(io.BytesIO(x.content),compression="gzip",low_memory=False),
         ".csv" : lambda x: pd.read_csv(io.StringIO(x.content.decode("utf-8")),low_memory=False),
         ".json" : lambda x: json.load(io.StringIO(x.content.decode("utf-8"))),
-        ".tif" : lambda x: np.array(PIL.Image.open(io.BytesIO(x.content))),
+        ".tif" : lambda x: np.array(Image.open(io.BytesIO(x.content))),
+        ".png" : lambda x: np.array(Image.open(io.BytesIO(x.content))),
         ".tmy3" : lambda x: pd.read_csv(io.StringIO(x.content.decode("utf-8")),
                 low_memory=False,
                 skiprows=1,
@@ -477,6 +478,8 @@ def test(pattern='.*'):
         # sys.argv = [__file__,"--test=buildings"]
         # sys.argv = [__file__,"--test=elevation"]
         # sys.argv = [__file__,"--test=examples"]
+        # sys.argv = [__file__,"--test=geodata"]
+        # sys.argv = [__file__,"--test=icons"]
         # sys.argv = [__file__,"--test=weather"]
 
         #
@@ -499,6 +502,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--index=elevation"]
         # sys.argv = [__file__,*options,"--index=examples"]
         # sys.argv = [__file__,*options,"--index=geodata"]
+        # sys.argv = [__file__,*options,"--index=icons"]
         # sys.argv = [__file__,*options,"--index=weather"]
 
         # sys.argv = [__file__,*options,"--properties"]
@@ -507,6 +511,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=elevation"]
         # sys.argv = [__file__,*options,"--properties=examples"]
         # sys.argv = [__file__,*options,"--properties=geodata"]
+        # sys.argv = [__file__,*options,"--properties=icons"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
         # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
@@ -514,6 +519,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--content=elevation,10m/31N_112W.tif"]
         # sys.argv = [__file__,*options,"--content=examples,geodata/IEEE-123.json"]
         # sys.argv = [__file__,*options,"--content=geodata,census/income_CA.csv"]
+        # sys.argv = [__file__,*options,"--content=icons,pole.png"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
 
         # sys.argv = [__file__,*options,"--index"] # should be an error

From 78e3c296dc2fd88cda60f581a9d083985c8ebb3b Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 22 Jan 2025 15:55:20 -0600
Subject: [PATCH 23/29] Add library resources

---
 runtime/resource.csv | 2 +-
 tools/resource.py    | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/runtime/resource.csv b/runtime/resource.csv
index 48cb039ab..d9937039d 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -19,7 +19,7 @@ geodata,https,443,s3.us-west-1.amazonaws.com,/geodata.gridlabd.us/index,/geodata
 icons,https,443,s3.us-west-1.amazonaws.com,/icons.gridlabd.us/index,/icons.gridlabd.us/{index},image/png,,GridLAB-D object icon library
 # install-dev,https,443,install-dev.gridlabd.us
 # issues,https,443,issues.gridlabd.us
-# library,https,443,library.gridlabd.us
+library,https,443,raw.githubusercontent.com,/{organization}/gridlabd-library/master/index,/{organization}/gridlabd-library/master/{index},,,GridLAB-D object library
 # master.code,https,443,master.code.gridlabd.us
 # master.source,https,443,master.source.gridlabd.us
 # models,https,443,models.gridlabd.us
diff --git a/tools/resource.py b/tools/resource.py
index dfe83818e..a49e116ae 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -480,6 +480,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,"--test=examples"]
         # sys.argv = [__file__,"--test=geodata"]
         # sys.argv = [__file__,"--test=icons"]
+        # sys.argv = [__file__,"--test=library"]
         # sys.argv = [__file__,"--test=weather"]
 
         #
@@ -503,6 +504,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--index=examples"]
         # sys.argv = [__file__,*options,"--index=geodata"]
         # sys.argv = [__file__,*options,"--index=icons"]
+        # sys.argv = [__file__,*options,"--index=library"]
         # sys.argv = [__file__,*options,"--index=weather"]
 
         # sys.argv = [__file__,*options,"--properties"]
@@ -512,6 +514,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=examples"]
         # sys.argv = [__file__,*options,"--properties=geodata"]
         # sys.argv = [__file__,*options,"--properties=icons"]
+        # sys.argv = [__file__,*options,"--properties=library"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
         # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
@@ -520,6 +523,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--content=examples,geodata/IEEE-123.json"]
         # sys.argv = [__file__,*options,"--content=geodata,census/income_CA.csv"]
         # sys.argv = [__file__,*options,"--content=icons,pole.png"]
+        sys.argv = [__file__,*options,"--content=library,US/CA/SLAC/pole_configuration.glm"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
 
         # sys.argv = [__file__,*options,"--index"] # should be an error

From 02918a52d498cd684e227e6feea90319399d592c Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 22 Jan 2025 16:21:54 -0600
Subject: [PATCH 24/29] Add models resource

---
 runtime/resource.csv |  2 +-
 tools/resource.py    | 11 +++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/runtime/resource.csv b/runtime/resource.csv
index d9937039d..e0d3085cb 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -22,7 +22,7 @@ icons,https,443,s3.us-west-1.amazonaws.com,/icons.gridlabd.us/index,/icons.gridl
 library,https,443,raw.githubusercontent.com,/{organization}/gridlabd-library/master/index,/{organization}/gridlabd-library/master/{index},,,GridLAB-D object library
 # master.code,https,443,master.code.gridlabd.us
 # master.source,https,443,master.source.gridlabd.us
-# models,https,443,models.gridlabd.us
+models,https,443,raw.githubusercontent.com,/{organization}/gridlabd-models/master/index,/{organization}/gridlabd-models/master/{index},,,GridLAB-D model library
 # news,https,443,news.gridlabd.us
 # openfido,https,443,openfido.gridlabd.us
 # source,https,443,source.gridlabd.us
diff --git a/tools/resource.py b/tools/resource.py
index a49e116ae..108537201 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -205,7 +205,10 @@ def index(self,**kwargs:dict) -> Union[str,list,dict]:
         del spec['index']
 
         return self._download(
-            headers={'Accept':'text/plain'},
+            headers={
+                'Accept':'text/plain',
+                'Cache-Control':'no-cache',
+                },
             output_to=lambda x:x.strip().split("\n"),
             **spec)
 
@@ -225,6 +228,7 @@ def headers(self,**kwargs:dict) -> Union[str,list,dict]:
             headers = {
                 'Accept': spec['mimetype'] if spec['mimetype'] else '*/*',
                 'Connection': 'close',
+                'Cache-Control':'no-cache',
                 },
             **spec)
 
@@ -505,6 +509,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--index=geodata"]
         # sys.argv = [__file__,*options,"--index=icons"]
         # sys.argv = [__file__,*options,"--index=library"]
+        # sys.argv = [__file__,*options,"--index=models"]
         # sys.argv = [__file__,*options,"--index=weather"]
 
         # sys.argv = [__file__,*options,"--properties"]
@@ -515,6 +520,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=geodata"]
         # sys.argv = [__file__,*options,"--properties=icons"]
         # sys.argv = [__file__,*options,"--properties=library"]
+        # sys.argv = [__file__,*options,"--properties=models"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
         # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
@@ -523,7 +529,8 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--content=examples,geodata/IEEE-123.json"]
         # sys.argv = [__file__,*options,"--content=geodata,census/income_CA.csv"]
         # sys.argv = [__file__,*options,"--content=icons,pole.png"]
-        sys.argv = [__file__,*options,"--content=library,US/CA/SLAC/pole_configuration.glm"]
+        # sys.argv = [__file__,*options,"--content=library,US/CA/SLAC/pole_configuration.glm"]
+        # sys.argv = [__file__,*options,"--content=models,gridlabd-4/IEEE/13.glm"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
 
         # sys.argv = [__file__,*options,"--index"] # should be an error

From a75a0e52e61fd43251679ce7caab7c396bd0e103 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 22 Jan 2025 16:28:33 -0600
Subject: [PATCH 25/29] Add tariff resource

---
 runtime/resource.csv | 2 +-
 tools/resource.py    | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/runtime/resource.csv b/runtime/resource.csv
index e0d3085cb..08732ebbe 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -28,7 +28,7 @@ models,https,443,raw.githubusercontent.com,/{organization}/gridlabd-models/maste
 # source,https,443,source.gridlabd.us
 # status-dev,https,443,status-dev.gridlabd.us
 # status,https,443,status.gridalbd.us
-# tariff,https,443,tariff.gridlabd.us
+tariff,https,443,s3.us-west-1.amazonaws.com,/tariff.gridlabd.us/index,/tariff.gridlabd.us/{index},image/png,,GridLAB-D tariff data library
 # template,https,443,template.gridlabd.us
 # test,https,443,test.gridlabd.us
 # training,https,443,training.gridlabd.us
diff --git a/tools/resource.py b/tools/resource.py
index 108537201..3d01c8324 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -510,6 +510,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--index=icons"]
         # sys.argv = [__file__,*options,"--index=library"]
         # sys.argv = [__file__,*options,"--index=models"]
+        # sys.argv = [__file__,*options,"--index=tariff"]
         # sys.argv = [__file__,*options,"--index=weather"]
 
         # sys.argv = [__file__,*options,"--properties"]
@@ -521,6 +522,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=icons"]
         # sys.argv = [__file__,*options,"--properties=library"]
         # sys.argv = [__file__,*options,"--properties=models"]
+        # sys.argv = [__file__,*options,"--properties=tariff"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
         # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
@@ -531,6 +533,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--content=icons,pole.png"]
         # sys.argv = [__file__,*options,"--content=library,US/CA/SLAC/pole_configuration.glm"]
         # sys.argv = [__file__,*options,"--content=models,gridlabd-4/IEEE/13.glm"]
+        # sys.argv = [__file__,*options,"--content=tariff,rates.csv.gz"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
 
         # sys.argv = [__file__,*options,"--index"] # should be an error

From 5ef1e7b7b4f99d5af6e2ad2b08810395a8e4e132 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 22 Jan 2025 16:35:11 -0600
Subject: [PATCH 26/29] Add template resource

---
 runtime/resource.csv | 2 +-
 tools/resource.py    | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/runtime/resource.csv b/runtime/resource.csv
index 08732ebbe..2cfada4a6 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -29,7 +29,7 @@ models,https,443,raw.githubusercontent.com,/{organization}/gridlabd-models/maste
 # status-dev,https,443,status-dev.gridlabd.us
 # status,https,443,status.gridalbd.us
 tariff,https,443,s3.us-west-1.amazonaws.com,/tariff.gridlabd.us/index,/tariff.gridlabd.us/{index},image/png,,GridLAB-D tariff data library
-# template,https,443,template.gridlabd.us
+template,https,443,raw.githubusercontent.com,/{organization}/gridlabd-template/master/index,/{organization}/gridlabd-template/master/{index},,,GridLAB-D analysis template library
 # test,https,443,test.gridlabd.us
 # training,https,443,training.gridlabd.us
 # tutorials-dev,https,443,tutorials-dev.gridlabd.us
diff --git a/tools/resource.py b/tools/resource.py
index 3d01c8324..37efb30f3 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -511,6 +511,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--index=library"]
         # sys.argv = [__file__,*options,"--index=models"]
         # sys.argv = [__file__,*options,"--index=tariff"]
+        # sys.argv = [__file__,*options,"--index=template"]
         # sys.argv = [__file__,*options,"--index=weather"]
 
         # sys.argv = [__file__,*options,"--properties"]
@@ -523,6 +524,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=library"]
         # sys.argv = [__file__,*options,"--properties=models"]
         # sys.argv = [__file__,*options,"--properties=tariff"]
+        # sys.argv = [__file__,*options,"--properties=template"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
         # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
@@ -534,6 +536,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--content=library,US/CA/SLAC/pole_configuration.glm"]
         # sys.argv = [__file__,*options,"--content=models,gridlabd-4/IEEE/13.glm"]
         # sys.argv = [__file__,*options,"--content=tariff,rates.csv.gz"]
+        # sys.argv = [__file__,*options,"--content=template,US/CA/SLAC/electrification/electrification.md"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
 
         # sys.argv = [__file__,*options,"--index"] # should be an error

From 0c40b5ac8668696a553bfc57c032a8824421faa0 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 22 Jan 2025 17:43:55 -0600
Subject: [PATCH 27/29] Add version (index only)

---
 docs/Tools/Resource.md |  8 ++++----
 runtime/resource.csv   |  2 +-
 tools/resource.py      | 30 +++++++++++++++++++++++-------
 3 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/docs/Tools/Resource.md b/docs/Tools/Resource.md
index 2b631e3d9..cc3e807a1 100644
--- a/docs/Tools/Resource.md
+++ b/docs/Tools/Resource.md
@@ -36,13 +36,13 @@ Valid formats include `json` and `csv` (the default is 'raw').
 
 Examples:
 
-The following command list the properties on the online weather resources
+The following command lists the released versions
 
-    gridlabd resource --properties=weather
+    gridlabd resource --index=version
 
-The following command lists the online weather resource index
+The following command lists the properties on the online weather resources
 
-    gridlabd resource --index=weather
+    gridlabd resource --properties=weather
 
 The following command retrieves the online weather data for the specified location
 
diff --git a/runtime/resource.csv b/runtime/resource.csv
index 2cfada4a6..dc2b0b8b9 100644
--- a/runtime/resource.csv
+++ b/runtime/resource.csv
@@ -34,7 +34,7 @@ template,https,443,raw.githubusercontent.com,/{organization}/gridlabd-template/m
 # training,https,443,training.gridlabd.us
 # tutorials-dev,https,443,tutorials-dev.gridlabd.us
 # tutorials,https,443,tutorials.gridlabd.us
-# version,https,443,version.gridlabd.us
+version,https,443,api.github.com,/repos/{organization}/gridlabd/releases@name,,,,Version information
 weather,https,443,raw.githubusercontent.com,/{organization}/gridlabd-weather/master/index,/{organization}/gridlabd-weather/master/{index},,,TMY3 weather data repository
 # www-dev,https,443,www-dev.gridlabd.us
 # www,https,443,www.gridlabd.us
\ No newline at end of file
diff --git a/tools/resource.py b/tools/resource.py
index 37efb30f3..98a039417 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -36,13 +36,13 @@
 
 Examples:
 
-The following command list the properties on the online weather resources
+The following command lists the released versions
 
-    gridlabd resource --properties=weather
+    gridlabd resource --index=version
 
-The following command lists the online weather resource index
+The following command lists the properties on the online weather resources
 
-    gridlabd resource --index=weather
+    gridlabd resource --properties=weather
 
 The following command retrieves the online weather data for the specified location
 
@@ -204,12 +204,21 @@ def index(self,**kwargs:dict) -> Union[str,list,dict]:
         spec['content'] = spec['index']
         del spec['index']
 
+        if "@" in spec['content']:
+            spec['content'],key = spec['content'].split("@",1)
+            mimetype = "application/json"
+            output_as = lambda x: [y[key] for y in json.loads(x)]
+        else:
+            mimetype = "text/plain"
+            output_as = lambda x: x.strip().split("\n")
+
+
         return self._download(
             headers={
-                'Accept':'text/plain',
+                'Accept':mimetype,
                 'Cache-Control':'no-cache',
                 },
-            output_to=lambda x:x.strip().split("\n"),
+            output_to=output_as,
             **spec)
 
     def headers(self,**kwargs:dict) -> Union[str,list,dict]:
@@ -249,7 +258,7 @@ def content(self,**kwargs:dict) -> str:
 
         if not spec['content']:
 
-            raise ResourceError(f"{spec['resource']} has not content")
+            raise ResourceError(f"{spec['resource']} has no content")
 
         return self._download(
             headers = {
@@ -485,6 +494,10 @@ def test(pattern='.*'):
         # sys.argv = [__file__,"--test=geodata"]
         # sys.argv = [__file__,"--test=icons"]
         # sys.argv = [__file__,"--test=library"]
+        # sys.argv = [__file__,"--test=models"]
+        # sys.argv = [__file__,"--test=tariff"]
+        # sys.argv = [__file__,"--test=template"]
+        # sys.argv = [__file__,"--test=version"]
         # sys.argv = [__file__,"--test=weather"]
 
         #
@@ -512,6 +525,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--index=models"]
         # sys.argv = [__file__,*options,"--index=tariff"]
         # sys.argv = [__file__,*options,"--index=template"]
+        # sys.argv = [__file__,*options,"--index=version"]
         # sys.argv = [__file__,*options,"--index=weather"]
 
         # sys.argv = [__file__,*options,"--properties"]
@@ -525,6 +539,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--properties=models"]
         # sys.argv = [__file__,*options,"--properties=tariff"]
         # sys.argv = [__file__,*options,"--properties=template"]
+        # sys.argv = [__file__,*options,"--properties=version"]
         # sys.argv = [__file__,*options,"--properties=weather"]
 
         # sys.argv = [__file__,*options,"--content=buildings,US/ME_Aroostook.csv.gz"]
@@ -537,6 +552,7 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--content=models,gridlabd-4/IEEE/13.glm"]
         # sys.argv = [__file__,*options,"--content=tariff,rates.csv.gz"]
         # sys.argv = [__file__,*options,"--content=template,US/CA/SLAC/electrification/electrification.md"]
+        # sys.argv = [__file__,*options,"--content=version,4.3.2"]
         # sys.argv = [__file__,*options,"--content=weather,US/WA-Seattle_Seattletacoma_Intl_A.tmy3"]
 
         # sys.argv = [__file__,*options,"--index"] # should be an error

From a9d548ff0d4d2b38898f8aa536134cfb7cac7b31 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Wed, 22 Jan 2025 17:57:18 -0600
Subject: [PATCH 28/29] Add support for main call in framework

---
 tools/framework.py | 35 +++++++++++++++++++++++++++++++++++
 tools/resource.py  | 21 +--------------------
 2 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/tools/framework.py b/tools/framework.py
index b4685b3c2..dcb7234d1 100644
--- a/tools/framework.py
+++ b/tools/framework.py
@@ -435,6 +435,41 @@ def complex_unit(x:str,
     # raw property (i.e., real, imag, conjugate)
     return getattr(x,form)
 
+def run(main:callable,exit=exit,print=print):
+    """Run a main function under this app framework
+
+    Arguments:
+
+    * `main`: the main function to run
+
+    * `exit`: the exit function to call (default is `exit`)
+
+    * `print`: the print funtion to call on exceptions (default is `print`)
+
+    This function does not return. When the app is done it calls exit.
+    """
+    try:
+
+        rc = main(sys.argv)
+        exit(rc)
+
+    except KeyboardInterrupt:
+
+        exit(app.E_INTERRUPT)
+
+    except Exception as exc:
+
+        if DEBUG:
+            raise exc
+
+        if not QUIET:
+            e_type,e_value,e_trace = sys.exc_info()
+            tb = traceback.TracebackException(e_type,e_value,e_trace).stack[-1]
+            print(f"EXCEPTION [{EXEFILE}@{tb.lineno}]: ({e_type.__name__}) {e_value}",file=sys.stderr)
+
+        exit(E_EXCEPTION)
+
+
 if __name__ == "__main__":
 
     raise ApplicationError("cannot run framework as a script")
diff --git a/tools/resource.py b/tools/resource.py
index 98a039417..5aa6cc34f 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -560,23 +560,4 @@ def test(pattern='.*'):
         # sys.argv = [__file__,*options,"--content=localhost"] # should be an error
         # sys.argv = [__file__,*options,"--content=junk"] # should be an error
 
-    try:
-
-        rc = main(sys.argv)
-        exit(rc)
-
-    except KeyboardInterrupt:
-
-        exit(app.E_INTERRUPT)
-
-    except Exception as exc:
-
-        if app.DEBUG:
-            raise exc
-
-        if not app.QUIET:
-            e_type,e_value,e_trace = sys.exc_info()
-            tb = app.traceback.TracebackException(e_type,e_value,e_trace).stack[-1]
-            print(f"EXCEPTION [{app.EXEFILE}@{tb.lineno}]: ({e_type.__name__}) {e_value}",file=sys.stderr)
-
-        exit(app.E_EXCEPTION)
+    app.run(main)

From ebc023f8903e2c3fcdc637c2b50c9d3b3d10b043 Mon Sep 17 00:00:00 2001
From: "David P. Chassin" <david.chassin@me.com>
Date: Thu, 23 Jan 2025 07:25:15 -0800
Subject: [PATCH 29/29] Update framework docs

---
 docs/Tools/Framework.md | 78 ++++++++++++++++++++++++-----------------
 docs/Tools/Mapping.md   | 38 ++++++++++++++++++++
 tools/framework.py      | 58 +++++++++++++++---------------
 tools/resource.py       |  3 +-
 4 files changed, 113 insertions(+), 64 deletions(-)

diff --git a/docs/Tools/Framework.md b/docs/Tools/Framework.md
index f997662eb..e38a71b79 100644
--- a/docs/Tools/Framework.md
+++ b/docs/Tools/Framework.md
@@ -22,15 +22,12 @@ Example:
 ~~~
 import framework as app
 
-def main(argv):
+def main(argv:list[str]) -> int:
 
     # handle no options case -- typically a cry for help
     if len(argv) == 1:
 
-        print("
-".join([x for x in __doc__.split("
-") if x.startswith("Syntax: ")]))
-        return app.E_SYNTAX
+        app.syntax(__doc__)
 
     # handle stardard app arguments --debug, --warning, --verbose, --quiet, --silent
     args = app.read_stdargs(argv)
@@ -40,42 +37,21 @@ def main(argv):
         if key in ["-h","--help","help"]:
             print(__doc__,file=sys.stdout)
 
-        # TODO: add options here
+        # add your options here
 
         else:
-            error(f"'{key}={value}' is invalid")
+
+            app.error(f"'{key}={value}' is invalid")
             return app.E_INVALID
 
-    # TODO: code implementation here, if any
+    # implement your code here
 
+    # normal termination condigion
     return app.E_OK
 
 if __name__ == "__main__":
 
-    try:
-
-        # TODO: development testing -- delete when done writing code
-        if not sys.argv[0]:
-            sys.argv = ["selftest","--debug"]
-
-        rc = main(sys.argv)
-        exit(rc)
-
-    except KeyboardInterrupt:
-
-        exit(app.E_INTERRUPT)
-
-    except Exception as exc:
-
-        if app.DEBUG:
-            raise exc
-
-        if not app.QUIET:
-            e_type,e_value,e_trace = sys.exc_info()
-            tb = app.traceback.TracebackException(e_type,e_value,e_trace).stack[1]
-            print(f"EXCEPTION [{app.EXEFILE}@{tb.lineno}]: ({e_type.__name__}) {e_value}",file=sys.stderr)
-
-        exit(app.E_EXCEPTION)
+    app.run(main)
 ~~~
 
 
@@ -154,6 +130,10 @@ Arguments:
 
 Messages are suppressed when the `--quiet` option is used.
 
+If `--debug` is enabled, an exception is raised with a traceback.
+
+If the exit `code` is specified, exit is called with the code.
+
 
 ---
 
@@ -165,6 +145,8 @@ Arguments:
 
 * `exc`: exception to raise
 
+If `exc` is a string, an `ApplicationError` exception is raised.
+
 
 ---
 
@@ -257,6 +239,38 @@ Returns:
 * Remaining arguments
 
 
+---
+
+## `run() -> None`
+
+Run a main function under this app framework
+
+Arguments:
+
+* `main`: the main function to run
+
+* `exit`: the exit function to call (default is `exit`)
+
+* `print`: the print funtion to call on exceptions (default is `print`)
+
+This function does not return. When the app is done it calls exit.
+
+
+---
+
+## `syntax() -> None`
+
+Print syntax message
+
+Arguments:
+
+* `docs`: the application's __doc__ string
+
+* `print`: the print function to use (default is `print`)
+
+This function does not return. When the function is done it calls exit(E_SYNTAX)
+
+
 ---
 
 ## `verbose() -> None`
diff --git a/docs/Tools/Mapping.md b/docs/Tools/Mapping.md
index 993ce8288..3e894fe7a 100644
--- a/docs/Tools/Mapping.md
+++ b/docs/Tools/Mapping.md
@@ -250,6 +250,10 @@ Arguments:
 
 Messages are suppressed when the `--quiet` option is used.
 
+If `--debug` is enabled, an exception is raised with a traceback.
+
+If the exit `code` is specified, exit is called with the code.
+
 
 ---
 
@@ -261,6 +265,8 @@ Arguments:
 
 * `exc`: exception to raise
 
+If `exc` is a string, an `ApplicationError` exception is raised.
+
 
 ---
 
@@ -385,6 +391,38 @@ Returns:
 * Remaining arguments
 
 
+---
+
+## `run() -> None`
+
+Run a main function under this app framework
+
+Arguments:
+
+* `main`: the main function to run
+
+* `exit`: the exit function to call (default is `exit`)
+
+* `print`: the print funtion to call on exceptions (default is `print`)
+
+This function does not return. When the app is done it calls exit.
+
+
+---
+
+## `syntax() -> None`
+
+Print syntax message
+
+Arguments:
+
+* `docs`: the application's __doc__ string
+
+* `print`: the print function to use (default is `print`)
+
+This function does not return. When the function is done it calls exit(E_SYNTAX)
+
+
 ---
 
 ## `verbose() -> None`
diff --git a/tools/framework.py b/tools/framework.py
index dcb7234d1..41db721b8 100644
--- a/tools/framework.py
+++ b/tools/framework.py
@@ -22,13 +22,12 @@
 ~~~
 import framework as app
 
-def main(argv):
+def main(argv:list[str]) -> int:
 
     # handle no options case -- typically a cry for help
     if len(argv) == 1:
 
-        print("\n".join([x for x in __doc__.split("\n") if x.startswith("Syntax: ")]))
-        return app.E_SYNTAX
+        app.syntax(__doc__)
 
     # handle stardard app arguments --debug, --warning, --verbose, --quiet, --silent
     args = app.read_stdargs(argv)
@@ -38,42 +37,21 @@ def main(argv):
         if key in ["-h","--help","help"]:
             print(__doc__,file=sys.stdout)
 
-        # TODO: add options here
+        # add your options here
 
         else:
-            error(f"'{key}={value}' is invalid")
+
+            app.error(f"'{key}={value}' is invalid")
             return app.E_INVALID
 
-    # TODO: code implementation here, if any
+    # implement your code here
 
+    # normal termination condigion
     return app.E_OK
 
 if __name__ == "__main__":
 
-    try:
-
-        # TODO: development testing -- delete when done writing code
-        if not sys.argv[0]:
-            sys.argv = ["selftest","--debug"]
-
-        rc = main(sys.argv)
-        exit(rc)
-
-    except KeyboardInterrupt:
-
-        exit(app.E_INTERRUPT)
-
-    except Exception as exc:
-
-        if app.DEBUG:
-            raise exc
-
-        if not app.QUIET:
-            e_type,e_value,e_trace = sys.exc_info()
-            tb = app.traceback.TracebackException(e_type,e_value,e_trace).stack[1]
-            print(f"EXCEPTION [{app.EXEFILE}@{tb.lineno}]: ({e_type.__name__}) {e_value}",file=sys.stderr)
-
-        exit(app.E_EXCEPTION)
+    app.run(main)
 ~~~
 """
 import os
@@ -190,6 +168,8 @@ def exception(exc:[TypeVar('Exception')|str]):
     Arguments:
 
     * `exc`: exception to raise
+
+    If `exc` is a string, an `ApplicationError` exception is raised.
     """
     if isinstance(exc,str):
         exc = ApplicationError(exc)
@@ -205,6 +185,10 @@ def error(*msg:list,code:[int|None]=None,**kwargs):
     * `**kwargs`: print options
 
     Messages are suppressed when the `--quiet` option is used.
+
+    If `--debug` is enabled, an exception is raised with a traceback.
+
+    If the exit `code` is specified, exit is called with the code.
     """
     if not QUIET:
         if code:
@@ -435,6 +419,20 @@ def complex_unit(x:str,
     # raw property (i.e., real, imag, conjugate)
     return getattr(x,form)
 
+def syntax(docs:str,print=print):
+    """Print syntax message
+
+    Arguments:
+
+    * `docs`: the application's __doc__ string
+
+    * `print`: the print function to use (default is `print`)
+
+    This function does not return. When the function is done it calls exit(E_SYNTAX)
+    """
+    print("\n".join([x for x in docs.split("\n") if x.startswith("Syntax: ")]))
+    exit(E_SYNTAX)
+
 def run(main:callable,exit=exit,print=print):
     """Run a main function under this app framework
 
diff --git a/tools/resource.py b/tools/resource.py
index 5aa6cc34f..ea65b5db1 100644
--- a/tools/resource.py
+++ b/tools/resource.py
@@ -280,8 +280,7 @@ def main(argv:list) -> int:
     """
     if len(argv) == 1:
 
-        print("\n".join([x for x in __doc__.split("\n") if x.startswith("Syntax: ")]),file=sys.stderr)
-        return app.E_SYNTAX
+        app.syntax(__doc__)
 
     args = app.read_stdargs(argv)