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
PATH_TO_PUMPS_DB = WindowsPath('C:/work/floss/friction_loss')
def get_all_pump_database() -> Dict[str, friction_loss.utils.plugin_dataclasses.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])

def get_default_pump_database() -> Dict[str, friction_loss.utils.plugin_dataclasses.Pump]:
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.

def add_custom_pump(data: Dict[str, friction_loss.utils.plugin_dataclasses.Pump]) -> None:
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.

def check_pump( name: str, selected_pump: friction_loss.utils.plugin_dataclasses.Pump) -> friction_loss.utils.plugin_dataclasses.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.