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.

Files changed (213) hide show
  1. buildstock_fetch/data/weather_station_map/weather_station_map.parquet +0 -0
  2. buildstock_fetch/main.py +416 -45
  3. buildstock_fetch/main_cli.py +4 -4
  4. {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/METADATA +4 -2
  5. {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/RECORD +213 -212
  6. /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
  7. /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
  8. /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
  9. /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
  10. /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
  11. /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
  12. /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
  13. /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
  14. /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
  15. /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
  16. /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
  17. /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
  18. /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
  19. /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
  20. /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
  21. /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
  22. /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
  23. /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
  24. /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
  25. /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
  26. /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
  27. /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
  28. /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
  29. /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
  30. /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
  31. /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
  32. /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
  33. /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
  34. /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
  35. /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
  36. /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
  37. /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
  38. /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
  39. /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
  40. /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
  41. /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
  42. /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
  43. /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
  44. /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
  45. /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
  46. /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
  47. /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
  48. /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
  49. /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
  50. /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
  51. /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
  52. /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
  53. /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
  54. /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
  55. /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
  56. /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
  57. /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
  58. /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
  59. /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
  60. /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
  61. /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
  62. /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
  63. /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
  64. /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
  65. /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
  66. /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
  67. /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
  68. /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
  69. /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
  70. /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
  71. /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
  72. /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
  73. /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
  74. /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
  75. /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
  76. /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
  77. /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
  78. /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
  79. /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
  80. /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
  81. /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
  82. /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
  83. /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
  84. /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
  85. /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
  86. /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
  87. /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
  88. /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
  89. /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
  90. /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
  91. /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
  92. /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
  93. /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
  94. /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
  95. /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
  96. /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
  97. /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
  98. /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
  99. /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
  100. /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
  101. /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
  102. /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
  103. /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
  104. /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
  105. /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
  106. /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
  107. /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
  108. /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
  109. /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
  110. /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
  111. /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
  112. /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
  113. /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
  114. /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
  115. /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
  116. /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
  117. /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
  118. /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
  119. /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
  120. /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
  121. /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
  122. /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
  123. /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
  124. /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
  125. /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
  126. /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
  127. /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
  128. /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
  129. /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
  130. /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
  131. /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
  132. /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
  133. /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
  134. /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
  135. /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
  136. /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
  137. /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
  138. /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
  139. /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
  140. /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
  141. /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
  142. /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
  143. /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
  144. /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
  145. /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
  146. /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
  147. /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
  148. /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
  149. /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
  150. /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
  151. /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
  152. /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
  153. /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
  154. /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
  155. /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
  156. /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
  157. /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
  158. /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
  159. /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
  160. /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
  161. /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
  162. /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
  163. /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
  164. /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
  165. /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
  166. /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
  167. /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
  168. /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
  169. /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
  170. /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
  171. /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
  172. /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
  173. /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
  174. /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
  175. /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
  176. /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
  177. /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
  178. /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
  179. /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
  180. /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
  181. /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
  182. /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
  183. /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
  184. /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
  185. /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
  186. /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
  187. /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
  188. /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
  189. /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
  190. /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
  191. /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
  192. /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
  193. /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
  194. /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
  195. /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
  196. /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
  197. /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
  198. /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
  199. /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
  200. /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
  201. /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
  202. /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
  203. /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
  204. /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
  205. /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
  206. /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
  207. /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
  208. /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
  209. /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
  210. {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/WHEEL +0 -0
  211. {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/entry_points.txt +0 -0
  212. {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/licenses/LICENSE +0 -0
  213. {buildstock_fetch-1.0.4.dist-info → buildstock_fetch-1.1.0.dist-info}/top_level.txt +0 -0
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"up{str(int(bldg_id.upgrade_id)).zfill(2)}"
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"up{str(int(bldg_id.upgrade_id)).zfill(2)}"
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"up{str(int(bldg_id.upgrade_id)).zfill(2)}"
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"up{str(int(bldg_id.upgrade_id)).zfill(2)}"
648
- / f"bldg{str(bldg_id.bldg_id).zfill(7)}-up{str(int(bldg_id.upgrade_id)).zfill(2)}_load_curve_15min.parquet"
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"up{str(int(bldg_id.upgrade_id)).zfill(2)}"
680
- / f"bldg{str(bldg_id.bldg_id).zfill(7)}-up{str(int(bldg_id.upgrade_id)).zfill(2)}_load_curve_15min.parquet"
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"up{str(int(bldg.upgrade_id)).zfill(2)}"
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"bldg{str(bldg_id.bldg_id).zfill(7)}-up{str(int(bldg_id.upgrade_id)).zfill(2)}_load_curve_15min.parquet"
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"bldg{str(bldg_id.bldg_id).zfill(7)}-up{str(int(bldg_id.upgrade_id)).zfill(2)}_load_curve_15min.parquet"
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"up{str(int(bldg_id.upgrade_id)).zfill(2)}"
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"bldg{str(bldg_id.bldg_id).zfill(7)}-up{str(int(bldg_id.upgrade_id)).zfill(2)}_load_curve_annual.parquet"
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"bldg{str(bldg_id.bldg_id).zfill(7)}-up{str(int(bldg_id.upgrade_id)).zfill(2)}_load_curve_annual.parquet"
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 = len(bldg_ids)
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
- bldg_ids = [
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])
@@ -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", "load_curve_monthly"]
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
- # Randomly select the specified number of building IDs for this state-upgrade_id pair
516
- selected_for_state_upgrade = random.sample(bldg_list, sample_size)
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.4
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** <https://switchbox-data.github.io/buildstock-fetch/>
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