Helpers
RAIMAD defines some helper functions. These are used internally in RAIMAD, but you can also use them for your own benefit.
Geometric helpers
import raimad as rai
from math import degrees
print( rai.midpoint( (-10, -10), (12, 12) ))
print( rai.polar( rai.halfcircle, 5 ))
print( degrees(
rai.angle_between( (0, 10), (2, 2) )
))
(1.0, 1.0)
(-5.0, 6.123233995736766e-16)
-75.96375653207353
Iteration helpers
Python's itertools module also contains some useful iteration helpers.
Overlapping
print(list( rai.iters.duplets( range(10) )))
print(list( rai.iters.triplets( range(10) )))
print(list( rai.iters.quadlets( range(10) )))
print(list( rai.iters.quintlets( range(10) )))
# Custom number
print(list( rai.iters.overlap( 3, range(10) )))
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]
[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9)]
[(0, 1, 2, 3), (1, 2, 3, 4), (2, 3, 4, 5), (3, 4, 5, 6), (4, 5, 6, 7), (5, 6, 7, 8), (6, 7, 8, 9)]
[(0, 1, 2, 3, 4), (1, 2, 3, 4, 5), (2, 3, 4, 5, 6), (3, 4, 5, 6, 7), (4, 5, 6, 7, 8), (5, 6, 7, 8, 9)]
[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9)]
Non-overlapping
print(list( rai.iters.couples( range(10) )))
print(list( rai.iters.triples( range(10) )))
print(list( rai.iters.quadles( range(10) )))
print(list( rai.iters.quintles( range(10) )))
# Custom number
print(list( rai.iters.nonoverlap( 3, range(10) )))
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
[(0, 1, 2, 3), (4, 5, 6, 7)]
[(0, 1, 2, 3, 4), (5, 6, 7, 8, 9)]
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
Flatten and Braid
print( list( rai.flatten( [[[1, 2, 3], [4, 5], [6], 7], 8, 9, 10] )))
print( list( rai.braid( 'abc', [1,2,3], 'あえい' )))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
['a', 1, 'あ', 'b', 2, 'え', 'c', 3, 'い']
Testers
print( rai.iters.is_rotated( [1, 2, 3], [1, 2, 3] ))
print( rai.iters.is_rotated( [1, 2, 3], [2, 3, 1] ))
print( rai.iters.is_rotated( [1, 2, 3], [3, 2, 1] ))
print( rai.iters.is_rotated( [1, 2, '3'], ['3', 1, 2] ))
print( rai.iters.is_rotated( [1, 2, '3'], [3, 1, 2] ))
print( rai.iters.is_rotated(
[1, 2, '3'],
[3, '1', 2],
comparison=lambda a, b: list(map(str, a)) == list(map(str, b))
))
True
True
False
True
False
True
Other helpers
print( rai.custom_base(10, ['O', 'I']), bin(10) )
IOIO 0b1010