in rtfm/dynamics/dice.py [0:0]
def from_str(cls, s):
dice = []
for sub in s.split('+'):
sub = sub.strip()
if 'd' not in sub:
constant = int(sub)
dice.append(ConstantDice(constant))
else:
splits = sub.split('d')
if len(splits) == 1:
num = 1
max_roll = splits[0]
elif len(splits) == 2:
num, max_roll = splits
if num == '':
num = 1
else:
raise Exception('could not parse dice string {} in main dice string {}'.format(sub, s))
dice.extend([SingleDice(max=int(max_roll)) for _ in range(int(num))])
return SumDice(dice) if len(dice) > 1 else dice[0]