Ian Bicking <[EMAIL PROTECTED]> wrote in message news:<[EMAIL PROTECTED]>... > Jive Dadson wrote: > > If you have, for example, several data-types for matrices, how do you > > write code that will automatically find the right routine for quickly > > multiplying a vector by a diagonal matrix represented as a vector, and > > automatically call the right code for multiplying by a sparse matrix > > represented by some sparse coding, etc? > > I haven't been following this thread, but Phillip Eby's recent > implementation of generic functions should be mentioned if it hasn't > been already: > > http://dirtsimple.org/2004/11/generic-functions-have-landed.html > > It might look something like this: > > @dispatch.on('m1', 'm2') > def matrix_mul(m1, m2): > "Multiply two matrices" > > @matrix_mul.when(VectorMatrix, SparseMatrix) > def matrix_mul_sparse(m1, m2): > "Special implementation"
Actually, it would be more like: @dispatch.generic() def matrix_mul(m1, m2): """Multiply two matrices""" @matrix_mul.when("m1 in VectorMatrix and m2 in SparseMatrix") def matrix_mul_sparse(m1, m2): """Special implementation""" The 'dispatch.on()' decorator is for single-dispatch functions only. If you want to dispatch on multiple arguments or on logical conditions, you use 'dispatch.generic()'. The implementations for single and multiple dispatch are completely separate, and use different algorithms. -- http://mail.python.org/mailman/listinfo/python-list