open-fdd 0.1.5__py3-none-any.whl → 0.1.7__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.
Files changed (66) hide show
  1. open_fdd/air_handling_unit/faults/__init__.py +331 -300
  2. open_fdd/air_handling_unit/faults/helper_utils.py +3 -0
  3. open_fdd/air_handling_unit/faults/shared_utils.py +16 -1
  4. open_fdd/air_handling_unit/reports/__init__.py +107 -0
  5. open_fdd/air_handling_unit/reports/fault_report.py +1 -0
  6. open_fdd/tests/ahu/test_ahu_fc1.py +1 -0
  7. open_fdd/tests/ahu/test_ahu_fc16.py +205 -0
  8. {open_fdd-0.1.5.dist-info → open_fdd-0.1.7.dist-info}/METADATA +4 -3
  9. open_fdd-0.1.7.dist-info/RECORD +31 -0
  10. {open_fdd-0.1.5.dist-info → open_fdd-0.1.7.dist-info}/WHEEL +1 -1
  11. open_fdd/air_handling_unit/faults/fault_condition_eight.py +0 -127
  12. open_fdd/air_handling_unit/faults/fault_condition_eleven.py +0 -126
  13. open_fdd/air_handling_unit/faults/fault_condition_fifteen.py +0 -152
  14. open_fdd/air_handling_unit/faults/fault_condition_five.py +0 -123
  15. open_fdd/air_handling_unit/faults/fault_condition_four.py +0 -168
  16. open_fdd/air_handling_unit/faults/fault_condition_fourteen.py +0 -143
  17. open_fdd/air_handling_unit/faults/fault_condition_nine.py +0 -128
  18. open_fdd/air_handling_unit/faults/fault_condition_one.py +0 -112
  19. open_fdd/air_handling_unit/faults/fault_condition_seven.py +0 -114
  20. open_fdd/air_handling_unit/faults/fault_condition_six.py +0 -181
  21. open_fdd/air_handling_unit/faults/fault_condition_ten.py +0 -123
  22. open_fdd/air_handling_unit/faults/fault_condition_thirteen.py +0 -127
  23. open_fdd/air_handling_unit/faults/fault_condition_three.py +0 -113
  24. open_fdd/air_handling_unit/faults/fault_condition_twelve.py +0 -132
  25. open_fdd/air_handling_unit/faults/fault_condition_two.py +0 -113
  26. open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_1.jpg +0 -0
  27. open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_2.jpg +0 -0
  28. open_fdd/air_handling_unit/images/example1.jpg +0 -0
  29. open_fdd/air_handling_unit/images/example2.jpg +0 -0
  30. open_fdd/air_handling_unit/images/fc10_definition.png +0 -0
  31. open_fdd/air_handling_unit/images/fc11_definition.png +0 -0
  32. open_fdd/air_handling_unit/images/fc12_definition.png +0 -0
  33. open_fdd/air_handling_unit/images/fc13_definition.png +0 -0
  34. open_fdd/air_handling_unit/images/fc1_definition.png +0 -0
  35. open_fdd/air_handling_unit/images/fc1_report_screenshot_all.png +0 -0
  36. open_fdd/air_handling_unit/images/fc2_definition.png +0 -0
  37. open_fdd/air_handling_unit/images/fc3_definition.png +0 -0
  38. open_fdd/air_handling_unit/images/fc4_definition.png +0 -0
  39. open_fdd/air_handling_unit/images/fc5_definition.png +0 -0
  40. open_fdd/air_handling_unit/images/fc6_definition.png +0 -0
  41. open_fdd/air_handling_unit/images/fc7_definition.png +0 -0
  42. open_fdd/air_handling_unit/images/fc8_definition.png +0 -0
  43. open_fdd/air_handling_unit/images/fc9_definition.png +0 -0
  44. open_fdd/air_handling_unit/images/latex_generator.py +0 -175
  45. open_fdd/air_handling_unit/images/params.docx +0 -0
  46. open_fdd/air_handling_unit/images/params.pdf +0 -0
  47. open_fdd/air_handling_unit/images/plot_for_repo.png +0 -0
  48. open_fdd/air_handling_unit/reports/base_report.py +0 -47
  49. open_fdd/air_handling_unit/reports/report_fc1.py +0 -115
  50. open_fdd/air_handling_unit/reports/report_fc10.py +0 -126
  51. open_fdd/air_handling_unit/reports/report_fc11.py +0 -128
  52. open_fdd/air_handling_unit/reports/report_fc12.py +0 -126
  53. open_fdd/air_handling_unit/reports/report_fc13.py +0 -126
  54. open_fdd/air_handling_unit/reports/report_fc14.py +0 -124
  55. open_fdd/air_handling_unit/reports/report_fc15.py +0 -124
  56. open_fdd/air_handling_unit/reports/report_fc2.py +0 -119
  57. open_fdd/air_handling_unit/reports/report_fc3.py +0 -119
  58. open_fdd/air_handling_unit/reports/report_fc4.py +0 -148
  59. open_fdd/air_handling_unit/reports/report_fc5.py +0 -132
  60. open_fdd/air_handling_unit/reports/report_fc6.py +0 -156
  61. open_fdd/air_handling_unit/reports/report_fc7.py +0 -126
  62. open_fdd/air_handling_unit/reports/report_fc8.py +0 -118
  63. open_fdd/air_handling_unit/reports/report_fc9.py +0 -120
  64. open_fdd-0.1.5.dist-info/RECORD +0 -83
  65. {open_fdd-0.1.5.dist-info → open_fdd-0.1.7.dist-info}/LICENSE +0 -0
  66. {open_fdd-0.1.5.dist-info → open_fdd-0.1.7.dist-info}/top_level.txt +0 -0
