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

67

68

69

70

71

72

73

74

75

76

77

78

79

80

from .constants import HERMITE, LAGUERRE, computeSize 

 

__all__ = ['IndexGenerator', 'HermiteIndexGenerator', 'LaguerreIndexGenerator'] 

 

 

class IndexGenerator: 

"""Base class for shapelet index generators. 

 

Parameters 

---------- 

order: `int` 

Order of the function indices to generate. 

""" 

 

__slots__ = "order", "size" 

 

def __init__(self, order): 

self.order = order 

self.size = computeSize(self.order) 

 

@staticmethod 

def make(self, order, basisType): 

if basisType == HERMITE: 

return HermiteIndexGenerator(order) 

elif basisType == LAGUERRE: 

return LaguerreIndexGenerator(order) 

 

def __len__(self): 

return self.size 

 

 

class HermiteIndexGenerator(IndexGenerator): 

"""Iterable that generates tuples of indices. 

 

Yields 

------ 

i : `int` 

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

nx : `int` 

the order of the x expansion 

ny : `int` 

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 indices. 

 

Yields 

------ 

i : `int` 

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

p, q : `int` 

indices of the polar shapelet expansion (see BasisTypeEnum). 

re : `bool` 

True, if this is 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