fmu-pem 0.0.3__py3-none-any.whl → 0.0.4__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.
fmu/pem/__init__.py CHANGED
@@ -11,9 +11,11 @@ except (ImportError, ModuleNotFoundError):
11
11
  else:
12
12
  INTERNAL_EQUINOR = True
13
13
 
14
+ from .__main__ import main as pem
14
15
  from .run_pem import pem_fcn
15
16
 
16
17
  __all__ = [
17
18
  "pem_fcn",
19
+ "pem",
18
20
  "INTERNAL_EQUINOR",
19
21
  ]
fmu/pem/__main__.py CHANGED
@@ -1,13 +1,17 @@
1
1
  # pylint: disable=missing-module-docstring
2
2
  import argparse
3
+ import sys
3
4
  from pathlib import Path
5
+ from typing import Any
4
6
  from warnings import warn
5
7
 
6
- from .pem_utilities import restore_dir
8
+ from .pem_utilities import get_global_params_and_dates, read_pem_config, restore_dir
7
9
  from .run_pem import pem_fcn
8
10
 
9
11
 
10
- def main():
12
+ def main(args_list=None):
13
+ if args_list is None:
14
+ args_list = sys.argv[1:]
11
15
  parser = argparse.ArgumentParser(__file__)
12
16
  parser.add_argument(
13
17
  "-c",
@@ -45,7 +49,29 @@ def main():
45
49
  help="For ERT run: Absolute directory name for model file, pre-experiment. Not "
46
50
  "needed for command line run",
47
51
  )
48
- args = parser.parse_args()
52
+ parser.add_argument(
53
+ "-q",
54
+ "--mod-date-prefix",
55
+ type=str,
56
+ required=True,
57
+ help="Global seismic section: Prefix for seismic dates for modelled data",
58
+ )
59
+ parser.add_argument(
60
+ "-r",
61
+ "--run-from-rms",
62
+ type=bool,
63
+ required=False,
64
+ default=False,
65
+ help="Is PEM run as part of an RMS workflow?",
66
+ )
67
+ parser.add_argument(
68
+ "-s",
69
+ "--rms-project",
70
+ required=False,
71
+ default=None,
72
+ help="In case PEM is called from RMS: RMS project",
73
+ )
74
+ args = parser.parse_args(args_list)
49
75
  cwd = args.config_dir.absolute()
50
76
  if str(cwd).endswith("sim2seis/model"):
51
77
  run_folder = cwd
@@ -57,11 +83,22 @@ def main():
57
83
  warn(f"PEM model should be run from the sim2seis/model folder. {e}")
58
84
  run_folder = cwd
59
85
  with restore_dir(run_folder):
86
+ # Read and validate all PEM parameters
87
+ config = read_pem_config(yaml_file=run_folder / args.config_file)
88
+
89
+ # Read necessary part of global configurations and parameters
90
+ config.update_with_global(
91
+ get_global_params_and_dates(
92
+ global_config_dir=(run_folder / args.global_dir).resolve(),
93
+ global_conf_file=args.global_file,
94
+ mod_prefix=args.mod_date_prefix,
95
+ )
96
+ )
60
97
  pem_fcn(
98
+ config=config,
61
99
  config_dir=run_folder,
62
- pem_config_file_name=args.config_file,
63
- global_config_dir=args.global_dir,
64
- global_config_file=args.global_file,
100
+ run_from_rms=args.run_from_rms,
101
+ proj=args.rms_project,
65
102
  )
66
103
 
67
104
 
@@ -29,6 +29,8 @@ class PetroElasticModel(ForwardModelStepPlugin):
29
29
  "<GLOBAL_FILE>",
30
30
  "--model-dir",
31
31
  "<MODEL_DIR>",
32
+ "--mod-date-prefix",
33
+ "<MOD_DATE_PREFIX>",
32
34
  ],
33
35
  )
34
36
 
@@ -40,6 +42,7 @@ class PetroElasticModel(ForwardModelStepPlugin):
40
42
  def validate_pre_experiment(self, fm_step_json: ForwardModelStepJSON) -> None:
41
43
  # Parse YAML parameter file by pydantic pre-experiment to catch errors at an
42
44
  # early stage
45
+
43
46
  config_file = Path(fm_step_json["argList"][3])
