@@ -350,7 +350,52 @@ def to_filename(self, filename, fmt="X5"):
350
350
351
351
def _to_hdf5 (self , x5_root ):
352
352
"""Serialize this object into the x5 file format."""
353
+ transform_group = x5_root .create_group ("TransformGroup" )
354
+
355
+ """Group '0' containing Affine transform"""
356
+ transform_0 = transform_group .create_group ("0" )
357
+
358
+ transform_0 .attrs ["Type" ] = "Affine"
359
+ transform_0 .create_dataset ("Transform" , data = self ._matrix )
360
+ transform_0 .create_dataset ("Inverse" , data = np .linalg .inv (self ._matrix ))
361
+
362
+ metadata = {"key" : "value" }
363
+ transform_0 .attrs ["Metadata" ] = str (metadata )
364
+
365
+ """sub-group 'Domain' contained within group '0' """
366
+ domain_group = transform_0 .create_group ("Domain" )
367
+ domain_group .attrs ["Grid" ] = self .grid
368
+ domain_group .create_dataset ("Size" , data = _as_homogeneous (self ._reference .shape ))
369
+ domain_group .create_dataset ("Mapping" , data = self .map )
370
+
353
371
raise NotImplementedError
372
+
373
+ def read_x5 (x5_root ):
374
+ variables = {}
375
+ with h5py .File (x5_root , "r" ) as f :
376
+ f .visititems (lambda name , x5_root : _from_hdf5 (name , x5_root , variables ))
377
+
378
+ _transform = variables ["TransformGroup/0/Transform" ]
379
+ _inverse = variables ["TransformGroup/0/Inverse" ]
380
+ _size = variables ["TransformGroup/0/Domain/Size" ]
381
+ _map = variables ["TransformGroup/0/Domain/Mapping" ]
382
+
383
+ return _transform , _inverse , _size , _map
384
+
385
+ def _from_hdf5 (name , x5_root , storage ):
386
+ if isinstance (x5_root , h5py .Dataset ):
387
+ storage [name ] = {
388
+ 'type' : 'dataset' ,
389
+ 'attrs' : dict (x5_root .attrs ),
390
+ 'shape' : x5_root .shape ,
391
+ 'data' : x5_root [()] # Read the data
392
+ }
393
+ elif isinstance (x5_root , h5py .Group ):
394
+ storage [name ] = {
395
+ 'type' : 'group' ,
396
+ 'attrs' : dict (x5_root .attrs ),
397
+ 'members' : {}
398
+ }
354
399
355
400
356
401
def _as_homogeneous (xyz , dtype = "float32" , dim = 3 ):
0 commit comments