@@ -31,7 +31,7 @@ def test_dimension_builder_state() -> None:
3131 builder = MDIODatasetBuilder ("test_dataset" )
3232
3333 # First dimension should change state to HAS_DIMENSIONS and create a variable
34- builder = builder .add_dimension ("x" , 100 , long_name = "X Dimension" )
34+ builder .add_dimension ("x" , 100 , long_name = "X Dimension" )
3535 assert builder ._state == _BuilderState .HAS_DIMENSIONS
3636 assert len (builder ._dimensions ) == 1 # noqa: PLR2004
3737 assert len (builder ._variables ) == 1 # noqa: PLR2004
@@ -43,7 +43,7 @@ def test_dimension_builder_state() -> None:
4343 assert builder ._variables [0 ].dimensions [0 ].name == "x"
4444
4545 # Adding another dimension should maintain state and create another variable
46- builder = builder .add_dimension ("y" , 200 , data_type = ScalarType .UINT32 )
46+ builder .add_dimension ("y" , 200 , data_type = ScalarType .UINT32 )
4747 assert builder ._state == _BuilderState .HAS_DIMENSIONS
4848 assert len (builder ._dimensions ) == 2 # noqa: PLR2004
4949 assert len (builder ._variables ) == 2 # noqa: PLR2004
@@ -54,12 +54,12 @@ def test_dimension_builder_state() -> None:
5454 assert builder ._variables [1 ].dimensions [0 ].name == "y"
5555
5656
57- def test_dimension_with_metadata () -> None :
57+ def test_dimension_with_units () -> None :
5858 """Test adding dimensions with custom metadata."""
5959 builder = MDIODatasetBuilder ("test_dataset" )
6060
6161 # Add dimension with custom metadata
62- builder = builder .add_dimension (
62+ builder .add_dimension (
6363 "depth" ,
6464 size = 100 ,
6565 data_type = ScalarType .FLOAT32 ,
@@ -73,6 +73,214 @@ def test_dimension_with_metadata() -> None:
7373 assert depth_var .metadata .units_v1 .length == "m"
7474
7575
76+ def test_dimension_with_attributes () -> None :
77+ """Test adding dimensions with attributes."""
78+ builder = MDIODatasetBuilder ("test_dataset" )
79+
80+ # Add dimension with attributes
81+ builder .add_dimension (
82+ "depth" ,
83+ size = 100 ,
84+ data_type = ScalarType .FLOAT32 ,
85+ metadata = {"attributes" : {"MGA" : 51 }},
86+ )
87+
88+ assert len (builder ._variables ) == 1
89+ depth_var = builder ._variables [0 ]
90+ assert depth_var .name == "depth"
91+ assert depth_var .data_type == ScalarType .FLOAT32
92+ assert depth_var .metadata .attributes ["MGA" ] == 51
93+
94+
95+ def test_dimension_with_chunk_grid () -> None :
96+ """Test adding dimensions with chunk grid."""
97+ builder = MDIODatasetBuilder ("test_dataset" )
98+
99+ # Add dimension with chunk grid
100+ builder .add_dimension (
101+ "depth" ,
102+ size = 100 ,
103+ data_type = ScalarType .FLOAT32 ,
104+ metadata = {"chunkGrid" : {"name" : "regular" , "configuration" : {"chunkShape" : [20 ]}}},
105+ )
106+
107+ assert len (builder ._variables ) == 1
108+ depth_var = builder ._variables [0 ]
109+ assert depth_var .name == "depth"
110+ assert depth_var .data_type == ScalarType .FLOAT32
111+ assert depth_var .metadata .chunk_grid .name == "regular"
112+ assert depth_var .metadata .chunk_grid .configuration .chunk_shape == [20 ]
113+
114+
115+ def test_dimension_with_stats () -> None :
116+ """Test adding dimensions with stats."""
117+ builder = MDIODatasetBuilder ("test_dataset" )
118+
119+ # Add dimension with stats
120+ builder .add_dimension (
121+ "depth" ,
122+ size = 100 ,
123+ data_type = ScalarType .FLOAT32 ,
124+ metadata = {
125+ "statsV1" : {
126+ "count" : 100 ,
127+ "sum" : 1215.1 ,
128+ "sumSquares" : 125.12 ,
129+ "min" : 5.61 ,
130+ "max" : 10.84 ,
131+ "histogram" : {"binCenters" : [1 , 2 ], "counts" : [10 , 15 ]},
132+ }
133+ },
134+ )
135+
136+ assert len (builder ._variables ) == 1
137+ depth_var = builder ._variables [0 ]
138+ assert depth_var .name == "depth"
139+ assert depth_var .data_type == ScalarType .FLOAT32
140+ assert depth_var .metadata .stats_v1 .count == 100
141+ assert depth_var .metadata .stats_v1 .sum == 1215.1
142+
143+
144+ def test_dimension_with_full_metadata () -> None :
145+ """Test adding dimensions with all metadata."""
146+ builder = MDIODatasetBuilder ("test_dataset" )
147+
148+ # Add dimension with all metadata
149+ builder .add_dimension (
150+ "depth" ,
151+ size = 100 ,
152+ data_type = ScalarType .FLOAT32 ,
153+ metadata = {
154+ "unitsV1" : {"length" : "m" },
155+ "attributes" : {"MGA" : 51 },
156+ "chunkGrid" : {"name" : "regular" , "configuration" : {"chunkShape" : [20 ]}},
157+ "statsV1" : {
158+ "count" : 100 ,
159+ "sum" : 1215.1 ,
160+ "sumSquares" : 125.12 ,
161+ "min" : 5.61 ,
162+ "max" : 10.84 ,
163+ "histogram" : {"binCenters" : [1 , 2 ], "counts" : [10 , 15 ]},
164+ },
165+ },
166+ )
167+
168+ assert len (builder ._variables ) == 1
169+ depth_var = builder ._variables [0 ]
170+ assert depth_var .name == "depth"
171+ assert depth_var .data_type == ScalarType .FLOAT32
172+ assert depth_var .metadata .units_v1 .length == "m"
173+ assert depth_var .metadata .attributes ["MGA" ] == 51
174+ assert depth_var .metadata .chunk_grid .name == "regular"
175+ assert depth_var .metadata .chunk_grid .configuration .chunk_shape == [20 ]
176+ assert depth_var .metadata .stats_v1 .count == 100
177+ assert depth_var .metadata .stats_v1 .sum == 1215.1
178+ assert depth_var .metadata .stats_v1 .sum_squares == 125.12
179+ assert depth_var .metadata .stats_v1 .min == 5.61
180+ assert depth_var .metadata .stats_v1 .max == 10.84
181+ assert depth_var .metadata .stats_v1 .histogram .bin_centers == [1 , 2 ]
182+ assert depth_var .metadata .stats_v1 .histogram .counts == [10 , 15 ]
183+
184+ j = builder .build ().json ()
185+ print (j )
186+
187+
188+ def test_coordiante_with_units () -> None :
189+ """Test adding coordinates with units."""
190+ builder = MDIODatasetBuilder ("test_dataset" )
191+ builder .add_dimension ("inline" , 100 )
192+ builder .add_dimension ("crossline" , 100 )
193+
194+ # Add coordinate with units
195+ builder .add_coordinate ("cdp" , dimensions = ["inline" , "crossline" ], metadata = {"unitsV1" : {"length" : "m" }})
196+
197+ assert len (builder ._variables ) == 2
198+ assert len (builder ._coordinates ) == 1
199+ cdp_var = builder ._coordinates [0 ]
200+ assert cdp_var .name == "cdp"
201+ assert cdp_var .data_type == ScalarType .FLOAT32
202+ assert cdp_var .metadata .units_v1 .length == "m"
203+
204+ def test_coordinate_with_attributes () -> None :
205+ """Test adding coordinates with attributes."""
206+ builder = MDIODatasetBuilder ("test_dataset" )
207+ builder .add_dimension ("inline" , 100 )
208+ builder .add_dimension ("crossline" , 100 )
209+
210+ # Add coordinate with attributes
211+ builder .add_coordinate ("cdp" , dimensions = ["inline" , "crossline" ], metadata = {"attributes" : {"MGA" : 51 }})
212+
213+ assert len (builder ._variables ) == 2
214+ assert len (builder ._coordinates ) == 1
215+ cdp_var = builder ._coordinates [0 ]
216+ assert cdp_var .name == "cdp"
217+ assert cdp_var .data_type == ScalarType .FLOAT32
218+ assert cdp_var .metadata .attributes ["MGA" ] == 51
219+
220+ def test_coordinate_with_chunk_grid () -> None :
221+ """Test adding coordinates with chunk grid."""
222+ builder = MDIODatasetBuilder ("test_dataset" )
223+ builder .add_dimension ("inline" , 100 )
224+ builder .add_dimension ("crossline" , 100 )
225+
226+ # Add coordinate with chunk grid
227+ builder .add_coordinate ("cdp" , dimensions = ["inline" , "crossline" ], metadata = {"chunkGrid" : {"name" : "regular" , "configuration" : {"chunkShape" : [20 , 20 ]}}})
228+
229+ assert len (builder ._variables ) == 2
230+ assert len (builder ._coordinates ) == 1
231+ cdp_var = builder ._coordinates [0 ]
232+ assert cdp_var .name == "cdp"
233+ assert cdp_var .data_type == ScalarType .FLOAT32
234+ assert cdp_var .metadata .chunk_grid .name == "regular"
235+ assert cdp_var .metadata .chunk_grid .configuration .chunk_shape == [20 , 20 ]
236+
237+ def test_coordinate_with_stats () -> None :
238+ """Test adding coordinates with stats."""
239+ builder = MDIODatasetBuilder ("test_dataset" )
240+ builder .add_dimension ("inline" , 100 )
241+ builder .add_dimension ("crossline" , 100 )
242+
243+ # Add coordinate with stats
244+ builder .add_coordinate ("cdp" , dimensions = ["inline" , "crossline" ], metadata = {"statsV1" : {"count" : 100 , "sum" : 1215.1 , "sumSquares" : 125.12 , "min" : 5.61 , "max" : 10.84 , "histogram" : {"binCenters" : [1 , 2 ], "counts" : [10 , 15 ]}}})
245+
246+ assert len (builder ._variables ) == 2
247+ assert len (builder ._coordinates ) == 1
248+ cdp_var = builder ._coordinates [0 ]
249+ assert cdp_var .name == "cdp"
250+ assert cdp_var .data_type == ScalarType .FLOAT32
251+ assert cdp_var .metadata .stats_v1 .count == 100
252+ assert cdp_var .metadata .stats_v1 .sum == 1215.1
253+
254+ def test_coordinate_with_full_metadata () -> None :
255+ """Test adding coordinates with all metadata."""
256+ builder = MDIODatasetBuilder ("test_dataset" )
257+ builder .add_dimension ("inline" , 100 )
258+ builder .add_dimension ("crossline" , 100 )
259+
260+ # Add coordinate with all metadata
261+ builder .add_coordinate ("cdp" , dimensions = ["inline" , "crossline" ], metadata = {"unitsV1" : {"length" : "m" }, "attributes" : {"MGA" : 51 }, "chunkGrid" : {"name" : "regular" , "configuration" : {"chunkShape" : [20 ]}}, "statsV1" : {"count" : 100 , "sum" : 1215.1 , "sumSquares" : 125.12 , "min" : 5.61 , "max" : 10.84 , "histogram" : {"binCenters" : [1 , 2 ], "counts" : [10 , 15 ]}}})
262+
263+ assert len (builder ._variables ) == 2
264+ assert len (builder ._coordinates ) == 1
265+ cdp_var = builder ._coordinates [0 ]
266+ assert cdp_var .name == "cdp"
267+ assert cdp_var .data_type == ScalarType .FLOAT32
268+ assert cdp_var .metadata .units_v1 .length == "m"
269+ assert cdp_var .metadata .attributes ["MGA" ] == 51
270+ assert cdp_var .metadata .chunk_grid .name == "regular"
271+ assert cdp_var .metadata .chunk_grid .configuration .chunk_shape == [20 ]
272+ assert cdp_var .metadata .stats_v1 .count == 100
273+ assert cdp_var .metadata .stats_v1 .sum == 1215.1
274+ assert cdp_var .metadata .stats_v1 .sum_squares == 125.12
275+ assert cdp_var .metadata .stats_v1 .min == 5.61
276+ assert cdp_var .metadata .stats_v1 .max == 10.84
277+ assert cdp_var .metadata .stats_v1 .histogram .bin_centers == [1 , 2 ]
278+ assert cdp_var .metadata .stats_v1 .histogram .counts == [10 , 15 ]
279+
280+ j = builder .build ().json ()
281+ print (j )
282+
283+
76284def test_coordinate_builder_state () -> None :
77285 """Test coordinate builder state transitions and functionality."""
78286 builder = MDIODatasetBuilder ("test_dataset" )
0 commit comments