buildstock-fetch 1.0.4__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of buildstock-fetch might be problematic. Click here for more details.
- buildstock_fetch/data/weather_station_map/weather_station_map.parquet +0 -0
- buildstock_fetch/main.py +416 -45
- buildstock_fetch/main_cli.py +4 -4
- {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/METADATA +4 -2
- {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/RECORD +213 -212
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Alaska → state=AK}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Alaska → state=AK}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Alabama → state=AL}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Alabama → state=AL}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Arkansas → state=AR}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Arkansas → state=AR}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Arizona → state=AZ}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Arizona → state=AZ}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=California → state=CA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=California → state=CA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Colorado → state=CO}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Colorado → state=CO}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Connecticut → state=CT}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Connecticut → state=CT}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=District%20of%20Columbia → state=DC}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=District%20of%20Columbia → state=DC}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Delaware → state=DE}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Delaware → state=DE}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Florida → state=FL}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Florida → state=FL}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Georgia → state=GA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Georgia → state=GA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Hawaii → state=HI}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Hawaii → state=HI}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Iowa → state=IA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Iowa → state=IA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Idaho → state=ID}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Idaho → state=ID}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Illinois → state=IL}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Illinois → state=IL}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Indiana → state=IN}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Indiana → state=IN}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Kansas → state=KS}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Kansas → state=KS}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Kentucky → state=KY}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Kentucky → state=KY}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Louisiana → state=LA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Louisiana → state=LA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Massachusetts → state=MA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Massachusetts → state=MA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Maryland → state=MD}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Maryland → state=MD}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Maine → state=ME}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Maine → state=ME}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Michigan → state=MI}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Michigan → state=MI}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Minnesota → state=MN}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Minnesota → state=MN}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Missouri → state=MO}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Missouri → state=MO}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Mississippi → state=MS}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Mississippi → state=MS}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Montana → state=MT}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Montana → state=MT}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=North%20Carolina → state=NC}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=North%20Carolina → state=NC}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=North%20Dakota → state=ND}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=North%20Dakota → state=ND}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Nebraska → state=NE}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Nebraska → state=NE}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=New%20Hampshire → state=NH}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=New%20Hampshire → state=NH}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=New%20Jersey → state=NJ}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=New%20Jersey → state=NJ}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=New%20Mexico → state=NM}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=New%20Mexico → state=NM}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Nevada → state=NV}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Nevada → state=NV}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=New%20York → state=NY}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=New%20York → state=NY}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Ohio → state=OH}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Ohio → state=OH}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Oklahoma → state=OK}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Oklahoma → state=OK}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Oregon → state=OR}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Oregon → state=OR}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Pennsylvania → state=PA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Pennsylvania → state=PA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Rhode%20Island → state=RI}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Rhode%20Island → state=RI}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=South%20Carolina → state=SC}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=South%20Carolina → state=SC}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=South%20Dakota → state=SD}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=South%20Dakota → state=SD}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Tennessee → state=TN}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Tennessee → state=TN}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Texas → state=TX}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Texas → state=TX}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Utah → state=UT}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Utah → state=UT}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Virginia → state=VA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Virginia → state=VA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Vermont → state=VT}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Vermont → state=VT}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Washington → state=WA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Washington → state=WA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Wisconsin → state=WI}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Wisconsin → state=WI}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=West%20Virginia → state=WV}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=West%20Virginia → state=WV}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Wyoming → state=WY}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=amy2018/release_version=1/{state=Wyoming → state=WY}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Alaska → state=AK}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Alaska → state=AK}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Alabama → state=AL}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Alabama → state=AL}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Arkansas → state=AR}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Arkansas → state=AR}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Arizona → state=AZ}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Arizona → state=AZ}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=California → state=CA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=California → state=CA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Colorado → state=CO}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Colorado → state=CO}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Connecticut → state=CT}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Connecticut → state=CT}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=District%20of%20Columbia → state=DC}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=District%20of%20Columbia → state=DC}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Delaware → state=DE}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Delaware → state=DE}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Florida → state=FL}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Florida → state=FL}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Georgia → state=GA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Georgia → state=GA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Hawaii → state=HI}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Hawaii → state=HI}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Iowa → state=IA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Iowa → state=IA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Idaho → state=ID}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Idaho → state=ID}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Illinois → state=IL}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Illinois → state=IL}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Indiana → state=IN}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Indiana → state=IN}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Kansas → state=KS}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Kansas → state=KS}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Kentucky → state=KY}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Kentucky → state=KY}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Louisiana → state=LA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Louisiana → state=LA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Massachusetts → state=MA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Massachusetts → state=MA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Maryland → state=MD}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Maryland → state=MD}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Maine → state=ME}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Maine → state=ME}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Michigan → state=MI}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Michigan → state=MI}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Minnesota → state=MN}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Minnesota → state=MN}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Missouri → state=MO}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Missouri → state=MO}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Mississippi → state=MS}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Mississippi → state=MS}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Montana → state=MT}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Montana → state=MT}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=North%20Carolina → state=NC}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=North%20Carolina → state=NC}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=North%20Dakota → state=ND}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=North%20Dakota → state=ND}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Nebraska → state=NE}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Nebraska → state=NE}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=New%20Hampshire → state=NH}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=New%20Hampshire → state=NH}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=New%20Jersey → state=NJ}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=New%20Jersey → state=NJ}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=New%20Mexico → state=NM}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=New%20Mexico → state=NM}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Nevada → state=NV}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Nevada → state=NV}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=New%20York → state=NY}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=New%20York → state=NY}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Ohio → state=OH}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Ohio → state=OH}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Oklahoma → state=OK}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Oklahoma → state=OK}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Oregon → state=OR}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Oregon → state=OR}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Pennsylvania → state=PA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Pennsylvania → state=PA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Rhode%20Island → state=RI}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Rhode%20Island → state=RI}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=South%20Carolina → state=SC}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=South%20Carolina → state=SC}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=South%20Dakota → state=SD}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=South%20Dakota → state=SD}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Tennessee → state=TN}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Tennessee → state=TN}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Texas → state=TX}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Texas → state=TX}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Utah → state=UT}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Utah → state=UT}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Virginia → state=VA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Virginia → state=VA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Vermont → state=VT}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Vermont → state=VT}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Washington → state=WA}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Washington → state=WA}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Wisconsin → state=WI}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Wisconsin → state=WI}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=West%20Virginia → state=WV}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=West%20Virginia → state=WV}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Wyoming → state=WY}/d1454abff0d94c8090af7b3e923c473b-0.parquet +0 -0
- /buildstock_fetch/data/building_data/combined_metadata.parquet/product=comstock/release_year=2021/weather_file=tmy3/release_version=1/{state=Wyoming → state=WY}/dcd864cc169b4695be2b9775b1a054ae-0.parquet +0 -0
- {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/WHEEL +0 -0
- {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/entry_points.txt +0 -0
- {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/licenses/LICENSE +0 -0
- {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/top_level.txt +0 -0
|
Binary file
|
buildstock_fetch/main.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import concurrent.futures
|
|
2
2
|
import json
|
|
3
|
+
import tempfile
|
|
3
4
|
import zipfile
|
|
4
5
|
from dataclasses import asdict, dataclass
|
|
5
6
|
from importlib.resources import files
|
|
@@ -58,10 +59,30 @@ class NoAnnualLoadCurveError(ValueError):
|
|
|
58
59
|
pass
|
|
59
60
|
|
|
60
61
|
|
|
62
|
+
class NoAggregateLoadCurveError(ValueError):
|
|
63
|
+
"""Raised when no monthly load curve is available for a given release."""
|
|
64
|
+
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class UnknownAggregationFunctionError(ValueError):
|
|
69
|
+
"""Raised when an unknown aggregation function is provided."""
|
|
70
|
+
|
|
71
|
+
pass
|
|
72
|
+
|
|
73
|
+
|
|
61
74
|
METADATA_DIR = Path(
|
|
62
75
|
str(files("buildstock_fetch").joinpath("data").joinpath("building_data").joinpath("combined_metadata.parquet"))
|
|
63
76
|
)
|
|
64
77
|
RELEASE_JSON_FILE = Path(str(files("buildstock_fetch").joinpath("data").joinpath("buildstock_releases.json")))
|
|
78
|
+
LOAD_CURVE_COLUMN_AGGREGATION = Path(
|
|
79
|
+
str(
|
|
80
|
+
files("buildstock_fetch")
|
|
81
|
+
.joinpath("data")
|
|
82
|
+
.joinpath("load_curve_column_map")
|
|
83
|
+
.joinpath("2024_resstock_load_curve_columns.csv")
|
|
84
|
+
)
|
|
85
|
+
)
|
|
65
86
|
|
|
66
87
|
|
|
67
88
|
@dataclass
|
|
@@ -234,6 +255,10 @@ class BuildingID:
|
|
|
234
255
|
else:
|
|
235
256
|
return ""
|
|
236
257
|
|
|
258
|
+
def get_aggregate_load_curve_url(self) -> str:
|
|
259
|
+
"""Generate the S3 download URL for this building. The url is the same as the 15-minute load curve url."""
|
|
260
|
+
return self.get_15min_load_curve_url()
|
|
261
|
+
|
|
237
262
|
def get_annual_load_curve_url(self) -> str:
|
|
238
263
|
"""Generate the S3 download URL for this building."""
|
|
239
264
|
if not self._validate_requested_file_type_availability("load_curve_annual"):
|
|
@@ -497,6 +522,146 @@ def _download_with_progress(url: str, output_file: Path, progress: Progress, tas
|
|
|
497
522
|
return downloaded_size
|
|
498
523
|
|
|
499
524
|
|
|
525
|
+
def _get_time_step_grouping_key(aggregate_time_step: str) -> tuple[str, str]:
|
|
526
|
+
"""Get the grouping key and format string for a given time step.
|
|
527
|
+
|
|
528
|
+
Args:
|
|
529
|
+
aggregate_time_step: The time step to aggregate to ("monthly", "hourly", "daily")
|
|
530
|
+
|
|
531
|
+
Returns:
|
|
532
|
+
A tuple of (grouping_key_name, format_string)
|
|
533
|
+
"""
|
|
534
|
+
time_step_configs = {
|
|
535
|
+
"monthly": ("year_month", "%Y-%m"),
|
|
536
|
+
"hourly": ("year_month_day_hour", "%Y-%m-%d-%H"),
|
|
537
|
+
"daily": ("year_month_day", "%Y-%m-%d"),
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
if aggregate_time_step not in time_step_configs:
|
|
541
|
+
msg = f"Unknown aggregate time step: {aggregate_time_step}"
|
|
542
|
+
raise ValueError(msg)
|
|
543
|
+
|
|
544
|
+
return time_step_configs[aggregate_time_step]
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
def _create_aggregation_expressions(load_curve: pl.DataFrame, column_aggregations: dict[str, str]) -> list[pl.Expr]:
|
|
548
|
+
"""Create aggregation expressions for each column based on the aggregation rules.
|
|
549
|
+
|
|
550
|
+
Args:
|
|
551
|
+
load_curve: The DataFrame to create expressions for
|
|
552
|
+
column_aggregations: Dictionary mapping column names to aggregation functions
|
|
553
|
+
|
|
554
|
+
Returns:
|
|
555
|
+
List of Polars expressions for aggregation
|
|
556
|
+
"""
|
|
557
|
+
agg_exprs = []
|
|
558
|
+
|
|
559
|
+
for col in load_curve.columns:
|
|
560
|
+
if col in ["timestamp", "year_month", "year_month_day_hour", "year_month_day"]:
|
|
561
|
+
continue
|
|
562
|
+
|
|
563
|
+
if col in column_aggregations:
|
|
564
|
+
agg_func = column_aggregations[col]
|
|
565
|
+
if agg_func == "sum":
|
|
566
|
+
agg_exprs.append(pl.col(col).sum().alias(col))
|
|
567
|
+
elif agg_func == "mean":
|
|
568
|
+
agg_exprs.append(pl.col(col).mean().alias(col))
|
|
569
|
+
elif agg_func == "first":
|
|
570
|
+
agg_exprs.append(pl.col(col).first().alias(col))
|
|
571
|
+
else:
|
|
572
|
+
raise UnknownAggregationFunctionError()
|
|
573
|
+
else:
|
|
574
|
+
raise UnknownAggregationFunctionError()
|
|
575
|
+
|
|
576
|
+
# Add timestamp aggregation (take the first timestamp of each group)
|
|
577
|
+
agg_exprs.append(pl.col("timestamp").first().alias("timestamp"))
|
|
578
|
+
|
|
579
|
+
return agg_exprs
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
def _aggregate_load_curve_aggregate(load_curve: pl.DataFrame, aggregate_time_step: str) -> pl.DataFrame:
|
|
583
|
+
"""Aggregate the 15-minute load curve to specified time step based on aggregation rules."""
|
|
584
|
+
# Read the aggregation rules from CSV
|
|
585
|
+
aggregation_rules = pl.read_csv(LOAD_CURVE_COLUMN_AGGREGATION)
|
|
586
|
+
|
|
587
|
+
# Create a dictionary mapping column names to their aggregation functions
|
|
588
|
+
column_aggregations = dict(zip(aggregation_rules["name"], aggregation_rules["Aggregate_function"]))
|
|
589
|
+
|
|
590
|
+
# Ensure timestamp column exists and convert to datetime if needed
|
|
591
|
+
if "timestamp" not in load_curve.columns:
|
|
592
|
+
msg = "DataFrame must contain a 'timestamp' column"
|
|
593
|
+
raise ValueError(msg)
|
|
594
|
+
|
|
595
|
+
# Convert timestamp to datetime if it's not already
|
|
596
|
+
load_curve = load_curve.with_columns(pl.col("timestamp").cast(pl.Datetime))
|
|
597
|
+
|
|
598
|
+
# Get the grouping key configuration
|
|
599
|
+
grouping_key, format_string = _get_time_step_grouping_key(aggregate_time_step)
|
|
600
|
+
|
|
601
|
+
# Create grouping key
|
|
602
|
+
load_curve = load_curve.with_columns(pl.col("timestamp").dt.strftime(format_string).alias(grouping_key))
|
|
603
|
+
|
|
604
|
+
# Create aggregation expressions
|
|
605
|
+
agg_exprs = _create_aggregation_expressions(load_curve, column_aggregations)
|
|
606
|
+
|
|
607
|
+
# Perform the aggregation
|
|
608
|
+
aggregate_data = load_curve.group_by(grouping_key).agg(agg_exprs)
|
|
609
|
+
|
|
610
|
+
# Sort by timestamp and drop the grouping column
|
|
611
|
+
aggregate_data = aggregate_data.sort("timestamp").drop(grouping_key)
|
|
612
|
+
|
|
613
|
+
return aggregate_data
|
|
614
|
+
|
|
615
|
+
|
|
616
|
+
def _download_and_process_aggregate(
|
|
617
|
+
url: str, output_file: Path, progress: Progress, task_id: TaskID, aggregate_time_step: str
|
|
618
|
+
) -> int:
|
|
619
|
+
"""Download aggregate time step load curve to temporary file, process with Polars, and save result."""
|
|
620
|
+
# Get file size first for progress tracking
|
|
621
|
+
response = requests.head(url, timeout=30)
|
|
622
|
+
response.raise_for_status()
|
|
623
|
+
total_size = int(response.headers.get("content-length", 0))
|
|
624
|
+
progress.update(task_id, total=total_size)
|
|
625
|
+
|
|
626
|
+
# Download to temporary file
|
|
627
|
+
with tempfile.NamedTemporaryFile(delete=False, suffix=".parquet") as temp_file:
|
|
628
|
+
temp_path = Path(temp_file.name)
|
|
629
|
+
|
|
630
|
+
try:
|
|
631
|
+
# Create session with retry logic
|
|
632
|
+
session = requests.Session()
|
|
633
|
+
retry_strategy = requests.adapters.HTTPAdapter(max_retries=15)
|
|
634
|
+
session.mount("http://", retry_strategy)
|
|
635
|
+
session.mount("https://", retry_strategy)
|
|
636
|
+
|
|
637
|
+
# Download with streaming to temp file
|
|
638
|
+
response = session.get(url, stream=True, timeout=60)
|
|
639
|
+
response.raise_for_status()
|
|
640
|
+
|
|
641
|
+
downloaded_size = 0
|
|
642
|
+
with open(temp_path, "wb") as file:
|
|
643
|
+
for chunk in response.iter_content(chunk_size=8192):
|
|
644
|
+
if chunk:
|
|
645
|
+
file.write(chunk)
|
|
646
|
+
downloaded_size += len(chunk)
|
|
647
|
+
if total_size > 0:
|
|
648
|
+
progress.update(task_id, completed=downloaded_size)
|
|
649
|
+
|
|
650
|
+
# Process with Polars
|
|
651
|
+
load_curve_15min = pl.read_parquet(temp_path)
|
|
652
|
+
load_curve_aggregate = _aggregate_load_curve_aggregate(load_curve_15min, aggregate_time_step)
|
|
653
|
+
|
|
654
|
+
# Save processed file to final destination
|
|
655
|
+
load_curve_aggregate.write_parquet(output_file)
|
|
656
|
+
|
|
657
|
+
return downloaded_size
|
|
658
|
+
|
|
659
|
+
finally:
|
|
660
|
+
# Clean up temporary file
|
|
661
|
+
if temp_path.exists():
|
|
662
|
+
temp_path.unlink()
|
|
663
|
+
|
|
664
|
+
|
|
500
665
|
def download_bldg_data(
|
|
501
666
|
bldg_id: BuildingID,
|
|
502
667
|
file_type: RequestedFileTypes,
|
|
@@ -563,7 +728,7 @@ def download_bldg_data(
|
|
|
563
728
|
/ bldg_id.get_release_name()
|
|
564
729
|
/ "hpxml"
|
|
565
730
|
/ bldg_id.state
|
|
566
|
-
/ f"
|
|
731
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
567
732
|
/ new_name
|
|
568
733
|
)
|
|
569
734
|
new_path.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -584,7 +749,7 @@ def download_bldg_data(
|
|
|
584
749
|
/ bldg_id.get_release_name()
|
|
585
750
|
/ "schedule"
|
|
586
751
|
/ bldg_id.state
|
|
587
|
-
/ f"
|
|
752
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
588
753
|
/ new_name
|
|
589
754
|
)
|
|
590
755
|
new_path.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -616,8 +781,8 @@ def download_metadata(bldg_id: BuildingID, output_dir: Path) -> Path:
|
|
|
616
781
|
output_dir
|
|
617
782
|
/ bldg_id.get_release_name()
|
|
618
783
|
/ "metadata"
|
|
619
|
-
/ bldg_id.state
|
|
620
|
-
/ f"
|
|
784
|
+
/ f"state={bldg_id.state}"
|
|
785
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
621
786
|
/ "metadata.parquet"
|
|
622
787
|
)
|
|
623
788
|
output_file.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -643,9 +808,9 @@ def download_15min_load_curve(bldg_id: BuildingID, output_dir: Path) -> Path:
|
|
|
643
808
|
output_dir
|
|
644
809
|
/ bldg_id.get_release_name()
|
|
645
810
|
/ "load_curve_15min"
|
|
646
|
-
/ bldg_id.state
|
|
647
|
-
/ f"
|
|
648
|
-
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}
|
|
811
|
+
/ f"state={bldg_id.state}"
|
|
812
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
813
|
+
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}_load_curve_15min.parquet"
|
|
649
814
|
)
|
|
650
815
|
output_file.parent.mkdir(parents=True, exist_ok=True)
|
|
651
816
|
output_file.write_bytes(response.content)
|
|
@@ -675,9 +840,9 @@ def download_15min_load_curve_with_progress(
|
|
|
675
840
|
output_dir
|
|
676
841
|
/ bldg_id.get_release_name()
|
|
677
842
|
/ "load_curve_15min"
|
|
678
|
-
/ bldg_id.state
|
|
679
|
-
/ f"
|
|
680
|
-
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}
|
|
843
|
+
/ f"state={bldg_id.state}"
|
|
844
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
845
|
+
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}_load_curve_15min.parquet"
|
|
681
846
|
)
|
|
682
847
|
output_file.parent.mkdir(parents=True, exist_ok=True)
|
|
683
848
|
|
|
@@ -692,6 +857,66 @@ def download_15min_load_curve_with_progress(
|
|
|
692
857
|
return output_file
|
|
693
858
|
|
|
694
859
|
|
|
860
|
+
def download_aggregate_time_step_load_curve_with_progress(
|
|
861
|
+
bldg_id: BuildingID,
|
|
862
|
+
output_dir: Path,
|
|
863
|
+
progress: Optional[Progress],
|
|
864
|
+
task_id: Optional[TaskID],
|
|
865
|
+
aggregate_time_step: str,
|
|
866
|
+
) -> Path:
|
|
867
|
+
"""Download the aggregate time step load profile timeseries for a given building with progress tracking."""
|
|
868
|
+
|
|
869
|
+
download_url = bldg_id.get_aggregate_load_curve_url()
|
|
870
|
+
if download_url == "":
|
|
871
|
+
message = f"Aggregate load profile timeseries is not available for {bldg_id.get_release_name()}"
|
|
872
|
+
raise NoAggregateLoadCurveError(message)
|
|
873
|
+
|
|
874
|
+
if aggregate_time_step == "monthly":
|
|
875
|
+
load_curve_dir = "load_curve_monthly"
|
|
876
|
+
elif aggregate_time_step == "hourly":
|
|
877
|
+
load_curve_dir = "load_curve_hourly"
|
|
878
|
+
elif aggregate_time_step == "daily":
|
|
879
|
+
load_curve_dir = "load_curve_daily"
|
|
880
|
+
else:
|
|
881
|
+
message = f"Unknown aggregate time step: {aggregate_time_step}"
|
|
882
|
+
raise ValueError(message)
|
|
883
|
+
|
|
884
|
+
output_file = (
|
|
885
|
+
output_dir
|
|
886
|
+
/ bldg_id.get_release_name()
|
|
887
|
+
/ load_curve_dir
|
|
888
|
+
/ f"state={bldg_id.state}"
|
|
889
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
890
|
+
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}_load_curve_{aggregate_time_step}.parquet"
|
|
891
|
+
)
|
|
892
|
+
|
|
893
|
+
output_file.parent.mkdir(parents=True, exist_ok=True)
|
|
894
|
+
|
|
895
|
+
# Download with progress tracking if progress object is provided
|
|
896
|
+
if progress and task_id is not None:
|
|
897
|
+
_download_and_process_aggregate(download_url, output_file, progress, task_id, aggregate_time_step)
|
|
898
|
+
else:
|
|
899
|
+
# For non-progress downloads, still use temp file approach for consistency
|
|
900
|
+
with tempfile.NamedTemporaryFile(delete=False, suffix=".parquet") as temp_file:
|
|
901
|
+
temp_path = Path(temp_file.name)
|
|
902
|
+
try:
|
|
903
|
+
response = requests.get(download_url, timeout=30)
|
|
904
|
+
response.raise_for_status()
|
|
905
|
+
temp_path.write_bytes(response.content)
|
|
906
|
+
|
|
907
|
+
# Process with Polars
|
|
908
|
+
load_curve_15min = pl.read_parquet(temp_path)
|
|
909
|
+
load_curve_aggregate = _aggregate_load_curve_aggregate(load_curve_15min, aggregate_time_step)
|
|
910
|
+
|
|
911
|
+
# Save processed file to final destination
|
|
912
|
+
load_curve_aggregate.write_parquet(output_file)
|
|
913
|
+
finally:
|
|
914
|
+
if temp_path.exists():
|
|
915
|
+
temp_path.unlink()
|
|
916
|
+
|
|
917
|
+
return output_file
|
|
918
|
+
|
|
919
|
+
|
|
695
920
|
def _parse_requested_file_type(file_type: tuple[str, ...]) -> RequestedFileTypes:
|
|
696
921
|
"""Parse the file type string into a RequestedFileTypes object."""
|
|
697
922
|
file_type_obj = RequestedFileTypes()
|
|
@@ -764,8 +989,8 @@ def _download_metadata_with_progress(bldg: BuildingID, output_dir: Path, progres
|
|
|
764
989
|
output_dir
|
|
765
990
|
/ bldg.get_release_name()
|
|
766
991
|
/ "metadata"
|
|
767
|
-
/ bldg.state
|
|
768
|
-
/ f"
|
|
992
|
+
/ f"state={bldg.state}"
|
|
993
|
+
/ f"upgrade={str(int(bldg.upgrade_id)).zfill(2)}"
|
|
769
994
|
/ "metadata.parquet"
|
|
770
995
|
)
|
|
771
996
|
output_file.parent.mkdir(parents=True, exist_ok=True)
|
|
@@ -851,8 +1076,9 @@ def _download_15min_load_curves_parallel(
|
|
|
851
1076
|
output_dir
|
|
852
1077
|
/ bldg_id.get_release_name()
|
|
853
1078
|
/ "load_curve_15min"
|
|
854
|
-
/ bldg_id.state
|
|
855
|
-
/ f"
|
|
1079
|
+
/ f"state={bldg_id.state}"
|
|
1080
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
1081
|
+
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}_load_curve_15min.parquet"
|
|
856
1082
|
)
|
|
857
1083
|
failed_downloads.append(str(output_file))
|
|
858
1084
|
console.print(f"[red]15 min load curve not available for {bldg_id.get_release_name()}[/red]")
|
|
@@ -862,13 +1088,162 @@ def _download_15min_load_curves_parallel(
|
|
|
862
1088
|
output_dir
|
|
863
1089
|
/ bldg_id.get_release_name()
|
|
864
1090
|
/ "load_curve_15min"
|
|
865
|
-
/ bldg_id.state
|
|
866
|
-
/ f"
|
|
1091
|
+
/ f"state={bldg_id.state}"
|
|
1092
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
1093
|
+
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}_load_curve_15min.parquet"
|
|
867
1094
|
)
|
|
868
1095
|
failed_downloads.append(str(output_file))
|
|
869
1096
|
console.print(f"[red]Download failed for 15 min load curve {bldg_id.bldg_id}: {e}[/red]")
|
|
870
1097
|
|
|
871
1098
|
|
|
1099
|
+
def _create_batch_progress_tasks(
|
|
1100
|
+
bldg_ids: list[BuildingID], aggregate_time_step: str, progress: Progress, console: Console
|
|
1101
|
+
) -> dict[int, TaskID]:
|
|
1102
|
+
"""Create progress tasks for batch processing."""
|
|
1103
|
+
batch_size = 100
|
|
1104
|
+
num_batches = (len(bldg_ids) + batch_size - 1) // batch_size
|
|
1105
|
+
console.print(f"[blue]Using batch processing: {len(bldg_ids)} buildings split into {num_batches} batches[/blue]")
|
|
1106
|
+
|
|
1107
|
+
load_curve_tasks = {}
|
|
1108
|
+
for i in range(num_batches):
|
|
1109
|
+
# Calculate how many buildings are in this batch
|
|
1110
|
+
start_idx = i * batch_size
|
|
1111
|
+
end_idx = min(start_idx + batch_size, len(bldg_ids))
|
|
1112
|
+
batch_count = end_idx - start_idx
|
|
1113
|
+
|
|
1114
|
+
console.print(f"[blue]Batch {i + 1}/{num_batches}: {batch_count} buildings[/blue]")
|
|
1115
|
+
|
|
1116
|
+
task_id = progress.add_task(
|
|
1117
|
+
f"[magenta]Batch {i + 1}/{num_batches} ({aggregate_time_step})",
|
|
1118
|
+
total=batch_count, # Set total to the number of buildings in this batch
|
|
1119
|
+
)
|
|
1120
|
+
load_curve_tasks[i] = task_id
|
|
1121
|
+
|
|
1122
|
+
return load_curve_tasks
|
|
1123
|
+
|
|
1124
|
+
|
|
1125
|
+
def _create_individual_progress_tasks(bldg_ids: list[BuildingID], progress: Progress) -> dict[int, TaskID]:
|
|
1126
|
+
"""Create progress tasks for individual building processing."""
|
|
1127
|
+
load_curve_tasks = {}
|
|
1128
|
+
for i, bldg_id in enumerate(bldg_ids):
|
|
1129
|
+
task_id = progress.add_task(
|
|
1130
|
+
f"[magenta]Load curve {bldg_id.bldg_id} (upgrade {bldg_id.upgrade_id})",
|
|
1131
|
+
total=0, # Will be updated when we get the file size
|
|
1132
|
+
)
|
|
1133
|
+
load_curve_tasks[i] = task_id
|
|
1134
|
+
return load_curve_tasks
|
|
1135
|
+
|
|
1136
|
+
|
|
1137
|
+
def _download_aggregate_with_batch_progress(
|
|
1138
|
+
bldg_id: BuildingID, output_dir: Path, task_id: TaskID, aggregate_time_step: str, progress: Progress
|
|
1139
|
+
) -> Path:
|
|
1140
|
+
"""Download with batch progress tracking."""
|
|
1141
|
+
# Download the file without individual progress tracking
|
|
1142
|
+
result = download_aggregate_time_step_load_curve_with_progress(bldg_id, output_dir, None, None, aggregate_time_step)
|
|
1143
|
+
# Update batch progress by 1
|
|
1144
|
+
progress.update(task_id, advance=1)
|
|
1145
|
+
return result
|
|
1146
|
+
|
|
1147
|
+
|
|
1148
|
+
def _process_download_future(
|
|
1149
|
+
future: concurrent.futures.Future,
|
|
1150
|
+
bldg_id: BuildingID,
|
|
1151
|
+
output_dir: Path,
|
|
1152
|
+
aggregate_time_step: str,
|
|
1153
|
+
downloaded_paths: list[Path],
|
|
1154
|
+
failed_downloads: list[str],
|
|
1155
|
+
console: Console,
|
|
1156
|
+
) -> None:
|
|
1157
|
+
"""Process a completed download future."""
|
|
1158
|
+
try:
|
|
1159
|
+
output_file = future.result()
|
|
1160
|
+
downloaded_paths.append(output_file)
|
|
1161
|
+
except NoAggregateLoadCurveError:
|
|
1162
|
+
output_file = (
|
|
1163
|
+
output_dir
|
|
1164
|
+
/ bldg_id.get_release_name()
|
|
1165
|
+
/ "load_curve_monthly"
|
|
1166
|
+
/ f"state={bldg_id.state}"
|
|
1167
|
+
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}_load_curve_monthly.parquet"
|
|
1168
|
+
)
|
|
1169
|
+
failed_downloads.append(str(output_file))
|
|
1170
|
+
console.print(f"[red]Monthly load curve not available for {bldg_id.get_release_name()}[/red]")
|
|
1171
|
+
raise
|
|
1172
|
+
except Exception as e:
|
|
1173
|
+
output_file = (
|
|
1174
|
+
output_dir
|
|
1175
|
+
/ bldg_id.get_release_name()
|
|
1176
|
+
/ "load_curve_monthly"
|
|
1177
|
+
/ f"state={bldg_id.state}"
|
|
1178
|
+
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}_load_curve_monthly.parquet"
|
|
1179
|
+
)
|
|
1180
|
+
failed_downloads.append(str(output_file))
|
|
1181
|
+
console.print(f"[red]Download failed for monthly load curve {bldg_id.bldg_id}: {e}[/red]")
|
|
1182
|
+
|
|
1183
|
+
|
|
1184
|
+
def _download_aggregate_load_curves_parallel(
|
|
1185
|
+
bldg_ids: list[BuildingID],
|
|
1186
|
+
output_dir: Path,
|
|
1187
|
+
aggregate_time_step: str,
|
|
1188
|
+
max_workers: int,
|
|
1189
|
+
progress: Progress,
|
|
1190
|
+
downloaded_paths: list[Path],
|
|
1191
|
+
failed_downloads: list[str],
|
|
1192
|
+
console: Console,
|
|
1193
|
+
) -> None:
|
|
1194
|
+
"""Download monthly load curves in parallel with progress tracking."""
|
|
1195
|
+
|
|
1196
|
+
# Create progress tasks based on dataset size
|
|
1197
|
+
if len(bldg_ids) > 500:
|
|
1198
|
+
load_curve_tasks = _create_batch_progress_tasks(bldg_ids, aggregate_time_step, progress, console)
|
|
1199
|
+
else:
|
|
1200
|
+
load_curve_tasks = _create_individual_progress_tasks(bldg_ids, progress)
|
|
1201
|
+
|
|
1202
|
+
# Create download functions
|
|
1203
|
+
def download_aggregate_with_task_id(
|
|
1204
|
+
bldg_id: BuildingID, output_dir: Path, task_id: TaskID, aggregate_time_step: str
|
|
1205
|
+
) -> Path:
|
|
1206
|
+
return download_aggregate_time_step_load_curve_with_progress(
|
|
1207
|
+
bldg_id, output_dir, progress, task_id, aggregate_time_step
|
|
1208
|
+
)
|
|
1209
|
+
|
|
1210
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
|
|
1211
|
+
if len(bldg_ids) > 500:
|
|
1212
|
+
# Process in batches for large datasets
|
|
1213
|
+
batch_size = 100
|
|
1214
|
+
future_to_bldg = {}
|
|
1215
|
+
|
|
1216
|
+
for batch_idx in range(0, len(bldg_ids), batch_size):
|
|
1217
|
+
batch = bldg_ids[batch_idx : batch_idx + batch_size]
|
|
1218
|
+
task_id = load_curve_tasks[batch_idx // batch_size]
|
|
1219
|
+
|
|
1220
|
+
for bldg_id in batch:
|
|
1221
|
+
future = executor.submit(
|
|
1222
|
+
_download_aggregate_with_batch_progress,
|
|
1223
|
+
bldg_id,
|
|
1224
|
+
output_dir,
|
|
1225
|
+
task_id,
|
|
1226
|
+
aggregate_time_step,
|
|
1227
|
+
progress,
|
|
1228
|
+
)
|
|
1229
|
+
future_to_bldg[future] = bldg_id
|
|
1230
|
+
else:
|
|
1231
|
+
# Original behavior for smaller datasets
|
|
1232
|
+
future_to_bldg = {
|
|
1233
|
+
executor.submit(
|
|
1234
|
+
download_aggregate_with_task_id, bldg_id, output_dir, load_curve_tasks[i], aggregate_time_step
|
|
1235
|
+
): bldg_id
|
|
1236
|
+
for i, bldg_id in enumerate(bldg_ids)
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
# Process completed futures
|
|
1240
|
+
for future in concurrent.futures.as_completed(future_to_bldg):
|
|
1241
|
+
bldg_id = future_to_bldg[future]
|
|
1242
|
+
_process_download_future(
|
|
1243
|
+
future, bldg_id, output_dir, aggregate_time_step, downloaded_paths, failed_downloads, console
|
|
1244
|
+
)
|
|
1245
|
+
|
|
1246
|
+
|
|
872
1247
|
def _download_metadata_single(
|
|
873
1248
|
bldg_ids: list[BuildingID],
|
|
874
1249
|
output_dir: Path,
|
|
@@ -912,8 +1287,8 @@ def download_annual_load_curve_with_progress(
|
|
|
912
1287
|
output_dir
|
|
913
1288
|
/ bldg_id.get_release_name()
|
|
914
1289
|
/ "load_curve_annual"
|
|
915
|
-
/ bldg_id.state
|
|
916
|
-
/ f"
|
|
1290
|
+
/ f"state={bldg_id.state}"
|
|
1291
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
917
1292
|
/ output_filename
|
|
918
1293
|
)
|
|
919
1294
|
|
|
@@ -974,8 +1349,9 @@ def _download_annual_load_curves_parallel(
|
|
|
974
1349
|
output_dir
|
|
975
1350
|
/ bldg_id.get_release_name()
|
|
976
1351
|
/ "load_curve_annual"
|
|
977
|
-
/ bldg_id.state
|
|
978
|
-
/ f"
|
|
1352
|
+
/ f"state={bldg_id.state}"
|
|
1353
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
1354
|
+
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}_load_curve_annual.parquet"
|
|
979
1355
|
)
|
|
980
1356
|
failed_downloads.append(str(output_file))
|
|
981
1357
|
console.print(f"[red]Annual load curve not available for {bldg_id.get_release_name()}[/red]")
|
|
@@ -985,8 +1361,9 @@ def _download_annual_load_curves_parallel(
|
|
|
985
1361
|
output_dir
|
|
986
1362
|
/ bldg_id.get_release_name()
|
|
987
1363
|
/ "load_curve_annual"
|
|
988
|
-
/ bldg_id.state
|
|
989
|
-
/ f"
|
|
1364
|
+
/ f"state={bldg_id.state}"
|
|
1365
|
+
/ f"upgrade={str(int(bldg_id.upgrade_id)).zfill(2)}"
|
|
1366
|
+
/ f"bldg{str(bldg_id.bldg_id).zfill(7)}_load_curve_annual.parquet"
|
|
990
1367
|
)
|
|
991
1368
|
failed_downloads.append(str(output_file))
|
|
992
1369
|
console.print(f"[red]Download failed for annual load curve {bldg_id.bldg_id}: {e}[/red]")
|
|
@@ -1022,11 +1399,13 @@ def fetch_bldg_data(
|
|
|
1022
1399
|
failed_downloads: list[str] = []
|
|
1023
1400
|
|
|
1024
1401
|
# Calculate total files to download
|
|
1025
|
-
total_files =
|
|
1402
|
+
total_files = 0
|
|
1026
1403
|
if file_type_obj.metadata:
|
|
1027
1404
|
total_files += 1 # Add metadata file
|
|
1028
1405
|
if file_type_obj.load_curve_15min:
|
|
1029
1406
|
total_files += len(bldg_ids) # Add 15-minute load curve files
|
|
1407
|
+
if file_type_obj.load_curve_monthly:
|
|
1408
|
+
total_files += len(bldg_ids) # Add 15-minute load curve files
|
|
1030
1409
|
if file_type_obj.load_curve_annual:
|
|
1031
1410
|
total_files += len(bldg_ids) # Add annual load curve files
|
|
1032
1411
|
|
|
@@ -1062,6 +1441,19 @@ def fetch_bldg_data(
|
|
|
1062
1441
|
bldg_ids, output_dir, max_workers, progress, downloaded_paths, failed_downloads, console
|
|
1063
1442
|
)
|
|
1064
1443
|
|
|
1444
|
+
if file_type_obj.load_curve_monthly:
|
|
1445
|
+
aggregate_time_step = "monthly"
|
|
1446
|
+
_download_aggregate_load_curves_parallel(
|
|
1447
|
+
bldg_ids,
|
|
1448
|
+
output_dir,
|
|
1449
|
+
aggregate_time_step,
|
|
1450
|
+
max_workers,
|
|
1451
|
+
progress,
|
|
1452
|
+
downloaded_paths,
|
|
1453
|
+
failed_downloads,
|
|
1454
|
+
console,
|
|
1455
|
+
)
|
|
1456
|
+
|
|
1065
1457
|
# Get annual load curve if requested.
|
|
1066
1458
|
if file_type_obj.load_curve_annual:
|
|
1067
1459
|
_download_annual_load_curves_parallel(
|
|
@@ -1074,25 +1466,4 @@ def fetch_bldg_data(
|
|
|
1074
1466
|
|
|
1075
1467
|
|
|
1076
1468
|
if __name__ == "__main__": # pragma: no cover
|
|
1077
|
-
|
|
1078
|
-
BuildingID(
|
|
1079
|
-
bldg_id=5634,
|
|
1080
|
-
release_year="2024",
|
|
1081
|
-
res_com="comstock",
|
|
1082
|
-
weather="amy2018",
|
|
1083
|
-
upgrade_id="1",
|
|
1084
|
-
release_number="2",
|
|
1085
|
-
state="AL",
|
|
1086
|
-
),
|
|
1087
|
-
BuildingID(
|
|
1088
|
-
bldg_id=78270,
|
|
1089
|
-
release_year="2024",
|
|
1090
|
-
res_com="comstock",
|
|
1091
|
-
weather="amy2018",
|
|
1092
|
-
upgrade_id="1",
|
|
1093
|
-
release_number="2",
|
|
1094
|
-
state="DE",
|
|
1095
|
-
),
|
|
1096
|
-
]
|
|
1097
|
-
for bldg_id in bldg_ids:
|
|
1098
|
-
print(bldg_id._get_county_name())
|
|
1469
|
+
print(fetch_bldg_ids("comstock", "2021", "tmy3", "1", "MA", "0")[:3])
|
buildstock_fetch/main_cli.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import pprint
|
|
3
|
-
import random
|
|
4
3
|
from collections.abc import Mapping
|
|
5
4
|
from importlib.resources import files
|
|
6
5
|
from pathlib import Path
|
|
@@ -380,6 +379,7 @@ def _run_interactive_mode() -> dict[str, Union[str, list[str]]]:
|
|
|
380
379
|
validate=_validate_output_directory,
|
|
381
380
|
).ask()
|
|
382
381
|
)
|
|
382
|
+
|
|
383
383
|
output_directory_path = Path(output_directory_str)
|
|
384
384
|
output_directory_path.mkdir(parents=True, exist_ok=True)
|
|
385
385
|
return {
|
|
@@ -433,7 +433,7 @@ def _print_data_processing_info(inputs: Mapping[str, Union[str, list[str]]]) ->
|
|
|
433
433
|
|
|
434
434
|
def _check_unavailable_file_types(inputs: Mapping[str, Union[str, list[str]]]) -> None:
|
|
435
435
|
"""Check and print warning for unavailable file types."""
|
|
436
|
-
unavailable_file_types = ["load_curve_hourly", "load_curve_daily"
|
|
436
|
+
unavailable_file_types = ["load_curve_hourly", "load_curve_daily"]
|
|
437
437
|
selected_file_types = inputs["file_type"].split() if isinstance(inputs["file_type"], str) else inputs["file_type"]
|
|
438
438
|
selected_unavailable = [ft for ft in selected_file_types if ft in unavailable_file_types]
|
|
439
439
|
if selected_unavailable:
|
|
@@ -512,8 +512,8 @@ def _get_user_download_choice(bldg_ids: list) -> list:
|
|
|
512
512
|
console.print(f"[yellow]No files will be downloaded for State {state}, Upgrade {upgrade_id}.[/yellow]")
|
|
513
513
|
continue
|
|
514
514
|
|
|
515
|
-
#
|
|
516
|
-
selected_for_state_upgrade =
|
|
515
|
+
# Select the first N building IDs for this state-upgrade_id pair
|
|
516
|
+
selected_for_state_upgrade = bldg_list[:sample_size]
|
|
517
517
|
selected_bldg_ids.extend(selected_for_state_upgrade)
|
|
518
518
|
console.print(f"[green]Selected {sample_size} buildings for State {state}, Upgrade {upgrade_id}.[/green]")
|
|
519
519
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: buildstock-fetch
|
|
3
|
-
Version: 1.0
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: This library simplifies downloading building characteristics and load curve data from NREL's ResStock and ComStock projects.
|
|
5
5
|
Author-email: Switchbox <hello@switch.box>
|
|
6
6
|
Project-URL: Homepage, https://switchbox-data.github.io/buildstock-fetch/
|
|
@@ -44,6 +44,7 @@ Requires-Dist: botocore>=1.33.0; extra == "dev-utils"
|
|
|
44
44
|
Requires-Dist: pyarrow>=14.0.1; extra == "dev-utils"
|
|
45
45
|
Requires-Dist: numpy>=1.26.4; extra == "dev-utils"
|
|
46
46
|
Requires-Dist: scikit-learn>=1.6.1; extra == "dev-utils"
|
|
47
|
+
Requires-Dist: xmltodict>=0.14.2; extra == "dev-utils"
|
|
47
48
|
Provides-Extra: dev
|
|
48
49
|
Requires-Dist: buildstock-fetch[dev-utils,docs,lint,test]; extra == "dev"
|
|
49
50
|
Requires-Dist: tox-uv>=1.11.3; extra == "dev"
|
|
@@ -59,7 +60,8 @@ Dynamic: license-file
|
|
|
59
60
|
This library simplifies downloading building characteristics and load curve data from NREL's ResStock and ComStock projects.
|
|
60
61
|
|
|
61
62
|
- **Github repository**: <https://github.com/switchbox-data/buildstock-fetch/>
|
|
62
|
-
- **Documentation
|
|
63
|
+
- **Documentation**: <https://switchbox-data.github.io/buildstock-fetch/>
|
|
64
|
+
- **PyPI page***: <https://pypi.org/project/buildstock-fetch/>
|
|
63
65
|
|
|
64
66
|
## Installing the library
|
|
65
67
|
|