> In the abstract sense, if you have a set of operators and states: > > A, B, C > |a>, |b>, |c> > > you don't really know how to apply the operators until you choose a basis: > > A|a> = Sum(<n|A|m><m|a>, m) > > Thus, I think the base multiplication operations we are using should > not apply the operators. With that said, there *are* cases where a > particular subclass of these objects would know how to carry out the > multiplication. Thus, I guess I think it depends. I think the > general rule should be this: > > If if is obvious how to carry out an operation (Mul, Sum, etc) *and* > every user would always want it to be carried out, then we should do > it automatically. This is the approach in SymPy that is used in > general and I think it applies here as well. > > But, I do agree that in some cases this rule will lead us to apply > operations automatically. How does that sound?
The way opeket works is that you define kets by an eigenvalue and an operator for which the ket is an eigenvector. For example Ket(2,'A') is an eigenvector of operator 'A' with eigenvalue 2. Then, if you define the operator 'A' with A = Operator('A') then A*Ket(2,'A') = 2*Ket(2,'A'). In case you try to do something like Operator('B')*Ket(2,'A') the expression is left alone as is, since we don't know how to evaluate it. Usually the label which is not the eigenvector can be understood as the Hilbert space in which the ket lives. > Here is a start... > > * Basic objects: > > Operator > Ket > Bra > BasisSet > DiscreteBasisSet > ContinuousBasisSet > Orthogonal/NonOrthogonal versions of basis sets. > > * Operations > > Dagger > InnerProduct > OuterProduct > Sum, Mul of scalar vectors > DirectProduct (|a>|b>) > Representation of a Bra, Ket, Operator in a given basis. With the scheme I mentioned above we'll only need... *Basic Objects Operator Bra Ket I'm still not sure if Operator should be only one kind of thing or maybe a couple of different things. For example, creation and annihilation operators can be a kind of operators which is implemented with a python function and we could have "symbolic" operators which only hold the place of an operator. This is not clear to me so I still want to think about it and get back to you once I figure it out. *Operatons Dagger Product (A single type of product can represent InnerProduct and OuterProduct), it can be Mul or a special purpose product What do you mean by Sum, Mul of scalar vectors? The approach used in openket seems to be limited but really it is very general and practical. > Let me know if you want me to post a branch on git hub for this or if > you want to do that and then we can get started. I prefer it if you post the branch on git hub. I will send you my github username by email. > Out of curiosity, where are you located Asaf? I'm an almost ex-(undergraduate student) of physics located in Mexico :) Greetings, Asaf -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sy...@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.