Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /branches/pure-cfg/TODO
ViewVC logotype

Annotation of /branches/pure-cfg/TODO

Parent Directory Parent Directory | Revision Log Revision Log


Revision 962 - (view) (download)

1 : glk 962
2 :     NOTE: GLK's approximate ranking of 6 most imporant tagged with
3 :     [GLK:1], [GLK:2], ...
4 :    
5 : glk 781 ========================
6 :     SHORT TERM ============= (for curvature-based VR)
7 :     ========================
8 :    
9 : jhr 788 IL support for higher-order tensor values (matrices, etc).
10 : jhr 803 tensor construction [DONE]
11 :     tensor indexing [DONE]
12 :     tensor slicing
13 : jhr 853 verify that hessians work correctly [DONE]
14 : jhr 788
15 : jhr 821 Outer products [DONE]
16 : jhr 763
17 : jhr 813 Add M dot v, v dot M, and M dot N [DONE]
18 : jhr 763
19 : jhr 846 Identity matrix [DONE]
20 : jhr 763
21 : jhr 846 Zero tensor [DONE]
22 : jhr 822
23 : jhr 763 trace [DONE]
24 :    
25 : jhr 846 extend norm (|exp|) to tensor[3,3] [DONE]
26 : jhr 763
27 : jhr 846 Matrix addition, subtraction, and scaling [DONE]
28 : jhr 824
29 : jhr 788 Use ∇⊗ etc. syntax
30 : jhr 763 syntax [DONE]
31 :     typechecking
32 :     IL and codegen
33 :    
34 :     Add sequence types
35 :     syntax
36 :     types: ty '{' INT '}'
37 :     value construction: '{' e1 ',' … ',' en '}'
38 :     indexing: e '{' e '}'
39 :    
40 : jhr 784 Infix dot product and cross product [DONE]
41 : glk 781
42 : jhr 784 lerp on scalars and vectors [DONE]
43 :    
44 : jhr 824 Infix "^" operator for pow() [DONE]
45 :    
46 : jhr 897 Code generation support for 1D image data, such as RGBA transfer functions [DONE]
47 : jhr 853
48 : glk 781 ==============================
49 : glk 785 other SHORT TERM ============= (including needed for LIC)
50 : glk 781 ==============================
51 :    
52 : glk 927 test/uninit.diderot:
53 : glk 941 documents need for better compiler error messages when output variables
54 : glk 927 are not initialized; the current messages are very cryptic
55 :    
56 : glk 785 determinant ("det") for tensor[3,3]
57 :    
58 : jhr 897 extend norm (|exp|) to all tensor types [DONE for vectors and matrices]
59 : glk 785
60 : jhr 788 expand trace in mid to low translation
61 :    
62 :     value-numbering optimization
63 :    
64 :     Add type aliases for color types
65 :     rgb = real{3}
66 :     rgba = real{4}
67 :    
68 : glk 781 ==============================
69 : glk 891 MEDIUM TERM ================== (including needed for streamlines & tractography)
70 : glk 781 ==============================
71 :    
72 : glk 962 [GLK:3] evals & evecs for symmetric tensor[3,3] (requires sequences)
73 :    
74 :     [GLK:4] Save Diderot output to nrrd, instead of "mip.txt"
75 :     For grid of strands, save to similarly-shaped array
76 :     For list of strands, save to long 1-D (or 2-D for non-scalar output) list
77 :     For ragged things (like tractography output), will need to save both
78 :     complete list of values, as well as list of start indices and lengths
79 :     to index into complete list
80 :    
81 :     [GLK:5] Use of Teem's "hest" command-line parser for getting
82 :     any input variables that are not defined in the source file
83 :    
84 :     [GLK:6] ability to declare a field in such a way so that probe
85 :     positions are *always* clamped to the support of "inside";
86 :     there are many cases where this is the sensible behavior.
87 :     (More generally, we could also have "repeat" declaration,
88 :     copying action of GL_REPEAT in texturing)
89 :    
90 :     ability to emit/track/record variables into dynamically re-sized
91 :     runtime buffer
92 :    
93 : glk 945 Want: allow X *= Y, X /= Y, X += Y, X -= Y to mean what they do in C,
94 :     provided that X*Y, X/Y, X+Y, X-Y are already supported.
95 :     Nearly every Diderot program would be simplified by this.
96 :    
97 : glk 962 Want: non-trivial field expressions & functions:
98 : glk 948 image(2)[2] Vimg = load(...);
99 : glk 950 field#0(2)[] Vlen = |Vimg ⊛ bspln3|;
100 : glk 948 to get a scalar field of vector length, or
101 : glk 950 field#2(2)[] F = Fimg ⊛ bspln3;
102 :     field#0(2)[] Gmag = |∇F|;
103 : glk 948 to get a scalar field of gradient magnitude, or
104 : glk 950 field#2(2)[] F = Fimg ⊛ bspln3;
105 :     field#0(2)[] Gmsq = ∇F•∇F;
106 :     to get a scalar field of squared gradient magnitude, which is simpler
107 : glk 962 to differentiate. However, there is value in having these, even if
108 :     the differentiation of them is not supported (hence the indication
109 :     of "field#0" for these above)
110 : glk 945
111 : glk 962 Want: ability to apply "normalize" to a field itself, e.g.
112 :     field#0(2)[2] V = normalize(Vimg ⊛ ctmr);
113 :     so that V(x) = normalize((Vimg ⊛ ctmr)(x)).
114 :     Having this would simplify expression of standard LIC method, and
115 :     would also help express other vector field expressions that arise
116 :     in vector field feature exraction.
117 : glk 941
118 : glk 781 tensor fields: convolution on general tensor images
119 :    
120 :     ==============================
121 :     other MEDIUM TERM ============ (needed for particles)
122 :     ==============================
123 :    
124 :     run-time birth and death of strands
125 :    
126 :     "initially" supports lists
127 :    
128 :     "initially" supports lists of positions output from
129 :     different initalization Diderot program
130 :    
131 :     spatial data structure that permits strands' queries of neighbors
132 :    
133 : jhr 784 proper handling of stabilize method
134 :    
135 : glk 891 test/vr-kcomp2.diderot: Add support for code like
136 : jhr 796
137 :     (F1 if x else F2)@pos
138 :    
139 : glk 962 This will require duplication of the continuation of the conditional
140 :     (but we should only duplicate over the live-range of the result of the
141 :     conditional.
142 : jhr 796
143 : glk 781 ==============================
144 : jhr 797 other MEDIUM TERM ============
145 :     ==============================
146 :    
147 : glk 927 want: warnings when "D" (reserved for differentiation) is declared as
148 :     a variable name (get confusing error messages now)
149 : jhr 797
150 : jhr 824 support for Python interop and GUI
151 :    
152 : jhr 797 ==============================
153 : glk 781 LONG TERM ====================
154 :     ==============================
155 :    
156 : glk 927 Better handling of variables that determines the scope of a variable
157 :     based on its actual use, instead of where the user defined it. So,
158 :     for example, we should lift strand-invariant variables to global
159 :     scope. Also prune out useless variables, which should include field
160 :     variables after the translation to mid-il.
161 : jhr 796
162 : glk 781 co- vs contra- index distinction
163 :    
164 : glk 783 add ":" for tensor dot product (contracts out two indices
165 :     instead of one like •), valid for all pairs of tensors with
166 :     at least two indices
167 :    
168 : glk 781 some indication of tensor symmetry
169 :     (have to identify the group of index permutations that are symmetries)
170 :    
171 :     dot works on all tensors
172 :    
173 :     outer works on all tensors
174 :    
175 :     Einstein summation notation
176 :    
177 :     "tensor comprehension" (like list comprehension)
178 : jhr 784
179 : glk 818 Python/ctypes interface to run-timez
180 :    
181 : jhr 784 ======================
182 :     BUGS =================
183 :     ======================
184 :    
185 : glk 962 [GLK:1] test/derivs2.diderot:
186 :     test/derivs3.diderot:
187 :     gradients & Hessians are not being transformed from index-to-world,
188 :     these test programs should produce black images when that is working
189 : glk 941
190 : glk 962 [GLK:2] test/fields.diderot:
191 :     documents various bugs/questions associated with simple field expressions
192 :     (negation, addition, scalar multiplication)
193 :    
194 :     test/read2vecs.diderot:
195 :     // HEY (BUG?) shouldn't it be a type error to load this 2-D array of
196 :     // 2-vectors into a 2-D *scalar* field? Instead, get:
197 :     // uncaught exception Fail [Fail: Error in compiling lic.diderot]
198 :     // raised at driver/main.sml:31.39-31.76
199 :     image(2)[] Vimg = load("../data/vorttest.nrrd");
200 :    
201 :     test/iso2d.diderot: not able to use "nan".
202 :     // HEY (BUG) not able to use NaN as in "pos = [nan,nan]"
203 :     // generated C code "vec2f(nanf, nanf)" causes problems:
204 :     // iso2d.c: In function ‘sample_update’:
205 :     // iso2d.c:86: error: incompatible type for argument 1 of ‘vec2f’
206 :     // iso2d.c:86: error: incompatible type for argument 2 of ‘vec2f’
207 :     // uncaught exception Fail [Fail: error compiling/linking]
208 :     // raised at c-target/c-target.sml:323.14-323.44
209 :     pos = [∞,∞]; // should be: pos = [nan,nan];
210 :    
211 : jhr 784 test/mip-cam.diderot:
212 :     // generated C code looks like "(float)p_ui_0--0.5e0f"
213 :     //real rayU = 2.0*camUmax*(real(ui) - -0.5)/real(imgResU) - camUmax;
214 :    
215 :     test/vr-kcomp.diderot:
216 :     // HEY (scoping BUG): the strand parameters (e.g. ui, vi) ...
217 :    
218 :     test/zslice2.diderot:
219 :     // but is this not valid syntax for creating field in one shot?
220 :     //field#2(3)[] F = (load("../data/zimg112.nrrd")) ⊛ bspln3;
221 :     // It is valid syntax, but there is a bug in the conversion from HighIL to MidIL
222 :    
223 :     test/zslice2.diderot:
224 :     // HEY (bug) bspln5 leads to problems ...
225 :     // uncaught exception Size [size]
226 :     // raised at c-target/c-target.sml:47.15-47.19
227 :     //field#4(3)[] F = img ⊛ bspln5;

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0