From 7e6e6420b87ec7b61e50968e9a1486d88e2086c5 Mon Sep 17 00:00:00 2001 From: Syed Shoaib Abbas <167745469+shoaibdevgourmet@users.noreply.github.com> Date: Thu, 3 Oct 2024 18:12:41 +0500 Subject: [PATCH 1/3] power factor calculator --- electronics/power_factor.py | 83 +++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 electronics/power_factor.py diff --git a/electronics/power_factor.py b/electronics/power_factor.py new file mode 100644 index 000000000000..d0d8ccbbb718 --- /dev/null +++ b/electronics/power_factor.py @@ -0,0 +1,83 @@ +import math + + +def calculate_apparent_power(voltage, current): + """Calculate the apparent power (S) in volt-amperes (VA).""" + try: + return voltage * current + except TypeError: + raise ValueError( + "Invalid input types for voltage or current. Both must be numbers." + ) + + +def calculate_power_factor(real_power, apparent_power): + """Calculate the power factor (PF).""" + try: + if apparent_power == 0: + raise ValueError("Apparent power cannot be zero.") + return real_power / apparent_power + except TypeError: + raise ValueError( + "Invalid input types for real power or apparent power. Both must be numbers." + ) + + +def calculate_reactive_power(real_power, apparent_power): + """Calculate the reactive power (Q) in volt-amperes reactive (VAR).""" + try: + if apparent_power < real_power: + raise ValueError( + "Apparent power must be greater than or equal to real power." + ) + return math.sqrt(apparent_power**2 - real_power**2) + except TypeError: + raise ValueError( + "Invalid input types for real power or apparent power. Both must be numbers." + ) + except ValueError as ve: + raise ValueError(f"Calculation error: {ve}") + + +def calculate_correction_capacitance(reactive_power, voltage, frequency=60): + """Calculate the size of the correction capacitor in microfarads (µF).""" + try: + if voltage == 0: + raise ValueError("Voltage cannot be zero.") + capacitance = (reactive_power * 1_000_000) / ( + 2 * math.pi * frequency * voltage**2 + ) + return capacitance + except TypeError: + raise ValueError( + "Invalid input types for reactive power, voltage, or frequency. They must be numbers." + ) + except ValueError as ve: + raise ValueError(f"Calculation error: {ve}") + + +def main(): + try: + real_power = float(input("Enter real power in watts: ")) + current = float(input("Enter current in amps: ")) + voltage = float(input("Enter voltage in volts: ")) + + apparent_power = calculate_apparent_power(voltage, current) + power_factor = calculate_power_factor(real_power, apparent_power) + reactive_power = calculate_reactive_power(real_power, apparent_power) + correction_capacitance = calculate_correction_capacitance( + reactive_power, voltage + ) + + print(f"\nResults:") + print(f"Power Factor: {power_factor:.4f}") + print(f"Apparent Power: {apparent_power:.0f} VA") + print(f"Reactive Power: {reactive_power:.0f} VAR") + print(f"Correction Capacitance: {correction_capacitance:.3f} µF") + + except ValueError as e: + print(f"Error: {e}") + + +if __name__ == "__main__": + main() From d09163121d9613514ad886c330c077cce3186420 Mon Sep 17 00:00:00 2001 From: Syed Shoaib Abbas <167745469+shoaibdevgourmet@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:42:59 +0500 Subject: [PATCH 2/3] refactor code --- electronics/power_factor.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/electronics/power_factor.py b/electronics/power_factor.py index d0d8ccbbb718..7ea547d7ebdb 100644 --- a/electronics/power_factor.py +++ b/electronics/power_factor.py @@ -6,9 +6,8 @@ def calculate_apparent_power(voltage, current): try: return voltage * current except TypeError: - raise ValueError( - "Invalid input types for voltage or current. Both must be numbers." - ) + error_msg = "Invalid input types for voltage or current. Both must be numbers." + raise ValueError(error_msg) def calculate_power_factor(real_power, apparent_power): @@ -18,9 +17,8 @@ def calculate_power_factor(real_power, apparent_power): raise ValueError("Apparent power cannot be zero.") return real_power / apparent_power except TypeError: - raise ValueError( - "Invalid input types for real power or apparent power. Both must be numbers." - ) + error_msg = "Invalid input types for real power or apparent power. Both must be numbers." + raise ValueError(error_msg) def calculate_reactive_power(real_power, apparent_power): @@ -32,9 +30,8 @@ def calculate_reactive_power(real_power, apparent_power): ) return math.sqrt(apparent_power**2 - real_power**2) except TypeError: - raise ValueError( - "Invalid input types for real power or apparent power. Both must be numbers." - ) + error_msg = "Invalid input types for real power or apparent power. Both must be numbers." + raise ValueError(error_msg) except ValueError as ve: raise ValueError(f"Calculation error: {ve}") @@ -44,14 +41,14 @@ def calculate_correction_capacitance(reactive_power, voltage, frequency=60): try: if voltage == 0: raise ValueError("Voltage cannot be zero.") - capacitance = (reactive_power * 1_000_000) / ( - 2 * math.pi * frequency * voltage**2 + capacitance = ( + (reactive_power * 1_000_000) + / (2 * math.pi * frequency * voltage**2) ) return capacitance except TypeError: - raise ValueError( - "Invalid input types for reactive power, voltage, or frequency. They must be numbers." - ) + error_msg = "Invalid input types for reactive power, voltage, or frequency. They must be numbers." + raise ValueError(error_msg) except ValueError as ve: raise ValueError(f"Calculation error: {ve}") @@ -69,7 +66,7 @@ def main(): reactive_power, voltage ) - print(f"\nResults:") + print("\nResults:") print(f"Power Factor: {power_factor:.4f}") print(f"Apparent Power: {apparent_power:.0f} VA") print(f"Reactive Power: {reactive_power:.0f} VAR") From 451ac39ef82f30bf98f72650483b11e11a35bc14 Mon Sep 17 00:00:00 2001 From: Syed Shoaib Abbas <167745469+shoaibdevgourmet@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:04:37 +0500 Subject: [PATCH 3/3] run overcommit and refactor code --- electronics/power_factor.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/electronics/power_factor.py b/electronics/power_factor.py index 7ea547d7ebdb..ddf23620690c 100644 --- a/electronics/power_factor.py +++ b/electronics/power_factor.py @@ -17,7 +17,10 @@ def calculate_power_factor(real_power, apparent_power): raise ValueError("Apparent power cannot be zero.") return real_power / apparent_power except TypeError: - error_msg = "Invalid input types for real power or apparent power. Both must be numbers." + error_msg = ( + "Invalid input types for real power or apparent power. " + "Both must be numbers." + ) raise ValueError(error_msg) @@ -30,10 +33,14 @@ def calculate_reactive_power(real_power, apparent_power): ) return math.sqrt(apparent_power**2 - real_power**2) except TypeError: - error_msg = "Invalid input types for real power or apparent power. Both must be numbers." + error_msg = ( + "Invalid input types for real power or apparent power. " + "Both must be numbers." + ) raise ValueError(error_msg) except ValueError as ve: - raise ValueError(f"Calculation error: {ve}") + error_msg = f"Calculation error: {ve}" + raise ValueError(error_msg) def calculate_correction_capacitance(reactive_power, voltage, frequency=60): @@ -41,16 +48,19 @@ def calculate_correction_capacitance(reactive_power, voltage, frequency=60): try: if voltage == 0: raise ValueError("Voltage cannot be zero.") - capacitance = ( - (reactive_power * 1_000_000) - / (2 * math.pi * frequency * voltage**2) + capacitance = (reactive_power * 1_000_000) / ( + 2 * math.pi * frequency * voltage**2 ) return capacitance except TypeError: - error_msg = "Invalid input types for reactive power, voltage, or frequency. They must be numbers." + error_msg = ( + "Invalid input types for reactive power, voltage, or " + "frequency. They must be numbers." + ) raise ValueError(error_msg) except ValueError as ve: - raise ValueError(f"Calculation error: {ve}") + error_msg = f"Calculation error: {ve}" + raise ValueError(error_msg) def main():