def test_spod_low_ram_longtime_mean(): ''' spod tests on earthquake data for methodologies. ''' # set longtime mean params['mean_type'] = 'longtime' params['savefft'] = False # SPOD analysis SPOD_analysis = SPOD_low_ram(data=X, params=params, data_handler=False, variables=variables) spod = SPOD_analysis.fit() # Test results T_approx = 12.5; tol = 1e-10 freq_found, freq_idx = spod.find_nearest_freq(freq_required=1/T_approx, freq=spod.freq) modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx) assert((np.abs(modes_at_freq[0,1,0,0]) < 8.199535402742477e-05+tol) & \ (np.abs(modes_at_freq[0,1,0,0]) > 8.199535402742477e-05-tol)) assert((np.abs(modes_at_freq[10,3,0,2]) < 0.0007999776319885041+tol) & \ (np.abs(modes_at_freq[10,3,0,2]) > 0.0007999776319885041-tol)) assert((np.abs(modes_at_freq[14,15,0,1]) < 0.0015377277700466196+tol) & \ (np.abs(modes_at_freq[14,15,0,1]) > 0.0015377277700466196-tol)) assert((np.min(np.abs(modes_at_freq)) < 7.408898558077455e-10+tol) & \ (np.min(np.abs(modes_at_freq)) > 7.408898558077455e-10-tol)) assert((np.max(np.abs(modes_at_freq)) < 0.41125867028788443 +tol) & \ (np.max(np.abs(modes_at_freq)) > 0.41125867028788443 -tol))
def test_spod_low_ram_blockwise_mean(): ''' spod tests on earthquake data for methodologies. ''' # set blockwise mean params['mean_type'] = 'blockwise' params['savefft'] = False # SPOD analysis SPOD_analysis = SPOD_low_ram(data=X, params=params, data_handler=False, variables=variables) spod = SPOD_analysis.fit() # Test results T_approx = 12.5; tol = 1e-10 freq_found, freq_idx = spod.find_nearest_freq(freq_required=1/T_approx, freq=spod.freq) modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx) assert((np.abs(modes_at_freq[0,1,0,0]) < 8.57413617152583e-05 +tol) & \ (np.abs(modes_at_freq[0,1,0,0]) > 8.57413617152583e-05 -tol)) assert((np.abs(modes_at_freq[10,3,0,2]) < 0.0008816145245031309+tol) & \ (np.abs(modes_at_freq[10,3,0,2]) > 0.0008816145245031309-tol)) assert((np.abs(modes_at_freq[14,15,0,1]) < 0.0018284295461606808+tol) & \ (np.abs(modes_at_freq[14,15,0,1]) > 0.0018284295461606808-tol)) assert((np.min(np.abs(modes_at_freq)) < 8.819039169527213e-10+tol) & \ (np.min(np.abs(modes_at_freq)) > 8.819039169527213e-10-tol)) assert((np.max(np.abs(modes_at_freq)) < 0.28627415402845796 +tol) & \ (np.max(np.abs(modes_at_freq)) > 0.28627415402845796 -tol))
def test_basic_spod_low_ram(): # Let's try the low_ram algorithm spod_ram = SPOD_low_ram(p, params=params, data_handler=False, variables=['p']) spod_ram.fit() # Show results T_approx = 10 # approximate period = 10 days (in days) freq = spod_ram.freq freq_found, freq_idx = spod_ram.find_nearest_freq(freq_required=1 / T_approx, freq=freq) modes_at_freq = spod_ram.get_modes_at_freq(freq_idx=freq_idx) tol = 1e-10 assert((np.abs(modes_at_freq[5,10,0,0]) < 0.010068515759308162 +tol) & \ (np.abs(modes_at_freq[5,10,0,0]) > 0.010068515759308162 -tol)) assert((np.abs(modes_at_freq[0,0,0,0]) < 0.01218020815439358 +tol) & \ (np.abs(modes_at_freq[0,0,0,0]) > 0.01218020815439358 -tol)) assert((np.max(np.abs(modes_at_freq)) < 0.02991911832816271 +tol) & \ (np.max(np.abs(modes_at_freq)) > 0.02991911832816271 -tol)) # clean up results try: shutil.rmtree(os.path.join(CWD, 'results')) except OSError as e: print("Error: %s : %s" % (os.path.join(CWD, 'results'), e.strerror))
def test_spod_low_ram_savefft(): ''' spod tests on earthquake data for methodologies. ''' # set blockwise mean params['mean_type'] = 'blockwise' params['savefft'] = False # SPOD analysis SPOD_analysis = SPOD_low_ram(data=X, params=params, data_handler=False, variables=variables) spod = SPOD_analysis.fit() # Test results 1 T_approx = 12.5; tol = 1e-10 freq_found, freq_idx = spod.find_nearest_freq(freq_required=1/T_approx, freq=spod.freq) modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx) assert((np.abs(modes_at_freq[0,1,0,0]) < 8.57413617152583e-05 +tol) & \ (np.abs(modes_at_freq[0,1,0,0]) > 8.57413617152583e-05 -tol)) assert((np.abs(modes_at_freq[10,3,0,2]) < 0.0008816145245031309+tol) & \ (np.abs(modes_at_freq[10,3,0,2]) > 0.0008816145245031309-tol)) assert((np.abs(modes_at_freq[14,15,0,1]) < 0.0018284295461606808+tol) & \ (np.abs(modes_at_freq[14,15,0,1]) > 0.0018284295461606808-tol)) assert((np.min(np.abs(modes_at_freq)) < 8.819039169527213e-10+tol) & \ (np.min(np.abs(modes_at_freq)) > 8.819039169527213e-10-tol)) assert((np.max(np.abs(modes_at_freq)) < 0.28627415402845796 +tol) & \ (np.max(np.abs(modes_at_freq)) > 0.28627415402845796 -tol)) # SPOD analysis params['savefft'] = True SPOD_analysis = SPOD_low_ram(data=X, params=params, data_handler=False, variables=variables) spod = SPOD_analysis.fit() # Test results 2 (after loading blocks from storage) T_approx = 12.5; tol = 1e-10 freq_found, freq_idx = spod.find_nearest_freq(freq_required=1/T_approx, freq=spod.freq) modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx) assert((np.abs(modes_at_freq[0,1,0,0]) < 8.57413617152583e-05 +tol) & \ (np.abs(modes_at_freq[0,1,0,0]) > 8.57413617152583e-05 -tol)) assert((np.abs(modes_at_freq[10,3,0,2]) < 0.0008816145245031309+tol) & \ (np.abs(modes_at_freq[10,3,0,2]) > 0.0008816145245031309-tol)) assert((np.abs(modes_at_freq[14,15,0,1]) < 0.0018284295461606808+tol) & \ (np.abs(modes_at_freq[14,15,0,1]) > 0.0018284295461606808-tol)) assert((np.min(np.abs(modes_at_freq)) < 8.819039169527213e-10+tol) & \ (np.min(np.abs(modes_at_freq)) > 8.819039169527213e-10-tol)) assert((np.max(np.abs(modes_at_freq)) < 0.28627415402845796 +tol) & \ (np.max(np.abs(modes_at_freq)) > 0.28627415402845796 -tol)) # clean up results try: shutil.rmtree(os.path.join(CWD,'results')) except OSError as e: print("Error: %s : %s" % (os.path.join(CWD,'results'), e.strerror))
freq_found, freq_idx = spod_ls.find_nearest_freq(freq_required=1 / T_approx, freq=freq) modes_at_freq = spod_ls.get_modes_at_freq(freq_idx=freq_idx) spod_ls.plot_eigs() spod_ls.plot_eigs_vs_frequency(freq=freq) spod_ls.plot_eigs_vs_period(freq=freq, xticks=[1, 7, 30, 365, 1825]) spod_ls.plot_2D_modes_at_frequency(freq_required=freq_found, freq=freq, x1=x2, x2=x1, modes_idx=[0, 1], vars_idx=[0]) # Let's try the low_ram algorithm spod_ram = SPOD_low_ram(data=os.path.join(CWD, 'data.nc'), params=params, data_handler=read_data_netCDF, variables=variables) spod_ram.fit() # Show results T_approx = 10 # approximate period = 10 days (in days) freq = spod_ram.freq freq_found, freq_idx = spod_ram.find_nearest_freq(freq_required=1 / T_approx, freq=freq) modes_at_freq = spod_ram.get_modes_at_freq(freq_idx=freq_idx) spod_ram.plot_eigs() spod_ram.plot_eigs_vs_frequency(freq=freq) spod_ram.plot_eigs_vs_period(freq=freq, xticks=[1, 7, 30, 365, 1825]) spod_ram.plot_2D_modes_at_frequency(freq_required=freq_found, freq=freq, x1=x2,
'savefft'] = False # save FFT blocks to reuse them in the future (saves time) params['savedir'] = os.path.join( CWD, 'results', Path(file).stem) # folder where to save results # Set weights weights = utils_weights.geo_trapz_3D(x1_dim=x2.shape[0], x2_dim=x1.shape[0], x3_dim=x3.shape[0], n_vars=len(variables), R=1) # Perform SPOD analysis using low storage module SPOD_analysis = SPOD_low_ram(data=X, params=params, data_handler=False, variables=variables, weights=weights) # Fit SPOD spod = SPOD_analysis.fit() # Show results T_approx = 744 # approximate period (in days) freq_found, freq_idx = spod.find_nearest_freq(freq_required=1 / T_approx, freq=spod.freq) modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx) freq = spod.freq * 24 spod.plot_eigs() spod.plot_eigs_vs_frequency(freq=freq)
params[ 'savefft'] = True # save FFT blocks to reuse them in the future (saves time) params['savedir'] = os.path.join( CWD, 'results', Path(file).stem) # folder where to save results # Set weights weights = utils_weights.geo_trapz_2D(x1_dim=x2.shape[0], x2_dim=x1.shape[0], n_vars=len(variables), R=1) # Perform SPOD analysis using low storage module SPOD_analysis = SPOD_low_ram(data=ds, params=params, data_handler=read_data, variables=variables, weights=weights) # Fit SPOD spod = SPOD_analysis.fit() # Show results T_approx = 4 * 10 # approximate period = 10 days (in days) freq = spod.freq * 4 # (in days) freq_found, freq_idx = spod.find_nearest_freq(freq_required=1 / T_approx, freq=spod.freq) modes_at_freq = spod.get_modes_at_freq(freq_idx=freq_idx) spod.plot_eigs() spod.plot_eigs_vs_frequency(freq=freq) spod.plot_eigs_vs_period(freq=freq, xticks=[1, 7, 30, 365, 1825])
freq_found, freq_idx = spod_ls.find_nearest_freq(freq_required=1/T_approx, freq=freq) modes_at_freq = spod_ls.get_modes_at_freq(freq_idx=freq_idx) spod_ls.plot_eigs() spod_ls.plot_eigs_vs_frequency(freq=freq) spod_ls.plot_eigs_vs_period (freq=freq, xticks=[1, 7, 30, 365, 1825]) spod_ls.plot_2D_modes_at_frequency( freq_required=freq_found, freq=freq, x1=x2, x2=x1, modes_idx=[0,1], vars_idx=[0]) # Let's try the low_ram algorithm spod_ram = SPOD_low_ram(p, params=params, data_handler=False, variables=['p']) spod_ram.fit() # Show results T_approx = 10 # approximate period = 10 days (in days) freq = spod_ram.freq freq_found, freq_idx = spod_ram.find_nearest_freq(freq_required=1/T_approx, freq=freq) modes_at_freq = spod_ram.get_modes_at_freq(freq_idx=freq_idx) spod_ram.plot_eigs() spod_ram.plot_eigs_vs_frequency(freq=freq) spod_ram.plot_eigs_vs_period (freq=freq, xticks=[1, 7, 30, 365, 1825]) spod_ram.plot_2D_modes_at_frequency( freq_required=freq_found, freq=freq, x1=x2, x2=x1,