honeybee-energy 1.116.13__tar.gz → 1.116.15__tar.gz

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 honeybee-energy might be problematic. Click here for more details.

Files changed (175) hide show
  1. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/PKG-INFO +2 -2
  2. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/translate.py +192 -204
  3. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/construction/shade.py +1 -1
  4. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy.egg-info/PKG-INFO +2 -2
  5. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy.egg-info/requires.txt +1 -1
  6. honeybee_energy-1.116.15/openstudio-requirements.txt +1 -0
  7. honeybee_energy-1.116.13/openstudio-requirements.txt +0 -1
  8. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/CODE_OF_CONDUCT.md +0 -0
  9. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/CONTRIBUTING.md +0 -0
  10. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/LICENSE +0 -0
  11. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/MANIFEST.in +0 -0
  12. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/README.md +0 -0
  13. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/dev-requirements.txt +0 -0
  14. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/__init__.py +0 -0
  15. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/__main__.py +0 -0
  16. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/_extend_honeybee.py +0 -0
  17. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/altnumber.py +0 -0
  18. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/__init__.py +0 -0
  19. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/create.py +0 -0
  20. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/data/__init__.py +0 -0
  21. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/data/constructions.csv +0 -0
  22. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/data/fen_ratios.csv +0 -0
  23. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/data/lpd_building.csv +0 -0
  24. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/data/pci_2016.csv +0 -0
  25. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/data/pci_2019.csv +0 -0
  26. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/data/pci_2022.csv +0 -0
  27. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/data/shw.csv +0 -0
  28. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/pci.py +0 -0
  29. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/baseline/result.py +0 -0
  30. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/boundarycondition.py +0 -0
  31. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/__init__.py +0 -0
  32. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/baseline.py +0 -0
  33. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/edit.py +0 -0
  34. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/lib.py +0 -0
  35. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/result.py +0 -0
  36. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/setconfig.py +0 -0
  37. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/settings.py +0 -0
  38. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/simulate.py +0 -0
  39. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/cli/validate.py +0 -0
  40. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/config.json +0 -0
  41. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/config.py +0 -0
  42. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/construction/__init__.py +0 -0
  43. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/construction/_base.py +0 -0
  44. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/construction/air.py +0 -0
  45. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/construction/dictutil.py +0 -0
  46. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/construction/dynamic.py +0 -0
  47. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/construction/opaque.py +0 -0
  48. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/construction/window.py +0 -0
  49. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/construction/windowshade.py +0 -0
  50. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/constructionset.py +0 -0
  51. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/dictutil.py +0 -0
  52. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/generator/__init__.py +0 -0
  53. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/generator/loadcenter.py +0 -0
  54. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/generator/pv.py +0 -0
  55. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/__init__.py +0 -0
  56. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/_base.py +0 -0
  57. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/_template.py +0 -0
  58. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/allair/__init__.py +0 -0
  59. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/allair/_base.py +0 -0
  60. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/allair/furnace.py +0 -0
  61. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/allair/psz.py +0 -0
  62. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/allair/ptac.py +0 -0
  63. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/allair/pvav.py +0 -0
  64. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/allair/vav.py +0 -0
  65. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/detailed.py +0 -0
  66. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/doas/__init__.py +0 -0
  67. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/doas/_base.py +0 -0
  68. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/doas/fcu.py +0 -0
  69. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/doas/radiant.py +0 -0
  70. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/doas/vrf.py +0 -0
  71. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/doas/wshp.py +0 -0
  72. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/__init__.py +0 -0
  73. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/_base.py +0 -0
  74. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/baseboard.py +0 -0
  75. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/evapcool.py +0 -0
  76. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/fcu.py +0 -0
  77. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/gasunit.py +0 -0
  78. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/radiant.py +0 -0
  79. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/residential.py +0 -0
  80. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/vrf.py +0 -0
  81. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/windowac.py +0 -0
  82. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/heatcool/wshp.py +0 -0
  83. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/hvac/idealair.py +0 -0
  84. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/internalmass.py +0 -0
  85. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/__init__.py +0 -0
  86. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/_loadconstructions.py +0 -0
  87. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/_loadconstructionsets.py +0 -0
  88. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/_loadmaterials.py +0 -0
  89. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/_loadprogramtypes.py +0 -0
  90. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/_loadschedules.py +0 -0
  91. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/_loadtypelimits.py +0 -0
  92. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/constructions.py +0 -0
  93. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/constructionsets.py +0 -0
  94. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/materials.py +0 -0
  95. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/programtypes.py +0 -0
  96. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/schedules.py +0 -0
  97. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/lib/scheduletypelimits.py +0 -0
  98. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/__init__.py +0 -0
  99. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/_base.py +0 -0
  100. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/daylight.py +0 -0
  101. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/dictutil.py +0 -0
  102. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/equipment.py +0 -0
  103. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/hotwater.py +0 -0
  104. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/infiltration.py +0 -0
  105. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/lighting.py +0 -0
  106. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/people.py +0 -0
  107. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/process.py +0 -0
  108. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/setpoint.py +0 -0
  109. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/load/ventilation.py +0 -0
  110. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/material/__init__.py +0 -0
  111. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/material/_base.py +0 -0
  112. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/material/dictutil.py +0 -0
  113. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/material/frame.py +0 -0
  114. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/material/gas.py +0 -0
  115. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/material/glazing.py +0 -0
  116. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/material/opaque.py +0 -0
  117. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/material/shade.py +0 -0
  118. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/measure.py +0 -0
  119. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/programtype.py +0 -0
  120. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/properties/__init__.py +0 -0
  121. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/properties/aperture.py +0 -0
  122. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/properties/door.py +0 -0
  123. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/properties/extension.py +0 -0
  124. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/properties/face.py +0 -0
  125. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/properties/model.py +0 -0
  126. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/properties/room.py +0 -0
  127. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/properties/shade.py +0 -0
  128. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/properties/shademesh.py +0 -0
  129. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/reader.py +0 -0
  130. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/__init__.py +0 -0
  131. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/colorobj.py +0 -0
  132. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/emissions.py +0 -0
  133. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/err.py +0 -0
  134. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/eui.py +0 -0
  135. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/generation.py +0 -0
  136. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/loadbalance.py +0 -0
  137. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/match.py +0 -0
  138. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/osw.py +0 -0
  139. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/rdd.py +0 -0
  140. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/result/zsz.py +0 -0
  141. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/run.py +0 -0
  142. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/schedule/__init__.py +0 -0
  143. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/schedule/day.py +0 -0
  144. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/schedule/dictutil.py +0 -0
  145. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/schedule/fixedinterval.py +0 -0
  146. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/schedule/rule.py +0 -0
  147. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/schedule/ruleset.py +0 -0
  148. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/schedule/typelimit.py +0 -0
  149. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/shw.py +0 -0
  150. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/simulation/__init__.py +0 -0
  151. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/simulation/control.py +0 -0
  152. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/simulation/daylightsaving.py +0 -0
  153. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/simulation/dictutil.py +0 -0
  154. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/simulation/output.py +0 -0
  155. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/simulation/parameter.py +0 -0
  156. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/simulation/runperiod.py +0 -0
  157. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/simulation/shadowcalculation.py +0 -0
  158. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/simulation/sizing.py +0 -0
  159. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/ventcool/__init__.py +0 -0
  160. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/ventcool/_crack_data.py +0 -0
  161. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/ventcool/afn.py +0 -0
  162. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/ventcool/control.py +0 -0
  163. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/ventcool/crack.py +0 -0
  164. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/ventcool/fan.py +0 -0
  165. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/ventcool/opening.py +0 -0
  166. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/ventcool/simulation.py +0 -0
  167. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy/writer.py +0 -0
  168. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy.egg-info/SOURCES.txt +0 -0
  169. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy.egg-info/dependency_links.txt +0 -0
  170. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy.egg-info/entry_points.txt +0 -0
  171. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/honeybee_energy.egg-info/top_level.txt +0 -0
  172. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/requirements.txt +0 -0
  173. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/setup.cfg +0 -0
  174. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/setup.py +0 -0
  175. {honeybee_energy-1.116.13 → honeybee_energy-1.116.15}/standards-requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: honeybee-energy
