def test_bounding_box(self): maxdist = IntegrationDistance({'default': [ (3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)]}) aae(maxdist('ANY_TRT'), MAX_DISTANCE) # 2000 km bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT') aae(bb, [-18.2638692, -7.9864, 18.2638692, 27.9864]) aae(maxdist('ANY_TRT', mag=7.1), 400) bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT', mag=7.1) aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728]) aae(maxdist('ANY_TRT', mag=6.9), 300) bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT', mag=6.9) aae(bb, [-2.7395804, 7.30204, 2.7395804, 12.69796])
def test_bounding_box(self): maxdist = IntegrationDistance({'default': [ (3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)]}) aae(maxdist('ANY_TRT'), 400) bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT') aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728]) aae(maxdist('ANY_TRT', mag=7), 400) bb = maxdist.get_bounding_box(0, 10, 'default', mag=7) aae(bb, [-2.7395804, 7.30204, 2.7395804, 12.69796]) aae(maxdist('default', mag=6), 200) bb = maxdist.get_bounding_box(0, 10, 'default', mag=6) aae(bb, [-1.8263869, 8.20136, 1.8263869, 11.79864])
def make_figure_effect_by_mag(extractors, what): """ $ oq plot "effect_by_mag?" """ # NB: matplotlib is imported inside since it is a costly import plt = import_plt() [ex] = extractors gsims_by_trt = ex.get('gsims_by_trt', asdict=True) mags = ex.get('source_mags').array try: effect = ex.get('effect') except KeyError: onesite = ex.get('sitecol').one() maximum_distance = IntegrationDistance(ex.oqparam.maximum_distance) imtls = ex.oqparam.imtls ebm = get_effect_by_mag(mags, onesite, gsims_by_trt, maximum_distance, imtls) effect = numpy.array(list(ebm.values())) fig, ax = plt.subplots() trti = 0 for trt in gsims_by_trt: ax.plot(mags, effect[:, -1, trti], label=trt) ax.set_xlabel('Mag') ax.set_ylabel('Intensity') ax.set_title('Effect at maximum distance') trti += 1 ax.legend() return plt
def test_single_site(self): # NB: the performance of get_mean_std is totally dominated by two # concomitant factors: # 1) source splitting (do not split the area source) # 2) collect the contexts in a single array # together they give a 200x speedup # numba is totally useless site = Site(Point(0, 0), vs30=760., z1pt0=48.0, z2pt5=0.607, vs30measured=True) sitecol = SiteCollection([site]) imtls = {"PGA": [.123]} for period in numpy.arange(.1, 1.3, .1): imtls['SA(%.2f)' % period] = [.123] assert len(imtls) == 13 # 13 periods oq = unittest.mock.Mock( imtls=DictArray(imtls), maximum_distance=IntegrationDistance.new('300')) mon = Monitor() hcurve = calc_hazard_curve( sitecol, asource, [ExampleA2021()], oq, mon) for child in mon.children: print(child) got = hcurve.array[:, 0] exp = [0.103379, 0.468937, 0.403896, 0.278772, 0.213645, 0.142985, 0.103438, 0.079094, 0.062861, 0.051344, 0.04066, 0.031589, 0.024935] numpy.testing.assert_allclose(got, exp, atol=1E-5)
def read_hparams(job_ini): """ :param job_ini: path to a job.ini file :returns: dictionary of hazard parameters """ jobdir = os.path.dirname(job_ini) cp = configparser.ConfigParser() cp.read([job_ini], encoding='utf8') params = {} for sect in cp.sections(): for key, val in cp.items(sect): if key == 'intensity_measure_types_and_levels': key = 'imtls' val = valid.intensity_measure_types_and_levels(val) elif key == 'maximum_distance': val = IntegrationDistance.new(val) elif key == 'sites': val = valid.coordinates(val) elif key.endswith('_file'): val = os.path.join(jobdir, val) else: try: val = ast.literal_eval(val) except (SyntaxError, ValueError): if val == 'true': val = True elif val == 'false': val = False params[key] = val return params
def __init__(self, rupture, sites, imts, gsims, truncation_level=None, correlation_model=None, maximum_distance=IntegrationDistance(None)): if len(sites) == 0: raise ValueError('No sites') elif len(imts) == 0: raise ValueError('No IMTs') elif len(gsims) == 0: raise ValueError('No GSIMs') self.rupture = rupture self.sites = sites self.imts = [from_string(imt) for imt in imts] self.gsims = sorted(gsims) self.truncation_level = truncation_level self.correlation_model = correlation_model self.maximum_distance = maximum_distance # `rupture` can be a high level rupture object containing a low # level hazardlib rupture object as a .rupture attribute if hasattr(rupture, 'rupture'): rupture = rupture.rupture self.ctx = ContextMaker(gsims, maximum_distance).make_contexts( sites, rupture)
def maximum_distance(value): """ :param value: input string corresponding to a valid maximum distance :returns: a IntegrationDistance mapping """ return IntegrationDistance(MagDist.new(value).max())
def __init__(self, gsims, maximum_distance=IntegrationDistance(None)): self.gsims = gsims self.maximum_distance = maximum_distance for req in self.REQUIRES: reqset = set() for gsim in gsims: reqset.update(getattr(gsim, 'REQUIRES_' + req)) setattr(self, 'REQUIRES_' + req, reqset)
def test_bounding_box(self): maxdist = IntegrationDistance({ 'default': [(3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)] }) aae(maxdist('ANY_TRT'), MAX_DISTANCE) # 2000 km bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT') aae(bb, [-18.2638692, -7.9864, 18.2638692, 27.9864]) aae(maxdist('ANY_TRT', mag=7.1), 400) bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT', mag=7.1) aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728]) aae(maxdist('ANY_TRT', mag=6.9), 300) bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT', mag=6.9) aae(bb, [-2.7395804, 7.30204, 2.7395804, 12.69796])
def maximum_distance(value): """ :param value: input string corresponding to a valid maximum distance :returns: a IntegrationDistance mapping """ return IntegrationDistance(floatdict(value))
def test_international_date_line_2(self): # from a bug affecting a calculation in New Zealand fname = gettemp(characteric_source) [[src]] = nrml.to_python(fname) os.remove(fname) maxdist = IntegrationDistance({'default': 200}) sitecol = SiteCollection([ Site(location=Point(176.919, -39.489), vs30=760, vs30measured=True, z1pt0=100, z2pt5=5)]) srcfilter = SourceFilter(sitecol, maxdist) sites = srcfilter.get_close_sites(src) self.assertIsNotNone(sites)
def test_MagnitudeDistance_pickleable(self): md = IntegrationDistance( dict(default=[(1, 10), (2, 20), (3, 30), (4, 40), (5, 100), (6, 200), (7, 400), (8, 800)])) md2 = pickle.loads(pickle.dumps(md)) self.assertEqual(md.dic, md2.dic)
def __init__(self, trt, gsims, param=None, monitor=Monitor()): param = param or {} self.max_sites_disagg = param.get('max_sites_disagg', 10) self.collapse_level = param.get('collapse_level', False) self.point_rupture_bins = param.get('point_rupture_bins', 20) self.trt = trt self.gsims = gsims self.maximum_distance = (param.get('maximum_distance') or IntegrationDistance({})) self.trunclevel = param.get('truncation_level') self.effect = param.get('effect') for req in self.REQUIRES: reqset = set() for gsim in gsims: reqset.update(getattr(gsim, 'REQUIRES_' + req)) setattr(self, 'REQUIRES_' + req, reqset) # self.pointsource_distance is a dict mag -> dist, possibly empty if param.get('pointsource_distance'): self.pointsource_distance = param['pointsource_distance'][trt] else: self.pointsource_distance = {} self.filter_distance = 'rrup' if 'imtls' in param: self.imtls = param['imtls'] elif 'hazard_imtls' in param: self.imtls = DictArray(param['hazard_imtls']) else: self.imtls = {} self.imts = [imt_module.from_string(imt) for imt in self.imtls] self.reqv = param.get('reqv') if self.reqv is not None: self.REQUIRES_DISTANCES.add('repi') if hasattr(gsims, 'items'): # gsims is actually a dict rlzs_by_gsim # since the ContextMaker must be used on ruptures with the # same TRT, given a realization there is a single gsim self.gsim_by_rlzi = {} for gsim, rlzis in gsims.items(): for rlzi in rlzis: self.gsim_by_rlzi[rlzi] = gsim self.mon = monitor self.ctx_mon = monitor('make_contexts', measuremem=False) self.loglevels = DictArray(self.imtls) self.shift_hypo = param.get('shift_hypo') with warnings.catch_warnings(): # avoid RuntimeWarning: divide by zero encountered in log warnings.simplefilter("ignore") for imt, imls in self.imtls.items(): if imt != 'MMI': self.loglevels[imt] = numpy.log(imls)
def maximum_distance(value): """ :param value: input string corresponding to a valid maximum distance :returns: a IntegrationDistance mapping """ dic = floatdict(value) for trt, magdists in dic.items(): if isinstance(magdists, list): # could be a scalar otherwise magdists.sort() # make sure the list is sorted by magnitude for mag, dist in magdists: # validate the magnitudes magnitude(mag) return IntegrationDistance(dic)
def __init__(self, trt, gsims, param=None, monitor=Monitor()): param = param or {} self.max_sites_disagg = param.get('max_sites_disagg', 10) self.trt = trt self.gsims = gsims self.maximum_distance = ( param.get('maximum_distance') or IntegrationDistance({})) self.trunclevel = param.get('truncation_level') for req in self.REQUIRES: reqset = set() for gsim in gsims: reqset.update(getattr(gsim, 'REQUIRES_' + req)) setattr(self, 'REQUIRES_' + req, reqset) self.collapse_factor = param.get('collapse_factor', 3) self.max_radius = param.get('max_radius') self.pointsource_distance = param.get('pointsource_distance') filter_distance = param.get('filter_distance') if filter_distance is None: if 'rrup' in self.REQUIRES_DISTANCES: filter_distance = 'rrup' elif 'rjb' in self.REQUIRES_DISTANCES: filter_distance = 'rjb' else: filter_distance = 'rrup' self.filter_distance = filter_distance self.imtls = param.get('imtls', {}) self.imts = [imt_module.from_string(imt) for imt in self.imtls] self.reqv = param.get('reqv') self.REQUIRES_DISTANCES.add(self.filter_distance) if self.reqv is not None: self.REQUIRES_DISTANCES.add('repi') if hasattr(gsims, 'items'): # gsims is actually a dict rlzs_by_gsim # since the ContextMaker must be used on ruptures with the # same TRT, given a realization there is a single gsim self.gsim_by_rlzi = {} for gsim, rlzis in gsims.items(): for rlzi in rlzis: self.gsim_by_rlzi[rlzi] = gsim self.ctx_mon = monitor('make_contexts', measuremem=False) self.poe_mon = monitor('get_poes', measuremem=False) self.pne_mon = monitor('composing pnes', measuremem=False) self.gmf_mon = monitor('computing mean_std', measuremem=False) self.loglevels = DictArray(self.imtls) with warnings.catch_warnings(): # avoid RuntimeWarning: divide by zero encountered in log warnings.simplefilter("ignore") for imt, imls in self.imtls.items(): self.loglevels[imt] = numpy.log(imls)
def test_get_bounding_boxes(self): maxdist = IntegrationDistance({'default': [ (3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)]}) sitecol = SiteCollection([ Site(location=Point(10, 20, 30), vs30=1.2, vs30measured=True, z1pt0=3.4, z2pt5=5.6, backarc=True), Site(location=Point(-1.2, -3.4, -5.6), vs30=55.4, vs30measured=False, z1pt0=66.7, z2pt5=88.9, backarc=False)]) srcfilter = SourceFilter(sitecol, maxdist) bb1, bb2 = srcfilter.get_bounding_boxes(mag=4) # bounding boxes in the form min_lon, min_lat, max_lon, max_lat aae(bb1, (9.6171855, 19.640272, 10.3828145, 20.359728)) aae(bb2, (-1.5603623, -3.759728, -0.8396377, -3.040272))
def test_two_sites(self): site1 = Site(Point(0, 0), vs30=760., z1pt0=48.0, z2pt5=0.607, vs30measured=True) site2 = Site(Point(0, 0.5), vs30=760., z1pt0=48.0, z2pt5=0.607, vs30measured=True) sitecol = SiteCollection([site1, site2]) srcfilter = SourceFilter(sitecol, IntegrationDistance.new('200')) imtls = {"PGA": [.123]} for period in numpy.arange(.1, .5, .1): imtls['SA(%.2f)' % period] = [.123] assert len(imtls) == 5 # 5 periods gsim_by_trt = {'Stable Continental Crust': ExampleA2021()} hcurves = calc_hazard_curves( [asource], srcfilter, DictArray(imtls), gsim_by_trt) print(hcurves)
def test_international_date_line(self): maxdist = IntegrationDistance({'default': [ (3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)]}) sitecol = SiteCollection([ Site(location=Point(179, 80), vs30=1.2, vs30measured=True, z1pt0=3.4, z2pt5=5.6, backarc=True), Site(location=Point(-179, 80), vs30=55.4, vs30measured=False, z1pt0=66.7, z2pt5=88.9, backarc=False)]) srcfilter = SourceFilter(sitecol, maxdist) bb1, bb2 = srcfilter.get_bounding_boxes(mag=4) # bounding boxes in the form min_lon, min_lat, max_lon, max_lat aae(bb1, (176.928409, 79.640272, 181.071591, 80.359728)) aae(bb2, (-181.071591, 79.640272, -176.928409, 80.359728))
def __init__(self, gsims, maximum_distance=IntegrationDistance(None)): self.gsims = gsims self.maximum_distance = maximum_distance for req in self.REQUIRES: reqset = set() for gsim in gsims: reqset.update(getattr(gsim, 'REQUIRES_' + req)) setattr(self, 'REQUIRES_' + req, reqset) if hasattr(gsims, 'items'): # gsims is actually a dict rlzs_by_gsim # since the ContextMaker must be used on ruptures with all the # same TRT, given a realization there is a single gsim self.gsim_by_rlzi = {} for gsim, rlzis in gsims.items(): for rlzi in rlzis: self.gsim_by_rlzi[rlzi] = gsim
def __init__(self, trt, gsims, maximum_distance=None, param=None, monitor=Monitor()): param = param or {} self.trt = trt self.gsims = gsims self.maximum_distance = maximum_distance or IntegrationDistance({}) self.pointsource_distance = param.get('pointsource_distance', {}) for req in self.REQUIRES: reqset = set() for gsim in gsims: reqset.update(getattr(gsim, 'REQUIRES_' + req)) setattr(self, 'REQUIRES_' + req, reqset) filter_distance = param.get('filter_distance') if filter_distance is None: if 'rrup' in self.REQUIRES_DISTANCES: filter_distance = 'rrup' elif 'rjb' in self.REQUIRES_DISTANCES: filter_distance = 'rjb' else: filter_distance = 'rrup' self.filter_distance = filter_distance self.reqv = param.get('reqv') self.REQUIRES_DISTANCES.add(self.filter_distance) if self.reqv is not None: self.REQUIRES_DISTANCES.add('repi') if hasattr(gsims, 'items'): # gsims is actually a dict rlzs_by_gsim # since the ContextMaker must be used on ruptures with the # same TRT, given a realization there is a single gsim self.gsim_by_rlzi = {} for gsim, rlzis in gsims.items(): for rlzi in rlzis: self.gsim_by_rlzi[rlzi] = gsim self.ir_mon = monitor('iter_ruptures', measuremem=False) self.ctx_mon = monitor('make_contexts', measuremem=False) self.poe_mon = monitor('get_poes', measuremem=False)
def test_international_date_line(self): maxdist = IntegrationDistance({ 'default': [(3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)] }) sitecol = SiteCollection([ Site(location=Point(179, 80), vs30=1.2, vs30measured=True, z1pt0=3.4, z2pt5=5.6, backarc=True), Site(location=Point(-179, 80), vs30=55.4, vs30measured=False, z1pt0=66.7, z2pt5=88.9, backarc=False) ]) srcfilter = SourceFilter(sitecol, maxdist) bb1, bb2 = srcfilter.get_bounding_boxes(mag=4.5) # bounding boxes in the form min_lon, min_lat, max_lon, max_lat aae(bb1, (173.8210225, 79.10068, 184.1789775, 80.89932)) aae(bb2, (175.8210225, 79.10068, 186.1789775, 80.89932))
def test_get_bounding_boxes(self): maxdist = IntegrationDistance({ 'default': [(3, 30), (4, 40), (5, 100), (6, 200), (7, 300), (8, 400)] }) sitecol = SiteCollection([ Site(location=Point(10, 20, 30), vs30=1.2, vs30measured=True, z1pt0=3.4, z2pt5=5.6, backarc=True), Site(location=Point(-1.2, -3.4, -5.6), vs30=55.4, vs30measured=False, z1pt0=66.7, z2pt5=88.9, backarc=False) ]) srcfilter = SourceFilter(sitecol, maxdist) bb1, bb2 = srcfilter.get_bounding_boxes(mag=4.5) # bounding boxes in the form min_lon, min_lat, max_lon, max_lat aae(bb1, (9.0429636, 19.10068, 10.9570364, 20.89932)) aae(bb2, (-2.1009057, -4.29932, -0.2990943, -2.50068))
def test_maximum_magnitude(self): maxdist = IntegrationDistance.new( '[(4, 200), (7, 200), (7.01, 0), (8, 0)]') interp = maxdist('default') aae(interp([5, 6, 7, 7.2, 8]), [200., 200., 200., 0., 0.])
def main(params): # example with 2x2=4 realizations with weights .36, .24, .24, .16 inp = read_input(params) print(inp) print(inp.gsim_lt.get_rlzs_by_gsim_trt()) acc = AccumDict(accum=[]) ebrs = sample_ebruptures(inp.groups, inp.cmakerdict) ne = sum(ebr.n_occ for ebr in ebrs) print('There are %d ruptures and %d events' % (len(ebrs), ne)) df = get_ebr_df(ebrs, inp.cmakerdict) print(df.groupby('rlz').count()) # there are 8, 9, 11, 8 events per rlz for ebr in ebrs: cmaker = inp.cmakerdict[ebr.rupture.tectonic_region_type] gmf_dict, _ = GmfComputer(ebr, inp.sitecol, cmaker).compute_all() acc += gmf_dict print(pandas.DataFrame(acc)) if __name__ == '__main__': params = dict(maximum_distance=IntegrationDistance.new('200'), imtls={'PGA': [0]}, source_model_file="source_model.xml", area_source_discretization=10, ses_seed=24, ses_per_logic_tree_path=20, investigation_time=1, site_model_file="site_model.csv", gsim_logic_tree_file="gmpe_logic_tree.xml") main(params)
def test_point_sources(self): sources = [ openquake.hazardlib.source.PointSource( source_id='point1', name='point1', tectonic_region_type="Active Shallow Crust", mfd=openquake.hazardlib.mfd.EvenlyDiscretizedMFD( min_mag=4, bin_width=1, occurrence_rates=[5] ), nodal_plane_distribution=openquake.hazardlib.pmf.PMF([ (1, openquake.hazardlib.geo.NodalPlane(strike=0.0, dip=90.0, rake=0.0)) ]), hypocenter_distribution=openquake.hazardlib.pmf.PMF([(1, 10)]), upper_seismogenic_depth=0.0, lower_seismogenic_depth=10.0, magnitude_scaling_relationship= openquake.hazardlib.scalerel.PeerMSR(), rupture_aspect_ratio=2, temporal_occurrence_model=PoissonTOM(1.), rupture_mesh_spacing=1.0, location=Point(10, 10) ), openquake.hazardlib.source.PointSource( source_id='point2', name='point2', tectonic_region_type="Active Shallow Crust", mfd=openquake.hazardlib.mfd.EvenlyDiscretizedMFD( min_mag=4, bin_width=2, occurrence_rates=[5, 6, 7] ), nodal_plane_distribution=openquake.hazardlib.pmf.PMF([ (1, openquake.hazardlib.geo.NodalPlane(strike=0, dip=90, rake=0.0)), ]), hypocenter_distribution=openquake.hazardlib.pmf.PMF([(1, 10)]), upper_seismogenic_depth=0.0, lower_seismogenic_depth=10.0, magnitude_scaling_relationship= openquake.hazardlib.scalerel.PeerMSR(), rupture_aspect_ratio=2, temporal_occurrence_model=PoissonTOM(1.), rupture_mesh_spacing=1.0, location=Point(10, 11) ), ] sites = [openquake.hazardlib.site.Site(Point(11, 10), 1, 2, 3), openquake.hazardlib.site.Site(Point(10, 16), 2, 2, 3), openquake.hazardlib.site.Site(Point(10, 10.6, 1), 3, 2, 3), openquake.hazardlib.site.Site(Point(10, 10.7, -1), 4, 2, 3)] sitecol = openquake.hazardlib.site.SiteCollection(sites) gsims = {"Active Shallow Crust": SadighEtAl1997()} truncation_level = 1 imts = {'PGA': [0.1, 0.5, 1.3]} s_filter = SourceFilter(sitecol, IntegrationDistance.new('30')) result = calc_hazard_curves( sources, s_filter, imts, gsims, truncation_level)['PGA'] # there are two sources and four sites. The first source contains only # one rupture, the second source contains three ruptures. # # the first source has 'maximum projection radius' of 0.707 km # the second source has 'maximum projection radius' of 500.0 km # # the epicentral distances for source 1 are: [ 109.50558394, # 667.16955987, 66.71695599, 77.83644865] # the epicentral distances for source 2 are: [ 155.9412148 , # 555.97463322, 44.47797066, 33.35847799] # # Considering that the source site filtering distance is set to 30 km, # for source 1, all sites have epicentral distance larger than # 0.707 + 30 km. This means that source 1 ('point 1') is not considered # in the calculation because too far. # for source 2, the 1st, 3rd and 4th sites have epicentral distances # smaller than 500.0 + 30 km. This means that source 2 ('point 2') is # considered in the calculation for site 1, 3, and 4. # # JB distances for rupture 1 in source 2 are: [ 155.43860273, # 555.26752644, 43.77086388, 32.65137121] # JB distances for rupture 2 in source 2 are: [ 150.98882575, # 548.90356541, 37.40690285, 26.28741018] # JB distances for rupture 3 in source 2 are: [ 109.50545819, # 55.97463322, 0. , 0. ] # # Considering that the rupture site filtering distance is set to 30 km, # rupture 1 (magnitude 4) is not considered because too far, rupture 2 # (magnitude 6) affect only the 4th site, rupture 3 (magnitude 8) # affect the 3rd and 4th sites. self.assertEqual(result.shape, (4, 3)) # 4 sites, 3 levels numpy.testing.assert_allclose(result[0], 0) # no contrib to site 1 numpy.testing.assert_allclose(result[1], 0) # no contrib to site 2
def test_bounding_box(self): maxdist = IntegrationDistance({'default': 400}) aae(maxdist('ANY_TRT'), 400) bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT') aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728])
from openquake.hazardlib import read_input, valid, contexts from openquake.hazardlib.cross_correlation import BakerJayaram2008 from openquake.hazardlib.calc.filters import IntegrationDistance OVERWRITE_EXPECTED = False CWD = os.path.dirname(__file__) SOURCES_XML = os.path.join(CWD, 'data', 'sm01.xml') GSIM_XML = os.path.join(CWD, 'data', 'lt02.xml') PARAM = dict(source_model_file=SOURCES_XML, gsim_logic_tree_file=GSIM_XML, sites=[(0, -0.8)], reference_vs30_value=600, reference_depth_to_2pt5km_per_sec=5, reference_depth_to_1pt0km_per_sec=100, maximum_distance=IntegrationDistance.new('200'), rupture_mesh_spacing=5., width_of_mfd_bin=1., investigation_time=1, truncation_level=3, cross_correl=BakerJayaram2008(), imtls={ "SA(0.05)": valid.logscale(0.005, 2.13, 45), "SA(0.075)": valid.logscale(0.005, 2.13, 45), "SA(0.1)": valid.logscale(0.005, 2.13, 45), "SA(0.15)": valid.logscale(0.005, 2.13, 45), "SA(0.2)": valid.logscale(0.005, 2.13, 45), "SA(0.25)": valid.logscale(0.005, 2.13, 45), "SA(0.3)": valid.logscale(0.005, 2.13, 45), "SA(0.5)": valid.logscale(0.005, 2.13, 45), "SA(0.75)": valid.logscale(0.005, 2.13, 45),
def test_bounding_box(self): maxdist = IntegrationDistance.new('400') bb = maxdist.get_bounding_box(0, 10, 'ANY_TRT') aae(bb, [-3.6527738, 6.40272, 3.6527738, 13.59728])