Home My Page Projects Code Snippets Project Openings diderot

# SCM Repository

[diderot] Diff of /branches/pure-cfg/TODO
 [diderot] / branches / pure-cfg / TODO

# Diff of /branches/pure-cfg/TODO

revision 784, Fri Apr 8 01:56:35 2011 UTC revision 949, Fri Apr 22 19:20:24 2011 UTC
# Line 2  Line 2
2  SHORT TERM =============  (for curvature-based VR)  SHORT TERM =============  (for curvature-based VR)
3  ========================  ========================
4
5  Outer products  IL support for higher-order tensor values (matrices, etc).
6      syntax [DONE]      tensor construction [DONE]
7      typechecking      tensor indexing [DONE]
8      IL and codegen      tensor slicing
9        verify that hessians work correctly [DONE]
10
11  Add M dot v, v dot M, and M dot N  Outer products [DONE]
12
13  Identity matrix [DONE up to code generation]  Add M dot v, v dot M, and M dot N [DONE]
14
15  determinant ("det") for tensor[3,3]  Identity matrix [DONE]
16
17  trace [DONE]  Zero tensor [DONE]
18
19  expand trace in mid to low translation  trace [DONE]
20
21  extend norm (|exp|) to all tensor types  extend norm (|exp|) to tensor[3,3] [DONE]
22
23  extend normalize to all tensor types  Matrix addition, subtraction, and scaling  [DONE]
24
25  Use ∇⊗ etc syntax  Use ∇⊗ etc. syntax
26      syntax [DONE]      syntax [DONE]
27      typechecking      typechecking
28      IL and codegen      IL and codegen
# Line 32  Line 33
33          value construction: '{' e1 ',' … ',' en '}'          value construction: '{' e1 ',' … ',' en '}'
34          indexing: e '{' e '}'          indexing: e '{' e '}'
35
IL support for higher-order tensor values (matrices, etc).
tensor construction
tensor indexing and slicing
verify that hessians work correctly

Add type aliases for color types
rgb = real{3}
rgba = real{4}

Decide if we want to allow redefinitions of variables
(as in vr-lite-cam.diderot)

