File size: 1,215 Bytes
df5dab1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
C_SLICE = ":><"  # 0 - range, 1 - first, 2 - last
C_JOIN = ",;~&^$}" # 0 - append, 1 - first length, 2 - cut, 3 - maximum, 4 - sidechain
C_MISC = "'\"`i@_?%#![]"
# 0 ',1 " - sample, 2 ` - sample uncut, 3 i - current, 4 @ - random, 
# # 5 _ - random sep, 6 ? - not count, 7 % - create variable, 8 # - shuffle, 9 ! skip
# 10, 11 [] - song
C_MATH = '+-*/.'
C_MATH_STRICT = '.+-*/'

def _safer_eval(string:str) -> float:
    if isinstance(string, str): 
        try:
            for i in (C_MISC[4], C_MISC[7], C_MISC[8]):
                if i in string: string = string[:string.find(i)]
            string = string.replace('{', '<').replace('}', '>')
            string = eval(''.join([i for i in string if i.isdecimal() or i in C_MATH]))
        except (NameError, SyntaxError): string = 1
    return string

def _safer_eval_strict(string:str) -> float:
    if isinstance(string, str): 
        for n, v in enumerate(string):
            assert v in C_MATH_STRICT or v == ' ' or v.isdecimal, f"_safer_eval_strict error: {string}[{n}] = {v}, which isn't a decimal, isn't in {C_MATH_STRICT} and isn't a space"
        string = eval(''.join([i for i in string if i.isdecimal() or i in C_MATH_STRICT]))
    return string