completor 1.1.2__py3-none-any.whl → 1.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- completor/completion.py +14 -3
- completor/constants.py +25 -6
- completor/create_output.py +51 -27
- completor/input_validation.py +58 -9
- completor/prepare_outputs.py +325 -104
- completor/read_casefile.py +125 -53
- completor/utils.py +3 -2
- completor/visualize_well.py +4 -2
- completor/wells.py +6 -4
- {completor-1.1.2.dist-info → completor-1.2.0.dist-info}/METADATA +15 -13
- {completor-1.1.2.dist-info → completor-1.2.0.dist-info}/RECORD +14 -14
- {completor-1.1.2.dist-info → completor-1.2.0.dist-info}/LICENSE +0 -0
- {completor-1.1.2.dist-info → completor-1.2.0.dist-info}/WHEEL +0 -0
- {completor-1.1.2.dist-info → completor-1.2.0.dist-info}/entry_points.txt +0 -0
completor/read_casefile.py
CHANGED
|
@@ -47,8 +47,8 @@ class ReadCasefile:
|
|
|
47
47
|
|
|
48
48
|
This class reads the case/input file of the Completor program.
|
|
49
49
|
It reads the following keywords:
|
|
50
|
-
|
|
51
|
-
INFLOW_CONTROL_DEVICE,
|
|
50
|
+
COMPLETION, SEGMENTLENGTH, JOINTLENGTH, AUTONOMOUS_INFLOW_CONTROL_DEVICE, WELL_SEGMENTS_VALVE,
|
|
51
|
+
INFLOW_CONTROL_DEVICE, DENSITY_DRIVEN, INJECTION_VALVE, DUAL_RATE_CONTROLLED_PRODUCTION, INFLOW_CONTROL_VALVE.
|
|
52
52
|
In the absence of some keywords, the program uses the default values.
|
|
53
53
|
|
|
54
54
|
Attributes:
|
|
@@ -63,8 +63,9 @@ class ReadCasefile:
|
|
|
63
63
|
wsegsicd_table (pd.DataFrame): INFLOW_CONTROL_DEVICE.
|
|
64
64
|
wsegvalv_table (pd.DataFrame): WELL_SEGMENTS_VALVE.
|
|
65
65
|
wsegicv_table (pd.DataFrame): INFLOW_CONTROL_VALVE.
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
wsegdensity_table (pd.DataFrame): DENSITY_DRIVEN.
|
|
67
|
+
wseginjv_table (pd.DataFrame): INJECTION_VALVE.
|
|
68
|
+
wsegdualrcp_table (pd.DataFrame): DUAL_RATE_CONTROLLED_PRODUCTION.
|
|
68
69
|
strict (bool): USE_STRICT. If TRUE it will exit if any lateral is not defined in the case-file. Default to TRUE.
|
|
69
70
|
lat2device (pd.DataFrame): LATERAL_TO_DEVICE.
|
|
70
71
|
gp_perf_devicelayer (bool): GRAVEL_PACKED_PERFORATED_DEVICELAYER. If TRUE all wells with
|
|
@@ -98,8 +99,9 @@ class ReadCasefile:
|
|
|
98
99
|
self.wsegaicd_table = pd.DataFrame()
|
|
99
100
|
self.wsegsicd_table = pd.DataFrame()
|
|
100
101
|
self.wsegvalv_table = pd.DataFrame()
|
|
101
|
-
self.
|
|
102
|
-
self.
|
|
102
|
+
self.wsegdensity_table = pd.DataFrame()
|
|
103
|
+
self.wseginjv_table = pd.DataFrame()
|
|
104
|
+
self.wsegdualrcp_table = pd.DataFrame()
|
|
103
105
|
self.wsegicv_table = pd.DataFrame()
|
|
104
106
|
self.lat2device = pd.DataFrame()
|
|
105
107
|
self.mapfile: pd.DataFrame | str | None = None
|
|
@@ -116,8 +118,9 @@ class ReadCasefile:
|
|
|
116
118
|
self.read_wsegaicd()
|
|
117
119
|
self.read_wsegvalv()
|
|
118
120
|
self.read_wsegsicd()
|
|
119
|
-
self.
|
|
120
|
-
self.
|
|
121
|
+
self.read_wsegdensity()
|
|
122
|
+
self.read_wseginjv()
|
|
123
|
+
self.read_wsegdualrcp()
|
|
121
124
|
self.read_wsegicv()
|
|
122
125
|
self.read_lat2device()
|
|
123
126
|
self.read_minimum_segment_length()
|
|
@@ -155,6 +158,10 @@ class ReadCasefile:
|
|
|
155
158
|
df_temp = input_validation.check_default_non_packer(df_temp)
|
|
156
159
|
# Fix the data types format
|
|
157
160
|
df_temp = input_validation.set_format_completion(df_temp)
|
|
161
|
+
# Fix the Density based
|
|
162
|
+
df_temp = input_validation.set_density_based(df_temp)
|
|
163
|
+
# Fix the Dual RCP
|
|
164
|
+
df_temp = input_validation.set_dualrcp(df_temp)
|
|
158
165
|
# Check overall user inputs on completion
|
|
159
166
|
input_validation.assess_completion(df_temp)
|
|
160
167
|
df_temp = self.read_icv_tubing(df_temp)
|
|
@@ -445,10 +452,14 @@ class ReadCasefile:
|
|
|
445
452
|
Headers.F,
|
|
446
453
|
Headers.AICD_CALIBRATION_FLUID_DENSITY,
|
|
447
454
|
Headers.AICD_FLUID_VISCOSITY,
|
|
455
|
+
Headers.Z,
|
|
448
456
|
]
|
|
449
|
-
|
|
450
|
-
self._create_dataframe_with_columns(header, start_index, end_index)
|
|
451
|
-
|
|
457
|
+
try:
|
|
458
|
+
df_temp = self._create_dataframe_with_columns(header, start_index, end_index)
|
|
459
|
+
except CaseReaderFormatError:
|
|
460
|
+
header.remove(Headers.Z)
|
|
461
|
+
df_temp = self._create_dataframe_with_columns(header, start_index, end_index)
|
|
462
|
+
self.wsegaicd_table = input_validation.set_format_wsegaicd(df_temp)
|
|
452
463
|
device_checks = self.completion_table[
|
|
453
464
|
self.completion_table[Headers.DEVICE_TYPE] == Content.AUTONOMOUS_INFLOW_CONTROL_DEVICE
|
|
454
465
|
][Headers.DEVICE_NUMBER].to_numpy()
|
|
@@ -457,19 +468,25 @@ class ReadCasefile:
|
|
|
457
468
|
f"Not all device in COMPLETION is specified in {Keywords.AUTONOMOUS_INFLOW_CONTROL_DEVICE}"
|
|
458
469
|
)
|
|
459
470
|
|
|
460
|
-
def
|
|
461
|
-
"""Read the
|
|
471
|
+
def read_wsegdensity(self) -> None:
|
|
472
|
+
"""Read the DENSITY keyword in the case file.
|
|
462
473
|
|
|
463
474
|
Raises:
|
|
464
|
-
ValueError: If there are invalid entries in
|
|
465
|
-
CompletorError: If not all device in COMPLETION is specified in
|
|
466
|
-
If
|
|
475
|
+
ValueError: If there are invalid entries in DENSITY.
|
|
476
|
+
CompletorError: If not all device in COMPLETION is specified in DENSITY.
|
|
477
|
+
If DENSITY keyword not defined, when DENSITY is used in the completion.
|
|
467
478
|
"""
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
479
|
+
density_index_start, density_index_end = parse.locate_keyword(self.content, Keywords.DENSITY)
|
|
480
|
+
dar_index_start, dar_index_end = parse.locate_keyword(self.content, Keywords.DENSITY_ACTIVATED_RECOVERY)
|
|
481
|
+
|
|
482
|
+
# Determine which keyword is present
|
|
483
|
+
if density_index_start == density_index_end and dar_index_start == dar_index_end:
|
|
484
|
+
if (
|
|
485
|
+
Content.DENSITY in self.completion_table[Headers.DEVICE_TYPE]
|
|
486
|
+
or Content.DENSITY_ACTIVATED_RECOVERY in self.completion_table[Headers.DEVICE_TYPE]
|
|
487
|
+
):
|
|
471
488
|
raise CompletorError(
|
|
472
|
-
f"{Keywords.
|
|
489
|
+
f"{Keywords.DENSITY} keyword must be defined, if DENSITY is used in the completion."
|
|
473
490
|
)
|
|
474
491
|
else:
|
|
475
492
|
# Table headers
|
|
@@ -485,42 +502,90 @@ class ReadCasefile:
|
|
|
485
502
|
Headers.GAS_HOLDUP_FRACTION_HIGH_CUTOFF,
|
|
486
503
|
]
|
|
487
504
|
|
|
505
|
+
# Get start and end index from correct keyword
|
|
506
|
+
if not density_index_start == density_index_end:
|
|
507
|
+
start_index, end_index = density_index_start, density_index_end
|
|
508
|
+
key = Keywords.DENSITY
|
|
509
|
+
content = Content.DENSITY
|
|
510
|
+
else:
|
|
511
|
+
start_index, end_index = dar_index_start, dar_index_end
|
|
512
|
+
key = Keywords.DENSITY_ACTIVATED_RECOVERY
|
|
513
|
+
content = Content.DENSITY_ACTIVATED_RECOVERY
|
|
488
514
|
# Fix table format
|
|
489
|
-
|
|
490
|
-
self.
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
raise CompletorError(
|
|
498
|
-
f"Not all device in COMPLETION is specified in {Keywords.DENSITY_ACTIVATED_RECOVERY}"
|
|
499
|
-
)
|
|
515
|
+
self.wsegdensity_table = input_validation.set_format_wsegdensity(
|
|
516
|
+
self._create_dataframe_with_columns(header, start_index, end_index)
|
|
517
|
+
)
|
|
518
|
+
device_checks = self.completion_table[self.completion_table[Headers.DEVICE_TYPE] == content][
|
|
519
|
+
Headers.DEVICE_NUMBER
|
|
520
|
+
].to_numpy()
|
|
521
|
+
if not check_contents(device_checks, self.wsegdensity_table[Headers.DEVICE_NUMBER].to_numpy()):
|
|
522
|
+
raise CompletorError(f"Not all device in COMPLETION is specified in {key}")
|
|
500
523
|
|
|
501
|
-
def
|
|
502
|
-
"""Read the
|
|
524
|
+
def read_wseginjv(self) -> None:
|
|
525
|
+
"""Read the INJECTION_VALVE keyword in the case file.
|
|
503
526
|
|
|
504
527
|
Raises:
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
If all devices in COMPLETION are
|
|
528
|
+
CompletorError: If INJECTION_VALVE is not defined and INJV is used in COMPLETION,
|
|
529
|
+
or if the device number is not found.
|
|
530
|
+
If not all devices in COMPLETION are specified in INJECTION_VALVE.
|
|
508
531
|
"""
|
|
509
|
-
start_index, end_index = parse.locate_keyword(self.content, Keywords.
|
|
532
|
+
start_index, end_index = parse.locate_keyword(self.content, Keywords.INJECTION_VALVE)
|
|
510
533
|
if start_index == end_index:
|
|
511
|
-
if Content.
|
|
534
|
+
if Content.INJECTION_VALVE in self.completion_table[Headers.DEVICE_TYPE]:
|
|
535
|
+
raise CompletorError(
|
|
536
|
+
f"{Keywords.INJECTION_VALVE} keyword must be defined, if INJV is used in the completion."
|
|
537
|
+
)
|
|
538
|
+
else:
|
|
539
|
+
# Table headers
|
|
540
|
+
header = [
|
|
541
|
+
Headers.DEVICE_NUMBER,
|
|
542
|
+
Headers.TRIGGER_PARAMETER,
|
|
543
|
+
Headers.TRIGGER_VALUE,
|
|
544
|
+
Headers.FLOW_COEFFICIENT,
|
|
545
|
+
Headers.PRIMARY_FLOW_CROSS_SECTIONAL_AREA,
|
|
546
|
+
Headers.SECONDARY_FLOW_CROSS_SECTIONAL_AREA,
|
|
547
|
+
]
|
|
548
|
+
self.wseginjv_table = input_validation.set_format_wseginjv(
|
|
549
|
+
self._create_dataframe_with_columns(header, start_index, end_index)
|
|
550
|
+
)
|
|
551
|
+
# Check if the device in COMPLETION is exist in INJECTION_VALVE
|
|
552
|
+
device_checks = self.completion_table[
|
|
553
|
+
self.completion_table[Headers.DEVICE_TYPE] == Content.INJECTION_VALVE
|
|
554
|
+
][Headers.DEVICE_NUMBER].to_numpy()
|
|
555
|
+
if not check_contents(device_checks, self.wseginjv_table[Headers.DEVICE_NUMBER].to_numpy()):
|
|
556
|
+
raise CompletorError(f"Not all device in COMPLETION is specified in {Keywords.INJECTION_VALVE}")
|
|
557
|
+
|
|
558
|
+
def read_wsegdualrcp(self) -> None:
|
|
559
|
+
"""Read the DUALRCP keyword in the case file.
|
|
560
|
+
|
|
561
|
+
Raises:
|
|
562
|
+
ValueError: If invalid entries in DUALRCP.
|
|
563
|
+
CompletorError: DUALRCP keyword not defined when DUALRCP is used in completion.
|
|
564
|
+
If all devices in COMPLETION are not specified in DUALRCP.
|
|
565
|
+
"""
|
|
566
|
+
dualrcp_index_start, dualrcp_index_end = parse.locate_keyword(
|
|
567
|
+
self.content, Keywords.DUAL_RATE_CONTROLLED_PRODUCTION
|
|
568
|
+
)
|
|
569
|
+
aicv_index_start, aicv_index_end = parse.locate_keyword(self.content, Keywords.AUTONOMOUS_INFLOW_CONTROL_VALVE)
|
|
570
|
+
|
|
571
|
+
# Determine which keyword is present
|
|
572
|
+
if dualrcp_index_start == dualrcp_index_end and aicv_index_start == aicv_index_end:
|
|
573
|
+
if (
|
|
574
|
+
Content.DUAL_RATE_CONTROLLED_PRODUCTION in self.completion_table[Headers.DEVICE_TYPE]
|
|
575
|
+
or Content.AUTONOMOUS_INFLOW_CONTROL_VALVE in self.completion_table[Headers.DEVICE_TYPE]
|
|
576
|
+
):
|
|
512
577
|
raise CompletorError(
|
|
513
|
-
f"{Keywords.
|
|
514
|
-
"if
|
|
578
|
+
f"{Keywords.DUAL_RATE_CONTROLLED_PRODUCTION} keyword must be defined, "
|
|
579
|
+
"if DUALRCP is used in the completion."
|
|
515
580
|
)
|
|
516
581
|
else:
|
|
517
582
|
# Table headers
|
|
518
583
|
header = [
|
|
519
584
|
Headers.DEVICE_NUMBER,
|
|
520
|
-
Headers.
|
|
521
|
-
Headers.
|
|
522
|
-
Headers.
|
|
523
|
-
Headers.
|
|
585
|
+
Headers.DUALRCP_WATER_CUT,
|
|
586
|
+
Headers.DUALRCP_GAS_HOLDUP_FRACTION,
|
|
587
|
+
Headers.DUALRCP_CALIBRATION_FLUID_DENSITY,
|
|
588
|
+
Headers.DUALRCP_FLUID_VISCOSITY,
|
|
524
589
|
Headers.ALPHA_MAIN,
|
|
525
590
|
Headers.X_MAIN,
|
|
526
591
|
Headers.Y_MAIN,
|
|
@@ -540,18 +605,25 @@ class ReadCasefile:
|
|
|
540
605
|
Headers.E_PILOT,
|
|
541
606
|
Headers.F_PILOT,
|
|
542
607
|
]
|
|
608
|
+
# Get start and end index from correct keyword
|
|
609
|
+
if not dualrcp_index_start == dualrcp_index_end:
|
|
610
|
+
start_index, end_index = dualrcp_index_start, dualrcp_index_end
|
|
611
|
+
key = Keywords.DUAL_RATE_CONTROLLED_PRODUCTION
|
|
612
|
+
content = Content.DUAL_RATE_CONTROLLED_PRODUCTION
|
|
613
|
+
else:
|
|
614
|
+
start_index, end_index = aicv_index_start, aicv_index_end
|
|
615
|
+
key = Keywords.AUTONOMOUS_INFLOW_CONTROL_VALVE
|
|
616
|
+
content = Content.AUTONOMOUS_INFLOW_CONTROL_VALVE
|
|
543
617
|
# Fix table format
|
|
544
|
-
self.
|
|
618
|
+
self.wsegdualrcp_table = input_validation.set_format_wsegdualrcp(
|
|
545
619
|
self._create_dataframe_with_columns(header, start_index, end_index)
|
|
546
620
|
)
|
|
547
|
-
# Check if the device in COMPLETION is exist in
|
|
548
|
-
device_checks = self.completion_table[
|
|
549
|
-
|
|
550
|
-
]
|
|
551
|
-
if not check_contents(device_checks, self.
|
|
552
|
-
raise CompletorError(
|
|
553
|
-
f"Not all devices in COMPLETION are specified in {Keywords.AUTONOMOUS_INFLOW_CONTROL_VALVE}"
|
|
554
|
-
)
|
|
621
|
+
# Check if the device in COMPLETION is exist in DUALRCP
|
|
622
|
+
device_checks = self.completion_table[self.completion_table[Headers.DEVICE_TYPE] == content][
|
|
623
|
+
Headers.DEVICE_NUMBER
|
|
624
|
+
].to_numpy()
|
|
625
|
+
if not check_contents(device_checks, self.wsegdualrcp_table[Headers.DEVICE_NUMBER].to_numpy()):
|
|
626
|
+
raise CompletorError(f"Not all devices in COMPLETION are specified in {key}")
|
|
555
627
|
|
|
556
628
|
def read_wsegicv(self) -> None:
|
|
557
629
|
"""Read INFLOW_CONTROL_VALVE keyword in the case file.
|
completor/utils.py
CHANGED
|
@@ -191,8 +191,9 @@ def get_active_wells(completion_table: pd.DataFrame, gp_perf_devicelayer: bool)
|
|
|
191
191
|
perf_check = completion_table[Headers.DEVICE_TYPE].isin(
|
|
192
192
|
[
|
|
193
193
|
Content.AUTONOMOUS_INFLOW_CONTROL_DEVICE,
|
|
194
|
-
Content.
|
|
195
|
-
Content.
|
|
194
|
+
Content.DUAL_RATE_CONTROLLED_PRODUCTION,
|
|
195
|
+
Content.DENSITY,
|
|
196
|
+
Content.INJECTION_VALVE,
|
|
196
197
|
Content.INFLOW_CONTROL_DEVICE,
|
|
197
198
|
Content.VALVE,
|
|
198
199
|
Content.INFLOW_CONTROL_VALVE,
|
completor/visualize_well.py
CHANGED
|
@@ -46,9 +46,11 @@ def visualize_device(axs: Axes, df_well: pd.DataFrame) -> Axes:
|
|
|
46
46
|
axs.plot(xpar, ypar, "rs-", markevery=[1])
|
|
47
47
|
elif df_device[Headers.DEVICE_TYPE].iloc[idx] == Content.VALVE:
|
|
48
48
|
axs.plot(xpar, ypar, "rv-", markevery=[1])
|
|
49
|
-
elif df_device[Headers.DEVICE_TYPE].iloc[idx] == Content.
|
|
49
|
+
elif df_device[Headers.DEVICE_TYPE].iloc[idx] == Content.DENSITY:
|
|
50
50
|
axs.plot(xpar, ypar, "rP-", markevery=[1])
|
|
51
|
-
elif df_device[Headers.DEVICE_TYPE].iloc[idx] == Content.
|
|
51
|
+
elif df_device[Headers.DEVICE_TYPE].iloc[idx] == Content.INJECTION_VALVE:
|
|
52
|
+
axs.plot(xpar, ypar, "rP-", markevery=[1])
|
|
53
|
+
elif df_device[Headers.DEVICE_TYPE].iloc[idx] == Content.DUAL_RATE_CONTROLLED_PRODUCTION:
|
|
52
54
|
axs.plot(xpar, ypar, "r*-", markevery=[1])
|
|
53
55
|
return axs
|
|
54
56
|
|
completor/wells.py
CHANGED
|
@@ -218,10 +218,12 @@ class Lateral:
|
|
|
218
218
|
df_well = completion.get_device(df_well, case.wsegsicd_table, Content.INFLOW_CONTROL_DEVICE)
|
|
219
219
|
if Content.AUTONOMOUS_INFLOW_CONTROL_DEVICE in active_devices:
|
|
220
220
|
df_well = completion.get_device(df_well, case.wsegaicd_table, Content.AUTONOMOUS_INFLOW_CONTROL_DEVICE)
|
|
221
|
-
if Content.
|
|
222
|
-
df_well = completion.get_device(df_well, case.
|
|
223
|
-
if Content.
|
|
224
|
-
df_well = completion.get_device(df_well, case.
|
|
221
|
+
if Content.DENSITY in active_devices:
|
|
222
|
+
df_well = completion.get_device(df_well, case.wsegdensity_table, Content.DENSITY)
|
|
223
|
+
if Content.INJECTION_VALVE in active_devices:
|
|
224
|
+
df_well = completion.get_device(df_well, case.wseginjv_table, Content.INJECTION_VALVE)
|
|
225
|
+
if Content.DUAL_RATE_CONTROLLED_PRODUCTION in active_devices:
|
|
226
|
+
df_well = completion.get_device(df_well, case.wsegdualrcp_table, Content.DUAL_RATE_CONTROLLED_PRODUCTION)
|
|
225
227
|
if Content.INFLOW_CONTROL_VALVE in active_devices:
|
|
226
228
|
df_well = completion.get_device(df_well, case.wsegicv_table, Content.INFLOW_CONTROL_VALVE)
|
|
227
229
|
return df_well
|
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: completor
|
|
3
|
-
Version: 1.
|
|
4
|
-
Summary: Advanced
|
|
3
|
+
Version: 1.2.0
|
|
4
|
+
Summary: Advanced multi-segmented well completion tool.
|
|
5
5
|
Home-page: https://github.com/equinor/completor
|
|
6
6
|
License: LGPL-3.0-only
|
|
7
7
|
Author: Equinor ASA
|
|
8
8
|
Author-email: opensource@equinor.com
|
|
9
|
-
Requires-Python: >=3.11,<
|
|
9
|
+
Requires-Python: >=3.11,<4.0
|
|
10
10
|
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
|
|
11
11
|
Classifier: Natural Language :: English
|
|
12
12
|
Classifier: Operating System :: OS Independent
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
16
|
Provides-Extra: ert
|
|
16
|
-
|
|
17
|
-
Requires-Dist: ert (
|
|
18
|
-
Requires-Dist: matplotlib (>=3.
|
|
19
|
-
Requires-Dist: numpy (
|
|
20
|
-
Requires-Dist: pandas (>=2.
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist: pytest-env (>=1,<2)
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
17
|
+
Provides-Extra: test
|
|
18
|
+
Requires-Dist: ert (>=12,<13) ; extra == "ert"
|
|
19
|
+
Requires-Dist: matplotlib (>=3.9,<4.0)
|
|
20
|
+
Requires-Dist: numpy (>=1.26,<3.0)
|
|
21
|
+
Requires-Dist: pandas (>=2.2,<3.0)
|
|
22
|
+
Requires-Dist: pytest (>=8.3,<9.0) ; extra == "test"
|
|
23
|
+
Requires-Dist: pytest-env (>=1,<2) ; extra == "test"
|
|
24
|
+
Requires-Dist: pytest-xdist (>=3.6,<4.0) ; extra == "test"
|
|
25
|
+
Requires-Dist: rstcheck-core (>=1.2,<2.0) ; extra == "test"
|
|
26
|
+
Requires-Dist: scipy (>=1.14,<2.0)
|
|
27
|
+
Requires-Dist: tqdm (>=4.66,<5.0)
|
|
26
28
|
Project-URL: Bug Tracker, https://github.com/equinor/completor/issues
|
|
27
29
|
Project-URL: Documentation, https://equinor.github.io/completor
|
|
28
30
|
Project-URL: Repository, https://github.com/equinor/completor
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
completor/__init__.py,sha256=k6amf7jhp7KkBIlaw93-NZITxyZjPSzA5McFAZh8yv8,76
|
|
2
|
-
completor/completion.py,sha256=
|
|
2
|
+
completor/completion.py,sha256=quhQOdQREv8MsHW5amT0sG-84Y12KVdT0eylbKCul3g,31177
|
|
3
3
|
completor/config_jobs/run_completor,sha256=XePKj2xocfGF0XFRqr7sqfpZGrjgWcfaZLHIhVvGFCQ,600
|
|
4
|
-
completor/constants.py,sha256=
|
|
5
|
-
completor/create_output.py,sha256=
|
|
4
|
+
completor/constants.py,sha256=eZPe6cbP8see9f_sJdUkdy6J6HM2eXulgqRCzTCBAqY,13489
|
|
5
|
+
completor/create_output.py,sha256=T0hPnCOns86q2lvRMNuOz8Nz-8zlliYBtxNiiEPMRWs,24101
|
|
6
6
|
completor/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
completor/exceptions/clean_exceptions.py,sha256=uQ2jgGfvUDAoS56JBWh-8ZCPIMB4hvYxLF-snA-_-pg,373
|
|
8
8
|
completor/exceptions/exceptions.py,sha256=eS00mVzmC4gQ7MUyGSknvKotmo2XzNGyp007mhjLMy0,5081
|
|
9
9
|
completor/get_version.py,sha256=LMzybu7m-O203lUSZvyu86J4bMobbjE9A23fWLDlxaM,168
|
|
10
10
|
completor/hook_implementations/jobs.py,sha256=8Ao8UadfJzEY7jWzj6C_OXm18fHmfXrbCB2_jS7KHiU,2180
|
|
11
|
-
completor/input_validation.py,sha256=
|
|
11
|
+
completor/input_validation.py,sha256=F17AWi-qR6cX5_1lEFgtYOMOO0Xo3gTtL2ETM5P_uGE,15022
|
|
12
12
|
completor/launch_args_parser.py,sha256=gb3FcyufZlRnKS3BZkFmgVH1VoSxMD0MbCLsHZKmz4c,1413
|
|
13
13
|
completor/logger.py,sha256=gYDbPL8ca5qT_MqYlDKEMKcSfIXW_59QklX8Gss5b2U,4784
|
|
14
14
|
completor/main.py,sha256=ipARMDXXqPYRtBxYQnlj5MohepwkgrQkX3s2IJEaEcI,9151
|
|
15
15
|
completor/parse.py,sha256=EGlt9CgkrXPqa7woyWQ5t_nh6OWsFrc2SJr8aFr_KsQ,20133
|
|
16
|
-
completor/prepare_outputs.py,sha256=
|
|
17
|
-
completor/read_casefile.py,sha256=
|
|
16
|
+
completor/prepare_outputs.py,sha256=YS6p_kfTw_zXi0jKPwxrx45_54wrUaD0ryuZ2qe_S5Q,82582
|
|
17
|
+
completor/read_casefile.py,sha256=qs39CkpwyNXV4cm0tpMi9NOyehBQKOBWmsCjSrWEauM,37578
|
|
18
18
|
completor/read_schedule.py,sha256=IYyCubOggFGg664h1flTl7MUJhJWyibr6JsptnURjUA,18101
|
|
19
|
-
completor/utils.py,sha256=
|
|
19
|
+
completor/utils.py,sha256=9Qayt7xMsimpoVDo5sL86gVaQBbIOezMBRyMXd3haXw,13598
|
|
20
20
|
completor/visualization.py,sha256=ObxThqIyW3fsvVIupxVsgySFI_54n_Di-HTzFtDMSgo,4580
|
|
21
|
-
completor/visualize_well.py,sha256=
|
|
22
|
-
completor/wells.py,sha256=
|
|
23
|
-
completor-1.
|
|
24
|
-
completor-1.
|
|
25
|
-
completor-1.
|
|
26
|
-
completor-1.
|
|
27
|
-
completor-1.
|
|
21
|
+
completor/visualize_well.py,sha256=HLglSN2ce-u9nklJelqwhSxwwaj7n-aU6o8lUScbiI0,8790
|
|
22
|
+
completor/wells.py,sha256=Q2detK0FxIBgusYkCRmomRIfcScBNvNTYX43GFyAHGw,12246
|
|
23
|
+
completor-1.2.0.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
|
|
24
|
+
completor-1.2.0.dist-info/METADATA,sha256=4C5L62K_4i2YRU-SuQxVlcStnd03iTd0bZzVscKJWTg,7979
|
|
25
|
+
completor-1.2.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
26
|
+
completor-1.2.0.dist-info/entry_points.txt,sha256=co5L2_CC2QQWVdEALeMp-NIC4mx4nRpcLcvpVXMYdeI,106
|
|
27
|
+
completor-1.2.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|