Skip to content

Commit 57b9984

Browse files
committed
[WIP] More work towards converting topography into a proper dataclass
1 parent 5bbf54b commit 57b9984

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-7
lines changed

gempy/core/data/encoders/converters.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import Annotated
2+
13
from contextlib import contextmanager
24

35
from contextvars import ContextVar
@@ -17,6 +19,9 @@ def validate_numpy_array(v):
1719
return np.array(v) if v is not None else None
1820

1921

22+
short_array_type = Annotated[np.ndarray, (BeforeValidator(lambda v: np.array(v) if v is not None else None))]
23+
24+
2025
def instantiate_if_necessary(data: dict, key: str, type: type) -> None:
2126
"""
2227
Creates instances of the specified type for a dictionary key if the key exists and its

gempy/core/data/grid_modules/topography.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from ....optional_dependencies import require_skimage
1313
from dataclasses import field, dataclass
14+
from ..encoders.converters import short_array_type
1415

1516

1617
@dataclass
@@ -27,7 +28,7 @@ class Topography:
2728
source: Optional[str] = None
2829

2930
# Fields managed internally
30-
values: np.ndarray = field(init=False, default_factory=lambda: np.zeros((0, 3)))
31+
values: short_array_type = field(init=False, default=np.zeros((0, 3)))
3132
resolution: Tuple[int, int] = field(init=False, default=(0, 0))
3233
raster_shape: Tuple[int, ...] = field(init=False, default=())
3334
_mask_topo: Optional[np.ndarray] = field(init=False, default=None, repr=False)

gempy/modules/serialization/save_load.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,18 +184,19 @@ def verify_model_serialization(model: GeoModel, verify_moment: Literal["before",
184184

185185
binary_file = _to_binary(model_json, compressed_binary)
186186

187-
model_deserialized = _deserialize_binary_file(binary_file)
188187

189188
original_model = model
190189
original_model.meta.creation_date = "<DATE_IGNORED>"
191-
model_deserialized.meta.creation_date = "<DATE_IGNORED>"
190+
192191
from verify_helper import verify_json
193192
if verify_moment == "before":
194193
verify_json(
195194
item=original_model.model_dump_json(by_alias=True, indent=4),
196195
name=file_name
197196
)
198197
elif verify_moment == "after":
198+
model_deserialized = _deserialize_binary_file(binary_file)
199+
model_deserialized.meta.creation_date = "<DATE_IGNORED>"
199200
verify_json(
200201
item=model_deserialized.model_dump_json(by_alias=True, indent=4),
201202
name=file_name

test/test_modules/test_grids/test_grids_sections.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import gempy as gp
55
import gempy_viewer as gpv
66
from gempy.core.data.enumerators import ExampleModel
7+
from gempy.modules.serialization.save_load import verify_model_serialization
78

89
from test.conftest import TEST_SPEED, TestSpeed
910

@@ -20,8 +21,6 @@ def test_section_grids():
2021
evaluation_options=geo_model.interpolation_options.evaluation_options
2122
)
2223

23-
model = geo_model
24-
model_json = model.model_dump_json(by_alias=True, indent=4)
2524
gp.set_section_grid(
2625
grid=geo_model.grid,
2726
section_dict={
@@ -30,15 +29,19 @@ def test_section_grids():
3029
}
3130
)
3231

33-
model_json = model.model_dump_json(by_alias=True, indent=4)
3432
gp.set_topography_from_random(
3533
grid=geo_model.grid,
3634
fractal_dimension=1.2,
3735
d_z=np.array([200, 1000]),
3836
topography_resolution=np.array([60, 60])
3937
)
4038

41-
model_json = model.model_dump_json(by_alias=True, indent=4)
39+
verify_model_serialization(
40+
model=geo_model,
41+
verify_moment="after",
42+
file_name=f"verify/{geo_model.meta.name}"
43+
)
44+
return
4245
gp.compute_model(geo_model)
4346
gpv.plot_2d(
4447
model=geo_model,

0 commit comments

Comments
 (0)