friction_loss.utils.pumps
1import json 2from pathlib import Path 3from typing import Dict 4 5from friction_loss.utils.errors import get_message_changed_default_pump 6from friction_loss.utils.plugin_dataclasses import Pump 7 8PATH_TO_PUMPS_DB = Path.cwd() / 'friction_loss' 9 10 11def get_all_pump_database() -> Dict[str, Pump]: 12 """ 13 The function allows you to obtain a database of all pumps. 14 15 Returns 16 ------- 17 pump_db: dict[str, Pump] 18 keys: names of pumps. 19 values: dataclass with pumps parameters. 20 21 Example: 22 -------- 23 "ALNAS_M3800_A6_1": 24 Pump (pumpsize=102.87, 25 f_nominal=60.0, 26 f_actual=60.0, 27 q_nominal=958.0, 28 head_nominal=8987889.70548, 29 k_f=1.0, 30 stages_count=100.0, 31 custom_stages_count=90, 32 pump_koeffs=[30.0783, -0.0055307, 4.726e-07, 1.3665e-10, -2.0149e-16, -5.4798e-18], 33 hp_koeffs=[0.75759, 0.00016195, -1.8708e-07, 9.3657e-11, -1.766e-14, 1.1046e-18]) 34 """ 35 36 # Считали БД кастомных насосов 37 with open(PATH_TO_PUMPS_DB / "custom_pumps.json", "r") as f: 38 custom_db = json.load(f) 39 40 # Считали БД насосов Полипреса 41 with open(PATH_TO_PUMPS_DB / "pump_database.json", "r") as f: 42 pump_db = json.load(f) 43 44 # Объединили базы данных вместе 45 pump_db.update(custom_db) 46 47 database = {} 48 for name, value in pump_db.items(): 49 database[name] = Pump(**value) 50 51 return database 52 53 54def get_default_pump_database() -> Dict[str, Pump]: 55 """ 56 The function allows you to get the default pump database. 57 58 Returns 59 ------- 60 pump_db: dict[str, Pump] 61 keys: names of pumps. 62 values: dataclass with pumps parameters. 63 """ 64 65 # Считали БД насосов Полипреса 66 with open(PATH_TO_PUMPS_DB / "pump_database.json", "r") as f: 67 pump_db = json.load(f) 68 69 database = {} 70 for name, value in pump_db.items(): 71 database[name] = Pump(**value) 72 73 return database 74 75 76def add_custom_pump(data: Dict[str, Pump]) -> None: 77 """ 78 The function allows you to add custom pumps to custom_pumps.json 79 80 Parameters 81 ---------- 82 data: Pump 83 keys: name of pump. 84 values: Parameters of pump. 85 """ 86 for name, value in data.items(): 87 data[name] = value.__dict__ 88 89 with open(PATH_TO_PUMPS_DB / "custom_pumps.json", "w") as f: 90 json.dump(data, f) 91 92 93def check_pump(name: str, selected_pump: Pump) -> Pump: 94 """ 95 The function processes the user-selected pump. 96 Possible options: 1) Pump from the database is selected - we get the pump from the database by name 97 2) A new pump has been created - add the pump to custom_pumps.json 98 3) A custom pump is selected and the characteristics are changed - update this pump 99 4) Selected a pump from the default database and changed the characteristics - throw an error 100 101 Parameters 102 ---------- 103 name: str 104 Name of pump. 105 selected_pump: Pump 106 dataclass with pumps parameters. 107 108 Returns 109 ------- 110 pump: Pump 111 dataclass with pumps parameters. 112 """ 113 pumps_database = get_all_pump_database() 114 default_pumps_db = get_default_pump_database() 115 116 pump = None 117 # проверка есть ли насос в общей базе данных 118 if name in pumps_database.keys(): 119 # проверка есть ли насос в дефолтной базе данных 120 if name in default_pumps_db.keys(): 121 # проверка что пользователь не поменял парамеры выбранного насоса из дефолтной БД 122 assert selected_pump.equality_check(pumps_database[name]), get_message_changed_default_pump(name) 123 pump = pumps_database[name] 124 125 # значит насос в базе данных кастомных насосов 126 else: 127 # если пользователь поменял параметры, то обновляем насос 128 if not selected_pump.equality_check(pumps_database[name]): 129 add_custom_pump({name: selected_pump}) 130 pump = selected_pump 131 132 # если пользователь создал новый насос, то добавляем его в БД кастомных насосов 133 if name not in pumps_database: 134 add_custom_pump({name: selected_pump}) 135 pump = selected_pump 136 137 return pump
12def get_all_pump_database() -> Dict[str, Pump]: 13 """ 14 The function allows you to obtain a database of all pumps. 15 16 Returns 17 ------- 18 pump_db: dict[str, Pump] 19 keys: names of pumps. 20 values: dataclass with pumps parameters. 21 22 Example: 23 -------- 24 "ALNAS_M3800_A6_1": 25 Pump (pumpsize=102.87, 26 f_nominal=60.0, 27 f_actual=60.0, 28 q_nominal=958.0, 29 head_nominal=8987889.70548, 30 k_f=1.0, 31 stages_count=100.0, 32 custom_stages_count=90, 33 pump_koeffs=[30.0783, -0.0055307, 4.726e-07, 1.3665e-10, -2.0149e-16, -5.4798e-18], 34 hp_koeffs=[0.75759, 0.00016195, -1.8708e-07, 9.3657e-11, -1.766e-14, 1.1046e-18]) 35 """ 36 37 # Считали БД кастомных насосов 38 with open(PATH_TO_PUMPS_DB / "custom_pumps.json", "r") as f: 39 custom_db = json.load(f) 40 41 # Считали БД насосов Полипреса 42 with open(PATH_TO_PUMPS_DB / "pump_database.json", "r") as f: 43 pump_db = json.load(f) 44 45 # Объединили базы данных вместе 46 pump_db.update(custom_db) 47 48 database = {} 49 for name, value in pump_db.items(): 50 database[name] = Pump(**value) 51 52 return database
The function allows you to obtain a database of all pumps.
Returns
pump_db: dict[str, Pump] keys: names of pumps. values: dataclass with pumps parameters.
Example:
"ALNAS_M3800_A6_1": Pump (pumpsize=102.87, f_nominal=60.0, f_actual=60.0, q_nominal=958.0, head_nominal=8987889.70548, k_f=1.0, stages_count=100.0, custom_stages_count=90, pump_koeffs=[30.0783, -0.0055307, 4.726e-07, 1.3665e-10, -2.0149e-16, -5.4798e-18], hp_koeffs=[0.75759, 0.00016195, -1.8708e-07, 9.3657e-11, -1.766e-14, 1.1046e-18])
55def get_default_pump_database() -> Dict[str, Pump]: 56 """ 57 The function allows you to get the default pump database. 58 59 Returns 60 ------- 61 pump_db: dict[str, Pump] 62 keys: names of pumps. 63 values: dataclass with pumps parameters. 64 """ 65 66 # Считали БД насосов Полипреса 67 with open(PATH_TO_PUMPS_DB / "pump_database.json", "r") as f: 68 pump_db = json.load(f) 69 70 database = {} 71 for name, value in pump_db.items(): 72 database[name] = Pump(**value) 73 74 return database
The function allows you to get the default pump database.
Returns
pump_db: dict[str, Pump] keys: names of pumps. values: dataclass with pumps parameters.
77def add_custom_pump(data: Dict[str, Pump]) -> None: 78 """ 79 The function allows you to add custom pumps to custom_pumps.json 80 81 Parameters 82 ---------- 83 data: Pump 84 keys: name of pump. 85 values: Parameters of pump. 86 """ 87 for name, value in data.items(): 88 data[name] = value.__dict__ 89 90 with open(PATH_TO_PUMPS_DB / "custom_pumps.json", "w") as f: 91 json.dump(data, f)
The function allows you to add custom pumps to custom_pumps.json
Parameters
data: Pump keys: name of pump. values: Parameters of pump.
94def check_pump(name: str, selected_pump: Pump) -> Pump: 95 """ 96 The function processes the user-selected pump. 97 Possible options: 1) Pump from the database is selected - we get the pump from the database by name 98 2) A new pump has been created - add the pump to custom_pumps.json 99 3) A custom pump is selected and the characteristics are changed - update this pump 100 4) Selected a pump from the default database and changed the characteristics - throw an error 101 102 Parameters 103 ---------- 104 name: str 105 Name of pump. 106 selected_pump: Pump 107 dataclass with pumps parameters. 108 109 Returns 110 ------- 111 pump: Pump 112 dataclass with pumps parameters. 113 """ 114 pumps_database = get_all_pump_database() 115 default_pumps_db = get_default_pump_database() 116 117 pump = None 118 # проверка есть ли насос в общей базе данных 119 if name in pumps_database.keys(): 120 # проверка есть ли насос в дефолтной базе данных 121 if name in default_pumps_db.keys(): 122 # проверка что пользователь не поменял парамеры выбранного насоса из дефолтной БД 123 assert selected_pump.equality_check(pumps_database[name]), get_message_changed_default_pump(name) 124 pump = pumps_database[name] 125 126 # значит насос в базе данных кастомных насосов 127 else: 128 # если пользователь поменял параметры, то обновляем насос 129 if not selected_pump.equality_check(pumps_database[name]): 130 add_custom_pump({name: selected_pump}) 131 pump = selected_pump 132 133 # если пользователь создал новый насос, то добавляем его в БД кастомных насосов 134 if name not in pumps_database: 135 add_custom_pump({name: selected_pump}) 136 pump = selected_pump 137 138 return pump
The function processes the user-selected pump. Possible options: 1) Pump from the database is selected - we get the pump from the database by name 2) A new pump has been created - add the pump to custom_pumps.json 3) A custom pump is selected and the characteristics are changed - update this pump 4) Selected a pump from the default database and changed the characteristics - throw an error
Parameters
name: str Name of pump. selected_pump: Pump dataclass with pumps parameters.
Returns
pump: Pump dataclass with pumps parameters.