3
- Version: 1.116.13
3
+ Version: 1.116.15
4
4
  Summary: Energy simulation library for honeybee.
5
5
  Home-page: https://github.com/ladybug-tools/honeybee-energy
6
6
  Author: Ladybug Tools
@@ -19,7 +19,7 @@ Requires-Dist: honeybee-standards==2.0.7
19
19
  Provides-Extra: standards
20
20
  Requires-Dist: honeybee-energy-standards==2.3.0; extra == "standards"
21
21
  Provides-Extra: openstudio
22
- Requires-Dist: honeybee-openstudio==0.3.2; extra == "openstudio"
22
+ Requires-Dist: honeybee-openstudio==0.3.3; extra == "openstudio"
23
23
 
24
24
  ![Honeybee](http://www.ladybug.tools/assets/img/honeybee.png)
25
25
 
@@ -4,7 +4,6 @@ import sys
4
4
  import os
5
5
  import logging
6
6
  import json
7
- import re
8
7
  import tempfile
9
8
 
10
9
  from ladybug.commandutil import process_content_to_output
@@ -22,9 +21,7 @@ from honeybee_energy.construction.opaque import OpaqueConstruction
22
21
  from honeybee_energy.construction.window import WindowConstruction
23
22
  from honeybee_energy.schedule.dictutil import dict_to_schedule
24
23
  from honeybee_energy.schedule.ruleset import ScheduleRuleset
25
- from honeybee_energy.properties.model import ModelEnergyProperties
26
- from honeybee_energy.run import to_openstudio_sim_folder, run_osw, \
27
- from_gbxml_osw, from_osm_osw, from_idf_osw, \
24
+ from honeybee_energy.run import to_openstudio_sim_folder, run_osw, from_osm_osw, \
28
25
  _parse_os_cli_failure, HB_OS_MSG
29
26
  from honeybee_energy.writer import energyplus_idf_version, _preprocess_model_for_trace
30
27
  from honeybee_energy.config import folders
@@ -77,7 +74,7 @@ def translate():
77
74
  'generated files (osw, osm, idf) if successfully'
78
75
  ' created. By default the list will be printed out to stdout',
79
76
  type=click.File('w'), default='-', show_default=True)
80
- def simulate_model(
77
+ def model_to_sim_folder(
81
78
  model_file, epw_file, sim_par_json, measures, additional_string, additional_idf,
82
79
  folder, log_file
83
80
  ):
@@ -554,8 +551,8 @@ def model_to_idf(
554
551
  'types will be left as they are. Choose from: UndergroundSlab, '
555
552
  'SlabOnGrade, RaisedFloor.', type=str, default='', show_default=True)
556
553
  @click.option('--output-file', '-f', help='Optional gbXML file to output the string '
557
- 'of the translation. By default it printed out to stdout', default='-',
558
- type=click.Path(file_okay=True, dir_okay=False, resolve_path=True))
554
+ 'of the translation. By default it printed out to stdout',
555
+ type=click.File('w'), default='-', show_default=True)
559
556
  def model_to_gbxml_cli(
560
557
  model_file, osw_folder, default_subfaces, triangulate_non_planar, minimal,
561
558
  interior_face_type, ground_face_type, output_file):
