@@ -19,7 +19,7 @@ Line # Hits Time Per Hit % Time Line Contents
1919==============================================================
2020 137 def compress(source, char* cname, int clevel, int shuffle):
2121 138 """Compress data in a numpy array.
22- 139
22+ 139
2323 140 Parameters
2424 141 ----------
2525 142 source : array-like
@@ -30,33 +30,33 @@ Line # Hits Time Per Hit % Time Line Contents
3030 147 Compression level.
3131 148 shuffle : int
3232 149 Shuffle filter.
33- 150
33+ 150
3434 151 Returns
3535 152 -------
3636 153 dest : bytes-like
3737 154 Compressed data.
38- 155
38+ 155
3939 156 """
40- 157
40+ 157
4141 158 cdef:
4242 159 char *source_ptr
4343 160 char *dest_ptr
4444 161 Py_buffer source_buffer
4545 162 size_t nbytes, cbytes, itemsize
4646 163 200 506 2.5 0.2 array.array char_array_template = array.array('b', [])
4747 164 array.array dest
48- 165
48+ 165
4949 166 # setup source buffer
5050 167 200 458 2.3 0.2 PyObject_GetBuffer(source, &source_buffer, PyBUF_ANY_CONTIGUOUS)
5151 168 200 119 0.6 0.0 source_ptr = <char *> source_buffer.buf
52- 169
52+ 169
5353 170 # setup destination
5454 171 200 239 1.2 0.1 nbytes = source_buffer.len
5555 172 200 103 0.5 0.0 itemsize = source_buffer.itemsize
5656 173 200 2286 11.4 0.8 dest = array.clone(char_array_template, nbytes + BLOSC_MAX_OVERHEAD,
5757 174 zero=False)
5858 175 200 129 0.6 0.0 dest_ptr = <char *> dest.data.as_voidptr
59- 176
59+ 176
6060 177 # perform compression
6161 178 200 1734 8.7 0.6 if _get_use_threads():
6262 179 # allow blosc to use threads internally
@@ -67,24 +67,24 @@ Line # Hits Time Per Hit % Time Line Contents
6767 184 cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes,
6868 185 source_ptr, dest_ptr,
6969 186 nbytes + BLOSC_MAX_OVERHEAD)
70- 187
70+ 187
7171 188 else:
7272 189 with nogil:
7373 190 cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes,
7474 191 source_ptr, dest_ptr,
7575 192 nbytes + BLOSC_MAX_OVERHEAD, cname,
7676 193 0, 1)
77- 194
77+ 194
7878 195 # release source buffer
7979 196 200 616 3.1 0.2 PyBuffer_Release(&source_buffer)
80- 197
80+ 197
8181 198 # check compression was successful
8282 199 200 120 0.6 0.0 if cbytes <= 0:
8383 200 raise RuntimeError('error during blosc compression: %d' % cbytes)
84- 201
84+ 201
8585 202 # resize after compression
8686 203 200 1896 9.5 0.6 array.resize(dest, cbytes)
87- 204
87+ 204
8888 205 200 186 0.9 0.1 return dest
8989
9090*******************************************************************************
@@ -100,19 +100,19 @@ Line # Hits Time Per Hit % Time Line Contents
100100==============================================================
101101 75 def decompress(source, dest):
102102 76 """Decompress data.
103- 77
103+ 77
104104 78 Parameters
105105 79 ----------
106106 80 source : bytes-like
107107 81 Compressed data, including blosc header.
108108 82 dest : array-like
109109 83 Object to decompress into.
110- 84
110+ 84
111111 85 Notes
112112 86 -----
113113 87 Assumes that the size of the destination buffer is correct for the size of
114114 88 the uncompressed data.
115- 89
115+ 89
116116 90 """
117117 91 cdef:
118118 92 int ret
@@ -122,7 +122,7 @@ Line # Hits Time Per Hit % Time Line Contents
122122 96 array.array source_array
123123 97 Py_buffer dest_buffer
124124 98 size_t nbytes
125- 99
125+ 99
126126 100 # setup source buffer
127127 101 200 573 2.9 0.2 if PY2 and isinstance(source, array.array):
128128 102 # workaround fact that array.array does not support new-style buffer
@@ -134,13 +134,13 @@ Line # Hits Time Per Hit % Time Line Contents
134134 108 200 112 0.6 0.0 release_source_buffer = True
135135 109 200 144 0.7 0.1 PyObject_GetBuffer(source, &source_buffer, PyBUF_ANY_CONTIGUOUS)
136136 110 200 98 0.5 0.0 source_ptr = <char *> source_buffer.buf
137- 111
137+ 111
138138 112 # setup destination buffer
139139 113 200 552 2.8 0.2 PyObject_GetBuffer(dest, &dest_buffer,
140140 114 PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE)
141141 115 200 100 0.5 0.0 dest_ptr = <char *> dest_buffer.buf
142142 116 200 84 0.4 0.0 nbytes = dest_buffer.len
143- 117
143+ 117
144144 118 # perform decompression
145145 119 200 1856 9.3 0.8 if _get_use_threads():
146146 120 # allow blosc to use threads internally
@@ -149,12 +149,12 @@ Line # Hits Time Per Hit % Time Line Contents
149149 123 else:
150150 124 with nogil:
151151 125 ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1)
152- 126
152+ 126
153153 127 # release buffers
154154 128 200 754 3.8 0.3 if release_source_buffer:
155155 129 200 326 1.6 0.1 PyBuffer_Release(&source_buffer)
156156 130 200 165 0.8 0.1 PyBuffer_Release(&dest_buffer)
157- 131
157+ 131
158158 132 # handle errors
159159 133 200 128 0.6 0.1 if ret <= 0:
160160 134 raise RuntimeError('error during blosc decompression: %d' % ret)
0 commit comments