1
+ import dataclasses
2
+
1
3
import enum
2
4
import warnings
3
5
from typing import Union , Optional
6
8
7
9
from gempy .core .data .grid_modules import topography , grid_types
8
10
from gempy .core .data .grid_modules .topography import Topography
11
+ from gempy_engine .core .data .centered_grid import CenteredGrid
9
12
10
13
11
14
class GridTypes (enum .Enum ):
@@ -16,7 +19,7 @@ class GridTypes(enum.Enum):
16
19
CENTERED = 4
17
20
18
21
19
-
22
+ @ dataclasses . dataclass
20
23
class Grid (object ):
21
24
""" Class to generate grids.
22
25
@@ -51,17 +54,27 @@ class Grid(object):
51
54
gravity_grid (:class:`gempy.core.grid_modules.grid_types.Gravity`)
52
55
"""
53
56
57
+ dense_grid : Optional [grid_types .RegularGrid ]
58
+ octree_grid : Optional [grid_types .RegularGrid ]
59
+ custom_grid : Optional [grid_types .CustomGrid ]
60
+ topography : Optional [Topography ]
61
+ sections : Optional [grid_types .Sections ]
62
+ centered_grid : Optional [CenteredGrid ]
63
+
64
+ extent : Optional [np .ndarray ] # * Model extent should be cross grid
65
+
54
66
def __init__ (self , extent = None , resolution = None ):
55
67
self .values = np .empty ((0 , 3 ))
56
68
self .values_r = np .empty ((0 , 3 ))
57
69
self .length = np .empty (0 )
58
70
self ._octree_levels = - 1
59
- self .grid_types = np .array (['regular' , 'custom' , 'topography' , 'sections' , 'centered' , 'octree' ]) # TODO: Make a enumerator!
71
+ self .grid_types = np .array (['regular' , 'custom' , 'topography' , 'sections' , 'centered' , 'octree' ]) # TODO: Make a enumerator!
60
72
self .active_grids_bool = np .zeros (6 , dtype = bool )
61
73
# All grid types must have values
62
74
63
75
# Init optional grids
64
- self .regular_grid = None
76
+ self .dense_grid = None
77
+ self .octree_grid = None
65
78
self .custom_grid = None
66
79
self .custom_grid_grid_active = False
67
80
self .topography : Optional [Topography ] = None
@@ -70,6 +83,8 @@ def __init__(self, extent=None, resolution=None):
70
83
self .centered_grid = None
71
84
self .centered_grid_active = False
72
85
86
+ self .extent = extent
87
+
73
88
# Init basic grid empty
74
89
if extent is not None and resolution is not None :
75
90
self .regular_grid = grid_types .RegularGrid (extent , resolution )
@@ -80,6 +95,38 @@ def __init__(self, extent=None, resolution=None):
80
95
81
96
self .update_grid_values ()
82
97
98
+ # ? Do we need a active_regular grid property for backwards compatibility?
99
+ @property
100
+ def regular_grid (self ):
101
+ warnings .warn ('This property is deprecated. Use the dense_grid or octree_grid instead' , DeprecationWarning )
102
+ if self .dense_grid is not None and self .octree_grid is not None :
103
+ raise AttributeError ('Both dense_grid and octree_grid are active. This is not possible.' )
104
+ elif self .dense_grid is not None :
105
+ return self .dense_grid
106
+ elif self .octree_grid is not None :
107
+ return self .octree_grid
108
+ else :
109
+ return None
110
+
111
+ @regular_grid .setter
112
+ def regular_grid (self , value ):
113
+ warnings .warn ('This property is deprecated. Use the dense_grid property instead' , DeprecationWarning )
114
+ self .dense_grid = value
115
+
116
+ @property
117
+ def octree_levels (self ):
118
+ return self ._octree_levels
119
+
120
+ @octree_levels .setter
121
+ def octree_levels (self , value ):
122
+ self ._octree_levels = value
123
+ self .octree_grid = grid_types .RegularGrid (
124
+ extent = self .extent ,
125
+ resolution = np .array ([2 ** value ] * 3 ),
126
+ )
127
+ self .active_grids_bool [5 ] = True
128
+ self .update_grid_values ()
129
+
83
130
def __str__ (self ):
84
131
grid_summary = [f"{ g_type } (active: { getattr (self , g_type + '_grid_active' )} ): { len (getattr (self , g_type + '_grid' ).values )} points"
85
132
for g_type in self .grid_types ]
@@ -89,7 +136,7 @@ def __str__(self):
89
136
@property
90
137
def active_grids (self ) -> np .ndarray :
91
138
return self .grid_types [self .active_grids_bool ]
92
-
139
+
93
140
def create_regular_grid (self , extent = None , resolution = None , set_active = True , * args , ** kwargs ):
94
141
"""
95
142
Set a new regular grid and activate it.
@@ -177,7 +224,7 @@ def create_section_grid(self, section_dict):
177
224
# ? DEP?
178
225
def create_centered_grid (self , centers , radius , resolution = None ):
179
226
"""Initialize gravity grid. Deactivate the rest of the grids"""
180
- self .centered_grid = grid_types . CenteredGrid (centers , radius , resolution )
227
+ self .centered_grid = CenteredGrid (centers , radius , resolution )
181
228
# self.active_grids = np.zeros(4, dtype=bool)
182
229
self .set_active ('centered' )
183
230
@@ -198,7 +245,7 @@ def set_active(self, grid_name: Union[str, np.ndarray]):
198
245
199
246
"""
200
247
warnings .warn ('This function is deprecated. Use gempy.set_active_grid instead' , DeprecationWarning )
201
-
248
+
202
249
where = self .grid_types == grid_name
203
250
self .active_grids_bool [where ] = True
204
251
self .update_grid_values ()
@@ -223,7 +270,7 @@ def update_grid_values(self):
223
270
lengths = [0 ]
224
271
all_grids = [self .regular_grid , self .custom_grid , self .topography , self .sections , self .centered_grid ]
225
272
try :
226
- for e , grid_types in enumerate ( all_grids ):
273
+ for e , grid_types in enumerate (all_grids ):
227
274
if self .active_grids_bool [e ]:
228
275
self .values = np .vstack ((self .values , grid_types .values ))
229
276
lengths .append (grid_types .values .shape [0 ])
0 commit comments