@@ -659,8 +656,8 @@ def model_to_gbxml(
659
656
  default=None,
660
657
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
661
658
  @click.option('--output-file', '-f', help='Optional gbXML file to output the string '
662
- 'of the translation. By default it printed out to stdout.', default='-',
663
- type=click.Path(file_okay=True, dir_okay=False, resolve_path=True))
659
+ 'of the translation. By default it printed out to stdout.',
660
+ type=click.File('w'), default='-', show_default=True)
664
661
  def model_to_trace_gbxml_cli(
665
662
  model_file, single_window, rect_sub_distance, frame_merge_distance,
666
663
  osw_folder, output_file):
@@ -801,14 +798,17 @@ def model_to_sdd(model_file, osw_folder=None, output_file=None):
801
798
  @translate.command('model-from-osm')
802
799
  @click.argument('osm-file', type=click.Path(
803
800
  exists=True, file_okay=True, dir_okay=False, resolve_path=True))
804
- @click.option('--osw-folder', '-osw', help='Folder on this computer, into which the '
805
- 'working files will be written. If None, it will be written into the a '
806
- 'temp folder in the default simulation folder.', default=None,
801
+ @click.option('--keep-properties/--reset-properties', ' /-r', help='Flag to note '
802
+ 'whether all energy properties should be reset to defaults upon import, '
803
+ 'meaning that only the geometry and boundary conditions are imported '
804
+ 'from the file.', default=True, show_default=True)
805
+ @click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
806
+ default=None,
807
807
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
808
808
  @click.option('--output-file', '-f', help='Optional HBJSON file to output the string '
809
- 'of the translation. By default it printed out to stdout.', default='-',
810
- type=click.Path(file_okay=True, dir_okay=False, resolve_path=True))
811
- def model_from_osm_cli(osm_file, osw_folder, output_file):
809
+ 'of the translation. By default it printed out to stdout.',
810
+ type=click.File('w'), default='-', show_default=True)
811
+ def model_from_osm_cli(osm_file, keep_properties, osw_folder, output_file):
812
812
  """Translate a OpenStudio Model (OSM) to a Honeybee Model (HBJSON).
813
813
 
814
814
  \b
@@ -816,7 +816,8 @@ def model_from_osm_cli(osm_file, osw_folder, output_file):
816
816
  osm_file: Path to a OpenStudio Model (OSM) file.
817
817
  """
818
818
  try:
819
- model_from_osm(osm_file, osw_folder, output_file)
819
+ reset_properties = not keep_properties
820
+ model_from_osm(osm_file, reset_properties, osw_folder, output_file)
820
821
  except Exception as e:
821
822
  _logger.exception('Model translation failed.\n{}'.format(e))
822
823
  sys.exit(1)
@@ -824,50 +825,46 @@ def model_from_osm_cli(osm_file, osw_folder, output_file):
824
825
  sys.exit(0)
825
826
 
826
827
 
827
- def model_from_osm(osm_file, osw_folder=None, output_file=None):
828
+ def model_from_osm(osm_file, reset_properties=False, osw_folder=None, output_file=None,
829
+ keep_properties=True):
828
830
  """Translate a OpenStudio Model (OSM) to a Honeybee Model (HBJSON).
829
831
 
830
832
  Args:
831
833
  osm_file: Path to a OpenStudio Model (OSM) file.
832
- osw_folder: Folder on this computer, into which the working files will
833
- be written. If None, it will be written into the a temp folder in
834
- the default simulation folder. (Default: None).
834
+ reset_properties: Boolean to note whether all energy properties should be
835
+ reset to defaults upon import, meaning that only the geometry and boundary
836
+ conditions are imported from the Openstudio Model. (Default: False).
837
+ osw_folder: Deprecated input that is no longer used.
835
838
  output_file: Optional HBJSON file to output the string of the translation.
836
839
  If None, it will be returned from this method. (Default: None).
837
840
  """
838
- # set the default folder if it's not specified
839
- out_path = None
840
- if output_file is None or output_file.endswith('-'):
841
- out_directory = os.path.join(
842
- hb_folders.default_simulation_folder, 'temp_translate')
843
- f_name = os.path.basename(osm_file).lower().replace('.osm', '.hbjson')
844
- out_path = os.path.join(out_directory, f_name)
845
-
846
- # Write the osw file and translate the model to HBJSON
847
- out_f = out_path if output_file is None or output_file.endswith('-') \
848
- else output_file
849
- osw = from_osm_osw(osm_file, out_f, osw_folder)
850
- file_contents = _run_translation_osw(osw, out_path)
851
-
852
- # return the file contents if requested
853
- if file_contents is not None:
854
- if output_file is None:
855
- return file_contents
856
- else:
857
- print(file_contents)
841
+ # check that honeybee-openstudio is installed
842
+ try:
843
+ from honeybee_openstudio.reader import model_from_osm_file
844
+ except ImportError as e: # honeybee-openstudio is not installed
845
+ raise ImportError('{}\n{}'.format(HB_OS_MSG, e))
846
+ if osw_folder is not None:
847
+ print('--folder is deprecated and no longer used.')
848
+ # translate everything to a honeybee Model
849
+ model = model_from_osm_file(osm_file, reset_properties)
850
+ # write out the file
851
+ return process_content_to_output(json.dumps(model.to_dict()), output_file)
858
852
 
859
853
 
860
854
  @translate.command('model-from-idf')
861
855
  @click.argument('idf-file', type=click.Path(
862
856
  exists=True, file_okay=True, dir_okay=False, resolve_path=True))
