Merge lp:~kenneth-arnold/divisi/svdlibc-cleanup into lp:divisi
- svdlibc-cleanup
- Merge into trunk
Proposed by
Ken Arnold
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~kenneth-arnold/divisi/svdlibc-cleanup |
Merge into: | lp:divisi |
Diff against target: |
8671 lines (+2994/-1908) 20 files modified
csc/divisi/blend.py (+6/-0) csc/divisi/exceptions.py (+3/-0) csc/divisi/labeled_view.py (+39/-39) csc/divisi/normalized_view.py (+68/-30) csc/divisi/svd.py (+2/-2) csc/divisi/tensor.py (+39/-7) svdlib/_svdlib.c (+2388/-1566) svdlib/_svdlib.pyx (+75/-107) svdlib/svdlib.c (+17/-1) svdlib/svdlib.h (+5/-0) svdlib/svdutil.c (+63/-29) svdlib/svdutil.h (+4/-2) svdlib/svdwrapper.c (+4/-8) test/tensor_util.py (+2/-0) test/test_blend.py (+3/-0) test/test_means.py (+46/-0) test/test_normalization.py (+45/-0) test/test_offset_svd.py (+77/-0) test/test_svd.py (+100/-0) test/tests.py (+8/-117) |
To merge this branch: | bzr merge lp:~kenneth-arnold/divisi/svdlibc-cleanup |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Commonsense Computing | Pending | ||
Review via email: mp+14316@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Ken Arnold (kenneth-arnold) wrote : | # |
- 432. By Ken Arnold
-
exceptions: move InvalidLayering
Exception to csc.divisi. exceptions. - 433. By Ken Arnold
-
tests: split out the basic normalization tests.
- 434. By Ken Arnold
-
Normalization: normalizing an already-normalized tensor is probably a mistake, so fail early.
- 435. By Ken Arnold
-
Normalization: revise the error message from the last commit.
- 436. By Ken Arnold <kcarnold@kagu>
-
svd results: u_angles_to uses .norm. (Does anyone actually use this? There are no tests for it. otoh, no tests for u_dotproducts_
with.) - 437. By Ken Arnold <kcarnold@kagu>
-
NormalizedView: it's okay to layer a MeanSubtractedview on a NormalizedView. This is really hacky code, though...
- 438. By Ken Arnold <kcarnold@kagu>
-
View: add and use stack_contains.
- 439. By Ken Arnold <kcarnold@kagu>
-
Blend: complain if we try to Blend a MeanSubtractedView.
- 440. By Ken Arnold <kcarnold@kagu>
-
LabeledSVD2DRes
ults: fix types of lesser-used elements, and make Pickle work at decent speed.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'csc/divisi/blend.py' |
2 | --- csc/divisi/blend.py 2009-10-19 22:04:39 +0000 |
3 | +++ csc/divisi/blend.py 2009-11-17 23:59:08 +0000 |
4 | @@ -1,6 +1,7 @@ |
5 | from csc.divisi.tensor import DictTensor, Tensor |
6 | from csc.divisi.ordered_set import OrderedSet |
7 | from csc.divisi.labeled_view import LabeledView |
8 | +from csc.divisi.normalized_view import MeanSubtractedView |
9 | from itertools import chain, izip |
10 | import logging |
11 | from math import sqrt |
12 | @@ -104,6 +105,11 @@ |
13 | names, tensors = zip(*tensors) |
14 | else: |
15 | names = map(repr, tensors) |
16 | + |
17 | + for tensor in tensors: |
18 | + if tensor.stack_contains(MeanSubtractedView): |
19 | + raise TypeError("You can't blend MeanSubtractedViews. Try mean-subtracting the resulting blend.") |
20 | + |
21 | self._tensors = tuple(tensors) |
22 | self.names = tuple(names) |
23 | self.logger.info('tensors: %s', ', '.join(self.names)) |
24 | |
25 | === modified file 'csc/divisi/exceptions.py' |
26 | --- csc/divisi/exceptions.py 2009-02-26 22:07:47 +0000 |
27 | +++ csc/divisi/exceptions.py 2009-11-17 23:59:08 +0000 |
28 | @@ -3,3 +3,6 @@ |
29 | |
30 | class DimensionMismatch(Error): |
31 | pass |
32 | + |
33 | +class InvalidLayeringException(Error): |
34 | + pass |
35 | |
36 | === modified file 'csc/divisi/labeled_view.py' |
37 | --- csc/divisi/labeled_view.py 2009-09-24 01:15:17 +0000 |
38 | +++ csc/divisi/labeled_view.py 2009-11-17 23:59:08 +0000 |
39 | @@ -1,5 +1,5 @@ |
40 | from csc.divisi.ordered_set import OrderedSet, IdentitySet, indexable_set |
41 | -from csc.divisi.tensor import View, TheEmptySlice |
42 | +from csc.divisi.tensor import View, TheEmptySlice, DictTensor, DenseTensor |
43 | import copy |
44 | import heapq |
45 | from operator import itemgetter |
46 | @@ -31,7 +31,6 @@ |
47 | 'tfidf.T': use tf-idf, transposed (matrix is documents by terms) |
48 | a class: adds that class as a layer. |
49 | ''' |
50 | - from csc.divisi.tensor import DictTensor |
51 | if labels is None: labels = [OrderedSet() for _ in xrange(ndim)] |
52 | tensor = LabeledView(DictTensor(ndim), labels) |
53 | if initial is not None: |
54 | @@ -46,7 +45,6 @@ |
55 | |
56 | |
57 | def make_dense_labeled_tensor(data, labels): |
58 | - from csc.divisi.tensor import DenseTensor |
59 | return LabeledView(DenseTensor(data), labels) |
60 | |
61 | |
62 | @@ -289,10 +287,16 @@ |
63 | return self.layer_on(-self.tensor) |
64 | |
65 | def to_dense(self): |
66 | + '''Change the underlying representation to a dense tensor.''' |
67 | return self.layer_on(self.tensor.to_dense()) |
68 | - |
69 | + |
70 | def to_sparse(self): |
71 | + '''Change the underlying representation to a sparse tensor.''' |
72 | return self.layer_on(self.tensor.to_sparse()) |
73 | + |
74 | + def bake(self): |
75 | + '''Simplify the representation to a LabeledView of a DictTensor.''' |
76 | + return make_sparse_labeled_tensor(ndim=self.ndim, initial=self.iteritems()) |
77 | |
78 | def dot(self, other): |
79 | """ |
80 | @@ -361,20 +365,12 @@ |
81 | def layer_on(self, tensor): |
82 | return LabeledView(tensor, self._labels) |
83 | |
84 | - def zero_mean_normalized(self, mode=0, prefix='-'): |
85 | - # This is a special case, since we must duplicate labels |
86 | - new_tensor = self.tensor.zero_mean_normalized(mode=mode) |
87 | - |
88 | - new_labels = copy.deepcopy(self._labels) |
89 | - # Duplicate labels, preserving the property that |
90 | - # index(label)[mode] = index(prefix label)[mode] - self.tensor.shape[mode] |
91 | - for i in xrange(self.tensor.shape[mode]): |
92 | - l = self.label(mode, i) |
93 | - new_labels[mode].add(prefix + l) |
94 | - |
95 | - return LabeledView(new_tensor, new_labels) |
96 | - |
97 | - |
98 | + def unnormalized(self): |
99 | + ''' |
100 | + Remove the topmost layer of normalization from this tensor stack. |
101 | + ''' |
102 | + return self.layer_on(self.tensor.unnormalized()) |
103 | + |
104 | def array_op(self, op, labels=None, *args, **kwargs): |
105 | """ |
106 | Apply an operation to the tensor inside (which must be a |
107 | @@ -397,7 +393,7 @@ |
108 | labels = self.label_list(0) |
109 | return dict((labels[i], float(self.tensor[i])) for i in xrange(self.shape[0])) |
110 | |
111 | - def top_items(self, n=10, largest=True, key=None, abs_val=None): |
112 | + def top_items(self, n=10, largest=True, key=None): |
113 | ''' |
114 | For each of the top n items with greatest values, return a pair of |
115 | the item and its value. |
116 | @@ -410,12 +406,6 @@ |
117 | If the tensor is 1D, gives indices instead of one-item tuples. |
118 | Always expresses the output in floats directly. |
119 | ''' |
120 | - if abs_val is not None: |
121 | - import warnings |
122 | - warnings.warn(DeprecationWarning('abs_val is deprecated. use key=abs.')) |
123 | - assert key is None |
124 | - key = abs |
125 | - |
126 | if key is not None: |
127 | extreme_key = lambda ent: key(ent[1]) |
128 | else: |
129 | @@ -429,17 +419,6 @@ |
130 | else: |
131 | return [(k, float(v)) for k, v in items] |
132 | |
133 | - def bake(self): |
134 | - ''' |
135 | - Simplify the representation. |
136 | - ''' |
137 | - return make_sparse_labeled_tensor(ndim=self.ndim, initial=self.iteritems()) |
138 | - |
139 | - def to_dense(self): |
140 | - '''Change the underlying representation to a dense tensor.''' |
141 | - return LabeledView(self.tensor.to_dense(), self._labels) |
142 | - |
143 | - |
144 | def concatenate(self, other): |
145 | concat_dense = self.tensor.concatenate(other.tensor) |
146 | newlabels = OrderedSet(list(self.label_list(0)) + |
147 | @@ -466,6 +445,14 @@ |
148 | [LabeledView(mag, [labels]) for mag, labels |
149 | in izip(magnitudes, self.label_sets())]) |
150 | |
151 | + def means(self): |
152 | + ''' |
153 | + Computes the labeled by-slice means for each dimension. |
154 | + ''' |
155 | + means = self.tensor.means() |
156 | + return [make_dense_labeled_tensor(means, [labels]) |
157 | + for means, labels in zip(means, self.label_lists())] |
158 | + |
159 | |
160 | from csc.divisi.svd import SVD2DResults |
161 | class LabeledSVD2DResults(SVD2DResults): |
162 | @@ -509,7 +496,6 @@ |
163 | @classmethod |
164 | def load_pytables(cls, filename, copy=False): |
165 | import numpy as np |
166 | - from csc.divisi.tensor import DenseTensor |
167 | from csc.divisi.pyt_utils import get_pyt_handle |
168 | fileh = get_pyt_handle(filename) |
169 | |
170 | @@ -522,9 +508,23 @@ |
171 | return wrapped_tensor(name).labeled(list(getattr(root, label_name))) |
172 | u = wrapped_labeled_tensor('u', 'u_labels') |
173 | v = wrapped_labeled_tensor('v', 'v_labels') |
174 | - svals = root.svals.read() |
175 | + svals = wrapped_tensor('svals') |
176 | svd = cls(u, v, svals) |
177 | svd._weighted_u = wrapped_tensor('weighted_u').labeled(u.label_lists()) |
178 | svd._weighted_v = wrapped_tensor('weighted_v').labeled(v.label_lists()) |
179 | - svd._core = DenseTensor(root.core) |
180 | + svd._core = wrapped_tensor('core') |
181 | return svd |
182 | + |
183 | + # Pickle also works for loading and saving. |
184 | + def __getstate__(self): |
185 | + return dict( |
186 | + u=self.u, |
187 | + v=self.v, |
188 | + svals=self.svals) |
189 | + def __setstate__(self, state): |
190 | + self.u = state['u'] |
191 | + self.v = state['v'] |
192 | + self.svals = state['svals'] |
193 | + self.clear_cache() |
194 | + |
195 | + |
196 | |
197 | === modified file 'csc/divisi/normalized_view.py' |
198 | --- csc/divisi/normalized_view.py 2009-10-22 18:49:23 +0000 |
199 | +++ csc/divisi/normalized_view.py 2009-11-17 23:59:08 +0000 |
200 | @@ -1,4 +1,5 @@ |
201 | -from csc.divisi.tensor import View, InvalidLayeringException |
202 | +from csc.divisi.tensor import View |
203 | +from csc.divisi.exceptions import InvalidLayeringException |
204 | |
205 | EPSILON = 0.000000001 # for floating point comparisons |
206 | |
207 | @@ -15,7 +16,10 @@ |
208 | input_is_numeric = True |
209 | output_is_numeric = True |
210 | |
211 | - def __init__(self, tensor, mode=0): |
212 | + # Default to normalizing on mode 0. |
213 | + default_modes = 0 |
214 | + |
215 | + def __init__(self, tensor, mode=None): |
216 | ''' |
217 | * tensor: tensor to view. |
218 | * mode: which mode to normalize over (0 = rows, 1 = columns, etc.) |
219 | @@ -23,6 +27,10 @@ |
220 | if len(tensor) == 0: |
221 | raise ValueError('Tensor ' + repr(tensor) + ' is empty.') |
222 | |
223 | + # If this isn't a MeanSubtractedView, the underlying tensor can't be a normalized view. |
224 | + if not isinstance(self, MeanSubtractedView) and tensor.stack_contains(BaseNormalizedView): |
225 | + raise TypeError('Already normalized; .unnormalized() first.') |
226 | + |
227 | # The underlying tensor must be numeric. |
228 | for part in tensor.example_key(): |
229 | if not isinstance(part, (int, long)): |
230 | @@ -43,12 +51,16 @@ |
231 | raise TypeError('Normalized views are read-only.') |
232 | |
233 | @property |
234 | - def normalize_mode(self): |
235 | + def normalize_modes(self): |
236 | """ |
237 | - Which mode of the tensor is normalized (0 for rows, 1 for columns, |
238 | + Which modes of the tensor is normalized (0 for rows, 1 for columns, |
239 | etc.) |
240 | """ |
241 | - return self._normalize_mode |
242 | + modes = self._normalize_mode |
243 | + if modes is None: modes = self.default_modes |
244 | + if not isinstance(modes, (list, tuple)): |
245 | + modes = [modes] |
246 | + return modes |
247 | |
248 | @property |
249 | def norms(self): |
250 | @@ -56,11 +68,18 @@ |
251 | A list of the normalization factors that were computed for each |
252 | row/column/whatever. |
253 | """ |
254 | + # FIXME: this method should be in a subclass only. |
255 | return self._norms |
256 | |
257 | def item_changed(self, indices, oldvalue, newvalue): |
258 | + # FIXME: nobody ever even complained that this doesn't |
259 | + # work. Maybe change notification just isn't worth it, and |
260 | + # normalized views are just immutable. |
261 | self.update_norm(indices, oldvalue, newvalue) |
262 | |
263 | + def update_norm(self, indices, prev, current): |
264 | + raise NotImplementedError |
265 | + |
266 | def refresh_norms(): |
267 | """ |
268 | Compute all of the normalization factors from scratch. |
269 | @@ -104,16 +123,9 @@ |
270 | You can also supply a list of modes to normalize over. |
271 | ''' |
272 | |
273 | - @property |
274 | - def modes(self): |
275 | - modes = self._normalize_mode |
276 | - if not isinstance(modes, (list, tuple)): |
277 | - modes = [modes] |
278 | - return modes |
279 | - |
280 | def refresh_norms(self): |
281 | tensor = self.tensor |
282 | - modes = self.modes |
283 | + modes = self.normalize_modes |
284 | norms = [zeros((tensor.shape[mode],)) for mode in modes] |
285 | for key, value in self.tensor.iteritems(): |
286 | for mode in modes: |
287 | @@ -124,7 +136,7 @@ |
288 | self._norms = norms |
289 | |
290 | def update_norm(self, indices, prev, current): |
291 | - modes = self.modes |
292 | + modes = self.normalize_modes |
293 | # Handle growing the norms array. |
294 | for i_mode, mode in enumerate(modes): |
295 | index = indices[mode] |
296 | @@ -133,9 +145,10 @@ |
297 | self._norms[i_mode][index] += (current*current - prev*prev) |
298 | |
299 | def __getitem__(self, indices): |
300 | + # FIXME: this doesn't work well for slices. |
301 | if not isinstance(indices, (list, tuple)): |
302 | indices = (indices,) |
303 | - modes = self.modes |
304 | + modes = self.normalize_modes |
305 | norm = self.base ** 2 + sum(self._norms[i_mode][indices[mode]] |
306 | for i_mode, mode in enumerate(modes)) |
307 | data = self.tensor[indices] |
308 | @@ -143,8 +156,7 @@ |
309 | return data / sqrt(norm) |
310 | |
311 | def iteritems(self): |
312 | - modes = self._normalize_mode |
313 | - if not isinstance(modes, (list, tuple)): modes = [modes] |
314 | + modes = self.normalize_modes |
315 | base_squared = self.base ** 2 |
316 | for indices, value in self.tensor.iteritems(): |
317 | norm = base_squared + sum(self._norms[i_mode][indices[mode]] |
318 | @@ -152,9 +164,6 @@ |
319 | yield indices, value / sqrt(norm) |
320 | |
321 | ### Extraction and views |
322 | - def normalized(self, mode=0): |
323 | - return NormalizedView(self.tensor, mode) |
324 | - |
325 | def unnormalized(self): |
326 | return self.tensor |
327 | |
328 | @@ -163,19 +172,54 @@ |
329 | return NormalizedView(self.tensor, self.modes) |
330 | |
331 | def _svd(self, **kw): |
332 | - if self.normalize_mode == 0: |
333 | + if list(self.normalize_modes) == [0]: |
334 | return self.tensor._svd(row_factors=self.norms[0], **kw) |
335 | return super(NormalizedView, self)._svd(**kw) |
336 | |
337 | def _isvd(self, **kw): |
338 | - if self.normalize_mode == 0: |
339 | + if list(self.normalize_modes) == [0]: |
340 | return self.tensor._isvd(row_factors=self.norms[0], **kw) |
341 | return super(NormalizedView, self)._isvd(**kw) |
342 | |
343 | # All other operations fall back to the tensor. |
344 | |
345 | |
346 | -class AvgNormalizedView(BaseNormalizedView): |
347 | +class MeanSubtractedView(BaseNormalizedView): |
348 | + '''Subtracts out the mean of each row and/or column. |
349 | + |
350 | + Uses offset parameters to the SVD to compute this efficiently. |
351 | + ''' |
352 | + default_modes = 0 |
353 | + def refresh_norms(self): |
354 | + self.means = self.tensor.means() |
355 | + |
356 | + def __getitem__(self, indices): |
357 | + # FIXME: slices. |
358 | + data = self.tensor[indices] |
359 | + for mode in self.normalize_modes: |
360 | + # not in-place, in case of slicing. |
361 | + data = data - self.means[mode][indices[mode]] |
362 | + return data |
363 | + |
364 | + # FIXME: iteritems is incorrect if the tensor is not dense, since |
365 | + # unspecified items will probably be non-zero. |
366 | + |
367 | + def _svd(self, **kw): |
368 | + modes = self.normalize_modes |
369 | + if not all(0 <= m <= 1 for m in modes): |
370 | + raise NotImplementedError |
371 | + if 0 in modes: |
372 | + kw['offset_for_row'] = -self.means[0] |
373 | + if 1 in modes: |
374 | + kw['offset_for_col'] = -self.means[1] |
375 | + print kw |
376 | + return self.tensor._svd(**kw) |
377 | + |
378 | + def _isvd(self, **kw): |
379 | + raise NotImplementedError |
380 | + |
381 | + |
382 | +class OldAvgNormalizedView(BaseNormalizedView): |
383 | '''A NormalizedView that makes the average to be zero, instead of using a Euclidean norm.''' |
384 | def refresh_norms(self): |
385 | tensor = self.tensor |
386 | @@ -190,9 +234,6 @@ |
387 | norms[modes.index(mode)][key[mode]][1] += 1 |
388 | self._norms = norms |
389 | |
390 | - def update_norm(self, indices, prev, current): |
391 | - raise NotImplementedError |
392 | - |
393 | def __getitem__(self, indices): |
394 | mode = self._normalize_mode |
395 | if not isinstance(mode, list): modes = [mode] |
396 | @@ -222,7 +263,7 @@ |
397 | ''' |
398 | self.transposed = transposed # before the super call because |
399 | # super calls refresh_norms. |
400 | - super(TfIdfView, self).__init__(tensor, 0) # We only support mode 0. |
401 | + super(TfIdfView, self).__init__(tensor) # Modes don't really make sense. |
402 | |
403 | def __repr__(self): |
404 | return 'TfIdfView(%r, transposed=%r)' % (self.tensor, self.transposed) |
405 | @@ -244,9 +285,6 @@ |
406 | counts_for_document[document] += value |
407 | num_docs_that_contain_term[term] += 1 |
408 | |
409 | - def update_norm(self, indices, prev, current): |
410 | - raise NotImplementedError |
411 | - |
412 | def tf(self, term, document): |
413 | if self.transposed: |
414 | term_count = self.tensor[document, term] |
415 | |
416 | === modified file 'csc/divisi/svd.py' |
417 | --- csc/divisi/svd.py 2009-10-29 03:17:08 +0000 |
418 | +++ csc/divisi/svd.py 2009-11-17 23:59:09 +0000 |
419 | @@ -172,10 +172,10 @@ |
420 | ''' |
421 | u = self.weighted_u |
422 | angles = self.u_dotproducts_with(vec) |
423 | - vec_magnitude = sqrt(vec*vec) |
424 | + vec_magnitude = vec.norm() |
425 | # Normalize distances to get the cos(angles) |
426 | for key, value in angles.iteritems(): |
427 | - u_vector_magnitude = sqrt(u[key[0], :]*u[key[0], :]) |
428 | + u_vector_magnitude = self.weighted_u_vec(key[0]).norm() |
429 | angles[key] = float(value)/(u_vector_magnitude*vec_magnitude) |
430 | |
431 | return angles |
432 | |
433 | === modified file 'csc/divisi/tensor.py' |
434 | --- csc/divisi/tensor.py 2009-09-29 15:49:05 +0000 |
435 | +++ csc/divisi/tensor.py 2009-11-17 23:59:09 +0000 |
436 | @@ -15,7 +15,7 @@ |
437 | import numpy, sys |
438 | from csc.divisi.dict_mixin import MyDictMixin |
439 | import copy, random, math |
440 | -from csc.divisi.exceptions import DimensionMismatch |
441 | +from csc.divisi.exceptions import DimensionMismatch, InvalidLayeringException |
442 | from csc.divisi._svdlib import svd, dictSvd, isvd, dictIsvd |
443 | from warnings import warn |
444 | import logging |
445 | @@ -179,6 +179,20 @@ |
446 | """ |
447 | return cls(self, *a, **kw) |
448 | |
449 | + def stack_contains(self, cls): |
450 | + ''' |
451 | + Check if the tensor stack below here includes an instance of ``cls``. |
452 | + |
453 | + You may pass a tuple of classes as well, which will check if |
454 | + the stack contains _any_ of those classes. |
455 | + ''' |
456 | + if isinstance(self, cls): |
457 | + return True |
458 | + if hasattr(self, 'tensor'): |
459 | + return self.tensor.stack_contains(cls) |
460 | + else: |
461 | + return False |
462 | + |
463 | def unfolded(self, mode): |
464 | """ |
465 | Get an :class:`UnfoldedView <divisi.unfolded_view.UnfoldedView>` of |
466 | @@ -228,9 +242,9 @@ |
467 | raise TypeError('Unknown normalization parameter %r' % mode) |
468 | |
469 | |
470 | - def zero_mean_normalized(self, mode=0): |
471 | - from csc.divisi.normalized_view import ZeroMeanView |
472 | - return self.add_layer(ZeroMeanView, mode) |
473 | + def mean_subtracted(self, mode=0): |
474 | + from csc.divisi.normalized_view import MeanSubtractedView |
475 | + return self.add_layer(MeanSubtractedView, mode) |
476 | |
477 | # Math |
478 | def __add__(self, other): |
479 | @@ -559,6 +573,27 @@ |
480 | else: |
481 | return res |
482 | |
483 | + def means(self): |
484 | + ''' |
485 | + Computes the by-slice means for each dimension. |
486 | + |
487 | + Returns numpy arrays, not DenseTensors. |
488 | + ''' |
489 | + import numpy as np |
490 | + accumulator_for_mode = [numpy.zeros(n) for n in self.shape] |
491 | + for k, v in self.iteritems(): |
492 | + for accumulator, key in izip(accumulator_for_mode, k): |
493 | + accumulator[key] += v |
494 | + |
495 | + # Divide by the number of items that could have gone into each |
496 | + # accumulator slot. |
497 | + total_possible_items = np.product(self.shape) |
498 | + for mode, accumulator in enumerate(accumulator_for_mode): |
499 | + possible_items = total_possible_items / self.shape[mode] |
500 | + accumulator /= possible_items |
501 | + return accumulator_for_mode |
502 | + |
503 | + |
504 | def label_histograms(self): |
505 | ''' |
506 | Counts the number and magnitude of items in each row / column |
507 | @@ -577,9 +612,6 @@ |
508 | map(DenseTensor, magnitudes)) |
509 | |
510 | |
511 | -class InvalidLayeringException(StandardError): |
512 | - pass |
513 | - |
514 | forward_to_tensor = set([ |
515 | 'shape', 'ndim', 'has_key', 'default_value', 'density']) |
516 | |
517 | |
518 | === modified file 'svdlib/_svdlib.c' |
519 | --- svdlib/_svdlib.c 2009-08-05 22:25:54 +0000 |
520 | +++ svdlib/_svdlib.c 2009-11-17 23:59:09 +0000 |
521 | @@ -1,11 +1,11 @@ |
522 | -/* Generated by Cython 0.11.2 on Wed Aug 5 18:22:59 2009 */ |
523 | +/* Generated by Cython 0.11.3 on Thu Oct 29 00:14:04 2009 */ |
524 | |
525 | #define PY_SSIZE_T_CLEAN |
526 | #include "Python.h" |
527 | #include "structmember.h" |
528 | #ifndef Py_PYTHON_H |
529 | #error Python headers needed to compile C extensions, please install development version of Python. |
530 | -#endif |
531 | +#else |
532 | #ifndef PY_LONG_LONG |
533 | #define PY_LONG_LONG LONG_LONG |
534 | #endif |
535 | @@ -133,10 +133,12 @@ |
536 | #include <math.h> |
537 | #define __PYX_HAVE_API__svdlib___svdlib |
538 | #include "stdlib.h" |
539 | +#include "stdio.h" |
540 | #include "numpy/arrayobject.h" |
541 | #include "svdlib.h" |
542 | #include "svdwrapper.h" |
543 | #include "math.h" |
544 | +#include "svdutil.h" |
545 | #define __PYX_USE_C99_COMPLEX defined(_Complex_I) |
546 | |
547 | |
548 | @@ -167,6 +169,9 @@ |
549 | #define __Pyx_PyBytes_AsString PyBytes_AsString |
550 | #endif |
551 | |
552 | +#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) |
553 | +#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) __Pyx_PyBytes_AsString(s)) |
554 | + |
555 | #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) |
556 | static INLINE int __Pyx_PyObject_IsTrue(PyObject*); |
557 | static INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); |
558 | @@ -186,6 +191,40 @@ |
559 | #endif |
560 | #endif |
561 | |
562 | + |
563 | +#if !defined(T_ULONGLONG) |
564 | +#define __Pyx_T_UNSIGNED_INT(x) \ |
565 | + ((sizeof(x) == sizeof(unsigned char)) ? T_UBYTE : \ |
566 | + ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \ |
567 | + ((sizeof(x) == sizeof(unsigned int)) ? T_UINT : \ |
568 | + ((sizeof(x) == sizeof(unsigned long)) ? T_ULONG : -1)))) |
569 | +#else |
570 | +#define __Pyx_T_UNSIGNED_INT(x) \ |
571 | + ((sizeof(x) == sizeof(unsigned char)) ? T_UBYTE : \ |
572 | + ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \ |
573 | + ((sizeof(x) == sizeof(unsigned int)) ? T_UINT : \ |
574 | + ((sizeof(x) == sizeof(unsigned long)) ? T_ULONG : \ |
575 | + ((sizeof(x) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1))))) |
576 | +#endif |
577 | +#if !defined(T_LONGLONG) |
578 | +#define __Pyx_T_SIGNED_INT(x) \ |
579 | + ((sizeof(x) == sizeof(char)) ? T_BYTE : \ |
580 | + ((sizeof(x) == sizeof(short)) ? T_SHORT : \ |
581 | + ((sizeof(x) == sizeof(int)) ? T_INT : \ |
582 | + ((sizeof(x) == sizeof(long)) ? T_LONG : -1)))) |
583 | +#else |
584 | +#define __Pyx_T_SIGNED_INT(x) \ |
585 | + ((sizeof(x) == sizeof(char)) ? T_BYTE : \ |
586 | + ((sizeof(x) == sizeof(short)) ? T_SHORT : \ |
587 | + ((sizeof(x) == sizeof(int)) ? T_INT : \ |
588 | + ((sizeof(x) == sizeof(long)) ? T_LONG : \ |
589 | + ((sizeof(x) == sizeof(PY_LONG_LONG)) ? T_LONGLONG : -1))))) |
590 | +#endif |
591 | + |
592 | +#define __Pyx_T_FLOATING(x) \ |
593 | + ((sizeof(x) == sizeof(float)) ? T_FLOAT : \ |
594 | + ((sizeof(x) == sizeof(double)) ? T_DOUBLE : -1)) |
595 | + |
596 | #if !defined(T_SIZET) |
597 | #if !defined(T_ULONGLONG) |
598 | #define T_SIZET \ |
599 | @@ -223,6 +262,7 @@ |
600 | static PyObject *__pyx_m; |
601 | static PyObject *__pyx_b; |
602 | static PyObject *__pyx_empty_tuple; |
603 | +static PyObject *__pyx_empty_bytes; |
604 | static int __pyx_lineno; |
605 | static int __pyx_clineno = 0; |
606 | static const char * __pyx_cfilenm= __FILE__; |
607 | @@ -268,6 +308,64 @@ |
608 | |
609 | static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ |
610 | |
611 | +static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ |
612 | + |
613 | +/* Run-time type information about structs used with buffers */ |
614 | +struct __Pyx_StructField_; |
615 | + |
616 | +typedef struct { |
617 | + const char* name; /* for error messages only */ |
618 | + struct __Pyx_StructField_* fields; |
619 | + size_t size; /* sizeof(type) */ |
620 | + char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject */ |
621 | +} __Pyx_TypeInfo; |
622 | + |
623 | +typedef struct __Pyx_StructField_ { |
624 | + __Pyx_TypeInfo* type; |
625 | + const char* name; |
626 | + size_t offset; |
627 | +} __Pyx_StructField; |
628 | + |
629 | +typedef struct { |
630 | + __Pyx_StructField* field; |
631 | + size_t parent_offset; |
632 | +} __Pyx_BufFmt_StackElem; |
633 | + |
634 | + |
635 | +static INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); |
636 | +static int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); |
637 | + |
638 | +static void __Pyx_RaiseBufferFallbackError(void); /*proto*/ |
639 | +static void __Pyx_RaiseBufferIndexError(int axis); /*proto*/ |
640 | +#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0) |
641 | + |
642 | +#define __Pyx_SetItemInt(o, i, v, size, to_py_func) ((size <= sizeof(Py_ssize_t)) ? \ |
643 | + __Pyx_SetItemInt_Fast(o, i, v, size <= sizeof(long)) : \ |
644 | + __Pyx_SetItemInt_Generic(o, to_py_func(i), v)) |
645 | + |
646 | +static INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { |
647 | + int r; |
648 | + if (!j) return -1; |
649 | + r = PyObject_SetItem(o, j, v); |
650 | + Py_DECREF(j); |
651 | + return r; |
652 | +} |
653 | + |
654 | +static INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int fits_long) { |
655 | + if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) { |
656 | + Py_INCREF(v); |
657 | + Py_DECREF(PyList_GET_ITEM(o, i)); |
658 | + PyList_SET_ITEM(o, i, v); |
659 | + return 1; |
660 | + } |
661 | + else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_ass_item && (likely(i >= 0))) |
662 | + return PySequence_SetItem(o, i, v); |
663 | + else { |
664 | + PyObject *j = fits_long ? PyInt_FromLong(i) : PyLong_FromLongLong(i); |
665 | + return __Pyx_SetItemInt_Generic(o, j, v); |
666 | + } |
667 | +} |
668 | + |
669 | |
670 | static INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { |
671 | PyObject *r; |
672 | @@ -342,36 +440,17 @@ |
673 | return r; |
674 | } |
675 | |
676 | -static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ |
677 | - |
678 | -/* Run-time type information about structs used with buffers */ |
679 | -struct __Pyx_StructField_; |
680 | - |
681 | -typedef struct { |
682 | - const char* name; /* for error messages only */ |
683 | - struct __Pyx_StructField_* fields; |
684 | - size_t size; /* sizeof(type) */ |
685 | - char typegroup; /* _R_eal, _C_omplex, Signed _I_nt, _U_nsigned int, _S_truct, _P_ointer, _O_bject */ |
686 | -} __Pyx_TypeInfo; |
687 | - |
688 | -typedef struct __Pyx_StructField_ { |
689 | - __Pyx_TypeInfo* type; |
690 | - const char* name; |
691 | - size_t offset; |
692 | -} __Pyx_StructField; |
693 | - |
694 | -typedef struct { |
695 | - __Pyx_StructField* field; |
696 | - size_t parent_offset; |
697 | -} __Pyx_BufFmt_StackElem; |
698 | - |
699 | - |
700 | -static INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); |
701 | -static int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); |
702 | -#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) |
703 | - |
704 | static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ |
705 | static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ |
706 | +#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) |
707 | + |
708 | +static INLINE void __Pyx_RaiseNoneNotIterableError(void); |
709 | + |
710 | +static INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); |
711 | + |
712 | +static INLINE void __Pyx_RaiseTooManyValuesError(void); |
713 | + |
714 | +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/ |
715 | #if PY_MAJOR_VERSION < 3 |
716 | static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); |
717 | static void __Pyx_ReleaseBuffer(Py_buffer *view); |
718 | @@ -389,10 +468,6 @@ |
719 | |
720 | static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ |
721 | |
722 | -static INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); |
723 | - |
724 | -static INLINE void __Pyx_RaiseTooManyValuesError(void); |
725 | - |
726 | static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/ |
727 | static int __Pyx_EndUnpack(PyObject *); /*proto*/ |
728 | |
729 | @@ -618,8 +693,6 @@ |
730 | |
731 | #endif |
732 | |
733 | -static INLINE int __Pyx_StrEq(const char *, const char *); /*proto*/ |
734 | - |
735 | static INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); |
736 | |
737 | static INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); |
738 | @@ -684,9 +757,9 @@ |
739 | |
740 | typedef npy_float64 __pyx_t_5numpy_float64_t; |
741 | |
742 | -typedef npy_complex64 __pyx_t_5numpy_complex64_t; |
743 | +typedef __pyx_t_float_complex __pyx_t_5numpy_complex64_t; |
744 | |
745 | -typedef npy_complex128 __pyx_t_5numpy_complex128_t; |
746 | +typedef __pyx_t_double_complex __pyx_t_5numpy_complex128_t; |
747 | |
748 | typedef npy_long __pyx_t_5numpy_int_t; |
749 | |
750 | @@ -710,35 +783,62 @@ |
751 | |
752 | typedef npy_cdouble __pyx_t_5numpy_complex_t; |
753 | |
754 | -typedef __pyx_t_5numpy_float_t __pyx_t_6svdlib_7_svdlib_DTYPE_t; |
755 | - |
756 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":130 |
757 | - * ###### Python functions ###### |
758 | +typedef __pyx_t_5numpy_float64_t __pyx_t_6svdlib_7_svdlib_DTYPE_t; |
759 | + |
760 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":96 |
761 | + * self.offset_for_col = offset_for_col |
762 | + * |
763 | + * cpdef pack(self, row_norms=None): # <<<<<<<<<<<<<< |
764 | + * cdef np.ndarray[DTYPE_t, ndim=1] row_factors # holds row _multiplication_ factors, possibly just 1. |
765 | + * cdef long row, col, index, cols, col_len, rowk |
766 | + */ |
767 | + |
768 | +struct __pyx_opt_args_6svdlib_7_svdlib_9CSCMatrix_pack { |
769 | + int __pyx_n; |
770 | + PyObject *row_norms; |
771 | +}; |
772 | + |
773 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":132 |
774 | + * return temp |
775 | + * |
776 | + * cpdef dictPack(self, row_norms=None): # <<<<<<<<<<<<<< |
777 | + * cdef np.ndarray[DTYPE_t, ndim=1] row_factors # holds row _multiplication_ factors, possibly just 1. |
778 | + * if row_norms is None: |
779 | + */ |
780 | + |
781 | +struct __pyx_opt_args_6svdlib_7_svdlib_9CSCMatrix_dictPack { |
782 | + int __pyx_n; |
783 | + PyObject *row_norms; |
784 | +}; |
785 | + |
786 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":74 |
787 | + * |
788 | * |
789 | * cdef class CSCMatrix: # <<<<<<<<<<<<<< |
790 | - * __slots__ = ['cmatrix'] |
791 | * cdef object tensor #holds our Python tensor |
792 | + * cdef object offset_for_row, offset_for_col |
793 | */ |
794 | |
795 | struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix { |
796 | PyObject_HEAD |
797 | struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *__pyx_vtab; |
798 | PyObject *tensor; |
799 | - PyObject *row_factors; |
800 | + PyObject *offset_for_row; |
801 | + PyObject *offset_for_col; |
802 | struct smat *cmatrix; |
803 | - struct svdrec *svdrec; |
804 | int transposed; |
805 | - int rows; |
806 | - int cols; |
807 | - int nonZero; |
808 | + long rows; |
809 | + long cols; |
810 | + long nonZero; |
811 | }; |
812 | |
813 | |
814 | struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix { |
815 | - PyObject *(*pack)(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *, int __pyx_skip_dispatch); |
816 | - PyObject *(*dictPack)(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *, int __pyx_skip_dispatch); |
817 | + PyObject *(*pack)(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *, int __pyx_skip_dispatch, struct __pyx_opt_args_6svdlib_7_svdlib_9CSCMatrix_pack *__pyx_optional_args); |
818 | + double *(*toVector)(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *, PyObject *); |
819 | + PyObject *(*dictPack)(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *, int __pyx_skip_dispatch, struct __pyx_opt_args_6svdlib_7_svdlib_9CSCMatrix_dictPack *__pyx_optional_args); |
820 | void (*setColumnSize)(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *, int, int); |
821 | - void (*setValue)(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *, int, int, float); |
822 | + void (*setValue)(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *, int, int, double); |
823 | PyObject *(*svdA)(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *, int, int __pyx_skip_dispatch); |
824 | }; |
825 | static struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *__pyx_vtabptr_6svdlib_7_svdlib_CSCMatrix; |
826 | @@ -748,11 +848,15 @@ |
827 | |
828 | /* Module declarations from stdlib */ |
829 | |
830 | +/* Module declarations from stdio */ |
831 | + |
832 | /* Module declarations from numpy */ |
833 | |
834 | /* Module declarations from numpy */ |
835 | |
836 | static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; |
837 | +static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; |
838 | +static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; |
839 | static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; |
840 | static INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ |
841 | /* Module declarations from svdlib._svdlib */ |
842 | @@ -768,12 +872,8 @@ |
843 | static PyObject *__pyx_int_50; |
844 | static PyObject *__pyx_int_100; |
845 | static PyObject *__pyx_int_2; |
846 | -static PyObject *__pyx_int_0; |
847 | -static PyObject *__pyx_int_1; |
848 | static char __pyx_k___main__[] = "__main__"; |
849 | static PyObject *__pyx_kp___main__; |
850 | -static char __pyx_k___slots__[] = "__slots__"; |
851 | -static PyObject *__pyx_kp___slots__; |
852 | static char __pyx_k___init__[] = "__init__"; |
853 | static PyObject *__pyx_kp___init__; |
854 | static char __pyx_k_pack[] = "pack"; |
855 | @@ -790,8 +890,12 @@ |
856 | static PyObject *__pyx_kp_isvd; |
857 | static char __pyx_k_pyTensor[] = "pyTensor"; |
858 | static PyObject *__pyx_kp_pyTensor; |
859 | -static char __pyx_k_row_factors[] = "row_factors"; |
860 | -static PyObject *__pyx_kp_row_factors; |
861 | +static char __pyx_k_offset_for_row[] = "offset_for_row"; |
862 | +static PyObject *__pyx_kp_offset_for_row; |
863 | +static char __pyx_k_offset_for_col[] = "offset_for_col"; |
864 | +static PyObject *__pyx_kp_offset_for_col; |
865 | +static char __pyx_k_row_norms[] = "row_norms"; |
866 | +static PyObject *__pyx_kp_row_norms; |
867 | static char __pyx_k_k[] = "k"; |
868 | static PyObject *__pyx_kp_k; |
869 | static char __pyx_k_niter[] = "niter"; |
870 | @@ -800,24 +904,34 @@ |
871 | static PyObject *__pyx_kp_lrate; |
872 | static char __pyx_k_tensor[] = "tensor"; |
873 | static PyObject *__pyx_kp_tensor; |
874 | +static char __pyx_k_row_factors[] = "row_factors"; |
875 | +static PyObject *__pyx_kp_row_factors; |
876 | static char __pyx_k_warnings[] = "warnings"; |
877 | static PyObject *__pyx_kp_warnings; |
878 | static char __pyx_k_numpy[] = "numpy"; |
879 | static PyObject *__pyx_kp_numpy; |
880 | static char __pyx_k_np[] = "np"; |
881 | static PyObject *__pyx_kp_np; |
882 | -static char __pyx_k_float[] = "float"; |
883 | -static PyObject *__pyx_kp_float; |
884 | +static char __pyx_k_31[] = "float64"; |
885 | +static PyObject *__pyx_kp_31; |
886 | static char __pyx_k_DTYPE[] = "DTYPE"; |
887 | static PyObject *__pyx_kp_DTYPE; |
888 | -static char __pyx_k_31[] = "cmatrix"; |
889 | -static PyObject *__pyx_kp_31; |
890 | static char __pyx_k_ndim[] = "ndim"; |
891 | static PyObject *__pyx_kp_ndim; |
892 | static char __pyx_k_ValueError[] = "ValueError"; |
893 | static PyObject *__pyx_kp_ValueError; |
894 | static char __pyx_k_shape[] = "shape"; |
895 | static PyObject *__pyx_kp_shape; |
896 | +static char __pyx_k_ones[] = "ones"; |
897 | +static PyObject *__pyx_kp_ones; |
898 | +static char __pyx_k_reciprocal[] = "reciprocal"; |
899 | +static PyObject *__pyx_kp_reciprocal; |
900 | +static char __pyx_k_sqrt[] = "sqrt"; |
901 | +static PyObject *__pyx_kp_sqrt; |
902 | +static char __pyx_k_array[] = "array"; |
903 | +static PyObject *__pyx_kp_array; |
904 | +static char __pyx_k_dtype[] = "dtype"; |
905 | +static PyObject *__pyx_kp_dtype; |
906 | static char __pyx_k_iteritems[] = "iteritems"; |
907 | static PyObject *__pyx_kp_iteritems; |
908 | static char __pyx_k_setdefault[] = "setdefault"; |
909 | @@ -830,24 +944,20 @@ |
910 | static PyObject *__pyx_kp_sorted; |
911 | static char __pyx_k_keys[] = "keys"; |
912 | static PyObject *__pyx_kp_keys; |
913 | +static char __pyx_k_range[] = "range"; |
914 | +static PyObject *__pyx_kp_range; |
915 | static char __pyx_k__data[] = "_data"; |
916 | static PyObject *__pyx_kp__data; |
917 | static char __pyx_k_warn[] = "warn"; |
918 | static PyObject *__pyx_kp_warn; |
919 | -static char __pyx_k_38[] = "csc.divisi.tensor"; |
920 | -static PyObject *__pyx_kp_38; |
921 | +static char __pyx_k_39[] = "csc.divisi.tensor"; |
922 | +static PyObject *__pyx_kp_39; |
923 | static char __pyx_k_DenseTensor[] = "DenseTensor"; |
924 | static PyObject *__pyx_kp_DenseTensor; |
925 | static char __pyx_k_add[] = "add"; |
926 | static PyObject *__pyx_kp_add; |
927 | static char __pyx_k_zeros[] = "zeros"; |
928 | static PyObject *__pyx_kp_zeros; |
929 | -static char __pyx_k_dtype[] = "dtype"; |
930 | -static PyObject *__pyx_kp_dtype; |
931 | -static char __pyx_k_range[] = "range"; |
932 | -static PyObject *__pyx_kp_range; |
933 | -static char __pyx_k_sqrt[] = "sqrt"; |
934 | -static PyObject *__pyx_kp_sqrt; |
935 | static char __pyx_k_reduce[] = "reduce"; |
936 | static PyObject *__pyx_kp_reduce; |
937 | static char __pyx_k_multiply[] = "multiply"; |
938 | @@ -860,18 +970,19 @@ |
939 | static PyObject *__pyx_builtin_range; |
940 | static PyObject *__pyx_kp_34; |
941 | static char __pyx_k_34[] = "You can only pack a 2 dimensional tensor"; |
942 | -static PyObject *__pyx_kp_35; |
943 | -static char __pyx_k_35[] = "<CSCMatrix>"; |
944 | +static char __pyx_k_35[] = "toVector"; |
945 | static PyObject *__pyx_kp_36; |
946 | -static char __pyx_k_36[] = "Column %d is empty"; |
947 | +static char __pyx_k_36[] = "<CSCMatrix>"; |
948 | static PyObject *__pyx_kp_37; |
949 | -static char __pyx_k_37[] = "Matrix has zero value (row %d, index %d)"; |
950 | -static PyObject *__pyx_kp_39; |
951 | +static char __pyx_k_37[] = "Column %d is empty"; |
952 | +static PyObject *__pyx_kp_38; |
953 | +static char __pyx_k_38[] = "Matrix has zero value (row %d, index %d)"; |
954 | static PyObject *__pyx_kp_40; |
955 | static PyObject *__pyx_kp_41; |
956 | -static char __pyx_k_39[] = "COMPUTING INCREMENTAL SVD"; |
957 | -static char __pyx_k_40[] = "ROWS: %d, COLUMNS: %d, VALS: %d"; |
958 | -static char __pyx_k_41[] = "K: %d, LEARNING_RATE: %r, ITERATIONS: %d"; |
959 | +static PyObject *__pyx_kp_42; |
960 | +static char __pyx_k_40[] = "COMPUTING INCREMENTAL SVD"; |
961 | +static char __pyx_k_41[] = "ROWS: %d, COLUMNS: %d, VALS: %d"; |
962 | +static char __pyx_k_42[] = "K: %d, LEARNING_RATE: %r, ITERATIONS: %d"; |
963 | static PyObject *__pyx_int_15; |
964 | static char __pyx_k___getbuffer__[] = "__getbuffer__"; |
965 | static PyObject *__pyx_kp___getbuffer__; |
966 | @@ -881,8 +992,6 @@ |
967 | static PyObject *__pyx_kp_info; |
968 | static char __pyx_k_flags[] = "flags"; |
969 | static PyObject *__pyx_kp_flags; |
970 | -static char __pyx_k_itervalues[] = "itervalues"; |
971 | -static PyObject *__pyx_kp_itervalues; |
972 | static char __pyx_k_RuntimeError[] = "RuntimeError"; |
973 | static PyObject *__pyx_kp_RuntimeError; |
974 | static PyObject *__pyx_kp_1; |
975 | @@ -925,34 +1034,37 @@ |
976 | static char __pyx_k_29[] = "Format string allocated too short."; |
977 | static char __pyx_k_30[] = "unknown dtype code in numpy.pxd (%d)"; |
978 | |
979 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":139 |
980 | - * cdef int rows, cols |
981 | - * cdef int nonZero #number of non zero entries in matrix |
982 | - * def __init__(self, pyTensor, row_factors=None): # <<<<<<<<<<<<<< |
983 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":81 |
984 | + * cdef long rows, cols |
985 | + * cdef long nonZero #number of non zero entries in matrix |
986 | + * def __init__(self, pyTensor, offset_for_row=None, offset_for_col=None): # <<<<<<<<<<<<<< |
987 | * #init function takes 1 or 2 arguments, the Python tensor, and an array representing |
988 | - * #the row _factors to divide by |
989 | + * #the row_factors to divide by |
990 | */ |
991 | |
992 | static int __pyx_pf_6svdlib_7_svdlib_9CSCMatrix___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ |
993 | static int __pyx_pf_6svdlib_7_svdlib_9CSCMatrix___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { |
994 | PyObject *__pyx_v_pyTensor = 0; |
995 | - PyObject *__pyx_v_row_factors = 0; |
996 | + PyObject *__pyx_v_offset_for_row = 0; |
997 | + PyObject *__pyx_v_offset_for_col = 0; |
998 | int __pyx_r; |
999 | PyObject *__pyx_1 = 0; |
1000 | PyObject *__pyx_2 = 0; |
1001 | PyObject *__pyx_t_1 = NULL; |
1002 | PyObject *__pyx_t_2 = NULL; |
1003 | int __pyx_t_3; |
1004 | - int __pyx_t_4; |
1005 | - int __pyx_t_5; |
1006 | + long __pyx_t_4; |
1007 | + long __pyx_t_5; |
1008 | Py_ssize_t __pyx_t_6; |
1009 | - static PyObject **__pyx_pyargnames[] = {&__pyx_kp_pyTensor,&__pyx_kp_row_factors,0}; |
1010 | + static PyObject **__pyx_pyargnames[] = {&__pyx_kp_pyTensor,&__pyx_kp_offset_for_row,&__pyx_kp_offset_for_col,0}; |
1011 | __Pyx_SetupRefcountContext("__init__"); |
1012 | if (unlikely(__pyx_kwds)) { |
1013 | Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); |
1014 | - PyObject* values[2] = {0,0}; |
1015 | + PyObject* values[3] = {0,0,0}; |
1016 | values[1] = Py_None; |
1017 | + values[2] = Py_None; |
1018 | switch (PyTuple_GET_SIZE(__pyx_args)) { |
1019 | + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); |
1020 | case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); |
1021 | case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); |
1022 | case 0: break; |
1023 | @@ -965,19 +1077,27 @@ |
1024 | else goto __pyx_L5_argtuple_error; |
1025 | case 1: |
1026 | if (kw_args > 1) { |
1027 | - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_row_factors); |
1028 | + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_offset_for_row); |
1029 | if (unlikely(value)) { values[1] = value; kw_args--; } |
1030 | } |
1031 | + case 2: |
1032 | + if (kw_args > 1) { |
1033 | + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_offset_for_col); |
1034 | + if (unlikely(value)) { values[2] = value; kw_args--; } |
1035 | + } |
1036 | } |
1037 | if (unlikely(kw_args > 0)) { |
1038 | - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
1039 | + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
1040 | } |
1041 | __pyx_v_pyTensor = values[0]; |
1042 | - __pyx_v_row_factors = values[1]; |
1043 | + __pyx_v_offset_for_row = values[1]; |
1044 | + __pyx_v_offset_for_col = values[2]; |
1045 | } else { |
1046 | - __pyx_v_row_factors = Py_None; |
1047 | + __pyx_v_offset_for_row = Py_None; |
1048 | + __pyx_v_offset_for_col = Py_None; |
1049 | switch (PyTuple_GET_SIZE(__pyx_args)) { |
1050 | - case 2: __pyx_v_row_factors = PyTuple_GET_ITEM(__pyx_args, 1); |
1051 | + case 3: __pyx_v_offset_for_col = PyTuple_GET_ITEM(__pyx_args, 2); |
1052 | + case 2: __pyx_v_offset_for_row = PyTuple_GET_ITEM(__pyx_args, 1); |
1053 | case 1: __pyx_v_pyTensor = PyTuple_GET_ITEM(__pyx_args, 0); |
1054 | break; |
1055 | default: goto __pyx_L5_argtuple_error; |
1056 | @@ -985,15 +1105,15 @@ |
1057 | } |
1058 | goto __pyx_L4_argument_unpacking_done; |
1059 | __pyx_L5_argtuple_error:; |
1060 | - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
1061 | + __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
1062 | __pyx_L3_error:; |
1063 | __Pyx_AddTraceback("svdlib._svdlib.CSCMatrix.__init__"); |
1064 | return -1; |
1065 | __pyx_L4_argument_unpacking_done:; |
1066 | |
1067 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":142 |
1068 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":84 |
1069 | * #init function takes 1 or 2 arguments, the Python tensor, and an array representing |
1070 | - * #the row _factors to divide by |
1071 | + * #the row_factors to divide by |
1072 | * self.tensor = pyTensor # <<<<<<<<<<<<<< |
1073 | * self.transposed = 0 |
1074 | * |
1075 | @@ -1004,8 +1124,8 @@ |
1076 | __Pyx_DECREF(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->tensor); |
1077 | ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->tensor = __pyx_v_pyTensor; |
1078 | |
1079 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":143 |
1080 | - * #the row _factors to divide by |
1081 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":85 |
1082 | + * #the row_factors to divide by |
1083 | * self.tensor = pyTensor |
1084 | * self.transposed = 0 # <<<<<<<<<<<<<< |
1085 | * |
1086 | @@ -1013,118 +1133,131 @@ |
1087 | */ |
1088 | ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->transposed = 0; |
1089 | |
1090 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":145 |
1091 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":87 |
1092 | * self.transposed = 0 |
1093 | * |
1094 | * if self.tensor.ndim != 2: # <<<<<<<<<<<<<< |
1095 | * raise ValueError("You can only pack a 2 dimensional tensor") |
1096 | * self.rows, self.cols = self.tensor.shape |
1097 | */ |
1098 | - __pyx_t_1 = PyObject_GetAttr(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->tensor, __pyx_kp_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1099 | + __pyx_t_1 = PyObject_GetAttr(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->tensor, __pyx_kp_ndim); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1100 | __Pyx_GOTREF(__pyx_t_1); |
1101 | - __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_2, Py_NE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1102 | + __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_2, Py_NE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1103 | __Pyx_GOTREF(__pyx_t_2); |
1104 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1105 | - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1106 | + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1107 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
1108 | if (__pyx_t_3) { |
1109 | |
1110 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":146 |
1111 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":88 |
1112 | * |
1113 | * if self.tensor.ndim != 2: |
1114 | * raise ValueError("You can only pack a 2 dimensional tensor") # <<<<<<<<<<<<<< |
1115 | * self.rows, self.cols = self.tensor.shape |
1116 | * self.nonZero = len(self.tensor) |
1117 | */ |
1118 | - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1119 | + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1120 | __Pyx_GOTREF(((PyObject *)__pyx_t_2)); |
1121 | __Pyx_INCREF(__pyx_kp_34); |
1122 | PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_34); |
1123 | __Pyx_GIVEREF(__pyx_kp_34); |
1124 | - __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1125 | + __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1126 | __Pyx_GOTREF(__pyx_t_1); |
1127 | __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; |
1128 | __Pyx_Raise(__pyx_t_1, 0, 0); |
1129 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1130 | - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1131 | + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1132 | goto __pyx_L6; |
1133 | } |
1134 | __pyx_L6:; |
1135 | |
1136 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":147 |
1137 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":89 |
1138 | * if self.tensor.ndim != 2: |
1139 | * raise ValueError("You can only pack a 2 dimensional tensor") |
1140 | * self.rows, self.cols = self.tensor.shape # <<<<<<<<<<<<<< |
1141 | * self.nonZero = len(self.tensor) |
1142 | * assert self.nonZero != 0 |
1143 | */ |
1144 | - __pyx_t_1 = PyObject_GetAttr(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->tensor, __pyx_kp_shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1145 | + __pyx_t_1 = PyObject_GetAttr(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->tensor, __pyx_kp_shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1146 | __Pyx_GOTREF(__pyx_t_1); |
1147 | if (PyTuple_CheckExact(__pyx_t_1) && likely(PyTuple_GET_SIZE(__pyx_t_1) == 2)) { |
1148 | PyObject* tuple = __pyx_t_1; |
1149 | __pyx_2 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_2); |
1150 | - __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1151 | + __pyx_t_4 = __Pyx_PyInt_AsLong(__pyx_2); if (unlikely((__pyx_t_4 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1152 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1153 | __pyx_2 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_2); |
1154 | - __pyx_t_5 = __Pyx_PyInt_AsInt(__pyx_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1155 | + __pyx_t_5 = __Pyx_PyInt_AsLong(__pyx_2); if (unlikely((__pyx_t_5 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1156 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1157 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1158 | ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->rows = __pyx_t_4; |
1159 | ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->cols = __pyx_t_5; |
1160 | } else { |
1161 | - __pyx_1 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1162 | + __pyx_1 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1163 | __Pyx_GOTREF(__pyx_1); |
1164 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1165 | - __pyx_2 = __Pyx_UnpackItem(__pyx_1, 0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1166 | - __Pyx_GOTREF(__pyx_2); |
1167 | - __pyx_t_5 = __Pyx_PyInt_AsInt(__pyx_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1168 | - __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1169 | - __pyx_2 = __Pyx_UnpackItem(__pyx_1, 1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1170 | - __Pyx_GOTREF(__pyx_2); |
1171 | - __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1172 | - __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1173 | - if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1174 | + __pyx_2 = __Pyx_UnpackItem(__pyx_1, 0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1175 | + __Pyx_GOTREF(__pyx_2); |
1176 | + __pyx_t_5 = __Pyx_PyInt_AsLong(__pyx_2); if (unlikely((__pyx_t_5 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1177 | + __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1178 | + __pyx_2 = __Pyx_UnpackItem(__pyx_1, 1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1179 | + __Pyx_GOTREF(__pyx_2); |
1180 | + __pyx_t_4 = __Pyx_PyInt_AsLong(__pyx_2); if (unlikely((__pyx_t_4 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1181 | + __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1182 | + if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1183 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
1184 | ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->rows = __pyx_t_5; |
1185 | ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->cols = __pyx_t_4; |
1186 | } |
1187 | |
1188 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":148 |
1189 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":90 |
1190 | * raise ValueError("You can only pack a 2 dimensional tensor") |
1191 | * self.rows, self.cols = self.tensor.shape |
1192 | * self.nonZero = len(self.tensor) # <<<<<<<<<<<<<< |
1193 | * assert self.nonZero != 0 |
1194 | * |
1195 | */ |
1196 | - __pyx_t_6 = PyObject_Length(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->tensor); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1197 | + __pyx_t_6 = PyObject_Length(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->tensor); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1198 | ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->nonZero = __pyx_t_6; |
1199 | |
1200 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":149 |
1201 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":91 |
1202 | * self.rows, self.cols = self.tensor.shape |
1203 | * self.nonZero = len(self.tensor) |
1204 | * assert self.nonZero != 0 # <<<<<<<<<<<<<< |
1205 | * |
1206 | - * self.row_factors = row_factors |
1207 | + * self.offset_for_row = offset_for_row |
1208 | */ |
1209 | #ifndef PYREX_WITHOUT_ASSERTIONS |
1210 | if (unlikely(!(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->nonZero != 0))) { |
1211 | PyErr_SetNone(PyExc_AssertionError); |
1212 | - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1213 | + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1214 | } |
1215 | #endif |
1216 | |
1217 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":151 |
1218 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":93 |
1219 | * assert self.nonZero != 0 |
1220 | * |
1221 | - * self.row_factors = row_factors # <<<<<<<<<<<<<< |
1222 | - * |
1223 | - * cpdef pack(self): |
1224 | - */ |
1225 | - __Pyx_INCREF(__pyx_v_row_factors); |
1226 | - __Pyx_GIVEREF(__pyx_v_row_factors); |
1227 | - __Pyx_GOTREF(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->row_factors); |
1228 | - __Pyx_DECREF(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->row_factors); |
1229 | - ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->row_factors = __pyx_v_row_factors; |
1230 | + * self.offset_for_row = offset_for_row # <<<<<<<<<<<<<< |
1231 | + * self.offset_for_col = offset_for_col |
1232 | + * |
1233 | + */ |
1234 | + __Pyx_INCREF(__pyx_v_offset_for_row); |
1235 | + __Pyx_GIVEREF(__pyx_v_offset_for_row); |
1236 | + __Pyx_GOTREF(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->offset_for_row); |
1237 | + __Pyx_DECREF(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->offset_for_row); |
1238 | + ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->offset_for_row = __pyx_v_offset_for_row; |
1239 | + |
1240 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":94 |
1241 | + * |
1242 | + * self.offset_for_row = offset_for_row |
1243 | + * self.offset_for_col = offset_for_col # <<<<<<<<<<<<<< |
1244 | + * |
1245 | + * cpdef pack(self, row_norms=None): |
1246 | + */ |
1247 | + __Pyx_INCREF(__pyx_v_offset_for_col); |
1248 | + __Pyx_GIVEREF(__pyx_v_offset_for_col); |
1249 | + __Pyx_GOTREF(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->offset_for_col); |
1250 | + __Pyx_DECREF(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->offset_for_col); |
1251 | + ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->offset_for_col = __pyx_v_offset_for_col; |
1252 | |
1253 | __pyx_r = 0; |
1254 | goto __pyx_L0; |
1255 | @@ -1140,82 +1273,236 @@ |
1256 | return __pyx_r; |
1257 | } |
1258 | |
1259 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":153 |
1260 | - * self.row_factors = row_factors |
1261 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":96 |
1262 | + * self.offset_for_col = offset_for_col |
1263 | * |
1264 | - * cpdef pack(self): # <<<<<<<<<<<<<< |
1265 | - * self.cmatrix = svdNewSMat(self.rows, self.cols, self.nonZero) |
1266 | - * self.transposed = 0 |
1267 | + * cpdef pack(self, row_norms=None): # <<<<<<<<<<<<<< |
1268 | + * cdef np.ndarray[DTYPE_t, ndim=1] row_factors # holds row _multiplication_ factors, possibly just 1. |
1269 | + * cdef long row, col, index, cols, col_len, rowk |
1270 | */ |
1271 | |
1272 | -static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_pack(PyObject *__pyx_v_self, PyObject *unused); /*proto*/ |
1273 | -static PyObject *__pyx_f_6svdlib_7_svdlib_9CSCMatrix_pack(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *__pyx_v_self, int __pyx_skip_dispatch) { |
1274 | +static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_pack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ |
1275 | +static PyObject *__pyx_f_6svdlib_7_svdlib_9CSCMatrix_pack(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_6svdlib_7_svdlib_9CSCMatrix_pack *__pyx_optional_args) { |
1276 | + PyObject *__pyx_v_row_norms = Py_None; |
1277 | + PyArrayObject *__pyx_v_row_factors; |
1278 | + long __pyx_v_row; |
1279 | + long __pyx_v_col; |
1280 | + long __pyx_v_index; |
1281 | + long __pyx_v_cols; |
1282 | + long __pyx_v_col_len; |
1283 | + long __pyx_v_rowk; |
1284 | + double __pyx_v_value; |
1285 | PyObject *__pyx_v_columnDict; |
1286 | - PyObject *__pyx_v_cols; |
1287 | - PyObject *__pyx_v_row; |
1288 | - PyObject *__pyx_v_column; |
1289 | - PyObject *__pyx_v_value; |
1290 | - PyObject *__pyx_v_index; |
1291 | - PyObject *__pyx_v_colnum; |
1292 | - PyObject *__pyx_v_col_len; |
1293 | - PyObject *__pyx_v_rowk; |
1294 | + Py_buffer __pyx_bstruct_row_factors; |
1295 | + Py_ssize_t __pyx_bstride_0_row_factors = 0; |
1296 | + Py_ssize_t __pyx_bshape_0_row_factors = 0; |
1297 | PyObject *__pyx_r = NULL; |
1298 | PyObject *__pyx_1 = 0; |
1299 | PyObject *__pyx_2 = 0; |
1300 | PyObject *__pyx_3 = 0; |
1301 | PyObject *__pyx_4 = 0; |
1302 | - PyObject *__pyx_5 = 0; |
1303 | - PyObject *__pyx_6 = 0; |
1304 | PyObject *__pyx_t_1 = NULL; |
1305 | - Py_ssize_t __pyx_t_2; |
1306 | - PyObject *__pyx_t_3 = NULL; |
1307 | - int __pyx_t_4; |
1308 | - double __pyx_t_5; |
1309 | - PyObject *__pyx_t_6 = NULL; |
1310 | + PyObject *__pyx_t_2 = NULL; |
1311 | + int __pyx_t_3; |
1312 | + PyObject *__pyx_t_4 = NULL; |
1313 | + PyArrayObject *__pyx_t_5 = NULL; |
1314 | + int __pyx_t_6; |
1315 | PyObject *__pyx_t_7 = NULL; |
1316 | - Py_ssize_t __pyx_t_8; |
1317 | - int __pyx_t_9; |
1318 | - int __pyx_t_10; |
1319 | - float __pyx_t_11; |
1320 | + PyObject *__pyx_t_8 = NULL; |
1321 | + PyObject *__pyx_t_9 = NULL; |
1322 | + PyObject *__pyx_t_10 = NULL; |
1323 | + PyObject *__pyx_t_11 = NULL; |
1324 | + Py_ssize_t __pyx_t_12; |
1325 | + double __pyx_t_13; |
1326 | + long __pyx_t_14; |
1327 | + long __pyx_t_15; |
1328 | + long __pyx_t_16; |
1329 | __Pyx_SetupRefcountContext("pack"); |
1330 | + if (__pyx_optional_args) { |
1331 | + if (__pyx_optional_args->__pyx_n > 0) { |
1332 | + __pyx_v_row_norms = __pyx_optional_args->row_norms; |
1333 | + } |
1334 | + } |
1335 | + __pyx_v_row_factors = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); |
1336 | __pyx_v_columnDict = Py_None; __Pyx_INCREF(Py_None); |
1337 | - __pyx_v_cols = Py_None; __Pyx_INCREF(Py_None); |
1338 | - __pyx_v_row = Py_None; __Pyx_INCREF(Py_None); |
1339 | - __pyx_v_column = Py_None; __Pyx_INCREF(Py_None); |
1340 | - __pyx_v_value = Py_None; __Pyx_INCREF(Py_None); |
1341 | - __pyx_v_index = Py_None; __Pyx_INCREF(Py_None); |
1342 | - __pyx_v_colnum = Py_None; __Pyx_INCREF(Py_None); |
1343 | - __pyx_v_col_len = Py_None; __Pyx_INCREF(Py_None); |
1344 | - __pyx_v_rowk = Py_None; __Pyx_INCREF(Py_None); |
1345 | + __pyx_bstruct_row_factors.buf = NULL; |
1346 | /* Check if called by wrapper */ |
1347 | if (unlikely(__pyx_skip_dispatch)) ; |
1348 | /* Check if overriden in Python */ |
1349 | else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) { |
1350 | - __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_kp_pack); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1351 | + __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_kp_pack); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1352 | __Pyx_GOTREF(__pyx_1); |
1353 | if (!PyCFunction_Check(__pyx_1) || (PyCFunction_GET_FUNCTION(__pyx_1) != (void *)&__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_pack)) { |
1354 | __Pyx_XDECREF(__pyx_r); |
1355 | - __pyx_t_1 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1356 | - __Pyx_GOTREF(__pyx_t_1); |
1357 | + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1358 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
1359 | + __Pyx_INCREF(__pyx_v_row_norms); |
1360 | + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_row_norms); |
1361 | + __Pyx_GIVEREF(__pyx_v_row_norms); |
1362 | + __pyx_t_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1363 | + __Pyx_GOTREF(__pyx_t_2); |
1364 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
1365 | - __pyx_r = __pyx_t_1; |
1366 | - __pyx_t_1 = 0; |
1367 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
1368 | + __pyx_r = __pyx_t_2; |
1369 | + __pyx_t_2 = 0; |
1370 | goto __pyx_L0; |
1371 | } |
1372 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
1373 | } |
1374 | |
1375 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":154 |
1376 | - * |
1377 | - * cpdef pack(self): |
1378 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":100 |
1379 | + * cdef long row, col, index, cols, col_len, rowk |
1380 | + * cdef double value |
1381 | + * if row_norms is None: # <<<<<<<<<<<<<< |
1382 | + * row_factors = np.ones(self.rows) |
1383 | + * else: |
1384 | + */ |
1385 | + __pyx_t_3 = (__pyx_v_row_norms == Py_None); |
1386 | + if (__pyx_t_3) { |
1387 | + |
1388 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":101 |
1389 | + * cdef double value |
1390 | + * if row_norms is None: |
1391 | + * row_factors = np.ones(self.rows) # <<<<<<<<<<<<<< |
1392 | + * else: |
1393 | + * row_factors = np.reciprocal(np.sqrt(np.array(row_norms, dtype=DTYPE))) |
1394 | + */ |
1395 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1396 | + __Pyx_GOTREF(__pyx_1); |
1397 | + __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_ones); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1398 | + __Pyx_GOTREF(__pyx_t_2); |
1399 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
1400 | + __pyx_t_1 = PyInt_FromLong(__pyx_v_self->rows); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1401 | + __Pyx_GOTREF(__pyx_t_1); |
1402 | + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1403 | + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
1404 | + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); |
1405 | + __Pyx_GIVEREF(__pyx_t_1); |
1406 | + __pyx_t_1 = 0; |
1407 | + __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1408 | + __Pyx_GOTREF(__pyx_t_1); |
1409 | + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
1410 | + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; |
1411 | + if (!(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1412 | + __pyx_t_5 = ((PyArrayObject *)__pyx_t_1); |
1413 | + { |
1414 | + __Pyx_BufFmt_StackElem __pyx_stack[1]; |
1415 | + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_row_factors); |
1416 | + __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_row_factors, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); |
1417 | + if (unlikely(__pyx_t_6 < 0)) { |
1418 | + PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); |
1419 | + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_row_factors, (PyObject*)__pyx_v_row_factors, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { |
1420 | + Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); |
1421 | + __Pyx_RaiseBufferFallbackError(); |
1422 | + } else { |
1423 | + PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9); |
1424 | + } |
1425 | + } |
1426 | + __pyx_bstride_0_row_factors = __pyx_bstruct_row_factors.strides[0]; |
1427 | + __pyx_bshape_0_row_factors = __pyx_bstruct_row_factors.shape[0]; |
1428 | + if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1429 | + } |
1430 | + __pyx_t_5 = 0; |
1431 | + __Pyx_DECREF(((PyObject *)__pyx_v_row_factors)); |
1432 | + __pyx_v_row_factors = ((PyArrayObject *)__pyx_t_1); |
1433 | + __pyx_t_1 = 0; |
1434 | + goto __pyx_L3; |
1435 | + } |
1436 | + /*else*/ { |
1437 | + |
1438 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":103 |
1439 | + * row_factors = np.ones(self.rows) |
1440 | + * else: |
1441 | + * row_factors = np.reciprocal(np.sqrt(np.array(row_norms, dtype=DTYPE))) # <<<<<<<<<<<<<< |
1442 | + * |
1443 | + * self.cmatrix = svdNewSMat(self.rows, self.cols, self.nonZero) |
1444 | + */ |
1445 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1446 | + __Pyx_GOTREF(__pyx_1); |
1447 | + __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_reciprocal); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1448 | + __Pyx_GOTREF(__pyx_t_1); |
1449 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
1450 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1451 | + __Pyx_GOTREF(__pyx_1); |
1452 | + __pyx_t_4 = PyObject_GetAttr(__pyx_1, __pyx_kp_sqrt); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1453 | + __Pyx_GOTREF(__pyx_t_4); |
1454 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
1455 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1456 | + __Pyx_GOTREF(__pyx_1); |
1457 | + __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1458 | + __Pyx_GOTREF(__pyx_t_2); |
1459 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
1460 | + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1461 | + __Pyx_GOTREF(((PyObject *)__pyx_t_10)); |
1462 | + __Pyx_INCREF(__pyx_v_row_norms); |
1463 | + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_row_norms); |
1464 | + __Pyx_GIVEREF(__pyx_v_row_norms); |
1465 | + __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1466 | + __Pyx_GOTREF(((PyObject *)__pyx_1)); |
1467 | + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_DTYPE); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1468 | + __Pyx_GOTREF(__pyx_2); |
1469 | + if (PyDict_SetItem(__pyx_1, __pyx_kp_dtype, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1470 | + __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1471 | + __pyx_t_11 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_10), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1472 | + __Pyx_GOTREF(__pyx_t_11); |
1473 | + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
1474 | + __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; |
1475 | + __Pyx_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0; |
1476 | + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1477 | + __Pyx_GOTREF(((PyObject *)__pyx_t_10)); |
1478 | + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); |
1479 | + __Pyx_GIVEREF(__pyx_t_11); |
1480 | + __pyx_t_11 = 0; |
1481 | + __pyx_t_11 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1482 | + __Pyx_GOTREF(__pyx_t_11); |
1483 | + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
1484 | + __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; |
1485 | + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1486 | + __Pyx_GOTREF(((PyObject *)__pyx_t_10)); |
1487 | + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); |
1488 | + __Pyx_GIVEREF(__pyx_t_11); |
1489 | + __pyx_t_11 = 0; |
1490 | + __pyx_t_11 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1491 | + __Pyx_GOTREF(__pyx_t_11); |
1492 | + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1493 | + __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; |
1494 | + if (!(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1495 | + __pyx_t_5 = ((PyArrayObject *)__pyx_t_11); |
1496 | + { |
1497 | + __Pyx_BufFmt_StackElem __pyx_stack[1]; |
1498 | + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_row_factors); |
1499 | + __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_row_factors, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); |
1500 | + if (unlikely(__pyx_t_6 < 0)) { |
1501 | + PyErr_Fetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7); |
1502 | + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_row_factors, (PyObject*)__pyx_v_row_factors, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { |
1503 | + Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_7); |
1504 | + __Pyx_RaiseBufferFallbackError(); |
1505 | + } else { |
1506 | + PyErr_Restore(__pyx_t_9, __pyx_t_8, __pyx_t_7); |
1507 | + } |
1508 | + } |
1509 | + __pyx_bstride_0_row_factors = __pyx_bstruct_row_factors.strides[0]; |
1510 | + __pyx_bshape_0_row_factors = __pyx_bstruct_row_factors.shape[0]; |
1511 | + if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1512 | + } |
1513 | + __pyx_t_5 = 0; |
1514 | + __Pyx_DECREF(((PyObject *)__pyx_v_row_factors)); |
1515 | + __pyx_v_row_factors = ((PyArrayObject *)__pyx_t_11); |
1516 | + __pyx_t_11 = 0; |
1517 | + } |
1518 | + __pyx_L3:; |
1519 | + |
1520 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":105 |
1521 | + * row_factors = np.reciprocal(np.sqrt(np.array(row_norms, dtype=DTYPE))) |
1522 | + * |
1523 | * self.cmatrix = svdNewSMat(self.rows, self.cols, self.nonZero) # <<<<<<<<<<<<<< |
1524 | * self.transposed = 0 |
1525 | * columnDict = {} |
1526 | */ |
1527 | __pyx_v_self->cmatrix = svdNewSMat(__pyx_v_self->rows, __pyx_v_self->cols, __pyx_v_self->nonZero); |
1528 | |
1529 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":155 |
1530 | - * cpdef pack(self): |
1531 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":106 |
1532 | + * |
1533 | * self.cmatrix = svdNewSMat(self.rows, self.cols, self.nonZero) |
1534 | * self.transposed = 0 # <<<<<<<<<<<<<< |
1535 | * columnDict = {} |
1536 | @@ -1223,439 +1510,391 @@ |
1537 | */ |
1538 | __pyx_v_self->transposed = 0; |
1539 | |
1540 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":156 |
1541 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":107 |
1542 | * self.cmatrix = svdNewSMat(self.rows, self.cols, self.nonZero) |
1543 | * self.transposed = 0 |
1544 | * columnDict = {} # <<<<<<<<<<<<<< |
1545 | * cols = self.cols |
1546 | - * for (row, column), value in self.tensor.iteritems(): |
1547 | + * for (row, col), value in self.tensor.iteritems(): |
1548 | */ |
1549 | - __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1550 | - __Pyx_GOTREF(((PyObject *)__pyx_1)); |
1551 | + __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1552 | + __Pyx_GOTREF(((PyObject *)__pyx_2)); |
1553 | __Pyx_DECREF(__pyx_v_columnDict); |
1554 | - __pyx_v_columnDict = ((PyObject *)__pyx_1); |
1555 | - __pyx_1 = 0; |
1556 | + __pyx_v_columnDict = ((PyObject *)__pyx_2); |
1557 | + __pyx_2 = 0; |
1558 | |
1559 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":157 |
1560 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":108 |
1561 | * self.transposed = 0 |
1562 | * columnDict = {} |
1563 | * cols = self.cols # <<<<<<<<<<<<<< |
1564 | - * for (row, column), value in self.tensor.iteritems(): |
1565 | - * if self.row_factors is not None: |
1566 | + * for (row, col), value in self.tensor.iteritems(): |
1567 | + * columnDict.setdefault(col, {})[row] = value * row_factors[row] |
1568 | */ |
1569 | - __pyx_t_1 = PyInt_FromLong(__pyx_v_self->cols); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1570 | - __Pyx_GOTREF(__pyx_t_1); |
1571 | - __Pyx_DECREF(__pyx_v_cols); |
1572 | - __pyx_v_cols = __pyx_t_1; |
1573 | - __pyx_t_1 = 0; |
1574 | + __pyx_v_cols = __pyx_v_self->cols; |
1575 | |
1576 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":158 |
1577 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":109 |
1578 | * columnDict = {} |
1579 | * cols = self.cols |
1580 | - * for (row, column), value in self.tensor.iteritems(): # <<<<<<<<<<<<<< |
1581 | - * if self.row_factors is not None: |
1582 | - * value /= sqrt(self.row_factors[row]) |
1583 | + * for (row, col), value in self.tensor.iteritems(): # <<<<<<<<<<<<<< |
1584 | + * columnDict.setdefault(col, {})[row] = value * row_factors[row] |
1585 | + * assert len(columnDict) <= cols |
1586 | */ |
1587 | - __pyx_t_1 = PyObject_GetAttr(__pyx_v_self->tensor, __pyx_kp_iteritems); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1588 | - __Pyx_GOTREF(__pyx_t_1); |
1589 | - __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1590 | - __Pyx_GOTREF(__pyx_t_3); |
1591 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1592 | - if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) { |
1593 | - __pyx_t_2 = 0; __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); |
1594 | + __pyx_t_11 = PyObject_GetAttr(__pyx_v_self->tensor, __pyx_kp_iteritems); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1595 | + __Pyx_GOTREF(__pyx_t_11); |
1596 | + __pyx_t_10 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1597 | + __Pyx_GOTREF(__pyx_t_10); |
1598 | + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; |
1599 | + if (PyList_CheckExact(__pyx_t_10) || PyTuple_CheckExact(__pyx_t_10)) { |
1600 | + __pyx_t_12 = 0; __pyx_t_11 = __pyx_t_10; __Pyx_INCREF(__pyx_t_11); |
1601 | } else { |
1602 | - __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1603 | - __Pyx_GOTREF(__pyx_t_1); |
1604 | + __pyx_t_12 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1605 | + __Pyx_GOTREF(__pyx_t_11); |
1606 | } |
1607 | - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
1608 | + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; |
1609 | for (;;) { |
1610 | - if (likely(PyList_CheckExact(__pyx_t_1))) { |
1611 | - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; |
1612 | - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; |
1613 | - } else if (likely(PyTuple_CheckExact(__pyx_t_1))) { |
1614 | - if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; |
1615 | - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; |
1616 | + if (likely(PyList_CheckExact(__pyx_t_11))) { |
1617 | + if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_11)) break; |
1618 | + __pyx_t_10 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_12); __Pyx_INCREF(__pyx_t_10); __pyx_t_12++; |
1619 | + } else if (likely(PyTuple_CheckExact(__pyx_t_11))) { |
1620 | + if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_11)) break; |
1621 | + __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_12); __Pyx_INCREF(__pyx_t_10); __pyx_t_12++; |
1622 | } else { |
1623 | - __pyx_t_3 = PyIter_Next(__pyx_t_1); |
1624 | - if (!__pyx_t_3) { |
1625 | - if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1626 | + __pyx_t_10 = PyIter_Next(__pyx_t_11); |
1627 | + if (!__pyx_t_10) { |
1628 | + if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1629 | break; |
1630 | } |
1631 | - __Pyx_GOTREF(__pyx_t_3); |
1632 | + __Pyx_GOTREF(__pyx_t_10); |
1633 | } |
1634 | - if (PyTuple_CheckExact(__pyx_t_3) && likely(PyTuple_GET_SIZE(__pyx_t_3) == 2)) { |
1635 | - PyObject* tuple = __pyx_t_3; |
1636 | + if (PyTuple_CheckExact(__pyx_t_10) && likely(PyTuple_GET_SIZE(__pyx_t_10) == 2)) { |
1637 | + PyObject* tuple = __pyx_t_10; |
1638 | __pyx_2 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_2); |
1639 | __pyx_3 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_3); |
1640 | - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
1641 | + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_3); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1642 | + __Pyx_DECREF(__pyx_3); __pyx_3 = 0; |
1643 | + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; |
1644 | if (PyTuple_CheckExact(__pyx_2) && likely(PyTuple_GET_SIZE(__pyx_2) == 2)) { |
1645 | PyObject* tuple = __pyx_2; |
1646 | - __pyx_5 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_5); |
1647 | - __pyx_6 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_6); |
1648 | + __pyx_4 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_4); |
1649 | + __pyx_t_14 = __Pyx_PyInt_AsLong(__pyx_4); if (unlikely((__pyx_t_14 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1650 | + __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1651 | + __pyx_4 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_4); |
1652 | + __pyx_t_15 = __Pyx_PyInt_AsLong(__pyx_4); if (unlikely((__pyx_t_15 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1653 | + __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1654 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1655 | - __Pyx_DECREF(__pyx_v_row); |
1656 | - __pyx_v_row = __pyx_5; |
1657 | - __pyx_5 = 0; |
1658 | - __Pyx_DECREF(__pyx_v_column); |
1659 | - __pyx_v_column = __pyx_6; |
1660 | - __pyx_6 = 0; |
1661 | + __pyx_v_row = __pyx_t_14; |
1662 | + __pyx_v_col = __pyx_t_15; |
1663 | } else { |
1664 | - __pyx_4 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1665 | - __Pyx_GOTREF(__pyx_4); |
1666 | + __pyx_3 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1667 | + __Pyx_GOTREF(__pyx_3); |
1668 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1669 | - __pyx_5 = __Pyx_UnpackItem(__pyx_4, 0); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1670 | - __Pyx_GOTREF(__pyx_5); |
1671 | - __pyx_6 = __Pyx_UnpackItem(__pyx_4, 1); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1672 | - __Pyx_GOTREF(__pyx_6); |
1673 | - if (__Pyx_EndUnpack(__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1674 | - __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1675 | - __Pyx_DECREF(__pyx_v_row); |
1676 | - __pyx_v_row = __pyx_5; |
1677 | - __pyx_5 = 0; |
1678 | - __Pyx_DECREF(__pyx_v_column); |
1679 | - __pyx_v_column = __pyx_6; |
1680 | - __pyx_6 = 0; |
1681 | + __pyx_4 = __Pyx_UnpackItem(__pyx_3, 0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1682 | + __Pyx_GOTREF(__pyx_4); |
1683 | + __pyx_t_15 = __Pyx_PyInt_AsLong(__pyx_4); if (unlikely((__pyx_t_15 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1684 | + __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1685 | + __pyx_4 = __Pyx_UnpackItem(__pyx_3, 1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1686 | + __Pyx_GOTREF(__pyx_4); |
1687 | + __pyx_t_14 = __Pyx_PyInt_AsLong(__pyx_4); if (unlikely((__pyx_t_14 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1688 | + __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1689 | + if (__Pyx_EndUnpack(__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1690 | + __Pyx_DECREF(__pyx_3); __pyx_3 = 0; |
1691 | + __pyx_v_row = __pyx_t_15; |
1692 | + __pyx_v_col = __pyx_t_14; |
1693 | } |
1694 | - __Pyx_DECREF(__pyx_v_value); |
1695 | - __pyx_v_value = __pyx_3; |
1696 | - __pyx_3 = 0; |
1697 | + __pyx_v_value = __pyx_t_13; |
1698 | } else { |
1699 | - __pyx_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1700 | + __pyx_1 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1701 | __Pyx_GOTREF(__pyx_1); |
1702 | - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
1703 | - __pyx_2 = __Pyx_UnpackItem(__pyx_1, 0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1704 | + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; |
1705 | + __pyx_2 = __Pyx_UnpackItem(__pyx_1, 0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1706 | __Pyx_GOTREF(__pyx_2); |
1707 | - __pyx_3 = __Pyx_UnpackItem(__pyx_1, 1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1708 | + __pyx_3 = __Pyx_UnpackItem(__pyx_1, 1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1709 | __Pyx_GOTREF(__pyx_3); |
1710 | - if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1711 | + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_3); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1712 | + __Pyx_DECREF(__pyx_3); __pyx_3 = 0; |
1713 | + if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1714 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
1715 | if (PyTuple_CheckExact(__pyx_2) && likely(PyTuple_GET_SIZE(__pyx_2) == 2)) { |
1716 | PyObject* tuple = __pyx_2; |
1717 | - __pyx_5 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_5); |
1718 | - __pyx_6 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_6); |
1719 | + __pyx_4 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_4); |
1720 | + __pyx_t_14 = __Pyx_PyInt_AsLong(__pyx_4); if (unlikely((__pyx_t_14 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1721 | + __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1722 | + __pyx_4 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_4); |
1723 | + __pyx_t_15 = __Pyx_PyInt_AsLong(__pyx_4); if (unlikely((__pyx_t_15 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1724 | + __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1725 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1726 | - __Pyx_DECREF(__pyx_v_row); |
1727 | - __pyx_v_row = __pyx_5; |
1728 | - __pyx_5 = 0; |
1729 | - __Pyx_DECREF(__pyx_v_column); |
1730 | - __pyx_v_column = __pyx_6; |
1731 | - __pyx_6 = 0; |
1732 | + __pyx_v_row = __pyx_t_14; |
1733 | + __pyx_v_col = __pyx_t_15; |
1734 | } else { |
1735 | - __pyx_4 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1736 | - __Pyx_GOTREF(__pyx_4); |
1737 | + __pyx_3 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1738 | + __Pyx_GOTREF(__pyx_3); |
1739 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
1740 | - __pyx_5 = __Pyx_UnpackItem(__pyx_4, 0); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1741 | - __Pyx_GOTREF(__pyx_5); |
1742 | - __pyx_6 = __Pyx_UnpackItem(__pyx_4, 1); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1743 | - __Pyx_GOTREF(__pyx_6); |
1744 | - if (__Pyx_EndUnpack(__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1745 | - __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1746 | - __Pyx_DECREF(__pyx_v_row); |
1747 | - __pyx_v_row = __pyx_5; |
1748 | - __pyx_5 = 0; |
1749 | - __Pyx_DECREF(__pyx_v_column); |
1750 | - __pyx_v_column = __pyx_6; |
1751 | - __pyx_6 = 0; |
1752 | + __pyx_4 = __Pyx_UnpackItem(__pyx_3, 0); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1753 | + __Pyx_GOTREF(__pyx_4); |
1754 | + __pyx_t_15 = __Pyx_PyInt_AsLong(__pyx_4); if (unlikely((__pyx_t_15 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1755 | + __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1756 | + __pyx_4 = __Pyx_UnpackItem(__pyx_3, 1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1757 | + __Pyx_GOTREF(__pyx_4); |
1758 | + __pyx_t_14 = __Pyx_PyInt_AsLong(__pyx_4); if (unlikely((__pyx_t_14 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1759 | + __Pyx_DECREF(__pyx_4); __pyx_4 = 0; |
1760 | + if (__Pyx_EndUnpack(__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1761 | + __Pyx_DECREF(__pyx_3); __pyx_3 = 0; |
1762 | + __pyx_v_row = __pyx_t_15; |
1763 | + __pyx_v_col = __pyx_t_14; |
1764 | } |
1765 | - __Pyx_DECREF(__pyx_v_value); |
1766 | - __pyx_v_value = __pyx_3; |
1767 | - __pyx_3 = 0; |
1768 | + __pyx_v_value = __pyx_t_13; |
1769 | } |
1770 | |
1771 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":159 |
1772 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":110 |
1773 | * cols = self.cols |
1774 | - * for (row, column), value in self.tensor.iteritems(): |
1775 | - * if self.row_factors is not None: # <<<<<<<<<<<<<< |
1776 | - * value /= sqrt(self.row_factors[row]) |
1777 | - * columnDict.setdefault(column, {})[row] = value |
1778 | - */ |
1779 | - __pyx_t_4 = (__pyx_v_self->row_factors != Py_None); |
1780 | - if (__pyx_t_4) { |
1781 | - |
1782 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":160 |
1783 | - * for (row, column), value in self.tensor.iteritems(): |
1784 | - * if self.row_factors is not None: |
1785 | - * value /= sqrt(self.row_factors[row]) # <<<<<<<<<<<<<< |
1786 | - * columnDict.setdefault(column, {})[row] = value |
1787 | - * assert len(columnDict) <= cols |
1788 | - */ |
1789 | - __pyx_5 = PyObject_GetItem(__pyx_v_self->row_factors, __pyx_v_row); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1790 | - __Pyx_GOTREF(__pyx_5); |
1791 | - __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_5); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1792 | - __Pyx_DECREF(__pyx_5); __pyx_5 = 0; |
1793 | - __pyx_t_3 = PyFloat_FromDouble(sqrt(__pyx_t_5)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1794 | - __Pyx_GOTREF(__pyx_t_3); |
1795 | - __pyx_4 = PyNumber_InPlaceDivide(__pyx_v_value, __pyx_t_3); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1796 | - __Pyx_GOTREF(__pyx_4); |
1797 | - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
1798 | - __Pyx_DECREF(__pyx_v_value); |
1799 | - __pyx_v_value = __pyx_4; |
1800 | - __pyx_4 = 0; |
1801 | - goto __pyx_L5; |
1802 | - } |
1803 | - __pyx_L5:; |
1804 | - |
1805 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":161 |
1806 | - * if self.row_factors is not None: |
1807 | - * value /= sqrt(self.row_factors[row]) |
1808 | - * columnDict.setdefault(column, {})[row] = value # <<<<<<<<<<<<<< |
1809 | + * for (row, col), value in self.tensor.iteritems(): |
1810 | + * columnDict.setdefault(col, {})[row] = value * row_factors[row] # <<<<<<<<<<<<<< |
1811 | * assert len(columnDict) <= cols |
1812 | * index = 0 |
1813 | */ |
1814 | - __pyx_t_3 = PyObject_GetAttr(__pyx_v_columnDict, __pyx_kp_setdefault); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1815 | - __Pyx_GOTREF(__pyx_t_3); |
1816 | - __pyx_6 = PyDict_New(); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1817 | - __Pyx_GOTREF(((PyObject *)__pyx_6)); |
1818 | - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1819 | - __Pyx_GOTREF(((PyObject *)__pyx_t_6)); |
1820 | - __Pyx_INCREF(__pyx_v_column); |
1821 | - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_column); |
1822 | - __Pyx_GIVEREF(__pyx_v_column); |
1823 | - PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_6)); |
1824 | - __Pyx_GIVEREF(((PyObject *)__pyx_6)); |
1825 | - __pyx_6 = 0; |
1826 | - __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1827 | - __Pyx_GOTREF(__pyx_t_7); |
1828 | - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
1829 | - __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; |
1830 | - if (PyObject_SetItem(__pyx_t_7, __pyx_v_row, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1831 | - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; |
1832 | + __pyx_t_14 = __pyx_v_row; |
1833 | + __pyx_t_6 = -1; |
1834 | + if (__pyx_t_14 < 0) { |
1835 | + __pyx_t_14 += __pyx_bshape_0_row_factors; |
1836 | + if (unlikely(__pyx_t_14 < 0)) __pyx_t_6 = 0; |
1837 | + } else if (unlikely(__pyx_t_14 >= __pyx_bshape_0_row_factors)) __pyx_t_6 = 0; |
1838 | + if (unlikely(__pyx_t_6 != -1)) { |
1839 | + __Pyx_RaiseBufferIndexError(__pyx_t_6); |
1840 | + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1841 | + } |
1842 | + __pyx_t_10 = PyFloat_FromDouble((__pyx_v_value * (*__Pyx_BufPtrStrided1d(__pyx_t_6svdlib_7_svdlib_DTYPE_t *, __pyx_bstruct_row_factors.buf, __pyx_t_14, __pyx_bstride_0_row_factors)))); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1843 | + __Pyx_GOTREF(__pyx_t_10); |
1844 | + __pyx_t_1 = PyObject_GetAttr(__pyx_v_columnDict, __pyx_kp_setdefault); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1845 | + __Pyx_GOTREF(__pyx_t_1); |
1846 | + __pyx_t_4 = PyInt_FromLong(__pyx_v_col); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1847 | + __Pyx_GOTREF(__pyx_t_4); |
1848 | + __pyx_4 = PyDict_New(); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1849 | + __Pyx_GOTREF(((PyObject *)__pyx_4)); |
1850 | + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1851 | + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); |
1852 | + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); |
1853 | + __Pyx_GIVEREF(__pyx_t_4); |
1854 | + PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_4)); |
1855 | + __Pyx_GIVEREF(((PyObject *)__pyx_4)); |
1856 | + __pyx_t_4 = 0; |
1857 | + __pyx_4 = 0; |
1858 | + __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1859 | + __Pyx_GOTREF(__pyx_t_4); |
1860 | + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1861 | + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; |
1862 | + if (__Pyx_SetItemInt(__pyx_t_4, __pyx_v_row, __pyx_t_10, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1863 | + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
1864 | + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; |
1865 | } |
1866 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1867 | + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; |
1868 | |
1869 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":162 |
1870 | - * value /= sqrt(self.row_factors[row]) |
1871 | - * columnDict.setdefault(column, {})[row] = value |
1872 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":111 |
1873 | + * for (row, col), value in self.tensor.iteritems(): |
1874 | + * columnDict.setdefault(col, {})[row] = value * row_factors[row] |
1875 | * assert len(columnDict) <= cols # <<<<<<<<<<<<<< |
1876 | * index = 0 |
1877 | - * for colnum in xrange(cols): |
1878 | + * for col in xrange(cols): |
1879 | */ |
1880 | #ifndef PYREX_WITHOUT_ASSERTIONS |
1881 | - __pyx_t_2 = PyObject_Length(__pyx_v_columnDict); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1882 | - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1883 | - __Pyx_GOTREF(__pyx_t_1); |
1884 | - __pyx_t_7 = PyObject_RichCompare(__pyx_t_1, __pyx_v_cols, Py_LE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1885 | - __Pyx_GOTREF(__pyx_t_7); |
1886 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1887 | - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1888 | - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; |
1889 | - if (unlikely(!__pyx_t_4)) { |
1890 | + __pyx_t_12 = PyObject_Length(__pyx_v_columnDict); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1891 | + if (unlikely(!(__pyx_t_12 <= __pyx_v_cols))) { |
1892 | PyErr_SetNone(PyExc_AssertionError); |
1893 | - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1894 | + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1895 | } |
1896 | #endif |
1897 | |
1898 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":163 |
1899 | - * columnDict.setdefault(column, {})[row] = value |
1900 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":112 |
1901 | + * columnDict.setdefault(col, {})[row] = value * row_factors[row] |
1902 | * assert len(columnDict) <= cols |
1903 | * index = 0 # <<<<<<<<<<<<<< |
1904 | - * for colnum in xrange(cols): |
1905 | - * col_len = len(columnDict.get(colnum, [])) |
1906 | + * for col in xrange(cols): |
1907 | + * col_len = len(columnDict.get(col, [])) |
1908 | */ |
1909 | - __Pyx_INCREF(__pyx_int_0); |
1910 | - __Pyx_DECREF(__pyx_v_index); |
1911 | - __pyx_v_index = __pyx_int_0; |
1912 | + __pyx_v_index = 0; |
1913 | |
1914 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":164 |
1915 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":113 |
1916 | * assert len(columnDict) <= cols |
1917 | * index = 0 |
1918 | - * for colnum in xrange(cols): # <<<<<<<<<<<<<< |
1919 | - * col_len = len(columnDict.get(colnum, [])) |
1920 | - * self.setColumnSize(colnum, col_len) |
1921 | + * for col in xrange(cols): # <<<<<<<<<<<<<< |
1922 | + * col_len = len(columnDict.get(col, [])) |
1923 | + * self.setColumnSize(col, col_len) |
1924 | */ |
1925 | - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1926 | - __Pyx_GOTREF(((PyObject *)__pyx_t_7)); |
1927 | - __Pyx_INCREF(__pyx_v_cols); |
1928 | - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_cols); |
1929 | - __Pyx_GIVEREF(__pyx_v_cols); |
1930 | - __pyx_t_1 = PyObject_Call(__pyx_builtin_xrange, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1931 | - __Pyx_GOTREF(__pyx_t_1); |
1932 | - __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0; |
1933 | - if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { |
1934 | - __pyx_t_2 = 0; __pyx_t_7 = __pyx_t_1; __Pyx_INCREF(__pyx_t_7); |
1935 | - } else { |
1936 | - __pyx_t_2 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1937 | - __Pyx_GOTREF(__pyx_t_7); |
1938 | - } |
1939 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1940 | - for (;;) { |
1941 | - if (likely(PyList_CheckExact(__pyx_t_7))) { |
1942 | - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_7)) break; |
1943 | - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; |
1944 | - } else if (likely(PyTuple_CheckExact(__pyx_t_7))) { |
1945 | - if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_7)) break; |
1946 | - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_2); __Pyx_INCREF(__pyx_t_1); __pyx_t_2++; |
1947 | - } else { |
1948 | - __pyx_t_1 = PyIter_Next(__pyx_t_7); |
1949 | - if (!__pyx_t_1) { |
1950 | - if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1951 | - break; |
1952 | - } |
1953 | - __Pyx_GOTREF(__pyx_t_1); |
1954 | - } |
1955 | - __Pyx_DECREF(__pyx_v_colnum); |
1956 | - __pyx_v_colnum = __pyx_t_1; |
1957 | - __pyx_t_1 = 0; |
1958 | + for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_v_cols; __pyx_t_15+=1) { |
1959 | + __pyx_v_col = __pyx_t_15; |
1960 | |
1961 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":165 |
1962 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":114 |
1963 | * index = 0 |
1964 | - * for colnum in xrange(cols): |
1965 | - * col_len = len(columnDict.get(colnum, [])) # <<<<<<<<<<<<<< |
1966 | - * self.setColumnSize(colnum, col_len) |
1967 | - * if col_len == 0: continue |
1968 | - */ |
1969 | - __pyx_t_1 = PyObject_GetAttr(__pyx_v_columnDict, __pyx_kp_get); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1970 | - __Pyx_GOTREF(__pyx_t_1); |
1971 | - __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1972 | - __Pyx_GOTREF(((PyObject *)__pyx_t_6)); |
1973 | - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1974 | - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
1975 | - __Pyx_INCREF(__pyx_v_colnum); |
1976 | - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_colnum); |
1977 | - __Pyx_GIVEREF(__pyx_v_colnum); |
1978 | - PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_t_6)); |
1979 | - __Pyx_GIVEREF(((PyObject *)__pyx_t_6)); |
1980 | - __pyx_t_6 = 0; |
1981 | - __pyx_t_6 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1982 | - __Pyx_GOTREF(__pyx_t_6); |
1983 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
1984 | - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
1985 | - __pyx_t_8 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1986 | - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; |
1987 | - __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_8); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
1988 | - __Pyx_GOTREF(__pyx_t_6); |
1989 | - __Pyx_DECREF(__pyx_v_col_len); |
1990 | - __pyx_v_col_len = __pyx_t_6; |
1991 | - __pyx_t_6 = 0; |
1992 | - |
1993 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":166 |
1994 | - * for colnum in xrange(cols): |
1995 | - * col_len = len(columnDict.get(colnum, [])) |
1996 | - * self.setColumnSize(colnum, col_len) # <<<<<<<<<<<<<< |
1997 | - * if col_len == 0: continue |
1998 | - * for rowk in sorted(columnDict[colnum].keys()): |
1999 | - */ |
2000 | - __pyx_t_9 = __Pyx_PyInt_AsInt(__pyx_v_colnum); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2001 | - __pyx_t_10 = __Pyx_PyInt_AsInt(__pyx_v_col_len); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2002 | - ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->setColumnSize(__pyx_v_self, __pyx_t_9, __pyx_t_10); |
2003 | - |
2004 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":167 |
2005 | - * col_len = len(columnDict.get(colnum, [])) |
2006 | - * self.setColumnSize(colnum, col_len) |
2007 | + * for col in xrange(cols): |
2008 | + * col_len = len(columnDict.get(col, [])) # <<<<<<<<<<<<<< |
2009 | + * self.setColumnSize(col, col_len) |
2010 | + * if col_len == 0: continue |
2011 | + */ |
2012 | + __pyx_t_11 = PyObject_GetAttr(__pyx_v_columnDict, __pyx_kp_get); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2013 | + __Pyx_GOTREF(__pyx_t_11); |
2014 | + __pyx_t_10 = PyInt_FromLong(__pyx_v_col); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2015 | + __Pyx_GOTREF(__pyx_t_10); |
2016 | + __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2017 | + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
2018 | + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2019 | + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); |
2020 | + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_10); |
2021 | + __Pyx_GIVEREF(__pyx_t_10); |
2022 | + PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_t_4)); |
2023 | + __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); |
2024 | + __pyx_t_10 = 0; |
2025 | + __pyx_t_4 = 0; |
2026 | + __pyx_t_4 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2027 | + __Pyx_GOTREF(__pyx_t_4); |
2028 | + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; |
2029 | + __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; |
2030 | + __pyx_t_12 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2031 | + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
2032 | + __pyx_v_col_len = __pyx_t_12; |
2033 | + |
2034 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":115 |
2035 | + * for col in xrange(cols): |
2036 | + * col_len = len(columnDict.get(col, [])) |
2037 | + * self.setColumnSize(col, col_len) # <<<<<<<<<<<<<< |
2038 | + * if col_len == 0: continue |
2039 | + * for rowk in sorted(columnDict[col].keys()): |
2040 | + */ |
2041 | + ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->setColumnSize(__pyx_v_self, __pyx_v_col, __pyx_v_col_len); |
2042 | + |
2043 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":116 |
2044 | + * col_len = len(columnDict.get(col, [])) |
2045 | + * self.setColumnSize(col, col_len) |
2046 | * if col_len == 0: continue # <<<<<<<<<<<<<< |
2047 | - * for rowk in sorted(columnDict[colnum].keys()): |
2048 | - * self.setValue(index, rowk, |
2049 | + * for rowk in sorted(columnDict[col].keys()): |
2050 | + * self.setValue(index, rowk, columnDict[col][rowk]) |
2051 | */ |
2052 | - __pyx_t_6 = PyObject_RichCompare(__pyx_v_col_len, __pyx_int_0, Py_EQ); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2053 | - __Pyx_GOTREF(__pyx_t_6); |
2054 | - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2055 | - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; |
2056 | - if (__pyx_t_4) { |
2057 | + __pyx_t_3 = (__pyx_v_col_len == 0); |
2058 | + if (__pyx_t_3) { |
2059 | goto __pyx_L6_continue; |
2060 | goto __pyx_L8; |
2061 | } |
2062 | __pyx_L8:; |
2063 | |
2064 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":168 |
2065 | - * self.setColumnSize(colnum, col_len) |
2066 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":117 |
2067 | + * self.setColumnSize(col, col_len) |
2068 | * if col_len == 0: continue |
2069 | - * for rowk in sorted(columnDict[colnum].keys()): # <<<<<<<<<<<<<< |
2070 | - * self.setValue(index, rowk, |
2071 | - * float(columnDict[colnum][rowk])) |
2072 | + * for rowk in sorted(columnDict[col].keys()): # <<<<<<<<<<<<<< |
2073 | + * self.setValue(index, rowk, columnDict[col][rowk]) |
2074 | + * index += 1 |
2075 | */ |
2076 | - __pyx_1 = PyObject_GetItem(__pyx_v_columnDict, __pyx_v_colnum); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2077 | - __Pyx_GOTREF(__pyx_1); |
2078 | - __pyx_t_6 = PyObject_GetAttr(__pyx_1, __pyx_kp_keys); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2079 | - __Pyx_GOTREF(__pyx_t_6); |
2080 | - __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2081 | - __pyx_t_3 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2082 | - __Pyx_GOTREF(__pyx_t_3); |
2083 | - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; |
2084 | - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2085 | - __Pyx_GOTREF(((PyObject *)__pyx_t_6)); |
2086 | - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); |
2087 | - __Pyx_GIVEREF(__pyx_t_3); |
2088 | - __pyx_t_3 = 0; |
2089 | - __pyx_t_3 = PyObject_Call(__pyx_builtin_sorted, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2090 | - __Pyx_GOTREF(__pyx_t_3); |
2091 | - __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; |
2092 | - if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) { |
2093 | - __pyx_t_8 = 0; __pyx_t_6 = __pyx_t_3; __Pyx_INCREF(__pyx_t_6); |
2094 | + __pyx_3 = __Pyx_GetItemInt(__pyx_v_columnDict, __pyx_v_col, sizeof(long), PyInt_FromLong); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2095 | + __Pyx_GOTREF(__pyx_3); |
2096 | + __pyx_t_4 = PyObject_GetAttr(__pyx_3, __pyx_kp_keys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2097 | + __Pyx_GOTREF(__pyx_t_4); |
2098 | + __Pyx_DECREF(__pyx_3); __pyx_3 = 0; |
2099 | + __pyx_t_2 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2100 | + __Pyx_GOTREF(__pyx_t_2); |
2101 | + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
2102 | + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2103 | + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
2104 | + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); |
2105 | + __Pyx_GIVEREF(__pyx_t_2); |
2106 | + __pyx_t_2 = 0; |
2107 | + __pyx_t_2 = PyObject_Call(__pyx_builtin_sorted, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2108 | + __Pyx_GOTREF(__pyx_t_2); |
2109 | + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; |
2110 | + if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { |
2111 | + __pyx_t_12 = 0; __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); |
2112 | } else { |
2113 | - __pyx_t_8 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2114 | - __Pyx_GOTREF(__pyx_t_6); |
2115 | + __pyx_t_12 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2116 | + __Pyx_GOTREF(__pyx_t_4); |
2117 | } |
2118 | - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
2119 | + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
2120 | for (;;) { |
2121 | - if (likely(PyList_CheckExact(__pyx_t_6))) { |
2122 | - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_6)) break; |
2123 | - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; |
2124 | - } else if (likely(PyTuple_CheckExact(__pyx_t_6))) { |
2125 | - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_6)) break; |
2126 | - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; |
2127 | + if (likely(PyList_CheckExact(__pyx_t_4))) { |
2128 | + if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_4)) break; |
2129 | + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_12); __Pyx_INCREF(__pyx_t_2); __pyx_t_12++; |
2130 | + } else if (likely(PyTuple_CheckExact(__pyx_t_4))) { |
2131 | + if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_4)) break; |
2132 | + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_12); __Pyx_INCREF(__pyx_t_2); __pyx_t_12++; |
2133 | } else { |
2134 | - __pyx_t_3 = PyIter_Next(__pyx_t_6); |
2135 | - if (!__pyx_t_3) { |
2136 | - if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2137 | + __pyx_t_2 = PyIter_Next(__pyx_t_4); |
2138 | + if (!__pyx_t_2) { |
2139 | + if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2140 | break; |
2141 | } |
2142 | - __Pyx_GOTREF(__pyx_t_3); |
2143 | + __Pyx_GOTREF(__pyx_t_2); |
2144 | } |
2145 | - __Pyx_DECREF(__pyx_v_rowk); |
2146 | - __pyx_v_rowk = __pyx_t_3; |
2147 | - __pyx_t_3 = 0; |
2148 | + __pyx_t_16 = __Pyx_PyInt_AsLong(__pyx_t_2); if (unlikely((__pyx_t_16 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2149 | + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
2150 | + __pyx_v_rowk = __pyx_t_16; |
2151 | |
2152 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":169 |
2153 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":118 |
2154 | * if col_len == 0: continue |
2155 | - * for rowk in sorted(columnDict[colnum].keys()): |
2156 | - * self.setValue(index, rowk, # <<<<<<<<<<<<<< |
2157 | - * float(columnDict[colnum][rowk])) |
2158 | - * index += 1 |
2159 | - */ |
2160 | - __pyx_t_10 = __Pyx_PyInt_AsInt(__pyx_v_index); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2161 | - __pyx_t_9 = __Pyx_PyInt_AsInt(__pyx_v_rowk); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2162 | - |
2163 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":170 |
2164 | - * for rowk in sorted(columnDict[colnum].keys()): |
2165 | - * self.setValue(index, rowk, |
2166 | - * float(columnDict[colnum][rowk])) # <<<<<<<<<<<<<< |
2167 | - * index += 1 |
2168 | - * |
2169 | - */ |
2170 | - __pyx_2 = PyObject_GetItem(__pyx_v_columnDict, __pyx_v_colnum); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2171 | + * for rowk in sorted(columnDict[col].keys()): |
2172 | + * self.setValue(index, rowk, columnDict[col][rowk]) # <<<<<<<<<<<<<< |
2173 | + * index += 1 |
2174 | + * if self.offset_for_row is not None: |
2175 | + */ |
2176 | + __pyx_1 = __Pyx_GetItemInt(__pyx_v_columnDict, __pyx_v_col, sizeof(long), PyInt_FromLong); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2177 | + __Pyx_GOTREF(__pyx_1); |
2178 | + __pyx_2 = __Pyx_GetItemInt(__pyx_1, __pyx_v_rowk, sizeof(long), PyInt_FromLong); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2179 | __Pyx_GOTREF(__pyx_2); |
2180 | - __pyx_3 = PyObject_GetItem(__pyx_2, __pyx_v_rowk); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2181 | - __Pyx_GOTREF(__pyx_3); |
2182 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2183 | + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_2); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2184 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
2185 | - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2186 | - __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
2187 | - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_3); |
2188 | - __Pyx_GIVEREF(__pyx_3); |
2189 | - __pyx_3 = 0; |
2190 | - __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)&PyFloat_Type)), ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2191 | - __Pyx_GOTREF(__pyx_t_1); |
2192 | - __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
2193 | - __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2194 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
2195 | - ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->setValue(__pyx_v_self, __pyx_t_10, __pyx_t_9, __pyx_t_11); |
2196 | + ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->setValue(__pyx_v_self, __pyx_v_index, __pyx_v_rowk, __pyx_t_13); |
2197 | |
2198 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":171 |
2199 | - * self.setValue(index, rowk, |
2200 | - * float(columnDict[colnum][rowk])) |
2201 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":119 |
2202 | + * for rowk in sorted(columnDict[col].keys()): |
2203 | + * self.setValue(index, rowk, columnDict[col][rowk]) |
2204 | * index += 1 # <<<<<<<<<<<<<< |
2205 | - * |
2206 | - * cpdef dictPack(self): |
2207 | + * if self.offset_for_row is not None: |
2208 | + * self.cmatrix.offset_for_row = self.toVector(self.offset_for_row) |
2209 | */ |
2210 | - __pyx_5 = PyNumber_InPlaceAdd(__pyx_v_index, __pyx_int_1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2211 | - __Pyx_GOTREF(__pyx_5); |
2212 | - __Pyx_DECREF(__pyx_v_index); |
2213 | - __pyx_v_index = __pyx_5; |
2214 | - __pyx_5 = 0; |
2215 | + __pyx_v_index += 1; |
2216 | } |
2217 | - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; |
2218 | + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
2219 | __pyx_L6_continue:; |
2220 | } |
2221 | - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; |
2222 | + |
2223 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":120 |
2224 | + * self.setValue(index, rowk, columnDict[col][rowk]) |
2225 | + * index += 1 |
2226 | + * if self.offset_for_row is not None: # <<<<<<<<<<<<<< |
2227 | + * self.cmatrix.offset_for_row = self.toVector(self.offset_for_row) |
2228 | + * if self.offset_for_col is not None: |
2229 | + */ |
2230 | + __pyx_t_3 = (__pyx_v_self->offset_for_row != Py_None); |
2231 | + if (__pyx_t_3) { |
2232 | + |
2233 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":121 |
2234 | + * index += 1 |
2235 | + * if self.offset_for_row is not None: |
2236 | + * self.cmatrix.offset_for_row = self.toVector(self.offset_for_row) # <<<<<<<<<<<<<< |
2237 | + * if self.offset_for_col is not None: |
2238 | + * self.cmatrix.offset_for_col = self.toVector(self.offset_for_col) |
2239 | + */ |
2240 | + __pyx_v_self->cmatrix->offset_for_row = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->toVector(__pyx_v_self, __pyx_v_self->offset_for_row); |
2241 | + goto __pyx_L11; |
2242 | + } |
2243 | + __pyx_L11:; |
2244 | + |
2245 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":122 |
2246 | + * if self.offset_for_row is not None: |
2247 | + * self.cmatrix.offset_for_row = self.toVector(self.offset_for_row) |
2248 | + * if self.offset_for_col is not None: # <<<<<<<<<<<<<< |
2249 | + * self.cmatrix.offset_for_col = self.toVector(self.offset_for_col) |
2250 | + * |
2251 | + */ |
2252 | + __pyx_t_3 = (__pyx_v_self->offset_for_col != Py_None); |
2253 | + if (__pyx_t_3) { |
2254 | + |
2255 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":123 |
2256 | + * self.cmatrix.offset_for_row = self.toVector(self.offset_for_row) |
2257 | + * if self.offset_for_col is not None: |
2258 | + * self.cmatrix.offset_for_col = self.toVector(self.offset_for_col) # <<<<<<<<<<<<<< |
2259 | + * |
2260 | + * cdef double *toVector(self, vec): |
2261 | + */ |
2262 | + __pyx_v_self->cmatrix->offset_for_col = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->toVector(__pyx_v_self, __pyx_v_self->offset_for_col); |
2263 | + goto __pyx_L12; |
2264 | + } |
2265 | + __pyx_L12:; |
2266 | |
2267 | __pyx_r = Py_None; __Pyx_INCREF(Py_None); |
2268 | goto __pyx_L0; |
2269 | @@ -1664,44 +1903,83 @@ |
2270 | __Pyx_XDECREF(__pyx_2); |
2271 | __Pyx_XDECREF(__pyx_3); |
2272 | __Pyx_XDECREF(__pyx_4); |
2273 | - __Pyx_XDECREF(__pyx_5); |
2274 | - __Pyx_XDECREF(__pyx_6); |
2275 | __Pyx_XDECREF(__pyx_t_1); |
2276 | - __Pyx_XDECREF(__pyx_t_3); |
2277 | - __Pyx_XDECREF(__pyx_t_6); |
2278 | - __Pyx_XDECREF(__pyx_t_7); |
2279 | + __Pyx_XDECREF(__pyx_t_2); |
2280 | + __Pyx_XDECREF(__pyx_t_4); |
2281 | + __Pyx_XDECREF(__pyx_t_10); |
2282 | + __Pyx_XDECREF(__pyx_t_11); |
2283 | + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; |
2284 | + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); |
2285 | + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_row_factors); |
2286 | + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} |
2287 | __Pyx_AddTraceback("svdlib._svdlib.CSCMatrix.pack"); |
2288 | __pyx_r = 0; |
2289 | + goto __pyx_L2; |
2290 | __pyx_L0:; |
2291 | + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_row_factors); |
2292 | + __pyx_L2:; |
2293 | + __Pyx_DECREF((PyObject *)__pyx_v_row_factors); |
2294 | __Pyx_DECREF(__pyx_v_columnDict); |
2295 | - __Pyx_DECREF(__pyx_v_cols); |
2296 | - __Pyx_DECREF(__pyx_v_row); |
2297 | - __Pyx_DECREF(__pyx_v_column); |
2298 | - __Pyx_DECREF(__pyx_v_value); |
2299 | - __Pyx_DECREF(__pyx_v_index); |
2300 | - __Pyx_DECREF(__pyx_v_colnum); |
2301 | - __Pyx_DECREF(__pyx_v_col_len); |
2302 | - __Pyx_DECREF(__pyx_v_rowk); |
2303 | __Pyx_XGIVEREF(__pyx_r); |
2304 | __Pyx_FinishRefcountContext(); |
2305 | return __pyx_r; |
2306 | } |
2307 | |
2308 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":153 |
2309 | - * self.row_factors = row_factors |
2310 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":96 |
2311 | + * self.offset_for_col = offset_for_col |
2312 | * |
2313 | - * cpdef pack(self): # <<<<<<<<<<<<<< |
2314 | - * self.cmatrix = svdNewSMat(self.rows, self.cols, self.nonZero) |
2315 | - * self.transposed = 0 |
2316 | + * cpdef pack(self, row_norms=None): # <<<<<<<<<<<<<< |
2317 | + * cdef np.ndarray[DTYPE_t, ndim=1] row_factors # holds row _multiplication_ factors, possibly just 1. |
2318 | + * cdef long row, col, index, cols, col_len, rowk |
2319 | */ |
2320 | |
2321 | -static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_pack(PyObject *__pyx_v_self, PyObject *unused); /*proto*/ |
2322 | -static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_pack(PyObject *__pyx_v_self, PyObject *unused) { |
2323 | +static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_pack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ |
2324 | +static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_pack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { |
2325 | + PyObject *__pyx_v_row_norms = 0; |
2326 | PyObject *__pyx_r = NULL; |
2327 | + struct __pyx_opt_args_6svdlib_7_svdlib_9CSCMatrix_pack __pyx_1; |
2328 | PyObject *__pyx_t_1 = NULL; |
2329 | + static PyObject **__pyx_pyargnames[] = {&__pyx_kp_row_norms,0}; |
2330 | __Pyx_SetupRefcountContext("pack"); |
2331 | + if (unlikely(__pyx_kwds)) { |
2332 | + Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); |
2333 | + PyObject* values[1] = {0}; |
2334 | + values[0] = Py_None; |
2335 | + switch (PyTuple_GET_SIZE(__pyx_args)) { |
2336 | + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); |
2337 | + case 0: break; |
2338 | + default: goto __pyx_L5_argtuple_error; |
2339 | + } |
2340 | + switch (PyTuple_GET_SIZE(__pyx_args)) { |
2341 | + case 0: |
2342 | + if (kw_args > 1) { |
2343 | + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_row_norms); |
2344 | + if (unlikely(value)) { values[0] = value; kw_args--; } |
2345 | + } |
2346 | + } |
2347 | + if (unlikely(kw_args > 0)) { |
2348 | + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "pack") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
2349 | + } |
2350 | + __pyx_v_row_norms = values[0]; |
2351 | + } else { |
2352 | + __pyx_v_row_norms = Py_None; |
2353 | + switch (PyTuple_GET_SIZE(__pyx_args)) { |
2354 | + case 1: __pyx_v_row_norms = PyTuple_GET_ITEM(__pyx_args, 0); |
2355 | + case 0: break; |
2356 | + default: goto __pyx_L5_argtuple_error; |
2357 | + } |
2358 | + } |
2359 | + goto __pyx_L4_argument_unpacking_done; |
2360 | + __pyx_L5_argtuple_error:; |
2361 | + __Pyx_RaiseArgtupleInvalid("pack", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
2362 | + __pyx_L3_error:; |
2363 | + __Pyx_AddTraceback("svdlib._svdlib.CSCMatrix.pack"); |
2364 | + return NULL; |
2365 | + __pyx_L4_argument_unpacking_done:; |
2366 | __Pyx_XDECREF(__pyx_r); |
2367 | - __pyx_t_1 = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->__pyx_vtab)->pack(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self), 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2368 | + __pyx_1.__pyx_n = 1; |
2369 | + __pyx_1.row_norms = __pyx_v_row_norms; |
2370 | + __pyx_t_1 = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->__pyx_vtab)->pack(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self), 1, &__pyx_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2371 | __Pyx_GOTREF(__pyx_t_1); |
2372 | __pyx_r = __pyx_t_1; |
2373 | __pyx_t_1 = 0; |
2374 | @@ -1719,66 +1997,355 @@ |
2375 | return __pyx_r; |
2376 | } |
2377 | |
2378 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":173 |
2379 | - * index += 1 |
2380 | - * |
2381 | - * cpdef dictPack(self): # <<<<<<<<<<<<<< |
2382 | - * self.cmatrix = svdNewSMat(self.cols, self.rows, self.nonZero) |
2383 | - * self.transposed = 1 |
2384 | - */ |
2385 | - |
2386 | -static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_dictPack(PyObject *__pyx_v_self, PyObject *unused); /*proto*/ |
2387 | -static PyObject *__pyx_f_6svdlib_7_svdlib_9CSCMatrix_dictPack(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *__pyx_v_self, int __pyx_skip_dispatch) { |
2388 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":125 |
2389 | + * self.cmatrix.offset_for_col = self.toVector(self.offset_for_col) |
2390 | + * |
2391 | + * cdef double *toVector(self, vec): # <<<<<<<<<<<<<< |
2392 | + * cdef long n = len(vec) |
2393 | + * cdef double *temp = svd_doubleArray(n, False, "toVector") |
2394 | + */ |
2395 | + |
2396 | +static double *__pyx_f_6svdlib_7_svdlib_9CSCMatrix_toVector(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *__pyx_v_self, PyObject *__pyx_v_vec) { |
2397 | + long __pyx_v_n; |
2398 | + double *__pyx_v_temp; |
2399 | + PyObject *__pyx_v_i; |
2400 | + double *__pyx_r; |
2401 | + PyObject *__pyx_1 = 0; |
2402 | + Py_ssize_t __pyx_t_1; |
2403 | + PyObject *__pyx_t_2 = NULL; |
2404 | + PyObject *__pyx_t_3 = NULL; |
2405 | + double __pyx_t_4; |
2406 | + Py_ssize_t __pyx_t_5; |
2407 | + __Pyx_SetupRefcountContext("toVector"); |
2408 | + __pyx_v_i = Py_None; __Pyx_INCREF(Py_None); |
2409 | + |
2410 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":126 |
2411 | + * |
2412 | + * cdef double *toVector(self, vec): |
2413 | + * cdef long n = len(vec) # <<<<<<<<<<<<<< |
2414 | + * cdef double *temp = svd_doubleArray(n, False, "toVector") |
2415 | + * for i in range(n): |
2416 | + */ |
2417 | + __pyx_t_1 = PyObject_Length(__pyx_v_vec); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2418 | + __pyx_v_n = __pyx_t_1; |
2419 | + |
2420 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":127 |
2421 | + * cdef double *toVector(self, vec): |
2422 | + * cdef long n = len(vec) |
2423 | + * cdef double *temp = svd_doubleArray(n, False, "toVector") # <<<<<<<<<<<<<< |
2424 | + * for i in range(n): |
2425 | + * temp[i] = vec[i] |
2426 | + */ |
2427 | + __pyx_v_temp = svd_doubleArray(__pyx_v_n, 0, __pyx_k_35); |
2428 | + |
2429 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":128 |
2430 | + * cdef long n = len(vec) |
2431 | + * cdef double *temp = svd_doubleArray(n, False, "toVector") |
2432 | + * for i in range(n): # <<<<<<<<<<<<<< |
2433 | + * temp[i] = vec[i] |
2434 | + * return temp |
2435 | + */ |
2436 | + __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2437 | + __Pyx_GOTREF(__pyx_t_2); |
2438 | + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2439 | + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
2440 | + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); |
2441 | + __Pyx_GIVEREF(__pyx_t_2); |
2442 | + __pyx_t_2 = 0; |
2443 | + __pyx_t_2 = PyObject_Call(__pyx_builtin_range, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2444 | + __Pyx_GOTREF(__pyx_t_2); |
2445 | + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
2446 | + if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { |
2447 | + __pyx_t_1 = 0; __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); |
2448 | + } else { |
2449 | + __pyx_t_1 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2450 | + __Pyx_GOTREF(__pyx_t_3); |
2451 | + } |
2452 | + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
2453 | + for (;;) { |
2454 | + if (likely(PyList_CheckExact(__pyx_t_3))) { |
2455 | + if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_3)) break; |
2456 | + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_2); __pyx_t_1++; |
2457 | + } else if (likely(PyTuple_CheckExact(__pyx_t_3))) { |
2458 | + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; |
2459 | + __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_2); __pyx_t_1++; |
2460 | + } else { |
2461 | + __pyx_t_2 = PyIter_Next(__pyx_t_3); |
2462 | + if (!__pyx_t_2) { |
2463 | + if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2464 | + break; |
2465 | + } |
2466 | + __Pyx_GOTREF(__pyx_t_2); |
2467 | + } |
2468 | + __Pyx_DECREF(__pyx_v_i); |
2469 | + __pyx_v_i = __pyx_t_2; |
2470 | + __pyx_t_2 = 0; |
2471 | + |
2472 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":129 |
2473 | + * cdef double *temp = svd_doubleArray(n, False, "toVector") |
2474 | + * for i in range(n): |
2475 | + * temp[i] = vec[i] # <<<<<<<<<<<<<< |
2476 | + * return temp |
2477 | + * |
2478 | + */ |
2479 | + __pyx_1 = PyObject_GetItem(__pyx_v_vec, __pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2480 | + __Pyx_GOTREF(__pyx_1); |
2481 | + __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_1); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2482 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2483 | + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2484 | + (__pyx_v_temp[__pyx_t_5]) = __pyx_t_4; |
2485 | + } |
2486 | + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
2487 | + |
2488 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":130 |
2489 | + * for i in range(n): |
2490 | + * temp[i] = vec[i] |
2491 | + * return temp # <<<<<<<<<<<<<< |
2492 | + * |
2493 | + * cpdef dictPack(self, row_norms=None): |
2494 | + */ |
2495 | + __pyx_r = __pyx_v_temp; |
2496 | + goto __pyx_L0; |
2497 | + |
2498 | + __pyx_r = 0; |
2499 | + goto __pyx_L0; |
2500 | + __pyx_L1_error:; |
2501 | + __Pyx_XDECREF(__pyx_1); |
2502 | + __Pyx_XDECREF(__pyx_t_2); |
2503 | + __Pyx_XDECREF(__pyx_t_3); |
2504 | + __Pyx_WriteUnraisable("svdlib._svdlib.CSCMatrix.toVector"); |
2505 | + __pyx_r = 0; |
2506 | + __pyx_L0:; |
2507 | + __Pyx_DECREF(__pyx_v_i); |
2508 | + __Pyx_FinishRefcountContext(); |
2509 | + return __pyx_r; |
2510 | +} |
2511 | + |
2512 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":132 |
2513 | + * return temp |
2514 | + * |
2515 | + * cpdef dictPack(self, row_norms=None): # <<<<<<<<<<<<<< |
2516 | + * cdef np.ndarray[DTYPE_t, ndim=1] row_factors # holds row _multiplication_ factors, possibly just 1. |
2517 | + * if row_norms is None: |
2518 | + */ |
2519 | + |
2520 | +static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_dictPack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ |
2521 | +static PyObject *__pyx_f_6svdlib_7_svdlib_9CSCMatrix_dictPack(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_6svdlib_7_svdlib_9CSCMatrix_dictPack *__pyx_optional_args) { |
2522 | + PyObject *__pyx_v_row_norms = Py_None; |
2523 | + PyArrayObject *__pyx_v_row_factors; |
2524 | PyObject *__pyx_v_rowDict = 0; |
2525 | int __pyx_v_rows; |
2526 | int __pyx_v_colk; |
2527 | int __pyx_v_index; |
2528 | int __pyx_v_rownum; |
2529 | int __pyx_v_row_len; |
2530 | - float __pyx_v_val; |
2531 | + double __pyx_v_val; |
2532 | + Py_buffer __pyx_bstruct_row_factors; |
2533 | + Py_ssize_t __pyx_bstride_0_row_factors = 0; |
2534 | + Py_ssize_t __pyx_bshape_0_row_factors = 0; |
2535 | PyObject *__pyx_r = NULL; |
2536 | PyObject *__pyx_1 = 0; |
2537 | PyObject *__pyx_2 = 0; |
2538 | PyObject *__pyx_t_1 = NULL; |
2539 | - int __pyx_t_2; |
2540 | - Py_ssize_t __pyx_t_3; |
2541 | + PyObject *__pyx_t_2 = NULL; |
2542 | + int __pyx_t_3; |
2543 | PyObject *__pyx_t_4 = NULL; |
2544 | - PyObject *__pyx_t_5 = NULL; |
2545 | - PyObject *__pyx_t_6 = NULL; |
2546 | - int __pyx_t_7; |
2547 | - int __pyx_t_8; |
2548 | - float __pyx_t_9; |
2549 | - double __pyx_t_10; |
2550 | + PyArrayObject *__pyx_t_5 = NULL; |
2551 | + int __pyx_t_6; |
2552 | + PyObject *__pyx_t_7 = NULL; |
2553 | + PyObject *__pyx_t_8 = NULL; |
2554 | + PyObject *__pyx_t_9 = NULL; |
2555 | + PyObject *__pyx_t_10 = NULL; |
2556 | + PyObject *__pyx_t_11 = NULL; |
2557 | + Py_ssize_t __pyx_t_12; |
2558 | + int __pyx_t_13; |
2559 | + int __pyx_t_14; |
2560 | + double __pyx_t_15; |
2561 | __Pyx_SetupRefcountContext("dictPack"); |
2562 | + if (__pyx_optional_args) { |
2563 | + if (__pyx_optional_args->__pyx_n > 0) { |
2564 | + __pyx_v_row_norms = __pyx_optional_args->row_norms; |
2565 | + } |
2566 | + } |
2567 | + __pyx_v_row_factors = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); |
2568 | + __pyx_bstruct_row_factors.buf = NULL; |
2569 | /* Check if called by wrapper */ |
2570 | if (unlikely(__pyx_skip_dispatch)) ; |
2571 | /* Check if overriden in Python */ |
2572 | else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) { |
2573 | - __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_kp_dictPack); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2574 | + __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_kp_dictPack); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2575 | __Pyx_GOTREF(__pyx_1); |
2576 | if (!PyCFunction_Check(__pyx_1) || (PyCFunction_GET_FUNCTION(__pyx_1) != (void *)&__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_dictPack)) { |
2577 | __Pyx_XDECREF(__pyx_r); |
2578 | - __pyx_t_1 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2579 | - __Pyx_GOTREF(__pyx_t_1); |
2580 | + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2581 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
2582 | + __Pyx_INCREF(__pyx_v_row_norms); |
2583 | + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_row_norms); |
2584 | + __Pyx_GIVEREF(__pyx_v_row_norms); |
2585 | + __pyx_t_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2586 | + __Pyx_GOTREF(__pyx_t_2); |
2587 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2588 | - __pyx_r = __pyx_t_1; |
2589 | - __pyx_t_1 = 0; |
2590 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
2591 | + __pyx_r = __pyx_t_2; |
2592 | + __pyx_t_2 = 0; |
2593 | goto __pyx_L0; |
2594 | } |
2595 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2596 | } |
2597 | |
2598 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":174 |
2599 | - * |
2600 | - * cpdef dictPack(self): |
2601 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":134 |
2602 | + * cpdef dictPack(self, row_norms=None): |
2603 | + * cdef np.ndarray[DTYPE_t, ndim=1] row_factors # holds row _multiplication_ factors, possibly just 1. |
2604 | + * if row_norms is None: # <<<<<<<<<<<<<< |
2605 | + * row_factors = np.ones(self.rows) |
2606 | + * else: |
2607 | + */ |
2608 | + __pyx_t_3 = (__pyx_v_row_norms == Py_None); |
2609 | + if (__pyx_t_3) { |
2610 | + |
2611 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":135 |
2612 | + * cdef np.ndarray[DTYPE_t, ndim=1] row_factors # holds row _multiplication_ factors, possibly just 1. |
2613 | + * if row_norms is None: |
2614 | + * row_factors = np.ones(self.rows) # <<<<<<<<<<<<<< |
2615 | + * else: |
2616 | + * row_factors = np.reciprocal(np.sqrt(np.array(row_norms, dtype=DTYPE))) |
2617 | + */ |
2618 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2619 | + __Pyx_GOTREF(__pyx_1); |
2620 | + __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_ones); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2621 | + __Pyx_GOTREF(__pyx_t_2); |
2622 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2623 | + __pyx_t_1 = PyInt_FromLong(__pyx_v_self->rows); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2624 | + __Pyx_GOTREF(__pyx_t_1); |
2625 | + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2626 | + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
2627 | + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); |
2628 | + __Pyx_GIVEREF(__pyx_t_1); |
2629 | + __pyx_t_1 = 0; |
2630 | + __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2631 | + __Pyx_GOTREF(__pyx_t_1); |
2632 | + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
2633 | + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; |
2634 | + if (!(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2635 | + __pyx_t_5 = ((PyArrayObject *)__pyx_t_1); |
2636 | + { |
2637 | + __Pyx_BufFmt_StackElem __pyx_stack[1]; |
2638 | + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_row_factors); |
2639 | + __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_row_factors, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); |
2640 | + if (unlikely(__pyx_t_6 < 0)) { |
2641 | + PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); |
2642 | + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_row_factors, (PyObject*)__pyx_v_row_factors, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { |
2643 | + Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); |
2644 | + __Pyx_RaiseBufferFallbackError(); |
2645 | + } else { |
2646 | + PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9); |
2647 | + } |
2648 | + } |
2649 | + __pyx_bstride_0_row_factors = __pyx_bstruct_row_factors.strides[0]; |
2650 | + __pyx_bshape_0_row_factors = __pyx_bstruct_row_factors.shape[0]; |
2651 | + if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2652 | + } |
2653 | + __pyx_t_5 = 0; |
2654 | + __Pyx_DECREF(((PyObject *)__pyx_v_row_factors)); |
2655 | + __pyx_v_row_factors = ((PyArrayObject *)__pyx_t_1); |
2656 | + __pyx_t_1 = 0; |
2657 | + goto __pyx_L3; |
2658 | + } |
2659 | + /*else*/ { |
2660 | + |
2661 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":137 |
2662 | + * row_factors = np.ones(self.rows) |
2663 | + * else: |
2664 | + * row_factors = np.reciprocal(np.sqrt(np.array(row_norms, dtype=DTYPE))) # <<<<<<<<<<<<<< |
2665 | + * |
2666 | + * self.cmatrix = svdNewSMat(self.cols, self.rows, self.nonZero) |
2667 | + */ |
2668 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2669 | + __Pyx_GOTREF(__pyx_1); |
2670 | + __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_reciprocal); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2671 | + __Pyx_GOTREF(__pyx_t_1); |
2672 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2673 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2674 | + __Pyx_GOTREF(__pyx_1); |
2675 | + __pyx_t_4 = PyObject_GetAttr(__pyx_1, __pyx_kp_sqrt); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2676 | + __Pyx_GOTREF(__pyx_t_4); |
2677 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2678 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2679 | + __Pyx_GOTREF(__pyx_1); |
2680 | + __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2681 | + __Pyx_GOTREF(__pyx_t_2); |
2682 | + __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2683 | + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2684 | + __Pyx_GOTREF(((PyObject *)__pyx_t_10)); |
2685 | + __Pyx_INCREF(__pyx_v_row_norms); |
2686 | + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_row_norms); |
2687 | + __Pyx_GIVEREF(__pyx_v_row_norms); |
2688 | + __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2689 | + __Pyx_GOTREF(((PyObject *)__pyx_1)); |
2690 | + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_DTYPE); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2691 | + __Pyx_GOTREF(__pyx_2); |
2692 | + if (PyDict_SetItem(__pyx_1, __pyx_kp_dtype, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2693 | + __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
2694 | + __pyx_t_11 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_t_10), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2695 | + __Pyx_GOTREF(__pyx_t_11); |
2696 | + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
2697 | + __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; |
2698 | + __Pyx_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0; |
2699 | + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2700 | + __Pyx_GOTREF(((PyObject *)__pyx_t_10)); |
2701 | + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); |
2702 | + __Pyx_GIVEREF(__pyx_t_11); |
2703 | + __pyx_t_11 = 0; |
2704 | + __pyx_t_11 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2705 | + __Pyx_GOTREF(__pyx_t_11); |
2706 | + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
2707 | + __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; |
2708 | + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2709 | + __Pyx_GOTREF(((PyObject *)__pyx_t_10)); |
2710 | + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); |
2711 | + __Pyx_GIVEREF(__pyx_t_11); |
2712 | + __pyx_t_11 = 0; |
2713 | + __pyx_t_11 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2714 | + __Pyx_GOTREF(__pyx_t_11); |
2715 | + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
2716 | + __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0; |
2717 | + if (!(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2718 | + __pyx_t_5 = ((PyArrayObject *)__pyx_t_11); |
2719 | + { |
2720 | + __Pyx_BufFmt_StackElem __pyx_stack[1]; |
2721 | + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_row_factors); |
2722 | + __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_bstruct_row_factors, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack); |
2723 | + if (unlikely(__pyx_t_6 < 0)) { |
2724 | + PyErr_Fetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7); |
2725 | + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_row_factors, (PyObject*)__pyx_v_row_factors, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { |
2726 | + Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_7); |
2727 | + __Pyx_RaiseBufferFallbackError(); |
2728 | + } else { |
2729 | + PyErr_Restore(__pyx_t_9, __pyx_t_8, __pyx_t_7); |
2730 | + } |
2731 | + } |
2732 | + __pyx_bstride_0_row_factors = __pyx_bstruct_row_factors.strides[0]; |
2733 | + __pyx_bshape_0_row_factors = __pyx_bstruct_row_factors.shape[0]; |
2734 | + if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2735 | + } |
2736 | + __pyx_t_5 = 0; |
2737 | + __Pyx_DECREF(((PyObject *)__pyx_v_row_factors)); |
2738 | + __pyx_v_row_factors = ((PyArrayObject *)__pyx_t_11); |
2739 | + __pyx_t_11 = 0; |
2740 | + } |
2741 | + __pyx_L3:; |
2742 | + |
2743 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":139 |
2744 | + * row_factors = np.reciprocal(np.sqrt(np.array(row_norms, dtype=DTYPE))) |
2745 | + * |
2746 | * self.cmatrix = svdNewSMat(self.cols, self.rows, self.nonZero) # <<<<<<<<<<<<<< |
2747 | * self.transposed = 1 |
2748 | * cdef object rowDict = self.tensor._data |
2749 | */ |
2750 | __pyx_v_self->cmatrix = svdNewSMat(__pyx_v_self->cols, __pyx_v_self->rows, __pyx_v_self->nonZero); |
2751 | |
2752 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":175 |
2753 | - * cpdef dictPack(self): |
2754 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":140 |
2755 | + * |
2756 | * self.cmatrix = svdNewSMat(self.cols, self.rows, self.nonZero) |
2757 | * self.transposed = 1 # <<<<<<<<<<<<<< |
2758 | * cdef object rowDict = self.tensor._data |
2759 | @@ -1786,35 +2353,35 @@ |
2760 | */ |
2761 | __pyx_v_self->transposed = 1; |
2762 | |
2763 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":176 |
2764 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":141 |
2765 | * self.cmatrix = svdNewSMat(self.cols, self.rows, self.nonZero) |
2766 | * self.transposed = 1 |
2767 | * cdef object rowDict = self.tensor._data # <<<<<<<<<<<<<< |
2768 | * cdef int rows = self.tensor.shape[0] |
2769 | * cdef int colk |
2770 | */ |
2771 | - __pyx_t_1 = PyObject_GetAttr(__pyx_v_self->tensor, __pyx_kp__data); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2772 | - __Pyx_GOTREF(__pyx_t_1); |
2773 | - __pyx_v_rowDict = __pyx_t_1; |
2774 | - __pyx_t_1 = 0; |
2775 | + __pyx_t_11 = PyObject_GetAttr(__pyx_v_self->tensor, __pyx_kp__data); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2776 | + __Pyx_GOTREF(__pyx_t_11); |
2777 | + __pyx_v_rowDict = __pyx_t_11; |
2778 | + __pyx_t_11 = 0; |
2779 | |
2780 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":177 |
2781 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":142 |
2782 | * self.transposed = 1 |
2783 | * cdef object rowDict = self.tensor._data |
2784 | * cdef int rows = self.tensor.shape[0] # <<<<<<<<<<<<<< |
2785 | * cdef int colk |
2786 | * cdef int index = 0 |
2787 | */ |
2788 | - __pyx_t_1 = PyObject_GetAttr(__pyx_v_self->tensor, __pyx_kp_shape); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2789 | - __Pyx_GOTREF(__pyx_t_1); |
2790 | - __pyx_1 = __Pyx_GetItemInt(__pyx_t_1, 0, sizeof(long), PyInt_FromLong); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2791 | - __Pyx_GOTREF(__pyx_1); |
2792 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
2793 | - __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2794 | - __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2795 | - __pyx_v_rows = __pyx_t_2; |
2796 | + __pyx_t_11 = PyObject_GetAttr(__pyx_v_self->tensor, __pyx_kp_shape); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2797 | + __Pyx_GOTREF(__pyx_t_11); |
2798 | + __pyx_2 = __Pyx_GetItemInt(__pyx_t_11, 0, sizeof(long), PyInt_FromLong); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2799 | + __Pyx_GOTREF(__pyx_2); |
2800 | + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; |
2801 | + __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2802 | + __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
2803 | + __pyx_v_rows = __pyx_t_6; |
2804 | |
2805 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":179 |
2806 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":144 |
2807 | * cdef int rows = self.tensor.shape[0] |
2808 | * cdef int colk |
2809 | * cdef int index = 0 # <<<<<<<<<<<<<< |
2810 | @@ -1823,61 +2390,61 @@ |
2811 | */ |
2812 | __pyx_v_index = 0; |
2813 | |
2814 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":183 |
2815 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":148 |
2816 | * cdef int row_len |
2817 | - * cdef float val |
2818 | + * cdef double val |
2819 | * assert len(rowDict) <= rows # <<<<<<<<<<<<<< |
2820 | * for rownum from 0 <= rownum < rows: |
2821 | * row_len = len(rowDict.get(rownum, [])) |
2822 | */ |
2823 | #ifndef PYREX_WITHOUT_ASSERTIONS |
2824 | - __pyx_t_3 = PyObject_Length(__pyx_v_rowDict); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2825 | - if (unlikely(!(__pyx_t_3 <= __pyx_v_rows))) { |
2826 | + __pyx_t_12 = PyObject_Length(__pyx_v_rowDict); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2827 | + if (unlikely(!(__pyx_t_12 <= __pyx_v_rows))) { |
2828 | PyErr_SetNone(PyExc_AssertionError); |
2829 | - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2830 | + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2831 | } |
2832 | #endif |
2833 | |
2834 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":184 |
2835 | - * cdef float val |
2836 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":149 |
2837 | + * cdef double val |
2838 | * assert len(rowDict) <= rows |
2839 | * for rownum from 0 <= rownum < rows: # <<<<<<<<<<<<<< |
2840 | * row_len = len(rowDict.get(rownum, [])) |
2841 | * self.setColumnSize(rownum, row_len) |
2842 | */ |
2843 | - __pyx_t_2 = __pyx_v_rows; |
2844 | - for (__pyx_v_rownum = 0; __pyx_v_rownum < __pyx_t_2; __pyx_v_rownum++) { |
2845 | + __pyx_t_6 = __pyx_v_rows; |
2846 | + for (__pyx_v_rownum = 0; __pyx_v_rownum < __pyx_t_6; __pyx_v_rownum++) { |
2847 | |
2848 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":185 |
2849 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":150 |
2850 | * assert len(rowDict) <= rows |
2851 | * for rownum from 0 <= rownum < rows: |
2852 | * row_len = len(rowDict.get(rownum, [])) # <<<<<<<<<<<<<< |
2853 | * self.setColumnSize(rownum, row_len) |
2854 | * if row_len == 0: continue |
2855 | */ |
2856 | - __pyx_t_1 = PyObject_GetAttr(__pyx_v_rowDict, __pyx_kp_get); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2857 | + __pyx_t_11 = PyObject_GetAttr(__pyx_v_rowDict, __pyx_kp_get); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2858 | + __Pyx_GOTREF(__pyx_t_11); |
2859 | + __pyx_t_10 = PyInt_FromLong(__pyx_v_rownum); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2860 | + __Pyx_GOTREF(__pyx_t_10); |
2861 | + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2862 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
2863 | + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2864 | + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
2865 | + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_10); |
2866 | + __Pyx_GIVEREF(__pyx_t_10); |
2867 | + PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_t_1)); |
2868 | + __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); |
2869 | + __pyx_t_10 = 0; |
2870 | + __pyx_t_1 = 0; |
2871 | + __pyx_t_1 = PyObject_Call(__pyx_t_11, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2872 | __Pyx_GOTREF(__pyx_t_1); |
2873 | - __pyx_t_4 = PyInt_FromLong(__pyx_v_rownum); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2874 | - __Pyx_GOTREF(__pyx_t_4); |
2875 | - __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2876 | - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); |
2877 | - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2878 | - __Pyx_GOTREF(((PyObject *)__pyx_t_6)); |
2879 | - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); |
2880 | - __Pyx_GIVEREF(__pyx_t_4); |
2881 | - PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_t_5)); |
2882 | - __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); |
2883 | - __pyx_t_4 = 0; |
2884 | - __pyx_t_5 = 0; |
2885 | - __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2886 | - __Pyx_GOTREF(__pyx_t_5); |
2887 | + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; |
2888 | + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; |
2889 | + __pyx_t_12 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2890 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
2891 | - __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; |
2892 | - __pyx_t_3 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2893 | - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; |
2894 | - __pyx_v_row_len = __pyx_t_3; |
2895 | + __pyx_v_row_len = __pyx_t_12; |
2896 | |
2897 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":186 |
2898 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":151 |
2899 | * for rownum from 0 <= rownum < rows: |
2900 | * row_len = len(rowDict.get(rownum, [])) |
2901 | * self.setColumnSize(rownum, row_len) # <<<<<<<<<<<<<< |
2902 | @@ -1886,140 +2453,174 @@ |
2903 | */ |
2904 | ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->setColumnSize(__pyx_v_self, __pyx_v_rownum, __pyx_v_row_len); |
2905 | |
2906 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":187 |
2907 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":152 |
2908 | * row_len = len(rowDict.get(rownum, [])) |
2909 | * self.setColumnSize(rownum, row_len) |
2910 | * if row_len == 0: continue # <<<<<<<<<<<<<< |
2911 | * for colk in sorted(rowDict[rownum].keys()): |
2912 | - * val = float(rowDict[rownum][colk]) |
2913 | + * val = float(rowDict[rownum][colk]) * row_factors[rownum] |
2914 | */ |
2915 | - __pyx_t_7 = (__pyx_v_row_len == 0); |
2916 | - if (__pyx_t_7) { |
2917 | - goto __pyx_L3_continue; |
2918 | - goto __pyx_L5; |
2919 | + __pyx_t_3 = (__pyx_v_row_len == 0); |
2920 | + if (__pyx_t_3) { |
2921 | + goto __pyx_L4_continue; |
2922 | + goto __pyx_L6; |
2923 | } |
2924 | - __pyx_L5:; |
2925 | + __pyx_L6:; |
2926 | |
2927 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":188 |
2928 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":153 |
2929 | * self.setColumnSize(rownum, row_len) |
2930 | * if row_len == 0: continue |
2931 | * for colk in sorted(rowDict[rownum].keys()): # <<<<<<<<<<<<<< |
2932 | - * val = float(rowDict[rownum][colk]) |
2933 | - * if self.row_factors is not None: |
2934 | + * val = float(rowDict[rownum][colk]) * row_factors[rownum] |
2935 | + * self.setValue(index, colk, val) |
2936 | */ |
2937 | - __pyx_1 = __Pyx_GetItemInt(__pyx_v_rowDict, __pyx_v_rownum, sizeof(int), PyInt_FromLong); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2938 | + __pyx_1 = __Pyx_GetItemInt(__pyx_v_rowDict, __pyx_v_rownum, sizeof(int), PyInt_FromLong); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2939 | __Pyx_GOTREF(__pyx_1); |
2940 | - __pyx_t_5 = PyObject_GetAttr(__pyx_1, __pyx_kp_keys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2941 | - __Pyx_GOTREF(__pyx_t_5); |
2942 | + __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_keys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2943 | + __Pyx_GOTREF(__pyx_t_1); |
2944 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
2945 | - __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2946 | - __Pyx_GOTREF(__pyx_t_6); |
2947 | - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; |
2948 | - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2949 | - __Pyx_GOTREF(((PyObject *)__pyx_t_5)); |
2950 | - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); |
2951 | - __Pyx_GIVEREF(__pyx_t_6); |
2952 | - __pyx_t_6 = 0; |
2953 | - __pyx_t_6 = PyObject_Call(__pyx_builtin_sorted, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2954 | - __Pyx_GOTREF(__pyx_t_6); |
2955 | - __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; |
2956 | - if (PyList_CheckExact(__pyx_t_6) || PyTuple_CheckExact(__pyx_t_6)) { |
2957 | - __pyx_t_3 = 0; __pyx_t_5 = __pyx_t_6; __Pyx_INCREF(__pyx_t_5); |
2958 | + __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2959 | + __Pyx_GOTREF(__pyx_t_4); |
2960 | + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
2961 | + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2962 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
2963 | + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); |
2964 | + __Pyx_GIVEREF(__pyx_t_4); |
2965 | + __pyx_t_4 = 0; |
2966 | + __pyx_t_4 = PyObject_Call(__pyx_builtin_sorted, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2967 | + __Pyx_GOTREF(__pyx_t_4); |
2968 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
2969 | + if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) { |
2970 | + __pyx_t_12 = 0; __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1); |
2971 | } else { |
2972 | - __pyx_t_3 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2973 | - __Pyx_GOTREF(__pyx_t_5); |
2974 | + __pyx_t_12 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2975 | + __Pyx_GOTREF(__pyx_t_1); |
2976 | } |
2977 | - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; |
2978 | + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
2979 | for (;;) { |
2980 | - if (likely(PyList_CheckExact(__pyx_t_5))) { |
2981 | - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_5)) break; |
2982 | - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; |
2983 | - } else if (likely(PyTuple_CheckExact(__pyx_t_5))) { |
2984 | - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_5)) break; |
2985 | - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_3); __Pyx_INCREF(__pyx_t_6); __pyx_t_3++; |
2986 | + if (likely(PyList_CheckExact(__pyx_t_1))) { |
2987 | + if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_1)) break; |
2988 | + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_4); __pyx_t_12++; |
2989 | + } else if (likely(PyTuple_CheckExact(__pyx_t_1))) { |
2990 | + if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_1)) break; |
2991 | + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_4); __pyx_t_12++; |
2992 | } else { |
2993 | - __pyx_t_6 = PyIter_Next(__pyx_t_5); |
2994 | - if (!__pyx_t_6) { |
2995 | - if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2996 | + __pyx_t_4 = PyIter_Next(__pyx_t_1); |
2997 | + if (!__pyx_t_4) { |
2998 | + if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
2999 | break; |
3000 | } |
3001 | - __Pyx_GOTREF(__pyx_t_6); |
3002 | + __Pyx_GOTREF(__pyx_t_4); |
3003 | } |
3004 | - __pyx_t_8 = __Pyx_PyInt_AsInt(__pyx_t_6); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3005 | - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; |
3006 | - __pyx_v_colk = __pyx_t_8; |
3007 | + __pyx_t_13 = __Pyx_PyInt_AsInt(__pyx_t_4); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3008 | + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
3009 | + __pyx_v_colk = __pyx_t_13; |
3010 | |
3011 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":189 |
3012 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":154 |
3013 | * if row_len == 0: continue |
3014 | * for colk in sorted(rowDict[rownum].keys()): |
3015 | - * val = float(rowDict[rownum][colk]) # <<<<<<<<<<<<<< |
3016 | - * if self.row_factors is not None: |
3017 | - * val /= sqrt(self.row_factors[rownum]) |
3018 | + * val = float(rowDict[rownum][colk]) * row_factors[rownum] # <<<<<<<<<<<<<< |
3019 | + * self.setValue(index, colk, val) |
3020 | + * index += 1 |
3021 | */ |
3022 | - __pyx_1 = __Pyx_GetItemInt(__pyx_v_rowDict, __pyx_v_rownum, sizeof(int), PyInt_FromLong); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3023 | + __pyx_2 = __Pyx_GetItemInt(__pyx_v_rowDict, __pyx_v_rownum, sizeof(int), PyInt_FromLong); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3024 | + __Pyx_GOTREF(__pyx_2); |
3025 | + __pyx_1 = __Pyx_GetItemInt(__pyx_2, __pyx_v_colk, sizeof(int), PyInt_FromLong); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3026 | __Pyx_GOTREF(__pyx_1); |
3027 | - __pyx_2 = __Pyx_GetItemInt(__pyx_1, __pyx_v_colk, sizeof(int), PyInt_FromLong); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3028 | - __Pyx_GOTREF(__pyx_2); |
3029 | - __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3030 | - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3031 | - __Pyx_GOTREF(((PyObject *)__pyx_t_6)); |
3032 | - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_2); |
3033 | - __Pyx_GIVEREF(__pyx_2); |
3034 | - __pyx_2 = 0; |
3035 | - __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)&PyFloat_Type)), ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3036 | - __Pyx_GOTREF(__pyx_t_1); |
3037 | - __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; |
3038 | - __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3039 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
3040 | - __pyx_v_val = __pyx_t_9; |
3041 | + __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
3042 | + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3043 | + __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
3044 | + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_1); |
3045 | + __Pyx_GIVEREF(__pyx_1); |
3046 | + __pyx_1 = 0; |
3047 | + __pyx_t_11 = PyObject_Call(((PyObject *)((PyObject*)&PyFloat_Type)), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3048 | + __Pyx_GOTREF(__pyx_t_11); |
3049 | + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; |
3050 | + __pyx_t_13 = __pyx_v_rownum; |
3051 | + __pyx_t_14 = -1; |
3052 | + if (__pyx_t_13 < 0) { |
3053 | + __pyx_t_13 += __pyx_bshape_0_row_factors; |
3054 | + if (unlikely(__pyx_t_13 < 0)) __pyx_t_14 = 0; |
3055 | + } else if (unlikely(__pyx_t_13 >= __pyx_bshape_0_row_factors)) __pyx_t_14 = 0; |
3056 | + if (unlikely(__pyx_t_14 != -1)) { |
3057 | + __Pyx_RaiseBufferIndexError(__pyx_t_14); |
3058 | + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3059 | + } |
3060 | + __pyx_t_4 = PyFloat_FromDouble((*__Pyx_BufPtrStrided1d(__pyx_t_6svdlib_7_svdlib_DTYPE_t *, __pyx_bstruct_row_factors.buf, __pyx_t_13, __pyx_bstride_0_row_factors))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3061 | + __Pyx_GOTREF(__pyx_t_4); |
3062 | + __pyx_t_10 = PyNumber_Multiply(__pyx_t_11, __pyx_t_4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3063 | + __Pyx_GOTREF(__pyx_t_10); |
3064 | + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; |
3065 | + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
3066 | + __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3067 | + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; |
3068 | + __pyx_v_val = __pyx_t_15; |
3069 | |
3070 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":190 |
3071 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":155 |
3072 | * for colk in sorted(rowDict[rownum].keys()): |
3073 | - * val = float(rowDict[rownum][colk]) |
3074 | - * if self.row_factors is not None: # <<<<<<<<<<<<<< |
3075 | - * val /= sqrt(self.row_factors[rownum]) |
3076 | - * self.setValue(index, colk, val) |
3077 | - */ |
3078 | - __pyx_t_7 = (__pyx_v_self->row_factors != Py_None); |
3079 | - if (__pyx_t_7) { |
3080 | - |
3081 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":191 |
3082 | - * val = float(rowDict[rownum][colk]) |
3083 | - * if self.row_factors is not None: |
3084 | - * val /= sqrt(self.row_factors[rownum]) # <<<<<<<<<<<<<< |
3085 | - * self.setValue(index, colk, val) |
3086 | - * index += 1 |
3087 | - */ |
3088 | - __pyx_1 = __Pyx_GetItemInt(__pyx_v_self->row_factors, __pyx_v_rownum, sizeof(int), PyInt_FromLong); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3089 | - __Pyx_GOTREF(__pyx_1); |
3090 | - __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_1); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3091 | - __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3092 | - __pyx_v_val /= sqrt(__pyx_t_10); |
3093 | - goto __pyx_L8; |
3094 | - } |
3095 | - __pyx_L8:; |
3096 | - |
3097 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":192 |
3098 | - * if self.row_factors is not None: |
3099 | - * val /= sqrt(self.row_factors[rownum]) |
3100 | + * val = float(rowDict[rownum][colk]) * row_factors[rownum] |
3101 | * self.setValue(index, colk, val) # <<<<<<<<<<<<<< |
3102 | * index += 1 |
3103 | - * |
3104 | + * # Transposed offset vectors. |
3105 | */ |
3106 | ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->setValue(__pyx_v_self, __pyx_v_index, __pyx_v_colk, __pyx_v_val); |
3107 | |
3108 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":193 |
3109 | - * val /= sqrt(self.row_factors[rownum]) |
3110 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":156 |
3111 | + * val = float(rowDict[rownum][colk]) * row_factors[rownum] |
3112 | * self.setValue(index, colk, val) |
3113 | * index += 1 # <<<<<<<<<<<<<< |
3114 | - * |
3115 | - * |
3116 | + * # Transposed offset vectors. |
3117 | + * if self.offset_for_row is not None: |
3118 | */ |
3119 | __pyx_v_index += 1; |
3120 | } |
3121 | - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; |
3122 | - __pyx_L3_continue:; |
3123 | - } |
3124 | + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
3125 | + __pyx_L4_continue:; |
3126 | + } |
3127 | + |
3128 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":158 |
3129 | + * index += 1 |
3130 | + * # Transposed offset vectors. |
3131 | + * if self.offset_for_row is not None: # <<<<<<<<<<<<<< |
3132 | + * self.cmatrix.offset_for_col = self.toVector(self.offset_for_row) |
3133 | + * if self.offset_for_col is not None: |
3134 | + */ |
3135 | + __pyx_t_3 = (__pyx_v_self->offset_for_row != Py_None); |
3136 | + if (__pyx_t_3) { |
3137 | + |
3138 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":159 |
3139 | + * # Transposed offset vectors. |
3140 | + * if self.offset_for_row is not None: |
3141 | + * self.cmatrix.offset_for_col = self.toVector(self.offset_for_row) # <<<<<<<<<<<<<< |
3142 | + * if self.offset_for_col is not None: |
3143 | + * self.cmatrix.offset_for_row = self.toVector(self.offset_for_col) |
3144 | + */ |
3145 | + __pyx_v_self->cmatrix->offset_for_col = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->toVector(__pyx_v_self, __pyx_v_self->offset_for_row); |
3146 | + goto __pyx_L9; |
3147 | + } |
3148 | + __pyx_L9:; |
3149 | + |
3150 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":160 |
3151 | + * if self.offset_for_row is not None: |
3152 | + * self.cmatrix.offset_for_col = self.toVector(self.offset_for_row) |
3153 | + * if self.offset_for_col is not None: # <<<<<<<<<<<<<< |
3154 | + * self.cmatrix.offset_for_row = self.toVector(self.offset_for_col) |
3155 | + * |
3156 | + */ |
3157 | + __pyx_t_3 = (__pyx_v_self->offset_for_col != Py_None); |
3158 | + if (__pyx_t_3) { |
3159 | + |
3160 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":161 |
3161 | + * self.cmatrix.offset_for_col = self.toVector(self.offset_for_row) |
3162 | + * if self.offset_for_col is not None: |
3163 | + * self.cmatrix.offset_for_row = self.toVector(self.offset_for_col) # <<<<<<<<<<<<<< |
3164 | + * |
3165 | + * |
3166 | + */ |
3167 | + __pyx_v_self->cmatrix->offset_for_row = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self->__pyx_vtab)->toVector(__pyx_v_self, __pyx_v_self->offset_for_col); |
3168 | + goto __pyx_L10; |
3169 | + } |
3170 | + __pyx_L10:; |
3171 | |
3172 | __pyx_r = Py_None; __Pyx_INCREF(Py_None); |
3173 | goto __pyx_L0; |
3174 | @@ -2027,33 +2628,82 @@ |
3175 | __Pyx_XDECREF(__pyx_1); |
3176 | __Pyx_XDECREF(__pyx_2); |
3177 | __Pyx_XDECREF(__pyx_t_1); |
3178 | + __Pyx_XDECREF(__pyx_t_2); |
3179 | __Pyx_XDECREF(__pyx_t_4); |
3180 | - __Pyx_XDECREF(__pyx_t_5); |
3181 | - __Pyx_XDECREF(__pyx_t_6); |
3182 | + __Pyx_XDECREF(__pyx_t_10); |
3183 | + __Pyx_XDECREF(__pyx_t_11); |
3184 | + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; |
3185 | + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); |
3186 | + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_row_factors); |
3187 | + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} |
3188 | __Pyx_AddTraceback("svdlib._svdlib.CSCMatrix.dictPack"); |
3189 | __pyx_r = 0; |
3190 | + goto __pyx_L2; |
3191 | __pyx_L0:; |
3192 | + __Pyx_SafeReleaseBuffer(&__pyx_bstruct_row_factors); |
3193 | + __pyx_L2:; |
3194 | + __Pyx_DECREF((PyObject *)__pyx_v_row_factors); |
3195 | __Pyx_XDECREF(__pyx_v_rowDict); |
3196 | __Pyx_XGIVEREF(__pyx_r); |
3197 | __Pyx_FinishRefcountContext(); |
3198 | return __pyx_r; |
3199 | } |
3200 | |
3201 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":173 |
3202 | - * index += 1 |
3203 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":132 |
3204 | + * return temp |
3205 | * |
3206 | - * cpdef dictPack(self): # <<<<<<<<<<<<<< |
3207 | - * self.cmatrix = svdNewSMat(self.cols, self.rows, self.nonZero) |
3208 | - * self.transposed = 1 |
3209 | + * cpdef dictPack(self, row_norms=None): # <<<<<<<<<<<<<< |
3210 | + * cdef np.ndarray[DTYPE_t, ndim=1] row_factors # holds row _multiplication_ factors, possibly just 1. |
3211 | + * if row_norms is None: |
3212 | */ |
3213 | |
3214 | -static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_dictPack(PyObject *__pyx_v_self, PyObject *unused); /*proto*/ |
3215 | -static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_dictPack(PyObject *__pyx_v_self, PyObject *unused) { |
3216 | +static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_dictPack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ |
3217 | +static PyObject *__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_dictPack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { |
3218 | + PyObject *__pyx_v_row_norms = 0; |
3219 | PyObject *__pyx_r = NULL; |
3220 | + struct __pyx_opt_args_6svdlib_7_svdlib_9CSCMatrix_dictPack __pyx_1; |
3221 | PyObject *__pyx_t_1 = NULL; |
3222 | + static PyObject **__pyx_pyargnames[] = {&__pyx_kp_row_norms,0}; |
3223 | __Pyx_SetupRefcountContext("dictPack"); |
3224 | + if (unlikely(__pyx_kwds)) { |
3225 | + Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); |
3226 | + PyObject* values[1] = {0}; |
3227 | + values[0] = Py_None; |
3228 | + switch (PyTuple_GET_SIZE(__pyx_args)) { |
3229 | + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); |
3230 | + case 0: break; |
3231 | + default: goto __pyx_L5_argtuple_error; |
3232 | + } |
3233 | + switch (PyTuple_GET_SIZE(__pyx_args)) { |
3234 | + case 0: |
3235 | + if (kw_args > 1) { |
3236 | + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_row_norms); |
3237 | + if (unlikely(value)) { values[0] = value; kw_args--; } |
3238 | + } |
3239 | + } |
3240 | + if (unlikely(kw_args > 0)) { |
3241 | + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "dictPack") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3242 | + } |
3243 | + __pyx_v_row_norms = values[0]; |
3244 | + } else { |
3245 | + __pyx_v_row_norms = Py_None; |
3246 | + switch (PyTuple_GET_SIZE(__pyx_args)) { |
3247 | + case 1: __pyx_v_row_norms = PyTuple_GET_ITEM(__pyx_args, 0); |
3248 | + case 0: break; |
3249 | + default: goto __pyx_L5_argtuple_error; |
3250 | + } |
3251 | + } |
3252 | + goto __pyx_L4_argument_unpacking_done; |
3253 | + __pyx_L5_argtuple_error:; |
3254 | + __Pyx_RaiseArgtupleInvalid("dictPack", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3255 | + __pyx_L3_error:; |
3256 | + __Pyx_AddTraceback("svdlib._svdlib.CSCMatrix.dictPack"); |
3257 | + return NULL; |
3258 | + __pyx_L4_argument_unpacking_done:; |
3259 | __Pyx_XDECREF(__pyx_r); |
3260 | - __pyx_t_1 = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->__pyx_vtab)->dictPack(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self), 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3261 | + __pyx_1.__pyx_n = 1; |
3262 | + __pyx_1.row_norms = __pyx_v_row_norms; |
3263 | + __pyx_t_1 = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->__pyx_vtab)->dictPack(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self), 1, &__pyx_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3264 | __Pyx_GOTREF(__pyx_t_1); |
3265 | __pyx_r = __pyx_t_1; |
3266 | __pyx_t_1 = 0; |
3267 | @@ -2071,7 +2721,7 @@ |
3268 | return __pyx_r; |
3269 | } |
3270 | |
3271 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":196 |
3272 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":164 |
3273 | * |
3274 | * |
3275 | * def __repr__(self): # <<<<<<<<<<<<<< |
3276 | @@ -2084,7 +2734,7 @@ |
3277 | PyObject *__pyx_r = NULL; |
3278 | __Pyx_SetupRefcountContext("__repr__"); |
3279 | |
3280 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":197 |
3281 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":165 |
3282 | * |
3283 | * def __repr__(self): |
3284 | * return u'<CSCMatrix>' # <<<<<<<<<<<<<< |
3285 | @@ -2092,8 +2742,8 @@ |
3286 | * def __dealloc__(self): |
3287 | */ |
3288 | __Pyx_XDECREF(__pyx_r); |
3289 | - __Pyx_INCREF(((PyObject *)__pyx_kp_35)); |
3290 | - __pyx_r = ((PyObject *)__pyx_kp_35); |
3291 | + __Pyx_INCREF(((PyObject *)__pyx_kp_36)); |
3292 | + __pyx_r = ((PyObject *)__pyx_kp_36); |
3293 | goto __pyx_L0; |
3294 | |
3295 | __pyx_r = Py_None; __Pyx_INCREF(Py_None); |
3296 | @@ -2103,7 +2753,7 @@ |
3297 | return __pyx_r; |
3298 | } |
3299 | |
3300 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":199 |
3301 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":167 |
3302 | * return u'<CSCMatrix>' |
3303 | * |
3304 | * def __dealloc__(self): # <<<<<<<<<<<<<< |
3305 | @@ -2115,7 +2765,7 @@ |
3306 | static void __pyx_pf_6svdlib_7_svdlib_9CSCMatrix___dealloc__(PyObject *__pyx_v_self) { |
3307 | __Pyx_SetupRefcountContext("__dealloc__"); |
3308 | |
3309 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":200 |
3310 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":168 |
3311 | * |
3312 | * def __dealloc__(self): |
3313 | * svdFreeSMat(self.cmatrix) # <<<<<<<<<<<<<< |
3314 | @@ -2127,7 +2777,7 @@ |
3315 | __Pyx_FinishRefcountContext(); |
3316 | } |
3317 | |
3318 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":202 |
3319 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":170 |
3320 | * svdFreeSMat(self.cmatrix) |
3321 | * |
3322 | * cdef void setColumnSize(self, int col, int size): # <<<<<<<<<<<<<< |
3323 | @@ -2143,7 +2793,7 @@ |
3324 | PyObject *__pyx_t_4 = NULL; |
3325 | __Pyx_SetupRefcountContext("setColumnSize"); |
3326 | |
3327 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":203 |
3328 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":171 |
3329 | * |
3330 | * cdef void setColumnSize(self, int col, int size): |
3331 | * if size == 0: # <<<<<<<<<<<<<< |
3332 | @@ -2153,29 +2803,29 @@ |
3333 | __pyx_t_1 = (__pyx_v_size == 0); |
3334 | if (__pyx_t_1) { |
3335 | |
3336 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":204 |
3337 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":172 |
3338 | * cdef void setColumnSize(self, int col, int size): |
3339 | * if size == 0: |
3340 | * warnings.warn('Column %d is empty' % col) # <<<<<<<<<<<<<< |
3341 | * self.cmatrix[0].pointr[0] = 0 |
3342 | * self.cmatrix.pointr[col+1] = self.cmatrix.pointr[col] + size |
3343 | */ |
3344 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_warnings); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3345 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_warnings); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3346 | __Pyx_GOTREF(__pyx_1); |
3347 | - __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_warn); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3348 | + __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_warn); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3349 | __Pyx_GOTREF(__pyx_t_2); |
3350 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3351 | - __pyx_t_3 = PyInt_FromLong(__pyx_v_col); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3352 | + __pyx_t_3 = PyInt_FromLong(__pyx_v_col); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3353 | __Pyx_GOTREF(__pyx_t_3); |
3354 | - __pyx_t_4 = PyNumber_Remainder(__pyx_kp_36, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3355 | + __pyx_t_4 = PyNumber_Remainder(__pyx_kp_37, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3356 | __Pyx_GOTREF(__pyx_t_4); |
3357 | __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
3358 | - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3359 | + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3360 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
3361 | PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); |
3362 | __Pyx_GIVEREF(__pyx_t_4); |
3363 | __pyx_t_4 = 0; |
3364 | - __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3365 | + __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3366 | __Pyx_GOTREF(__pyx_t_4); |
3367 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
3368 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
3369 | @@ -2184,7 +2834,7 @@ |
3370 | } |
3371 | __pyx_L3:; |
3372 | |
3373 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":205 |
3374 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":173 |
3375 | * if size == 0: |
3376 | * warnings.warn('Column %d is empty' % col) |
3377 | * self.cmatrix[0].pointr[0] = 0 # <<<<<<<<<<<<<< |
3378 | @@ -2193,12 +2843,12 @@ |
3379 | */ |
3380 | ((__pyx_v_self->cmatrix[0]).pointr[0]) = 0; |
3381 | |
3382 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":206 |
3383 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":174 |
3384 | * warnings.warn('Column %d is empty' % col) |
3385 | * self.cmatrix[0].pointr[0] = 0 |
3386 | * self.cmatrix.pointr[col+1] = self.cmatrix.pointr[col] + size # <<<<<<<<<<<<<< |
3387 | * |
3388 | - * cdef void setValue(self, int index, int rowind, float value): |
3389 | + * cdef void setValue(self, int index, int rowind, double value): |
3390 | */ |
3391 | (__pyx_v_self->cmatrix->pointr[(__pyx_v_col + 1)]) = ((__pyx_v_self->cmatrix->pointr[__pyx_v_col]) + __pyx_v_size); |
3392 | |
3393 | @@ -2213,15 +2863,15 @@ |
3394 | __Pyx_FinishRefcountContext(); |
3395 | } |
3396 | |
3397 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":208 |
3398 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":176 |
3399 | * self.cmatrix.pointr[col+1] = self.cmatrix.pointr[col] + size |
3400 | * |
3401 | - * cdef void setValue(self, int index, int rowind, float value): # <<<<<<<<<<<<<< |
3402 | + * cdef void setValue(self, int index, int rowind, double value): # <<<<<<<<<<<<<< |
3403 | * if value == 0: |
3404 | * warnings.warn('Matrix has zero value (row %d, index %d)' % (rowind, index)) |
3405 | */ |
3406 | |
3407 | -static void __pyx_f_6svdlib_7_svdlib_9CSCMatrix_setValue(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *__pyx_v_self, int __pyx_v_index, int __pyx_v_rowind, float __pyx_v_value) { |
3408 | +static void __pyx_f_6svdlib_7_svdlib_9CSCMatrix_setValue(struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *__pyx_v_self, int __pyx_v_index, int __pyx_v_rowind, double __pyx_v_value) { |
3409 | PyObject *__pyx_1 = 0; |
3410 | int __pyx_t_1; |
3411 | PyObject *__pyx_t_2 = NULL; |
3412 | @@ -2230,9 +2880,9 @@ |
3413 | PyObject *__pyx_t_5 = NULL; |
3414 | __Pyx_SetupRefcountContext("setValue"); |
3415 | |
3416 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":209 |
3417 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":177 |
3418 | * |
3419 | - * cdef void setValue(self, int index, int rowind, float value): |
3420 | + * cdef void setValue(self, int index, int rowind, double value): |
3421 | * if value == 0: # <<<<<<<<<<<<<< |
3422 | * warnings.warn('Matrix has zero value (row %d, index %d)' % (rowind, index)) |
3423 | * self.cmatrix.rowind[index] = rowind |
3424 | @@ -2240,23 +2890,23 @@ |
3425 | __pyx_t_1 = (__pyx_v_value == 0); |
3426 | if (__pyx_t_1) { |
3427 | |
3428 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":210 |
3429 | - * cdef void setValue(self, int index, int rowind, float value): |
3430 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":178 |
3431 | + * cdef void setValue(self, int index, int rowind, double value): |
3432 | * if value == 0: |
3433 | * warnings.warn('Matrix has zero value (row %d, index %d)' % (rowind, index)) # <<<<<<<<<<<<<< |
3434 | * self.cmatrix.rowind[index] = rowind |
3435 | * self.cmatrix.value[index] = value |
3436 | */ |
3437 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_warnings); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3438 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_warnings); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3439 | __Pyx_GOTREF(__pyx_1); |
3440 | - __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_warn); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3441 | + __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_warn); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3442 | __Pyx_GOTREF(__pyx_t_2); |
3443 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3444 | - __pyx_t_3 = PyInt_FromLong(__pyx_v_rowind); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3445 | + __pyx_t_3 = PyInt_FromLong(__pyx_v_rowind); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3446 | __Pyx_GOTREF(__pyx_t_3); |
3447 | - __pyx_t_4 = PyInt_FromLong(__pyx_v_index); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3448 | + __pyx_t_4 = PyInt_FromLong(__pyx_v_index); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3449 | __Pyx_GOTREF(__pyx_t_4); |
3450 | - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3451 | + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3452 | __Pyx_GOTREF(((PyObject *)__pyx_t_5)); |
3453 | PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); |
3454 | __Pyx_GIVEREF(__pyx_t_3); |
3455 | @@ -2264,15 +2914,15 @@ |
3456 | __Pyx_GIVEREF(__pyx_t_4); |
3457 | __pyx_t_3 = 0; |
3458 | __pyx_t_4 = 0; |
3459 | - __pyx_t_4 = PyNumber_Remainder(__pyx_kp_37, ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3460 | + __pyx_t_4 = PyNumber_Remainder(__pyx_kp_38, ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3461 | __Pyx_GOTREF(__pyx_t_4); |
3462 | __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; |
3463 | - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3464 | + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3465 | __Pyx_GOTREF(((PyObject *)__pyx_t_5)); |
3466 | PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); |
3467 | __Pyx_GIVEREF(__pyx_t_4); |
3468 | __pyx_t_4 = 0; |
3469 | - __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3470 | + __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3471 | __Pyx_GOTREF(__pyx_t_4); |
3472 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
3473 | __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; |
3474 | @@ -2281,7 +2931,7 @@ |
3475 | } |
3476 | __pyx_L3:; |
3477 | |
3478 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":211 |
3479 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":179 |
3480 | * if value == 0: |
3481 | * warnings.warn('Matrix has zero value (row %d, index %d)' % (rowind, index)) |
3482 | * self.cmatrix.rowind[index] = rowind # <<<<<<<<<<<<<< |
3483 | @@ -2290,7 +2940,7 @@ |
3484 | */ |
3485 | (__pyx_v_self->cmatrix->rowind[__pyx_v_index]) = __pyx_v_rowind; |
3486 | |
3487 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":212 |
3488 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":180 |
3489 | * warnings.warn('Matrix has zero value (row %d, index %d)' % (rowind, index)) |
3490 | * self.cmatrix.rowind[index] = rowind |
3491 | * self.cmatrix.value[index] = value # <<<<<<<<<<<<<< |
3492 | @@ -2311,7 +2961,7 @@ |
3493 | __Pyx_FinishRefcountContext(); |
3494 | } |
3495 | |
3496 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":220 |
3497 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":188 |
3498 | * |
3499 | * |
3500 | * cpdef object svdA(self, int k): # <<<<<<<<<<<<<< |
3501 | @@ -2331,18 +2981,18 @@ |
3502 | if (unlikely(__pyx_skip_dispatch)) ; |
3503 | /* Check if overriden in Python */ |
3504 | else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) { |
3505 | - __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_kp_svdA); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3506 | + __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_self), __pyx_kp_svdA); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3507 | __Pyx_GOTREF(__pyx_1); |
3508 | if (!PyCFunction_Check(__pyx_1) || (PyCFunction_GET_FUNCTION(__pyx_1) != (void *)&__pyx_pf_6svdlib_7_svdlib_9CSCMatrix_svdA)) { |
3509 | __Pyx_XDECREF(__pyx_r); |
3510 | - __pyx_t_1 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3511 | + __pyx_t_1 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3512 | __Pyx_GOTREF(__pyx_t_1); |
3513 | - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3514 | + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3515 | __Pyx_GOTREF(((PyObject *)__pyx_t_2)); |
3516 | PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); |
3517 | __Pyx_GIVEREF(__pyx_t_1); |
3518 | __pyx_t_1 = 0; |
3519 | - __pyx_t_1 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3520 | + __pyx_t_1 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3521 | __Pyx_GOTREF(__pyx_t_1); |
3522 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3523 | __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; |
3524 | @@ -2353,7 +3003,7 @@ |
3525 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3526 | } |
3527 | |
3528 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":222 |
3529 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":190 |
3530 | * cpdef object svdA(self, int k): |
3531 | * cdef svdrec *svdrec |
3532 | * svdrec = svdLAS2A(self.cmatrix, k) # <<<<<<<<<<<<<< |
3533 | @@ -2362,7 +3012,7 @@ |
3534 | */ |
3535 | __pyx_v_svdrec = svdLAS2A(__pyx_v_self->cmatrix, __pyx_v_k); |
3536 | |
3537 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":223 |
3538 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":191 |
3539 | * cdef svdrec *svdrec |
3540 | * svdrec = svdLAS2A(self.cmatrix, k) |
3541 | * return wrapSVDrec(svdrec, self.transposed) # <<<<<<<<<<<<<< |
3542 | @@ -2370,7 +3020,7 @@ |
3543 | * @cython.boundscheck(False) |
3544 | */ |
3545 | __Pyx_XDECREF(__pyx_r); |
3546 | - __pyx_t_1 = wrapSVDrec(__pyx_v_svdrec, __pyx_v_self->transposed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3547 | + __pyx_t_1 = wrapSVDrec(__pyx_v_svdrec, __pyx_v_self->transposed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3548 | __Pyx_GOTREF(__pyx_t_1); |
3549 | __pyx_r = __pyx_t_1; |
3550 | __pyx_t_1 = 0; |
3551 | @@ -2390,7 +3040,7 @@ |
3552 | return __pyx_r; |
3553 | } |
3554 | |
3555 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":220 |
3556 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":188 |
3557 | * |
3558 | * |
3559 | * cpdef object svdA(self, int k): # <<<<<<<<<<<<<< |
3560 | @@ -2405,7 +3055,7 @@ |
3561 | PyObject *__pyx_t_1 = NULL; |
3562 | __Pyx_SetupRefcountContext("svdA"); |
3563 | assert(__pyx_arg_k); { |
3564 | - __pyx_v_k = __Pyx_PyInt_AsInt(__pyx_arg_k); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3565 | + __pyx_v_k = __Pyx_PyInt_AsInt(__pyx_arg_k); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3566 | } |
3567 | goto __pyx_L4_argument_unpacking_done; |
3568 | __pyx_L3_error:; |
3569 | @@ -2413,7 +3063,7 @@ |
3570 | return NULL; |
3571 | __pyx_L4_argument_unpacking_done:; |
3572 | __Pyx_XDECREF(__pyx_r); |
3573 | - __pyx_t_1 = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->__pyx_vtab)->svdA(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self), __pyx_v_k, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3574 | + __pyx_t_1 = ((struct __pyx_vtabstruct_6svdlib_7_svdlib_CSCMatrix *)((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->__pyx_vtab)->svdA(((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self), __pyx_v_k, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3575 | __Pyx_GOTREF(__pyx_t_1); |
3576 | __pyx_r = __pyx_t_1; |
3577 | __pyx_t_1 = 0; |
3578 | @@ -2431,7 +3081,7 @@ |
3579 | return __pyx_r; |
3580 | } |
3581 | |
3582 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":226 |
3583 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":194 |
3584 | * |
3585 | * @cython.boundscheck(False) |
3586 | * def isvd(self, int k=50, int niter=100, double lrate=.001): # <<<<<<<<<<<<<< |
3587 | @@ -2533,20 +3183,20 @@ |
3588 | } |
3589 | } |
3590 | if (unlikely(kw_args > 0)) { |
3591 | - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "isvd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3592 | + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "isvd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3593 | } |
3594 | if (values[0]) { |
3595 | - __pyx_v_k = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3596 | + __pyx_v_k = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3597 | } else { |
3598 | __pyx_v_k = 50; |
3599 | } |
3600 | if (values[1]) { |
3601 | - __pyx_v_niter = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_niter == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3602 | + __pyx_v_niter = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_niter == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3603 | } else { |
3604 | __pyx_v_niter = 100; |
3605 | } |
3606 | if (values[2]) { |
3607 | - __pyx_v_lrate = __pyx_PyFloat_AsDouble(values[2]); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3608 | + __pyx_v_lrate = __pyx_PyFloat_AsDouble(values[2]); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3609 | } else { |
3610 | __pyx_v_lrate = 0.001; |
3611 | } |
3612 | @@ -2555,16 +3205,16 @@ |
3613 | __pyx_v_niter = 100; |
3614 | __pyx_v_lrate = 0.001; |
3615 | switch (PyTuple_GET_SIZE(__pyx_args)) { |
3616 | - case 3: __pyx_v_lrate = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 2)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3617 | - case 2: __pyx_v_niter = __Pyx_PyInt_AsInt(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_niter == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3618 | - case 1: __pyx_v_k = __Pyx_PyInt_AsInt(PyTuple_GET_ITEM(__pyx_args, 0)); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3619 | + case 3: __pyx_v_lrate = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 2)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3620 | + case 2: __pyx_v_niter = __Pyx_PyInt_AsInt(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_niter == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3621 | + case 1: __pyx_v_k = __Pyx_PyInt_AsInt(PyTuple_GET_ITEM(__pyx_args, 0)); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3622 | case 0: break; |
3623 | default: goto __pyx_L5_argtuple_error; |
3624 | } |
3625 | } |
3626 | goto __pyx_L4_argument_unpacking_done; |
3627 | __pyx_L5_argtuple_error:; |
3628 | - __Pyx_RaiseArgtupleInvalid("isvd", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3629 | + __Pyx_RaiseArgtupleInvalid("isvd", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
3630 | __pyx_L3_error:; |
3631 | __Pyx_AddTraceback("svdlib._svdlib.CSCMatrix.isvd"); |
3632 | return NULL; |
3633 | @@ -2578,29 +3228,29 @@ |
3634 | __pyx_bstruct_u.buf = NULL; |
3635 | __pyx_bstruct_v.buf = NULL; |
3636 | |
3637 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":227 |
3638 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":195 |
3639 | * @cython.boundscheck(False) |
3640 | * def isvd(self, int k=50, int niter=100, double lrate=.001): |
3641 | * from csc.divisi.tensor import DenseTensor # <<<<<<<<<<<<<< |
3642 | * cdef smat* A = self.cmatrix |
3643 | * print "COMPUTING INCREMENTAL SVD" |
3644 | */ |
3645 | - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3646 | + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3647 | __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
3648 | __Pyx_INCREF(__pyx_kp_DenseTensor); |
3649 | PyList_SET_ITEM(__pyx_t_1, 0, __pyx_kp_DenseTensor); |
3650 | __Pyx_GIVEREF(__pyx_kp_DenseTensor); |
3651 | - __pyx_1 = __Pyx_Import(__pyx_kp_38, ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3652 | + __pyx_1 = __Pyx_Import(__pyx_kp_39, ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3653 | __Pyx_GOTREF(__pyx_1); |
3654 | __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
3655 | - __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_DenseTensor); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3656 | + __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_DenseTensor); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3657 | __Pyx_GOTREF(__pyx_2); |
3658 | __Pyx_DECREF(__pyx_v_DenseTensor); |
3659 | __pyx_v_DenseTensor = __pyx_2; |
3660 | __pyx_2 = 0; |
3661 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3662 | |
3663 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":228 |
3664 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":196 |
3665 | * def isvd(self, int k=50, int niter=100, double lrate=.001): |
3666 | * from csc.divisi.tensor import DenseTensor |
3667 | * cdef smat* A = self.cmatrix # <<<<<<<<<<<<<< |
3668 | @@ -2609,29 +3259,29 @@ |
3669 | */ |
3670 | __pyx_v_A = ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->cmatrix; |
3671 | |
3672 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":229 |
3673 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":197 |
3674 | * from csc.divisi.tensor import DenseTensor |
3675 | * cdef smat* A = self.cmatrix |
3676 | * print "COMPUTING INCREMENTAL SVD" # <<<<<<<<<<<<<< |
3677 | * print "ROWS: %d, COLUMNS: %d, VALS: %d" % (A.rows, A.cols, A.vals) |
3678 | * print "K: %d, LEARNING_RATE: %r, ITERATIONS: %d" % (k, lrate, niter) |
3679 | */ |
3680 | - if (__Pyx_PrintOne(__pyx_kp_39) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3681 | + if (__Pyx_PrintOne(__pyx_kp_40) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3682 | |
3683 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":230 |
3684 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":198 |
3685 | * cdef smat* A = self.cmatrix |
3686 | * print "COMPUTING INCREMENTAL SVD" |
3687 | * print "ROWS: %d, COLUMNS: %d, VALS: %d" % (A.rows, A.cols, A.vals) # <<<<<<<<<<<<<< |
3688 | * print "K: %d, LEARNING_RATE: %r, ITERATIONS: %d" % (k, lrate, niter) |
3689 | * |
3690 | */ |
3691 | - __pyx_t_1 = PyInt_FromLong(__pyx_v_A->rows); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3692 | + __pyx_t_1 = PyInt_FromLong(__pyx_v_A->rows); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3693 | __Pyx_GOTREF(__pyx_t_1); |
3694 | - __pyx_t_2 = PyInt_FromLong(__pyx_v_A->cols); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3695 | + __pyx_t_2 = PyInt_FromLong(__pyx_v_A->cols); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3696 | __Pyx_GOTREF(__pyx_t_2); |
3697 | - __pyx_t_3 = PyInt_FromLong(__pyx_v_A->vals); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3698 | + __pyx_t_3 = PyInt_FromLong(__pyx_v_A->vals); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3699 | __Pyx_GOTREF(__pyx_t_3); |
3700 | - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3701 | + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3702 | __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
3703 | PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); |
3704 | __Pyx_GIVEREF(__pyx_t_1); |
3705 | @@ -2642,26 +3292,26 @@ |
3706 | __pyx_t_1 = 0; |
3707 | __pyx_t_2 = 0; |
3708 | __pyx_t_3 = 0; |
3709 | - __pyx_t_3 = PyNumber_Remainder(__pyx_kp_40, ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3710 | + __pyx_t_3 = PyNumber_Remainder(__pyx_kp_41, ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3711 | __Pyx_GOTREF(__pyx_t_3); |
3712 | __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; |
3713 | - if (__Pyx_PrintOne(__pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3714 | + if (__Pyx_PrintOne(__pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3715 | __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
3716 | |
3717 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":231 |
3718 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":199 |
3719 | * print "COMPUTING INCREMENTAL SVD" |
3720 | * print "ROWS: %d, COLUMNS: %d, VALS: %d" % (A.rows, A.cols, A.vals) |
3721 | * print "K: %d, LEARNING_RATE: %r, ITERATIONS: %d" % (k, lrate, niter) # <<<<<<<<<<<<<< |
3722 | * |
3723 | * cdef np.ndarray[DTYPE_t, ndim=2] u = np.add(np.zeros((A.rows, k), dtype=DTYPE), .001) |
3724 | */ |
3725 | - __pyx_t_3 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3726 | + __pyx_t_3 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3727 | __Pyx_GOTREF(__pyx_t_3); |
3728 | - __pyx_t_4 = PyFloat_FromDouble(__pyx_v_lrate); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3729 | + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_lrate); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3730 | __Pyx_GOTREF(__pyx_t_4); |
3731 | - __pyx_t_2 = PyInt_FromLong(__pyx_v_niter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3732 | + __pyx_t_2 = PyInt_FromLong(__pyx_v_niter); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3733 | __Pyx_GOTREF(__pyx_t_2); |
3734 | - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3735 | + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3736 | __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
3737 | PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); |
3738 | __Pyx_GIVEREF(__pyx_t_3); |
3739 | @@ -2672,34 +3322,34 @@ |
3740 | __pyx_t_3 = 0; |
3741 | __pyx_t_4 = 0; |
3742 | __pyx_t_2 = 0; |
3743 | - __pyx_t_2 = PyNumber_Remainder(__pyx_kp_41, ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3744 | + __pyx_t_2 = PyNumber_Remainder(__pyx_kp_42, ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3745 | __Pyx_GOTREF(__pyx_t_2); |
3746 | __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
3747 | - if (__Pyx_PrintOne(__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3748 | + if (__Pyx_PrintOne(__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3749 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
3750 | |
3751 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":233 |
3752 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":201 |
3753 | * print "K: %d, LEARNING_RATE: %r, ITERATIONS: %d" % (k, lrate, niter) |
3754 | * |
3755 | * cdef np.ndarray[DTYPE_t, ndim=2] u = np.add(np.zeros((A.rows, k), dtype=DTYPE), .001) # <<<<<<<<<<<<<< |
3756 | * cdef np.ndarray[DTYPE_t, ndim=2] v = np.add(np.zeros((A.cols, k), dtype=DTYPE), .001) |
3757 | * |
3758 | */ |
3759 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3760 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3761 | __Pyx_GOTREF(__pyx_1); |
3762 | - __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_add); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3763 | + __pyx_t_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_add); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3764 | __Pyx_GOTREF(__pyx_t_2); |
3765 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3766 | - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3767 | + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3768 | __Pyx_GOTREF(__pyx_2); |
3769 | - __pyx_t_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3770 | + __pyx_t_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3771 | __Pyx_GOTREF(__pyx_t_1); |
3772 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
3773 | - __pyx_t_4 = PyInt_FromLong(__pyx_v_A->rows); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3774 | + __pyx_t_4 = PyInt_FromLong(__pyx_v_A->rows); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3775 | __Pyx_GOTREF(__pyx_t_4); |
3776 | - __pyx_t_3 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3777 | + __pyx_t_3 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3778 | __Pyx_GOTREF(__pyx_t_3); |
3779 | - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3780 | + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3781 | __Pyx_GOTREF(((PyObject *)__pyx_t_5)); |
3782 | PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); |
3783 | __Pyx_GIVEREF(__pyx_t_4); |
3784 | @@ -2707,25 +3357,25 @@ |
3785 | __Pyx_GIVEREF(__pyx_t_3); |
3786 | __pyx_t_4 = 0; |
3787 | __pyx_t_3 = 0; |
3788 | - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3789 | + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3790 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
3791 | PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_5)); |
3792 | __Pyx_GIVEREF(((PyObject *)__pyx_t_5)); |
3793 | __pyx_t_5 = 0; |
3794 | - __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3795 | + __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3796 | __Pyx_GOTREF(((PyObject *)__pyx_1)); |
3797 | - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_DTYPE); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3798 | + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_DTYPE); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3799 | __Pyx_GOTREF(__pyx_2); |
3800 | - if (PyDict_SetItem(__pyx_1, __pyx_kp_dtype, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3801 | + if (PyDict_SetItem(__pyx_1, __pyx_kp_dtype, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3802 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
3803 | - __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3804 | + __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3805 | __Pyx_GOTREF(__pyx_t_5); |
3806 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
3807 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
3808 | __Pyx_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0; |
3809 | - __pyx_t_3 = PyFloat_FromDouble(0.001); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3810 | + __pyx_t_3 = PyFloat_FromDouble(0.001); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3811 | __Pyx_GOTREF(__pyx_t_3); |
3812 | - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3813 | + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3814 | __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
3815 | PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); |
3816 | __Pyx_GIVEREF(__pyx_t_5); |
3817 | @@ -2733,17 +3383,17 @@ |
3818 | __Pyx_GIVEREF(__pyx_t_3); |
3819 | __pyx_t_5 = 0; |
3820 | __pyx_t_3 = 0; |
3821 | - __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3822 | + __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3823 | __Pyx_GOTREF(__pyx_t_3); |
3824 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
3825 | __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
3826 | - if (!(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3827 | + if (!(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3828 | __pyx_t_6 = ((PyArrayObject *)__pyx_t_3); |
3829 | { |
3830 | __Pyx_BufFmt_StackElem __pyx_stack[1]; |
3831 | if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_u, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { |
3832 | __pyx_v_u = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_u.buf = NULL; |
3833 | - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3834 | + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3835 | } else {__pyx_bstride_0_u = __pyx_bstruct_u.strides[0]; __pyx_bstride_1_u = __pyx_bstruct_u.strides[1]; |
3836 | __pyx_bshape_0_u = __pyx_bstruct_u.shape[0]; __pyx_bshape_1_u = __pyx_bstruct_u.shape[1]; |
3837 | } |
3838 | @@ -2752,28 +3402,28 @@ |
3839 | __pyx_v_u = ((PyArrayObject *)__pyx_t_3); |
3840 | __pyx_t_3 = 0; |
3841 | |
3842 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":234 |
3843 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":202 |
3844 | * |
3845 | * cdef np.ndarray[DTYPE_t, ndim=2] u = np.add(np.zeros((A.rows, k), dtype=DTYPE), .001) |
3846 | * cdef np.ndarray[DTYPE_t, ndim=2] v = np.add(np.zeros((A.cols, k), dtype=DTYPE), .001) # <<<<<<<<<<<<<< |
3847 | * |
3848 | * # Maintain a cache of dot-products up to the current axis |
3849 | */ |
3850 | - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3851 | + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3852 | __Pyx_GOTREF(__pyx_2); |
3853 | - __pyx_t_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_add); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3854 | + __pyx_t_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_add); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3855 | __Pyx_GOTREF(__pyx_t_3); |
3856 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
3857 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3858 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3859 | __Pyx_GOTREF(__pyx_1); |
3860 | - __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3861 | + __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3862 | __Pyx_GOTREF(__pyx_t_1); |
3863 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3864 | - __pyx_t_2 = PyInt_FromLong(__pyx_v_A->cols); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3865 | + __pyx_t_2 = PyInt_FromLong(__pyx_v_A->cols); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3866 | __Pyx_GOTREF(__pyx_t_2); |
3867 | - __pyx_t_5 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3868 | + __pyx_t_5 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3869 | __Pyx_GOTREF(__pyx_t_5); |
3870 | - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3871 | + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3872 | __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
3873 | PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); |
3874 | __Pyx_GIVEREF(__pyx_t_2); |
3875 | @@ -2781,25 +3431,25 @@ |
3876 | __Pyx_GIVEREF(__pyx_t_5); |
3877 | __pyx_t_2 = 0; |
3878 | __pyx_t_5 = 0; |
3879 | - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3880 | + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3881 | __Pyx_GOTREF(((PyObject *)__pyx_t_5)); |
3882 | PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_4)); |
3883 | __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); |
3884 | __pyx_t_4 = 0; |
3885 | - __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3886 | + __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3887 | __Pyx_GOTREF(((PyObject *)__pyx_2)); |
3888 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_DTYPE); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3889 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_DTYPE); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3890 | __Pyx_GOTREF(__pyx_1); |
3891 | - if (PyDict_SetItem(__pyx_2, __pyx_kp_dtype, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3892 | + if (PyDict_SetItem(__pyx_2, __pyx_kp_dtype, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3893 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
3894 | - __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3895 | + __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_t_1, ((PyObject *)__pyx_t_5), ((PyObject *)__pyx_2)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3896 | __Pyx_GOTREF(__pyx_t_4); |
3897 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
3898 | __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0; |
3899 | __Pyx_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0; |
3900 | - __pyx_t_5 = PyFloat_FromDouble(0.001); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3901 | + __pyx_t_5 = PyFloat_FromDouble(0.001); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3902 | __Pyx_GOTREF(__pyx_t_5); |
3903 | - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3904 | + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3905 | __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
3906 | PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); |
3907 | __Pyx_GIVEREF(__pyx_t_4); |
3908 | @@ -2807,17 +3457,17 @@ |
3909 | __Pyx_GIVEREF(__pyx_t_5); |
3910 | __pyx_t_4 = 0; |
3911 | __pyx_t_5 = 0; |
3912 | - __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3913 | + __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3914 | __Pyx_GOTREF(__pyx_t_5); |
3915 | __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
3916 | __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
3917 | - if (!(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3918 | + if (!(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3919 | __pyx_t_7 = ((PyArrayObject *)__pyx_t_5); |
3920 | { |
3921 | __Pyx_BufFmt_StackElem __pyx_stack[1]; |
3922 | if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_v, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_6svdlib_7_svdlib_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { |
3923 | __pyx_v_v = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_v.buf = NULL; |
3924 | - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3925 | + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
3926 | } else {__pyx_bstride_0_v = __pyx_bstruct_v.strides[0]; __pyx_bstride_1_v = __pyx_bstruct_v.strides[1]; |
3927 | __pyx_bshape_0_v = __pyx_bstruct_v.shape[0]; __pyx_bshape_1_v = __pyx_bstruct_v.shape[1]; |
3928 | } |
3929 | @@ -2826,7 +3476,7 @@ |
3930 | __pyx_v_v = ((PyArrayObject *)__pyx_t_5); |
3931 | __pyx_t_5 = 0; |
3932 | |
3933 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":237 |
3934 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":205 |
3935 | * |
3936 | * # Maintain a cache of dot-products up to the current axis |
3937 | * cdef smat* predicted = svdNewSMat(A.rows, A.cols, A.vals) # <<<<<<<<<<<<<< |
3938 | @@ -2835,7 +3485,7 @@ |
3939 | */ |
3940 | __pyx_v_predicted = svdNewSMat(__pyx_v_A->rows, __pyx_v_A->cols, __pyx_v_A->vals); |
3941 | |
3942 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":246 |
3943 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":214 |
3944 | * # (This should be done with memcpy, but i'm not certain |
3945 | * # how to do that here) |
3946 | * for i in range(A.cols + 1): # <<<<<<<<<<<<<< |
3947 | @@ -2845,7 +3495,7 @@ |
3948 | for (__pyx_t_8 = 0; __pyx_t_8 < (__pyx_v_A->cols + 1); __pyx_t_8+=1) { |
3949 | __pyx_v_i = __pyx_t_8; |
3950 | |
3951 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":247 |
3952 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":215 |
3953 | * # how to do that here) |
3954 | * for i in range(A.cols + 1): |
3955 | * predicted.pointr[i] = A.pointr[i] # <<<<<<<<<<<<<< |
3956 | @@ -2855,7 +3505,7 @@ |
3957 | (__pyx_v_predicted->pointr[__pyx_v_i]) = (__pyx_v_A->pointr[__pyx_v_i]); |
3958 | } |
3959 | |
3960 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":249 |
3961 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":217 |
3962 | * predicted.pointr[i] = A.pointr[i] |
3963 | * |
3964 | * for i in range(A.vals): # <<<<<<<<<<<<<< |
3965 | @@ -2865,7 +3515,7 @@ |
3966 | for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_v_A->vals; __pyx_t_8+=1) { |
3967 | __pyx_v_i = __pyx_t_8; |
3968 | |
3969 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":250 |
3970 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":218 |
3971 | * |
3972 | * for i in range(A.vals): |
3973 | * predicted.rowind[i] = A.rowind[i] # <<<<<<<<<<<<<< |
3974 | @@ -2874,7 +3524,7 @@ |
3975 | */ |
3976 | (__pyx_v_predicted->rowind[__pyx_v_i]) = (__pyx_v_A->rowind[__pyx_v_i]); |
3977 | |
3978 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":251 |
3979 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":219 |
3980 | * for i in range(A.vals): |
3981 | * predicted.rowind[i] = A.rowind[i] |
3982 | * predicted.value[i] = 0 # <<<<<<<<<<<<<< |
3983 | @@ -2884,7 +3534,7 @@ |
3984 | (__pyx_v_predicted->value[__pyx_v_i]) = 0; |
3985 | } |
3986 | |
3987 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":253 |
3988 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":221 |
3989 | * predicted.value[i] = 0 |
3990 | * |
3991 | * for axis in range(k): # <<<<<<<<<<<<<< |
3992 | @@ -2894,7 +3544,7 @@ |
3993 | for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_v_k; __pyx_t_8+=1) { |
3994 | __pyx_v_axis = __pyx_t_8; |
3995 | |
3996 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":254 |
3997 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":222 |
3998 | * |
3999 | * for axis in range(k): |
4000 | * for i in range(niter): # <<<<<<<<<<<<<< |
4001 | @@ -2904,7 +3554,7 @@ |
4002 | for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_v_niter; __pyx_t_9+=1) { |
4003 | __pyx_v_i = __pyx_t_9; |
4004 | |
4005 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":256 |
4006 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":224 |
4007 | * for i in range(niter): |
4008 | * # Iterate over all values of the sparse matrix |
4009 | * for cur_col in range(A.cols): # <<<<<<<<<<<<<< |
4010 | @@ -2914,7 +3564,7 @@ |
4011 | for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_v_A->cols; __pyx_t_10+=1) { |
4012 | __pyx_v_cur_col = __pyx_t_10; |
4013 | |
4014 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":257 |
4015 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":225 |
4016 | * # Iterate over all values of the sparse matrix |
4017 | * for cur_col in range(A.cols): |
4018 | * col_index = A.pointr[cur_col] # <<<<<<<<<<<<<< |
4019 | @@ -2923,7 +3573,7 @@ |
4020 | */ |
4021 | __pyx_v_col_index = (__pyx_v_A->pointr[__pyx_v_cur_col]); |
4022 | |
4023 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":258 |
4024 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":226 |
4025 | * for cur_col in range(A.cols): |
4026 | * col_index = A.pointr[cur_col] |
4027 | * next_col_index = A.pointr[cur_col + 1] # <<<<<<<<<<<<<< |
4028 | @@ -2932,7 +3582,7 @@ |
4029 | */ |
4030 | __pyx_v_next_col_index = (__pyx_v_A->pointr[(__pyx_v_cur_col + 1)]); |
4031 | |
4032 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":259 |
4033 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":227 |
4034 | * col_index = A.pointr[cur_col] |
4035 | * next_col_index = A.pointr[cur_col + 1] |
4036 | * for value_index in range(col_index, next_col_index): # <<<<<<<<<<<<<< |
4037 | @@ -2942,7 +3592,7 @@ |
4038 | for (__pyx_t_11 = __pyx_v_col_index; __pyx_t_11 < __pyx_v_next_col_index; __pyx_t_11+=1) { |
4039 | __pyx_v_value_index = __pyx_t_11; |
4040 | |
4041 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":260 |
4042 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":228 |
4043 | * next_col_index = A.pointr[cur_col + 1] |
4044 | * for value_index in range(col_index, next_col_index): |
4045 | * cur_row = A.rowind[value_index] # <<<<<<<<<<<<<< |
4046 | @@ -2951,7 +3601,7 @@ |
4047 | */ |
4048 | __pyx_v_cur_row = (__pyx_v_A->rowind[__pyx_v_value_index]); |
4049 | |
4050 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":262 |
4051 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":230 |
4052 | * cur_row = A.rowind[value_index] |
4053 | * err = A.value[value_index] - (predicted.value[value_index] + |
4054 | * u[cur_row, axis] * v[cur_col, axis]) # <<<<<<<<<<<<<< |
4055 | @@ -2964,7 +3614,7 @@ |
4056 | __pyx_t_15 = __pyx_v_axis; |
4057 | __pyx_v_err = ((__pyx_v_A->value[__pyx_v_value_index]) - ((__pyx_v_predicted->value[__pyx_v_value_index]) + ((*__Pyx_BufPtrStrided2d(__pyx_t_6svdlib_7_svdlib_DTYPE_t *, __pyx_bstruct_u.buf, __pyx_t_12, __pyx_bstride_0_u, __pyx_t_13, __pyx_bstride_1_u)) * (*__Pyx_BufPtrStrided2d(__pyx_t_6svdlib_7_svdlib_DTYPE_t *, __pyx_bstruct_v.buf, __pyx_t_14, __pyx_bstride_0_v, __pyx_t_15, __pyx_bstride_1_v))))); |
4058 | |
4059 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":264 |
4060 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":232 |
4061 | * u[cur_row, axis] * v[cur_col, axis]) |
4062 | * |
4063 | * u_value = u[cur_row, axis] # <<<<<<<<<<<<<< |
4064 | @@ -2975,7 +3625,7 @@ |
4065 | __pyx_t_17 = __pyx_v_axis; |
4066 | __pyx_v_u_value = (*__Pyx_BufPtrStrided2d(__pyx_t_6svdlib_7_svdlib_DTYPE_t *, __pyx_bstruct_u.buf, __pyx_t_16, __pyx_bstride_0_u, __pyx_t_17, __pyx_bstride_1_u)); |
4067 | |
4068 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":265 |
4069 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":233 |
4070 | * |
4071 | * u_value = u[cur_row, axis] |
4072 | * u[cur_row, axis] += lrate * err * v[cur_col, axis] # <<<<<<<<<<<<<< |
4073 | @@ -2988,7 +3638,7 @@ |
4074 | __pyx_t_21 = __pyx_v_axis; |
4075 | *__Pyx_BufPtrStrided2d(__pyx_t_6svdlib_7_svdlib_DTYPE_t *, __pyx_bstruct_u.buf, __pyx_t_20, __pyx_bstride_0_u, __pyx_t_21, __pyx_bstride_1_u) += ((__pyx_v_lrate * __pyx_v_err) * (*__Pyx_BufPtrStrided2d(__pyx_t_6svdlib_7_svdlib_DTYPE_t *, __pyx_bstruct_v.buf, __pyx_t_18, __pyx_bstride_0_v, __pyx_t_19, __pyx_bstride_1_v))); |
4076 | |
4077 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":266 |
4078 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":234 |
4079 | * u_value = u[cur_row, axis] |
4080 | * u[cur_row, axis] += lrate * err * v[cur_col, axis] |
4081 | * v[cur_col, axis] += lrate * err * u_value # <<<<<<<<<<<<<< |
4082 | @@ -3002,7 +3652,7 @@ |
4083 | } |
4084 | } |
4085 | |
4086 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":269 |
4087 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":237 |
4088 | * |
4089 | * # Update cached dot-products |
4090 | * for cur_col in range(predicted.cols): # <<<<<<<<<<<<<< |
4091 | @@ -3012,7 +3662,7 @@ |
4092 | for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_v_predicted->cols; __pyx_t_9+=1) { |
4093 | __pyx_v_cur_col = __pyx_t_9; |
4094 | |
4095 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":270 |
4096 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":238 |
4097 | * # Update cached dot-products |
4098 | * for cur_col in range(predicted.cols): |
4099 | * col_index = predicted.pointr[cur_col] # <<<<<<<<<<<<<< |
4100 | @@ -3021,7 +3671,7 @@ |
4101 | */ |
4102 | __pyx_v_col_index = (__pyx_v_predicted->pointr[__pyx_v_cur_col]); |
4103 | |
4104 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":271 |
4105 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":239 |
4106 | * for cur_col in range(predicted.cols): |
4107 | * col_index = predicted.pointr[cur_col] |
4108 | * next_col_index = predicted.pointr[cur_col + 1] # <<<<<<<<<<<<<< |
4109 | @@ -3030,7 +3680,7 @@ |
4110 | */ |
4111 | __pyx_v_next_col_index = (__pyx_v_predicted->pointr[(__pyx_v_cur_col + 1)]); |
4112 | |
4113 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":272 |
4114 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":240 |
4115 | * col_index = predicted.pointr[cur_col] |
4116 | * next_col_index = predicted.pointr[cur_col + 1] |
4117 | * for value_index in range(col_index, next_col_index): # <<<<<<<<<<<<<< |
4118 | @@ -3040,7 +3690,7 @@ |
4119 | for (__pyx_t_10 = __pyx_v_col_index; __pyx_t_10 < __pyx_v_next_col_index; __pyx_t_10+=1) { |
4120 | __pyx_v_value_index = __pyx_t_10; |
4121 | |
4122 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":273 |
4123 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":241 |
4124 | * next_col_index = predicted.pointr[cur_col + 1] |
4125 | * for value_index in range(col_index, next_col_index): |
4126 | * cur_row = predicted.rowind[value_index] # <<<<<<<<<<<<<< |
4127 | @@ -3049,7 +3699,7 @@ |
4128 | */ |
4129 | __pyx_v_cur_row = (__pyx_v_predicted->rowind[__pyx_v_value_index]); |
4130 | |
4131 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":274 |
4132 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":242 |
4133 | * for value_index in range(col_index, next_col_index): |
4134 | * cur_row = predicted.rowind[value_index] |
4135 | * predicted.value[value_index] += u[cur_row, axis] * v[cur_col, axis] # <<<<<<<<<<<<<< |
4136 | @@ -3065,32 +3715,32 @@ |
4137 | } |
4138 | } |
4139 | |
4140 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":277 |
4141 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":245 |
4142 | * |
4143 | * # Factor out the svals from u and v |
4144 | * u_sigma = np.sqrt(np.add.reduce(np.multiply(u, u))) # <<<<<<<<<<<<<< |
4145 | * v_sigma = np.sqrt(np.add.reduce(np.multiply(v, v))) |
4146 | * |
4147 | */ |
4148 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4149 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4150 | __Pyx_GOTREF(__pyx_1); |
4151 | - __pyx_t_5 = PyObject_GetAttr(__pyx_1, __pyx_kp_sqrt); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4152 | + __pyx_t_5 = PyObject_GetAttr(__pyx_1, __pyx_kp_sqrt); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4153 | __Pyx_GOTREF(__pyx_t_5); |
4154 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
4155 | - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4156 | + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4157 | __Pyx_GOTREF(__pyx_2); |
4158 | - __pyx_t_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4159 | + __pyx_t_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_add); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4160 | __Pyx_GOTREF(__pyx_t_1); |
4161 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
4162 | - __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_kp_reduce); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4163 | + __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_kp_reduce); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4164 | __Pyx_GOTREF(__pyx_t_3); |
4165 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
4166 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4167 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4168 | __Pyx_GOTREF(__pyx_1); |
4169 | - __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_multiply); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4170 | + __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_multiply); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4171 | __Pyx_GOTREF(__pyx_t_1); |
4172 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
4173 | - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4174 | + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4175 | __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
4176 | __Pyx_INCREF(((PyObject *)__pyx_v_u)); |
4177 | PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_u)); |
4178 | @@ -3098,25 +3748,25 @@ |
4179 | __Pyx_INCREF(((PyObject *)__pyx_v_u)); |
4180 | PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_u)); |
4181 | __Pyx_GIVEREF(((PyObject *)__pyx_v_u)); |
4182 | - __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4183 | + __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4184 | __Pyx_GOTREF(__pyx_t_2); |
4185 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
4186 | __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; |
4187 | - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4188 | + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4189 | __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
4190 | PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); |
4191 | __Pyx_GIVEREF(__pyx_t_2); |
4192 | __pyx_t_2 = 0; |
4193 | - __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4194 | + __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4195 | __Pyx_GOTREF(__pyx_t_2); |
4196 | __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
4197 | __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; |
4198 | - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4199 | + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4200 | __Pyx_GOTREF(((PyObject *)__pyx_t_4)); |
4201 | PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); |
4202 | __Pyx_GIVEREF(__pyx_t_2); |
4203 | __pyx_t_2 = 0; |
4204 | - __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4205 | + __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4206 | __Pyx_GOTREF(__pyx_t_2); |
4207 | __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; |
4208 | __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; |
4209 | @@ -3124,32 +3774,32 @@ |
4210 | __pyx_v_u_sigma = __pyx_t_2; |
4211 | __pyx_t_2 = 0; |
4212 | |
4213 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":278 |
4214 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":246 |
4215 | * # Factor out the svals from u and v |
4216 | * u_sigma = np.sqrt(np.add.reduce(np.multiply(u, u))) |
4217 | * v_sigma = np.sqrt(np.add.reduce(np.multiply(v, v))) # <<<<<<<<<<<<<< |
4218 | * |
4219 | * u_tensor = DenseTensor(np.divide(u, u_sigma)) |
4220 | */ |
4221 | - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4222 | + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4223 | __Pyx_GOTREF(__pyx_2); |
4224 | - __pyx_t_2 = PyObject_GetAttr(__pyx_2, __pyx_kp_sqrt); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4225 | + __pyx_t_2 = PyObject_GetAttr(__pyx_2, __pyx_kp_sqrt); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4226 | __Pyx_GOTREF(__pyx_t_2); |
4227 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
4228 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4229 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4230 | __Pyx_GOTREF(__pyx_1); |
4231 | - __pyx_t_4 = PyObject_GetAttr(__pyx_1, __pyx_kp_add); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4232 | + __pyx_t_4 = PyObject_GetAttr(__pyx_1, __pyx_kp_add); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4233 | __Pyx_GOTREF(__pyx_t_4); |
4234 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
4235 | - __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_kp_reduce); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4236 | + __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_kp_reduce); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4237 | __Pyx_GOTREF(__pyx_t_5); |
4238 | __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
4239 | - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4240 | + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4241 | __Pyx_GOTREF(__pyx_2); |
4242 | - __pyx_t_4 = PyObject_GetAttr(__pyx_2, __pyx_kp_multiply); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4243 | + __pyx_t_4 = PyObject_GetAttr(__pyx_2, __pyx_kp_multiply); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4244 | __Pyx_GOTREF(__pyx_t_4); |
4245 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
4246 | - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4247 | + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4248 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
4249 | __Pyx_INCREF(((PyObject *)__pyx_v_v)); |
4250 | PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_v)); |
4251 | @@ -3157,25 +3807,25 @@ |
4252 | __Pyx_INCREF(((PyObject *)__pyx_v_v)); |
4253 | PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_v)); |
4254 | __Pyx_GIVEREF(((PyObject *)__pyx_v_v)); |
4255 | - __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4256 | + __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4257 | __Pyx_GOTREF(__pyx_t_1); |
4258 | __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; |
4259 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
4260 | - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4261 | + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4262 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
4263 | PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); |
4264 | __Pyx_GIVEREF(__pyx_t_1); |
4265 | __pyx_t_1 = 0; |
4266 | - __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4267 | + __pyx_t_1 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4268 | __Pyx_GOTREF(__pyx_t_1); |
4269 | __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; |
4270 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
4271 | - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4272 | + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4273 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
4274 | PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); |
4275 | __Pyx_GIVEREF(__pyx_t_1); |
4276 | __pyx_t_1 = 0; |
4277 | - __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4278 | + __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4279 | __Pyx_GOTREF(__pyx_t_1); |
4280 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
4281 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
4282 | @@ -3183,19 +3833,19 @@ |
4283 | __pyx_v_v_sigma = __pyx_t_1; |
4284 | __pyx_t_1 = 0; |
4285 | |
4286 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":280 |
4287 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":248 |
4288 | * v_sigma = np.sqrt(np.add.reduce(np.multiply(v, v))) |
4289 | * |
4290 | * u_tensor = DenseTensor(np.divide(u, u_sigma)) # <<<<<<<<<<<<<< |
4291 | * v_tensor = DenseTensor(np.divide(v, v_sigma)) |
4292 | * sigma = DenseTensor(np.multiply(u_sigma, v_sigma)) |
4293 | */ |
4294 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4295 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4296 | __Pyx_GOTREF(__pyx_1); |
4297 | - __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4298 | + __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_divide); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4299 | __Pyx_GOTREF(__pyx_t_1); |
4300 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
4301 | - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4302 | + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4303 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
4304 | __Pyx_INCREF(((PyObject *)__pyx_v_u)); |
4305 | PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_u)); |
4306 | @@ -3203,35 +3853,35 @@ |
4307 | __Pyx_INCREF(__pyx_v_u_sigma); |
4308 | PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_u_sigma); |
4309 | __Pyx_GIVEREF(__pyx_v_u_sigma); |
4310 | - __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4311 | + __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4312 | __Pyx_GOTREF(__pyx_t_2); |
4313 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
4314 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
4315 | - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4316 | + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4317 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
4318 | PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); |
4319 | __Pyx_GIVEREF(__pyx_t_2); |
4320 | __pyx_t_2 = 0; |
4321 | - __pyx_t_2 = PyObject_Call(__pyx_v_DenseTensor, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4322 | + __pyx_t_2 = PyObject_Call(__pyx_v_DenseTensor, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4323 | __Pyx_GOTREF(__pyx_t_2); |
4324 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
4325 | __Pyx_DECREF(__pyx_v_u_tensor); |
4326 | __pyx_v_u_tensor = __pyx_t_2; |
4327 | __pyx_t_2 = 0; |
4328 | |
4329 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":281 |
4330 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":249 |
4331 | * |
4332 | * u_tensor = DenseTensor(np.divide(u, u_sigma)) |
4333 | * v_tensor = DenseTensor(np.divide(v, v_sigma)) # <<<<<<<<<<<<<< |
4334 | * sigma = DenseTensor(np.multiply(u_sigma, v_sigma)) |
4335 | * |
4336 | */ |
4337 | - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4338 | + __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4339 | __Pyx_GOTREF(__pyx_2); |
4340 | - __pyx_t_2 = PyObject_GetAttr(__pyx_2, __pyx_kp_divide); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4341 | + __pyx_t_2 = PyObject_GetAttr(__pyx_2, __pyx_kp_divide); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4342 | __Pyx_GOTREF(__pyx_t_2); |
4343 | __Pyx_DECREF(__pyx_2); __pyx_2 = 0; |
4344 | - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4345 | + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4346 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
4347 | __Pyx_INCREF(((PyObject *)__pyx_v_v)); |
4348 | PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_v)); |
4349 | @@ -3239,35 +3889,35 @@ |
4350 | __Pyx_INCREF(__pyx_v_v_sigma); |
4351 | PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_v_sigma); |
4352 | __Pyx_GIVEREF(__pyx_v_v_sigma); |
4353 | - __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4354 | + __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4355 | __Pyx_GOTREF(__pyx_t_1); |
4356 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
4357 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
4358 | - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4359 | + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4360 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
4361 | PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); |
4362 | __Pyx_GIVEREF(__pyx_t_1); |
4363 | __pyx_t_1 = 0; |
4364 | - __pyx_t_1 = PyObject_Call(__pyx_v_DenseTensor, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4365 | + __pyx_t_1 = PyObject_Call(__pyx_v_DenseTensor, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4366 | __Pyx_GOTREF(__pyx_t_1); |
4367 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
4368 | __Pyx_DECREF(__pyx_v_v_tensor); |
4369 | __pyx_v_v_tensor = __pyx_t_1; |
4370 | __pyx_t_1 = 0; |
4371 | |
4372 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":282 |
4373 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":250 |
4374 | * u_tensor = DenseTensor(np.divide(u, u_sigma)) |
4375 | * v_tensor = DenseTensor(np.divide(v, v_sigma)) |
4376 | * sigma = DenseTensor(np.multiply(u_sigma, v_sigma)) # <<<<<<<<<<<<<< |
4377 | * |
4378 | * svdFreeSMat(predicted) |
4379 | */ |
4380 | - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4381 | + __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4382 | __Pyx_GOTREF(__pyx_1); |
4383 | - __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_multiply); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4384 | + __pyx_t_1 = PyObject_GetAttr(__pyx_1, __pyx_kp_multiply); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4385 | __Pyx_GOTREF(__pyx_t_1); |
4386 | __Pyx_DECREF(__pyx_1); __pyx_1 = 0; |
4387 | - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4388 | + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4389 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
4390 | __Pyx_INCREF(__pyx_v_u_sigma); |
4391 | PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_u_sigma); |
4392 | @@ -3275,23 +3925,23 @@ |
4393 | __Pyx_INCREF(__pyx_v_v_sigma); |
4394 | PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_v_sigma); |
4395 | __Pyx_GIVEREF(__pyx_v_v_sigma); |
4396 | - __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4397 | + __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4398 | __Pyx_GOTREF(__pyx_t_2); |
4399 | __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
4400 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
4401 | - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4402 | + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4403 | __Pyx_GOTREF(((PyObject *)__pyx_t_3)); |
4404 | PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); |
4405 | __Pyx_GIVEREF(__pyx_t_2); |
4406 | __pyx_t_2 = 0; |
4407 | - __pyx_t_2 = PyObject_Call(__pyx_v_DenseTensor, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4408 | + __pyx_t_2 = PyObject_Call(__pyx_v_DenseTensor, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4409 | __Pyx_GOTREF(__pyx_t_2); |
4410 | __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; |
4411 | __Pyx_DECREF(__pyx_v_sigma); |
4412 | __pyx_v_sigma = __pyx_t_2; |
4413 | __pyx_t_2 = 0; |
4414 | |
4415 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":284 |
4416 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":252 |
4417 | * sigma = DenseTensor(np.multiply(u_sigma, v_sigma)) |
4418 | * |
4419 | * svdFreeSMat(predicted) # <<<<<<<<<<<<<< |
4420 | @@ -3300,7 +3950,7 @@ |
4421 | */ |
4422 | svdFreeSMat(__pyx_v_predicted); |
4423 | |
4424 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":286 |
4425 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":254 |
4426 | * svdFreeSMat(predicted) |
4427 | * |
4428 | * if self.transposed: # <<<<<<<<<<<<<< |
4429 | @@ -3310,7 +3960,7 @@ |
4430 | __pyx_t_27 = ((struct __pyx_obj_6svdlib_7_svdlib_CSCMatrix *)__pyx_v_self)->transposed; |
4431 | if (__pyx_t_27) { |
4432 | |
4433 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":287 |
4434 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":255 |
4435 | * |
4436 | * if self.transposed: |
4437 | * return v_tensor, u_tensor, sigma # <<<<<<<<<<<<<< |
4438 | @@ -3318,7 +3968,7 @@ |
4439 | * return u_tensor, v_tensor, sigma |
4440 | */ |
4441 | __Pyx_XDECREF(__pyx_r); |
4442 | - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4443 | + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4444 | __Pyx_GOTREF(((PyObject *)__pyx_t_2)); |
4445 | __Pyx_INCREF(__pyx_v_v_tensor); |
4446 | PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_v_tensor); |
4447 | @@ -3336,15 +3986,15 @@ |
4448 | } |
4449 | /*else*/ { |
4450 | |
4451 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":289 |
4452 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":257 |
4453 | * return v_tensor, u_tensor, sigma |
4454 | * else: |
4455 | * return u_tensor, v_tensor, sigma # <<<<<<<<<<<<<< |
4456 | * |
4457 | - * def svd(tensor, k=50, row_factors=None): |
4458 | + * def svd(tensor, k=50, row_factors=None, offset_for_row=None, offset_for_col=None): |
4459 | */ |
4460 | __Pyx_XDECREF(__pyx_r); |
4461 | - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4462 | + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4463 | __Pyx_GOTREF(((PyObject *)__pyx_t_2)); |
4464 | __Pyx_INCREF(__pyx_v_u_tensor); |
4465 | PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_u_tensor); |
4466 | @@ -3396,12 +4046,12 @@ |
4467 | return __pyx_r; |
4468 | } |
4469 | |
4470 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":291 |
4471 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":259 |
4472 | * return u_tensor, v_tensor, sigma |
4473 | * |
4474 | - * def svd(tensor, k=50, row_factors=None): # <<<<<<<<<<<<<< |
4475 | - * CSC = CSCMatrix(tensor, row_factors) |
4476 | - * CSC.pack() |
4477 | + * def svd(tensor, k=50, row_factors=None, offset_for_row=None, offset_for_col=None): # <<<<<<<<<<<<<< |
4478 | + * CSC = CSCMatrix(tensor, offset_for_row, offset_for_col) |
4479 | + * CSC.pack(row_factors) |
4480 | */ |
4481 | |
4482 | static PyObject *__pyx_pf_6svdlib_7_svdlib_svd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ |
4483 | @@ -3409,20 +4059,26 @@ |
4484 | PyObject *__pyx_v_tensor = 0; |
4485 | PyObject *__pyx_v_k = 0; |
4486 | PyObject *__pyx_v_row_factors = 0; |
4487 | + PyObject *__pyx_v_offset_for_row = 0; |
4488 | + PyObject *__pyx_v_offset_for_col = 0; |
4489 | PyObject *__pyx_v_CSC; |
4490 | PyObject *__pyx_r = NULL; |
4491 | PyObject *__pyx_t_1 = NULL; |
4492 | PyObject *__pyx_t_2 = NULL; |
4493 | PyObject *__pyx_t_3 = NULL; |
4494 | - static PyObject **__pyx_pyargnames[] = {&__pyx_kp_tensor,&__pyx_kp_k,&__pyx_kp_row_factors,0}; |
4495 | + static PyObject **__pyx_pyargnames[] = {&__pyx_kp_tensor,&__pyx_kp_k,&__pyx_kp_row_factors,&__pyx_kp_offset_for_row,&__pyx_kp_offset_for_col,0}; |
4496 | __Pyx_SetupRefcountContext("svd"); |
4497 | __pyx_self = __pyx_self; |
4498 | if (unlikely(__pyx_kwds)) { |
4499 | Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); |
4500 | - PyObject* values[3] = {0,0,0}; |
4501 | + PyObject* values[5] = {0,0,0,0,0}; |
4502 | values[1] = __pyx_int_50; |
4503 | values[2] = Py_None; |
4504 | + values[3] = Py_None; |
4505 | + values[4] = Py_None; |
4506 | switch (PyTuple_GET_SIZE(__pyx_args)) { |
4507 | + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); |
4508 | + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); |
4509 | case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); |
4510 | case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); |
4511 | case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); |
4512 | @@ -3444,17 +4100,33 @@ |
4513 | PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_row_factors); |
4514 | if (unlikely(value)) { values[2] = value; kw_args--; } |
4515 | } |
4516 | + case 3: |
4517 | + if (kw_args > 0) { |
4518 | + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_offset_for_row); |
4519 | + if (unlikely(value)) { values[3] = value; kw_args--; } |
4520 | + } |
4521 | + case 4: |
4522 | + if (kw_args > 0) { |
4523 | + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_offset_for_col); |
4524 | + if (unlikely(value)) { values[4] = value; kw_args--; } |
4525 | + } |
4526 | } |
4527 | if (unlikely(kw_args > 0)) { |
4528 | - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "svd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4529 | + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "svd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4530 | } |
4531 | __pyx_v_tensor = values[0]; |
4532 | __pyx_v_k = values[1]; |
4533 | __pyx_v_row_factors = values[2]; |
4534 | + __pyx_v_offset_for_row = values[3]; |
4535 | + __pyx_v_offset_for_col = values[4]; |
4536 | } else { |
4537 | __pyx_v_k = __pyx_int_50; |
4538 | __pyx_v_row_factors = Py_None; |
4539 | + __pyx_v_offset_for_row = Py_None; |
4540 | + __pyx_v_offset_for_col = Py_None; |
4541 | switch (PyTuple_GET_SIZE(__pyx_args)) { |
4542 | + case 5: __pyx_v_offset_for_col = PyTuple_GET_ITEM(__pyx_args, 4); |
4543 | + case 4: __pyx_v_offset_for_row = PyTuple_GET_ITEM(__pyx_args, 3); |
4544 | case 3: __pyx_v_row_factors = PyTuple_GET_ITEM(__pyx_args, 2); |
4545 | case 2: __pyx_v_k = PyTuple_GET_ITEM(__pyx_args, 1); |
4546 | case 1: __pyx_v_tensor = PyTuple_GET_ITEM(__pyx_args, 0); |
4547 | @@ -3464,70 +4136,79 @@ |
4548 | } |
4549 | goto __pyx_L4_argument_unpacking_done; |
4550 | __pyx_L5_argtuple_error:; |
4551 | - __Pyx_RaiseArgtupleInvalid("svd", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4552 | + __Pyx_RaiseArgtupleInvalid("svd", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4553 | __pyx_L3_error:; |
4554 | __Pyx_AddTraceback("svdlib._svdlib.svd"); |
4555 | return NULL; |
4556 | __pyx_L4_argument_unpacking_done:; |
4557 | __pyx_v_CSC = Py_None; __Pyx_INCREF(Py_None); |
4558 | |
4559 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":292 |
4560 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":260 |
4561 | * |
4562 | - * def svd(tensor, k=50, row_factors=None): |
4563 | - * CSC = CSCMatrix(tensor, row_factors) # <<<<<<<<<<<<<< |
4564 | - * CSC.pack() |
4565 | + * def svd(tensor, k=50, row_factors=None, offset_for_row=None, offset_for_col=None): |
4566 | + * CSC = CSCMatrix(tensor, offset_for_row, offset_for_col) # <<<<<<<<<<<<<< |
4567 | + * CSC.pack(row_factors) |
4568 | * return CSC.svdA(k) |
4569 | */ |
4570 | - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4571 | + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4572 | __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
4573 | __Pyx_INCREF(__pyx_v_tensor); |
4574 | PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tensor); |
4575 | __Pyx_GIVEREF(__pyx_v_tensor); |
4576 | + __Pyx_INCREF(__pyx_v_offset_for_row); |
4577 | + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_offset_for_row); |
4578 | + __Pyx_GIVEREF(__pyx_v_offset_for_row); |
4579 | + __Pyx_INCREF(__pyx_v_offset_for_col); |
4580 | + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_offset_for_col); |
4581 | + __Pyx_GIVEREF(__pyx_v_offset_for_col); |
4582 | + __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6svdlib_7_svdlib_CSCMatrix)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4583 | + __Pyx_GOTREF(__pyx_t_2); |
4584 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4585 | + __Pyx_DECREF(__pyx_v_CSC); |
4586 | + __pyx_v_CSC = __pyx_t_2; |
4587 | + __pyx_t_2 = 0; |
4588 | + |
4589 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":261 |
4590 | + * def svd(tensor, k=50, row_factors=None, offset_for_row=None, offset_for_col=None): |
4591 | + * CSC = CSCMatrix(tensor, offset_for_row, offset_for_col) |
4592 | + * CSC.pack(row_factors) # <<<<<<<<<<<<<< |
4593 | + * return CSC.svdA(k) |
4594 | + * |
4595 | + */ |
4596 | + __pyx_t_2 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_pack); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4597 | + __Pyx_GOTREF(__pyx_t_2); |
4598 | + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4599 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
4600 | __Pyx_INCREF(__pyx_v_row_factors); |
4601 | - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_row_factors); |
4602 | + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_row_factors); |
4603 | __Pyx_GIVEREF(__pyx_v_row_factors); |
4604 | - __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6svdlib_7_svdlib_CSCMatrix)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4605 | - __Pyx_GOTREF(__pyx_t_2); |
4606 | - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4607 | - __Pyx_DECREF(__pyx_v_CSC); |
4608 | - __pyx_v_CSC = __pyx_t_2; |
4609 | - __pyx_t_2 = 0; |
4610 | - |
4611 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":293 |
4612 | - * def svd(tensor, k=50, row_factors=None): |
4613 | - * CSC = CSCMatrix(tensor, row_factors) |
4614 | - * CSC.pack() # <<<<<<<<<<<<<< |
4615 | - * return CSC.svdA(k) |
4616 | - * |
4617 | - */ |
4618 | - __pyx_t_2 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_pack); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4619 | - __Pyx_GOTREF(__pyx_t_2); |
4620 | - __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4621 | - __Pyx_GOTREF(__pyx_t_1); |
4622 | + __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4623 | + __Pyx_GOTREF(__pyx_t_3); |
4624 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
4625 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
4626 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4627 | + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
4628 | |
4629 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":294 |
4630 | - * CSC = CSCMatrix(tensor, row_factors) |
4631 | - * CSC.pack() |
4632 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":262 |
4633 | + * CSC = CSCMatrix(tensor, offset_for_row, offset_for_col) |
4634 | + * CSC.pack(row_factors) |
4635 | * return CSC.svdA(k) # <<<<<<<<<<<<<< |
4636 | * |
4637 | - * def dictSvd(tensor, k=50, row_factors=None): |
4638 | + * def dictSvd(tensor, k=50, row_factors=None, offset_for_row=None, offset_for_col=None): |
4639 | */ |
4640 | __Pyx_XDECREF(__pyx_r); |
4641 | - __pyx_t_1 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_svdA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4642 | - __Pyx_GOTREF(__pyx_t_1); |
4643 | - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4644 | - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); |
4645 | + __pyx_t_3 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_svdA); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4646 | + __Pyx_GOTREF(__pyx_t_3); |
4647 | + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4648 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
4649 | __Pyx_INCREF(__pyx_v_k); |
4650 | - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_k); |
4651 | + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_k); |
4652 | __Pyx_GIVEREF(__pyx_v_k); |
4653 | - __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4654 | - __Pyx_GOTREF(__pyx_t_3); |
4655 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
4656 | - __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; |
4657 | - __pyx_r = __pyx_t_3; |
4658 | - __pyx_t_3 = 0; |
4659 | + __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4660 | + __Pyx_GOTREF(__pyx_t_2); |
4661 | + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
4662 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4663 | + __pyx_r = __pyx_t_2; |
4664 | + __pyx_t_2 = 0; |
4665 | goto __pyx_L0; |
4666 | |
4667 | __pyx_r = Py_None; __Pyx_INCREF(Py_None); |
4668 | @@ -3545,12 +4226,12 @@ |
4669 | return __pyx_r; |
4670 | } |
4671 | |
4672 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":296 |
4673 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":264 |
4674 | * return CSC.svdA(k) |
4675 | * |
4676 | - * def dictSvd(tensor, k=50, row_factors=None): # <<<<<<<<<<<<<< |
4677 | - * CSC = CSCMatrix(tensor, row_factors) |
4678 | - * CSC.dictPack() |
4679 | + * def dictSvd(tensor, k=50, row_factors=None, offset_for_row=None, offset_for_col=None): # <<<<<<<<<<<<<< |
4680 | + * CSC = CSCMatrix(tensor, offset_for_row, offset_for_col) |
4681 | + * CSC.dictPack(row_factors) |
4682 | */ |
4683 | |
4684 | static PyObject *__pyx_pf_6svdlib_7_svdlib_dictSvd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ |
4685 | @@ -3558,20 +4239,26 @@ |
4686 | PyObject *__pyx_v_tensor = 0; |
4687 | PyObject *__pyx_v_k = 0; |
4688 | PyObject *__pyx_v_row_factors = 0; |
4689 | + PyObject *__pyx_v_offset_for_row = 0; |
4690 | + PyObject *__pyx_v_offset_for_col = 0; |
4691 | PyObject *__pyx_v_CSC; |
4692 | PyObject *__pyx_r = NULL; |
4693 | PyObject *__pyx_t_1 = NULL; |
4694 | PyObject *__pyx_t_2 = NULL; |
4695 | PyObject *__pyx_t_3 = NULL; |
4696 | - static PyObject **__pyx_pyargnames[] = {&__pyx_kp_tensor,&__pyx_kp_k,&__pyx_kp_row_factors,0}; |
4697 | + static PyObject **__pyx_pyargnames[] = {&__pyx_kp_tensor,&__pyx_kp_k,&__pyx_kp_row_factors,&__pyx_kp_offset_for_row,&__pyx_kp_offset_for_col,0}; |
4698 | __Pyx_SetupRefcountContext("dictSvd"); |
4699 | __pyx_self = __pyx_self; |
4700 | if (unlikely(__pyx_kwds)) { |
4701 | Py_ssize_t kw_args = PyDict_Size(__pyx_kwds); |
4702 | - PyObject* values[3] = {0,0,0}; |
4703 | + PyObject* values[5] = {0,0,0,0,0}; |
4704 | values[1] = __pyx_int_50; |
4705 | values[2] = Py_None; |
4706 | + values[3] = Py_None; |
4707 | + values[4] = Py_None; |
4708 | switch (PyTuple_GET_SIZE(__pyx_args)) { |
4709 | + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); |
4710 | + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); |
4711 | case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); |
4712 | case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); |
4713 | case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); |
4714 | @@ -3593,17 +4280,33 @@ |
4715 | PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_row_factors); |
4716 | if (unlikely(value)) { values[2] = value; kw_args--; } |
4717 | } |
4718 | + case 3: |
4719 | + if (kw_args > 0) { |
4720 | + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_offset_for_row); |
4721 | + if (unlikely(value)) { values[3] = value; kw_args--; } |
4722 | + } |
4723 | + case 4: |
4724 | + if (kw_args > 0) { |
4725 | + PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_kp_offset_for_col); |
4726 | + if (unlikely(value)) { values[4] = value; kw_args--; } |
4727 | + } |
4728 | } |
4729 | if (unlikely(kw_args > 0)) { |
4730 | - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "dictSvd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4731 | + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "dictSvd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4732 | } |
4733 | __pyx_v_tensor = values[0]; |
4734 | __pyx_v_k = values[1]; |
4735 | __pyx_v_row_factors = values[2]; |
4736 | + __pyx_v_offset_for_row = values[3]; |
4737 | + __pyx_v_offset_for_col = values[4]; |
4738 | } else { |
4739 | __pyx_v_k = __pyx_int_50; |
4740 | __pyx_v_row_factors = Py_None; |
4741 | + __pyx_v_offset_for_row = Py_None; |
4742 | + __pyx_v_offset_for_col = Py_None; |
4743 | switch (PyTuple_GET_SIZE(__pyx_args)) { |
4744 | + case 5: __pyx_v_offset_for_col = PyTuple_GET_ITEM(__pyx_args, 4); |
4745 | + case 4: __pyx_v_offset_for_row = PyTuple_GET_ITEM(__pyx_args, 3); |
4746 | case 3: __pyx_v_row_factors = PyTuple_GET_ITEM(__pyx_args, 2); |
4747 | case 2: __pyx_v_k = PyTuple_GET_ITEM(__pyx_args, 1); |
4748 | case 1: __pyx_v_tensor = PyTuple_GET_ITEM(__pyx_args, 0); |
4749 | @@ -3613,70 +4316,79 @@ |
4750 | } |
4751 | goto __pyx_L4_argument_unpacking_done; |
4752 | __pyx_L5_argtuple_error:; |
4753 | - __Pyx_RaiseArgtupleInvalid("dictSvd", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4754 | + __Pyx_RaiseArgtupleInvalid("dictSvd", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4755 | __pyx_L3_error:; |
4756 | __Pyx_AddTraceback("svdlib._svdlib.dictSvd"); |
4757 | return NULL; |
4758 | __pyx_L4_argument_unpacking_done:; |
4759 | __pyx_v_CSC = Py_None; __Pyx_INCREF(Py_None); |
4760 | |
4761 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":297 |
4762 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":265 |
4763 | * |
4764 | - * def dictSvd(tensor, k=50, row_factors=None): |
4765 | - * CSC = CSCMatrix(tensor, row_factors) # <<<<<<<<<<<<<< |
4766 | - * CSC.dictPack() |
4767 | + * def dictSvd(tensor, k=50, row_factors=None, offset_for_row=None, offset_for_col=None): |
4768 | + * CSC = CSCMatrix(tensor, offset_for_row, offset_for_col) # <<<<<<<<<<<<<< |
4769 | + * CSC.dictPack(row_factors) |
4770 | * return CSC.svdA(k) |
4771 | */ |
4772 | - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4773 | + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4774 | __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
4775 | __Pyx_INCREF(__pyx_v_tensor); |
4776 | PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tensor); |
4777 | __Pyx_GIVEREF(__pyx_v_tensor); |
4778 | + __Pyx_INCREF(__pyx_v_offset_for_row); |
4779 | + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_offset_for_row); |
4780 | + __Pyx_GIVEREF(__pyx_v_offset_for_row); |
4781 | + __Pyx_INCREF(__pyx_v_offset_for_col); |
4782 | + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_offset_for_col); |
4783 | + __Pyx_GIVEREF(__pyx_v_offset_for_col); |
4784 | + __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6svdlib_7_svdlib_CSCMatrix)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4785 | + __Pyx_GOTREF(__pyx_t_2); |
4786 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4787 | + __Pyx_DECREF(__pyx_v_CSC); |
4788 | + __pyx_v_CSC = __pyx_t_2; |
4789 | + __pyx_t_2 = 0; |
4790 | + |
4791 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":266 |
4792 | + * def dictSvd(tensor, k=50, row_factors=None, offset_for_row=None, offset_for_col=None): |
4793 | + * CSC = CSCMatrix(tensor, offset_for_row, offset_for_col) |
4794 | + * CSC.dictPack(row_factors) # <<<<<<<<<<<<<< |
4795 | + * return CSC.svdA(k) |
4796 | + * |
4797 | + */ |
4798 | + __pyx_t_2 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_dictPack); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4799 | + __Pyx_GOTREF(__pyx_t_2); |
4800 | + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4801 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
4802 | __Pyx_INCREF(__pyx_v_row_factors); |
4803 | - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_row_factors); |
4804 | + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_row_factors); |
4805 | __Pyx_GIVEREF(__pyx_v_row_factors); |
4806 | - __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6svdlib_7_svdlib_CSCMatrix)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4807 | - __Pyx_GOTREF(__pyx_t_2); |
4808 | - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4809 | - __Pyx_DECREF(__pyx_v_CSC); |
4810 | - __pyx_v_CSC = __pyx_t_2; |
4811 | - __pyx_t_2 = 0; |
4812 | - |
4813 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":298 |
4814 | - * def dictSvd(tensor, k=50, row_factors=None): |
4815 | - * CSC = CSCMatrix(tensor, row_factors) |
4816 | - * CSC.dictPack() # <<<<<<<<<<<<<< |
4817 | - * return CSC.svdA(k) |
4818 | - * |
4819 | - */ |
4820 | - __pyx_t_2 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_dictPack); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4821 | - __Pyx_GOTREF(__pyx_t_2); |
4822 | - __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4823 | - __Pyx_GOTREF(__pyx_t_1); |
4824 | + __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4825 | + __Pyx_GOTREF(__pyx_t_3); |
4826 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
4827 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
4828 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4829 | + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
4830 | |
4831 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":299 |
4832 | - * CSC = CSCMatrix(tensor, row_factors) |
4833 | - * CSC.dictPack() |
4834 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":267 |
4835 | + * CSC = CSCMatrix(tensor, offset_for_row, offset_for_col) |
4836 | + * CSC.dictPack(row_factors) |
4837 | * return CSC.svdA(k) # <<<<<<<<<<<<<< |
4838 | * |
4839 | * def isvd(tensor, k=50, niter=100, lrate=.001, row_factors=None): |
4840 | */ |
4841 | __Pyx_XDECREF(__pyx_r); |
4842 | - __pyx_t_1 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_svdA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4843 | - __Pyx_GOTREF(__pyx_t_1); |
4844 | - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4845 | - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); |
4846 | + __pyx_t_3 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_svdA); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4847 | + __Pyx_GOTREF(__pyx_t_3); |
4848 | + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4849 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
4850 | __Pyx_INCREF(__pyx_v_k); |
4851 | - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_k); |
4852 | + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_k); |
4853 | __Pyx_GIVEREF(__pyx_v_k); |
4854 | - __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4855 | - __Pyx_GOTREF(__pyx_t_3); |
4856 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
4857 | - __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0; |
4858 | - __pyx_r = __pyx_t_3; |
4859 | - __pyx_t_3 = 0; |
4860 | + __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4861 | + __Pyx_GOTREF(__pyx_t_2); |
4862 | + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
4863 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4864 | + __pyx_r = __pyx_t_2; |
4865 | + __pyx_t_2 = 0; |
4866 | goto __pyx_L0; |
4867 | |
4868 | __pyx_r = Py_None; __Pyx_INCREF(Py_None); |
4869 | @@ -3694,12 +4406,12 @@ |
4870 | return __pyx_r; |
4871 | } |
4872 | |
4873 | -/* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":301 |
4874 | +/* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":269 |
4875 | * return CSC.svdA(k) |
4876 | * |
4877 | * def isvd(tensor, k=50, niter=100, lrate=.001, row_factors=None): # <<<<<<<<<<<<<< |
4878 | - * CSC = CSCMatrix(tensor, row_factors) |
4879 | - * CSC.pack() |
4880 | + * CSC = CSCMatrix(tensor) |
4881 | + * CSC.pack(row_factors) |
4882 | */ |
4883 | |
4884 | static PyObject *__pyx_pf_6svdlib_7_svdlib_isvd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ |
4885 | @@ -3760,7 +4472,7 @@ |
4886 | } |
4887 | } |
4888 | if (unlikely(kw_args > 0)) { |
4889 | - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "isvd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4890 | + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "isvd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4891 | } |
4892 | __pyx_v_tensor = values[0]; |
4893 | __pyx_v_k = values[1]; |
4894 | @@ -3784,76 +4496,79 @@ |
4895 | } |
4896 | goto __pyx_L4_argument_unpacking_done; |
4897 | __pyx_L5_argtuple_error:; |
4898 | - __Pyx_RaiseArgtupleInvalid("isvd", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4899 | + __Pyx_RaiseArgtupleInvalid("isvd", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} |
4900 | __pyx_L3_error:; |
4901 | __Pyx_AddTraceback("svdlib._svdlib.isvd"); |
4902 | return NULL; |
4903 | __pyx_L4_argument_unpacking_done:; |
4904 | __pyx_v_CSC = Py_None; __Pyx_INCREF(Py_None); |
4905 | |
4906 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":302 |
4907 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":270 |
4908 | * |
4909 | * def isvd(tensor, k=50, niter=100, lrate=.001, row_factors=None): |
4910 | - * CSC = CSCMatrix(tensor, row_factors) # <<<<<<<<<<<<<< |
4911 | - * CSC.pack() |
4912 | + * CSC = CSCMatrix(tensor) # <<<<<<<<<<<<<< |
4913 | + * CSC.pack(row_factors) |
4914 | * return CSC.isvd(k, niter, lrate) |
4915 | */ |
4916 | - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4917 | + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4918 | __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
4919 | __Pyx_INCREF(__pyx_v_tensor); |
4920 | PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tensor); |
4921 | __Pyx_GIVEREF(__pyx_v_tensor); |
4922 | + __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6svdlib_7_svdlib_CSCMatrix)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4923 | + __Pyx_GOTREF(__pyx_t_2); |
4924 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4925 | + __Pyx_DECREF(__pyx_v_CSC); |
4926 | + __pyx_v_CSC = __pyx_t_2; |
4927 | + __pyx_t_2 = 0; |
4928 | + |
4929 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":271 |
4930 | + * def isvd(tensor, k=50, niter=100, lrate=.001, row_factors=None): |
4931 | + * CSC = CSCMatrix(tensor) |
4932 | + * CSC.pack(row_factors) # <<<<<<<<<<<<<< |
4933 | + * return CSC.isvd(k, niter, lrate) |
4934 | + * |
4935 | + */ |
4936 | + __pyx_t_2 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_pack); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4937 | + __Pyx_GOTREF(__pyx_t_2); |
4938 | + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4939 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
4940 | __Pyx_INCREF(__pyx_v_row_factors); |
4941 | - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_row_factors); |
4942 | + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_row_factors); |
4943 | __Pyx_GIVEREF(__pyx_v_row_factors); |
4944 | - __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_6svdlib_7_svdlib_CSCMatrix)), ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4945 | - __Pyx_GOTREF(__pyx_t_2); |
4946 | - __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4947 | - __Pyx_DECREF(__pyx_v_CSC); |
4948 | - __pyx_v_CSC = __pyx_t_2; |
4949 | - __pyx_t_2 = 0; |
4950 | - |
4951 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":303 |
4952 | - * def isvd(tensor, k=50, niter=100, lrate=.001, row_factors=None): |
4953 | - * CSC = CSCMatrix(tensor, row_factors) |
4954 | - * CSC.pack() # <<<<<<<<<<<<<< |
4955 | - * return CSC.isvd(k, niter, lrate) |
4956 | - * |
4957 | - */ |
4958 | - __pyx_t_2 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_pack); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4959 | - __Pyx_GOTREF(__pyx_t_2); |
4960 | - __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4961 | - __Pyx_GOTREF(__pyx_t_1); |
4962 | + __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4963 | + __Pyx_GOTREF(__pyx_t_3); |
4964 | __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; |
4965 | - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; |
4966 | + __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0; |
4967 | + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; |
4968 | |
4969 | - /* "/home/kcarnold/csc/divisi/svdlib/_svdlib.pyx":304 |
4970 | - * CSC = CSCMatrix(tensor, row_factors) |
4971 | - * CSC.pack() |
4972 | + /* "/home/kcarnold/code/divisi/svdlib/_svdlib.pyx":272 |
4973 | + * CSC = CSCMatrix(tensor) |
4974 | + * CSC.pack(row_factors) |
4975 | * return CSC.isvd(k, niter, lrate) # <<<<<<<<<<<<<< |
4976 | * |
4977 | * def dictIsvd(tensor, k=50, niter=100, lrate=.001, row_factors=None): |
4978 | */ |
4979 | __Pyx_XDECREF(__pyx_r); |
4980 | - __pyx_t_1 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_isvd); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4981 | - __Pyx_GOTREF(__pyx_t_1); |
4982 | - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4983 | - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); |
4984 | + __pyx_t_3 = PyObject_GetAttr(__pyx_v_CSC, __pyx_kp_isvd); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4985 | + __Pyx_GOTREF(__pyx_t_3); |
4986 | + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
4987 | + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); |
4988 | __Pyx_INCREF(__pyx_v_k); |
4989 | - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_k); |
4990 | + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_k); |
4991 | __Pyx_GIVEREF(__pyx_v_k); |
4992 | __Pyx_INCREF(__pyx_v_niter); |
4993 | - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_niter); |
4994 | + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_niter); |
4995 | __Pyx_GIVEREF(__pyx_v_niter); |
4996 | __Pyx_INCREF(__pyx_v_lrate); |
4997 | - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_lrate); |
4998 | + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_lrate); |
4999 | __Pyx_GIVEREF(__pyx_v_lrate); |
5000 | - __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} |
The diff has been truncated for viewing.
This branch includes the offset SVD code, some cleanups and micro-optimizations to the SVDLIBC wrapper code, and some additional work on the tests. (It also adds a .unnormalized() method to LabeledView.)
I've tested it fairly extensively and regularly use it, but I'd like some review on it and independent testing before merging to trunk. My main concern is that I broke some edge case while cleaning up _svdlibc.pyx, but should also check that normal AnalogySpace and Blending still give correct results.