fmu-sumo 2.4.4__tar.gz → 2.4.5__tar.gz
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_sumo-2.4.4 → fmu_sumo-2.4.5}/PKG-INFO +1 -1
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/docs/explorer.rst +10 -10
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/examples/explorer.ipynb +11 -9
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/examples/explorer2.ipynb +32 -34
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/examples/grids-and-properties.ipynb +4 -6
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/examples/table-aggregation.ipynb +12 -14
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/examples/tables.ipynb +6 -6
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/_version.py +2 -2
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/_search_context.py +43 -5
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu_sumo.egg-info/PKG-INFO +1 -1
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/.github/pull_request_template.md +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/.github/workflows/build_docs.yaml +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/.github/workflows/check_formatting.yml +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/.github/workflows/publish_release.yaml +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/.github/workflows/run_tests.yaml +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/.gitignore +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/.pre-commit-config.yaml +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/.readthedocs.yml +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/CONTRIBUTING.md +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/LICENSE +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/README.md +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/SECURITY.md +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/docs/_static/equinor-logo.png +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/docs/_static/equinor-logo2.jpg +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/docs/_static/equinor_logo.jpg +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/docs/_static/equinor_logo_only.jpg +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/docs/_templates/layout.html +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/docs/conf.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/docs/index.rst +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/examples/metrics.ipynb +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/pyproject.toml +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/setup.cfg +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/__init__.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/__init__.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/__init__.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/cache.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/explorer.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/filters.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/__init__.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/_child.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/_document.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/_metrics.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/case.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/cases.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/cpgrid.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/cpgrid_property.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/cube.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/dictionary.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/ensemble.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/ensembles.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/iteration.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/iterations.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/polygons.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/realization.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/realizations.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/surface.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/objects/table.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu/sumo/explorer/timefilter.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu_sumo.egg-info/SOURCES.txt +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu_sumo.egg-info/dependency_links.txt +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu_sumo.egg-info/requires.txt +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/src/fmu_sumo.egg-info/top_level.txt +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/tests/conftest.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/tests/context.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/tests/test_explorer.py +0 -0
- {fmu_sumo-2.4.4 → fmu_sumo-2.4.5}/tests/test_objects_table.py +0 -0
|
@@ -79,8 +79,8 @@ as a base class for certain other classes in `fmu.sumo.explorer`:
|
|
|
79
79
|
* `Case` objects are search contexts that match objects in a specific
|
|
80
80
|
case.
|
|
81
81
|
|
|
82
|
-
* `
|
|
83
|
-
specific
|
|
82
|
+
* `Ensemble` objects are search contexts that match objects in a
|
|
83
|
+
specific ensemble. (Previously `Iteration`)
|
|
84
84
|
|
|
85
85
|
* `Realization` objects are search contexts that match objects in a
|
|
86
86
|
specific realization.
|
|
@@ -309,7 +309,7 @@ method can be used to further refine the set of matching objects:
|
|
|
309
309
|
|
|
310
310
|
case = sumo.get_case_by_uuid("1234567")
|
|
311
311
|
|
|
312
|
-
surfaces = case.surfaces.filter(
|
|
312
|
+
surfaces = case.surfaces.filter(ensemble="iter-0")
|
|
313
313
|
|
|
314
314
|
contents = surfaces.contents
|
|
315
315
|
|
|
@@ -341,7 +341,7 @@ are useful parameters to `.filter()`:
|
|
|
341
341
|
* `tagname`
|
|
342
342
|
* `content`
|
|
343
343
|
* `dataformat`
|
|
344
|
-
* `
|
|
344
|
+
* `ensemble`
|
|
345
345
|
* `realization`
|
|
346
346
|
* `aggregation`
|
|
347
347
|
* `stage`
|
|
@@ -379,7 +379,7 @@ We can get list of filter values for the following properties:
|
|
|
379
379
|
* `contents`
|
|
380
380
|
* `tagnames`
|
|
381
381
|
* `dataformats`
|
|
382
|
-
* `
|
|
382
|
+
* `ensemble`
|
|
383
383
|
* `realizations`
|
|
384
384
|
* `aggregations`
|
|
385
385
|
* `stages`
|
|
@@ -467,7 +467,7 @@ surfaces:
|
|
|
467
467
|
case = explorer.get_case_by_uuid("dec73fae-bb11-41f2-be37-73ba005c4967")
|
|
468
468
|
|
|
469
469
|
surface_collection: SurfaceCollection = case.surfaces.filter(
|
|
470
|
-
|
|
470
|
+
ensemble="iter-1",
|
|
471
471
|
)
|
|
472
472
|
|
|
473
473
|
|
|
@@ -490,7 +490,7 @@ This can now be reduced to:
|
|
|
490
490
|
case = explorer.get_case_by_uuid("dec73fae-bb11-41f2-be37-73ba005c4967")
|
|
491
491
|
|
|
492
492
|
surface_collection: SurfaceCollection = case.surfaces.filter(
|
|
493
|
-
|
|
493
|
+
ensemble="iter-1",
|
|
494
494
|
)
|
|
495
495
|
|
|
496
496
|
async def main():
|
|
@@ -593,7 +593,7 @@ this is currently implemented for `surfaces` and `tables`.
|
|
|
593
593
|
surfaces = case.surfaces.filter(
|
|
594
594
|
stage="realization",
|
|
595
595
|
content="depth",
|
|
596
|
-
|
|
596
|
+
ensemble="iter-0",
|
|
597
597
|
name="Valysar Fm.",
|
|
598
598
|
tagname="FACIES_Fraction_Channel"
|
|
599
599
|
stratigraphic="false"
|
|
@@ -610,7 +610,7 @@ this is currently implemented for `surfaces` and `tables`.
|
|
|
610
610
|
|
|
611
611
|
In this example we perform aggregations on all realized instance of
|
|
612
612
|
the surface `Valysar Fm. (FACIES_Fraction_Channel)` in
|
|
613
|
-
|
|
613
|
+
ensemble 0. The aggregation methods return `xtgeo.RegularSurface`
|
|
614
614
|
objects.
|
|
615
615
|
|
|
616
616
|
.. note:: The methods `.mean()`, `.min()`, etc are deprecated; the
|
|
@@ -625,7 +625,7 @@ For `table` aggregation it is also necessary to specify the columns you want:
|
|
|
625
625
|
|
|
626
626
|
sumo = Explorer(env="dev")
|
|
627
627
|
case = sumo.get_case_by_uuid("5b558daf-61c5-400a-9aa2-c602bb471a16")
|
|
628
|
-
tables = case.tables.filter(
|
|
628
|
+
tables = case.tables.filter(ensemble="iter-0", realization=True,
|
|
629
629
|
tagname=summary, column="FOPT")
|
|
630
630
|
agg = tables.aggregate(operation="collection", columns=["FOPT"])
|
|
631
631
|
agg.to_pandas()
|
|
@@ -106,11 +106,11 @@
|
|
|
106
106
|
"# Get case surfaces\n",
|
|
107
107
|
"surfs = case.surfaces.filter(realization=True)\n",
|
|
108
108
|
"\n",
|
|
109
|
-
"# Get available
|
|
110
|
-
"print(\"
|
|
109
|
+
"# Get available ensembles\n",
|
|
110
|
+
"print(\"Ensembles:\", surfs.ensembles)\n",
|
|
111
111
|
"\n",
|
|
112
|
-
"# Filter on
|
|
113
|
-
"surfs = surfs.filter(
|
|
112
|
+
"# Filter on ensemble\n",
|
|
113
|
+
"surfs = surfs.filter(ensemble=\"iter-0\")\n",
|
|
114
114
|
"\n",
|
|
115
115
|
"# Get available contents\n",
|
|
116
116
|
"print(\"Contents:\", surfs.contents)\n",
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
"print(\"Content:\", surf.content)\n",
|
|
152
152
|
"print(\"Tagname:\", surf.tagname)\n",
|
|
153
153
|
"print(\"Format:\", surf.dataformat)\n",
|
|
154
|
-
"print(\"
|
|
154
|
+
"print(\"Ensemble:\", surf.ensemble)\n",
|
|
155
155
|
"print(\"Realization:\", surf.realization)\n",
|
|
156
156
|
"print(\"vertical domain:\", surf.vertical_domain)\n",
|
|
157
157
|
"\n",
|
|
@@ -179,9 +179,9 @@
|
|
|
179
179
|
"\n",
|
|
180
180
|
"cubes = seismic_case.cubes\n",
|
|
181
181
|
"\n",
|
|
182
|
-
"print(\"
|
|
182
|
+
"print(\"Ensembles\\t\", cubes.ensembles)\n",
|
|
183
183
|
"\n",
|
|
184
|
-
"cubes.filter(
|
|
184
|
+
"cubes.filter(ensemble=\"iter-0\")\n",
|
|
185
185
|
"\n",
|
|
186
186
|
"print(\"Names:\\t\\t\", cubes.names)\n",
|
|
187
187
|
"\n",
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
"print(\"ID:\", cube.uuid)\n",
|
|
201
201
|
"print(\"Name:\", cube.name)\n",
|
|
202
202
|
"print(\"Tagname:\", cube.tagname)\n",
|
|
203
|
-
"print(\"
|
|
203
|
+
"print(\"Ensemble:\", cube.ensemble)\n",
|
|
204
204
|
"print(\"Realization:\", cube.realization)\n",
|
|
205
205
|
"print(\"is_observation:\", cube[\"data\"][\"is_observation\"])\n",
|
|
206
206
|
"print(\"is_prediction:\", cube[\"data\"][\"is_prediction\"])\n",
|
|
@@ -232,7 +232,9 @@
|
|
|
232
232
|
"source": [
|
|
233
233
|
"# Perform aggregation on SurfaceCollection\n",
|
|
234
234
|
"\n",
|
|
235
|
-
"regsurf = surfs.
|
|
235
|
+
"regsurf = surfs.aggregate(\n",
|
|
236
|
+
" operation=\"min\"\n",
|
|
237
|
+
") # operations: max, mean, std, p10, p90, p50\n",
|
|
236
238
|
"regsurf.to_regular_surface().quickplot()"
|
|
237
239
|
]
|
|
238
240
|
},
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"outputs": [],
|
|
22
22
|
"source": [
|
|
23
23
|
"env = \"dev\"\n",
|
|
24
|
-
"caseuuid = \"
|
|
24
|
+
"caseuuid = \"1abbf342-8460-45d7-afa6-814eac9dc9d3\"\n",
|
|
25
25
|
"name = \"DROGON\"\n",
|
|
26
26
|
"tagname = \"summary\"\n",
|
|
27
|
-
"
|
|
27
|
+
"ensemble = \"iter-0\""
|
|
28
28
|
]
|
|
29
29
|
},
|
|
30
30
|
{
|
|
@@ -35,39 +35,38 @@
|
|
|
35
35
|
"outputs": [],
|
|
36
36
|
"source": [
|
|
37
37
|
"exp = Explorer(env=env)\n",
|
|
38
|
-
"
|
|
38
|
+
"exp.cases"
|
|
39
39
|
]
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"cell_type": "code",
|
|
43
43
|
"execution_count": null,
|
|
44
|
-
"id": "
|
|
44
|
+
"id": "9a4fa479-ed06-406f-8cdf-e3392c7453ea",
|
|
45
45
|
"metadata": {},
|
|
46
46
|
"outputs": [],
|
|
47
47
|
"source": [
|
|
48
|
-
"exp.cases"
|
|
48
|
+
"[(case.name, case.uuid) for case in exp.cases]"
|
|
49
49
|
]
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
"cell_type": "code",
|
|
53
53
|
"execution_count": null,
|
|
54
|
-
"id": "
|
|
54
|
+
"id": "b4c047ae-4b00-48c8-a148-e425aea81928",
|
|
55
55
|
"metadata": {},
|
|
56
56
|
"outputs": [],
|
|
57
57
|
"source": [
|
|
58
|
-
"
|
|
58
|
+
"case = exp.get_object(caseuuid)\n",
|
|
59
|
+
"case"
|
|
59
60
|
]
|
|
60
61
|
},
|
|
61
62
|
{
|
|
62
63
|
"cell_type": "code",
|
|
63
64
|
"execution_count": null,
|
|
64
|
-
"id": "
|
|
65
|
+
"id": "cb418b43",
|
|
65
66
|
"metadata": {},
|
|
66
67
|
"outputs": [],
|
|
67
68
|
"source": [
|
|
68
|
-
"case
|
|
69
|
-
"print(f\"Case name: {case.name}\")\n",
|
|
70
|
-
"print(f\"Case UUID: {case.uuid}\")"
|
|
69
|
+
"case.overview"
|
|
71
70
|
]
|
|
72
71
|
},
|
|
73
72
|
{
|
|
@@ -81,7 +80,7 @@
|
|
|
81
80
|
" cls=\"table\",\n",
|
|
82
81
|
" name=name,\n",
|
|
83
82
|
" tagname=tagname,\n",
|
|
84
|
-
"
|
|
83
|
+
" ensemble=ensemble,\n",
|
|
85
84
|
" realization=True,\n",
|
|
86
85
|
")\n",
|
|
87
86
|
"print(f\"Number of realizations: {len(realizations)}\")\n",
|
|
@@ -153,9 +152,7 @@
|
|
|
153
152
|
"metadata": {},
|
|
154
153
|
"outputs": [],
|
|
155
154
|
"source": [
|
|
156
|
-
"realizations = case.filter(\n",
|
|
157
|
-
" cls=\"surface\", iteration=iteration, realization=True\n",
|
|
158
|
-
")\n",
|
|
155
|
+
"realizations = case.filter(cls=\"surface\", ensemble=ensemble, realization=True)\n",
|
|
159
156
|
"print(f\"Number of realizations: {len(realizations)}\")\n",
|
|
160
157
|
"print(realizations.names)\n",
|
|
161
158
|
"print(realizations.tagnames)\n",
|
|
@@ -170,7 +167,7 @@
|
|
|
170
167
|
"outputs": [],
|
|
171
168
|
"source": [
|
|
172
169
|
"surfaces = realizations.filter(\n",
|
|
173
|
-
" name=\"Valysar Fm.\", content=\"depth\", tagname=\"
|
|
170
|
+
" name=\"Valysar Fm.\", content=\"depth\", tagname=\"probcube_aps_Channel_Average\"\n",
|
|
174
171
|
")\n",
|
|
175
172
|
"print(len(surfaces))\n",
|
|
176
173
|
"print(surfaces.tagnames)\n",
|
|
@@ -259,7 +256,8 @@
|
|
|
259
256
|
"metadata": {},
|
|
260
257
|
"outputs": [],
|
|
261
258
|
"source": [
|
|
262
|
-
"len(case.
|
|
259
|
+
"len(case.ensembles)\n",
|
|
260
|
+
"print(case.ensembles)"
|
|
263
261
|
]
|
|
264
262
|
},
|
|
265
263
|
{
|
|
@@ -269,7 +267,7 @@
|
|
|
269
267
|
"metadata": {},
|
|
270
268
|
"outputs": [],
|
|
271
269
|
"source": [
|
|
272
|
-
"
|
|
270
|
+
"ensemble = exp.get_ensemble_by_uuid(\"4e2f012d-15a4-fd57-2368-a349ff2e56a0\")"
|
|
273
271
|
]
|
|
274
272
|
},
|
|
275
273
|
{
|
|
@@ -279,7 +277,7 @@
|
|
|
279
277
|
"metadata": {},
|
|
280
278
|
"outputs": [],
|
|
281
279
|
"source": [
|
|
282
|
-
"len(
|
|
280
|
+
"len(ensemble)"
|
|
283
281
|
]
|
|
284
282
|
},
|
|
285
283
|
{
|
|
@@ -289,7 +287,7 @@
|
|
|
289
287
|
"metadata": {},
|
|
290
288
|
"outputs": [],
|
|
291
289
|
"source": [
|
|
292
|
-
"
|
|
290
|
+
"ensemble.get_field_values(\"class.keyword\")"
|
|
293
291
|
]
|
|
294
292
|
},
|
|
295
293
|
{
|
|
@@ -299,7 +297,7 @@
|
|
|
299
297
|
"metadata": {},
|
|
300
298
|
"outputs": [],
|
|
301
299
|
"source": [
|
|
302
|
-
"
|
|
300
|
+
"ensemble.cases"
|
|
303
301
|
]
|
|
304
302
|
},
|
|
305
303
|
{
|
|
@@ -309,7 +307,7 @@
|
|
|
309
307
|
"metadata": {},
|
|
310
308
|
"outputs": [],
|
|
311
309
|
"source": [
|
|
312
|
-
"
|
|
310
|
+
"ensemble.realizations"
|
|
313
311
|
]
|
|
314
312
|
},
|
|
315
313
|
{
|
|
@@ -319,7 +317,7 @@
|
|
|
319
317
|
"metadata": {},
|
|
320
318
|
"outputs": [],
|
|
321
319
|
"source": [
|
|
322
|
-
"
|
|
320
|
+
"ensemble.filter(realization=13)"
|
|
323
321
|
]
|
|
324
322
|
},
|
|
325
323
|
{
|
|
@@ -329,7 +327,7 @@
|
|
|
329
327
|
"metadata": {},
|
|
330
328
|
"outputs": [],
|
|
331
329
|
"source": [
|
|
332
|
-
"
|
|
330
|
+
"ensemble.filter(realization=79)"
|
|
333
331
|
]
|
|
334
332
|
},
|
|
335
333
|
{
|
|
@@ -339,7 +337,7 @@
|
|
|
339
337
|
"metadata": {},
|
|
340
338
|
"outputs": [],
|
|
341
339
|
"source": [
|
|
342
|
-
"
|
|
340
|
+
"ensemble.filter(realization=100)"
|
|
343
341
|
]
|
|
344
342
|
},
|
|
345
343
|
{
|
|
@@ -349,7 +347,7 @@
|
|
|
349
347
|
"metadata": {},
|
|
350
348
|
"outputs": [],
|
|
351
349
|
"source": [
|
|
352
|
-
"
|
|
350
|
+
"ensemble.aggregations"
|
|
353
351
|
]
|
|
354
352
|
},
|
|
355
353
|
{
|
|
@@ -359,7 +357,7 @@
|
|
|
359
357
|
"metadata": {},
|
|
360
358
|
"outputs": [],
|
|
361
359
|
"source": [
|
|
362
|
-
"
|
|
360
|
+
"ensemble.filter(aggregation=True)"
|
|
363
361
|
]
|
|
364
362
|
},
|
|
365
363
|
{
|
|
@@ -369,7 +367,7 @@
|
|
|
369
367
|
"metadata": {},
|
|
370
368
|
"outputs": [],
|
|
371
369
|
"source": [
|
|
372
|
-
"
|
|
370
|
+
"ensemble.filter(realization=True)"
|
|
373
371
|
]
|
|
374
372
|
},
|
|
375
373
|
{
|
|
@@ -399,9 +397,9 @@
|
|
|
399
397
|
"metadata": {},
|
|
400
398
|
"outputs": [],
|
|
401
399
|
"source": [
|
|
402
|
-
"from fmu.sumo.explorer import
|
|
400
|
+
"from fmu.sumo.explorer.filters import Filters\n",
|
|
403
401
|
"\n",
|
|
404
|
-
"
|
|
402
|
+
"exp.cases.filter(has=Filters.seismic4d)"
|
|
405
403
|
]
|
|
406
404
|
},
|
|
407
405
|
{
|
|
@@ -411,7 +409,7 @@
|
|
|
411
409
|
"metadata": {},
|
|
412
410
|
"outputs": [],
|
|
413
411
|
"source": [
|
|
414
|
-
"
|
|
412
|
+
"exp.filter(has=Filters.seismic4d)"
|
|
415
413
|
]
|
|
416
414
|
},
|
|
417
415
|
{
|
|
@@ -421,7 +419,7 @@
|
|
|
421
419
|
"metadata": {},
|
|
422
420
|
"outputs": [],
|
|
423
421
|
"source": [
|
|
424
|
-
"[case.name for case in list(exp.filter(has=
|
|
422
|
+
"[case.name for case in list(exp.filter(has=Filters.seismic4d).cases)[:10]]"
|
|
425
423
|
]
|
|
426
424
|
},
|
|
427
425
|
{
|
|
@@ -431,7 +429,7 @@
|
|
|
431
429
|
"metadata": {},
|
|
432
430
|
"outputs": [],
|
|
433
431
|
"source": [
|
|
434
|
-
"myrealization =
|
|
432
|
+
"myrealization = ensemble.realizations.filter(\n",
|
|
435
433
|
" complex={\"term\": {\"fmu.realization.id\": 0}}\n",
|
|
436
434
|
")[0]\n",
|
|
437
435
|
"myrealization"
|
|
@@ -454,7 +452,7 @@
|
|
|
454
452
|
"metadata": {},
|
|
455
453
|
"outputs": [],
|
|
456
454
|
"source": [
|
|
457
|
-
"print(json.dumps(
|
|
455
|
+
"print(json.dumps(ensemble.metadata, indent=2))"
|
|
458
456
|
]
|
|
459
457
|
},
|
|
460
458
|
{
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"metadata": {},
|
|
106
106
|
"outputs": [],
|
|
107
107
|
"source": [
|
|
108
|
-
"grids[0].
|
|
108
|
+
"grids[0].ensemble, grids[0].realization"
|
|
109
109
|
]
|
|
110
110
|
},
|
|
111
111
|
{
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"metadata": {},
|
|
116
116
|
"outputs": [],
|
|
117
117
|
"source": [
|
|
118
|
-
"{g.
|
|
118
|
+
"{g.ensemble for g in grids}"
|
|
119
119
|
]
|
|
120
120
|
},
|
|
121
121
|
{
|
|
@@ -167,9 +167,7 @@
|
|
|
167
167
|
"outputs": [],
|
|
168
168
|
"source": [
|
|
169
169
|
"with Timer():\n",
|
|
170
|
-
" print(\
|
|
171
|
-
" set(grprops._get_field_values(\"data.geometry.relative_path.keyword\"))\n",
|
|
172
|
-
" )"
|
|
170
|
+
" print(set(grprops.get_field_values(\"data.geometry.relative_path.keyword\")))"
|
|
173
171
|
]
|
|
174
172
|
},
|
|
175
173
|
{
|
|
@@ -220,7 +218,7 @@
|
|
|
220
218
|
"metadata": {},
|
|
221
219
|
"outputs": [],
|
|
222
220
|
"source": [
|
|
223
|
-
"
|
|
221
|
+
"gridproperties"
|
|
224
222
|
]
|
|
225
223
|
},
|
|
226
224
|
{
|
|
@@ -80,20 +80,26 @@
|
|
|
80
80
|
" print(agg.to_pandas().sort_values(by=[\"REAL\", \"DATE\"]))\n",
|
|
81
81
|
"\n",
|
|
82
82
|
"\n",
|
|
83
|
-
"def run_exp(caseuuid,
|
|
83
|
+
"def run_exp(caseuuid, ensemblename, tagname, columns):\n",
|
|
84
84
|
" case = exp.get_case_by_uuid(caseuuid)\n",
|
|
85
85
|
" print(f\"{case.asset}; {case.name}; {caseuuid}; {case.status}\")\n",
|
|
86
86
|
" rels = case.tables.visible.filter(\n",
|
|
87
|
-
"
|
|
87
|
+
" ensemble=ensemblename,\n",
|
|
88
|
+
" realization=True,\n",
|
|
89
|
+
" tagname=tagname,\n",
|
|
90
|
+
" column=columns,\n",
|
|
88
91
|
" )\n",
|
|
89
92
|
" do_aggregate(\"Full-sized tables\", tagname, rels, columns)\n",
|
|
90
93
|
" rels = case.tables.hidden.filter(\n",
|
|
91
|
-
"
|
|
94
|
+
" ensemble=ensemblename,\n",
|
|
95
|
+
" realization=True,\n",
|
|
96
|
+
" tagname=tagname,\n",
|
|
97
|
+
" column=columns,\n",
|
|
92
98
|
" )\n",
|
|
93
99
|
" do_aggregate(\"Split tables\", tagname, rels, columns)\n",
|
|
94
100
|
" with Timer(\"Fetch single-vector table\"):\n",
|
|
95
101
|
" aggs = case.tables.filter(\n",
|
|
96
|
-
"
|
|
102
|
+
" ensemble=ensemblename,\n",
|
|
97
103
|
" aggregation=True,\n",
|
|
98
104
|
" tagname=tagname,\n",
|
|
99
105
|
" column=columns[0],\n",
|
|
@@ -157,7 +163,7 @@
|
|
|
157
163
|
"outputs": [],
|
|
158
164
|
"source": [
|
|
159
165
|
"caseuuid = \"8ffeb5f8-ca60-42ee-998e-53d34e47d3e2\"\n",
|
|
160
|
-
"
|
|
166
|
+
"ensemble = \"iter-0\"\n",
|
|
161
167
|
"case = exp.get_case_by_uuid(caseuuid)\n",
|
|
162
168
|
"hidden = case.tables.hidden\n",
|
|
163
169
|
"cols_f0 = hidden.filter(complex={\"term\": {\"_sumo.fragment\": 0}}).columns\n",
|
|
@@ -200,16 +206,8 @@
|
|
|
200
206
|
"metadata": {},
|
|
201
207
|
"outputs": [],
|
|
202
208
|
"source": [
|
|
203
|
-
"run_exp(caseuuid,
|
|
209
|
+
"run_exp(caseuuid, ensemble, \"summary\", some_f0)"
|
|
204
210
|
]
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
"cell_type": "code",
|
|
208
|
-
"execution_count": null,
|
|
209
|
-
"id": "379ec147-876e-444b-b62c-1597459905d5",
|
|
210
|
-
"metadata": {},
|
|
211
|
-
"outputs": [],
|
|
212
|
-
"source": []
|
|
213
211
|
}
|
|
214
212
|
],
|
|
215
213
|
"metadata": {
|
|
@@ -122,9 +122,9 @@
|
|
|
122
122
|
"metadata": {},
|
|
123
123
|
"source": [
|
|
124
124
|
"Most tables are stored during the running of an fmu run. So you will in that case have one version per realization (i.e per file path realization-n/iter-m) <br>\n",
|
|
125
|
-
"This means that it will be a slow process to get to results from one ensemble
|
|
125
|
+
"This means that it will be a slow process to get to results from one ensemble. <br>\n",
|
|
126
126
|
"Below is an example of how to fetch one table. General syntax: <br>\n",
|
|
127
|
-
"``table_collection = case.tables.filter(realization=<realization number>,
|
|
127
|
+
"``table_collection = case.tables.filter(realization=<realization number>, ensemble=<ensemble name>,``<br>\n",
|
|
128
128
|
"                     ``name=<table name>, tagname=<name of tag>)``<br>\n",
|
|
129
129
|
"Any of the input arguements are optional, so you could end up with more than one resulting table, and in theory even if you have <br>\n",
|
|
130
130
|
"used all arguements you could end up with several (long story, please ask). But you can check how many tables you have with using <br>\n",
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
"source": [
|
|
145
145
|
"# Filter using the key\n",
|
|
146
146
|
"one_table = tables.filter(\n",
|
|
147
|
-
" realization=0,
|
|
147
|
+
" realization=0, ensemble=\"iter-0\", name=\"DROGON\", tagname=\"compdat\"\n",
|
|
148
148
|
")[0]\n",
|
|
149
149
|
"\n",
|
|
150
150
|
"# Give back the name and tag\n",
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
"outputs": [],
|
|
208
208
|
"source": [
|
|
209
209
|
"sim_tables = tables.filter(\n",
|
|
210
|
-
" name=\"DROGON\",
|
|
210
|
+
" name=\"DROGON\", ensemble=\"iter-0\", aggregation=\"collection\"\n",
|
|
211
211
|
")\n",
|
|
212
212
|
"sim_tables.tagnames"
|
|
213
213
|
]
|
|
@@ -325,7 +325,7 @@
|
|
|
325
325
|
"\n",
|
|
326
326
|
"Here ``<DATATYPE>`` can be of collection, index, mean, min, max, p10 or p90\n",
|
|
327
327
|
"\n",
|
|
328
|
-
"This class gives you the aggregated tables that share name and tagname for one
|
|
328
|
+
"This class gives you the aggregated tables that share name and tagname for one ensemble as one object, <br> \n",
|
|
329
329
|
"so you don't need to know that what you are dealing with is a collection of objects\n"
|
|
330
330
|
]
|
|
331
331
|
},
|
|
@@ -463,7 +463,7 @@
|
|
|
463
463
|
"metadata": {},
|
|
464
464
|
"outputs": [],
|
|
465
465
|
"source": [
|
|
466
|
-
"COMPDAT = AggregatedTable(case, \"DROGON\", \"compdat\",
|
|
466
|
+
"COMPDAT = AggregatedTable(case, \"DROGON\", \"compdat\", ensemble=\"iter-0\")\n",
|
|
467
467
|
"COMPDAT[\"KH\"].to_pandas()"
|
|
468
468
|
]
|
|
469
469
|
},
|
|
@@ -1162,6 +1162,46 @@ class SearchContext:
|
|
|
1162
1162
|
def grid_properties(self) -> SearchContext:
|
|
1163
1163
|
return self._context_for_class("cpgrid_property")
|
|
1164
1164
|
|
|
1165
|
+
@property
|
|
1166
|
+
def parameters(self) -> SearchContext:
|
|
1167
|
+
return self.filter(
|
|
1168
|
+
complex={
|
|
1169
|
+
"bool": {
|
|
1170
|
+
"must": [
|
|
1171
|
+
{"term": {"data.name.keyword": "parameters"}},
|
|
1172
|
+
{"term": {"data.content.keyword": "parameters"}},
|
|
1173
|
+
],
|
|
1174
|
+
"should": [
|
|
1175
|
+
{
|
|
1176
|
+
"bool": {
|
|
1177
|
+
"must": [
|
|
1178
|
+
{"term": {"class.keyword": "dictionary"}},
|
|
1179
|
+
{
|
|
1180
|
+
"exists": {
|
|
1181
|
+
"field": "fmu.realization.id"
|
|
1182
|
+
}
|
|
1183
|
+
},
|
|
1184
|
+
]
|
|
1185
|
+
}
|
|
1186
|
+
},
|
|
1187
|
+
{
|
|
1188
|
+
"bool": {
|
|
1189
|
+
"must": [
|
|
1190
|
+
{"term": {"class.keyword": "table"}},
|
|
1191
|
+
{
|
|
1192
|
+
"exists": {
|
|
1193
|
+
"field": "fmu.aggregation.operation"
|
|
1194
|
+
}
|
|
1195
|
+
},
|
|
1196
|
+
]
|
|
1197
|
+
}
|
|
1198
|
+
},
|
|
1199
|
+
],
|
|
1200
|
+
"minimum_should_match": 1,
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
)
|
|
1204
|
+
|
|
1165
1205
|
def _get_object_by_class_and_uuid(self, cls, uuid) -> Any:
|
|
1166
1206
|
obj = self.get_object(uuid)
|
|
1167
1207
|
if obj.metadata["class"] != cls:
|
|
@@ -1531,11 +1571,9 @@ class SearchContext:
|
|
|
1531
1571
|
def _verify_aggregation_operation(
|
|
1532
1572
|
self, columns, operation
|
|
1533
1573
|
) -> Tuple[str, str, str, str]:
|
|
1534
|
-
assert (
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
and len(columns) == 1
|
|
1538
|
-
), "Exactly one column required for collection aggregation."
|
|
1574
|
+
assert columns is None or len(columns) == 1, (
|
|
1575
|
+
"Exactly one column required for collection aggregation."
|
|
1576
|
+
)
|
|
1539
1577
|
sc = self if columns is None else self.filter(column=columns)
|
|
1540
1578
|
query = sc.__prepare_verify_aggregation_query()
|
|
1541
1579
|
sres = sc._sumo.post("/search", json=query).json()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|