Hi Eric, My first guess would be to modify the initialization of CommutativeRing to authorize None as a valid input for base_ring.
Now, the base_ring should be the ring with which you will describe your functions. As functions are defined through coordinates in charts, a natural candidate for the base ring would be the common ring of the coordinate charts. I guess that right now, most examples are built upon the symbolic ring. If you want a coordinate free definition, then you might hope that somebody implements the field of real numbers and C^infinity(RR). Best Vincent 2014-03-12 14:41 UTC+01:00, Eric Gourgoulhon <egourgoul...@gmail.com>: > Hi, > > In order to treat tensor fields on a parallelizable domain N of some smooth > > manifold as elements of a free module (cf. > #15916<http://trac.sagemath.org/ticket/15916>and this > post <https://groups.google.com/forum/#!topic/sage-devel/1QzUpHLUw_E>), one > > has first to introduce the commutative ring C^oo(N) of smooth functions N > --> *R*, as a new class, ScalarFieldRing say. Browsing through Sage > reference manual, a natural guess would be to make it a subclass of > CommutativeRing: > > from sage.rings.ring import CommutativeRing > class ScalarFieldRing(CommutativeRing): > def __init__(self, domain): > CommutativeRing.__init__(self, base_ring) > self.domain = domain > > > > The issue here is that CommutativeRing.__init__ requires the argument > "base_ring" and in the present context, I don't know what to put here: the > ring C^oo(N) does not depend upon any other ring. Shall I put self, i.e. > write CommutativeRing.__init__(self, self) ? > > A second solution could be to declare ScalarFieldRing as a subclass of > Ring, in the category of commutative rings: > > from sage.rings.ring import Ring > from sage.categories.commutative_rings import CommutativeRings > class ScalarFieldRing(Ring): > def __init__(self, domain): > Ring.__init__(self, None, category=CommutativeRings()) > self.domain = domain > > > > Here the argument "base" of Ring.__init__ is set to None, which was not > possible for the argument "base_ring" of CommutativeRing.__init__ : this > triggered the error message "TypeError: base ring None is no commutative > ring". > > A third solution is to declare ScalarFieldRing directly as a subclass of > Parent, in the category of commutative rings: > > from sage.structure.parent import Parent > from sage.categories.commutative_rings import CommutativeRings > class ScalarFieldRing(Parent): > def __init__(self, domain): > Parent.__init__(self, category=CommutativeRings()) > self.domain = domain > > > > Which solution is preferable (and why) ? (the three of them seem to work, > at least in the few tests I've performed). Thank you for your help. > > Eric. > > -- > You received this message because you are subscribed to the Google Groups > "sage-devel" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sage-devel+unsubscr...@googlegroups.com. > To post to this group, send email to sage-devel@googlegroups.com. > Visit this group at http://groups.google.com/group/sage-devel. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.