Streams or Infinite Arrays¶
This code is based on the work of Ralf Hemmecke and Martin Rubey’s Aldor-Combinat, which can be found at http://www.risc.uni-linz.ac.at/people/hemmecke/aldor/combinat/index.html. In particular, the relevant section for this file can be found at http://www.risc.uni-linz.ac.at/people/hemmecke/AldorCombinat/combinatse12.html.
-
sage.combinat.species.stream.
Stream
(x=None, const=None)¶ Returns a stream.
EXAMPLES: We can create a constant stream by just passing a
sage: from sage.combinat.species.stream import Stream sage: s = Stream(const=0) sage: [s[i] for i in range(10)] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-
class
sage.combinat.species.stream.
Stream_class
(gen=None, const=None, func=None)¶ Bases:
sage.structure.sage_object.SageObject
EXAMPLES:
sage: from sage.combinat.species.stream import Stream sage: from builtins import zip sage: s = Stream(const=0) sage: len(s) 1 sage: [x for (x,i) in zip(s, range(4))] [0, 0, 0, 0] sage: len(s) 1
sage: s = Stream(const=4) sage: g = iter(s) sage: l1 = [x for (x,i) in zip(g, range(10))] sage: l = [4 for k in range(10)] sage: l == l1 True
sage: h = lambda l: 1 if len(l) < 2 else l[-1] + l[-2] sage: fib = Stream(h) sage: [x for (x,i) in zip(fib, range(11))] [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
sage: r = [4, 3, 5, 2, 6, 1, 1, 1, 1, 1] sage: l = [4, 3, 5, 2, 6, 1] sage: s = Stream(l) sage: s[3] = -1 sage: [x for (x,i) in zip(s, r)] [4, 3, 5, -1, 6, 1, 1, 1, 1, 1] sage: s[5] = -2 sage: [x for (x,i) in zip(s, r)] [4, 3, 5, -1, 6, -2, 1, 1, 1, 1] sage: s[6] = -3 sage: [x for (x,i) in zip(s, r)] [4, 3, 5, -1, 6, -2, -3, 1, 1, 1] sage: s[8] = -4 sage: [x for (x,i) in zip(s, r)] [4, 3, 5, -1, 6, -2, -3, 1, -4, 1] sage: a = Stream(const=0) sage: a[2] = 3 sage: [x for (x,i) in zip(a, range(4))] [0, 0, 3, 0]
-
data
()¶ Returns a list of all the coefficients computed so far.
EXAMPLES:
sage: from sage.combinat.species.stream import Stream, _integers_from sage: s = Stream(_integers_from(3)) sage: s.data() [] sage: s[5] 8 sage: s.data() [3, 4, 5, 6, 7, 8]
-
is_constant
()¶ Returns True if and only if
EXAMPLES:
sage: from sage.combinat.species.stream import Stream sage: s = Stream([1,2,3]) sage: s.is_constant() False sage: s[3] 3 sage: s.data() [1, 2, 3] sage: s.is_constant() True
-
map
(f)¶ EXAMPLES:
sage: from sage.combinat.species.stream import Stream sage: s = Stream(ZZ) sage: square = lambda x: x^2 sage: ss = s.map(square) sage: [ss[i] for i in range(10)] [0, 1, 1, 4, 4, 9, 9, 16, 16, 25]
-
number_computed
()¶ Returns the number of coefficients computed so far.
EXAMPLES:
sage: from sage.combinat.species.stream import Stream sage: l = [4,3,5,7,4,1,9,7] sage: s = Stream(l) sage: s[3] 7 sage: len(s) 4 sage: s[3] 7 sage: len(s) 4 sage: s[1] 3 sage: len(s) 4 sage: s[4] 4 sage: len(s) 5
-
set_gen
(gen)¶ EXAMPLES:
sage: from sage.combinat.species.stream import Stream sage: from builtins import zip sage: fib = Stream() sage: def g(): ....: yield 1 ....: yield 1 ....: n = 0 ....: while True: ....: yield fib[n] + fib[n+1] ....: n += 1
sage: fib.set_gen(g()) sage: [x for (x,i) in zip(fib, range(11))] [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
sage: l = [4,3,5,2,6,1] sage: s = Stream(l) sage: s[3] 2 sage: len(s) 4 sage: g = iter(l) sage: s.set_gen(g) sage: s[5] 3 sage: len(s) 6
-
stretch
(k)¶ EXAMPLES:
sage: from sage.combinat.species.stream import Stream sage: s = Stream(range(1, 10)) sage: s2 = s.stretch(2) sage: [s2[i] for i in range(10)] [1, 0, 2, 0, 3, 0, 4, 0, 5, 0]
-