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.
@@ -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
- SCHEDULE_FILE, OUT_FILE, COMPLETION, SEGMENTLENGTH, JOINTLENGTH AUTONOMOUS_INFLOW_CONTROL_DEVICE, WELL_SEGMENTS_VALVE,
51
- INFLOW_CONTROL_DEVICE, DENSITY_ACTIVATED_RECOVERY, AUTONOMOUS_INFLOW_CONTROL_VALVE, INFLOW_CONTROL_VALVE, PVTFILE, PVTTABLE.
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
- wsegdar_table (pd.DataFrame): DENSITY_ACTIVATED_RECOVERY.
67
- wsegaicv_table (pd.DataFrame): AUTONOMOUS_INFLOW_CONTROL_VALVE.
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.wsegdar_table = pd.DataFrame()
102
- self.wsegaicv_table = pd.DataFrame()
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.read_wsegdar()
120
- self.read_wsegaicv()
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
- self.wsegaicd_table = input_validation.set_format_wsegaicd(
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 read_wsegdar(self) -> None:
461
- """Read the DENSITY_ACTIVATED_RECOVERY keyword in the case file.
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 DENSITY_ACTIVATED_RECOVERY.
465
- CompletorError: If not all device in COMPLETION is specified in DENSITY_ACTIVATED_RECOVERY.
466
- If DENSITY_ACTIVATED_RECOVERY keyword not defined, when DAR is used in the completion.
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
- start_index, end_index = parse.locate_keyword(self.content, Keywords.DENSITY_ACTIVATED_RECOVERY)
469
- if start_index == end_index:
470
- if Content.DENSITY_ACTIVATED_RECOVERY in self.completion_table[Headers.DEVICE_TYPE]:
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.DENSITY_ACTIVATED_RECOVERY} keyword must be defined, if DAR is used in the completion"
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
- if self.completion_table[Headers.DEVICE_TYPE].str.contains(Content.DENSITY_ACTIVATED_RECOVERY).any():
490
- self.wsegdar_table = input_validation.set_format_wsegdar(
491
- self._create_dataframe_with_columns(header, start_index, end_index)
492
- )
493
- device_checks = self.completion_table[
494
- self.completion_table[Headers.DEVICE_TYPE] == Content.DENSITY_ACTIVATED_RECOVERY
495
- ][Headers.DEVICE_NUMBER].to_numpy()
496
- if not check_contents(device_checks, self.wsegdar_table[Headers.DEVICE_NUMBER].to_numpy()):
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 read_wsegaicv(self) -> None:
502
- """Read the AUTONOMOUS_INFLOW_CONTROL_VALVE keyword in the case file.
524
+ def read_wseginjv(self) -> None:
525
+ """Read the INJECTION_VALVE keyword in the case file.
503
526
 
504
527
  Raises:
505
- ValueError: If invalid entries in AUTONOMOUS_INFLOW_CONTROL_VALVE.
506
- CompletorError: AUTONOMOUS_INFLOW_CONTROL_VALVE keyword not defined when AICV is used in completion.
507
- If all devices in COMPLETION are not specified in AUTONOMOUS_INFLOW_CONTROL_VALVE.
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.AUTONOMOUS_INFLOW_CONTROL_VALVE)
532
+ start_index, end_index = parse.locate_keyword(self.content, Keywords.INJECTION_VALVE)
510
533
  if start_index == end_index:
511
- if Content.AUTONOMOUS_INFLOW_CONTROL_VALVE in self.completion_table[Headers.DEVICE_TYPE]:
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.AUTONOMOUS_INFLOW_CONTROL_VALVE} keyword must be defined, "
514
- "if AICV is used in the completion."
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.AICV_WATER_CUT,
521
- Headers.AICV_GAS_HOLDUP_FRACTION,
522
- Headers.AICV_CALIBRATION_FLUID_DENSITY,
523
- Headers.AICV_FLUID_VISCOSITY,
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.wsegaicv_table = input_validation.set_format_wsegaicv(
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 AUTONOMOUS_INFLOW_CONTROL_VALVE
548
- device_checks = self.completion_table[
549
- self.completion_table[Headers.DEVICE_TYPE] == Content.AUTONOMOUS_INFLOW_CONTROL_VALVE
550
- ][Headers.DEVICE_NUMBER].to_numpy()
551
- if not check_contents(device_checks, self.wsegaicv_table[Headers.DEVICE_NUMBER].to_numpy()):
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.AUTONOMOUS_INFLOW_CONTROL_VALVE,
195
- Content.DENSITY_ACTIVATED_RECOVERY,
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,
@@ -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.DENSITY_ACTIVATED_RECOVERY:
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.AUTONOMOUS_INFLOW_CONTROL_VALVE:
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.DENSITY_ACTIVATED_RECOVERY in active_devices:
222
- df_well = completion.get_device(df_well, case.wsegdar_table, Content.DENSITY_ACTIVATED_RECOVERY)
223
- if Content.AUTONOMOUS_INFLOW_CONTROL_VALVE in active_devices:
224
- df_well = completion.get_device(df_well, case.wsegaicv_table, Content.AUTONOMOUS_INFLOW_CONTROL_VALVE)
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.1.2
4
- Summary: Advanced mulit-segmented well completion tool.
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,<3.12
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
- Requires-Dist: docutils (==0.20.1) ; extra == "ert"
17
- Requires-Dist: ert (>11.1.0) ; extra == "ert"
18
- Requires-Dist: matplotlib (>=3.6,<4.0)
19
- Requires-Dist: numpy (<2)
20
- Requires-Dist: pandas (>=2.1.4,<3.0.0)
21
- Requires-Dist: pyqt5-qt5 (==5.15.2) ; extra == "ert"
22
- Requires-Dist: pytest-env (>=1,<2)
23
- Requires-Dist: rstcheck-core (>=1.2.1,<2.0.0) ; extra == "ert"
24
- Requires-Dist: scipy (>=1.10,<2.0)
25
- Requires-Dist: tqdm (>=4.50,<5.0)
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=COtRZpEdmuf3X_uOvEYYLz428nQSn1Z8QH-7TTREyus,30485
2
+ completor/completion.py,sha256=quhQOdQREv8MsHW5amT0sG-84Y12KVdT0eylbKCul3g,31177
3
3
  completor/config_jobs/run_completor,sha256=XePKj2xocfGF0XFRqr7sqfpZGrjgWcfaZLHIhVvGFCQ,600
4
- completor/constants.py,sha256=Th7fzID5NPUhyV2RRc5h9qRQ963cKGT3TVCX_bsAtHA,12802
5
- completor/create_output.py,sha256=3IIndoE0aE1ZTKVnjMLi56mJLVbgrYTWkEJs4XkqZDU,23028
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=OGY5oCdctlqzeg5Z2l4cmRb3ITtSjLp1Ufp0Joj7aKA,13495
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=fenEo3UfDzXF4jaxi9vDI-g-BkYSti0LxILJf7lO84A,72081
17
- completor/read_casefile.py,sha256=ZJj-xrpcTeagJmqqi72UIOIcq9uQJaEZClbCA1lW4yw,34081
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=JFzTvt4wLZm-VUoamneQgUBVfdoPJmNAlgdQ80qOL5Y,13576
19
+ completor/utils.py,sha256=9Qayt7xMsimpoVDo5sL86gVaQBbIOezMBRyMXd3haXw,13598
20
20
  completor/visualization.py,sha256=ObxThqIyW3fsvVIupxVsgySFI_54n_Di-HTzFtDMSgo,4580
21
- completor/visualize_well.py,sha256=I2kp2rnM2eFV4RUWnTTysPTqQKNEBicF2S9Z3rrAsNA,8672
22
- completor/wells.py,sha256=oj3e65tSIDFJEpfOKkr_j4H3RyFKpdjZBAcef7sUoaY,12124
23
- completor-1.1.2.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
24
- completor-1.1.2.dist-info/METADATA,sha256=_H5N1rPJULkjGFYMAghbNG-mqYWwcvJfhOUz2pOREZ0,7880
25
- completor-1.1.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
26
- completor-1.1.2.dist-info/entry_points.txt,sha256=co5L2_CC2QQWVdEALeMp-NIC4mx4nRpcLcvpVXMYdeI,106
27
- completor-1.1.2.dist-info/RECORD,,
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,,