Streams¶
This module provides lazy implementations of basic operators on streams. The classes implemented in this module can be used to build up more complex streams for different kinds of series (Laurent, Dirichlet, etc).
EXAMPLES:
Streams can be used as data structure for lazy Laurent series:
sage: L.<z> = LazyLaurentSeriesRing(ZZ)
sage: f = L(lambda n: n, valuation=0)
sage: f
z + 2*z^2 + 3*z^3 + 4*z^4 + 5*z^5 + 6*z^6 + O(z^7)
sage: type(f._coeff_stream)
<class 'sage.data_structures.stream.Stream_function'>
There are basic unary and binary operators available for streams. For example, we can add two streams:
sage: from sage.data_structures.stream import *
sage: f = Stream_function(lambda n: n, QQ, True, 0)
sage: [f[i] for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sage: g = Stream_function(lambda n: 1, QQ, True, 0)
sage: [g[i] for i in range(10)]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
sage: h = Stream_add(f, g)
sage: [h[i] for i in range(10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
We can subtract one stream from another:
sage: h = Stream_sub(f, g)
sage: [h[i] for i in range(10)]
[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8]
There is a Cauchy product on streams:
sage: h = Stream_cauchy_mul(f, g)
sage: [h[i] for i in range(10)]
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]
We can compute the inverse corresponding to the Cauchy product:
sage: ginv = Stream_cauchy_invert(g)
sage: h = Stream_cauchy_mul(f, ginv)
sage: [h[i] for i in range(10)]
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Two streams can be composed:
sage: g = Stream_function(lambda n: n, QQ, True, 1)
sage: h = Stream_cauchy_compose(f, g)
sage: [h[i] for i in range(10)]
[0, 1, 4, 14, 46, 145, 444, 1331, 3926, 11434]
There is a unary negation operator:
sage: h = Stream_neg(f)
sage: [h[i] for i in range(10)]
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
More generally, we can multiply by a scalar:
sage: h = Stream_lmul(f, 2)
sage: [h[i] for i in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Finally, we can apply an arbitrary functions to the elements of a stream:
sage: h = Stream_map_coefficients(f, lambda n: n^2, QQ)
sage: [h[i] for i in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
AUTHORS:
Kwankyu Lee (2019-02-24): initial version
Tejasvi Chebrolu, Martin Rubey, Travis Scrimshaw (2021-08): refactored and expanded functionality
- class sage.data_structures.stream.Stream(sparse, approximate_order)¶
Bases:
objectAbstract base class for all streams.
INPUT:
sparse– boolean; whether the implementation of the stream is sparseapproximate_order– integer; a lower bound for the order of the stream
- is_nonzero()¶
Return
Trueif and only if this stream is known to be nonzero.The default implementation is
False.EXAMPLES:
sage: from sage.data_structures.stream import Stream sage: CS = Stream(True, 1) sage: CS.is_nonzero() False
- class sage.data_structures.stream.Stream_add(left, right)¶
Bases:
sage.data_structures.stream.Stream_binaryCommutativeOperator for addition of two coefficient streams.
INPUT:
left– stream of coefficients on the left side of the operatorright– stream of coefficients on the right side of the operator
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_add, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, 0) sage: g = Stream_function(lambda n: 1, ZZ, True, 0) sage: h = Stream_add(f, g) sage: [h[i] for i in range(10)] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] sage: u = Stream_add(g, f) sage: [u[i] for i in range(10)] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_function, Stream_add) sage: f = Stream_function(lambda n: n, ZZ, True, 0) sage: g = Stream_function(lambda n: n^2, ZZ, True, 0) sage: h = Stream_add(f, g) sage: h.get_coefficient(5) 30 sage: [h.get_coefficient(i) for i in range(10)] [0, 2, 6, 12, 20, 30, 42, 56, 72, 90]
- class sage.data_structures.stream.Stream_binary(left, right, *args, **kwargs)¶
Bases:
sage.data_structures.stream.Stream_inexactBase class for binary operators on coefficient streams.
INPUT:
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_function, Stream_add, Stream_sub) sage: f = Stream_function(lambda n: 2*n, ZZ, True, 0) sage: g = Stream_function(lambda n: n, ZZ, True, 1) sage: h = Stream_add(f, g) sage: [h[i] for i in range(10)] [0, 3, 6, 9, 12, 15, 18, 21, 24, 27] sage: h = Stream_sub(f, g) sage: [h[i] for i in range(10)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- class sage.data_structures.stream.Stream_binaryCommutative(left, right, *args, **kwargs)¶
Bases:
sage.data_structures.stream.Stream_binaryBase class for commutative binary operators on coefficient streams.
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_function, Stream_add) sage: f = Stream_function(lambda n: 2*n, ZZ, True, 0) sage: g = Stream_function(lambda n: n, ZZ, True, 1) sage: h = Stream_add(f, g) sage: [h[i] for i in range(10)] [0, 3, 6, 9, 12, 15, 18, 21, 24, 27] sage: u = Stream_add(g, f) sage: [u[i] for i in range(10)] [0, 3, 6, 9, 12, 15, 18, 21, 24, 27] sage: h == u True
- class sage.data_structures.stream.Stream_cauchy_compose(f, g)¶
Bases:
sage.data_structures.stream.Stream_binaryReturn
fcomposed byg.This is the composition \((f \circ g)(z) = f(g(z))\).
INPUT:
EXAMPLES:
sage: from sage.data_structures.stream import Stream_cauchy_compose, Stream_function sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_function(lambda n: 1, ZZ, True, 1) sage: h = Stream_cauchy_compose(f, g) sage: [h[i] for i in range(10)] [0, 1, 3, 8, 20, 48, 112, 256, 576, 1280] sage: u = Stream_cauchy_compose(g, f) sage: [u[i] for i in range(10)] [0, 1, 3, 8, 21, 55, 144, 377, 987, 2584]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import Stream_function, Stream_cauchy_compose sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_function(lambda n: n^2, ZZ, True, 1) sage: h = Stream_cauchy_compose(f, g) sage: h.get_coefficient(5) 527 sage: [h.get_coefficient(i) for i in range(10)] [0, 1, 6, 28, 124, 527, 2172, 8755, 34704, 135772]
- class sage.data_structures.stream.Stream_cauchy_invert(series)¶
Bases:
sage.data_structures.stream.Stream_unaryOperator for multiplicative inverse of the stream.
INPUT:
series– aStream
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_cauchy_invert, Stream_function) sage: f = Stream_function(lambda n: 1, ZZ, True, 1) sage: g = Stream_cauchy_invert(f) sage: [g[i] for i in range(10)] [-1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_cauchy_invert, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_cauchy_invert(f) sage: g.get_coefficient(5) 0 sage: [g.get_coefficient(i) for i in range(10)] [-2, 1, 0, 0, 0, 0, 0, 0, 0, 0]
- is_nonzero()¶
Return
Trueif and only if this stream is known to be nonzero.An assumption of this class is that it is nonzero.
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_cauchy_invert, Stream_function) sage: f = Stream_function(lambda n: n^2, ZZ, False, 1) sage: g = Stream_cauchy_invert(f) sage: g.is_nonzero() True
- iterate_coefficients()¶
A generator for the coefficients of
self.EXAMPLES:
sage: from sage.data_structures.stream import (Stream_cauchy_invert, Stream_function) sage: f = Stream_function(lambda n: n^2, ZZ, False, 1) sage: g = Stream_cauchy_invert(f) sage: n = g.iterate_coefficients() sage: [next(n) for i in range(10)] [1, -4, 7, -8, 8, -8, 8, -8, 8, -8]
- class sage.data_structures.stream.Stream_cauchy_mul(left, right)¶
Bases:
sage.data_structures.stream.Stream_binaryOperator for multiplication of two coefficient streams using the Cauchy product.
We are not assuming commutativity of the coefficient ring here, only that the coefficient ring commutes with the (implicit) variable.
INPUT:
left– stream of coefficients on the left side of the operatorright– stream of coefficients on the right side of the operator
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_cauchy_mul, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, 0) sage: g = Stream_function(lambda n: 1, ZZ, True, 0) sage: h = Stream_cauchy_mul(f, g) sage: [h[i] for i in range(10)] [0, 1, 3, 6, 10, 15, 21, 28, 36, 45] sage: u = Stream_cauchy_mul(g, f) sage: [u[i] for i in range(10)] [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_function, Stream_cauchy_mul) sage: f = Stream_function(lambda n: n, ZZ, True, 0) sage: g = Stream_function(lambda n: n^2, ZZ, True, 0) sage: h = Stream_cauchy_mul(f, g) sage: h.get_coefficient(5) 50 sage: [h.get_coefficient(i) for i in range(10)] [0, 0, 1, 6, 20, 50, 105, 196, 336, 540]
- is_nonzero()¶
Return
Trueif and only if this stream is known to be nonzero.EXAMPLES:
sage: from sage.data_structures.stream import (Stream_function, ....: Stream_cauchy_mul, Stream_cauchy_invert) sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_cauchy_mul(f, f) sage: g.is_nonzero() False sage: fi = Stream_cauchy_invert(f) sage: h = Stream_cauchy_mul(fi, fi) sage: h.is_nonzero() True
- class sage.data_structures.stream.Stream_dirichlet_convolve(left, right)¶
Bases:
sage.data_structures.stream.Stream_binaryOperator for the Dirichlet convolution of two streams.
INPUT:
left– stream of coefficients on the left side of the operatorright– stream of coefficients on the right side of the operator
The coefficient of \(n^{-s}\) in the convolution of \(l\) and \(r\) equals \(\sum_{k | n} l_k r_{n/k}\).
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_dirichlet_convolve, Stream_function, Stream_exact) sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_exact([0], True, constant=1) sage: h = Stream_dirichlet_convolve(f, g) sage: [h[i] for i in range(1, 10)] [1, 3, 4, 7, 6, 12, 8, 15, 13] sage: [sigma(n) for n in range(1, 10)] [1, 3, 4, 7, 6, 12, 8, 15, 13] sage: u = Stream_dirichlet_convolve(g, f) sage: [u[i] for i in range(1, 10)] [1, 3, 4, 7, 6, 12, 8, 15, 13]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_dirichlet_convolve, Stream_function, Stream_exact) sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_exact([0], True, constant=1) sage: h = Stream_dirichlet_convolve(f, g) sage: h.get_coefficient(7) 8 sage: [h[i] for i in range(1, 10)] [1, 3, 4, 7, 6, 12, 8, 15, 13]
- class sage.data_structures.stream.Stream_dirichlet_invert(series)¶
Bases:
sage.data_structures.stream.Stream_unaryOperator for inverse with respect to Dirichlet convolution of the stream.
INPUT:
series– aStream
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_dirichlet_invert, Stream_function) sage: f = Stream_function(lambda n: 1, ZZ, True, 1) sage: g = Stream_dirichlet_invert(f) sage: [g[i] for i in range(10)] [0, 1, -1, -1, 0, -1, 1, -1, 0, 0] sage: [moebius(i) for i in range(10)] [0, 1, -1, -1, 0, -1, 1, -1, 0, 0]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_exact, Stream_dirichlet_invert) sage: f = Stream_exact([0, 3], True, constant=2) sage: g = Stream_dirichlet_invert(f) sage: g.get_coefficient(6) 2/27 sage: [g[i] for i in range(8)] [0, 1/3, -2/9, -2/9, -2/27, -2/9, 2/27, -2/9]
- class sage.data_structures.stream.Stream_exact(initial_coefficients, is_sparse, constant=None, degree=None, order=None)¶
Bases:
sage.data_structures.stream.StreamA stream of eventually constant coefficients.
INPUT:
initial_values– a list of initial valuesis_sparse– boolean; specifies whether the stream is sparseorder– integer (default: 0); determining the degree of the first element ofinitial_valuesdegree– integer (optional); determining the degree of the first element which is known to be equal toconstantconstant– integer (default: 0); the coefficient of every index larger than or equal todegree
- is_nonzero()¶
Return
Trueif and only if this stream is known to be nonzero.An assumption of this class is that it is nonzero.
EXAMPLES:
sage: from sage.data_structures.stream import Stream_exact sage: s = Stream_exact([2], False, order=-1, degree=2, constant=1) sage: s.is_nonzero() True
- order()¶
Return the order of
self, which is the minimum indexnsuch thatself[n]is nonzero.EXAMPLES:
sage: from sage.data_structures.stream import Stream_exact sage: s = Stream_exact([1], False) sage: s.order() 0
- class sage.data_structures.stream.Stream_function(function, ring, is_sparse, approximate_order)¶
Bases:
sage.data_structures.stream.Stream_inexactClass that creates a stream from a function on the integers.
INPUT:
function– a function that generates the coefficients of the streamring– the base ringis_sparse– boolean; specifies whether the stream is sparseapproximate_order– integer; a lower bound for the order of the stream
EXAMPLES:
sage: from sage.data_structures.stream import Stream_function sage: f = Stream_function(lambda n: n^2, ZZ, False, 1) sage: f[3] 9 sage: [f[i] for i in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import Stream_function sage: f = Stream_function(lambda n: n, QQ, True, 0) sage: f.get_coefficient(4) 4
- iterate_coefficients()¶
A generator for the coefficients of
self.EXAMPLES:
sage: from sage.data_structures.stream import Stream_function sage: f = Stream_function(lambda n: 1, QQ, False, 0) sage: n = f.iterate_coefficients() sage: [next(n) for _ in range(10)] [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
- class sage.data_structures.stream.Stream_inexact(is_sparse, approximate_order)¶
Bases:
sage.data_structures.stream.StreamAn abstract base class for the stream when we do not know it is eventually constant.
INPUT:
sparse– boolean; whether the implementation of the stream is sparseapproximate_order– integer; a lower bound for the order of the stream
- is_nonzero()¶
Return
Trueif and only if the cache contains a nonzero element.EXAMPLES:
sage: from sage.data_structures.stream import Stream_function sage: CS = Stream_function(lambda n: 1/n, ZZ, False, 1) sage: CS.is_nonzero() False sage: CS[1] 1 sage: CS.is_nonzero() True
- iterate_coefficients()¶
A generator for the coefficients of
self.EXAMPLES:
sage: from sage.data_structures.stream import Stream_function, Stream_cauchy_compose sage: f = Stream_function(lambda n: 1, ZZ, False, 1) sage: g = Stream_function(lambda n: n^3, ZZ, False, 1) sage: h = Stream_cauchy_compose(f, g) sage: n = h.iterate_coefficients() sage: [next(n) for i in range(10)] [1, 9, 44, 207, 991, 4752, 22769, 109089, 522676, 2504295]
- order()¶
Return the order of
self, which is the minimum indexnsuch thatself[n]is nonzero.EXAMPLES:
sage: from sage.data_structures.stream import Stream_function sage: f = Stream_function(lambda n: n, QQ, True, 0) sage: f.order() 1
- class sage.data_structures.stream.Stream_lmul(series, scalar)¶
Bases:
sage.data_structures.stream.Stream_scalarOperator for multiplying a coefficient stream with a scalar as
self * scalar.INPUT:
series– aStreamscalar– a scalar
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_lmul, Stream_function) sage: W = algebras.DifferentialWeyl(QQ, names=('x',)) sage: x, dx = W.gens() sage: f = Stream_function(lambda n: x^n, W, True, 1) sage: g = Stream_lmul(f, dx) sage: [g[i] for i in range(5)] [0, x*dx, x^2*dx, x^3*dx, x^4*dx]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_lmul, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_lmul(f, 3) sage: g.get_coefficient(5) 15 sage: [g.get_coefficient(i) for i in range(10)] [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
- class sage.data_structures.stream.Stream_map_coefficients(series, function, ring)¶
Bases:
sage.data_structures.stream.Stream_inexactThe stream with
functionapplied to each nonzero coefficient ofseries.INPUT:
series– aStreamfunction– a function that modifies the elements of the streamring– the base ring of the stream
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_map_coefficients, Stream_function) sage: f = Stream_function(lambda n: 1, ZZ, True, 1) sage: g = Stream_map_coefficients(f, lambda n: -n, ZZ) sage: [g[i] for i in range(10)] [0, -1, -1, -1, -1, -1, -1, -1, -1, -1]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_map_coefficients, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, -1) sage: g = Stream_map_coefficients(f, lambda n: n^2 + 1, ZZ) sage: g.get_coefficient(5) 26 sage: [g.get_coefficient(i) for i in range(-1, 10)] [2, 0, 2, 5, 10, 17, 26, 37, 50, 65, 82] sage: R.<x,y> = ZZ[] sage: f = Stream_function(lambda n: n, ZZ, True, -1) sage: g = Stream_map_coefficients(f, lambda n: n.degree() + 1, R) sage: [g.get_coefficient(i) for i in range(-1, 3)] [1, 0, 1, 1] sage: f = Stream_function(lambda n: n, ZZ, True, 0) sage: g = Stream_map_coefficients(f, lambda n: 5, GF(3)) sage: [g.get_coefficient(i) for i in range(10)] [0, 5, 5, 0, 5, 5, 0, 5, 5, 0]
- class sage.data_structures.stream.Stream_neg(series)¶
Bases:
sage.data_structures.stream.Stream_unaryOperator for negative of the stream.
INPUT:
series– aStream
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_neg, Stream_function) sage: f = Stream_function(lambda n: 1, ZZ, True, 1) sage: g = Stream_neg(f) sage: [g[i] for i in range(10)] [0, -1, -1, -1, -1, -1, -1, -1, -1, -1]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_neg, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_neg(f) sage: g.get_coefficient(5) -5 sage: [g.get_coefficient(i) for i in range(10)] [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
- is_nonzero()¶
Return
Trueif and only if this stream is known to be nonzero.EXAMPLES:
sage: from sage.data_structures.stream import (Stream_neg, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_neg(f) sage: g.is_nonzero() False sage: from sage.data_structures.stream import Stream_cauchy_invert sage: fi = Stream_cauchy_invert(f) sage: g = Stream_neg(fi) sage: g.is_nonzero() True
- class sage.data_structures.stream.Stream_rmul(series, scalar)¶
Bases:
sage.data_structures.stream.Stream_scalarOperator for multiplying a coefficient stream with a scalar as
scalar * self.INPUT:
series– aStreamscalar– a scalar
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_rmul, Stream_function) sage: W = algebras.DifferentialWeyl(QQ, names=('x',)) sage: x, dx = W.gens() sage: f = Stream_function(lambda n: x^n, W, True, 1) sage: g = Stream_rmul(f, dx) sage: [g[i] for i in range(5)] [0, x*dx + 1, x^2*dx + 2*x, x^3*dx + 3*x^2, x^4*dx + 4*x^3]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_rmul, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_rmul(f, 3) sage: g.get_coefficient(5) 15 sage: [g.get_coefficient(i) for i in range(10)] [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
- class sage.data_structures.stream.Stream_scalar(series, scalar)¶
Bases:
sage.data_structures.stream.Stream_inexactBase class for operators multiplying a coeffeicient stream by a scalar.
- is_nonzero()¶
Return
Trueif and only if this stream is known to be nonzero.EXAMPLES:
sage: from sage.data_structures.stream import (Stream_rmul, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, 1) sage: g = Stream_rmul(f, 2) sage: g.is_nonzero() False sage: from sage.data_structures.stream import Stream_cauchy_invert sage: fi = Stream_cauchy_invert(f) sage: g = Stream_rmul(fi, 2) sage: g.is_nonzero() True
- class sage.data_structures.stream.Stream_shift(series, shift)¶
Bases:
sage.data_structures.stream.Stream_inexactOperator for shifting the stream.
INPUT:
series– aStreamshift– an integer
- is_nonzero()¶
Return
Trueif and only if this stream is known to be nonzero.An assumption of this class is that it is nonzero.
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_cauchy_invert, Stream_function) sage: f = Stream_function(lambda n: n^2, ZZ, False, 1) sage: g = Stream_cauchy_invert(f) sage: g.is_nonzero() True
- class sage.data_structures.stream.Stream_sub(left, right)¶
Bases:
sage.data_structures.stream.Stream_binaryOperator for subtraction of two coefficient streams.
INPUT:
left– stream of coefficients on the left side of the operatorright– stream of coefficients on the right side of the operator
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_sub, Stream_function) sage: f = Stream_function(lambda n: n, ZZ, True, 0) sage: g = Stream_function(lambda n: 1, ZZ, True, 0) sage: h = Stream_sub(f, g) sage: [h[i] for i in range(10)] [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8] sage: u = Stream_sub(g, f) sage: [u[i] for i in range(10)] [1, 0, -1, -2, -3, -4, -5, -6, -7, -8]
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_function, Stream_sub) sage: f = Stream_function(lambda n: n, ZZ, True, 0) sage: g = Stream_function(lambda n: n^2, ZZ, True, 0) sage: h = Stream_sub(f, g) sage: h.get_coefficient(5) -20 sage: [h.get_coefficient(i) for i in range(10)] [0, 0, -2, -6, -12, -20, -30, -42, -56, -72]
- class sage.data_structures.stream.Stream_unary(series, *args, **kwargs)¶
Bases:
sage.data_structures.stream.Stream_inexactBase class for unary operators on coefficient streams.
INPUT:
series–Streamthe operator acts on
EXAMPLES:
sage: from sage.data_structures.stream import (Stream_function, Stream_cauchy_invert, Stream_lmul) sage: f = Stream_function(lambda n: 2*n, ZZ, False, 1) sage: g = Stream_cauchy_invert(f) sage: [g[i] for i in range(10)] [-1, 1/2, 0, 0, 0, 0, 0, 0, 0, 0] sage: g = Stream_lmul(f, 2) sage: [g[i] for i in range(10)] [0, 4, 8, 12, 16, 20, 24, 28, 32, 36]
- class sage.data_structures.stream.Stream_uninitialized(is_sparse, approximate_order)¶
Bases:
sage.data_structures.stream.Stream_inexactCoefficient stream for an uninitialized series.
INPUT:
is_sparse– boolean; which specifies whether the stream is sparseapproximate_order– integer; a lower bound for the order of the stream
EXAMPLES:
sage: from sage.data_structures.stream import Stream_uninitialized sage: from sage.data_structures.stream import Stream_exact sage: one = Stream_exact([1], True) sage: C = Stream_uninitialized(True, 0) sage: C._target sage: C._target = one sage: C.get_coefficient(4) 0
- get_coefficient(n)¶
Return the
n-th coefficient ofself.INPUT:
n– integer; the degree for the coefficient
EXAMPLES:
sage: from sage.data_structures.stream import Stream_uninitialized sage: from sage.data_structures.stream import Stream_exact sage: one = Stream_exact([1], True) sage: C = Stream_uninitialized(True, 0) sage: C._target sage: C._target = one sage: C.get_coefficient(0) 1
- iterate_coefficients()¶
A generator for the coefficients of
self.EXAMPLES:
sage: from sage.data_structures.stream import Stream_uninitialized sage: from sage.data_structures.stream import Stream_exact sage: z = Stream_exact([1], True, order=1) sage: C = Stream_uninitialized(True, 0) sage: C._target sage: C._target = z sage: n = C.iterate_coefficients() sage: [next(n) for _ in range(10)] [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
- class sage.data_structures.stream.Stream_zero(sparse)¶
Bases:
sage.data_structures.stream.StreamA coefficient stream that is exactly equal to zero.
INPUT:
sparse– boolean; whether the coefficient stream is sparse or not
EXAMPLES:
sage: from sage.data_structures.stream import Stream_zero sage: s = Stream_zero(True) sage: s[5] 0
- order()¶
Return the order of
self, which isinfinity.EXAMPLES:
sage: from sage.data_structures.stream import Stream_zero sage: s = Stream_zero(True) sage: s.order() +Infinity