Skip to content

Commit

Permalink
Merge pull request #85 from prmiles/dev-v1.9.1
Browse files Browse the repository at this point in the history
Merging v1.9.1 to master
  • Loading branch information
prmiles committed Oct 24, 2020
2 parents 736ef83 + e41a541 commit d50b53a
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 43 deletions.
10 changes: 9 additions & 1 deletion CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
Changelog
=========

v1.9.0 ()
v1.9.1 (October 24, 2020)
---------
- Fixed #79 - Chainstats display now auto updates formatting for really large or small numbers.
- Fixed #82 - Initial value check routine in Parallel MCMC now correctly removes extra columns.

v1.9.0 (July 19, 2019)
---------
.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.3342988.svg
:target: https://doi.org/10.5281/zenodo.3342988

- Added feature to results structure to store all parameters names, regardless of whether or not they are included in sampling.
- Added mcmcplot package to requirements. MCMCPlotting module is noted as deprecated.
- Added new module for uncertainty propagation. Aims to provide more flexible API for user to plot different combinations of credible and prediction intervals.
Expand Down
2 changes: 1 addition & 1 deletion pymcmcstat/ParallelMCMC.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ def check_shape_of_users_initial_values(initial_values, num_chain, npar):
print('Shape of initial values inconsistent with requested number of parameters.\
\n npar = {}, initial_values.shape -> {},{}.\
Only using first {} columns of initial_values.'.format(npar, m, n, npar))
initial_values = np.delete(initial_values, [range(npar, n+1)], axis=1)
initial_values = np.delete(initial_values, [range(npar, initial_values.shape[1])], axis=1)
return num_chain, initial_values


Expand Down
41 changes: 25 additions & 16 deletions pymcmcstat/chain/ChainStatistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from scipy.fftpack import fft
from ..plotting.utilities import generate_default_names, extend_names_to_match_nparam
from .ChainProcessing import generate_chain_list
from ..utilities.general import format_number_to_str


