/tests/zzz_deprecated_unmaintained/obsmodel/TestZeroMeanGaussObsModel.py

https://github.com/bnpy/bnpy
Python | 66 lines | 46 code | 14 blank | 6 comment | 2 complexity | 873b547a009dbdbe656487787441e8ee MD5 | raw file
  1. import numpy as np
  2. import unittest
  3. import copy
  4. import bnpy
  5. from bnpy.obsmodel.ZeroMeanGaussObsModel import c_Func
  6. from bnpy.util import as2D
  7. class Test(unittest.TestCase):
  8. """ Verify integral for a single pair of nu/B values
  9. """
  10. def shortDescription(self):
  11. return None
  12. def __init__(self, testname,
  13. B=10, nu=2, D=1,
  14. **kwargs):
  15. super(type(self), self).__init__(testname)
  16. self.B = float(B)
  17. self.nu = float(nu)
  18. self.D = D
  19. def setUp(self):
  20. mean = self.nu / self.B
  21. var = self.nu / (0.5 * self.B * self.B)
  22. self.gridmaxval = mean + 8 * np.sqrt(var)
  23. self.gridsize = 8e6 # lots of grid points! need accurate integral.
  24. print('')
  25. print('B=%9.4f nu=%9.4f | %9.4f' % (self.B, self.nu, self.gridmaxval))
  26. print('----------------- setup complete.')
  27. def test_integral_of_pdf_equals_one(self):
  28. """ Verify expected relation -c_F == log(integral(pdf))
  29. """
  30. grid = np.linspace(1e-10, self.gridmaxval, self.gridsize)
  31. grid = np.hstack([1e-13, 1e-12, 1e-11, grid])
  32. pdf = self.pdf(grid)
  33. negC_numeric = np.log(np.trapz(pdf, grid))
  34. negC_exact = -1 * c_Func(self.nu, as2D(self.B), 1)
  35. print('negC_numeric: % 9.7f' % (negC_numeric))
  36. print('negC_exact: % 9.7f' % (negC_exact))
  37. assert np.allclose(negC_numeric, negC_exact, atol=0.001)
  38. def pdf(self, grid):
  39. return np.exp(0.5 * (self.nu - 2) * np.log(grid) - 0.5 * self.B * grid)
  40. class TestRange(unittest.TestCase):
  41. """ Verify integral for a range of possible nu/B values
  42. """
  43. def runTest(self):
  44. suite = unittest.TestSuite()
  45. for B in np.linspace(1e-5, 10, 3):
  46. for nu in np.linspace(2, 10, 3):
  47. kwargs = dict(nu=nu, B=B)
  48. suite.addTest(
  49. Test(
  50. "test_integral_of_pdf_equals_one",
  51. **kwargs))
  52. return unittest.TextTestRunner().run(suite)