honeybee-radiance-postprocess 0.4.385__py2.py3-none-any.whl → 0.4.387__py2.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.
- honeybee_radiance_postprocess/cli/postprocess.py +7 -2
- honeybee_radiance_postprocess/leed.py +61 -18
- {honeybee_radiance_postprocess-0.4.385.dist-info → honeybee_radiance_postprocess-0.4.387.dist-info}/METADATA +1 -1
- {honeybee_radiance_postprocess-0.4.385.dist-info → honeybee_radiance_postprocess-0.4.387.dist-info}/RECORD +8 -8
- {honeybee_radiance_postprocess-0.4.385.dist-info → honeybee_radiance_postprocess-0.4.387.dist-info}/LICENSE +0 -0
- {honeybee_radiance_postprocess-0.4.385.dist-info → honeybee_radiance_postprocess-0.4.387.dist-info}/WHEEL +0 -0
- {honeybee_radiance_postprocess-0.4.385.dist-info → honeybee_radiance_postprocess-0.4.387.dist-info}/entry_points.txt +0 -0
- {honeybee_radiance_postprocess-0.4.385.dist-info → honeybee_radiance_postprocess-0.4.387.dist-info}/top_level.txt +0 -0
@@ -770,7 +770,7 @@ def annual_metrics_file(
|
|
770
770
|
'--grids-info', '-gi', help='An optional JSON file with grid information. '
|
771
771
|
'If no file is provided the command will look for a file in the folder.',
|
772
772
|
default=None, show_default=True,
|
773
|
-
type=click.Path(exists=
|
773
|
+
type=click.Path(exists=False, file_okay=True, dir_okay=False, resolve_path=True)
|
774
774
|
)
|
775
775
|
@click.option(
|
776
776
|
'--name', '-n', help='Optional filename of grid summary.',
|
@@ -792,6 +792,9 @@ def grid_summary_metric(
|
|
792
792
|
):
|
793
793
|
"""Calculate a grid summary.
|
794
794
|
|
795
|
+
If the grids info file is omitted it is a requirement that there is a grids
|
796
|
+
info file in the main folder or in each sub folder.
|
797
|
+
|
795
798
|
\b
|
796
799
|
Args:
|
797
800
|
folder: A folder with results.
|
@@ -801,9 +804,11 @@ def grid_summary_metric(
|
|
801
804
|
folder = Path(folder)
|
802
805
|
|
803
806
|
# get grids information
|
804
|
-
if grids_info:
|
807
|
+
if grids_info and Path(grids_info).is_file():
|
805
808
|
with open(grids_info) as gi:
|
806
809
|
grids_info = json.load(gi)
|
810
|
+
else:
|
811
|
+
grids_info = None
|
807
812
|
|
808
813
|
# get grid metrics
|
809
814
|
if grid_metrics and Path(grid_metrics).is_file():
|
@@ -25,7 +25,8 @@ from .util import filter_array, recursive_dict_merge
|
|
25
25
|
|
26
26
|
|
27
27
|
def _create_grid_summary(
|
28
|
-
grid_info, sda_grid,
|
28
|
+
grid_info, sda_grid, sda_blinds_up_grid, sda_blinds_down_grid, ase_grid,
|
29
|
+
pass_sda, pass_sda_blind_up, pass_sda_blinds_down, pass_ase, total_floor,
|
29
30
|
area_weighted=True):
|
30
31
|
"""Create a LEED summary for a single grid.
|
31
32
|
|
@@ -65,6 +66,8 @@ def _create_grid_summary(
|
|
65
66
|
'full_id': grid_id,
|
66
67
|
'ase': round(ase_grid, 2),
|
67
68
|
'sda': round(sda_grid, 2),
|
69
|
+
'sda_blinds_up': round(sda_blinds_up_grid, 2),
|
70
|
+
'sda_blinds_down': round(sda_blinds_down_grid, 2),
|
68
71
|
'floor_area_passing_ase': round(pass_ase, 2),
|
69
72
|
'floor_area_passing_sda': round(pass_sda, 2),
|
70
73
|
'total_floor_area': round(total_floor, 2)
|
@@ -77,6 +80,8 @@ def _create_grid_summary(
|
|
77
80
|
'full_id': grid_id,
|
78
81
|
'ase': round(ase_grid, 2),
|
79
82
|
'sda': round(sda_grid, 2),
|
83
|
+
'sda_blinds_up': round(sda_blinds_up_grid, 2),
|
84
|
+
'sda_blinds_down': round(sda_blinds_down_grid, 2),
|
80
85
|
'sensor_count_passing_ase': int(round(pass_ase, 2)),
|
81
86
|
'sensor_count_passing_sda': int(round(pass_sda, 2)),
|
82
87
|
'total_sensor_count': total_floor
|
@@ -90,8 +95,9 @@ def _create_grid_summary(
|
|
90
95
|
|
91
96
|
def _leed_summary(
|
92
97
|
pass_ase_grids: list, pass_sda_grids: list, grids_info: list,
|
93
|
-
grid_areas: list
|
94
|
-
|
98
|
+
grid_areas: list, pass_sda_blinds_up_grids: list,
|
99
|
+
pass_sda_blinds_down_grids: list) -> Tuple[dict, dict]:
|
100
|
+
"""Create combined summary and summary for each grid individually.
|
95
101
|
|
96
102
|
Args:
|
97
103
|
pass_ase_grids: A list where each sublist is a list of True/False that
|
@@ -115,18 +121,29 @@ def _leed_summary(
|
|
115
121
|
total_area = 0
|
116
122
|
total_area_pass_ase = 0
|
117
123
|
total_area_pass_sda = 0
|
118
|
-
for (pass_ase, pass_sda, grid_area, grid_info
|
119
|
-
|
124
|
+
for (pass_ase, pass_sda, grid_area, grid_info, pass_sda_blinds_up,
|
125
|
+
pass_sda_blinds_down) in \
|
126
|
+
zip(pass_ase_grids, pass_sda_grids, grid_areas, grids_info,
|
127
|
+
pass_sda_blinds_up_grids, pass_sda_blinds_down_grids):
|
120
128
|
total_grid_area = grid_area.sum()
|
129
|
+
|
121
130
|
area_pass_ase = grid_area[pass_ase].sum()
|
122
|
-
area_pass_sda = grid_area[pass_sda].sum()
|
123
131
|
ase_grid = (total_grid_area - area_pass_ase) / total_grid_area * 100
|
132
|
+
|
133
|
+
area_pass_sda = grid_area[pass_sda].sum()
|
134
|
+
area_pass_sda_blind_up = grid_area[pass_sda_blinds_up].sum()
|
135
|
+
area_pass_sda_blinds_down = grid_area[pass_sda_blinds_down].sum()
|
124
136
|
sda_grid = area_pass_sda / total_grid_area * 100
|
137
|
+
sda_blinds_up_grid = area_pass_sda_blind_up / total_grid_area * 100
|
138
|
+
sda_blinds_down_grid = area_pass_sda_blinds_down / total_grid_area * 100
|
139
|
+
|
125
140
|
# grid summary
|
126
141
|
grid_summary = \
|
127
142
|
_create_grid_summary(
|
128
|
-
grid_info, sda_grid,
|
129
|
-
|
143
|
+
grid_info, sda_grid, sda_blinds_up_grid, sda_blinds_down_grid,
|
144
|
+
ase_grid, area_pass_sda, area_pass_sda_blind_up,
|
145
|
+
area_pass_sda_blinds_down, area_pass_ase, total_grid_area,
|
146
|
+
area_weighted=True
|
130
147
|
)
|
131
148
|
|
132
149
|
recursive_dict_merge(summary_grid, grid_summary)
|
@@ -145,18 +162,28 @@ def _leed_summary(
|
|
145
162
|
total_sensor_count = 0
|
146
163
|
total_sensor_count_pass_ase = 0
|
147
164
|
total_sensor_count_pass_sda = 0
|
148
|
-
for (pass_ase, pass_sda, grid_info
|
149
|
-
|
165
|
+
for (pass_ase, pass_sda, grid_info, pass_sda_blinds_up,
|
166
|
+
pass_sda_blinds_down) in \
|
167
|
+
zip(pass_ase_grids, pass_sda_grids, grids_info,
|
168
|
+
pass_sda_blinds_up_grids, pass_sda_blinds_down_grids):
|
150
169
|
grid_count = grid_info['count']
|
151
170
|
sensor_count_pass_ase = pass_ase.sum()
|
152
|
-
sensor_count_pass_sda = pass_sda.sum()
|
153
171
|
ase_grid = (grid_count - sensor_count_pass_ase) / grid_count * 100
|
172
|
+
|
173
|
+
sensor_count_pass_sda = pass_sda.sum()
|
174
|
+
sensor_count_pass_sda_blinds_up = pass_sda_blinds_up.sum()
|
175
|
+
sensor_count_pass_sda_blinds_down = pass_sda_blinds_down.sum()
|
154
176
|
sda_grid = sensor_count_pass_sda / grid_count * 100
|
177
|
+
sda_blinds_up_grid = sensor_count_pass_sda_blinds_up / grid_count * 100
|
178
|
+
sda_blinds_down_grid = sensor_count_pass_sda_blinds_down / grid_count * 100
|
179
|
+
|
155
180
|
# grid summary
|
156
181
|
grid_summary = \
|
157
182
|
_create_grid_summary(
|
158
|
-
grid_info, sda_grid,
|
159
|
-
|
183
|
+
grid_info, sda_grid, sda_blinds_up_grid, sda_blinds_down_grid,
|
184
|
+
ase_grid, sensor_count_pass_sda, sensor_count_pass_sda_blinds_up,
|
185
|
+
sensor_count_pass_sda_blinds_down, sensor_count_pass_ase,
|
186
|
+
grid_count, area_weighted=False
|
160
187
|
)
|
161
188
|
|
162
189
|
recursive_dict_merge(summary_grid, grid_summary)
|
@@ -478,9 +505,9 @@ def leed_states_schedule(
|
|
478
505
|
(combination_array >= 1000).sum(axis=0) / grid_count
|
479
506
|
array_list_combinations.append(combination_percentage)
|
480
507
|
array_combinations = np.array(array_list_combinations)
|
481
|
-
array_combinations[array_combinations > 0.02] = np.
|
508
|
+
array_combinations[array_combinations > 0.02] = -np.inf
|
482
509
|
|
483
|
-
grid_comply = np.where(np.all(array_combinations
|
510
|
+
grid_comply = np.where(np.all(array_combinations==-np.inf, axis=0))[0]
|
484
511
|
if grid_comply.size != 0:
|
485
512
|
grid_comply = np.array(results.sun_up_hours)[grid_comply]
|
486
513
|
fail_to_comply[grid_info['name']] = \
|
@@ -628,9 +655,13 @@ def leed_option_one(
|
|
628
655
|
# spatial daylight autonomy
|
629
656
|
da_grids = []
|
630
657
|
pass_sda_grids = []
|
658
|
+
pass_sda_blinds_up_grids = []
|
659
|
+
pass_sda_blinds_down_grids = []
|
631
660
|
for grid_info in grids_info:
|
632
661
|
light_paths = [lp[0] for lp in grid_info['light_path']]
|
633
662
|
arrays = []
|
663
|
+
arrays_blinds_up = []
|
664
|
+
arrays_blinds_down = []
|
634
665
|
# combine total array for all light paths
|
635
666
|
for light_path in light_paths:
|
636
667
|
array = results._get_array(grid_info, light_path, res_type='total')
|
@@ -641,19 +672,31 @@ def leed_option_one(
|
|
641
672
|
shd_trans_array = states_schedule[light_path][sun_up_hours]
|
642
673
|
shd_trans_array = shd_trans_array[occ_mask.astype(bool)]
|
643
674
|
arrays.append(array_filter * shd_trans_array)
|
675
|
+
arrays_blinds_up.append(array_filter)
|
676
|
+
arrays_blinds_down.append(array_filter * shd_trans_dict[light_path])
|
644
677
|
else:
|
645
678
|
arrays.append(array_filter)
|
679
|
+
arrays_blinds_up.append(array_filter)
|
680
|
+
arrays_blinds_down.append(array_filter)
|
646
681
|
array = sum(arrays)
|
682
|
+
array_blinds_up = sum(arrays_blinds_up)
|
683
|
+
array_blinds_down = sum(arrays_blinds_down)
|
647
684
|
# calculate da per grid
|
648
685
|
da_grid = da_array2d(array, total_occ=total_occ, threshold=threshold)
|
649
686
|
da_grids.append(da_grid)
|
687
|
+
da_blinds_up_grid = da_array2d(
|
688
|
+
array_blinds_up, total_occ=total_occ, threshold=threshold)
|
689
|
+
da_blinds_down_grid = da_array2d(
|
690
|
+
array_blinds_down, total_occ=total_occ, threshold=threshold)
|
650
691
|
# calculate sda per grid
|
651
|
-
|
652
|
-
|
692
|
+
pass_sda_grids.append(da_grid >= target_time)
|
693
|
+
pass_sda_blinds_up_grids.append(da_blinds_up_grid >= target_time)
|
694
|
+
pass_sda_blinds_down_grids.append(da_blinds_down_grid >= target_time)
|
653
695
|
|
654
696
|
# create summaries for all grids and each grid individually
|
655
697
|
summary, summary_grid = _leed_summary(
|
656
|
-
pass_ase_grids, pass_sda_grids, grids_info, grid_areas
|
698
|
+
pass_ase_grids, pass_sda_grids, grids_info, grid_areas,
|
699
|
+
pass_sda_blinds_up_grids, pass_sda_blinds_down_grids)
|
657
700
|
|
658
701
|
# credits
|
659
702
|
if not fail_to_comply:
|
@@ -7,7 +7,7 @@ honeybee_radiance_postprocess/dynamic.py,sha256=RPJh2SsjASYJCsG5QRkazVCvzWjzMxm9
|
|
7
7
|
honeybee_radiance_postprocess/electriclight.py,sha256=E7uhq7-YtZ02F9a1FbEdrXnxmYJNOFnfLF0Yw3JLQ-g,732
|
8
8
|
honeybee_radiance_postprocess/en17037.py,sha256=5c5ahfzad12FqMwBL7c0sLOKHzLKSTXtlYFfaNhzA3w,10848
|
9
9
|
honeybee_radiance_postprocess/helper.py,sha256=qz5kaJxzy1tGBfVYYXc2cEToOCoj0YLOtwjr3LVI3YU,9000
|
10
|
-
honeybee_radiance_postprocess/leed.py,sha256=
|
10
|
+
honeybee_radiance_postprocess/leed.py,sha256=egdWC5nU81dlm7Xq_kKLqDWVeYdbghr2b7XZYmZ_YN0,35986
|
11
11
|
honeybee_radiance_postprocess/metrics.py,sha256=6EHCuXf5jnhh6GglI9mTd0MFpfhfPFoKMf4b5gKRTMI,14038
|
12
12
|
honeybee_radiance_postprocess/reader.py,sha256=6myKzfGC1pO8zPixg1kKrKjPihHabTKUh2t5BlJvij0,2367
|
13
13
|
honeybee_radiance_postprocess/type_hints.py,sha256=4R0kZgacQrqzoh8Tq7f8MVzUDzynV-C_jlh80UV6GPE,1122
|
@@ -18,7 +18,7 @@ honeybee_radiance_postprocess/cli/abnt.py,sha256=fTMqgzuaZ6d7BE8CI4GWQBr1_r-qWhp
|
|
18
18
|
honeybee_radiance_postprocess/cli/grid.py,sha256=6peLEAPVe-iw05_wdRpFruZLqO8myvC-_QT5W1q5sk8,10677
|
19
19
|
honeybee_radiance_postprocess/cli/leed.py,sha256=QBR6AMJJWuZ0TevyMi2tXCWMLdS-ZSqtVTZDgqxwa7M,3112
|
20
20
|
honeybee_radiance_postprocess/cli/mtxop.py,sha256=UZJnjNpPjDmShy1-Mxos4H2vTUqk_yP3ZyaC1_LLFeI,5015
|
21
|
-
honeybee_radiance_postprocess/cli/postprocess.py,sha256=
|
21
|
+
honeybee_radiance_postprocess/cli/postprocess.py,sha256=CnUsIE3fWUZWLBeIjSW_wte9ptKKx-oaNDBGo63YHF4,39202
|
22
22
|
honeybee_radiance_postprocess/cli/schedule.py,sha256=6uIy98Co4zm-ZRcELo4Lfx_aN3lNiqPe-BSimXwt1F8,3877
|
23
23
|
honeybee_radiance_postprocess/cli/translate.py,sha256=18zkcGeRZALJ5Z82NEB3XZ-iEX2cHyneobGWV-IXWE0,6789
|
24
24
|
honeybee_radiance_postprocess/cli/two_phase.py,sha256=1nZF4jyZ_C7CAfiHCz1UUOEwDaB4yOXr9ga0HIrhOB0,7033
|
@@ -27,9 +27,9 @@ honeybee_radiance_postprocess/results/__init__.py,sha256=1agBQbfT4Tf8KqSZzlfKYX8
|
|
27
27
|
honeybee_radiance_postprocess/results/annual_daylight.py,sha256=o4Y5kbD3a4X4KRfsbOlWzgrnNKU365GcivM6qQGUGXU,31605
|
28
28
|
honeybee_radiance_postprocess/results/annual_irradiance.py,sha256=5zwrr4MNeHUebbSRpSBbscPOZUs2AHmYCQfIIbdYImY,8298
|
29
29
|
honeybee_radiance_postprocess/results/results.py,sha256=jkjsxTuvVfBus6tM2UjQE3ZKPooLInWEd2guqO61v9E,53600
|
30
|
-
honeybee_radiance_postprocess-0.4.
|
31
|
-
honeybee_radiance_postprocess-0.4.
|
32
|
-
honeybee_radiance_postprocess-0.4.
|
33
|
-
honeybee_radiance_postprocess-0.4.
|
34
|
-
honeybee_radiance_postprocess-0.4.
|
35
|
-
honeybee_radiance_postprocess-0.4.
|
30
|
+
honeybee_radiance_postprocess-0.4.387.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
31
|
+
honeybee_radiance_postprocess-0.4.387.dist-info/METADATA,sha256=dg1xvqmzHgPcqY6vdOLB_4P3Qt0pCMFL8cmjfdCScBM,2245
|
32
|
+
honeybee_radiance_postprocess-0.4.387.dist-info/WHEEL,sha256=unfA4MOaH0icIyIA5oH6E2sn2Hq5zKtLlHsWapZGwes,110
|
33
|
+
honeybee_radiance_postprocess-0.4.387.dist-info/entry_points.txt,sha256=gFtVPx6UItXt27GfEZZO00eOZChJJEL6JwGSAB_O3rs,96
|
34
|
+
honeybee_radiance_postprocess-0.4.387.dist-info/top_level.txt,sha256=4-sFbzy7ewP2EDqJV3jeFlAFx7SuxtoBBELWaKAnLdA,30
|
35
|
+
honeybee_radiance_postprocess-0.4.387.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|