Package geometry :: Package manifolds :: Module torus
[hide private]
[frames] | no frames]

Source Code for Module geometry.manifolds.torus

 1  from . import DifferentiableManifold, np, contract 
 2  from .. import normalize_pi 
 3  from contracts import check 
4 5 6 -class Torus(DifferentiableManifold):
7
8 - def __init__(self, n):
9 DifferentiableManifold.__init__(self, dimension=n) 10 self.n = n
11
12 - def belongs(self, a):
13 check('array[N](>=-pi,<pi)', a, N=self.n)
14 15 @contract(a='belongs', b='belongs', returns='>=0')
16 - def distance(self, a, b):
17 b = self.normalize(b - a) 18 return np.linalg.norm(b)
19 20 @contract(a='belongs', b='belongs', returns='belongs_ts')
21 - def logmap(self, a, b):
22 vel = self.normalize(b - a) 23 return a, vel
24 25 @contract(bv='belongs_ts', returns='belongs')
26 - def expmap(self, bv):
27 a, vel = bv 28 b = self.normalize(a + vel) 29 return b
30 31 @contract(bv='tuple(belongs, *)')
32 - def project_ts(self, bv):
33 return bv # XXX: more checks
34 35 @contract(returns='belongs')
36 - def sample_uniform(self):
37 return np.random.rand(self.n) * 2 * np.pi - np.pi
38
39 - def normalize(self, x):
40 return normalize_pi(x)
41
42 - def friendly(self, a):
43 return 'point(%s)' % a
44 45 @contract(returns='list(belongs)')
46 - def interesting_points(self):
47 o = np.ones(self.n) 48 return [np.zeros(self.n), o * -np.pi]
49
50 - def __repr__(self):
51 #return 'Torus(%s)' % self.n 52 return 'T%s' % self.n
53