tparams.py - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch) (HTM) git clone git://src.adamsgaard.dk/pism (DIR) Log (DIR) Files (DIR) Refs (DIR) LICENSE --- tparams.py (2624B) --- 1 ############################################################################ 2 # 3 # This file is a part of siple. 4 # 5 # Copyright 2010, 2014 David Maxwell 6 # 7 # siple is free software: you can redistribute it and/or modify 8 # it under the terms of the GNU General Public License as published by 9 # the Free Software Foundation, either version 2 of the License, or 10 # (at your option) any later version. 11 # 12 ############################################################################ 13 14 # The following was copied from matplotlib, which copied a python recipe. 15 class Bunch: 16 """ 17 Often we want to just collect a bunch of stuff together, naming each 18 item of the bunch; a dictionary's OK for that, but a small do- nothing 19 class is even handier, and prettier to use. Whenever you want to 20 group a few variables: 21 22 >>> point = Bunch(datum=2, squared=4, coord=12) 23 >>> point.datum 24 By: Alex Martelli 25 From: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52308 26 """ 27 def __init__(self, **kwds): 28 self.__dict__.update(kwds) 29 30 def has_key(self,k): 31 return k in self.__dict__ 32 33 def update(self,**kwds): 34 self.__dict__.update(**kwds) 35 36 def __repr__(self): 37 keys = list(self.__dict__.keys()) 38 return 'Bunch(%s)'%', '.join(['%s=%s'%(k,self.__dict__[k]) for k in keys]) 39 40 class Parameters(Bunch): 41 """This is a quick and dirty replacement for the dolfin.Parameters class 42 that was previously used in 'sipl'.""" 43 def __init__(self, *args, **kwds): 44 Bunch.__init__(self,**kwds) 45 if len(args) > 0: 46 self.name = args[0] 47 48 def __repr__(self): 49 keys = list(self.__dict__.keys()) 50 return 'Parameters(%s): [%s]'% (self.name,','.join(['%s=%s'%(k,self.__dict__[k]) for k in keys])) 51 52 def add(self,*args): 53 if len(args)==0 or len(args)>2: 54 'add expects a single Parameters argument or a key/value pair' 55 if (len(args)==1): 56 otherParams = args[0] 57 if (isinstance(otherParams,Parameters)): 58 self.__dict__[otherParams.name] = otherParams.copy() 59 else: 60 raise ValueError('add with one argument expects a Parameters, found %s' % otherParams) 61 else: 62 name = args[0] 63 value = args[1] 64 self.__dict__[name] = value 65 66 def rename(self,name): 67 self.name = name 68 69 def update(self,other): 70 if isinstance(other,dict): 71 self.__dict__.update(other) 72 elif isinstance(other,Parameters): 73 self.__dict__.update(other.__dict__) 74 else: 75 raise ValueError() 76 77 def copy(self): 78 p=Parameters(self.name) 79 p.__dict__.update(self.__dict__) 80 return p