Skip to content

Commit c595cd7

Browse files
committed
Added HypercylindricalStateSpaceSubdivisionGaussianDistribution
1 parent faf8e3d commit c595cd7

1 file changed

Lines changed: 76 additions & 0 deletions

File tree

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
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

Comments
 (0)