I have worked around with Mul and Add, so I know pretty well how they work, but I haven't worked with Symbol as much. Ondrej and others who wrote the core will know much better. Also, is there a specific class that you are considering if it should be a subclass of Symbol?
Aaron Meurer On Aug 1, 2009, at 12:53 PM, Marco wrote: > > Hi Aaron, > Can you explain the thinking behind the Symbol class? I looked at the > doc string but it's not clear how general this kind of object is. > > Thanks > > On Jul 31, 11:16 pm, "Aaron S. Meurer" <[email protected]> wrote: >> On Jul 31, 2009, at 8:42 PM, Marco wrote: >> >> >> >>> Hi Aaron, >> >>> The Set class is important to have as a master class for all kinds >>> of >>> other classes which should exist, such as Group, Field, Vector >>> space, >>> Algebra, etc. As it is in Category theory. >> >>> A Python set may indeed be a good place to start, but as you >>> suggest, >>> it would only be a finite set of objects. There should be a more >>> general Set class, so that for example we would have a set called >>> the >>> Rationals, which itself is a class, and this set would have >>> properties >>> such that 5/6 in Rationals would evaluate as True, even though 5/6 >>> was >>> not specifically instantiated beforehand. >> >> This should be easy. We have a Rational class that is what every >> rational number is an instance of. For example, 5/6 as a rational >> number in SymPy would be represented as Rational(5, 6). It would be >> easy to create a RationalSet class that checks to see if something is >> an instance of Rational or if it has Rational assumptions on it in >> RationalSet.__contains__(). So for example, >> >>> Rational(5, 6) in RationalSet >> and >> >>> a = Symbol('a', rational=True) >> >>> a in RationalSet >> >> would both return True. This should work very nicely with our new >> assumptions system that we are getting. >> >> >> >>> In terms of what I have in mind for calculations, there are so many! >> >>> For example, out of a manifold one creates many vector bundles and >>> vector spaces, such as the tangent bundle and the vector space of >>> differential forms (these are possibly the most famous but there are >>> many others) There are many calculations which can be done with >>> forms, taking interior and exterior products, derivatives, etc. >>> Most >>> of the time we don't do these calculations in coordinates - they are >>> coordinate-free (this is where their main power comes from). Even >>> when we work on specific manifolds like spheres or tori, we still do >>> not do our calculations in coordinates except in the most necessary >>> cases, and in this case we choose coordinates in special ways. >> >>> As an example, you could calculate the following fact: if X is a >>> vector field and a is a 1-form, and p is a differential form (of >>> mixed >>> degree) then there is a universal identity >> >>> (X + a)(X + a)p = a(X) p, >> >> I am not familiar with the theory of manifolds, but I think I can see >> that there really are things to be calculated here. >> >> >> >> >> >>> where the left hand side is interior product by X and exterior >>> product >>> by a, done twice, and the right hand side is just multiplication >>> by >>> a scalar a(X). >> >>> This kind of calculation is usually done by hand, without >>> coordinates, >>> just using the intrinsic behaviour of the quantities X, a, p. >> >>> Another issue is that we often combine vector spaces - we take >>> direct >>> sums, tensor products, exterior products of vector bundles and of >>> vector spaces... To extend all our operations to these spaces should >>> be easy if they inherit from the right master classes... usually in >>> the maple or mathematica packages i've used, the operations are not >>> defined in this object-oriented way and so you have to teach the >>> computer all your operations again, even though it should be obvious >>> what they mean, because of inheritance. >> >> I think having a master Set class would even help for some of the >> other thing that SymPy does. For example, I would assume that Set >> would be able to easily represent that it is the union of two other >> sets, either by having that build in to the class or by having a >> Union >> subclass. We could then make Interval a subclass of set and it would >> be easy to represent something like [1, 2]U[3, 4]. We could even >> have >> infinite union support and be able to easily represent something like >> R - Z as ...U(-1, 0)U(0, 1)U(1, 2)U.... It would fit in nicely if, >> for example, an object has the assumptions real=True and >> integer=False, if and only if it is a member of that set. >> >> Great! Looking forward. >> >> Aaron Meurer > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
