Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagelib
Path: blob/master/sage/gsl/gsl_array.pyx
4048 views
1
#include 'gsl.pxi'
2
3
include '../ext/stdsage.pxi'
4
5
cdef class GSLDoubleArray:
6
r"""
7
EXAMPLES::
8
sage: a = WaveletTransform(128,'daubechies',4)
9
sage: for i in range(1, 11):
10
... a[i] = 1
11
sage: a[:6:2]
12
[0.0, 1.0, 1.0]
13
"""
14
def __init__(self, size_t n, size_t stride = 1, data = None):
15
cdef int i
16
17
self.n = n
18
self.stride = stride
19
self.data = <double *> sage_malloc(sizeof(double)*n)
20
if data is not None:
21
for i from 0 <= i < n:
22
self.data[i] = data[i]
23
else:
24
for i from 0 <= i < n:
25
self.data[i] = 0
26
27
def __dealloc__(self):
28
sage_free(self.data)
29
30
def __len__(self):
31
return self.n
32
33
def __repr__(self):
34
return str(list(self))
35
36
def __setitem__(self, size_t i, x):
37
# just set real for now
38
if i < 0 or i >= self.n:
39
raise IndexError
40
self.data[i] = x
41
42
def __getitem__(self, i):
43
if isinstance(i, slice):
44
start, stop, step = i.indices(len(self))
45
# TODO -- make this actually fast.
46
return list(self)[start:stop:step]
47
else:
48
if i < 0 or i >= self.n:
49
raise IndexError
50
return self.data[i]
51
52