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 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