44
47
  model_dir = Path(fm_step_json["argList"][9])
45
48
  try:
@@ -58,7 +61,7 @@ class PetroElasticModel(ForwardModelStepPlugin):
58
61
  examples="""
59
62
  .. code-block:: console
60
63
 
61
- FORWARD_MODEL PEM(<CONFIG_DIR>=../../sim2seis/model, <CONFIG_FILE>=new_pem.yml, <GLOBAL_DiR>=../../fmuconfig/output, <GLOBAL_FILE>=global_variables.yml, <MODEL_DIR>=/my_fmu_structure/sim2seis/model)
64
+ FORWARD_MODEL PEM(<CONFIG_DIR>=../../sim2seis/model, <CONFIG_FILE>=new_pem.yml, <GLOBAL_DiR>=../../fmuconfig/output, <GLOBAL_FILE>=global_variables.yml, <MODEL_DIR>=/my_fmu_structure/sim2seis/model, <MOD_DATE_PREFIX>=HIST)
62
65
 
63
66
  """, # noqa: E501,
64
67
  )
@@ -30,7 +30,6 @@ from .pem_config_validation import (
30
30
  MineralProperties,
31
31
  PemConfig,
32
32
  RockMatrixProperties,
33
- possible_date_string,
34
33
  )
35
34
  from .update_grid import update_inactive_grid_cells
