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

import logging 

 

from pyrocko.guts import Object 

from grond.meta import GrondError, has_get_plot_classes 

 

guts_prefix = 'grond' 

 

logger = logging.getLogger('grond.optimisers.base') 

 

 

class BadProblem(GrondError): 

pass 

 

 

@has_get_plot_classes 

class Optimiser(Object): 

 

def __init__(self, **kwargs): 

Object.__init__(self, **kwargs) 

self._nthreads = 1 

 

def set_nthreads(self, nthreads): 

logger.debug('Setting nthreads to %d', nthreads) 

self._nthreads = nthreads 

 

def optimise(self, problem): 

raise NotImplementedError 

 

@property 

def niterations(self): 

raise NotImplementedError 

 

def get_status(self, history): 

pass 

 

def init_bootstraps(self, problem): 

raise NotImplementedError 

 

@classmethod 

def get_plot_classes(cls): 

from . import plot 

return plot.get_plot_classes() 

 

 

class OptimiserConfig(Object): 

pass 

 

 

class OptimiserStatus(object): 

__slots__ = ['row_names', 'column_data', 'extra_header', 'extra_footer'] 

 

def __init__(self, row_names, column_data, 

extra_header=None, extra_footer=None): 

self.row_names = row_names 

self.column_data = column_data 

self.extra_header = extra_header 

self.extra_footer = extra_footer 

 

@property 

def column_names(self): 

return self.column_data.keys() 

 

@property 

def ncolumns(self): 

return len(self.column_data) 

 

@property 

def values(self): 

return self.column_data.values() 

 

 

__all__ = ''' 

BadProblem 

Optimiser 

OptimiserConfig 

'''.split()