open-fdd 0.1.4__py3-none-any.whl → 0.1.6__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 (63) hide show
  1. open_fdd/air_handling_unit/faults/__init__.py +301 -301
  2. open_fdd/air_handling_unit/reports/__init__.py +988 -0
  3. open_fdd/air_handling_unit/reports/fault_report.py +42 -0
  4. open_fdd/tests/ahu/test_ahu_fc16.py +190 -0
  5. {open_fdd-0.1.4.dist-info → open_fdd-0.1.6.dist-info}/METADATA +21 -12
  6. open_fdd-0.1.6.dist-info/RECORD +31 -0
  7. {open_fdd-0.1.4.dist-info → open_fdd-0.1.6.dist-info}/WHEEL +1 -1
  8. open_fdd/air_handling_unit/faults/fault_condition_eight.py +0 -127
  9. open_fdd/air_handling_unit/faults/fault_condition_eleven.py +0 -126
  10. open_fdd/air_handling_unit/faults/fault_condition_fifteen.py +0 -152
  11. open_fdd/air_handling_unit/faults/fault_condition_five.py +0 -123
  12. open_fdd/air_handling_unit/faults/fault_condition_four.py +0 -168
  13. open_fdd/air_handling_unit/faults/fault_condition_fourteen.py +0 -143
  14. open_fdd/air_handling_unit/faults/fault_condition_nine.py +0 -128
  15. open_fdd/air_handling_unit/faults/fault_condition_one.py +0 -112
  16. open_fdd/air_handling_unit/faults/fault_condition_seven.py +0 -114
  17. open_fdd/air_handling_unit/faults/fault_condition_six.py +0 -181
  18. open_fdd/air_handling_unit/faults/fault_condition_ten.py +0 -123
  19. open_fdd/air_handling_unit/faults/fault_condition_thirteen.py +0 -127
  20. open_fdd/air_handling_unit/faults/fault_condition_three.py +0 -113
  21. open_fdd/air_handling_unit/faults/fault_condition_twelve.py +0 -132
  22. open_fdd/air_handling_unit/faults/fault_condition_two.py +0 -113
  23. open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_1.jpg +0 -0
  24. open_fdd/air_handling_unit/images/ahu1_fc1_2024-06_2.jpg +0 -0
  25. open_fdd/air_handling_unit/images/example1.jpg +0 -0
  26. open_fdd/air_handling_unit/images/example2.jpg +0 -0
  27. open_fdd/air_handling_unit/images/fc10_definition.png +0 -0
  28. open_fdd/air_handling_unit/images/fc11_definition.png +0 -0
  29. open_fdd/air_handling_unit/images/fc12_definition.png +0 -0
  30. open_fdd/air_handling_unit/images/fc13_definition.png +0 -0
  31. open_fdd/air_handling_unit/images/fc1_definition.png +0 -0
  32. open_fdd/air_handling_unit/images/fc1_report_screenshot_all.png +0 -0
  33. open_fdd/air_handling_unit/images/fc2_definition.png +0 -0
  34. open_fdd/air_handling_unit/images/fc3_definition.png +0 -0
  35. open_fdd/air_handling_unit/images/fc4_definition.png +0 -0
  36. open_fdd/air_handling_unit/images/fc5_definition.png +0 -0
  37. open_fdd/air_handling_unit/images/fc6_definition.png +0 -0
  38. open_fdd/air_handling_unit/images/fc7_definition.png +0 -0
  39. open_fdd/air_handling_unit/images/fc8_definition.png +0 -0
  40. open_fdd/air_handling_unit/images/fc9_definition.png +0 -0
  41. open_fdd/air_handling_unit/images/latex_generator.py +0 -175
  42. open_fdd/air_handling_unit/images/params.docx +0 -0
  43. open_fdd/air_handling_unit/images/params.pdf +0 -0
  44. open_fdd/air_handling_unit/images/plot_for_repo.png +0 -0
  45. open_fdd/air_handling_unit/reports/base_report.py +0 -47
  46. open_fdd/air_handling_unit/reports/report_fc1.py +0 -115
  47. open_fdd/air_handling_unit/reports/report_fc10.py +0 -126
  48. open_fdd/air_handling_unit/reports/report_fc11.py +0 -128
  49. open_fdd/air_handling_unit/reports/report_fc12.py +0 -126
  50. open_fdd/air_handling_unit/reports/report_fc13.py +0 -126
  51. open_fdd/air_handling_unit/reports/report_fc14.py +0 -124
  52. open_fdd/air_handling_unit/reports/report_fc15.py +0 -124
  53. open_fdd/air_handling_unit/reports/report_fc2.py +0 -119
  54. open_fdd/air_handling_unit/reports/report_fc3.py +0 -119
  55. open_fdd/air_handling_unit/reports/report_fc4.py +0 -148
  56. open_fdd/air_handling_unit/reports/report_fc5.py +0 -132
  57. open_fdd/air_handling_unit/reports/report_fc6.py +0 -156
  58. open_fdd/air_handling_unit/reports/report_fc7.py +0 -126
  59. open_fdd/air_handling_unit/reports/report_fc8.py +0 -118
  60. open_fdd/air_handling_unit/reports/report_fc9.py +0 -120
  61. open_fdd-0.1.4.dist-info/RECORD +0 -82
  62. {open_fdd-0.1.4.dist-info → open_fdd-0.1.6.dist-info}/LICENSE +0 -0
  63. {open_fdd-0.1.4.dist-info → open_fdd-0.1.6.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,82 +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=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- open_fdd/air_handling_unit/reports/base_report.py,sha256=oZX6_qXUjuPEHKpF89DhgpPbAkhHeoo3jpDL30u4njs,1778
46
- open_fdd/air_handling_unit/reports/report_fc1.py,sha256=ZlfTP4Pzv0l0hBHRWmTFMXKWPnuMNW38mHPPD8QW460,4565
47
- open_fdd/air_handling_unit/reports/report_fc10.py,sha256=Dgh0L4A-D-VYqTfVcMwhxdw67R-31c24ydtrpJ-gLyU,5179
48
- open_fdd/air_handling_unit/reports/report_fc11.py,sha256=fLb004y59i_2LegfGlpgEpEzQadqsCWrJPNLZ6obgqg,5197
49
- open_fdd/air_handling_unit/reports/report_fc12.py,sha256=MVjoHul32K0hJCP4WL9bLd6g55HMcKLdxzvPN94AlDA,5090
50
- open_fdd/air_handling_unit/reports/report_fc13.py,sha256=YjU6PBJl2ae_2WD2n-GoRGmwj6BtjQFClcCibHgcJmA,5026
51
- open_fdd/air_handling_unit/reports/report_fc14.py,sha256=j_o3X6BFYhW7IBwGZATQ7afgiXlKmUMGbGY7UuSwfD4,4832
52
- open_fdd/air_handling_unit/reports/report_fc15.py,sha256=Rg4NiheUsCmSxv42s7OFKRD7dweGZxtN83I5iDDzNoo,4831
53
- open_fdd/air_handling_unit/reports/report_fc2.py,sha256=ao_2ZeY10BLJ0GEDMMGAuD-8FbHBCGnIvQg9rF6om_U,4840
54
- open_fdd/air_handling_unit/reports/report_fc3.py,sha256=xyGjwYxJU2kveVJHLzAM3T_MLFlUZNQGBUyJ-YTjAsk,4843
55
- open_fdd/air_handling_unit/reports/report_fc4.py,sha256=0PpPwPnzeUZZybad04IslroBoCcIseDGq5it389wx9s,6052
56
- open_fdd/air_handling_unit/reports/report_fc5.py,sha256=welqsYh9TzIfpbdl3i9pvpaDWTsz_rnFbem6lXvz5K0,5699
57
- open_fdd/air_handling_unit/reports/report_fc6.py,sha256=R-2OONOZS1ZFLkUBv0syrZ7XjrR0TSwI1Wu70opTVeM,6042
58
- open_fdd/air_handling_unit/reports/report_fc7.py,sha256=5j9IAEgmjMqSbpQcStCJZB46TmRPtVSDKnGUutSeVxs,5327
59
- open_fdd/air_handling_unit/reports/report_fc8.py,sha256=3jZPq2piethtqly1faSc8hk0aFCbQe2Y0RMNv3DFzpk,5057
60
- open_fdd/air_handling_unit/reports/report_fc9.py,sha256=hJbYMYnwptVSEI2NVdnV3Ads-h_9Hl4oFD1HDDLZWHQ,4909
61
- open_fdd/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- open_fdd/tests/ahu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- open_fdd/tests/ahu/test_ahu_fc1.py,sha256=ojpdYGZtuIYAKnZ4W9KhxQuoyXnGEI5N7braQXh3kAw,5437
64
- open_fdd/tests/ahu/test_ahu_fc10.py,sha256=niYL7fi6OlgP0wnF8hNh9A07PLzHiRZkyRkrA1zoL2s,4577
65
- open_fdd/tests/ahu/test_ahu_fc11.py,sha256=mdXlGiEMPkPfshf3NN_nJavL74e4HCmkJQMu86aZc6Q,4723
66
- open_fdd/tests/ahu/test_ahu_fc12.py,sha256=5T-XcM6xm9KHrc121uPGC9JWLCYehrAYk0KcbmGgYjw,5848
67
- open_fdd/tests/ahu/test_ahu_fc13.py,sha256=vJlSy4e2WV9hx02P0SiJ75I1DWL2lZ0p7-AWlw97pks,5725
68
- open_fdd/tests/ahu/test_ahu_fc14.py,sha256=MU0LKqIuoQ_dJ0Kij8_A0YyimCMvUwL6IlMwpQhDbqI,8052
69
- open_fdd/tests/ahu/test_ahu_fc15.py,sha256=SIolJ9vnJwnpKfRW2ALugYWySuIiZ9_repWP9fdb5H4,7661
70
- open_fdd/tests/ahu/test_ahu_fc2.py,sha256=CjmO_WUyaSHs17ifCCew3GBJ43nYG55uGL0vHDZpAq8,4736
71
- open_fdd/tests/ahu/test_ahu_fc3.py,sha256=NB6pOXDS-R4P0LNoRN8ItAqhhLnGnGuAHZha32Qw-hE,4658
72
- open_fdd/tests/ahu/test_ahu_fc4.py,sha256=vV8jEnFuNGLfhCoTVz29RsIcoDpDOMWg722G0aBEXaE,6304
73
- open_fdd/tests/ahu/test_ahu_fc5.py,sha256=TpSQTBIF591Q3mVaBeJ6HyqPWhVHmD_gSZNEIFT6yyg,6538
74
- open_fdd/tests/ahu/test_ahu_fc6.py,sha256=66dwv0EBU_ujZK-J9Ki5a3fnXlk17nOwmtKDiQOHdbM,10351
75
- open_fdd/tests/ahu/test_ahu_fc7.py,sha256=sABbw2m7WlAXbsqfDD323vfEfg606ThI0QzQyB-OjFo,2469
76
- open_fdd/tests/ahu/test_ahu_fc8.py,sha256=UZy6BP2PgV1FROUPqMORTx8YnT5ZvqVDhut_Ar81494,4663
77
- open_fdd/tests/ahu/test_ahu_fc9.py,sha256=b-eIzhNzjZUjVNsP0JAHkOgZu-BtDuPeNnblVVm-jU8,4796
78
- open_fdd-0.1.4.dist-info/LICENSE,sha256=eghao_GGx_0gB2Sll3x2vV29knONEzUQKrkaXpX1F7w,1087
79
- open_fdd-0.1.4.dist-info/METADATA,sha256=mnTD5a5-ob9hYjWMbcfxHdB8RAIJ-GOWC33kWtc_JJw,6420
80
- open_fdd-0.1.4.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
81
- open_fdd-0.1.4.dist-info/top_level.txt,sha256=Q7sB6UB2d8Ch1v_xIsTiNegmgcCXPkwkrxK3ug6VEOs,9
82
- open_fdd-0.1.4.dist-info/RECORD,,