From 9a4af8faf31604752d1d1178c797a2decdc3a21d Mon Sep 17 00:00:00 2001 From: BrianMichell Date: Tue, 21 Oct 2025 15:27:46 +0000 Subject: [PATCH 1/9] Fix import --- src/mdio/builder/templates/seismic_prestack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mdio/builder/templates/seismic_prestack.py b/src/mdio/builder/templates/seismic_prestack.py index 7eb23e9d..410729da 100644 --- a/src/mdio/builder/templates/seismic_prestack.py +++ b/src/mdio/builder/templates/seismic_prestack.py @@ -4,7 +4,7 @@ from mdio.builder.schemas.dtype import ScalarType from mdio.builder.schemas.v1.variable import CoordinateMetadata -from mdio.builder.templates.abstract_dataset_template import AbstractDatasetTemplate +from mdio.builder.templates.base import AbstractDatasetTemplate from mdio.builder.templates.types import SeismicDataDomain From c4414098d5169ec9b96bdcde1da89caac0d859ee Mon Sep 17 00:00:00 2001 From: BrianMichell Date: Tue, 21 Oct 2025 15:29:25 +0000 Subject: [PATCH 2/9] Update attribute name --- tests/unit/v1/templates/test_seismic_prestack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/v1/templates/test_seismic_prestack.py b/tests/unit/v1/templates/test_seismic_prestack.py index 35188fa3..5ddf0e43 100644 --- a/tests/unit/v1/templates/test_seismic_prestack.py +++ b/tests/unit/v1/templates/test_seismic_prestack.py @@ -165,7 +165,7 @@ def test_configuration(self) -> None: "group_coord_y", "orig_field_record_num", ) - assert t.full_chunk_size == (1, 1, 16, 1, 32, 1024) + assert t.full_chunk_shape == (1, 1, 16, 1, 32, 1024) # Variables instantiated when build_dataset() is called assert t._builder is None From 8131006fa74dddc6ed6837e79eec95cf242abe6d Mon Sep 17 00:00:00 2001 From: BrianMichell Date: Tue, 21 Oct 2025 15:35:36 +0000 Subject: [PATCH 3/9] Rename source files --- src/mdio/builder/template_registry.py | 2 +- ...seismic_prestack.py => seismic_3d_prestack_field_records.py} | 0 ...ic_prestack.py => test_seismic_3d_prestack_field_records.py} | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename src/mdio/builder/templates/{seismic_prestack.py => seismic_3d_prestack_field_records.py} (100%) rename tests/unit/v1/templates/{test_seismic_prestack.py => test_seismic_3d_prestack_field_records.py} (98%) diff --git a/src/mdio/builder/template_registry.py b/src/mdio/builder/template_registry.py index f5a974f8..309e5575 100644 --- a/src/mdio/builder/template_registry.py +++ b/src/mdio/builder/template_registry.py @@ -26,8 +26,8 @@ from mdio.builder.templates.seismic_3d_poststack import Seismic3DPostStackTemplate from mdio.builder.templates.seismic_3d_prestack_cdp import Seismic3DPreStackCDPTemplate from mdio.builder.templates.seismic_3d_prestack_coca import Seismic3DPreStackCocaTemplate +from mdio.builder.templates.seismic_3d_prestack_field_records import SeismicPreStackTemplate from mdio.builder.templates.seismic_3d_prestack_shot import Seismic3DPreStackShotTemplate -from mdio.builder.templates.seismic_prestack import SeismicPreStackTemplate if TYPE_CHECKING: from mdio.builder.templates.base import AbstractDatasetTemplate diff --git a/src/mdio/builder/templates/seismic_prestack.py b/src/mdio/builder/templates/seismic_3d_prestack_field_records.py similarity index 100% rename from src/mdio/builder/templates/seismic_prestack.py rename to src/mdio/builder/templates/seismic_3d_prestack_field_records.py diff --git a/tests/unit/v1/templates/test_seismic_prestack.py b/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py similarity index 98% rename from tests/unit/v1/templates/test_seismic_prestack.py rename to tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py index 5ddf0e43..6b764abe 100644 --- a/tests/unit/v1/templates/test_seismic_prestack.py +++ b/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py @@ -13,7 +13,7 @@ from mdio.builder.schemas.v1.units import LengthUnitModel from mdio.builder.schemas.v1.units import TimeUnitEnum from mdio.builder.schemas.v1.units import TimeUnitModel -from mdio.builder.templates.seismic_prestack import SeismicPreStackTemplate +from mdio.builder.templates.seismic_3d_prestack_field_records import SeismicPreStackTemplate UNITS_METER = LengthUnitModel(length=LengthUnitEnum.METER) UNITS_SECOND = TimeUnitModel(time=TimeUnitEnum.SECOND) From 42f54f89f7348c8cab12ffeecc75cfb1e971159b Mon Sep 17 00:00:00 2001 From: BrianMichell Date: Tue, 21 Oct 2025 15:47:10 +0000 Subject: [PATCH 4/9] Rename template name --- src/mdio/builder/template_registry.py | 4 ++-- .../templates/seismic_3d_prestack_field_records.py | 4 ++-- .../test_import_streamer_grid_overrides.py | 2 +- .../test_seismic_3d_prestack_field_records.py | 14 +++++++------- tests/unit/v1/templates/test_template_registry.py | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/mdio/builder/template_registry.py b/src/mdio/builder/template_registry.py index 309e5575..dc956abc 100644 --- a/src/mdio/builder/template_registry.py +++ b/src/mdio/builder/template_registry.py @@ -26,7 +26,7 @@ from mdio.builder.templates.seismic_3d_poststack import Seismic3DPostStackTemplate from mdio.builder.templates.seismic_3d_prestack_cdp import Seismic3DPreStackCDPTemplate from mdio.builder.templates.seismic_3d_prestack_coca import Seismic3DPreStackCocaTemplate -from mdio.builder.templates.seismic_3d_prestack_field_records import SeismicPreStackTemplate +from mdio.builder.templates.seismic_3d_prestack_field_records import Seismic3DPreStackFieldRecordsTemplate from mdio.builder.templates.seismic_3d_prestack_shot import Seismic3DPreStackShotTemplate if TYPE_CHECKING: @@ -134,7 +134,7 @@ def _register_default_templates(self) -> None: self.register(Seismic3DPreStackCocaTemplate("depth")) # Field (shot) data - self.register(SeismicPreStackTemplate("time")) + self.register(Seismic3DPreStackFieldRecordsTemplate("time")) self.register(Seismic2DPreStackShotTemplate("time")) self.register(Seismic3DPreStackShotTemplate("time")) diff --git a/src/mdio/builder/templates/seismic_3d_prestack_field_records.py b/src/mdio/builder/templates/seismic_3d_prestack_field_records.py index 410729da..5f61b78b 100644 --- a/src/mdio/builder/templates/seismic_3d_prestack_field_records.py +++ b/src/mdio/builder/templates/seismic_3d_prestack_field_records.py @@ -8,7 +8,7 @@ from mdio.builder.templates.types import SeismicDataDomain -class SeismicPreStackTemplate(AbstractDatasetTemplate): +class Seismic3DPreStackFieldRecordsTemplate(AbstractDatasetTemplate): """Seismic pre-stack time Dataset template. This should be used for both 2D and 3D datasets. Common-shot or common-channel datasets @@ -34,7 +34,7 @@ def __init__(self, data_domain: SeismicDataDomain): @property def _name(self) -> str: - return f"PreStackGathers3D{self._data_domain.capitalize()}" + return f"PreStackFieldRecords3D{self._data_domain.capitalize()}" def _load_dataset_attributes(self) -> dict[str, Any]: return { diff --git a/tests/integration/test_import_streamer_grid_overrides.py b/tests/integration/test_import_streamer_grid_overrides.py index 5149eac9..f355c2e7 100644 --- a/tests/integration/test_import_streamer_grid_overrides.py +++ b/tests/integration/test_import_streamer_grid_overrides.py @@ -178,7 +178,7 @@ def test_import_6d_segy( # noqa: PLR0913 segy_to_mdio( segy_spec=segy_spec, - mdio_template=TemplateRegistry().get("PreStackGathers3DTime"), # Placeholder for the template + mdio_template=TemplateRegistry().get("PreStackFieldRecords3DTime"), input_path=segy_path, output_path=zarr_tmp, overwrite=True, diff --git a/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py b/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py index 6b764abe..c3b07d70 100644 --- a/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py +++ b/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py @@ -13,7 +13,7 @@ from mdio.builder.schemas.v1.units import LengthUnitModel from mdio.builder.schemas.v1.units import TimeUnitEnum from mdio.builder.schemas.v1.units import TimeUnitModel -from mdio.builder.templates.seismic_3d_prestack_field_records import SeismicPreStackTemplate +from mdio.builder.templates.seismic_3d_prestack_field_records import Seismic3DPreStackFieldRecordsTemplate UNITS_METER = LengthUnitModel(length=LengthUnitEnum.METER) UNITS_SECOND = TimeUnitModel(time=TimeUnitEnum.SECOND) @@ -143,15 +143,15 @@ def _validate_coordinates_headers_trace_mask(dataset: Dataset, headers: Structur assert group_coord_y.metadata.units_v1.length == LengthUnitEnum.METER -class TestSeismic3DPreStackShotTemplate: +class TestSeismic3DPreStackFieldRecordsTemplate: """Unit tests for SeismicPreStackTemplate.""" def test_configuration(self) -> None: """Unit tests for SeismicPreStackTemplate in time domain.""" - t = SeismicPreStackTemplate(data_domain="time") + t = Seismic3DPreStackFieldRecordsTemplate(data_domain="time") # Template attributes for prestack shot - assert t.name == "PreStackGathers3DTime" + assert t.name == "PreStackFieldRecords3DTime" assert t.default_variable_name == "amplitude" assert t.trace_domain == "time" assert t.spatial_dimension_names == ("shot_line", "gun", "shot_point", "cable", "channel") @@ -177,11 +177,11 @@ def test_configuration(self) -> None: assert attrs == {"surveyDimensionality": "3D", "ensembleType": "shot_point", "processingStage": "pre-stack"} assert t.default_variable_name == "amplitude" - assert t.name == "PreStackGathers3DTime" + assert t.name == "PreStackFieldRecords3DTime" def test_build_dataset(self, structured_headers: StructuredType) -> None: """Unit tests for SeismicPreStackTemplate build in time domain.""" - t = SeismicPreStackTemplate(data_domain="time") + t = Seismic3DPreStackFieldRecordsTemplate(data_domain="time") t.add_units({"source_coord_x": UNITS_METER, "source_coord_y": UNITS_METER}) # spatial domain units t.add_units({"group_coord_x": UNITS_METER, "group_coord_y": UNITS_METER}) # spatial domain units t.add_units({"time": UNITS_SECOND}) # data domain units @@ -215,6 +215,6 @@ def test_build_dataset(self, structured_headers: StructuredType) -> None: @pytest.mark.parametrize("data_domain", ["Time", "TiME"]) def test_domain_case_handling(data_domain: str) -> None: """Test that domain parameter handles different cases correctly.""" - template = SeismicPreStackTemplate(data_domain=data_domain) + template = Seismic3DPreStackFieldRecordsTemplate(data_domain=data_domain) assert template._data_domain == data_domain.lower() assert template.name.endswith(data_domain.capitalize()) diff --git a/tests/unit/v1/templates/test_template_registry.py b/tests/unit/v1/templates/test_template_registry.py index a1320580..fecc2f1d 100644 --- a/tests/unit/v1/templates/test_template_registry.py +++ b/tests/unit/v1/templates/test_template_registry.py @@ -31,7 +31,7 @@ "PreStackCdpAngleGathers3DDepth", "PreStackCocaGathers3DTime", "PreStackCocaGathers3DDepth", - "PreStackGathers3DTime", + "PreStackFieldRecords3DTime", "PreStackShotGathers2DTime", "PreStackShotGathers3DTime", ] From 8a23ae3ba85eddc6a40b39ddb02408f6cd809842 Mon Sep 17 00:00:00 2001 From: BrianMichell Date: Tue, 21 Oct 2025 15:50:07 +0000 Subject: [PATCH 5/9] Update todo message --- .../builder/templates/seismic_3d_prestack_field_records.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/mdio/builder/templates/seismic_3d_prestack_field_records.py b/src/mdio/builder/templates/seismic_3d_prestack_field_records.py index 5f61b78b..b01691a1 100644 --- a/src/mdio/builder/templates/seismic_3d_prestack_field_records.py +++ b/src/mdio/builder/templates/seismic_3d_prestack_field_records.py @@ -24,12 +24,9 @@ def __init__(self, data_domain: SeismicDataDomain): self._dim_names = (*self._spatial_dim_names, self._data_domain) self._physical_coord_names = ("source_coord_x", "source_coord_y", "group_coord_x", "group_coord_y") self._logical_coord_names = ("orig_field_record_num",) - # TODO(Dmitriy Repin): Allow specifying full-dimension-extent chunk size in templates. - # https://github.com/TGSAI/mdio-python/issues/720 - # When implemented, the following will be requesting the chunk size of the last dimension - # to be equal to the size of the dimension. + # TODO(Anyone): Disable chunking in time domain when support is merged. + # https://github.com/TGSAI/mdio-python/pull/723 # self._var_chunk_shape = (1, 1, 16, 1, 32, -1) - # For now, we are hardcoding the chunk size to 1024. self._var_chunk_shape = (1, 1, 16, 1, 32, 1024) @property From eae2c0936d4e4ce0620896df0c0a8a5d89e3937d Mon Sep 17 00:00:00 2001 From: BrianMichell Date: Tue, 21 Oct 2025 16:17:25 +0000 Subject: [PATCH 6/9] Alignment with current unit testing standards --- .../test_seismic_3d_prestack_field_records.py | 148 +++++------------- 1 file changed, 36 insertions(+), 112 deletions(-) diff --git a/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py b/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py index c3b07d70..2213cedc 100644 --- a/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py +++ b/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py @@ -43,59 +43,19 @@ def _validate_coordinates_headers_trace_mask(dataset: Dataset, headers: Structur ) # Verify dimension coordinate variables - shot_line = validate_variable( - dataset, - name="shot_line", - dims=[("shot_line", 1)], - coords=["shot_line"], - dtype=ScalarType.INT32, - ) - assert shot_line.metadata is None - - gun = validate_variable( - dataset, - name="gun", - dims=[("gun", 3)], - coords=["gun"], - dtype=ScalarType.INT32, - ) - assert gun.metadata is None - - shot_point = validate_variable( - dataset, - name="shot_point", - dims=[("shot_point", 256)], - coords=["shot_point"], - dtype=ScalarType.INT32, - ) - assert shot_point.metadata is None - - cable = validate_variable( - dataset, - name="cable", - dims=[("cable", 512)], - coords=["cable"], - dtype=ScalarType.INT32, - ) - assert cable.metadata is None - - channel = validate_variable( - dataset, - name="channel", - dims=[("channel", 24)], - coords=["channel"], - dtype=ScalarType.INT32, - ) - assert channel.metadata is None - - domain_var = validate_variable( - dataset, - name=domain, - dims=[(domain, 2048)], - coords=[domain], - dtype=ScalarType.INT32, - ) - assert domain_var.metadata is None + for dim_name in ["shot_line", "gun", "shot_point", "cable", "channel", domain]: + validate_variable( + dataset, + name=dim_name, + dims=[ + ( + dim_name, + {"shot_line": 1, "gun": 3, "shot_point": 256, "cable": 512, "channel": 24, domain: 2048}[dim_name], + ) + ], + coords=[dim_name], + dtype=ScalarType.INT32, + ) # Verify non-dimension coordinate variables validate_variable( @@ -106,98 +66,62 @@ def _validate_coordinates_headers_trace_mask(dataset: Dataset, headers: Structur dtype=ScalarType.INT32, ) - source_coord_x = validate_variable( - dataset, - name="source_coord_x", - dims=[("shot_line", 1), ("gun", 3), ("shot_point", 256)], - coords=["source_coord_x"], - dtype=ScalarType.FLOAT64, - ) - assert source_coord_x.metadata.units_v1.length == LengthUnitEnum.METER - - source_coord_y = validate_variable( - dataset, - name="source_coord_y", - dims=[("shot_line", 1), ("gun", 3), ("shot_point", 256)], - coords=["source_coord_y"], - dtype=ScalarType.FLOAT64, - ) - assert source_coord_y.metadata.units_v1.length == LengthUnitEnum.METER - - group_coord_x = validate_variable( - dataset, - name="group_coord_x", - dims=[("shot_line", 1), ("gun", 3), ("shot_point", 256), ("cable", 512), ("channel", 24)], - coords=["group_coord_x"], - dtype=ScalarType.FLOAT64, - ) - assert group_coord_x.metadata.units_v1.length == LengthUnitEnum.METER - - group_coord_y = validate_variable( - dataset, - name="group_coord_y", - dims=[("shot_line", 1), ("gun", 3), ("shot_point", 256), ("cable", 512), ("channel", 24)], - coords=["group_coord_y"], - dtype=ScalarType.FLOAT64, - ) - assert group_coord_y.metadata.units_v1.length == LengthUnitEnum.METER + # Verify coordinate variables with units + for coord_name in ["source_coord_x", "source_coord_y", "group_coord_x", "group_coord_y"]: + coord = validate_variable( + dataset, + name=coord_name, + dims=[("shot_line", 1), ("gun", 3), ("shot_point", 256)] + + ([("cable", 512), ("channel", 24)] if "group" in coord_name else []), + coords=[coord_name], + dtype=ScalarType.FLOAT64, + ) + assert coord.metadata.units_v1.length == LengthUnitEnum.METER class TestSeismic3DPreStackFieldRecordsTemplate: - """Unit tests for SeismicPreStackTemplate.""" + """Unit tests for Seismic3DPreStackFieldRecordsTemplate.""" def test_configuration(self) -> None: - """Unit tests for SeismicPreStackTemplate in time domain.""" + """Unit tests for Seismic3DPreStackFieldRecordsTemplate.""" t = Seismic3DPreStackFieldRecordsTemplate(data_domain="time") - # Template attributes for prestack shot + # Template attributes assert t.name == "PreStackFieldRecords3DTime" - assert t.default_variable_name == "amplitude" - assert t.trace_domain == "time" - assert t.spatial_dimension_names == ("shot_line", "gun", "shot_point", "cable", "channel") - assert t.dimension_names == ("shot_line", "gun", "shot_point", "cable", "channel", "time") - assert t.physical_coordinate_names == ("source_coord_x", "source_coord_y", "group_coord_x", "group_coord_y") - assert t.logical_coordinate_names == ("orig_field_record_num",) - assert t.coordinate_names == ( - "source_coord_x", - "source_coord_y", - "group_coord_x", - "group_coord_y", - "orig_field_record_num", - ) + assert t._dim_names == ("shot_line", "gun", "shot_point", "cable", "channel", "time") + assert t._physical_coord_names == ("source_coord_x", "source_coord_y", "group_coord_x", "group_coord_y") + # TODO(Anyone): Disable chunking in time domain when support is merged. + # https://github.com/TGSAI/mdio-python/pull/723 assert t.full_chunk_shape == (1, 1, 16, 1, 32, 1024) # Variables instantiated when build_dataset() is called assert t._builder is None assert t._dim_sizes == () - assert t._units == {} - # Verify prestack shot attributes + # Verify dataset attributes attrs = t._load_dataset_attributes() assert attrs == {"surveyDimensionality": "3D", "ensembleType": "shot_point", "processingStage": "pre-stack"} assert t.default_variable_name == "amplitude" - assert t.name == "PreStackFieldRecords3DTime" - def test_build_dataset(self, structured_headers: StructuredType) -> None: - """Unit tests for SeismicPreStackTemplate build in time domain.""" + """Unit tests for Seismic3DPreStackFieldRecordsTemplate build.""" t = Seismic3DPreStackFieldRecordsTemplate(data_domain="time") t.add_units({"source_coord_x": UNITS_METER, "source_coord_y": UNITS_METER}) # spatial domain units t.add_units({"group_coord_x": UNITS_METER, "group_coord_y": UNITS_METER}) # spatial domain units t.add_units({"time": UNITS_SECOND}) # data domain units dataset = t.build_dataset( - "North Sea 3D Shot Time", sizes=(1, 3, 256, 512, 24, 2048), header_dtype=structured_headers + "North Sea 3D Field Records", sizes=(1, 3, 256, 512, 24, 2048), header_dtype=structured_headers ) - assert dataset.metadata.name == "North Sea 3D Shot Time" + assert dataset.metadata.name == "North Sea 3D Field Records" assert dataset.metadata.attributes["surveyDimensionality"] == "3D" assert dataset.metadata.attributes["ensembleType"] == "shot_point" assert dataset.metadata.attributes["processingStage"] == "pre-stack" _validate_coordinates_headers_trace_mask(dataset, structured_headers, "time") - # Verify seismic variable (prestack shot time data) + # Verify seismic variable seismic = validate_variable( dataset, name="amplitude", From cd7d196daeb9c334c968be8589e68696e748c48f Mon Sep 17 00:00:00 2001 From: BrianMichell Date: Tue, 21 Oct 2025 16:29:11 +0000 Subject: [PATCH 7/9] Use more correct template name --- src/mdio/builder/template_registry.py | 6 +++-- ...mic_3d_prestack_streamer_field_records.py} | 8 ++++--- .../test_import_streamer_grid_overrides.py | 2 +- ...mic_3d_prestack_streamer_field_records.py} | 22 +++++++++---------- .../v1/templates/test_template_registry.py | 2 +- 5 files changed, 22 insertions(+), 18 deletions(-) rename src/mdio/builder/templates/{seismic_3d_prestack_field_records.py => seismic_3d_prestack_streamer_field_records.py} (90%) rename tests/unit/v1/templates/{test_seismic_3d_prestack_field_records.py => test_seismic_3d_prestack_streamer_field_records.py} (86%) diff --git a/src/mdio/builder/template_registry.py b/src/mdio/builder/template_registry.py index dc956abc..fa690c56 100644 --- a/src/mdio/builder/template_registry.py +++ b/src/mdio/builder/template_registry.py @@ -26,8 +26,10 @@ from mdio.builder.templates.seismic_3d_poststack import Seismic3DPostStackTemplate from mdio.builder.templates.seismic_3d_prestack_cdp import Seismic3DPreStackCDPTemplate from mdio.builder.templates.seismic_3d_prestack_coca import Seismic3DPreStackCocaTemplate -from mdio.builder.templates.seismic_3d_prestack_field_records import Seismic3DPreStackFieldRecordsTemplate from mdio.builder.templates.seismic_3d_prestack_shot import Seismic3DPreStackShotTemplate +from mdio.builder.templates.seismic_3d_prestack_streamer_field_records import ( + Seismic3DPreStackStreamerFieldRecordsTemplate, +) if TYPE_CHECKING: from mdio.builder.templates.base import AbstractDatasetTemplate @@ -134,7 +136,7 @@ def _register_default_templates(self) -> None: self.register(Seismic3DPreStackCocaTemplate("depth")) # Field (shot) data - self.register(Seismic3DPreStackFieldRecordsTemplate("time")) + self.register(Seismic3DPreStackStreamerFieldRecordsTemplate("time")) self.register(Seismic2DPreStackShotTemplate("time")) self.register(Seismic3DPreStackShotTemplate("time")) diff --git a/src/mdio/builder/templates/seismic_3d_prestack_field_records.py b/src/mdio/builder/templates/seismic_3d_prestack_streamer_field_records.py similarity index 90% rename from src/mdio/builder/templates/seismic_3d_prestack_field_records.py rename to src/mdio/builder/templates/seismic_3d_prestack_streamer_field_records.py index b01691a1..b3b42512 100644 --- a/src/mdio/builder/templates/seismic_3d_prestack_field_records.py +++ b/src/mdio/builder/templates/seismic_3d_prestack_streamer_field_records.py @@ -8,10 +8,12 @@ from mdio.builder.templates.types import SeismicDataDomain -class Seismic3DPreStackFieldRecordsTemplate(AbstractDatasetTemplate): +class Seismic3DPreStackStreamerFieldRecordsTemplate(AbstractDatasetTemplate): """Seismic pre-stack time Dataset template. - This should be used for both 2D and 3D datasets. Common-shot or common-channel datasets + A generalized template for pre-stack field records in either 2D or 3D. + - Common-shot dataset + - Common-channel dataset Args: data_domain: The domain of the dataset. @@ -31,7 +33,7 @@ def __init__(self, data_domain: SeismicDataDomain): @property def _name(self) -> str: - return f"PreStackFieldRecords3D{self._data_domain.capitalize()}" + return f"PreStackStreamerFieldRecords3D{self._data_domain.capitalize()}" def _load_dataset_attributes(self) -> dict[str, Any]: return { diff --git a/tests/integration/test_import_streamer_grid_overrides.py b/tests/integration/test_import_streamer_grid_overrides.py index f355c2e7..c9aad726 100644 --- a/tests/integration/test_import_streamer_grid_overrides.py +++ b/tests/integration/test_import_streamer_grid_overrides.py @@ -178,7 +178,7 @@ def test_import_6d_segy( # noqa: PLR0913 segy_to_mdio( segy_spec=segy_spec, - mdio_template=TemplateRegistry().get("PreStackFieldRecords3DTime"), + mdio_template=TemplateRegistry().get("PreStackStreamerFieldRecords3DTime"), input_path=segy_path, output_path=zarr_tmp, overwrite=True, diff --git a/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py b/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py similarity index 86% rename from tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py rename to tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py index 2213cedc..74a5cd4e 100644 --- a/tests/unit/v1/templates/test_seismic_3d_prestack_field_records.py +++ b/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py @@ -13,7 +13,7 @@ from mdio.builder.schemas.v1.units import LengthUnitModel from mdio.builder.schemas.v1.units import TimeUnitEnum from mdio.builder.schemas.v1.units import TimeUnitModel -from mdio.builder.templates.seismic_3d_prestack_field_records import Seismic3DPreStackFieldRecordsTemplate +from mdio.builder.templates.seismic_3d_prestack_streamer_field_records import Seismic3DPreStackStreamerFieldRecordsTemplate UNITS_METER = LengthUnitModel(length=LengthUnitEnum.METER) UNITS_SECOND = TimeUnitModel(time=TimeUnitEnum.SECOND) @@ -79,15 +79,15 @@ def _validate_coordinates_headers_trace_mask(dataset: Dataset, headers: Structur assert coord.metadata.units_v1.length == LengthUnitEnum.METER -class TestSeismic3DPreStackFieldRecordsTemplate: - """Unit tests for Seismic3DPreStackFieldRecordsTemplate.""" +class TestSeismic3DPreStackStreamerFieldRecordsTemplate: + """Unit tests for Seismic3DPreStackStreamerFieldRecordsTemplate.""" def test_configuration(self) -> None: - """Unit tests for Seismic3DPreStackFieldRecordsTemplate.""" - t = Seismic3DPreStackFieldRecordsTemplate(data_domain="time") + """Unit tests for Seismic3DPreStackStreamerFieldRecordsTemplate.""" + t = Seismic3DPreStackStreamerFieldRecordsTemplate(data_domain="time") # Template attributes - assert t.name == "PreStackFieldRecords3DTime" + assert t.name == "PreStackStreamerFieldRecords3DTime" assert t._dim_names == ("shot_line", "gun", "shot_point", "cable", "channel", "time") assert t._physical_coord_names == ("source_coord_x", "source_coord_y", "group_coord_x", "group_coord_y") # TODO(Anyone): Disable chunking in time domain when support is merged. @@ -104,17 +104,17 @@ def test_configuration(self) -> None: assert t.default_variable_name == "amplitude" def test_build_dataset(self, structured_headers: StructuredType) -> None: - """Unit tests for Seismic3DPreStackFieldRecordsTemplate build.""" - t = Seismic3DPreStackFieldRecordsTemplate(data_domain="time") + """Unit tests for Seismic3DPreStackStreamerFieldRecordsTemplate build.""" + t = Seismic3DPreStackStreamerFieldRecordsTemplate(data_domain="time") t.add_units({"source_coord_x": UNITS_METER, "source_coord_y": UNITS_METER}) # spatial domain units t.add_units({"group_coord_x": UNITS_METER, "group_coord_y": UNITS_METER}) # spatial domain units t.add_units({"time": UNITS_SECOND}) # data domain units dataset = t.build_dataset( - "North Sea 3D Field Records", sizes=(1, 3, 256, 512, 24, 2048), header_dtype=structured_headers + "North Sea 3D Streamer Field Records", sizes=(1, 3, 256, 512, 24, 2048), header_dtype=structured_headers ) - assert dataset.metadata.name == "North Sea 3D Field Records" + assert dataset.metadata.name == "North Sea 3D Streamer Field Records" assert dataset.metadata.attributes["surveyDimensionality"] == "3D" assert dataset.metadata.attributes["ensembleType"] == "shot_point" assert dataset.metadata.attributes["processingStage"] == "pre-stack" @@ -139,6 +139,6 @@ def test_build_dataset(self, structured_headers: StructuredType) -> None: @pytest.mark.parametrize("data_domain", ["Time", "TiME"]) def test_domain_case_handling(data_domain: str) -> None: """Test that domain parameter handles different cases correctly.""" - template = Seismic3DPreStackFieldRecordsTemplate(data_domain=data_domain) + template = Seismic3DPreStackStreamerFieldRecordsTemplate(data_domain=data_domain) assert template._data_domain == data_domain.lower() assert template.name.endswith(data_domain.capitalize()) diff --git a/tests/unit/v1/templates/test_template_registry.py b/tests/unit/v1/templates/test_template_registry.py index fecc2f1d..04d49a7a 100644 --- a/tests/unit/v1/templates/test_template_registry.py +++ b/tests/unit/v1/templates/test_template_registry.py @@ -31,7 +31,7 @@ "PreStackCdpAngleGathers3DDepth", "PreStackCocaGathers3DTime", "PreStackCocaGathers3DDepth", - "PreStackFieldRecords3DTime", + "PreStackStreamerFieldRecords3DTime", "PreStackShotGathers2DTime", "PreStackShotGathers3DTime", ] From 29635140e1ef95fb26792df9943545dbab230481 Mon Sep 17 00:00:00 2001 From: BrianMichell Date: Tue, 21 Oct 2025 16:38:52 +0000 Subject: [PATCH 8/9] pre-commit --- .../test_seismic_3d_prestack_streamer_field_records.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py b/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py index 74a5cd4e..6fb343c0 100644 --- a/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py +++ b/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py @@ -13,7 +13,9 @@ from mdio.builder.schemas.v1.units import LengthUnitModel from mdio.builder.schemas.v1.units import TimeUnitEnum from mdio.builder.schemas.v1.units import TimeUnitModel -from mdio.builder.templates.seismic_3d_prestack_streamer_field_records import Seismic3DPreStackStreamerFieldRecordsTemplate +from mdio.builder.templates.seismic_3d_prestack_streamer_field_records import ( + Seismic3DPreStackStreamerFieldRecordsTemplate, +) UNITS_METER = LengthUnitModel(length=LengthUnitEnum.METER) UNITS_SECOND = TimeUnitModel(time=TimeUnitEnum.SECOND) From cbe88ab740b66df353cd0b232e24a03cb3688a3c Mon Sep 17 00:00:00 2001 From: BrianMichell Date: Tue, 21 Oct 2025 16:41:15 +0000 Subject: [PATCH 9/9] Update doc string --- .../test_seismic_3d_prestack_streamer_field_records.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py b/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py index 6fb343c0..d07bd03d 100644 --- a/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py +++ b/tests/unit/v1/templates/test_seismic_3d_prestack_streamer_field_records.py @@ -1,4 +1,4 @@ -"""Unit tests for SeismicPreStackTemplate.""" +"""Unit tests for Seismic3DPreStackStreamerFieldRecordsTemplate.""" import pytest from tests.unit.v1.helpers import validate_variable