-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTODO
58 lines (52 loc) · 2.11 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Functionality:
- Write a library of functions that do operations on tensors.
- Add a :include-sparse option to representation scheme traversals
(and also to spartn traversals). We'll need to define total dimensions
besides the number of non-zeros
- Check spartn compatibility. For example, get-hcd can't be used with a
ccd spartn. We should optionally check for the representation scheme
- Optionally check bounds? We actually don't even store them currently.
- Let MAKE-* and some other functions accept a :sparsity-structure
parameter
- Include a default sparse-element that makes sense for most Lisp
data types
Optimizations:
- The HASH scheme could probably be optimized
- Spartns should optionally generate inline declarations for GET and SET
functions
Random:
- Be more defensive and check types in non-speed-critical parts of the code
Documentation:
- Produce HTML from documentation strings
- Expand manual
Possible new representation schemes:
- Particia trees for each dimension?
- AVL trees?
- skip-lists?
- Splay trees? (Could be interesting)
- Chained hash: instead of (gethash i (gethash j data)), we can use
(gethash `(,i ,j) data). This could be interleaved with other schemes
if we're careful:
'(hash cvector chained-hash chained-hash chained-hash array)
would produce:
HASHTABLE --> CVECTOR --> HASHTABLE --> ARRAY
But the keys to the second hashtable would be lists of three indices:
(get a b c d e f)
(gethash a
(get-cvec (gethash (list c d e) b
(aref data f))))
+ We could use the notation
(hash cvector (hash 3) array)
Tests:
- Switch from toy tests to something more systematic (the tests should be
designed)
+ List all possible problems for each function, and add test cases for them
+ Add more use cases
- Start doing code coverage analysis
- Missing tests:
+ test with ":test-equal EQUAL"
+ generate random elements, insert and get
+ try to use the wrong element type
+ Check if PACK is really working for several dimensions. (Currently the
tests verify that nothing breaks by using it, but we can't tell if it
really is shrinking all intermediate dimensions)