1+ from pyrecest .distributions .cart_prod .state_space_subdivision_gaussian_distribution import StateSpaceSubdivisionGaussianDistribution
2+ from pyrecest .distributions .cart_prod .hypercylindrical_state_space_subdivision_distribution import HypercylindricalStateSpaceSubdivisionDistribution
3+ from pyrecest .distributions import GaussianDistribution
4+ import numpy as np
5+
6+
7+ class HypercylindricalStateSpaceSubdivisionGaussianDistribution (StateSpaceSubdivisionGaussianDistribution , HypercylindricalStateSpaceSubdivisionDistribution ):
8+
9+ def __init__ (self , gd_ , gaussians ):
10+ HypercylindricalStateSpaceSubdivisionDistribution .__init__ (self , gd_ , gaussians )
11+ StateSpaceSubdivisionGaussianDistribution .__init__ (self , gd_ , gaussians )
12+
13+ def mode (self ):
14+ return StateSpaceSubdivisionGaussianDistribution .mode (self )
15+
16+ def linear_mean (self ):
17+ return StateSpaceSubdivisionGaussianDistribution .linear_mean (self )
18+
19+ def linear_covariance (self ):
20+ return StateSpaceSubdivisionGaussianDistribution .linear_covariance (self )
21+
22+ def hybrid_mean (self ):
23+ return StateSpaceSubdivisionGaussianDistribution .hybrid_mean (self )
24+
25+ def hybrid_moment (self ):
26+ trig_mom_complex = self .gd .trigonometric_moment (1 )
27+ trig_mom_real = [trig_mom_complex .real , trig_mom_complex .imag ]
28+ return trig_mom_real + [self .linear_mean ()]
29+
30+ @staticmethod
31+ def from_distribution (distribution , no_of_grid_points , grid_type = 'CartesianProd' ):
32+ # Even for WN, the conditional is a HypercylindricalWN divided
33+ # by a WN. No analytical formula is known to me
34+ hcrbd_non_gauss = HypercylindricalStateSpaceSubdivisionDistribution .from_function (
35+ distribution .pdf , no_of_grid_points , distribution .linD , distribution .boundD , grid_type )
36+ # Superclass generates CustomLinearDistributions. Convert.
37+ lin_dists = [GaussianDistribution .from_distribution (dist ) for dist in hcrbd_non_gauss .linear_distributions ]
38+ return HypercylindricalStateSpaceSubdivisionGaussianDistribution (hcrbd_non_gauss .gd , lin_dists )
39+
40+ @staticmethod
41+ def from_function (fun , no_of_grid_points , dim_lin , dim_bound = 1 , grid_type = 'CartesianProd' , int_range = (- np .inf , np .inf )):
42+ hcrbd_non_gauss = HypercylindricalStateSpaceSubdivisionDistribution .from_function (
43+ fun , no_of_grid_points , dim_lin , dim_bound , grid_type , int_range )
44+ return HypercylindricalStateSpaceSubdivisionGaussianDistribution (hcrbd_non_gauss .gd , lin_dists )
45+
46+
47+ """
48+ class HypercylindricalStateSpaceSubdivisionGaussianDistribution:
49+ def __init__(self, gd_, gaussians):
50+ # In this class, the grid must be on the hypertorus.
51+ self.gd_ = HypertoroidalGridDistribution(gd_)
52+ self.gaussians = gaussians
53+
54+ def mode(self):
55+ pass
56+
57+ def linear_mean(self):
58+ pass
59+
60+ def linear_covariance(self):
61+ pass
62+
63+ def hybrid_mean(self):
64+ pass
65+
66+ def hybrid_moment(self):
67+ pass
68+
69+ @classmethod
70+ def from_distribution(cls, distribution, no_of_grid_points, grid_type='CartesianProd'):
71+ pass
72+
73+ @classmethod
74+ def from_function(cls, fun, no_of_grid_points, dim_lin, dim_bound=1, grid_type='CartesianProd', int_range=(-np.inf, np.inf)):
75+ pass
76+ """
0 commit comments