Skip to content

Commit 2445422

Browse files
committed
merge
2 parents d865307 + 4c01f30 commit 2445422

File tree

10 files changed

+224
-418
lines changed

10 files changed

+224
-418
lines changed

README.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,9 @@ Here some example of how to use Streams:
135135
Stream.randint(1, 100).limit(100).toList()
136136
```
137137

138-
* Generate a list of the numbers from 1 to 100
138+
* Print the numbers from 1 to 100
139139
```py
140-
Stream.iterate(1, lambda i: i + 1).limit(100).toList()
140+
Stream.iterate(1, lambda i: i + 1).limit(100).forEach(print)
141141
```
142142

143143
* Generate a list of squares of the number from 1 to 100
@@ -150,6 +150,16 @@ Stream.iterate(1, lambda i: i + 1).map(lambda x: x**2).limit(100).toList()
150150
Stream.generate(lambda: 0).limit(100).toList()
151151
```
152152

153+
* Generate a set of the first 100 odds number
154+
```py
155+
Stream.odds().limit(100).toSet()
156+
```
157+
158+
* Generate a list of all the primes number smaller than 100
159+
```py
160+
Stream.primes().takeWhile(lambda x: x < 100).toList()
161+
```
162+
153163

154164

155165
<!-- ROADMAP -->

parallel_test.py

Lines changed: 0 additions & 189 deletions
This file was deleted.

stream/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
from .stream import *
1+
from .stream import Stream
2+
from .intstream import IntStream

stream/booleans.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from .stream import Stream
2+
import random
3+
4+
5+
class BooleanStream(Stream):
6+
7+
@staticmethod
8+
def random():
9+
'''
10+
Returns an infinite stream of random booleans
11+
12+
:return: a random boolean stream
13+
'''
14+
return BooleanStream(Stream.generate(lambda: random.randint(0, 1) == 1))
15+
16+
@staticmethod
17+
def true():
18+
'''
19+
Returns an infinite stream of True
20+
21+
:return: a True boolean stream
22+
'''
23+
return BooleanStream(Stream.generate(lambda: True))
24+
25+
@staticmethod
26+
def false():
27+
'''
28+
Returns an infinite stream of False
29+
30+
:return: a False boolean stream
31+
'''
32+
return BooleanStream(Stream.generate(lambda: False))
33+
34+
def __init__(self, _stream):
35+
if isinstance(_stream, Stream):
36+
self.iterable = _stream.__iterable
37+
else:
38+
self.iterable = _stream

stream/numbers.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
import math
2+
import random
3+
4+
from .stream import Stream
5+
6+
7+
class NumberStream(Stream):
8+
9+
@staticmethod
10+
def integers():
11+
'''
12+
Returns an infinite stream of integer from 0 to infinity
13+
14+
:return: the infinite stream
15+
'''
16+
return NumberStream(Stream.iterate(0, lambda i: i + 1))
17+
18+
@staticmethod
19+
def odds():
20+
'''
21+
Returns an infinite stream of odds number from 0 to infinity
22+
23+
:return: the infinite stream
24+
'''
25+
return NumberStream(Stream.iterate(1, lambda i: i + 2))
26+
27+
@staticmethod
28+
def evens():
29+
'''
30+
Returns an infinite stream of evens number from 0 to infinity
31+
32+
:return: the infinite stream
33+
'''
34+
return NumberStream(Stream.iterate(0, lambda i: i + 2))
35+
36+
@staticmethod
37+
def primes():
38+
'''
39+
Returns an infinite stream of primes number from 2 to infinity
40+
41+
:return: the infinite stream
42+
'''
43+
def prime_generator():
44+
yield 2
45+
primes = [2]
46+
actual = 1
47+
while True:
48+
actual += 2
49+
for prime in primes:
50+
if actual % prime == 0:
51+
break
52+
else:
53+
primes.append(actual)
54+
yield actual
55+
56+
return NumberStream(prime_generator())
57+
58+
@staticmethod
59+
def randint(lower, upper):
60+
'''
61+
Returns an infinite stream of random integer in range [a, b], including both end points.
62+
63+
:param int lower: min value for random numbers
64+
:param int upper: max value for random numbers
65+
:return: the infinite random stream
66+
'''
67+
return NumberStream(Stream.generate(lambda: random.randint(lower, upper)))
68+
69+
@staticmethod
70+
def random():
71+
'''
72+
Returns an infinite stream of random numbers in range [0, 1], including both end points.
73+
74+
:param int lower: min value for random numbers
75+
:param int upper: max value for random numbers
76+
:return: the infinite random stream
77+
'''
78+
return NumberStream(Stream.generate(random.random))
79+
80+
def __init__(self, _stream):
81+
if isinstance(_stream, Stream):
82+
self.iterable = _stream.iterable
83+
else:
84+
self.iterable = _stream
85+
86+
def smallerThan(self, maximum):
87+
return self.filter(lambda x: x < maximum)
88+
89+
def smallerOrEqualThan(self, maximum):
90+
return self.filter(lambda x: x <= maximum)
91+
92+
def greaterThan(self, minimum):
93+
return self.filter(lambda x: x > minimum)
94+
95+
def greaterOrEqualThan(self, minimum):
96+
return self.filter(lambda x: x >= minimum)
97+
98+
def multipleOf(self, number):
99+
return self.filter(lambda x: x % number == 0)
100+
101+
def square(self):
102+
return self.pow(2)
103+
104+
def cube(self):
105+
return self.pow(3)
106+
107+
def pow(self, power):
108+
return self.map(lambda x: x ** power)
109+
110+
def sqrt(self):
111+
return self.map(math.sqrt)
112+
113+
def log(self):
114+
return self.map(math.log)

0 commit comments

Comments
 (0)