@@ -687,10 +687,15 @@ def zarr_dimension(filename):
687687 h = filename
688688 else :
689689 h = zarr .open (filename )
690+
690691 dims = list ()
691692 for varname in h :
692- dims .extend (list (getattr (h , varname ).shape ))
693- return set (dims )
693+ shape = getattr (h , varname ).shape
694+ if len (shape ) > len (dims ):
695+ dims = shape
696+ return dims
697+ # dims.extend(list(getattr(h, varname).shape))
698+ # return set(dims)
694699
695700 @classmethod
696701 def load_file (cls , filename , ** kwargs ):
@@ -754,7 +759,6 @@ def load_from_zarr(
754759 :return type: class
755760 """
756761 # FIXME
757- array_dim = - 1
758762 if isinstance (filename , zarr .storage .MutableMapping ):
759763 h_zarr = filename
760764 else :
@@ -763,11 +767,10 @@ def load_from_zarr(
763767 h_zarr = zarr .open (filename )
764768 var_list = cls .build_var_list (list (h_zarr .keys ()), remove_vars , include_vars )
765769
766- nb_obs = getattr (h_zarr , var_list [0 ]).shape [0 ]
767- dims = list (cls .zarr_dimension (filename ))
768- if len (dims ) == 2 and nb_obs in dims :
769- # FIXME must be investigated, in zarr no dimensions name (or could be add in attr)
770- array_dim = dims [1 ] if nb_obs == dims [0 ] else dims [0 ]
770+ # FIXME must be investigated, in zarr no dimensions name (or could be add in attr)
771+ # so we assume first dimension is number of observation, second is number of contours
772+ nb_obs , track_array_variables = getattr (h_zarr , var_list [0 ]).shape
773+
771774 if indexs is not None and "obs" in indexs :
772775 sl = indexs ["obs" ]
773776 sl = slice (sl .start , min (sl .stop , nb_obs ))
@@ -781,28 +784,31 @@ def load_from_zarr(
781784 logger .debug ("%d observations will be load" , nb_obs )
782785 kwargs = dict ()
783786
784- if array_dim in dims :
785- kwargs ["track_array_variables" ] = array_dim
786- kwargs ["array_variables" ] = list ()
787- for variable in var_list :
788- if array_dim in h_zarr [variable ].shape :
789- var_inv = VAR_DESCR_inv [variable ]
790- kwargs ["array_variables" ].append (var_inv )
791- array_variables = kwargs .get ("array_variables" , list ())
792- kwargs ["track_extra_variables" ] = []
787+ kwargs ["track_array_variables" ] = h_zarr .attrs .get ("track_array_variables" , track_array_variables )
788+
789+ array_variables = list ()
790+ for variable in var_list :
791+ if len (h_zarr [variable ].shape ) > 1 :
792+ var_inv = VAR_DESCR_inv [variable ]
793+ array_variables .append (var_inv )
794+ kwargs ["array_variables" ] = array_variables
795+ track_extra_variables = []
796+
793797 for variable in var_list :
794798 var_inv = VAR_DESCR_inv [variable ]
795799 if var_inv not in cls .ELEMENTS and var_inv not in array_variables :
796- kwargs ["track_extra_variables" ].append (var_inv )
800+ track_extra_variables .append (var_inv )
801+ kwargs ["track_extra_variables" ] = track_extra_variables
797802 kwargs ["raw_data" ] = raw_data
798803 kwargs ["only_variables" ] = (
799804 None if include_vars is None else [VAR_DESCR_inv [i ] for i in include_vars ]
800805 )
801806 kwargs .update (class_kwargs )
802807 eddies = cls (size = nb_obs , ** kwargs )
803- for variable in var_list :
808+
809+ for i_var , variable in enumerate (var_list ):
804810 var_inv = VAR_DESCR_inv [variable ]
805- logger .debug ("%s will be loaded" , variable )
811+ logger .debug ("%s will be loaded (%d/%d) " , variable , i_var , len ( var_list ) )
806812 # find unit factor
807813 input_unit = h_zarr [variable ].attrs .get ("unit" , None )
808814 if input_unit is None :
@@ -858,6 +864,7 @@ def copy_data_to_zarr(
858864 i_start = 0
859865 if i_stop is None :
860866 i_stop = handler_zarr .shape [0 ]
867+
861868 for i in range (i_start , i_stop , buffer_size ):
862869 sl_in = slice (i , min (i + buffer_size , i_stop ))
863870 data = handler_zarr [sl_in ]
@@ -868,6 +875,7 @@ def copy_data_to_zarr(
868875 data -= add_offset
869876 if scale_factor is not None :
870877 data /= scale_factor
878+
871879 sl_out = slice (i - i_start , i - i_start + buffer_size )
872880 handler_eddies [sl_out ] = data
873881
0 commit comments