@@ -366,6 +366,55 @@ def apply(self, *args, **kwargs):
366
366
367
367
return apply (self , * args , ** kwargs )
368
368
369
+ def _to_hdf5 (self , x5_root ):
370
+ """Serialize this object into the x5 file format."""
371
+ transform_group = x5_root .create_group ("TransformGroup" )
372
+
373
+ """Group '0' containing Affine transform"""
374
+ transform_0 = transform_group .create_group ("0" )
375
+
376
+ transform_0 .attrs ["Type" ] = "Affine"
377
+ transform_0 .create_dataset ("Transform" , data = self ._matrix )
378
+ transform_0 .create_dataset ("Inverse" , data = np .linalg .inv (self ._matrix ))
379
+
380
+ metadata = {"key" : "value" }
381
+ transform_0 .attrs ["Metadata" ] = str (metadata )
382
+
383
+ """sub-group 'Domain' contained within group '0' """
384
+ domain_group = transform_0 .create_group ("Domain" )
385
+ domain_group .attrs ["Grid" ] = self .grid
386
+ domain_group .create_dataset ("Size" , data = _as_homogeneous (self ._reference .shape ))
387
+ domain_group .create_dataset ("Mapping" , data = self .map )
388
+
389
+ raise NotImplementedError
390
+
391
+ def read_x5 (self , x5_root ):
392
+ variables = {}
393
+ with h5py .File (x5_root , "r" ) as f :
394
+ f .visititems (lambda filename , x5_root : self ._from_hdf5 (filename , x5_root , variables ))
395
+
396
+ _transform = variables ["TransformGroup/0/Transform" ]
397
+ _inverse = variables ["TransformGroup/0/Inverse" ]
398
+ _size = variables ["TransformGroup/0/Domain/Size" ]
399
+ _map = variables ["TransformGroup/0/Domain/Mapping" ]
400
+
401
+ return _transform , _inverse , _size , _map
402
+
403
+ def _from_hdf5 (self , name , x5_root , storage ):
404
+ if isinstance (x5_root , h5py .Dataset ):
405
+ storage [name ] = {
406
+ 'type' : 'dataset' ,
407
+ 'attrs' : dict (x5_root .attrs ),
408
+ 'shape' : x5_root .shape ,
409
+ 'data' : x5_root [()] # Read the data
410
+ }
411
+ elif isinstance (x5_root , h5py .Group ):
412
+ storage [name ] = {
413
+ 'type' : 'group' ,
414
+ 'attrs' : dict (x5_root .attrs ),
415
+ 'members' : {}
416
+ }
417
+
369
418
370
419
def _as_homogeneous (xyz , dtype = "float32" , dim = 3 ):
371
420
"""
0 commit comments