863
- @click.option('--osw-folder', '-osw', help='Folder on this computer, into which the '
864
- 'working files will be written. If None, it will be written into the a '
865
- 'temp folder in the default simulation folder.', default=None,
857
+ @click.option('--keep-properties/--reset-properties', ' /-r', help='Flag to note '
858
+ 'whether all energy properties should be reset to defaults upon import, '
859
+ 'meaning that only the geometry and boundary conditions are imported '
860
+ 'from the file.', default=True, show_default=True)
861
+ @click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
862
+ default=None,
866
863
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
867
864
  @click.option('--output-file', '-f', help='Optional HBJSON file to output the string '
868
- 'of the translation. By default it printed out to stdout', default='-',
869
- type=click.Path(file_okay=True, dir_okay=False, resolve_path=True))
870
- def model_from_idf_cli(idf_file, osw_folder, output_file):
865
+ 'of the translation. By default it printed out to stdout',
866
+ type=click.File('w'), default='-', show_default=True)
867
+ def model_from_idf_cli(idf_file, keep_properties, osw_folder, output_file):
871
868
  """Translate an EnergyPlus Model (IDF) to a Honeybee Model (HBJSON).
872
869
 
873
870
  \b
@@ -875,7 +872,8 @@ def model_from_idf_cli(idf_file, osw_folder, output_file):
875
872
  idf_file: Path to an EnergyPlus Model (IDF) file.
876
873
  """
877
874
  try:
878
- model_from_idf(idf_file, osw_folder, output_file)
875
+ reset_properties = not keep_properties
876
+ model_from_idf(idf_file, reset_properties, osw_folder, output_file)
879
877
  except Exception as e:
880
878
  _logger.exception('Model translation failed.\n{}'.format(e))
881
879
  sys.exit(1)
@@ -883,68 +881,46 @@ def model_from_idf_cli(idf_file, osw_folder, output_file):
883
881
  sys.exit(0)
884
882
 
885
883
 
886
- def model_from_idf(idf_file, osw_folder=None, output_file=None):
884
+ def model_from_idf(idf_file, reset_properties=False, osw_folder=None, output_file=None,
885
+ keep_properties=True):
887
886
  """Translate an EnergyPlus Model (IDF) to a Honeybee Model (HBJSON).
888
887
 
889
888
  Args:
890
889
  idf_file: Path to an EnergyPlus Model (IDF) file.
891
- osw_folder: Folder on this computer, into which the working files will
892
- be written. If None, it will be written into the a temp folder in
893
- the default simulation folder. (Default: None).
890
+ reset_properties: Boolean to note whether all energy properties should be
891
+ reset to defaults upon import, meaning that only the geometry and boundary
892
+ conditions are imported from the EnergyPlus Model. (Default: False).
893
+ osw_folder: Deprecated input that is no longer used.
894
894
  output_file: Optional HBJSON file to output the string of the translation.
895
895
  If None, it will be returned from this method. (Default: None).
896
896
  """
897
- # set the default folder if it's not specified
898
- out_path = None
899
- if output_file is None or output_file.endswith('-'):
900
- out_directory = os.path.join(
901
- hb_folders.default_simulation_folder, 'temp_translate')
902
- f_name = os.path.basename(idf_file).lower().replace('.idf', '.hbjson')
903
- out_path = os.path.join(out_directory, f_name)
904
-
905
- # Write the osw file and translate the model to HBJSON
906
- out_f = out_path if output_file is None or output_file.endswith('-') else output_file
907
- osw = from_idf_osw(idf_file, out_f, osw_folder)
908
- # run the measure to translate the model JSON to an openstudio measure
909
- _, idf = run_osw(osw, silent=True)
910
- if idf is not None and os.path.isfile(idf):
911
- if out_path is not None: # load the JSON string to stdout
912
- with open(out_path) as json_file:
913
- file_contents = json_file.read()
914
- if output_file is None:
915
- return file_contents
916
- else:
917
- print(file_contents)
918
- else:
919
- # check the version of the IDF; most of the time, this is the issue
920
- ver_regex = r'[V|v][E|e][R|r][S|s][I|i][O|o][N|n],\s*(\d*\.\d*)[;|.]'
921
- ver_pattern = re.compile(ver_regex)
922
- with open(idf_file, 'r') as mf:
923
- ver_val = re.search(ver_pattern, mf.read())
924
- if ver_val is not None:
925
- ver_tup = tuple(int(v) for v in ver_val.groups()[0].split('.'))
926
- if folders.energyplus_version[:2] != ver_tup:
927
- msg = 'The IDF is from EnergyPlus version {}.\nThis must be ' \
928
- 'changed to {} with the IDFVersionUpdater\nin order to import ' \
929
- 'it with this Ladybug Tools installation.'.format(
930
- '.'.join((str(v) for v in ver_tup)),
931
- '.'.join((str(v) for v in folders.energyplus_version[:2]))
932
- )
933
- raise ValueError(msg)
934
- _parse_os_cli_failure(os.path.dirname(osw))
897
+ # check that honeybee-openstudio is installed
898
+ try:
899
+ from honeybee_openstudio.reader import model_from_idf_file
900
+ except ImportError as e: # honeybee-openstudio is not installed
901
+ raise ImportError('{}\n{}'.format(HB_OS_MSG, e))
902
+ if osw_folder is not None:
903
+ print('--folder is deprecated and no longer used.')
904
+ # translate everything to a honeybee Model
905
+ model = model_from_idf_file(idf_file, reset_properties)
906
+ # write out the file
907
+ return process_content_to_output(json.dumps(model.to_dict()), output_file)
935
908
 
