Le jeudi 12 mai 2011 à 18:41 -0700, SherjilOzair a écrit : > > On May 13, 5:23 am, Ronan Lamy <ronan.l...@gmail.com> wrote: > > Le vendredi 13 mai 2011 à 03:51 +0400, Sherjil Ozair a écrit : > > > > > > > > > > > > > > > > > > > > > Hello everyone, > > > > > I took ideas from mattpap's thesis at [1], specifically the idea of > > > multi level structure. > > > > > The hierarchy I have in mind is > > > > > Level 0 : A collection of functions that operate on groundtypes(GMPY, > > > Python, Sympy). > > > Functions of this layer will receive the Matrix data as arguments. > > > Function names will be prefixed with identifiers as to which data > > > structure it works on. > > > This layer is unaware of Matrix classes. > > > Functions of this level can only call functions of the same level. > > > All the algorithms for factorization, etc. will be implemented in this > > > level. > > > > > Level 1 : A collection of classes like DOKMatrix, COOMatrix, > > > DenseMatrix, etc. > > > The data structure is defined in this class. > > > This class will have user functions which use the functions of level > > > 0. > > > > > Level 2 : The Matrix class > > > These class which will return one of the class of level 1 using the > > > __new__ function. > > > > > This idea is still unformed. I invite comments to help me evolve this > > > idea. > > > Ask if you feel something is not clear. > > > > Frankly, that's a bad idea. Object-oriented design was invented to be > > able to write M.do_stuff() instead of COOMatrix_do_stuff(M). Choosing to > > use the latter in Python is absurd and inefficient - in a word, > > unpythonic - because you'll waste a lot of time and brain power doing > > stuff the interpreter could do for you while missing out on optimisation > > opportunities since your code is less readable and less modular. > > > > At the other end, having Matrix.__new__ do weird and wonderful things > > turns it into a magic black box that can't be picked apart. > > > > The Pythonic version of your idea is to define a common interface for > > your classes in an abstract base class (= your level 2), then make your > > classes subclasses of that (= your level 1) and implement the interface > > with efficient algorithms adapted to each data structure and as many > > private helpers and specialised manipulation methods as you see fit (= > > your level 0). > > I think you're right if we're constrained to follow OO design. Polys > is more like the structure I presented. > Yours is the OO structure. But in your structure, how do you plan to > encapsulate everything into one user level class ? > Since (in your structure), the Data structure classes are at the > bottommost level in the inheritance tree, do you expect the user to > call A = DOKMatrix(...) ?
Yes, if the user wants a DOKMatrix, he should get one. > Private functions should be inside the Data Structure classes > (DOKMatrix, COOMatrix, etc.) ? What if one DS class needs to use a > function of another DS class ? If one class needs to use a method of another, then either the method should be public or the classes should both inherit the method from a common ancestor. > > What is the purpose of the abstract base class in your structure ? To define the interface common to all classes. > Will it contain any code ? If yes, what ? It can contain default implementations that work for all subclasses but could be overridden more efficiently in some. > I agree that my design isn't 100% OO, but I feel that OO isn't the way > to go about this, similar to Polys. Object-oriented design is the way to go whenever you think of something in terms of objects. And your design is actually quite object-oriented anyway - name-mangling with a class name is one way of doing OOD in C. > > > > > > > [1]http://mattpap.github.com/masters-thesis/html/src/internals.html > > > > > -- > > > You received this message because you are subscribed to the Google > > > Groups "sympy" group. > > > To post to this group, send email to sympy@googlegroups.com. > > > To unsubscribe from this group, send email to sympy > > > +unsubscr...@googlegroups.com. > > > For more options, visit this group at > > >http://groups.google.com/group/sympy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sympy@googlegroups.com. To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.