def test_save_to_binary_file(self): tmpfile = gf.generate_temp_file(extension='h5') CP._save_to_bin_file(filename=tmpfile, datasetname='d1', mtx=np.array([0.1, 0.2])) self.assertTrue(os.path.isfile(tmpfile), msg='File exists') os.remove(tmpfile)
def test_add_to_log(self): tmpfile = gf.generate_temp_file(extension='txt') CP._add_to_log(filename=tmpfile, logstr='hello world') self.assertTrue(os.path.isfile(tmpfile), msg='File exists') with open(tmpfile, 'r') as file: loadstr = file.read() self.assertEqual(loadstr, 'hello world', msg='Message should match') os.remove(tmpfile)
def test_save_to_text_file(self): tmpfile = gf.generate_temp_file(extension='txt') CP._save_to_txt_file(filename=tmpfile, mtx=np.array([0.1, 0.2])) self.assertTrue(os.path.isfile(tmpfile), msg='File exists') loadmtx = np.loadtxt(tmpfile) self.assertTrue(np.array_equal(loadmtx, np.array([0.1, 0.2])), msg=str('Arrays should match: {}'.format(loadmtx))) os.remove(tmpfile)
def test_readingbinaryfile_array(self): tmpfile = gf.generate_temp_file(extension='h5') CP._save_to_bin_file(filename=tmpfile, datasetname='d1', mtx=np.array([[0.1, 0.2]])) self.assertTrue(os.path.isfile(tmpfile), msg='File exists') out = CP.read_in_bin_file(filename=tmpfile) self.assertTrue(np.array_equal(out, np.array([[0.1, 0.2]])), msg=str('Expected array match: {}'.format(out))) os.remove(tmpfile)
def test_load_ser_sim_res_no_json(self): tmpfolder = gf.generate_temp_folder() os.makedirs(tmpfolder) pres = CP.load_serial_simulation_results(tmpfolder) shutil.rmtree(tmpfolder) self.assertTrue(isinstance(pres['chain'], list)) self.assertTrue(isinstance(pres['s2chain'], list)) self.assertEqual(pres['chain'], [])
def test_read_in_parallel_unknown(self): parallel_dir = gf.generate_temp_folder() setup_problem(parallel_dir, case='binary') out = CP.read_in_parallel_savedir_files(parallel_dir=parallel_dir, extension='unknown') self.assertEqual(out[0], None) self.assertEqual(out[1], None) self.assertEqual(out[2], None) shutil.rmtree(parallel_dir)
def test_read_in_parallel_txt(self): parallel_dir = gf.generate_temp_folder() mcstat = setup_problem(parallel_dir, case='text') out = CP.read_in_parallel_savedir_files(parallel_dir=parallel_dir, extension='txt') StandardCheck(out[0], mcstat) StandardCheck(out[1], mcstat) StandardCheck(out[2], mcstat) shutil.rmtree(parallel_dir)
def test_generate_combined_chain(self): pres = setup_pres() combined_chain, index = CP.generate_combined_chain_with_index( pres=pres) self.assertEqual(combined_chain.shape, (100, 3), msg='Default burnin should yield (100,3) array shape') self.assertEqual(len(index), 100, msg='index should have length 100') self.assertTrue( np.array_equal(combined_chain[0:50, :], pres[0]['chain'][50:, :])) self.assertTrue( np.array_equal(combined_chain[50:, :], pres[1]['chain'][50:, :]))
def test_generate_combined_chain_non_default_burnin(self): pres = setup_pres() combined_chain, index = CP.generate_combined_chain_with_index( pres=pres, burnin_percentage=0) self.assertEqual(combined_chain.shape, (200, 3), msg='Default burnin should yield (200,3) array shape') self.assertEqual(len(index), 200, msg='index should have length 100') self.assertTrue( np.array_equal(combined_chain[0:100, :], pres[0]['chain'])) self.assertTrue( np.array_equal(combined_chain[100:, :], pres[1]['chain']))
def test_print_log_files(self): mcstat = gf.setup_case() savedir = gf.generate_temp_folder() mcstat.simulation_options.savedir = savedir mcstat.simulation_options.save_to_bin = True chains = mcstat._MCMC__chains mcstat._MCMC__save_to_log_file(chains=chains, start=0, end=100) capturedOutput = io.StringIO() sys.stdout = capturedOutput CP.print_log_files(savedir) sys.stdout = sys.__stdout__ self.assertTrue(isinstance(capturedOutput.getvalue(), str), msg='Should contain a string') self.assertTrue('Display log file:' in capturedOutput.getvalue(), msg='Expect string to contain these words') shutil.rmtree(savedir)
def test_id_chain_no(self): parallel_dir = gf.generate_temp_folder() setup_problem(parallel_dir, case='binary') chainfolders = os.listdir(parallel_dir) chainfolders2 = CP.check_parallel_directory_contents( parallel_dir, chainfolders) self.assertEqual( chainfolders2, ['chain_0', 'chain_1', 'chain_2'], msg='List of strings do not match ({}): {} neq {}'.format( parallel_dir, chainfolders2, ['chain_0', 'chain_1', 'chain_2'])) shutil.rmtree(parallel_dir)
def test_load_ser_sim_res(self): tmpfolder = gf.generate_temp_folder() tmpfolder0 = os.path.join(tmpfolder, 'chain_0') os.makedirs(tmpfolder0) tmpfile0 = 'chain_0.json' tmpfile0 = os.path.join(tmpfolder0, tmpfile0) results = dict(a=[0, 1], b='hello') RS = ResultsStructure() RS.save_json_object(results, tmpfile0) pres = CP.load_serial_simulation_results(tmpfolder0) shutil.rmtree(tmpfolder) self.assertTrue(isinstance(pres['a'], np.ndarray)) self.assertTrue(isinstance(pres['b'], str)) self.assertEqual(pres['b'], 'hello')
def test_cpwe_creation_with_txt(self): mcstat = gf.setup_mcmc_case_cp() mcstat.simulation_options.savedir = 'test' chainfile, s2chainfile, sschainfile, covchainfile = CP._create_path_with_extension_for_all_logs( options=mcstat.simulation_options, extension='txt') self.assertEqual(chainfile, 'test/chainfile.txt', msg='Expect matching string') self.assertEqual(s2chainfile, 'test/s2chainfile.txt', msg='Expect matching string') self.assertEqual(sschainfile, 'test/sschainfile.txt', msg='Expect matching string') self.assertEqual(covchainfile, 'test/covchainfile.txt', msg='Expect matching string')
def test_id_chain_no_with_bad_items(self): parallel_dir = gf.generate_temp_folder() setup_problem(parallel_dir, case='binary') tmpfile = gf.generate_temp_file() os.mkdir(parallel_dir + os.sep + 'chain') if not os.path.exists(parallel_dir + os.sep + tmpfile): with open(parallel_dir + os.sep + tmpfile, 'w'): pass chainfolders = os.listdir(parallel_dir) chainfolders2 = CP.check_parallel_directory_contents( parallel_dir, chainfolders) self.assertEqual( chainfolders2, ['chain_0', 'chain_1', 'chain_2'], msg='List of strings do not match ({}): {} neq {}'.format( parallel_dir, chainfolders2, ['chain_0', 'chain_1', 'chain_2'])) shutil.rmtree(parallel_dir)
def test_read_in_savedir_files_txt(self): mcstat = gf.setup_case() savedir = gf.generate_temp_folder() mcstat.simulation_options.savedir = savedir mcstat.simulation_options.save_to_txt = True mcstat._MCMC__save_to_log_file(chains=mcstat._MCMC__chains, start=0, end=100) mcstat._MCMC__save_to_log_file(chains=[ dict(mtx=np.dot(mcstat._covariance._R.transpose(), mcstat._covariance._R)) ], start=0, end=100, covmtx=True) out = CP.read_in_savedir_files(savedir, extension='txt') StandardCheck(out, mcstat) shutil.rmtree(savedir)
def test_read_in_savedir_files_unknown(self): mcstat = gf.setup_case() savedir = gf.generate_temp_folder() mcstat.simulation_options.savedir = savedir mcstat.simulation_options.save_to_txt = True mcstat._MCMC__save_to_log_file(chains=mcstat._MCMC__chains, start=0, end=100) mcstat._MCMC__save_to_log_file(chains=[ dict(mtx=np.dot(mcstat._covariance._R.transpose(), mcstat._covariance._R)) ], start=0, end=100, covmtx=True) out = CP.read_in_savedir_files(savedir, extension='unknown') self.assertEqual(out, None, msg='Expect None') shutil.rmtree(savedir)
from pymcmcstat.chain import ChainProcessing as CP from pymcmcstat.chain.ChainStatistics import chainstats from pymcmcstat.plotting.MCMCPlotting import Plot # Initialize classes MCP = Plot() # define directory where log files are saved savedir = 'serial_chain' # compare reading in binary versus text data ns = 1 # ------- start = time.time() for ii in range(ns): results = CP.read_in_savedir_files(savedir, extension='h5') end = time.time() binary_time = end - start # ------- start = time.time() for ii in range(ns): results = CP.read_in_savedir_files(savedir, extension='txt') end = time.time() text_time = end - start # ------- print('Binary: {} sec\n'.format(binary_time / ns)) print('Text: {} sec\n'.format(text_time / ns))
def test_readinbinaryfile_warning(self): out = CP.read_in_bin_file(filename='abcdedf0123') self.assertEqual(out, [], msg='expect empty list')
def test_cpwe_basic(self): file = CP._create_path_without_extension(savedir='test', file='file') self.assertEqual(file, 'test/file', msg='Expect matching string')
def test_check_directory(self): tmpfolder = gf.generate_temp_folder() CP._check_directory(tmpfolder) self.assertTrue(os.path.isdir(tmpfolder), msg='Directory exists') os.removedirs(tmpfolder)
def test_generate_chain_list_with_non_default_burnin(self): pres = setup_pres() chains = CP.generate_chain_list(pres=pres, burnin_percentage=0) self.assertEqual(len(chains), 2, msg='expect length of 2') self.assertTrue(np.array_equal(chains[0], pres[0]['chain'])) self.assertTrue(np.array_equal(chains[1], pres[1]['chain']))
def test_generate_chain_list(self): pres = setup_pres() chains = CP.generate_chain_list(pres=pres) self.assertEqual(len(chains), 2, msg='expect length of 2') self.assertTrue(np.array_equal(chains[0], pres[0]['chain'][50:, :])) self.assertTrue(np.array_equal(chains[1], pres[1]['chain'][50:, :]))
def test_readingtextfile_array(self, mock_load): out = CP.read_in_txt_file(filename='abcdedf0123') self.assertTrue(np.array_equal(out, np.array([0.1, 0.2])), msg=str('Expected array match: {}'.format(out)))