936
909
 
937
910
  @translate.command('model-from-gbxml')
938
911
  @click.argument('gbxml-file', type=click.Path(
939
912
  exists=True, file_okay=True, dir_okay=False, resolve_path=True))
940
- @click.option('--osw-folder', '-osw', help='Folder on this computer, into which the '
941
- 'working files will be written. If None, it will be written into the a '
942
- 'temp folder in the default simulation folder.', default=None,
913
+ @click.option('--keep-properties/--reset-properties', ' /-r', help='Flag to note '
914
+ 'whether all energy properties should be reset to defaults upon import, '
915
+ 'meaning that only the geometry and boundary conditions are imported '
916
+ 'from the file.', default=True, show_default=True)
917
+ @click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
918
+ default=None,
943
919
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
944
920
  @click.option('--output-file', '-f', help='Optional HBJSON file to output the string '
945
- 'of the translation. By default it printed out to stdout', default='-',
946
- type=click.Path(file_okay=True, dir_okay=False, resolve_path=True))
947
- def model_from_gbxml_cli(gbxml_file, osw_folder, output_file):
921
+ 'of the translation. By default it printed out to stdout',
922
+ type=click.File('w'), default='-', show_default=True)
923
+ def model_from_gbxml_cli(gbxml_file, keep_properties, osw_folder, output_file):
948
924
  """Translate a gbXML to a Honeybee Model (HBJSON).
949
925
 
950
926
  \b
@@ -952,7 +928,8 @@ def model_from_gbxml_cli(gbxml_file, osw_folder, output_file):
952
928
  gbxml_file: Path to a gbXML file.
953
929
  """
954
930
  try:
955
- model_from_gbxml(gbxml_file, osw_folder, output_file)
931
+ reset_properties = not keep_properties
932
+ model_from_gbxml(gbxml_file, reset_properties, osw_folder, output_file)
956
933
  except Exception as e:
957
934
  _logger.exception('Model translation failed.\n{}'.format(e))
958
935
  sys.exit(1)
@@ -960,37 +937,30 @@ def model_from_gbxml_cli(gbxml_file, osw_folder, output_file):
960
937
  sys.exit(0)
961
938
 
962
939
 
963
- def model_from_gbxml(gbxml_file, osw_folder=None, output_file=None):
940
+ def model_from_gbxml(gbxml_file, reset_properties=False, osw_folder=None,
941
+ output_file=None, keep_properties=True):
964
942
  """Translate a gbXML to a Honeybee Model (HBJSON).
965
943
 
966
944
  Args:
967
945
  gbxml_file: Path to a gbXML file.
968
- osw_folder: Folder on this computer, into which the working files will
969
- be written. If None, it will be written into the a temp folder in
970
- the default simulation folder. (Default: None).
946
+ reset_properties: Boolean to note whether all energy properties should be
947
+ reset to defaults upon import, meaning that only the geometry and boundary
948
+ conditions are imported from the gbXML Model. (Default: False).
949
+ osw_folder: Deprecated input that is no longer used.
971
950
  output_file: Optional HBJSON file to output the string of the translation.
972
951
  If None, it will be returned from this method. (Default: None).
973
952
  """
974
- # set the default folder if it's not specified
975
- out_path = None
976
- if output_file is None or output_file.endswith('-'):
977
- out_directory = os.path.join(
978
- hb_folders.default_simulation_folder, 'temp_translate')
979
- f_name = os.path.basename(gbxml_file).lower()
980
- f_name = f_name.replace('.gbxml', '.hbjson').replace('.xml', '.hbjson')
981
- out_path = os.path.join(out_directory, f_name)
982
-
983
- # Write the osw file and translate the model to HBJSON
984
- out_f = out_path if output_file is None or output_file.endswith('-') else output_file
985
- osw = from_gbxml_osw(gbxml_file, out_f, osw_folder)
986
- file_contents = _run_translation_osw(osw, out_path)
987
-
988
- # return the file contents if requested
989
- if file_contents is not None:
990
- if output_file is None:
991
- return file_contents
992
- else:
993
- print(file_contents)
953
+ # check that honeybee-openstudio is installed
954
+ try:
955
+ from honeybee_openstudio.reader import model_from_gbxml_file
956
+ except ImportError as e: # honeybee-openstudio is not installed
957
+ raise ImportError('{}\n{}'.format(HB_OS_MSG, e))
958
+ if osw_folder is not None:
959
+ print('--folder is deprecated and no longer used.')
960
+ # translate everything to a honeybee Model
961
+ model = model_from_gbxml_file(gbxml_file, reset_properties)
962
+ # write out the file
963
+ return process_content_to_output(json.dumps(model.to_dict()), output_file)
994
964
 
995
965
 
996
966
  @translate.command('constructions-to-idf')
@@ -1088,9 +1058,8 @@ def construction_from_idf(construction_idf, indent, output_file):
1088
1058
  @click.option('--indent', '-i', help='Optional integer to specify the indentation in '
1089
1059
  'the output JSON file. Specifying an value here can produce more read-able'
1090
1060
  ' JSONs.', type=int, default=None, show_default=True)
