Package MDSplus ::
Module apd
|
|
1 from mdsdata import Data
2 from mdsscalar import String
3 from _mdsdtypes import DTYPE_LIST,DTYPE_DICTIONARY
4
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
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
21 """Return the number of descriptors in the apd"""
22 return len(self.descs)
23
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
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
46 """Returns the descs of the Apd.
47 @rtype: tuple
48 """
49 return self.descs
50
52 """Return the descriptor indexed by idx. (indexes start at 0).
53 @rtype: Data
54 """
55 return self[idx]
56
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
69 """Set a descriptor in the Apd
70 """
71 self[idx]=value
72 return None
73
75 """Append a value to apd"""
76 self[len(self)]=value
77
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
86 """dictionary class"""
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
113 if name in self.keys():
114 return self[name]
115 else:
116 raise AttributeError,'No such attribute: '+name
117
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
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
139
142
143 -class List(list,Data):
144 """list class"""
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
154 apd=Apd(tuple(),DTYPE_LIST)
155 for idx in range(len(self)):
156 apd.append(self[idx])
157 return apd
158
161