honeybee-radiance-postprocess 0.4.496__py2.py3-none-any.whl → 0.4.498__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/breeam/breeam.py +27 -4
- honeybee_radiance_postprocess/cli/breeam.py +44 -0
- honeybee_radiance_postprocess/cli/leed.py +47 -0
- honeybee_radiance_postprocess/cli/well.py +1 -1
- honeybee_radiance_postprocess/leed/leed.py +21 -0
- honeybee_radiance_postprocess/metrics.py +7 -2
- {honeybee_radiance_postprocess-0.4.496.dist-info → honeybee_radiance_postprocess-0.4.498.dist-info}/METADATA +1 -1
- {honeybee_radiance_postprocess-0.4.496.dist-info → honeybee_radiance_postprocess-0.4.498.dist-info}/RECORD +12 -12
- {honeybee_radiance_postprocess-0.4.496.dist-info → honeybee_radiance_postprocess-0.4.498.dist-info}/LICENSE +0 -0
- {honeybee_radiance_postprocess-0.4.496.dist-info → honeybee_radiance_postprocess-0.4.498.dist-info}/WHEEL +0 -0
- {honeybee_radiance_postprocess-0.4.496.dist-info → honeybee_radiance_postprocess-0.4.498.dist-info}/entry_points.txt +0 -0
- {honeybee_radiance_postprocess-0.4.496.dist-info → honeybee_radiance_postprocess-0.4.498.dist-info}/top_level.txt +0 -0
@@ -396,6 +396,10 @@ def breeam_daylight_assessment_4b(
|
|
396
396
|
metrics_summary['comply'] = True
|
397
397
|
else:
|
398
398
|
metrics_summary['comply'] = False
|
399
|
+
metrics_summary['average-comply'] = True if avg_comply else False
|
400
|
+
metrics_summary['minimum-comply'] = True if minimum_comply else False
|
401
|
+
|
402
|
+
metrics_summary['count'] = grid_info['count']
|
399
403
|
|
400
404
|
type_summary[program_type][grid_info['full_id']].append(metrics_summary)
|
401
405
|
|
@@ -467,12 +471,31 @@ def breeam_daylight_assessment_4b(
|
|
467
471
|
credit_summary.append(_building_type_summary)
|
468
472
|
|
469
473
|
if sub_folder:
|
470
|
-
|
471
|
-
|
474
|
+
sub_folder = Path(sub_folder)
|
475
|
+
sub_folder.mkdir(parents=True, exist_ok=True)
|
472
476
|
|
473
|
-
credit_summary_file =
|
477
|
+
credit_summary_file = sub_folder.joinpath('summary.json')
|
474
478
|
credit_summary_file.write_text(json.dumps(credit_summary, indent=2))
|
475
|
-
program_summary_file =
|
479
|
+
program_summary_file = sub_folder.joinpath('program_summary.json')
|
476
480
|
program_summary_file.write_text(json.dumps(program_summary, indent=2))
|
477
481
|
|
482
|
+
pf_folder = sub_folder.joinpath('pass_fail')
|
483
|
+
pf_folder.mkdir(parents=True, exist_ok=True)
|
484
|
+
grids_info_file = pf_folder.joinpath('grids_info.json')
|
485
|
+
grids_info_file.write_text(json.dumps(grids_info, indent=2))
|
486
|
+
for program_type, grid_summary in type_summary.items():
|
487
|
+
for grid_id, metrics_list in grid_summary.items():
|
488
|
+
fill_value = 0
|
489
|
+
for metric in metrics_list:
|
490
|
+
if metric['comply']:
|
491
|
+
fill_value = 3
|
492
|
+
break
|
493
|
+
elif metric['average-comply']:
|
494
|
+
fill_value = 2
|
495
|
+
elif metric['minimum-comply']:
|
496
|
+
fill_value = 1
|
497
|
+
pf_file = pf_folder.joinpath(f'{grid_id}.pf')
|
498
|
+
pf_array = np.full(metric['count'], fill_value)
|
499
|
+
np.savetxt(pf_file, pf_array, fmt='%d')
|
500
|
+
|
478
501
|
return credit_summary, program_summary
|
@@ -2,8 +2,14 @@
|
|
2
2
|
import sys
|
3
3
|
import logging
|
4
4
|
from pathlib import Path
|
5
|
+
import os
|
6
|
+
import json
|
5
7
|
import click
|
6
8
|
|
9
|
+
from ladybug.color import Color
|
10
|
+
from ladybug.datatype.generic import GenericType
|
11
|
+
from ladybug.legend import LegendParameters
|
12
|
+
|
7
13
|
from honeybee_radiance_postprocess.breeam.breeam import breeam_daylight_assessment_4b
|
8
14
|
|
9
15
|
_logger = logging.getLogger(__name__)
|
@@ -45,3 +51,41 @@ def breeam_4b(
|
|
45
51
|
sys.exit(1)
|
46
52
|
else:
|
47
53
|
sys.exit(0)
|
54
|
+
|
55
|
+
|
56
|
+
@breeam.command('breeam-4b-vis-metadata')
|
57
|
+
@click.option(
|
58
|
+
'--output-folder', '-o', help='Output folder for vis metadata files.',
|
59
|
+
type=click.Path(exists=False, file_okay=False, dir_okay=True, resolve_path=True),
|
60
|
+
default='visualization', show_default=True
|
61
|
+
)
|
62
|
+
def breeam_4b_vis(output_folder):
|
63
|
+
"""Write visualization metadata files for BREEAM 4b."""
|
64
|
+
colors = [Color(220, 0, 0), Color(220, 110, 25), Color(255, 190, 0), Color(0, 220, 0)]
|
65
|
+
pass_fail_lpar = \
|
66
|
+
LegendParameters(min=0, max=3, colors=colors, segment_count=4, title='Pass/Fail')
|
67
|
+
pass_fail_lpar.ordinal_dictionary = {
|
68
|
+
0: 'Fail', 1: 'Min. illuminance only', 2: 'Avg. illuminance only', 3: 'Pass'}
|
69
|
+
|
70
|
+
metric_info_dict = {
|
71
|
+
'pass_fail': {
|
72
|
+
'type': 'VisualizationMetaData',
|
73
|
+
'data_type': GenericType('Pass/Fail', '').to_dict(),
|
74
|
+
'unit': '',
|
75
|
+
'legend_parameters': pass_fail_lpar.to_dict()
|
76
|
+
}
|
77
|
+
}
|
78
|
+
try:
|
79
|
+
if not os.path.exists(output_folder):
|
80
|
+
os.mkdir(output_folder)
|
81
|
+
for metric, data in metric_info_dict.items():
|
82
|
+
if not os.path.exists(os.path.join(output_folder, metric)):
|
83
|
+
os.mkdir(os.path.join(output_folder, metric))
|
84
|
+
file_path = os.path.join(output_folder, metric, 'vis_metadata.json')
|
85
|
+
with open(file_path, 'w') as fp:
|
86
|
+
json.dump(data, fp, indent=4)
|
87
|
+
except Exception:
|
88
|
+
_logger.exception('Failed to write the visualization metadata files.')
|
89
|
+
sys.exit(1)
|
90
|
+
else:
|
91
|
+
sys.exit(0)
|
@@ -5,6 +5,10 @@ import logging
|
|
5
5
|
import os
|
6
6
|
import click
|
7
7
|
|
8
|
+
from ladybug.color import Color
|
9
|
+
from ladybug.datatype.generic import GenericType
|
10
|
+
from ladybug.legend import LegendParameters
|
11
|
+
|
8
12
|
from ..leed.leed import leed_option_one
|
9
13
|
from ..results.annual_daylight import AnnualDaylight
|
10
14
|
|
@@ -94,3 +98,46 @@ def daylight_option_one(
|
|
94
98
|
sys.exit(1)
|
95
99
|
else:
|
96
100
|
sys.exit(0)
|
101
|
+
|
102
|
+
|
103
|
+
@leed.command('leed-daylight-option-one-vis-metadata')
|
104
|
+
@click.option(
|
105
|
+
'--output-folder', '-o', help='Output folder for vis metadata files.',
|
106
|
+
type=click.Path(exists=False, file_okay=False, dir_okay=True, resolve_path=True),
|
107
|
+
default='visualization', show_default=True
|
108
|
+
)
|
109
|
+
def leed_daylight_optione_one_vis(output_folder):
|
110
|
+
"""Write visualization metadata files for LEED Daylight Option I."""
|
111
|
+
colors = [Color(220, 0, 0), Color(0, 220, 0)]
|
112
|
+
pass_fail_lpar = \
|
113
|
+
LegendParameters(min=0, max=1, colors=colors, segment_count=2, title='Pass/Fail')
|
114
|
+
pass_fail_lpar.ordinal_dictionary = {0: "Fail", 1: "Pass"}
|
115
|
+
|
116
|
+
metric_info_dict = {
|
117
|
+
'DA': {
|
118
|
+
'type': 'VisualizationMetaData',
|
119
|
+
'data_type': GenericType('DA300,50%', '').to_dict(),
|
120
|
+
'unit': '',
|
121
|
+
'legend_parameters': pass_fail_lpar.to_dict()
|
122
|
+
},
|
123
|
+
'ASE': {
|
124
|
+
'type': 'VisualizationMetaData',
|
125
|
+
'data_type': GenericType('ASE1000,250hrs', '').to_dict(),
|
126
|
+
'unit': '',
|
127
|
+
'legend_parameters': pass_fail_lpar.to_dict()
|
128
|
+
}
|
129
|
+
}
|
130
|
+
try:
|
131
|
+
if not os.path.exists(output_folder):
|
132
|
+
os.mkdir(output_folder)
|
133
|
+
for metric, data in metric_info_dict.items():
|
134
|
+
if not os.path.exists(os.path.join(output_folder, metric)):
|
135
|
+
os.mkdir(os.path.join(output_folder, metric))
|
136
|
+
file_path = os.path.join(output_folder, metric, 'vis_metadata.json')
|
137
|
+
with open(file_path, 'w') as fp:
|
138
|
+
json.dump(data, fp, indent=4)
|
139
|
+
except Exception:
|
140
|
+
_logger.exception('Failed to write the visualization metadata files.')
|
141
|
+
sys.exit(1)
|
142
|
+
else:
|
143
|
+
sys.exit(0)
|
@@ -740,6 +740,27 @@ def leed_option_one(
|
|
740
740
|
folder.joinpath('states_schedule_err.json')
|
741
741
|
states_schedule_err_file.write_text(json.dumps(fail_to_comply))
|
742
742
|
|
743
|
+
pf_folder = folder.joinpath('pass_fail')
|
744
|
+
pf_folder.mkdir(parents=True, exist_ok=True)
|
745
|
+
for pass_sda_grid, pass_ase_grid, grid_info in zip(
|
746
|
+
pass_sda_grids, pass_ase_grids, grids_info):
|
747
|
+
grid_id = grid_info['full_id']
|
748
|
+
da_pf_folder = pf_folder.joinpath('DA')
|
749
|
+
da_pf_folder.mkdir(parents=True, exist_ok=True)
|
750
|
+
da_pf_file = da_pf_folder.joinpath(f'{grid_id}.pf')
|
751
|
+
pass_sda_grid = pass_sda_grid.astype(int)
|
752
|
+
np.savetxt(da_pf_file, pass_sda_grid, fmt='%d')
|
753
|
+
grids_info_file = da_pf_folder.joinpath('grids_info.json')
|
754
|
+
grids_info_file.write_text(json.dumps(grids_info, indent=2))
|
755
|
+
|
756
|
+
ase_pf_folder = pf_folder.joinpath('ASE')
|
757
|
+
ase_pf_folder.mkdir(parents=True, exist_ok=True)
|
758
|
+
ase_pf_file = ase_pf_folder.joinpath(f'{grid_id}.pf')
|
759
|
+
pass_ase_grid = pass_ase_grid.astype(int)
|
760
|
+
np.savetxt(ase_pf_file, pass_ase_grid, fmt='%d')
|
761
|
+
grids_info_file = ase_pf_folder.joinpath('grids_info.json')
|
762
|
+
grids_info_file.write_text(json.dumps(grids_info, indent=2))
|
763
|
+
|
743
764
|
return (summary, summary_grid, da_grids, hours_above, states_schedule,
|
744
765
|
fail_to_comply, grids_info)
|
745
766
|
|
@@ -295,11 +295,16 @@ def ase_array2d(
|
|
295
295
|
Defaults to 1000.
|
296
296
|
|
297
297
|
Returns:
|
298
|
-
A
|
298
|
+
A Tuple with two values.
|
299
|
+
|
300
|
+
- ase: NumPy float of the ASE as a percentage (decimal).
|
301
|
+
|
302
|
+
- h_above: 1D NumPy array of the number of hours above the direct
|
303
|
+
threshold.
|
299
304
|
"""
|
300
305
|
check_array_dim(array, 2)
|
301
306
|
h_above = (array > direct_threshold).sum(axis=1)
|
302
|
-
ase = (h_above
|
307
|
+
ase = (h_above >= occ_hours).sum() / array.shape[0] * 100
|
303
308
|
|
304
309
|
return ase, h_above
|
305
310
|
|
@@ -8,19 +8,19 @@ honeybee_radiance_postprocess/dynamic.py,sha256=RPJh2SsjASYJCsG5QRkazVCvzWjzMxm9
|
|
8
8
|
honeybee_radiance_postprocess/electriclight.py,sha256=E7uhq7-YtZ02F9a1FbEdrXnxmYJNOFnfLF0Yw3JLQ-g,732
|
9
9
|
honeybee_radiance_postprocess/en17037.py,sha256=h3W1ewnVsLSBamArowMkQKYaJfpKV8updJxQuTkB31k,10800
|
10
10
|
honeybee_radiance_postprocess/helper.py,sha256=qz5kaJxzy1tGBfVYYXc2cEToOCoj0YLOtwjr3LVI3YU,9000
|
11
|
-
honeybee_radiance_postprocess/metrics.py,sha256=
|
11
|
+
honeybee_radiance_postprocess/metrics.py,sha256=yrUbdUfqQHWr2lGPhG9BRtG7eHbEaOrrjH9kAkL-6RA,14180
|
12
12
|
honeybee_radiance_postprocess/reader.py,sha256=p4A91amyCI16lRRn0bhZdInsg-qJV0Jas3v4YVhRx-4,2674
|
13
13
|
honeybee_radiance_postprocess/type_hints.py,sha256=4R0kZgacQrqzoh8Tq7f8MVzUDzynV-C_jlh80UV6GPE,1122
|
14
14
|
honeybee_radiance_postprocess/util.py,sha256=uxqop4TsUMp8l8iLQf784NJINprHCgj00GZHvTth1C0,5603
|
15
15
|
honeybee_radiance_postprocess/vis_metadata.py,sha256=7ywIgdiuNKcctxifhpy7-Q2oaSX2ngQBeA0Kh7q1Gg0,1780
|
16
16
|
honeybee_radiance_postprocess/breeam/__init__.py,sha256=kQXElEqFnLGNnrMSpA51XDHoqBup849FHeAqWASIy6w,45
|
17
|
-
honeybee_radiance_postprocess/breeam/breeam.py,sha256=
|
17
|
+
honeybee_radiance_postprocess/breeam/breeam.py,sha256=0krsh8gIRpTTSi86GnAIpCIYkvWy0bi6WwJjz-co53o,18279
|
18
18
|
honeybee_radiance_postprocess/cli/__init__.py,sha256=_mYHnIOpH0qJ4QK56SB3qUT2Duuts2GR2U_0t_uE-2s,958
|
19
19
|
honeybee_radiance_postprocess/cli/abnt.py,sha256=RmEjhxdEK6Uks3S10rQs6n8cup9qv036qRwh_wj1taA,15705
|
20
|
-
honeybee_radiance_postprocess/cli/breeam.py,sha256
|
20
|
+
honeybee_radiance_postprocess/cli/breeam.py,sha256=-mkQDUgFksfPiZwMgbp4i-qh2PYzl-hGc7LFmsVpS90,3144
|
21
21
|
honeybee_radiance_postprocess/cli/datacollection.py,sha256=Wb3UX03uW4OUZP7jWHftKfdf3aO_FSXjrnrziR3taf0,4541
|
22
22
|
honeybee_radiance_postprocess/cli/grid.py,sha256=gqnU3-HdggWCUg9mA1RLZJYHM7tH0v6r2E_X2SSkAig,11256
|
23
|
-
honeybee_radiance_postprocess/cli/leed.py,sha256=
|
23
|
+
honeybee_radiance_postprocess/cli/leed.py,sha256=vup_tVcSnSO5R7U_WPVDAhtSSRrPzTUgV4j9lyxvxEk,5546
|
24
24
|
honeybee_radiance_postprocess/cli/merge.py,sha256=oOqqud3VSo-3f3coDoUILcp78OI4DKxXLWCS1bi3PC4,5752
|
25
25
|
honeybee_radiance_postprocess/cli/mtxop.py,sha256=UZJnjNpPjDmShy1-Mxos4H2vTUqk_yP3ZyaC1_LLFeI,5015
|
26
26
|
honeybee_radiance_postprocess/cli/postprocess.py,sha256=ZN7G79gDq3Dag2vUwliFWxxZp-gk3ON2sIm9RSwCXDw,39317
|
@@ -29,12 +29,12 @@ honeybee_radiance_postprocess/cli/translate.py,sha256=rwUjjDK_Ttjen4ooAMvugyDN5x
|
|
29
29
|
honeybee_radiance_postprocess/cli/two_phase.py,sha256=xA6ayPv26DM5fuMkLhBMYGklf_j5ymowmncwJGXRgo8,7034
|
30
30
|
honeybee_radiance_postprocess/cli/util.py,sha256=Be9cGmYhcV2W37ma6SgQPCWCpWLLLlroxRYN_l58kY0,4077
|
31
31
|
honeybee_radiance_postprocess/cli/viewfactor.py,sha256=kU36YRzLya5PReYREjTfw3zOcWKHYZjVlVclyuR7Cqk,5245
|
32
|
-
honeybee_radiance_postprocess/cli/well.py,sha256=
|
32
|
+
honeybee_radiance_postprocess/cli/well.py,sha256=wWz-aWon4E_tLar0mepolW8WJdk6hF869wZPZSkbNrE,3772
|
33
33
|
honeybee_radiance_postprocess/ies/__init__.py,sha256=kQXElEqFnLGNnrMSpA51XDHoqBup849FHeAqWASIy6w,45
|
34
34
|
honeybee_radiance_postprocess/ies/lm.py,sha256=6f1LDiAWGEX7IvU8OavGC6POlXpgpYp_QFBCHhowo0s,9370
|
35
35
|
honeybee_radiance_postprocess/ies/lm_schedule.py,sha256=ci58GXq2PntJ4yNUdI_x4UCRmq6KrLes-u7GeboX058,9954
|
36
36
|
honeybee_radiance_postprocess/leed/__init__.py,sha256=kQXElEqFnLGNnrMSpA51XDHoqBup849FHeAqWASIy6w,45
|
37
|
-
honeybee_radiance_postprocess/leed/leed.py,sha256
|
37
|
+
honeybee_radiance_postprocess/leed/leed.py,sha256=-oHi5dxPeJQaWBL7BKyK_ZxxMehQuoVcgQyWMQdq8EA,35383
|
38
38
|
honeybee_radiance_postprocess/leed/leed_schedule.py,sha256=s3by1sv1DtOlCawvaMvnIDvEo5D8ATEJvWQ_rEeJIHg,9956
|
39
39
|
honeybee_radiance_postprocess/results/__init__.py,sha256=1agBQbfT4Tf8KqSZzlfKYX8MeZryY4jJ1KB4HWqaDDk,182
|
40
40
|
honeybee_radiance_postprocess/results/annual_daylight.py,sha256=11d4J1iIuITKuoWyWa-2_2WdrHYBULC0YP-mWBWi4JQ,34724
|
@@ -42,9 +42,9 @@ honeybee_radiance_postprocess/results/annual_irradiance.py,sha256=5zwrr4MNeHUebb
|
|
42
42
|
honeybee_radiance_postprocess/results/results.py,sha256=8wpxu6HBnrJXRoTkI7ucNuzhVmNKw1Z2zPP6wzk7ULQ,55236
|
43
43
|
honeybee_radiance_postprocess/well/__init__.py,sha256=kQXElEqFnLGNnrMSpA51XDHoqBup849FHeAqWASIy6w,45
|
44
44
|
honeybee_radiance_postprocess/well/well.py,sha256=Fs81hs5e2UaVo2hlbHiRsxiSQHfSMvCt6ZT1a4psF9E,22350
|
45
|
-
honeybee_radiance_postprocess-0.4.
|
46
|
-
honeybee_radiance_postprocess-0.4.
|
47
|
-
honeybee_radiance_postprocess-0.4.
|
48
|
-
honeybee_radiance_postprocess-0.4.
|
49
|
-
honeybee_radiance_postprocess-0.4.
|
50
|
-
honeybee_radiance_postprocess-0.4.
|
45
|
+
honeybee_radiance_postprocess-0.4.498.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
46
|
+
honeybee_radiance_postprocess-0.4.498.dist-info/METADATA,sha256=Q_ZOGRSPF9lW9nW6RDHk9HyFY5WKvHQ06c-oqRh3doM,2238
|
47
|
+
honeybee_radiance_postprocess-0.4.498.dist-info/WHEEL,sha256=AHX6tWk3qWuce7vKLrj7lnulVHEdWoltgauo8bgCXgU,109
|
48
|
+
honeybee_radiance_postprocess-0.4.498.dist-info/entry_points.txt,sha256=gFtVPx6UItXt27GfEZZO00eOZChJJEL6JwGSAB_O3rs,96
|
49
|
+
honeybee_radiance_postprocess-0.4.498.dist-info/top_level.txt,sha256=4-sFbzy7ewP2EDqJV3jeFlAFx7SuxtoBBELWaKAnLdA,30
|
50
|
+
honeybee_radiance_postprocess-0.4.498.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|