1091
- @click.option('--osw-folder', '-osw', help='Folder on this computer, into which the '
1092
- 'working files will be written. If None, it will be written into the a '
1093
- 'temp folder in the default simulation folder.', default=None,
1061
+ @click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
1062
+ default=None,
1094
1063
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
1095
1064
  @click.option('--output-file', '-f', help='Optional JSON file to output the string '
1096
1065
  'of the translation. By default it printed out to stdout',
@@ -1106,12 +1075,18 @@ def materials_from_osm(osm_file, indent, osw_folder, output_file):
1106
1075
  osm_file: Path to a OpenStudio Model (OSM) file.
1107
1076
  """
1108
1077
  try:
1109
- # translate the OSM to a HBJSON
1110
- model_dict = _translate_osm_to_hbjson(osm_file, osw_folder)
1111
- # extract the material dictionaries from the model dictionary
1112
- out_dict = {}
1113
- for mat in model_dict['properties']['energy']['materials']:
1114
- out_dict[mat['identifier']] = mat
1078
+ try:
1079
+ from honeybee_openstudio.openstudio import openstudio
1080
+ from honeybee_openstudio.material import extract_all_materials
1081
+ except ImportError as e: # honeybee-openstudio is not installed
1082
+ raise ImportError('{}\n{}'.format(HB_OS_MSG, e))
1083
+ ver_translator = openstudio.osversion.VersionTranslator() # in case OSM is old
1084
+ os_model = ver_translator.loadModel(osm_file)
1085
+ if not os_model.is_initialized():
1086
+ errors = '\n'.join(str(err.logMessage()) for err in ver_translator.errors())
1087
+ raise ValueError('Failed to load model from OSM.\n{}'.format(errors))
1088
+ materials = extract_all_materials(os_model.get())
1089
+ out_dict = {mat.identifier: mat.to_dict() for mat in materials.values()}
1115
1090
  output_file.write(json.dumps(out_dict, indent=indent))
1116
1091
  except Exception as e:
1117
1092
  _logger.exception('Material translation failed.\n{}'.format(e))
@@ -1132,9 +1107,8 @@ def materials_from_osm(osm_file, indent, osw_folder, output_file):
1132
1107
  @click.option('--indent', '-i', help='Optional integer to specify the indentation in '
1133
1108
  'the output JSON file. Specifying an value here can produce more read-able'
1134
1109
  ' JSONs.', type=int, default=None, show_default=True)
1135
- @click.option('--osw-folder', '-osw', help='Folder on this computer, into which the '
1136
- 'working files will be written. If None, it will be written into the a '
1137
- 'temp folder in the default simulation folder.', default=None,
1110
+ @click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
1111
+ default=None,
1138
1112
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
1139
1113
  @click.option('--output-file', '-f', help='Optional JSON file to output the string '
1140
1114
  'of the translation. By default it printed out to stdout',
@@ -1150,21 +1124,24 @@ def constructions_from_osm(osm_file, full, indent, osw_folder, output_file):
1150
1124
  osm_file: Path to a OpenStudio Model (OSM) file.
1151
1125
  """
1152
1126
  try:
1153
- # translate the OSM to a HBJSON
1154
- model_dict = _translate_osm_to_hbjson(osm_file, osw_folder)
1155
- # extract the construction dictionaries from the model dictionary
1127
+ try:
1128
+ from honeybee_openstudio.openstudio import openstudio
1129
+ from honeybee_openstudio.construction import extract_all_constructions
1130
+ except ImportError as e: # honeybee-openstudio is not installed
1131
+ raise ImportError('{}\n{}'.format(HB_OS_MSG, e))
1132
+ ver_translator = openstudio.osversion.VersionTranslator() # in case OSM is old
1133
+ os_model = ver_translator.loadModel(osm_file)
1134
+ if not os_model.is_initialized():
1135
+ errors = '\n'.join(str(err.logMessage()) for err in ver_translator.errors())
1136
+ raise ValueError('Failed to load model from OSM.\n{}'.format(errors))
1137
+ constructions = extract_all_constructions(os_model.get())
1138
+ abridged = not full
1156
1139
  out_dict = {}
1157
- if not full: # objects are already abridged and good to go
1158
- for con in model_dict['properties']['energy']['constructions']:
1159
- out_dict[con['identifier']] = con
1160
- output_file.write(json.dumps(out_dict, indent=indent))
1161
- else: # rebuild the full objects to write them as full
1162
- _, constructions, _, _, _, _, _, _ = \
1163
- ModelEnergyProperties.load_properties_from_dict(
1164
- model_dict, skip_invalid=True)
1165
- for con in constructions.values():
1140
+ for con in constructions.values():
1141
+ try:
1142
+ out_dict[con.identifier] = con.to_dict(abridged=abridged)
1143
+ except TypeError: # no abridged option
1166
1144
  out_dict[con.identifier] = con.to_dict()
1167
- # write the resulting JSON
1168
1145
  output_file.write(json.dumps(out_dict, indent=indent))
1169
1146
  except Exception as e:
1170
1147
  _logger.exception('Construction translation failed.\n{}'.format(e))
@@ -1185,9 +1162,8 @@ def constructions_from_osm(osm_file, full, indent, osw_folder, output_file):
1185
1162
  @click.option('--indent', '-i', help='Optional integer to specify the indentation in '
1186
1163
  'the output JSON file. Specifying an value here can produce more read-able'
1187
1164
  ' JSONs.', type=int, default=None, show_default=True)
1188
- @click.option('--osw-folder', '-osw', help='Folder on this computer, into which the '
1189
- 'working files will be written. If None, it will be written into the a '
1190
- 'temp folder in the default simulation folder.', default=None,
1165
+ @click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
1166
+ default=None,
1191
1167
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
1192
1168
  @click.option('--output-file', '-f', help='Optional JSON file to output the string '
1193
1169
  'of the translation. By default it printed out to stdout',
@@ -1203,21 +1179,25 @@ def construction_sets_from_osm(osm_file, full, indent, osw_folder, output_file):
1203
1179
  osm_file: Path to a OpenStudio Model (OSM) file.
1204
1180
  """
1205
1181
  try:
1206
- # translate the OSM to a HBJSON
1207
- model_dict = _translate_osm_to_hbjson(osm_file, osw_folder)
1208
- # extract the construction set dictionaries from the model dictionary
1182
+ try:
1183
+ from honeybee_openstudio.openstudio import openstudio
1184
+ from honeybee_openstudio.construction import extract_all_constructions
1185
+ from honeybee_openstudio.constructionset import construction_set_from_openstudio
1186
+ except ImportError as e: # honeybee-openstudio is not installed
1187
+ raise ImportError('{}\n{}'.format(HB_OS_MSG, e))
1188
+ ver_translator = openstudio.osversion.VersionTranslator() # in case OSM is old
1189
+ os_model = ver_translator.loadModel(osm_file)
1190
+ if not os_model.is_initialized():
1191
+ errors = '\n'.join(str(err.logMessage()) for err in ver_translator.errors())
1192
+ raise ValueError('Failed to load model from OSM.\n{}'.format(errors))
1193
+ os_model = os_model.get()
1194
+ constructions = extract_all_constructions(os_model)
1195
+ abridged = not full
1209
1196
  out_dict = {}
1210
- if not full: # objects are already abridged and good to go
1211
- for c_set in model_dict['properties']['energy']['construction_sets']:
1212
- out_dict[c_set['identifier']] = c_set
1213
- output_file.write(json.dumps(out_dict, indent=indent))
1214
- else: # rebuild the full objects to write them as full
1215
- _, _, construction_sets, _, _, _, _, _ = \
1216
- ModelEnergyProperties.load_properties_from_dict(
1217
- model_dict, skip_invalid=True)
1218
- for c_set in construction_sets.values():
1219
- out_dict[c_set.identifier] = c_set.to_dict()
1220
- # write the resulting JSON
1197
+ for os_cons_set in os_model.getDefaultConstructionSets():
1198
+ if os_cons_set.nameString() != 'Default Generic Construction Set':
1199
+ con_set = construction_set_from_openstudio(os_cons_set, constructions)
1200
+ out_dict[con_set.identifier] = con_set.to_dict(abridged=abridged)
1221
1201
  output_file.write(json.dumps(out_dict, indent=indent))
1222
1202
  except Exception as e:
1223
1203
  _logger.exception('ConstructionSet translation failed.\n{}'.format(e))
@@ -1327,9 +1307,8 @@ def schedule_from_idf(schedule_idf, indent, output_file):
1327
1307
  @click.option('--indent', '-i', help='Optional integer to specify the indentation in '
1328
1308
  'the output JSON file. Specifying an value here can produce more read-able'
1329
1309
  ' JSONs.', type=int, default=None, show_default=True)
1330
- @click.option('--osw-folder', '-osw', help='Folder on this computer, into which the '
1331
- 'working files will be written. If None, it will be written into the a '
1332
- 'temp folder in the default simulation folder.', default=None,
1310
+ @click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
1311
+ default=None,
1333
1312
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
1334
1313
  @click.option('--output-file', '-f', help='Optional JSON file to output the string '
1335
1314
  'of the translation. By default it printed out to stdout',
@@ -1345,12 +1324,20 @@ def schedule_type_limits_from_osm(osm_file, indent, osw_folder, output_file):
1345
1324
  osm_file: Path to a OpenStudio Model (OSM) file.
1346
1325
  """
1347
1326
  try:
1348
- # translate the OSM to a HBJSON
1349
- model_dict = _translate_osm_to_hbjson(osm_file, osw_folder)
1350
- # extract the material dictionaries from the model dictionary
1327
+ try:
1328
+ from honeybee_openstudio.openstudio import openstudio
1329
+ from honeybee_openstudio.schedule import schedule_type_limits_from_openstudio
1330
+ except ImportError as e: # honeybee-openstudio is not installed
1331
+ raise ImportError('{}\n{}'.format(HB_OS_MSG, e))
1332
+ ver_translator = openstudio.osversion.VersionTranslator() # in case OSM is old
1333
+ os_model = ver_translator.loadModel(osm_file)
1334
+ if not os_model.is_initialized():
1335
+ errors = '\n'.join(str(err.logMessage()) for err in ver_translator.errors())
1336
+ raise ValueError('Failed to load model from OSM.\n{}'.format(errors))
1351
1337
  out_dict = {}
1352
- for stl in model_dict['properties']['energy']['schedule_type_limits']:
1353
- out_dict[stl['identifier']] = stl
1338
+ for os_type_lim in os_model.get().getScheduleTypeLimitss():
1339
+ type_lim = schedule_type_limits_from_openstudio(os_type_lim)
1340
+ out_dict[type_lim.identifier] = type_lim.to_dict()
1354
1341
  output_file.write(json.dumps(out_dict, indent=indent))
1355
1342
  except Exception as e:
1356
1343
  _logger.exception('ScheduleTypeLimit translation failed.\n{}'.format(e))
@@ -1371,9 +1358,8 @@ def schedule_type_limits_from_osm(osm_file, indent, osw_folder, output_file):
1371
1358
  @click.option('--indent', '-i', help='Optional integer to specify the indentation in '
1372
1359
  'the output JSON file. Specifying an value here can produce more read-able'
1373
1360
  ' JSONs.', type=int, default=None, show_default=True)
1374
- @click.option('--osw-folder', '-osw', help='Folder on this computer, into which the '
1375
- 'working files will be written. If None, it will be written into the a '
1376
- 'temp folder in the default simulation folder.', default=None,
1361
+ @click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
1362
+ default=None,
1377
1363
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
1378
1364
  @click.option('--output-file', '-f', help='Optional JSON file to output the string '
1379
1365
  'of the translation. By default it printed out to stdout',
@@ -1389,21 +1375,21 @@ def schedules_from_osm(osm_file, full, indent, osw_folder, output_file):
1389
1375
  osm_file: Path to a OpenStudio Model (OSM) file.
1390
1376
  """
1391
1377
  try:
1392
- # translate the OSM to a HBJSON
1393
- model_dict = _translate_osm_to_hbjson(osm_file, osw_folder)
1394
- # extract the construction dictionaries from the model dictionary
1378
+ try:
1379
+ from honeybee_openstudio.openstudio import openstudio
1380
+ from honeybee_openstudio.schedule import extract_all_schedules
1381
+ except ImportError as e: # honeybee-openstudio is not installed
1382
+ raise ImportError('{}\n{}'.format(HB_OS_MSG, e))
1383
+ ver_translator = openstudio.osversion.VersionTranslator() # in case OSM is old
1384
+ os_model = ver_translator.loadModel(osm_file)
1385
+ if not os_model.is_initialized():
1386
+ errors = '\n'.join(str(err.logMessage()) for err in ver_translator.errors())
1387
+ raise ValueError('Failed to load model from OSM.\n{}'.format(errors))
1388
+ schedules = extract_all_schedules(os_model.get())
1389
+ abridged = not full
1395
1390
  out_dict = {}
1396
- if not full: # objects are already abridged and good to go
1397
- for sch in model_dict['properties']['energy']['schedules']:
1398
- out_dict[sch['identifier']] = sch
1399
- output_file.write(json.dumps(out_dict, indent=indent))
1400
- else: # rebuild the full objects to write them as full
1401
- _, _, _, _, schedules, _, _, _ = \
1402
- ModelEnergyProperties.load_properties_from_dict(
1403
- model_dict, skip_invalid=True)
1404
- for sch in schedules.values():
1405
- out_dict[sch.identifier] = sch.to_dict()
1406
- # write the resulting JSON
1391
+ for sch in schedules.values():
1392
+ out_dict[sch.identifier] = sch.to_dict(abridged=abridged)
1407
1393
  output_file.write(json.dumps(out_dict, indent=indent))
1408
1394
  except Exception as e:
1409
1395
  _logger.exception('Schedule translation failed.\n{}'.format(e))
@@ -1424,9 +1410,8 @@ def schedules_from_osm(osm_file, full, indent, osw_folder, output_file):
1424
1410
  @click.option('--indent', '-i', help='Optional integer to specify the indentation in '
1425
1411
  'the output JSON file. Specifying an value here can produce more read-able'
1426
1412
  ' JSONs.', type=int, default=None, show_default=True)
1427
- @click.option('--osw-folder', '-osw', help='Folder on this computer, into which the '
1428
- 'working files will be written. If None, it will be written into the a '
1429
- 'temp folder in the default simulation folder.', default=None,
1413
+ @click.option('--osw-folder', '-osw', help='Deprecated input that is no longer used.',
1414
+ default=None,
1430
1415
  type=click.Path(file_okay=False, dir_okay=True, resolve_path=True))
1431
1416
  @click.option('--output-file', '-f', help='Optional JSON file to output the string '
1432
1417
  'of the translation. By default it printed out to stdout',
@@ -1442,21 +1427,24 @@ def programs_from_osm(osm_file, full, indent, osw_folder, output_file):
1442
1427
  osm_file: Path to a OpenStudio Model (OSM) file.
1443
1428
  """
1444
1429
  try:
1445
- # translate the OSM to a HBJSON
1446
- model_dict = _translate_osm_to_hbjson(osm_file, osw_folder)
1447
- # extract the construction dictionaries from the model dictionary
1430
+ try:
1431
+ from honeybee_openstudio.openstudio import openstudio
1432
+ from honeybee_openstudio.schedule import extract_all_schedules
1433
+ from honeybee_openstudio.programtype import program_type_from_openstudio
1434
+ except ImportError as e: # honeybee-openstudio is not installed
1435
+ raise ImportError('{}\n{}'.format(HB_OS_MSG, e))
1436
+ ver_translator = openstudio.osversion.VersionTranslator() # in case OSM is old
1437
+ os_model = ver_translator.loadModel(osm_file)
1438
+ if not os_model.is_initialized():
1439
+ errors = '\n'.join(str(err.logMessage()) for err in ver_translator.errors())
1440
+ raise ValueError('Failed to load model from OSM.\n{}'.format(errors))
1441
+ os_model = os_model.get()
1442
+ schedules = extract_all_schedules(os_model)
1443
+ abridged = not full
1448
1444
  out_dict = {}
1449
- if not full: # objects are already abridged and good to go
1450
- for prog in model_dict['properties']['energy']['program_types']:
1451
- out_dict[prog['identifier']] = prog
1452
- output_file.write(json.dumps(out_dict, indent=indent))
1453
- else: # rebuild the full objects to write them as full
1454
- _, _, _, _, _, program_types, _, _ = \
1455
- ModelEnergyProperties.load_properties_from_dict(
1456
- model_dict, skip_invalid=True)
1457
- for prog in program_types.values():
1458
- out_dict[prog.identifier] = prog.to_dict()
1459
- # write the resulting JSON
1445
+ for os_space_type in os_model.getSpaceTypes():
1446
+ program = program_type_from_openstudio(os_space_type, schedules)
1447
+ out_dict[program.identifier] = program.to_dict(abridged=abridged)
1460
1448
  output_file.write(json.dumps(out_dict, indent=indent))
1461
1449
  except Exception as e:
1462
1450
  _logger.exception('Program translation failed.\n{}'.format(e))