def __init__(self,ringstr="",truncate=None,ring=None,cofac=None,name="z"): '''Ring constructor. ''' if ring == None: if len(ringstr) > 0: sr = StringReader( ringstr ); tok = GenPolynomialTokenizer(sr); pset = tok.nextPolynomialSet(); ring = pset.ring; vname = ring.vars; name = vname[0]; cofac = ring.coFac; if isinstance(cofac,RingElem): cofac = cofac.elem; if truncate == None: self.ring = UnivPowerSeriesRing(cofac,name); else: self.ring = UnivPowerSeriesRing(cofac,truncate,name); else: self.ring = ring;
class SeriesRing: '''Represents a JAS power series ring: UnivPowerSeriesRing. Methods for power series arithmetic. ''' def __init__(self,ringstr="",truncate=None,ring=None,cofac=None,name="z"): '''Ring constructor. ''' if ring == None: if len(ringstr) > 0: sr = StringReader( ringstr ); tok = GenPolynomialTokenizer(sr); pset = tok.nextPolynomialSet(); ring = pset.ring; vname = ring.vars; name = vname[0]; cofac = ring.coFac; if isinstance(cofac,RingElem): cofac = cofac.elem; if truncate == None: self.ring = UnivPowerSeriesRing(cofac,name); else: self.ring = UnivPowerSeriesRing(cofac,truncate,name); else: self.ring = ring; def __str__(self): '''Create a string representation. ''' return str(self.ring); def gens(self): '''Get the generator of the power series ring. ''' return RingElem( self.ring.getONE().shift(1) ); def one(self): '''Get the one of the power series ring. ''' return RingElem( self.ring.getONE() ); def zero(self): '''Get the zero of the power series ring. ''' return RingElem( self.ring.getZERO() ); def random(self,n): '''Get a random power series. ''' return RingElem( self.ring.random(n) ); def exp(self): '''Get the exponential power series. ''' return RingElem( self.ring.getEXP() ); def sin(self): '''Get the sinus power series. ''' return RingElem( self.ring.getSIN() ); def cos(self): '''Get the cosinus power series. ''' return RingElem( self.ring.getCOS() ); def tan(self): '''Get the tangens power series. ''' return RingElem( self.ring.getTAN() ); def create(self,ifunc=None,jfunc=None,clazz=None): '''Create a power series with given generating function. ifunc(int i) must return a value which is used in RingFactory.fromInteger(). jfunc(int i) must return a value of type ring.coFac. clazz must implement the Coefficients abstract class. ''' class coeff( Coefficients ): def __init__(self,cofac): self.coFac = cofac; def generate(self,i): if jfunc == None: return self.coFac.fromInteger( ifunc(i) ); else: return jfunc(i); if clazz == None: ps = UnivPowerSeries( self.ring, coeff(self.ring.coFac) ); else: ps = UnivPowerSeries( self.ring, clazz ); return RingElem( ps ); def fixPoint(self,psmap): '''Create a power series as fixed point of the given mapping. psmap must implement the PowerSeriesMap interface. ''' ps = self.ring.fixPoint( psmap ); return RingElem( ps ); def gcd(self,a,b): '''Compute the greatest common divisor of a and b. ''' if isinstance(a,RingElem): a = a.elem; if isinstance(b,RingElem): b = b.elem; return RingElem( a.gcd(b) ); def from(self,a): '''Convert a GenPolynomial to a power series. ''' if isinstance(a,RingElem): a = a.elem; return RingElem( self.ring.fromPolynomial(a) );