friction_loss.utils.plugin_dataclasses

 1from dataclasses import dataclass
 2from typing import Optional, List, Union
 3
 4import numpy as np
 5
 6PRECISION = 1e-5
 7
 8
 9@dataclass
10class PolypresInputParameter:
11    name: str  # Parameter name
12    value: Union[float, np.ndarray, str, None]  # Parameter value
13    unit: Optional[str]  # Parameter unit
14
15
16@dataclass
17class TransientData:
18    pressure: Union[List, np.ndarray]  # Pressure points array
19    qo: Union[float, np.ndarray]  # Value oil flow rate
20    qg: Union[float, np.ndarray]  # Value gas flow rate
21    qw: Union[float, np.ndarray]  # Value water flow rate
22    pressure_unit: str  # Pressure unit
23    qo_unit: str  # Unit oil flow rate
24    qg_unit: str  # Unit gas flow rate
25    qw_unit: str  # Unit water flow rate
26
27
28@dataclass
29class ProjectInfo:
30    analyst: str
31    analyst_email: str
32    company: str
33    contractor: str
34    country: str
35    curator: str
36    curator_email: str
37    field: str
38    id: str
39    info_date: str
40    project_name: str
41    well_name: str
42    test_name: str
43
44
45@dataclass
46class Pump:
47    pumpsize: float
48    f_nominal: float
49    f_actual: float
50    q_nominal: float
51    dp_nominal: float
52    k_f: float
53    stages_count: float
54    custom_stages_count: int
55    pump_koeffs: List[float]
56    hp_koeffs: List[float]
57
58    def equality_check(self, other_pump) -> bool:
59        pump_values = np.array([i for i in vars(self).values() if not isinstance(i, list)][:-1])
60        other_pump_values = np.array([i for i in vars(other_pump).values() if not isinstance(i, list)][:-1])
61
62        if (np.allclose(pump_values, other_pump_values, PRECISION) and
63                np.allclose(np.array(self.pump_koeffs), np.array(other_pump.pump_koeffs), PRECISION) and
64                np.allclose(np.array(self.hp_koeffs), np.array(other_pump.hp_koeffs), PRECISION)):
65            return True
66        else:
67            return False
PRECISION = 1e-05
class PolypresInputParameter:
11class PolypresInputParameter:
12    name: str  # Parameter name
13    value: Union[float, np.ndarray, str, None]  # Parameter value
14    unit: Optional[str]  # Parameter unit
PolypresInputParameter( name: str, value: Union[float, numpy.ndarray, str, NoneType], unit: Union[str, NoneType])
name: str
value: Union[float, numpy.ndarray, str, NoneType]
unit: Union[str, NoneType]
class TransientData:
18class TransientData:
19    pressure: Union[List, np.ndarray]  # Pressure points array
20    qo: Union[float, np.ndarray]  # Value oil flow rate
21    qg: Union[float, np.ndarray]  # Value gas flow rate
22    qw: Union[float, np.ndarray]  # Value water flow rate
23    pressure_unit: str  # Pressure unit
24    qo_unit: str  # Unit oil flow rate
25    qg_unit: str  # Unit gas flow rate
26    qw_unit: str  # Unit water flow rate
TransientData( pressure: Union[List, numpy.ndarray], qo: Union[float, numpy.ndarray], qg: Union[float, numpy.ndarray], qw: Union[float, numpy.ndarray], pressure_unit: str, qo_unit: str, qg_unit: str, qw_unit: str)
pressure: Union[List, numpy.ndarray]
qo: Union[float, numpy.ndarray]
qg: Union[float, numpy.ndarray]
qw: Union[float, numpy.ndarray]
pressure_unit: str
qo_unit: str
qg_unit: str
qw_unit: str
class ProjectInfo:
30class ProjectInfo:
31    analyst: str
32    analyst_email: str
33    company: str
34    contractor: str
35    country: str
36    curator: str
37    curator_email: str
38    field: str
39    id: str
40    info_date: str
41    project_name: str
42    well_name: str
43    test_name: str
ProjectInfo( analyst: str, analyst_email: str, company: str, contractor: str, country: str, curator: str, curator_email: str, field: str, id: str, info_date: str, project_name: str, well_name: str, test_name: str)
analyst: str
analyst_email: str
company: str
contractor: str
country: str
curator: str
curator_email: str
field: str
id: str
info_date: str
project_name: str
well_name: str
test_name: str
class Pump:
47class Pump:
48    pumpsize: float
49    f_nominal: float
50    f_actual: float
51    q_nominal: float
52    dp_nominal: float
53    k_f: float
54    stages_count: float
55    custom_stages_count: int
56    pump_koeffs: List[float]
57    hp_koeffs: List[float]
58
59    def equality_check(self, other_pump) -> bool:
60        pump_values = np.array([i for i in vars(self).values() if not isinstance(i, list)][:-1])
61        other_pump_values = np.array([i for i in vars(other_pump).values() if not isinstance(i, list)][:-1])
62
63        if (np.allclose(pump_values, other_pump_values, PRECISION) and
64                np.allclose(np.array(self.pump_koeffs), np.array(other_pump.pump_koeffs), PRECISION) and
65                np.allclose(np.array(self.hp_koeffs), np.array(other_pump.hp_koeffs), PRECISION)):
66            return True
67        else:
68            return False
Pump( pumpsize: float, f_nominal: float, f_actual: float, q_nominal: float, dp_nominal: float, k_f: float, stages_count: float, custom_stages_count: int, pump_koeffs: List[float], hp_koeffs: List[float])
pumpsize: float
f_nominal: float
f_actual: float
q_nominal: float
dp_nominal: float
k_f: float
stages_count: float
custom_stages_count: int
pump_koeffs: List[float]
hp_koeffs: List[float]
def equality_check(self, other_pump) -> bool:
59    def equality_check(self, other_pump) -> bool:
60        pump_values = np.array([i for i in vars(self).values() if not isinstance(i, list)][:-1])
61        other_pump_values = np.array([i for i in vars(other_pump).values() if not isinstance(i, list)][:-1])
62
63        if (np.allclose(pump_values, other_pump_values, PRECISION) and
64                np.allclose(np.array(self.pump_koeffs), np.array(other_pump.pump_koeffs), PRECISION) and
65                np.allclose(np.array(self.hp_koeffs), np.array(other_pump.hp_koeffs), PRECISION)):
66            return True
67        else:
68            return False