RAIMAD

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