1+ import unittest
2+ import numpy as np
3+ from pyrecest .distributions .circle .circular_grid_distribution import CircularGridDistribution
4+ from pyrecest .distributions import VonMisesDistribution , WrappedNormalDistribution
5+
6+ class CircularGridDistributionTest (unittest .TestCase ):
7+
8+ @staticmethod
9+ def _test_grid_conversion (dist , coeffs , enforceNonnegative , tolerance ):
10+ figd = CircularGridDistribution .from_distribution (dist , coeffs , enforce_pdf_nonnegative = enforceNonnegative )
11+ # Test grid values
12+ xvals = np .linspace (0 , 2 * np .pi , coeffs , endpoint = False )
13+ np .testing .assert_allclose (figd .pdf (xvals ), dist .pdf (xvals ), atol = tolerance )
14+ # Test approximation of pdf
15+ xvals = np .arange (- 2 * np .pi , 3 * np .pi , 0.01 )
16+ np .testing .assert_allclose (figd .pdf (xvals ), dist .pdf (xvals ), atol = tolerance )
17+
18+ def test_VMToGridId (self ):
19+ mu = 0.4
20+ for kappa in np .arange (.1 , 2.1 , .1 ):
21+ dist = VonMisesDistribution (mu , kappa )
22+ self ._test_grid_conversion (dist , 101 , False , 1E-8 )
23+
24+ def test_VMToGridSqrt (self ):
25+ mu = 0.5
26+ for kappa in np .arange (.1 , 2.1 , .1 ):
27+ dist = VonMisesDistribution (mu , kappa )
28+ self ._test_grid_conversion (dist , 101 , True , 1E-8 )
29+
30+ def test_WNToGridId (self ):
31+ mu = 0.8
32+ for sigma in np .arange (.2 , 2.1 , .1 ):
33+ dist = WrappedNormalDistribution (mu , sigma )
34+ self ._test_grid_conversion (dist , 101 , False , 1E-8 )
35+
36+ def test_WNToGridSqrt (self ):
37+ mu = 0.9
38+ for sigma in np .arange (.2 , 2.1 , .1 ):
39+ dist = WrappedNormalDistribution (mu , sigma )
40+ self ._test_grid_conversion (dist , 101 , True , 1E-8 )
41+
42+ if __name__ == "__main__" :
43+ unittest .main ()
0 commit comments