Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into 3d-viewer-and-interse…
Browse files Browse the repository at this point in the history
…ction
  • Loading branch information
rubenthoms committed Jun 13, 2024
2 parents eb72d3b + 2276c20 commit 34552b3
Show file tree
Hide file tree
Showing 30 changed files with 2,250 additions and 0 deletions.
2 changes: 2 additions & 0 deletions backend_py/primary/primary/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from primary.routers.graph.router import router as graph_router
from primary.routers.grid3d.router import router as grid3d_router
from primary.routers.grid3d.router_vtk import router as grid3d_router_vtk
from primary.routers.group_tree.router import router as group_tree_router
from primary.routers.inplace_volumetrics.router import router as inplace_volumetrics_router
from primary.routers.observations.router import router as observations_router
from primary.routers.parameters.router import router as parameters_router
Expand Down Expand Up @@ -79,6 +80,7 @@ def custom_generate_unique_id(route: APIRoute) -> str:
app.include_router(correlations_router, prefix="/correlations", tags=["correlations"])
app.include_router(grid3d_router, prefix="/grid3d", tags=["grid3d"])
app.include_router(grid3d_router_vtk, prefix="/grid3d", tags=["grid3d"])
app.include_router(group_tree_router, prefix="/group_tree", tags=["group_tree"])
app.include_router(pvt_router, prefix="/pvt", tags=["pvt"])
app.include_router(well_completions_router, prefix="/well_completions", tags=["well_completions"])
app.include_router(well_router, prefix="/well", tags=["well"])
Expand Down
70 changes: 70 additions & 0 deletions backend_py/primary/primary/routers/group_tree/router.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
from fastapi import APIRouter, Depends, Query
from primary.auth.auth_helper import AuthHelper
from primary.services.group_tree_assembler.group_tree_assembler import GroupTreeAssembler
from primary.services.sumo_access.group_tree_access import GroupTreeAccess
from primary.services.sumo_access.group_tree_types import TreeModeOptions, NodeType
from primary.services.sumo_access.summary_access import Frequency, SummaryAccess
from primary.services.utils.authenticated_user import AuthenticatedUser

from . import schemas

from webviz_pkg.core_utils.perf_timer import PerfTimer
import logging

LOGGER = logging.getLogger(__name__)

router = APIRouter()


@router.get("/realization_group_tree_data/")
async def get_realization_group_tree_data(
# fmt:off
authenticated_user: AuthenticatedUser = Depends(AuthHelper.get_authenticated_user),
case_uuid: str = Query(description="Sumo case uuid"),
ensemble_name: str = Query(description="Ensemble name"),
realization: int = Query(description="Realization"),
resampling_frequency: schemas.Frequency = Query(description="Resampling frequency"),
node_type_set: set[schemas.NodeType] = Query(description="Node types"),
# fmt:on
) -> schemas.GroupTreeData:
timer = PerfTimer()

group_tree_access = await GroupTreeAccess.from_case_uuid_async(
authenticated_user.get_sumo_access_token(), case_uuid, ensemble_name
)
summary_access = SummaryAccess.from_case_uuid(authenticated_user.get_sumo_access_token(), case_uuid, ensemble_name)
summary_frequency = Frequency.from_string_value(resampling_frequency.value)
if summary_frequency is None:
summary_frequency = Frequency.YEARLY

# Convert to NodeType enum in group_tree_types
unique_node_types = set([NodeType(elm.value) for elm in node_type_set])

group_tree_data = GroupTreeAssembler(
group_tree_access=group_tree_access,
summary_access=summary_access,
realization=realization,
summary_frequency=summary_frequency,
node_types=unique_node_types,
group_tree_mode=TreeModeOptions.SINGLE_REAL,
)

timer.lap_ms()
await group_tree_data.fetch_and_initialize_async()
initialize_time_ms = timer.lap_ms()

(
dated_trees,
edge_metadata,
node_metadata,
) = await group_tree_data.create_dated_trees_and_metadata_lists()
create_data_time_ms = timer.lap_ms()

LOGGER.info(
f"Group tree data for single realization fetched and processed in: {timer.elapsed_ms()}ms "
f"(initialize={initialize_time_ms}ms, create group tree={create_data_time_ms}ms)"
)

return schemas.GroupTreeData(
edge_metadata_list=edge_metadata, node_metadata_list=node_metadata, dated_trees=dated_trees
)
33 changes: 33 additions & 0 deletions backend_py/primary/primary/routers/group_tree/schemas.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from typing import List
from enum import Enum
from primary.services.sumo_access.group_tree_types import GroupTreeMetadata, DatedTree
from pydantic import BaseModel


class Frequency(str, Enum):
DAILY = "DAILY"
WEEKLY = "WEEKLY"
MONTHLY = "MONTHLY"
QUARTERLY = "QUARTERLY"
YEARLY = "YEARLY"


class StatOption(str, Enum):
MEAN = "MEAN"
P10 = "P10"
P90 = "P90"
P50 = "P50"
MIN = "MIN"
MAX = "MAX"


class NodeType(str, Enum):
PROD = "prod"
INJ = "inj"
OTHER = "other"


class GroupTreeData(BaseModel):
edge_metadata_list: List[GroupTreeMetadata]
node_metadata_list: List[GroupTreeMetadata]
dated_trees: List[DatedTree]
Loading

0 comments on commit 34552b3

Please sign in to comment.