|
11 | 11 | from segy.config import SegySettings |
12 | 12 | from segy.standards.codes import MeasurementSystem as segy_MeasurementSystem |
13 | 13 | from segy.standards.fields.trace import Rev0 as TraceHeaderFieldsRev0 |
| 14 | +from xarray import Variable |
14 | 15 |
|
15 | 16 | from mdio.constants import UINT32_MAX |
16 | 17 | from mdio.converters.exceptions import EnvironmentFormatError |
17 | 18 | from mdio.converters.exceptions import GridTraceCountError |
18 | 19 | from mdio.converters.exceptions import GridTraceSparsityError |
19 | 20 | from mdio.converters.type_converter import to_structured_type |
20 | 21 | from mdio.core.grid import Grid |
| 22 | +from mdio.schemas.v1.dataset_serializer import _get_fill_value |
21 | 23 | from mdio.schemas.v1.dataset_serializer import to_xarray_dataset |
22 | 24 | from mdio.schemas.v1.units import AllUnits |
23 | 25 | from mdio.schemas.v1.units import LengthUnitEnum |
@@ -227,7 +229,18 @@ def populate_non_dim_coordinates( |
227 | 229 | """Populate the xarray dataset with coordinate variables.""" |
228 | 230 | not_null = grid.map[:] != UINT32_MAX |
229 | 231 | for c_name, c_values in coordinates.items(): |
230 | | - dataset[c_name].values[not_null] = c_values |
| 232 | + encodings = dataset[c_name].encoding |
| 233 | + tmp_coords = np.full( |
| 234 | + not_null.shape, dtype=dataset[c_name].dtype, fill_value=_get_fill_value(dataset[c_name].dtype) |
| 235 | + ) |
| 236 | + tmp_coords[not_null] = c_values |
| 237 | + dataset[c_name].values = tmp_coords |
| 238 | + dataset[c_name] = Variable( |
| 239 | + dataset[c_name].dims, |
| 240 | + tmp_coords, |
| 241 | + attrs=dataset[c_name].attrs, |
| 242 | + encoding=encodings, # Ensure we preserve all of the encodings. |
| 243 | + ) |
231 | 244 | drop_vars_delayed.append(c_name) |
232 | 245 | return dataset, drop_vars_delayed |
233 | 246 |
|
|
0 commit comments