From 211a11a2f9b5298a33c7771d3a4ee36ac679201f Mon Sep 17 00:00:00 2001 From: Jeff Date: Sun, 28 Dec 2025 23:15:27 -0400 Subject: [PATCH] Updated conductor_size and conductor_ampacity, ready for merge --- jepl/jepl_circuits.py | 227 ++++++++---------------------------------- 1 file changed, 41 insertions(+), 186 deletions(-) diff --git a/jepl/jepl_circuits.py b/jepl/jepl_circuits.py index 5724da0..05cecc5 100644 --- a/jepl/jepl_circuits.py +++ b/jepl/jepl_circuits.py @@ -222,12 +222,11 @@ def conductor_size(current, temp = 75, material = 'cu', code = 'CEC', raceway = return print(load_type + " is not a valid load_type.") if temp == 90: - conductor_current_index = 3 + column = '90C' elif temp == 75: - conductor_current_index = 2 + column = '75C' else: - conductor_current_index = 1 - + column = '60C' ''' Per CEC rules 26-256 and 28-106 Transformer and Motor conductors should be sized 125% of the rated current. @@ -236,156 +235,18 @@ def conductor_size(current, temp = 75, material = 'cu', code = 'CEC', raceway = if load_type in list_125: current = 1.25 * current + # Seclect the proper table if (code == 'CEC'): import Tables.CEC21Tables if (material == 'CU') & (raceway == False): - table = table1 - + df = pd.DataFrame(cec21tables.table1, columns=['size', '60C', '75C', '90C']) elif (material == 'CU') & (raceway == True): - table = table3 + df = pd.DataFrame(cec21tables.table3, columns=['size', '60C', '75C', '90C']) - # Determine the ampacity of the max conductor size - - - - # select the correct code table - if (code == 'CEC'): # CEC Table 1 - - - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - cur.execute('SELECT * FROM "Table1" WHERE "size" = ? ', (max,)) - max_conductor_current = cur.fetchone() - max_current = max_conductor_current[conductor_current_index] - - except sqlite3.OperationalError as e: - print(e) - - current_lookup = current_for_lookup(current,max_current) - current = current_lookup[0] - num_parallel = current_lookup[1] - - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - if temp == 90: - cur.execute('SELECT size FROM "Table1" WHERE "90" > ? ', (current,)) - - elif temp ==75: - cur.execute('SELECT size FROM "Table1" WHERE "75" > ? ', (current,)) - - else: - cur.execute('SELECT size FROM "Table1" WHERE "60" > ? ', (current,)) - conductor_size = cur.fetchone()[0] - - #print(conductor_size) - - except sqlite3.OperationalError as e: - print(e) - - elif (code == 'CEC') & (material == 'CU') & (raceway == True): # CEC Table 2 - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - cur.execute('SELECT * FROM "Table2" WHERE "size" = ? ', (max,)) - max_conductor_current = cur.fetchone() - max_current = max_conductor_current[conductor_current_index] - - except sqlite3.OperationalError as e: - print(e) - - current_lookup = current_for_lookup(current,max_current) - current = current_lookup[0] - num_parallel = current_lookup[1] - - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - if temp == 90: - cur.execute('SELECT size FROM "Table2" WHERE "90" > ? ', (current,)) - - elif temp ==75: - cur.execute('SELECT size FROM "Table2" WHERE "75" > ? ', (current,)) - - else: - cur.execute('SELECT size FROM "Table2" WHERE "60" > ? ', (current,)) - conductor_size = cur.fetchone()[0] - - #print(conductor_size) - - except sqlite3.OperationalError as e: - print(e) - elif (code =='CEC') & (material =='AL') & (raceway == False): # CEC Table 3 - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - cur.execute('SELECT * FROM "Table3" WHERE "size" = ? ', (max,)) - max_conductor_current = cur.fetchone() - max_current = max_conductor_current[conductor_current_index] - - except sqlite3.OperationalError as e: - print(e) - - current_lookup = current_for_lookup(current,max_current) - current = current_lookup[0] - num_parallel = current_lookup[1] - - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - if temp == 90: - cur.execute('SELECT size FROM "Table3" WHERE "90" > ? ', (current,)) - - elif temp ==75: - cur.execute('SELECT size FROM "Table3" WHERE "75" > ? ', (current,)) - - else: - cur.execute('SELECT size FROM "Table3" WHERE "60" > ? ', (current,)) - conductor_size = cur.fetchone()[0] - - #print(conductor_size) - - except sqlite3.OperationalError as e: - print(e) - - - elif (code =='CEC') & (material =='AL') & (raceway == True): # CEC Table 4 - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - cur.execute('SELECT * FROM "Table4" WHERE "size" = ? ', (max,)) - max_conductor_current = cur.fetchone() - max_current = max_conductor_current[conductor_current_index] - - except sqlite3.OperationalError as e: - print(e) - - current_lookup = current_for_lookup(current,max_current) - current = current_lookup[0] - num_parallel = current_lookup[1] - - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - if temp == 90: - cur.execute('SELECT size FROM "Table4" WHERE "90" > ? ', (current,)) - - elif temp ==75: - cur.execute('SELECT size FROM "Table4" WHERE "75" > ? ', (current,)) - - else: - cur.execute('SELECT size FROM "Table4" WHERE "60" > ? ', (current,)) - conductor_size = str(cur.fetchone()[0]) - - #print(conductor_size) - - except sqlite3.OperationalError as e: - print(e) elif (code =='NEC') & (material =='CU'): return (' I haven\'t created this table yet') elif (code =='NEC') & (material =='AL'): @@ -393,6 +254,30 @@ def conductor_size(current, temp = 75, material = 'cu', code = 'CEC', raceway = else: return ('The variables were\'t right, but I\'m a loss to why.') + ''' + Using the correct table, calculate the number of parallel runs needed with the maximum conductor size, + and the resulting wire size. + ''' + + # Determine the ampacity of the max conductor size + max_df = df.loc[df['size'] == max_wire,column] + max_current = max_df.item() + #print(max_current) + + # The current that we will need to + current_lookup = current_for_lookup(current,max_current) + current = current_lookup[0] + num_parallel = current_lookup[1] + + + # Calculate the absolute difference for all values and find the index of the minimum difference + sectioned_df = df.loc[df[column] >= current,column] + + closest_index = sectioned_df.idxmin() + + # Retrieve the nearest value using the found index + conductor_size = df['size'].iloc[closest_index] + return [conductor_size,num_parallel] def conductor_ampacity(conductor, temp = 75, material = 'cu', code = 'CEC', raceway = True, ambient = 30): @@ -413,55 +298,20 @@ def conductor_ampacity(conductor, temp = 75, material = 'cu', code = 'CEC', race ] if temp == 90: - conductor_current_index = 3 + column = '90C' elif temp == 75: - conductor_current_index = 2 + column = '75C' else: - conductor_current_index = 1 + column = '60C' if (code == 'CEC') & (material == 'CU') & (raceway == False): # CEC Table 1 - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - cur.execute('SELECT * FROM "Table1" WHERE "size" = ? ', (conductor,)) - max_conductor_current = cur.fetchone() - conductor_ampacity = max_conductor_current[conductor_current_index] - - except sqlite3.OperationalError as e: - print(e) + df = pd.DataFrame(cec21tables.table1, columns=['size', '60C', '75C', '90C']) elif (code == 'CEC') & (material == 'CU') & (raceway == True): # CEC Table 2 - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - cur.execute('SELECT * FROM "Table2" WHERE "size" = ? ', (conductor,)) - max_conductor_current = cur.fetchone() - conductor_ampacity = max_conductor_current[conductor_current_index] - - except sqlite3.OperationalError as e: - print(e) + df = pd.DataFrame(cec21tables.table2, columns=['size', '60C', '75C', '90C']) elif (code =='CEC') & (material =='AL') & (raceway == False): # CEC Table 3 - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - cur.execute('SELECT * FROM "Table3" WHERE "size" = ? ', (conductor,)) - max_conductor_current = cur.fetchone() - conductor_ampacity = max_conductor_current[conductor_current_index] - - except sqlite3.OperationalError as e: - print(e) - - elif (code =='CEC') & (material =='AL') & (raceway == True): # CEC Table 4 - try: - with sqlite3.connect("jepl-cec21.db") as con: - cur = con.cursor() - cur.execute('SELECT * FROM "Table4" WHERE "size" = ? ', (conductor,)) - max_conductor_current = cur.fetchone() - conductor_ampacity = max_conductor_current[conductor_current_index] - - except sqlite3.OperationalError as e: - print(e) + df = pd.DataFrame(cec21tables.table3, columns=['size', '60C', '75C', '90C']) elif (code =='NEC') & (material =='CU'): return (' I haven\'t created this table yet') @@ -470,6 +320,11 @@ def conductor_ampacity(conductor, temp = 75, material = 'cu', code = 'CEC', race else: return ('The variables were\'t right, but I\'m a loss to why.') + # Determine the ampacity of the conductor size + result_df = df.loc[df['size'] == conductor,column] + conductor_ampacity = result_df.item() + #print(conductor_ampacity) + return conductor_ampacity def bonding_conductor(conductor_ampacity,bus=False,material='cu',code = 'CEC'):