def test_gelman_rubin_raise_error(self): chains=setup_chains() for _ in range(len(chains) - 1): chains.pop(-1) with self.assertRaises(ValueError, msg='Must have multiple chains'): CS.gelman_rubin(chains=chains)
def test_string_display(self): capturedOutput = io.StringIO() # Create StringIO object sys.stdout = capturedOutput # and redirect stdout. CS.print_chain_acceptance_info(chain) sys.stdout = sys.__stdout__ # Reset redirect. self.assertTrue(isinstance(capturedOutput.getvalue(), str), msg='Caputured string') self.assertFalse('Results dictionary' in capturedOutput.getvalue(), msg='Expect results dictionary not included')
def test_string_display_w_details(self): capturedOutput = io.StringIO() # Create StringIO object sys.stdout = capturedOutput # and redirect stdout. CS.chainstats(chain, display_details=True) sys.stdout = sys.__stdout__ # Reset redirect. self.assertTrue(isinstance(capturedOutput.getvalue(), str), msg='Caputured string') self.assertFalse('Results dictionary' in capturedOutput.getvalue(), msg='Expect results dictionary not included') self.assertTrue('Definition for items displayed:' in capturedOutput.getvalue())
def test_string_display_with_results(self): capturedOutput = io.StringIO() # Create StringIO object sys.stdout = capturedOutput # and redirect stdout. CS.print_chain_acceptance_info( chain, results=dict( nsimu=5000, iacce=np.array([200, 800]) )) sys.stdout = sys.__stdout__ # Reset redirect. self.assertTrue(isinstance(capturedOutput.getvalue(), str), msg='Caputured string') self.assertTrue('Results dictionary' in capturedOutput.getvalue(), msg='Expect results dictionary included')
def test_gelman_rubin_with_pres(self): chains = setup_chains() pres = [] for _, chain in enumerate(chains): pres.append(dict(chain=chain, nsimu=chain.shape[0])) psrf = CS.gelman_rubin(chains=pres) self.standard_check(psrf)
def test_gelman_rubin(self): chains=setup_chains() capturedOutput = io.StringIO() # Create StringIO object sys.stdout = capturedOutput # and redirect stdout. psrf = CS.gelman_rubin(chains=chains, display=True) sys.stdout = sys.__stdout__ # Reset redirect. self.assertTrue(isinstance(capturedOutput.getvalue(), str), msg='Caputured string') self.standard_check(psrf)
def test_calc_psrf(self): x = np.concatenate((np.linspace(0, 1, 1000).reshape(1000, 1), np.linspace(2.5, 3.3, 1000).reshape(1000, 1)), axis=1) psrf = CS.calculate_psrf(x, nsimu=1000, nchains=2) self.assertTrue(isinstance(psrf, dict), msg='Expect dictionary output') self.assertAlmostEqual(psrf['R'], 8.001818935964492, places=6, msg=str('R: {} neq {}'.format(psrf['R'], 8.001818935964492))) self.assertAlmostEqual(psrf['B'], 2879.9999999999964, places=6, msg=str('R: {} neq {}'.format(psrf['B'], 2879.9999999999964))) self.assertAlmostEqual(psrf['W'], 0.06853867547894903, places=6, msg=str('R: {} neq {}'.format(psrf['W'], 0.06853867547894903))) self.assertAlmostEqual(psrf['V'], 4.388470136803464, places=6, msg=str('R: {} neq {}'.format(psrf['V'], 4.388470136803464))) self.assertAlmostEqual(psrf['neff'], 3.047548706113521, places=6, msg=str('R: {} neq {}'.format(psrf['neff'], 3.047548706113521)))
def test_too_few_batches(self): with self.assertRaises(SystemExit, msg='too few batches'): CS.batch_mean_standard_deviation(chain, b=chain.shape[0])
def test_len_s(self): s = CS.batch_mean_standard_deviation(chain, b=None) self.assertEqual(len(s), 2)
def test_cs_eval_with_no_chain(self): stats = CS.chainstats(chain=None, returnstats=True) self.assertTrue(isinstance(stats, str))
def test_cs_eval_with_no_return(self): stats = CS.chainstats(chain=chain, returnstats=False) self.assertEqual(stats, None)
def test_cs_eval_with_return(self): stats = CS.chainstats(chain=chain, returnstats=True) self.assertTrue(isinstance(stats, dict))
def test_gelman_rubin_with_names(self): chains = setup_chains() psrf = CS.gelman_rubin(chains=chains, names=['a', 'b']) self.standard_check(psrf)
def test_nw_not_none(self): x = chain[:, 0] y = CS.power_spectral_density_using_hanning_window(x=x, nw=len(x)) nfft = min(len(x), 256) n2 = int(np.floor(nfft/2)) self.assertEqual(n2, len(y))
def test_nfft_not_none_size(self): x = chain[:, 0] nfft = 100 y = CS.power_spectral_density_using_hanning_window(x=x, nfft=nfft) n2 = int(np.floor(nfft/2)) self.assertEqual(n2, len(y))