Source code for mtuq
#
# suppress warnings
#
# ObsPy returns numerous warnings of this type - FutureWarning: Passing
# (type, 1) or '1type' as a synonym of type is deprecated; in a future version
# of numpy, it will be understood as (type, (1,)) / '(1,)type'.
import warnings
warnings.simplefilter(action='ignore',
category=FutureWarning)
# Suppress Instaseis warning that gets raised unnecessarily during git+https
# installation
warnings.filterwarnings(action='ignore',
message='.*'+'Use the proper pypi release or install from git.'+'.*')
#
# make key objects easily accessible
#
from mtuq.dataset import Dataset
from mtuq.greens_tensor.base import GreensTensor, GreensTensorList
from mtuq.event import Origin, Force, MomentTensor
from mtuq.station import Station
from mtuq.wavelet import Wavelet
from mtuq.grid import Grid, UnstructuredGrid
from mtuq.grid_search import MTUQDataArray, MTUQDataFrame, open_ds
from mtuq.misfit import PolarityMisfit, WaveformMisfit
from mtuq.process_data import ProcessData
# for backward compatibility
Misfit = WaveformMisfit
# commented out because of namespace conflict
#from mtuq.grid_search import grid_search
#
# register I/O functions
#
from pkg_resources import iter_entry_points
from mtuq.io.clients.syngine import download_greens_tensors
def _greens_tensor_clients():
clients = {}
for entry_point in iter_entry_points('greens_tensor_clients'):
clients[entry_point.name] = entry_point.load()
return clients
[docs]def open_db(path_or_url='', format='', **kwargs):
""" Opens database containing Green's functions
Returns a client that can then be used to generate ``GreensTensor``
objects, as in the following example
.. rubric:: Example
.. code::
db = open_db('axisem_database.nc', format='AxiSEM')
greens = db.get_greens_tensors(stations, origin)
"""
format = format.upper()
return _greens_tensor_clients()[format](path_or_url=path_or_url, **kwargs)
def _readers():
readers = {}
for entry_point in iter_entry_points('readers'):
readers[entry_point.name] = entry_point.load()
return readers
[docs]def read(path='', format='', **kwargs):
""" Reads waveform files from disk
Reads files from specified path or url, parses waveform data based on the
specified file format, and returns an ``mtuq.Dataset``, a container in
which each element is an ObsPy stream corresponding to a single station
"""
format = format.upper()
return _readers()[format](path, **kwargs)
#
# ensures MPI will work, even if users create bound methods
#
import copyreg
import types
def _pickle_method(method):
func_name = method.im_func.__name__
obj = method.im_self
cls = method.im_class
return _unpickle_method, (func_name, obj, cls)
def _unpickle_method(func_name, obj, cls):
for cls in cls.mro():
try:
func = cls.__dict__[func_name]
except KeyError:
pass
else:
break
return func.__get__(obj, cls)
copyreg.pickle(types.MethodType, _pickle_method, _unpickle_method)