Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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