Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

from __future__ import absolute_import, division, print_function 

from builtins import range, object 

from .constants import HERMITE, LAGUERRE, computeSize 

 

 

class IndexGenerator(object): 

""" 

Base class for shapelet index generators. 

""" 

 

__slots__ = "order", "size" 

 

@staticmethod 

def make(self, order, basisType): 

if basisType == HERMITE: 

return HermiteIndexGenerator(order) 

elif basisType == LAGUERRE: 

return LaguerreIndexGenerator(order) 

 

def __init__(self, order): 

self.order = order 

self.size = computeSize(self.order) 

 

def __len__(self): 

return self.size 

 

 

class HermiteIndexGenerator(IndexGenerator): 

""" 

Iterable that generates tuples of (i, nx, ny) in which: 

- 'i' is the overall coefficient index for a 2-d shapelet expansion (just counts from zero) 

- 'nx' is the order of the x expansion 

- 'ny' is the order of the y expansion 

""" 

 

def __iter__(self): 

i = 0 

for n in range(0, self.order+1): 

for nx in range(0, n+1): 

yield (i, nx, n - nx) 

i += 1 

 

 

class LaguerreIndexGenerator(IndexGenerator): 

""" 

Iterable that generates tuples of (i, p, q, re) in which: 

- 'i' is the overall coefficient index for a 2-d shapelet expansion (just counts from zero) 

- 'p' and 'q' are the indices of the polar shapelet expansion (see BasisTypeEnum). 

- 're' is True if this the real part of the coefficient 

""" 

 

def __iter__(self): 

i = 0 

for n in range(0, self.order+1): 

p = n 

q = 0 

while p > q: 

yield (i, p, q, True) 

i += 1 

yield (i, p, q, False) 

i += 1 

p -= 1 

q += 1 

if p == q: 

yield (i, p, q, True) 

i += 1