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

Source Code for Module MDSplus.mdsarray

  1  import numpy,copy 
  2  from types import NotImplementedType 
  3  from mdsdata import Data,makeData 
  4  from _mdsdtypes import * 
  5  from mdsscalar import Scalar 
  6   
7 -def makeArray(value):
8 if isinstance(value,Array): 9 return value 10 if isinstance(value,Scalar): 11 return makeArray((value._value,)) 12 if isinstance(value,tuple) | isinstance(value,list): 13 return makeArray(numpy.array(value)) 14 if isinstance(value,numpy.ndarray): 15 if str(value.dtype)[0:2] == '|S': 16 return StringArray(value) 17 if str(value.dtype) == 'bool': 18 return makeArray(value.__array__(numpy.uint8)) 19 if str(value.dtype) == 'object': 20 raise TypeError,'cannot make Array out of an numpy.ndarray of dtype object' 21 exec 'ans='+str(value.dtype).capitalize()+'Array(value)' 22 return ans 23 if isinstance(value,numpy.generic) | isinstance(value,int) | isinstance(value,long) | isinstance(value,float) | isinstance(value,str) | isinstance(value,bool): 24 return makeArray(numpy.array(value).reshape(1)) 25 raise TypeError,'Cannot make Array out of '+str(type(value))
26 27
28 -class Array(Data):
29 - def __init__(self,value=0):
30 if self.__class__.__name__ == 'Array': 31 raise TypeError,"cannot create 'Array' instances" 32 if self.__class__.__name__ == 'StringArray': 33 self._value=numpy.array(value).__array__(numpy.string_) 34 return 35 exec 'self._value=numpy.array(value).__array__(numpy.'+self.__class__.__name__[0:len(self.__class__.__name__)-5].lower()+')' 36 return
37 38 39 # def __getitem__(self,y): 40 # """Subscript: x.__getitem__(y) <==> x[y] 41 # @rtype: Data""" 42 # return makeData(self.value.__getitem__(y)) 43
44 - def __getattr__(self,name):
45 exec 'ans=self._value.'+name 46 return ans
47
48 - def _getValue(self):
49 """Return the numpy ndarray representation of the array""" 50 return self._value
51 52 value=property(_getValue) 53 54
55 - def _unop(self,op):
56 return makeData(getattr(self._value,op)())
57
58 - def _binop(self,op,y):
59 try: 60 y=y._value 61 except (AttributeError),e: 62 pass 63 return makeData(getattr(self._value,op)(y))
64
65 - def _triop(self,op,y,z):
66 try: 67 y=y._value 68 except (AttributeError),e: 69 pass 70 try: 71 z=z._value 72 except (AttributeError),e: 73 pass 74 return makeData(getattr(self._value,op)(y,z))
75
76 - def _getMdsDtypeNum(self):
77 return {'Uint8Array':DTYPE_BU,'Uint16Array':DTYPE_WU,'Uint32Array':DTYPE_LU,'Uint64Array':DTYPE_QU, 78 'Int8Array':DTYPE_B,'Int16Array':DTYPE_W,'Int32Array':DTYPE_L,'Int64Array':DTYPE_Q, 79 'StringArray':DTYPE_T, 80 'Float32Array':DTYPE_FS, 81 'Float64Array':DTYPE_FT}[self.__class__.__name__]
82 83 mdsdtype=property(_getMdsDtypeNum) 84
85 - def __array__(self):
86 raise TypeError,'__array__ not yet supported'
87
88 - def __copy__(self):
89 return type(self)(self._value)
90
91 - def __deepcopy__(self,memo=None):
92 return self.__copy__()
93
94 - def getElementAt(self,itm):
95 return makeData(self._value[itm])
96
97 - def setElementAt(self,i,y):
98 self._value[i]=y
99
100 - def all(self):
101 return self._unop('all')
102
103 - def any(self):
104 return self._unop('any')
105
106 - def argmax(self,*axis):
107 if axis: 108 return self._binop('argmax',axis[0]) 109 else: 110 return self._unop('argmax')
111
112 - def argmin(self,*axis):
113 if axis: 114 return self._binop('argmin',axis[0]) 115 else: 116 return self._unop('argmin')
117
118 - def argsort(self,axis=-1,kind='quicksort',order=None):
119 return makeData(self._value.argsort(axis,kind,order))
120
121 - def astype(self,type):
122 return makeData(self._value.astype(type))
123
124 - def byteswap(self):
125 return self._unop('byteswap')
126
127 - def clip(self,y,z):
128 return self._triop('clip',y,z)
129 130
131 -class Int8Array(Array):
132 """8-bit signed number"""
133
134 -class Int16Array(Array):
135 """16-bit signed number"""
136
137 -class Int32Array(Array):
138 """32-bit signed number"""
139
140 -class Int64Array(Array):
141 """64-bit signed number"""
142
143 -class Uint8Array(Array):
144 """8-bit unsigned number"""
145 - def deserialize(self):
146 """Return data item if this array was returned from serialize. 147 @rtype: Data 148 """ 149 return Data.deserialize(self)
150
151 -class Uint16Array(Array):
152 """16-bit unsigned number"""
153
154 -class Uint32Array(Array):
155 """32-bit unsigned number"""
156
157 -class Uint64Array(Array):
158 """64-bit unsigned number"""
159
160 -class Float32Array(Array):
161 """32-bit floating point number"""
162
163 -class Float64Array(Array):
164 """64-bit floating point number"""
165
166 -class StringArray(Array):
167 """String"""
168 - def __radd__(self,y):
169 """Reverse add: x.__radd__(y) <==> y+x 170 @rtype: Data""" 171 return self.execute('$//$',y,self)
172 - def __add__(self,y):
173 """Add: x.__add__(y) <==> x+y 174 @rtype: Data""" 175 return self.execute('$//$',self,y)
176 - def __str__(self):
177 """String: x.__str__() <==> str(x) 178 @rtype: String""" 179 return self.decompile()
180
181 -class Int128Array(Array):
182 """128-bit signed number"""
183 - def __init__(self):
184 raise TypeError,"Int128Array is not yet supported"
185
186 -class Uint128Array(Array):
187 """128-bit unsigned number"""
188 - def __init__(self):
189 raise TypeError,"Uint128Array is not yet supported"
190