@@ -366,6 +366,55 @@ def apply(self, *args, **kwargs):
366366
367367 return apply (self , * args , ** kwargs )
368368
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+
369418
370419def _as_homogeneous (xyz , dtype = "float32" , dim = 3 ):
371420 """
0 commit comments