def _load(self, fname): data = numpy.load(fname, encoding='bytes', allow_pickle=True) if 'version' not in data.files: msg = "Wrong file type! No version number recorded." raise RuntimeError(msg) ret = {} ret["arrays"] = {} version = data['version'] solver_data = _get_dict_from_arrays(data["solver_data"]) ret["solver_data"] = solver_data if version == 1: arrays = _get_dict_from_arrays(data["arrays"]) for array_name in arrays: array = get_particle_array(name=array_name, **arrays[array_name]) ret["arrays"][array_name] = array elif version == 2: particles = _get_dict_from_arrays(data["particles"]) for array_name, array_info in particles.items(): for prop, data in array_info['arrays'].items(): array_info['properties'][prop]['data'] = data array = ParticleArray(name=array_name, constants=array_info["constants"], **array_info["properties"]) array.set_output_arrays( array_info.get('output_property_arrays', [])) ret["arrays"][array_name] = array else: raise RuntimeError("Version not understood!") return ret
def _get_particles(self, grp): particles = {} for name, prop_array in grp.items(): output_array = [] const_grp = prop_array['constants'] arrays_grp = prop_array['arrays'] constants = self._get_constants(const_grp) array = ParticleArray(_to_str(name), constants=constants) for pname, h5obj in arrays_grp.items(): prop_name = _to_str(h5obj.attrs['name']) type_ = _to_str(h5obj.attrs['type']) default = h5obj.attrs['default'] stride = h5obj.attrs.get('stride', 1) if h5obj.attrs['stored']: output_array.append(_to_str(pname)) array.add_property(prop_name, type=type_, default=default, data=numpy.array(h5obj), stride=stride) else: array.add_property(prop_name, type=type_, stride=stride) array.set_output_arrays(output_array) particles[str(name)] = array return particles
def _load(self, fname): def _get_dict_from_arrays(arrays): arrays.shape = (1,) return arrays[0] data = numpy.load(fname) if 'version' not in data.files: msg = "Wrong file type! No version number recorded." raise RuntimeError(msg) ret = {} ret["arrays"] = {} version = data['version'] solver_data = _get_dict_from_arrays(data["solver_data"]) ret["solver_data"] = solver_data if version == 1: arrays = _get_dict_from_arrays(data["arrays"]) for array_name in arrays: array = get_particle_array(name=array_name, **arrays[array_name]) ret["arrays"][array_name] = array elif version == 2: particles = _get_dict_from_arrays(data["particles"]) for array_name, array_info in particles.items(): array = ParticleArray(name=array_name, constants=array_info["constants"], **array_info["arrays"]) array.set_output_arrays( array_info.get('output_property_arrays', []) ) for prop, prop_info in array_info["properties"].items(): if prop not in array_info["arrays"]: array.add_property(**prop_info) ret["arrays"][array_name] = array else: raise RuntimeError("Version not understood!") return ret