Package MDSplus :: Module apd
[frames] | no frames]

Source Code for Module MDSplus.apd

  1  from mdsdata import Data 
  2  from mdsscalar import String 
  3  from _mdsdtypes import DTYPE_LIST,DTYPE_DICTIONARY 
  4   
5 -class Apd(Data):
6 """The Apd class represents the Array of Pointers to Descriptors structure. 7 This structure provides a mechanism for storing an array of non-primitive items. 8 """ 9
10 - def __init__(self,descs,dtype=0):
11 """Initializes a Apd instance 12 """ 13 if isinstance(descs,tuple): 14 self.descs=descs 15 self.dtype=dtype 16 else: 17 raise TypeError,"must provide tuple of items when creating ApdData" 18 return
19
20 - def __len__(self):
21 """Return the number of descriptors in the apd""" 22 return len(self.descs)
23
24 - def __getitem__(self,idx):
25 """Return descriptor(s) x.__getitem__(idx) <==> x[idx] 26 @rtype: Data|tuple 27 """ 28 try: 29 return self.descs[idx] 30 except: 31 return None 32 return
33
34 - def __setitem__(self,idx,value):
35 """Set descriptor. x.__setitem__(idx,value) <==> x[idx]=value 36 @rtype: None 37 """ 38 l=list(self.descs) 39 while len(l) <= idx: 40 l.append(None) 41 l[idx]=value 42 self.descs=tuple(l) 43 return None
44
45 - def getDescs(self):
46 """Returns the descs of the Apd. 47 @rtype: tuple 48 """ 49 return self.descs
50
51 - def getDescAt(self,idx=0):
52 """Return the descriptor indexed by idx. (indexes start at 0). 53 @rtype: Data 54 """ 55 return self[idx]
56
57 - def setDescs(self,descs):
58 """Set the descriptors of the Apd. 59 @type descs: tuple 60 @rtype: None 61 """ 62 if isinstance(descs,tuple): 63 self.descs=descs 64 else: 65 raise TypeError,"must provide tuple" 66 return
67
68 - def setDescAt(self,idx,value):
69 """Set a descriptor in the Apd 70 """ 71 self[idx]=value 72 return None
73
74 - def append(self,value):
75 """Append a value to apd""" 76 self[len(self)]=value
77
78 - def data(self):
79 """Returns native representation of the apd""" 80 l=list() 81 for d in self.descs: 82 l.append(d.data()) 83 return l
84
85 -class Dictionary(dict,Data):
86 """dictionary class"""
87 - def __init__(self,value=None):
88 if value is not None: 89 if isinstance(value,Apd): 90 from mdsscalar import Scalar 91 import numpy 92 for idx in range(0,len(value),2): 93 key=value[idx] 94 if isinstance(key,Scalar): 95 key=key.value 96 if isinstance(key,numpy.string_): 97 key=str(key) 98 elif isinstance(key,numpy.int32): 99 key=int(key) 100 elif isinstance(key,numpy.float32) or isinstance(key,numpy.float64): 101 key=float(key) 102 val=value[idx+1] 103 if isinstance(val,Apd): 104 val=Dictionary(val) 105 self.setdefault(key,val) 106 elif isinstance(value,dict): 107 for key,val in value.items(): 108 self.setdefault(key,val) 109 else: 110 raise TypeError,'Cannot create Dictionary from type: '+str(type(value))
111
112 - def __getattr__(self,name):
113 if name in self.keys(): 114 return self[name] 115 else: 116 raise AttributeError,'No such attribute: '+name
117
118 - def __setattr__(self,name,value):
119 if name in self.keys(): 120 self[name]=value 121 elif hasattr(self,name): 122 self.__dict__[name]=value 123 else: 124 self.setdefault(name,value)
125
126 - def data(self):
127 """Return native representation of data item""" 128 d=dict() 129 for key,val in self.items(): 130 d.setdefault(key,val.data()) 131 return d
132
133 - def toApd(self):
134 apd=Apd(tuple(),DTYPE_DICTIONARY) 135 for key,val in self.items(): 136 apd.append(key) 137 apd.append(val) 138 return apd
139
140 - def __str__(self):
141 return dict.__str__(self)
142
143 -class List(list,Data):
144 """list class"""
145 - def __init__(self,value=None):
146 if value is not None: 147 if isinstance(value,Apd) or isinstance(value,list) or isinstance(value,tuple): 148 for idx in range(len(value)): 149 super(List,self).append(value[idx]) 150 else: 151 raise TypeError,'Cannot create List from type: '+str(type(value))
152
153 - def toApd(self):
154 apd=Apd(tuple(),DTYPE_LIST) 155 for idx in range(len(self)): 156 apd.append(self[idx]) 157 return apd
158
159 - def __str__(self):
160 return list.__str__(self)
161