# SCM Repository

# Annotation of /trunk/TODO

Parent Directory | Revision Log

Revision **1133** -
(**view**)
(**download**)

1 : | jhr | 1115 | NOTE: GLK's approximate ranking of 5 most important tagged with |

2 : | [GLK:1], [GLK:2], ... | ||

3 : | |||

4 : | ============================== | ||

5 : | other SHORT TERM ============= (including needed for LIC) | ||

6 : | ============================== | ||

7 : | |||

8 : | glk | 1120 | 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 : | jhr | 1115 | [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 : | IL support for higher-order tensor values (matrices, etc). | ||

30 : | tensor construction [DONE] | ||

31 : | tensor indexing [DONE] | ||

32 : | tensor slicing | ||

33 : | verify that hessians work correctly [DONE] | ||

34 : | |||

35 : | Use ∇⊗ etc. syntax | ||

36 : | syntax [DONE] | ||

37 : | typechecking | ||

38 : | IL and codegen | ||

39 : | |||

40 : | test/uninit.diderot: | ||

41 : | documents need for better compiler error messages when output variables | ||

42 : | are not initialized; the current messages are very cryptic | ||

43 : | |||

44 : | determinant ("det") for tensor[3,3] | ||

45 : | |||

46 : | 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 : | ============================== | ||

55 : | MEDIUM TERM ================== (including needed for streamlines & tractography) | ||

56 : | ============================== | ||

57 : | |||

58 : | [GLK:1] evals & evecs for symmetric tensor[3,3] (requires sequences) | ||

59 : | |||

60 : | [GLK:2] Save Diderot output to nrrd, instead of "mip.txt" | ||

61 : | 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:3] Use of Teem's "hest" command-line parser for getting | ||

68 : | any input variables that are not defined in the source file | ||

69 : | |||

70 : | glk | 1120 | [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 : | jhr | 1115 | |

79 : | extend norm (|exp|) to all tensor types [DONE for vectors and matrices] | ||

80 : | |||

81 : | ability to emit/track/record variables into dynamically re-sized | ||

82 : | runtime buffer | ||

83 : | |||

84 : | 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 : | Want: non-trivial field expressions & functions: | ||

89 : | image(2)[2] Vimg = load(...); | ||

90 : | field#0(2)[] Vlen = |Vimg ⊛ bspln3|; | ||

91 : | to get a scalar field of vector length, or | ||

92 : | field#2(2)[] F = Fimg ⊛ bspln3; | ||

93 : | field#0(2)[] Gmag = |∇F|; | ||

94 : | to get a scalar field of gradient magnitude, or | ||

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

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

109 : | tensor fields: convolution on general tensor images | ||

110 : | |||

111 : | ============================== | ||

112 : | other MEDIUM TERM ============ (needed for particles) | ||

113 : | ============================== | ||

114 : | |||

115 : | glk | 1121 | Put small 1-D and 2-D fields, when reconstructed specifically by tent |

116 : | and when differentiation is not needed, into faster texture buffers. | ||

117 : | test/illust-vr.diderot is good example of program that uses multiple | ||

118 : | such 1-D fields basically as lookup-table-based function evaluation | ||

119 : | glk | 1120 | |

120 : | jhr | 1115 | run-time birth of strands |

121 : | |||

122 : | "initially" supports lists | ||

123 : | |||

124 : | "initially" supports lists of positions output from | ||

125 : | different initalization Diderot program | ||

126 : | |||

127 : | spatial data structure that permits strands' queries of neighbors | ||

128 : | |||

129 : | proper handling of stabilize method | ||

130 : | |||

131 : | test/vr-kcomp2.diderot: Add support for code like | ||

132 : | |||

133 : | (F1 if x else F2)@pos | ||

134 : | |||

135 : | This will require duplication of the continuation of the conditional | ||

136 : | (but we should only duplicate over the live-range of the result of the | ||

137 : | conditional. | ||

138 : | |||

139 : | add ":" for tensor dot product (contracts out two indices | ||

140 : | instead of one like •), valid for all pairs of tensors with | ||

141 : | at least two indices | ||

142 : | |||

143 : | ============================== | ||

144 : | other MEDIUM TERM ============ | ||

145 : | ============================== | ||

146 : | |||

147 : | want: warnings when "D" (reserved for differentiation) is declared as | ||

148 : | a variable name (get confusing error messages now) | ||

149 : | |||

150 : | support for Python interop and GUI | ||

151 : | |||

152 : | Python/ctypes interface to run-time | ||

153 : | |||

154 : | ============================== | ||

155 : | LONG TERM ==================== | ||

156 : | ============================== | ||

157 : | |||

158 : | Better handling of variables that determines the scope of a variable | ||

159 : | based on its actual use, instead of where the user defined it. So, | ||

160 : | for example, we should lift strand-invariant variables to global | ||

161 : | scope. Also prune out useless variables, which should include field | ||

162 : | variables after the translation to mid-il. | ||

163 : | |||

164 : | co- vs contra- index distinction | ||

165 : | |||

166 : | some indication of tensor symmetry | ||

167 : | (have to identify the group of index permutations that are symmetries) | ||

168 : | |||

169 : | dot works on all tensors | ||

170 : | |||

171 : | outer works on all tensors | ||

172 : | |||

173 : | Einstein summation notation | ||

174 : | |||

175 : | "tensor comprehension" (like list comprehension) | ||

176 : | |||

177 : | ====================== | ||

178 : | BUGS ================= | ||

179 : | ====================== | ||

180 : | |||

181 : | test/read2vecs.diderot: | ||

182 : | // HEY (BUG?) shouldn't it be a type error to load this 2-D array of | ||

183 : | // 2-vectors into a 2-D *scalar* field? Instead, get: | ||

184 : | // uncaught exception Fail [Fail: Error in compiling lic.diderot] | ||

185 : | // raised at driver/main.sml:31.39-31.76 | ||

186 : | image(2)[] Vimg = load("../data/vorttest.nrrd"); | ||

187 : | |||

188 : | test/zslice2.diderot: | ||

189 : | // HEY (bug) bspln5 leads to problems ... | ||

190 : | // uncaught exception Size [size] | ||

191 : | // raised at c-target/c-target.sml:47.15-47.19 | ||

192 : | //field#4(3)[] F = img ⊛ bspln5; |

root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |

Powered by ViewVC 1.0.0 |