36  Infix dot product and cross product [DONE]  Infix dot product and cross product [DONE]
37
38  lerp on scalars and vectors [DONE]  lerp on scalars and vectors [DONE]
39
40    Infix "^" operator for pow() [DONE]
41
42    Code generation support for 1D image data, such as RGBA transfer functions [DONE]
43
44  ==============================  ==============================
45  other SHORT TERM =============  (needed for LIC)  other SHORT TERM =============  (including needed for LIC)
46  ==============================  ==============================
47
48  vector fields: convolution on vector images  test/uninit.diderot:
49    documents need for better compiler error messages when output variables
50    are not initialized; the current messages are very cryptic
51
52    determinant ("det") for tensor[3,3]
53
54    extend norm (|exp|) to all tensor types [DONE for vectors and matrices]
55
56    expand trace in mid to low translation
57
58    value-numbering optimization
59
60    Add type aliases for color types
61        rgb = real{3}
62        rgba = real{4}
63
64  ==============================  ==============================
65  MEDIUM TERM ================== (needed for streamlines & tractography)  MEDIUM TERM ================== (including needed for streamlines & tractography)
66  ==============================  ==============================
67
68    Want: allow X *= Y, X /= Y, X += Y, X -= Y to mean what they do in C,
69    provided that X*Y, X/Y, X+Y, X-Y are already supported.
70    Nearly every Diderot program would be simplified by this.
71
72    Want: ability to apply "normalize" to a field itself, e.g.
73      field#1(2)[2] V = normalize(Vimg ⊛ ctmr);
74    so that V(x) = normalize((Vimg ⊛ ctmr)(x)).
75    (For now, it would be okay for the differentability of V to be 0;
76    later we can teach Diderot the quotient rule of derivatives.)
77    Having this would simplify expression of standard LIC method, and
78    would also help express other vector field expressions that arise
79    in vector field feature exraction
80    Related to this and possibly simpler:
82      field#1(2)[] Vlen = |Vimg ⊛ ctmr|;
83    to get a scalar field of vector length, or
84      field#1(2)[] F = Fimg ⊛ ctmr;
85      field#1(2)[] Gmag = |∇F|;
86    to get a scalar field of gradient magnitude, or
87      field#1(2)[] F = Fimg ⊛ ctmr;
88      field#1(2)[] Gmsq = ∇F•∇F;
89    to get a scalar field of squared gradient magnitude
90    (which is simpler to differentiate)
91
92    ability to declare a field in such a way so that probe
93    positions are *always* clamped to the support of "inside";
94    there are many cases where this is the sensible behavior
95
96  ability to emit/track/record variables into dynamically re-sized  ability to emit/track/record variables into dynamically re-sized
97  runtime buffer  runtime buffer
98
# Line 65  Line 100
100
101  tensor fields: convolution on general tensor images  tensor fields: convolution on general tensor images
102
103    Use of Teem's "hest" command-line parser for getting
104    any input variables that are not defined in the source file
105
106    Save Diderot output to nrrd, instead of "mip.txt"
107      For grid of strands, save to similarly-shaped array
108      For list of strands, save to long 1-D (or 2-D for non-scalar output) list
109      For ragged things (like tractography output), will need to save both
110        complete list of values, as well as list of start indices and lengths
111        to index into complete list
112
113  ==============================  ==============================
114  other MEDIUM TERM ============ (needed for particles)  other MEDIUM TERM ============ (needed for particles)
115  ==============================  ==============================
# Line 80  Line 125
125
126  proper handling of stabilize method  proper handling of stabilize method
127
128    test/vr-kcomp2.diderot: Add support for code like
129
130            (F1 if x else F2)@pos
131
132    This will require duplication of the continuation of the conditional (but we should only
133    duplicate over the live-range of the result of the conditional.
134
135    ==============================
136    other MEDIUM TERM ============
137    ==============================
138
139    want: warnings when "D" (reserved for differentiation) is declared as
140    a variable name (get confusing error messages now)
141
142    support for Python interop and GUI
143
144  ==============================  ==============================
145  LONG TERM ====================  LONG TERM ====================
146  ==============================  ==============================
147
148    Better handling of variables that determines the scope of a variable
149    based on its actual use, instead of where the user defined it.  So,
150    for example, we should lift strand-invariant variables to global
151    scope.  Also prune out useless variables, which should include field
152    variables after the translation to mid-il.
153
154  co- vs contra- index distinction  co- vs contra- index distinction
155
156  add ":" for tensor dot product (contracts out two indices  add ":" for tensor dot product (contracts out two indices
# Line 101  Line 168
168
169  "tensor comprehension" (like list comprehension)  "tensor comprehension" (like list comprehension)
170
171    Python/ctypes interface to run-timez
172
173  ======================  ======================
174  BUGS =================  BUGS =================
175  ======================  ======================
176
177    test/fields.diderot:
178    documents various bugs/questions associated with field expressions
179
180  test/mip-cam.diderot:  test/mip-cam.diderot:
181      // generated C code looks like "(float)p_ui_0--0.5e0f"      // generated C code looks like "(float)p_ui_0--0.5e0f"
182      //real rayU = 2.0*camUmax*(real(ui) - -0.5)/real(imgResU) - camUmax;      //real rayU = 2.0*camUmax*(real(ui) - -0.5)/real(imgResU) - camUmax;
# Line 112  Line 184
184  test/vr-kcomp.diderot:  test/vr-kcomp.diderot:
185      // HEY (scoping BUG): the strand parameters (e.g. ui, vi) ...      // HEY (scoping BUG): the strand parameters (e.g. ui, vi) ...
186
test/vr-lite-cam.diderot:
// HEY (BUG): these:
//   vec3 lightVspDir = [1.0, -0.0, 0.0];
//   vec3 lightVspDir = [1.0, 0.0, -0.0];
// work okay but this:
//   vec3 lightVspDir = [1.0, 0.0, 0.0]; ...

187  test/zslice2.diderot:  test/zslice2.diderot:
188  // but is this not valid syntax for creating field in one shot?  // but is this not valid syntax for creating field in one shot?
189  //field#2(3)[] F = (load("../data/zimg112.nrrd")) ⊛ bspln3;  //field#2(3)[] F = (load("../data/zimg112.nrrd")) ⊛ bspln3;
# Line 129  Line 194
194  //  uncaught exception Size [size]  //  uncaught exception Size [size]
195  //    raised at c-target/c-target.sml:47.15-47.19  //    raised at c-target/c-target.sml:47.15-47.19
196  //field#4(3)[] F = img ⊛ bspln5;  //field#4(3)[] F = img ⊛ bspln5;

Legend:
 Removed from v.784 changed lines Added in v.949