def test_output_arrays(): f, datafile = tempfile.mkstemp() os.close(f) try: container = ShakeMapOutputContainer.create(datafile) # # Test that no data type is set # assert container.getDataType() is None # # Make some array data and metadata # mean = np.random.rand(100) std = np.random.rand(100) lats = np.random.rand(100) lons = np.random.rand(100) ids = np.array([randomword(4).encode('ascii') for x in range(100)]) metadata = {'units': '%g', 'digits': 4} # # Put the data in the container # container.setIMTArrays('PGA', lons, lats, ids, mean, metadata, std, metadata, 'Larger') # # Now extract it and compare it to what we put in there # dout = container.getIMTArrays('PGA', 'Larger') assert all(dout['lons'] == lons) assert all(dout['lats'] == lats) assert all(dout['ids'] == ids) assert all(dout['mean'] == mean) assert all(dout['std'] == std) # # Check the data type # assert container.getDataType() == 'points' # # Try raising some exceptions # # Shouldn't be able to find this IMT with pytest.raises(LookupError): container.getIMTArrays('JUNK', 'Larger') # Shapes of inputs not the same with pytest.raises(ValueError): empty = np.array([]) container.setIMTArrays('PGV', empty, lats, ids, mean, metadata, std, metadata, 'Larger') # IMT already exists with pytest.raises(ValueError): container.setIMTArrays('PGA', lons, lats, ids, mean, metadata, std, metadata, 'Larger') # Trying to set a grid in a file with points with pytest.raises(TypeError): container.setIMTGrids('PGV', mean, metadata, std, metadata, 'Larger') # Trying to get a grid in a file with points with pytest.raises(TypeError): container.getIMTGrids('PGA', 'Larger') container.close() except Exception as e: raise (e) finally: os.remove(datafile)
def test_output_arrays(): f, datafile = tempfile.mkstemp() os.close(f) try: container = ShakeMapOutputContainer.create(datafile) # # Test that no data type is set # assert container.getDataType() is None # # Make some array data and metadata # mean = np.random.rand(100) std = np.random.rand(100) lats = np.random.rand(100) lons = np.random.rand(100) ids = np.array([randomword(4).encode('ascii') for x in range(100)]) metadata = {'units': '%g', 'digits': 4} # # Put the data in the container # container.setIMTArrays('PGA', lons, lats, ids, mean, metadata, std, metadata, 'Larger') # # Now extract it and compare it to what we put in there # dout = container.getIMTArrays('PGA', 'Larger') assert all(dout['lons'] == lons) assert all(dout['lats'] == lats) assert all(dout['ids'] == ids) assert all(dout['mean'] == mean) assert all(dout['std'] == std) # # Check the data type # assert container.getDataType() == 'points' # # Try raising some exceptions # # Shouldn't be able to find this IMT with pytest.raises(LookupError): junk = container.getIMTArrays('JUNK', 'Larger') # Shapes of inputs not the same with pytest.raises(ValueError): empty = np.array([]) container.setIMTArrays('PGV', empty, lats, ids, mean, metadata, std, metadata, 'Larger') # IMT already exists with pytest.raises(ValueError): container.setIMTArrays('PGA', lons, lats, ids, mean, metadata, std, metadata, 'Larger') # Trying to set a grid in a file with points with pytest.raises(TypeError): container.setIMTGrids('PGV', mean, metadata, std, metadata, 'Larger') # Trying to get a grid in a file with points with pytest.raises(TypeError): container.getIMTGrids('PGA', 'Larger') except Exception as e: raise(e) finally: os.remove(datafile)
def test_output_container(): geodict = GeoDict.createDictFromBox(-118.5, -114.5, 32.1, 36.7, 0.01, 0.02) nrows, ncols = geodict.ny, geodict.nx # create MMI mean data for maximum component mean_mmi_maximum_data = np.random.rand(nrows, ncols) mean_mmi_maximum_metadata = { 'name': 'Gandalf', 'color': 'white', 'powers': 'magic' } mean_mmi_maximum_grid = Grid2D(mean_mmi_maximum_data, geodict) # create MMI std data for maximum component std_mmi_maximum_data = mean_mmi_maximum_data / 10 std_mmi_maximum_metadata = { 'name': 'Legolas', 'color': 'green', 'powers': 'good hair' } std_mmi_maximum_grid = Grid2D(std_mmi_maximum_data, geodict) # create MMI mean data for rotd50 component mean_mmi_rotd50_data = np.random.rand(nrows, ncols) mean_mmi_rotd50_metadata = { 'name': 'Gimli', 'color': 'brown', 'powers': 'axing' } mean_mmi_rotd50_grid = Grid2D(mean_mmi_rotd50_data, geodict) # create MMI std data for rotd50 component std_mmi_rotd50_data = mean_mmi_rotd50_data / 10 std_mmi_rotd50_metadata = { 'name': 'Aragorn', 'color': 'white', 'powers': 'scruffiness' } std_mmi_rotd50_grid = Grid2D(std_mmi_rotd50_data, geodict) # create PGA mean data for maximum component mean_pga_maximum_data = np.random.rand(nrows, ncols) mean_pga_maximum_metadata = { 'name': 'Pippin', 'color': 'purple', 'powers': 'rashness' } mean_pga_maximum_grid = Grid2D(mean_pga_maximum_data, geodict) # create PGA std data for maximum component std_pga_maximum_data = mean_pga_maximum_data / 10 std_pga_maximum_metadata = { 'name': 'Merry', 'color': 'grey', 'powers': 'hunger' } std_pga_maximum_grid = Grid2D(std_pga_maximum_data, geodict) f, datafile = tempfile.mkstemp() os.close(f) try: container = ShakeMapOutputContainer.create(datafile) container.setIMTGrids('mmi', mean_mmi_maximum_grid, mean_mmi_maximum_metadata, std_mmi_maximum_grid, std_mmi_maximum_metadata, component='maximum') container.setIMTGrids('mmi', mean_mmi_rotd50_grid, mean_mmi_rotd50_metadata, std_mmi_rotd50_grid, std_mmi_rotd50_metadata, component='rotd50') container.setIMTGrids('pga', mean_pga_maximum_grid, mean_pga_maximum_metadata, std_pga_maximum_grid, std_pga_maximum_metadata, component='maximum') # get the maximum MMI imt data mmi_max_dict = container.getIMTGrids('mmi', component='maximum') np.testing.assert_array_equal(mmi_max_dict['mean'].getData(), mean_mmi_maximum_data) np.testing.assert_array_equal(mmi_max_dict['std'].getData(), std_mmi_maximum_data) assert mmi_max_dict['mean_metadata'] == mean_mmi_maximum_metadata assert mmi_max_dict['std_metadata'] == std_mmi_maximum_metadata # get the rotd50 MMI imt data mmi_rot_dict = container.getIMTGrids('mmi', component='rotd50') np.testing.assert_array_equal(mmi_rot_dict['mean'].getData(), mean_mmi_rotd50_data) np.testing.assert_array_equal(mmi_rot_dict['std'].getData(), std_mmi_rotd50_data) assert mmi_rot_dict['mean_metadata'] == mean_mmi_rotd50_metadata assert mmi_rot_dict['std_metadata'] == std_mmi_rotd50_metadata # Check repr method assert repr(container) == '''Data type: grid use "getIMTGrids" method to access interpolated IMTs Rupture: None Config: None Stations: None Metadata: None Available IMTs (components): mmi (maximum, rotd50) pga (maximum) ''' # get list of all imts imts = container.getIMTs() # get list of maximum imts max_imts = container.getIMTs(component='maximum') assert sorted(max_imts) == ['mmi', 'pga'] # get list of components for mmi mmi_comps = container.getComponents('mmi') assert sorted(mmi_comps) == ['maximum', 'rotd50'] # Test dropIMT imts = container.getIMTs('maximum') assert imts == ['mmi', 'pga'] container.dropIMT('mmi') imts = container.getIMTs('maximum') assert imts == ['pga'] container.close() except Exception as e: raise (e) finally: os.remove(datafile)
def test_output_container(): geodict = GeoDict.createDictFromBox(-118.5,-114.5,32.1,36.7,0.01,0.02) nrows,ncols = geodict.ny,geodict.nx #create MMI mean data for maximum component mean_mmi_maximum_data = np.random.rand(nrows,ncols) mean_mmi_maximum_metadata = {'name':'Gandalf', 'color':'white', 'powers':'magic'} mean_mmi_maximum_grid = Grid2D(mean_mmi_maximum_data,geodict) #create MMI std data for maximum component std_mmi_maximum_data = mean_mmi_maximum_data/10 std_mmi_maximum_metadata = {'name':'Legolas', 'color':'green', 'powers':'good hair'} std_mmi_maximum_grid = Grid2D(std_mmi_maximum_data,geodict) #create MMI mean data for rotd50 component mean_mmi_rotd50_data = np.random.rand(nrows,ncols) mean_mmi_rotd50_metadata = {'name':'Gimli', 'color':'brown', 'powers':'axing'} mean_mmi_rotd50_grid = Grid2D(mean_mmi_rotd50_data,geodict) #create MMI std data for rotd50 component std_mmi_rotd50_data = mean_mmi_rotd50_data/10 std_mmi_rotd50_metadata = {'name':'Aragorn', 'color':'white', 'powers':'scruffiness'} std_mmi_rotd50_grid = Grid2D(std_mmi_rotd50_data,geodict) #create PGA mean data for maximum component mean_pga_maximum_data = np.random.rand(nrows,ncols) mean_pga_maximum_metadata = {'name':'Pippin', 'color':'purple', 'powers':'rashness'} mean_pga_maximum_grid = Grid2D(mean_pga_maximum_data,geodict) #create PGA std data for maximum component std_pga_maximum_data = mean_pga_maximum_data/10 std_pga_maximum_metadata = {'name':'Merry', 'color':'grey', 'powers':'hunger'} std_pga_maximum_grid = Grid2D(std_pga_maximum_data,geodict) f,datafile = tempfile.mkstemp() os.close(f) try: container = ShakeMapOutputContainer.create(datafile) container.setIMTGrids('mmi', mean_mmi_maximum_grid,mean_mmi_maximum_metadata, std_mmi_maximum_grid,std_mmi_maximum_metadata, component='maximum') container.setIMTGrids('mmi', mean_mmi_rotd50_grid,mean_mmi_rotd50_metadata, std_mmi_rotd50_grid,std_mmi_rotd50_metadata, component='rotd50') container.setIMTGrids('pga', mean_pga_maximum_grid,mean_pga_maximum_metadata, std_pga_maximum_grid,std_pga_maximum_metadata, component='maximum') #get the maximum MMI imt data mmi_max_dict = container.getIMTGrids('mmi',component='maximum') np.testing.assert_array_equal(mmi_max_dict['mean'].getData(), mean_mmi_maximum_data) np.testing.assert_array_equal(mmi_max_dict['std'].getData(), std_mmi_maximum_data) assert mmi_max_dict['mean_metadata'] == mean_mmi_maximum_metadata assert mmi_max_dict['std_metadata'] == std_mmi_maximum_metadata #get the rotd50 MMI imt data mmi_rot_dict = container.getIMTGrids('mmi',component='rotd50') np.testing.assert_array_equal(mmi_rot_dict['mean'].getData(), mean_mmi_rotd50_data) np.testing.assert_array_equal(mmi_rot_dict['std'].getData(), std_mmi_rotd50_data) assert mmi_rot_dict['mean_metadata'] == mean_mmi_rotd50_metadata assert mmi_rot_dict['std_metadata'] == std_mmi_rotd50_metadata #get list of maximum imts max_imts = container.getIMTs(component='maximum') assert sorted(max_imts) == ['mmi','pga'] #get list of components for mmi mmi_comps = container.getComponents('mmi') assert sorted(mmi_comps) == ['maximum','rotd50'] except Exception as e: raise(e) finally: os.remove(datafile)