Ok, I see how that can work. Thanks! It looks like I'll need an LofLUDecomp and UofLUDecomp classes. Alternatively I could make a general FirstArg class and SecondArg class.
If we take this idea ad-naseum we might end up with an IndexOf class. LU = LUDecomposition(X) L = IndexOf(LU, 0) U = IndexOf(LU, 1) QR = QRDecompositoin(X) Q = IndexOf(QR, 0) R = IndexOf(QR, 1) This could then be sugared up with other classes if necessary. I like the idea of using __iter__ to produce these transparently. What do you think of the IndexOf idea. Too odd or just right? On Tue, Oct 9, 2012 at 7:17 PM, Aaron Meurer <[email protected]> wrote: > Well, you could make that syntax work by defining __iter__, so that > > L, U = LUDecomposition(X) > > would be the same as > > LU = LUDecomposition(X) > L, U = LU.L, LU.U > > Wouldn't the type just be MatrixExpr? But I see what you mean now. > L, U, and X are somehow "linked" together. So I guess you might need > to have a separate subclass for L and for U, like LowerTriangular, and > UpperTrangular (except with some better names that suggest that the > objects always have a corresponding dual). Those classes would then > have some properties that point to the corresponding class, and also > back to X. It may actually be overkill to also create LUDecomposition > as a third class (depending again on what you want to do). > > But honestly, the best way to see what the class structure should look > like is to write down all the functionality you want, and then see > what you can factor out into common superclasses. From there, the > names of the classes should be clear by what kind of common > functionality they define. Trying to do this in the other order > (figure out what the common type "names" are and then ask what kind of > functionality they should provide) has never worked for me. I think > it's one of the failures in education about OO design that this way is > what's taught (or at least that's how I first learned it). > > Aaron Meurer > > On Tue, Oct 9, 2012 at 6:04 PM, Matthew Rocklin <[email protected]> > wrote: > > I might want to include in in queries to some sort of assumptions system > > (not yet built). > > > > L, U = LUDecomposition(X) > > > > ask(Q.full_rank(L), Q.full_rank(X)) > > > > How would this work if L and U were properties? What is type(L) in this > > case? > > > > > > On Tue, Oct 9, 2012 at 6:50 PM, Aaron Meurer <[email protected]> wrote: > >> > >> Is it not enough to just have two properties, L and U, of the object? > >> What kinds of things would you want to do with the object? > >> > >> Aaron Meurer > >> > >> On Tue, Oct 9, 2012 at 4:54 PM, Matthew Rocklin <[email protected]> > >> wrote: > >> > What is the best way to represent a symbolic operation in SymPy that > has > >> > multiple outputs? In particular I would like an LUDecomposition > object. > >> > > >> > L, U = LUDecomposition((X*X.T).I*X) > >> > > >> > It's a bit strange because I want to separately refer to two halves of > >> > one > >> > lazily evaluated object. Do we have any solution for this kind of > issue > >> > in > >> > SymPy? > >> > > >> > Best, > >> > -Matt > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups > >> > "sympy" group. > >> > To post to this group, send email to [email protected]. > >> > To unsubscribe from this group, send email to > >> > [email protected]. > >> > 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 [email protected]. > >> To unsubscribe from this group, send email to > >> [email protected]. > >> 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 [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > 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 [email protected]. > To unsubscribe from this group, send email to > [email protected]. > 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 [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