@@ -1,118 +0,0 @@
1
- import matplotlib.pyplot as plt
2
- import pandas as pd
3
- import sys
4
-
5
-
6
- class FaultCodeEightReport:
7
- """Class provides the definitions for Fault Condition 8 Report."""
8
-
9
- def __init__(self, config):
10
- self.sat_col = config["SAT_COL"]
11
- self.mat_col = config["MAT_COL"]
12
- self.supply_vfd_speed_col = config["SUPPLY_VFD_SPEED_COL"]
13
- self.economizer_sig_col = config["ECONOMIZER_SIG_COL"]
14
-
15
- def create_plot(self, df: pd.DataFrame, output_col: str = None):
16
- if output_col is None:
17
- output_col = "fc8_flag"
18
-
19
- fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(25, 8))
20
- fig.suptitle("Fault Conditions 8 Plot")
21
-
22
- ax1.plot(df.index, df[self.sat_col], label="SAT")
23
- ax1.plot(df.index, df[self.mat_col], label="MAT")
24
- ax1.legend(loc="best")
25
- ax1.set_ylabel("AHU Temps °F")
26
-
27
- ax2.plot(df.index, df[output_col], label="Fault", color="k")
28
- ax2.set_xlabel("Date")
29
- ax2.set_ylabel("Fault Flags")
30
- ax2.legend(loc="best")
31
-
32
- plt.tight_layout(rect=[0, 0.03, 1, 0.95])
33
- plt.show()
34
- plt.close()
35
-
36
- def summarize_fault_times(self, df: pd.DataFrame, output_col: str = None) -> dict:
37
- if output_col is None:
38
- output_col = "fc8_flag"
39
-
40
- delta = df.index.to_series().diff()
41
- summary = {
42
- "total_days": round(delta.sum() / pd.Timedelta(days=1), 2),
43
- "total_hours": round(delta.sum() / pd.Timedelta(hours=1)),
44
- "hours_fc8_mode": round(
45
- (delta * df[output_col]).sum() / pd.Timedelta(hours=1)
46
- ),
47
- "percent_true": round(df[output_col].mean() * 100, 2),
48
- "percent_false": round((100 - round(df[output_col].mean() * 100, 2)), 2),
49
- "flag_true_mat": round(
50
- df[self.mat_col].where(df[output_col] == 1).mean(), 2
51
- ),
52
- "flag_true_sat": round(
53
- df[self.sat_col].where(df[output_col] == 1).mean(), 2
54
- ),
55
- "hours_motor_runtime": round(
56
- (delta * df[self.supply_vfd_speed_col].gt(0.01).astype(int)).sum()
57
- / pd.Timedelta(hours=1),
58
- 2,
59
- ),
60
- }
61
-
62
- return summary
63
-
64
- def create_hist_plot(self, df: pd.DataFrame, output_col: str = None):
65
- if output_col is None:
66
- output_col = "fc8_flag"
67
-
68
- df["hour_of_the_day_fc8"] = df.index.hour.where(df[output_col] == 1)
69
-
70
- fig, ax = plt.subplots(tight_layout=True, figsize=(25, 8))
71
- ax.hist(df.hour_of_the_day_fc8.dropna())
72
- ax.set_xlabel("24 Hour Number in Day")
73
- ax.set_ylabel("Frequency")
74
- ax.set_title(f"Hour-Of-Day When Fault Flag 8 is TRUE")
75
- plt.show()
76
- plt.close()
77
-
78
- def display_report_in_ipython(self, df: pd.DataFrame, output_col: str = "fc8_flag"):
79
- print(
80
- "Fault Condition 8: Supply air temperature and mix air temperature should be approximately equal in economizer mode"
81
- )
82
-
83
- self.create_plot(df, output_col)
84
-
85
- summary = self.summarize_fault_times(df, output_col)
86
-
87
- for key, value in summary.items():
88
- formatted_key = key.replace("_", " ")
89
- print(f"{formatted_key}: {value}")
90
- sys.stdout.flush()
91
-
92
- fc_max_faults_found = df[output_col].max()
93
- print("Fault Flag Count: ", fc_max_faults_found)
94
- sys.stdout.flush()
95
-
96
- if fc_max_faults_found != 0:
97
- self.create_hist_plot(df, output_col)
98
-
99
- flag_true_mat = round(df[self.mat_col].where(df[output_col] == 1).mean(), 2)
100
- print("Mix Air Temp Mean When In Fault: ", flag_true_mat)
101
-
102
- flag_true_sat = round(df[self.sat_col].where(df[output_col] == 1).mean(), 2)
103
- print("Supply Air Temp Mean When In Fault: ", flag_true_sat)
104
-
105
- sys.stdout.flush()
106
-
107
- if summary["percent_true"] > 5.0:
108
- print(
109
- "The percent True metric that represents the amount of time for when the fault flag is True is high indicating temperature sensor error or the heating/cooling coils are leaking, potentially creating simultaneous heating/cooling which can be an energy penalty for running the AHU in this fashion. Verify AHU mix/supply temperature sensor calibration in addition to a potential mechanical issue of a leaking valve. A leaking valve can be troubleshot by isolating the valve closed by manual shut-off valves where piping lines enter the AHU coil and then verifying any changes in the AHU discharge air temperature."
110
- )
111
- else:
112
- print(
113
- "The percent True metric that represents the amount of time for when the fault flag is True is low, indicating the AHU components are within calibration for this fault equation."
114
- )
115
-
116
- else:
117
- print("NO FAULTS FOUND - Skipping time-of-day Histogram plot")
118
- sys.stdout.flush()
@@ -1,120 +0,0 @@
1
- import matplotlib.pyplot as plt
2
- import pandas as pd
3
- import sys
4
-
5
-
6
- class FaultCodeNineReport:
7
- """Class provides the definitions for Fault Condition 9 Report."""
8
-
9
- def __init__(self, config):
10
- self.sat_setpoint_col = config["SAT_SETPOINT_COL"]
11
- self.oat_col = config["OAT_COL"]
12
- self.supply_vfd_speed_col = config["SUPPLY_VFD_SPEED_COL"]
13
- self.economizer_sig_col = config["ECONOMIZER_SIG_COL"]
14
-
15
- def create_plot(self, df: pd.DataFrame, output_col: str = None):
16
- if output_col is None:
17
- output_col = "fc9_flag"
18
-
19
- fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(25, 8))
20
- fig.suptitle("Fault Conditions 9 Plot")
21
-
22
- ax1.plot(df.index, df[self.sat_setpoint_col], label="SATSP")
23
- ax1.plot(df.index, df[self.oat_col], label="OAT")
24
- ax1.legend(loc="best")
25
- ax1.set_ylabel("AHU Temps °F")
26
-
27
- ax2.plot(df.index, df[output_col], label="Fault", color="k")
28
- ax2.set_xlabel("Date")
29
- ax2.set_ylabel("Fault Flags")
30
- ax2.legend(loc="best")
31
-
32
- plt.tight_layout(rect=[0, 0.03, 1, 0.95])
33
- plt.show()
34
- plt.close()
35
-
36
- def summarize_fault_times(self, df: pd.DataFrame, output_col: str = None) -> dict:
37
- if output_col is None:
38
- output_col = "fc9_flag"
39
-
40
- delta = df.index.to_series().diff()
41
- summary = {
42
- "total_days": round(delta.sum() / pd.Timedelta(days=1), 2),
43
- "total_hours": round(delta.sum() / pd.Timedelta(hours=1)),
44
- "hours_fc9_mode": round(
45
- (delta * df[output_col]).sum() / pd.Timedelta(hours=1)
46
- ),
47
- "percent_true": round(df[output_col].mean() * 100, 2),
48
- "percent_false": round((100 - round(df[output_col].mean() * 100, 2)), 2),
49
- "flag_true_oat": round(
50
- df[self.oat_col].where(df[output_col] == 1).mean(), 2
51
- ),
52
- "flag_true_satsp": round(
53
- df[self.sat_setpoint_col].where(df[output_col] == 1).mean(), 2
54
- ),
55
- "hours_motor_runtime": round(
56
- (delta * df[self.supply_vfd_speed_col].gt(0.01).astype(int)).sum()
57
- / pd.Timedelta(hours=1),
58
- 2,
59
- ),
60
- }
61
-
62
- return summary
63
-
64
- def create_hist_plot(self, df: pd.DataFrame, output_col: str = None):
65
- if output_col is None:
66
- output_col = "fc9_flag"
67
-
68
- df["hour_of_the_day_fc9"] = df.index.hour.where(df[output_col] == 1)
69
-
70
- fig, ax = plt.subplots(tight_layout=True, figsize=(25, 8))
71
- ax.hist(df.hour_of_the_day_fc9.dropna())
72
- ax.set_xlabel("24 Hour Number in Day")
73
- ax.set_ylabel("Frequency")
74
- ax.set_title(f"Hour-Of-Day When Fault Flag 9 is TRUE")
75
- plt.show()
76
- plt.close()
77
-
78
- def display_report_in_ipython(self, df: pd.DataFrame, output_col: str = "fc9_flag"):
79
- print(
80
- "Fault Condition 9: Outside air temperature too high in free cooling without additional mechanical cooling in economizer mode"
81
- )
82
-
83
- self.create_plot(df, output_col)
84
-
85
- summary = self.summarize_fault_times(df, output_col)
86
-
87
- for key, value in summary.items():
88
- formatted_key = key.replace("_", " ")
89
- print(f"{formatted_key}: {value}")
90
- sys.stdout.flush()
91
-
92
- fc_max_faults_found = df[output_col].max()
93
- print("Fault Flag Count: ", fc_max_faults_found)
94
- sys.stdout.flush()
95
-
96
- if fc_max_faults_found != 0:
97
- self.create_hist_plot(df, output_col)
98
-
99
- flag_true_oat = round(df[self.oat_col].where(df[output_col] == 1).mean(), 2)
100
- print("Outside Air Temp Mean When In Fault: ", flag_true_oat)
101
-
102
- flag_true_satsp = round(
103
- df[self.sat_setpoint_col].where(df[output_col] == 1).mean(), 2
104
- )
105
- print("Supply Air Temp Setpoint Mean When In Fault: ", flag_true_satsp)
106
-
107
- sys.stdout.flush()
108
-
109
- if summary["percent_true"] > 5.0:
110
- print(
111
- "The percent True metric that represents the amount of time for when the fault flag is True is high indicating temperature sensor error or the cooling valve is stuck open or leaking causing overcooling. Trouble shoot a leaking valve by isolating the coil with manual shutoff valves and verify a change in AHU discharge air temperature with the AHU running."
112
- )
113
- else:
114
- print(
115
- "The percent True metric that represents the amount of time for when the fault flag is True is low indicating the AHU components are within calibration for this fault equation."
116
- )
117
-
118
- else:
119
- print("NO FAULTS FOUND - Skipping time-of-day Histogram plot")
120
- sys.stdout.flush()
@@ -1,83 +0,0 @@
1
- open_fdd/__init__.py,sha256=iGj8QTOZJUTE4nNnBiCHXEXsOdV6YvKcGiLrnOusJCg,1411
2
- open_fdd/air_handling_unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- open_fdd/air_handling_unit/faults/__init__.py,sha256=Rq7AfQ7sRWneAfqr4v8R7OwNmLifmmfOH1UaA2iZbRM,90291
4
- open_fdd/air_handling_unit/faults/fault_condition.py,sha256=UN2_k2AZWMDoO4oPAnJW3fvhkHlMkLXZikzU2lXAOuQ,2364
5
- open_fdd/air_handling_unit/faults/fault_condition_eight.py,sha256=nfL66m5toN0fvIjUu02T7AErsTV0rR8kVIErfaqIeic,4603
6
- open_fdd/air_handling_unit/faults/fault_condition_eleven.py,sha256=AgQnxP46-KGI-4Hk55gKfPGhauoxpFppdmrrBv-1kto,4699
7
- open_fdd/air_handling_unit/faults/fault_condition_fifteen.py,sha256=QCn_9FF1p7tqm7qdkyIDOqozP988IeuHzOx0LsmyHAU,5841
8
- open_fdd/air_handling_unit/faults/fault_condition_five.py,sha256=Dy6HlvCnM5-BN0LvFLoQFk8BHyKSxBWMCFC_6Yd0K4I,4574
9
- open_fdd/air_handling_unit/faults/fault_condition_four.py,sha256=os-LIW1Hc1xl6Auna6IJXJFd6CUNboVFwG_A3VWFC8o,6710
10
- open_fdd/air_handling_unit/faults/fault_condition_fourteen.py,sha256=AzcKiK2h3bV5vkbd8ZvqqoaOD372I2CYZHRL1wjHDTo,5480
11
- open_fdd/air_handling_unit/faults/fault_condition_nine.py,sha256=atXgzyHuy0Rf4RAA2EAM_qTnlgERtIEDoXvJzulJ08E,4780
12
- open_fdd/air_handling_unit/faults/fault_condition_one.py,sha256=V2hnTb6FdGTR1Z0IowsR2UdUVzI1nD5EFnaSIADBaEc,4240
13
- open_fdd/air_handling_unit/faults/fault_condition_seven.py,sha256=SKczqGhIkDgyaT5NyyalF5lrc9WFISOQfWh7-PdmVO8,4232
14
- open_fdd/air_handling_unit/faults/fault_condition_six.py,sha256=Ot0SZJIAShs9U5e495n5hvtWvelF4Ycx0SDDsQUviQE,7045
15
- open_fdd/air_handling_unit/faults/fault_condition_ten.py,sha256=Q-EBH6_IuVHespev7NTF2QxbYTFOV8GmfvKVpDj2gQY,4581
16
- open_fdd/air_handling_unit/faults/fault_condition_thirteen.py,sha256=NL_q7fEbTqGoYmvOZocLxHgbc6iCfoBMUvCRNpPVpgs,4718
17
- open_fdd/air_handling_unit/faults/fault_condition_three.py,sha256=cmcIA_QEUjiz5FIYlx9CqnBp7phU4ZopRBkfZpzqGQg,4309
18
- open_fdd/air_handling_unit/faults/fault_condition_twelve.py,sha256=QujZrpRPp-58BL4iTJWmexSrp0WiisInKJIHKe9luyk,5066
19
- open_fdd/air_handling_unit/faults/fault_condition_two.py,sha256=h_psJQHPYBkc8hAK-CbdFx7ySbaJv_XQFS_GxvfM9KE,4305
20
- open_fdd/air_handling_unit/faults/helper_utils.py,sha256=-Bd1mMMLnFmpNPe7eC23kMJxPtazsIyz5P7W6Yqlu4w,12580
21
- open_fdd/air_handling_unit/faults/shared_utils.py,sha256=Kp8ZUBhtrh-jU2Q_bbXTpnbVVUAyacp41tDMknY50i4,2252
22
- open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_1.jpg,sha256=3dHZyEm_nS4p7-acZprIpZyuU65_IJKk2sixJBf7Ans,444019
23
- open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_2.jpg,sha256=kjWCDhRkpxiigl9VJnnMBlETA_FWHZtAn9oqKuQl1M4,392583
24
- open_fdd/air_handling_unit/images/example1.jpg,sha256=3dHZyEm_nS4p7-acZprIpZyuU65_IJKk2sixJBf7Ans,444019
25
- open_fdd/air_handling_unit/images/example2.jpg,sha256=kjWCDhRkpxiigl9VJnnMBlETA_FWHZtAn9oqKuQl1M4,392583
26
- open_fdd/air_handling_unit/images/fc10_definition.png,sha256=wE4tg3BjUDnEfeM1XOYTHAcnl4yUJnkoUrVOipr4Ivo,16603
27
- open_fdd/air_handling_unit/images/fc11_definition.png,sha256=Vp_mZxgPGsB0KsEeazwaI3NcgwvLDBBWzutUh8c2Kcg,14534
28
- open_fdd/air_handling_unit/images/fc12_definition.png,sha256=CZUukCTaQ2DlDRMk-EdZyqXr_Wne-EKUYuYn_ly82Hc,14254
29
- open_fdd/air_handling_unit/images/fc13_definition.png,sha256=qcYnTHtnUwfAaLYFVebcbYtjVSgxSQKqZTi_VwHymgo,16733
30
- open_fdd/air_handling_unit/images/fc1_definition.png,sha256=htGaVcaem2CI47bSq_Y6mBdmwbpUHeaQW2oTm4EREbc,8164
31
- open_fdd/air_handling_unit/images/fc1_report_screenshot_all.png,sha256=U3IhLL2nJ3k-UF-smPd1FPAGnznBxsrbBkj8B3ZtwyM,184473
32
- open_fdd/air_handling_unit/images/fc2_definition.png,sha256=qnFzSrXsj_mwhTq4Zi-NT7kwCTz91HKPGHsh77ov5Fs,9124
33
- open_fdd/air_handling_unit/images/fc3_definition.png,sha256=AE0cecNhMiHHsMBQAPWF-cMnLAWK1A27SASeoNoe76w,9118
34
- open_fdd/air_handling_unit/images/fc4_definition.png,sha256=66NztKUPH0R3nhNgVnxzN3UgMLhE-6mUKxhnwtkRN90,4245
35
- open_fdd/air_handling_unit/images/fc5_definition.png,sha256=xQMxDnStccm8f0KIFL-BpG3yQv4fnl4M9t_9VMVOpWg,14634
36
- open_fdd/air_handling_unit/images/fc6_definition.png,sha256=MPV8QcnSnRRNq465dee5Q0Uw5e2ZV_WoIFBVAvYLCVc,20777
37
- open_fdd/air_handling_unit/images/fc7_definition.png,sha256=O6bsh0kG4sHeWCDSZuBHjDZ3xDFesSY42yifqhWXMMo,15849
38
- open_fdd/air_handling_unit/images/fc8_definition.png,sha256=Cce-_mmZA0QbsbWETwOCr45CJiJLR1vHPQNmB9dQZ6g,19702
39
- open_fdd/air_handling_unit/images/fc9_definition.png,sha256=9r7QPViCQ0LItI4NdJsD7VfZjdA4RUZuh08BzxVUnfU,14913
40
- open_fdd/air_handling_unit/images/latex_generator.py,sha256=9kotpUZjQrECXiB8ewcvYBLMEVvy9-r1-HnbpPb-Xr0,5976
41
- open_fdd/air_handling_unit/images/params.docx,sha256=_mh1G-avi-lsssaW_qH33vGVaYwS_XL_IOQweYpQvAo,157634
42
- open_fdd/air_handling_unit/images/params.pdf,sha256=2rmxh2yxuB7x3Q2Jyq0MnFoTJAQqxwIoxGvzzJirWkU,175678
43
- open_fdd/air_handling_unit/images/plot_for_repo.png,sha256=u4OIzZUyGk6G4o1AusEERUU6aen4vVX-CGPl14P3qkA,651969
44
- open_fdd/air_handling_unit/reports/__init__.py,sha256=tIU1N_3cH7A6tWeoAIsVLLFUlnizIOiMCgMVDeoFGL4,36276
45
- open_fdd/air_handling_unit/reports/base_report.py,sha256=oZX6_qXUjuPEHKpF89DhgpPbAkhHeoo3jpDL30u4njs,1778
46
- open_fdd/air_handling_unit/reports/fault_report.py,sha256=v2yki8kFWsGmHdgY15kbH_mS-8KFGAqtEuHenFn0Ils,1408
47
- open_fdd/air_handling_unit/reports/report_fc1.py,sha256=ZlfTP4Pzv0l0hBHRWmTFMXKWPnuMNW38mHPPD8QW460,4565
48
- open_fdd/air_handling_unit/reports/report_fc10.py,sha256=Dgh0L4A-D-VYqTfVcMwhxdw67R-31c24ydtrpJ-gLyU,5179
49
- open_fdd/air_handling_unit/reports/report_fc11.py,sha256=fLb004y59i_2LegfGlpgEpEzQadqsCWrJPNLZ6obgqg,5197
50
- open_fdd/air_handling_unit/reports/report_fc12.py,sha256=MVjoHul32K0hJCP4WL9bLd6g55HMcKLdxzvPN94AlDA,5090
51
- open_fdd/air_handling_unit/reports/report_fc13.py,sha256=YjU6PBJl2ae_2WD2n-GoRGmwj6BtjQFClcCibHgcJmA,5026
52
- open_fdd/air_handling_unit/reports/report_fc14.py,sha256=j_o3X6BFYhW7IBwGZATQ7afgiXlKmUMGbGY7UuSwfD4,4832
53
- open_fdd/air_handling_unit/reports/report_fc15.py,sha256=Rg4NiheUsCmSxv42s7OFKRD7dweGZxtN83I5iDDzNoo,4831
54
- open_fdd/air_handling_unit/reports/report_fc2.py,sha256=ao_2ZeY10BLJ0GEDMMGAuD-8FbHBCGnIvQg9rF6om_U,4840
55
- open_fdd/air_handling_unit/reports/report_fc3.py,sha256=xyGjwYxJU2kveVJHLzAM3T_MLFlUZNQGBUyJ-YTjAsk,4843
56
- open_fdd/air_handling_unit/reports/report_fc4.py,sha256=0PpPwPnzeUZZybad04IslroBoCcIseDGq5it389wx9s,6052
57
- open_fdd/air_handling_unit/reports/report_fc5.py,sha256=welqsYh9TzIfpbdl3i9pvpaDWTsz_rnFbem6lXvz5K0,5699
58
- open_fdd/air_handling_unit/reports/report_fc6.py,sha256=R-2OONOZS1ZFLkUBv0syrZ7XjrR0TSwI1Wu70opTVeM,6042
59
- open_fdd/air_handling_unit/reports/report_fc7.py,sha256=5j9IAEgmjMqSbpQcStCJZB46TmRPtVSDKnGUutSeVxs,5327
60
- open_fdd/air_handling_unit/reports/report_fc8.py,sha256=3jZPq2piethtqly1faSc8hk0aFCbQe2Y0RMNv3DFzpk,5057
61
- open_fdd/air_handling_unit/reports/report_fc9.py,sha256=hJbYMYnwptVSEI2NVdnV3Ads-h_9Hl4oFD1HDDLZWHQ,4909
62
- open_fdd/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- open_fdd/tests/ahu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- open_fdd/tests/ahu/test_ahu_fc1.py,sha256=ojpdYGZtuIYAKnZ4W9KhxQuoyXnGEI5N7braQXh3kAw,5437
65
- open_fdd/tests/ahu/test_ahu_fc10.py,sha256=niYL7fi6OlgP0wnF8hNh9A07PLzHiRZkyRkrA1zoL2s,4577
66
- open_fdd/tests/ahu/test_ahu_fc11.py,sha256=mdXlGiEMPkPfshf3NN_nJavL74e4HCmkJQMu86aZc6Q,4723
67
- open_fdd/tests/ahu/test_ahu_fc12.py,sha256=5T-XcM6xm9KHrc121uPGC9JWLCYehrAYk0KcbmGgYjw,5848
68
- open_fdd/tests/ahu/test_ahu_fc13.py,sha256=vJlSy4e2WV9hx02P0SiJ75I1DWL2lZ0p7-AWlw97pks,5725
69
- open_fdd/tests/ahu/test_ahu_fc14.py,sha256=MU0LKqIuoQ_dJ0Kij8_A0YyimCMvUwL6IlMwpQhDbqI,8052
70
- open_fdd/tests/ahu/test_ahu_fc15.py,sha256=SIolJ9vnJwnpKfRW2ALugYWySuIiZ9_repWP9fdb5H4,7661
71
- open_fdd/tests/ahu/test_ahu_fc2.py,sha256=CjmO_WUyaSHs17ifCCew3GBJ43nYG55uGL0vHDZpAq8,4736
72
- open_fdd/tests/ahu/test_ahu_fc3.py,sha256=NB6pOXDS-R4P0LNoRN8ItAqhhLnGnGuAHZha32Qw-hE,4658
73
- open_fdd/tests/ahu/test_ahu_fc4.py,sha256=vV8jEnFuNGLfhCoTVz29RsIcoDpDOMWg722G0aBEXaE,6304
74
- open_fdd/tests/ahu/test_ahu_fc5.py,sha256=TpSQTBIF591Q3mVaBeJ6HyqPWhVHmD_gSZNEIFT6yyg,6538
75
- open_fdd/tests/ahu/test_ahu_fc6.py,sha256=66dwv0EBU_ujZK-J9Ki5a3fnXlk17nOwmtKDiQOHdbM,10351
76
- open_fdd/tests/ahu/test_ahu_fc7.py,sha256=sABbw2m7WlAXbsqfDD323vfEfg606ThI0QzQyB-OjFo,2469
77
- open_fdd/tests/ahu/test_ahu_fc8.py,sha256=UZy6BP2PgV1FROUPqMORTx8YnT5ZvqVDhut_Ar81494,4663
78
- open_fdd/tests/ahu/test_ahu_fc9.py,sha256=b-eIzhNzjZUjVNsP0JAHkOgZu-BtDuPeNnblVVm-jU8,4796
79
- open_fdd-0.1.5.dist-info/LICENSE,sha256=eghao_GGx_0gB2Sll3x2vV29knONEzUQKrkaXpX1F7w,1087
80
- open_fdd-0.1.5.dist-info/METADATA,sha256=rQBnlFoVuYXgFtGbTJ7VKWiSI62DHpTK2TOzA3-XqmI,6925
81
- open_fdd-0.1.5.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
82
- open_fdd-0.1.5.dist-info/top_level.txt,sha256=Q7sB6UB2d8Ch1v_xIsTiNegmgcCXPkwkrxK3ug6VEOs,9
83
- open_fdd-0.1.5.dist-info/RECORD,,