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.
@@ -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=True, file_okay=True, dir_okay=False, resolve_path=True)
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, ase_grid, pass_sda, pass_ase, total_floor,
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) -> Tuple[dict, dict]:
94
- """_summary_
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) in \
119
- zip(pass_ase_grids, pass_sda_grids, grid_areas, grids_info):
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, ase_grid, area_pass_sda, area_pass_ase,
129
- total_grid_area, area_weighted=True
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) in \
149
- zip(pass_ase_grids, pass_sda_grids, grids_info):
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, ase_grid, sensor_count_pass_sda,
159
- sensor_count_pass_ase, grid_count, area_weighted=False
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.NINF
508
+ array_combinations[array_combinations > 0.02] = -np.inf
482
509
 
483
- grid_comply = np.where(np.all(array_combinations==np.NINF, axis=0))[0]
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
- pass_sda = da_grid >= target_time
652
- pass_sda_grids.append(pass_sda)
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=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:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: honeybee-radiance-postprocess
3
- Version: 0.4.385
3
+ Version: 0.4.387
4
4
  Summary: Postprocessing of Radiance results and matrices
5
5
  Home-page: https://github.com/ladybug-tools/honeybee-radiance-postprocess
6
6
  Author: Ladybug Tools
@@ -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=XTi5gvACqCbwB58ctDL4fpkB0AHjW7A4M3h5gH28g1w,33461
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=JbYPqJqL7iYSyj22yn0g-ImwdTUcMnXI27x0U8gGOsw,38989
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.385.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
31
- honeybee_radiance_postprocess-0.4.385.dist-info/METADATA,sha256=4jb_DnWRE1U3g9BHMZSA6b7hTG3C-4fgQwkQkFPK4JU,2245
32
- honeybee_radiance_postprocess-0.4.385.dist-info/WHEEL,sha256=unfA4MOaH0icIyIA5oH6E2sn2Hq5zKtLlHsWapZGwes,110
33
- honeybee_radiance_postprocess-0.4.385.dist-info/entry_points.txt,sha256=gFtVPx6UItXt27GfEZZO00eOZChJJEL6JwGSAB_O3rs,96
34
- honeybee_radiance_postprocess-0.4.385.dist-info/top_level.txt,sha256=4-sFbzy7ewP2EDqJV3jeFlAFx7SuxtoBBELWaKAnLdA,30
35
- honeybee_radiance_postprocess-0.4.385.dist-info/RECORD,,
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,,