SCM Repository
Annotation of /branches/pure-cfg/TODO
Parent Directory
|
Revision Log
Revision 1127 - (view) (download)
1 : | glk | 1049 | NOTE: GLK's approximate ranking of 5 most important tagged with |
2 : | glk | 962 | [GLK:1], [GLK:2], ... |
3 : | |||
4 : | glk | 1049 | ============================== |
5 : | other SHORT TERM ============= (including needed for LIC) | ||
6 : | ============================== | ||
7 : | glk | 781 | |
8 : | jhr | 1127 | Add a clamp function, which takes three arguments; either three scalars: |
9 : | clamp(x, minval, maxval) = max(minval, min(maxval, x)) | ||
10 : | or three vectors of the same size: | ||
11 : | clamp([x,y], minvec, maxvec) = [max(minvec[0], min(maxvec[0], x)), | ||
12 : | max(minvec[1], min(maxvec[1], y))] | ||
13 : | This would be useful in many current Diderot programs. | ||
14 : | One question: clamp(x, minval, maxval) is the argument order | ||
15 : | used in OpenCL and other places, but clamp(minval, maxval, x) | ||
16 : | would be more consistent with lerp(minout, maxout, x). | ||
17 : | |||
18 : | Level of differentiability in field type should be statement about how | ||
19 : | much differentiation the program *needs*, rather than what the kernel | ||
20 : | *provides*. The needed differentiability can be less than or equal to | ||
21 : | the provided differentiability. | ||
22 : | |||
23 : | glk | 1049 | [GLK:1] Add sequence types (needed for evals & evecs) |
24 : | syntax | ||
25 : | types: ty '{' INT '}' | ||
26 : | value construction: '{' e1 ',' … ',' en '}' | ||
27 : | indexing: e '{' e '}' | ||
28 : | |||
29 : | jhr | 788 | IL support for higher-order tensor values (matrices, etc). |
30 : | jhr | 803 | tensor construction [DONE] |
31 : | tensor indexing [DONE] | ||
32 : | tensor slicing | ||
33 : | jhr | 853 | verify that hessians work correctly [DONE] |
34 : | jhr | 788 | |
35 : | Use ∇⊗ etc. syntax | ||
36 : | jhr | 763 | syntax [DONE] |
37 : | typechecking | ||
38 : | IL and codegen | ||
39 : | |||
40 : | glk | 927 | test/uninit.diderot: |
41 : | glk | 941 | documents need for better compiler error messages when output variables |
42 : | glk | 927 | are not initialized; the current messages are very cryptic |
43 : | |||
44 : | glk | 785 | determinant ("det") for tensor[3,3] |
45 : | |||
46 : | jhr | 788 | expand trace in mid to low translation |
47 : | |||
48 : | value-numbering optimization | ||
49 : | |||
50 : | Add type aliases for color types | ||
51 : | rgb = real{3} | ||
52 : | rgba = real{4} | ||
53 : | |||
54 : | glk | 781 | ============================== |
55 : | glk | 891 | MEDIUM TERM ================== (including needed for streamlines & tractography) |
56 : | glk | 781 | ============================== |
57 : | |||
58 : | glk | 1049 | [GLK:1] evals & evecs for symmetric tensor[3,3] (requires sequences) |
59 : | glk | 962 | |
60 : | glk | 1049 | [GLK:2] Save Diderot output to nrrd, instead of "mip.txt" |
61 : | glk | 962 | For grid of strands, save to similarly-shaped array |
62 : | For list of strands, save to long 1-D (or 2-D for non-scalar output) list | ||
63 : | For ragged things (like tractography output), will need to save both | ||
64 : | complete list of values, as well as list of start indices and lengths | ||
65 : | to index into complete list | ||
66 : | |||
67 : | glk | 1049 | [GLK:3] Use of Teem's "hest" command-line parser for getting |
68 : | glk | 962 | any input variables that are not defined in the source file |
69 : | |||
70 : | jhr | 1127 | [GLK:4] ability to declare a field so that probe positions are |
71 : | *always* "inside"; with various ways of mapping the known image values | ||
72 : | to non-existant index locations. One possible syntax emphasizes that | ||
73 : | there is a index mapping function that logically precedes convolution: | ||
74 : | F = bspln3 ⊛ (img ◦ clamp) | ||
75 : | F = bspln3 ⊛ (img ◦ repeat) | ||
76 : | F = bspln3 ⊛ (img ◦ mirror) | ||
77 : | where "◦" or "∘" is used to indicate function composition | ||
78 : | glk | 962 | |
79 : | glk | 1049 | extend norm (|exp|) to all tensor types [DONE for vectors and matrices] |
80 : | |||
81 : | glk | 962 | ability to emit/track/record variables into dynamically re-sized |
82 : | runtime buffer | ||
83 : | |||
84 : | glk | 945 | Want: allow X *= Y, X /= Y, X += Y, X -= Y to mean what they do in C, |
85 : | provided that X*Y, X/Y, X+Y, X-Y are already supported. | ||
86 : | Nearly every Diderot program would be simplified by this. | ||
87 : | |||
88 : | glk | 962 | Want: non-trivial field expressions & functions: |
89 : | glk | 948 | image(2)[2] Vimg = load(...); |
90 : | glk | 950 | field#0(2)[] Vlen = |Vimg ⊛ bspln3|; |
91 : | glk | 948 | to get a scalar field of vector length, or |
92 : | glk | 950 | field#2(2)[] F = Fimg ⊛ bspln3; |
93 : | field#0(2)[] Gmag = |∇F|; | ||
94 : | glk | 948 | to get a scalar field of gradient magnitude, or |
95 : | glk | 950 | field#2(2)[] F = Fimg ⊛ bspln3; |
96 : | field#0(2)[] Gmsq = ∇F•∇F; | ||
97 : | to get a scalar field of squared gradient magnitude, which is simpler | ||
98 : | glk | 962 | to differentiate. However, there is value in having these, even if |
99 : | the differentiation of them is not supported (hence the indication | ||
100 : | of "field#0" for these above) | ||
101 : | glk | 945 | |
102 : | glk | 962 | Want: ability to apply "normalize" to a field itself, e.g. |
103 : | field#0(2)[2] V = normalize(Vimg ⊛ ctmr); | ||
104 : | so that V(x) = normalize((Vimg ⊛ ctmr)(x)). | ||
105 : | Having this would simplify expression of standard LIC method, and | ||
106 : | would also help express other vector field expressions that arise | ||
107 : | in vector field feature exraction. | ||
108 : | glk | 941 | |
109 : | glk | 781 | tensor fields: convolution on general tensor images |
110 : | |||
111 : | ============================== | ||
112 : | other MEDIUM TERM ============ (needed for particles) | ||
113 : | ============================== | ||
114 : | |||
115 : | glk | 1049 | [GLK:5] run-time death of strands; test/iso2d.diderot provides |
116 : | great initial test for "die" command. | ||
117 : | glk | 781 | |
118 : | jhr | 1127 | Put small 1-D and 2-D fields, when reconstructed specifically by tent |
119 : | and when differentiation is not needed, into faster texture buffers. | ||
120 : | test/illust-vr.diderot is good example of program that uses multiple | ||
121 : | such 1-D fields basically as lookup-table-based function evaluation | ||
122 : | |||
123 : | glk | 1049 | run-time birth of strands |
124 : | |||
125 : | glk | 781 | "initially" supports lists |
126 : | |||
127 : | "initially" supports lists of positions output from | ||
128 : | different initalization Diderot program | ||
129 : | |||
130 : | spatial data structure that permits strands' queries of neighbors | ||
131 : | |||
132 : | jhr | 784 | proper handling of stabilize method |
133 : | |||
134 : | glk | 891 | test/vr-kcomp2.diderot: Add support for code like |
135 : | jhr | 796 | |
136 : | (F1 if x else F2)@pos | ||
137 : | |||
138 : | glk | 962 | This will require duplication of the continuation of the conditional |
139 : | (but we should only duplicate over the live-range of the result of the | ||
140 : | conditional. | ||
141 : | jhr | 796 | |
142 : | glk | 1049 | add ":" for tensor dot product (contracts out two indices |
143 : | instead of one like •), valid for all pairs of tensors with | ||
144 : | at least two indices | ||
145 : | |||
146 : | glk | 781 | ============================== |
147 : | jhr | 797 | other MEDIUM TERM ============ |
148 : | ============================== | ||
149 : | |||
150 : | glk | 927 | want: warnings when "D" (reserved for differentiation) is declared as |
151 : | a variable name (get confusing error messages now) | ||
152 : | jhr | 797 | |
153 : | jhr | 824 | support for Python interop and GUI |
154 : | |||
155 : | glk | 1049 | Python/ctypes interface to run-time |
156 : | |||
157 : | jhr | 797 | ============================== |
158 : | glk | 781 | LONG TERM ==================== |
159 : | ============================== | ||
160 : | |||
161 : | glk | 927 | Better handling of variables that determines the scope of a variable |
162 : | based on its actual use, instead of where the user defined it. So, | ||
163 : | for example, we should lift strand-invariant variables to global | ||
164 : | scope. Also prune out useless variables, which should include field | ||
165 : | variables after the translation to mid-il. | ||
166 : | jhr | 796 | |
167 : | glk | 781 | co- vs contra- index distinction |
168 : | |||
169 : | some indication of tensor symmetry | ||
170 : | (have to identify the group of index permutations that are symmetries) | ||
171 : | |||
172 : | dot works on all tensors | ||
173 : | |||
174 : | outer works on all tensors | ||
175 : | |||
176 : | Einstein summation notation | ||
177 : | |||
178 : | "tensor comprehension" (like list comprehension) | ||
179 : | jhr | 784 | |
180 : | ====================== | ||
181 : | BUGS ================= | ||
182 : | ====================== | ||
183 : | |||
184 : | glk | 962 | test/read2vecs.diderot: |
185 : | // HEY (BUG?) shouldn't it be a type error to load this 2-D array of | ||
186 : | // 2-vectors into a 2-D *scalar* field? Instead, get: | ||
187 : | // uncaught exception Fail [Fail: Error in compiling lic.diderot] | ||
188 : | // raised at driver/main.sml:31.39-31.76 | ||
189 : | image(2)[] Vimg = load("../data/vorttest.nrrd"); | ||
190 : | |||
191 : | jhr | 784 | test/zslice2.diderot: |
192 : | // HEY (bug) bspln5 leads to problems ... | ||
193 : | // uncaught exception Size [size] | ||
194 : | // raised at c-target/c-target.sml:47.15-47.19 | ||
195 : | //field#4(3)[] F = img ⊛ bspln5; |
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |