1 from . import DifferentiableManifold, np, contract
2 from .. import normalize_pi
3 from contracts import check
4
5
6 -class Torus(DifferentiableManifold):
7
11
13 check('array[N](>=-pi,<pi)', a, N=self.n)
14
15 @contract(a='belongs', b='belongs', returns='>=0')
19
20 @contract(a='belongs', b='belongs', returns='belongs_ts')
22 vel = self.normalize(b - a)
23 return a, vel
24
25 @contract(bv='belongs_ts', returns='belongs')
27 a, vel = bv
28 b = self.normalize(a + vel)
29 return b
30
31 @contract(bv='tuple(belongs, *)')
34
35 @contract(returns='belongs')
38
41
43 return 'point(%s)' % a
44
45 @contract(returns='list(belongs)')
47 o = np.ones(self.n)
48 return [np.zeros(self.n), o * -np.pi]
49
51
52 return 'T%s' % self.n
53