-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdoc2.py
174 lines (137 loc) · 6.23 KB
/
doc2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
import streamlit as st
import math
class UnitConverter:
def __init__(self):
pass
def calculate_pre_unit(self, actual, base):
return actual / base if base != 0 else "Base value cannot be zero"
def calculate_actual_from_pre_unit(self, pre_unit, base):
return pre_unit * base
def calculate_base_from_pre_unit(self, pre_unit, actual):
return actual / pre_unit if pre_unit != 0 else "Pre-unit value cannot be zero"
def calculate_power(voltage, current, resistance, conductance, energy, time):
power = None
if voltage and current:
power = voltage * current
elif voltage and resistance:
power = (voltage ** 2) / resistance
elif current and resistance:
power = (current ** 2) * resistance
elif current and conductance:
power = (current ** 2) / conductance
elif energy and time:
power = energy / time
return power
def calculate_rp(voltage, current, power_factor):
if voltage and current and power_factor:
power = voltage * current * power_factor
return power
else:
return None
def calculate_Rp(voltage, current, power_factor):
if voltage and current and power_factor:
power = voltage * current * math.sqrt(1 - power_factor**2)
return power
else:
return None
def calculate_ap(voltage, current, power_factor):
if voltage and current and power_factor:
power = voltage * current
return power
else:
return None
def power_calculator():
st.title('Power Calculator')
selected_param_1 = st.selectbox('Select first parameter', ('V', 'I', 'R', 'G', 'E'))
selected_param_2 = st.selectbox('Select second parameter', ('I', 'R', 'V', 'G', 't'))
input_values = {
'V': None,
'I': None,
'R': None,
'G': None,
'E': None,
't': None
}
if selected_param_1 in input_values:
input_values[selected_param_1] = st.number_input('Enter value for ' + selected_param_1 + ':')
if selected_param_2 in input_values:
input_values[selected_param_2] = st.number_input('Enter value for ' + selected_param_2 + ':')
if st.button('Calculate Power'):
result = calculate_power(input_values.get('V'),
input_values.get('I'),
input_values.get('R'),
input_values.get('G'),
input_values.get('E'),
input_values.get('t'))
if result is not None:
st.write(f"Calculated Power: {result} watts")
else:
st.write("Insufficient input to calculate power.")
def per_unit_calculator():
st.title('Per-unit Calculator')
# Add functionality for per-unit calculator
converter = UnitConverter()
conversion_type = st.selectbox('Select Conversion Type', ('Actual/Base to Pre-unit', 'Pre-unit to Actual', 'Pre-unit to Base'))
if conversion_type == 'Actual/Base to Pre-unit':
actual = st.number_input('Enter Actual Quantity:', value=1)
base = st.number_input('Enter Base Quantity:', value=1)
pre_unit_result = converter.calculate_pre_unit(actual, base)
st.write(f'Pre-unit value is: {pre_unit_result}')
elif conversion_type == 'Pre-unit to Actual':
pre_unit = st.number_input('Enter Pre-unit Quantity:')
base = st.number_input('Enter Base Quantity:', value=1)
actual_result = converter.calculate_actual_from_pre_unit(pre_unit, base)
st.write(f'Actual value is: {actual_result:.2f}')
elif conversion_type == 'Pre-unit to Base':
pre_unit = st.number_input('Enter Pre-unit Quantity:')
actual = st.number_input('Enter Actual Quantity:', value=1)
base_result = converter.calculate_base_from_pre_unit(pre_unit, actual)
st.write(f'Base value is: {base_result:.2f}')
def three_phase_power_calculator():
st.title('Three-Phase Power Calculator')
voltage = st.number_input('Enter line voltage (V):')
current = st.number_input('Enter line current (I):')
power_factor = st.number_input('Enter power factor:')
type = st.selectbox('Select Power Type', ('Three Phase Power','Real Power', 'Reactive Power', 'Apparent Power'))
if type == 'Three Phase Power':
result = math.sqrt(3) * calculate_rp(voltage, current, power_factor)
if result is not None:
st.write(f"Calculated Three Phase Power: {result: .1f} watts")
else:
st.write("Insufficient input to calculate three-phase power.")
elif type == 'Real Power':
result = calculate_rp(voltage, current, power_factor)
if result is not None:
st.write(f"Calculated Real Power: {result: .1f} watts")
else:
st.write("Insufficient input to calculate real power.")
elif type == 'Reactive Power':
result = calculate_Rp(voltage, current, power_factor)
if result is not None:
st.write(f"Calculated Reactive Power: {result: .1f} watts")
else:
st.write("Insufficient input to calculate reactive power.")
elif type == 'Apparent Power':
result = calculate_ap(voltage, current, power_factor)
if result is not None:
st.write(f"Calculated Apparent Power: {result: .1f} watts")
else:
st.write("Insufficient input to calculate apparent power.")
def main():
st.sidebar.title('Calculator Options')
calculator_option = st.sidebar.selectbox('Select Calculator', ('Power Calculator', 'Per-unit Calculator', 'Three-Phase Power Calculator'))
if calculator_option == 'Power Calculator':
power_calculator()
elif calculator_option == 'Per-unit Calculator':
per_unit_calculator()
elif calculator_option == 'Three-Phase Power Calculator':
three_phase_power_calculator()
if __name__ == "__main__":
main()
st.markdown(
'<div style="text-align:center; margin-top: 42px">'
'<a href = "https://github.com/Suneelvijay/" style = "text-decoration: none;" ><p style="font-size: 10px;">Suneelvijay Projects © 2023 .</a></p>'
'<p style="font-size: 10px;">Open Source rights reserved.</p>'
'</div>',
unsafe_allow_html=True
)