# display chain statistics
Expand Down Expand Up @@ -95,29 +96,37 @@ def print_chain_statistics(names, meanii, stdii, mcerr, tau, p):
# print statistics
print('\n')
print(30*'-')
print('{:10s}: {:>10s} {:>10s} {:>10s} {:>10s} {:>10s}'.format(
print('{:>10s}: {:>9s} {:>9s} {:>9s} {:>9s} {:>9s}'.format(
'name',
'mean',
'std',
'MC_err',
'tau',
'geweke'))
for ii in range(npar):
if meanii[ii] > 1e4:
print('{:10s}: {:10.4g} {:10.4g} {:10.4f} {:10.4f} {:10.4f}'.format(names[ii],
meanii[ii],
stdii[ii],
mcerr[ii],
tau[ii],
p[ii]))
else:
print('{:10s}: {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f}'.format(
names[ii],
meanii[ii],
stdii[ii],
mcerr[ii],
tau[ii],
p[ii]))
namestr = str('{:>10s}'.format(names[ii]))
meanstr = format_number_to_str(meanii[ii])
stdstr = format_number_to_str(stdii[ii])
mcerrstr = format_number_to_str(mcerr[ii])
taustr = format_number_to_str(tau[ii])
pstr = format_number_to_str(p[ii])
print('{:s}: {:s} {:s} {:s} {:s} {:s}'.format(
namestr, meanstr, stdstr, mcerrstr, taustr, pstr))
# if meanii[ii] > 1e4:
# print('{:10s}: {:10.4g} {:10.4g} {:10.4f} {:10.4f} {:10.4f}'.format(names[ii],
# meanii[ii],
# stdii[ii],
# mcerr[ii],
# tau[ii],
# p[ii]))
# else:
# print('{:10s}: {:10.4f} {:10.4f} {:10.4f} {:10.4f} {:10.4f}'.format(
# names[ii],
# meanii[ii],
# stdii[ii],
# mcerr[ii],
# tau[ii],
# p[ii]))
print(30*'-')


Expand Down
19 changes: 1 addition & 18 deletions pymcmcstat/settings/ModelParameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import numpy as np
import math
import sys
from ..utilities.general import message
from ..utilities.general import message, format_number_to_str


# --------------------------
Expand Down Expand Up @@ -435,23 +435,6 @@ def prior_display_setting(x):
return h2


# --------------------------
def format_number_to_str(number):
'''
Format number for display
Args:
* **number** (:py:class:`float`): Number to be formatted
Returns:
* (:py:class:`str`): Formatted string display
'''
if abs(number) >= 1e4 or abs(number) <= 1e-2:
return str('{:9.2e}'.format(number))
else:
return str('{:9.2f}'.format(number))


# --------------------------
def less_than_or_equal_to_zero(x):
'''
Expand Down
17 changes: 17 additions & 0 deletions pymcmcstat/utilities/general.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,23 @@ def message(verbosity, level, printthis):
return printed


# --------------------------
def format_number_to_str(number):
'''
Format number for display
Args:
* **number** (:py:class:`float`): Number to be formatted
Returns:
* (:py:class:`str`): Formatted string display
'''
if abs(number) >= 1e4 or abs(number) <= 1e-2:
return str('{:9.2e}'.format(number))
else:
return str('{:9.2f}'.format(number))


def removekey(d, key):
'''
Removed elements from dictionary and return the remainder.
Expand Down
8 changes: 1 addition & 7 deletions test/settings/test_ModelParameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
@author: prmiles
"""
from pymcmcstat.settings.ModelParameters import ModelParameters
from pymcmcstat.settings.ModelParameters import format_number_to_str, generate_default_name, check_verbosity, replace_list_elements
from pymcmcstat.settings.ModelParameters import generate_default_name, check_verbosity, replace_list_elements
from pymcmcstat.settings.ModelParameters import noadapt_display_setting, check_noadaptind, prior_display_setting, less_than_or_equal_to_zero
from pymcmcstat.settings.SimulationOptions import SimulationOptions
import unittest
Expand Down Expand Up @@ -178,12 +178,6 @@ def test_default_name_generation(self):
self.assertEqual(generate_default_name(nparam = 2), '$p_{2}$', msg='0 based naming convention.')
self.assertEqual(generate_default_name(nparam = 10), '$p_{10}$', msg='0 based naming convention.')

# --------------------------
class FormatNumberToStr(unittest.TestCase):
def test_format_number_to_str(self):
self.assertEqual(str('{:9.2f}'.format(1.0)), format_number_to_str(1.0), msg = str('Exect: {:9.2f}'.format(1.0)))
self.assertEqual(str('{:9.2e}'.format(1.0e4)), format_number_to_str(1.0e4), msg = str('Exect: {:9.2f}'.format(1.0e4)))
self.assertEqual(str('{:9.2e}'.format(1.0e-2)), format_number_to_str(1.0e-2), msg = str('Exect: {:9.2f}'.format(1.0e-2)))

# --------------------------
class SetupPriorMu(unittest.TestCase):
Expand Down
10 changes: 10 additions & 0 deletions test/utilities/test_general.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
@author: prmiles
"""
from pymcmcstat.utilities.general import message, removekey, check_settings
from pymcmcstat.utilities.general import format_number_to_str
import unittest
import io
import sys
Expand All @@ -26,7 +27,16 @@ def test_no_print(self):
flag = message(verbosity = 0, level = 1, printthis = 'test')
sys.stdout = sys.__stdout__ # Reset redirect.
self.assertFalse(flag, msg = 'Statement not printed because verbosity less than level')


# --------------------------
class FormatNumberToStr(unittest.TestCase):
def test_format_number_to_str(self):
self.assertEqual(str('{:9.2f}'.format(1.0)), format_number_to_str(1.0), msg = str('Exect: {:9.2f}'.format(1.0)))
self.assertEqual(str('{:9.2e}'.format(1.0e4)), format_number_to_str(1.0e4), msg = str('Exect: {:9.2f}'.format(1.0e4)))
self.assertEqual(str('{:9.2e}'.format(1.0e-2)), format_number_to_str(1.0e-2), msg = str('Exect: {:9.2f}'.format(1.0e-2)))


# --------------------------
class RemoveKey(unittest.TestCase):
def test_removekey(self):
Expand Down

0 comments on commit d50b53a

Please sign in to comment.