36
35
  from .utils import (
@@ -66,7 +65,6 @@ __all__ = [
66
65
  "input_num_string_to_list",
67
66
  "missing_num_areas",
68
67
  "num_boolean_array",
69
- "possible_date_string",
70
68
  "read_pem_config",
71
69
  "read_sim_grid_props",
72
70
  "restore_dir",
@@ -45,6 +45,8 @@ def find_key_first(d: dict, key: str) -> str | None:
45
45
  def get_global_params_and_dates(
46
46
  global_config_dir: Path,
47
47
  global_conf_file: Path,
48
+ mod_prefix: str | None = None,
49
+ obs_prefix: str | None = None,
48
50
  ) -> dict:
49
51
  """Read global configuration parameters, simulation model dates and seismic dates
50
52
  for difference calculation
@@ -58,35 +60,41 @@ def get_global_params_and_dates(
58
60
  list of tuples with
59
61
  strings of dates to calculate difference properties
60
62
  """
61
- global_config_par = yaml_load(str(global_config_dir / global_conf_file))
62
- # check if 'HIST' or 'PRED' is used
63
- if "SEISMIC_PRED_DATES" in global_config_par["global"]["dates"]:
64
- date_str = "SEISMIC_PRED_DATES"
65
- else:
66
- date_str = "SEISMIC_HIST_DATES"
67
- if "SEISMIC_PRED_DIFFDATES" in global_config_par["global"]["dates"]:
68
- diff_str = "SEISMIC_PRED_DIFFDATES"
69
- else:
70
- diff_str = "SEISMIC_HIST_DIFFDATES"
71
- seismic_dates = [
72
- str(sdate).replace("-", "")
73
- for sdate in global_config_par["global"]["dates"][date_str]
74
- ]
75
- diff_dates = [
76
- [str(sdate).replace("-", "") for sdate in datepairs]
77
- for datepairs in global_config_par["global"]["dates"][diff_str]
78
- ]
63
+ global_config_par = yaml_load(
64
+ str(global_config_dir / global_conf_file),
65
+ )
79
66
  grid_model_name = find_key_first(global_config_par["global"], "ECLGRIDNAME_PEM")
80
67
  if grid_model_name is None:
81
68
  raise ValueError(
82
69
  f"{__file__}: no value for ECLGRIDNAME_PEM in global config file"
83
70
  )
84
- return {
85
- "grid_model": grid_model_name,
86
- "seis_dates": seismic_dates,
87
- "diff_dates": diff_dates,
71
+ # Find the correct seismic dates references
72
+ dates_config = global_config_par["global"]["dates"]
73
+ return_dict = {
88
74
  "global_config": global_config_par,
75
+ "grid_model": grid_model_name,
76
+ "seismic": global_config_par["global"]["seismic"],
89
77
  }
78
+ if mod_prefix:
79
+ return_dict.update(
80
+ {
81
+ "mod_dates": dates_config.get(f"SEISMIC_{mod_prefix}_DATES", None),
82
+ "mod_diffdates": dates_config.get(
83
+ f"SEISMIC_{mod_prefix}_DIFFDATES", None
84
+ ),
85
+ }
86
+ )
87
+ if obs_prefix:
88
+ return_dict.update(
89
+ {
90
+ "obs_dates": dates_config.get(f"SEISMIC_{obs_prefix}_DATES", None),
91
+ "obs_diffdates": dates_config.get(
92
+ f"SEISMIC_{obs_prefix}_DIFFDATES", None
93
+ ),
94
+ }
95
+ )
96
+
97
+ return return_dict
90
98
 
91
99
 
92
100
  def read_pem_config(yaml_file: Path) -> PemConfig:
@@ -5,6 +5,7 @@ from typing import Any, Self
5
5
 
6
6
  import numpy as np
7
7
  from pydantic import (
8
+ AliasChoices,
8
9
  BaseModel,
9
10
  ConfigDict,
10
11
  DirectoryPath,
@@ -15,6 +16,7 @@ from pydantic import (
15
16
  from pydantic.json_schema import SkipJsonSchema
16
17
  from pydantic_core.core_schema import ValidationInfo
17
18
 
19
+ from fmu.datamodels.fmu_results.global_configuration import GlobalConfiguration
18
20
  from fmu.pem import INTERNAL_EQUINOR
19
21
 
20
22
  from .enum_defs import (
@@ -556,53 +558,51 @@ class Fluids(BaseModel):
556
558
  return v
557
559
 
558
560
 
559
- def possible_date_string(date_strings: list[str]) -> bool:
560
- """
561
- Validate a list of date strings in YYYYMMDD format.
561
+ def date_to_string(date_obj: date) -> str:
562
+ return date_obj.strftime(format="%Y%m%d")
562
563
 
563
- Args:
564
- date_strings: list of strings to validate
565
564
 
566
- Returns:
567
- bool: True if all strings are valid dates
565
+ class SeismicSurvey(BaseModel):
566
+ ecldate: list[str]
567
+ time: dict[str, str] | None = None
568
+ depth: dict[str, str] | None = None
568
569
 
569
- Raises:
570
- ValueError: If any string is not a valid date in YYYYMMDD format
571
- """
572
- for date_string in date_strings:
573
- if len(date_string) != 8:
574
- raise ValueError(
575
- f"Invalid date format: '{date_string}' must be exactly 8 characters"
576
- )
577
- try:
578
- date(
579
- year=int(date_string[0:4]),
580
- month=int(date_string[4:6]),
581
- day=int(date_string[6:]),
582
- )
583
- except ValueError:
584
- raise ValueError(
585
- f"Invalid date: '{date_string}' must be a valid date in YYYYMMDD format"
586
- )
587
- return True
570
+ @field_validator("ecldate", mode="before")
571
+ def convert_ecldate_strings(cls, v: list[date]) -> list[str]:
572
+ return [date_to_string(date) for date in v]
588
573
 
589
574
 
590
- class FromGlobal(BaseModel):
591
- grid_model: str
592
- seis_dates: list[str]
593
- diff_dates: list[list[str]]
594
- global_config: dict[str, Any]
575
+ class SeismicSection(BaseModel):
576
+ model_config = ConfigDict(populate_by_name=True)
595
577
 
596
- @field_validator("seis_dates", mode="before")
597
- def check_date_string(cls, v: list[str]) -> list[str]:
598
- possible_date_string(v)
599
- return v
578
+ templatecube_4d: str = Field(
579
+ validation_alias=AliasChoices("4d_templatecube", "templatecube_4d"),
580
+ serialization_alias="4d_templatecube",
581
+ )
582
+ real_4d_cropped_path: Path
583
+ real_4d: dict[str, SeismicSurvey]
600
584
 
601
- @field_validator("diff_dates", mode="before")
602
- def check_diffdate_string(cls, v: list[list[str]]) -> list[list[str]]:
603
- for ll in v:
604
- possible_date_string(ll)
605
- return v
585
+
586
+ class FromGlobal(BaseModel):
587
+ grid_model: str
588
+ mod_dates: list[str] | None = None
589
+ mod_diffdates: list[list[str]] | None = None
590
+ obs_dates: list[str] | None = None
591
+ obs_diffdates: list[list[str]] | None = None
592
+ seismic: SeismicSection
593
+ global_config: GlobalConfiguration
594
+
595
+ @field_validator("mod_dates", "obs_dates", mode="before")
596
+ def make_date_strings(cls, v: list[date]) -> list[str] | None:
597
+ if v:
598
+ return [date_to_string(date) for date in v]
599
+ return None
600
+
601
+ @field_validator("mod_diffdates", "obs_diffdates", mode="before")
602
+ def make_diffdate_strings(cls, v: list[list[str]]) -> list[list[str]] | None:
603
+ if v:
604
+ return [[date_to_string(date) for date in diffdate] for diffdate in v]
605
+ return None
606
606
 
607
607
 
608
608
  class PemPaths(BaseModel):
fmu/pem/run_pem.py CHANGED
@@ -6,10 +6,8 @@ from fmu.pem import pem_utilities as pem_utils
6
6
 
7
7
 
8
8
  def pem_fcn(
9
+ config: pem_utils.PemConfig,
9
10
  config_dir: Path,
10
- pem_config_file_name: Path,
11
- global_config_dir: Path,
12
- global_config_file: Path,
13
11
  run_from_rms=False,
14
12
  proj=None,
15
13
  ) -> None:
@@ -18,24 +16,13 @@ def pem_fcn(
18
16
  yaml-file control the selections made in the PEM.
19
17
 
20
18
  """
21
- # Read and validate all PEM parameters
22
- config = pem_utils.read_pem_config(yaml_file=config_dir / pem_config_file_name)
23
-
24
- # Read necessary part of global configurations and parameters
25
- config.update_with_global(
26
- pem_utils.get_global_params_and_dates(
27
- global_config_dir=(config_dir / global_config_dir).resolve(),
28
- global_conf_file=global_config_file,
29
- )
30
- )
31
-
32
19
  # Import Eclipse simulation grid - INIT and RESTART
33
20
  sim_grid, constant_props, time_step_props = pem_utils.read_sim_grid_props(
34
21
  rel_dir_sim_files=config.eclipse_files.rel_path_simgrid,
35
22
  egrid_file=config.eclipse_files.egrid_file,
36
23
  init_property_file=config.eclipse_files.init_property_file,
37
24
  restart_property_file=config.eclipse_files.restart_property_file,
38
- seis_dates=config.global_params.seis_dates,
25
+ seis_dates=config.global_params.mod_dates,
39
26
  fipnum_name=config.alternative_fipnum_name,
40
27
  )
41
28
 
@@ -65,7 +52,7 @@ def pem_fcn(
65
52
  sim_rst=time_step_props,
66
53
  matrix_props=matrix_properties,
67
54
  fluid_props=fluid_properties,
68
- sim_dates=config.global_params.seis_dates,
55
+ sim_dates=config.global_params.mod_dates,
69
56
  fipnum=constant_props.fipnum,
70
57
  )
71
58
 
@@ -89,8 +76,8 @@ def pem_fcn(
89
76
  # Calculate difference properties. Possible properties are all that vary with time
90
77
  diff_props, diff_date_strs = pem_utils.calculate_diff_properties(
91
78
  props=[time_step_props, eff_pres, sat_rock_props, sum_delta_time],
92
- diff_dates=config.global_params.diff_dates,
93
- seis_dates=config.global_params.seis_dates,
79
+ diff_dates=config.global_params.mod_diffdates,
80
+ seis_dates=config.global_params.mod_dates,
94
81
  diff_calculation=config.diff_calculation,
95
82
  )
96
83
 
@@ -108,7 +95,7 @@ def pem_fcn(
108
95
  rms_project=proj,
109
96
  sim_grid=sim_grid,
110
97
  grid_name=config.global_params.grid_model,
111
- seis_dates=config.global_params.seis_dates,
98
+ seis_dates=config.global_params.mod_dates,
112
99
  save_to_rms=config.results.save_results_to_rms,
113
100
  save_to_disk=config.results.save_results_to_disk,
114
101
  save_intermediate=config.results.save_intermediate_results,
fmu/pem/version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.0.3'
32
- __version_tuple__ = version_tuple = (0, 0, 3)
31
+ __version__ = version = '0.0.4'
32
+ __version_tuple__ = version_tuple = (0, 0, 4)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmu-pem
3
- Version: 0.0.3
3
+ Version: 0.0.4
4
4
  Summary: pem
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -695,6 +695,7 @@ Requires-Dist: xtgeo>=4.7.1
695
695
  Requires-Dist: fmu-tools
696
696
  Requires-Dist: fmu-config
697
697
  Requires-Dist: fmu-dataio
698
+ Requires-Dist: fmu-datamodels
698
699
  Requires-Dist: rock-physics-open>=0.3.3
699
700
  Requires-Dist: PyYAML>=6.0.1
700
701
  Requires-Dist: pydantic
@@ -1,10 +1,10 @@
1
1
  fmu/__init__.py,sha256=YWSE22UTDSocfqQHxEeXrRkdlA63t_aayQVdJkycwYs,83
2
- fmu/pem/__init__.py,sha256=FhNaFibcFZEK1Rz7IBRXBgxMHGNlcgrHaD4FtU4pDjs,421
3
- fmu/pem/__main__.py,sha256=hWYNOkn7gG6jUifHIXbG8ZJmUEDkv251v6OgiaR7rcY,1858
4
- fmu/pem/run_pem.py,sha256=aMkOHDNg3wtdiZueDAGogrxyVI8Sk2RYHWeSe9AJVXk,4727
5
- fmu/pem/version.py,sha256=pBZsQt6tlL02W-ri--X_4JCubpAK7jjCSnOmUp_isjc,704
2
+ fmu/pem/__init__.py,sha256=k-KRNGtW24pTPQv81c5DOYbW9Thy5xv514euStVRYtY,466
3
+ fmu/pem/__main__.py,sha256=43ugEF49aHi33Yv5CSWo8NPfzKsZAhHQrc5_IfnIoEI,3013
4
+ fmu/pem/run_pem.py,sha256=wmGTyQyh8wws5PwouiJf-rtvmrTu3-rzqQSuutEcXx4,4256
5
+ fmu/pem/version.py,sha256=QlXZ5JTjE_pgpDaeHk0GTExkc75xUZFmd0hA7kGYCJ0,704
6
6
  fmu/pem/forward_models/__init__.py,sha256=WuN66rmgfqrekCy3Ss9NHqsy-lZ4WGY-4VZa3jYDV2s,117
7
- fmu/pem/forward_models/pem_model.py,sha256=Hj7ueEu5bOKA84ldx1oKEqOntBKYySmY0Y6Z7ghZPeI,2025
7
+ fmu/pem/forward_models/pem_model.py,sha256=7aZOmW8IOolQLLIPNWPizciDDDe8QMUsFSyJhmU1G80,2124
8
8
  fmu/pem/hook_implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  fmu/pem/hook_implementations/jobs.py,sha256=IQW5m7oeZ_MiemxXv-UGLCPeo4h3QT9oELPlWAzsN60,388
10
10
  fmu/pem/pem_functions/__init__.py,sha256=aGFW0Gmr1rZsmzZhKdll9ofWcgpobzsHxfCNwr2Ypqc,551
@@ -18,22 +18,22 @@ fmu/pem/pem_functions/regression_models.py,sha256=wUw5yIIeR5sGz7OqAp42K4lxLUOKr-
18
18
  fmu/pem/pem_functions/run_friable_model.py,sha256=R3Nb0nQML6k5QrPwDoB7oMHaTkB-rJjCSPnJ_gsrIIQ,6885
19
19
  fmu/pem/pem_functions/run_patchy_cement_model.py,sha256=M561C_4dfPW_Nxm0AgzCUdeQ9UVIrZGGhxBayII1IDQ,6667
20
20
  fmu/pem/pem_functions/run_t_matrix_model.py,sha256=Ctl5Lw1HJvNYdqKDUnqrOWRisVV2m1J4gJ6S2u8j-Xw,7875
21
- fmu/pem/pem_utilities/__init__.py,sha256=OjQz4PjT8Rj2WYnuIoRYSnUXgkSsQESLIT3rp14LP5c,2143
21
+ fmu/pem/pem_utilities/__init__.py,sha256=p3Fv-wUDH_te9WUHSNj-WS08ly2asRr9iNN6Kw-2f1o,2089
22
22
  fmu/pem/pem_utilities/cumsum_properties.py,sha256=s3M0bMs6Dogg8cWzj5M6K5xifdRjhZse3dCWZL0_RCo,3431
23
23
  fmu/pem/pem_utilities/delta_cumsum_time.py,sha256=vDc7Hvl50qzUXbK4oKq30zlQ2fqMel9EmBO0lmeoDbo,3035
24
24
  fmu/pem/pem_utilities/enum_defs.py,sha256=R6Q0G6TQKe1MM4KTp1t_iCaFuCWEwLvIqV6tH3uxCms,2485
25
25
  fmu/pem/pem_utilities/export_routines.py,sha256=hteGM4flK8B7Jy4BNk5bU33-_jcNndFrm9RcnzfTdy4,10108
26
26
  fmu/pem/pem_utilities/fipnum_pvtnum_utilities.py,sha256=ypwTsyfqqBJ6d8WHY2HkKAdX9ZjHYLdQq_-3w2xEwVQ,7571
27
- fmu/pem/pem_utilities/import_config.py,sha256=eKV1LsajELCcTijLsGMzQg16XcicedCKmhhZJce-SQ4,3554
27
+ fmu/pem/pem_utilities/import_config.py,sha256=Ms16Tth0-U28D9VIvExF9y-WVVaJSzY6Kkdh6RHVXOg,3700
28
28
  fmu/pem/pem_utilities/import_routines.py,sha256=EVHCS-LaHXKwVgDiE5BDvybJgPi0PjFado2m1O9ezo4,5104
29
29
  fmu/pem/pem_utilities/pem_class_definitions.py,sha256=Q_k5s_Zj8q_9TKdnxdJdOeN1UVGZbH997ngs8_5t0Es,5504
30
- fmu/pem/pem_utilities/pem_config_validation.py,sha256=ps_mFuwh2SgpsoSC_5IwlLpMaLDzx9BRyEYvgSf3CQw,27441
30
+ fmu/pem/pem_utilities/pem_config_validation.py,sha256=6SOuNoobSy4y42Z8AAczCVh9nODSorBnHcCTknMy3GQ,27639
31
31
  fmu/pem/pem_utilities/rpm_models.py,sha256=S4BDv5aTaMHgk-nSYxBQ1I_SzkSGXVd6HNtoUViElwE,21212
32
32
  fmu/pem/pem_utilities/update_grid.py,sha256=Ay0XPGXBl5CtdL5keTGzs0AKp44LgsuqxwBVwmHZV_s,1838
33
33
  fmu/pem/pem_utilities/utils.py,sha256=dHfQLDfwG27eC86lHN12PrITuock8M5IH-gD7eWAtCE,10583
34
- fmu_pem-0.0.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
35
- fmu_pem-0.0.3.dist-info/METADATA,sha256=t2TFRKI9Cq718cFQxGYnmzfK1_8s9PSSGKpJ141K_Xo,43848
36
- fmu_pem-0.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
37
- fmu_pem-0.0.3.dist-info/entry_points.txt,sha256=NSoFnob1PAE6FzRyNJZn5idocnCB1ptNg6R8zYf7Gnc,98
38
- fmu_pem-0.0.3.dist-info/top_level.txt,sha256=Z-FIY3pxn0UK2Wxi9IJ7fKoLSraaxuNGi1eokiE0ShM,4
39
- fmu_pem-0.0.3.dist-info/RECORD,,
34
+ fmu_pem-0.0.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
35
+ fmu_pem-0.0.4.dist-info/METADATA,sha256=wakrxOg0kE20GH5s5rJ_OxX6bhDNRCiya6JEeSBfFr4,43878
36
+ fmu_pem-0.0.4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
37
+ fmu_pem-0.0.4.dist-info/entry_points.txt,sha256=NSoFnob1PAE6FzRyNJZn5idocnCB1ptNg6R8zYf7Gnc,98
38
+ fmu_pem-0.0.4.dist-info/top_level.txt,sha256=Z-FIY3pxn0UK2Wxi9IJ7fKoLSraaxuNGi1eokiE0ShM,4
39
+ fmu_pem-0.0.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5