summaryrefslogtreecommitdiff
path: root/numpy/numarray/numclass.py
blob: 979efa9e0e7905da6192120a2e061b7c564be9c7 (plain)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
from numpy.core.multiarray import ndarray
import numerictypes as _nt
import numpy as N
import sys as _sys

__all__ = ['NumArray']

class NumArray(ndarray):
    def __new__(klass, shape=None, type=None, buffer=None,
                byteoffset=0, bytestride=None, byteorder=_sys.byteorder,
                aligned=1, real=None, imag=None):

        type = _nt.getType(type)
        dtype = N.dtype(type._dtype)
        if byteorder in ['little', 'big']:
            if byteorder is not _sys.byteorder:
                dtype = dtype.newbyteorder()
        else:
            raise ValueError("byteorder must be 'little' or 'big'")

        if buffer is None:
            self = ndarray.__new__(klass, shape, dtype)
        else:
            self = ndarray.__new__(klass, shape, dtype, buffer=buffer,
                                   offset=byteoffset, strides=bytestride)
            
        self._type = type

        if real is not None:
            self.real = real

        if imag is not None:
            self.imag = imag

        self._byteorder = byteorder

        return self

    def argmax(self, axis=-1):
        return ndarray.argmax(self, axis)

    def argmin(self, axis=-1):
        return ndarray.argmax(self, axis)

    def argsort(self, axis=-1, kind='quicksort'):
        return ndarray.argmax(self, axis, kind)

    def astype(self, type=None):
        return self.astype(_getdtype(type))

    def byteswap(self):
        ndarray.byteswap(self, True)

    def byteswapped(self):
        return ndarray.byteswap(self, False)

    def getdtypechar(self):
        return self.dtype.char

    def getimag(self):
        return self.imag

    getimaginary = getimag

    imaginary = property(getimaginary, None, "")

    def getreal(self):
        return self.real

    def is_c_array(self):
        return self.dtype.isnative and self.flags.carray

    def is_f_array(self):
        return self.dtype.isnative and self.flags.farray
    
    def is_fortran_contiguous(self):
        return self.flags.contiguous

    def new(self, type=None):
        if type is not None:
            dtype = _getdtype(type)
            return N.empty(self.shape, dtype)
        else:
            return N.empty_like(self)

    def setimag(self, value):
        self.imag = value

    setimaginary = setimag

    def setreal(self, value):
        self.real = value

    def sinfo(self):
        self.info()

    def sort(self, axis=-1, kind='quicksort'):
        ndarray.sort(self, axis, kind)

    def spacesaver(self):
        return False

    def stddev(self):
        return self.std()

    def sum(self, type=None):
        dtype = _getdtype(type)
        return ndarray.sum(self, dtype=dtype)

    def togglebyteorder(self):
        self.dtype = self.dtype.newbyteorder()

    def type(self):
        return self._type

    def typecode(self):
        return _numtypecode[self.dtype.char]

    dtypechar = property(getdtypechar, None, "")
    
    def info(self):
        print "class: ", self.__class__
        print "shape: ", self.shape
        print "strides: ", self.strides
        print "byteoffset: 0"
        print "bytestride: ", self.strides[0]
        print "itemsize: ", self.itemsize
        print "aligned: ", self.flags.isaligned
        print "contiguous: ", self.flags.contiguous
        print "buffer: ", self.data
        print "data pointer:", self._as_paramater_
        print "byteorder: ", self._byteorder
        print "byteswap: ", not self.dtype.isnative