@@ -118,3 +118,50 @@ def test_npy_to_mdio_seismic_template(mock_array: NDArray) -> None:
118118 npt .assert_array_equal (ds [data_var ].values , mock_array )
119119 assert list (ds .sizes .keys ()) == ["inline" , "crossline" , "time" ]
120120 assert ds [data_var ].shape == mock_array .shape
121+
122+
123+ def test_npy_to_mdio_invalid_coordinate_names (mock_array : NDArray , mock_template : AbstractDatasetTemplate ) -> None :
124+ """Test NumPy to MDIO conversion with invalid coordinate names."""
125+ index_coords = {
126+ "inline" : np .arange (15 ), # valid
127+ "crossline" : np .arange (10 ), # valid
128+ "invalid_dim" : np .arange (20 ), # invalid dimension name
129+ }
130+
131+ with pytest .raises (ValueError , match = r"Coordinate name 'invalid_dim' not found in template dimensions" ):
132+ numpy_to_mdio (mock_array , mock_template , "memory://npy_invalid.mdio" , index_coords = index_coords )
133+
134+
135+ def test_npy_to_mdio_invalid_coordinate_sizes (mock_array : NDArray , mock_template : AbstractDatasetTemplate ) -> None :
136+ """Test NumPy to MDIO conversion with invalid coordinate array sizes."""
137+ index_coords = {
138+ "inline" : np .arange (10 ), # wrong size (should be 15)
139+ "crossline" : np .arange (10 ), # valid
140+ "time" : np .arange (20 ), # valid
141+ }
142+
143+ with pytest .raises (
144+ ValueError , match = r"Size of coordinate 'inline' \(10\) does not match array dimension size \(15\)"
145+ ):
146+ numpy_to_mdio (mock_array , mock_template , "memory://npy_wrong_size.mdio" , index_coords = index_coords )
147+
148+
149+ def test_npy_to_mdio_valid_custom_coordinates (mock_array : NDArray , mock_template : AbstractDatasetTemplate ) -> None :
150+ """Test NumPy to MDIO conversion with valid custom coordinates."""
151+ index_coords = {
152+ "inline" : np .arange (100 , 115 ), # valid size (15)
153+ "crossline" : np .arange (200 , 210 ), # valid size (10)
154+ "time" : np .arange (0 , 20 ), # valid size (20)
155+ }
156+
157+ numpy_to_mdio (mock_array , mock_template , "memory://npy_valid_custom.mdio" , index_coords = index_coords )
158+ ds = open_mdio ("memory://npy_valid_custom.mdio" )
159+
160+ # Check data
161+ data_var = ds .attrs .get ("defaultVariableName" , "amplitude" )
162+ npt .assert_array_equal (ds [data_var ].values , mock_array )
163+
164+ # Check coordinates are correctly set
165+ npt .assert_array_equal (ds ["inline" ].values , index_coords ["inline" ])
166+ npt .assert_array_equal (ds ["crossline" ].values , index_coords ["crossline" ])
167+ npt .assert_array_equal (ds ["time" ].values , index_coords ["time" ])
0 commit comments