23 
SHORTISH TERM ========= (to make using Diderot less annoying to 
SHORTISH TERM ========= (to make using Diderot less annoying to 
24 
======================== program in, and slow to execute) 
======================== program in, and slow to execute) 
25 


26 
valuenumbering optimization 
valuenumbering optimization [DONE, but needs more testing] 
27 


28 

Allow ".ddro" file extensions in addition to ".diderot" 
29 


30 

Be able to output values of type tensor[2,2] and tensor[3,3]; 
31 

(currently only scalars & vectors). Want to add some regression tests 
32 

based on this and currently can't 
33 


34 
[GLK:1] Add a clamp function, which takes three arguments; either 
[GLK:1] Add a clamp function, which takes three arguments; either 
35 
three scalars: 
three scalars: 
181 
There is value in having these, even if the differentiation of them is 
There is value in having these, even if the differentiation of them is 
182 
not supported (hence the indication of "field#0" for these above) 
not supported (hence the indication of "field#0" for these above) 
183 


184 

Introduce region types (syntax region(d), where d is the dimension of the 
185 

region. One useful operator would be 
186 

dom : field#k(d)[s] > region(d) 
187 

Then the inside test could be written as 
188 

pos ∈ dom(F) 
189 

We could further extend this approach to allow geometric definitions of 
190 

regions. It might also be useful to do inside tests in world space, 
191 

instead of image space. 
192 


193 
co vs contra index distinction 
co vs contra index distinction 
194 


195 
Permit field composition: 
Permit field composition: 
215 
field#0(2)[] F = lambda([x,y], Ft([x,y,42.0])) // restriction to time=42.0 
field#0(2)[] F = lambda([x,y], Ft([x,y,42.0])) // restriction to time=42.0 
216 
vec2 grad = ∇F([x,y]); // 2D gradient 
vec2 grad = ∇F([x,y]); // 2D gradient 
217 


218 

Tensors of order 3 (e.g. gradients of diffusion tensor fields, or 
219 

hessians of vector fields) and order 4 (e.g. Hessians of diffusion 
220 

tensor fields). 
221 


222 
representation of tensor symmetry 
representation of tensor symmetry 
223 
(have to identify the group of index permutations that are symmetries) 
(have to identify the group of index permutations that are symmetries) 
224 


226 


227 
outer works on all tensors 
outer works on all tensors 
228 


229 

Help for debugging Diderot programs: need to be able to uniquely 
230 

identify strands, and for particular strands that are known to behave 
231 

badly, do something like printf or other logging of their computations 
232 

and updates. 
233 


234 

Permit writing dimensionally general code: Have some statement of the 
235 

dimension of the world "W" (or have it be learned from one particular 
236 

field of interest), and then able to write "vec" instead of 
237 

"vec2/vec3", and perhaps "tensor[W,W]" instead of 
238 

"tensor[2,2]/tensor[3,3]" 
239 


240 

Traits: all things things that have boilerplate code (especially 
241 

volume rendering) should be expressed in terms of the unique 
242 

computational core. Different kinds of streamline/tractography 
243 

computation will be another example, as well as particle systems. 
244 


245 
Einstein summation notation 
Einstein summation notation 
246 


247 
"tensor comprehension" (like list comprehension) 
"tensor comprehension" (like list comprehension) 
248 


249 

Fields coming from different sources of data: 
250 

* triangular or tetrahedral meshes over 2D or 3D domains (of the 
251 

source produced by finiteelement codes; these will come with their 
252 

own specialized kinds of reconstruction kernels, called "basis 
253 

functions" in this context) 
254 

* Large point clouds, with some radial basis function around each point, 
255 

which will be tuned by parameters of the point (at least one parameter 
256 

giving some notion of radius) 
257 


258 
====================== 
====================== 
259 
BUGS ================= 
BUGS ================= 
260 
====================== 
====================== 