diff --git a/uravu/distribution.py b/uravu/distribution.py index 62b1b34..7be95b5 100644 --- a/uravu/distribution.py +++ b/uravu/distribution.py @@ -34,11 +34,7 @@ class Distribution: """ def __init__( - self, - samples, - name="Distribution", - ci_points=None, - unit=UREG.dimensionless, + self, samples, name="Distribution", ci_points=None, unit=UREG.dimensionless, ): """ Initialisation function for a :py:class:`~uravu.distribution.Distribution` object. @@ -132,18 +128,12 @@ def __str__(self): Returns: :py:attr:`str`: Description of the distribution. """ - representation = "Distribution: {}\nSize: {}\n".format( - self.name, self.size - ) + representation = "Distribution: {}\nSize: {}\n".format(self.name, self.size) representation += "Samples: " representation += "[" - representation += " ".join( - ["{:.2e}".format(i) for i in self.samples[:2]] - ) + representation += " ".join(["{:.2e}".format(i) for i in self.samples[:2]]) representation += " ... " - representation += " ".join( - ["{:.2e}".format(i) for i in self.samples[-2:]] - ) + representation += " ".join(["{:.2e}".format(i) for i in self.samples[-2:]]) representation += "]\n" representation += "Median: {:.2e}\n".format(self.n) if self.normal: diff --git a/uravu/plotting.py b/uravu/plotting.py index 7967b42..b35027f 100644 --- a/uravu/plotting.py +++ b/uravu/plotting.py @@ -24,9 +24,7 @@ ) -def plot_relationship( - relationship, axes=None, figsize=(10, 6) -): # pragma: no cover +def plot_relationship(relationship, axes=None, figsize=(10, 6)): # pragma: no cover """ Plot the relationship. Additional plots will be included on this if the MCMC sampling has been used to find distributions. @@ -43,9 +41,7 @@ def plot_relationship( variables = relationship.variables if relationship.unaccounted_uncertainty: variables = relationship.variables[:-1] - axes.plot( - relationship.x_n, relationship.y_n, c=list(_fig_params.TABLEAU)[0] - ) + axes.plot(relationship.x_n, relationship.y_n, c=list(_fig_params.TABLEAU)[0]) x_label = "{}".format(relationship.abscissa_name) if relationship.x_u != UREG.dimensionless: x_label += "/${:~L}$".format(relationship.x_u) @@ -54,9 +50,7 @@ def plot_relationship( if relationship.y_u != UREG.dimensionless: y_label += "/${:~L}$".format(relationship.y_u) axes.set_ylabel(y_label) - if isinstance( - relationship.ordinate.m.any(), uncertainties.core.AffineScalarFunc - ): + if isinstance(relationship.ordinate.m.any(), uncertainties.core.AffineScalarFunc): axes.fill_between( relationship.x_n, relationship.y_n - relationship.y_s, @@ -72,9 +66,7 @@ def plot_relationship( color=list(_fig_params.TABLEAU)[1], ) else: - plot_samples = np.random.randint( - 0, variables[0].samples.size, size=100 - ) + plot_samples = np.random.randint(0, variables[0].samples.size, size=100) for i in plot_samples: float_variables = [var.samples[i] for var in variables] axes.plot( @@ -161,9 +153,7 @@ def plot_corner(relationship, figsize=(8, 8)): # pragma: no cover - :py:class:`matplotlib.axes.Axes`: The axes with new plots. """ n = len(relationship.variables) - if not all( - [isinstance(relationship.variables[i], Distribution) for i in range(n)] - ): + if not all([isinstance(relationship.variables[i], Distribution) for i in range(n)]): raise ValueError( "In order to use the corner plot functionality, all relationship " "variables must be Distributions. Please run MCMC before " @@ -177,8 +167,7 @@ def plot_corner(relationship, figsize=(8, 8)): # pragma: no cover else: var_labels.append( "{}/${:L}$".format( - relationship.variable_names[i], - relationship.variable_units[i], + relationship.variable_names[i], relationship.variable_units[i], ) ) corner( @@ -199,12 +188,7 @@ def plot_corner(relationship, figsize=(8, 8)): # pragma: no cover ] ) ax[n - 1, j].set_xlim( - [ - i - for i in np.percentile( - relationship.variables[j].samples, [0.5, 99.5] - ) - ] + [i for i in np.percentile(relationship.variables[j].samples, [0.5, 99.5])] ) for j in range(n - 1): ax[j + 1, 0].set_yticks( diff --git a/uravu/relationship.py b/uravu/relationship.py index 5c3ec23..f9acacc 100644 --- a/uravu/relationship.py +++ b/uravu/relationship.py @@ -143,29 +143,19 @@ def __str__(self): for i in self.y_n: string += "{:.2e} ".format(i) string += "] \n" - if isinstance( - self.ordinate.m.any(), uncertainties.core.AffineScalarFunc - ): + if isinstance(self.ordinate.m.any(), uncertainties.core.AffineScalarFunc): string += "Ordinate uncertainty: [ " for i in self.y_s: string += "{:.2e} ".format(i) string += "] \n" else: - string += ( - "Abscissa: " - "[ {:.2e} {:.2e} ... {:.2e} {:.2e} ] \n".format( - *self.x_n[:2], *self.x_n[-2:] - ) + string += "Abscissa: " "[ {:.2e} {:.2e} ... {:.2e} {:.2e} ] \n".format( + *self.x_n[:2], *self.x_n[-2:] ) - string += ( - "Ordinate: " - "[ {:.2e} {:.2e} ... {:.2e} {:.2e} ] \n".format( - *self.y_n[:2], *self.y_n[-2:] - ) + string += "Ordinate: " "[ {:.2e} {:.2e} ... {:.2e} {:.2e} ] \n".format( + *self.y_n[:2], *self.y_n[-2:] ) - if isinstance( - self.ordinate.m.any(), uncertainties.core.AffineScalarFunc - ): + if isinstance(self.ordinate.m.any(), uncertainties.core.AffineScalarFunc): string += ( "Ordinate uncertainty: " "[ {:.2e} {:.2e} ... {:.2e} {:.2e} ]\n".format( @@ -180,9 +170,7 @@ def __str__(self): for var in self.variables: if isinstance(var, Distribution): if var.normal: - string += "{:.2e}+/-{:.2e} ".format( - var.n, var.n - var.con_int[0] - ) + string += "{:.2e}+/-{:.2e} ".format(var.n, var.n - var.con_int[0]) else: string += "{:.2e}+{:.2e}-{:.2e} ".format( var.n, var.con_int[1] - var.n, var.n - var.con_int[0] @@ -192,13 +180,9 @@ def __str__(self): string += "] \n" if self.nested_sampling_done: string += "ln(evidence): {:.2e} \n".format(self.ln_evidence) - string += "Unaccounted uncertainty: {} \n".format( - self.unaccounted_uncertainty - ) + string += "Unaccounted uncertainty: {} \n".format(self.unaccounted_uncertainty) string += "MCMC performed: {} \n".format(self.mcmc_done) - string += "Nested sampling performed: {} \n".format( - self.nested_sampling_done - ) + string += "Nested sampling performed: {} \n".format(self.nested_sampling_done) return string def __repr__(self): @@ -298,9 +282,7 @@ def y_s(self): Returns: :py:attr:`array_like`: Ordinate uncertainties. """ - if isinstance( - self.ordinate.m.any(), uncertainties.core.AffineScalarFunc - ): + if isinstance(self.ordinate.m.any(), uncertainties.core.AffineScalarFunc): return unp.std_devs(self.ordinate.m) else: return None diff --git a/uravu/sampling.py b/uravu/sampling.py index 247b1ce..ec6ff7b 100644 --- a/uravu/sampling.py +++ b/uravu/sampling.py @@ -107,9 +107,7 @@ def ln_probability( ) -def nested_sampling( - relationship, prior_function=None, progress=True, **kwargs -): +def nested_sampling(relationship, prior_function=None, progress=True, **kwargs): """ Perform the nested sampling in order to determine the Bayesian natural log evidence. See the :py:func:`dynesty.NestedSampler.run_nested()` documentation. diff --git a/uravu/tests/test_optimize.py b/uravu/tests/test_optimize.py index 3375097..bf395d9 100644 --- a/uravu/tests/test_optimize.py +++ b/uravu/tests/test_optimize.py @@ -39,9 +39,7 @@ def test_ln_likelihood_b(self): """ test_x = np.linspace(0, 99, 10) test_y = np.ones(10) - test_rel = relationship.Relationship( - utils.straight_line, test_x, test_y - ) + test_rel = relationship.Relationship(utils.straight_line, test_x, test_y) expected_lnl = -45.21054955719477 actual_lnl = optimize.ln_likelihood( test_rel.variables, @@ -76,11 +74,7 @@ def test_negative_lnl_b(self): test_y = np.ones(10) test_y_e = np.ones(10) * 0.1 test_rel = relationship.Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - unaccounted_uncertainty=True, + utils.straight_line, test_x, test_y, test_y_e, unaccounted_uncertainty=True, ) expected_negtive_lnl = 45.21123241122563 actual_negative_lnl = optimize.negative_lnl( diff --git a/uravu/tests/test_relationship.py b/uravu/tests/test_relationship.py index e670e6a..3aa4997 100644 --- a/uravu/tests/test_relationship.py +++ b/uravu/tests/test_relationship.py @@ -236,11 +236,7 @@ def test_init_additional_uncertainty_one_dimensional(self): test_y = np.linspace(1, 199, 100) test_y_e = test_y * 0.1 test_rel = Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - unaccounted_uncertainty=True, + utils.straight_line, test_x, test_y, test_y_e, unaccounted_uncertainty=True, ) assert_equal(test_rel.function, utils.straight_line) assert_almost_equal(test_rel.abscissa.m, test_x) @@ -257,11 +253,7 @@ def test_init_additional_uncertainty_two_dimensional(self): test_y = np.linspace(1, 199, 100) test_y_e = test_y * 0.1 test_rel = Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - unaccounted_uncertainty=True, + utils.straight_line, test_x, test_y, test_y_e, unaccounted_uncertainty=True, ) assert_equal(test_rel.function, utils.straight_line) assert_almost_equal(test_rel.abscissa.m, test_x) @@ -286,9 +278,7 @@ def test_init_different_length_x_and_y_two_dimension(self): data. """ with self.assertRaises(ValueError): - test_x = np.array( - [np.linspace(0, 99, 100), np.linspace(0, 99, 100)] - ).T + test_x = np.array([np.linspace(0, 99, 100), np.linspace(0, 99, 100)]).T test_y = np.linspace(1, 199, 99) test_y_e = test_y * 0.1 Relationship(utils.straight_line, test_x, test_y, test_y_e) @@ -310,9 +300,7 @@ def test_init_different_length_y_and_y_err_two_dimension(self): data. """ with self.assertRaises(ValueError): - test_x = np.array( - [np.linspace(0, 99, 100), np.linspace(0, 99, 100)] - ).T + test_x = np.array([np.linspace(0, 99, 100), np.linspace(0, 99, 100)]).T test_y = np.linspace(1, 199, 100) test_y_e = np.linspace(1, 199, 99) Relationship(utils.straight_line, test_x, test_y, test_y_e) @@ -327,11 +315,7 @@ def test_init_different_variables_and_names(self): test_y = np.linspace(1, 199, 100) test_y_e = np.linspace(1, 199, 99) Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - variable_names=["a"], + utils.straight_line, test_x, test_y, test_y_e, variable_names=["a"], ) def test_init_different_variables_and_units(self): @@ -382,11 +366,7 @@ def test_init_variable_names(self): test_y = np.linspace(1, 199, 100) test_y_e = test_y * 0.1 test_rel = Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - variable_names=["g", "a"], + utils.straight_line, test_x, test_y, test_y_e, variable_names=["g", "a"], ) assert_equal(test_rel.function, utils.straight_line) assert_almost_equal(test_rel.abscissa.m, test_x) @@ -404,11 +384,7 @@ def test_init_x_unit_one_dimensional(self): test_y = np.linspace(1, 199, 100) test_y_e = test_y * 0.1 test_rel = Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - abscissa_unit=UREG.meter, + utils.straight_line, test_x, test_y, test_y_e, abscissa_unit=UREG.meter, ) assert_equal(test_rel.function, utils.straight_line) assert_almost_equal(test_rel.abscissa.m, test_x) @@ -426,11 +402,7 @@ def test_init_y_unit_one_dimensional(self): test_y = np.linspace(1, 199, 100) test_y_e = test_y * 0.1 test_rel = Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - ordinate_unit=UREG.meter, + utils.straight_line, test_x, test_y, test_y_e, ordinate_unit=UREG.meter, ) assert_equal(test_rel.function, utils.straight_line) assert_almost_equal(test_rel.abscissa.m, test_x) @@ -491,11 +463,7 @@ def test_x_u(self): test_y = np.linspace(1, 199, 100) test_y_e = test_y * 0.1 test_rel = Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - abscissa_unit=UREG.meter, + utils.straight_line, test_x, test_y, test_y_e, abscissa_unit=UREG.meter, ) assert_equal(test_rel.x_u, UREG.meter) @@ -507,11 +475,7 @@ def test_y_u(self): test_y = np.linspace(1, 199, 100) test_y_e = test_y * 0.1 test_rel = Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - ordinate_unit=UREG.meter, + utils.straight_line, test_x, test_y, test_y_e, ordinate_unit=UREG.meter, ) assert_equal(test_rel.y_u, UREG.meter) @@ -618,15 +582,11 @@ def test_prior_a(self): result_priors = test_rel.prior() assert_equal(len(result_priors), 2) assert_equal( - isinstance( - result_priors[0], scipy.stats._distn_infrastructure.rv_frozen - ), + isinstance(result_priors[0], scipy.stats._distn_infrastructure.rv_frozen), True, ) assert_equal( - isinstance( - result_priors[1], scipy.stats._distn_infrastructure.rv_frozen - ), + isinstance(result_priors[1], scipy.stats._distn_infrastructure.rv_frozen), True, ) @@ -638,31 +598,21 @@ def test_prior_b(self): test_y = np.linspace(1, 199, 100) test_y_e = test_y * 0.1 test_rel = Relationship( - utils.straight_line, - test_x, - test_y, - test_y_e, - unaccounted_uncertainty=True, + utils.straight_line, test_x, test_y, test_y_e, unaccounted_uncertainty=True, ) test_rel.max_likelihood() result_priors = test_rel.prior() assert_equal(len(result_priors), 3) assert_equal( - isinstance( - result_priors[0], scipy.stats._distn_infrastructure.rv_frozen - ), + isinstance(result_priors[0], scipy.stats._distn_infrastructure.rv_frozen), True, ) assert_equal( - isinstance( - result_priors[1], scipy.stats._distn_infrastructure.rv_frozen - ), + isinstance(result_priors[1], scipy.stats._distn_infrastructure.rv_frozen), True, ) assert_equal( - isinstance( - result_priors[2], scipy.stats._distn_infrastructure.rv_frozen - ), + isinstance(result_priors[2], scipy.stats._distn_infrastructure.rv_frozen), True, ) diff --git a/uravu/tests/test_sampling.py b/uravu/tests/test_sampling.py index a41ace4..7c0d376 100644 --- a/uravu/tests/test_sampling.py +++ b/uravu/tests/test_sampling.py @@ -33,12 +33,8 @@ def test_mcmc_a(self): test_rel = Relationship(utils.straight_line, test_x, test_y, test_y_e,) test_rel.max_likelihood() actual_results = sampling.mcmc(test_rel, n_burn=10, n_samples=10) - assert_equal( - isinstance(actual_results["distributions"][0], Distribution), True - ) - assert_equal( - isinstance(actual_results["distributions"][1], Distribution), True - ) + assert_equal(isinstance(actual_results["distributions"][0], Distribution), True) + assert_equal(isinstance(actual_results["distributions"][1], Distribution), True) assert_equal(actual_results["distributions"][0].size, 1000) assert_equal(actual_results["distributions"][1].size, 1000) @@ -69,12 +65,8 @@ def other_prior(): actual_results = sampling.mcmc( test_rel, prior_function=other_prior, n_burn=10, n_samples=10 ) - assert_equal( - isinstance(actual_results["distributions"][0], Distribution), True - ) - assert_equal( - isinstance(actual_results["distributions"][1], Distribution), True - ) + assert_equal(isinstance(actual_results["distributions"][0], Distribution), True) + assert_equal(isinstance(actual_results["distributions"][1], Distribution), True) assert_equal(actual_results["distributions"][0].size, 1000) assert_equal(actual_results["distributions"][1].size, 1000)