Source code for openquake.commands.to_hdf5

# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright (C) 2016-2023 GEM Foundation
#
# OpenQuake is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenQuake is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with OpenQuake. If not, see <http://www.gnu.org/licenses/>.
import os
import numpy
from openquake.baselib import hdf5, node, performance
from openquake.hazardlib import nrml


[docs]def convert_npz_hdf5(input_file, output_file): with hdf5.File(output_file, 'w') as out: with numpy.load(input_file) as inp: for key in inp: out[key] = inp[key] return output_file
[docs]def convert_xml_hdf5(input_file, output_file): with hdf5.File(output_file, 'w') as out: inp = nrml.read(input_file) if inp['xmlns'].endswith('nrml/0.4'): # old version d = os.path.dirname(input_file) or '.' raise ValueError('Please upgrade with `oq upgrade_nrml %s`' % d) elif inp['xmlns'].endswith('nrml/0.5'): # current version sm = inp.sourceModel else: # not a NRML raise ValueError('Unknown NRML:' % inp['xmlns']) out.save(node.node_to_dict(sm)) return output_file
[docs]def main(input): """ Convert .xml and .npz files to .hdf5 files. """ with performance.Monitor('to_hdf5') as mon: for input_file in input: if input_file.endswith('.npz'): output = convert_npz_hdf5(input_file, input_file[:-3] + 'hdf5') elif input_file.endswith('.xml'): # for source model files output = convert_xml_hdf5(input_file, input_file[:-3] + 'hdf5') else: continue print('Generated %s' % output) print(mon)
main.input = dict(help='.npz file to convert', nargs='+')