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)